[balsa/wip/gtk4: 97/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: 97/351] Use a GtkGesture instead of "button-press-event"
- Date: Wed, 23 May 2018 21:25:06 +0000 (UTC)
commit d9f17705b90f5c425d212f5df86b943f4ddec2bf
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date: Sat Dec 16 20:02:58 2017 -0500
Use a GtkGesture instead of "button-press-event"
Use a GtkGestureMultiPress instead of the widget's "button-press-event"
signal to pop up the context menu.
Also implement a "popup-menu" callback, which does not work at present.
src/balsa-mime-widget-image.c | 59 +++++++++++++++++++++++++++++++++-------
1 files changed, 48 insertions(+), 11 deletions(-)
---
diff --git a/src/balsa-mime-widget-image.c b/src/balsa-mime-widget-image.c
index 2325ffe..e8f57a7 100644
--- a/src/balsa-mime-widget-image.c
+++ b/src/balsa-mime-widget-image.c
@@ -66,8 +66,13 @@ balsa_mime_widget_image_class_init(BalsaMimeWidgetImageClass * klass)
* End of GObject class definitions
*/
-static gboolean balsa_image_button_press_cb(GtkWidget * widget, GdkEventButton * event,
- GtkMenu * menu);
+static void balsa_mime_widget_image_gesture_pressed_cb(GtkGestureMultiPress *multi_press,
+ gint n_press,
+ gdouble x,
+ gdouble y,
+ gpointer user_data);
+static gboolean balsa_mime_widget_image_popup_menu_cb(GtkWidget * widget,
+ gpointer user_data);
static gboolean img_check_size(GtkImage ** widget_p);
BalsaMimeWidget *
@@ -78,6 +83,7 @@ balsa_mime_widget_new_image(BalsaMessage * bm,
GdkPixbuf *pixbuf;
GtkWidget *image;
GError * load_err = NULL;
+ GtkGesture *gesture;
BalsaMimeWidget *mw;
g_return_val_if_fail(mime_body != NULL, NULL);
@@ -98,8 +104,17 @@ balsa_mime_widget_new_image(BalsaMessage * bm,
g_object_set_data_full(G_OBJECT(image), "pixbuf", pixbuf, g_object_unref);
- g_signal_connect(image, "button-press-event",
- G_CALLBACK(balsa_image_button_press_cb), data);
+ gesture = gtk_gesture_multi_press_new(GTK_WIDGET(image));
+ gtk_gesture_single_set_button(GTK_GESTURE_SINGLE(gesture), 0);
+ g_object_set_data_full(G_OBJECT(image), "mwi-gesture", gesture, g_object_unref);
+ g_signal_connect(gesture, "pressed",
+ G_CALLBACK(balsa_mime_widget_image_gesture_pressed_cb), data);
+
+#if 0
+ gtk_widget_add_events(GTK_WIDGET(image), GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK);
+#endif
+ g_signal_connect(image, "popup-menu",
+ G_CALLBACK(balsa_mime_widget_image_popup_menu_cb), data);
mw = (BalsaMimeWidget *) g_object_new(BALSA_TYPE_MIME_WIDGET_IMAGE, NULL);
mw->widget = image;
@@ -128,15 +143,37 @@ balsa_mime_widget_image_resize_all(GtkWidget * widget, gpointer user_data)
}
+static void
+balsa_mime_widget_image_gesture_pressed_cb(GtkGestureMultiPress *multi_press,
+ gint n_press,
+ gdouble x,
+ gdouble y,
+ gpointer user_data)
+{
+ GtkMenu *menu = user_data;
+ GtkGesture *gesture;
+ const GdkEvent *event;
+
+ 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_triggers_context_menu(event)) {
+ gtk_menu_popup_at_pointer(menu, event);
+ }
+}
+
static gboolean
-balsa_image_button_press_cb(GtkWidget * widget, GdkEventButton * event,
- GtkMenu * menu)
+balsa_mime_widget_image_popup_menu_cb(GtkWidget * widget,
+ gpointer user_data)
{
- if (gdk_event_triggers_context_menu((GdkEvent *) event)) {
- gtk_menu_popup_at_pointer(menu, (GdkEvent *) event);
- return TRUE;
- } else
- return FALSE;
+ GtkMenu *menu = user_data;
+
+ gtk_menu_popup_at_widget(GTK_MENU(menu), widget,
+ GDK_GRAVITY_CENTER, GDK_GRAVITY_CENTER,
+ NULL);
+
+ return TRUE;
}
static gboolean
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]