commit 88fba913be788f8ce3979873b4f56f9ddfc58acc
parent 5bd7c64458ec3084492b63f8b236e0d35c6e5275
Author: Kris Maglione <jg@suckless.org>
Date: Sat, 10 Feb 2007 21:36:06 -0500
Fix mouse warping on move/resize
Diffstat:
| mouse.c | | | 48 | +++++++++++++++++++++++++----------------------- |
1 file changed, 25 insertions(+), 23 deletions(-)
diff --git a/mouse.c b/mouse.c
@@ -350,26 +350,26 @@ do_mouse_resize(Client *c, Bool grabbox, BlitzAlign align) {
None, cur, CurrentTime) != GrabSuccess)
return;
- if (align != CENTER) {
- pt_x = dx = frect.width / 2;
- pt_y = dy = frect.height / 2;
- if(align&NORTH) dy -= pt_y;
- if(align&SOUTH) dy += pt_y;
- if(align&EAST) dx += pt_x;
- if(align&WEST) dx -= pt_x;
- XWarpPointer(blz.dpy, None, c->framewin, 0, 0, 0, 0, dx, dy);
+ XQueryPointer(blz.dpy, blz.root, &dummy, &dummy, &i, &i, &pt_x, &pt_y, &di);
+
+ if(align != CENTER) {
+ hr_x = dx = frect.width / 2;
+ hr_y = dy = frect.height / 2;
+ if(align&NORTH) dy -= hr_y;
+ if(align&SOUTH) dy += hr_y;
+ if(align&EAST) dx += hr_x;
+ if(align&WEST) dx -= hr_x;
+ XTranslateCoordinates(blz.dpy, c->framewin, blz.root, dx, dy,
+ &pt_x, &pt_y, &dummy);
+ XWarpPointer(blz.dpy, None, blz.root, 0, 0, 0, 0, pt_x, pt_y);
}
else if(!grabbox) {
hr_x = screen->rect.width / 2;
hr_y = screen->rect.height / 2;
XWarpPointer(blz.dpy, None, blz.root, 0, 0, 0, 0, hr_x, hr_y);
- while(XCheckMaskEvent(blz.dpy, MouseMask, &ev)) {
- pt_x = ev.xmotion.x;
- pt_y = ev.xmotion.y;
- }
+ while(XCheckMaskEvent(blz.dpy, MouseMask, &ev));
}
- XQueryPointer(blz.dpy, blz.root, &dummy, &dummy, &i, &i, &pt_x, &pt_y, &di);
XSync(blz.dpy, False);
if(!grabbox) {
@@ -380,23 +380,25 @@ do_mouse_resize(Client *c, Bool grabbox, BlitzAlign align) {
XMaskEvent(blz.dpy, MouseMask | ExposureMask, &ev);
switch (ev.type) {
case ButtonRelease:
- if(!grabbox) {
+ if(!grabbox)
draw_xor_border(&frect);
- XTranslateCoordinates(blz.dpy, c->framewin, blz.root,
- frect.width * rx, frect.height * ry,
- &dx, &dy, &dummy);
- if(dy > screen->brect.y)
- dy = screen->brect.y - 1;
- XWarpPointer(blz.dpy, None, blz.root, 0, 0, 0, 0, dx, dy);
- XUngrabServer(blz.dpy);
- }
-
if(!floating)
resize_column(c, &frect);
else
resize_client(c, &frect);
+ if(!grabbox) {
+ if(align != CENTER)
+ XTranslateCoordinates(blz.dpy, c->framewin, blz.root,
+ (frect.width * rx), (frect.height * ry),
+ &pt_x, &pt_y, &dummy);
+ if(pt_y > screen->brect.y)
+ pt_y = screen->brect.y - 1;
+ XWarpPointer(blz.dpy, None, blz.root, 0, 0, 0, 0, pt_x, pt_y);
+ XUngrabServer(blz.dpy);
+ }
+
if(rects)
free(rects);