summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--man/feh.pre14
-rw-r--r--src/events.c14
-rw-r--r--src/winwidget.h1
4 files changed, 25 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 524fdd1..c2075b6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>
diff --git a/man/feh.pre b/man/feh.pre
index 81a5cd6..8d41581 100644
--- a/man/feh.pre
+++ b/man/feh.pre
@@ -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
diff --git a/src/events.c b/src/events.c
index 0d5e07d..dcd1aa1 100644
--- a/src/events.c
+++ b/src/events.c
@@ -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,8 +500,14 @@ static void feh_event_handle_MotionNotify(XEvent * ev)
winwid = winwidget_get_from_window(ev->xmotion.window);
if (winwid) {
if (opt.mode == MODE_NEXT) {
- opt.mode = MODE_PAN;
- winwid->mode = MODE_PAN;
+ 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;
diff --git a/src/winwidget.h b/src/winwidget.h
index 33ad945..be5a761 100644
--- a/src/winwidget.h
+++ b/src/winwidget.h
@@ -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;
};