Commit graph

534 commits

Author SHA1 Message Date
Jonas Ådahl
02e63e74a8 build: Bump version to 1.48
Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
2026-04-01 13:46:29 +02:00
Simon Ser
b9f6234b34 xdg-session-management-v1: disallow adding a toplevel twice
It doesn't make sense to add a toplevel twice to the same session,
or to two separate sessions.

Signed-off-by: Simon Ser <contact@emersion.fr>
2026-04-01 12:41:10 +02:00
Simon Ser
2b190f1470 xdg-session-management-v1: add invalid_reason protocol error
Compositors need to check that the reason is a valid enum value.

Signed-off-by: Simon Ser <contact@emersion.fr>
2026-04-01 12:36:07 +02:00
Carlos Garnacho
9c488a0b10 text-input: Add preedit text hints
There seems to be some demand from input methods to be able
to style different parts of the preedit string differently.
Since the reasons to do that are many, and vary between IMs
and languages.

But even though some IMs would much want to be able to specify
colors, they lack the context to know what choice of colors
provides enough contrast and legibility embedded on foreign
UIs (e.g. accounting things like themes, accessibility, ...).

There is a proposal for a semantic closed list of pre-edit
styling options at https://github.com/ibus/ibus/wiki/Wayland-Colors,
which this commit follows, so clients and UIs have more freedom
in displaying a suitable style to pre-edit strings.

Signed-off-by: Carlos Garnacho <carlosg@gnome.org>
2026-03-23 10:09:24 +01:00
Carlos Garnacho
d4f629ac84 text-input: Add show/hide_input_panel requests
These requests allow clients to explicitly declare the desired
interaction pattern with input panels (e.g. the system OSK).
This allows clients to decide a fine grained pattern to show/hide
these panels that is decouple of enable/disable requests.

This may help them enhance the experience with e.g. selecting
text, or navigating around large bodies of text without an
intrusive OSK, or implementing other UI patterns like a "show OSK"
button.

Signed-off-by: Carlos Garnacho <carlosg@gnome.org>
2026-03-23 10:09:24 +01:00
David Edmundson
63cd4c3258 unstable/text-input: Add language hint from IME to clients
Some input methods such as a virtual keyboard allow a user to switch
between different languages. This is important to clients as some
languages should be rendered as RTL or change font rendering.

Signed-off-by: David Edmundson <davidedmundson@kde.org>
2026-03-23 10:09:24 +01:00
Tadeo Kondrak
1f4623f026 text-input: Add actions
In some environments it is desirable to show an input panel UI (e.g. OSK)
that is able to perform miscellaneous actions other than inserting text.
Add the framework for this, the available actions may be extended in later
versions of the protocol.

Signed-off-by: Tadeo Kondrak <me@tadeo.ca>
2026-03-23 10:07:15 +01:00
dcz
90be04e6ff text-input: Reword and clarify cursor syncing
This change makes it clear that there's an extra buffer for the value.
This explains the purpose of the complicated design.

Signed-off-by: Dorota Czaplejewicz
2026-03-23 10:07:15 +01:00
Tadeo Kondrak
e1e1ce5e6e text-input: Synchronize set_cursor_rectangle with the wl_surface
Currently, the after-effects of the set_cursor_rectangle request on
the input method UI and the client-side redraws are not guaranteed
to be atomic.

Add the requirement for compositors handling the newer version of
the protocol to make the set_cursor_rectangle request visually
effective with the same wl_surface.commit.

Signed-off-by: Tadeo Kondrak <me@tadeo.ca>
2026-03-23 10:03:11 +01:00
Tadeo Kondrak
5392d4e8b8 text-input: Add preedit_shown flag
Some clients don't show preedit text inline, so the compositor may
want to display the preedit text in a popup window instead.

Signed-off-by: Tadeo Kondrak <me@tadeo.ca>
2026-03-23 10:03:11 +01:00
fujiwarat
078f7af59b text-input: Add no Emoji input
Allow hinting input methods about if Emoji support is not useful
for special applications likes IDE, which manage or debug other
applications.

Fixes: #79

