summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNelson Benítez León <nbenitezl@gmail.com>2022-08-30 20:31:17 -0400
committerNelson Benítez León <nbenitezl@gmail.com>2022-09-01 20:52:15 -0400
commit64a1305cddb0c303b999bae14cb8c1d993fad2a0 (patch)
tree145d3151fe5107bbb14924b850fb7ff8a84e9a28
parenta217be14f9d30fb97004deb3f1d93bea1ca2e617 (diff)
downloadgtk+-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.c1
-rw-r--r--gtk/gtktextview.c1
-rw-r--r--gtk/gtkwindow.c16
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)))