From b98a48576e380e6f3f953b3d01b25172449e14d7 Mon Sep 17 00:00:00 2001 From: Peter Hofmann Date: Sat, 7 Sep 2013 17:06:47 +0200 Subject: Warp pointer on first/last pixel Previously, the pointer would get warped when it had left the window. This doesn't work when sxiv is run in fullscreen mode (or similar -- see dwm's monocle mode): The pointer can never leave the window in such situations. To fix this, warp the pointer when it's on the first/last pixel. To avoid an endless warping loop, the new position must be at least one pixel away from the next warp position. --- commands.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/commands.c b/commands.c index 09ba926..ff95f36 100644 --- a/commands.c +++ b/commands.c @@ -352,14 +352,14 @@ bool i_drag(arg_t a) y = e.xmotion.y; /* wrap the mouse around */ - if (x < 0) { - WARP(win.w, y); - } else if (x > win.w) { - WARP(0, y); - } else if (y < 0) { - WARP(x, win.h); - } else if (y > win.h) { - WARP(x, 0); + if (x <= 0) { + WARP(win.w - 2, y); + } else if (x >= win.w - 1) { + WARP(1, y); + } else if (y <= 0) { + WARP(x, win.h - 2); + } else if (y >= win.h - 1) { + WARP(x, 1); } dx += x - ox; dy += y - oy; -- cgit v1.2.3