Commit 3db29208 authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

treat quick, low-offset drags as clicks (closes #113)

parent 51dabb8e
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -10,6 +10,9 @@ git HEAD
      <https://github.com/derf/feh/issues/109>
    * Fix delete not working on last image with --cycle-once
      <https://github.com/derf/feh/issues/107>
    * Treat quick, low-offset drags (1px or 2px move in <1 second) as clicks
      to improve graphics tablet support
      <https://github.com/derf/feh/issues/113>

Tue, 16 Oct 2012 06:29:58 +0200  Daniel Friesel <derf+feh@finalrewind.org>

+9 −5
Original line number Diff line number Diff line
@@ -1363,14 +1363,18 @@ Rotate current image
.
.Sh MOUSE ACTIONS
.
When viewing an image, by default mouse button 1 pans
.Pq moves the image around
Default Bindings:
When viewing an image, mouse button 1 pans the image
.Pq moves it around
or, when only clicked, moves to the next image
.Pq slideshow mode only ;
button 2 zooms
.Pq slideshow mode only .
Quick drags with less than 2px of movement per axis will be treated as clicks
to aid grahics tablet users.
.
Mouse button 2 zooms
.Po click and drag left->right to zoom in, right->left to zoom out, click once
to restore zoom to 100%
.Pc ;
.Pc
and mouse button 3 opens the menu.
.
.Pp
+12 −2
Original line number Diff line number Diff line
@@ -32,6 +32,9 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "events.h"
#include "thumbnail.h"

#define FEH_JITTER_OFFSET 2
#define FEH_JITTER_TIME 1

fehbb buttons;

feh_event_handler *ev_handler[LASTEvent];
@@ -226,6 +229,7 @@ static void feh_event_handle_ButtonPress(XEvent * ev)
		D(("click offset is %d,%d\n", ev->xbutton.x, ev->xbutton.y));
		winwid->click_offset_x = ev->xbutton.x - winwid->im_x;
		winwid->click_offset_y = ev->xbutton.y - winwid->im_y;
		winwid->click_start_time = time(NULL);

	} else if (feh_is_bb(&buttons.zoom, button, state)) {
		D(("Zoom Button Press event\n"));
@@ -496,9 +500,15 @@ static void feh_event_handle_MotionNotify(XEvent * ev)
		winwid = winwidget_get_from_window(ev->xmotion.window);
		if (winwid) {
			if (opt.mode == MODE_NEXT) {
				if ((abs(winwid->click_offset_x - (ev->xmotion.x - winwid->im_x)) > FEH_JITTER_OFFSET)
						|| (abs(winwid->click_offset_y - (ev->xmotion.y - winwid->im_y)) > FEH_JITTER_OFFSET)
						|| (time(NULL) - winwid->click_start_time > FEH_JITTER_TIME)) {
					opt.mode = MODE_PAN;
					winwid->mode = MODE_PAN;
				}
				else
					return;
			}
			D(("Panning\n"));
			orig_x = winwid->im_x;
			orig_y = winwid->im_y;
+1 −0
Original line number Diff line number Diff line
@@ -113,6 +113,7 @@ struct __winwidget {
	int click_offset_y;
	int im_click_offset_x;
	int im_click_offset_y;
	time_t click_start_time;

	unsigned char has_rotated;
};