summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimm Bäder <mail@baedert.org>2020-10-16 21:55:37 +0200
committerTimm Bäder <mail@baedert.org>2020-10-22 17:46:34 +0200
commit98e88b7b53f69092bc2c90a5eb32d2d18acad63f (patch)
tree96ea1e4b3bc1dc8e76307e8c5a53fac8e086c616
parent85702f8f5de3c3f88d8537ec84c9e7f423e68d8c (diff)
downloadgtk+-98e88b7b53f69092bc2c90a5eb32d2d18acad63f.tar.gz
text: Avoid a crash
Calculate the "was previous focus in a child widget" condition before chaining up into grab_focus, to a void that unreffing the prev_focus widget.
-rw-r--r--gtk/gtktext.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/gtk/gtktext.c b/gtk/gtktext.c
index 8f2745caf6..ceb7addbfd 100644
--- a/gtk/gtktext.c
+++ b/gtk/gtktext.c
@@ -3228,14 +3228,15 @@ gtk_text_grab_focus (GtkWidget *widget)
GtkTextPrivate *priv = gtk_text_get_instance_private (self);
gboolean select_on_focus;
GtkWidget *prev_focus;
+ gboolean prev_focus_was_child;
prev_focus = gtk_root_get_focus (gtk_widget_get_root (widget));
+ prev_focus_was_child = prev_focus && gtk_widget_is_ancestor (prev_focus, widget);
if (!GTK_WIDGET_CLASS (gtk_text_parent_class)->grab_focus (GTK_WIDGET (self)))
return FALSE;
- if (priv->editable && !priv->in_click &&
- !(prev_focus && gtk_widget_is_ancestor (prev_focus, widget)))
+ if (priv->editable && !priv->in_click && !prev_focus_was_child)
{
g_object_get (gtk_widget_get_settings (widget),
"gtk-entry-select-on-focus",