43 old_cx = c->x; |
43 old_cx = c->x; |
44 old_cy = c->y; |
44 old_cy = c->y; |
45 if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync, |
45 if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync, |
46 None, cursor[CurResize], CurrentTime) != GrabSuccess) |
46 None, cursor[CurResize], CurrentTime) != GrabSuccess) |
47 return; |
47 return; |
48 XGrabServer(dpy); |
|
49 XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w, c->h); |
48 XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w, c->h); |
50 for(;;) { |
49 for(;;) { |
51 XMaskEvent(dpy, MouseMask, &ev); |
50 XMaskEvent(dpy, MouseMask | ExposureMask, &ev); |
52 switch(ev.type) { |
51 switch(ev.type) { |
53 default: break; |
52 default: break; |
|
53 case Expose: |
|
54 handler[Expose](&ev); |
|
55 break; |
54 case MotionNotify: |
56 case MotionNotify: |
55 XUngrabServer(dpy); |
57 XFlush(dpy); |
56 mmatch(c, old_cx, old_cy, ev.xmotion.x, ev.xmotion.y); |
58 mmatch(c, old_cx, old_cy, ev.xmotion.x, ev.xmotion.y); |
57 XResizeWindow(dpy, c->win, c->w, c->h); |
59 XResizeWindow(dpy, c->win, c->w, c->h); |
58 XGrabServer(dpy); |
|
59 break; |
60 break; |
60 case ButtonRelease: |
61 case ButtonRelease: |
61 resize(c); |
62 resize(c); |
62 XUngrabServer(dpy); |
|
63 XUngrabPointer(dpy, CurrentTime); |
63 XUngrabPointer(dpy, CurrentTime); |
64 return; |
64 return; |
65 } |
65 } |
66 } |
66 } |
67 } |
67 } |
78 old_cy = c->y; |
78 old_cy = c->y; |
79 if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync, |
79 if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync, |
80 None, cursor[CurMove], CurrentTime) != GrabSuccess) |
80 None, cursor[CurMove], CurrentTime) != GrabSuccess) |
81 return; |
81 return; |
82 XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui); |
82 XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui); |
83 XGrabServer(dpy); |
|
84 for(;;) { |
83 for(;;) { |
85 XMaskEvent(dpy, MouseMask, &ev); |
84 XMaskEvent(dpy, MouseMask | ExposureMask, &ev); |
86 switch (ev.type) { |
85 switch (ev.type) { |
87 default: break; |
86 default: break; |
|
87 case Expose: |
|
88 handler[Expose](&ev); |
|
89 break; |
88 case MotionNotify: |
90 case MotionNotify: |
89 XUngrabServer(dpy); |
91 XFlush(dpy); |
90 c->x = old_cx + (ev.xmotion.x - x1); |
92 c->x = old_cx + (ev.xmotion.x - x1); |
91 c->y = old_cy + (ev.xmotion.y - y1); |
93 c->y = old_cy + (ev.xmotion.y - y1); |
92 XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h); |
94 XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h); |
93 XGrabServer(dpy); |
|
94 break; |
95 break; |
95 case ButtonRelease: |
96 case ButtonRelease: |
96 resize(c); |
97 resize(c); |
97 XUngrabServer(dpy); |
|
98 XUngrabPointer(dpy, CurrentTime); |
98 XUngrabPointer(dpy, CurrentTime); |
99 return; |
99 return; |
100 } |
100 } |
101 } |
101 } |
102 } |
102 } |