Skip to content

Update wlroots to version 0.20.2 - #1249

Draft
zzxyb wants to merge 329 commits into
linuxdeepin:masterfrom
zzxyb:new
Draft

Update wlroots to version 0.20.2#1249
zzxyb wants to merge 329 commits into
linuxdeepin:masterfrom
zzxyb:new

Conversation

@zzxyb

@zzxyb zzxyb commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

Summary by Sourcery

Update vendored wlroots to 0.20.2 and integrate its new color management, rendering, and protocol features while adapting local Waylib/Qt glue code.

Enhancements:

  • Adopt wlroots 0.20.2 APIs across the codebase, including renderer, scene graph, output, and DRM backends.
  • Enable full color management and HDR support, including transfer functions, primaries, YCbCr encodings, and gamma handling via color transforms instead of legacy LUTs.
  • Refine direct scan-out, syncobj timelines, and buffer lifecycle handling for more robust frame pacing and release signaling.
  • Extend Vulkan and GLES2 render paths to support new color transforms, 3D LUTs, and YCbCr sampling, plus additional pixel formats.
  • Improve Xwayland integration with better cursor handling, focus management, NET_WM icon and hints support, and stricter property parsing.
  • Expose new Wayland protocols (color-management-v1 v2, color-representation-v1, ext-workspace, updated ext-image-copy-capture) and hook them up to scene surfaces and outputs.
  • Modernize tinywl and wlroots utilities, bumping protocol and dependency versions and adding a release script.

Build:

  • Bump wlroots version metadata to 0.20.2 and tighten required versions for Wayland, libdrm, xkbcommon, pixman, and Vulkan-related dependencies.
  • Adjust Meson and CMake build glue for new source files, protocols, and feature detection (e.g., Linux sync_file, GBM, libdisplay-info).

Tests:

  • Update tinywl example to the new wlroots version and protocol usage, keeping it building and running against 0.20.2.

Chores:

  • Align local Waylib and Qt wrappers (qw*) with new wlroots APIs for color transforms, scene frame events, gamma control, and Xwayland cursors.

asterwyx and others added 30 commits July 18, 2025 18:12
Global should be created after all other initialization finished.
Free manager in err_options.
Check if image description is valid. If not, post error to client.
The cursor can be expected to also be transformed if the output is
transformed.
During suspend, we first disable output and then remove the input device.
This causes cursor->state->surface released while cursor->texture leaves.
Which leads to use-after-free after resume.
Remove the redundant wlr_ext_foreign_toplevel_image_capture_source_v1
struct that was not used anywhere in the codebase.
color-representation was added in 1.44.

Fixes: eff6207
This makes it easier for protocol implementers to tie everything
together with wlroots backends and renderers.
Add listener for wlr_seat->pointer_state.events.focus_change

Fix #3802
This reports the output properties according to the current image description.
Firefox needs this to report HDR support to documents, at least.

v2: Move abort() calls out of switch to eliminate default case. Rename
    functions so they don't use a wlr_ prefix like public functions do.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
Fixes #4001

Reported-by: CreeperFace / @dy-tea
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
We can't expect all clients to support all fancy formats.
WebRTC's reference implementation doesn't support 10-bit formats
yet. More generally, clients are limited by the libraries they
use: for instance, Pixman doesn't implement all OpenGL/Vulkan
formats.

Another MR [1] suggests advertising all render formats. This is a
bit heavy-handed because:

- Upgrading a 8-bit buffer to a 10-bit buffer doesn't make a lot
  of sense. I don't think the compositor should expose arbitrary
  pixel format conversions.
- The protocol has no preference order. Clients generally pick the
  first format they receive and support.

As an alternative, only advertise two fallback formats, ARGB8888
and XRGB8888. These two are already hard-required by wl_shm and
all clients should be able to handle them.

[1]: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/5019
When we fail to render the cursor (in my case because the cursor is too
large) we bail out of the output_cursor_attempt_hardware function. This
causes output_cursor_set_texture to clean up after us, but we've already
cleared the hardware_cursor, and so output_disable_hardware_cursor
thinks we don't have a hardware cursor to disable.

We shouldn't modify the hardware_cursor variable before we've
successfully changed the hardware cursor, this way the caller can clean
up after us like it expect to.

This was brought up by an actual bug when playing the game Kaizen. Which
uses oddly sized cursors, that fell back to software cursors for me, and
left the hardware cursor hanging around. This change has been tested to
fix that.

