summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk/gtkcontainer.c23
-rw-r--r--gtk/gtkcontainerprivate.h1
-rw-r--r--gtk/gtkwidget.c9
3 files changed, 20 insertions, 13 deletions
diff --git a/gtk/gtkcontainer.c b/gtk/gtkcontainer.c
index e73ef2a700..ce16fe4df4 100644
--- a/gtk/gtkcontainer.c
+++ b/gtk/gtkcontainer.c
@@ -1362,13 +1362,6 @@ gtk_container_destroy (GtkWidget *widget)
if (priv->restyle_pending)
priv->restyle_pending = FALSE;
- if (priv->resize_handler)
- {
- g_signal_handler_disconnect (priv->resize_clock, priv->resize_handler);
- priv->resize_handler = 0;
- priv->resize_clock = NULL;
- }
-
if (priv->focus_child)
{
g_object_unref (priv->focus_child);
@@ -1680,9 +1673,7 @@ gtk_container_idle_sizer (GdkFrameClock *clock,
if (!container->priv->restyle_pending && !container->priv->resize_pending)
{
- g_signal_handler_disconnect (clock, container->priv->resize_handler);
- container->priv->resize_handler = 0;
- container->priv->resize_clock = NULL;
+ _gtk_container_stop_idle_sizer (container);
}
else
{
@@ -1710,6 +1701,18 @@ gtk_container_start_idle_sizer (GtkContainer *container)
GDK_FRAME_CLOCK_PHASE_LAYOUT);
}
+void
+_gtk_container_stop_idle_sizer (GtkContainer *container)
+{
+ if (container->priv->resize_handler == 0)
+ return;
+
+ g_signal_handler_disconnect (container->priv->resize_clock,
+ container->priv->resize_handler);
+ container->priv->resize_handler = 0;
+ container->priv->resize_clock = NULL;
+}
+
static void
gtk_container_queue_resize_handler (GtkContainer *container)
{
diff --git a/gtk/gtkcontainerprivate.h b/gtk/gtkcontainerprivate.h
index cd4bc5b2e9..dd989d2dc7 100644
--- a/gtk/gtkcontainerprivate.h
+++ b/gtk/gtkcontainerprivate.h
@@ -39,6 +39,7 @@ GList * _gtk_container_focus_sort (GtkContainer *container,
GtkWidget *old_focus);
gboolean _gtk_container_get_reallocate_redraws (GtkContainer *container);
+void _gtk_container_stop_idle_sizer (GtkContainer *container);
void _gtk_container_maybe_start_idle_sizer (GtkContainer *container);
G_END_DECLS
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 79cf9e2ea1..48f996063e 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -4694,6 +4694,9 @@ gtk_widget_connect_frame_clock (GtkWidget *widget,
{
GtkWidgetPrivate *priv = widget->priv;
+ if (GTK_IS_CONTAINER (widget))
+ _gtk_container_maybe_start_idle_sizer (GTK_CONTAINER (widget));
+
if (priv->tick_callbacks != NULL)
{
g_signal_connect (frame_clock, "update",
@@ -4713,6 +4716,9 @@ gtk_widget_disconnect_frame_clock (GtkWidget *widget,
{
GtkWidgetPrivate *priv = widget->priv;
+ if (GTK_IS_CONTAINER (widget))
+ _gtk_container_stop_idle_sizer (GTK_CONTAINER (widget));
+
if (priv->tick_callbacks)
g_signal_handlers_disconnect_by_func (frame_clock,
(gpointer) gtk_widget_on_frame_clock_update,
@@ -4802,9 +4808,6 @@ gtk_widget_realize (GtkWidget *widget)
_gtk_widget_enable_device_events (widget);
gtk_widget_update_devices_mask (widget, TRUE);
- if (GTK_IS_CONTAINER (widget))
- _gtk_container_maybe_start_idle_sizer (GTK_CONTAINER (widget));
-
gtk_widget_connect_frame_clock (widget,
gtk_widget_get_frame_clock (widget));