diff options
author | lilydjwg <lilydjwg@gmail.com> | 2024-02-09 19:24:23 +0100 |
---|---|---|
committer | Christian Brabandt <cb@256bit.org> | 2024-02-09 19:24:23 +0100 |
commit | 725c7c31a4c7603e688511d769b0addaab442d07 (patch) | |
tree | 58bbc6a8b90ea18586fc8946d87b9c4257e6ebef /src/gui_gtk_x11.c | |
parent | c4d4a1e041f41b1fb0ccd686c8c488ef0768667e (diff) |
patch 9.1.0086: Problem when scrolling using slow touchpads scroll eventv9.1.0086
Problem: Problem when scrolling using slow touchpads scroll event
Solution: better ways to determine if a smooth scroll has ended (when
available) (lilydjwg)
related: #13997
Signed-off-by: lilydjwg <lilydjwg@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
Diffstat (limited to 'src/gui_gtk_x11.c')
-rw-r--r-- | src/gui_gtk_x11.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c index a89a774293..518edaf04f 100644 --- a/src/gui_gtk_x11.c +++ b/src/gui_gtk_x11.c @@ -2049,7 +2049,7 @@ button_press_event(GtkWidget *widget, } /* - * GTK+ 2 abstracts scrolling via the GdkEventScroll. + * GTK+ abstracts scrolling via the GdkEventScroll. */ static gboolean scroll_event(GtkWidget *widget, @@ -2060,7 +2060,9 @@ scroll_event(GtkWidget *widget, int_u vim_modifiers; #if GTK_CHECK_VERSION(3,4,0) static double acc_x, acc_y; +#if !GTK_CHECK_VERSION(3,22,0) static guint32 last_smooth_event_time; +#endif #define DT_X11 1 #define DT_WAYLAND 2 static display_type; @@ -2087,12 +2089,25 @@ scroll_event(GtkWidget *widget, break; #if GTK_CHECK_VERSION(3,4,0) case GDK_SCROLL_SMOOTH: + if (event->is_stop) + { + acc_x = acc_y = 0; + // this event tells us to stop, without an actual moving + return FALSE; + } +#if GTK_CHECK_VERSION(3,22,0) + if (gdk_device_get_axes(event->device) & GDK_AXIS_FLAG_WHEEL) + // this is from a wheel (as oppose to a touchpad / trackpoint) +#else if (event->time - last_smooth_event_time > 50) // reset our accumulations after 50ms of silence +#endif acc_x = acc_y = 0; acc_x += event->delta_x; acc_y += event->delta_y; +#if !GTK_CHECK_VERSION(3,22,0) last_smooth_event_time = event->time; +#endif break; #endif default: // This shouldn't happen |