Commit graph

135 commits

Author SHA1 Message Date
dcz
3718d0077b text-input-v3: Replace "active"
"Active" is not defined anywhere. The meaning of "focused" can be extrapolated from surfaces to text fields.

Signed-off-by: Dorota Czaplejewicz
2025-06-05 16:23:23 +00:00
dcz
104eda7e1f text-input-v3: Clarify enabling and seats
This fixes the ambiguous language which caused https://gitlab.freedesktop.org/wayland/wayland-protocols/-/issues/214 .

This also replaces "active" with "enabled" in the next sentence. No "active" state is defined anywhere in the document.

Signed-off-by: Dorota Czaplejewicz
2025-06-05 16:23:23 +00:00
Daniel Stone
3544c6dcc4 protocols: Add GitLab contact information
This is useful to know who to ping when you want to change something.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2024-10-09 09:07:11 +00:00
Simon Ser
9b95f83a2f xdg-output: mark done event with deprecated-since attribute
Signed-off-by: Simon Ser <contact@emersion.fr>
2024-10-05 14:35:30 +00:00
Simon Ser
df2b5e5e7b xdg-decoration: add invalid_mode error
There is no error defined for invalid mode values.

Signed-off-by: Simon Ser <contact@emersion.fr>
2024-09-03 10:27:40 +00:00
YaoBing Xiao
d1d185c61f pointer-gestures: Add punctuation to clarify gesture cycles
Signed-off-by: YaoBing Xiao <xiaoyaobing@uniontech.com>
2024-08-22 15:32:28 +08:00
Derek Foreman
c5b47dc928 various: Fix definition of double-buffered state
The strict "mailbox" model of wayland past is not how modern compositors
process commits, and many explanations of how double buffered state is
applied throughout wayland-protocols are no longer strictly accurate.

Instead of trying to define double-buffered state at every point of use,
just reference the evolving definition of wl_surface.commit.

This still leaves a few old definitions that weren't trivially updated.

Signed-off-by: Derek Foreman <derek.foreman@collabora.com>
2024-05-06 09:45:35 +00:00
PolyMeilex
9bfb27f0a4
Fix some trivial typos
Fix typos in protocol files and in python code

Signed-off-by: Bartłomiej Maryńczak <marynczakbartlomiej@gmail.com>
2024-05-03 14:16:40 +02:00
Simon Ser
72b5d90a02 tablet-v2: mark as stable
This protocol extension has not changed in a long time, is
widely supported, and no upcoming breaking changes are planned.

The interface names are left unchanged, so that compositors and
clients don't need to be updated. In particular, the legacy "z"
prefix is still part of the interface name.

Signed-off-by: Simon Ser <contact@emersion.fr>
2024-04-11 11:42:43 +02:00
Simon Ser
8be7ad67fa linux-explicit-synchronization-v1: add linux-drm-syncobj note
The new protocol supersedes this one.

Signed-off-by: Simon Ser <contact@emersion.fr>
2024-03-20 12:00:33 +01:00
Simon Ser
0819d97313 tablet-v2: clarify that name/id events are optional
libinput may not always have a descriptive name for a tablet
device, in which case it's better to let the Wayland client
pick a fallback (potentially localized) than send a fake string.

Not all tablet devices are USB, so make it clear that the id
event may be skipped.

Signed-off-by: Simon Ser <contact@emersion.fr>
Closes: https://gitlab.freedesktop.org/wayland/wayland-protocols/-/issues/180
2024-02-29 13:11:57 +01:00
Simon Ser
0c4e041f64 linux-dmabuf: require all planes to use the same modifier
The kernel enforces this. Accepting a separate modifier per-plane is
an historical artifact.

Signed-off-by: Simon Ser <contact@emersion.fr>
Closes: https://gitlab.freedesktop.org/wayland/wayland-protocols/-/issues/29
2023-11-24 18:49:18 +00:00
Simon Ser
479580dbe3 xdg-decoration: remove ambiguous wording in configure event
"ask the client" isn't very clear. Let's use the word "configure"
which is more explicit: the client doesn't have a say in this.
(Note, wording in the following paragraphs is clearer and uses the
word "must".)

