diff options
author | Matthias Clasen <mclasen@redhat.com> | 2014-06-30 11:01:54 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2014-06-30 11:01:54 -0400 |
commit | 0ab99316291e217f6e1f8915899476c7536eefa7 (patch) | |
tree | 434ac9fef9f43d6cfe8806f998474666ddb06b9a | |
parent | b457c1d7cd88accb22c690b69baefe8a48d805ff (diff) | |
download | gtk+-wip/animated-scrolling.tar.gz |
Fix unmap-during-animationwip/animated-scrolling
When disabling animation on unmap, we need to complete a running
animation and properly unregister from the clock.
-rw-r--r-- | gtk/gtkadjustment.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/gtk/gtkadjustment.c b/gtk/gtkadjustment.c index 51714177dd..a124bac471 100644 --- a/gtk/gtkadjustment.c +++ b/gtk/gtkadjustment.c @@ -962,13 +962,25 @@ gtk_adjustment_enable_animation (GtkAdjustment *adjustment, { GtkAdjustmentPrivate *priv = adjustment->priv; - if (priv->clock) - g_object_unref (priv->clock); + if (priv->clock != clock) + { + if (priv->tick_id) + { + adjustment_set_value (adjustment, priv->target); - priv->clock = clock; + g_signal_handler_disconnect (priv->clock, priv->tick_id); + priv->tick_id = 0; + gdk_frame_clock_end_updating (priv->clock); + } - if (priv->clock) - g_object_ref (priv->clock); + if (priv->clock) + g_object_unref (priv->clock); + + priv->clock = clock; + + if (priv->clock) + g_object_ref (priv->clock); + } priv->duration = duration; } |