comparison event.c @ 491:12395ef46d97

added configure(), but this doesn't really fix those frking broken SDL apps
author arg@mmvi
date Tue, 26 Sep 2006 07:40:19 +0200
parents 303d3384720e
children 5df494262dfd
comparison
equal deleted inserted replaced
490:303d3384720e 491:12395ef46d97
1 #include <stdio.h>
1 /* 2 /*
2 * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com> 3 * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com>
3 * See LICENSE file for license details. 4 * See LICENSE file for license details.
4 */ 5 */
5 #include "dwm.h" 6 #include "dwm.h"
36 XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui); 37 XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui);
37 for(;;) { 38 for(;;) {
38 XMaskEvent(dpy, MOUSEMASK | ExposureMask, &ev); 39 XMaskEvent(dpy, MOUSEMASK | ExposureMask, &ev);
39 switch (ev.type) { 40 switch (ev.type) {
40 case ButtonRelease: 41 case ButtonRelease:
42 resize(c, True, TopLeft);
41 XUngrabPointer(dpy, CurrentTime); 43 XUngrabPointer(dpy, CurrentTime);
42 return; 44 return;
43 case Expose: 45 case Expose:
44 handler[Expose](&ev); 46 handler[Expose](&ev);
45 break; 47 break;
69 XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w, c->h); 71 XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w, c->h);
70 for(;;) { 72 for(;;) {
71 XMaskEvent(dpy, MOUSEMASK | ExposureMask, &ev); 73 XMaskEvent(dpy, MOUSEMASK | ExposureMask, &ev);
72 switch(ev.type) { 74 switch(ev.type) {
73 case ButtonRelease: 75 case ButtonRelease:
76 resize(c, True, TopLeft);
74 XUngrabPointer(dpy, CurrentTime); 77 XUngrabPointer(dpy, CurrentTime);
75 return; 78 return;
76 case Expose: 79 case Expose:
77 handler[Expose](&ev); 80 handler[Expose](&ev);
78 break; 81 break;
149 Client *c; 152 Client *c;
150 XConfigureRequestEvent *ev = &e->xconfigurerequest; 153 XConfigureRequestEvent *ev = &e->xconfigurerequest;
151 XEvent synev; 154 XEvent synev;
152 XWindowChanges wc; 155 XWindowChanges wc;
153 156
157 fputs("configurerequest\n", stderr);
154 if((c = getclient(ev->window))) { 158 if((c = getclient(ev->window))) {
155 c->ismax = False; 159 c->ismax = False;
156 gravitate(c, True); 160 gravitate(c, True);
157 if(ev->value_mask & CWX) 161 if(ev->value_mask & CWX)
158 c->x = ev->x; 162 c->x = ev->x;
170 wc.width = c->w; 174 wc.width = c->w;
171 wc.height = c->h; 175 wc.height = c->h;
172 newmask = ev->value_mask & (~(CWSibling | CWStackMode | CWBorderWidth)); 176 newmask = ev->value_mask & (~(CWSibling | CWStackMode | CWBorderWidth));
173 if(newmask) 177 if(newmask)
174 XConfigureWindow(dpy, c->win, newmask, &wc); 178 XConfigureWindow(dpy, c->win, newmask, &wc);
175 else { 179 else
176 synev.type = ConfigureNotify; 180 configure(c);
177 synev.xconfigure.display = dpy;
178 synev.xconfigure.event = c->win;
179 synev.xconfigure.window = c->win;
180 synev.xconfigure.x = c->x;
181 synev.xconfigure.y = c->y;
182 synev.xconfigure.width = c->w;
183 synev.xconfigure.height = c->h;
184 synev.xconfigure.border_width = c->border;
185 synev.xconfigure.above = None;
186 XSendEvent(dpy, c->win, True, NoEventMask, &synev);
187 }
188 XSync(dpy, False); 181 XSync(dpy, False);
189 if(c->isfloat) 182 if(c->isfloat)
190 resize(c, False, TopLeft); 183 resize(c, False, TopLeft);
191 else 184 else
192 arrange(NULL); 185 arrange(NULL);
216 static void 209 static void
217 enternotify(XEvent *e) { 210 enternotify(XEvent *e) {
218 Client *c; 211 Client *c;
219 XCrossingEvent *ev = &e->xcrossing; 212 XCrossingEvent *ev = &e->xcrossing;
220 213
214 fputs("enternotify\n", stderr);
221 if(ev->mode != NotifyNormal || ev->detail == NotifyInferior) 215 if(ev->mode != NotifyNormal || ev->detail == NotifyInferior)
222 return; 216 return;
223 217
224 if(((c = getclient(ev->window)) || (c = getctitle(ev->window))) && isvisible(c)) 218 if(((c = getclient(ev->window)) || (c = getctitle(ev->window))) && isvisible(c))
225 focus(c); 219 focus(c);
303 propertynotify(XEvent *e) { 297 propertynotify(XEvent *e) {
304 Client *c; 298 Client *c;
305 Window trans; 299 Window trans;
306 XPropertyEvent *ev = &e->xproperty; 300 XPropertyEvent *ev = &e->xproperty;
307 301
302 fputs("propertynotify\n", stderr);
308 if(ev->state == PropertyDelete) 303 if(ev->state == PropertyDelete)
309 return; /* ignore */ 304 return; /* ignore */
310 305
311 if((c = getclient(ev->window))) { 306 if((c = getclient(ev->window))) {
312 if(ev->atom == wmatom[WMProtocols]) { 307 if(ev->atom == wmatom[WMProtocols]) {