Commit 2f09bf03 authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

events.c: fix off-by-one pixel error when bottom/right border pointer warping

parent fa727bc8
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -4,6 +4,8 @@ git HEAD
      (Patch by Joel Bradshaw)
    * Add ; flag to --info (as in "--info ';echo foo'") to disable info
      display on startup
    * Fix off-by-one pixel error when warping the pointer in the
      bottom/right window border

Tue, 11 Jun 2013 08:27:24 +0200  Daniel Friesel <derf+feh@finalrewind.org>

+9 −9
Original line number Diff line number Diff line
@@ -578,36 +578,36 @@ static void feh_event_handle_MotionNotify(XEvent * ev)

			winwidget_sanitise_offsets(winwid);

			D(("im_x %d, im_w %d, off %d, mx %d\n", winwid->im_x,
				winwid->im_w, winwid->click_offset_x, ev->xmotion.x));
			D(("im_x %d, im_w %d, off %d, mx %d, my %d\n", winwid->im_x,
				winwid->im_w, winwid->click_offset_x, ev->xmotion.x,
				ev->xmotion.y));

			/* XWarpPointer generates a MotionNotify event which we will
			 * parse. Since that event would undo the effect of the pointer
			 * warp, we need to change the click_offset to compensate this.
			 */
			if ((winwid->w - ev->xmotion.x <= 1)
					&& (winwid->click_offset_x >= winwid->w - 4))
			if ((winwid->w - ev->xmotion.x <= 1) && (winwid->im_x < 0))
			{
				XWarpPointer(disp, None, winwid->win, 0, 0, 0, 0, 3,
					ev->xmotion.y);
				winwid->click_offset_x -= winwid->w - 4;
			}
			else if ((ev->xmotion.x <= 1) && (winwid->click_offset_x
					<= (winwid->im_w * winwid->zoom) - winwid->w - 3))
			else if ((ev->xmotion.x <= 1) && (winwid->w <
					(winwid->im_x + winwid->im_w * winwid->zoom)))
			{
				XWarpPointer(disp, None, winwid->win, 0, 0, 0, 0,
					winwid->w - 4, ev->xmotion.y);
				winwid->click_offset_x += winwid->w - 4;
			}
			else if ((winwid->h - ev->xmotion.y <= 1)
					&& (winwid->click_offset_y >= winwid->h - 4))
					&& (winwid->im_y < 0))
			{
				XWarpPointer(disp, None, winwid->win, 0, 0, 0, 0,
					ev->xmotion.x, 3);
				winwid->click_offset_y -= winwid->h - 4;
			}
			else if ((ev->xmotion.y <= 1) && (winwid->click_offset_y
					<= (winwid->im_h * winwid->zoom) - winwid->h - 3))
			else if ((ev->xmotion.y <= 1) && (winwid->h <
					(winwid->im_y + winwid->im_h * winwid->zoom)))
			{
				XWarpPointer(disp, None, winwid->win, 0, 0, 0, 0,
					ev->xmotion.x, winwid->h - 4);