+gint
+gdk_display_pointer_is_grabbed (GdkDisplay *display)
+{
+ return _gdk_directfb_pointer_grab_window != NULL;
+}
+
+void
+gdk_display_pointer_ungrab (GdkDisplay *display,guint32 time)
+{
+ gdk_directfb_pointer_ungrab (time, _gdk_directfb_pointer_implicit_grab);
+}
+
+
+/*************************************************************************************************
+ * Keyboard
+ */
+
+GdkGrabStatus
+gdk_directfb_keyboard_grab (GdkDisplay *display,GdkWindow *window,
+ gint owner_events,
+ guint32 time)
+{
+ GdkWindow *toplevel;
+ GdkWindowImplDirectFB *impl;
+
+ g_return_val_if_fail (GDK_IS_WINDOW (window), 0);
+
+ if (_gdk_directfb_keyboard_grab_window)
+ gdk_keyboard_ungrab (time);
+
+ toplevel = gdk_directfb_window_find_toplevel (window);
+ impl = GDK_WINDOW_IMPL_DIRECTFB (GDK_WINDOW_OBJECT (toplevel)->impl);
+
+ if (impl->window)
+ {
+ if (impl->window->GrabKeyboard (impl->window) == DFB_LOCKED)
+ return GDK_GRAB_ALREADY_GRABBED;
+ }
+
+ _gdk_directfb_keyboard_grab_window = g_object_ref (window);
+ _gdk_directfb_keyboard_grab_owner_events = owner_events;
+ return GDK_GRAB_SUCCESS;
+}
+
+void
+gdk_directfb_keyboard_ungrab (GdkDisplay *display,guint32 time)
+{
+ GdkWindow *toplevel;
+ GdkWindowImplDirectFB *impl;
+
+ if (!_gdk_directfb_keyboard_grab_window)
+ return;