new resize stuff (using XConfigureWindow instead of XSendEvent)
52021851
2 file(s) · +20 −31
| 271 | 271 | { |
|
| 272 | 272 | int bottom = c->y + c->h; |
|
| 273 | 273 | int right = c->x + c->w; |
|
| 274 | - | XConfigureEvent e; |
|
| 274 | + | XWindowChanges wc; |
|
| 275 | 275 | ||
| 276 | 276 | if(sizehints) { |
|
| 277 | 277 | if(c->incw) |
|
| 287 | 287 | if(c->maxh && c->h > c->maxh) |
|
| 288 | 288 | c->h = c->maxh; |
|
| 289 | 289 | } |
|
| 290 | - | if(c->x > sw) /* might happen on restart */ |
|
| 291 | - | c->x = sw - c->w; |
|
| 292 | - | if(c->y > sh) |
|
| 293 | - | c->y = sh - c->h; |
|
| 294 | 290 | if(sticky == TopRight || sticky == BotRight) |
|
| 295 | 291 | c->x = right - c->w; |
|
| 296 | 292 | if(sticky == BotLeft || sticky == BotRight) |
|
| 297 | 293 | c->y = bottom - c->h; |
|
| 298 | 294 | ||
| 299 | 295 | resizetitle(c); |
|
| 300 | - | XSetWindowBorderWidth(dpy, c->win, 1); |
|
| 301 | - | XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h); |
|
| 302 | 296 | ||
| 303 | - | e.type = ConfigureNotify; |
|
| 304 | - | e.event = c->win; |
|
| 305 | - | e.window = c->win; |
|
| 306 | - | e.x = c->x; |
|
| 307 | - | e.y = c->y; |
|
| 308 | - | e.width = c->w; |
|
| 309 | - | e.height = c->h; |
|
| 310 | - | e.border_width = c->border; |
|
| 311 | - | e.above = None; |
|
| 312 | - | e.override_redirect = False; |
|
| 313 | - | XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *)&e); |
|
| 297 | + | if(c->tags[tsel]) |
|
| 298 | + | wc.x = c->x; |
|
| 299 | + | else |
|
| 300 | + | wc.x = c->x + 2 * sw; |
|
| 301 | + | wc.y = c->y; |
|
| 302 | + | wc.width = c->w; |
|
| 303 | + | wc.height = c->h; |
|
| 304 | + | wc.border_width = 1; |
|
| 305 | + | XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc); |
|
| 314 | 306 | XSync(dpy, False); |
|
| 315 | 307 | } |
|
| 316 | 308 | ||
| 153 | 153 | XConfigureRequestEvent *ev = &e->xconfigurerequest; |
|
| 154 | 154 | XWindowChanges wc; |
|
| 155 | 155 | ||
| 156 | - | ev->value_mask &= ~CWSibling; |
|
| 157 | 156 | if((c = getclient(ev->window))) { |
|
| 158 | 157 | gravitate(c, True); |
|
| 159 | 158 | if(ev->value_mask & CWX) |
|
| 169 | 168 | gravitate(c, False); |
|
| 170 | 169 | resize(c, True, TopLeft); |
|
| 171 | 170 | } |
|
| 172 | - | ||
| 173 | - | wc.x = ev->x; |
|
| 174 | - | wc.y = ev->y; |
|
| 175 | - | wc.width = ev->width; |
|
| 176 | - | wc.height = ev->height; |
|
| 177 | - | wc.border_width = 1; |
|
| 178 | - | wc.sibling = None; |
|
| 179 | - | wc.stack_mode = Above; |
|
| 180 | - | ev->value_mask &= ~CWStackMode; |
|
| 181 | - | ev->value_mask |= CWBorderWidth; |
|
| 182 | - | XConfigureWindow(dpy, ev->window, ev->value_mask, &wc); |
|
| 183 | - | XSync(dpy, False); |
|
| 171 | + | else { |
|
| 172 | + | wc.x = ev->x; |
|
| 173 | + | wc.y = ev->y; |
|
| 174 | + | wc.width = ev->width; |
|
| 175 | + | wc.height = ev->height; |
|
| 176 | + | wc.border_width = 1; |
|
| 177 | + | XConfigureWindow(dpy, ev->window, |
|
| 178 | + | CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc); |
|
| 179 | + | XSync(dpy, False); |
|
| 180 | + | } |
|
| 184 | 181 | } |
|
| 185 | 182 | ||
| 186 | 183 | static void |
|