summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2023-04-09 10:10:19 -0400
committerMatthias Clasen <mclasen@redhat.com>2023-04-09 10:19:40 -0400
commitd0467675db6fa043b98adb49a49f0e80ce4d578a (patch)
treee9d8ac1c18000d28cd0796777b8180a09baaf42e
parentd4a34b1a0b98c961baf269a48adfebc4154b5f48 (diff)
downloadgtk+-d0467675db6fa043b98adb49a49f0e80ce4d578a.tar.gz
widget: Small refactor
Break out the tick cb management into functions, since we will be calling this in more than one place in the future.
-rw-r--r--gtk/gtkwidget.c40
1 files changed, 26 insertions, 14 deletions
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index f8a96ccf6f..de76a51162 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -7694,14 +7694,16 @@ gtk_widget_real_unmap (GtkWidget *widget)
}
static void
-gtk_widget_real_realize (GtkWidget *widget)
+update_tick_callbacks (GtkWidget *widget)
{
GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
+ gboolean should_tick = FALSE;
- priv->realized = TRUE;
+ if (priv->realized && priv->tick_callbacks != NULL)
+ should_tick = TRUE;
/* Connect frame clock */
- if (priv->tick_callbacks != NULL && !priv->clock_tick_id)
+ if (!priv->clock_tick_id && should_tick)
{
GdkFrameClock *frame_clock = gtk_widget_get_frame_clock (widget);
@@ -7710,6 +7712,24 @@ gtk_widget_real_realize (GtkWidget *widget)
widget);
gdk_frame_clock_begin_updating (frame_clock);
}
+ else if (priv->clock_tick_id && !should_tick)
+ {
+ GdkFrameClock *frame_clock = gtk_widget_get_frame_clock (widget);
+
+ g_signal_handler_disconnect (frame_clock, priv->clock_tick_id);
+ priv->clock_tick_id = 0;
+ gdk_frame_clock_end_updating (frame_clock);
+ }
+}
+
+static void
+gtk_widget_real_realize (GtkWidget *widget)
+{
+ GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
+
+ priv->realized = TRUE;
+
+ update_tick_callbacks (widget);
gtk_css_node_invalidate_frame_clock (priv->cssnode, FALSE);
}
@@ -7729,19 +7749,11 @@ gtk_widget_real_unrealize (GtkWidget *widget)
gtk_widget_forall (widget, (GtkCallback)gtk_widget_unrealize, NULL);
- /* Disconnect frame clock */
- gtk_css_node_invalidate_frame_clock (priv->cssnode, FALSE);
-
- if (priv->clock_tick_id)
- {
- GdkFrameClock *frame_clock = gtk_widget_get_frame_clock (widget);
+ priv->realized = FALSE;
- g_signal_handler_disconnect (frame_clock, priv->clock_tick_id);
- priv->clock_tick_id = 0;
- gdk_frame_clock_end_updating (frame_clock);
- }
+ gtk_css_node_invalidate_frame_clock (priv->cssnode, FALSE);
- priv->realized = FALSE;
+ update_tick_callbacks (widget);
}
void