summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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)))