[gtk/4.0-backports: 13/53] widget: Fix can-focus
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/4.0-backports: 13/53] widget: Fix can-focus
- Date: Sun, 7 Feb 2021 17:49:40 +0000 (UTC)
commit 2194421de3ddcd325370abbbb0ac10b452a04b15
Author: Matthias Clasen <mclasen redhat com>
Date: Tue Jan 26 23:43:11 2021 -0500
widget: Fix can-focus
Setting can-focus to FALSE on a widget is supposed
to prevent focus from entering the entire subtree.
So when we grab focus directly to a widget, we need
to check the can-focus flag not just of the widget
itself, but all its ancestors.
Fixes: #3610
gtk/gtkwidget.c | 18 ++++++++++++++++--
1 file changed, 16 insertions(+), 2 deletions(-)
---
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 217293cd23..f469aac75f 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -4384,13 +4384,27 @@ gtk_widget_can_activate (GtkWidget *self)
return FALSE;
}
+static gboolean
+get_effective_can_focus (GtkWidget *widget)
+{
+ GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
+
+ if (!priv->can_focus)
+ return FALSE;
+
+ if (priv->parent)
+ return get_effective_can_focus (priv->parent);
+
+ return TRUE;
+}
+
static gboolean
gtk_widget_real_mnemonic_activate (GtkWidget *widget,
gboolean group_cycling)
{
if (!group_cycling && gtk_widget_can_activate (widget))
gtk_widget_activate (widget);
- else if (gtk_widget_get_can_focus (widget))
+ else if (get_effective_can_focus (widget))
return gtk_widget_grab_focus (widget);
else
{
@@ -4776,7 +4790,7 @@ gtk_widget_grab_focus (GtkWidget *widget)
g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
if (!gtk_widget_is_sensitive (widget) ||
- !gtk_widget_get_can_focus (widget) ||
+ !get_effective_can_focus (widget) ||
widget->priv->root == NULL)
return FALSE;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]