summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2021-07-15 01:28:55 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2021-07-15 01:28:55 +0000
commit55efed48e61b7fdfd010471c95e2a54a9d984dcf (patch)
tree418df681d77ca0a22ecce5583b178c186848bf76
parent8f091e4eca6d34a25f9c6cb47277f725ca540e7f (diff)
parentd2f34ec56e64c71960581dd92971ff92c9916957 (diff)
downloadwayland-protocols-android12-mainline-conscrypt-release.tar.gz
Snap for 7550844 from d2f34ec56e64c71960581dd92971ff92c9916957 to mainline-conscrypt-releaseandroid-mainline-12.0.0_r8android-mainline-12.0.0_r25android12-mainline-conscrypt-release
Change-Id: Ief5e2e17da994d044fd28c6f5a0318081aee63e3
-rw-r--r--Android.bp100
-rw-r--r--ISC_LICENSE.txt25
-rw-r--r--METADATA3
-rw-r--r--chromium.org/NOTICE33
-rw-r--r--chromium.org/unstable/aura-shell/aura-shell.xml166
-rw-r--r--chromium.org/unstable/remote-shell/remote-shell-unstable-v1.xml197
-rw-r--r--chromium.org/unstable/stylus/stylus-unstable-v2.xml109
-rw-r--r--freedesktop.org/.editorconfig6
-rw-r--r--freedesktop.org/.gitlab-ci.yml27
-rw-r--r--freedesktop.org/GOVERNANCE.md149
-rw-r--r--freedesktop.org/MEMBERS.md13
-rw-r--r--freedesktop.org/METADATA14
-rw-r--r--freedesktop.org/Makefile.am11
l---------[-rw-r--r--]freedesktop.org/NOTICE34
-rw-r--r--freedesktop.org/README.md187
-rw-r--r--freedesktop.org/configure.ac2
-rw-r--r--freedesktop.org/stable/presentation-time/presentation-time.xml4
-rw-r--r--freedesktop.org/stable/xdg-shell/README5
-rw-r--r--freedesktop.org/stable/xdg-shell/xdg-shell.xml1249
-rwxr-xr-xfreedesktop.org/tests/scan.sh7
-rw-r--r--freedesktop.org/unstable/fullscreen-shell/fullscreen-shell-unstable-v1.xml29
-rw-r--r--freedesktop.org/unstable/input-timestamps/README4
-rw-r--r--freedesktop.org/unstable/input-timestamps/input-timestamps-unstable-v1.xml145
-rw-r--r--freedesktop.org/unstable/linux-dmabuf/linux-dmabuf-unstable-v1.xml22
-rw-r--r--freedesktop.org/unstable/pointer-constraints/pointer-constraints-unstable-v1.xml4
-rw-r--r--freedesktop.org/unstable/pointer-gestures/pointer-gestures-unstable-v1.xml15
-rw-r--r--freedesktop.org/unstable/primary-selection/README4
-rw-r--r--freedesktop.org/unstable/primary-selection/primary-selection-unstable-v1.xml225
-rw-r--r--freedesktop.org/unstable/text-input/text-input-unstable-v1.xml10
-rw-r--r--freedesktop.org/unstable/text-input/text-input-unstable-v3.xml452
-rw-r--r--freedesktop.org/unstable/xdg-decoration/README4
-rw-r--r--freedesktop.org/unstable/xdg-decoration/xdg-decoration-unstable-v1.xml156
-rw-r--r--freedesktop.org/unstable/xdg-foreign/xdg-foreign-unstable-v1.xml6
-rw-r--r--freedesktop.org/unstable/xdg-foreign/xdg-foreign-unstable-v2.xml8
-rw-r--r--freedesktop.org/unstable/xdg-output/xdg-output-unstable-v1.xml63
-rw-r--r--freedesktop.org/unstable/xdg-shell/xdg-shell-unstable-v6.xml2
-rw-r--r--wayland_protocol_codegen.go2
37 files changed, 3346 insertions, 146 deletions
diff --git a/Android.bp b/Android.bp
index d67407b..ea50526 100644
--- a/Android.bp
+++ b/Android.bp
@@ -12,9 +12,40 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-// Build and use the "wayland_protocol_codegen" extension.
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+license {
+ name: "external_wayland-protocols_freedesktop.org-MIT-license",
+ license_kinds: [
+ "SPDX-license-identifier-MIT",
+ ],
+ license_text: ["freedesktop.org/COPYING"],
+}
+
+license {
+ name: "external_wayland-protocols_freedesktop.org-ISC-license",
+ license_kinds: [
+ "SPDX-license-identifier-ISC",
+ ],
+ license_text: ["ISC_LICENSE.txt"],
+}
+
+license {
+ name: "external_wayland-protocols_chromium.org-license",
+ license_kinds: [
+ "SPDX-license-identifier-MIT",
+ ],
+ license_text: ["chromium.org/LICENSE"],
+}
+
+// Build and use the "wayland_protocol_codegen" extension. This is just a bit
+// of glue code to invoke the wayland-scanner code generation tool provided by
+// the core Wayland code (external/wayland) from the Android build system.
bootstrap_go_package {
name: "soong-wayland-protocol-codegen",
+ // licenses: ["Android-Apache-2.0"],
pkgPath: "android/soong/external/wayland-protocol",
deps: [
"blueprint",
@@ -28,18 +59,71 @@ bootstrap_go_package {
pluginFor: ["soong_build"],
}
+// All the MIT licensed freedesktop.org defined extension protocols.
filegroup {
- name: "wayland_extension_protocols",
+ name: "freedesktop.org-MIT-wayland_extension_protocols",
+ licenses: ["external_wayland-protocols_freedesktop.org-MIT-license"],
+ srcs: [
+ "./freedesktop.org/stable/presentation-time/presentation-time.xml",
+ "./freedesktop.org/stable/viewporter/viewporter.xml",
+ "./freedesktop.org/stable/xdg-shell/xdg-shell.xml",
+ "./freedesktop.org/unstable/fullscreen-shell/fullscreen-shell-unstable-v1.xml",
+ "./freedesktop.org/unstable/idle-inhibit/idle-inhibit-unstable-v1.xml",
+ "./freedesktop.org/unstable/input-method/input-method-unstable-v1.xml",
+ "./freedesktop.org/unstable/input-timestamps/input-timestamps-unstable-v1.xml",
+ "./freedesktop.org/unstable/keyboard-shortcuts-inhibit/keyboard-shortcuts-inhibit-unstable-v1.xml",
+ "./freedesktop.org/unstable/linux-dmabuf/linux-dmabuf-unstable-v1.xml",
+ "./freedesktop.org/unstable/linux-explicit-synchronization/linux-explicit-synchronization-unstable-v1.xml",
+ "./freedesktop.org/unstable/pointer-constraints/pointer-constraints-unstable-v1.xml",
+ "./freedesktop.org/unstable/pointer-gestures/pointer-gestures-unstable-v1.xml",
+ "./freedesktop.org/unstable/primary-selection/primary-selection-unstable-v1.xml",
+ "./freedesktop.org/unstable/relative-pointer/relative-pointer-unstable-v1.xml",
+ "./freedesktop.org/unstable/tablet/tablet-unstable-v1.xml",
+ "./freedesktop.org/unstable/tablet/tablet-unstable-v2.xml",
+ "./freedesktop.org/unstable/text-input/text-input-unstable-v1.xml",
+ "./freedesktop.org/unstable/xdg-decoration/xdg-decoration-unstable-v1.xml",
+ "./freedesktop.org/unstable/xdg-foreign/xdg-foreign-unstable-v1.xml",
+ "./freedesktop.org/unstable/xdg-foreign/xdg-foreign-unstable-v2.xml",
+ "./freedesktop.org/unstable/xdg-output/xdg-output-unstable-v1.xml",
+ // Note: Conflicts with freedesktop.org/stable/xdg-shell/xdg-shell.xml
+ // "./freedesktop.org/unstable/xdg-shell/xdg-shell-unstable-v5.xml",
+ "./freedesktop.org/unstable/xdg-shell/xdg-shell-unstable-v6.xml",
+ "./freedesktop.org/unstable/xwayland-keyboard-grab/xwayland-keyboard-grab-unstable-v1.xml",
+ ],
+}
+
+// All the ISC licensed freedesktop.org defined extension protocols.
+filegroup {
+ name: "freedesktop.org-ISC-wayland_extension_protocols",
+ licenses: ["external_wayland-protocols_freedesktop.org-ISC-license"],
+ srcs: [
+ "./freedesktop.org/unstable/text-input/text-input-unstable-v3.xml",
+ ],
+}
+
+// All the chromium.org defined extension protocols.
+filegroup {
+ name: "chromium.org-wayland_extension_protocols",
+ licenses: ["external_wayland-protocols_chromium.org-license"],
srcs: [
- "freedesktop.org/**/*.xml",
"chromium.org/**/*.xml",
],
}
+// Allows for easy reference to all the extension protocols.
+filegroup {
+ name: "wayland_extension_protocols",
+ srcs: [
+ ":freedesktop.org-MIT-wayland_extension_protocols",
+ ":freedesktop.org-ISC-wayland_extension_protocols",
+ ":chromium.org-wayland_extension_protocols",
+ ],
+}
+
// Generate protocol source files used by both client and server
wayland_protocol_codegen {
name: "wayland_extension_protocol_sources",
- cmd: "$(location wayland_scanner) code < $(in) > $(out)",
+ cmd: "$(location wayland_scanner) private-code < $(in) > $(out)",
suffix: ".c",
srcs: [":wayland_extension_protocols"],
tools: ["wayland_scanner"],
@@ -73,9 +157,9 @@ cc_library_static {
"-Wextra",
"-Werror",
"-g",
- "-fvisibility=hidden"
+ "-fvisibility=hidden",
],
- static_libs: ["libwayland_client"],
+ static_libs: ["libwayland_client_static"],
generated_sources: ["wayland_extension_protocol_sources"],
generated_headers: ["wayland_extension_client_protocol_headers"],
export_generated_headers: ["wayland_extension_client_protocol_headers"],
@@ -92,12 +176,10 @@ cc_library_static {
"-Wextra",
"-Werror",
"-g",
- "-fvisibility=hidden"
+ "-fvisibility=hidden",
],
static_libs: ["libwayland_server"],
generated_sources: ["wayland_extension_protocol_sources"],
generated_headers: ["wayland_extension_server_protocol_headers"],
export_generated_headers: ["wayland_extension_server_protocol_headers"],
}
-
-subdirs = ["flinger_headers"]
diff --git a/ISC_LICENSE.txt b/ISC_LICENSE.txt
new file mode 100644
index 0000000..6cc05be
--- /dev/null
+++ b/ISC_LICENSE.txt
@@ -0,0 +1,25 @@
+Copyright © 2012, 2013 Intel Corporation
+Copyright © 2015, 2016 Jan Arne Petersen
+Copyright © 2017, 2018 Red Hat, Inc.
+Copyright © 2018 Purism SPC
+
+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.
diff --git a/METADATA b/METADATA
new file mode 100644
index 0000000..d97975c
--- /dev/null
+++ b/METADATA
@@ -0,0 +1,3 @@
+third_party {
+ license_type: NOTICE
+}
diff --git a/chromium.org/NOTICE b/chromium.org/NOTICE
deleted file mode 100644
index 8ab3291..0000000
--- a/chromium.org/NOTICE
+++ /dev/null
@@ -1,33 +0,0 @@
-Copyright © 2008-2013 Kristian Høgsberg
-Copyright © 2010-2013 Intel Corporation
-Copyright © 2013 Rafael Antognolli
-Copyright © 2013 Jasper St. Pierre
-Copyright © 2014 Jonas Ådahl
-Copyright © 2014 Jason Ekstrand
-Copyright © 2014-2015 Collabora, Ltd.
-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.
-
----
-
-The above is the version of the MIT "Expat" License used by X.org:
-
- http://cgit.freedesktop.org/xorg/xserver/tree/COPYING
diff --git a/chromium.org/unstable/aura-shell/aura-shell.xml b/chromium.org/unstable/aura-shell/aura-shell.xml
index 5c95da5..bbc81a3 100644
--- a/chromium.org/unstable/aura-shell/aura-shell.xml
+++ b/chromium.org/unstable/aura-shell/aura-shell.xml
@@ -24,7 +24,7 @@
DEALINGS IN THE SOFTWARE.
</copyright>
- <interface name="zaura_shell" version="8">
+ <interface name="zaura_shell" version="18">
<description summary="aura_shell">
The global interface exposing aura shell capabilities is used to
instantiate an interface extension for a wl_surface object.
@@ -66,9 +66,36 @@
<arg name="output" type="object" interface="wl_output"
summary="the output"/>
</request>
+
+ <!-- Version 11 additions -->
+
+ <enum name="layout_mode">
+ <description summary="the layout mode">
+ Specifies the server's window layout mode.
+ </description>
+ <entry name="windowed" value="1" summary="multiple windows"/>
+ <entry name="tablet" value="2" summary="restricted mode for tablet"/>
+ </enum>
+
+ <event name="layout_mode" since="11">
+ <description summary="sends the layout_mode">
+ Sends the layout_mode used by the server.
+ </description>
+ <arg name="layout_mode" type="uint" summary="layout_mode enum"/>
+ </event>
+
+ <!-- Version 14 additions -->
+
+ <event name="bug_fix" since="14">
+ <description summary="sends a bug fix ID">
+ Sends a monorail ID of a bug fixed on the exo server that clients can
+ use to gate functionality.
+ </description>
+ <arg name="id" type="uint" summary="ID of a single bug fix"/>
+ </event>
</interface>
- <interface name="zaura_surface" version="8">
+ <interface name="zaura_surface" version="18">
<description summary="aura shell interface to a wl_surface">
An additional interface to a wl_surface object, which allows the
client to access aura shell specific functionality for surface.
@@ -134,6 +161,7 @@
<request name="set_client_surface_id" since="7">
<description summary="set the client surface ID of this surface">
+ Deprecated. Please use set_client_surface_str_id instead.
Set the identifier of the surface assigned by the client.
</description>
<arg name="client_surface_id" type="int" />
@@ -172,6 +200,140 @@
<arg name="occlusion_fraction" type="fixed"/>
<arg name="occlusion_reason" type="uint"/>
</event>
+
+ <!-- Version 9 additions -->
+
+ <request name="activate" since="9">
+ <description summary="Indicate that this window wants to be the active window">
+ Make this the active window. This usually implies something like
+ restacking this surface to the foreground. The compositor is free to
+ ignore this request if it deems the client to be misbehaving. Typically
+ this request will only be honoured in response to some user driven
+ event, such as executing an application or opening a file in a window
+ that already exists.
+ </description>
+ </request>
+
+ <request name="draw_attention" since="9">
+ <description summary="Indicate that this window wants some of the user's attention">
+ Draw attention to this surface in a way that does not change the user's
+ focus. This usually means animating window decorations or taskbar icons.
+ The compositor can still ignore this request if it deems fit, but unlike
+ draw_focus, these requests are expected to come from background tasks,
+ and are more likely to be honoured.
+ </description>
+ </request>
+
+ <!-- Version 10 additions -->
+
+ <enum name="fullscreen_mode">
+ <description
+ summary="Specifies the behavior of the surface in fullscreen.">
+ Possible windowing system behaviors if this surface were to go
+ fullscreen.
+ </description>
+ <entry
+ name="immersive"
+ value="0"
+ summary="user can access system UIs such as the shelf and window frame
+ by pointing to, or swiping over, the screen edge"/>
+ <entry
+ name="plain"
+ value="1"
+ summary="user cannot access system UIs using mouse/touches"/>
+ </enum>
+
+ <request name="set_fullscreen_mode" since="10">
+ <description summary="Sets the behavior of the surface in fullscreen.">
+ Suggests how the windowing system should behave if this surface were
+ to go fullscreen. Does not make the surface fullscreen.
+
+ Typically the default mode is "immersive".
+ </description>
+ <arg name="mode" type="uint" enum="fullscreen_mode"/>
+ </request>
+
+ <!-- Version 12 additions -->
+
+ <request name="set_client_surface_str_id" since="12">
+ <description summary="set the client surface ID of this surface">
+ Set the identifier of the surface assigned by the client.
+ </description>
+ <arg name="client_surface_id" type="string" />
+ </request>
+
+ <!-- Version 15 additions -->
+
+ <request name="set_server_start_resize" since="15">
+ <description summary="request a server-side shadow for surface">
+ Suggests a surface to have client-side decoration, but
+ server-side decides when and where to start the resize. The server may also
+ apply visual effects to indicate that the resize operation is ongoing.
+ </description>
+ </request>
+
+ <!-- Version 16 additions -->
+
+ <enum name="snap_direction">
+ <description summary="surface snap directions">
+ Surface snap directions.
+ </description>
+ <entry name="none" value="0" summary=""/>
+ <entry name="left" value="1" summary=""/>
+ <entry name="right" value="2" summary=""/>
+ </enum>
+
+ <request name="intent_to_snap" since="16">
+ <description summary="client intents to snap the surface.">
+ Notify (or inform) the server the client's intent to snap the window.
+ To inform it's no longer willing to snap, send 'none'.
+ </description>
+ <arg name="direction" type="uint" enum="snap_direction"/>
+ </request>
+
+ <request name="set_snap_left" since="16">
+ <description summary="snap the surface to the left.">
+ Request that surface is snapped to the left.
+ </description>
+ </request>
+
+ <request name="set_snap_right" since="16">
+ <description summary="snap the surface to the right.">
+ Request that surface is snapped to the right.
+ </description>
+ </request>
+
+ <request name="unset_snap" since="16">
+ <description summary="Unset the surface snap.">
+ Request that surface resets snapping.
+ </description>
+ </request>
+
+ <!-- Version 17 additions -->
+
+ <event name="lock_frame_normal" since="17">
+ <description summary="Notify the client that server intent to lock window in normal or restore state">
+ Notifies the client to lock window in normal or restore state. When
+ window is locked, the window frame should look like it is in restored
+ state, but actually isn't. Locking happends while dragging a maximized
+ window.
+ </description>
+ </event>
+
+ <event name="unlock_frame_normal" since="17">
+ <description summary="Notify the client that server intent to unlock window's normal or restore state">
+ Notifies the client to unlock window if it is previously locked.
+ Unlocking happends while dragging a maximized window.
+ </description>
+ </event>
+
+ <!-- Version 18 additions -->
+ <request name="set_window_session_id" since="18">
+ <description summary="set surface window session id">
+ Set window session id to the surface.
+ </description>
+ <arg name="id" type="int" summary="window session id"/>
+ </request>
</interface>
<interface name="zaura_output" version="6">
diff --git a/chromium.org/unstable/remote-shell/remote-shell-unstable-v1.xml b/chromium.org/unstable/remote-shell/remote-shell-unstable-v1.xml
index 5ade78a..a4be45a 100644
--- a/chromium.org/unstable/remote-shell/remote-shell-unstable-v1.xml
+++ b/chromium.org/unstable/remote-shell/remote-shell-unstable-v1.xml
@@ -38,7 +38,7 @@
reset.
</description>
- <interface name="zcr_remote_shell_v1" version="29">
+ <interface name="zcr_remote_shell_v1" version="33">
<description summary="remote_shell">
The global interface that allows clients to turn a wl_surface into a
"real window" which is remotely managed but can be stacked, activated
@@ -212,7 +212,7 @@
<event name="workspace_info" since="20">
<description summary="area of remote shell in pixels">
- Sends display information such as size, work area and its related information.
+ [Deprecated] Sends display information such as size, work area and its related information.
Each series of "workspace_info" events must be terminated by a "configure" event.
</description>
<arg name="display_id_hi" type="uint"/>
@@ -274,9 +274,27 @@
<arg name="use_default_device_scale_factor" type="int" summary="0 if false"/>
</request>
+ <!-- Version 30 additions -->
+
+ <enum name="desktop_focus_state">
+ <description summary="desktop foucs state">
+ Desktop client window focus state.
+ </description>
+ <entry name="no_focus" value="1" summary="no window get focused"/>
+ <entry name="client_focused" value="2" summary="client window get focused"/>
+ <entry name="other_client_focused" value="3" summary="other client window get focused"/>
+ </enum>
+
+ <event name="desktop_focus_state_changed" since="30">
+ <description summary="desktop window focus state change">
+ Notifies client that the window focus state change.
+ </description>
+ <arg name="focus_state" type="uint"/>
+ </event>
+
</interface>
- <interface name="zcr_remote_surface_v1" version="27">
+ <interface name="zcr_remote_surface_v1" version="33">
<description summary="A desktop window">
An interface that may be implemented by a wl_surface, for
implementations that provide a desktop-style user interface
@@ -734,12 +752,12 @@
summary="the window bounds is moved due to other WM operations"/>
<entry name="resize" value="6"
summary="the window bounds is reiszed due to other WM operations"/>
- <entry name="move_pip" value="7" summary="the window bounds is resized for PIP"/>
+ <entry name="pip" value="7" summary="the window bounds is resized or moved for PIP"/>
</enum>
<event name="bounds_changed" since="10">
<description summary="The compositor requested to change the bounds">
- The compositor requested to change its
+ [Deprecated] The compositor requested to change its
bounds. "bounds_change_reason" specifies the cause of the
bounds change. The client may apply the different move/resize
strategy depending on the reason.
@@ -990,7 +1008,7 @@
<request name="set_bounds" since="18">
<description summary="set window bounds">
- Set the "visible bounds" of a window from the user's perspective.
+ [Deprecated] Set the "visible bounds" of a window from the user's perspective.
Client-side decorations often have invisible portions like drop shadows
which should be ignored for the purposes of aligning, placing and
constraining windows.
@@ -1095,6 +1113,7 @@
</description>
</request>
+ <!-- Version 27 additions -->
<request name="set_system_gesture_exclusion" since="27">
<description summary="set system gesture exclusion">
Set system gesture exclusion region in which system gestures e.g. back
@@ -1102,6 +1121,82 @@
</description>
<arg name="region" type="object" interface="wl_region" allow-null="true"/>
</request>
+
+ <!-- Version 31 additions -->
+ <request name="set_resize_lock" since="31">
+ <description summary="set resize lock state">
+ Enable the resize lock and put restrictions related to resizing on
+ the shell surface.
+
+ The resize lock state is double buffered, and will be applied at the
+ time wl_surface.commit of the corresponding wl_surface is called.
+ </description>
+ </request>
+
+ <request name="unset_resize_lock" since="31">
+ <description summary="unset resize lock state">
+ Disable the resize lock and allow the shell surface to be resized
+ freely.
+
+ The resize lock state is double buffered, and will be applied at the
+ time wl_surface.commit of the corresponding wl_surface is called.
+ </description>
+ </request>
+
+ <!-- Version 33 additions -->
+
+ <event name="bounds_changed_in_output" since="33">
+ <description summary="The compositor requested to change the bounds">
+ The compositor requested to change its
+ bounds. "bounds_change_reason" specifies the cause of the
+ bounds change. The client may apply the different move/resize
+ strategy depending on the reason.
+
+ The "output" specifies the wayland output in which the suface should live.
+
+ The client responds with set_window_geometry request, with the
+ bounds it is resized to (this may be different from the bounds
+ requested).
+
+ The client may ignore move request depending on the state,
+ e.g, if it becomes resizable or other constrants.
+ </description>
+ <arg name="output" type="object" interface="wl_output" summary="the output"/>
+ <arg name="x" type="int"/>
+ <arg name="y" type="int"/>
+ <arg name="width" type="int"/>
+ <arg name="height" type="int"/>
+ <arg name="bounds_change_reason" type="uint"/>
+ </event>
+
+ <request name="set_bounds_in_output" since="33">
+ <description summary="set window bounds">
+ Set the "visible bounds" of a window from the user's perspective.
+ Client-side decorations often have invisible portions like drop shadows
+ which should be ignored for the purposes of aligning, placing and
+ constraining windows.
+
+ The bounds are double buffered, and will be applied at the
+ time wl_surface.commit of the corresponding wl_surface is called.
+
+ Once the bounds are set, it is not possible to unset them, and they will
+ remain the same until set_bounds is called again, even if a new sub-
+ surface or buffer is attached.
+
+ If never set, the value is the surface content bounds. This updates
+ dynamically on every commit.
+
+ The bounds are relative to the given display. If the display is invalid,
+ they are assumed to be relative to the primary display.
+
+ The width and height must be greater than zero.
+ </description>
+ <arg name="output" type="object" interface="wl_output" summary="the output"/>
+ <arg name="x" type="int"/>
+ <arg name="y" type="int"/>
+ <arg name="width" type="int"/>
+ <arg name="height" type="int"/>
+ </request>
</interface>
<interface name="zcr_notification_surface_v1" version="16">
@@ -1126,7 +1221,7 @@
</request>
</interface>
- <interface name="zcr_input_method_surface_v1" version="18">
+ <interface name="zcr_input_method_surface_v1" version="33">
<description summary="An input method window">
An interface that may be implemented by a wl_surface to host IME contents.
</description>
@@ -1141,7 +1236,7 @@
<request name="set_bounds" since="18">
<description summary="set window bounds">
- Set the "visible bounds" of a window from the user's perspective.
+ [Deprecated] Set the "visible bounds" of a window from the user's perspective.
The bounds are double buffered, and will be applied at the
time wl_surface.commit of the corresponding wl_surface is called.
@@ -1165,9 +1260,37 @@
<arg name="width" type="int"/>
<arg name="height" type="int"/>
</request>
+
+ <!-- Version 33 additions -->
+
+ <request name="set_bounds_in_output" since="33">
+ <description summary="set window bounds">
+ Set the "visible bounds" of a window from the user's perspective.
+
+ The bounds are double buffered, and will be applied at the
+ time wl_surface.commit of the corresponding wl_surface is called.
+
+ Once the bounds are set, it is not possible to unset them, and they will
+ remain the same until set_bounds is called again, even if a new sub-
+ surface or buffer is attached.
+
+ If never set, the value is the surface content bounds. This updates
+ dynamically on every commit.
+
+ The bounds are relative to the given display. If the display is invalid,
+ they are assumed to be relative to the primary display.
+
+ The width and height must be greater than zero.
+ </description>
+ <arg name="output" type="object" interface="wl_output" summary="the output"/>
+ <arg name="x" type="int"/>
+ <arg name="y" type="int"/>
+ <arg name="width" type="int"/>
+ <arg name="height" type="int"/>
+ </request>
</interface>
- <interface name="zcr_toast_surface_v1" version="28">
+ <interface name="zcr_toast_surface_v1" version="33">
<description summary="A toast window">
An interface that may be implemented by a wl_surface to host
toast contents.
@@ -1181,7 +1304,7 @@
<request name="set_position">
<description summary="set toast bounds position">
- Set the position of bounds of a window from the user's perspective.
+ [Deprecated] Set the position of bounds of a window from the user's perspective.
The bounds are double buffered, and will be applied at the
time wl_surface.commit of the corresponding wl_surface is called.
@@ -1203,7 +1326,7 @@
<request name="set_size">
<description summary="set toast bounds size">
- Set the size of bounds of a window from the user's perspective.
+ [Deprecated] Set the size of bounds of a window from the user's perspective.
The bounds are double buffered, and will be applied at the
time wl_surface.commit of the corresponding wl_surface is called.
@@ -1220,9 +1343,34 @@
<arg name="width" type="int"/>
<arg name="height" type="int"/>
</request>
+
+ <!-- Version 33 additions -->
+
+ <request name="set_bounds_in_output" since="33">
+ <description summary="set toast bounds position">
+ Set the bounds of a toast window from the user's perspective.
+
+ The bounds are double buffered, and will be applied at the
+ time wl_surface.commit of the corresponding wl_surface is called.
+
+ Once the bounds are set, it is not possible to unset them, and they will
+ remain the same until set_bounds is called again, even if a new sub-
+ surface or buffer is attached.
+
+ If never set, the compositor will determine the toast position.
+
+ The bounds are relative to the given display. If the display is invalid,
+ they are assumed to be relative to the primary display.
+ </description>
+ <arg name="output" type="object" interface="wl_output" summary="the output"/>
+ <arg name="x" type="int"/>
+ <arg name="y" type="int"/>
+ <arg name="width" type="int"/>
+ <arg name="height" type="int"/>
+ </request>
</interface>
- <interface name="zcr_remote_output_v1" version="29">
+ <interface name="zcr_remote_output_v1" version="32">
<description summary="remote shell interface to a wl_output">
An additional interface to a wl_output object, which allows the
client to access additional functionality for output.
@@ -1236,7 +1384,7 @@
<event name="display_id" since="29">
<description summary="the identifier for the display">
- Sends the display identifier used by the server for the display.
+ [Deprecated] Sends the display identifier used by the server for the display.
</description>
<arg name="display_id_hi" type="uint"/>
<arg name="display_id_lo" type="uint"/>
@@ -1279,13 +1427,30 @@
<event name="systemui_visibility" since="29">
<description summary="systemui_visibility_state for a display">
- Sends information about whether the systemui is visible. The "systemui_visibility"
- value is of enum type "systemui_visibility_state".
+ [Deprecated] Sends information about whether the systemui is visible.
+ The "systemui_visibility" value is of enum type "systemui_visibility_state".
</description>
<arg name="systemui_visibility" type="int" summary="systemui_visibility_state enum"/>
</event>
+ <!-- Version 32 additions -->
+
+ <enum name="systemui_behavior">
+ <description summary="systemui behavior">
+ Determine the behavior of the system UI.
+ </description>
+ <entry name="visible" value="1" summary="system ui is visible"/>
+ <entry name="hidden" value="2" summary="system ui is autohide or hidden"/>
+ </enum>
+
+ <event name="systemui_behavior" since="32">
+ <description summary="systemui_behavior_state for a display">
+ Sends information about whether the systemui behavior is auto hide.
+ The "systemui_behavior" value is of enum type "systemui_behavior".
+ </description>
+ <arg name="systemui_behavior" type="int" summary="systemui_behavior enum"/>
+ </event>
+
</interface>
</protocol>
-
diff --git a/chromium.org/unstable/stylus/stylus-unstable-v2.xml b/chromium.org/unstable/stylus/stylus-unstable-v2.xml
index 8465f07..9bb5022 100644
--- a/chromium.org/unstable/stylus/stylus-unstable-v2.xml
+++ b/chromium.org/unstable/stylus/stylus-unstable-v2.xml
@@ -24,15 +24,11 @@
DEALINGS IN THE SOFTWARE.
</copyright>
- <interface name="zcr_stylus_v2" version="1">
- <description summary="extends wl_touch with events for on-screen stylus">
- Allows a wl_touch to report stylus specific information. The client can
- interpret the on-screen stylus like any other touch event, and use
- this protocol to obtain detail information about the type of stylus,
- as well as the force and tilt of the tool.
-
- These events are to be fired by the server within the same frame as other
- wl_touch events.
+ <interface name="zcr_stylus_v2" version="2">
+ <description summary="extends wl_touch and wl_pointer for styli">
+ Allows a wl_touch or a wl_pointer to report stylus specific information.
+ The client can use this protocol to obtain detail information about the
+ type of stylus, as well as the force and tilt of the tool.
Warning! The protocol described in this file is experimental and
backward incompatible changes may be made. Backward compatible changes
@@ -47,23 +43,43 @@
<enum name="error">
<entry name="touch_stylus_exists" value="0"
summary="the touch already has a touch_stylus object associated"/>
+
+ <!-- Version 2 Additions -->
+ <entry name="pointer_stylus_exists" value="1" since="2"
+ summary="the pointer already has a pointer_stylus object associated"/>
</enum>
<request name="get_touch_stylus">
<description summary="get stylus interface for touch">
- Create touch_stylus object. See zcr_touch_stylus_v1 interface for
+ Create touch_stylus object. See zcr_touch_stylus_v2 interface for
details. If the given wl_touch already has a touch_stylus object
associated, the touch_stylus_exists protocol error is raised.
</description>
<arg name="id" type="new_id" interface="zcr_touch_stylus_v2"/>
<arg name="touch" type="object" interface="wl_touch"/>
</request>
+
+ <!-- Version 2 Additions -->
+ <request name="get_pointer_stylus" since="2">
+ <description summary="get stylus interface for pointer">
+ Create pointer_stylus object. See zcr_pointer_stylus_v2 interface for
+ details. If the given wl_pointer already has a pointer_stylus object
+ associated, the pointer_stylus_exists protocol error is raised.
+ </description>
+ <arg name="id" type="new_id" interface="zcr_pointer_stylus_v2"/>
+ <arg name="pointer" type="object" interface="wl_pointer"/>
+ </request>
</interface>
<interface name="zcr_touch_stylus_v2" version="1">
<description summary="stylus extension for touch">
- The zcr_touch_stylus_v1 interface extends the wl_touch interface with
- events to describe details about a stylus.
+ The zcr_touch_stylus_v2 interface extends the wl_touch interface with
+ events to describe details about a stylus. A stylus that reports events
+ through this interface is likely an on-screen stylus, where the user
+ interacts with the stylus directly on a display.
+
+ These events are to be fired by the server within the same frame as other
+ wl_touch events.
</description>
<request name="destroy" type="destructor">
@@ -113,4 +129,73 @@
</event>
</interface>
+ <!-- Version 2 Additions -->
+
+ <interface name="zcr_pointer_stylus_v2" version="2">
+ <description summary="stylus extension for touch">
+ The zcr_pointer_stylus_v2 interface extends the wl_pointer interface with
+ events to describe details about a stylus. A stylus that reports events
+ through this interface also moves the mouse cursor. The type of the
+ device reporting values through this interface is described by the
+ tool_type. When the tool changes, the values previously reported through
+ this interface are assumed to be reset.
+
+ These events are to be fired by the server within the same frame as other
+ wl_pointer events.
+ </description>
+
+ <request name="destroy" type="destructor">
+ <description summary="destroy stylus object"/>
+ </request>
+
+ <enum name="tool_type">
+ <description summary="the tool type of the device"/>
+ <entry name="none" value="0" summary="Default pointer device"/>
+ <entry name="touch" value="1" summary="Touch"/>
+ <entry name="pen" value="2" summary="Pen"/>
+ <entry name="eraser" value="3" summary="Eraser"/>
+ </enum>
+
+ <event name="tool">
+ <description summary="tool change event">
+ Notification that the user is using a tool type other than touch. There
+ can only be one tool in use at a time.
+ </description>
+ <arg name="type" type="uint" enum="tool_type" summary="type of tool in use"/>
+ </event>
+
+ <event name="force">
+ <description summary="force change event">
+ Notification of the physical force of the stylus on the surface.
+ The force is calibrated and normalized to the 0 to 1 range.
+
+ The client should assume that the force value is reset when the
+ tool changes, and that the tool does not support force detection
+ until the first force event is sent. That force value will persist
+ until the next force update or tool change.
+ </description>
+ <arg name="time" type="uint" summary="timestamp with millisecond granularity"/>
+ <arg name="force" type="fixed" summary="new value of force"/>
+ </event>
+
+ <event name="tilt">
+ <description summary="tilt change event">
+ Notification of a change in tilt of a stylus.
+
+ Measured from surface normal as plane angle in degrees, values lie in
+ [-90,90]. A positive x is to the right and a positive y is towards the
+ user.
+
+ The client should assume that the tilt value is reset when the
+ tool changes, and that the tool does not support tilt detection
+ until the first tilt event is sent. That value will persist
+ until the next tilt update or tool change.
+ </description>
+ <arg name="time" type="uint" summary="timestamp with millisecond granularity"/>
+ <arg name="tilt_x" type="fixed" summary="tilt in x direction"/>
+ <arg name="tilt_y" type="fixed" summary="tilt in y direction"/>
+ </event>
+ </interface>
+
</protocol>
+
diff --git a/freedesktop.org/.editorconfig b/freedesktop.org/.editorconfig
new file mode 100644
index 0000000..7e0c0a0
--- /dev/null
+++ b/freedesktop.org/.editorconfig
@@ -0,0 +1,6 @@
+root = true
+
+[*.xml]
+indent_style = space
+indent_size = 2
+tab_width = 8
diff --git a/freedesktop.org/.gitlab-ci.yml b/freedesktop.org/.gitlab-ci.yml
new file mode 100644
index 0000000..66a56a3
--- /dev/null
+++ b/freedesktop.org/.gitlab-ci.yml
@@ -0,0 +1,27 @@
+variables:
+ DEBIAN_TAG: 2019-11-21.0
+ DEBIAN_VERSION: stable
+ TEST_IMAGE: "$CI_REGISTRY_IMAGE/debian/$DEBIAN_VERSION:$DEBIAN_TAG"
+
+include:
+ - project: 'wayland/ci-templates'
+ ref: f69acac60d5dde0410124fd5674764600821b7a6
+ file: '/templates/debian.yml'
+
+stages:
+ - containers-build
+ - test
+
+container_build:
+ extends: .debian@container-ifnot-exists
+ stage: containers-build
+ variables:
+ GIT_STRATEGY: none # no need to pull the whole tree for rebuilding the image
+ DEBIAN_DEBS: 'build-essential automake autoconf libtool pkg-config libwayland-dev'
+
+test:
+ stage: test
+ image: $TEST_IMAGE
+ script:
+ - ./autogen.sh
+ - make check
diff --git a/freedesktop.org/GOVERNANCE.md b/freedesktop.org/GOVERNANCE.md
new file mode 100644
index 0000000..76606db
--- /dev/null
+++ b/freedesktop.org/GOVERNANCE.md
@@ -0,0 +1,149 @@
+# wayland-protocols governance
+
+This document governs the maintenance of wayland-protocols and serves to outline
+the broader process for standardization of protocol extensions in the Wayland
+ecosystem.
+
+## 1. Membership
+
+Membership in wayland-protocols is offered to stakeholders in the Wayland
+ecosystem who have an interest in participating in protocol extension
+standardization.
+
+### 1.1. Membership requirements
+
+1. Membership is extended to projects, rather than individuals.
+2. Members represent general-purpose projects with a stake in multiple Wayland
+ protocols (e.g. compositors, GUI toolkits, etc), rather than special-purpose
+ applications with a stake in only one or two.
+3. Each project must provide one or two named individuals as points-of-contact
+ for that project who can be reached to discuss protocol-related matters.
+4. During a vote, if two points-of-contact for the same member disagree, the
+ member's vote is considered blank.
+
+### 1.2. Becoming a member
+
+1. New members who meet the criteria outlined in 1.1 are established by
+ invitation from an existing member. Projects hoping to join should reach out
+ to an existing member asking for this invitation.
+2. New members shall write to the wayland-devel mailing list stating their
+ intention of joining and their sponsor.
+3. The sponsor shall respond acknowledging their sponsorship of the membership.
+4. A 14 day discussion period for comments from wayland-protocols members will
+ be held.
+5. At the conclusion of the discussion period, the new membership is established
+ unless their application was NACKed by a 1/2 majority of all existing members.
+
+### 1.3. Ceasing membership
+
+1. A member may step down by writing their intention to do so to the
+ wayland-devel mailing list.
+2. A removal vote may be called for by an existing member by posting to the
+ wayland-devel mailing list. This begins a 14 day voting & discussion
+ period.
+3. At the conclusion of the voting period, the member is removed if the votes
+ total 2/3rds of all current members.
+4. Removed members are not eligible to apply for membership again for a period
+ of 1 year.
+5. Following a failed vote, the member who called for the vote cannot
+ call for a re-vote or propose any other removal for 90 days.
+
+## 2. Protocols
+
+### 2.1. Protocol namespaces
+
+1. Namespaces are implemented in practice by prefixing each interface name in a
+ protocol definition (XML) with the namespace name, and an underscore (e.g.
+ "xdg_wm_base").
+2. Protocols in a namespace may optionally use the namespace followed by a dash
+ in the name (e.g. "xdg-shell").
+3. The "xdg" namespace is established for protocols letting clients
+ configure its surfaces as "windows", allowing clients to affect how they
+ are managed.
+4. The "wp" namespace is established for protocols generally useful to Wayland
+ implementations (i.e. "plumbing" protocols).
+5. The "ext" namespace is established as a general catch-all for protocols that
+ fit into no other namespace.
+
+### 2.2. Protocol inclusion requirements
+
+1. All protocols found in the "xdg" and "wp" namespaces at the time of writing
+ are grandfathered into their respective namespace without further discussion.
+2. Protocols in the "xdg" and "wp" namespace are eligible for inclusion only if
+ ACKed by at least 3 members.
+3. Protocols in the "xdg" and "wp" namespace are ineligible for inclusion if
+ if NACKed by any member.
+4. Protocols in the "xdg" and "wp" namespaces must have at least 3 open-source
+ implementations (either 1 client + 2 servers, or 2 clients + 1 server) to be
+ eligible for inclusion.
+5. Protocols in the "ext" namespace are eligible for inclusion only if ACKed by
+ at least one other member.
+6. Protocols in the "ext" namespace must have at least one open-source client &
+ one open-source server implementation to be eligible for inclusion.
+7. "Open-source" is defined as distributed with an Open Source Initiative
+ approved license.
+
+### 2.3. Introducing new protocols
+
+1. A new protocol may be proposed by submitting a merge request to the
+ wayland-protocols Gitlab repository.
+2. Protocol proposal posts must include justification for their inclusion in
+ their namespace per the requirements outlined in section 2.2.
+3. An indefinite discussion period for comments from wayland-protocols members
+ will be held, with a minimum duration of 30 days. Protocols which require a
+ certain level of implementation status, ACKs from members, and so on, should
+ use this time to acquire them.
+4. When the proposed protocol meets all requirements for inclusion per section
+ 2.2, and the minimum discussion period has elapsed, the sponsoring member may
+ merge their changes in the wayland-protocol repository.
+5. Amendments to existing protocols may be proposed by the same process, with
+ no minimum discussion period.
+6. Declaring a protocol stable may be proposed by the same process, with the
+ regular 30 day minimum discussion period.
+
+## 3. Protocol adoption documentation
+
+### 3.1. Adoption website
+
+1. This section is informational.
+2. A website will be made available for interested parties to browse the
+ implementation status of protocols included in wayland-protocols.
+3. A statement from each member of wayland-protocols will be included on the
+ site.
+4. Each protocol will be listed along with its approval status from each member.
+5. The approval statuses are:
+ 1. NACK, or "negative acknowledgement", meaning that the member is opposed to
+ the protocol in principle.
+ 2. NOPP, or "no opposition", meaning that the member is not opposed to the
+ protocol in principle, but does not provide an implementation.
+ 3. ACK, or "acknowledged", meaning that the member supports the protocol in
+ principle, but does not provide an implementation.
+ 4. IMPL, or "implemented", meaning that the member supports the protocol and
+ provides an implementation.
+6. Each member may write a short statement expanding on the rationale for their
+ approval status, which will be included on the site.
+7. A supplementary list of implementations will also be provided on the site,
+ which may include implementations supported by non-members.
+
+### 3.2. Changes to the adoption website
+
+1. This section is informational.
+2. A new protocol is added to the website by the sponsoring member at the
+ conclusion of the discussion period (section 2.3.3).
+3. During the discussion period (section 2.3.3), interested parties may express
+ their approval status on the Gitlab merge request. The default approval
+ status for members who do not participate in the discussion is "NOPP".
+4. Members may change their acknowledgement status or support statement at any
+ time after the discussion period (section 2.3.3) has closed by simply merging
+ their update in the wayland-protocols repository.
+
+## 4. Amending this document
+
+1. An amendment to this document may be proposed any member by
+ submitting a merge request on Gitlab.
+2. A 30 day discussion period for comments from wayland-protocols members will
+ be held.
+3. At the conclusion of the discussion period, an amendment will become
+ effective if it's ACKed by at least 2/3rds of all wayland-protocols members,
+ and NACKed by none. The sponsoring member may merge their change to the
+ wayland-protocols repository at this point.
diff --git a/freedesktop.org/MEMBERS.md b/freedesktop.org/MEMBERS.md
new file mode 100644
index 0000000..8c35637
--- /dev/null
+++ b/freedesktop.org/MEMBERS.md
@@ -0,0 +1,13 @@
+# wayland-protocols members
+
+- EFL/Enlightenment: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
+- GTK/Mutter: Jonas Ådahl <jadahl@gmail.com>,
+ Carlos Garnacho <carlosg@gnome.org>
+- KWin: Eike Hein <hein@kde.org>,
+ David Edmundson <david@davidedmundson.co.uk>
+- Mir: Christopher James Halse Rogers <raof@ubuntu.com>,
+ Alan Griffiths <alan.griffiths@canonical.com>
+- Qt: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
+- Weston: Pekka Paalanen <pekka.paalanen@collabora.com>,
+ Daniel Stone <daniel@fooishbar.org>
+- wlroots/Sway: Drew DeVault <sir@cmpwn.com>, Simon Ser <contact@emersion.fr>
diff --git a/freedesktop.org/METADATA b/freedesktop.org/METADATA
index 744d62a..57e51ad 100644
--- a/freedesktop.org/METADATA
+++ b/freedesktop.org/METADATA
@@ -1,17 +1,17 @@
name: "wayland-protocol"
description:
- "wayland-protocols contains Wayland protocols that adds functionality not"
- "available in the Wayland core protocol. Such protocols either adds"
- "completely new functionality, or extends the functionality of some other"
- "protocol either in Wayland core, or some other protocol in"
+ "wayland-protocols contains Wayland protocols that add functionality not "
+ "available in the Wayland core protocol. Such protocols either add "
+ "completely new functionality, or extend the functionality of some other "
+ "protocol either in Wayland core, or some other protocol in "
"wayland-protocols."
third_party {
url {
type: GIT
- value: "git://anon.freedesktop.org/wayland/wayland-protocols"
+ value: "https://gitlab.freedesktop.org/wayland/wayland-protocols.git"
}
- version: "1.11"
- last_upgrade_date { year: 2017 month: 11 day: 29 }
+ version: "d10d18f3d49374d2e3eb96d63511f32795aab5f7"
+ last_upgrade_date { year: 2020 month: 03 day: 17 }
license_type: NOTICE
}
diff --git a/freedesktop.org/Makefile.am b/freedesktop.org/Makefile.am
index 0296d5d..1f32890 100644
--- a/freedesktop.org/Makefile.am
+++ b/freedesktop.org/Makefile.am
@@ -1,8 +1,11 @@
+ACLOCAL_AMFLAGS = -I m4
+
unstable_protocols = \
unstable/pointer-gestures/pointer-gestures-unstable-v1.xml \
unstable/fullscreen-shell/fullscreen-shell-unstable-v1.xml \
unstable/linux-dmabuf/linux-dmabuf-unstable-v1.xml \
unstable/text-input/text-input-unstable-v1.xml \
+ unstable/text-input/text-input-unstable-v3.xml \
unstable/input-method/input-method-unstable-v1.xml \
unstable/xdg-shell/xdg-shell-unstable-v5.xml \
unstable/xdg-shell/xdg-shell-unstable-v6.xml \
@@ -16,11 +19,16 @@ unstable_protocols = \
unstable/xwayland-keyboard-grab/xwayland-keyboard-grab-unstable-v1.xml \
unstable/keyboard-shortcuts-inhibit/keyboard-shortcuts-inhibit-unstable-v1.xml \
unstable/xdg-output/xdg-output-unstable-v1.xml \
+ unstable/input-timestamps/input-timestamps-unstable-v1.xml \
+ unstable/xdg-decoration/xdg-decoration-unstable-v1.xml \
+ unstable/linux-explicit-synchronization/linux-explicit-synchronization-unstable-v1.xml \
+ unstable/primary-selection/primary-selection-unstable-v1.xml \
$(NULL)
stable_protocols = \
stable/presentation-time/presentation-time.xml \
stable/viewporter/viewporter.xml \
+ stable/xdg-shell/xdg-shell.xml \
$(NULL)
nobase_dist_pkgdata_DATA = \
@@ -31,6 +39,9 @@ nobase_dist_pkgdata_DATA = \
dist_noinst_DATA = \
$(sort $(foreach p,$(unstable_protocols),$(dir $p)README)) \
$(sort $(foreach p,$(stable_protocols),$(dir $p)README)) \
+ README.md \
+ GOVERNANCE.md \
+ MEMBERS.md \
$(NULL)
noarch_pkgconfig_DATA = wayland-protocols.pc
diff --git a/freedesktop.org/NOTICE b/freedesktop.org/NOTICE
index 8ab3291..d24842f 100644..120000
--- a/freedesktop.org/NOTICE
+++ b/freedesktop.org/NOTICE
@@ -1,33 +1 @@
-Copyright © 2008-2013 Kristian Høgsberg
-Copyright © 2010-2013 Intel Corporation
-Copyright © 2013 Rafael Antognolli
-Copyright © 2013 Jasper St. Pierre
-Copyright © 2014 Jonas Ådahl
-Copyright © 2014 Jason Ekstrand
-Copyright © 2014-2015 Collabora, Ltd.
-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.
-
----
-
-The above is the version of the MIT "Expat" License used by X.org:
-
- http://cgit.freedesktop.org/xorg/xserver/tree/COPYING
+COPYING \ No newline at end of file
diff --git a/freedesktop.org/README.md b/freedesktop.org/README.md
new file mode 100644
index 0000000..c61ed8a
--- /dev/null
+++ b/freedesktop.org/README.md
@@ -0,0 +1,187 @@
+# Wayland protocols
+
+wayland-protocols contains Wayland protocols that add functionality not
+available in the Wayland core protocol. Such protocols either add
+completely new functionality, or extend the functionality of some other
+protocol either in Wayland core, or some other protocol in
+wayland-protocols.
+
+A protocol in wayland-protocols consists of a directory containing a set
+of XML files containing the protocol specification, and a README file
+containing detailed state and a list of maintainers.
+
+## Protocol directory tree structure
+
+Protocols may be "stable", "unstable" or "deprecated", and the interface
+and protocol names as well as place in the directory tree will reflect
+this.
+
+A stable protocol is a protocol which has been declared stable by
+the maintainers. Changes to such protocols will always be backward
+compatible.
+
+An unstable protocol is a protocol currently under development and this
+will be reflected in the protocol and interface names. See [Unstable
+naming convention](#unstable-naming-convention).
+
+A deprecated protocol is a protocol that has either been replaced by some
+other protocol, or declared undesirable for some other reason. No more
+changes will be made to a deprecated protocol.
+
+Depending on which of the above states the protocol is in, the protocol
+is placed within the toplevel directory containing the protocols with the
+same state. Stable protocols are placed in the `stable/` directory,
+unstable protocols are placed in the `unstable/` directory, and
+deprecated protocols are placed in the `deprecated/` directory.
+
+## Protocol development procedure
+
+To propose a new protocol, create a GitLab merge request adding the
+relevant files and Makefile.am entry to the repository with the
+explanation and motivation in the commit message. Protocols are
+organized in namespaces describing their scope ("wp", "xdg" and "ext").
+There are different requirements for each namespace, see [GOVERNANCE
+section 2](GOVERNANCE.md#2-protocols) for more information.
+
+If the new protocol is just an idea, open an issue on the GitLab issue
+tracker. If the protocol isn't ready for complete review yet and is an
+RFC, create a merge request and add the "WIP:" prefix in the title.
+
+To propose changes to existing protocols, create a GitLab merge request.
+
+If the changes are backward incompatible changes to an unstable protocol,
+see [Unstable protocol changes](#unstable-protocol-changes).
+
+## Interface naming convention
+
+All protocols should avoid using generic namespaces or no namespaces in
+the protocol interface names in order to minimize risk that the generated
+C API collides with other C API. Interface names that may collide with
+interface names from other protocols should also be avoided.
+
+For generic protocols not limited to certain configurations (such as
+specific desktop environment or operating system) the `wp_` prefix
+should be used on all interfaces in the protocol.
+
+For protocols allowing clients to configure how their windows are
+managed, the `xdg_` prefix should be used.
+
+For operating system specific protocols, the interfaces should be
+prefixed with both `wp_` and the operating system, for example
+`wp_linux_`, or `wp_freebsd_`, etc.
+
+For more information about namespaces, see [GOVERNANCE section 2.1
+](GOVERNANCE.md#21-protocol-namespaces).
+
+## Unstable naming convention
+
+Unstable protocols have a special naming convention in order to make it
+possible to make discoverable backward incompatible changes.
+
+An unstable protocol has at least two versions: the major version, which
+represents backward incompatible changes, and the minor version, which
+represents backward compatible changes to the interfaces in the protocol.
+
+The major version is part of the XML file name, the protocol name in the
+XML, and interface names in the protocol.
+
+Minor versions are the version attributes of the interfaces in the XML.
+There may be more than one minor version per protocol, if there are more
+than one global.
+
+The XML file and protocol name also has the word 'unstable' in them, and
+all of the interfaces in the protocol are prefixed with `z` and
+suffixed with the major version number.
+
+For example, an unstable protocol called `foo-bar` with major version 2
+containing the two interfaces `wp_foo` and `wp_bar` both minor version 1
+will be placed in the directory `unstable/foo-bar/` consisting of one file
+called `README` and one called `foo-bar-unstable-v2.xml`. The XML file
+will consist of two interfaces called `zwp_foo_v2` and `zwp_bar_v2` with
+the `version` attribute set to 1.
+
+## Unstable protocol changes
+
+During the development of a new protocol it is possible that backward
+incompatible changes are needed. Such a change needs to be represented
+in the major and minor versions of the protocol.
+
+Assuming a backward incompatible change is needed, the procedure for how to
+do so is the following:
+
+- Make a copy of the XML file with the major version increased by 1.
+- Increase the major version number in the protocol XML by 1.
+- Increase the major version number in all of the interfaces in the
+ XML by 1.
+- Reset the minor version number (interface version attribute) of all
+ the interfaces to 1.
+
+Backward compatible changes within a major unstable version can be done
+in the regular way as done in core Wayland or in stable protocols.
+
+## Declaring a protocol stable
+
+Once it is decided that a protocol should be declared stable, meaning no
+more backward incompatible changes will ever be allowed, one last
+breakage is needed.
+
+The procedure of doing this is the following:
+
+- Create a new directory in the `stable/` toplevel directory with the
+ same name as the protocol directory in the `unstable/` directory.
+- Copy the final version of the XML that is the version that was
+ decided to be declared stable into the new directory. The target name
+ should be the same name as the protocol directory but with the `.xml`
+ suffix.
+- Rename the name of the protocol in the XML by removing the
+ `unstable` part and the major version number.
+- Remove the `z` prefix and the major version number suffix from all
+ of the interfaces in the protocol.
+- Reset all of the interface version attributes to 1.
+- Update the `README` file in the unstable directory and create a new
+ `README` file in the new directory.
+
+There are other requirements for declaring a protocol stable, see
+[GOVERNANCE section 2.3](GOVERNANCE.md#23-introducing-new-protocols).
+
+## Releases
+
+Each release of wayland-protocols finalizes the version of the protocols
+to their state they had at that time.
+
+## Gitlab conventions
+
+### Triaging merge requests
+
+New merge requests should be triaged. Doing so requires the one doing the
+triage to add a set of initial labels:
+
+~"New Protocol" - For a new protocol being added. If it's an amendment to
+an existing protocol, apply the label of the corresponding protocol
+instead. If none exist, create it.
+
+~"Needs acks" - If the protocol needs one or more acknowledgements.
+
+~"Needs implementations" - If there are not enough implementations of the
+protocol.
+
+~"Needs review" - If the protocol is in need of review.
+
+~"In 30 day discussion period" - If the protocol needs a 30 day discussion
+period.
+
+For the meaning and requirement of acknowledgments and available
+implementations, see the GOVERNANCE.md document.
+
+### Managing merge requests
+
+When merge requests get their needed feedback and items, remove the
+corresponding label that marks it as needing something. For example, if a
+merge request receives all the required acknowledgments, remove the ~"Needs
+acks" label, or if 30 days passed since opening, remove any ~"In 30 days
+discussion period" label.
+
+### Nacking a merge request
+
+If the inclusion of a merge request is denied due to one or more Nacks, add
+the ~Nacked label.
diff --git a/freedesktop.org/configure.ac b/freedesktop.org/configure.ac
index 39d54a9..388004c 100644
--- a/freedesktop.org/configure.ac
+++ b/freedesktop.org/configure.ac
@@ -1,7 +1,7 @@
AC_PREREQ([2.64])
m4_define([wayland_protocols_major_version], [1])
-m4_define([wayland_protocols_minor_version], [11])
+m4_define([wayland_protocols_minor_version], [20])
m4_define([wayland_protocols_version],
[wayland_protocols_major_version.wayland_protocols_minor_version])
diff --git a/freedesktop.org/stable/presentation-time/presentation-time.xml b/freedesktop.org/stable/presentation-time/presentation-time.xml
index a46994c..d1731f0 100644
--- a/freedesktop.org/stable/presentation-time/presentation-time.xml
+++ b/freedesktop.org/stable/presentation-time/presentation-time.xml
@@ -154,7 +154,7 @@
summary="presentation output"/>
</event>
- <enum name="kind">
+ <enum name="kind" bitfield="true">
<description summary="bitmask of flags in presented event">
These flags provide information about how the presentation of
the related content update was done. The intent is to help
@@ -253,7 +253,7 @@
summary="high 32 bits of refresh counter"/>
<arg name="seq_lo" type="uint"
summary="low 32 bits of refresh counter"/>
- <arg name="flags" type="uint" summary="combination of 'kind' values"/>
+ <arg name="flags" type="uint" enum="kind" summary="combination of 'kind' values"/>
</event>
<event name="discarded">
diff --git a/freedesktop.org/stable/xdg-shell/README b/freedesktop.org/stable/xdg-shell/README
new file mode 100644
index 0000000..c45f70c
--- /dev/null
+++ b/freedesktop.org/stable/xdg-shell/README
@@ -0,0 +1,5 @@
+xdg shell protocol
+
+Maintainers:
+Jonas Ådahl <jadahl@gmail.com>
+Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
diff --git a/freedesktop.org/stable/xdg-shell/xdg-shell.xml b/freedesktop.org/stable/xdg-shell/xdg-shell.xml
new file mode 100644
index 0000000..ae8ab67
--- /dev/null
+++ b/freedesktop.org/stable/xdg-shell/xdg-shell.xml
@@ -0,0 +1,1249 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<protocol name="xdg_shell">
+
+ <copyright>
+ Copyright © 2008-2013 Kristian Høgsberg
+ Copyright © 2013 Rafael Antognolli
+ Copyright © 2013 Jasper St. Pierre
+ Copyright © 2010-2013 Intel Corporation
+ Copyright © 2015-2017 Samsung Electronics Co., Ltd
+ Copyright © 2015-2017 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>
+
+ <interface name="xdg_wm_base" version="3">
+ <description summary="create desktop-style surfaces">
+ The xdg_wm_base interface is exposed as a global object enabling clients
+ to turn their wl_surfaces into windows in a desktop environment. It
+ defines the basic functionality needed for clients and the compositor to
+ create windows that can be dragged, resized, maximized, etc, as well as
+ creating transient windows such as popup menus.
+ </description>
+
+ <enum name="error">
+ <entry name="role" value="0" summary="given wl_surface has another role"/>
+ <entry name="defunct_surfaces" value="1"
+ summary="xdg_wm_base was destroyed before children"/>
+ <entry name="not_the_topmost_popup" value="2"
+ summary="the client tried to map or destroy a non-topmost popup"/>
+ <entry name="invalid_popup_parent" value="3"
+ summary="the client specified an invalid popup parent surface"/>
+ <entry name="invalid_surface_state" value="4"
+ summary="the client provided an invalid surface state"/>
+ <entry name="invalid_positioner" value="5"
+ summary="the client provided an invalid positioner"/>
+ </enum>
+
+ <request name="destroy" type="destructor">
+ <description summary="destroy xdg_wm_base">
+ Destroy this xdg_wm_base object.
+
+ Destroying a bound xdg_wm_base object while there are surfaces
+ still alive created by this xdg_wm_base object instance is illegal
+ and will result in a protocol error.
+ </description>
+ </request>
+
+ <request name="create_positioner">
+ <description summary="create a positioner object">
+ Create a positioner object. A positioner object is used to position
+ surfaces relative to some parent surface. See the interface description
+ and xdg_surface.get_popup for details.
+ </description>
+ <arg name="id" type="new_id" interface="xdg_positioner"/>
+ </request>
+
+ <request name="get_xdg_surface">
+ <description summary="create a shell surface from a surface">
+ This creates an xdg_surface for the given surface. While xdg_surface
+ itself is not a role, the corresponding surface may only be assigned
+ a role extending xdg_surface, such as xdg_toplevel or xdg_popup.
+
+ This creates an xdg_surface for the given surface. An xdg_surface is
+ used as basis to define a role to a given surface, such as xdg_toplevel
+ or xdg_popup. It also manages functionality shared between xdg_surface
+ based surface roles.
+
+ See the documentation of xdg_surface for more details about what an
+ xdg_surface is and how it is used.
+ </description>
+ <arg name="id" type="new_id" interface="xdg_surface"/>
+ <arg name="surface" type="object" interface="wl_surface"/>
+ </request>
+
+ <request name="pong">
+ <description summary="respond to a ping event">
+ A client must respond to a ping event with a pong request or
+ the client may be deemed unresponsive. See xdg_wm_base.ping.
+ </description>
+ <arg name="serial" type="uint" summary="serial of the ping event"/>
+ </request>
+
+ <event name="ping">
+ <description summary="check if the client is alive">
+ The ping event asks the client if it's still alive. Pass the
+ serial specified in the event back to the compositor by sending
+ a "pong" request back with the specified serial. See xdg_wm_base.pong.
+
+ Compositors can use this to determine if the client is still
+ alive. It's unspecified what will happen if the client doesn't
+ respond to the ping request, or in what timeframe. Clients should
+ try to respond in a reasonable amount of time.
+
+ A compositor is free to ping in any way it wants, but a client must
+ always respond to any xdg_wm_base object it created.
+ </description>
+ <arg name="serial" type="uint" summary="pass this to the pong request"/>
+ </event>
+ </interface>
+
+ <interface name="xdg_positioner" version="3">
+ <description summary="child surface positioner">
+ The xdg_positioner provides a collection of rules for the placement of a
+ child surface relative to a parent surface. Rules can be defined to ensure
+ the child surface remains within the visible area's borders, and to
+ specify how the child surface changes its position, such as sliding along
+ an axis, or flipping around a rectangle. These positioner-created rules are
+ constrained by the requirement that a child surface must intersect with or
+ be at least partially adjacent to its parent surface.
+
+ See the various requests for details about possible rules.
+
+ At the time of the request, the compositor makes a copy of the rules
+ specified by the xdg_positioner. Thus, after the request is complete the
+ xdg_positioner object can be destroyed or reused; further changes to the
+ object will have no effect on previous usages.
+
+ For an xdg_positioner object to be considered complete, it must have a
+ non-zero size set by set_size, and a non-zero anchor rectangle set by
+ set_anchor_rect. Passing an incomplete xdg_positioner object when
+ positioning a surface raises an error.
+ </description>
+
+ <enum name="error">
+ <entry name="invalid_input" value="0" summary="invalid input provided"/>
+ </enum>
+
+ <request name="destroy" type="destructor">
+ <description summary="destroy the xdg_positioner object">
+ Notify the compositor that the xdg_positioner will no longer be used.
+ </description>
+ </request>
+
+ <request name="set_size">
+ <description summary="set the size of the to-be positioned rectangle">
+ Set the size of the surface that is to be positioned with the positioner
+ object. The size is in surface-local coordinates and corresponds to the
+ window geometry. See xdg_surface.set_window_geometry.
+
+ If a zero or negative size is set the invalid_input error is raised.
+ </description>
+ <arg name="width" type="int" summary="width of positioned rectangle"/>
+ <arg name="height" type="int" summary="height of positioned rectangle"/>
+ </request>
+
+ <request name="set_anchor_rect">
+ <description summary="set the anchor rectangle within the parent surface">
+ Specify the anchor rectangle within the parent surface that the child
+ surface will be placed relative to. The rectangle is relative to the
+ window geometry as defined by xdg_surface.set_window_geometry of the
+ parent surface.
+
+ When the xdg_positioner object is used to position a child surface, the
+ anchor rectangle may not extend outside the window geometry of the
+ positioned child's parent surface.
+
+ If a negative size is set the invalid_input error is raised.
+ </description>
+ <arg name="x" type="int" summary="x position of anchor rectangle"/>
+ <arg name="y" type="int" summary="y position of anchor rectangle"/>
+ <arg name="width" type="int" summary="width of anchor rectangle"/>
+ <arg name="height" type="int" summary="height of anchor rectangle"/>
+ </request>
+
+ <enum name="anchor">
+ <entry name="none" value="0"/>
+ <entry name="top" value="1"/>
+ <entry name="bottom" value="2"/>
+ <entry name="left" value="3"/>
+ <entry name="right" value="4"/>
+ <entry name="top_left" value="5"/>
+ <entry name="bottom_left" value="6"/>
+ <entry name="top_right" value="7"/>
+ <entry name="bottom_right" value="8"/>
+ </enum>
+
+ <request name="set_anchor">
+ <description summary="set anchor rectangle anchor">
+ Defines the anchor point for the anchor rectangle. The specified anchor
+ is used derive an anchor point that the child surface will be
+ positioned relative to. If a corner anchor is set (e.g. 'top_left' or
+ 'bottom_right'), the anchor point will be at the specified corner;
+ otherwise, the derived anchor point will be centered on the specified
+ edge, or in the center of the anchor rectangle if no edge is specified.
+ </description>
+ <arg name="anchor" type="uint" enum="anchor"
+ summary="anchor"/>
+ </request>
+
+ <enum name="gravity">
+ <entry name="none" value="0"/>
+ <entry name="top" value="1"/>
+ <entry name="bottom" value="2"/>
+ <entry name="left" value="3"/>
+ <entry name="right" value="4"/>
+ <entry name="top_left" value="5"/>
+ <entry name="bottom_left" value="6"/>
+ <entry name="top_right" value="7"/>
+ <entry name="bottom_right" value="8"/>
+ </enum>
+
+ <request name="set_gravity">
+ <description summary="set child surface gravity">
+ Defines in what direction a surface should be positioned, relative to
+ the anchor point of the parent surface. If a corner gravity is
+ specified (e.g. 'bottom_right' or 'top_left'), then the child surface
+ will be placed towards the specified gravity; otherwise, the child
+ surface will be centered over the anchor point on any axis that had no
+ gravity specified.
+ </description>
+ <arg name="gravity" type="uint" enum="gravity"
+ summary="gravity direction"/>
+ </request>
+
+ <enum name="constraint_adjustment" bitfield="true">
+ <description summary="constraint adjustments">
+ The constraint adjustment value define ways the compositor will adjust
+ the position of the surface, if the unadjusted position would result
+ in the surface being partly constrained.
+
+ Whether a surface is considered 'constrained' is left to the compositor
+ to determine. For example, the surface may be partly outside the
+ compositor's defined 'work area', thus necessitating the child surface's
+ position be adjusted until it is entirely inside the work area.
+
+ The adjustments can be combined, according to a defined precedence: 1)
+ Flip, 2) Slide, 3) Resize.
+ </description>
+ <entry name="none" value="0">
+ <description summary="don't move the child surface when constrained">
+ Don't alter the surface position even if it is constrained on some
+ axis, for example partially outside the edge of an output.
+ </description>
+ </entry>
+ <entry name="slide_x" value="1">
+ <description summary="move along the x axis until unconstrained">
+ Slide the surface along the x axis until it is no longer constrained.
+
+ First try to slide towards the direction of the gravity on the x axis
+ until either the edge in the opposite direction of the gravity is
+ unconstrained or the edge in the direction of the gravity is
+ constrained.
+
+ Then try to slide towards the opposite direction of the gravity on the
+ x axis until either the edge in the direction of the gravity is
+ unconstrained or the edge in the opposite direction of the gravity is
+ constrained.
+ </description>
+ </entry>
+ <entry name="slide_y" value="2">
+ <description summary="move along the y axis until unconstrained">
+ Slide the surface along the y axis until it is no longer constrained.
+
+ First try to slide towards the direction of the gravity on the y axis
+ until either the edge in the opposite direction of the gravity is
+ unconstrained or the edge in the direction of the gravity is
+ constrained.
+
+ Then try to slide towards the opposite direction of the gravity on the
+ y axis until either the edge in the direction of the gravity is
+ unconstrained or the edge in the opposite direction of the gravity is
+ constrained.
+ </description>
+ </entry>
+ <entry name="flip_x" value="4">
+ <description summary="invert the anchor and gravity on the x axis">
+ Invert the anchor and gravity on the x axis if the surface is
+ constrained on the x axis. For example, if the left edge of the
+ surface is constrained, the gravity is 'left' and the anchor is
+ 'left', change the gravity to 'right' and the anchor to 'right'.
+
+ If the adjusted position also ends up being constrained, the resulting
+ position of the flip_x adjustment will be the one before the
+ adjustment.
+ </description>
+ </entry>
+ <entry name="flip_y" value="8">
+ <description summary="invert the anchor and gravity on the y axis">
+ Invert the anchor and gravity on the y axis if the surface is
+ constrained on the y axis. For example, if the bottom edge of the
+ surface is constrained, the gravity is 'bottom' and the anchor is
+ 'bottom', change the gravity to 'top' and the anchor to 'top'.
+
+ The adjusted position is calculated given the original anchor
+ rectangle and offset, but with the new flipped anchor and gravity
+ values.
+
+ If the adjusted position also ends up being constrained, the resulting
+ position of the flip_y adjustment will be the one before the
+ adjustment.
+ </description>
+ </entry>
+ <entry name="resize_x" value="16">
+ <description summary="horizontally resize the surface">
+ Resize the surface horizontally so that it is completely
+ unconstrained.
+ </description>
+ </entry>
+ <entry name="resize_y" value="32">
+ <description summary="vertically resize the surface">
+ Resize the surface vertically so that it is completely unconstrained.
+ </description>
+ </entry>
+ </enum>
+
+ <request name="set_constraint_adjustment">
+ <description summary="set the adjustment to be done when constrained">
+ Specify how the window should be positioned if the originally intended
+ position caused the surface to be constrained, meaning at least
+ partially outside positioning boundaries set by the compositor. The
+ adjustment is set by constructing a bitmask describing the adjustment to
+ be made when the surface is constrained on that axis.
+
+ If no bit for one axis is set, the compositor will assume that the child
+ surface should not change its position on that axis when constrained.
+
+ If more than one bit for one axis is set, the order of how adjustments
+ are applied is specified in the corresponding adjustment descriptions.
+
+ The default adjustment is none.
+ </description>
+ <arg name="constraint_adjustment" type="uint"
+ summary="bit mask of constraint adjustments"/>
+ </request>
+
+ <request name="set_offset">
+ <description summary="set surface position offset">
+ Specify the surface position offset relative to the position of the
+ anchor on the anchor rectangle and the anchor on the surface. For
+ example if the anchor of the anchor rectangle is at (x, y), the surface
+ has the gravity bottom|right, and the offset is (ox, oy), the calculated
+ surface position will be (x + ox, y + oy). The offset position of the
+ surface is the one used for constraint testing. See
+ set_constraint_adjustment.
+
+ An example use case is placing a popup menu on top of a user interface
+ element, while aligning the user interface element of the parent surface
+ with some user interface element placed somewhere in the popup surface.
+ </description>
+ <arg name="x" type="int" summary="surface position x offset"/>
+ <arg name="y" type="int" summary="surface position y offset"/>
+ </request>
+
+ <!-- Version 3 additions -->
+
+ <request name="set_reactive" since="3">
+ <description summary="continuously reconstrain the surface">
+ When set reactive, the surface is reconstrained if the conditions used
+ for constraining changed, e.g. the parent window moved.
+
+ If the conditions changed and the popup was reconstrained, an
+ xdg_popup.configure event is sent with updated geometry, followed by an
+ xdg_surface.configure event.
+ </description>
+ </request>
+
+ <request name="set_parent_size" since="3">
+ <description summary="">
+ Set the parent window geometry the compositor should use when
+ positioning the popup. The compositor may use this information to
+ determine the future state the popup should be constrained using. If
+ this doesn't match the dimension of the parent the popup is eventually
+ positioned against, the behavior is undefined.
+
+ The arguments are given in the surface-local coordinate space.
+ </description>
+ <arg name="parent_width" type="int"
+ summary="future window geometry width of parent"/>
+ <arg name="parent_height" type="int"
+ summary="future window geometry height of parent"/>
+ </request>
+
+ <request name="set_parent_configure" since="3">
+ <description summary="set parent configure this is a response to">
+ Set the serial of an xdg_surface.configure event this positioner will be
+ used in response to. The compositor may use this information together
+ with set_parent_size to determine what future state the popup should be
+ constrained using.
+ </description>
+ <arg name="serial" type="uint"
+ summary="serial of parent configure event"/>
+ </request>
+ </interface>
+
+ <interface name="xdg_surface" version="3">
+ <description summary="desktop user interface surface base interface">
+ An interface that may be implemented by a wl_surface, for
+ implementations that provide a desktop-style user interface.
+
+ It provides a base set of functionality required to construct user
+ interface elements requiring management by the compositor, such as
+ toplevel windows, menus, etc. The types of functionality are split into
+ xdg_surface roles.
+
+ Creating an xdg_surface does not set the role for a wl_surface. In order
+ to map an xdg_surface, the client must create a role-specific object
+ using, e.g., get_toplevel, get_popup. The wl_surface for any given
+ xdg_surface can have at most one role, and may not be assigned any role
+ not based on xdg_surface.
+
+ A role must be assigned before any other requests are made to the
+ xdg_surface object.
+
+ The client must call wl_surface.commit on the corresponding wl_surface
+ for the xdg_surface state to take effect.
+
+ Creating an xdg_surface from a wl_surface which has a buffer attached or
+ committed is a client error, and any attempts by a client to attach or
+ manipulate a buffer prior to the first xdg_surface.configure call must
+ also be treated as errors.
+
+ After creating a role-specific object and setting it up, the client must
+ perform an initial commit without any buffer attached. The compositor
+ will reply with an xdg_surface.configure event. The client must
+ acknowledge it and is then allowed to attach a buffer to map the surface.
+
+ Mapping an xdg_surface-based role surface is defined as making it
+ possible for the surface to be shown by the compositor. Note that
+ a mapped surface is not guaranteed to be visible once it is mapped.
+
+ For an xdg_surface to be mapped by the compositor, the following
+ conditions must be met:
+ (1) the client has assigned an xdg_surface-based role to the surface
+ (2) the client has set and committed the xdg_surface state and the
+ role-dependent state to the surface
+ (3) the client has committed a buffer to the surface
+
+ A newly-unmapped surface is considered to have met condition (1) out
+ of the 3 required conditions for mapping a surface if its role surface
+ has not been destroyed.
+ </description>
+
+ <enum name="error">
+ <entry name="not_constructed" value="1"/>
+ <entry name="already_constructed" value="2"/>
+ <entry name="unconfigured_buffer" value="3"/>
+ </enum>
+
+ <request name="destroy" type="destructor">
+ <description summary="destroy the xdg_surface">
+ Destroy the xdg_surface object. An xdg_surface must only be destroyed
+ after its role object has been destroyed.
+ </description>
+ </request>
+
+ <request name="get_toplevel">
+ <description summary="assign the xdg_toplevel surface role">
+ This creates an xdg_toplevel object for the given xdg_surface and gives
+ the associated wl_surface the xdg_toplevel role.
+
+ See the documentation of xdg_toplevel for more details about what an
+ xdg_toplevel is and how it is used.
+ </description>
+ <arg name="id" type="new_id" interface="xdg_toplevel"/>
+ </request>
+
+ <request name="get_popup">
+ <description summary="assign the xdg_popup surface role">
+ This creates an xdg_popup object for the given xdg_surface and gives
+ the associated wl_surface the xdg_popup role.
+
+ If null is passed as a parent, a parent surface must be specified using
+ some other protocol, before committing the initial state.
+
+ See the documentation of xdg_popup for more details about what an
+ xdg_popup is and how it is used.
+ </description>
+ <arg name="id" type="new_id" interface="xdg_popup"/>
+ <arg name="parent" type="object" interface="xdg_surface" allow-null="true"/>
+ <arg name="positioner" type="object" interface="xdg_positioner"/>
+ </request>
+
+ <request name="set_window_geometry">
+ <description summary="set the new window geometry">
+ The window geometry of a surface is its "visible bounds" from the
+ user's perspective. Client-side decorations often have invisible
+ portions like drop-shadows which should be ignored for the
+ purposes of aligning, placing and constraining windows.
+
+ The window geometry is double buffered, and will be applied at the
+ time wl_surface.commit of the corresponding wl_surface is called.
+
+ When maintaining a position, the compositor should treat the (x, y)
+ coordinate of the window geometry as the top left corner of the window.
+ A client changing the (x, y) window geometry coordinate should in
+ general not alter the position of the window.
+
+ Once the window geometry of the surface is set, it is not possible to
+ unset it, and it will remain the same until set_window_geometry is
+ called again, even if a new subsurface or buffer is attached.
+
+ If never set, the value is the full bounds of the surface,
+ including any subsurfaces. This updates dynamically on every
+ commit. This unset is meant for extremely simple clients.
+
+ The arguments are given in the surface-local coordinate space of
+ the wl_surface associated with this xdg_surface.
+
+ The width and height must be greater than zero. Setting an invalid size
+ will raise an error. When applied, the effective window geometry will be
+ the set window geometry clamped to the bounding rectangle of the
+ combined geometry of the surface of the xdg_surface and the associated
+ subsurfaces.
+ </description>
+ <arg name="x" type="int"/>
+ <arg name="y" type="int"/>
+ <arg name="width" type="int"/>
+ <arg name="height" type="int"/>
+ </request>
+
+ <request name="ack_configure">
+ <description summary="ack a configure event">
+ When a configure event is received, if a client commits the
+ surface in response to the configure event, then the client
+ must make an ack_configure request sometime before the commit
+ request, passing along the serial of the configure event.
+
+ For instance, for toplevel surfaces the compositor might use this
+ information to move a surface to the top left only when the client has
+ drawn itself for the maximized or fullscreen state.
+
+ If the client receives multiple configure events before it
+ can respond to one, it only has to ack the last configure event.
+
+ A client is not required to commit immediately after sending
+ an ack_configure request - it may even ack_configure several times
+ before its next surface commit.
+
+ A client may send multiple ack_configure requests before committing, but
+ only the last request sent before a commit indicates which configure
+ event the client really is responding to.
+ </description>
+ <arg name="serial" type="uint" summary="the serial from the configure event"/>
+ </request>
+
+ <event name="configure">
+ <description summary="suggest a surface change">
+ The configure event marks the end of a configure sequence. A configure
+ sequence is a set of one or more events configuring the state of the
+ xdg_surface, including the final xdg_surface.configure event.
+
+ Where applicable, xdg_surface surface roles will during a configure
+ sequence extend this event as a latched state sent as events before the
+ xdg_surface.configure event. Such events should be considered to make up
+ a set of atomically applied configuration states, where the
+ xdg_surface.configure commits the accumulated state.
+
+ Clients should arrange their surface for the new states, and then send
+ an ack_configure request with the serial sent in this configure event at
+ some point before committing the new surface.
+
+ If the client receives multiple configure events before it can respond
+ to one, it is free to discard all but the last event it received.
+ </description>
+ <arg name="serial" type="uint" summary="serial of the configure event"/>
+ </event>
+
+ </interface>
+
+ <interface name="xdg_toplevel" version="3">
+ <description summary="toplevel surface">
+ This interface defines an xdg_surface role which allows a surface to,
+ among other things, set window-like properties such as maximize,
+ fullscreen, and minimize, set application-specific metadata like title and
+ id, and well as trigger user interactive operations such as interactive
+ resize and move.
+
+ Unmapping an xdg_toplevel means that the surface cannot be shown
+ by the compositor until it is explicitly mapped again.
+ All active operations (e.g., move, resize) are canceled and all
+ attributes (e.g. title, state, stacking, ...) are discarded for
+ an xdg_toplevel surface when it is unmapped. The xdg_toplevel returns to
+ the state it had right after xdg_surface.get_toplevel. The client
+ can re-map the toplevel by perfoming a commit without any buffer
+ attached, waiting for a configure event and handling it as usual (see
+ xdg_surface description).
+
+ Attaching a null buffer to a toplevel unmaps the surface.
+ </description>
+
+ <request name="destroy" type="destructor">
+ <description summary="destroy the xdg_toplevel">
+ This request destroys the role surface and unmaps the surface;
+ see "Unmapping" behavior in interface section for details.
+ </description>
+ </request>
+
+ <request name="set_parent">
+ <description summary="set the parent of this surface">
+ Set the "parent" of this surface. This surface should be stacked
+ above the parent surface and all other ancestor surfaces.
+
+ Parent windows should be set on dialogs, toolboxes, or other
+ "auxiliary" surfaces, so that the parent is raised when the dialog
+ is raised.
+
+ Setting a null parent for a child window removes any parent-child
+ relationship for the child. Setting a null parent for a window which
+ currently has no parent is a no-op.
+
+ If the parent is unmapped then its children are managed as
+ though the parent of the now-unmapped parent has become the
+ parent of this surface. If no parent exists for the now-unmapped
+ parent then the children are managed as though they have no
+ parent surface.
+ </description>
+ <arg name="parent" type="object" interface="xdg_toplevel" allow-null="true"/>
+ </request>
+
+ <request name="set_title">
+ <description summary="set surface title">
+ Set a short title for the surface.
+
+ This string may be used to identify the surface in a task bar,
+ window list, or other user interface elements provided by the
+ compositor.
+
+ The string must be encoded in UTF-8.
+ </description>
+ <arg name="title" type="string"/>
+ </request>
+
+ <request name="set_app_id">
+ <description summary="set application ID">
+ Set an application identifier for the surface.
+
+ The app ID identifies the general class of applications to which
+ the surface belongs. The compositor can use this to group multiple
+ surfaces together, or to determine how to launch a new application.
+
+ For D-Bus activatable applications, the app ID is used as the D-Bus
+ service name.
+
+ The compositor shell will try to group application surfaces together
+ by their app ID. As a best practice, it is suggested to select app
+ ID's that match the basename of the application's .desktop file.
+ For example, "org.freedesktop.FooViewer" where the .desktop file is
+ "org.freedesktop.FooViewer.desktop".
+
+ Like other properties, a set_app_id request can be sent after the
+ xdg_toplevel has been mapped to update the property.
+
+ See the desktop-entry specification [0] for more details on
+ application identifiers and how they relate to well-known D-Bus
+ names and .desktop files.
+
+ [0] http://standards.freedesktop.org/desktop-entry-spec/
+ </description>
+ <arg name="app_id" type="string"/>
+ </request>
+
+ <request name="show_window_menu">
+ <description summary="show the window menu">
+ Clients implementing client-side decorations might want to show
+ a context menu when right-clicking on the decorations, giving the
+ user a menu that they can use to maximize or minimize the window.
+
+ This request asks the compositor to pop up such a window menu at
+ the given position, relative to the local surface coordinates of
+ the parent surface. There are no guarantees as to what menu items
+ the window menu contains.
+
+ This request must be used in response to some sort of user action
+ like a button press, key press, or touch down event.
+ </description>
+ <arg name="seat" type="object" interface="wl_seat" summary="the wl_seat of the user event"/>
+ <arg name="serial" type="uint" summary="the serial of the user event"/>
+ <arg name="x" type="int" summary="the x position to pop up the window menu at"/>
+ <arg name="y" type="int" summary="the y position to pop up the window menu at"/>
+ </request>
+
+ <request name="move">
+ <description summary="start an interactive move">
+ Start an interactive, user-driven move of the surface.
+
+ This request must be used in response to some sort of user action
+ like a button press, key press, or touch down event. The passed
+ serial is used to determine the type of interactive move (touch,
+ pointer, etc).
+
+ The server may ignore move requests depending on the state of
+ the surface (e.g. fullscreen or maximized), or if the passed serial
+ is no longer valid.
+
+ If triggered, the surface will lose the focus of the device
+ (wl_pointer, wl_touch, etc) used for the move. It is up to the
+ compositor to visually indicate that the move is taking place, such as
+ updating a pointer cursor, during the move. There is no guarantee
+ that the device focus will return when the move is completed.
+ </description>
+ <arg name="seat" type="object" interface="wl_seat" summary="the wl_seat of the user event"/>
+ <arg name="serial" type="uint" summary="the serial of the user event"/>
+ </request>
+
+ <enum name="resize_edge">
+ <description summary="edge values for resizing">
+ These values are used to indicate which edge of a surface
+ is being dragged in a resize operation.
+ </description>
+ <entry name="none" value="0"/>
+ <entry name="top" value="1"/>
+ <entry name="bottom" value="2"/>
+ <entry name="left" value="4"/>
+ <entry name="top_left" value="5"/>
+ <entry name="bottom_left" value="6"/>
+ <entry name="right" value="8"/>
+ <entry name="top_right" value="9"/>
+ <entry name="bottom_right" value="10"/>
+ </enum>
+
+ <request name="resize">
+ <description summary="start an interactive resize">
+ Start a user-driven, interactive resize of the surface.
+
+ This request must be used in response to some sort of user action
+ like a button press, key press, or touch down event. The passed
+ serial is used to determine the type of interactive resize (touch,
+ pointer, etc).
+
+ The server may ignore resize requests depending on the state of
+ the surface (e.g. fullscreen or maximized).
+
+ If triggered, the client will receive configure events with the
+ "resize" state enum value and the expected sizes. See the "resize"
+ enum value for more details about what is required. The client
+ must also acknowledge configure events using "ack_configure". After
+ the resize is completed, the client will receive another "configure"
+ event without the resize state.
+
+ If triggered, the surface also will lose the focus of the device
+ (wl_pointer, wl_touch, etc) used for the resize. It is up to the
+ compositor to visually indicate that the resize is taking place,
+ such as updating a pointer cursor, during the resize. There is no
+ guarantee that the device focus will return when the resize is
+ completed.
+
+ The edges parameter specifies how the surface should be resized,
+ and is one of the values of the resize_edge enum. The compositor
+ may use this information to update the surface position for
+ example when dragging the top left corner. The compositor may also
+ use this information to adapt its behavior, e.g. choose an
+ appropriate cursor image.
+ </description>
+ <arg name="seat" type="object" interface="wl_seat" summary="the wl_seat of the user event"/>
+ <arg name="serial" type="uint" summary="the serial of the user event"/>
+ <arg name="edges" type="uint" enum="resize_edge" summary="which edge or corner is being dragged"/>
+ </request>
+
+ <enum name="state">
+ <description summary="types of state on the surface">
+ The different state values used on the surface. This is designed for
+ state values like maximized, fullscreen. It is paired with the
+ configure event to ensure that both the client and the compositor
+ setting the state can be synchronized.
+
+ States set in this way are double-buffered. They will get applied on
+ the next commit.
+ </description>
+ <entry name="maximized" value="1" summary="the surface is maximized">
+ <description summary="the surface is maximized">
+ The surface is maximized. The window geometry specified in the configure
+ event must be obeyed by the client.
+
+ The client should draw without shadow or other
+ decoration outside of the window geometry.
+ </description>
+ </entry>
+ <entry name="fullscreen" value="2" summary="the surface is fullscreen">
+ <description summary="the surface is fullscreen">
+ The surface is fullscreen. The window geometry specified in the
+ configure event is a maximum; the client cannot resize beyond it. For
+ a surface to cover the whole fullscreened area, the geometry
+ dimensions must be obeyed by the client. For more details, see
+ xdg_toplevel.set_fullscreen.
+ </description>
+ </entry>
+ <entry name="resizing" value="3" summary="the surface is being resized">
+ <description summary="the surface is being resized">
+ The surface is being resized. The window geometry specified in the
+ configure event is a maximum; the client cannot resize beyond it.
+ Clients that have aspect ratio or cell sizing configuration can use
+ a smaller size, however.
+ </description>
+ </entry>
+ <entry name="activated" value="4" summary="the surface is now activated">
+ <description summary="the surface is now activated">
+ Client window decorations should be painted as if the window is
+ active. Do not assume this means that the window actually has
+ keyboard or pointer focus.
+ </description>
+ </entry>
+ <entry name="tiled_left" value="5" since="2">
+ <description summary="the surface is tiled">
+ The window is currently in a tiled layout and the left edge is
+ considered to be adjacent to another part of the tiling grid.
+ </description>
+ </entry>
+ <entry name="tiled_right" value="6" since="2">
+ <description summary="the surface is tiled">
+ The window is currently in a tiled layout and the right edge is
+ considered to be adjacent to another part of the tiling grid.
+ </description>
+ </entry>
+ <entry name="tiled_top" value="7" since="2">
+ <description summary="the surface is tiled">
+ The window is currently in a tiled layout and the top edge is
+ considered to be adjacent to another part of the tiling grid.
+ </description>
+ </entry>
+ <entry name="tiled_bottom" value="8" since="2">
+ <description summary="the surface is tiled">
+ The window is currently in a tiled layout and the bottom edge is
+ considered to be adjacent to another part of the tiling grid.
+ </description>
+ </entry>
+ </enum>
+
+ <request name="set_max_size">
+ <description summary="set the maximum size">
+ Set a maximum size for the window.
+
+ The client can specify a maximum size so that the compositor does
+ not try to configure the window beyond this size.
+
+ The width and height arguments are in window geometry coordinates.
+ See xdg_surface.set_window_geometry.
+
+ Values set in this way are double-buffered. They will get applied
+ on the next commit.
+
+ The compositor can use this information to allow or disallow
+ different states like maximize or fullscreen and draw accurate
+ animations.
+
+ Similarly, a tiling window manager may use this information to
+ place and resize client windows in a more effective way.
+
+ The client should not rely on the compositor to obey the maximum
+ size. The compositor may decide to ignore the values set by the
+ client and request a larger size.
+
+ If never set, or a value of zero in the request, means that the
+ client has no expected maximum size in the given dimension.
+ As a result, a client wishing to reset the maximum size
+ to an unspecified state can use zero for width and height in the
+ request.
+
+ Requesting a maximum size to be smaller than the minimum size of
+ a surface is illegal and will result in a protocol error.
+
+ The width and height must be greater than or equal to zero. Using
+ strictly negative values for width and height will result in a
+ protocol error.
+ </description>
+ <arg name="width" type="int"/>
+ <arg name="height" type="int"/>
+ </request>
+
+ <request name="set_min_size">
+ <description summary="set the minimum size">
+ Set a minimum size for the window.
+
+ The client can specify a minimum size so that the compositor does
+ not try to configure the window below this size.
+
+ The width and height arguments are in window geometry coordinates.
+ See xdg_surface.set_window_geometry.
+
+ Values set in this way are double-buffered. They will get applied
+ on the next commit.
+
+ The compositor can use this information to allow or disallow
+ different states like maximize or fullscreen and draw accurate
+ animations.
+
+ Similarly, a tiling window manager may use this information to
+ place and resize client windows in a more effective way.
+
+ The client should not rely on the compositor to obey the minimum
+ size. The compositor may decide to ignore the values set by the
+ client and request a smaller size.
+
+ If never set, or a value of zero in the request, means that the
+ client has no expected minimum size in the given dimension.
+ As a result, a client wishing to reset the minimum size
+ to an unspecified state can use zero for width and height in the
+ request.
+
+ Requesting a minimum size to be larger than the maximum size of
+ a surface is illegal and will result in a protocol error.
+
+ The width and height must be greater than or equal to zero. Using
+ strictly negative values for width and height will result in a
+ protocol error.
+ </description>
+ <arg name="width" type="int"/>
+ <arg name="height" type="int"/>
+ </request>
+
+ <request name="set_maximized">
+ <description summary="maximize the window">
+ Maximize the surface.
+
+ After requesting that the surface should be maximized, the compositor
+ will respond by emitting a configure event. Whether this configure
+ actually sets the window maximized is subject to compositor policies.
+ The client must then update its content, drawing in the configured
+ state. The client must also acknowledge the configure when committing
+ the new content (see ack_configure).
+
+ It is up to the compositor to decide how and where to maximize the
+ surface, for example which output and what region of the screen should
+ be used.
+
+ If the surface was already maximized, the compositor will still emit
+ a configure event with the "maximized" state.
+
+ If the surface is in a fullscreen state, this request has no direct
+ effect. It may alter the state the surface is returned to when
+ unmaximized unless overridden by the compositor.
+ </description>
+ </request>
+
+ <request name="unset_maximized">
+ <description summary="unmaximize the window">
+ Unmaximize the surface.
+
+ After requesting that the surface should be unmaximized, the compositor
+ will respond by emitting a configure event. Whether this actually
+ un-maximizes the window is subject to compositor policies.
+ If available and applicable, the compositor will include the window
+ geometry dimensions the window had prior to being maximized in the
+ configure event. The client must then update its content, drawing it in
+ the configured state. The client must also acknowledge the configure
+ when committing the new content (see ack_configure).
+
+ It is up to the compositor to position the surface after it was
+ unmaximized; usually the position the surface had before maximizing, if
+ applicable.
+
+ If the surface was already not maximized, the compositor will still
+ emit a configure event without the "maximized" state.
+
+ If the surface is in a fullscreen state, this request has no direct
+ effect. It may alter the state the surface is returned to when
+ unmaximized unless overridden by the compositor.
+ </description>
+ </request>
+
+ <request name="set_fullscreen">
+ <description summary="set the window as fullscreen on an output">
+ Make the surface fullscreen.
+
+ After requesting that the surface should be fullscreened, the
+ compositor will respond by emitting a configure event. Whether the
+ client is actually put into a fullscreen state is subject to compositor
+ policies. The client must also acknowledge the configure when
+ committing the new content (see ack_configure).
+
+ The output passed by the request indicates the client's preference as
+ to which display it should be set fullscreen on. If this value is NULL,
+ it's up to the compositor to choose which display will be used to map
+ this surface.
+
+ If the surface doesn't cover the whole output, the compositor will
+ position the surface in the center of the output and compensate with
+ with border fill covering the rest of the output. The content of the
+ border fill is undefined, but should be assumed to be in some way that
+ attempts to blend into the surrounding area (e.g. solid black).
+
+ If the fullscreened surface is not opaque, the compositor must make
+ sure that other screen content not part of the same surface tree (made
+ up of subsurfaces, popups or similarly coupled surfaces) are not
+ visible below the fullscreened surface.
+ </description>
+ <arg name="output" type="object" interface="wl_output" allow-null="true"/>
+ </request>
+
+ <request name="unset_fullscreen">
+ <description summary="unset the window as fullscreen">
+ Make the surface no longer fullscreen.
+
+ After requesting that the surface should be unfullscreened, the
+ compositor will respond by emitting a configure event.
+ Whether this actually removes the fullscreen state of the client is
+ subject to compositor policies.
+
+ Making a surface unfullscreen sets states for the surface based on the following:
+ * the state(s) it may have had before becoming fullscreen
+ * any state(s) decided by the compositor
+ * any state(s) requested by the client while the surface was fullscreen
+
+ The compositor may include the previous window geometry dimensions in
+ the configure event, if applicable.
+
+ The client must also acknowledge the configure when committing the new
+ content (see ack_configure).
+ </description>
+ </request>
+
+ <request name="set_minimized">
+ <description summary="set the window as minimized">
+ Request that the compositor minimize your surface. There is no
+ way to know if the surface is currently minimized, nor is there
+ any way to unset minimization on this surface.
+
+ If you are looking to throttle redrawing when minimized, please
+ instead use the wl_surface.frame event for this, as this will
+ also work with live previews on windows in Alt-Tab, Expose or
+ similar compositor features.
+ </description>
+ </request>
+
+ <event name="configure">
+ <description summary="suggest a surface change">
+ This configure event asks the client to resize its toplevel surface or
+ to change its state. The configured state should not be applied
+ immediately. See xdg_surface.configure for details.
+
+ The width and height arguments specify a hint to the window
+ about how its surface should be resized in window geometry
+ coordinates. See set_window_geometry.
+
+ If the width or height arguments are zero, it means the client
+ should decide its own window dimension. This may happen when the
+ compositor needs to configure the state of the surface but doesn't
+ have any information about any previous or expected dimension.
+
+ The states listed in the event specify how the width/height
+ arguments should be interpreted, and possibly how it should be
+ drawn.
+
+ Clients must send an ack_configure in response to this event. See
+ xdg_surface.configure and xdg_surface.ack_configure for details.
+ </description>
+ <arg name="width" type="int"/>
+ <arg name="height" type="int"/>
+ <arg name="states" type="array"/>
+ </event>
+
+ <event name="close">
+ <description summary="surface wants to be closed">
+ The close event is sent by the compositor when the user
+ wants the surface to be closed. This should be equivalent to
+ the user clicking the close button in client-side decorations,
+ if your application has any.
+
+ This is only a request that the user intends to close the
+ window. The client may choose to ignore this request, or show
+ a dialog to ask the user to save their data, etc.
+ </description>
+ </event>
+ </interface>
+
+ <interface name="xdg_popup" version="3">
+ <description summary="short-lived, popup surfaces for menus">
+ A popup surface is a short-lived, temporary surface. It can be used to
+ implement for example menus, popovers, tooltips and other similar user
+ interface concepts.
+
+ A popup can be made to take an explicit grab. See xdg_popup.grab for
+ details.
+
+ When the popup is dismissed, a popup_done event will be sent out, and at
+ the same time the surface will be unmapped. See the xdg_popup.popup_done
+ event for details.
+
+ Explicitly destroying the xdg_popup object will also dismiss the popup and
+ unmap the surface. Clients that want to dismiss the popup when another
+ surface of their own is clicked should dismiss the popup using the destroy
+ request.
+
+ A newly created xdg_popup will be stacked on top of all previously created
+ xdg_popup surfaces associated with the same xdg_toplevel.
+
+ The parent of an xdg_popup must be mapped (see the xdg_surface
+ description) before the xdg_popup itself.
+
+ The client must call wl_surface.commit on the corresponding wl_surface
+ for the xdg_popup state to take effect.
+ </description>
+
+ <enum name="error">
+ <entry name="invalid_grab" value="0"
+ summary="tried to grab after being mapped"/>
+ </enum>
+
+ <request name="destroy" type="destructor">
+ <description summary="remove xdg_popup interface">
+ This destroys the popup. Explicitly destroying the xdg_popup
+ object will also dismiss the popup, and unmap the surface.
+
+ If this xdg_popup is not the "topmost" popup, a protocol error
+ will be sent.
+ </description>
+ </request>
+
+ <request name="grab">
+ <description summary="make the popup take an explicit grab">
+ This request makes the created popup take an explicit grab. An explicit
+ grab will be dismissed when the user dismisses the popup, or when the
+ client destroys the xdg_popup. This can be done by the user clicking
+ outside the surface, using the keyboard, or even locking the screen
+ through closing the lid or a timeout.
+
+ If the compositor denies the grab, the popup will be immediately
+ dismissed.
+
+ This request must be used in response to some sort of user action like a
+ button press, key press, or touch down event. The serial number of the
+ event should be passed as 'serial'.
+
+ The parent of a grabbing popup must either be an xdg_toplevel surface or
+ another xdg_popup with an explicit grab. If the parent is another
+ xdg_popup it means that the popups are nested, with this popup now being
+ the topmost popup.
+
+ Nested popups must be destroyed in the reverse order they were created
+ in, e.g. the only popup you are allowed to destroy at all times is the
+ topmost one.
+
+ When compositors choose to dismiss a popup, they may dismiss every
+ nested grabbing popup as well. When a compositor dismisses popups, it
+ will follow the same dismissing order as required from the client.
+
+ The parent of a grabbing popup must either be another xdg_popup with an
+ active explicit grab, or an xdg_popup or xdg_toplevel, if there are no
+ explicit grabs already taken.
+
+ If the topmost grabbing popup is destroyed, the grab will be returned to
+ the parent of the popup, if that parent previously had an explicit grab.
+
+ If the parent is a grabbing popup which has already been dismissed, this
+ popup will be immediately dismissed. If the parent is a popup that did
+ not take an explicit grab, an error will be raised.
+
+ During a popup grab, the client owning the grab will receive pointer
+ and touch events for all their surfaces as normal (similar to an
+ "owner-events" grab in X11 parlance), while the top most grabbing popup
+ will always have keyboard focus.
+ </description>
+ <arg name="seat" type="object" interface="wl_seat"
+ summary="the wl_seat of the user event"/>
+ <arg name="serial" type="uint" summary="the serial of the user event"/>
+ </request>
+
+ <event name="configure">
+ <description summary="configure the popup surface">
+ This event asks the popup surface to configure itself given the
+ configuration. The configured state should not be applied immediately.
+ See xdg_surface.configure for details.
+
+ The x and y arguments represent the position the popup was placed at
+ given the xdg_positioner rule, relative to the upper left corner of the
+ window geometry of the parent surface.
+
+ For version 2 or older, the configure event for an xdg_popup is only
+ ever sent once for the initial configuration. Starting with version 3,
+ it may be sent again if the popup is setup with an xdg_positioner with
+ set_reactive requested, or in response to xdg_popup.reposition requests.
+ </description>
+ <arg name="x" type="int"
+ summary="x position relative to parent surface window geometry"/>
+ <arg name="y" type="int"
+ summary="y position relative to parent surface window geometry"/>
+ <arg name="width" type="int" summary="window geometry width"/>
+ <arg name="height" type="int" summary="window geometry height"/>
+ </event>
+
+ <event name="popup_done">
+ <description summary="popup interaction is done">
+ The popup_done event is sent out when a popup is dismissed by the
+ compositor. The client should destroy the xdg_popup object at this
+ point.
+ </description>
+ </event>
+
+ <!-- Version 3 additions -->
+
+ <request name="reposition" since="3">
+ <description summary="recalculate the popup's location">
+ Reposition an already-mapped popup. The popup will be placed given the
+ details in the passed xdg_positioner object, and a
+ xdg_popup.repositioned followed by xdg_popup.configure and
+ xdg_surface.configure will be emitted in response. Any parameters set
+ by the previous positioner will be discarded.
+
+ The passed token will be sent in the corresponding
+ xdg_popup.repositioned event. The new popup position will not take
+ effect until the corresponding configure event is acknowledged by the
+ client. See xdg_popup.repositioned for details. The token itself is
+ opaque, and has no other special meaning.
+
+ If multiple reposition requests are sent, the compositor may skip all
+ but the last one.
+
+ If the popup is repositioned in response to a configure event for its
+ parent, the client should send an xdg_positioner.set_parent_configure
+ and possibly an xdg_positioner.set_parent_size request to allow the
+ compositor to properly constrain the popup.
+
+ If the popup is repositioned together with a parent that is being
+ resized, but not in response to a configure event, the client should
+ send an xdg_positioner.set_parent_size request.
+ </description>
+ <arg name="positioner" type="object" interface="xdg_positioner"/>
+ <arg name="token" type="uint" summary="reposition request token"/>
+ </request>
+
+ <event name="repositioned" since="3">
+ <description summary="signal the completion of a repositioned request">
+ The repositioned event is sent as part of a popup configuration
+ sequence, together with xdg_popup.configure and lastly
+ xdg_surface.configure to notify the completion of a reposition request.
+
+ The repositioned event is to notify about the completion of a
+ xdg_popup.reposition request. The token argument is the token passed
+ in the xdg_popup.reposition request.
+
+ Immediately after this event is emitted, xdg_popup.configure and
+ xdg_surface.configure will be sent with the updated size and position,
+ as well as a new configure serial.
+
+ The client should optionally update the content of the popup, but must
+ acknowledge the new popup configuration for the new position to take
+ effect. See xdg_surface.ack_configure for details.
+ </description>
+ <arg name="token" type="uint" summary="reposition request token"/>
+ </event>
+
+ </interface>
+</protocol>
diff --git a/freedesktop.org/tests/scan.sh b/freedesktop.org/tests/scan.sh
index 15dd39f..cad6887 100755
--- a/freedesktop.org/tests/scan.sh
+++ b/freedesktop.org/tests/scan.sh
@@ -5,6 +5,7 @@ if [ "x$SCANNER" = "x" ] ; then
exit 77
fi
-$SCANNER client-header $1 /dev/null
-$SCANNER server-header $1 /dev/null
-$SCANNER code $1 /dev/null
+$SCANNER client-header --strict $1 /dev/null
+$SCANNER server-header --strict $1 /dev/null
+$SCANNER private-code --strict $1 /dev/null
+$SCANNER public-code --strict $1 /dev/null
diff --git a/freedesktop.org/unstable/fullscreen-shell/fullscreen-shell-unstable-v1.xml b/freedesktop.org/unstable/fullscreen-shell/fullscreen-shell-unstable-v1.xml
index 7d141ee..634b77d 100644
--- a/freedesktop.org/unstable/fullscreen-shell/fullscreen-shell-unstable-v1.xml
+++ b/freedesktop.org/unstable/fullscreen-shell/fullscreen-shell-unstable-v1.xml
@@ -1,6 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<protocol name="fullscreen_shell_unstable_v1">
+ <copyright>
+ Copyright © 2016 Yong Bakos
+ Copyright © 2015 Jason Ekstrand
+ Copyright © 2015 Jonas Ådahl
+
+ 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>
+
<interface name="zwp_fullscreen_shell_v1" version="1">
<description summary="displays a single surface per output">
Displays a single surface per output.
@@ -87,7 +112,7 @@
wl_display.sync request immediately after binding to ensure that they
receive all the capability events.
</description>
- <arg name="capability" type="uint"/>
+ <arg name="capability" type="uint" enum="capability" />
</event>
<enum name="present_method">
@@ -124,7 +149,7 @@
ignored.
</description>
<arg name="surface" type="object" interface="wl_surface" allow-null="true"/>
- <arg name="method" type="uint"/>
+ <arg name="method" type="uint" enum="present_method" />
<arg name="output" type="object" interface="wl_output" allow-null="true"/>
</request>
diff --git a/freedesktop.org/unstable/input-timestamps/README b/freedesktop.org/unstable/input-timestamps/README
new file mode 100644
index 0000000..3e82890
--- /dev/null
+++ b/freedesktop.org/unstable/input-timestamps/README
@@ -0,0 +1,4 @@
+High-resolution timestamps for input events.
+
+Maintainers:
+Alexandros Frantzis <alexandros.frantzis@collabora.com>
diff --git a/freedesktop.org/unstable/input-timestamps/input-timestamps-unstable-v1.xml b/freedesktop.org/unstable/input-timestamps/input-timestamps-unstable-v1.xml
new file mode 100644
index 0000000..7c5e082
--- /dev/null
+++ b/freedesktop.org/unstable/input-timestamps/input-timestamps-unstable-v1.xml
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<protocol name="input_timestamps_unstable_v1">
+
+ <copyright>
+ Copyright © 2017 Collabora, Ltd.
+
+ 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="High-resolution timestamps for input events">
+ This protocol specifies a way for a client to request and receive
+ high-resolution timestamps for input events.
+
+ 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_input_timestamps_manager_v1" version="1">
+ <description summary="context object for high-resolution input timestamps">
+ A global interface used for requesting high-resolution timestamps
+ for input events.
+ </description>
+
+ <request name="destroy" type="destructor">
+ <description summary="destroy the input timestamps manager object">
+ Informs the server that the client will no longer be using this
+ protocol object. Existing objects created by this object are not
+ affected.
+ </description>
+ </request>
+
+ <request name="get_keyboard_timestamps">
+ <description summary="subscribe to high-resolution keyboard timestamp events">
+ Creates a new input timestamps object that represents a subscription
+ to high-resolution timestamp events for all wl_keyboard events that
+ carry a timestamp.
+
+ If the associated wl_keyboard object is invalidated, either through
+ client action (e.g. release) or server-side changes, the input
+ timestamps object becomes inert and the client should destroy it
+ by calling zwp_input_timestamps_v1.destroy.
+ </description>
+ <arg name="id" type="new_id" interface="zwp_input_timestamps_v1"/>
+ <arg name="keyboard" type="object" interface="wl_keyboard"
+ summary="the wl_keyboard object for which to get timestamp events"/>
+ </request>
+
+ <request name="get_pointer_timestamps">
+ <description summary="subscribe to high-resolution pointer timestamp events">
+ Creates a new input timestamps object that represents a subscription
+ to high-resolution timestamp events for all wl_pointer events that
+ carry a timestamp.
+
+ If the associated wl_pointer object is invalidated, either through
+ client action (e.g. release) or server-side changes, the input
+ timestamps object becomes inert and the client should destroy it
+ by calling zwp_input_timestamps_v1.destroy.
+ </description>
+ <arg name="id" type="new_id" interface="zwp_input_timestamps_v1"/>
+ <arg name="pointer" type="object" interface="wl_pointer"
+ summary="the wl_pointer object for which to get timestamp events"/>
+ </request>
+
+ <request name="get_touch_timestamps">
+ <description summary="subscribe to high-resolution touch timestamp events">
+ Creates a new input timestamps object that represents a subscription
+ to high-resolution timestamp events for all wl_touch events that
+ carry a timestamp.
+
+ If the associated wl_touch object becomes invalid, either through
+ client action (e.g. release) or server-side changes, the input
+ timestamps object becomes inert and the client should destroy it
+ by calling zwp_input_timestamps_v1.destroy.
+ </description>
+ <arg name="id" type="new_id" interface="zwp_input_timestamps_v1"/>
+ <arg name="touch" type="object" interface="wl_touch"
+ summary="the wl_touch object for which to get timestamp events"/>
+ </request>
+ </interface>
+
+ <interface name="zwp_input_timestamps_v1" version="1">
+ <description summary="context object for input timestamps">
+ Provides high-resolution timestamp events for a set of subscribed input
+ events. The set of subscribed input events is determined by the
+ zwp_input_timestamps_manager_v1 request used to create this object.
+ </description>
+
+ <request name="destroy" type="destructor">
+ <description summary="destroy the input timestamps object">
+ Informs the server that the client will no longer be using this
+ protocol object. After the server processes the request, no more
+ timestamp events will be emitted.
+ </description>
+ </request>
+
+ <event name="timestamp">
+ <description summary="high-resolution timestamp event">
+ The timestamp event is associated with the first subsequent input event
+ carrying a timestamp which belongs to the set of input events this
+ object is subscribed to.
+
+ The timestamp provided by this event is a high-resolution version of
+ the timestamp argument of the associated input event. The provided
+ timestamp is in the same clock domain and is at least as accurate as
+ the associated input event timestamp.
+
+ The timestamp is expressed as tv_sec_hi, tv_sec_lo, tv_nsec triples,
+ each component being an unsigned 32-bit value. Whole seconds are in
+ tv_sec which is a 64-bit value combined from tv_sec_hi and tv_sec_lo,
+ and the additional fractional part in tv_nsec as nanoseconds. Hence,
+ for valid timestamps tv_nsec must be in [0, 999999999].
+ </description>
+ <arg name="tv_sec_hi" type="uint"
+ summary="high 32 bits of the seconds part of the timestamp"/>
+ <arg name="tv_sec_lo" type="uint"
+ summary="low 32 bits of the seconds part of the timestamp"/>
+ <arg name="tv_nsec" type="uint"
+ summary="nanoseconds part of the timestamp"/>
+ </event>
+ </interface>
+
+</protocol>
diff --git a/freedesktop.org/unstable/linux-dmabuf/linux-dmabuf-unstable-v1.xml b/freedesktop.org/unstable/linux-dmabuf/linux-dmabuf-unstable-v1.xml
index 154afe2..4b1dd74 100644
--- a/freedesktop.org/unstable/linux-dmabuf/linux-dmabuf-unstable-v1.xml
+++ b/freedesktop.org/unstable/linux-dmabuf/linux-dmabuf-unstable-v1.xml
@@ -28,6 +28,7 @@
<description summary="factory for creating dmabuf-based wl_buffers">
Following the interfaces from:
https://www.khronos.org/registry/egl/extensions/EXT/EGL_EXT_image_dma_buf_import.txt
+ https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import_modifiers.txt
and the Linux DRM sub-system's AddFb2 ioctl.
This interface offers ways to create generic dmabuf-based
@@ -129,8 +130,16 @@
binds to this interface. A roundtrip after binding guarantees that
the client has received all supported format-modifier pairs.
+ For legacy support, DRM_FORMAT_MOD_INVALID (that is, modifier_hi ==
+ 0x00ffffff and modifier_lo == 0xffffffff) is allowed in this event.
+ It indicates that the server can support the format with an implicit
+ modifier. When a plane has DRM_FORMAT_MOD_INVALID as its modifier, it
+ is as if no explicit modifier is specified. The effective modifier
+ will be derived from the dmabuf.
+
For the definition of the format and modifier codes, see the
- zwp_linux_buffer_params_v1::create request.
+ zwp_linux_buffer_params_v1::create and zwp_linux_buffer_params_v1::add
+ requests.
</description>
<arg name="format" type="uint" summary="DRM_FORMAT code"/>
<arg name="modifier_hi" type="uint"
@@ -197,6 +206,11 @@
compression, etc. driver-specific modifications to the base format
defined by the DRM fourcc code.
+ Warning: It should be an error if the format/modifier pair was not
+ advertised with the modifier event. This is not enforced yet because
+ some implementations always accept DRM_FORMAT_MOD_INVALID. Also
+ version 2 of this protocol does not have the modifier event.
+
This request raises the PLANE_IDX error if plane_idx is too large.
The error PLANE_SET is raised if attempting to set a plane that
was already set.
@@ -211,7 +225,7 @@
summary="low 32 bits of layout modifier"/>
</request>
- <enum name="flags">
+ <enum name="flags" bitfield="true">
<entry name="y_invert" value="1" summary="contents are y-inverted"/>
<entry name="interlaced" value="2" summary="content is interlaced"/>
<entry name="bottom_first" value="4" summary="bottom field first"/>
@@ -282,7 +296,7 @@
<arg name="width" type="int" summary="base plane width in pixels"/>
<arg name="height" type="int" summary="base plane height in pixels"/>
<arg name="format" type="uint" summary="DRM_FORMAT code"/>
- <arg name="flags" type="uint" summary="see enum flags"/>
+ <arg name="flags" type="uint" enum="flags" summary="see enum flags"/>
</request>
<event name="created">
@@ -340,7 +354,7 @@
<arg name="width" type="int" summary="base plane width in pixels"/>
<arg name="height" type="int" summary="base plane height in pixels"/>
<arg name="format" type="uint" summary="DRM_FORMAT code"/>
- <arg name="flags" type="uint" summary="see enum flags"/>
+ <arg name="flags" type="uint" enum="flags" summary="see enum flags"/>
</request>
</interface>
diff --git a/freedesktop.org/unstable/pointer-constraints/pointer-constraints-unstable-v1.xml b/freedesktop.org/unstable/pointer-constraints/pointer-constraints-unstable-v1.xml
index 4e67a13..efd64b6 100644
--- a/freedesktop.org/unstable/pointer-constraints/pointer-constraints-unstable-v1.xml
+++ b/freedesktop.org/unstable/pointer-constraints/pointer-constraints-unstable-v1.xml
@@ -147,7 +147,7 @@
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"/>
+ <arg name="lifetime" type="uint" enum="lifetime" summary="lock lifetime"/>
</request>
<request name="confine_pointer">
@@ -177,7 +177,7 @@
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"/>
+ <arg name="lifetime" type="uint" enum="lifetime" summary="confinement lifetime"/>
</request>
</interface>
diff --git a/freedesktop.org/unstable/pointer-gestures/pointer-gestures-unstable-v1.xml b/freedesktop.org/unstable/pointer-gestures/pointer-gestures-unstable-v1.xml
index 5b7132c..59502ac 100644
--- a/freedesktop.org/unstable/pointer-gestures/pointer-gestures-unstable-v1.xml
+++ b/freedesktop.org/unstable/pointer-gestures/pointer-gestures-unstable-v1.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<protocol name="pointer_gestures_unstable_v1">
- <interface name="zwp_pointer_gestures_v1" version="1">
+ <interface name="zwp_pointer_gestures_v1" version="2">
<description summary="touchpad gestures">
A global interface to provide semantic touchpad gestures for a given
pointer.
@@ -37,9 +37,18 @@
<arg name="id" type="new_id" interface="zwp_pointer_gesture_pinch_v1"/>
<arg name="pointer" type="object" interface="wl_pointer"/>
</request>
+
+ <!-- Version 2 additions -->
+
+ <request name="release" type="destructor" since="2">
+ <description summary="destroy the pointer gesture object">
+ Destroy the pointer gesture object. Swipe and pinch objects created via this
+ gesture object remain valid.
+ </description>
+ </request>
</interface>
- <interface name="zwp_pointer_gesture_swipe_v1" version="1">
+ <interface name="zwp_pointer_gesture_swipe_v1" version="2">
<description summary="a swipe gesture object">
A swipe gesture object notifies a client about a multi-finger swipe
gesture detected on an indirect input device such as a touchpad.
@@ -102,7 +111,7 @@
</event>
</interface>
- <interface name="zwp_pointer_gesture_pinch_v1" version="1">
+ <interface name="zwp_pointer_gesture_pinch_v1" version="2">
<description summary="a pinch gesture object">
A pinch gesture object notifies a client about a multi-finger pinch
gesture detected on an indirect input device such as a touchpad.
diff --git a/freedesktop.org/unstable/primary-selection/README b/freedesktop.org/unstable/primary-selection/README
new file mode 100644
index 0000000..ae0a402
--- /dev/null
+++ b/freedesktop.org/unstable/primary-selection/README
@@ -0,0 +1,4 @@
+Primary selection protocol
+
+Maintainers:
+Simon Ser <contact@emersion.fr>
diff --git a/freedesktop.org/unstable/primary-selection/primary-selection-unstable-v1.xml b/freedesktop.org/unstable/primary-selection/primary-selection-unstable-v1.xml
new file mode 100644
index 0000000..e5a39e3
--- /dev/null
+++ b/freedesktop.org/unstable/primary-selection/primary-selection-unstable-v1.xml
@@ -0,0 +1,225 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<protocol name="wp_primary_selection_unstable_v1">
+ <copyright>
+ Copyright © 2015, 2016 Red Hat
+
+ 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="Primary selection protocol">
+ This protocol provides the ability to have a primary selection device to
+ match that of the X server. This primary selection is a shortcut to the
+ common clipboard selection, where text just needs to be selected in order
+ to allow copying it elsewhere. The de facto way to perform this action
+ is the middle mouse button, although it is not limited to this one.
+
+ Clients wishing to honor primary selection should create a primary
+ selection source and set it as the selection through
+ wp_primary_selection_device.set_selection whenever the text selection
+ changes. In order to minimize calls in pointer-driven text selection,
+ it should happen only once after the operation finished. Similarly,
+ a NULL source should be set when text is unselected.
+
+ wp_primary_selection_offer objects are first announced through the
+ wp_primary_selection_device.data_offer event. Immediately after this event,
+ the primary data offer will emit wp_primary_selection_offer.offer events
+ to let know of the mime types being offered.
+
+ When the primary selection changes, the client with the keyboard focus
+ will receive wp_primary_selection_device.selection events. Only the client
+ with the keyboard focus will receive such events with a non-NULL
+ wp_primary_selection_offer. Across keyboard focus changes, previously
+ focused clients will receive wp_primary_selection_device.events with a
+ NULL wp_primary_selection_offer.
+
+ In order to request the primary selection data, the client must pass
+ a recent serial pertaining to the press event that is triggering the
+ operation, if the compositor deems the serial valid and recent, the
+ wp_primary_selection_source.send event will happen in the other end
+ to let the transfer begin. The client owning the primary selection
+ should write the requested data, and close the file descriptor
+ immediately.
+
+ If the primary selection owner client disappeared during the transfer,
+ the client reading the data will receive a
+ wp_primary_selection_device.selection event with a NULL
+ wp_primary_selection_offer, the client should take this as a hint
+ to finish the reads related to the no longer existing offer.
+
+ The primary selection owner should be checking for errors during
+ writes, merely cancelling the ongoing transfer if any happened.
+ </description>
+
+ <interface name="zwp_primary_selection_device_manager_v1" version="1">
+ <description summary="X primary selection emulation">
+ The primary selection device manager is a singleton global object that
+ provides access to the primary selection. It allows to create
+ wp_primary_selection_source objects, as well as retrieving the per-seat
+ wp_primary_selection_device objects.
+ </description>
+
+ <request name="create_source">
+ <description summary="create a new primary selection source">
+ Create a new primary selection source.
+ </description>
+ <arg name="id" type="new_id" interface="zwp_primary_selection_source_v1"/>
+ </request>
+
+ <request name="get_device">
+ <description summary="create a new primary selection device">
+ Create a new data device for a given seat.
+ </description>
+ <arg name="id" type="new_id" interface="zwp_primary_selection_device_v1"/>
+ <arg name="seat" type="object" interface="wl_seat"/>
+ </request>
+
+ <request name="destroy" type="destructor">
+ <description summary="destroy the primary selection device manager">
+ Destroy the primary selection device manager.
+ </description>
+ </request>
+ </interface>
+
+ <interface name="zwp_primary_selection_device_v1" version="1">
+ <request name="set_selection">
+ <description summary="set the primary selection">
+ Replaces the current selection. The previous owner of the primary
+ selection will receive a wp_primary_selection_source.cancelled event.
+
+ To unset the selection, set the source to NULL.
+ </description>
+ <arg name="source" type="object" interface="zwp_primary_selection_source_v1" allow-null="true"/>
+ <arg name="serial" type="uint" summary="serial of the event that triggered this request"/>
+ </request>
+
+ <event name="data_offer">
+ <description summary="introduce a new wp_primary_selection_offer">
+ Introduces a new wp_primary_selection_offer object that may be used
+ to receive the current primary selection. Immediately following this
+ event, the new wp_primary_selection_offer object will send
+ wp_primary_selection_offer.offer events to describe the offered mime
+ types.
+ </description>
+ <arg name="offer" type="new_id" interface="zwp_primary_selection_offer_v1"/>
+ </event>
+
+ <event name="selection">
+ <description summary="advertise a new primary selection">
+ The wp_primary_selection_device.selection event is sent to notify the
+ client of a new primary selection. This event is sent after the
+ wp_primary_selection.data_offer event introducing this object, and after
+ the offer has announced its mimetypes through
+ wp_primary_selection_offer.offer.
+
+ The data_offer is valid until a new offer or NULL is received
+ or until the client loses keyboard focus. The client must destroy the
+ previous selection data_offer, if any, upon receiving this event.
+ </description>
+ <arg name="id" type="object" interface="zwp_primary_selection_offer_v1" allow-null="true"/>
+ </event>
+
+ <request name="destroy" type="destructor">
+ <description summary="destroy the primary selection device">
+ Destroy the primary selection device.
+ </description>
+ </request>
+ </interface>
+
+ <interface name="zwp_primary_selection_offer_v1" version="1">
+ <description summary="offer to transfer primary selection contents">
+ A wp_primary_selection_offer represents an offer to transfer the contents
+ of the primary selection clipboard to the client. Similar to
+ wl_data_offer, the offer also describes the mime types that the data can
+ be converted to and provides the mechanisms for transferring the data
+ directly to the client.
+ </description>
+
+ <request name="receive">
+ <description summary="request that the data is transferred">
+ To transfer the contents of the primary selection clipboard, the client
+ issues this request and indicates the mime type that it wants to
+ receive. The transfer happens through the passed file descriptor
+ (typically created with the pipe system call). The source client writes
+ the data in the mime type representation requested and then closes the
+ file descriptor.
+
+ The receiving client reads from the read end of the pipe until EOF and
+ closes its end, at which point the transfer is complete.
+ </description>
+ <arg name="mime_type" type="string"/>
+ <arg name="fd" type="fd"/>
+ </request>
+
+ <request name="destroy" type="destructor">
+ <description summary="destroy the primary selection offer">
+ Destroy the primary selection offer.
+ </description>
+ </request>
+
+ <event name="offer">
+ <description summary="advertise offered mime type">
+ Sent immediately after creating announcing the
+ wp_primary_selection_offer through
+ wp_primary_selection_device.data_offer. One event is sent per offered
+ mime type.
+ </description>
+ <arg name="mime_type" type="string"/>
+ </event>
+ </interface>
+
+ <interface name="zwp_primary_selection_source_v1" version="1">
+ <description summary="offer to replace the contents of the primary selection">
+ The source side of a wp_primary_selection_offer, it provides a way to
+ describe the offered data and respond to requests to transfer the
+ requested contents of the primary selection clipboard.
+ </description>
+
+ <request name="offer">
+ <description summary="add an offered mime type">
+ This request adds a mime type to the set of mime types advertised to
+ targets. Can be called several times to offer multiple types.
+ </description>
+ <arg name="mime_type" type="string"/>
+ </request>
+
+ <request name="destroy" type="destructor">
+ <description summary="destroy the primary selection source">
+ Destroy the primary selection source.
+ </description>
+ </request>
+
+ <event name="send">
+ <description summary="send the primary selection contents">
+ Request for the current primary selection contents from the client.
+ Send the specified mime type over the passed file descriptor, then
+ close it.
+ </description>
+ <arg name="mime_type" type="string"/>
+ <arg name="fd" type="fd"/>
+ </event>
+
+ <event name="cancelled">
+ <description summary="request for primary selection contents was canceled">
+ This primary selection source is no longer valid. The client should
+ clean up and destroy this primary selection source.
+ </description>
+ </event>
+ </interface>
+</protocol>
diff --git a/freedesktop.org/unstable/text-input/text-input-unstable-v1.xml b/freedesktop.org/unstable/text-input/text-input-unstable-v1.xml
index 29a217e..6ee2665 100644
--- a/freedesktop.org/unstable/text-input/text-input-unstable-v1.xml
+++ b/freedesktop.org/unstable/text-input/text-input-unstable-v1.xml
@@ -113,7 +113,7 @@
<arg name="anchor" type="uint"/>
</request>
- <enum name="content_hint">
+ <enum name="content_hint" bitfield="true">
<description summary="content hint">
Content hint is a bitmask to allow to modify the behavior of the text
input.
@@ -166,8 +166,8 @@
default hints (auto completion, auto correction, auto capitalization)
should be assumed.
</description>
- <arg name="hint" type="uint"/>
- <arg name="purpose" type="uint"/>
+ <arg name="hint" type="uint" enum="content_hint" />
+ <arg name="purpose" type="uint" enum="content_purpose" />
</request>
<request name="set_cursor_rectangle">
@@ -271,7 +271,7 @@
</description>
<arg name="index" type="uint"/>
<arg name="length" type="uint"/>
- <arg name="style" type="uint"/>
+ <arg name="style" type="uint" enum="preedit_style" />
</event>
<event name="preedit_cursor">
@@ -365,7 +365,7 @@
direction text is laid out properly.
</description>
<arg name="serial" type="uint" summary="serial of the latest known text input state"/>
- <arg name="direction" type="uint"/>
+ <arg name="direction" type="uint" enum="text_direction" />
</event>
</interface>
diff --git a/freedesktop.org/unstable/text-input/text-input-unstable-v3.xml b/freedesktop.org/unstable/text-input/text-input-unstable-v3.xml
new file mode 100644
index 0000000..d5f6322
--- /dev/null
+++ b/freedesktop.org/unstable/text-input/text-input-unstable-v3.xml
@@ -0,0 +1,452 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<protocol name="text_input_unstable_v3">
+ <copyright>
+ Copyright © 2012, 2013 Intel Corporation
+ Copyright © 2015, 2016 Jan Arne Petersen
+ Copyright © 2017, 2018 Red Hat, Inc.
+ Copyright © 2018 Purism SPC
+
+ 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>
+
+ <description summary="Protocol for composing text">
+ This protocol allows compositors to act as input methods and to send text
+ to applications. A text input object is used to manage state of what are
+ typically text entry fields in the application.
+
+ This document adheres to the RFC 2119 when using words like "must",
+ "should", "may", etc.
+
+ 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_text_input_v3" version="1">
+ <description summary="text input">
+ The zwp_text_input_v3 interface represents text input and input methods
+ associated with a seat. It provides enter/leave events to follow the
+ text input focus for a seat.
+
+ Requests are used to enable/disable the text-input object and set
+ state information like surrounding and selected text or the content type.
+ The information about the entered text is sent to the text-input object
+ via the preedit_string and commit_string events.
+
+ Text is valid UTF-8 encoded, indices and lengths are in bytes. Indices
+ must not point to middle bytes inside a code point: they must either
+ point to the first byte of a code point or to the end of the buffer.
+ Lengths must be measured between two valid indices.
+
+ Focus moving throughout surfaces will result in the emission of
+ zwp_text_input_v3.enter and zwp_text_input_v3.leave events. The focused
+ surface must commit zwp_text_input_v3.enable and
+ zwp_text_input_v3.disable requests as the keyboard focus moves across
+ editable and non-editable elements of the UI. Those two requests are not
+ expected to be paired with each other, the compositor must be able to
+ handle consecutive series of the same request.
+
+ State is sent by the state requests (set_surrounding_text,
+ set_content_type and set_cursor_rectangle) and a commit request. After an
+ enter event or disable request all state information is invalidated and
+ needs to be resent by the client.
+ </description>
+
+ <request name="destroy" type="destructor">
+ <description summary="Destroy the wp_text_input">
+ Destroy the wp_text_input object. Also disables all surfaces enabled
+ through this wp_text_input object.
+ </description>
+ </request>
+
+ <request name="enable">
+ <description summary="Request text input to be enabled">
+ Requests text input on the surface previously obtained from the enter
+ event.
+
+ This request must be issued every time the active text input changes
+ to a new one, including within the current surface. Use
+ zwp_text_input_v3.disable when there is no longer any input focus on
+ the current surface.
+
+ Clients must not enable more than one text input on the single seat
+ and should disable the current text input before enabling the new one.
+ At most one instance of text input may be in enabled state per instance,
+ Requests to enable the another text input when some text input is active
+ must be ignored by compositor.
+
+ This request resets all state associated with previous enable, disable,
+ set_surrounding_text, set_text_change_cause, set_content_type, and
+ set_cursor_rectangle requests, as well as the state associated with
+ preedit_string, commit_string, and delete_surrounding_text events.
+
+ The set_surrounding_text, set_content_type and set_cursor_rectangle
+ requests must follow if the text input supports the necessary
+ functionality.
+
+ State set with this request is double-buffered. It will get applied on
+ the next zwp_text_input_v3.commit request, and stay valid until the
+ next committed enable or disable request.
+
+ The changes must be applied by the compositor after issuing a
+ zwp_text_input_v3.commit request.
+ </description>
+ </request>
+
+ <request name="disable">
+ <description summary="Disable text input on a surface">
+ Explicitly disable text input on the current surface (typically when
+ there is no focus on any text entry inside the surface).
+
+ State set with this request is double-buffered. It will get applied on
+ the next zwp_text_input_v3.commit request.
+ </description>
+ </request>
+
+ <request name="set_surrounding_text">
+ <description summary="sets the surrounding text">
+ Sets the surrounding plain text around the input, excluding the preedit
+ text.
+
+ The client should notify the compositor of any changes in any of the
+ values carried with this request, including changes caused by handling
+ incoming text-input events as well as changes caused by other
+ mechanisms like keyboard typing.
+
+ If the client is unaware of the text around the cursor, it should not
+ issue this request, to signify lack of support to the compositor.
+
+ Text is UTF-8 encoded, and should include the cursor position, the
+ complete selection and additional characters before and after them.
+ There is a maximum length of wayland messages, so text can not be
+ longer than 4000 bytes.
+
+ Cursor is the byte offset of the cursor within text buffer.
+
+ Anchor is the byte offset of the selection anchor within text buffer.
+ If there is no selected text, anchor is the same as cursor.
+
+ If any preedit text is present, it is replaced with a cursor for the
+ purpose of this event.
+
+ Values set with this request are double-buffered. They will get applied
+ on the next zwp_text_input_v3.commit request, and stay valid until the
+ next committed enable or disable request.
+
+ The initial state for affected fields is empty, meaning that the text
+ input does not support sending surrounding text. If the empty values
+ get applied, subsequent attempts to change them may have no effect.
+ </description>
+ <arg name="text" type="string"/>
+ <arg name="cursor" type="int"/>
+ <arg name="anchor" type="int"/>
+ </request>
+
+ <enum name="change_cause">
+ <description summary="text change reason">
+ Reason for the change of surrounding text or cursor posision.
+ </description>
+ <entry name="input_method" value="0" summary="input method caused the change"/>
+ <entry name="other" value="1" summary="something else than the input method caused the change"/>
+ </enum>
+
+ <request name="set_text_change_cause">
+ <description summary="indicates the cause of surrounding text change">
+ Tells the compositor why the text surrounding the cursor changed.
+
+ Whenever the client detects an external change in text, cursor, or
+ anchor posision, it must issue this request to the compositor. This
+ request is intended to give the input method a chance to update the
+ preedit text in an appropriate way, e.g. by removing it when the user
+ starts typing with a keyboard.
+
+ cause describes the source of the change.
+
+ The value set with this request is double-buffered. It must be applied
+ and reset to initial at the next zwp_text_input_v3.commit request.
+
+ The initial value of cause is input_method.
+ </description>
+ <arg name="cause" type="uint" enum="change_cause"/>
+ </request>
+
+ <enum name="content_hint" bitfield="true">
+ <description summary="content hint">
+ Content hint is a bitmask to allow to modify the behavior of the text
+ input.
+ </description>
+ <entry name="none" value="0x0" summary="no special behavior"/>
+ <entry name="completion" value="0x1" summary="suggest word completions"/>
+ <entry name="spellcheck" value="0x2" summary="suggest word corrections"/>
+ <entry name="auto_capitalization" value="0x4" summary="switch to uppercase letters at the start of a sentence"/>
+ <entry name="lowercase" value="0x8" summary="prefer lowercase letters"/>
+ <entry name="uppercase" value="0x10" summary="prefer uppercase letters"/>
+ <entry name="titlecase" value="0x20" summary="prefer casing for titles and headings (can be language dependent)"/>
+ <entry name="hidden_text" value="0x40" summary="characters should be hidden"/>
+ <entry name="sensitive_data" value="0x80" summary="typed text should not be stored"/>
+ <entry name="latin" value="0x100" summary="just Latin characters should be entered"/>
+ <entry name="multiline" value="0x200" summary="the text input is multiline"/>
+ </enum>
+
+ <enum name="content_purpose">
+ <description summary="content purpose">
+ The content purpose allows to specify the primary purpose of a text
+ input.
+
+ This allows an input method to show special purpose input panels with
+ extra characters or to disallow some characters.
+ </description>
+ <entry name="normal" value="0" summary="default input, allowing all characters"/>
+ <entry name="alpha" value="1" summary="allow only alphabetic characters"/>
+ <entry name="digits" value="2" summary="allow only digits"/>
+ <entry name="number" value="3" summary="input a number (including decimal separator and sign)"/>
+ <entry name="phone" value="4" summary="input a phone number"/>
+ <entry name="url" value="5" summary="input an URL"/>
+ <entry name="email" value="6" summary="input an email address"/>
+ <entry name="name" value="7" summary="input a name of a person"/>
+ <entry name="password" value="8" summary="input a password (combine with sensitive_data hint)"/>
+ <entry name="pin" value="9" summary="input is a numeric password (combine with sensitive_data hint)"/>
+ <entry name="date" value="10" summary="input a date"/>
+ <entry name="time" value="11" summary="input a time"/>
+ <entry name="datetime" value="12" summary="input a date and time"/>
+ <entry name="terminal" value="13" summary="input for a terminal"/>
+ </enum>
+
+ <request name="set_content_type">
+ <description summary="set content purpose and hint">
+ Sets the content purpose and content hint. While the purpose is the
+ basic purpose of an input field, the hint flags allow to modify some of
+ the behavior.
+
+ Values set with this request are double-buffered. They will get applied
+ on the next zwp_text_input_v3.commit request.
+ Subsequent attempts to update them may have no effect. The values
+ remain valid until the next committed enable or disable request.
+
+ The initial value for hint is none, and the initial value for purpose
+ is normal.
+ </description>
+ <arg name="hint" type="uint" enum="content_hint"/>
+ <arg name="purpose" type="uint" enum="content_purpose"/>
+ </request>
+
+ <request name="set_cursor_rectangle">
+ <description summary="set cursor position">
+ Marks an area around the cursor as a x, y, width, height rectangle in
+ surface local coordinates.
+
+ Allows the compositor to put a window with word suggestions near the
+ cursor, without obstructing the text being input.
+
+ If the client is unaware of the position of edited text, it should not
+ issue this request, to signify lack of support to the compositor.
+
+ Values set with this request are double-buffered. They will get applied
+ on the next zwp_text_input_v3.commit request, and stay valid until the
+ next committed enable or disable request.
+
+ The initial values describing a cursor rectangle are empty. That means
+ the text input does not support describing the cursor area. If the
+ empty values get applied, subsequent attempts to change them may have
+ no effect.
+ </description>
+ <arg name="x" type="int"/>
+ <arg name="y" type="int"/>
+ <arg name="width" type="int"/>
+ <arg name="height" type="int"/>
+ </request>
+
+ <request name="commit">
+ <description summary="commit state">
+ Atomically applies state changes recently sent to the compositor.
+
+ The commit request establishes and updates the state of the client, and
+ must be issued after any changes to apply them.
+
+ Text input state (enabled status, content purpose, content hint,
+ surrounding text and change cause, cursor rectangle) is conceptually
+ double-buffered within the context of a text input, i.e. between a
+ committed enable request and the following committed enable or disable
+ request.
+
+ Protocol requests modify the pending state, as opposed to the current
+ state in use by the input method. A commit request atomically applies
+ all pending state, replacing the current state. After commit, the new
+ pending state is as documented for each related request.
+
+ Requests are applied in the order of arrival.
+
+ Neither current nor pending state are modified unless noted otherwise.
+
+ The compositor must count the number of commit requests coming from
+ each zwp_text_input_v3 object and use the count as the serial in done
+ events.
+ </description>
+ </request>
+
+ <event name="enter">
+ <description summary="enter event">
+ Notification that this seat's text-input focus is on a certain surface.
+
+ If client has created multiple text input objects, compositor must send
+ this event to all of them.
+
+ When the seat has the keyboard capability the text-input focus follows
+ the keyboard focus. This event sets the current surface for the
+ text-input object.
+ </description>
+ <arg name="surface" type="object" interface="wl_surface"/>
+ </event>
+
+ <event name="leave">
+ <description summary="leave event">
+ Notification that this seat's text-input focus is no longer on a
+ certain surface. The client should reset any preedit string previously
+ set.
+
+ The leave notification clears the current surface. It is sent before
+ the enter notification for the new focus. After leave event, compositor
+ must ignore requests from any text input instances until next enter
+ event.
+
+ When the seat has the keyboard capability the text-input focus follows
+ the keyboard focus.
+ </description>
+ <arg name="surface" type="object" interface="wl_surface"/>
+ </event>
+
+ <event name="preedit_string">
+ <description summary="pre-edit">
+ Notify when a new composing text (pre-edit) should be set at the
+ current cursor position. Any previously set composing text must be
+ removed. Any previously existing selected text must be removed.
+
+ The argument text contains the pre-edit string buffer.
+
+ The parameters cursor_begin and cursor_end are counted in bytes
+ relative to the beginning of the submitted text buffer. Cursor should
+ be hidden when both are equal to -1.
+
+ They could be represented by the client as a line if both values are
+ the same, or as a text highlight otherwise.
+
+ Values set with this event are double-buffered. They must be applied
+ and reset to initial on the next zwp_text_input_v3.done event.
+
+ The initial value of text is an empty string, and cursor_begin,
+ cursor_end and cursor_hidden are all 0.
+ </description>
+ <arg name="text" type="string" allow-null="true"/>
+ <arg name="cursor_begin" type="int"/>
+ <arg name="cursor_end" type="int"/>
+ </event>
+
+ <event name="commit_string">
+ <description summary="text 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).
+
+ Values set with this event are double-buffered. They must be applied
+ and reset to initial on the next zwp_text_input_v3.done event.
+
+ The initial value of text is an empty string.
+ </description>
+ <arg name="text" type="string" allow-null="true"/>
+ </event>
+
+ <event name="delete_surrounding_text">
+ <description summary="delete surrounding text">
+ Notify when the text around the current cursor position should be
+ deleted.
+
+ Before_length and after_length are the number of bytes before and after
+ the current cursor index (excluding the selection) to delete.
+
+ If a preedit text is present, in effect before_length is counted from
+ the beginning of it, and after_length from its end (see done event
+ sequence).
+
+ Values set with this event are double-buffered. They must be applied
+ and reset to initial on the next zwp_text_input_v3.done event.
+
+ The initial values of both before_length and after_length are 0.
+ </description>
+ <arg name="before_length" type="uint" summary="length of text before current cursor position"/>
+ <arg name="after_length" type="uint" summary="length of text after current cursor position"/>
+ </event>
+
+ <event name="done">
+ <description summary="apply changes">
+ Instruct the application to apply changes to state requested by the
+ preedit_string, commit_string and delete_surrounding_text events. The
+ state relating to these events is double-buffered, and each one
+ modifies the pending state. This event replaces the current state with
+ the pending state.
+
+ The application must proceed by evaluating the changes in the following
+ order:
+
+ 1. Replace existing preedit string with the cursor.
+ 2. Delete requested surrounding text.
+ 3. Insert commit string with the cursor at its end.
+ 4. Calculate surrounding text to send.
+ 5. Insert new preedit text in cursor position.
+ 6. Place cursor inside preedit text.
+
+ The serial number reflects the last state of the zwp_text_input_v3
+ object known to the compositor. The value of the serial argument must
+ be equal to the number of commit requests already issued on that object.
+ When the client receives a done event with a serial different than the
+ number of past commit requests, it must proceed as normal, except it
+ should not change the current state of the zwp_text_input_v3 object.
+ </description>
+ <arg name="serial" type="uint"/>
+ </event>
+ </interface>
+
+ <interface name="zwp_text_input_manager_v3" version="1">
+ <description summary="text input manager">
+ A factory for text-input objects. This object is a global singleton.
+ </description>
+
+ <request name="destroy" type="destructor">
+ <description summary="Destroy the wp_text_input_manager">
+ Destroy the wp_text_input_manager object.
+ </description>
+ </request>
+
+ <request name="get_text_input">
+ <description summary="create a new text input object">
+ Creates a new text-input object for a given seat.
+ </description>
+ <arg name="id" type="new_id" interface="zwp_text_input_v3"/>
+ <arg name="seat" type="object" interface="wl_seat"/>
+ </request>
+ </interface>
+</protocol>
diff --git a/freedesktop.org/unstable/xdg-decoration/README b/freedesktop.org/unstable/xdg-decoration/README
new file mode 100644
index 0000000..73f0c52
--- /dev/null
+++ b/freedesktop.org/unstable/xdg-decoration/README
@@ -0,0 +1,4 @@
+xdg_decoration protocol
+
+Maintainers:
+Simon Ser <contact@emersion.fr>
diff --git a/freedesktop.org/unstable/xdg-decoration/xdg-decoration-unstable-v1.xml b/freedesktop.org/unstable/xdg-decoration/xdg-decoration-unstable-v1.xml
new file mode 100644
index 0000000..e596775
--- /dev/null
+++ b/freedesktop.org/unstable/xdg-decoration/xdg-decoration-unstable-v1.xml
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<protocol name="xdg_decoration_unstable_v1">
+ <copyright>
+ Copyright © 2018 Simon Ser
+
+ 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>
+
+ <interface name="zxdg_decoration_manager_v1" version="1">
+ <description summary="window decoration manager">
+ This interface allows a compositor to announce support for server-side
+ decorations.
+
+ A window decoration is a set of window controls as deemed appropriate by
+ the party managing them, such as user interface components used to move,
+ resize and change a window's state.
+
+ A client can use this protocol to request being decorated by a supporting
+ compositor.
+
+ If compositor and client do not negotiate the use of a server-side
+ decoration using this protocol, clients continue to self-decorate as they
+ see fit.
+
+ 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>
+
+ <request name="destroy" type="destructor">
+ <description summary="destroy the decoration manager object">
+ Destroy the decoration manager. This doesn't destroy objects created
+ with the manager.
+ </description>
+ </request>
+
+ <request name="get_toplevel_decoration">
+ <description summary="create a new toplevel decoration object">
+ Create a new decoration object associated with the given toplevel.
+
+ Creating an xdg_toplevel_decoration from an xdg_toplevel which has a
+ buffer attached or committed is a client error, and any attempts by a
+ client to attach or manipulate a buffer prior to the first
+ xdg_toplevel_decoration.configure event must also be treated as
+ errors.
+ </description>
+ <arg name="id" type="new_id" interface="zxdg_toplevel_decoration_v1"/>
+ <arg name="toplevel" type="object" interface="xdg_toplevel"/>
+ </request>
+ </interface>
+
+ <interface name="zxdg_toplevel_decoration_v1" version="1">
+ <description summary="decoration object for a toplevel surface">
+ The decoration object allows the compositor to toggle server-side window
+ decorations for a toplevel surface. The client can request to switch to
+ another mode.
+
+ The xdg_toplevel_decoration object must be destroyed before its
+ xdg_toplevel.
+ </description>
+
+ <enum name="error">
+ <entry name="unconfigured_buffer" value="0"
+ summary="xdg_toplevel has a buffer attached before configure"/>
+ <entry name="already_constructed" value="1"
+ summary="xdg_toplevel already has a decoration object"/>
+ <entry name="orphaned" value="2"
+ summary="xdg_toplevel destroyed before the decoration object"/>
+ </enum>
+
+ <request name="destroy" type="destructor">
+ <description summary="destroy the decoration object">
+ Switch back to a mode without any server-side decorations at the next
+ commit.
+ </description>
+ </request>
+
+ <enum name="mode">
+ <description summary="window decoration modes">
+ These values describe window decoration modes.
+ </description>
+ <entry name="client_side" value="1"
+ summary="no server-side window decoration"/>
+ <entry name="server_side" value="2"
+ summary="server-side window decoration"/>
+ </enum>
+
+ <request name="set_mode">
+ <description summary="set the decoration mode">
+ Set the toplevel surface decoration mode. This informs the compositor
+ that the client prefers the provided decoration mode.
+
+ After requesting a decoration mode, the compositor will respond by
+ emitting an xdg_surface.configure event. The client should then update
+ its content, drawing it without decorations if the received mode is
+ server-side decorations. The client must also acknowledge the configure
+ when committing the new content (see xdg_surface.ack_configure).
+
+ The compositor can decide not to use the client's mode and enforce a
+ different mode instead.
+
+ Clients whose decoration mode depend on the xdg_toplevel state may send
+ a set_mode request in response to an xdg_surface.configure event and wait
+ for the next xdg_surface.configure event to prevent unwanted state.
+ Such clients are responsible for preventing configure loops and must
+ make sure not to send multiple successive set_mode requests with the
+ same decoration mode.
+ </description>
+ <arg name="mode" type="uint" enum="mode" summary="the decoration mode"/>
+ </request>
+
+ <request name="unset_mode">
+ <description summary="unset the decoration mode">
+ Unset the toplevel surface decoration mode. This informs the compositor
+ that the client doesn't prefer a particular decoration mode.
+
+ This request has the same semantics as set_mode.
+ </description>
+ </request>
+
+ <event name="configure">
+ <description summary="suggest a surface change">
+ The configure event asks the client to change its decoration mode. The
+ configured state should not be applied immediately. Clients must send an
+ ack_configure in response to this event. See xdg_surface.configure and
+ xdg_surface.ack_configure for details.
+
+ A configure event can be sent at any time. The specified mode must be
+ obeyed by the client.
+ </description>
+ <arg name="mode" type="uint" enum="mode" summary="the decoration mode"/>
+ </event>
+ </interface>
+</protocol>
diff --git a/freedesktop.org/unstable/xdg-foreign/xdg-foreign-unstable-v1.xml b/freedesktop.org/unstable/xdg-foreign/xdg-foreign-unstable-v1.xml
index 062b090..913963a 100644
--- a/freedesktop.org/unstable/xdg-foreign/xdg-foreign-unstable-v1.xml
+++ b/freedesktop.org/unstable/xdg-foreign/xdg-foreign-unstable-v1.xml
@@ -77,7 +77,7 @@
corresponding interface and event for details.
A surface may be exported multiple times, and each exported handle may
- be used to create a xdg_imported multiple times. Only xdg_surface
+ be used to create an xdg_imported multiple times. Only xdg_surface
surfaces may be exported.
</description>
<arg name="id" type="new_id" interface="zxdg_exported_v1"
@@ -118,7 +118,7 @@
<interface name="zxdg_exported_v1" version="1">
<description summary="an exported surface handle">
- A xdg_exported object represents an exported reference to a surface. The
+ An xdg_exported object represents an exported reference to a surface. The
exported surface may be referenced as long as the xdg_exported object not
destroyed. Destroying the xdg_exported invalidates any relationship the
importer may have established using xdg_imported.
@@ -145,7 +145,7 @@
<interface name="zxdg_imported_v1" version="1">
<description summary="an imported surface handle">
- A xdg_imported object represents an imported reference to surface exported
+ An xdg_imported object represents an imported reference to surface exported
by some client. A client can use this interface to manipulate
relationships between its own surfaces and the imported surface.
</description>
diff --git a/freedesktop.org/unstable/xdg-foreign/xdg-foreign-unstable-v2.xml b/freedesktop.org/unstable/xdg-foreign/xdg-foreign-unstable-v2.xml
index bf46fa8..b9d560e 100644
--- a/freedesktop.org/unstable/xdg-foreign/xdg-foreign-unstable-v2.xml
+++ b/freedesktop.org/unstable/xdg-foreign/xdg-foreign-unstable-v2.xml
@@ -77,7 +77,7 @@
corresponding interface and event for details.
A surface may be exported multiple times, and each exported handle may
- be used to create a xdg_imported multiple times. Only xdg_toplevel
+ be used to create an xdg_imported multiple times. Only xdg_toplevel
equivalent surfaces may be exported.
</description>
<arg name="id" type="new_id" interface="zxdg_exported_v2"
@@ -118,7 +118,7 @@
<interface name="zxdg_exported_v2" version="1">
<description summary="an exported surface handle">
- A xdg_exported object represents an exported reference to a surface. The
+ An xdg_exported object represents an exported reference to a surface. The
exported surface may be referenced as long as the xdg_exported object not
destroyed. Destroying the xdg_exported invalidates any relationship the
importer may have established using xdg_imported.
@@ -145,7 +145,7 @@
<interface name="zxdg_imported_v2" version="1">
<description summary="an imported surface handle">
- A xdg_imported object represents an imported reference to surface exported
+ An xdg_imported object represents an imported reference to surface exported
by some client. A client can use this interface to manipulate
relationships between its own surfaces and the imported surface.
</description>
@@ -161,7 +161,7 @@
<request name="set_parent_of">
<description summary="set as the parent of some surface">
Set the imported surface as the parent of some surface of the client.
- The passed surface must be a xdg_toplevel equivalent. Calling this
+ The passed surface must be an xdg_toplevel equivalent. Calling this
function sets up a surface to surface relation with the same stacking
and positioning semantics as xdg_toplevel.set_parent.
</description>
diff --git a/freedesktop.org/unstable/xdg-output/xdg-output-unstable-v1.xml b/freedesktop.org/unstable/xdg-output/xdg-output-unstable-v1.xml
index 0c0c481..fe3a70a 100644
--- a/freedesktop.org/unstable/xdg-output/xdg-output-unstable-v1.xml
+++ b/freedesktop.org/unstable/xdg-output/xdg-output-unstable-v1.xml
@@ -54,7 +54,7 @@
reset.
</description>
- <interface name="zxdg_output_manager_v1" version="1">
+ <interface name="zxdg_output_manager_v1" version="3">
<description summary="manage xdg_output objects">
A global factory interface for xdg_output objects.
</description>
@@ -77,12 +77,17 @@
</request>
</interface>
- <interface name="zxdg_output_v1" version="1">
+ <interface name="zxdg_output_v1" version="3">
<description summary="compositor logical output region">
An xdg_output describes part of the compositor geometry.
This typically corresponds to a monitor that displays part of the
compositor space.
+
+ For objects version 3 onwards, after all xdg_output properties have been
+ sent (when the object is created and when properties are updated), a
+ wl_output.done event is sent. This allows changes to the output
+ properties to be seen as atomic, even if they happen via multiple events.
</description>
<request name="destroy" type="destructor">
@@ -135,6 +140,9 @@
- A compositor using a fractional scale of 1.5 will advertise a
logical size to 2560×1620.
+ For example, for a wl_output mode 1920×1080 and a 90 degree rotation,
+ the compositor will advertise a logical size of 1080x1920.
+
The logical_size event is sent after creating an xdg_output
(see xdg_output_manager.get_xdg_output) and whenever the logical
size of the output changes, either as a result of a change in the
@@ -154,7 +162,58 @@
This allows changes to the xdg_output properties to be seen as
atomic, even if they happen via multiple events.
+
+ For objects version 3 onwards, this event is deprecated. Compositors
+ are not required to send it anymore and must send wl_output.done
+ instead.
+ </description>
+ </event>
+
+ <!-- Version 2 additions -->
+
+ <event name="name" since="2">
+ <description summary="name of this output">
+ Many compositors will assign names to their outputs, show them to the
+ user, allow them to be configured by name, etc. The client may wish to
+ know this name as well to offer the user similar behaviors.
+
+ The naming convention is compositor defined, but limited to
+ alphanumeric characters and dashes (-). Each name is unique among all
+ wl_output globals, but if a wl_output global is destroyed the same name
+ may be reused later. The names will also remain consistent across
+ sessions with the same hardware and software configuration.
+
+ Examples of names include 'HDMI-A-1', 'WL-1', 'X11-1', etc. However, do
+ not assume that the name is a reflection of an underlying DRM
+ connector, X11 connection, etc.
+
+ The name event is sent after creating an xdg_output (see
+ xdg_output_manager.get_xdg_output). This event is only sent once per
+ xdg_output, and the name does not change over the lifetime of the
+ wl_output global.
+ </description>
+ <arg name="name" type="string" summary="output name"/>
+ </event>
+
+ <event name="description" since="2">
+ <description summary="human-readable description of this output">
+ Many compositors can produce human-readable descriptions of their
+ outputs. The client may wish to know this description as well, to
+ communicate the user for various purposes.
+
+ The description is a UTF-8 string with no convention defined for its
+ contents. Examples might include 'Foocorp 11" Display' or 'Virtual X11
+ output via :1'.
+
+ The description event is sent after creating an xdg_output (see
+ xdg_output_manager.get_xdg_output) and whenever the description
+ changes. The description is optional, and may not be sent at all.
+
+ For objects of version 2 and lower, this event is only sent once per
+ xdg_output, and the description does not change over the lifetime of
+ the wl_output global.
</description>
+ <arg name="description" type="string" summary="output description"/>
</event>
</interface>
diff --git a/freedesktop.org/unstable/xdg-shell/xdg-shell-unstable-v6.xml b/freedesktop.org/unstable/xdg-shell/xdg-shell-unstable-v6.xml
index 1c0f924..5e25e66 100644
--- a/freedesktop.org/unstable/xdg-shell/xdg-shell-unstable-v6.xml
+++ b/freedesktop.org/unstable/xdg-shell/xdg-shell-unstable-v6.xml
@@ -389,7 +389,7 @@
also be treated as errors.
For a surface to be mapped by the compositor, the following conditions
- must be met: (1) the client has assigned a xdg_surface based role to the
+ must be met: (1) the client has assigned an xdg_surface based role to the
surface, (2) the client has set and committed the xdg_surface state and
the role dependent state to the surface and (3) the client has committed a
buffer to the surface.
diff --git a/wayland_protocol_codegen.go b/wayland_protocol_codegen.go
index df414ed..762c6c5 100644
--- a/wayland_protocol_codegen.go
+++ b/wayland_protocol_codegen.go
@@ -286,8 +286,6 @@ func (g *waylandGenModule) prepareTools(ctx android.ModuleContext) (tools map[st
} else {
ctx.ModuleErrorf("host tool %q missing output file", tool)
}
- default:
- ctx.ModuleErrorf("unknown dependency on %q", ctx.OtherModuleName(module))
}
})
}