From 2da2f7cf7f8adf5ff38c563e26724610c4959ea1 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Tue, 18 Oct 2022 14:23:22 -0400 Subject: [PATCH] editablelabel: Defer changes on focus-out We can get spurious focus-out/-in pairs when the editable label is in a popover that gets a Wayland keyboard enter event as a result of clicking the editable label. A timeout isn't a great solution, but nothing better is available right now. Fixes: #4864 --- gtk/gtkeditablelabel.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/gtk/gtkeditablelabel.c b/gtk/gtkeditablelabel.c index b75b6a531d..a90a5e9a98 100644 --- a/gtk/gtkeditablelabel.c +++ b/gtk/gtkeditablelabel.c @@ -193,11 +193,23 @@ gtk_editable_label_prepare_drag (GtkDragSource *source, gtk_label_get_label (GTK_LABEL (self->label))); } +static gboolean +stop_editing_soon (gpointer data) +{ + GtkEventController *controller = data; + GtkWidget *widget = 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); + + return FALSE; +} + static void gtk_editable_label_focus_out (GtkEventController *controller, GtkEditableLabel *self) { - gtk_editable_label_stop_editing (self, TRUE); + g_timeout_add (100, stop_editing_soon, controller); } static void