diff options
author | Nelson Benítez León <nbenitezl@gmail.com> | 2022-08-30 20:31:17 -0400 |
---|---|---|
committer | Nelson Benítez León <nbenitezl@gmail.com> | 2022-09-01 20:52:15 -0400 |
commit | 64a1305cddb0c303b999bae14cb8c1d993fad2a0 (patch) | |
tree | 145d3151fe5107bbb14924b850fb7ff8a84e9a28 | |
parent | a217be14f9d30fb97004deb3f1d93bea1ca2e617 (diff) | |
download | gtk+-gtk4_fix_focus_jump_general.tar.gz |
Move focus to parent when hiding a focused childgtk4_fix_focus_jump_general
because otherwise the focus will jump forward
to next widget, while expected behaviour is
for focus to come back to parent widget when
such parent is focusable.
As we now do this toolkit wide in
_gtk_window_unset_focus_and_default(),
there's no need for individual widgets to do
that explicitly, so we remove such explicit
calls by the GtkText and GtkTextView widgets.
Fixes issue #4903
-rw-r--r-- | gtk/gtktext.c | 1 | ||||
-rw-r--r-- | gtk/gtktextview.c | 1 | ||||
-rw-r--r-- | gtk/gtkwindow.c | 16 |
3 files changed, 14 insertions, 4 deletions
diff --git a/gtk/gtktext.c b/gtk/gtktext.c index b95d6d8c51..5658a08cb8 100644 --- a/gtk/gtktext.c +++ b/gtk/gtktext.c @@ -6919,7 +6919,6 @@ gtk_text_insert_emoji (GtkText *self) gtk_widget_set_parent (chooser, GTK_WIDGET (self)); g_signal_connect (chooser, "emoji-picked", G_CALLBACK (emoji_picked), self); - g_signal_connect_swapped (chooser, "hide", G_CALLBACK (gtk_text_grab_focus_without_selecting), self); } gtk_popover_popup (GTK_POPOVER (chooser)); diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c index bfd3616530..0f8854e224 100644 --- a/gtk/gtktextview.c +++ b/gtk/gtktextview.c @@ -10070,7 +10070,6 @@ gtk_text_view_insert_emoji (GtkTextView *text_view) gtk_widget_set_parent (chooser, GTK_WIDGET (text_view)); g_signal_connect (chooser, "emoji-picked", G_CALLBACK (emoji_picked), text_view); - g_signal_connect_swapped (chooser, "hide", G_CALLBACK (gtk_widget_grab_focus), text_view); } buffer = get_buffer (text_view); diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index efd1cff6f0..ad9e11a661 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -59,6 +59,7 @@ #include "gtkshortcuttrigger.h" #include "gtksizerequest.h" #include "gtksnapshot.h" +#include "gtktext.h" #include "gtktypebuiltins.h" #include "gtkwidgetprivate.h" #include "gtkwindowgroup.h" @@ -5130,11 +5131,22 @@ _gtk_window_unset_focus_and_default (GtkWindow *window, { GtkWindowPrivate *priv = gtk_window_get_instance_private (window); - GtkWidget *child; + GtkWidget *child, *parent; child = priv->focus_widget; if (child && (child == widget || gtk_widget_is_ancestor (child, widget))) - priv->move_focus = TRUE; + { + parent = gtk_widget_get_parent (widget); + if (parent && gtk_widget_get_focusable (parent)) + { + if (GTK_IS_TEXT (parent)) + gtk_text_grab_focus_without_selecting (GTK_TEXT (parent)); + else + gtk_widget_grab_focus (parent); + } + else + priv->move_focus = TRUE; + } child = priv->default_widget; if (child && (child == widget || gtk_widget_is_ancestor (child, widget))) |