summaryrefslogtreecommitdiff
path: root/mate-panel/menu.c
diff options
context:
space:
mode:
Diffstat (limited to 'mate-panel/menu.c')
-rw-r--r--mate-panel/menu.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/mate-panel/menu.c b/mate-panel/menu.c
index f92dbeaa..c9e0bcf6 100644
--- a/mate-panel/menu.c
+++ b/mate-panel/menu.c
@@ -690,6 +690,7 @@ drag_end_menu_cb (GtkWidget *widget, GdkDragContext *context)
gboolean status;
GdkDisplay *display;
GdkDevice *pointer;
+ GdkDevice *keyboard;
GdkDeviceManager *device_manager;
#endif
GdkWindow *window = gtk_widget_get_window (xgrab_shell);
@@ -698,10 +699,12 @@ drag_end_menu_cb (GtkWidget *widget, GdkDragContext *context)
#if GTK_CHECK_VERSION (3, 0, 0)
display = gdk_window_get_display (window);
device_manager = gdk_display_get_device_manager (display);
+ keyboard = gdk_device_get_associated_device (pointer);
pointer = gdk_device_manager_get_client_pointer (device_manager);
/* FIXMEgpoo: Not sure if report to GDK_OWNERSHIP_WINDOW
- or GDK_OWNERSHIP_APPLICATION */
+ or GDK_OWNERSHIP_APPLICATION Idem for the
+ keyboard below */
status = gdk_device_grab (pointer, window,
GDK_OWNERSHIP_WINDOW, TRUE,
GDK_BUTTON_PRESS_MASK
@@ -712,17 +715,23 @@ drag_end_menu_cb (GtkWidget *widget, GdkDragContext *context)
cursor, GDK_CURRENT_TIME);
if (!status)
+ {
+ if (gdk_device_grab (keyboard, window,
+ GDK_OWNERSHIP_WINDOW, TRUE,
+ GDK_KEY_PRESS | GDK_KEY_RELEASE,
+ NULL, GDK_CURRENT_TIME) == GDK_GRAB_SUCCESS)
+ {
#else
if ((gdk_pointer_grab (window, TRUE,
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK |
GDK_POINTER_MOTION_MASK,
NULL, cursor, GDK_CURRENT_TIME) == 0))
-#endif
{
if (gdk_keyboard_grab (window, TRUE,
GDK_CURRENT_TIME) == 0)
{
+#endif
/* FIXME fix for GTK3 */
#if !GTK_CHECK_VERSION (3, 0, 0)
GTK_MENU_SHELL (xgrab_shell)->have_xgrab = TRUE;