Mercurial > dwm-meillo
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); |