164 } |
164 } |
165 } |
165 } |
166 |
166 |
167 static void |
167 static void |
168 configurerequest(XEvent *e) { |
168 configurerequest(XEvent *e) { |
169 unsigned long newmask; |
|
170 Client *c; |
169 Client *c; |
171 XConfigureRequestEvent *ev = &e->xconfigurerequest; |
170 XConfigureRequestEvent *ev = &e->xconfigurerequest; |
172 XWindowChanges wc; |
171 XWindowChanges wc; |
173 |
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 = ev->border_width; |
|
178 wc.sibling = ev->above; |
|
179 wc.stack_mode = ev->detail; |
174 if((c = getclient(ev->window))) { |
180 if((c = getclient(ev->window))) { |
175 c->ismax = False; |
181 c->ismax = False; |
176 if(ev->value_mask & CWX) |
|
177 c->x = ev->x; |
|
178 if(ev->value_mask & CWY) |
|
179 c->y = ev->y; |
|
180 if(ev->value_mask & CWWidth) |
|
181 c->w = ev->width; |
|
182 if(ev->value_mask & CWHeight) |
|
183 c->h = ev->height; |
|
184 if(ev->value_mask & CWBorderWidth) |
182 if(ev->value_mask & CWBorderWidth) |
185 c->border = ev->border_width; |
183 c->border = ev->border_width; |
186 wc.x = c->x; |
184 if((!c->isfloat && (arrange != dofloat)) |
187 wc.y = c->y; |
185 || ((ev->value_mask & (CWX|CWY)) && !(ev->value_mask & (CWWidth|CWHeight)))) |
188 wc.width = c->w; |
186 { |
189 wc.height = c->h; |
|
190 newmask = ev->value_mask & (~(CWSibling | CWStackMode | CWBorderWidth)); |
|
191 if(newmask) |
|
192 XConfigureWindow(dpy, c->win, newmask, &wc); |
|
193 else |
|
194 configure(c); |
187 configure(c); |
195 XSync(dpy, False); |
188 XSync(dpy, False); |
196 if(c->isfloat) { |
189 return; |
197 resize(c, False); |
190 } |
198 if(!isvisible(c)) |
191 } |
199 XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); |
192 XConfigureWindow(dpy, ev->window, ev->value_mask, &wc); |
200 } |
193 if(c && !isvisible(c)) |
201 else |
194 XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); |
202 arrange(); |
195 XSync(dpy, False); |
203 } |
|
204 else { |
|
205 wc.x = ev->x; |
|
206 wc.y = ev->y; |
|
207 wc.width = ev->width; |
|
208 wc.height = ev->height; |
|
209 wc.border_width = ev->border_width; |
|
210 wc.sibling = ev->above; |
|
211 wc.stack_mode = ev->detail; |
|
212 XConfigureWindow(dpy, ev->window, ev->value_mask, &wc); |
|
213 XSync(dpy, False); |
|
214 } |
|
215 } |
196 } |
216 |
197 |
217 static void |
198 static void |
218 destroynotify(XEvent *e) { |
199 destroynotify(XEvent *e) { |
219 Client *c; |
200 Client *c; |