diff options
author | Matthias Clasen <mclasen@redhat.com> | 2023-04-09 10:10:19 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2023-04-09 10:19:40 -0400 |
commit | d0467675db6fa043b98adb49a49f0e80ce4d578a (patch) | |
tree | e9d8ac1c18000d28cd0796777b8180a09baaf42e | |
parent | d4a34b1a0b98c961baf269a48adfebc4154b5f48 (diff) | |
download | gtk+-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.c | 40 |
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 |