comparison event.c @ 387:dca6aca09653

simplified configurerequest
author Anselm R. Garbe <arg@10kloc.org>
date Tue, 29 Aug 2006 19:24:28 +0200
parents 58288246d16c
children 1da9a6b94ca9
comparison
equal deleted inserted replaced
386:58288246d16c 387:dca6aca09653
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);