[gtk/wip/carlosg/for-master] gtkpopover: Revert focus to parent on hide()




commit de29513488e534d2bc186cd471fa1698c37826f4
Author: Carlos Garnacho <carlosg gnome org>
Date:   Thu Oct 1 16:54:10 2020 +0200

    gtkpopover: Revert focus to parent on hide()
    
    When a popover hides while containing the keyboard focus, the
    keyboard focus doesn't move outside the GtkPopover. This is widget
    that is not interested in preserving focus nor forwarding to
    hidden children, so give the focus back to the parent widget
    when the popover hides.
    
    Fixes: https://gitlab.gnome.org/GNOME/gtk/-/issues/3214

 gtk/gtkpopover.c | 5 +++++
 1 file changed, 5 insertions(+)
---
diff --git a/gtk/gtkpopover.c b/gtk/gtkpopover.c
index fd3567d8e2..5fa89eb872 100644
--- a/gtk/gtkpopover.c
+++ b/gtk/gtkpopover.c
@@ -957,10 +957,15 @@ gtk_popover_hide (GtkWidget *widget)
 {
   GtkPopover *popover = GTK_POPOVER (widget);
   GtkPopoverPrivate *priv = gtk_popover_get_instance_private (popover);
+  GtkRoot *root = gtk_widget_get_root (widget);
+  GtkWidget *focus = gtk_root_get_focus (root);
 
   if (priv->autohide)
     gtk_grab_remove (widget);
 
+  if (focus && (focus == widget || gtk_widget_is_ancestor (focus, widget)))
+    gtk_widget_grab_focus (gtk_widget_get_parent (GTK_WIDGET (popover)));
+
   gtk_popover_set_mnemonics_visible (GTK_POPOVER (widget), FALSE);
   _gtk_widget_set_visible_flag (widget, FALSE);
   gtk_widget_unmap (widget);


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