stackswitcher: clear timer when widget id disposed

If the widget is disposed while the cursor has a drag timeout queued, it
can activate after finalization.
This commit is contained in:
Christian Hergert 2021-06-02 10:19:42 -07:00
parent 80c33ca2dd
commit c2ca246aee

View File

@ -225,6 +225,13 @@ gtk_stack_switcher_switch_timeout (gpointer data)
return G_SOURCE_REMOVE;
}
static void
clear_timer (gpointer data)
{
if (data)
g_source_remove (GPOINTER_TO_UINT (data));
}
static void
gtk_stack_switcher_drag_enter (GtkDropControllerMotion *motion,
double x,
@ -239,7 +246,7 @@ gtk_stack_switcher_drag_enter (GtkDropControllerMotion *motion,
gtk_stack_switcher_switch_timeout,
button);
g_source_set_name_by_id (switch_timer, "[gtk] gtk_stack_switcher_switch_timeout");
g_object_set_data (G_OBJECT (button), "-gtk-switch-timer", GUINT_TO_POINTER (switch_timer));
g_object_set_data_full (G_OBJECT (button), "-gtk-switch-timer", GUINT_TO_POINTER (switch_timer), clear_timer);
}
}