summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2014-06-30 11:01:54 -0400
committerMatthias Clasen <mclasen@redhat.com>2014-06-30 11:01:54 -0400
commit0ab99316291e217f6e1f8915899476c7536eefa7 (patch)
tree434ac9fef9f43d6cfe8806f998474666ddb06b9a
parentb457c1d7cd88accb22c690b69baefe8a48d805ff (diff)
downloadgtk+-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.c22
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;
}