summaryrefslogtreecommitdiff
path: root/gdk/x11/gdkdevice-xi.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdk/x11/gdkdevice-xi.c')
-rw-r--r--gdk/x11/gdkdevice-xi.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/gdk/x11/gdkdevice-xi.c b/gdk/x11/gdkdevice-xi.c
index 8ffd8dfa06..71b0ab5c9c 100644
--- a/gdk/x11/gdkdevice-xi.c
+++ b/gdk/x11/gdkdevice-xi.c
@@ -25,6 +25,7 @@
#include "gdkdeviceprivate.h"
#include "gdkprivate-x11.h"
#include "gdkintl.h"
+#include "gdkasync.h"
#include "gdkx.h"
#define MAX_DEVICE_CLASSES 13
@@ -437,11 +438,18 @@ gdk_device_xi_grab (GdkDevice *device,
XEventClass event_classes[MAX_DEVICE_CLASSES];
gint status, num_classes;
GdkDeviceXI *device_xi;
+ GdkDisplay *display;
device_xi = GDK_DEVICE_XI (device);
+ display = gdk_device_get_display (device);
find_events (device, event_mask, event_classes, &num_classes);
- status = XGrabDevice (GDK_WINDOW_XDISPLAY (window),
+#ifdef G_ENABLE_DEBUG
+ if (_gdk_debug_flags & GDK_DEBUG_NOGRABS)
+ status = GrabSuccess;
+ else
+#endif
+ status = XGrabDevice (GDK_DISPLAY_XDISPLAY (display),
device_xi->xdevice,
GDK_WINDOW_XID (window),
owner_events,
@@ -449,6 +457,8 @@ gdk_device_xi_grab (GdkDevice *device,
GrabModeAsync, GrabModeAsync,
time_);
+ _gdk_x11_display_update_grab_info (display, device, status);
+
return _gdk_x11_convert_grab_status (status);
}
@@ -456,15 +466,20 @@ static void
gdk_device_xi_ungrab (GdkDevice *device,
guint32 time_)
{
- GdkDisplay *display;
GdkDeviceXI *device_xi;
+ GdkDisplay *display;
+ Display *xdisplay;
+ unsigned long serial;
device_xi = GDK_DEVICE_XI (device);
display = gdk_device_get_display (device);
+ xdisplay = GDK_DISPLAY_XDISPLAY (display);
+
+ serial = NextRequest (xdisplay);
+
+ XUngrabDevice (xdisplay, device_xi->xdevice, time_);
- XUngrabDevice (GDK_DISPLAY_XDISPLAY (device),
- device_xi->xdevice,
- time_);
+ _gdk_x11_display_update_grab_info_ungrab (display, device, time_, serial);
}
static GdkWindow*