[PATCH wayland] Add a relative_grab request to the wl_shell_surface interface

Philipp Brüschweiler blei42 at gmail.com
Mon Aug 27 11:55:44 PDT 2012

This request can be used to grab the pointer of a specified seat. A
pointer grabbed in this way will be made invisible and won't send any
more motion events. Instead it reports relative motion using the motion
event on the returned object.

A grab can be broken by the application by destroying the wl_relative_grab
object, or by the compositor, in which case the compositor sends a
destroy_me event to the application.

Recommended behaviour for compositors is to break grabs when the keyboard
focus changes to a different window, e.g. by alt-tabbing out of the
grabbing application.
 protocol/wayland.xml | 23 +++++++++++++++++++++++
 src/wayland-server.h |  1 +
 2 Dateien geändert, 24 Zeilen hinzugefügt(+)

diff --git a/protocol/wayland.xml b/protocol/wayland.xml
index 5e56cb8..f903fef 100644
--- a/protocol/wayland.xml
+++ b/protocol/wayland.xml
@@ -412,6 +412,23 @@
+  <interface name="wl_relative_grab" version="1">
+    <request name="destroy" type="destructor"/>
+    <event name="motion">
+      <description summary="pointer motion event">
+        Notification of pointer location change. The arguments dx/dy
+	are relative movements since the last motion event.
+      </description>
+      <arg name="time" type="uint"/>
+      <arg name="dx" type="fixed"/>
+      <arg name="dy" type="fixed"/>
+    </event>
+    <event name="destroy_me"/>
+  </interface>
   <interface name="wl_shell_surface" version="1">
     <description summary="desktop style meta data interface">
@@ -434,6 +451,12 @@
       <arg name="serial" type="uint"/>
+    <request name="relative_grab">
+      <arg name="relative_grab" type="new_id" interface="wl_relative_grab"/>
+      <arg name="seat" type="object" interface="wl_seat"/>
+      <arg name="serial" type="uint"/>
+    </request>
     <enum name="resize">
       <entry name="none" value="0"/>
       <entry name="top" value="1"/>
diff --git a/src/wayland-server.h b/src/wayland-server.h
index f092145..efc69fc 100644
--- a/src/wayland-server.h
+++ b/src/wayland-server.h
@@ -204,6 +204,7 @@ struct wl_pointer_grab {
 	struct wl_pointer *pointer;
 	struct wl_surface *focus;
 	wl_fixed_t x, y;
+	int is_relative;
 struct wl_keyboard_grab;

More information about the wayland-devel mailing list