Signed-off-by: fujiwarat <takao.fujiwara1@gmail.com>
2026-03-23 10:03:11 +01:00
Dorota Czaplejewicz
d061b41fe1 text-input: Add on_screen_input_provided hint
The new hint is meant to indicate that the text input already provides an
on-screen means to enter data, and that using the system provided input
method may not be needed.

It should be used when the client presents the user with a custom on-screen
input method, like an on-screen keyboard, or perhaps a dropdown list.

The new hint is meant to address the issue when the system input method is an
on-screen keyboard. Without the hint, the input method would not know that it's
not needed, unless the client refrained from using the input method protocol
at all.

With the hint, the input method can still be enabled, while not displaying a
second on-screen keyboard. This allows for the system input method to still
provide accessibility services, as well as text completion or prediction.

Based on discussion in https://gitlab.gnome.org/GNOME/gtk/merge_requests/978

Signed-off-by: Dorota Czaplejewicz <dorota.czaplejewicz@puri.sm>
2026-03-23 10:02:16 +01:00
Mike Blumenkrantz
deddd9fe29 staging: Add xdg-session-management protocol
For a variety of cases it's desirable to have a method for negotiating
the restoration of previously-used states for a client's windows. This
helps for e.g., a compositor/client crashing (definitely not due to
bugs) or a backgrounded client deciding to temporarily destroy its
surfaces in order to conserve resources.

This protocol adds a method for managing such negotiation and is loosely
based on the Enlightenment "session recovery" protocol which has been
implemented and functional for roughly two years.

v2: Address review comments
v3: Add xdg_toplevel_session_v1.restore event. Move delete toplevel
    request to xdg_toplevel_session_v1. Remove surface argument from
    xdg_toplevel_session_v1.restored. Remove unused 'invalid_restore'
    (same intent as 'already_mapped'). Add 'invalid_session_id' error.
    Specify size limits and other documentation improvements.

Signed-off-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
Signed-off-by: Carlos Garnacho <carlosg@gnome.org>
2026-03-23 09:19:53 +01:00
PolyMeilex
e7bbd78978
tablet: Fix number of modes docs typo
Signed-off-by: Bartłomiej Maryńczak <marynczakbartlomiej@gmail.com>
2026-03-07 01:15:24 +01:00
Diego Viola
8fcd62b39d treewide: fix typos
Signed-off-by: Diego Viola <diego.viola@gmail.com>
2026-03-03 02:49:30 -03:00
dcz
b1f15f8dbf xx-text-input: Add missing action.none
Signed-off-by: Dorota Czaplejewicz <gilapfco.dcz@porcupinefactory.org>
2026-02-26 13:50:16 +02:00
Ian Douglas Scott
f0b6bb7b8c pointer-gestures: Add <copyright> section
This protocol seemed to be the only one missing a copyright section.

Signed-off-by: Ian Douglas Scott <idscott@system76.com>
2026-02-19 16:31:43 +01:00
Matthias Klumpp
ee95f9899e toplevel-icon: Minor style fixes
Replaced some tabs with spaces and fixed a minor grammar issue.

Signed-off-by: Matthias Klumpp <matthias@tenstral.net>
2026-02-05 18:04:10 +00:00
dcz
00dd05f34b xx-keyboard-filter: Clarify destruction
Signed-off-by: Dorota Czaplejewicz <gilapfco.dcz@porcupinefactory.org>
2026-02-05 17:08:02 +00:00
dcz
e1b195d3d5 xx-text-input, xx-input-method: Fix sync: relax serial, relax applying changes
Synchronization is only needed for 3 things:
- to let the input method know when its update was applied not like it expected,
- especially when a byte index stopped being on bytes boundary due to extra change and a retry is needed,
- to break off events coming to an old text input after focusing a new one.

The one big change of this is relaxing the contract of the input method. The application now doesn't apply the changes exactly.

"delete_surrounding_text" is the only affected place so far, now it mentions the unexactness explicitly. The change is necessary because without strict sync, the input method can't know if it's sending messages aligned on code point boundaries.

This solves 90% of the retry problem.

Such problems all stem from text changing near the caret, where the user already has an expectation of weird interactions (multi-user typing over each other - IME garbage in, text garbage out), or the user expects something that the input method can't correct (text to emoji substitution should not result in a retry due to unexpected output, making this work with IME is the client's problem).

The other big change is keeping sync for the purpose of switching text fields.

