[PATCH 3/4] protocol: Introduce pointer_lock interface

Kristian Høgsberg krh at bitplanet.net
Mon Feb 25 18:24:47 PST 2013


The pointer_lock interface is modelled after the HTML5 pointer lock
extension:

  https://dvcs.w3.org/hg/pointerlock/raw-file/default/index.html

The extension allows a wayland client to lock the pointer while a surface
is active.  While the pointer is locked, the client receives relative
motion events and the pointer position isn't updated.
---
 protocol/wayland.xml | 37 +++++++++++++++++++++++++++++++++++--
 1 file changed, 35 insertions(+), 2 deletions(-)

diff --git a/protocol/wayland.xml b/protocol/wayland.xml
index b43799d..5e30cd1 100644
--- a/protocol/wayland.xml
+++ b/protocol/wayland.xml
@@ -951,7 +951,7 @@
     </request>
    </interface>
 
-  <interface name="wl_seat" version="1">
+  <interface name="wl_seat" version="2">
     <description summary="seat">
       A group of keyboards, pointer (mice, for example) and touch
       devices . This object is published as a global during start up,
@@ -967,9 +967,9 @@
       <entry name="pointer" value="1" summary="wl_pointer"/>
       <entry name="keyboard" value="2" summary="wl_keyboard"/>
       <entry name="touch" value="4" summary="wl_touch"/>
+      <entry name="pointer_lock" value="8" summary="lock pointer"/>
     </enum>
 
-
     <event name="capabilities">
       <description summary="seat capabilities changed">
         This is emitted whenever a seat gains or loses the pointer,
@@ -1002,6 +1002,39 @@
       </description>
       <arg name="id" type="new_id" interface="wl_touch"/>
     </request>
+
+    <request name="lock_pointer" since="2">
+      <description summary="return pointer object">
+	The lock_pointer request lets the client disable pointer
+	motion and request relative motion events.
+
+	This request initializes the pointer lock and activates it in
+	case the surface is active.  If the surface isn't active when
+	the server receives the request, the compositor will activate
+	the pointer_lock when the surface is eventually activated.
+
+	The lock_pointer request will create a new wl_pointer object.
+	When the pointer_lock is activated, the regular wl_seat
+	pointer send out a leave event and the pointer_lock wl_pointer
+	object will receive an enter event.  The enter event will
+	indicate the position of the pointer at the time of
+	activation.  While the pointer lock is active, the wl_pointer
+	object will send out motion events, but the coordinates
+	correspond to relative pointer motion.
+
+	The compositor can break the pointer_lock at any time, for
+	example when switching to a different application (eg,
+	alt-tab), if a notification pops up or when the screensaver
+	starts.  When this happens the pointer lock wl_pointer will
+	send a leave event.  When or if the server activates the
+	surface again, the client will receive an enter event again.
+
+	The client can break the pointer lock at any time by releasing
+	the pointer lock wl_pointer using the wl_pointer.release request.
+      </description>
+      <arg name="id" type="new_id" interface="wl_pointer"/>
+      <arg name="surface" type="object" interface="wl_surface"/>
+    </request>
   </interface>
 
   <interface name="wl_pointer" version="1">
-- 
1.8.1.2



More information about the wayland-devel mailing list