summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Hergert <chergert@redhat.com>2022-07-11 10:55:57 -0700
committerChristian Hergert <chergert@redhat.com>2022-07-11 10:55:57 -0700
commit858b04ea54e0b79406d473f6b74d4af40f884f8d (patch)
treeba08c320f6d4e53614e2c989b8c4c5d522a62a91
parent22a29ad746882fe11ce3d908fb2945b96d19c3ab (diff)
downloadgtksourceview-858b04ea54e0b79406d473f6b74d4af40f884f8d.tar.gz
hover: return focus to view when dismissing
But only if the hover assistant contains the current focus.
-rw-r--r--gtksourceview/gtksourcehoverassistant.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/gtksourceview/gtksourcehoverassistant.c b/gtksourceview/gtksourcehoverassistant.c
index 75acf952..5e9a32b1 100644
--- a/gtksourceview/gtksourcehoverassistant.c
+++ b/gtksourceview/gtksourcehoverassistant.c
@@ -90,7 +90,20 @@ gtk_source_hover_assistant_motion_cb (GtkSourceHoverAssistant *self,
y < -GRACE_Y ||
y > height + GRACE_Y)
{
+ GtkWidget *focus = gtk_root_get_focus (root);
+ GtkWidget *view = gtk_widget_get_ancestor (GTK_WIDGET (self), GTK_SOURCE_TYPE_VIEW);
+ gboolean return_focus;
+
+ return_focus = focus != NULL &&
+ (focus == GTK_WIDGET (self) ||
+ gtk_widget_is_ancestor (focus, GTK_WIDGET (self)));
+
gtk_widget_hide (GTK_WIDGET (self));
+
+ if (return_focus && view != NULL)
+ {
+ gtk_widget_grab_focus (GTK_WIDGET (view));
+ }
}
}