<?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>
