# HG changeset patch # User Christian Brabandt # Date 1707503404 -3600 # Node ID 7c95f913fdd6c0447bc18b618d2a62313345922d # Parent 82cbfa8e2109a7aeb4ad9af467f487d1c1434570 patch 9.1.0086: Problem when scrolling using slow touchpads scroll event Commit: https://github.com/vim/vim/commit/725c7c31a4c7603e688511d769b0addaab442d07 Author: lilydjwg Date: Fri Feb 9 19:24:23 2024 +0100 patch 9.1.0086: Problem when scrolling using slow touchpads scroll event 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 Signed-off-by: Christian Brabandt diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c --- 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 diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -705,6 +705,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 86, +/**/ 85, /**/ 84,