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 | |
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.
-rw-r--r-- | gtk/gtkmenu.c | 8 | ||||
-rw-r--r-- | gtk/gtkmenubutton.c | 3 |
2 files changed, 8 insertions, 3 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); diff --git a/gtk/gtkmenubutton.c b/gtk/gtkmenubutton.c index 17c822b384..2126087dd4 100644 --- a/gtk/gtkmenubutton.c +++ b/gtk/gtkmenubutton.c @@ -398,7 +398,8 @@ popup_menu (GtkMenuButton *menu_button, break; } - if (event) + if (event != NULL && + gdk_event_get_screen (event) == gtk_widget_get_screen (GTK_WIDGET (menu_button))) { device = gdk_event_get_device (event); gdk_event_get_button (event, &button); |