diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2022-03-15 21:59:12 +0100 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2022-03-19 12:35:11 +0100 |
commit | 129bc27d5336a9789602ab26c42790fe71da76c3 (patch) | |
tree | ecba20c025d5a7e48efe7a6521282c07256fd821 | |
parent | 274e2b221f3ef04788b86e8ef1c70f9109f9ceb9 (diff) | |
download | gtk+-129bc27d5336a9789602ab26c42790fe71da76c3.tar.gz |
gtkscrolledwindow: Refactor kinetic scroll animation
Do not depend on the kinetic scroll helpers existing or not before
exiting the animation, as we may want to keep those a little bit
longer after stopped.
-rw-r--r-- | gtk/gtkscrolledwindow.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c index 416c8288eb..a5294d8003 100644 --- a/gtk/gtkscrolledwindow.c +++ b/gtk/gtkscrolledwindow.c @@ -3268,6 +3268,7 @@ scrolled_window_deceleration_cb (GtkWidget *widget, GtkAdjustment *hadjustment, *vadjustment; gint64 current_time; double position, elapsed; + gboolean retval = G_SOURCE_REMOVE; current_time = gdk_frame_clock_get_frame_time (frame_clock); elapsed = (current_time - priv->last_deceleration_time) / (double)G_TIME_SPAN_SECOND; @@ -3283,6 +3284,7 @@ scrolled_window_deceleration_cb (GtkWidget *widget, { priv->unclamped_hadj_value = position; gtk_adjustment_set_value (hadjustment, position); + retval = G_SOURCE_CONTINUE; } else if (priv->hscrolling) g_clear_pointer (&priv->hscrolling, gtk_kinetic_scrolling_free); @@ -3292,19 +3294,17 @@ scrolled_window_deceleration_cb (GtkWidget *widget, { priv->unclamped_vadj_value = position; gtk_adjustment_set_value (vadjustment, position); + retval = G_SOURCE_CONTINUE; } else if (priv->vscrolling) g_clear_pointer (&priv->vscrolling, gtk_kinetic_scrolling_free); - if (!priv->hscrolling && !priv->vscrolling) - { - gtk_scrolled_window_cancel_deceleration (scrolled_window); - return G_SOURCE_REMOVE; - } - - gtk_scrolled_window_invalidate_overshoot (scrolled_window); + if (retval == G_SOURCE_REMOVE) + gtk_scrolled_window_cancel_deceleration (scrolled_window); + else + gtk_scrolled_window_invalidate_overshoot (scrolled_window); - return G_SOURCE_CONTINUE; + return retval; } static void |