diff options
| author | Matthias Clasen <mclasen@redhat.com> | 2023-02-12 02:55:45 +0000 |
|---|---|---|
| committer | Matthias Clasen <mclasen@redhat.com> | 2023-02-12 02:55:45 +0000 |
| commit | eee7e59265f5e60500be4e752703a56b1580f7f6 (patch) | |
| tree | e64e2500ed9d42686eaf697a4d02c02ed22dbb8c | |
| parent | c2cb1ffe9e1631626e7e9c426201f05de82f9be9 (diff) | |
| parent | d918a77d34749962f66490bb72733b8119dd2419 (diff) | |
| download | gtk+-eee7e59265f5e60500be4e752703a56b1580f7f6.tar.gz | |
Merge branch 'fix_editable_label' into 'main'
Remove timeout when disposing GtkEditableLabel
Closes #5584
See merge request GNOME/gtk!5499
| -rw-r--r-- | gtk/gtkeditablelabel.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/gtk/gtkeditablelabel.c b/gtk/gtkeditablelabel.c index a4690960fb..d86d7c2353 100644 --- a/gtk/gtkeditablelabel.c +++ b/gtk/gtkeditablelabel.c @@ -72,6 +72,8 @@ struct _GtkEditableLabel GtkWidget *stack; GtkWidget *label; GtkWidget *entry; + + guint stop_editing_soon_id; }; struct _GtkEditableLabelClass @@ -196,10 +198,12 @@ static gboolean stop_editing_soon (gpointer data) { GtkEventController *controller = data; - GtkWidget *widget = gtk_event_controller_get_widget (controller); + GtkEditableLabel *self = GTK_EDITABLE_LABEL (gtk_event_controller_get_widget (controller)); if (!gtk_event_controller_focus_contains_focus (GTK_EVENT_CONTROLLER_FOCUS (controller))) - gtk_editable_label_stop_editing (GTK_EDITABLE_LABEL (widget), TRUE); + gtk_editable_label_stop_editing (self, TRUE); + + self->stop_editing_soon_id = 0; return FALSE; } @@ -208,7 +212,8 @@ static void gtk_editable_label_focus_out (GtkEventController *controller, GtkEditableLabel *self) { - g_timeout_add (100, stop_editing_soon, controller); + if (self->stop_editing_soon_id == 0) + self->stop_editing_soon_id = g_timeout_add (100, stop_editing_soon, controller); } static void @@ -361,6 +366,8 @@ gtk_editable_label_dispose (GObject *object) self->entry = NULL; self->label = NULL; + g_clear_handle_id (&self->stop_editing_soon_id, g_source_remove); + G_OBJECT_CLASS (gtk_editable_label_parent_class)->dispose (object); } |
