diff options
| -rw-r--r-- | ChangeLog | 3 | ||||
| -rw-r--r-- | man/feh.pre | 14 | ||||
| -rw-r--r-- | src/events.c | 14 | ||||
| -rw-r--r-- | src/winwidget.h | 1 | 
4 files changed, 25 insertions, 7 deletions
| @@ -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;  }; | 
