diff options
author | Matthias Clasen <mclasen@redhat.com> | 2015-06-15 19:46:33 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2015-06-15 19:50:02 -0400 |
commit | e367c4baa0395c9cc7e7fafc70459c9e63b66322 (patch) | |
tree | bafe39c75116287689bd4cda50d00abe696a56aa /gtk/gtkmenu.c | |
parent | 002699402dd045e71bd108463a3f8cc7442ec538 (diff) | |
download | gtk+-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.c | 8 |
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); |