Hopefully this is enough for everyone, and it stays more or less compatible.

Signed-off-by: Dorota Czaplejewicz <gilapfco.dcz@porcupinefactory.org>
2026-02-05 18:10:20 +02:00
dcz
de27273a78 xx-input-method: Clarify deleting selection
Signed-off-by: Dorota Czaplejewicz <gilapfco.dcz@porcupinefactory.org>
2026-02-05 18:10:20 +02:00
Matthias Klumpp
81632409f6 experimental: Add xx-zones protocol for window positioning in zones
This protocol provides a way for clients to create and add windows to
"zones".

A zone is a isolated environment with its own coordinate space where
clients can add and arrange toplevels that logically belong to each
other.
It provides means for, among other things, requesting that windows are
placed at specific coordinates within the zone coordinate space.

The protocol includes a request to retrieve the extents of the
server-side frame, so that it may be taken into consideration when
positioning server-decorated windows relative to one another.

Signed-off-by: Matthias Klumpp <matthias@tenstral.net>
2026-02-05 17:56:19 +02:00
Simon Ser
fedde2456e xdg-decoration: allow get_toplevel_decoration with a mapped toplevel
When clients create an xdg_toplevel_decoration object, they opt-in for
being self-decorated by the compositor if it decides to. Clients have no
way to prevent the compositor from potentially decorating them, if they
don't want any decorations they should destroy the
xdg_toplevel_decoration object.

Some toolkits allow toggling toplevel decorations at runtime. In this
case they need a way to transition from having no decorations at all to
a state where they can be decorated.

Allow creating an xdg_toplevel_decoration object on an already-mapped
toplevel to accomodate for this use-case.

Signed-off-by: Simon Ser <contact@emersion.fr>
Closes: https://gitlab.freedesktop.org/wayland/wayland-protocols/issues/9
2026-02-05 08:49:20 +00:00
Guido Günther
ea7ff8255e experimental: Add xx-cutouts protocol
This protocol allows compositors to send information about cut out
display areas to clients. This way compositors can describe display
notches, waterfalls and low resolution areas to clients so that these
can avoid placing important information there.

This is a copy of
https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/372
adjusted for the experimental namespace.

Helps: #87

Signed-off-by: Guido Günther <agx@sigxcpu.org>
2026-02-03 16:29:10 +01:00
Pekka Paalanen
2654a53845 staging/color-management: target_primaries unconditional
The interface description says the target_primaries event is mandatory,
but event documentation disagreed. Fix the disagreement by requiring the
event always.

This saves the compositor from figuring out whether to send the event or
not. I do not know what compositors do today, but sending the event is
definitely safe. Compositors that do not always send the event are
retroactively deemed buggy.

Fixes: https://gitlab.freedesktop.org/wayland/wayland-protocols/-/issues/305

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
2026-01-21 10:31:10 +02:00
Sebastian Wick
3dac056d83 README: Add expectations for unmerged protocol compatibility
Signed-off-by: Sebastian Wick <sebastian.wick@redhat.com>
2026-01-16 10:34:26 +02:00
Sebastian Wick
7bc5f7355c README: Do not special case experimental protocol compatibility rules
Signed-off-by: Sebastian Wick <sebastian.wick@redhat.com>
2026-01-16 10:34:26 +02:00
Sebastian Wick
579a70d5c4 README: Make backwards compatibility requirements more obvious
Protocols in all stages have the same rules for compatibility, just
different expectations of how often breaking changes, and thus major
protocol versions, get introduced.

Signed-off-by: Sebastian Wick <sebastian.wick@redhat.com>
2026-01-16 10:34:26 +02:00
Sebastian Wick
c3641ed4c9 README: Document each protocol phase
Instead of documenting parts of each phase in different chapters,
document all the details about a specific phase in one chapter.

Signed-off-by: Sebastian Wick <sebastian.wick@redhat.com>
2026-01-16 10:34:26 +02:00
Sebastian Wick
d070658b1e README: Refer to protocol in specific phases instead of directories
We now have a bunch of protocol phases which we can refer to. Mentioning
protocols by the implementation detail of in which directory they are is
a bit roundabout.

This change makes sure that protocol phases are used when possible and
mentions the directory structure exhaustively in a single place.

