- g_return_val_if_fail (widget->window != NULL, NULL);
-
- if (gdk_keyboard_grab (widget->window, FALSE,
- gdk_event_get_time (event)) != GDK_GRAB_SUCCESS)
+ window = gtk_widget_get_window (widget);
+ context = gtk_widget_get_style_context (widget);
+
+ g_return_val_if_fail (window != NULL, NULL);
+
+ if (event)
+ device = gdk_event_get_device (event);
+ else
+ device = gtk_get_current_event_device ();
+
+ if (!device)
+ return NULL;
+
+ if (gdk_device_get_source (device) == GDK_SOURCE_KEYBOARD)
+ {
+ keyb = device;
+ pointer = gdk_device_get_associated_device (device);
+ }
+ else
+ {
+ pointer = device;
+ keyb = gdk_device_get_associated_device (device);
+ }
+
+ time = gdk_event_get_time (event);
+
+ if (gdk_device_grab (keyb, window,
+ GDK_OWNERSHIP_WINDOW, FALSE,
+ GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK,
+ NULL, time) != GDK_GRAB_SUCCESS)