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.
This commit is contained in:
Matthias Clasen
2023-04-09 10:10:19 -04:00
parent d4a34b1a0b
commit d0467675db

View File

@@ -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 */
priv->realized = FALSE;
gtk_css_node_invalidate_frame_clock (priv->cssnode, FALSE);
if (priv->clock_tick_id)
{
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);
}
priv->realized = FALSE;
update_tick_callbacks (widget);
}
void