+ if (container->priv->resize_handler != 0)
+ return;
+
+ clock = gtk_widget_get_frame_clock (GTK_WIDGET (container));
+ if (clock == NULL)
+ return;
+
+ container->priv->resize_clock = clock;
+ container->priv->resize_handler = g_signal_connect (clock, "layout",
+ G_CALLBACK (gtk_container_idle_sizer), container);
+ gdk_frame_clock_request_phase (clock,
+ 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)
+{
+ GtkWidget *widget;
+
+ g_return_if_fail (GTK_IS_RESIZE_CONTAINER (container));
+
+ widget = GTK_WIDGET (container);
+
+ if (gtk_widget_get_visible (widget) &&
+ (gtk_widget_is_toplevel (widget) ||
+ gtk_widget_get_realized (widget)))
+ {
+ switch (container->priv->resize_mode)
+ {
+ case GTK_RESIZE_QUEUE:
+ if (!container->priv->resize_pending)
+ {
+ container->priv->resize_pending = TRUE;
+ gtk_container_start_idle_sizer (container);
+ }
+ break;
+
+ case GTK_RESIZE_IMMEDIATE:
+ gtk_container_check_resize (container);
+ break;
+
+ case GTK_RESIZE_PARENT:
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+ }