[gtk/fix-editable-label-spurious-focus-out: 2/2] editablelabel: Defer changes on focus-out




commit 7be993b72886bc3e56e166e3cb5d6de0c8a1d0b9
Author: Matthias Clasen <mclasen redhat com>
Date:   Tue Oct 18 14:23:22 2022 -0400

    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 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


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]