summaryrefslogtreecommitdiff
path: root/gtk/gtkmenu.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2015-06-15 19:46:33 -0400
committerMatthias Clasen <mclasen@redhat.com>2015-06-15 19:50:02 -0400
commite367c4baa0395c9cc7e7fafc70459c9e63b66322 (patch)
treebafe39c75116287689bd4cda50d00abe696a56aa /gtk/gtkmenu.c
parent002699402dd045e71bd108463a3f8cc7442ec538 (diff)
downloadgtk+-e367c4baa0395c9cc7e7fafc70459c9e63b66322.tar.gz
Deal with events from wrong display
GtkInspector is opening a separate display connection, which makes it more likely that gtk_get_current_event() returns an event from the "wrong" display.
Diffstat (limited to 'gtk/gtkmenu.c')
-rw-r--r--gtk/gtkmenu.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/gtk/gtkmenu.c b/gtk/gtkmenu.c
index 7219953acc..21a737ef14 100644
--- a/gtk/gtkmenu.c
+++ b/gtk/gtkmenu.c
@@ -1535,20 +1535,24 @@ gtk_menu_popup_for_device (GtkMenu *menu,
gboolean grab_keyboard;
GtkWidget *parent_toplevel;
GdkDevice *keyboard, *pointer, *source_device = NULL;
+ GdkDisplay *display;
g_return_if_fail (GTK_IS_MENU (menu));
g_return_if_fail (device == NULL || GDK_IS_DEVICE (device));
+ display = gtk_widget_get_display (GTK_WIDGET (menu));
+
if (device == NULL)
device = gtk_get_current_event_device ();
+ if (device && gdk_device_get_display (device) != display)
+ device = NULL;
+
if (device == NULL)
{
- GdkDisplay *display;
GdkDeviceManager *device_manager;
GList *devices;
- display = gtk_widget_get_display (GTK_WIDGET (menu));
device_manager = gdk_display_get_device_manager (display);
devices = gdk_device_manager_list_devices (device_manager, GDK_DEVICE_TYPE_MASTER);