diff options
-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))) |