Mercurial > dwm-meillo
comparison event.c @ 708:a2d568a5cdb8
applied Sanders all5.patch (thanks for your weekend session, Sander!)
author | Anselm R. Garbe <arg@suckless.org> |
---|---|
date | Mon, 22 Jan 2007 10:22:58 +0100 |
parents | c3c57faef013 |
children | 6c2fcf88dd9f |
comparison
equal
deleted
inserted
replaced
707:c3c57faef013 | 708:a2d568a5cdb8 |
---|---|
33 None, cursor[CurMove], CurrentTime) != GrabSuccess) | 33 None, cursor[CurMove], CurrentTime) != GrabSuccess) |
34 return; | 34 return; |
35 c->ismax = False; | 35 c->ismax = False; |
36 XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui); | 36 XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui); |
37 for(;;) { | 37 for(;;) { |
38 XMaskEvent(dpy, MOUSEMASK | ExposureMask, &ev); | 38 XMaskEvent(dpy, MOUSEMASK | ExposureMask | SubstructureRedirectMask, &ev); |
39 switch (ev.type) { | 39 switch (ev.type) { |
40 case ButtonRelease: | 40 case ButtonRelease: |
41 resize(c, True, TopLeft); | 41 resize(c, True); |
42 XUngrabPointer(dpy, CurrentTime); | 42 XUngrabPointer(dpy, CurrentTime); |
43 return; | 43 return; |
44 case ConfigureRequest: | |
44 case Expose: | 45 case Expose: |
45 handler[Expose](&ev); | 46 case MapRequest: |
47 handler[ev.type](&ev); | |
46 break; | 48 break; |
47 case MotionNotify: | 49 case MotionNotify: |
48 XSync(dpy, False); | 50 XSync(dpy, False); |
49 c->x = ocx + (ev.xmotion.x - x1); | 51 c->x = ocx + (ev.xmotion.x - x1); |
50 c->y = ocy + (ev.xmotion.y - y1); | 52 c->y = ocy + (ev.xmotion.y - y1); |
51 if(abs(wax + c->x) < SNAP) | 53 if(abs(wax + c->x) < SNAP) |
52 c->x = wax; | 54 c->x = wax; |
53 else if(abs((wax + waw) - (c->x + c->w)) < SNAP) | 55 else if(abs((wax + waw) - (c->x + c->w + 2 * c->border)) < SNAP) |
54 c->x = wax + waw - c->w - 2 * BORDERPX; | 56 c->x = wax + waw - c->w - 2 * c->border; |
55 if(abs(way - c->y) < SNAP) | 57 if(abs(way - c->y) < SNAP) |
56 c->y = way; | 58 c->y = way; |
57 else if(abs((way + wah) - (c->y + c->h)) < SNAP) | 59 else if(abs((way + wah) - (c->y + c->h + 2 * c->border)) < SNAP) |
58 c->y = way + wah - c->h - 2 * BORDERPX; | 60 c->y = way + wah - c->h - 2 * c->border; |
59 resize(c, False, TopLeft); | 61 resize(c, False); |
60 break; | 62 break; |
61 } | 63 } |
62 } | 64 } |
63 } | 65 } |
64 | 66 |
65 static void | 67 static void |
66 resizemouse(Client *c) { | 68 resizemouse(Client *c) { |
67 int ocx, ocy; | 69 int ocx, ocy; |
68 int nw, nh; | 70 int nw, nh; |
69 Corner sticky; | |
70 XEvent ev; | 71 XEvent ev; |
71 | 72 |
72 ocx = c->x; | 73 ocx = c->x; |
73 ocy = c->y; | 74 ocy = c->y; |
74 if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, | 75 if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, |
75 None, cursor[CurResize], CurrentTime) != GrabSuccess) | 76 None, cursor[CurResize], CurrentTime) != GrabSuccess) |
76 return; | 77 return; |
77 c->ismax = False; | 78 c->ismax = False; |
78 XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w, c->h); | 79 XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->border - 1, c->h + c->border - 1); |
79 for(;;) { | 80 for(;;) { |
80 XMaskEvent(dpy, MOUSEMASK | ExposureMask, &ev); | 81 XMaskEvent(dpy, MOUSEMASK | ExposureMask | SubstructureRedirectMask , &ev); |
81 switch(ev.type) { | 82 switch(ev.type) { |
82 case ButtonRelease: | 83 case ButtonRelease: |
83 resize(c, True, TopLeft); | 84 resize(c, True); |
84 XUngrabPointer(dpy, CurrentTime); | 85 XUngrabPointer(dpy, CurrentTime); |
85 return; | 86 return; |
87 case ConfigureRequest: | |
86 case Expose: | 88 case Expose: |
87 handler[Expose](&ev); | 89 case MapRequest: |
90 handler[ev.type](&ev); | |
88 break; | 91 break; |
89 case MotionNotify: | 92 case MotionNotify: |
90 XSync(dpy, False); | 93 XSync(dpy, False); |
91 if((nw = abs(ocx - ev.xmotion.x))) | 94 nw = ev.xmotion.x - ocx - 2 * c->border + 1; |
92 c->w = nw; | 95 c->w = nw > 0 ? nw : 1; |
93 if((nh = abs(ocy - ev.xmotion.y))) | 96 nh = ev.xmotion.y - ocy - 2 * c->border + 1; |
94 c->h = nh; | 97 c->h = nh > 0 ? nh : 1; |
95 c->x = (ocx <= ev.xmotion.x) ? ocx : ocx - c->w; | 98 resize(c, True); |
96 c->y = (ocy <= ev.xmotion.y) ? ocy : ocy - c->h; | |
97 if(ocx <= ev.xmotion.x) | |
98 sticky = (ocy <= ev.xmotion.y) ? TopLeft : BotLeft; | |
99 else | |
100 sticky = (ocy <= ev.xmotion.y) ? TopRight : BotRight; | |
101 resize(c, True, sticky); | |
102 break; | 99 break; |
103 } | 100 } |
104 } | 101 } |
105 } | 102 } |
106 | 103 |
192 XConfigureWindow(dpy, c->win, newmask, &wc); | 189 XConfigureWindow(dpy, c->win, newmask, &wc); |
193 else | 190 else |
194 configure(c); | 191 configure(c); |
195 XSync(dpy, False); | 192 XSync(dpy, False); |
196 if(c->isfloat) { | 193 if(c->isfloat) { |
197 resize(c, False, TopLeft); | 194 resize(c, False); |
198 if(!isvisible(c)) | 195 if(!isvisible(c)) |
199 XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); | 196 XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); |
200 } | 197 } |
201 else | 198 else |
202 arrange(); | 199 arrange(); |
232 return; | 229 return; |
233 if((c = getclient(ev->window)) && isvisible(c)) | 230 if((c = getclient(ev->window)) && isvisible(c)) |
234 focus(c); | 231 focus(c); |
235 else if(ev->window == root) { | 232 else if(ev->window == root) { |
236 issel = True; | 233 issel = True; |
237 focus(sel); | 234 for(c = stack; c && !isvisible(c); c = c->snext); |
235 focus(c); | |
238 } | 236 } |
239 } | 237 } |
240 | 238 |
241 static void | 239 static void |
242 expose(XEvent *e) { | 240 expose(XEvent *e) { |