[gtk/wip/carlosg/for-master] gtkwindow: Ensure to revert focus to a parent on hide()
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/carlosg/for-master] gtkwindow: Ensure to revert focus to a parent on hide()
- Date: Tue, 6 Oct 2020 01:37:23 +0000 (UTC)
commit 38547120b2ea2cb1c525a2d015051b09489ba099
Author: Carlos Garnacho <carlosg gnome org>
Date: Thu Oct 1 16:54:10 2020 +0200
gtkwindow: Ensure to revert focus to a parent on hide()
When a widget is hidden, check harder for the keyboard focus being
contained in that widget, in order to reset it. Portions of the
focus child hierarchy may be outdated at the time, so it is more
reliable to check GtkRoot::focus (i.e. the property we intend to
update here).
Fixes: https://gitlab.gnome.org/GNOME/gtk/-/issues/3214
gtk/gtkwindow.c | 24 ++++++++++--------------
1 file changed, 10 insertions(+), 14 deletions(-)
---
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index 947b178f76..6bdb06931b 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -5206,28 +5206,24 @@ _gtk_window_unset_focus_and_default (GtkWindow *window,
GtkWindowPrivate *priv = gtk_window_get_instance_private (window);
GtkWidget *child;
GtkWidget *parent;
+ GtkWidget *focus;
g_object_ref (window);
g_object_ref (widget);
parent = _gtk_widget_get_parent (widget);
- if (gtk_widget_get_focus_child (parent) == widget)
+ focus = gtk_root_get_focus (GTK_ROOT (window));
+ if (focus && (focus == widget || gtk_widget_is_ancestor (focus, widget)))
{
- child = priv->focus_widget;
-
- while (child && child != widget)
- child = _gtk_widget_get_parent (child);
-
- if (child == widget)
+ while (parent)
{
- GtkWidget *new_focus;
-
- if (GTK_IS_NATIVE (widget))
- new_focus = gtk_widget_get_parent (widget);
- else
- new_focus = NULL;
+ if (_gtk_widget_get_visible (parent))
+ {
+ gtk_widget_grab_focus (parent);
+ break;
+ }
- gtk_window_set_focus (GTK_WINDOW (window), new_focus);
+ parent = gtk_widget_get_parent (parent);
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]