Signed-off-by: Simon Ser <contact@emersion.fr>
2023-10-17 12:14:03 +00:00
Simon Ser
079b6011a0 xdg-decoration: fix configure event summary
This was probably carried over from an early draft of the protocol.
This event is not a suggestion as the full description explains:
the client must ack it.

Signed-off-by: Simon Ser <contact@emersion.fr>
2023-10-17 12:14:03 +00:00
Simon Ser
51bee6e074 linux-dmabuf: mark as stable
This protocol extension is ubiquitous. It's time to mark it as
stable.

The interface names are left unchanged, so that compositors and
clients don't need to be updated. In particular, the legacy "z"
prefix is still part of the interface name.

Signed-off-by: Simon Ser <contact@emersion.fr>
2023-10-10 14:43:25 +02:00
Simon Ser
e1d61ce940 linux-dmabuf: add note about implicit sync
Make it clear that implicit sync is the expectation without another
protocol extension.

Signed-off-by: Simon Ser <contact@emersion.fr>
2023-08-14 14:32:02 +02:00
Simon Ser
18aa7b27f7 tablet-v2: fix typo in set_cursor serial description
This interface has no "enter" event. This was likely copy-pasted
from wl_pointer.set_cursor.

The event which indicates focus is proximity_in.

Signed-off-by: Simon Ser <contact@emersion.fr>
2023-05-09 11:59:35 +02:00
Vlad Zahorodnii
fefd185994 linux-dmabuf: Fix a couple of typos
There are no interfaces such as zlinux_dmabuf_params and zlinux_buffer_params.

Signed-off-by: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
2023-04-18 15:06:04 +03:00
Mikhail Gusarov
275fce4af9 xdg-shell: Clarify relationship between [un]set_maximized and configure
Make it explicit in the protocol that [un]set_maximized and
the following configure event can't be reliably matched, and the
clients shouldn't try to do it.

Closes #106

Signed-off-by: Mikhail Gusarov <dottedmag@dottedmag.net>
2023-03-30 20:47:28 +00:00
Xaver Hugl
5c274ffc90 unstable/xdg-shell v6: clarify when which errors are used
Signed-off-by: Xaver Hugl <xaver.hugl@gmail.com>
2023-03-30 15:44:07 +00:00
Jonas Ådahl
94482ceaf9 xdg-output: Remove and tweak contradicting examples
The "logical size" as stated by the first paragraph corresponds to the
monitor size in the global compositor space.

To most clients, this is unnecessary information, and should be ignored,
but some used the listed examples to derive information that contradicts
the very definition of what this event communicates.

One example tried to add surface size assumptions, which was not
correct. Remove this part completely, clients should not try to
configure their surface sizes from the logical size of a monitor.

The other is the list of size examples; it tried to communicate that a
compositor sometimes may not scale the viewport of the monitor in its
global compositor coordinate space, in which case, the logical size
itself matches the actual resolution. Tweak this wording to make that
clear that it does not related to any surface size.

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
2023-02-27 11:26:25 +00:00
Simon Ser
cf838fd316 xdg-output: clarify goal
In the past, xdg-output had only the logical_position and
logical_size events, then the name and description events were
added. Later on, they were moved inside wl_output since they aren't
desktop-specific. However the goals section of the protocol overview
hasn't been updated accordingly.

Make it clear that this protocol's name and description events should
not be preferred over wl_output.

Signed-off-by: Simon Ser <contact@emersion.fr>
2023-02-21 12:31:18 +00:00
Simon Ser
380bdd6ba7 xdg-output-unstable-v1: deprecate name and description
These have been merged into wl_output. Clients should prefer
using wl_output events instead of relying on xdg-output.

