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

  <copyright>
    Copyright © 2012 Intel Corporation

    Permission to use, copy, modify, distribute, and sell this
    software and its documentation for any purpose is hereby granted
    without fee, provided that the above copyright notice appear in
    all copies and that both that copyright notice and this permission
    notice appear in supporting documentation, and that the name of
    the copyright holders not be used in advertising or publicity
    pertaining to distribution of the software without specific,
    written prior permission.  The copyright holders make no
    representations about the suitability of this software for any
    purpose.  It is provided "as is" without express or implied
    warranty.

    THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
    SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
    FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
    SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
    AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
    ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
    THIS SOFTWARE.
  </copyright>

  <interface name="text_model" version="1">
    <description summary="text model">
      A model for text input. Adds support for text input and input methods to
      applications. A text_model object is created from a text_model_factory and
      corresponds typically to a text entry in an application. Requests are used
      to activate/deactivate the model and set information like surrounding and
      selected text or the content type. The information about entered text is
      sent to the model via the pre-edit and commit events. Using this interface
      removes the need for applications to directly process hardware key events
      and compose text out of them.
    </description>
    <request name="set_surrounding_text">
      <description summary="sets the surrounding text">
        Sets the plain surrounding text around the input position. Cursor is the
        byte index within the surrounding text. Anchor is the byte index of the
        selection anchor within the surrounding text. If there is no selected
	text anchor is the same as cursor.
      </description>
      <arg name="text" type="string"/>
      <arg name="cursor" type="uint"/>
      <arg name="anchor" type="uint"/>
    </request>
    <request name="activate">
      <description summary="request activation">
        Requests the model to be activated (typically when the text entry gets
        focus). The seat argument is a wl_seat which maintains the focus for
        this activation. The surface argument is a wl_surface assigned to the
        model and tracked for focus lost. The activated event is emitted on
        successful activation.
      </description>
      <arg name="seat" type="object" interface="wl_seat"/>
      <arg name="surface" type="object" interface="wl_surface"/>
    </request>
    <request name="deactivate">
      <description summary="request deactivation">
        Requests the model to be deactivated (typically when the text entry
        lost focus). The seat argument is a wl_seat which was used for
        activation.
      </description>
      <arg name="seat" type="object" interface="wl_seat"/>
    </request>
    <request name="reset">
      <description summary="reset">
        Should be called by an editor widget when the input state should
        be reseted, for example after the text was changed outside of the
        normal input method flow.
      </description>
     </request>
    <request name="set_micro_focus">
      <arg name="x" type="int"/>
      <arg name="y" type="int"/>
      <arg name="width" type="int"/>
      <arg name="height" type="int"/>
    </request>
    <request name="set_preedit"/>
    <request name="set_content_type"/>

    <event name="commit_string">
      <description summary="commit">
        Notify when text should be inserted into the editor widget. The text
        to commit could be either just a single character after a key press
        or the result of some composing (pre-edit). It also sets the new
        cursor position (as byte index) relative to the inserted text.
      </description>
      <arg name="text" type="string"/>
      <arg name="index" type="uint"/>
    </event>
    <event name="preedit_string">
      <description summary="pre-edit">
        Notify when a new composing text (pre-edit) should be set around the
        current cursor position. Any previously set composing text should
        be removed. It also sets the cursor position (as byte index) relative
        to the start of the composing text.
      </description>
      <arg name="text" type="string"/>
      <arg name="index" type="uint"/>
    </event>
    <event name="delete_surrounding_text">
      <description summary="delete surrounding text">
        Notify when the text around the current cursor position should be
        deleted. Index is relative to the current cursor (as byte index).
        Length is the length of deleted text (as bytes).
      </description>
      <arg name="index" type="int"/>
      <arg name="length" type="uint"/>
    </event>
    <event name="preedit_styling"/>
    <event name="modifiers_map">
      <description summary="modifiers map">
        Transfer an array of 0-terminated modifiers names. The position in
        the array is the index of the modifier as used in the modifiers
        bitmask in the keysym event.
      </description>
      <arg name="map" type="array"/>
    </event>
    <event name="keysym">
      <description summary="keysym">
        Notify when a key event was sent. Key events should not be used
        for normal text input operations, which should be done with
        commit_string, delete_surrounfing_text, etc. The key event follows
        the wl_keyboard key event convention. State is a XKB keysym, state a
	wl_keyboard key_state. Modifiers are a mask for effective modifiers
	(where the modfier indices are set by the modifiers_map event)
      </description>
      <arg name="serial" type="uint"/>
      <arg name="time" type="uint"/>
      <arg name="sym" type="uint"/>
      <arg name="state" type="uint"/>
      <arg name="modifiers" type="uint"/>
    </event>
    <event name="selection_replacement"/>
    <event name="direction"/>
    <event name="locale"/>
    <event name="enter">
      <description summary="enter event">
        Notify the model when it is activated. Typically in response to an
        activate request.
      </description>
      <arg name="surface" type="object" interface="wl_surface"/>
    </event>
    <event name="leave">
      <description summary="leave event">
        Notify the model when it is deactivated. Either in response to a
        deactivate request or when the assigned surface lost focus or was
        destroyed.
      </description>
    </event>
  </interface>

  <interface name="text_model_factory" version="1">
    <description summary="text model factory">
      A factory for text models. This object is a singleton global.
    </description>
    <request name="create_text_model">
      <description summary="create text model">
        Creates a new text model object.
      </description>
      <arg name="id" type="new_id" interface="text_model"/>
    </request>
  </interface>
</protocol>
