146 } |
146 } |
147 } |
147 } |
148 } |
148 } |
149 |
149 |
150 static void |
150 static void |
|
151 synconfig(Client *c, int x, int y, int w, int h, unsigned int border) |
|
152 { |
|
153 XEvent synev; |
|
154 |
|
155 synev.type = ConfigureNotify; |
|
156 synev.xconfigure.display = dpy; |
|
157 synev.xconfigure.event = c->win; |
|
158 synev.xconfigure.window = c->win; |
|
159 synev.xconfigure.x = x; |
|
160 synev.xconfigure.y = y; |
|
161 synev.xconfigure.width = w; |
|
162 synev.xconfigure.height = h; |
|
163 synev.xconfigure.border_width = border; |
|
164 synev.xconfigure.above = None; |
|
165 XSendEvent(dpy, c->win, True, NoEventMask, &synev); |
|
166 } |
|
167 |
|
168 static void |
151 configurerequest(XEvent *e) |
169 configurerequest(XEvent *e) |
152 { |
170 { |
153 unsigned long newmask; |
171 unsigned long newmask; |
154 Client *c; |
172 Client *c; |
155 XConfigureRequestEvent *ev = &e->xconfigurerequest; |
173 XConfigureRequestEvent *ev = &e->xconfigurerequest; |
156 XEvent synev; |
|
157 XWindowChanges wc; |
174 XWindowChanges wc; |
158 |
175 |
159 if((c = getclient(ev->window))) { |
176 if((c = getclient(ev->window))) { |
160 if(!c->isfloat && (arrange != dofloat) && c->ismax) { |
177 if(!c->isfloat && (arrange != dofloat) && c->ismax) { |
161 synev.type = ConfigureNotify; |
178 synconfig(c, sx, sy + bh, sw - 2, sh - 2 - bh, ev->border_width); |
162 synev.xconfigure.display = dpy; |
179 XSync(dpy, False); |
163 synev.xconfigure.event = c->win; |
|
164 synev.xconfigure.window = c->win; |
|
165 synev.xconfigure.x = sx; |
|
166 synev.xconfigure.y = sy + bh; |
|
167 synev.xconfigure.width = sw - 2; |
|
168 synev.xconfigure.height = sw - 2 - bh; |
|
169 synev.xconfigure.border_width = ev->border_width; |
|
170 synev.xconfigure.above = None; |
|
171 XSendEvent(dpy, c->win, True, NoEventMask, &synev); |
|
172 return; |
180 return; |
173 } |
181 } |
174 gravitate(c, True); |
182 gravitate(c, True); |
175 if(ev->value_mask & CWX) |
183 if(ev->value_mask & CWX) |
176 c->x = ev->x; |
184 c->x = ev->x; |
188 wc.width = c->w; |
196 wc.width = c->w; |
189 wc.height = c->h; |
197 wc.height = c->h; |
190 newmask = ev->value_mask & (~(CWSibling | CWStackMode | CWBorderWidth)); |
198 newmask = ev->value_mask & (~(CWSibling | CWStackMode | CWBorderWidth)); |
191 if(newmask) |
199 if(newmask) |
192 XConfigureWindow(dpy, c->win, newmask, &wc); |
200 XConfigureWindow(dpy, c->win, newmask, &wc); |
193 else { |
201 else |
194 synev.type = ConfigureNotify; |
202 synconfig(c, c->x, c->y, c->w, c->h, c->border); |
195 synev.xconfigure.display = dpy; |
|
196 synev.xconfigure.event = c->win; |
|
197 synev.xconfigure.window = c->win; |
|
198 synev.xconfigure.x = c->x; |
|
199 synev.xconfigure.y = c->y; |
|
200 synev.xconfigure.width = c->w; |
|
201 synev.xconfigure.height = c->h; |
|
202 synev.xconfigure.border_width = c->border; |
|
203 synev.xconfigure.above = None; |
|
204 XSendEvent(dpy, c->win, True, NoEventMask, &synev); |
|
205 } |
|
206 XSync(dpy, False); |
203 XSync(dpy, False); |
207 if(c->isfloat) |
204 if(c->isfloat) |
208 resize(c, False, TopLeft); |
205 resize(c, False, TopLeft); |
209 else |
206 else |
210 arrange(NULL); |
207 arrange(NULL); |