changeset 491 | 12395ef46d97 |
parent 490 | 303d3384720e |
child 492 | 5df494262dfd |
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]) { |