Signed-off-by: Simon Ser <contact@emersion.fr>
2023-02-12 10:16:21 +00:00
Manuel Stoeckl
4f18a5baee linux-dmabuf: fix references to tranche_formats
Signed-off-by: Manuel Stoeckl <code@mstoeckl.com>
2022-11-14 11:08:21 +00:00
Peter Hutterer
c96e22a8f4 tablet: fix a copy/paste error
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2022-06-28 07:24:14 +10:00
Carlos Garnacho
37fa0f4a4e text-input: Reword the interpretation of serials to be more specific
Here's a long story. The serial is formerly described as:

  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.

Upon first reading it might be obvious to interpret "proceed as normal"
as "apply the changes made by the done event" and "not change the current
state" as "do not make requests on it until serial matches with
expectations again". This would turn the serial into a flow control
mechanism to avoid pushing state changes that we know might be stale.

GTK however makes another outlandish interpretation, where "proceed as
normal" means "ignore the changes made by the done event" and "not change
state of the zwp_text_input_v3 object" is "not change client state". This
makes the serial a full synchronization mechanism where IM commands that
are deemed out of sync are symply ignored.

This would seem a misinterpretation of the protocol, and I proceeded to
change the behavior in GTK. Then some deja vu feeling struck me and I found
https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/384#note_344864, this
change was already done and discussed in the past. Not just that, it is
the right interpretation.

However, there's some notable disadvantages, there's 2 easy ways to
completely break the synchronization between compositor and client:
Having the IM push new state too often (i.e. multiple consecutive
.done events), or having the client .commit too often. If any of both
peers gets ahead of the other slightly, the end result is ignored input.
More specifically, IBus has no provision for this kind of transactional
behavior (probably other IMs too), so implementing "emit .done once after
a set of changes" is not quite possible.

Arguably, ignoring IM input is also a bad thing. IMs expect all commands
to be respected and applied in order and might even rely on that in
their own internal state. Since only state changes are flushed on .done
events, partially ignoring IM commands will end up with the client IM state
out of sync.

The usecase described at that GNOME gitlab comment (edited text changes
happening in parallel to IM interaction) trades the handling of an
inherently racy corner case with the worst kind of mishandling (ignoring
user input) if IM/client don't perfectly sync up.

On the other hand, the flow control approach is more lenient with IMs and
clients "getting a step ahead", and more importantly does not punish the
user whenever either IM/client happens to do that. Double down on this
(already intuitively correct) description, and specify further what it
implies.

Signed-off-by: Carlos Garnacho <carlosg@gnome.org>
2022-03-29 07:33:38 +00:00
Tadeo Kondrak
8498e4c10d linux-explicit-synchronization: Annotate destructor events
Signed-off-by: Tadeo Kondrak <me@tadeo.ca>
2020-06-11 14:22:55 -06:00
Tadeo Kondrak
bbb683eb79 fullscreen-shell: Annotate destructor events
Signed-off-by: Tadeo Kondrak <me@tadeo.ca>
2020-06-11 14:22:39 -06:00
Simon Ser
c2ceb5f14d linux-dmabuf: fix typo in dev_t example code
dev_t is not a struct, it's a typedef.

Signed-off-by: Simon Ser <contact@emersion.fr>
2022-01-17 14:54:49 +00:00
Simon Ser
c62be976d7 linux-dmabuf: send protocol error on invalid format/modifier
Now that compositors must send INVALID to advertise support for
implicit modifiers, we can make it a protocol error to add a
DMA-BUF plane with an unsupported format + modifier pair.

Signed-off-by: Simon Ser <contact@emersion.fr>
Reviewed-by: Daniel Stone <daniels@collabora.com>
2021-11-23 09:52:53 +01:00
Simon Ser
8a5cd28a0e unstable/linux-dmabuf: add wp_linux_dmabuf_feedback
On multi-GPU setups, multiple devices can be used for rendering. Clients
need feedback about the device in use by the compositor. For instance,
if they render on another GPU, then they need to make sure the memory is
accessible between devices and that their buffers are not placed in
hidden memory.

This commit introduces a new wp_linux_dmabuf_feedback object. This
object advertises a preferred main device, a set of preferred
formats/modifiers and target devices.

