[balsa/wip/gtk4: 98/351] Use a GtkGesture instead of "button-press-event"
- From: Peter Bloomfield <peterb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [balsa/wip/gtk4: 98/351] Use a GtkGesture instead of "button-press-event"
- Date: Wed, 23 May 2018 21:25:11 +0000 (UTC)
commit ef77b71ebc8835bac12d5d75a4769a14a342ec82
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date: Sun Dec 17 13:42:22 2017 -0500
Use a GtkGesture instead of "button-press-event"
balsa-mime-widget-text: Use a GtkGestureMultiPress instead of the widget's
"button-press-event" signal to store event coordinates.
src/balsa-mime-widget-text.c | 81 ++++++++++++++++++++++++++++-------------
1 files changed, 55 insertions(+), 26 deletions(-)
---
diff --git a/src/balsa-mime-widget-text.c b/src/balsa-mime-widget-text.c
index a33db35..d93a350 100644
--- a/src/balsa-mime-widget-text.c
+++ b/src/balsa-mime-widget-text.c
@@ -91,7 +91,11 @@ static GdkCursor *url_cursor_normal = NULL;
static GdkCursor *url_cursor_over_url = NULL;
-static gboolean store_button_coords(GtkWidget * widget, GdkEvent * event, gpointer data);
+static void store_button_coords(GtkGestureMultiPress *multi_press,
+ gint n_press,
+ gdouble x,
+ gdouble y,
+ gpointer user_data);
static gboolean check_over_url(GtkWidget * widget,
GdkEvent * event,
BalsaMimeWidgetText * mwt);
@@ -264,8 +268,13 @@ balsa_mime_widget_new_text(BalsaMessage * bm, LibBalsaMessageBody * mime_body,
g_signal_connect_after(G_OBJECT(mw->widget), "realize",
G_CALLBACK(fix_text_widget), mwt->url_list);
if (mwt->url_list != NULL) {
- g_signal_connect(G_OBJECT(mw->widget), "button_press_event",
- G_CALLBACK(store_button_coords), NULL);
+ GtkGesture *gesture;
+
+ gesture = gtk_gesture_multi_press_new(mw->widget);
+ g_object_set_data_full(G_OBJECT(mw->widget), "mwt-gesture", gesture, g_object_unref);
+ g_signal_connect(gesture, "pressed",
+ G_CALLBACK(store_button_coords), bm);
+
g_signal_connect(G_OBJECT(mw->widget), "button_release_event",
G_CALLBACK(check_call_url), mwt->url_list);
g_signal_connect(G_OBJECT(mw->widget), "motion-notify-event",
@@ -584,28 +593,29 @@ text_view_populate_popup(GtkWidget *widget, GtkMenu *menu,
/* -- URL related stuff -- */
-static gboolean
-store_button_coords(GtkWidget * widget, GdkEvent * event,
- gpointer data)
+static void
+store_button_coords(GtkGestureMultiPress *multi_press,
+ gint n_press,
+ gdouble x,
+ gdouble y,
+ gpointer user_data)
{
- guint button;
+ GtkGesture *gesture;
+ const GdkEvent *event;
+ GdkModifierType state;
- if (gdk_event_get_event_type(event) == GDK_BUTTON_PRESS &&
- gdk_event_get_button(event, &button) && button == 1) {
- gdouble x_win, y_win;
- GdkModifierType state;
+ gesture = GTK_GESTURE(multi_press);
+ event = gtk_gesture_get_last_event(gesture, gtk_gesture_get_last_updated_sequence(gesture));
+ g_return_if_fail(event != NULL);
- if (gdk_event_get_coords(event, &x_win, &y_win) &&
- gdk_event_get_state(event, &state)) {
- stored_x = (gint) x_win;
- stored_y = (gint) y_win;
- stored_mask = state;
- }
+ stored_x = (gint) x;
+ stored_y = (gint) y;
+ if (gdk_event_get_state(event, &state)) {
/* compare only shift, ctrl, and mod1-mod5 */
- stored_mask &= STORED_MASK_BITS;
+ state &= STORED_MASK_BITS;
+ stored_mask = state;
}
- return FALSE;
}
/* check if we are over an url and change the cursor in this case */
@@ -1144,12 +1154,25 @@ balsa_gtk_html_popup(GtkWidget * html, BalsaMessage * bm)
return TRUE;
}
-static gboolean
-balsa_gtk_html_button_press_cb(GtkWidget * html, GdkEventButton * event,
- BalsaMessage * bm)
+static void
+mwt_gesture_pressed_cb(GtkGestureMultiPress *multi_press,
+ gint n_press,
+ gdouble x,
+ gdouble y,
+ gpointer user_data)
{
- return (gdk_event_triggers_context_menu((GdkEvent *) event)
- ? balsa_gtk_html_popup(html, bm) : FALSE);
+ GtkGesture *gesture;
+ const GdkEvent *event;
+ GtkWidget *html;
+ BalsaMessage *bm = user_data;
+
+ gesture = GTK_GESTURE(multi_press);
+ event = gtk_gesture_get_last_event(gesture, gtk_gesture_get_last_updated_sequence(gesture));
+ g_return_if_fail(event != NULL);
+ html = gtk_event_controller_get_widget(GTK_EVENT_CONTROLLER(gesture));
+
+ if (gdk_event_triggers_context_menu(event))
+ balsa_gtk_html_popup(html, bm);
}
static void
@@ -1186,8 +1209,14 @@ bm_widget_new_html(BalsaMessage * bm, LibBalsaMessageBody * mime_body)
g_signal_connect(widget, "populate-popup",
G_CALLBACK(bmwt_populate_popup_cb), mw->widget);
} else {
- g_signal_connect(mw->widget, "button-press-event",
- G_CALLBACK(balsa_gtk_html_button_press_cb), bm);
+ GtkGesture *gesture;
+
+ gesture = gtk_gesture_multi_press_new(mw->widget);
+ gtk_gesture_single_set_button(GTK_GESTURE_SINGLE(gesture), 0);
+ g_object_set_data_full(G_OBJECT(mw->widget), "mwt-gesture", gesture, g_object_unref);
+ g_signal_connect(gesture, "pressed",
+ G_CALLBACK(mwt_gesture_pressed_cb), bm);
+
g_signal_connect(mw->widget, "popup-menu",
G_CALLBACK(balsa_gtk_html_popup), bm);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]