[balsa/gtk3] Pass GdkEvent when emitting "popup-menu"
- From: Peter Bloomfield <PeterB src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [balsa/gtk3] Pass GdkEvent when emitting "popup-menu"
- Date: Mon, 8 Apr 2013 22:30:44 +0000 (UTC)
commit 1963c708a15ac641612b4154a59d95d3576dfbff
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date: Mon Apr 8 17:05:23 2013 -0400
Pass GdkEvent when emitting "popup-menu"
* libbalsa/html.c (lbh_context_menu_cb): pass the GdkEvent when
emitting "popup-menu";
* libbalsa/html.h: define key for GdkEvent.
* src/balsa-mime-widget-text.c (balsa_gtk_html_popup): use it to
pass the event time when popping up the menu.
ChangeLog | 8 ++++++++
libbalsa/html.c | 6 ++++++
libbalsa/html.h | 1 +
src/balsa-mime-widget-text.c | 20 ++++++++++++++++++--
4 files changed, 33 insertions(+), 2 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 0eadf52..34e6bae 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
2013-04-08 Peter Bloomfield
+ * libbalsa/html.c (lbh_context_menu_cb): pass the GdkEvent when
+ emitting "popup-menu";
+ * libbalsa/html.h: define key for GdkEvent.
+ * src/balsa-mime-widget-text.c (balsa_gtk_html_popup): use it to
+ pass the event time when popping up the menu.
+
+2013-04-08 Peter Bloomfield
+
* libbalsa/send.c (libbalsa_set_message_id): constify two
strings.
diff --git a/libbalsa/html.c b/libbalsa/html.c
index 1483b9d..8ce4955 100644
--- a/libbalsa/html.c
+++ b/libbalsa/html.c
@@ -448,8 +448,14 @@ lbh_context_menu_cb(WebKitWebView * web_view,
gboolean retval;
parent = gtk_widget_get_parent(GTK_WIDGET(web_view));
+ /* The signal is asynchronous, so gtk_get_current_event() gets NULL;
+ * we pass the event to the popup-menu handler: */
+ g_object_set_data(G_OBJECT(parent), LIBBALSA_HTML_POPUP_EVENT, event);
+
g_signal_emit_by_name(parent, "popup-menu", &retval);
+ g_object_set_data(G_OBJECT(parent), LIBBALSA_HTML_POPUP_EVENT, NULL);
+
return retval;
}
diff --git a/libbalsa/html.h b/libbalsa/html.h
index 03be566..1856c77 100644
--- a/libbalsa/html.h
+++ b/libbalsa/html.h
@@ -73,6 +73,7 @@ gboolean libbalsa_html_get_selection_bounds(GtkWidget * widget,
GdkRectangle *
selection_bounds);
+#define LIBBALSA_HTML_POPUP_EVENT "libbalsa-html-popup-event"
GtkWidget *libbalsa_html_popup_menu_widget(GtkWidget * widget);
GtkWidget *libbalsa_html_get_view_widget(GtkWidget * widget);
diff --git a/src/balsa-mime-widget-text.c b/src/balsa-mime-widget-text.c
index 4693915..1d3c844 100644
--- a/src/balsa-mime-widget-text.c
+++ b/src/balsa-mime-widget-text.c
@@ -1085,13 +1085,29 @@ static gboolean
balsa_gtk_html_popup(GtkWidget * html, BalsaMessage * bm)
{
GtkWidget *menu;
+ const GdkEvent *event;
+ GdkEvent *current_event = NULL;
+ guint32 time;
+ guint button;
menu = gtk_menu_new();
bmwt_populate_popup_menu(bm, html, GTK_MENU(menu));
gtk_widget_show_all(menu);
- gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL,
- 0, gtk_get_current_event_time());
+
+ /* In WebKit2, the context menu signal is asynchronous, so the
+ * GdkEvent is no longer current; instead it is preserved and passed
+ * to us: */
+ event = g_object_get_data(G_OBJECT(html), LIBBALSA_HTML_POPUP_EVENT);
+ if (!event)
+ event = current_event = gtk_get_current_event();
+ time = gdk_event_get_time(event);
+ button = 0;
+ gdk_event_get_button(event, &button);
+ if (current_event)
+ gdk_event_free(current_event);
+
+ gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, button, time);
return TRUE;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]