[gtk+] about dialog: Stop using event-after as well
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] about dialog: Stop using event-after as well
- Date: Tue, 12 Dec 2017 15:30:16 +0000 (UTC)
commit 3aa6890e3e48198089e37222b7fde55744bdf40b
Author: Matthias Clasen <mclasen redhat com>
Date: Mon Dec 11 19:00:24 2017 -0500
about dialog: Stop using event-after as well
We can just use a multipress gesture for this purpose.
gtk/gtkaboutdialog.c | 50 +++++++++++++++++++++++++--------------------
gtk/ui/gtkaboutdialog.ui | 2 -
2 files changed, 28 insertions(+), 24 deletions(-)
---
diff --git a/gtk/gtkaboutdialog.c b/gtk/gtkaboutdialog.c
index 4541d59..cdf8d68 100644
--- a/gtk/gtkaboutdialog.c
+++ b/gtk/gtkaboutdialog.c
@@ -60,6 +60,7 @@
#include "gtkintl.h"
#include "gtkdialogprivate.h"
#include "gtkeventcontrollermotion.h"
+#include "gtkgesturemultipress.h"
/**
@@ -182,6 +183,8 @@ struct _GtkAboutDialogPrivate
GSList *visited_links;
+ GtkGesture *license_press;
+ GtkGesture *system_press;
GtkEventController *license_motion;
GtkEventController *system_motion;
@@ -244,9 +247,11 @@ static gboolean emit_activate_link (GtkAboutDialog
static gboolean text_view_key_press_event (GtkWidget *text_view,
GdkEventKey *event,
GtkAboutDialog *about);
-static gboolean text_view_event_after (GtkWidget *text_view,
- GdkEvent *event,
- GtkAboutDialog *about);
+static void text_view_released (GtkGestureMultiPress *press,
+ int n,
+ double x,
+ double y,
+ GtkAboutDialog *about);
static void text_view_motion (GtkEventControllerMotion *motion,
double x,
double y,
@@ -638,7 +643,6 @@ gtk_about_dialog_class_init (GtkAboutDialogClass *klass)
gtk_widget_class_bind_template_child_private (widget_class, GtkAboutDialog, system_view);
gtk_widget_class_bind_template_callback (widget_class, emit_activate_link);
- gtk_widget_class_bind_template_callback (widget_class, text_view_event_after);
gtk_widget_class_bind_template_callback (widget_class, text_view_key_press_event);
gtk_widget_class_bind_template_callback (widget_class, stack_visible_child_notify);
}
@@ -803,6 +807,10 @@ gtk_about_dialog_init (GtkAboutDialog *about)
switch_page (about, "main");
update_stack_switcher_visibility (about);
+ priv->license_press = gtk_gesture_multi_press_new (priv->license_view);
+ g_signal_connect (priv->license_press, "released", G_CALLBACK (text_view_released), about);
+ priv->system_press = gtk_gesture_multi_press_new (priv->system_view);
+ g_signal_connect (priv->system_press, "released", G_CALLBACK (text_view_released), about);
priv->license_motion = gtk_event_controller_motion_new (priv->license_view);
g_signal_connect (priv->license_motion, "motion", G_CALLBACK (text_view_motion), about);
priv->system_motion = gtk_event_controller_motion_new (priv->system_view);
@@ -844,6 +852,8 @@ gtk_about_dialog_finalize (GObject *object)
g_slist_free_full (priv->credit_sections, destroy_credit_section);
g_slist_free_full (priv->visited_links, g_free);
+ g_object_unref (priv->license_press);
+ g_object_unref (priv->system_press);
g_object_unref (priv->license_motion);
g_object_unref (priv->system_motion);
@@ -2037,40 +2047,36 @@ text_view_key_press_event (GtkWidget *text_view,
return FALSE;
}
-static gboolean
-text_view_event_after (GtkWidget *text_view,
- GdkEvent *event,
- GtkAboutDialog *about)
+static void
+text_view_released (GtkGestureMultiPress *gesture,
+ int n_press,
+ double x,
+ double y,
+ GtkAboutDialog *about)
{
+ GtkWidget *text_view;
GtkTextIter start, end, iter;
GtkTextBuffer *buffer;
- gdouble event_x, event_y;
- gint x, y;
- guint button;
-
- if (gdk_event_get_event_type (event) != GDK_BUTTON_RELEASE)
- return FALSE;
+ gint tx, ty;
- if (!gdk_event_get_button (event, &button) || button != GDK_BUTTON_PRIMARY)
- return FALSE;
+ if (gtk_gesture_single_get_current_button (GTK_GESTURE_SINGLE (gesture)) != GDK_BUTTON_PRIMARY)
+ return;
+ text_view = gtk_event_controller_get_widget (GTK_EVENT_CONTROLLER (gesture));
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view));
/* we shouldn't follow a link if the user has selected something */
gtk_text_buffer_get_selection_bounds (buffer, &start, &end);
if (gtk_text_iter_get_offset (&start) != gtk_text_iter_get_offset (&end))
- return FALSE;
+ return;
- gdk_event_get_coords (event, &event_x, &event_y);
gtk_text_view_window_to_buffer_coords (GTK_TEXT_VIEW (text_view),
GTK_TEXT_WINDOW_WIDGET,
- event_x, event_y, &x, &y);
+ x, y, &tx, &ty);
- gtk_text_view_get_iter_at_location (GTK_TEXT_VIEW (text_view), &iter, x, y);
+ gtk_text_view_get_iter_at_location (GTK_TEXT_VIEW (text_view), &iter, tx, ty);
follow_if_link (about, GTK_TEXT_VIEW (text_view), &iter);
-
- return FALSE;
}
static void
diff --git a/gtk/ui/gtkaboutdialog.ui b/gtk/ui/gtkaboutdialog.ui
index 5abea72..d15ad51 100644
--- a/gtk/ui/gtkaboutdialog.ui
+++ b/gtk/ui/gtkaboutdialog.ui
@@ -168,7 +168,6 @@
<property name="left-margin">8</property>
<property name="right-margin">8</property>
<property name="cursor-visible">0</property>
- <signal name="event-after" handler="text_view_event_after" swapped="no"/>
<signal name="key-press-event" handler="text_view_key_press_event" swapped="no"/>
</object>
</child>
@@ -198,7 +197,6 @@
<property name="left-margin">8</property>
<property name="right-margin">8</property>
<property name="cursor-visible">0</property>
- <signal name="event-after" handler="text_view_event_after" swapped="no"/>
<signal name="key-press-event" handler="text_view_key_press_event" swapped="no"/>
</object>
</child>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]