During the testing of this change, I have noticed that the previous code
worked fine the first time the cursor was switch to software. It only
failed on subsequent attempts. I haven't figured out why that is.
…_commit()

We were iterating over involved outputs, applying the new state and
sending the commit event for each one. This resulted in commit
events being fired while we weren't done applying the new state for
all outputs.

Fix this by first applying all of the states, then firing all of
the events.

Closes: swaywm/sway#8829
This is possible now that w-p ships enum headers. The remaining includes
are from wlr-protocols.
wlr_output_from_resource() can return NULL if the outputs no longer
exists on the compositor side.

Closes: swaywm/sway#8847
Signed-off-by: xurui <xurui@kylinos.cn>
Signed-off-by: xurui <xurui@kylinos.cn>
We don't need to do this anymore for wayland-protocols.
We pass an alpha multiplier plus a luminance multiplier now.

Fixes the following validation layer error:

    vkCmdPushConstants(): is called with
    stageFlags (VK_SHADER_STAGE_FRAGMENT_BIT), offset (80), size (72)
    but the VkPipelineLayout 0x510000000051 doesn't have a VkPushConstantRange with VK_SHADER_STAGE_FRAGMENT_BIT.
    The Vulkan spec states: For each byte in the range specified by offset and size and for each shader stage in stageFlags, there must be a push constant range in layout that includes that byte and that stage (https://docs.vulkan.org/spec/latest/chapters/descriptorsets.html#VUID-vkCmdPushConstants-offset-01795) (VUID-vkCmdPushConstants-offset-01795)

Fixes: 56d95c2 ("render/vulkan: introduce wlr_vk_frag_texture_pcr_data")
Use the array size instead.
Add deprecation notice for wlr_data_control_v1, indicating that
it's superseded by ext-data-control-v1.

Related: https://gitlab.freedesktop.org/wlroots/wlr-protocols/-/merge_requests/136
We grab header files from there, ensure include directories are
properly set up when building wlroots.

Fixes missing header files when a wayland-protocols subproject is
used.
Upon leasing, the wlr_drm_lease_connector_v1 will be automatically clean up by the wlr_output
destroy handler. There is no need for the wlr_drm_lease_manager to keep track of leased connectors.
kennylevinsen and others added 25 commits May 11, 2026 10:36
When locking surface state, surface_cache_pending will move the pending
surface state to a new, empty `wlr_surface_state`. This new surface
state will only contain the fields committed in the pending state, as
surface_state_move does not copy anything else.

surface_update_damage is called before we move state from pending to
current to merge buffer damage and surface damage, and it expects that
the pending surface state still contains prior committed details such as
scale and transform. This is not the case when we finally commit the
cached surface state.

Move surface_update_damage after surface_state_move and make it operate
purely on the current surface state.

(cherry picked from commit fba00c4a04f7fcd4144d51d51915e33421b04950)
Signed-off-by: xurui <xurui@kylinos.cn>
(cherry picked from commit 19df074c1615cf71633c9a022799e78bc72040ce)
In handling scene buffer output updates, wlroots would send a leave event to
all entered outputs, even those that the scene root for the scene output update
event did not own. Leaving the output list inaccurate.

Sending leave events only for the given scene introduces a problem, though:
existing logic to de-duplicate leave events stops us from sending a leave event
when we leave all the outputs in a scene, and when the surface then becomes
visible in another scene, the frame pacing output cannot be selected
accurately. This breaks screen capture for off-screen windows in sway.

So, let us also mark outputs that would have been left but were spared by the
deduplication logic as "suspended" indicating they are ineligible as frame
pacing outputs.

Fixes: swaywm/sway#9094
(cherry picked from commit e532b4c26c53b60cca6e7bb998f6e12c6e47dfca)
The size of the VLA is client-controlled and can overflow the
stack. Instead, allocate on the heap.

Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/work_items/4090
(cherry picked from commit cb0fa9b0a3883689179532c20a67cc8ea3b53969)
These values must not be mutated, they are owned by the
xcb_get_property_reply_t.

(cherry picked from commit 9d6c9e8783f1eef575aee450a146d4fdc8ad2978)
We advance the class pointer here, but we forgot to decrease the
length.

(cherry picked from commit 851cdd0089004884bd85a95ad21f04009cb5a53a)
Make it clear this doesn't contain a single atom.

(cherry picked from commit 5cb537395966bd96768b5ddc870894940932ae5e)
This field is difficult to use correctly, its meaning depends on
format.

xcb docs read:

> You should use the corresponding accessor instead of this field.

Replace all uses with the safe accessor.

This fixes potential out-of-bounds array accesses when the format
field isn't what we expect.

(cherry picked from commit c91543352aff18052946e6ac3703a152f66307d7)
(cherry picked from commit 73d6968cd00c7549677fcc3c4a4ae4f9b012c41f)
Make it clearer what's up.

(cherry picked from commit 041aa8c0488a4bcfab220aaa841e926a5639d788)
…ACE_ID

xwayland_surface_associate() asserts that the surface has not yet
been associated yet. Arbitrary clients can send these messages,
don't abort when that happens.

(cherry picked from commit 8154d80a4d39e03c1ccc80b9a2e8a04b40a2091e)
wlr_surface_from_resource() asserts that the object is a wl_surface.
Since arbitrary clients can send such messages, avoid aborting on
invalid input.

Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/work_items/4093
(cherry picked from commit c6e2af1155257f92857bbd05ac4d721a86c4cc5a)
Without this check, the reply value might be smaller than
xcb_window_t and will result in an invalid memory read.

Reported-by: Tristan <TristanInSec@gmail.com>
(cherry picked from commit 63318d28b1ea86873eeb1023d88e56d57bdd2453)
When a xwayland surface is destroyed, its children's parent pointer
is set to NULL, but the set_parent signal was not emitted.

(cherry picked from commit a94cd29eb13fc2fb68f2fe2d053fef29fb6ae712)
The comparison done in `scene_buffer_send_dmabuf_feedback()` is
sufficient.

Close https://gitlab.freedesktop.org/wlroots/wlroots/-/work_items/4088

(cherry picked from commit 3bd8f29b138e2832870ad05a9386002fcc79e0fc)
Signed-off-by: xurui <xurui@kylinos.cn>
(cherry picked from commit 6dcc061a7946430428c82cdb2609aeb1956eafa8)
…e_outputs()

A node can have a visible area outside the output layout bounds.
In that case, it will not pass the overlap check. For instance,
with a single output, a 100x100 px weston-simple-shm would stop
animating when moving it close to an edge and leaving less than a
~30x30 px square visible.

Fix this by intersecting the node's visible region with the output
layout region so that the 10% overlap target is always reachable.

Switch to a strict comparison in case visible_area is zero.

(cherry picked from commit d70c84b5717dafd922f434b022873b7f1b276543)
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/work_items/3949
(cherry picked from commit 327f000532e96329280e06eb12af2d98071ac023)
# Conflicts:
#	3rdparty/wlroots/meson.build
#	3rdparty/wlroots/render/vulkan/pass.c
#	3rdparty/wlroots/types/scene/surface.c
Detect linux/sync_file.h through CMake and expose the result in the
generated internal config.h, matching the Meson configuration.

This prevents wlr_linux_drm_syncobj_v1.c from failing to compile
because HAVE_LINUX_SYNC_FILE is undefined.

Log: fix wlroots CMake build failure
Influence: wlroots CMake builds compile linux-drm-syncobj support successfully
 Add #define static guards around wlroots headers that use C99
 [static N] array parameter syntax, including wlr/backend.h and
 color-related headers, so C++ consumers can parse wlroots 0.20
 headers correctly.

 Log: fix C++ build errors from wlroots static array parameters
 Influence: qwlroots C++ targets compile with wlroots 0.20 headers
Upgrade the vendored wlroots sources and dependencies from 0.19.3
to 0.20.2, and adapt qwlroots and waylib to the updated color
transform, scene frame, input, text-input, XWayland, and image
capture APIs.

Replace gamma LUT state handling with reference-counted color
transforms, and add the newly introduced wlroots sources and
staging protocols.

Log: upgrade wlroots and adapt compositor integrations to 0.20.2
Influence: treeland and waylib build with wlroots 0.20.2
@deepin-ci-robot

Copy link
Copy Markdown

Skipping CI for Draft Pull Request.
If you want CI signal for your change, please convert it to an actual PR.
You can still manually trigger a test run with /test all

@deepin-ci-robot

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: zzxyb

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown

CLA Assistant Lite bot:

如果你是以企业贡献者的身份进行提交,请联系我们签署企业贡献者许可协议
If you submit as corporate contributor, please contact us to sign our Corporate Contributor License Agreement

感谢您的提交,我们非常感谢。 像许多开源项目一样,在接受您的贡献之前,我们要求您签署我们的个人贡献者许可协议。 您只需发布与以下格式相同的评论即可签署个人贡献者许可协议
Thank you for your submission, we really appreciate it. Like many open-source projects, we ask that you all sign our Individual Contributor License Agreement before we can accept your contribution. You can sign the Individual Contributor License Agreement by just posting a Pull Request Comment same as the below format.


I have read the CLA Document and I hereby sign the CLA.

3 out of 20 committers have signed the CLA.
✅ asterwyx
✅ wineee
✅ zccrs
❌ any1
❌ emersion
❌ llyyr
❌ qaqland
❌ kode54
❌ DelusionalLogic
❌ vyivel
❌ xurui
❌ bl4ckb0ne
❌ tokyo4j
❌ cillian64
❌ liupeng
❌ kennylevinsen
❌ poisotf
❌ sahinf
❌ David96
❌ agx
xurui, liupeng seem not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.
You can retrigger this bot by commenting recheck in this Pull Request

@sourcery-ai

sourcery-ai Bot commented Aug 5, 2026

Copy link
Copy Markdown

Reviewer's Guide

Update vendored wlroots to 0.20.2 and integrate new upstream features: color management and HDR support, Vulkan color pipeline changes, Xwayland/X11 robustness tweaks, DRM timeline and HDR metadata, Wayland protocol updates, and corresponding Waylib/QW bindings, while refactoring scene graph, cursor, and output handling to use new APIs.

Sequence diagram for color-managed frame rendering and HDR output

sequenceDiagram
  participant SceneOutput as wlr_scene_output
  participant Renderer as wlr_renderer
  participant VkPass as vulkan_begin_render_pass
  participant DRM as drm_atomic_connector_prepare

  SceneOutput->>SceneOutput: wlr_scene_output_build_state(state, options)
  Note right of SceneOutput: scene_output_combine_color_transforms()
  SceneOutput->>Renderer: wlr_renderer_begin_buffer_pass(buffer, buffer_pass_options{ color_transform })
  Renderer->>VkPass: vulkan_begin_render_pass(renderer, render_buffer, options)
  VkPass->>VkPass: unwrap_color_transform()
  VkPass->>VkPass: render_pass_add_texture(... transfer_function, primaries, color_encoding, color_range, luminance_multiplier)
  VkPass-->>Renderer: render_pass_submit()
  Renderer-->>SceneOutput: buffer rendered

  SceneOutput->>DRM: wlr_scene_output_build_state -> output_pending_image_description()
  DRM->>DRM: create_hdr_output_metadata_blob()
  DRM->>DRM: convert_primaries_to_colorspace()
  DRM-->>SceneOutput: updated state
  SceneOutput->>DRM: drm_atomic_connector_prepare()
  DRM->>DRM: drm_atomic_connector_apply_commit()
Loading

File-Level Changes

Change Details Files
Integrate wlroots 0.20.2 scene, color management, and output APIs into the existing compositor.
  • Include new color management headers in scene code and wire scene->color_manager_v1 with lifecycle listeners.
  • Change scene update/damage paths to accept const pixman regions and add logic to restack Xwayland surfaces only when enabled.
  • Add scene_node_cleanup_when_disabled to clear visibility, update outputs, and restack Xwayland surfaces below when nodes are disabled.
  • Extend wlr_scene_buffer with color transfer function, primaries, encoding, and range with setters that trigger scene_node_update.
  • Adjust frame_done handling to pass a structured wlr_scene_frame_done_event including output and timestamp.
  • Tighten primary_output selection by computing node visible area and ignoring outputs that intersect less than 10% of visibility.
  • Propagate render/output_sample events with DRM timelines for release signaling and add in/out timelines on scene outputs, including proper teardown and signaling on destroy.
  • Refactor output state handling to track image_description and color_transform, enforcing they’re only set when enabled and validating supported primaries/transfer functions.
3rdparty/wlroots/types/scene/wlr_scene.c
3rdparty/wlroots/types/scene/surface.c
3rdparty/wlroots/types/output/output.c
3rdparty/wlroots/include/wlr/types/wlr_scene.h
3rdparty/wlroots/include/types/wlr_scene.h
Add full color management stack (transfer functions, primaries, transforms, HDR metadata) and hook it into renderer backends (Vulkan, GLES2, Pixman, DRM).
  • Replace legacy sRGB-only color transform with a generalized pipeline supporting inverse EOTFs, 3x1D LUTs, matrices, LCMS2 pipelines, and composition utilities.
  • Implement transfer function evaluation for sRGB, ST2084 PQ, gamma2.2, BT1886 and default luminance helpers, plus primaries-to-XYZ and absolute colorimetric transforms.
  • Teach Vulkan renderer to handle multiple color transfer functions and encodings by introducing texture/output push-constant color matrices, luminance multipliers, and per-texture transform enums.
  • Add Vulkan-side color transform unwrapping, 3D LUT generation via wlr_color_transform_eval, and support multiple output pipelines (identity, sRGB, PQ, gamma22, BT1886).
  • Extend pixel format tables to include higher precision float and HDR-related formats and mark YCbCr formats via pixel_format_is_ycbcr; thread YCbCr encoding/range into Vulkan pipeline layouts and samplers.
  • Implement DRM-side HDR_OUTPUT_METADATA blob creation, colorspace property handling, and output image_description-based scanout decisions, including color_management_is_scanout_allowed checks.
  • Update GLES2 rect rendering to fast-path full-surface clears with glClear when fully opaque and unclipped, and add Pixman bilinear filtering with repeat padding.
3rdparty/wlroots/render/color.c
3rdparty/wlroots/render/color_lcms2.c
3rdparty/wlroots/render/color_fallback.c
3rdparty/wlroots/render/pixel_format.c
3rdparty/wlroots/render/vulkan/pass.c
3rdparty/wlroots/render/vulkan/renderer.c
3rdparty/wlroots/render/vulkan/pixel_format.c
3rdparty/wlroots/render/gles2/pass.c
3rdparty/wlroots/render/pixman/pass.c
3rdparty/wlroots/backend/drm/atomic.c
3rdparty/wlroots/backend/drm/legacy.c
3rdparty/wlroots/backend/drm/drm.c
3rdparty/wlroots/include/wlr/render/color.h
3rdparty/wlroots/include/render/color.h
3rdparty/wlroots/include/wlr/render/pass.h
3rdparty/wlroots/include/render/vulkan.h
3rdparty/wlroots/include/render/pixel_format.h
Update Wayland color management, color representation, and image description protocols and wire them into surfaces and outputs.
  • Bump color-management-v1 protocol version to 2 and update identity and transfer_function handling, including 64-bit image description identities and READY2/PREFERRED_CHANGED2 events.
  • Add helpers to translate between protocol and wlroots transfer function/primaries enums and expose lists of supported values based on renderer capabilities.
  • Implement wlr_color_representation_v1 manager and per-surface state to describe alpha mode, YCbCr coefficients, range, and chroma location, with validation against pixel formats and renderer-supported encodings.
  • Track per-surface preferred image descriptions based on outputs’ image_description and feed them into color_manager_v1 surface feedback, avoiding redundant updates.
  • Ensure deprecated protocols (screencopy-v1, data-control-v1, gamma-control-v1) are marked as such in docs and adjust behavior (eg fallback gamma sizes, more detailed errors).
3rdparty/wlroots/types/wlr_color_management_v1.c
3rdparty/wlroots/include/wlr/types/wlr_color_management_v1.h
3rdparty/wlroots/types/wlr_color_representation_v1.c
3rdparty/wlroots/include/wlr/types/wlr_color_representation_v1.h
3rdparty/wlroots/protocol/color-management-v1-protocol.h (generated)
3rdparty/wlroots/protocol/color-representation-v1.xml (via build scripts)
3rdparty/wlroots/types/scene/surface.c
Enhance Xwayland/X11 integration for cursor handling, focus, property parsing, and icons.
  • Change Xwayland cursor API to accept wlr_buffer instead of raw pixel pointers, adding buffer access and DRM_FORMAT_ARGB8888 checks in xwm_set_cursor and updating callers in xwayland and qwlroots.
  • Create a "no_focus_window" to use as NET_ACTIVE_WINDOW when no X11 surface is focused, and ensure it’s created, mapped, and destroyed properly.
  • Harden X11 property parsing: switch to const pointers, check value lengths, and guard against malformed WM_TRANSIENT_FOR, NET_WM_STATE, MOTIF_WM_HINTS, etc.
  • Expose new Xwayland surface events and helpers (set_size_hints, set_icon, fetch_icon, role/opacity parsing fixes) and update focus stacking to use no_focus_window when appropriate.
  • Improve XWM flush scheduling with poll-based readiness and update XCB XFixes disconnect mode usage conditioned on supported versions.
3rdparty/wlroots/xwayland/xwm.c
3rdparty/wlroots/xwayland/xwayland.c
3rdparty/wlroots/include/wlr/xwayland/xwayland.h
3rdparty/wlroots/include/xwayland/xwm.h
waylib/src/server/qtquick/wxwayland.*
qwlroots/src/types/qwxwayland.h
Refine scene-based output capture, ext-image-copy-capture, and ext-image-capture-source integration including foreign toplevel capture.
  • Implement a generic scene-node-backed ext_image_capture_source_v1 that wraps a synthetic wlr_output and scene_output for offscreen capture, with custom test/commit paths and frame event propagation.
  • Add ext_foreign_toplevel_image_capture_source_manager_v1 glue: accept requests, create scene-node sources, and integrate with ext_foreign_toplevel_list_v1 handles.
  • Tighten ext_image_copy_capture_v1 frame/cursor sessions to use explicit request_frame semantics, new_session notifications, and proper session destruction sequencing.
  • Ensure output image capture sources correctly derive buffer constraints from swapchain formats, including fallback formats, and use wlr_ext_image_copy_capture_frame_v1_ready with output transform and timestamp.
  • Expose helpers to map ext_image_capture_source_v1 back to wlr_output when managed by output-capture manager.
3rdparty/wlroots/types/ext_image_capture_source_v1/base.c
3rdparty/wlroots/types/ext_image_capture_source_v1/output.c
3rdparty/wlroots/types/ext_image_capture_source_v1/foreign_toplevel.c
3rdparty/wlroots/types/ext_image_capture_source_v1/scene.c
3rdparty/wlroots/types/wlr_ext_image_copy_capture_v1.c
waylib/src/server/utils/wextimagecapturesourcev1impl.cpp
waylib/src/server/utils/wextimagecapturesourcev1impl.h
waylib/src/server/protocols/ext_foreign_toplevel_image_capture_source_manager_v1.h
Update wlroots core version, build system, and dependencies to 0.20.2 and adjust downstream Waylib/QW bindings accordingly.
  • Bump wlroots version metadata (meson, CMake, release scripts) from 0.19.3 to 0.20.2, and adjust required library versions (wayland, libdrm, xkbcommon, pixman, wayland-protocols, gbm, libdisplay-info).
  • Wire new internal config flags (HAVE_LINUX_SYNC_FILE, HAVE_GBM_BO_GET_FD_FOR_PLANE removal) and include new util helpers (fd.c, mem.c, version.c) into builds.
  • Update TinyWL and X11 backends to new APIs (no xdg-shell generated header, improved cursor focus handling, stricter shm stride checks, better error handling in wayland-backend dispatch).
  • Adjust QW bindings and helpers (qwcolor, qwscene_buffer, qwoutput_state, qwcolormanagerv1, qwinputmethodv2, qwtextinputv3) to call new wlroots APIs and signal names (eg new_text_input/new_input_method, color_transform instead of gamma_lut).
  • Refresh protocol scaffolding lists in Meson/CMake to include new staging protocols (color-representation-v1, ext-workspace-v1, xdg-toplevel-tag-v1, fixes) and expose new managers (wlr_fixes, wlr_ext_workspace_manager_v1, wlr_xdg_toplevel_tag_manager_v1).
wlroots/meson.build
wlroots/CMakeLists.txt
wlroots/cmake/WlrootsSources.cmake
wlroots/cmake/WlrootsProtocols.cmake
3rdparty/wlroots/render/allocator/meson.build
3rdparty/wlroots/backend/drm/meson.build
3rdparty/wlroots/protocol/meson.build
3rdparty/wlroots/tinywl/*
qwlroots/src/render/qwcolor.h
qwlroots/src/types/qwscene.h
qwlroots/src/types/qwoutput.h
qwlroots/src/types/qwcolormanagerv1.h
qwlroots/src/types/qwinputmethodv2.h
qwlroots/src/types/qwtextinputv3.h
waylib/src/server/utils/*.cpp
waylib/src/server/utils/*.h

Possibly linked issues

  • #TODO wlroots 更新待做事项: PR performs wlroots 0.20.2 update and switches ext_foreign_toplevel_image_capture_source to upstream, matching the issue’s wlroots-update tasks

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@deepin-bot

deepin-bot Bot commented Aug 14, 2026

Copy link
Copy Markdown

TAG Bot

New tag: 0.8.18
DISTRIBUTION: unstable
Suggest: synchronizing this PR through rebase #1286

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.