[gtksourceview] view: hide assistants on scroll events
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtksourceview] view: hide assistants on scroll events
- Date: Thu, 1 Sep 2022 01:00:03 +0000 (UTC)
commit 4cbbbc0e812ea524b8e6738f8cb57b5807c37a04
Author: Christian Hergert <chergert redhat com>
Date: Wed Aug 31 17:56:50 2022 -0700
view: hide assistants on scroll events
We still need to handle some cases better, particularly with completion
and ensuring hover assistants can break on scroll internally, but it's a
start towards that.
gtksourceview/gtksourceview-assistants.c | 4 ++--
gtksourceview/gtksourceview-private.h | 1 +
gtksourceview/gtksourceview.c | 33 +++++++++++++++++++++++++++++---
3 files changed, 33 insertions(+), 5 deletions(-)
---
diff --git a/gtksourceview/gtksourceview-assistants.c b/gtksourceview/gtksourceview-assistants.c
index 5f7c6639..459c6fbf 100644
--- a/gtksourceview/gtksourceview-assistants.c
+++ b/gtksourceview/gtksourceview-assistants.c
@@ -114,7 +114,7 @@ _gtk_source_view_assistants_size_allocate (GtkSourceViewAssistants *assistants,
}
}
-static gboolean
+gboolean
_gtk_source_view_assistants_hide_all (GtkSourceViewAssistants *assistants)
{
gboolean ret = FALSE;
@@ -129,7 +129,7 @@ _gtk_source_view_assistants_hide_all (GtkSourceViewAssistants *assistants)
if (gtk_widget_get_visible (GTK_WIDGET (assistant)))
{
- gtk_popover_popdown (GTK_POPOVER (assistant));
+ gtk_widget_hide (GTK_POPOVER (assistant));
ret = TRUE;
}
}
diff --git a/gtksourceview/gtksourceview-private.h b/gtksourceview/gtksourceview-private.h
index b19c344b..46460a6d 100644
--- a/gtksourceview/gtksourceview-private.h
+++ b/gtksourceview/gtksourceview-private.h
@@ -61,6 +61,7 @@ void _gtk_source_view_assistants_remove (GtkSourceViewAssistants *ass
GtkSourceAssistant *assistant);
void _gtk_source_view_assistants_remove (GtkSourceViewAssistants *assistants,
GtkSourceAssistant *assistant);
+gboolean _gtk_source_view_assistants_hide_all (GtkSourceViewAssistants *assistants);
void _gtk_source_view_assistants_shutdown (GtkSourceViewAssistants *assistants);
void _gtk_source_view_assistants_size_allocate (GtkSourceViewAssistants *assistants,
int width,
diff --git a/gtksourceview/gtksourceview.c b/gtksourceview/gtksourceview.c
index cddbe44a..d0dc90b0 100644
--- a/gtksourceview/gtksourceview.c
+++ b/gtksourceview/gtksourceview.c
@@ -277,6 +277,10 @@ static gboolean gtk_source_view_key_pressed (GtkSourceView
guint keycode,
guint state,
GtkEventControllerKey *controller);
+static void gtk_source_view_scroll (GtkSourceView *view,
+ double x,
+ double y,
+ GtkEventControllerScroll*scroll);
static gint calculate_real_tab_width (GtkSourceView *view,
guint tab_size,
gchar c);
@@ -1408,6 +1412,7 @@ gtk_source_view_init (GtkSourceView *view)
GtkSourceViewPrivate *priv = gtk_source_view_get_instance_private (view);
GtkStyleContext *context;
GtkEventController *key;
+ GtkEventController *scroll;
GtkDropTarget *dest;
gtk_widget_add_css_class (GTK_WIDGET (view), "GtkSourceView");
@@ -1442,11 +1447,19 @@ gtk_source_view_init (GtkSourceView *view)
key = gtk_event_controller_key_new ();
gtk_event_controller_set_propagation_phase (key, GTK_PHASE_CAPTURE);
g_signal_connect_swapped (key,
- "key-pressed",
- G_CALLBACK (gtk_source_view_key_pressed),
- view);
+ "key-pressed",
+ G_CALLBACK (gtk_source_view_key_pressed),
+ view);
gtk_widget_add_controller (GTK_WIDGET (view), g_steal_pointer (&key));
+ scroll = gtk_event_controller_scroll_new (GTK_EVENT_CONTROLLER_SCROLL_BOTH_AXES);
+ gtk_event_controller_set_propagation_phase (scroll, GTK_PHASE_CAPTURE);
+ g_signal_connect_swapped (scroll,
+ "scroll",
+ G_CALLBACK (gtk_source_view_scroll),
+ view);
+ gtk_widget_add_controller (GTK_WIDGET (view), g_steal_pointer (&scroll));
+
dest = gtk_drop_target_new (GDK_TYPE_RGBA, GDK_ACTION_COPY);
gtk_drop_target_set_preload (dest, TRUE);
g_signal_connect (dest, "drop", G_CALLBACK (gtk_source_view_rgba_drop), view);
@@ -4194,6 +4207,20 @@ gtk_source_view_key_pressed (GtkSourceView *view,
return GDK_EVENT_PROPAGATE;
}
+static void
+gtk_source_view_scroll (GtkSourceView *view,
+ double x,
+ double y,
+ GtkEventControllerScroll *scroll)
+{
+ GtkSourceViewPrivate *priv = gtk_source_view_get_instance_private (view);
+
+ g_assert (GTK_SOURCE_IS_VIEW (view));
+ g_assert (GTK_IS_EVENT_CONTROLLER_SCROLL (scroll));
+
+ _gtk_source_view_assistants_hide_all (&priv->assistants);
+}
+
/**
* gtk_source_view_get_auto_indent:
* @view: a #GtkSourceView.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]