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) {