Each object is bound to a wl_surface and can dynamically update its
feedback parameters. This enables fine-grained per-surface
optimizations. For instance, when a surface is scanned out on a GPU the
compositor isn't compositing with, the target device can be set to this
GPU to avoid unnecessary roundtrips.

A feedback object can also be standalone for clients that don't support
per-surface feedback.

Signed-off-by: Simon Ser <contact@emersion.fr>
Signed-off-by: Leandro Ribeiro <leandro.ribeiro@collabora.com>
Reviewed-by: Daniel Stone <daniels@collabora.com>
Closes: https://gitlab.freedesktop.org/wayland/wayland/issues/59
2021-11-23 09:47:24 +01:00
Simon Ser
40cb7d47e6 linux-dmabuf: add note about pre-multiplied alpha
Add a note about pre-multiplied alpha for all DRM formats.
Include an escape hatch in the spec to allow other protocol
extensions to override this.

Essentially the same as [1].

[1]: https://gitlab.freedesktop.org/wayland/wayland/-/merge_requests/187

Signed-off-by: Simon Ser <contact@emersion.fr>
2021-11-10 15:01:34 +00:00
Peter Hutterer
824cea61e6 pointer-gestures: add hold gestures
Hold gestures merely denote "there are fingers on the touchpad but they are
not moving". As touchpad touches are generally fully abstracted, a client
cannot currently know when a user is interacting with the touchpad without
moving - no motion events will be sent in this case.

The two use-cases here are:
- hold-to-interact: where a hold gesture is active for some time
  a menu could pop up, or some object is selected, etc.
- hold-to-cancel: where e.g. kinetic scrolling is currently active, the start
  of a hold gesture can be used to stop the scroll

Since hold gestures by definition do not have movement, there is no need for
an "update" stage in the gesture.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2021-09-13 09:07:46 +00:00
Manuel Stoeckl
f01202f4b7 xdg-output: fix minor calculation error
Signed-off-by: Manuel Stoeckl <code@mstoeckl.com>
Reviewed-by: Simon Ser <contact@emersion.fr>
2021-06-07 17:10:59 +00:00
Simon Ser
b1670b4dda xdg-foreign: add error enums
The protocol states that the client must provide xdg_toplevel surfaces,
but doesn't specify protocol error values that can be sent by the
compositor.

Signed-off-by: Simon Ser <contact@emersion.fr>
2021-04-14 07:09:55 +00:00
Peter Hutterer
17bef0eddd pointer-gestures: correct description of pinch
This is being picky, but "pinch/spread" is the physical gesture, zoom and
rotate is the effect that clients provide in response to that gesture.
Let's use pinch only here since spread is more ambiguous in english, as anyone
who's ever had butter on their bread would know.

Also, everything else is referring to it as pinch anyway, so zoom/rotate here
is the odd one out.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2021-04-13 11:22:09 +10:00
Vlad Zahorodnii
af29ece33c fullscreen-shell: Clarify that present requests assign a surface role
Currently, the spec doesn't say explicitly that present requests assign
a surface role. Given that, it can be viewed as the protocol modifies
an already assigned surface role, e.g. xdg-toplevel, and present requests
only act as hints.

Signed-off-by: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
2021-04-05 07:55:14 +00:00
Simon Ser
3683a5eb66 linux-dmabuf: clarify what mixed valid/INVALID modifiers mean
This commit makes it clear that compositors can send valid modifiers and
DRM_FORMAT_MOD_INVALID for a given format. This means that the compositor
supports both implicit and explicit modifiers. See the warning further
down:

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

Xwayland already requires compositors to send DRM_FORMAT_MOD_INVALID
for importing buffers with an implicit modifier [1].

In a future protocol version, it would be nice to make it a protocol
error (or at least a soft failure) to use any format/modifier pair that
wasn't advertised. A use-case for this is Vulkan compositors: the Vulkan
DMA-BUF extensions require an explicit modifier and cannot import
buffers which have an implicit modifier.

[1]: 6c51818a0f/hw/xwayland/xwayland-glamor-gbm.c (L328)

