mirror of
https://github.com/vim/vim.git
synced 2025-10-08 06:04:08 -04:00
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 <lilydjwg@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
c4d4a1e041
commit
725c7c31a4
@@ -2049,7 +2049,7 @@ button_press_event(GtkWidget *widget,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* GTK+ 2 abstracts scrolling via the GdkEventScroll.
|
* GTK+ abstracts scrolling via the GdkEventScroll.
|
||||||
*/
|
*/
|
||||||
static gboolean
|
static gboolean
|
||||||
scroll_event(GtkWidget *widget,
|
scroll_event(GtkWidget *widget,
|
||||||
@@ -2060,7 +2060,9 @@ scroll_event(GtkWidget *widget,
|
|||||||
int_u vim_modifiers;
|
int_u vim_modifiers;
|
||||||
#if GTK_CHECK_VERSION(3,4,0)
|
#if GTK_CHECK_VERSION(3,4,0)
|
||||||
static double acc_x, acc_y;
|
static double acc_x, acc_y;
|
||||||
|
#if !GTK_CHECK_VERSION(3,22,0)
|
||||||
static guint32 last_smooth_event_time;
|
static guint32 last_smooth_event_time;
|
||||||
|
#endif
|
||||||
#define DT_X11 1
|
#define DT_X11 1
|
||||||
#define DT_WAYLAND 2
|
#define DT_WAYLAND 2
|
||||||
static display_type;
|
static display_type;
|
||||||
@@ -2087,12 +2089,25 @@ scroll_event(GtkWidget *widget,
|
|||||||
break;
|
break;
|
||||||
#if GTK_CHECK_VERSION(3,4,0)
|
#if GTK_CHECK_VERSION(3,4,0)
|
||||||
case GDK_SCROLL_SMOOTH:
|
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)
|
if (event->time - last_smooth_event_time > 50)
|
||||||
// reset our accumulations after 50ms of silence
|
// reset our accumulations after 50ms of silence
|
||||||
|
#endif
|
||||||
acc_x = acc_y = 0;
|
acc_x = acc_y = 0;
|
||||||
acc_x += event->delta_x;
|
acc_x += event->delta_x;
|
||||||
acc_y += event->delta_y;
|
acc_y += event->delta_y;
|
||||||
|
#if !GTK_CHECK_VERSION(3,22,0)
|
||||||
last_smooth_event_time = event->time;
|
last_smooth_event_time = event->time;
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
default: // This shouldn't happen
|
default: // This shouldn't happen
|
||||||
|
@@ -704,6 +704,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
86,
|
||||||
/**/
|
/**/
|
||||||
85,
|
85,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user