[gtksourceview/wip/chergert/hoverers] more wip on hover
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtksourceview/wip/chergert/hoverers] more wip on hover
- Date: Tue, 9 Mar 2021 02:55:14 +0000 (UTC)
commit 3958748ea95a3e7a542973c13d3e4649ba08ec8a
Author: Christian Hergert <chergert redhat com>
Date: Mon Mar 8 18:55:07 2021 -0800
more wip on hover
gtksourceview/gtksourcehover.c | 116 +++++++++++++++++++++++++++++++++++++++--
1 file changed, 113 insertions(+), 3 deletions(-)
---
diff --git a/gtksourceview/gtksourcehover.c b/gtksourceview/gtksourcehover.c
index 9cff9e16..9b8b6e79 100644
--- a/gtksourceview/gtksourcehover.c
+++ b/gtksourceview/gtksourcehover.c
@@ -25,24 +25,89 @@
#include "gtksourcehover-private.h"
#include "gtksourcehovercontext.h"
#include "gtksourcehoverprovider.h"
+#include "gtksourcesignalgroup-private.h"
#include "gtksourceview.h"
struct _GtkSourceHover
{
GObject parent_instance;
+
GtkSourceView *view;
- GPtrArray *providers;
GtkSourceAssistant *assistant;
+
+ GPtrArray *providers;
+
+ guint delay_display_source;
+ guint dismiss_source;
};
G_DEFINE_TYPE (GtkSourceHover, gtk_source_hover, G_TYPE_OBJECT)
+static gboolean
+on_key_pressed_cb (GtkSourceHover *hover,
+ guint keyval,
+ guint keycode,
+ GdkModifierType state,
+ GtkEventControllerKey *controller)
+{
+ g_assert (GTK_SOURCE_IS_HOVER (hover));
+ g_assert (GTK_IS_EVENT_CONTROLLER_KEY (controller));
+
+ return GDK_EVENT_PROPAGATE;
+}
+
+static void
+on_focus_enter_cb (GtkSourceHover *hover,
+ GtkEventControllerFocus *controller)
+{
+ g_assert (GTK_SOURCE_IS_HOVER (hover));
+ g_assert (GTK_IS_EVENT_CONTROLLER_FOCUS (controller));
+
+}
+
+static void
+on_focus_leave_cb (GtkSourceHover *hover,
+ GtkEventControllerFocus *controller)
+{
+ g_assert (GTK_SOURCE_IS_HOVER (hover));
+ g_assert (GTK_IS_EVENT_CONTROLLER_FOCUS (controller));
+
+}
+
+static void
+on_motion_cb (GtkSourceHover *hover,
+ double x,
+ double y,
+ GtkEventControllerMotion *controller)
+{
+ g_assert (GTK_SOURCE_IS_HOVER (hover));
+ g_assert (GTK_IS_EVENT_CONTROLLER_MOTION (controller));
+
+}
+
+static gboolean
+on_scroll_cb (GtkSourceHover *hover,
+ double dx,
+ double dy,
+ GtkEventControllerScroll *controller)
+{
+ g_assert (GTK_SOURCE_IS_HOVER (hover));
+ g_assert (GTK_IS_EVENT_CONTROLLER_SCROLL (controller));
+
+ return GDK_EVENT_PROPAGATE;
+}
+
static void
gtk_source_hover_dispose (GObject *object)
{
GtkSourceHover *self = (GtkSourceHover *)object;
- self->view = NULL;
+ g_clear_pointer (&self->assistant, _gtk_source_assistant_destroy);
+
+ g_clear_weak_pointer (&self->view);
+
+ g_clear_handle_id (&self->delay_display_source, g_source_remove);
+ g_clear_handle_id (&self->dismiss_source, g_source_remove);
if (self->providers->len > 0)
{
@@ -59,6 +124,9 @@ gtk_source_hover_finalize (GObject *object)
g_clear_pointer (&self->providers, g_ptr_array_unref);
+ g_assert (self->delay_display_source == 0);
+ g_assert (self->dismiss_source == 0);
+
G_OBJECT_CLASS (gtk_source_hover_parent_class)->finalize (object);
}
@@ -81,11 +149,53 @@ GtkSourceHover *
_gtk_source_hover_new (GtkSourceView *view)
{
GtkSourceHover *self;
+ GtkEventController *focus;
+ GtkEventController *key;
+ GtkEventController *motion;
+ GtkEventController *scroll;
g_return_val_if_fail (GTK_SOURCE_IS_VIEW (view), NULL);
self = g_object_new (GTK_SOURCE_TYPE_HOVER, NULL);
- self->view = view;
+
+ g_set_weak_pointer (&self->view, view);
+
+ key = gtk_event_controller_key_new ();
+ g_signal_connect_object (key,
+ "key-pressed",
+ G_CALLBACK (on_key_pressed_cb),
+ self,
+ G_CONNECT_SWAPPED);
+ gtk_widget_add_controller (GTK_WIDGET (self), key);
+
+ focus = gtk_event_controller_focus_new ();
+ g_signal_connect_object (focus,
+ "enter",
+ G_CALLBACK (on_focus_enter_cb),
+ self,
+ G_CONNECT_SWAPPED);
+ g_signal_connect_object (focus,
+ "leave",
+ G_CALLBACK (on_focus_leave_cb),
+ self,
+ G_CONNECT_SWAPPED);
+ gtk_widget_add_controller (GTK_WIDGET (self), focus);
+
+ motion = gtk_event_controller_motion_new ();
+ g_signal_connect_object (motion,
+ "motion",
+ G_CALLBACK (on_motion_cb),
+ self,
+ G_CONNECT_SWAPPED);
+ gtk_widget_add_controller (GTK_WIDGET (self), motion);
+
+ scroll = gtk_event_controller_scroll_new (GTK_EVENT_CONTROLLER_SCROLL_BOTH_AXES);
+ g_signal_connect_object (scroll,
+ "scroll",
+ G_CALLBACK (on_scroll_cb),
+ self,
+ G_CONNECT_SWAPPED);
+ gtk_widget_add_controller (GTK_WIDGET (self), scroll);
return self;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]