Signed-off-by: Simon Ser <contact@emersion.fr>
2021-03-31 07:24:53 +00:00
Pekka Paalanen
f899eff0a7 linux-dmabuf: no buffer errors on device disappearance
This was prompted by the discussion from
https://lists.freedesktop.org/archives/dri-devel/2020-May/266611.html
which is not the final wording.

When a DRM device is hot-unplugged, particularly if it is the Wayland
compositor's compositing GPU, EGL may start returning errors from trying to use
the client's dmabuf. Or, if the client is rendering on another GPU which gets
hot-unplugged, the dmabuf the compositor already has may start failing.

Hot-unplug is an abrupt global action, and there is no way a client or a
compositor could ensure they clean up before things start failing. It is not
the client's fault, so the client should not get disconnected if already
existing wl_buffer objects start failing. This patch add the wording to the
protocol to this effect.

The intention is that the compositor replaces the failed buffers with some
placeholder content. There is no way this could be glitch-free. In its own pace
the client should discover the DRM device is gone, clean up, and perhaps use
something else. How exactly that should happen depends on the rendering API the
client is using.

This is a tiny step towards making DRM device hot-unplug not crash
applications that wish to handle the unplug gracefully.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
2021-02-16 11:32:58 +02:00
onox
d10d18f3d4
text-input: Add enum attributes to various arguments
Signed-off-by: onox <denkpadje@gmail.com>
2021-01-05 19:37:16 +01:00
onox
ab3c1d5682
fullscreen-shell: Add enum attributes to various arguments
Signed-off-by: onox <denkpadje@gmail.com>
2021-01-05 19:37:02 +01:00
onox
0bb5f5fe68
linux-dmabuf: Add enum attribute to 'flags'
Signed-off-by: onox <denkpadje@gmail.com>
2021-01-05 19:36:32 +01:00
onox
d56d737dbb
pointer-constraints: Add enum attribute to 'lifetime'
Signed-off-by: onox <denkpadje@gmail.com>
2021-01-03 19:26:44 +01:00
Bhushan Shah
4ed0cafeef text-input: document behavior regarding multiple text-inputs
Currently protocol does not specify what should happen if multiple
text-inputs are created by same client, which is why this is more or
less undefined behavior currently in compositor implementations.

If client has created more than one text-input objects and surface owned
by the client is focused, then compositor must send enter event to all
text-input objects, in case of enable request however only one
text-input must be enabled per client per seat.

Signed-off-by: Bhushan Shah <bshah@kde.org>
2020-11-03 20:16:27 +05:30
Vlad Zahorodnii
6be6e00c02 Use correct indefinite article before "xdg"
Since the abbreviation "XDG" starts with a vowel sound, the correct
article is "an."

Signed-off-by: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
2020-06-19 12:45:12 +03:00
Simon Ser
048102f21a xdg-output: make xdg_output.description mutable
The output description is a human-readable text describing the output. Unlike
the name which uniquely identifies the output, it's intended to be displayed to
the user.

It might be desirable for a compositor to update an output's description. For
instance, when only one output is plugged in, it's not necessary to dump make,
model, serial and connector to the description, something like "Dell U2717D" is
enough. However when two identical outputs are plugged in it's necessary to add
e.g. the connector type to tell them apart ("Dell U2717D on HDMI"). See [1] for
a discussion about this.

This commit bumps xdg_output's version to allow compositors to update the
property.

[1]: https://github.com/swaywm/wlroots/issues/1623

Signed-off-by: Simon Ser <contact@emersion.fr>
Reviewed-by: Jonas Ådahl <jadahl@gmail.com>
Acked-by: Olivier Fourdan <ofourdan@redhat.com>
2019-07-25 11:19:02 +02:00
Simon Ser
b9d427dbc6 pointer-gestures: add a release request
This allows clients to destroy a gesture object before they disconnect.

The request isn't named "destroy", as this would conflict with
wayland-scanner's auto-generated destructor (which just destroys the
client-side object without sending any request).