Signed-off-by: Sebastian Wick <sebastian.wick@redhat.com>
2026-01-16 10:34:26 +02:00
Sebastian Wick
e898d4bac9 README: Get rid of the protocol extension/extension terminology
We used to call extensions to core wayland `protocol extensions`. This
terminology has been dying out and we simply refer to those things as
`protocols`. In fact, the README already uses `protocol extension`,
`extension` and `protocol` interchangeably, so let's just stick to the
modern `protocol` terminology.

Signed-off-by: Sebastian Wick <sebastian.wick@redhat.com>
2026-01-16 10:34:26 +02:00
Sebastian Wick
585814fff7 README: Protocols in experimentla are in the experimental phase
Same as the previous commit. No need for duplicate names for the same
concept.

Signed-off-by: Sebastian Wick <sebastian.wick@redhat.com>
2026-01-16 10:34:26 +02:00
Sebastian Wick
1499ca7254 README: Protocols in staging are in the staging phase
There is no need for two names to refer to the same thing. Let's rename
the `testing` phase to the `staging` phase.

Signed-off-by: Sebastian Wick <sebastian.wick@redhat.com>
2026-01-16 10:34:26 +02:00
Julian Orth
a610e021fb pointer-gestures: fix versions of some interfaces
These interfaces should all have the same version as the global.

Signed-off-by: Julian Orth <ju.orth@gmail.com>
2026-01-12 13:26:14 +01:00
Simon Ser
969ef1a36d build: use Meson pkgconfig module
This depends on:
47633330da

Signed-off-by: Simon Ser <contact@emersion.fr>
2025-12-27 12:33:31 +01:00
dcz
a6ac326be3 Add xx-keyboard-filter to build
Signed-off-by: Dorota Czaplejewicz <gilapfco.dcz@porcupinefactory.org>
2025-12-16 11:34:29 +02:00
dcz
d05776918e Add xx-keyboard-filter protocol
Signed-off-by: Dorota Czaplejewicz <gilapfco.dcz@porcupinefactory.org>
2025-12-16 11:34:29 +02:00
dcz
9b0e303048 xx-input-method-v2: Add actions including selection finishing
This update solves the mobile problem of the "enter" key.
It also makes precise cursor placement possible from the IME.

Signed-off-by: Dorota Czaplejewicz
2025-12-16 09:15:32 +00:00
Tadeo Kondrak
a0387bdc70 experimental/text-input: Add actions
Signed-off-by: Tadeo Kondrak <me@tadeo.ca>
2025-12-16 09:15:32 +00:00
Jonas Ådahl
88223018d1 build: Bump version to 1.47
Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
2025-12-15 16:16:01 +01:00
Julian Orth
a5caef14e7 color-management: add wp_image_description_reference_v1
Note that wp_image_description_v1 is not a frozen interface. Therefore
it must always be a descendant of wp_color_manager_v1.

In order to allow other protocols, such as ext-image-capture-source-v1,
to define the equivalent of
wp_color_management_output_v1.get_image_description, we must therefore
create an indirection between the new protocol and
wp_image_description_v1 that is resolved through wp_color_manager_v1
itself.

This is a prerequisite for adding color management support to the
ext-image-copy-capture-v1 protocol.

Signed-off-by: Julian Orth <ju.orth@gmail.com>
2025-12-12 10:53:36 +02:00
Pekka Paalanen
70442afc16 staging/color-management: replace two-piece TF
ICC-based calibrated print workflows have generally used the sRGB
two-piece transfer characteristic. The CRT era monitors were exclusively
power curve, but print workflows used software calibration to meet the
two-piece curve. Everyone else used the monitor native transfer
characteristic.

Acknowledge that both ways exist, and allow describing both as what they
are.

Mesa is already using "srgb" if it is available, for programs that
actually expect gamma22. Exposing "srgb" with its literal definition
would make a compositor (KWin has been named) appear regressing in
picture quality. The same with "ext_srgb" as Mesa used to map
VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT to it, probably incorrectly.

sRGB is specified to use a power-law 2.2 display, and reality is not
consistent. Some compositors take srgb to mean gamma22 already, so there
is practical ambiguity.  There are also endless discussions about which
one sRGB actually is and when: power-law 2.2 or the piece-wise function.
Monitors are manufactured both ways and they are often even switchable
between the two. Therefore deprecate the "srgb" value, it is too easy to
pick and assume one behavior while someone else assumes the other
behavior.

