<?xml version="1.0" encoding="UTF-8"?>
<protocol name="pointer_constraints_unstable_v1">

  <copyright>
    Copyright © 2014      Jonas Ådahl
    Copyright © 2015      Red Hat Inc.

    Permission is hereby granted, free of charge, to any person obtaining a
    copy of this software and associated documentation files (the "Software"),
    to deal in the Software without restriction, including without limitation
    the rights to use, copy, modify, merge, publish, distribute, sublicense,
    and/or sell copies of the Software, and to permit persons to whom the
    Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice (including the next
    paragraph) shall be included in all copies or substantial portions of the
    Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
    THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
    DEALINGS IN THE SOFTWARE.
  </copyright>

  <description summary="protocol for constraining pointer motions">
    This protocol specifies a set of interfaces used for adding constraints to
    the motion of a pointer. Possible constraints include confining pointer
    motions to a given region, or locking it to its current position.

    In order to constrain the pointer, a client must first bind the global
    interface "wp_pointer_constraints" which, if a compositor supports pointer
    constraints, is exposed by the registry. Using the bound global object, the
    client uses the request that corresponds to the type of constraint it wants
    to make. See wp_pointer_constraints for more details.

    Warning! The protocol described in this file is experimental and backward
    incompatible changes may be made. Backward compatible changes may be added
    together with the corresponding interface version bump. Backward
    incompatible changes are done by bumping the version number in the protocol
    and interface names and resetting the interface version. Once the protocol
    is to be declared stable, the 'z' prefix and the version number in the
    protocol and interface names are removed and the interface version number is
    reset.
  </description>

  <interface name="zwp_pointer_constraints_v1" version="1">
    <description summary="constrain the movement of a pointer">
      The global interface exposing pointer constraining functionality. It
      exposes two requests: lock_pointer for locking the pointer to its
      position, and confine_pointer for locking the pointer to a region.

      The lock_pointer and confine_pointer requests create the objects
      wp_locked_pointer and wp_confined_pointer respectively, and the client can
      use these objects to interact with the lock.

      For any surface, only one lock or confinement may be active across all
      wl_pointer objects of the same seat. If a lock or confinement is requested
      when another lock or confinement is active or requested on the same surface
      and with any of the wl_pointer objects of the same seat, an
      'already_constrained' error will be raised.
    </description>

    <enum name="error">
      <description summary="wp_pointer_constraints error values">
	These errors can be emitted in response to wp_pointer_constraints
	requests.
      </description>
      <entry name="already_constrained" value="1"
	     summary="pointer constraint already requested on that surface"/>
    </enum>

    <enum name="lifetime">
      <description summary="constraint lifetime">
	These values represent different lifetime semantics. They are passed
	as arguments to the factory requests to specify how the constraint
	lifetimes should be managed.
      </description>
      <entry name="oneshot" value="1">
	<description summary="the pointer constraint is defunct once deactivated">
	  A oneshot pointer constraint will never reactivate once it has been
	  deactivated. See the corresponding deactivation event
	  (wp_locked_pointer.unlocked and wp_confined_pointer.unconfined) for
	  details.
	</description>
      </entry>
      <entry name="persistent" value="2">
	<description summary="the pointer constraint may reactivate">
	  A persistent pointer constraint may again reactivate once it has
	  been deactivated. See the corresponding deactivation event
	  (wp_locked_pointer.unlocked and wp_confined_pointer.unconfined) for
	  details.
	</description>
      </entry>
    </enum>

    <request name="destroy" type="destructor">
      <description summary="destroy the pointer constraints manager object">
	Used by the client to notify the server that it will no longer use this
	pointer constraints object.
      </description>
    </request>

    <request name="lock_pointer">
      <description summary="lock pointer to a position">
	The lock_pointer request lets the client request to disable movements of
	the virtual pointer (i.e. the cursor), effectively locking the pointer
	to a position. This request may not take effect immediately; in the
	future, when the compositor deems implementation-specific constraints
	are satisfied, the pointer lock will be activated and the compositor
	sends a locked event.

	The protocol provides no guarantee that the constraints are ever
	satisfied, and does not require the compositor to send an error if the
	constraints cannot ever be satisfied. It is thus possible to request a
	lock that will never activate.

	There may not be another pointer constraint of any kind requested or
	active on the surface for any of the wl_pointer objects of the seat of
	the passed pointer when requesting a lock. If there is, an error will be
	raised. See general pointer lock documentation for more details.

	The intersection of the region passed with this request and the input
	region of the surface is used to determine where the pointer must be
	in order for the lock to activate. It is up to the compositor whether to
	warp the pointer or require some kind of user interaction for the lock
	to activate. If the region is null the surface input region is used.

	A surface may receive pointer focus without the lock being activated.

	The request creates a new object wp_locked_pointer which is used to
	interact with the lock as well as receive updates about its state. See
	the the description of wp_locked_pointer for further information.

	Note that while a pointer is locked, the wl_pointer objects of the
	corresponding seat will not emit any wl_pointer.motion events, but
	relative motion events will still be emitted via wp_relative_pointer
	objects of the same seat. wl_pointer.axis and wl_pointer.button events
	are unaffected.
      </description>

      <arg name="id" type="new_id" interface="zwp_locked_pointer_v1"/>
      <arg name="surface" type="object" interface="wl_surface"
	   summary="surface to lock pointer to"/>
      <arg name="pointer" type="object" interface="wl_pointer"
	   summary="the pointer that should be locked"/>
      <arg name="region" type="object" interface="wl_region" allow-null="true"
	   summary="region of surface"/>
      <arg name="lifetime" type="uint" summary="lock lifetime"/>
    </request>

    <request name="confine_pointer">
      <description summary="confine pointer to a region">
	The confine_pointer request lets the client request to confine the
	pointer cursor to a given region. This request may not take effect
	immediately; in the future, when the compositor deems implementation-
	specific constraints are satisfied, the pointer confinement will be
	activated and the compositor sends a confined event.

	The intersection of the region passed with this request and the input
	region of the surface is used to determine where the pointer must be
	in order for the confinement to activate. It is up to the compositor
	whether to warp the pointer or require some kind of user interaction for
	the confinement to activate. If the region is null the surface input
	region is used.

	The request will create a new object wp_confined_pointer which is used
	to interact with the confinement as well as receive updates about its
	state. See the the description of wp_confined_pointer for further
	information.
      </description>

      <arg name="id" type="new_id" interface="zwp_confined_pointer_v1"/>
      <arg name="surface" type="object" interface="wl_surface"
	   summary="surface to lock pointer to"/>
      <arg name="pointer" type="object" interface="wl_pointer"
	   summary="the pointer that should be confined"/>
      <arg name="region" type="object" interface="wl_region" allow-null="true"
	   summary="region of surface"/>
      <arg name="lifetime" type="uint" summary="confinement lifetime"/>
    </request>
  </interface>

  <interface name="zwp_locked_pointer_v1" version="1">
    <description summary="receive relative pointer motion events">
      The wp_locked_pointer interface represents a locked pointer state.

      While the lock of this object is active, the wl_pointer objects of the
      associated seat will not emit any wl_pointer.motion events.

      This object will send the event 'locked' when the lock is activated.
      Whenever the lock is activated, it is guaranteed that the locked surface
      will already have received pointer focus and that the pointer will be
      within the region passed to the request creating this object.

      To unlock the pointer, send the destroy request. This will also destroy
      the wp_locked_pointer object.

      If the compositor decides to unlock the pointer the unlocked event is
      sent. See wp_locked_pointer.unlock for details.

      When unlocking, the compositor may warp the cursor position to the set
      cursor position hint. If it does, it will not result in any relative
      motion events emitted via wp_relative_pointer.

      If the surface the lock was requested on is destroyed and the lock is not
      yet activated, the wp_locked_pointer object is now defunct and must be
      destroyed.
    </description>

    <request name="destroy" type="destructor">
      <description summary="destroy the locked pointer object">
	Destroy the locked pointer object. If applicable, the compositor will
	unlock the pointer.
      </description>
    </request>

    <request name="set_cursor_position_hint">
      <description summary="set the pointer cursor position hint">
	Set the cursor position hint relative to the top left corner of the
	surface.

	If the client is drawing its own cursor, it should update the position
	hint to the position of its own cursor. A compositor may use this
	information to warp the pointer upon unlock in order to avoid pointer
	jumps.

	The cursor position hint is double buffered. The new hint will only take
	effect when the associated surface gets it pending state applied. See
	wl_surface.commit for details.
      </description>

      <arg name="surface_x" type="fixed"
	   summary="surface-local x coordinate"/>
      <arg name="surface_y" type="fixed"
	   summary="surface-local y coordinate"/>
    </request>

    <request name="set_region">
      <description summary="set a new lock region">
	Set a new region used to lock the pointer.

	The new lock region is double-buffered. The new lock region will
	only take effect when the associated surface gets its pending state
	applied. See wl_surface.commit for details.

	For details about the lock region, see wp_locked_pointer.
      </description>

      <arg name="region" type="object" interface="wl_region" allow-null="true"
	   summary="region of surface"/>
    </request>

    <event name="locked">
      <description summary="lock activation event">
	Notification that the pointer lock of the seat's pointer is activated.
      </description>
    </event>

    <event name="unlocked">
      <description summary="lock deactivation event">
	Notification that the pointer lock of the seat's pointer is no longer
	active. If this is a oneshot pointer lock (see
	wp_pointer_constraints.lifetime) this object is now defunct and should
	be destroyed. If this is a persistent pointer lock (see
	wp_pointer_constraints.lifetime) this pointer lock may again
	reactivate in the future.
      </description>
    </event>
  </interface>

  <interface name="zwp_confined_pointer_v1" version="1">
    <description summary="confined pointer object">
      The wp_confined_pointer interface represents a confined pointer state.

      This object will send the event 'confined' when the confinement is
      activated. Whenever the confinement is activated, it is guaranteed that
      the surface the pointer is confined to will already have received pointer
      focus and that the pointer will be within the region passed to the request
      creating this object. It is up to the compositor to decide whether this
      requires some user interaction and if the pointer will warp to within the
      passed region if outside.

      To unconfine the pointer, send the destroy request. This will also destroy
      the wp_confined_pointer object.

      If the compositor decides to unconfine the pointer the unconfined event is
      sent. The wp_confined_pointer object is at this point defunct and should
      be destroyed.
    </description>

    <request name="destroy" type="destructor">
      <description summary="destroy the confined pointer object">
	Destroy the confined pointer object. If applicable, the compositor will
	unconfine the pointer.
      </description>
    </request>

    <request name="set_region">
      <description summary="set a new confine region">
	Set a new region used to confine the pointer.

	The new confine region is double-buffered. The new confine region will
	only take effect when the associated surface gets its pending state
	applied. See wl_surface.commit for details.

	If the confinement is active when the new confinement region is applied
	and the pointer ends up outside of newly applied region, the pointer may
	warped to a position within the new confinement region. If warped, a
	wl_pointer.motion event will be emitted, but no
	wp_relative_pointer.relative_motion event.

	The compositor may also, instead of using the new region, unconfine the
	pointer.

	For details about the confine region, see wp_confined_pointer.
      </description>

      <arg name="region" type="object" interface="wl_region" allow-null="true"
	   summary="region of surface"/>
    </request>

    <event name="confined">
      <description summary="pointer confined">
	Notification that the pointer confinement of the seat's pointer is
	activated.
      </description>
    </event>

    <event name="unconfined">
      <description summary="pointer unconfined">
	Notification that the pointer confinement of the seat's pointer is no
	longer active. If this is a oneshot pointer confinement (see
	wp_pointer_constraints.lifetime) this object is now defunct and should
	be destroyed. If this is a persistent pointer confinement (see
	wp_pointer_constraints.lifetime) this pointer confinement may again
	reactivate in the future.
      </description>
    </event>
  </interface>

</protocol>