Signed-off-by: Simon Ser <contact@emersion.fr>
Reviewed-by: Jonas Ådahl <jadahl@gmail.com>
2019-07-17 10:28:43 +02:00
Simon Ser
962dd53537 xdg-output: deprecate the xdg_output.done event
This commit makes it so a wl_output.done event is guaranteed to be sent with a
xdg_output.done event.

This protocol change has been discussed in a recent xorg-devel discussions [1].

First let's recap why a change is needed: Xwayland listens to both wl_output and
xdg_output changes. When an output's properties change, Xwayland expects to
receive both a wl_output.done event and an xdg_output.done event. If that's not
the case, Xwayland doesn't update its state (so old state is still exposed to
X11 clients).

Most of the time, both objects will be updated at the same time (e.g. the
current mode is changed, so both wl_output.mode and xdg_output.logical_size are
sent) so this won't be an issue. However in some situations only one of
wl_output or xdg_output changes. For instance:

- The mode is changed at the same time as the scale, resulting in the same
  logical_size.
- The compositor doesn't expose the outputs' position via wl_output, so whenever
  the position changes only xdg_output is updated.

Both KDE [2] and wlroots [3] have experienced this issue.

For this reason, I'd like to update the xdg-output protocol to make it mandatory
to always send a wl_output.done event after xdg_output changes. This effectively
makes wl_output.done atomically apply all output state (including the state of
add-on objects like xdg_output). This approach is pretty similar to
wl_surface.commit: this request will atomically apply surface state including
the state of e.g. the xdg_surface object tied to the wl_surface.

To update the protocol to reflect this new requirement we can either:

- **Bump xdg_output version**. The current protocol doesn't specify that
  wl_output.done must be sent, adding this new requirement would be a breaking
  change. We need to fix Xwayland for the current xdg_output version (maybe make
  it non-atomic for the current version, atomic for the new one?). Should we
  deprecate xdg_output.done in the new version?
- **Don't bump xdg_output version**. This clarifies what is expected in practice
  by Xwayland, a major xdg_output consumer, and what is currently implemented by
  all compositors.

There's one issue with the "don't bump" approach: indeed in practice compositors
always send wl_output.done and xdg_output.done in pairs, however the ordering
between those two events is not guaranteed. This means some compositors might
send this sequence:

    wl_output.geometry(…)
    wl_output.done()
    xdg_output.logical_position(…)
    xdg_output.done()

In this case the wl_output.done event fails to atomically apply the xdg_output
state.

For this reason, I think bumping the version is a better approach.

This commit also deprecates xdg_output.done, which doesn't have any purpose
anymore.

[1]: https://lists.x.org/archives/xorg-devel/2019-April/058148.html
[2]: https://phabricator.kde.org/D19253
[3]: https://github.com/swaywm/sway/issues/4064

Signed-off-by: Simon Ser <contact@emersion.fr>
Reviewed-by: Olivier Fourdan <ofourdan@redhat.com>
Reviewed-by: Jonas Ådahl <jadahl@gmail.com>
2019-07-17 10:04:25 +02:00
Chia-I Wu
fb9b2a8731 linux-dmabuf: clarify DRM_FORMAT_MOD_INVALID
DRM_FORMAT_MOD_INVALID means to derive the modifier from the dmabuf.
It provides legacy support and makes it easier to replace wl_drm.

v3: DRM_FORMAT_MOD_INVALID must be advertised to be supported (which
    requires a version bump)
v4: no version bump, but a note for now

Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.com>
Reviewed-by: Simon Ser <contact@emersion.fr>
Reviewed-by: Daniel Stone <daniels@collabora.com>
2019-05-02 12:30:32 +01:00
Alexandros Frantzis
57423eac60 linux-explicit-synchronization: Clarify implicit synchronization guarantees of release events
Clarify that after zwp_buffer_release_v1 events, otherwise unused
buffers can be reused without any additional implicit synchronization.
This is in contrast to wl_buffer.release, which doesn't guarantee that
implicit synchronization is not required to safely use a buffer after
the event is received.

Signed-off-by: Alexandros Frantzis <alexandros.frantzis@collabora.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.com>
2018-12-14 14:01:54 +02:00