summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2018-06-26 22:51:05 +0200
committerCarlos Garnacho <carlosg@gnome.org>2018-06-26 22:51:05 +0200
commit9b3bbc748d46fd7abeed75dade9e37d213a60eff (patch)
tree8ce69faa95905ddd0cbad1f791d3b24d9fdfa2e3
parentee3818598ac72b42f8026db9877c6d3b5290f603 (diff)
downloadgtk+-9b3bbc748d46fd7abeed75dade9e37d213a60eff.tar.gz
demos: Update hypertext demo to use controllers
-rw-r--r--demos/gtk-demo/hypertext.c61
1 files changed, 28 insertions, 33 deletions
diff --git a/demos/gtk-demo/hypertext.c b/demos/gtk-demo/hypertext.c
index d0421cfd4d..3011972a5c 100644
--- a/demos/gtk-demo/hypertext.c
+++ b/demos/gtk-demo/hypertext.c
@@ -135,43 +135,23 @@ static void set_cursor_if_appropriate (GtkTextView *text_view,
gint x,
gint y);
-/* Links can also be activated by clicking or tapping.
- */
-static gboolean
-event_cb (GtkWidget *text_view,
- GdkEvent *ev)
+static void
+released_cb (GtkGestureMultiPress *gesture,
+ guint n_press,
+ gdouble x,
+ gdouble y,
+ GtkWidget *text_view)
{
GtkTextIter start, end, iter;
GtkTextBuffer *buffer;
- gdouble ex, ey;
- int x, y;
- GdkEventType type;
+ int tx, ty;
- type = gdk_event_get_event_type (ev);
+ if (gtk_gesture_single_get_button (GTK_GESTURE_SINGLE (gesture)) > 1)
+ return;
- gdk_event_get_coords (ev, &ex, &ey);
gtk_text_view_window_to_buffer_coords (GTK_TEXT_VIEW (text_view),
GTK_TEXT_WINDOW_WIDGET,
- ex, ey, &x, &y);
-
- if (type == GDK_BUTTON_RELEASE)
- {
- guint button;
-
- gdk_event_get_button (ev, &button);
- if (button != GDK_BUTTON_PRIMARY)
- return FALSE;
- }
- else if (type == GDK_MOTION_NOTIFY)
- {
- set_cursor_if_appropriate (GTK_TEXT_VIEW (text_view), x, y);
- return FALSE;
- }
- else if (type == GDK_TOUCH_END)
- {
- }
- else
- return FALSE;
+ x, y, &tx, &ty);
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view));
@@ -182,8 +162,15 @@ event_cb (GtkWidget *text_view,
if (gtk_text_view_get_iter_at_location (GTK_TEXT_VIEW (text_view), &iter, x, y))
follow_if_link (text_view, &iter);
+}
- return TRUE;
+static void
+motion_cb (GtkEventControllerMotion *controller,
+ gdouble x,
+ gdouble y,
+ GtkTextView *text_view)
+{
+ set_cursor_if_appropriate (text_view, x, y);
}
static gboolean hovering_over_link = FALSE;
@@ -259,8 +246,16 @@ do_hypertext (GtkWidget *do_widget)
controller = gtk_event_controller_key_new ();
g_signal_connect (controller, "key-pressed", G_CALLBACK (key_pressed), view);
gtk_widget_add_controller (view, controller);
- g_signal_connect (view, "event",
- G_CALLBACK (event_cb), NULL);
+
+ controller = GTK_EVENT_CONTROLLER (gtk_gesture_multi_press_new ());
+ g_signal_connect (controller, "released",
+ G_CALLBACK (released_cb), view);
+ gtk_widget_add_controller (view, controller);
+
+ controller = gtk_event_controller_motion_new ();
+ g_signal_connect (controller, "motion",
+ G_CALLBACK (motion_cb), view);
+ gtk_widget_add_controller (view, controller);
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));