<?xml version="1.0" encoding="UTF-8"?>
<protocol name="fake_input">
  <copyright>
    SPDX-FileCopyrightText: 2015 Martin Gräßlin
    SPDX-License-Identifier: LGPL-2.1-or-later
  </copyright>
  <interface name="org_kde_kwin_fake_input" version="4">
    <description summary="Fake input manager">
      This interface allows other processes to provide fake input events.
      Purpose is on the one hand side to provide testing facilities like XTest
      on X11, but also to support use cases like remote control (a remote
      desktop server). The compositor gates the interface: it is only exposed
      to clients authorized through their .desktop X-KDE-Wayland-Interfaces, so
      binding it is the authorization — no per-event confirmation dialog.
    </description>
    <request name="authenticate">
      <description summary="Information about the application requesting fake input">
        A FakeInput is required to authenticate itself by providing the
        application name and the reason for fake input. The compositor may use
        this information to decide whether to allow or deny the request.
      </description>
      <arg name="application" type="string" summary="user visible name of the application requesting fake input"/>
      <arg name="reason" type="string" summary="reason of why fake input is requested"/>
    </request>
    <request name="pointer_motion">
      <description summary="pointer motion event"/>
      <arg name="delta_x" type="fixed" summary="X delta of the relative pointer motion"/>
      <arg name="delta_y" type="fixed" summary="Y delta of the relative pointer motion"/>
    </request>
    <request name="button">
      <description summary="pointer button event"/>
      <arg name="button" type="uint" summary="evdev button code"/>
      <arg name="state" type="uint" summary="button state, 0 released, 1 pressed"/>
    </request>
    <request name="axis">
      <description summary="pointer axis (scroll) event"/>
      <arg name="axis" type="uint" summary="wl_pointer.axis (0 vertical, 1 horizontal)"/>
      <arg name="value" type="fixed" summary="axis value"/>
    </request>
    <request name="touch_down" since="2">
      <description summary="touch down event"/>
      <arg name="id" type="uint" summary="unique id of this touch point; must not be reused until up"/>
      <arg name="x" type="fixed" summary="x coordinate in global compositor space"/>
      <arg name="y" type="fixed" summary="y coordinate in global compositor space"/>
    </request>
    <request name="touch_motion" since="2">
      <description summary="touch motion event"/>
      <arg name="id" type="uint" summary="unique id of an existing touch point"/>
      <arg name="x" type="fixed" summary="x coordinate in global compositor space"/>
      <arg name="y" type="fixed" summary="y coordinate in global compositor space"/>
    </request>
    <request name="touch_up" since="2">
      <description summary="touch up event"/>
      <arg name="id" type="uint" summary="unique id of an existing touch point"/>
    </request>
    <request name="touch_cancel" since="2">
      <description summary="cancel all current touch points"/>
    </request>
    <request name="touch_frame" since="2">
      <description summary="end a set of touch events (atomic frame)"/>
    </request>
    <request name="pointer_motion_absolute" since="3">
      <description summary="absolute pointer motion event"/>
      <arg name="x" type="fixed" summary="x coordinate in global compositor space"/>
      <arg name="y" type="fixed" summary="y coordinate in global compositor space"/>
    </request>
    <request name="keyboard_key" since="4">
      <description summary="keyboard key event"/>
      <arg name="button" type="uint" summary="evdev key code"/>
      <arg name="state" type="uint" summary="key state, 0 released, 1 pressed"/>
    </request>
  </interface>
</protocol>
