[gtk+/xi2: 1022/1239] GdkDevice: Add gdk_device_grab().
- From: Carlos Garnacho <carlosg src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gtk+/xi2: 1022/1239] GdkDevice: Add gdk_device_grab().
- Date: Tue, 29 Sep 2009 10:55:08 +0000 (UTC)
commit f94b815b134eb1ec83868008fd0cf31890ed36da
Author: Carlos Garnacho <carlos gnome org>
Date: Fri Sep 4 17:20:53 2009 +0200
GdkDevice: Add gdk_device_grab().
gdk/gdk.h | 8 +++++++
gdk/gdkdevice.c | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 72 insertions(+), 0 deletions(-)
---
diff --git a/gdk/gdk.h b/gdk/gdk.h
index 31a0ea5..77482ef 100644
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -124,6 +124,14 @@ GdkGrabStatus gdk_keyboard_grab (GdkWindow *window,
gboolean owner_events,
guint32 time_);
+GdkGrabStatus gdk_device_grab (GdkDevice *device,
+ GdkWindow *window,
+ GdkGrabOwnership grab_ownership,
+ gboolean owner_events,
+ GdkEventMask event_mask,
+ GdkCursor *cursor,
+ guint32 time_);
+
gboolean gdk_pointer_grab_info_libgtk_only (GdkDisplay *display,
GdkWindow **grab_window,
gboolean *owner_events);
diff --git a/gdk/gdkdevice.c b/gdk/gdkdevice.c
index e6dacbb..83c3faf 100644
--- a/gdk/gdkdevice.c
+++ b/gdk/gdkdevice.c
@@ -483,6 +483,70 @@ gdk_device_get_axis (GdkDevice *device,
return FALSE;
}
+GdkGrabStatus
+gdk_device_grab (GdkDevice *device,
+ GdkWindow *window,
+ GdkGrabOwnership grab_ownership,
+ gboolean owner_events,
+ GdkEventMask event_mask,
+ GdkCursor *cursor,
+ guint32 time_)
+{
+ GdkGrabStatus res;
+ GdkWindow *native;
+
+ g_return_val_if_fail (GDK_IS_DEVICE (device), 0);
+ g_return_val_if_fail (GDK_IS_WINDOW (window), 0);
+
+ if (_gdk_native_windows)
+ native = window;
+ else
+ native = gdk_window_get_toplevel (window);
+
+ while (((GdkWindowObject *) native)->window_type == GDK_WINDOW_OFFSCREEN)
+ {
+ native = gdk_offscreen_window_get_embedder (native);
+
+ if (native == NULL ||
+ (!_gdk_window_has_impl (native) &&
+ !gdk_window_is_viewable (native)))
+ return GDK_GRAB_NOT_VIEWABLE;
+
+ native = gdk_window_get_toplevel (native);
+ }
+
+ res = _gdk_windowing_device_grab (device,
+ window,
+ native,
+ owner_events,
+ event_mask,
+ NULL,
+ cursor,
+ time_);
+
+ if (res == GDK_GRAB_SUCCESS)
+ {
+ GdkDisplay *display;
+ gulong serial;
+
+ display = gdk_drawable_get_display (window);
+ serial = _gdk_windowing_window_get_next_serial (display);
+
+ _gdk_display_add_pointer_grab (display,
+ device,
+ window,
+ native,
+ GDK_OWNERSHIP_NONE,
+ owner_events,
+ event_mask,
+ serial,
+ time_,
+ FALSE);
+ }
+
+ return res;
+}
+
/* Private API */
void
_gdk_device_reset_axes (GdkDevice *device)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]