diff --git a/gtk/gtkcontainer.c b/gtk/gtkcontainer.c index 4d907d1004..0900782fb9 100644 --- a/gtk/gtkcontainer.c +++ b/gtk/gtkcontainer.c @@ -2087,6 +2087,9 @@ gtk_container_start_idle_sizer (GtkContainer *container) if (clock == NULL) return; + if (!GTK_WIDGET (container)->priv->frameclock_connected) + return; + container->priv->resize_clock = clock; container->priv->resize_handler = g_signal_connect (clock, "layout", G_CALLBACK (gtk_container_idle_sizer), container); diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index af591ff97f..dd353998b5 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -5297,7 +5297,7 @@ gtk_widget_add_tick_callback (GtkWidget *widget, priv = widget->priv; - if (priv->realized && !priv->clock_tick_id) + if (priv->frameclock_connected && !priv->clock_tick_id) { frame_clock = gtk_widget_get_frame_clock (widget); @@ -5368,6 +5368,8 @@ gtk_widget_connect_frame_clock (GtkWidget *widget, { GtkWidgetPrivate *priv = widget->priv; + priv->frameclock_connected = TRUE; + if (GTK_IS_CONTAINER (widget)) _gtk_container_maybe_start_idle_sizer (GTK_CONTAINER (widget)); @@ -5403,6 +5405,8 @@ gtk_widget_disconnect_frame_clock (GtkWidget *widget, gdk_frame_clock_end_updating (frame_clock); } + priv->frameclock_connected = FALSE; + if (priv->context) gtk_style_context_set_frame_clock (priv->context, NULL); } diff --git a/gtk/gtkwidgetprivate.h b/gtk/gtkwidgetprivate.h index 4e26280c74..1b7ddf2ff0 100644 --- a/gtk/gtkwidgetprivate.h +++ b/gtk/gtkwidgetprivate.h @@ -89,6 +89,7 @@ struct _GtkWidgetPrivate guint hexpand_set : 1; /* whether to use application-forced */ guint vexpand_set : 1; /* instead of computing from children */ guint has_tooltip : 1; + guint frameclock_connected : 1; /* SizeGroup related flags */ guint have_size_groups : 1;