[gtk: 9/15] scrolledwindow: Stop kinetic scrolling on begin




commit 44b0d8b3307704d026bfdc649eaf5e68e1507e50
Author: José Expósito <jose exposito89 gmail com>
Date:   Wed Jun 23 08:09:35 2021 +0200

    scrolledwindow: Stop kinetic scrolling on begin
    
    Stop kinetic scrolling when a scroll begin signal is sent during the
    event capture phase.
    
    Part-of: <!3454>

 gtk/gtkscrolledwindow.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
---
diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
index 372afe4a95..49be97080c 100644
--- a/gtk/gtkscrolledwindow.c
+++ b/gtk/gtkscrolledwindow.c
@@ -1350,6 +1350,19 @@ scroll_controller_scroll_begin (GtkEventControllerScroll *scroll,
   priv->smooth_scroll = TRUE;
 }
 
+static void
+stop_kinetic_scrolling_cb (GtkEventControllerScroll *scroll,
+                           GtkScrolledWindow        *scrolled_window)
+{
+  GtkScrolledWindowPrivate *priv = gtk_scrolled_window_get_instance_private (scrolled_window);
+
+  if (priv->hscrolling)
+    gtk_kinetic_scrolling_stop (priv->hscrolling);
+
+  if (priv->vscrolling)
+    gtk_kinetic_scrolling_stop (priv->vscrolling);
+}
+
 static void
 scrolled_window_scroll (GtkScrolledWindow        *scrolled_window,
                         double                    delta_x,
@@ -2115,6 +2128,8 @@ gtk_scrolled_window_init (GtkScrolledWindow *scrolled_window)
   controller = gtk_event_controller_scroll_new (GTK_EVENT_CONTROLLER_SCROLL_BOTH_AXES |
                                                 GTK_EVENT_CONTROLLER_SCROLL_KINETIC);
   gtk_event_controller_set_propagation_phase (controller, GTK_PHASE_CAPTURE);
+  g_signal_connect (controller, "scroll-begin",
+                    G_CALLBACK (stop_kinetic_scrolling_cb), scrolled_window);
   g_signal_connect (controller, "scroll",
                     G_CALLBACK (captured_scroll_cb), scrolled_window);
   g_signal_connect (controller, "decelerate",


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]