From 22ff7bceff9f4bf273c2c117dd9f6542c8ef4004 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sun, 16 Apr 2023 08:49:20 +0200 Subject: [PATCH] text: Fix fallout from focus changes We don't get proper notification for when the toplevel is-active property changes, so monitor has-focus, and update cursor blinking. --- gtk/gtktext.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/gtk/gtktext.c b/gtk/gtktext.c index 7b7d2eb4a5..c7316478e7 100644 --- a/gtk/gtktext.c +++ b/gtk/gtktext.c @@ -320,6 +320,8 @@ static void gtk_text_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); +static void gtk_text_notify (GObject *object, + GParamSpec *pspec); static void gtk_text_finalize (GObject *object); static void gtk_text_dispose (GObject *object); @@ -738,6 +740,7 @@ gtk_text_class_init (GtkTextClass *class) gobject_class->finalize = gtk_text_finalize; gobject_class->set_property = gtk_text_set_property; gobject_class->get_property = gtk_text_get_property; + gobject_class->notify = gtk_text_notify; widget_class->map = gtk_text_map; widget_class->unmap = gtk_text_unmap; @@ -1815,6 +1818,17 @@ gtk_text_get_property (GObject *object, } } +static void +gtk_text_notify (GObject *object, + GParamSpec *pspec) +{ + if (pspec->name == I_("has-focus")) + gtk_text_check_cursor_blink (GTK_TEXT (object)); + + if (G_OBJECT_CLASS (gtk_text_parent_class)->notify) + G_OBJECT_CLASS (gtk_text_parent_class)->notify (object, pspec); +} + static void gtk_text_ensure_text_handles (GtkText *self) { @@ -6455,8 +6469,11 @@ static gboolean cursor_blinks (GtkText *self) { GtkTextPrivate *priv = gtk_text_get_instance_private (self); + GtkRoot *root = gtk_widget_get_root (GTK_WIDGET (self)); - if (gtk_event_controller_focus_is_focus (GTK_EVENT_CONTROLLER_FOCUS (priv->focus_controller)) && + if (gtk_widget_get_mapped (GTK_WIDGET (self)) && + gtk_window_is_active (GTK_WINDOW (root)) && + gtk_event_controller_focus_is_focus (GTK_EVENT_CONTROLLER_FOCUS (priv->focus_controller)) && priv->editable && priv->selection_bound == priv->current_pos) { -- 2.30.2