From: Matthias Clasen Date: Tue, 18 Oct 2022 18:23:22 +0000 (-0400) Subject: editablelabel: Defer changes on focus-out X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~9^2~164^2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=7be993b72886bc3e56e166e3cb5d6de0c8a1d0b9;p=gtk4.git 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 --- diff --git a/gtk/gtkeditablelabel.c b/gtk/gtkeditablelabel.c index e107121ad9..a4690960fb 100644 --- a/gtk/gtkeditablelabel.c +++ b/gtk/gtkeditablelabel.c @@ -192,11 +192,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