Additionally, extending the range beyond 1.0 would significantly diverge
between srgb and gamma22 because of the different exponent. Assuming
that ext_srgb is identical to srgb for [0.0, 1.0] would conflict with a
compositor that takes srgb as gamma22 but implements ext_srgb by the
piece-wise function.

Given that monitors with the piece-wise function exist or are calibrated
to it, and materials are prepared on them, add a new value explicitly
for the sRGB piece-wise function. Its name deliberately does not include
"srgb".

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
2025-12-12 10:51:10 +02:00
Pekka Paalanen
e2bacdd2ab staging/color-management: forbid advertising deprecated
This puts more pressure in making sure that deprecated items will be
retired.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
2025-12-12 10:51:10 +02:00
Xaver Hugl
949014753c color-management: add absolute_no_adaptation rendering intent
This rendering intent is a modified absolute rendering intent that
assumes the viewer is not adapted to the display white point, so no
white point adaptation between surface and display is done.
This can be useful for color proofing applications.

Signed-off-by: Xaver Hugl <xaver.hugl@kde.org>
2025-12-12 10:46:36 +02:00
Pekka Paalanen
1a6f2cec71 staging/color-management: add ready2 event
A 32-bit image description identity number could theoretically wrap
around in 1.4 years if a new one is allocated 100 times per second.

Compositors that avoid 32-bit wrap-around are allowed to aggressively
recycle numbers, which poses a requirement on clients to hold on to the
image description object in order to keep its number live. Clients might
not do so regardless of documentation, and on compositors that recycle
only after wrap-around clients would not see any problems. This could
cause strange issues in clients on former kind of compositors.

In order to avoid all that, introduce a new 64-bit image description
identity number which has no fear of wrap-around, and require such
numbers to be never recycled. This makes the compositor number allocator
trivial, and clients are more likely to handle it correctly by accident.

Fixes: https://gitlab.freedesktop.org/wayland/wayland-protocols/-/issues/246

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
2025-12-12 10:43:48 +02:00
Dudemanguy
b0b1010301 staging/color-management: loosen restriction on maxCLL and maxFALL
ANSI/CTA-861-H does not require that maxCLL or maxFALL be within the
Mastering Display Luminance range, and it is common for movies to have a
maxCLL greater than the Mastering Display Luminance. Additionally,
Microsoft's own documentation* contains an example that does not pass
the restriction in the protocol. These values are valid, used in the
real world, and clients should not need to discard them. We keep the
requirement that maxFALL <= maxCLL since that is required, but these
values have no relation to the Mastering Display Luminance.

See #263 for further details on why the restriction on maxCLL and
maxFALL is not desirable. Fixes #263.

*: https://learn.microsoft.com/en-us/windows/win32/api/dxgi1_5/ns-dxgi1_5-dxgi_hdr_metadata_hdr10

Signed-off-by: Dudemanguy <random342@airmail.cc>
2025-12-12 10:41:04 +02:00
Simon Ser
6141e11543 build: bump version to 1.46
Signed-off-by: Simon Ser <contact@emersion.fr>
2025-11-23 22:22:52 +01:00
Pekka Paalanen
ce96b5f177 staging/color-management: target color volume defines the bounds
In an attempt to specify clipping behavior[1] it was found that it would
lead to predictable behavior turning into undefined behavior when a
compositor gains support for extended_color_volume. That would be
awkward.

Instead of specifying clipping to the primary color volume bounds (which
may then disappear), let's leave it undefined, and emphasize the
undefined-ness of exceeding the target color volume instead.

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

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
2025-11-18 16:57:40 +02:00
Simon Ser
0b8283f7f3 ci: upgrade Debian to Trixie
Signed-off-by: Simon Ser <contact@emersion.fr>
2025-11-15 22:55:23 +01:00
Pekka Paalanen
e2af3e97ce staging/color-management: parametric is ICC Display
Make the connection between parametric image descriptions and Display
class ICC profiles, for clarity.

Suggested-by: Dmitry Kazakov (@dimula73)
Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
2025-11-04 14:25:08 +02:00