From b1696436d1f1dea6c7aed7ba798116259f3c248e Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Tue, 31 Mar 2015 20:24:07 +0200 Subject: [PATCH] scrolledwindow: Ignore 0/0 scroll events when possibly cancelling animation These should be used eventually to start kinetic scrolling, so should definitely be ignored on cancellation. https://bugzilla.gnome.org/show_bug.cgi?id=747133 --- gtk/gtkscrolledwindow.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c index 73aa5b0c33..2845629a21 100644 --- a/gtk/gtkscrolledwindow.c +++ b/gtk/gtkscrolledwindow.c @@ -1074,7 +1074,18 @@ captured_event_cb (GtkWidget *widget, if (event->type == GDK_SCROLL) { - gtk_scrolled_window_cancel_deceleration (sw); + gdouble dx, dy; + + /* The libinput driver may generate a final event with dx=dy=0 + * after scrolling finished, this is usually an indication that + * the deceleration animation just started, so we definitely + * shouldn't cancel it. + */ + if (event->scroll.direction != GDK_SCROLL_SMOOTH || + (gdk_event_get_scroll_deltas (event, &dx, &dy) && + ((int) dx != 0 || (int) dy != 0))) + gtk_scrolled_window_cancel_deceleration (sw); + return GDK_EVENT_PROPAGATE; }