logo

news_parse_ex

commit: a41b4ae5ec685fff120acbee9157eda351cb64fa
parent 3deab222dc3a9ed0e6bbd7d7c3a5e834a6361074
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date:   Tue, 27 Dec 2022 12:00:31 +0100

Add test on gitlab tag feed

URL of test/fixtures/gitlab/wlroots-2022-12-27.atom: https://gitlab.freedesktop.org/wlroots/wlroots/-/tags?format=atom

Diffstat:

Mlib/news_parse_ex.ex2+-
Atest/fixtures/gitlab/wlroots-2022-12-27.atom3368+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mtest/news_parse_ex_test.exs9+++++++++
3 files changed, 3378 insertions(+), 1 deletion(-)

diff --git a/lib/news_parse_ex.ex b/lib/news_parse_ex.ex @@ -7,7 +7,7 @@ defmodule NewsParseEx do def get_feed_type(doc) do with {_, {:ok, "feed"}} <- {:root_name, XML.string_from_xpath(~s[name()], doc)}, - {:ok, namespace} <- XML.string_from_xpath(~s[/feed/namespace::*], doc) do + {:ok, namespace} <- XML.string_from_xpath(~s{/feed/namespace::*[name()='']}, doc) do case namespace do "http://www.w3.org/2005/Atom" -> {:ok, :atom} e -> {:error, e} diff --git a/test/fixtures/gitlab/wlroots-2022-12-27.atom b/test/fixtures/gitlab/wlroots-2022-12-27.atom @@ -0,0 +1,3368 @@ +<?xml version="1.0" encoding="UTF-8"?> +<feed xmlns="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/"> +<title>wlroots tags</title> +<link href="https://gitlab.freedesktop.org/wlroots/wlroots/-/tags?format=atom" rel="self" type="application/atom+xml"/> +<link href="https://gitlab.freedesktop.org/wlroots/wlroots/-/tags" rel="alternate" type="text/html"/> +<id>https://gitlab.freedesktop.org/wlroots/wlroots/-/tags</id> +<updated>2021-11-01T16:09:55Z</updated> +<entry> + <id>https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.16.1</id> + <link href="https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.16.1"/> + <title>0.16.1</title> + <summary>wlroots 0.16.1 + +Alexander Orzechowski (2): + wlr_scene: Expand damage cull region with fractional scales + wlr_drm: Add missing wlr_buffer import + +Guido Günther (1): + seat/pointer: Initialize low_res_value + +Johan Malm (2): + scene/layer_shell_v1.c: set exclusive zone correctly + scene/layer_shell_v1.c: remove redundant comment + +Kirill Primak (2): + xwayland: fix wlr_xwayland_surface_from_wlr_surface() docs + scene: fix output damage expansion condition + +Simon Ser (11): + backend/drm: only request page-flip if active + backend/drm: log refresh rate in Hz + backend/drm: log modesetting commits + backend/drm: fix FPE when disabling output + Revert "compositor: enforce surface destruction order" + backend: error out when missing DRM and libinput in wlr_backend_autocreate() + build: exclude &lt;wlr/types/wlr_drm_lease_v1.h&gt; without DRM backend + backend/wayland: ensure buffers are released on shutdown + backend/x11: ensure buffers are released on shutdown + backend/drm: fix VRR test + build: bump version to 0.16.1 + +Simon Zeni (2): + render/egl: fix uninitialized pointers in init_dmabuf_formats + types/wlr_seat: finish keyboard_state during wlr_seat_destroy + +bi4k8 (2): + wlr_seat: clear `drag-&gt;seat_client` when destroyed + cursor: compare to scaled coords +</summary> + <content type="html">&lt;div class="gl-relative markdown-code-block js-markdown-code"&gt;&amp;#x000A;&lt;pre data-sourcepos="1:1-37:3" lang="plaintext" class="code highlight js-syntax-highlight language-plaintext" data-canonical-lang="" v-pre="true"&gt;&lt;code&gt;&lt;span id="LC1" class="line" lang="plaintext"&gt;Alexander Orzechowski (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC2" class="line" lang="plaintext"&gt; wlr_scene: Expand damage cull region with fractional scales&lt;/span&gt;&amp;#x000A;&lt;span id="LC3" class="line" lang="plaintext"&gt; wlr_drm: Add missing wlr_buffer import&lt;/span&gt;&amp;#x000A;&lt;span id="LC4" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC5" class="line" lang="plaintext"&gt;Guido Günther (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC6" class="line" lang="plaintext"&gt; seat/pointer: Initialize low_res_value&lt;/span&gt;&amp;#x000A;&lt;span id="LC7" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC8" class="line" lang="plaintext"&gt;Johan Malm (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC9" class="line" lang="plaintext"&gt; scene/layer_shell_v1.c: set exclusive zone correctly&lt;/span&gt;&amp;#x000A;&lt;span id="LC10" class="line" lang="plaintext"&gt; scene/layer_shell_v1.c: remove redundant comment&lt;/span&gt;&amp;#x000A;&lt;span id="LC11" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC12" class="line" lang="plaintext"&gt;Kirill Primak (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC13" class="line" lang="plaintext"&gt; xwayland: fix wlr_xwayland_surface_from_wlr_surface() docs&lt;/span&gt;&amp;#x000A;&lt;span id="LC14" class="line" lang="plaintext"&gt; scene: fix output damage expansion condition&lt;/span&gt;&amp;#x000A;&lt;span id="LC15" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC16" class="line" lang="plaintext"&gt;Simon Ser (11):&lt;/span&gt;&amp;#x000A;&lt;span id="LC17" class="line" lang="plaintext"&gt; backend/drm: only request page-flip if active&lt;/span&gt;&amp;#x000A;&lt;span id="LC18" class="line" lang="plaintext"&gt; backend/drm: log refresh rate in Hz&lt;/span&gt;&amp;#x000A;&lt;span id="LC19" class="line" lang="plaintext"&gt; backend/drm: log modesetting commits&lt;/span&gt;&amp;#x000A;&lt;span id="LC20" class="line" lang="plaintext"&gt; backend/drm: fix FPE when disabling output&lt;/span&gt;&amp;#x000A;&lt;span id="LC21" class="line" lang="plaintext"&gt; Revert "compositor: enforce surface destruction order"&lt;/span&gt;&amp;#x000A;&lt;span id="LC22" class="line" lang="plaintext"&gt; backend: error out when missing DRM and libinput in wlr_backend_autocreate()&lt;/span&gt;&amp;#x000A;&lt;span id="LC23" class="line" lang="plaintext"&gt; build: exclude &amp;lt;wlr/types/wlr_drm_lease_v1.h&amp;gt; without DRM backend&lt;/span&gt;&amp;#x000A;&lt;span id="LC24" class="line" lang="plaintext"&gt; backend/wayland: ensure buffers are released on shutdown&lt;/span&gt;&amp;#x000A;&lt;span id="LC25" class="line" lang="plaintext"&gt; backend/x11: ensure buffers are released on shutdown&lt;/span&gt;&amp;#x000A;&lt;span id="LC26" class="line" lang="plaintext"&gt; backend/drm: fix VRR test&lt;/span&gt;&amp;#x000A;&lt;span id="LC27" class="line" lang="plaintext"&gt; build: bump version to 0.16.1&lt;/span&gt;&amp;#x000A;&lt;span id="LC28" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC29" class="line" lang="plaintext"&gt;Simon Zeni (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC30" class="line" lang="plaintext"&gt; render/egl: fix uninitialized pointers in init_dmabuf_formats&lt;/span&gt;&amp;#x000A;&lt;span id="LC31" class="line" lang="plaintext"&gt; types/wlr_seat: finish keyboard_state during wlr_seat_destroy&lt;/span&gt;&amp;#x000A;&lt;span id="LC32" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC33" class="line" lang="plaintext"&gt;bi4k8 (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC34" class="line" lang="plaintext"&gt; wlr_seat: clear `drag-&amp;gt;seat_client` when destroyed&lt;/span&gt;&amp;#x000A;&lt;span id="LC35" class="line" lang="plaintext"&gt; cursor: compare to scaled coords&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&amp;#x000A;&lt;copy-code&gt;&lt;/copy-code&gt;&amp;#x000A;&lt;/div&gt;</content> + <updated>2022-12-25T15:56:39Z</updated> + <media:thumbnail width="40" height="40" url="https://secure.gravatar.com/avatar/1ce071dd3264c7d9f5d9c0b7137faa6b?s=80&amp;d=identicon"/> + <author> + <name>Simon Ser</name> + <email>contact@emersion.fr</email> + </author> +</entry> +<entry> + <id>https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.16.0</id> + <link href="https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.16.0"/> + <title>0.16.0</title> + <summary>wlroots 0.16.0 + +Release highlights: + +- Support for the new ext-session-lock-v1, idle-notify-v1 and + single-pixel-buffer-v1 protocols has been added. +- The scene-graph API has many new features and optimizations. +- CPU readback for Vulkan renderer is now implemented. The Vulkan renderer + should be more stable. +- The input device API has been reworked. +- A new `wlr_damage_ring` helper supersedes wlr_output_damage without being + as invasive. +- Minor version 5 of xdg-shell has been implemented, adding support for popup + repositioning, configure bounds and WM capabilities. +- High-res scroll wheel events are now supported. +- Minor version 4 of wlr_output_management-v1 has been implemented, adding + support for managing adaptive sync (VRR). +- Internal refactoring of the wl_surface and DRM backend code. + +Full commit history below. + +Alexander Orzechowski (84): + scene_graph: use wlr_scene_output_send_frame_done + scene_graph: remove unused outputs list + scene_graph: Simplify computation for offset of new surfaces. This became possible after the usage of wlr_surface_send_frame_done. + xdg-foreign: Fix crash on destroy of degenerate surface + wlr_output_damage: Use wlr_output_damage_add for wlr_output_damage_add_box + wlr_output_damage: Don't schedule a new frame if damage region does not intersect with output + types/wlr_output: Handle subpixel hints through output commits + seat: Don't finish wlr_keyboard if server was never started + wlr_scene: Allow buffer in wlr_scene_buffer to be NULL + wlr_scene: Add setter for buffer of a wlr_scene_buffer + wlr_scene_output: Send output leave events before destroying the output + wlr_scene: Add output_enter/output_leave signals + wlr_scene: Fix missing calls to scene_node_update_outputs + wlr_scene: Make wlr_scene_render_output private + wlr_scene: Add presentation signal for wlr_scene_buffer + wlr_scene: Add primary_output property to wlr_scene_buffer + wlr_scene: Add frame_done signal for wlr_scene_buffer + wlr_scene: Add a way to choose when input interactions happen on a buffer + wlr_scene: Add a function to also specify damage when applying a buffer to wlr_scene_buffer + wlr_scene: Make scene_buffer_from_node public + wlr_scene: Pull scene_node_get_root into a private header + wlr_scene: Change out surface specific iterator functions + wlr_scene: Make presentation object public + wlr_scene: Introduce addons to scene nodes + wlr_scene: Refactor wlr_scene_surface to be a helper on top of wlr_scene_buffer + wlr_scene: Parse out WLR_SCENE_DEBUG_DAMAGE + wlr_scene: Hook up RERENDER logic + wlr_scene: Hook up HIGHLIGHT logic + wlr_scene: Refactor wlr_scene (the root element) to encase a wlr_scene_tree + wlr_scene: Only allow parenting on a wlr_scene_tree + wlr_scene: Inline wlr_scene_node_state + wlr_scene: Move children list from wlr_scene_node to wlr_scene_tree + wlr_scene_buffer: Call output enter/leave after primary_output calculation + wlr_scene_buffer: Update primary_output on output destroy + wlr_output_commit_state: Make sure to clear the back buffer + dmabuf: Don't leak file descriptors on error path + wlr_scene: Use direct assignment for damage indicator timestamps + wlr_scene: Maintain damage highlight regions per output + wlr_scene: Add option to disable direct scanout + wlr_scene: Introduce scene_nodes_in_box + wlr_scene: Damage scene on node destroy by disabling node + wlr_scene: Add per scene node visibility + wlr_scene: Rework damage handling + wlr_scene_set_buffer_with_damage: Only damage the visible parts of the node + wlr_scene: Only send frame done events for visible buffers + wlr_scene: Don't render non visible parts of textures/rects + wlr_scene: Rewrite direct scan out logic to rely on visibility + wlr_scene: Introduce buffer opaque region metadata + wlr_scene/surface: Hook through opaque metadata + wlr_scene: Calculate output intersections based on node visibility + wlr_scene: Account for occlusion by other scene nodes when calculating visibility + wlr_scene: Remove unused typedef + util/box: Introduce wlr_box_equal + util/box: Introduce wlr_fbox_equal + wlr_scene: Use wlr_fbox_equals + wlr_scene: Use wlr_box_equal + Use wl_signal_emit_mutable + Remove wlr_signal_emit_safe + wlr_scene: Simplify calculate_visibilty option + wlr_scene: Only enable black rect optimization if culling is enabled + wlr_scene: Cull background + wlr_scene: Improve awkward code style + util: Introduce env helpers + Use env helpers + wlr_scene: Initialize region32 before trying to use it + wlr_compositor: Use wlr_fbox_equal + wlr_scene: Only consider visible parts of the node when culling background + wlr_scene: More sanity checking + wlr_scene: Don't leak a region32 when texture failed to upload + wlr_compositor: Don't leak region32 when calculating opaque region + wlr_scene: Consider screen position when culling background + wlr_scene: Clarify surface commit frame events + pixel_format: RGBA4444 and RGBA5551 have alpha components + wlr_scene: Be resilient against overflow conditions + wlr_scene: Fix not updating the scene node when setting a new buffer + wlr_scene: Ignore disabled outputs + wlr_scene: Apply source box translation + backend/drm/legacy: Fix whitespace + wlr_scene: use wl_container_of() instead of casts + wlr_scene: Destroy the texture when setting a new buffer. + xwayland: Simplify net_wm_edges_to_wlr + wlr_scene: Handle fractional scaling better + wlr_scene: Fix texture reuse + wlr_scene: Remove duplicate buffer check when submitting a new buffer + +Antonin Décimo (1): + xcursor: check that XDG base directory path is absolute + +Bernardo Meurer (1): + render/vulkan: fix memory type detection + +Consolatis (4): + wlr_scene: Fix scaling with default source_box + scene/output_layout: Fix crash in scene_output_layout_output_destroy + wlr_virtual_pointer_v1: fix discrete scrolling + screencopy-v1: make sure wlr_buffer enum is visible + +David96 (4): + types/wlr_tablet_tool: remove name ambiguity + render/vulkan: Implement vulkan_read_pixels + render/vulkan: implement vulkan_preferred_read_format + render/vulkan: add caching to vulkan_read_pixels + +Dean (1): + Free drmDevice in get_egl_device_from_drm_fd() + +Dominique Martinet (2): + Xwayland: rename notify pipe 'p' to notify_fd + Xwayland: use -displayfd instead of USR1 + +Ferdinand Bachmann (3): + types/wlr_pointer_gestures_v1: null-check both focused_surface and focused_client + types/wlr_pointer_gestures_v1.c: get client from seat client instead of resource + types/seat/wlr_seat.c: fix focused_client being null after seat_client recreation + +Gentaiii (1): + Fixed false allocation failed + +Guido Günther (4): + examples/input-method: Don't crash on NULL surrounding text + layer-shell: Make wlr_layer_surface_v1_from_resource public + xdg-activation: Deduplicate token creation code + seat: Allow to cancel touches + +Isaac Freund (20): + layer-shell: fix type of margins + wlr_texture: remove wlr_texture_from_wl_drm() from header + tinywl: fix check whether client is focused or not + foreign-toplevel: send enter if needed on output bind + xdg-output: remove dead code + ext-session-lock-v1: new protocol implementation + wlr_cursor: constify map to region box arguments + wlr_switch: remove WLR_SWITCH_STATE_TOGGLE + backend/drm: fix check for no-op commits + backend/drm: fix NULL pointer deference due to typo + output: fix leak of empty back buffer lock + wlr_input_device: remove anon union field + Document NULL return value of foo_from_wlr_surface() functions + wlr-output-management: Implement version 3 release requests + wlr-output-management: fix broken asserts + output: clean up after modifierless test failure + backend/wayland: report adaptive sync as enabled + backend/x11: report adaptive sync as enabled + output: remove unknown adaptive sync state + wlr-output-management: implement adaptive sync + +Johan Malm (1): + scene/layer_shell_v1.c: fix bug in width/height calculations + +Johannes (1): + examples/egl_common: switch rgba format + +John Lindgren (6): + Revert "Copy xcb_icccm structs into wlroots" + wlr_drm_lease_v1: Fix use-after-free in backend_destroy() + cursor: Add a more general check for infinite/NaN cursor position + cursor: Don't warp to (0,0) when last output is disconnected + backend/libinput: Fix SIGSEGV found in low-memory fuzzing + render/vulkan: Fix type-punned pointer warning/error + +Joshua Ashton (1): + xwayland: Add support for -force-xrandr-emulation + +José Expósito (8): + build: bump Wayland to v1.21 + build: check if libinput supports high-res scroll + pointer: transform low-res to high-res axis events + backend/libinput: handle high-res scroll events + backend/libinput: code style consistency + backend/wayland: handle high-res scroll events + seat: support high-resolution clients + seat: support low-resolution clients + +Keith Bowes (1): + Fixed compiling with FFmpeg 5.0 + +Kenny Levinsen (8): + scene: Add layer_shell_v1 helper + meson: soversion arg should be string + wlr_{keyboard,pointer,touch}: Update event docs + Set mapped before firing map/unmap events + xdg_shell: Destroy popups after unmap event + scene/layer_shell: Ignore unmapped exclusion zone + util/array: Add array_realloc for wl_array + wlr_scene: Convert render_list to wl_array + +Kirill Chibisov (1): + meson: use target_machine instead of host_machine + +Kirill Primak (103): + scene/subsurface_tree: fix handling subsurface destruction + subcompositor: split out from compositor + surface: introduce events.client_commit + surface: move impl to types/wlr_{sub,}compositor.c + surface: move decl to wlr_{sub,}compositor.h + surface: deprecate wlr_surface.h + surface: improve role precommit hook + compositor: damage the whole buffer on viewport src change + subsurface: unlock cached state on commit if desynced + output-layout: make wlr_output_layout_get_box() take a box as parameter + output-layout: remove useless types/fields + cursor: store mapped_box as value + cursor: ensure mapping box is always initialized + xdg-shell: rename surface role handlers + xdg-shell: fix create_xdg_popup() param type + xdg-toplevel: fix functions' main argument type + xdg-popup: fix functions' main argument type + xdg-shell: remove "xdg" from docs + xdg-shell: unify function arguments' names + xdg-toplevel: change parent type to xdg-toplevel + xdg-toplevel: change object type in event structs + xdg-shell: extract role-specific unmap logic + xdg-shell: fix potential use-after-free + xdg-popup: destroy popup-less grab + xdg-surface: minor consistency renaming + xdg-shell: drop wlr_xdg_toplevel_set_fullscreen_event + xdg-toplevel: fix `requested` doc + xdg-surface: avoid emitting signals with their owner object + xdg-popup: send invalid_positioner to the right resource + CONTRIBUTING.md: update construction/destruction functions' description + xdg-{toplevel,popup}: extract destructors + xdg-positioner: rename structs + xdg-positioner: rewrite unconstraining, untie from xdg-popup + xdg-positioner: fix sliding regression + tinywl: don't generate xdg-shell-protocol.c + tinywl: remove outdated non-feature from README.md + xdg-toplevel: treat unmapped parents as NULL + xdg-foreign-v1: treat unmapped parents as NULL + xdg-foreign-v2: treat unmapped parents as NULL + xdg-toplevel: don't schedule configures on state requests + scene/output-layout: fix scene destroy handler + backend/wayland/pointer: fix indentation + backend/wayland: zero out finished input devices + CONTRIBUTING.md: update init/finish description + backend/wayland: reset active pointer on destroy + examples/layer-shell: premultiply alpha + xdg-toplevel: store states on the stack + scene/output: check for NULL in destructor + util/addon: avoid calling finish() twice + xdg-popup: add proper configure flow + xdg-popup: use current/pending state pattern + xdg-positioner: add v3 parameters + xdg-popup: add reposition support + xdg-shell: bump version to 3 + tinywl: use xdg-shell v3 + scene/wlr_scene.h: fix indentation + scene: add wlr_scene_output.events.destroy + scene/output-layout: improve ownership logic + scene/output-layout: add initial outputs + xdg-shell: improve shell version check + subcompositor: consider map on creation + xdg-toplevel: post no memory on strdup() fail + xdg-popup: use configure fields + types: add wlr_damage_ring + scene: switch to wlr_damage_ring + scene: add missing output damage listener + seat/pointer: rework sending axis events + util/array: unclutter + util/set: overhaul + cursor: avoid uninitialized wlr_box fields + output-layout: avoid uninitialized wlr_box fields + output-layout: improve wlr_output_layout_output_in_direction() + xdg-foreign-v1: s/unmap/destroy + xdg-foreign-v2: s/unmap/destroy + subcompositor: move+rename subsurface_parent_commit() + subcompositor: consider mapping after adding + xdg-toplevel: validate resize_edge + foreign-toplevel-management: fix indentation + output-damage: fix setting pending_attach_render + output-damage: drop precommit listener + output-damage: drop unused pending_attach_render + output: add a swapchain NULL check in wlr_output_commit_state() + tablet-v2: fix event parameters + xdg-toplevel: send invalid_parent error + scene: fix buffer source box transforming + xdg-shell: fix geometry types + compositor: introduce wlr_surface_destroy_role_object() + layer-shell: use role object destroy handler + subcompositor: use role object destroy handler + session-lock: use role object destroy handler + input-method: use role object destroy handler + drag-icon: use role object destroy handler + xdg-shell: use role object destroy handler + xwayland/xwm: use role object destroy handler + compositor: drop role object NULL checks in handlers + compositor: enforce surface destruction order + tinywl: handle view unmap while grabbed + compositor: use the correct input region + scene: fix output damage expansion + render/pixman: apply source image cropping + Revert "render/pixman: apply source image cropping" + damage-ring: add missing headers + output-damage: deprecate + +Leonardo Hernández Hernández (1): + seat: take wlr_keyboard in wlr_seat_set_keyboard() + +Manuel Stoeckl (3): + render/gles: add support for some 16-bpc unsigned shm formats + screencopy-v1: Fix frame stride for formats with bpp != 32 + render/gles2: simplify alpha depth check + +Mark Bolhuis (1): + types/wlr_xdg_output_v1: Fix wl_output.done bug. + +Moon Sungjoon (1): + xcursor: support XDG Base Directory Specification + +Quantum (1): + seat/pointer: fix uninitialized variable warning + +Roman Gilg (2): + output: clear buffer created for test + render: allow texture creation while rendering + +Rouven Czerwinski (3): + relative_pointer: handle inert pointer objects + cursor: re-enable NULL buffer for cursor + meson: update default options for libdrm + +Samuel Čavoj (1): + Pass O_CLOEXEC to drmModeCreateLease calls + +Sebastian Krzyszkowiak (1): + wlr_output_layout_contains_point: handle outputs that aren't in the layout + +Simon Ser (192): + build: bump to version 0.16.0 + build: bump soversion + Remove wlr_box.h redirection + build: simplify Meson subproject fallbacks + backend: error out in autocreate without libinput support + scene: schedule an output frame on wl_surface.frame + readme: drop mention of the Sway project + render/vulkan: log physical device driver name + editorconfig: set max_line_length + subcompositor: document subsurface_from_resource + subcompositor: destroy subsurface with parent + scene: try to import buffers as textures before rendering + buffer: extract interface to separate header + Revert "scene: try to import buffers as textures before rendering" + util/addon: fix public include + Zero-initialize structs in init functions + Revert "backend/wayland: zero out finished input devices" + drm-lease-v1: skip device on wlr_drm_backend_get_non_master_fd failure + xwayland: add wlr_xwayland_server_options.terminate_delay + xwayland: terminate when no client is connected + backend/headless: allow variable refresh rate + tinywl: don't crash when there is no keyboard + backend/drm: fetch EDID manufacturer from udev_hwdb + util/shm: clear mode permission bits in allocate_shm_file_pair + xdg-shell: specify version in wlr_xdg_shell_create + xwayland: use dict to collect supported features + build: bump version to 0.16.0-dev + backend/drm: allow non-linear modifiers for multi-GPU + backend/drm: remove wlr_drm_surface.{width,height} + contributing: add section about documentation conventions + Reformat doc comments + render/egl: drop MESA_EGL_NO_X11_HEADERS + render/egl: add wlr_egl_get_{context,display} + render/egl: make wlr_egl struct opaque + render/egl: make wlr_egl_{make,unset,is}_current private + render/egl: document wlr_egl_create_with_context + backend/drm: fix crash in init_drm_surface + output: turn make/model/serial into char * + linux-dmabuf-v1: fix MOD_INVALID handling in feedback tranches + backend/x11: fix output model strdup call + docs/env_vars: fix case of WLR_SCENE_DEBUG_DAMAGE values + gitignore: remove unnecessary entries, add subprojects/ + output: pass wlr_output_state to backend + output: pass wlr_output_state to output_pending_resolution + output: pass wlr_output_state to rendering functions + output: add wlr_output_test_state + output: add wlr_output_event_precommit.state + output: add output_state_{init,finish} + output: add wlr_output_commit_state + build: make GBM optional + relative-pointer-v1: remove unnecessary comments + relative-pointer-v1: remove unnecessary log messages + relative-pointer-v1: don't allocate when inert + backend/drm: improve atomic commit flag logging + output: remove noop backend check in wlr_output_cursor_set_image + output: introduce wlr_output_cursor_set_buffer + output: re-implement set_image with set_buffer + output: drop wlr_output_cursor.events.destroy + compositor: send WL_SURFACE_ERROR_INVALID_SIZE for non-cursor surfaces + xdg-shell: add support for v4 + backend/drm: make commits without a buffer blocking + backend/drm: short-circuit no-op commits + examples/text-input: stop using strcpy/strcat + examples/screencopy-dmabuf: stop using strncpy + Remove remaining wl_signal_emit calls + backend/drm: unconditionally set "content type" to graphics + backend/drm: make serial optional + output: fix make/model/serial memory leak + util/global: fix memory leak on display destroy in wlr_global_destroy_safe + output: add output state setters + output: compare state before commit + output: use state setters in wlr_output_set_* + render/gles2: simplify flipped projection + matrix: remove wlr_matrix_projection() + gitignore: remove build dir entries + render/texture: drop wlr_texture_is_opaque + output-management-v1: add wlr_output_head_v1_state_apply() + backend/drm: remove unused CRTC count check + backend/drm: set "max bpc" to the max + render/gles2: check GBM is found + render: use internal_features to indicate EGL support + build: fix enabled GBM when allocators=auto and auto_features=disabled + output: fix missing buffer when using direct scanout + backend/drm: use drmModeGetConnectorTypeName + backend/drm: use drmModeConnectorGetPossibleCrtcs + xdg-shell: add support for v5 + single-pixel-buffer-v1: new protocol implementation + backend/drm: remove unused WLR_DRM_CONN_CLEANUP + backend/drm: drop WLR_DRM_CONN_NEEDS_MODESET + backend/drm: drop enum wlr_drm_connector_status + backend/wayland: fix touch device not added on startup + render: replace wlr_texture_write_pixels with update_from_buffer + surface: add WLR_SURFACE_STATE_OFFSET + surface: implement wl_surface.offset + output: fail commits if adaptive sync cannot be enabled + compositor: fix wlr_surface_set_role return value docs + render/vulkan: drop ext params from vulkan_device_create() + render/vulkan: drop wlr_vk_device.extensions + render/vulkan: fix format features check for shm textures + render/vulkan: remove unnecessary casts + backend/wayland: drop output_set_custom_mode() + xdg-foreign-v1: return wlr_xdg_toplevel in verify_is_toplevel() + xdg-foreign-v2: return wlr_xdg_toplevel in verify_is_toplevel() + render/egl: improve DMA-BUF format/modifier logging + render/allocator/gbm: log human-readable format and modifier + output/render: log human-readable format + render/vulkan: improve format logging + output/cursor: downgrade error messages + buffer: split into multiple files + single-pixel-buffer-v1: fix header guard name + output: fix wlr_output_set_gamma() with zero size + render/egl: add support for EGL_KHR_display_reference + render/vulkan: add error handling for vulkan_find_mem_type() + output: inline output_attach_render() + output: drop back_buffer variable in wlr_output_commit_state() + output: rejigger attach/clear for back buffer + backend/drm: de-duplicate wlr_drm_mode creation + output: fix back buffer checks + output: add wlr_output_mode.picture_aspect_ratio + backend/drm: pass through mode picture aspect ratio + screencopy-v1: rename wlr_screencopy_frame_v1.{format,fourcc} + screencopy-v1: use DRM format code for shm buffers + screencopy-v1: rename wlr_screencopy_frame_v1.stride + screencopy-v1: use wlr_buffer APIs + render: drop trailing whitespace + output: add wlr_output_state.allow_artifacts + backend/drm: fix missing wlr_output_state.allow_artifacts + render/vulkan: use addon for wlr_vk_render_buffer + render/vulkan: use addon for wlr_vk_texture + output: fix typo in error message + render: don't automatically fall back to Vulkan + render: don't fall back to Pixman if we have a render node + render/pixman: advertise support for linear format modifier + render/allocator/drm_dumb: advertise LINEAR instead of INVALID modifier + render/allocator/drm_dumb: check modifier list + render/allocator/drm_dumb: get format info before allocating + render/allocator/drm_dumb: fix error handling + render/allocator/drm_dumb: drop finish_buffer() + backend/drm: don't unconditionally set desired_enabled + backend/drm: remove outdated TODO + screencopy-v1: fix frame_shm_copy() error path + screencopy-v1: simplify frame_dma_copy() error path + render: drop wlr_renderer_read_pixels() flags + build: alphabetically sort protocol lists + backend/drm: drop unnecessary wlr_drm_connector.crtc checks + backend/drm: nuke wlr_drm_connector.desired_enabled + output/render: early return in output_ensure_buffer() + output/render: make output_ensure_buffer() no-op when missing renderer + output: allocate swapchain on first commit + drm-lease-v1: fix error codepath + drm-lease-v1: send finished event on failure in submit request + drm-lease-v1: reject the lease request by default + backend/drm: drop drm_connector_set_mode() + render/gles2: assert that GL_OES_EGL_image_external is supported + output: fix crash in output_test_with_back_buffer() + render/vulkan: drop wlr_vk_instance.extensions + backend: use global output name counters + backend/drm: use wl_container_of() instead of casts for wlr_drm_mode + idle-notify-v1: new protocol implementation + backend/drm: use atomic API to fetch current connector's CRTC + backend/drm: extract connect_drm_connector() logic + backend/drm: extract current mode logic into separate function + backend/drm: fix EINVAL atomic commits after VT switch + backend/drm: log when restoring mode after VT switch fails + backend/drm: drop drm_crtc_page_flip() + backend/drm: log failures in drm_surface_blit() + render/vulkan: add missing entries in vulkan_strerror() + backend/drm: fetch current CRTC once on startup + xwyland/xwm: simplify unpaired_link handling + output: try to use fixed mode in wlr_output_set_custom_mode() + output: clarify custom modes warning + egl: add WLR_EGL_NO_MODIFIERS + render/gles2: remove stale gles2_texture_from_wl_drm() prototype + render/gles2: log error on shader compilation failure + render/gles2: move shaders to individual files + render/gles2: move color uniform from quad.vert to quad.frag + render/gles2: de-duplicate vertex shaders + backend/drm: extract create_drm_connector() + backend/drm: get possible CRTCs in create_drm_connector() + xwayland: split headers + render/vulkan: remove exts arg from vulkan_instance_create() + render/vulkan: drop outdated comments + render/vulkan: simplify extension checks + render/vulkan: use struct initializers + render/vulkan: simplify texture VkPipelineShaderStageCreateInfo + render/vulkan: fix and add missing wl_list comments + render/vulkan: use wl_array for wlr_vk_shared_buffer.allocs + scene: fix whitespace + scene: destroy addons before cleaning up internal state + Revert "backend/drm: fetch EDID manufacturer from udev_hwdb" + backend/drm: request page-flip event on modeset + build: bump to version 0.16.0 + +Simon Zeni (57): + backend/headless: remove unused wlr_headless_input_device + types/wlr_input_device: default vendor and product id to 0 + interfaces/wlr_input_device: introduce wlr_input_device_finish + types/wlr_input_device: call the specialized input device destroy function on destroy + types/wlr_keyboard: add base wlr_input_device + types/wlr_pointer: add base wlr_input_device + types/wlr_switch: add base wlr_input_device + types/wlr_tablet_pad: add base wlr_input_device + types/wlr_tablet_tool: add base wlr_input_device + types/wlr_touch: add base wlr_input_device + types/wlr_tablet_pad: constify impl + types/wlr_switch: constify impl + backend/x11: remove wlr_input_device_impl + backend/wayland: remove wlr_input_device_impl + backend/libinput: remove wlr_input_device_impl + interfaces: remove wlr_input_device_impl + types/wlr_virtual_keyboard_v1: fix wlr_keyboard destroy sequence + types/wlr_virtual_pointer_v1: fix wlr_pointer destroy sequence + backend/libinput: add devices wl_list + backend/libinput: rework keyboard interface + backend/libinput: rework pointer interface + backend/libinput: rework switch interface + backend/libinput: rework touch interface + backend/libinput: rework tablet interface + backend/libinput: rework tablet_pad interface + backend/libinput: public API cleanup + interface/wlr_keyboard: rework destroy sequence + interface/wlr_pointer: rework destroy sequence + interface/wlr_switch: rework destroy sequence + interface/wlr_tablet_pad: rework destroy sequence + interface/wlr_tablet_tool: rework destroy sequence + interface/wlr_touch: rework destroy sequence + tinywl: destroy keyboard on wlr_input_device event + types/wlr_input_device: remove wlr_input_device_destroy + types/wlr_input_device: move init and finish function to private API + types/wlr_keyboard: remove destroy event + types/wlr_virtual_keyboard_v1: remove destroy event + types/wlr_virtual_pointer_v1: remove destroy event + tinywl: init cursor_mode + backend/wayland: give wlr_keyboard ownership to wlr_wl_seat + backend/wayland: give wlr_pointer ownership to wlr_wl_seat + backend/wayland: drop wlr_switch support + backend/wayland: give wlr_touch ownership to wlr_wl_seat + backend/wayland/tablet_v2: give wlr_tablet_* ownership to wlr_wl_seat + backend/wayland: remove wlr_wl_input_device + backend/wayland: remove wl_seat_listener from public API + types/wlr_input_device: move output_name field to wlr_pointer and wlr_touch + types/wlr_input_device: move width_mm and height_mm fields to wlr_tablet and wlr_touch + types/wlr_pointer: uniformize events name + types/wlr_keyboard: uniformize events name + types/wlr_switch: uniformize events name + types/wlr_tablet_pad: uniformize events name + types/wlr_tablet_tool: uniformize events name + types/wlr_touch: uniformize events name + tinywl: exit on backend, renderer or allocator creation failure + build: remove libkms option and disable tests for libdrm fallback + backend/drm: allocate connector CRTC on lease creation + +Steven Newbury (1): + util: Fix infinite loop in recursive function + +Tadeo Kondrak (1): + input_method_v2: improve mapping detection + +Thomas Hebb (1): + render/gles2: don't constrain shm formats to ones that support reading + +Vlad Zahorodnii (1): + xcursor: garbage collect XcursorLibraryLoadImages + +bi4k8 (3): + render/vulkan/pixel_format: do not leak props-&gt;... + Add missing &amp; + render/egl: don't leak memory on error return + +fakechen (1): + egl: modify egl_init_display function definition + +illiliti (2): + meson: replace join_paths() with / operator + backend/drm: use pnp.ids to fetch EDID data + +nyorain (1): + vulkan: Fix imported image layout + +tiosgz (1): + CONTRIBUTING.md: make forks public to let the CI run + +vanfanel (2): + Initialize connectors current mode to the mode used by KMS on startup. + Only set max_bpc when full modesetting is being done. + +vaxerski (1): + backend/drm: fix crash with null serial + +xiaoyaobing (1): + tinywl/tinywl: clean up tinywl_output when wlr_output is gone + +yiqiang (2): + wlr_scene: fix color value when filtering black boxes + scene/wlr_scene:fix judgment of invisible node + +zccrs (2): + render/vulkan: fix undefined reference to wlr_texture_is_vk + render/vulkan: add some interfaces to allow compositors to integrate + +zsugabubus (1): + xwayland: do not double free server on destroy + +</summary> + <content type="html">&lt;p data-sourcepos="1:1-1:19" dir="auto"&gt;Release highlights:&lt;/p&gt;&amp;#x000A;&lt;ul data-sourcepos="3:1-17:0" dir="auto"&gt;&amp;#x000A;&lt;li data-sourcepos="3:1-4:50"&gt;Support for the new ext-session-lock-v1, idle-notify-v1 and&amp;#x000A;single-pixel-buffer-v1 protocols has been added.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="5:1-5:62"&gt;The scene-graph API has many new features and optimizations.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="6:1-7:24"&gt;CPU readback for Vulkan renderer is now implemented. The Vulkan renderer&amp;#x000A;should be more stable.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="8:1-8:41"&gt;The input device API has been reworked.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="9:1-10:14"&gt;A new &lt;code&gt;wlr_damage_ring&lt;/code&gt; helper supersedes &lt;code&gt;wlr_output_damage&lt;/code&gt; without being&amp;#x000A;as invasive.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="11:1-12:54"&gt;Minor version 5 of xdg-shell has been implemented, adding support for popup&amp;#x000A;repositioning, configure bounds and WM capabilities.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="13:1-13:49"&gt;High-res scroll wheel events are now supported.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="14:1-15:43"&gt;Minor version 4 of wlr_output_management-v1 has been implemented, adding&amp;#x000A;support for managing adaptive sync (VRR).&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="16:1-17:0"&gt;Internal refactoring of the &lt;code&gt;wl_surface&lt;/code&gt; and DRM backend code.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;details&gt;&amp;#x000A;&lt;summary&gt;Full changelog&lt;/summary&gt;&amp;#x000A;&lt;div class="gl-relative markdown-code-block js-markdown-code"&gt;&amp;#x000A;&lt;pre data-sourcepos="22:1-653:3" class="code highlight js-syntax-highlight language-plaintext" lang="plaintext" data-canonical-lang="" v-pre="true"&gt;&lt;code&gt;&lt;span id="LC1" class="line" lang="plaintext"&gt;Alexander Orzechowski (84):&lt;/span&gt;&amp;#x000A;&lt;span id="LC2" class="line" lang="plaintext"&gt; scene_graph: use wlr_scene_output_send_frame_done&lt;/span&gt;&amp;#x000A;&lt;span id="LC3" class="line" lang="plaintext"&gt; scene_graph: remove unused outputs list&lt;/span&gt;&amp;#x000A;&lt;span id="LC4" class="line" lang="plaintext"&gt; scene_graph: Simplify computation for offset of new surfaces. This became possible after the usage of wlr_surface_send_frame_done.&lt;/span&gt;&amp;#x000A;&lt;span id="LC5" class="line" lang="plaintext"&gt; xdg-foreign: Fix crash on destroy of degenerate surface&lt;/span&gt;&amp;#x000A;&lt;span id="LC6" class="line" lang="plaintext"&gt; wlr_output_damage: Use wlr_output_damage_add for wlr_output_damage_add_box&lt;/span&gt;&amp;#x000A;&lt;span id="LC7" class="line" lang="plaintext"&gt; wlr_output_damage: Don't schedule a new frame if damage region does not intersect with output&lt;/span&gt;&amp;#x000A;&lt;span id="LC8" class="line" lang="plaintext"&gt; types/wlr_output: Handle subpixel hints through output commits&lt;/span&gt;&amp;#x000A;&lt;span id="LC9" class="line" lang="plaintext"&gt; seat: Don't finish wlr_keyboard if server was never started&lt;/span&gt;&amp;#x000A;&lt;span id="LC10" class="line" lang="plaintext"&gt; wlr_scene: Allow buffer in wlr_scene_buffer to be NULL&lt;/span&gt;&amp;#x000A;&lt;span id="LC11" class="line" lang="plaintext"&gt; wlr_scene: Add setter for buffer of a wlr_scene_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC12" class="line" lang="plaintext"&gt; wlr_scene_output: Send output leave events before destroying the output&lt;/span&gt;&amp;#x000A;&lt;span id="LC13" class="line" lang="plaintext"&gt; wlr_scene: Add output_enter/output_leave signals&lt;/span&gt;&amp;#x000A;&lt;span id="LC14" class="line" lang="plaintext"&gt; wlr_scene: Fix missing calls to scene_node_update_outputs&lt;/span&gt;&amp;#x000A;&lt;span id="LC15" class="line" lang="plaintext"&gt; wlr_scene: Make wlr_scene_render_output private&lt;/span&gt;&amp;#x000A;&lt;span id="LC16" class="line" lang="plaintext"&gt; wlr_scene: Add presentation signal for wlr_scene_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC17" class="line" lang="plaintext"&gt; wlr_scene: Add primary_output property to wlr_scene_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC18" class="line" lang="plaintext"&gt; wlr_scene: Add frame_done signal for wlr_scene_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC19" class="line" lang="plaintext"&gt; wlr_scene: Add a way to choose when input interactions happen on a buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC20" class="line" lang="plaintext"&gt; wlr_scene: Add a function to also specify damage when applying a buffer to wlr_scene_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC21" class="line" lang="plaintext"&gt; wlr_scene: Make scene_buffer_from_node public&lt;/span&gt;&amp;#x000A;&lt;span id="LC22" class="line" lang="plaintext"&gt; wlr_scene: Pull scene_node_get_root into a private header&lt;/span&gt;&amp;#x000A;&lt;span id="LC23" class="line" lang="plaintext"&gt; wlr_scene: Change out surface specific iterator functions&lt;/span&gt;&amp;#x000A;&lt;span id="LC24" class="line" lang="plaintext"&gt; wlr_scene: Make presentation object public&lt;/span&gt;&amp;#x000A;&lt;span id="LC25" class="line" lang="plaintext"&gt; wlr_scene: Introduce addons to scene nodes&lt;/span&gt;&amp;#x000A;&lt;span id="LC26" class="line" lang="plaintext"&gt; wlr_scene: Refactor wlr_scene_surface to be a helper on top of wlr_scene_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC27" class="line" lang="plaintext"&gt; wlr_scene: Parse out WLR_SCENE_DEBUG_DAMAGE&lt;/span&gt;&amp;#x000A;&lt;span id="LC28" class="line" lang="plaintext"&gt; wlr_scene: Hook up RERENDER logic&lt;/span&gt;&amp;#x000A;&lt;span id="LC29" class="line" lang="plaintext"&gt; wlr_scene: Hook up HIGHLIGHT logic&lt;/span&gt;&amp;#x000A;&lt;span id="LC30" class="line" lang="plaintext"&gt; wlr_scene: Refactor wlr_scene (the root element) to encase a wlr_scene_tree&lt;/span&gt;&amp;#x000A;&lt;span id="LC31" class="line" lang="plaintext"&gt; wlr_scene: Only allow parenting on a wlr_scene_tree&lt;/span&gt;&amp;#x000A;&lt;span id="LC32" class="line" lang="plaintext"&gt; wlr_scene: Inline wlr_scene_node_state&lt;/span&gt;&amp;#x000A;&lt;span id="LC33" class="line" lang="plaintext"&gt; wlr_scene: Move children list from wlr_scene_node to wlr_scene_tree&lt;/span&gt;&amp;#x000A;&lt;span id="LC34" class="line" lang="plaintext"&gt; wlr_scene_buffer: Call output enter/leave after primary_output calculation&lt;/span&gt;&amp;#x000A;&lt;span id="LC35" class="line" lang="plaintext"&gt; wlr_scene_buffer: Update primary_output on output destroy&lt;/span&gt;&amp;#x000A;&lt;span id="LC36" class="line" lang="plaintext"&gt; wlr_output_commit_state: Make sure to clear the back buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC37" class="line" lang="plaintext"&gt; dmabuf: Don't leak file descriptors on error path&lt;/span&gt;&amp;#x000A;&lt;span id="LC38" class="line" lang="plaintext"&gt; wlr_scene: Use direct assignment for damage indicator timestamps&lt;/span&gt;&amp;#x000A;&lt;span id="LC39" class="line" lang="plaintext"&gt; wlr_scene: Maintain damage highlight regions per output&lt;/span&gt;&amp;#x000A;&lt;span id="LC40" class="line" lang="plaintext"&gt; wlr_scene: Add option to disable direct scanout&lt;/span&gt;&amp;#x000A;&lt;span id="LC41" class="line" lang="plaintext"&gt; wlr_scene: Introduce scene_nodes_in_box&lt;/span&gt;&amp;#x000A;&lt;span id="LC42" class="line" lang="plaintext"&gt; wlr_scene: Damage scene on node destroy by disabling node&lt;/span&gt;&amp;#x000A;&lt;span id="LC43" class="line" lang="plaintext"&gt; wlr_scene: Add per scene node visibility&lt;/span&gt;&amp;#x000A;&lt;span id="LC44" class="line" lang="plaintext"&gt; wlr_scene: Rework damage handling&lt;/span&gt;&amp;#x000A;&lt;span id="LC45" class="line" lang="plaintext"&gt; wlr_scene_set_buffer_with_damage: Only damage the visible parts of the node&lt;/span&gt;&amp;#x000A;&lt;span id="LC46" class="line" lang="plaintext"&gt; wlr_scene: Only send frame done events for visible buffers&lt;/span&gt;&amp;#x000A;&lt;span id="LC47" class="line" lang="plaintext"&gt; wlr_scene: Don't render non visible parts of textures/rects&lt;/span&gt;&amp;#x000A;&lt;span id="LC48" class="line" lang="plaintext"&gt; wlr_scene: Rewrite direct scan out logic to rely on visibility&lt;/span&gt;&amp;#x000A;&lt;span id="LC49" class="line" lang="plaintext"&gt; wlr_scene: Introduce buffer opaque region metadata&lt;/span&gt;&amp;#x000A;&lt;span id="LC50" class="line" lang="plaintext"&gt; wlr_scene/surface: Hook through opaque metadata&lt;/span&gt;&amp;#x000A;&lt;span id="LC51" class="line" lang="plaintext"&gt; wlr_scene: Calculate output intersections based on node visibility&lt;/span&gt;&amp;#x000A;&lt;span id="LC52" class="line" lang="plaintext"&gt; wlr_scene: Account for occlusion by other scene nodes when calculating visibility&lt;/span&gt;&amp;#x000A;&lt;span id="LC53" class="line" lang="plaintext"&gt; wlr_scene: Remove unused typedef&lt;/span&gt;&amp;#x000A;&lt;span id="LC54" class="line" lang="plaintext"&gt; util/box: Introduce wlr_box_equal&lt;/span&gt;&amp;#x000A;&lt;span id="LC55" class="line" lang="plaintext"&gt; util/box: Introduce wlr_fbox_equal&lt;/span&gt;&amp;#x000A;&lt;span id="LC56" class="line" lang="plaintext"&gt; wlr_scene: Use wlr_fbox_equals&lt;/span&gt;&amp;#x000A;&lt;span id="LC57" class="line" lang="plaintext"&gt; wlr_scene: Use wlr_box_equal&lt;/span&gt;&amp;#x000A;&lt;span id="LC58" class="line" lang="plaintext"&gt; Use wl_signal_emit_mutable&lt;/span&gt;&amp;#x000A;&lt;span id="LC59" class="line" lang="plaintext"&gt; Remove wlr_signal_emit_safe&lt;/span&gt;&amp;#x000A;&lt;span id="LC60" class="line" lang="plaintext"&gt; wlr_scene: Simplify calculate_visibilty option&lt;/span&gt;&amp;#x000A;&lt;span id="LC61" class="line" lang="plaintext"&gt; wlr_scene: Only enable black rect optimization if culling is enabled&lt;/span&gt;&amp;#x000A;&lt;span id="LC62" class="line" lang="plaintext"&gt; wlr_scene: Cull background&lt;/span&gt;&amp;#x000A;&lt;span id="LC63" class="line" lang="plaintext"&gt; wlr_scene: Improve awkward code style&lt;/span&gt;&amp;#x000A;&lt;span id="LC64" class="line" lang="plaintext"&gt; util: Introduce env helpers&lt;/span&gt;&amp;#x000A;&lt;span id="LC65" class="line" lang="plaintext"&gt; Use env helpers&lt;/span&gt;&amp;#x000A;&lt;span id="LC66" class="line" lang="plaintext"&gt; wlr_scene: Initialize region32 before trying to use it&lt;/span&gt;&amp;#x000A;&lt;span id="LC67" class="line" lang="plaintext"&gt; wlr_compositor: Use wlr_fbox_equal&lt;/span&gt;&amp;#x000A;&lt;span id="LC68" class="line" lang="plaintext"&gt; wlr_scene: Only consider visible parts of the node when culling background&lt;/span&gt;&amp;#x000A;&lt;span id="LC69" class="line" lang="plaintext"&gt; wlr_scene: More sanity checking&lt;/span&gt;&amp;#x000A;&lt;span id="LC70" class="line" lang="plaintext"&gt; wlr_scene: Don't leak a region32 when texture failed to upload&lt;/span&gt;&amp;#x000A;&lt;span id="LC71" class="line" lang="plaintext"&gt; wlr_compositor: Don't leak region32 when calculating opaque region&lt;/span&gt;&amp;#x000A;&lt;span id="LC72" class="line" lang="plaintext"&gt; wlr_scene: Consider screen position when culling background&lt;/span&gt;&amp;#x000A;&lt;span id="LC73" class="line" lang="plaintext"&gt; wlr_scene: Clarify surface commit frame events&lt;/span&gt;&amp;#x000A;&lt;span id="LC74" class="line" lang="plaintext"&gt; pixel_format: RGBA4444 and RGBA5551 have alpha components&lt;/span&gt;&amp;#x000A;&lt;span id="LC75" class="line" lang="plaintext"&gt; wlr_scene: Be resilient against overflow conditions&lt;/span&gt;&amp;#x000A;&lt;span id="LC76" class="line" lang="plaintext"&gt; wlr_scene: Fix not updating the scene node when setting a new buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC77" class="line" lang="plaintext"&gt; wlr_scene: Ignore disabled outputs&lt;/span&gt;&amp;#x000A;&lt;span id="LC78" class="line" lang="plaintext"&gt; wlr_scene: Apply source box translation&lt;/span&gt;&amp;#x000A;&lt;span id="LC79" class="line" lang="plaintext"&gt; backend/drm/legacy: Fix whitespace&lt;/span&gt;&amp;#x000A;&lt;span id="LC80" class="line" lang="plaintext"&gt; wlr_scene: use wl_container_of() instead of casts&lt;/span&gt;&amp;#x000A;&lt;span id="LC81" class="line" lang="plaintext"&gt; wlr_scene: Destroy the texture when setting a new buffer.&lt;/span&gt;&amp;#x000A;&lt;span id="LC82" class="line" lang="plaintext"&gt; xwayland: Simplify net_wm_edges_to_wlr&lt;/span&gt;&amp;#x000A;&lt;span id="LC83" class="line" lang="plaintext"&gt; wlr_scene: Handle fractional scaling better&lt;/span&gt;&amp;#x000A;&lt;span id="LC84" class="line" lang="plaintext"&gt; wlr_scene: Fix texture reuse&lt;/span&gt;&amp;#x000A;&lt;span id="LC85" class="line" lang="plaintext"&gt; wlr_scene: Remove duplicate buffer check when submitting a new buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC86" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC87" class="line" lang="plaintext"&gt;Antonin Décimo (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC88" class="line" lang="plaintext"&gt; xcursor: check that XDG base directory path is absolute&lt;/span&gt;&amp;#x000A;&lt;span id="LC89" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC90" class="line" lang="plaintext"&gt;Bernardo Meurer (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC91" class="line" lang="plaintext"&gt; render/vulkan: fix memory type detection&lt;/span&gt;&amp;#x000A;&lt;span id="LC92" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC93" class="line" lang="plaintext"&gt;Consolatis (4):&lt;/span&gt;&amp;#x000A;&lt;span id="LC94" class="line" lang="plaintext"&gt; wlr_scene: Fix scaling with default source_box&lt;/span&gt;&amp;#x000A;&lt;span id="LC95" class="line" lang="plaintext"&gt; scene/output_layout: Fix crash in scene_output_layout_output_destroy&lt;/span&gt;&amp;#x000A;&lt;span id="LC96" class="line" lang="plaintext"&gt; wlr_virtual_pointer_v1: fix discrete scrolling&lt;/span&gt;&amp;#x000A;&lt;span id="LC97" class="line" lang="plaintext"&gt; screencopy-v1: make sure wlr_buffer enum is visible&lt;/span&gt;&amp;#x000A;&lt;span id="LC98" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC99" class="line" lang="plaintext"&gt;David96 (4):&lt;/span&gt;&amp;#x000A;&lt;span id="LC100" class="line" lang="plaintext"&gt; types/wlr_tablet_tool: remove name ambiguity&lt;/span&gt;&amp;#x000A;&lt;span id="LC101" class="line" lang="plaintext"&gt; render/vulkan: Implement vulkan_read_pixels&lt;/span&gt;&amp;#x000A;&lt;span id="LC102" class="line" lang="plaintext"&gt; render/vulkan: implement vulkan_preferred_read_format&lt;/span&gt;&amp;#x000A;&lt;span id="LC103" class="line" lang="plaintext"&gt; render/vulkan: add caching to vulkan_read_pixels&lt;/span&gt;&amp;#x000A;&lt;span id="LC104" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC105" class="line" lang="plaintext"&gt;Dean (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC106" class="line" lang="plaintext"&gt; Free drmDevice in get_egl_device_from_drm_fd()&lt;/span&gt;&amp;#x000A;&lt;span id="LC107" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC108" class="line" lang="plaintext"&gt;Dominique Martinet (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC109" class="line" lang="plaintext"&gt; Xwayland: rename notify pipe 'p' to notify_fd&lt;/span&gt;&amp;#x000A;&lt;span id="LC110" class="line" lang="plaintext"&gt; Xwayland: use -displayfd instead of USR1&lt;/span&gt;&amp;#x000A;&lt;span id="LC111" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC112" class="line" lang="plaintext"&gt;Ferdinand Bachmann (3):&lt;/span&gt;&amp;#x000A;&lt;span id="LC113" class="line" lang="plaintext"&gt; types/wlr_pointer_gestures_v1: null-check both focused_surface and focused_client&lt;/span&gt;&amp;#x000A;&lt;span id="LC114" class="line" lang="plaintext"&gt; types/wlr_pointer_gestures_v1.c: get client from seat client instead of resource&lt;/span&gt;&amp;#x000A;&lt;span id="LC115" class="line" lang="plaintext"&gt; types/seat/wlr_seat.c: fix focused_client being null after seat_client recreation&lt;/span&gt;&amp;#x000A;&lt;span id="LC116" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC117" class="line" lang="plaintext"&gt;Gentaiii (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC118" class="line" lang="plaintext"&gt; Fixed false allocation failed&lt;/span&gt;&amp;#x000A;&lt;span id="LC119" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC120" class="line" lang="plaintext"&gt;Guido Günther (4):&lt;/span&gt;&amp;#x000A;&lt;span id="LC121" class="line" lang="plaintext"&gt; examples/input-method: Don't crash on NULL surrounding text&lt;/span&gt;&amp;#x000A;&lt;span id="LC122" class="line" lang="plaintext"&gt; layer-shell: Make wlr_layer_surface_v1_from_resource public&lt;/span&gt;&amp;#x000A;&lt;span id="LC123" class="line" lang="plaintext"&gt; xdg-activation: Deduplicate token creation code&lt;/span&gt;&amp;#x000A;&lt;span id="LC124" class="line" lang="plaintext"&gt; seat: Allow to cancel touches&lt;/span&gt;&amp;#x000A;&lt;span id="LC125" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC126" class="line" lang="plaintext"&gt;Isaac Freund (20):&lt;/span&gt;&amp;#x000A;&lt;span id="LC127" class="line" lang="plaintext"&gt; layer-shell: fix type of margins&lt;/span&gt;&amp;#x000A;&lt;span id="LC128" class="line" lang="plaintext"&gt; wlr_texture: remove wlr_texture_from_wl_drm() from header&lt;/span&gt;&amp;#x000A;&lt;span id="LC129" class="line" lang="plaintext"&gt; tinywl: fix check whether client is focused or not&lt;/span&gt;&amp;#x000A;&lt;span id="LC130" class="line" lang="plaintext"&gt; foreign-toplevel: send enter if needed on output bind&lt;/span&gt;&amp;#x000A;&lt;span id="LC131" class="line" lang="plaintext"&gt; xdg-output: remove dead code&lt;/span&gt;&amp;#x000A;&lt;span id="LC132" class="line" lang="plaintext"&gt; ext-session-lock-v1: new protocol implementation&lt;/span&gt;&amp;#x000A;&lt;span id="LC133" class="line" lang="plaintext"&gt; wlr_cursor: constify map to region box arguments&lt;/span&gt;&amp;#x000A;&lt;span id="LC134" class="line" lang="plaintext"&gt; wlr_switch: remove WLR_SWITCH_STATE_TOGGLE&lt;/span&gt;&amp;#x000A;&lt;span id="LC135" class="line" lang="plaintext"&gt; backend/drm: fix check for no-op commits&lt;/span&gt;&amp;#x000A;&lt;span id="LC136" class="line" lang="plaintext"&gt; backend/drm: fix NULL pointer deference due to typo&lt;/span&gt;&amp;#x000A;&lt;span id="LC137" class="line" lang="plaintext"&gt; output: fix leak of empty back buffer lock&lt;/span&gt;&amp;#x000A;&lt;span id="LC138" class="line" lang="plaintext"&gt; wlr_input_device: remove anon union field&lt;/span&gt;&amp;#x000A;&lt;span id="LC139" class="line" lang="plaintext"&gt; Document NULL return value of foo_from_wlr_surface() functions&lt;/span&gt;&amp;#x000A;&lt;span id="LC140" class="line" lang="plaintext"&gt; wlr-output-management: Implement version 3 release requests&lt;/span&gt;&amp;#x000A;&lt;span id="LC141" class="line" lang="plaintext"&gt; wlr-output-management: fix broken asserts&lt;/span&gt;&amp;#x000A;&lt;span id="LC142" class="line" lang="plaintext"&gt; output: clean up after modifierless test failure&lt;/span&gt;&amp;#x000A;&lt;span id="LC143" class="line" lang="plaintext"&gt; backend/wayland: report adaptive sync as enabled&lt;/span&gt;&amp;#x000A;&lt;span id="LC144" class="line" lang="plaintext"&gt; backend/x11: report adaptive sync as enabled&lt;/span&gt;&amp;#x000A;&lt;span id="LC145" class="line" lang="plaintext"&gt; output: remove unknown adaptive sync state&lt;/span&gt;&amp;#x000A;&lt;span id="LC146" class="line" lang="plaintext"&gt; wlr-output-management: implement adaptive sync&lt;/span&gt;&amp;#x000A;&lt;span id="LC147" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC148" class="line" lang="plaintext"&gt;Johan Malm (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC149" class="line" lang="plaintext"&gt; scene/layer_shell_v1.c: fix bug in width/height calculations&lt;/span&gt;&amp;#x000A;&lt;span id="LC150" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC151" class="line" lang="plaintext"&gt;Johannes (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC152" class="line" lang="plaintext"&gt; examples/egl_common: switch rgba format&lt;/span&gt;&amp;#x000A;&lt;span id="LC153" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC154" class="line" lang="plaintext"&gt;John Lindgren (6):&lt;/span&gt;&amp;#x000A;&lt;span id="LC155" class="line" lang="plaintext"&gt; Revert "Copy xcb_icccm structs into wlroots"&lt;/span&gt;&amp;#x000A;&lt;span id="LC156" class="line" lang="plaintext"&gt; wlr_drm_lease_v1: Fix use-after-free in backend_destroy()&lt;/span&gt;&amp;#x000A;&lt;span id="LC157" class="line" lang="plaintext"&gt; cursor: Add a more general check for infinite/NaN cursor position&lt;/span&gt;&amp;#x000A;&lt;span id="LC158" class="line" lang="plaintext"&gt; cursor: Don't warp to (0,0) when last output is disconnected&lt;/span&gt;&amp;#x000A;&lt;span id="LC159" class="line" lang="plaintext"&gt; backend/libinput: Fix SIGSEGV found in low-memory fuzzing&lt;/span&gt;&amp;#x000A;&lt;span id="LC160" class="line" lang="plaintext"&gt; render/vulkan: Fix type-punned pointer warning/error&lt;/span&gt;&amp;#x000A;&lt;span id="LC161" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC162" class="line" lang="plaintext"&gt;Joshua Ashton (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC163" class="line" lang="plaintext"&gt; xwayland: Add support for -force-xrandr-emulation&lt;/span&gt;&amp;#x000A;&lt;span id="LC164" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC165" class="line" lang="plaintext"&gt;José Expósito (8):&lt;/span&gt;&amp;#x000A;&lt;span id="LC166" class="line" lang="plaintext"&gt; build: bump Wayland to v1.21&lt;/span&gt;&amp;#x000A;&lt;span id="LC167" class="line" lang="plaintext"&gt; build: check if libinput supports high-res scroll&lt;/span&gt;&amp;#x000A;&lt;span id="LC168" class="line" lang="plaintext"&gt; pointer: transform low-res to high-res axis events&lt;/span&gt;&amp;#x000A;&lt;span id="LC169" class="line" lang="plaintext"&gt; backend/libinput: handle high-res scroll events&lt;/span&gt;&amp;#x000A;&lt;span id="LC170" class="line" lang="plaintext"&gt; backend/libinput: code style consistency&lt;/span&gt;&amp;#x000A;&lt;span id="LC171" class="line" lang="plaintext"&gt; backend/wayland: handle high-res scroll events&lt;/span&gt;&amp;#x000A;&lt;span id="LC172" class="line" lang="plaintext"&gt; seat: support high-resolution clients&lt;/span&gt;&amp;#x000A;&lt;span id="LC173" class="line" lang="plaintext"&gt; seat: support low-resolution clients&lt;/span&gt;&amp;#x000A;&lt;span id="LC174" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC175" class="line" lang="plaintext"&gt;Keith Bowes (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC176" class="line" lang="plaintext"&gt; Fixed compiling with FFmpeg 5.0&lt;/span&gt;&amp;#x000A;&lt;span id="LC177" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC178" class="line" lang="plaintext"&gt;Kenny Levinsen (8):&lt;/span&gt;&amp;#x000A;&lt;span id="LC179" class="line" lang="plaintext"&gt; scene: Add layer_shell_v1 helper&lt;/span&gt;&amp;#x000A;&lt;span id="LC180" class="line" lang="plaintext"&gt; meson: soversion arg should be string&lt;/span&gt;&amp;#x000A;&lt;span id="LC181" class="line" lang="plaintext"&gt; wlr_{keyboard,pointer,touch}: Update event docs&lt;/span&gt;&amp;#x000A;&lt;span id="LC182" class="line" lang="plaintext"&gt; Set mapped before firing map/unmap events&lt;/span&gt;&amp;#x000A;&lt;span id="LC183" class="line" lang="plaintext"&gt; xdg_shell: Destroy popups after unmap event&lt;/span&gt;&amp;#x000A;&lt;span id="LC184" class="line" lang="plaintext"&gt; scene/layer_shell: Ignore unmapped exclusion zone&lt;/span&gt;&amp;#x000A;&lt;span id="LC185" class="line" lang="plaintext"&gt; util/array: Add array_realloc for wl_array&lt;/span&gt;&amp;#x000A;&lt;span id="LC186" class="line" lang="plaintext"&gt; wlr_scene: Convert render_list to wl_array&lt;/span&gt;&amp;#x000A;&lt;span id="LC187" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC188" class="line" lang="plaintext"&gt;Kirill Chibisov (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC189" class="line" lang="plaintext"&gt; meson: use target_machine instead of host_machine&lt;/span&gt;&amp;#x000A;&lt;span id="LC190" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC191" class="line" lang="plaintext"&gt;Kirill Primak (103):&lt;/span&gt;&amp;#x000A;&lt;span id="LC192" class="line" lang="plaintext"&gt; scene/subsurface_tree: fix handling subsurface destruction&lt;/span&gt;&amp;#x000A;&lt;span id="LC193" class="line" lang="plaintext"&gt; subcompositor: split out from compositor&lt;/span&gt;&amp;#x000A;&lt;span id="LC194" class="line" lang="plaintext"&gt; surface: introduce events.client_commit&lt;/span&gt;&amp;#x000A;&lt;span id="LC195" class="line" lang="plaintext"&gt; surface: move impl to types/wlr_{sub,}compositor.c&lt;/span&gt;&amp;#x000A;&lt;span id="LC196" class="line" lang="plaintext"&gt; surface: move decl to wlr_{sub,}compositor.h&lt;/span&gt;&amp;#x000A;&lt;span id="LC197" class="line" lang="plaintext"&gt; surface: deprecate wlr_surface.h&lt;/span&gt;&amp;#x000A;&lt;span id="LC198" class="line" lang="plaintext"&gt; surface: improve role precommit hook&lt;/span&gt;&amp;#x000A;&lt;span id="LC199" class="line" lang="plaintext"&gt; compositor: damage the whole buffer on viewport src change&lt;/span&gt;&amp;#x000A;&lt;span id="LC200" class="line" lang="plaintext"&gt; subsurface: unlock cached state on commit if desynced&lt;/span&gt;&amp;#x000A;&lt;span id="LC201" class="line" lang="plaintext"&gt; output-layout: make wlr_output_layout_get_box() take a box as parameter&lt;/span&gt;&amp;#x000A;&lt;span id="LC202" class="line" lang="plaintext"&gt; output-layout: remove useless types/fields&lt;/span&gt;&amp;#x000A;&lt;span id="LC203" class="line" lang="plaintext"&gt; cursor: store mapped_box as value&lt;/span&gt;&amp;#x000A;&lt;span id="LC204" class="line" lang="plaintext"&gt; cursor: ensure mapping box is always initialized&lt;/span&gt;&amp;#x000A;&lt;span id="LC205" class="line" lang="plaintext"&gt; xdg-shell: rename surface role handlers&lt;/span&gt;&amp;#x000A;&lt;span id="LC206" class="line" lang="plaintext"&gt; xdg-shell: fix create_xdg_popup() param type&lt;/span&gt;&amp;#x000A;&lt;span id="LC207" class="line" lang="plaintext"&gt; xdg-toplevel: fix functions' main argument type&lt;/span&gt;&amp;#x000A;&lt;span id="LC208" class="line" lang="plaintext"&gt; xdg-popup: fix functions' main argument type&lt;/span&gt;&amp;#x000A;&lt;span id="LC209" class="line" lang="plaintext"&gt; xdg-shell: remove "xdg" from docs&lt;/span&gt;&amp;#x000A;&lt;span id="LC210" class="line" lang="plaintext"&gt; xdg-shell: unify function arguments' names&lt;/span&gt;&amp;#x000A;&lt;span id="LC211" class="line" lang="plaintext"&gt; xdg-toplevel: change parent type to xdg-toplevel&lt;/span&gt;&amp;#x000A;&lt;span id="LC212" class="line" lang="plaintext"&gt; xdg-toplevel: change object type in event structs&lt;/span&gt;&amp;#x000A;&lt;span id="LC213" class="line" lang="plaintext"&gt; xdg-shell: extract role-specific unmap logic&lt;/span&gt;&amp;#x000A;&lt;span id="LC214" class="line" lang="plaintext"&gt; xdg-shell: fix potential use-after-free&lt;/span&gt;&amp;#x000A;&lt;span id="LC215" class="line" lang="plaintext"&gt; xdg-popup: destroy popup-less grab&lt;/span&gt;&amp;#x000A;&lt;span id="LC216" class="line" lang="plaintext"&gt; xdg-surface: minor consistency renaming&lt;/span&gt;&amp;#x000A;&lt;span id="LC217" class="line" lang="plaintext"&gt; xdg-shell: drop wlr_xdg_toplevel_set_fullscreen_event&lt;/span&gt;&amp;#x000A;&lt;span id="LC218" class="line" lang="plaintext"&gt; xdg-toplevel: fix `requested` doc&lt;/span&gt;&amp;#x000A;&lt;span id="LC219" class="line" lang="plaintext"&gt; xdg-surface: avoid emitting signals with their owner object&lt;/span&gt;&amp;#x000A;&lt;span id="LC220" class="line" lang="plaintext"&gt; xdg-popup: send invalid_positioner to the right resource&lt;/span&gt;&amp;#x000A;&lt;span id="LC221" class="line" lang="plaintext"&gt; CONTRIBUTING.md: update construction/destruction functions' description&lt;/span&gt;&amp;#x000A;&lt;span id="LC222" class="line" lang="plaintext"&gt; xdg-{toplevel,popup}: extract destructors&lt;/span&gt;&amp;#x000A;&lt;span id="LC223" class="line" lang="plaintext"&gt; xdg-positioner: rename structs&lt;/span&gt;&amp;#x000A;&lt;span id="LC224" class="line" lang="plaintext"&gt; xdg-positioner: rewrite unconstraining, untie from xdg-popup&lt;/span&gt;&amp;#x000A;&lt;span id="LC225" class="line" lang="plaintext"&gt; xdg-positioner: fix sliding regression&lt;/span&gt;&amp;#x000A;&lt;span id="LC226" class="line" lang="plaintext"&gt; tinywl: don't generate xdg-shell-protocol.c&lt;/span&gt;&amp;#x000A;&lt;span id="LC227" class="line" lang="plaintext"&gt; tinywl: remove outdated non-feature from README.md&lt;/span&gt;&amp;#x000A;&lt;span id="LC228" class="line" lang="plaintext"&gt; xdg-toplevel: treat unmapped parents as NULL&lt;/span&gt;&amp;#x000A;&lt;span id="LC229" class="line" lang="plaintext"&gt; xdg-foreign-v1: treat unmapped parents as NULL&lt;/span&gt;&amp;#x000A;&lt;span id="LC230" class="line" lang="plaintext"&gt; xdg-foreign-v2: treat unmapped parents as NULL&lt;/span&gt;&amp;#x000A;&lt;span id="LC231" class="line" lang="plaintext"&gt; xdg-toplevel: don't schedule configures on state requests&lt;/span&gt;&amp;#x000A;&lt;span id="LC232" class="line" lang="plaintext"&gt; scene/output-layout: fix scene destroy handler&lt;/span&gt;&amp;#x000A;&lt;span id="LC233" class="line" lang="plaintext"&gt; backend/wayland/pointer: fix indentation&lt;/span&gt;&amp;#x000A;&lt;span id="LC234" class="line" lang="plaintext"&gt; backend/wayland: zero out finished input devices&lt;/span&gt;&amp;#x000A;&lt;span id="LC235" class="line" lang="plaintext"&gt; CONTRIBUTING.md: update init/finish description&lt;/span&gt;&amp;#x000A;&lt;span id="LC236" class="line" lang="plaintext"&gt; backend/wayland: reset active pointer on destroy&lt;/span&gt;&amp;#x000A;&lt;span id="LC237" class="line" lang="plaintext"&gt; examples/layer-shell: premultiply alpha&lt;/span&gt;&amp;#x000A;&lt;span id="LC238" class="line" lang="plaintext"&gt; xdg-toplevel: store states on the stack&lt;/span&gt;&amp;#x000A;&lt;span id="LC239" class="line" lang="plaintext"&gt; scene/output: check for NULL in destructor&lt;/span&gt;&amp;#x000A;&lt;span id="LC240" class="line" lang="plaintext"&gt; util/addon: avoid calling finish() twice&lt;/span&gt;&amp;#x000A;&lt;span id="LC241" class="line" lang="plaintext"&gt; xdg-popup: add proper configure flow&lt;/span&gt;&amp;#x000A;&lt;span id="LC242" class="line" lang="plaintext"&gt; xdg-popup: use current/pending state pattern&lt;/span&gt;&amp;#x000A;&lt;span id="LC243" class="line" lang="plaintext"&gt; xdg-positioner: add v3 parameters&lt;/span&gt;&amp;#x000A;&lt;span id="LC244" class="line" lang="plaintext"&gt; xdg-popup: add reposition support&lt;/span&gt;&amp;#x000A;&lt;span id="LC245" class="line" lang="plaintext"&gt; xdg-shell: bump version to 3&lt;/span&gt;&amp;#x000A;&lt;span id="LC246" class="line" lang="plaintext"&gt; tinywl: use xdg-shell v3&lt;/span&gt;&amp;#x000A;&lt;span id="LC247" class="line" lang="plaintext"&gt; scene/wlr_scene.h: fix indentation&lt;/span&gt;&amp;#x000A;&lt;span id="LC248" class="line" lang="plaintext"&gt; scene: add wlr_scene_output.events.destroy&lt;/span&gt;&amp;#x000A;&lt;span id="LC249" class="line" lang="plaintext"&gt; scene/output-layout: improve ownership logic&lt;/span&gt;&amp;#x000A;&lt;span id="LC250" class="line" lang="plaintext"&gt; scene/output-layout: add initial outputs&lt;/span&gt;&amp;#x000A;&lt;span id="LC251" class="line" lang="plaintext"&gt; xdg-shell: improve shell version check&lt;/span&gt;&amp;#x000A;&lt;span id="LC252" class="line" lang="plaintext"&gt; subcompositor: consider map on creation&lt;/span&gt;&amp;#x000A;&lt;span id="LC253" class="line" lang="plaintext"&gt; xdg-toplevel: post no memory on strdup() fail&lt;/span&gt;&amp;#x000A;&lt;span id="LC254" class="line" lang="plaintext"&gt; xdg-popup: use configure fields&lt;/span&gt;&amp;#x000A;&lt;span id="LC255" class="line" lang="plaintext"&gt; types: add wlr_damage_ring&lt;/span&gt;&amp;#x000A;&lt;span id="LC256" class="line" lang="plaintext"&gt; scene: switch to wlr_damage_ring&lt;/span&gt;&amp;#x000A;&lt;span id="LC257" class="line" lang="plaintext"&gt; scene: add missing output damage listener&lt;/span&gt;&amp;#x000A;&lt;span id="LC258" class="line" lang="plaintext"&gt; seat/pointer: rework sending axis events&lt;/span&gt;&amp;#x000A;&lt;span id="LC259" class="line" lang="plaintext"&gt; util/array: unclutter&lt;/span&gt;&amp;#x000A;&lt;span id="LC260" class="line" lang="plaintext"&gt; util/set: overhaul&lt;/span&gt;&amp;#x000A;&lt;span id="LC261" class="line" lang="plaintext"&gt; cursor: avoid uninitialized wlr_box fields&lt;/span&gt;&amp;#x000A;&lt;span id="LC262" class="line" lang="plaintext"&gt; output-layout: avoid uninitialized wlr_box fields&lt;/span&gt;&amp;#x000A;&lt;span id="LC263" class="line" lang="plaintext"&gt; output-layout: improve wlr_output_layout_output_in_direction()&lt;/span&gt;&amp;#x000A;&lt;span id="LC264" class="line" lang="plaintext"&gt; xdg-foreign-v1: s/unmap/destroy&lt;/span&gt;&amp;#x000A;&lt;span id="LC265" class="line" lang="plaintext"&gt; xdg-foreign-v2: s/unmap/destroy&lt;/span&gt;&amp;#x000A;&lt;span id="LC266" class="line" lang="plaintext"&gt; subcompositor: move+rename subsurface_parent_commit()&lt;/span&gt;&amp;#x000A;&lt;span id="LC267" class="line" lang="plaintext"&gt; subcompositor: consider mapping after adding&lt;/span&gt;&amp;#x000A;&lt;span id="LC268" class="line" lang="plaintext"&gt; xdg-toplevel: validate resize_edge&lt;/span&gt;&amp;#x000A;&lt;span id="LC269" class="line" lang="plaintext"&gt; foreign-toplevel-management: fix indentation&lt;/span&gt;&amp;#x000A;&lt;span id="LC270" class="line" lang="plaintext"&gt; output-damage: fix setting pending_attach_render&lt;/span&gt;&amp;#x000A;&lt;span id="LC271" class="line" lang="plaintext"&gt; output-damage: drop precommit listener&lt;/span&gt;&amp;#x000A;&lt;span id="LC272" class="line" lang="plaintext"&gt; output-damage: drop unused pending_attach_render&lt;/span&gt;&amp;#x000A;&lt;span id="LC273" class="line" lang="plaintext"&gt; output: add a swapchain NULL check in wlr_output_commit_state()&lt;/span&gt;&amp;#x000A;&lt;span id="LC274" class="line" lang="plaintext"&gt; tablet-v2: fix event parameters&lt;/span&gt;&amp;#x000A;&lt;span id="LC275" class="line" lang="plaintext"&gt; xdg-toplevel: send invalid_parent error&lt;/span&gt;&amp;#x000A;&lt;span id="LC276" class="line" lang="plaintext"&gt; scene: fix buffer source box transforming&lt;/span&gt;&amp;#x000A;&lt;span id="LC277" class="line" lang="plaintext"&gt; xdg-shell: fix geometry types&lt;/span&gt;&amp;#x000A;&lt;span id="LC278" class="line" lang="plaintext"&gt; compositor: introduce wlr_surface_destroy_role_object()&lt;/span&gt;&amp;#x000A;&lt;span id="LC279" class="line" lang="plaintext"&gt; layer-shell: use role object destroy handler&lt;/span&gt;&amp;#x000A;&lt;span id="LC280" class="line" lang="plaintext"&gt; subcompositor: use role object destroy handler&lt;/span&gt;&amp;#x000A;&lt;span id="LC281" class="line" lang="plaintext"&gt; session-lock: use role object destroy handler&lt;/span&gt;&amp;#x000A;&lt;span id="LC282" class="line" lang="plaintext"&gt; input-method: use role object destroy handler&lt;/span&gt;&amp;#x000A;&lt;span id="LC283" class="line" lang="plaintext"&gt; drag-icon: use role object destroy handler&lt;/span&gt;&amp;#x000A;&lt;span id="LC284" class="line" lang="plaintext"&gt; xdg-shell: use role object destroy handler&lt;/span&gt;&amp;#x000A;&lt;span id="LC285" class="line" lang="plaintext"&gt; xwayland/xwm: use role object destroy handler&lt;/span&gt;&amp;#x000A;&lt;span id="LC286" class="line" lang="plaintext"&gt; compositor: drop role object NULL checks in handlers&lt;/span&gt;&amp;#x000A;&lt;span id="LC287" class="line" lang="plaintext"&gt; compositor: enforce surface destruction order&lt;/span&gt;&amp;#x000A;&lt;span id="LC288" class="line" lang="plaintext"&gt; tinywl: handle view unmap while grabbed&lt;/span&gt;&amp;#x000A;&lt;span id="LC289" class="line" lang="plaintext"&gt; compositor: use the correct input region&lt;/span&gt;&amp;#x000A;&lt;span id="LC290" class="line" lang="plaintext"&gt; scene: fix output damage expansion&lt;/span&gt;&amp;#x000A;&lt;span id="LC291" class="line" lang="plaintext"&gt; render/pixman: apply source image cropping&lt;/span&gt;&amp;#x000A;&lt;span id="LC292" class="line" lang="plaintext"&gt; Revert "render/pixman: apply source image cropping"&lt;/span&gt;&amp;#x000A;&lt;span id="LC293" class="line" lang="plaintext"&gt; damage-ring: add missing headers&lt;/span&gt;&amp;#x000A;&lt;span id="LC294" class="line" lang="plaintext"&gt; output-damage: deprecate&lt;/span&gt;&amp;#x000A;&lt;span id="LC295" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC296" class="line" lang="plaintext"&gt;Leonardo Hernández Hernández (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC297" class="line" lang="plaintext"&gt; seat: take wlr_keyboard in wlr_seat_set_keyboard()&lt;/span&gt;&amp;#x000A;&lt;span id="LC298" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC299" class="line" lang="plaintext"&gt;Manuel Stoeckl (3):&lt;/span&gt;&amp;#x000A;&lt;span id="LC300" class="line" lang="plaintext"&gt; render/gles: add support for some 16-bpc unsigned shm formats&lt;/span&gt;&amp;#x000A;&lt;span id="LC301" class="line" lang="plaintext"&gt; screencopy-v1: Fix frame stride for formats with bpp != 32&lt;/span&gt;&amp;#x000A;&lt;span id="LC302" class="line" lang="plaintext"&gt; render/gles2: simplify alpha depth check&lt;/span&gt;&amp;#x000A;&lt;span id="LC303" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC304" class="line" lang="plaintext"&gt;Mark Bolhuis (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC305" class="line" lang="plaintext"&gt; types/wlr_xdg_output_v1: Fix wl_output.done bug.&lt;/span&gt;&amp;#x000A;&lt;span id="LC306" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC307" class="line" lang="plaintext"&gt;Moon Sungjoon (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC308" class="line" lang="plaintext"&gt; xcursor: support XDG Base Directory Specification&lt;/span&gt;&amp;#x000A;&lt;span id="LC309" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC310" class="line" lang="plaintext"&gt;Quantum (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC311" class="line" lang="plaintext"&gt; seat/pointer: fix uninitialized variable warning&lt;/span&gt;&amp;#x000A;&lt;span id="LC312" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC313" class="line" lang="plaintext"&gt;Roman Gilg (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC314" class="line" lang="plaintext"&gt; output: clear buffer created for test&lt;/span&gt;&amp;#x000A;&lt;span id="LC315" class="line" lang="plaintext"&gt; render: allow texture creation while rendering&lt;/span&gt;&amp;#x000A;&lt;span id="LC316" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC317" class="line" lang="plaintext"&gt;Rouven Czerwinski (3):&lt;/span&gt;&amp;#x000A;&lt;span id="LC318" class="line" lang="plaintext"&gt; relative_pointer: handle inert pointer objects&lt;/span&gt;&amp;#x000A;&lt;span id="LC319" class="line" lang="plaintext"&gt; cursor: re-enable NULL buffer for cursor&lt;/span&gt;&amp;#x000A;&lt;span id="LC320" class="line" lang="plaintext"&gt; meson: update default options for libdrm&lt;/span&gt;&amp;#x000A;&lt;span id="LC321" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC322" class="line" lang="plaintext"&gt;Samuel Čavoj (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC323" class="line" lang="plaintext"&gt; Pass O_CLOEXEC to drmModeCreateLease calls&lt;/span&gt;&amp;#x000A;&lt;span id="LC324" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC325" class="line" lang="plaintext"&gt;Sebastian Krzyszkowiak (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC326" class="line" lang="plaintext"&gt; wlr_output_layout_contains_point: handle outputs that aren't in the layout&lt;/span&gt;&amp;#x000A;&lt;span id="LC327" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC328" class="line" lang="plaintext"&gt;Simon Ser (192):&lt;/span&gt;&amp;#x000A;&lt;span id="LC329" class="line" lang="plaintext"&gt; build: bump to version 0.16.0&lt;/span&gt;&amp;#x000A;&lt;span id="LC330" class="line" lang="plaintext"&gt; build: bump soversion&lt;/span&gt;&amp;#x000A;&lt;span id="LC331" class="line" lang="plaintext"&gt; Remove wlr_box.h redirection&lt;/span&gt;&amp;#x000A;&lt;span id="LC332" class="line" lang="plaintext"&gt; build: simplify Meson subproject fallbacks&lt;/span&gt;&amp;#x000A;&lt;span id="LC333" class="line" lang="plaintext"&gt; backend: error out in autocreate without libinput support&lt;/span&gt;&amp;#x000A;&lt;span id="LC334" class="line" lang="plaintext"&gt; scene: schedule an output frame on wl_surface.frame&lt;/span&gt;&amp;#x000A;&lt;span id="LC335" class="line" lang="plaintext"&gt; readme: drop mention of the Sway project&lt;/span&gt;&amp;#x000A;&lt;span id="LC336" class="line" lang="plaintext"&gt; render/vulkan: log physical device driver name&lt;/span&gt;&amp;#x000A;&lt;span id="LC337" class="line" lang="plaintext"&gt; editorconfig: set max_line_length&lt;/span&gt;&amp;#x000A;&lt;span id="LC338" class="line" lang="plaintext"&gt; subcompositor: document subsurface_from_resource&lt;/span&gt;&amp;#x000A;&lt;span id="LC339" class="line" lang="plaintext"&gt; subcompositor: destroy subsurface with parent&lt;/span&gt;&amp;#x000A;&lt;span id="LC340" class="line" lang="plaintext"&gt; scene: try to import buffers as textures before rendering&lt;/span&gt;&amp;#x000A;&lt;span id="LC341" class="line" lang="plaintext"&gt; buffer: extract interface to separate header&lt;/span&gt;&amp;#x000A;&lt;span id="LC342" class="line" lang="plaintext"&gt; Revert "scene: try to import buffers as textures before rendering"&lt;/span&gt;&amp;#x000A;&lt;span id="LC343" class="line" lang="plaintext"&gt; util/addon: fix public include&lt;/span&gt;&amp;#x000A;&lt;span id="LC344" class="line" lang="plaintext"&gt; Zero-initialize structs in init functions&lt;/span&gt;&amp;#x000A;&lt;span id="LC345" class="line" lang="plaintext"&gt; Revert "backend/wayland: zero out finished input devices"&lt;/span&gt;&amp;#x000A;&lt;span id="LC346" class="line" lang="plaintext"&gt; drm-lease-v1: skip device on wlr_drm_backend_get_non_master_fd failure&lt;/span&gt;&amp;#x000A;&lt;span id="LC347" class="line" lang="plaintext"&gt; xwayland: add wlr_xwayland_server_options.terminate_delay&lt;/span&gt;&amp;#x000A;&lt;span id="LC348" class="line" lang="plaintext"&gt; xwayland: terminate when no client is connected&lt;/span&gt;&amp;#x000A;&lt;span id="LC349" class="line" lang="plaintext"&gt; backend/headless: allow variable refresh rate&lt;/span&gt;&amp;#x000A;&lt;span id="LC350" class="line" lang="plaintext"&gt; tinywl: don't crash when there is no keyboard&lt;/span&gt;&amp;#x000A;&lt;span id="LC351" class="line" lang="plaintext"&gt; backend/drm: fetch EDID manufacturer from udev_hwdb&lt;/span&gt;&amp;#x000A;&lt;span id="LC352" class="line" lang="plaintext"&gt; util/shm: clear mode permission bits in allocate_shm_file_pair&lt;/span&gt;&amp;#x000A;&lt;span id="LC353" class="line" lang="plaintext"&gt; xdg-shell: specify version in wlr_xdg_shell_create&lt;/span&gt;&amp;#x000A;&lt;span id="LC354" class="line" lang="plaintext"&gt; xwayland: use dict to collect supported features&lt;/span&gt;&amp;#x000A;&lt;span id="LC355" class="line" lang="plaintext"&gt; build: bump version to 0.16.0-dev&lt;/span&gt;&amp;#x000A;&lt;span id="LC356" class="line" lang="plaintext"&gt; backend/drm: allow non-linear modifiers for multi-GPU&lt;/span&gt;&amp;#x000A;&lt;span id="LC357" class="line" lang="plaintext"&gt; backend/drm: remove wlr_drm_surface.{width,height}&lt;/span&gt;&amp;#x000A;&lt;span id="LC358" class="line" lang="plaintext"&gt; contributing: add section about documentation conventions&lt;/span&gt;&amp;#x000A;&lt;span id="LC359" class="line" lang="plaintext"&gt; Reformat doc comments&lt;/span&gt;&amp;#x000A;&lt;span id="LC360" class="line" lang="plaintext"&gt; render/egl: drop MESA_EGL_NO_X11_HEADERS&lt;/span&gt;&amp;#x000A;&lt;span id="LC361" class="line" lang="plaintext"&gt; render/egl: add wlr_egl_get_{context,display}&lt;/span&gt;&amp;#x000A;&lt;span id="LC362" class="line" lang="plaintext"&gt; render/egl: make wlr_egl struct opaque&lt;/span&gt;&amp;#x000A;&lt;span id="LC363" class="line" lang="plaintext"&gt; render/egl: make wlr_egl_{make,unset,is}_current private&lt;/span&gt;&amp;#x000A;&lt;span id="LC364" class="line" lang="plaintext"&gt; render/egl: document wlr_egl_create_with_context&lt;/span&gt;&amp;#x000A;&lt;span id="LC365" class="line" lang="plaintext"&gt; backend/drm: fix crash in init_drm_surface&lt;/span&gt;&amp;#x000A;&lt;span id="LC366" class="line" lang="plaintext"&gt; output: turn make/model/serial into char *&lt;/span&gt;&amp;#x000A;&lt;span id="LC367" class="line" lang="plaintext"&gt; linux-dmabuf-v1: fix MOD_INVALID handling in feedback tranches&lt;/span&gt;&amp;#x000A;&lt;span id="LC368" class="line" lang="plaintext"&gt; backend/x11: fix output model strdup call&lt;/span&gt;&amp;#x000A;&lt;span id="LC369" class="line" lang="plaintext"&gt; docs/env_vars: fix case of WLR_SCENE_DEBUG_DAMAGE values&lt;/span&gt;&amp;#x000A;&lt;span id="LC370" class="line" lang="plaintext"&gt; gitignore: remove unnecessary entries, add subprojects/&lt;/span&gt;&amp;#x000A;&lt;span id="LC371" class="line" lang="plaintext"&gt; output: pass wlr_output_state to backend&lt;/span&gt;&amp;#x000A;&lt;span id="LC372" class="line" lang="plaintext"&gt; output: pass wlr_output_state to output_pending_resolution&lt;/span&gt;&amp;#x000A;&lt;span id="LC373" class="line" lang="plaintext"&gt; output: pass wlr_output_state to rendering functions&lt;/span&gt;&amp;#x000A;&lt;span id="LC374" class="line" lang="plaintext"&gt; output: add wlr_output_test_state&lt;/span&gt;&amp;#x000A;&lt;span id="LC375" class="line" lang="plaintext"&gt; output: add wlr_output_event_precommit.state&lt;/span&gt;&amp;#x000A;&lt;span id="LC376" class="line" lang="plaintext"&gt; output: add output_state_{init,finish}&lt;/span&gt;&amp;#x000A;&lt;span id="LC377" class="line" lang="plaintext"&gt; output: add wlr_output_commit_state&lt;/span&gt;&amp;#x000A;&lt;span id="LC378" class="line" lang="plaintext"&gt; build: make GBM optional&lt;/span&gt;&amp;#x000A;&lt;span id="LC379" class="line" lang="plaintext"&gt; relative-pointer-v1: remove unnecessary comments&lt;/span&gt;&amp;#x000A;&lt;span id="LC380" class="line" lang="plaintext"&gt; relative-pointer-v1: remove unnecessary log messages&lt;/span&gt;&amp;#x000A;&lt;span id="LC381" class="line" lang="plaintext"&gt; relative-pointer-v1: don't allocate when inert&lt;/span&gt;&amp;#x000A;&lt;span id="LC382" class="line" lang="plaintext"&gt; backend/drm: improve atomic commit flag logging&lt;/span&gt;&amp;#x000A;&lt;span id="LC383" class="line" lang="plaintext"&gt; output: remove noop backend check in wlr_output_cursor_set_image&lt;/span&gt;&amp;#x000A;&lt;span id="LC384" class="line" lang="plaintext"&gt; output: introduce wlr_output_cursor_set_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC385" class="line" lang="plaintext"&gt; output: re-implement set_image with set_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC386" class="line" lang="plaintext"&gt; output: drop wlr_output_cursor.events.destroy&lt;/span&gt;&amp;#x000A;&lt;span id="LC387" class="line" lang="plaintext"&gt; compositor: send WL_SURFACE_ERROR_INVALID_SIZE for non-cursor surfaces&lt;/span&gt;&amp;#x000A;&lt;span id="LC388" class="line" lang="plaintext"&gt; xdg-shell: add support for v4&lt;/span&gt;&amp;#x000A;&lt;span id="LC389" class="line" lang="plaintext"&gt; backend/drm: make commits without a buffer blocking&lt;/span&gt;&amp;#x000A;&lt;span id="LC390" class="line" lang="plaintext"&gt; backend/drm: short-circuit no-op commits&lt;/span&gt;&amp;#x000A;&lt;span id="LC391" class="line" lang="plaintext"&gt; examples/text-input: stop using strcpy/strcat&lt;/span&gt;&amp;#x000A;&lt;span id="LC392" class="line" lang="plaintext"&gt; examples/screencopy-dmabuf: stop using strncpy&lt;/span&gt;&amp;#x000A;&lt;span id="LC393" class="line" lang="plaintext"&gt; Remove remaining wl_signal_emit calls&lt;/span&gt;&amp;#x000A;&lt;span id="LC394" class="line" lang="plaintext"&gt; backend/drm: unconditionally set "content type" to graphics&lt;/span&gt;&amp;#x000A;&lt;span id="LC395" class="line" lang="plaintext"&gt; backend/drm: make serial optional&lt;/span&gt;&amp;#x000A;&lt;span id="LC396" class="line" lang="plaintext"&gt; output: fix make/model/serial memory leak&lt;/span&gt;&amp;#x000A;&lt;span id="LC397" class="line" lang="plaintext"&gt; util/global: fix memory leak on display destroy in wlr_global_destroy_safe&lt;/span&gt;&amp;#x000A;&lt;span id="LC398" class="line" lang="plaintext"&gt; output: add output state setters&lt;/span&gt;&amp;#x000A;&lt;span id="LC399" class="line" lang="plaintext"&gt; output: compare state before commit&lt;/span&gt;&amp;#x000A;&lt;span id="LC400" class="line" lang="plaintext"&gt; output: use state setters in wlr_output_set_*&lt;/span&gt;&amp;#x000A;&lt;span id="LC401" class="line" lang="plaintext"&gt; render/gles2: simplify flipped projection&lt;/span&gt;&amp;#x000A;&lt;span id="LC402" class="line" lang="plaintext"&gt; matrix: remove wlr_matrix_projection()&lt;/span&gt;&amp;#x000A;&lt;span id="LC403" class="line" lang="plaintext"&gt; gitignore: remove build dir entries&lt;/span&gt;&amp;#x000A;&lt;span id="LC404" class="line" lang="plaintext"&gt; render/texture: drop wlr_texture_is_opaque&lt;/span&gt;&amp;#x000A;&lt;span id="LC405" class="line" lang="plaintext"&gt; output-management-v1: add wlr_output_head_v1_state_apply()&lt;/span&gt;&amp;#x000A;&lt;span id="LC406" class="line" lang="plaintext"&gt; backend/drm: remove unused CRTC count check&lt;/span&gt;&amp;#x000A;&lt;span id="LC407" class="line" lang="plaintext"&gt; backend/drm: set "max bpc" to the max&lt;/span&gt;&amp;#x000A;&lt;span id="LC408" class="line" lang="plaintext"&gt; render/gles2: check GBM is found&lt;/span&gt;&amp;#x000A;&lt;span id="LC409" class="line" lang="plaintext"&gt; render: use internal_features to indicate EGL support&lt;/span&gt;&amp;#x000A;&lt;span id="LC410" class="line" lang="plaintext"&gt; build: fix enabled GBM when allocators=auto and auto_features=disabled&lt;/span&gt;&amp;#x000A;&lt;span id="LC411" class="line" lang="plaintext"&gt; output: fix missing buffer when using direct scanout&lt;/span&gt;&amp;#x000A;&lt;span id="LC412" class="line" lang="plaintext"&gt; backend/drm: use drmModeGetConnectorTypeName&lt;/span&gt;&amp;#x000A;&lt;span id="LC413" class="line" lang="plaintext"&gt; backend/drm: use drmModeConnectorGetPossibleCrtcs&lt;/span&gt;&amp;#x000A;&lt;span id="LC414" class="line" lang="plaintext"&gt; xdg-shell: add support for v5&lt;/span&gt;&amp;#x000A;&lt;span id="LC415" class="line" lang="plaintext"&gt; single-pixel-buffer-v1: new protocol implementation&lt;/span&gt;&amp;#x000A;&lt;span id="LC416" class="line" lang="plaintext"&gt; backend/drm: remove unused WLR_DRM_CONN_CLEANUP&lt;/span&gt;&amp;#x000A;&lt;span id="LC417" class="line" lang="plaintext"&gt; backend/drm: drop WLR_DRM_CONN_NEEDS_MODESET&lt;/span&gt;&amp;#x000A;&lt;span id="LC418" class="line" lang="plaintext"&gt; backend/drm: drop enum wlr_drm_connector_status&lt;/span&gt;&amp;#x000A;&lt;span id="LC419" class="line" lang="plaintext"&gt; backend/wayland: fix touch device not added on startup&lt;/span&gt;&amp;#x000A;&lt;span id="LC420" class="line" lang="plaintext"&gt; render: replace wlr_texture_write_pixels with update_from_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC421" class="line" lang="plaintext"&gt; surface: add WLR_SURFACE_STATE_OFFSET&lt;/span&gt;&amp;#x000A;&lt;span id="LC422" class="line" lang="plaintext"&gt; surface: implement wl_surface.offset&lt;/span&gt;&amp;#x000A;&lt;span id="LC423" class="line" lang="plaintext"&gt; output: fail commits if adaptive sync cannot be enabled&lt;/span&gt;&amp;#x000A;&lt;span id="LC424" class="line" lang="plaintext"&gt; compositor: fix wlr_surface_set_role return value docs&lt;/span&gt;&amp;#x000A;&lt;span id="LC425" class="line" lang="plaintext"&gt; render/vulkan: drop ext params from vulkan_device_create()&lt;/span&gt;&amp;#x000A;&lt;span id="LC426" class="line" lang="plaintext"&gt; render/vulkan: drop wlr_vk_device.extensions&lt;/span&gt;&amp;#x000A;&lt;span id="LC427" class="line" lang="plaintext"&gt; render/vulkan: fix format features check for shm textures&lt;/span&gt;&amp;#x000A;&lt;span id="LC428" class="line" lang="plaintext"&gt; render/vulkan: remove unnecessary casts&lt;/span&gt;&amp;#x000A;&lt;span id="LC429" class="line" lang="plaintext"&gt; backend/wayland: drop output_set_custom_mode()&lt;/span&gt;&amp;#x000A;&lt;span id="LC430" class="line" lang="plaintext"&gt; xdg-foreign-v1: return wlr_xdg_toplevel in verify_is_toplevel()&lt;/span&gt;&amp;#x000A;&lt;span id="LC431" class="line" lang="plaintext"&gt; xdg-foreign-v2: return wlr_xdg_toplevel in verify_is_toplevel()&lt;/span&gt;&amp;#x000A;&lt;span id="LC432" class="line" lang="plaintext"&gt; render/egl: improve DMA-BUF format/modifier logging&lt;/span&gt;&amp;#x000A;&lt;span id="LC433" class="line" lang="plaintext"&gt; render/allocator/gbm: log human-readable format and modifier&lt;/span&gt;&amp;#x000A;&lt;span id="LC434" class="line" lang="plaintext"&gt; output/render: log human-readable format&lt;/span&gt;&amp;#x000A;&lt;span id="LC435" class="line" lang="plaintext"&gt; render/vulkan: improve format logging&lt;/span&gt;&amp;#x000A;&lt;span id="LC436" class="line" lang="plaintext"&gt; output/cursor: downgrade error messages&lt;/span&gt;&amp;#x000A;&lt;span id="LC437" class="line" lang="plaintext"&gt; buffer: split into multiple files&lt;/span&gt;&amp;#x000A;&lt;span id="LC438" class="line" lang="plaintext"&gt; single-pixel-buffer-v1: fix header guard name&lt;/span&gt;&amp;#x000A;&lt;span id="LC439" class="line" lang="plaintext"&gt; output: fix wlr_output_set_gamma() with zero size&lt;/span&gt;&amp;#x000A;&lt;span id="LC440" class="line" lang="plaintext"&gt; render/egl: add support for EGL_KHR_display_reference&lt;/span&gt;&amp;#x000A;&lt;span id="LC441" class="line" lang="plaintext"&gt; render/vulkan: add error handling for vulkan_find_mem_type()&lt;/span&gt;&amp;#x000A;&lt;span id="LC442" class="line" lang="plaintext"&gt; output: inline output_attach_render()&lt;/span&gt;&amp;#x000A;&lt;span id="LC443" class="line" lang="plaintext"&gt; output: drop back_buffer variable in wlr_output_commit_state()&lt;/span&gt;&amp;#x000A;&lt;span id="LC444" class="line" lang="plaintext"&gt; output: rejigger attach/clear for back buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC445" class="line" lang="plaintext"&gt; backend/drm: de-duplicate wlr_drm_mode creation&lt;/span&gt;&amp;#x000A;&lt;span id="LC446" class="line" lang="plaintext"&gt; output: fix back buffer checks&lt;/span&gt;&amp;#x000A;&lt;span id="LC447" class="line" lang="plaintext"&gt; output: add wlr_output_mode.picture_aspect_ratio&lt;/span&gt;&amp;#x000A;&lt;span id="LC448" class="line" lang="plaintext"&gt; backend/drm: pass through mode picture aspect ratio&lt;/span&gt;&amp;#x000A;&lt;span id="LC449" class="line" lang="plaintext"&gt; screencopy-v1: rename wlr_screencopy_frame_v1.{format,fourcc}&lt;/span&gt;&amp;#x000A;&lt;span id="LC450" class="line" lang="plaintext"&gt; screencopy-v1: use DRM format code for shm buffers&lt;/span&gt;&amp;#x000A;&lt;span id="LC451" class="line" lang="plaintext"&gt; screencopy-v1: rename wlr_screencopy_frame_v1.stride&lt;/span&gt;&amp;#x000A;&lt;span id="LC452" class="line" lang="plaintext"&gt; screencopy-v1: use wlr_buffer APIs&lt;/span&gt;&amp;#x000A;&lt;span id="LC453" class="line" lang="plaintext"&gt; render: drop trailing whitespace&lt;/span&gt;&amp;#x000A;&lt;span id="LC454" class="line" lang="plaintext"&gt; output: add wlr_output_state.allow_artifacts&lt;/span&gt;&amp;#x000A;&lt;span id="LC455" class="line" lang="plaintext"&gt; backend/drm: fix missing wlr_output_state.allow_artifacts&lt;/span&gt;&amp;#x000A;&lt;span id="LC456" class="line" lang="plaintext"&gt; render/vulkan: use addon for wlr_vk_render_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC457" class="line" lang="plaintext"&gt; render/vulkan: use addon for wlr_vk_texture&lt;/span&gt;&amp;#x000A;&lt;span id="LC458" class="line" lang="plaintext"&gt; output: fix typo in error message&lt;/span&gt;&amp;#x000A;&lt;span id="LC459" class="line" lang="plaintext"&gt; render: don't automatically fall back to Vulkan&lt;/span&gt;&amp;#x000A;&lt;span id="LC460" class="line" lang="plaintext"&gt; render: don't fall back to Pixman if we have a render node&lt;/span&gt;&amp;#x000A;&lt;span id="LC461" class="line" lang="plaintext"&gt; render/pixman: advertise support for linear format modifier&lt;/span&gt;&amp;#x000A;&lt;span id="LC462" class="line" lang="plaintext"&gt; render/allocator/drm_dumb: advertise LINEAR instead of INVALID modifier&lt;/span&gt;&amp;#x000A;&lt;span id="LC463" class="line" lang="plaintext"&gt; render/allocator/drm_dumb: check modifier list&lt;/span&gt;&amp;#x000A;&lt;span id="LC464" class="line" lang="plaintext"&gt; render/allocator/drm_dumb: get format info before allocating&lt;/span&gt;&amp;#x000A;&lt;span id="LC465" class="line" lang="plaintext"&gt; render/allocator/drm_dumb: fix error handling&lt;/span&gt;&amp;#x000A;&lt;span id="LC466" class="line" lang="plaintext"&gt; render/allocator/drm_dumb: drop finish_buffer()&lt;/span&gt;&amp;#x000A;&lt;span id="LC467" class="line" lang="plaintext"&gt; backend/drm: don't unconditionally set desired_enabled&lt;/span&gt;&amp;#x000A;&lt;span id="LC468" class="line" lang="plaintext"&gt; backend/drm: remove outdated TODO&lt;/span&gt;&amp;#x000A;&lt;span id="LC469" class="line" lang="plaintext"&gt; screencopy-v1: fix frame_shm_copy() error path&lt;/span&gt;&amp;#x000A;&lt;span id="LC470" class="line" lang="plaintext"&gt; screencopy-v1: simplify frame_dma_copy() error path&lt;/span&gt;&amp;#x000A;&lt;span id="LC471" class="line" lang="plaintext"&gt; render: drop wlr_renderer_read_pixels() flags&lt;/span&gt;&amp;#x000A;&lt;span id="LC472" class="line" lang="plaintext"&gt; build: alphabetically sort protocol lists&lt;/span&gt;&amp;#x000A;&lt;span id="LC473" class="line" lang="plaintext"&gt; backend/drm: drop unnecessary wlr_drm_connector.crtc checks&lt;/span&gt;&amp;#x000A;&lt;span id="LC474" class="line" lang="plaintext"&gt; backend/drm: nuke wlr_drm_connector.desired_enabled&lt;/span&gt;&amp;#x000A;&lt;span id="LC475" class="line" lang="plaintext"&gt; output/render: early return in output_ensure_buffer()&lt;/span&gt;&amp;#x000A;&lt;span id="LC476" class="line" lang="plaintext"&gt; output/render: make output_ensure_buffer() no-op when missing renderer&lt;/span&gt;&amp;#x000A;&lt;span id="LC477" class="line" lang="plaintext"&gt; output: allocate swapchain on first commit&lt;/span&gt;&amp;#x000A;&lt;span id="LC478" class="line" lang="plaintext"&gt; drm-lease-v1: fix error codepath&lt;/span&gt;&amp;#x000A;&lt;span id="LC479" class="line" lang="plaintext"&gt; drm-lease-v1: send finished event on failure in submit request&lt;/span&gt;&amp;#x000A;&lt;span id="LC480" class="line" lang="plaintext"&gt; drm-lease-v1: reject the lease request by default&lt;/span&gt;&amp;#x000A;&lt;span id="LC481" class="line" lang="plaintext"&gt; backend/drm: drop drm_connector_set_mode()&lt;/span&gt;&amp;#x000A;&lt;span id="LC482" class="line" lang="plaintext"&gt; render/gles2: assert that GL_OES_EGL_image_external is supported&lt;/span&gt;&amp;#x000A;&lt;span id="LC483" class="line" lang="plaintext"&gt; output: fix crash in output_test_with_back_buffer()&lt;/span&gt;&amp;#x000A;&lt;span id="LC484" class="line" lang="plaintext"&gt; render/vulkan: drop wlr_vk_instance.extensions&lt;/span&gt;&amp;#x000A;&lt;span id="LC485" class="line" lang="plaintext"&gt; backend: use global output name counters&lt;/span&gt;&amp;#x000A;&lt;span id="LC486" class="line" lang="plaintext"&gt; backend/drm: use wl_container_of() instead of casts for wlr_drm_mode&lt;/span&gt;&amp;#x000A;&lt;span id="LC487" class="line" lang="plaintext"&gt; idle-notify-v1: new protocol implementation&lt;/span&gt;&amp;#x000A;&lt;span id="LC488" class="line" lang="plaintext"&gt; backend/drm: use atomic API to fetch current connector's CRTC&lt;/span&gt;&amp;#x000A;&lt;span id="LC489" class="line" lang="plaintext"&gt; backend/drm: extract connect_drm_connector() logic&lt;/span&gt;&amp;#x000A;&lt;span id="LC490" class="line" lang="plaintext"&gt; backend/drm: extract current mode logic into separate function&lt;/span&gt;&amp;#x000A;&lt;span id="LC491" class="line" lang="plaintext"&gt; backend/drm: fix EINVAL atomic commits after VT switch&lt;/span&gt;&amp;#x000A;&lt;span id="LC492" class="line" lang="plaintext"&gt; backend/drm: log when restoring mode after VT switch fails&lt;/span&gt;&amp;#x000A;&lt;span id="LC493" class="line" lang="plaintext"&gt; backend/drm: drop drm_crtc_page_flip()&lt;/span&gt;&amp;#x000A;&lt;span id="LC494" class="line" lang="plaintext"&gt; backend/drm: log failures in drm_surface_blit()&lt;/span&gt;&amp;#x000A;&lt;span id="LC495" class="line" lang="plaintext"&gt; render/vulkan: add missing entries in vulkan_strerror()&lt;/span&gt;&amp;#x000A;&lt;span id="LC496" class="line" lang="plaintext"&gt; backend/drm: fetch current CRTC once on startup&lt;/span&gt;&amp;#x000A;&lt;span id="LC497" class="line" lang="plaintext"&gt; xwyland/xwm: simplify unpaired_link handling&lt;/span&gt;&amp;#x000A;&lt;span id="LC498" class="line" lang="plaintext"&gt; output: try to use fixed mode in wlr_output_set_custom_mode()&lt;/span&gt;&amp;#x000A;&lt;span id="LC499" class="line" lang="plaintext"&gt; output: clarify custom modes warning&lt;/span&gt;&amp;#x000A;&lt;span id="LC500" class="line" lang="plaintext"&gt; egl: add WLR_EGL_NO_MODIFIERS&lt;/span&gt;&amp;#x000A;&lt;span id="LC501" class="line" lang="plaintext"&gt; render/gles2: remove stale gles2_texture_from_wl_drm() prototype&lt;/span&gt;&amp;#x000A;&lt;span id="LC502" class="line" lang="plaintext"&gt; render/gles2: log error on shader compilation failure&lt;/span&gt;&amp;#x000A;&lt;span id="LC503" class="line" lang="plaintext"&gt; render/gles2: move shaders to individual files&lt;/span&gt;&amp;#x000A;&lt;span id="LC504" class="line" lang="plaintext"&gt; render/gles2: move color uniform from quad.vert to quad.frag&lt;/span&gt;&amp;#x000A;&lt;span id="LC505" class="line" lang="plaintext"&gt; render/gles2: de-duplicate vertex shaders&lt;/span&gt;&amp;#x000A;&lt;span id="LC506" class="line" lang="plaintext"&gt; backend/drm: extract create_drm_connector()&lt;/span&gt;&amp;#x000A;&lt;span id="LC507" class="line" lang="plaintext"&gt; backend/drm: get possible CRTCs in create_drm_connector()&lt;/span&gt;&amp;#x000A;&lt;span id="LC508" class="line" lang="plaintext"&gt; xwayland: split headers&lt;/span&gt;&amp;#x000A;&lt;span id="LC509" class="line" lang="plaintext"&gt; render/vulkan: remove exts arg from vulkan_instance_create()&lt;/span&gt;&amp;#x000A;&lt;span id="LC510" class="line" lang="plaintext"&gt; render/vulkan: drop outdated comments&lt;/span&gt;&amp;#x000A;&lt;span id="LC511" class="line" lang="plaintext"&gt; render/vulkan: simplify extension checks&lt;/span&gt;&amp;#x000A;&lt;span id="LC512" class="line" lang="plaintext"&gt; render/vulkan: use struct initializers&lt;/span&gt;&amp;#x000A;&lt;span id="LC513" class="line" lang="plaintext"&gt; render/vulkan: simplify texture VkPipelineShaderStageCreateInfo&lt;/span&gt;&amp;#x000A;&lt;span id="LC514" class="line" lang="plaintext"&gt; render/vulkan: fix and add missing wl_list comments&lt;/span&gt;&amp;#x000A;&lt;span id="LC515" class="line" lang="plaintext"&gt; render/vulkan: use wl_array for wlr_vk_shared_buffer.allocs&lt;/span&gt;&amp;#x000A;&lt;span id="LC516" class="line" lang="plaintext"&gt; scene: fix whitespace&lt;/span&gt;&amp;#x000A;&lt;span id="LC517" class="line" lang="plaintext"&gt; scene: destroy addons before cleaning up internal state&lt;/span&gt;&amp;#x000A;&lt;span id="LC518" class="line" lang="plaintext"&gt; Revert "backend/drm: fetch EDID manufacturer from udev_hwdb"&lt;/span&gt;&amp;#x000A;&lt;span id="LC519" class="line" lang="plaintext"&gt; backend/drm: request page-flip event on modeset&lt;/span&gt;&amp;#x000A;&lt;span id="LC520" class="line" lang="plaintext"&gt; build: bump to version 0.16.0&lt;/span&gt;&amp;#x000A;&lt;span id="LC521" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC522" class="line" lang="plaintext"&gt;Simon Zeni (57):&lt;/span&gt;&amp;#x000A;&lt;span id="LC523" class="line" lang="plaintext"&gt; backend/headless: remove unused wlr_headless_input_device&lt;/span&gt;&amp;#x000A;&lt;span id="LC524" class="line" lang="plaintext"&gt; types/wlr_input_device: default vendor and product id to 0&lt;/span&gt;&amp;#x000A;&lt;span id="LC525" class="line" lang="plaintext"&gt; interfaces/wlr_input_device: introduce wlr_input_device_finish&lt;/span&gt;&amp;#x000A;&lt;span id="LC526" class="line" lang="plaintext"&gt; types/wlr_input_device: call the specialized input device destroy function on destroy&lt;/span&gt;&amp;#x000A;&lt;span id="LC527" class="line" lang="plaintext"&gt; types/wlr_keyboard: add base wlr_input_device&lt;/span&gt;&amp;#x000A;&lt;span id="LC528" class="line" lang="plaintext"&gt; types/wlr_pointer: add base wlr_input_device&lt;/span&gt;&amp;#x000A;&lt;span id="LC529" class="line" lang="plaintext"&gt; types/wlr_switch: add base wlr_input_device&lt;/span&gt;&amp;#x000A;&lt;span id="LC530" class="line" lang="plaintext"&gt; types/wlr_tablet_pad: add base wlr_input_device&lt;/span&gt;&amp;#x000A;&lt;span id="LC531" class="line" lang="plaintext"&gt; types/wlr_tablet_tool: add base wlr_input_device&lt;/span&gt;&amp;#x000A;&lt;span id="LC532" class="line" lang="plaintext"&gt; types/wlr_touch: add base wlr_input_device&lt;/span&gt;&amp;#x000A;&lt;span id="LC533" class="line" lang="plaintext"&gt; types/wlr_tablet_pad: constify impl&lt;/span&gt;&amp;#x000A;&lt;span id="LC534" class="line" lang="plaintext"&gt; types/wlr_switch: constify impl&lt;/span&gt;&amp;#x000A;&lt;span id="LC535" class="line" lang="plaintext"&gt; backend/x11: remove wlr_input_device_impl&lt;/span&gt;&amp;#x000A;&lt;span id="LC536" class="line" lang="plaintext"&gt; backend/wayland: remove wlr_input_device_impl&lt;/span&gt;&amp;#x000A;&lt;span id="LC537" class="line" lang="plaintext"&gt; backend/libinput: remove wlr_input_device_impl&lt;/span&gt;&amp;#x000A;&lt;span id="LC538" class="line" lang="plaintext"&gt; interfaces: remove wlr_input_device_impl&lt;/span&gt;&amp;#x000A;&lt;span id="LC539" class="line" lang="plaintext"&gt; types/wlr_virtual_keyboard_v1: fix wlr_keyboard destroy sequence&lt;/span&gt;&amp;#x000A;&lt;span id="LC540" class="line" lang="plaintext"&gt; types/wlr_virtual_pointer_v1: fix wlr_pointer destroy sequence&lt;/span&gt;&amp;#x000A;&lt;span id="LC541" class="line" lang="plaintext"&gt; backend/libinput: add devices wl_list&lt;/span&gt;&amp;#x000A;&lt;span id="LC542" class="line" lang="plaintext"&gt; backend/libinput: rework keyboard interface&lt;/span&gt;&amp;#x000A;&lt;span id="LC543" class="line" lang="plaintext"&gt; backend/libinput: rework pointer interface&lt;/span&gt;&amp;#x000A;&lt;span id="LC544" class="line" lang="plaintext"&gt; backend/libinput: rework switch interface&lt;/span&gt;&amp;#x000A;&lt;span id="LC545" class="line" lang="plaintext"&gt; backend/libinput: rework touch interface&lt;/span&gt;&amp;#x000A;&lt;span id="LC546" class="line" lang="plaintext"&gt; backend/libinput: rework tablet interface&lt;/span&gt;&amp;#x000A;&lt;span id="LC547" class="line" lang="plaintext"&gt; backend/libinput: rework tablet_pad interface&lt;/span&gt;&amp;#x000A;&lt;span id="LC548" class="line" lang="plaintext"&gt; backend/libinput: public API cleanup&lt;/span&gt;&amp;#x000A;&lt;span id="LC549" class="line" lang="plaintext"&gt; interface/wlr_keyboard: rework destroy sequence&lt;/span&gt;&amp;#x000A;&lt;span id="LC550" class="line" lang="plaintext"&gt; interface/wlr_pointer: rework destroy sequence&lt;/span&gt;&amp;#x000A;&lt;span id="LC551" class="line" lang="plaintext"&gt; interface/wlr_switch: rework destroy sequence&lt;/span&gt;&amp;#x000A;&lt;span id="LC552" class="line" lang="plaintext"&gt; interface/wlr_tablet_pad: rework destroy sequence&lt;/span&gt;&amp;#x000A;&lt;span id="LC553" class="line" lang="plaintext"&gt; interface/wlr_tablet_tool: rework destroy sequence&lt;/span&gt;&amp;#x000A;&lt;span id="LC554" class="line" lang="plaintext"&gt; interface/wlr_touch: rework destroy sequence&lt;/span&gt;&amp;#x000A;&lt;span id="LC555" class="line" lang="plaintext"&gt; tinywl: destroy keyboard on wlr_input_device event&lt;/span&gt;&amp;#x000A;&lt;span id="LC556" class="line" lang="plaintext"&gt; types/wlr_input_device: remove wlr_input_device_destroy&lt;/span&gt;&amp;#x000A;&lt;span id="LC557" class="line" lang="plaintext"&gt; types/wlr_input_device: move init and finish function to private API&lt;/span&gt;&amp;#x000A;&lt;span id="LC558" class="line" lang="plaintext"&gt; types/wlr_keyboard: remove destroy event&lt;/span&gt;&amp;#x000A;&lt;span id="LC559" class="line" lang="plaintext"&gt; types/wlr_virtual_keyboard_v1: remove destroy event&lt;/span&gt;&amp;#x000A;&lt;span id="LC560" class="line" lang="plaintext"&gt; types/wlr_virtual_pointer_v1: remove destroy event&lt;/span&gt;&amp;#x000A;&lt;span id="LC561" class="line" lang="plaintext"&gt; tinywl: init cursor_mode&lt;/span&gt;&amp;#x000A;&lt;span id="LC562" class="line" lang="plaintext"&gt; backend/wayland: give wlr_keyboard ownership to wlr_wl_seat&lt;/span&gt;&amp;#x000A;&lt;span id="LC563" class="line" lang="plaintext"&gt; backend/wayland: give wlr_pointer ownership to wlr_wl_seat&lt;/span&gt;&amp;#x000A;&lt;span id="LC564" class="line" lang="plaintext"&gt; backend/wayland: drop wlr_switch support&lt;/span&gt;&amp;#x000A;&lt;span id="LC565" class="line" lang="plaintext"&gt; backend/wayland: give wlr_touch ownership to wlr_wl_seat&lt;/span&gt;&amp;#x000A;&lt;span id="LC566" class="line" lang="plaintext"&gt; backend/wayland/tablet_v2: give wlr_tablet_* ownership to wlr_wl_seat&lt;/span&gt;&amp;#x000A;&lt;span id="LC567" class="line" lang="plaintext"&gt; backend/wayland: remove wlr_wl_input_device&lt;/span&gt;&amp;#x000A;&lt;span id="LC568" class="line" lang="plaintext"&gt; backend/wayland: remove wl_seat_listener from public API&lt;/span&gt;&amp;#x000A;&lt;span id="LC569" class="line" lang="plaintext"&gt; types/wlr_input_device: move output_name field to wlr_pointer and wlr_touch&lt;/span&gt;&amp;#x000A;&lt;span id="LC570" class="line" lang="plaintext"&gt; types/wlr_input_device: move width_mm and height_mm fields to wlr_tablet and wlr_touch&lt;/span&gt;&amp;#x000A;&lt;span id="LC571" class="line" lang="plaintext"&gt; types/wlr_pointer: uniformize events name&lt;/span&gt;&amp;#x000A;&lt;span id="LC572" class="line" lang="plaintext"&gt; types/wlr_keyboard: uniformize events name&lt;/span&gt;&amp;#x000A;&lt;span id="LC573" class="line" lang="plaintext"&gt; types/wlr_switch: uniformize events name&lt;/span&gt;&amp;#x000A;&lt;span id="LC574" class="line" lang="plaintext"&gt; types/wlr_tablet_pad: uniformize events name&lt;/span&gt;&amp;#x000A;&lt;span id="LC575" class="line" lang="plaintext"&gt; types/wlr_tablet_tool: uniformize events name&lt;/span&gt;&amp;#x000A;&lt;span id="LC576" class="line" lang="plaintext"&gt; types/wlr_touch: uniformize events name&lt;/span&gt;&amp;#x000A;&lt;span id="LC577" class="line" lang="plaintext"&gt; tinywl: exit on backend, renderer or allocator creation failure&lt;/span&gt;&amp;#x000A;&lt;span id="LC578" class="line" lang="plaintext"&gt; build: remove libkms option and disable tests for libdrm fallback&lt;/span&gt;&amp;#x000A;&lt;span id="LC579" class="line" lang="plaintext"&gt; backend/drm: allocate connector CRTC on lease creation&lt;/span&gt;&amp;#x000A;&lt;span id="LC580" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC581" class="line" lang="plaintext"&gt;Steven Newbury (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC582" class="line" lang="plaintext"&gt; util: Fix infinite loop in recursive function&lt;/span&gt;&amp;#x000A;&lt;span id="LC583" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC584" class="line" lang="plaintext"&gt;Tadeo Kondrak (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC585" class="line" lang="plaintext"&gt; input_method_v2: improve mapping detection&lt;/span&gt;&amp;#x000A;&lt;span id="LC586" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC587" class="line" lang="plaintext"&gt;Thomas Hebb (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC588" class="line" lang="plaintext"&gt; render/gles2: don't constrain shm formats to ones that support reading&lt;/span&gt;&amp;#x000A;&lt;span id="LC589" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC590" class="line" lang="plaintext"&gt;Vlad Zahorodnii (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC591" class="line" lang="plaintext"&gt; xcursor: garbage collect XcursorLibraryLoadImages&lt;/span&gt;&amp;#x000A;&lt;span id="LC592" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC593" class="line" lang="plaintext"&gt;bi4k8 (3):&lt;/span&gt;&amp;#x000A;&lt;span id="LC594" class="line" lang="plaintext"&gt; render/vulkan/pixel_format: do not leak props-&amp;gt;...&lt;/span&gt;&amp;#x000A;&lt;span id="LC595" class="line" lang="plaintext"&gt; Add missing &amp;amp;&lt;/span&gt;&amp;#x000A;&lt;span id="LC596" class="line" lang="plaintext"&gt; render/egl: don't leak memory on error return&lt;/span&gt;&amp;#x000A;&lt;span id="LC597" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC598" class="line" lang="plaintext"&gt;fakechen (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC599" class="line" lang="plaintext"&gt; egl: modify egl_init_display function definition&lt;/span&gt;&amp;#x000A;&lt;span id="LC600" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC601" class="line" lang="plaintext"&gt;illiliti (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC602" class="line" lang="plaintext"&gt; meson: replace join_paths() with / operator&lt;/span&gt;&amp;#x000A;&lt;span id="LC603" class="line" lang="plaintext"&gt; backend/drm: use pnp.ids to fetch EDID data&lt;/span&gt;&amp;#x000A;&lt;span id="LC604" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC605" class="line" lang="plaintext"&gt;nyorain (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC606" class="line" lang="plaintext"&gt; vulkan: Fix imported image layout&lt;/span&gt;&amp;#x000A;&lt;span id="LC607" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC608" class="line" lang="plaintext"&gt;tiosgz (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC609" class="line" lang="plaintext"&gt; CONTRIBUTING.md: make forks public to let the CI run&lt;/span&gt;&amp;#x000A;&lt;span id="LC610" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC611" class="line" lang="plaintext"&gt;vanfanel (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC612" class="line" lang="plaintext"&gt; Initialize connectors current mode to the mode used by KMS on startup.&lt;/span&gt;&amp;#x000A;&lt;span id="LC613" class="line" lang="plaintext"&gt; Only set max_bpc when full modesetting is being done.&lt;/span&gt;&amp;#x000A;&lt;span id="LC614" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC615" class="line" lang="plaintext"&gt;vaxerski (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC616" class="line" lang="plaintext"&gt; backend/drm: fix crash with null serial&lt;/span&gt;&amp;#x000A;&lt;span id="LC617" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC618" class="line" lang="plaintext"&gt;xiaoyaobing (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC619" class="line" lang="plaintext"&gt; tinywl/tinywl: clean up tinywl_output when wlr_output is gone&lt;/span&gt;&amp;#x000A;&lt;span id="LC620" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC621" class="line" lang="plaintext"&gt;yiqiang (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC622" class="line" lang="plaintext"&gt; wlr_scene: fix color value when filtering black boxes&lt;/span&gt;&amp;#x000A;&lt;span id="LC623" class="line" lang="plaintext"&gt; scene/wlr_scene:fix judgment of invisible node&lt;/span&gt;&amp;#x000A;&lt;span id="LC624" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC625" class="line" lang="plaintext"&gt;zccrs (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC626" class="line" lang="plaintext"&gt; render/vulkan: fix undefined reference to wlr_texture_is_vk&lt;/span&gt;&amp;#x000A;&lt;span id="LC627" class="line" lang="plaintext"&gt; render/vulkan: add some interfaces to allow compositors to integrate&lt;/span&gt;&amp;#x000A;&lt;span id="LC628" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC629" class="line" lang="plaintext"&gt;zsugabubus (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC630" class="line" lang="plaintext"&gt; xwayland: do not double free server on destroy&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&amp;#x000A;&lt;copy-code&gt;&lt;/copy-code&gt;&amp;#x000A;&lt;/div&gt;&amp;#x000A;&lt;/details&gt;&amp;#x000A;&lt;h2 data-sourcepos="657:1-657:24" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-changes-for-packagers" class="anchor" href="#changes-for-packagers" aria-hidden="true"&gt;&lt;/a&gt;Changes for packagers&lt;/h2&gt;&amp;#x000A;&lt;ul data-sourcepos="659:1-660:0" dir="auto"&gt;&amp;#x000A;&lt;li data-sourcepos="659:1-660:0"&gt;&amp;#x000A;&lt;strong&gt;backend/drm: use pnp.ids to fetch EDID data&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3638" data-reference-type="merge_request" data-original="!3638" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="66403" data-project-path="wlroots/wlroots" data-iid="3638" data-container="body" data-placement="top" title="backend/drm: use pnp.ids to fetch EDID data" class="gfm gfm-merge_request"&gt;!3638&lt;/a&gt;): &lt;a href="https://github.com/vcrhonek/hwdata" rel="nofollow noreferrer noopener" target="_blank"&gt;hwdata&lt;/a&gt; is a new build-time dependency required for the DRM backend.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;h2 data-sourcepos="661:1-661:35" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-breaking-changes-for-compositors" class="anchor" href="#breaking-changes-for-compositors" aria-hidden="true"&gt;&lt;/a&gt;Breaking changes for compositors&lt;/h2&gt;&amp;#x000A;&lt;p data-sourcepos="663:1-663:42" dir="auto"&gt;These changes can affect most compositors.&lt;/p&gt;&amp;#x000A;&lt;ul data-sourcepos="665:1-747:0" dir="auto"&gt;&amp;#x000A;&lt;li data-sourcepos="665:1-666:144"&gt;&amp;#x000A;&lt;strong&gt;layer-shell: fix type of margins&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3404" data-reference-type="merge_request" data-original="!3404" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="56388" data-project-path="wlroots/wlroots" data-iid="3404" data-container="body" data-placement="top" title="layer-shell: fix type of margins" class="gfm gfm-merge_request"&gt;!3404&lt;/a&gt;)&amp;#x000A;&lt;ul data-sourcepos="666:3-666:144"&gt;&amp;#x000A;&lt;li data-sourcepos="666:3-666:144"&gt;&amp;#x000A;&lt;code&gt;wlr_layer_surface_v1_state.margin.{top,bottom,left,right}&lt;/code&gt; type has been changed from &lt;code&gt;uint32_t&lt;/code&gt; to &lt;code&gt;int32_t&lt;/code&gt; as specified by the protocol.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="667:1-668:73"&gt;&amp;#x000A;&lt;strong&gt;remove wlr_box.h redirection&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3405" data-reference-type="merge_request" data-original="!3405" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="56484" data-project-path="wlroots/wlroots" data-iid="3405" data-container="body" data-placement="top" title="Remove wlr_box.h redirection" class="gfm gfm-merge_request"&gt;!3405&lt;/a&gt;)&amp;#x000A;&lt;ul data-sourcepos="668:3-668:73"&gt;&amp;#x000A;&lt;li data-sourcepos="668:3-668:73"&gt;&amp;#x000A;&lt;code&gt;wlr/types/wlr_box.h&lt;/code&gt; has been removed; use &lt;code&gt;wlr/util/box.h&lt;/code&gt; instead.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="669:1-672:75"&gt;&amp;#x000A;&lt;strong&gt;Split wl_compositor and wl_subcompositor implementation&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3412" data-reference-type="merge_request" data-original="!3412" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="56670" data-project-path="wlroots/wlroots" data-iid="3412" data-container="body" data-placement="top" title="Split wl_compositor and wl_subcompositor implementation" class="gfm gfm-merge_request"&gt;!3412&lt;/a&gt;)&amp;#x000A;&lt;ul data-sourcepos="670:3-672:75"&gt;&amp;#x000A;&lt;li data-sourcepos="670:3-670:132"&gt;&amp;#x000A;&lt;code&gt;wlr_subcompositor&lt;/code&gt; is not created automatically anymore on calling &lt;code&gt;wlr_compositor_create()&lt;/code&gt;; use &lt;code&gt;wlr_subcompositor_create()&lt;/code&gt;.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="671:3-671:116"&gt;&amp;#x000A;&lt;code&gt;wlr/types/wlr_surface.h&lt;/code&gt; has been deprecated; use &lt;code&gt;wlr/types/compositor.h&lt;/code&gt; and &lt;code&gt;wlr/types/wlr_subcompositor.h&lt;/code&gt;.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="672:3-672:75"&gt;&amp;#x000A;&lt;code&gt;wlr_compositor.events.destroy&lt;/code&gt; signal is now fired with NULL argument.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="673:1-674:213"&gt;&amp;#x000A;&lt;strong&gt;surface: improve role precommit hook&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3191" data-reference-type="merge_request" data-original="!3191" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="54267" data-project-path="wlroots/wlroots" data-iid="3191" data-container="body" data-placement="top" title="surface: improve role precommit hook" class="gfm gfm-merge_request"&gt;!3191&lt;/a&gt;)&amp;#x000A;&lt;ul data-sourcepos="674:3-674:213"&gt;&amp;#x000A;&lt;li data-sourcepos="674:3-674:213"&gt;&amp;#x000A;&lt;code&gt;wlr_surface_role.precommit&lt;/code&gt; now also takes &lt;code&gt;const wlr_surface_state *&lt;/code&gt; state which is to be applied, and the signal is emitted right before the actual commit, not when &lt;code&gt;wl_surface.commit&lt;/code&gt; request is received.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="675:1-676:141"&gt;&amp;#x000A;&lt;strong&gt;output-layout: make wlr_output_layout_get_box() take a box as parameter&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3439" data-reference-type="merge_request" data-original="!3439" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="58277" data-project-path="wlroots/wlroots" data-iid="3439" data-container="body" data-placement="top" title="output-layout: make wlr_output_layout_get_box() take a box as parameter" class="gfm gfm-merge_request"&gt;!3439&lt;/a&gt;)&amp;#x000A;&lt;ul data-sourcepos="676:3-676:141"&gt;&amp;#x000A;&lt;li data-sourcepos="676:3-676:141"&gt;&amp;#x000A;&lt;code&gt;wlr_output_layout_get_box()&lt;/code&gt; now returns nothing and takes &lt;code&gt;struct wlr_box *&lt;/code&gt; as a parameter. If the function fails, the box is emptied.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="677:1-684:111"&gt;&amp;#x000A;&lt;strong&gt;xdg-shell refactor&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3326" data-reference-type="merge_request" data-original="!3326" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="54520" data-project-path="wlroots/wlroots" data-iid="3326" data-container="body" data-placement="top" title="xdg-shell refactor" class="gfm gfm-merge_request"&gt;!3326&lt;/a&gt;)&amp;#x000A;&lt;ul data-sourcepos="678:3-684:111"&gt;&amp;#x000A;&lt;li data-sourcepos="678:3-678:91"&gt;All &lt;code&gt;wlr_xdg_toplevel_*()&lt;/code&gt; functions now take &lt;code&gt;wlr_xdg_toplevel&lt;/code&gt; as the main parameter.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="679:3-679:85"&gt;All &lt;code&gt;wlr_xdg_popup_*()&lt;/code&gt; functions now take &lt;code&gt;wlr_xdg_popup&lt;/code&gt; as the main parameter.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="680:3-680:104"&gt;&amp;#x000A;&lt;code&gt;wlr_xdg_toplevel_*_event&lt;/code&gt; structs now have a &lt;code&gt;wlr_xdg_toplevel&lt;/code&gt; field instead of &lt;code&gt;wlr_xdg_surface&lt;/code&gt;.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="681:3-681:86"&gt;&amp;#x000A;&lt;code&gt;wlr_xdg_toplevel::parent&lt;/code&gt; is now &lt;code&gt;wlr_xdg_toplevel&lt;/code&gt; instead of &lt;code&gt;wlr_xdg_surface&lt;/code&gt;.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="682:3-682:55"&gt;&amp;#x000A;&lt;code&gt;wlr_xdg_toplevel_set_fullscreen_event&lt;/code&gt; is removed.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="683:3-683:66"&gt;All &lt;code&gt;wlr_xdg_surface&lt;/code&gt; signals now have NULL as their argument.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="684:3-684:111"&gt;All &lt;code&gt;wlr_xdg_toplevel&lt;/code&gt; signals which don't have an associated event struct now have NULL as their argument.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="685:1-692:143"&gt;&amp;#x000A;&lt;strong&gt;xdg-positioner: update + rewrite unconstraining logic&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3446" data-reference-type="merge_request" data-original="!3446" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="58669" data-project-path="wlroots/wlroots" data-iid="3446" data-container="body" data-placement="top" title="xdg-positioner: update + rewrite unconstraining logic" class="gfm gfm-merge_request"&gt;!3446&lt;/a&gt;)&amp;#x000A;&lt;ul data-sourcepos="686:3-692:143"&gt;&amp;#x000A;&lt;li data-sourcepos="686:3-687:71"&gt;The previous &lt;code&gt;wlr_xdg_positioner&lt;/code&gt; has been renamed to &lt;code&gt;wlr_xdg_positioner_rules&lt;/code&gt;.&amp;#x000A;&lt;ul data-sourcepos="687:5-687:71"&gt;&amp;#x000A;&lt;li data-sourcepos="687:5-687:71"&gt;The new &lt;code&gt;wlr_xdg_positioner&lt;/code&gt; represents an actual Wayland object.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="688:3-691:40"&gt;The following functions have been removed:&amp;#x000A;&lt;ul data-sourcepos="689:5-691:40"&gt;&amp;#x000A;&lt;li data-sourcepos="689:5-689:33"&gt;&lt;code&gt;wlr_positioner_invert_x()&lt;/code&gt;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="690:5-690:33"&gt;&lt;code&gt;wlr_positioner_invert_y()&lt;/code&gt;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="691:5-691:40"&gt;&lt;code&gt;wlr_xdg_popup_get_anchor_point()&lt;/code&gt;&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="692:3-692:143"&gt;&amp;#x000A;&lt;code&gt;wlr_xdg_positioner_get_geometry()&lt;/code&gt; has been renamed to &lt;code&gt;wlr_xdg_positioner_rules_get_geometry()&lt;/code&gt; and now takes &lt;code&gt;wlr_box *&lt;/code&gt; as a parameter.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="693:1-705:124"&gt;&amp;#x000A;&lt;strong&gt;Input device refactor&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3434" data-reference-type="merge_request" data-original="!3434" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="57804" data-project-path="wlroots/wlroots" data-iid="3434" data-container="body" data-placement="top" title="input device owns it's base wlr_input_device" class="gfm gfm-merge_request"&gt;!3434&lt;/a&gt;, &lt;a href="/wlroots/wlroots/-/merge_requests/3452" data-reference-type="merge_request" data-original="!3452" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="58786" data-project-path="wlroots/wlroots" data-iid="3452" data-container="body" data-placement="top" title="nuke wlr_input_device_impl" class="gfm gfm-merge_request"&gt;!3452&lt;/a&gt;, &lt;a href="/wlroots/wlroots/-/merge_requests/3469" data-reference-type="merge_request" data-original="!3469" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="59975" data-project-path="wlroots/wlroots" data-iid="3469" data-container="body" data-placement="top" title="Specialized input device destroy sequence" class="gfm gfm-merge_request"&gt;!3469&lt;/a&gt;, &lt;a href="/wlroots/wlroots/-/merge_requests/3481" data-reference-type="merge_request" data-original="!3481" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="60328" data-project-path="wlroots/wlroots" data-iid="3481" data-container="body" data-placement="top" title="Remove extra specialized input device destroy event" class="gfm gfm-merge_request"&gt;!3481&lt;/a&gt;, &lt;a href="/wlroots/wlroots/-/merge_requests/3482" data-reference-type="merge_request" data-original="!3482" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="60330" data-project-path="wlroots/wlroots" data-iid="3482" data-container="body" data-placement="top" title="Remove extra fields from wlr_input_device" class="gfm gfm-merge_request"&gt;!3482&lt;/a&gt;, &lt;a href="/wlroots/wlroots/-/merge_requests/3484" data-reference-type="merge_request" data-original="!3484" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="60388" data-project-path="wlroots/wlroots" data-iid="3484" data-container="body" data-placement="top" title="Specialized input device: uniformize event naming" class="gfm gfm-merge_request"&gt;!3484&lt;/a&gt;, &lt;a href="/wlroots/wlroots/-/merge_requests/3626" data-reference-type="merge_request" data-original="!3626" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="66077" data-project-path="wlroots/wlroots" data-iid="3626" data-container="body" data-placement="top" title="wlr_input_device: remove anon union field" class="gfm gfm-merge_request"&gt;!3626&lt;/a&gt;)&amp;#x000A;&lt;ul data-sourcepos="694:3-705:124"&gt;&amp;#x000A;&lt;li data-sourcepos="694:3-694:112"&gt;&amp;#x000A;&lt;code&gt;wlr_headless_input_device&lt;/code&gt; has been removed, compositors can define their own devices for headless backend.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="695:3-695:96"&gt;&amp;#x000A;&lt;code&gt;vendor_id&lt;/code&gt; and &lt;code&gt;product_id&lt;/code&gt; are defaulted to 0 and set when needed by the libinput backend.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="696:3-696:99"&gt;Specialized input devices (keyboard, pointers, etc) have &lt;code&gt;struct wlr_input_device *base&lt;/code&gt; field.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="697:3-697:45"&gt;&amp;#x000A;&lt;code&gt;wlr_input_device_impl&lt;/code&gt; has been removed.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="698:3-698:48"&gt;&amp;#x000A;&lt;code&gt;wlr_input_device_destroy&lt;/code&gt; has been removed.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="699:3-699:59"&gt;The &lt;code&gt;wlr_input_device&lt;/code&gt; interface has been made private.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="700:3-701:75"&gt;Specialized input device &lt;code&gt;destroy&lt;/code&gt; function and implementation has been removed.&amp;#x000A;&lt;ul data-sourcepos="701:5-701:75"&gt;&amp;#x000A;&lt;li data-sourcepos="701:5-701:75"&gt;Use &lt;code&gt;finish&lt;/code&gt; functions to clean input devices up before destruction.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="702:3-702:164"&gt;&amp;#x000A;&lt;code&gt;wlr_keyboard&lt;/code&gt;, &lt;code&gt;wlr_virtual_keyboard_v1&lt;/code&gt; and &lt;code&gt;wlr_virtual_pointer_v1&lt;/code&gt; destroy events are removed in favor of the base &lt;code&gt;wlr_input_device&lt;/code&gt; destroy event. (&lt;a href="/wlroots/wlroots/-/merge_requests/3481" data-reference-type="merge_request" data-original="!3481" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="60328" data-project-path="wlroots/wlroots" data-iid="3481" data-container="body" data-placement="top" title="Remove extra specialized input device destroy event" class="gfm gfm-merge_request"&gt;!3481&lt;/a&gt;)&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="703:3-703:123"&gt;&amp;#x000A;&lt;code&gt;output_name&lt;/code&gt;, &lt;code&gt;width_mm&lt;/code&gt; and &lt;code&gt;height_mm&lt;/code&gt; have been moved from &lt;code&gt;wlr_input_device&lt;/code&gt; to related specialized input devices.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="704:3-704:116"&gt;Specialized input devices' events have been renamed and now follow &lt;code&gt;wlr_{input type}_{event type}_event&lt;/code&gt; format.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="705:3-705:124"&gt;The union field in &lt;code&gt;wlr_input_device&lt;/code&gt; has been removed, the new &lt;code&gt;wlr_*_from_input_device&lt;/code&gt; functions can be used instead.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="706:1-706:56"&gt;&amp;#x000A;&lt;strong&gt;wlr_switch: remove WLR_SWITCH_STATE_TOGGLE&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3462" data-reference-type="merge_request" data-original="!3462" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="59837" data-project-path="wlroots/wlroots" data-iid="3462" data-container="body" data-placement="top" title="wlr_switch: remove WLR_SWITCH_STATE_TOGGLE" class="gfm gfm-merge_request"&gt;!3462&lt;/a&gt;)&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="707:1-708:93"&gt;&amp;#x000A;&lt;strong&gt;types/wlr_tablet_tool: remove name ambiguity&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3485" data-reference-type="merge_request" data-original="!3485" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="60481" data-project-path="wlroots/wlroots" data-iid="3485" data-container="body" data-placement="top" title="types/wlr_tablet_tool: remove name ambiguity" class="gfm gfm-merge_request"&gt;!3485&lt;/a&gt;)&amp;#x000A;&lt;ul data-sourcepos="708:3-708:93"&gt;&amp;#x000A;&lt;li data-sourcepos="708:3-708:93"&gt;&amp;#x000A;&lt;code&gt;wlr_tablet.name&lt;/code&gt; has been removed, &lt;code&gt;wlr_input_device.name&lt;/code&gt; must be used instead. (&lt;a href="/wlroots/wlroots/-/merge_requests/3485" data-reference-type="merge_request" data-original="!3485" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="60481" data-project-path="wlroots/wlroots" data-iid="3485" data-container="body" data-placement="top" title="types/wlr_tablet_tool: remove name ambiguity" class="gfm gfm-merge_request"&gt;!3485&lt;/a&gt;)&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="709:1-710:101"&gt;&amp;#x000A;&lt;strong&gt;wlr_output: Handle subpixel hints through output commits&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3420" data-reference-type="merge_request" data-original="!3420" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="56986" data-project-path="wlroots/wlroots" data-iid="3420" data-container="body" data-placement="top" title="types/wlr_output: Handle subpixel hints through output commits" class="gfm gfm-merge_request"&gt;!3420&lt;/a&gt;):&amp;#x000A;&lt;ul data-sourcepos="710:3-710:101"&gt;&amp;#x000A;&lt;li data-sourcepos="710:3-710:101"&gt;&amp;#x000A;&lt;code&gt;wlr_output_set_subpixel&lt;/code&gt; calls must now be followed by a &lt;code&gt;wlr_output_commit&lt;/code&gt; call to be applied.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="711:1-712:89"&gt;&amp;#x000A;&lt;strong&gt;seat: take wlr_keyboard in wlr_seat_set_keyboard()&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3498" data-reference-type="merge_request" data-original="!3498" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="61057" data-project-path="wlroots/wlroots" data-iid="3498" data-container="body" data-placement="top" title="seat: take wlr_keyboard in wlr_seat_set_keyboard()" class="gfm gfm-merge_request"&gt;!3498&lt;/a&gt;)&amp;#x000A;&lt;ul data-sourcepos="712:3-712:89"&gt;&amp;#x000A;&lt;li data-sourcepos="712:3-712:89"&gt;&amp;#x000A;&lt;code&gt;wlr_seat_set_keyboard()&lt;/code&gt; now takes a &lt;code&gt;wlr_keyboard *&lt;/code&gt; instead of &lt;code&gt;wlr_input_device&lt;/code&gt;.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="713:1-714:156"&gt;&amp;#x000A;&lt;strong&gt;xdg-toplevel: don't schedule configures on state requests&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3512" data-reference-type="merge_request" data-original="!3512" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="62230" data-project-path="wlroots/wlroots" data-iid="3512" data-container="body" data-placement="top" title="xdg-toplevel: don't schedule configures on state requests" class="gfm gfm-merge_request"&gt;!3512&lt;/a&gt;)&amp;#x000A;&lt;ul data-sourcepos="714:3-714:156"&gt;&amp;#x000A;&lt;li data-sourcepos="714:3-714:156"&gt;compositors must now manually call &lt;code&gt;wlr_xdg_surface_schedule_configure&lt;/code&gt; on &lt;code&gt;request_maximize&lt;/code&gt;/&lt;code&gt;request_fullscreen&lt;/code&gt; if they weren't handling the request.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="715:1-716:253"&gt;&amp;#x000A;&lt;strong&gt;xwayland: Fix order of wlr_xwayland_surface_size_hints fields&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3495" data-reference-type="merge_request" data-original="!3495" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="60991" data-project-path="wlroots/wlroots" data-iid="3495" data-container="body" data-placement="top" title="xwayland: Fix order of wlr_xwayland_surface_size_hints fields" class="gfm gfm-merge_request"&gt;!3495&lt;/a&gt;)&amp;#x000A;&lt;ul data-sourcepos="716:3-716:253"&gt;&amp;#x000A;&lt;li data-sourcepos="716:3-716:253"&gt;&amp;#x000A;&lt;code&gt;wlr_xwayland_surface_hints&lt;/code&gt; and &lt;code&gt;wlr_xwayland_surface_size_hints&lt;/code&gt; have been replaced by &lt;code&gt;xcb_icccm_wm_hints_t&lt;/code&gt; and &lt;code&gt;xcb_size_hints_t&lt;/code&gt; respectively. &lt;code&gt;wlr_xwayland_surface.hints_urgency&lt;/code&gt; has been removed, use &lt;code&gt;xcb_icccm_wm_hints_get_urgency&lt;/code&gt; instead.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="717:1-718:240"&gt;&amp;#x000A;&lt;strong&gt;xdg-shell: specify version in wlr_xdg_shell_create&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3547" data-reference-type="merge_request" data-original="!3547" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="63878" data-project-path="wlroots/wlroots" data-iid="3547" data-container="body" data-placement="top" title="xdg-shell: specify version in wlr_xdg_shell_create" class="gfm gfm-merge_request"&gt;!3547&lt;/a&gt;)&amp;#x000A;&lt;ul data-sourcepos="718:3-718:240"&gt;&amp;#x000A;&lt;li data-sourcepos="718:3-718:240"&gt;Compositors must now pass their maximum supported xdg-shell version to &lt;code&gt;wlr_xdg_shell_create()&lt;/code&gt;. This allows for wlroots to implement newer versions without a breaking change requiring compositors to implement the newer version as well.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="719:1-721:91"&gt;&amp;#x000A;&lt;strong&gt;wlr_scene: Refactor wlr_scene_surface to be a helper on top of wlr_scene_buffer&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3497" data-reference-type="merge_request" data-original="!3497" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="60997" data-project-path="wlroots/wlroots" data-iid="3497" data-container="body" data-placement="top" title="wlr_scene: Refactor wlr_scene_surface to be a helper on top of wlr_scene_buffer" class="gfm gfm-merge_request"&gt;!3497&lt;/a&gt;)&amp;#x000A;&lt;ul data-sourcepos="720:3-721:91"&gt;&amp;#x000A;&lt;li data-sourcepos="720:3-720:133"&gt;&amp;#x000A;&lt;code&gt;wlr_scene_surface_create()&lt;/code&gt;, &lt;code&gt;wlr_scene_xdg_surface_create()&lt;/code&gt;, etc. now create &lt;code&gt;wlr_scene_buffer&lt;/code&gt; nodes with associated helpers.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="721:3-721:91"&gt;Use &lt;code&gt;wlr_scene_surface_from_buffer()&lt;/code&gt; to get a scene surface from a &lt;code&gt;wlr_scene_buffer&lt;/code&gt;.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="722:1-725:48"&gt;&amp;#x000A;&lt;strong&gt;xdg-shell: add v3 support&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3514" data-reference-type="merge_request" data-original="!3514" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="62393" data-project-path="wlroots/wlroots" data-iid="3514" data-container="body" data-placement="top" title="xdg-shell: add v3 support" class="gfm gfm-merge_request"&gt;!3514&lt;/a&gt;)&amp;#x000A;&lt;ul data-sourcepos="723:3-725:48"&gt;&amp;#x000A;&lt;li data-sourcepos="723:3-723:96"&gt;&amp;#x000A;&lt;code&gt;wlr_xdg_popup.geometry&lt;/code&gt; has been moved to &lt;code&gt;wlr_xdg_popup_state&lt;/code&gt; and is now double-buffered.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="724:3-724:60"&gt;&amp;#x000A;&lt;code&gt;wlr_xdg_popup_unconstrain()&lt;/code&gt; now schedules a configure.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="725:3-725:48"&gt;&amp;#x000A;&lt;code&gt;wlr_xdg_popup.positioner_rules&lt;/code&gt; is removed.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="726:1-731:87"&gt;&amp;#x000A;&lt;strong&gt;wlr_scene: Only allow parenting on a wlr_scene_tree&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3509" data-reference-type="merge_request" data-original="!3509" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="61850" data-project-path="wlroots/wlroots" data-iid="3509" data-container="body" data-placement="top" title="wlr_scene: Only allow parenting on a wlr_scene_tree" class="gfm gfm-merge_request"&gt;!3509&lt;/a&gt;)&amp;#x000A;&lt;ul data-sourcepos="727:3-731:87"&gt;&amp;#x000A;&lt;li data-sourcepos="727:3-727:102"&gt;The &lt;code&gt;WLR_SCENE_NODE_ROOT&lt;/code&gt; node type is removed, the root node is now a glorified &lt;code&gt;wlr_scene_tree&lt;/code&gt;.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="728:3-728:66"&gt;&amp;#x000A;&lt;code&gt;wlr_scene_node_state&lt;/code&gt; has been inlined into &lt;code&gt;wlr_scene_node&lt;/code&gt;.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="729:3-729:79"&gt;&amp;#x000A;&lt;code&gt;wlr_scene_tree&lt;/code&gt; now has the children linked list, not the &lt;code&gt;wlr_scene_node&lt;/code&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="730:3-730:85"&gt;Reparenting and scene node creation functions now only accept a &lt;code&gt;wlr_scene_tree&lt;/code&gt;.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="731:3-731:87"&gt;Helpers such as &lt;code&gt;wlr_scene_subsurface_tree_create()&lt;/code&gt; now return a &lt;code&gt;wlr_scene_tree&lt;/code&gt;.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="732:1-733:48"&gt;&amp;#x000A;&lt;strong&gt;output: drop wlr_output_cursor.events.destroy&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3578" data-reference-type="merge_request" data-original="!3578" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="64826" data-project-path="wlroots/wlroots" data-iid="3578" data-container="body" data-placement="top" title="output: introduce wlr_output_cursor_set_buffer" class="gfm gfm-merge_request"&gt;!3578&lt;/a&gt;)&amp;#x000A;&lt;ul data-sourcepos="733:3-733:48"&gt;&amp;#x000A;&lt;li data-sourcepos="733:3-733:48"&gt;Listen to wlr_output.events.destroy instead.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="734:1-735:60"&gt;&amp;#x000A;&lt;strong&gt;matrix: remove wlr_matrix_projection()&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3613" data-reference-type="merge_request" data-original="!3613" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="65364" data-project-path="wlroots/wlroots" data-iid="3613" data-container="body" data-placement="top" title="matrix: remove wlr_matrix_projection()" class="gfm gfm-merge_request"&gt;!3613&lt;/a&gt;)&amp;#x000A;&lt;ul data-sourcepos="735:3-735:60"&gt;&amp;#x000A;&lt;li data-sourcepos="735:3-735:60"&gt;This was deprecated 1 year ago and has now been removed.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="736:1-738:88"&gt;&amp;#x000A;&lt;strong&gt;Set mapped before firing map/unmap events&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3660" data-reference-type="merge_request" data-original="!3660" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="68574" data-project-path="wlroots/wlroots" data-iid="3660" data-container="body" data-placement="top" title="Set mapped before firing map/unmap events" class="gfm gfm-merge_request"&gt;!3660&lt;/a&gt;)&amp;#x000A;&lt;ul data-sourcepos="737:3-738:88"&gt;&amp;#x000A;&lt;li data-sourcepos="737:3-737:82"&gt;&amp;#x000A;&lt;code&gt;mapped&lt;/code&gt; flag is now consistently set &lt;em&gt;before&lt;/em&gt; emitting &lt;code&gt;map&lt;/code&gt;/&lt;code&gt;unmap&lt;/code&gt; signals.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="738:3-738:88"&gt;This affects compositors which rely on a specific state of the flag on those events.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="739:1-740:131"&gt;&amp;#x000A;&lt;strong&gt;surface: implement wl_surface.offset&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/2992" data-reference-type="merge_request" data-original="!2992" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="54124" data-project-path="wlroots/wlroots" data-iid="2992" data-container="body" data-placement="top" title="surface: implement wl_surface.offset" class="gfm gfm-merge_request"&gt;!2992&lt;/a&gt;)&amp;#x000A;&lt;ul data-sourcepos="740:3-740:131"&gt;&amp;#x000A;&lt;li data-sourcepos="740:3-740:131"&gt;To check whether the surface offset has changed, &lt;code&gt;WLR_SURFACE_STATE_OFFSET&lt;/code&gt; must be used instead of &lt;code&gt;WLR_SURFACE_STATE_BUFFER&lt;/code&gt;.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="741:1-742:97"&gt;&amp;#x000A;&lt;strong&gt;output: fail commits if adaptive sync cannot be enabled&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3637" data-reference-type="merge_request" data-original="!3637" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="66366" data-project-path="wlroots/wlroots" data-iid="3637" data-container="body" data-placement="top" title="output: fail commits if adaptive sync cannot be enabled" class="gfm gfm-merge_request"&gt;!3637&lt;/a&gt;)&amp;#x000A;&lt;ul data-sourcepos="742:3-742:97"&gt;&amp;#x000A;&lt;li data-sourcepos="742:3-742:97"&gt;Compositors now need to use &lt;code&gt;wlr_output_test()&lt;/code&gt; to check if an output supports adaptive sync.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="743:1-744:224"&gt;&amp;#x000A;&lt;strong&gt;xdg-shell: fix geometry types&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3818" data-reference-type="merge_request" data-original="!3818" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="73774" data-project-path="wlroots/wlroots" data-iid="3818" data-container="body" data-placement="top" title="xdg-shell: fix geometry types" class="gfm gfm-merge_request"&gt;!3818&lt;/a&gt;)&amp;#x000A;&lt;ul data-sourcepos="744:3-744:224"&gt;&amp;#x000A;&lt;li data-sourcepos="744:3-744:224"&gt;The types of &lt;code&gt;wlr_xdg_toplevel_state.{,min_,max_}{width,height}&lt;/code&gt;, &lt;code&gt;wlr_xdg_toplevel_configure.{,bounds.}{width,height}&lt;/code&gt;, and &lt;code&gt;wlr_xdg_toplevel_show_window_menu_event.{x,y}&lt;/code&gt; have been changed from &lt;code&gt;uint32_t&lt;/code&gt; to &lt;code&gt;int32_t&lt;/code&gt;.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="745:1-747:0"&gt;&amp;#x000A;&lt;strong&gt;output-damage: deprecate&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3837" data-reference-type="merge_request" data-original="!3837" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="73999" data-project-path="wlroots/wlroots" data-iid="3837" data-container="body" data-placement="top" title="output-damage: deprecate" class="gfm gfm-merge_request"&gt;!3837&lt;/a&gt;)&amp;#x000A;&lt;ul data-sourcepos="746:3-747:0"&gt;&amp;#x000A;&lt;li data-sourcepos="746:3-747:0"&gt;&amp;#x000A;&lt;code&gt;wlr_output_damage&lt;/code&gt; API has been deprecated. Use &lt;code&gt;wlr_damage_ring&lt;/code&gt; (&lt;code&gt;wlr/types/wlr_damage_ring.h&lt;/code&gt;) instead.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;h2 data-sourcepos="748:1-748:53" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-breaking-changes-for-custom-backends-and-renderers" class="anchor" href="#breaking-changes-for-custom-backends-and-renderers" aria-hidden="true"&gt;&lt;/a&gt;Breaking changes for custom backends and renderers&lt;/h2&gt;&amp;#x000A;&lt;p data-sourcepos="750:1-751:20" dir="auto"&gt;These changes are unlikely to affect compositors that don't have a custom&amp;#x000A;backend or renderer.&lt;/p&gt;&amp;#x000A;&lt;ul data-sourcepos="753:1-756:59" dir="auto"&gt;&amp;#x000A;&lt;li data-sourcepos="753:1-753:167"&gt;&amp;#x000A;&lt;strong&gt;render: allow texture creation while rendering&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3464" data-reference-type="merge_request" data-original="!3464" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="59862" data-project-path="wlroots/wlroots" data-iid="3464" data-container="body" data-placement="top" title="Relax render assumptions" class="gfm gfm-merge_request"&gt;!3464&lt;/a&gt;): renderers must now correctly handle texture creation between &lt;code&gt;wlr_renderer_begin&lt;/code&gt; and &lt;code&gt;wlr_renderer_end&lt;/code&gt;.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="754:1-754:139"&gt;&amp;#x000A;&lt;strong&gt;buffer: extract interface to separate header&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3472" data-reference-type="merge_request" data-original="!3472" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="60075" data-project-path="wlroots/wlroots" data-iid="3472" data-container="body" data-placement="top" title="buffer: extract interface to separate header" class="gfm gfm-merge_request"&gt;!3472&lt;/a&gt;): &lt;code&gt;wlr_buffer&lt;/code&gt; implementations now need to include &lt;code&gt;wlr/interfaces/wlr_buffer.h&lt;/code&gt;.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="755:1-755:78"&gt;&amp;#x000A;&lt;strong&gt;render: replace wlr_texture_write_pixels with update_from_buffer&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3585" data-reference-type="merge_request" data-original="!3585" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="64887" data-project-path="wlroots/wlroots" data-iid="3585" data-container="body" data-placement="top" title="render: replace wlr_texture_write_pixels with update_from_buffer" class="gfm gfm-merge_request"&gt;!3585&lt;/a&gt;)&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="756:1-756:59"&gt;&amp;#x000A;&lt;strong&gt;render: drop wlr_renderer_read_pixels() flags&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3749" data-reference-type="merge_request" data-original="!3749" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="71803" data-project-path="wlroots/wlroots" data-iid="3749" data-container="body" data-placement="top" title="render: drop wlr_renderer_read_pixels() flags" class="gfm gfm-merge_request"&gt;!3749&lt;/a&gt;)&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;</content> + <updated>2022-11-11T17:33:47Z</updated> + <media:thumbnail width="40" height="40" url="https://secure.gravatar.com/avatar/1ce071dd3264c7d9f5d9c0b7137faa6b?s=80&amp;d=identicon"/> + <author> + <name>Simon Ser</name> + <email>contact@emersion.fr</email> + </author> +</entry> +<entry> + <id>https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.15.1</id> + <link href="https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.15.1"/> + <title>0.15.1</title> + <summary>wlroots 0.15.1 + +Alexander Orzechowski (1): + xdg-foreign: Fix crash on destroy of degenerate surface + +Isaac Freund (3): + wlr_texture: remove wlr_texture_from_wl_drm() from header + foreign-toplevel: send enter if needed on output bind + tinywl: fix check whether client is focused or not + +Kirill Primak (3): + scene/subsurface_tree: fix handling subsurface destruction + compositor: damage the whole buffer on viewport src change + subsurface: unlock cached state on commit if desynced + +Simon Ser (4): + backend: error out in autocreate without libinput support + scene: schedule an output frame on wl_surface.frame + scene: try to import buffers as textures before rendering + build: bump version to 0.15.1 + +Tadeo Kondrak (1): + input_method_v2: improve mapping detection + +Thomas Hebb (1): + render/gles2: don't constrain shm formats to ones that support reading + +nyorain (1): + vulkan: Fix imported image layout +</summary> + <content type="html">&lt;div class="gl-relative markdown-code-block js-markdown-code"&gt;&amp;#x000A;&lt;pre data-sourcepos="1:1-29:3" class="code highlight js-syntax-highlight language-plaintext" lang="plaintext" data-canonical-lang="" v-pre="true"&gt;&lt;code&gt;&lt;span id="LC1" class="line" lang="plaintext"&gt;Alexander Orzechowski (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC2" class="line" lang="plaintext"&gt; xdg-foreign: Fix crash on destroy of degenerate surface&lt;/span&gt;&amp;#x000A;&lt;span id="LC3" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC4" class="line" lang="plaintext"&gt;Isaac Freund (3):&lt;/span&gt;&amp;#x000A;&lt;span id="LC5" class="line" lang="plaintext"&gt; wlr_texture: remove wlr_texture_from_wl_drm() from header&lt;/span&gt;&amp;#x000A;&lt;span id="LC6" class="line" lang="plaintext"&gt; foreign-toplevel: send enter if needed on output bind&lt;/span&gt;&amp;#x000A;&lt;span id="LC7" class="line" lang="plaintext"&gt; tinywl: fix check whether client is focused or not&lt;/span&gt;&amp;#x000A;&lt;span id="LC8" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC9" class="line" lang="plaintext"&gt;Kirill Primak (3):&lt;/span&gt;&amp;#x000A;&lt;span id="LC10" class="line" lang="plaintext"&gt; scene/subsurface_tree: fix handling subsurface destruction&lt;/span&gt;&amp;#x000A;&lt;span id="LC11" class="line" lang="plaintext"&gt; compositor: damage the whole buffer on viewport src change&lt;/span&gt;&amp;#x000A;&lt;span id="LC12" class="line" lang="plaintext"&gt; subsurface: unlock cached state on commit if desynced&lt;/span&gt;&amp;#x000A;&lt;span id="LC13" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC14" class="line" lang="plaintext"&gt;Simon Ser (4):&lt;/span&gt;&amp;#x000A;&lt;span id="LC15" class="line" lang="plaintext"&gt; backend: error out in autocreate without libinput support&lt;/span&gt;&amp;#x000A;&lt;span id="LC16" class="line" lang="plaintext"&gt; scene: schedule an output frame on wl_surface.frame&lt;/span&gt;&amp;#x000A;&lt;span id="LC17" class="line" lang="plaintext"&gt; scene: try to import buffers as textures before rendering&lt;/span&gt;&amp;#x000A;&lt;span id="LC18" class="line" lang="plaintext"&gt; build: bump version to 0.15.1&lt;/span&gt;&amp;#x000A;&lt;span id="LC19" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC20" class="line" lang="plaintext"&gt;Tadeo Kondrak (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC21" class="line" lang="plaintext"&gt; input_method_v2: improve mapping detection&lt;/span&gt;&amp;#x000A;&lt;span id="LC22" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC23" class="line" lang="plaintext"&gt;Thomas Hebb (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC24" class="line" lang="plaintext"&gt; render/gles2: don't constrain shm formats to ones that support reading&lt;/span&gt;&amp;#x000A;&lt;span id="LC25" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC26" class="line" lang="plaintext"&gt;nyorain (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC27" class="line" lang="plaintext"&gt; vulkan: Fix imported image layout&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&amp;#x000A;&lt;copy-code&gt;&lt;/copy-code&gt;&amp;#x000A;&lt;/div&gt;</content> + <updated>2022-02-03T21:24:59Z</updated> + <media:thumbnail width="40" height="40" url="https://secure.gravatar.com/avatar/1ce071dd3264c7d9f5d9c0b7137faa6b?s=80&amp;d=identicon"/> + <author> + <name>Simon Ser</name> + <email>contact@emersion.fr</email> + </author> +</entry> +<entry> + <id>https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.15.0</id> + <link href="https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.15.0"/> + <title>0.15.0</title> + <summary>wlroots 0.15.0 + +Release highlights: + +- A new experimental Vulkan renderer has been merged (manually enabled with + `WLR_RENDERER=vulkan`). +- A new scene-graph API has been introduced to enable more code-sharing between + compositors. +- Large parts of the backend and renderer APIs have been refactored and + reworked. +- The `drm-lease-v1` protocol has been implemented. +- Feedback support has been added to the `linux-dmabuf-unstable-v1` + implementation, unlocking many zero-copy and multi-GPU optimizations and + features. +- The `wlr_output` rendering API now supports 10bpc and 16bpc formats. +- The DRM backend now supports hotplugging secondary GPUs at runtime. +- `wlr_region` and `wlr_box` are now stable APIs. + +Full changelog below. + +Andri Yngvason (2): + screencopy: Use output-&gt;front_buffer instead of wlr_output_export_dmabuf + screencopy: Handle shm copy in commit event handler + +Anthony Super (1): + Add error handling to backend creation + +Chris Chamberlain (2): + backend: fix return value of attempt_drm_backend + backend/drm: add wlr_drm_backend_monitor + +Cole Mickens (1): + egl: use alts for EGL_EXT_device_enum, if missing + +David Rosca (1): + seat: Only resend keyboard/pointer enter to focused clients + +Demi Marie Obenour (1): + Improve wlr_drm_format documentation + +Devin J. Pohly (9): + scene: add node reparent function + scene: ensure node cannot be reparented below itself + scene: make graph loops fatal when debugging + scene: stricter assertions on reparent + scene: iterate nodes instead of surfaces when rendering + scene: add RECT node type + scene: replace surface_at() with node_at() + examples/scene-graph: demonstrate scene_rect node type + scene: remove redundant empty-region check in render_texture() + +Dylan Araps (1): + util/time: make NSEC_PER_SEC static + +Elyes HAOUAS (1): + Fix spelling errors + +Guido Günther (3): + xwayland: Allow to retrieve _NET_STARTUP_ID + xwayland: Allow to retrieve startup-id via _NET_STARTUP_INFO + xdg-activation: Allow to submit tokens + +Haelwenn (lanodan) Monnier (3): + render/pixman/renderer.c: Fix memory-leak in create_buffer + render/egl.c: Fix memory leaks in egl_create + backend/drm/legacy.c: Fix memory leak in drm_legacy_crtc_set_gamma + +Hubert Hirtz (1): + Fix a typo in CONTRIBUTING.md + +Isaac Freund (15): + layer-shell: replace close() with destroy() + tinywl: simplify logic for sending pointer events + scene: assert that node != sibling in place above/below + scene: add functions to place node on top/bottom + output: fix leak of wlr_drm_format + text-input/input-method: handle strdup() failure + text-input: fix type of send_preedit_string() args + wlr_drag: emit destroy after wl_data_device.leave + tinywl: use wlr_scene + scene: send surface enter/leave output events + scene: add primary output to wlr_scene_surface + scene: add wlr_scene_send_frame_done() + tinywl: use wlr_scene_send_frame_done() + scene: fix wlr_scene_send_frame_done() API + scene: add wlr_scene_set_presentation() + +Jan Beich (2): + backend: drop unconditional and unused &lt;libinput.h&gt; + render: completely disable gles2 if requested but libEGL is found + +John Lindgren (1): + Insert new outputs at the end of the list + +Jonathan Wong (1): + Added whitespace between "output" and "(not" + +Joshua Ashton (2): + render/vulkan: Use image view swizzles instead of shader hack + render/vulkan: Optimize vertex shader + +José Expósito (8): + protocol/meson: bump wayland-protocols requirement to 1.23 + pointer: add hold pointer event definition + build: check if libinput supports hold gestures + backend/libinput: send hold gesture events + backend/wayland: send hold gesture events + cursor: emit hold gesture events + wlr_pointer_gestures: update protocol to version 2 + wlr_pointer_gestures: hold gestures (protocol v3) + +Kirill Primak (34): + surface: don't cache frame callback lists + util: add wlr_addon + wlr_outputs: add wlr_addon_set + wlr_output_layout: use wlr_addons + util/addon: find both by owner and impl + surface: fix place_below handling + util/box: introduce wlr_fbox_transform() + surface: fix wlr_surface_get_buffer_source_box() + subsurface: unlock surface on destroy + surface: cache frame callback lists again + surface: move subsurface lists to state + surface: rename impl and its functions + surface: change surface_finalize_state() to surface_finalize_pending() + surface: inline surface_commit_pending() + xdg popup: move function to a file it belongs to + xdg-toplevel: refactor configure/state flow + xdg-surface: simplify configure mechanism + xdg surface: check adding configure_idle for NULL + layer-shell: refactor configure/state flow + layer-shell: add `committed` bitmask + xdg-surface: add pending state + xdg-shell: remove redundant NULL buffer check + layer-shell: move NULL buffer check to role precommit handler + xdg-decoration: refactor configure/state flow + output: disallow NULL event for wlr_output_send_present() + output: add presented flag to presentation event + presentation-time: don't send presented on discard + presentation-time: use a surface addon + CONTRIBUTING.md: add CoC section + surface: fix damage transformation + subsurface: simplify and fix parent commit handling + subsurface: apply position change at the right moment + surface: fix non-buffer damage handling + subsurface: don't add to parent list immediately + +Manuel Stoeckl (7): + render/pixel-format: add a few 10-bit and FP16 formats + render/gles2: hide shm formats without GL support + render/gles2: add a few 10-bit and FP16 formats + output: lift up output format fallback logic + output: use XRGB8888 format instead of ARGB8888 + output: Add function to set preferred render format + output: remove XRGB8888 cursor fallback format + +MarkusVolk (1): + backend.c: do not try to explicitly clean up the libinput backend + +Michele Sorcinelli (1): + xwayland: do not free cursor in handle_server_ready() + +Moon Sungjoon (1): + backend/wayland: improve wayland input device name + +Quantum (3): + viewporter: remove crop and scale state upon destruction + scene: fix compile error in release builds + Fix uninitialized variable errors in release mode + +Raphael Robatsch (1): + util/token: don't leak /dev/urandom fd to children + +Roman Gilg (1): + backend/headless: unlink input device on destroy + +Ronan Pigott (3): + xdg-activation-v1: enable compositors to request their own tokens + xdg-activation-v1: add data field and emit token destroy events + backend/wayland: use xdga client activation + +Rouven Czerwinski (6): + backend/drm: return true on test if no crtc + output: check output enabled before sending frame + Revert "backend/drm: Check if output is enabled before sending frame event" + backend/drm: try to allocate crtc for formats + linux-dmabuf-v1: filter out LINEAR if implicit + linux-dmabuf-v1: fix implicit check + +Simon Ser (288): + build: bump version to 0.15.0 + backend/drm: rename page_flip_handler to handle_page_flip + render/egl: remove stale wlr_egl_export_image_to_dmabuf decl + render/egl: make most functions private + xwayland: improve startup log message + build: use meson.global_build_root() + ci: remove -Dlibseat from Alpine build + ci: make Meson warnings fatal + Drop WLR_VERSION_API_* + surface: remove SURFACE_VERSION + surface: make wlr_subsurface_create private + pointer: document event data types + touch: document event data types + surface: accept commits with buffer size not divisible by scale + render/egl: replace wlr_egl_create with wlr_egl_create_with_drm_fd + Remove unused wlr_list.h includes + util/array: add array_remove_at + backend/libinput: stop using wlr_list internally + tablet: stop using wlr_list + Drop wlr_list + tablet-v2: fix pad and tool object versions + buffer: introduce wlr_readonly_data_buffer + render: use wlr_readonly_data_buffer in wlr_texture_from_pixels + render: drop wlr_renderer_impl.texture_from_pixels + buffer: add wlr_dmabuf_buffer + render: use wlr_dmabuf_buffer in wlr_texture_from_dmabuf + render: drop wlr_renderer_impl.texture_from_dmabuf + buffer: make enum wlr_buffer_cap public + backend/libinput: use wl_array for wlr_libinput_tablet.tools + surface: allow locking pending state in commit handler + Remove reference to the announce mailing list + region: stabilize interface + region: drop leftover reference to the mailing list + Revert "backend/drm: populate cursor plane's current_fb" + backend/drm: don't clear pending cursor FB on failed commit + xcursor: improve documentation + Add a stub wl_drm implementation + drm: add support for DMA-BUFs + buffer: handle wl_drm buffers + render/gles2: use wlr_drm for wl_drm implementation + render: remove wl_drm support from wlr_renderer + render/egl: remove EGL_WL_bind_wayland_display support + buffer: remove renderer param from wlr_resource_get_buffer_size + buffer: stop sending wl_buffer.release events from wlr_client_buffer + buffer: unify texture creation in wlr_client_buffer_import + output: detach buffer from renderer before commit + output-damage: fix output swapchain handling + touch: add frame event + backend/libinput: send touch frame events + backend/wayland: send touch frame events + backend/x11: send touch frame events + cursor: add touch frame event + seat: add wlr_seat_touch_{send,notify}_frame + Fix invalid uses of wl_array_for_each + backend/drm: force linear layout for multi-GPU buffers + backend/drm: stop using drm_surface_make_current in drm_surface_blit + backend/drm: add test_only arg to wlr_drm_interface.crtc_commit + backend/drm: move legacy-specific checks to legacy.c + backend/drm: remove backend arg from wlr_drm_interface.crtc_commit + buffer: rename wlr_client_buffer variables to client_buffer + buffer: stop using source resource in wlr_client_buffer_apply_damage + buffer: add wlr_client_buffer.source + buffer: stop using resource in client_buffer_get_dmabuf + buffer: drop wlr_client_buffer.resource + render/egl: rename wlr_egl.exts to better match Khronos + render/gles2: rename wlr_egl.exts to better match Khronos + render/gles2: set has_alpha for DMA-BUFs + render/gles2: disable blending opportunistically + buffer: drop resource arg from wlr_client_buffer_create + output: add generic wlr_output_export_dmabuf implementation + backend/headless: remove wlr_output_impl.export_dmabuf + backend/drm: remove wlr_output_impl.export_dmabuf + output: remove wlr_output_impl.export_dmabuf + backend/wayland: properly cleanup wlr_wl_pointer + backend/drm: fix NULL data in handle_drm_event + buffer: re-use wlr_shm_client_buffer + backend/drm: stop restoring CRTCs on exit + backend/drm: add DRM_MODE_CONNECTOR_USB to conn_get_name + render: drop wlr_renderer_impl.init_wl_display + render/egl: set EGL_IMAGE_PRESERVED_KHR + render/egl: add support for EGL_EXT_device_drm_render_node + xwayland: simplify argv filling logic + xwayland: embed wlr_xwayland_server_options in server struct + output: fallback to XRGB in output_pick_format + backend/drm: implement get_primary_formats + output: use pending resolution when allocating swapchain + output: allocate and attach empty buffer on modeset + output: fallback to modifier-less allocation on modeset test failure + backend/drm: allow legacy scan-out if FB props match + backend/drm: remove primary swapchain + backend/drm: remove SCANOUT check in drm_connector_test + backend/drm: drop drm_surface_{make,unset}_current + backend/drm: drop get_renderer implementation + backend/drm: stop initializing renderer for parent backend + backend/drm: fix wrong type for get_cursor_format return values + backend/noop: drop attach_render/rollback_render + output: drop wlr_output_impl.{attach,rollback}_render + output-damage: stop using enum wlr_output_state_buffer_type + output: drop wlr_output_state.buffer_type + render/pixel-format: add some 24 and 16-bit formats + render/gles2: add support for some 24 and 16-bit formats + backend/drm: preserve mode order from kernel + render/pixel_format: add more formats for Pixman + render/pixman/pixel_format: add more formats + output: try skipping buffer allocation if the backend allows it + backend/drm: require buffer on modeset in drm_connector_test + examples/fullscreen-shell: remove unused render_data.view field + build: remove "." from include dirs + seat: allow compositors to not load a keymap + ci: add smoke test + backend/drm: add proper error handling to wlr_drm_backend_create + backend/drm: always perform a test commit in drm_connector_test + surface: kill wlr_surface.previous + surface: drop surface_state_copy + buffer: add addon set + render/gles2: make wlr_gles2_buffer an addon + render/gles2: make wlr_gles2_texture a wlr_buffer addon + backend/drm: use addon for wlr_drm_fb + backend/drm: add support for FB_DAMAGE_CLIPS + backend: unify startup messages + backend/drm: generate CVT reduced modes + backend/{drm,libinput}: exclude headers when disabled + Move allocator stuff into new directory + render/egl: reopen DRM node for GBM + backend/drm: introduce wlr_drm_bo_handle_table + Introduce new scene-graph API + examples/scene-graph: new example + scene: add wlr_scene_node_toggle + scene: allow nodes to have arbitrary parents + scene: add user data pointer to wlr_scene_node + scene: add wlr_scene_node_surface_at + contributing: add new section about commit log + contributing: use references for links + contributing: clone wlroots fork with SSH + contributing: turn remaining links into refs + Link to gamja for web chat + render/allocator: re-open GBM FD + render/allocator/gbm: fix create() docs for FD ownership + build: add subproject fallback for wayland + build: add subproject fallback for wayland-protocols + contributing: don't reference issues in commit first line + render/allocator: use legacy authentication for primary nodes + backend/drm: handle drm_surface_blit errors + render/allocator/gbm: add log message for gbm_bo_get_fd_for_plane + util/shm: add allocate_shm_file_pair + keyboard: add wlr_keyboard.keymap_fd + seat: avoid copying the keymap for each client + subsurface: rename wlr_subsurface_state to wlr_subsurface_parent_state + subsurface: move parent link to state + buffer: take a wlr_buffer in wlr_client_buffer_apply_damage + buffer: make wlr_client_buffer_apply_damage return a bool + viewporter: add doc comment explaining compositor requirements + viewporter: hide wlr_viewport + surface: ensure buffer is reset to NULL in surface_state_move + surface: drop wlr_surface_state.buffer_resource + surface: fix abort on NULL buffer attach + backend/drm: rename enum wlr_drm_connector_state to status + backend/drm: introduce wlr_drm_connector_state + backend/drm: fix crash on VT switch + backend/drm: drop unused arg from get_possible_crtcs + backend/drm: drop drm_connector_init_renderer + output-damage: fix damage on modeset + backend/drm: drop attempt_enable_needs_modeset + backend/drm: drop wlr_drm_connector.desired_mode + scene: fix wlr_scene_render_output offset + scene: add scene outputs + scene: add wlr_scene_output_commit + scene: add wlr_scene_node_coords + scene: add damage tracking support + examples/scene-graph: use wlr_scene_output + scene: move source to subdir + scene: add wlr_scene_attach_output_layout + buffer: add data_ptr access flags + ci: switch to seatd-launch + scene: add wlr_scene_tree + surface: add addon set + scene: add wlr_scene_subsurface_tree_create + build: simplify get_variable calls + backend/drm: add support for panel orientation + scene: drop default case in wlr_scene_node_at + scene: unify intersection logic in wlr_scene_node_at + scene: add wlr_scene_buffer + util/box: introduce wlr_fbox_empty + scene: add wlr_scene_buffer_set_source_box + scene: add scene_node_get_size helper + scene: use scene_node_get_size in wlr_scene_node_at + scene: add wlr_scene_buffer_set_dest_size + scene: add wlr_scene_buffer_set_transform + backend: create renderer and allocator in wlr_backend_autocreate + xdg-shell: introduce wlr_xdg_surface.current + xdg-shell: rename wlr_xdg_surface.next_configure_serial + xdg-shell: stop clearing wlr_xdg_surface state on unmap + render/drm_format_set: add wlr_drm_format_has + Require INVALID for implicit format modifiers + backend/drm: fail on explicit modifier in drmModeAddFB2 + render/egl: always add LINEAR to supported modifiers + render/drm_format_set: remove special LINEAR case + Revert "render/drm_format_set: remove special LINEAR case" + Revert "render/egl: always add LINEAR to supported modifiers" + Revert "backend/drm: fail on explicit modifier in drmModeAddFB2" + Revert "Require INVALID for implicit format modifiers" + Revert "render/drm_format_set: add wlr_drm_format_has" + render/allocator: use render node if available in reopen_drm_node + render/allocator: use empty DRM lease to re-open node + scene: remove surface commit listener when node is destroyed + render/vulkan: check vulkan-headers dependency + presentation-time: remove unused field + scene: add wlr_scene_output_for_each_surface + scene: add support for direct scan-out + output: split into multiple files + xdg-foreign-v2: use error enum + output: refuse to enable with zero mode + readme: refresh dependencies + backend/drm: add entry for Valve EDID vendor + backend/x11: fix code style in get_touchpoint_from_x11_touch_id + scene: inline subsurface_tree_destroy + sceeencopy-v1: listen to output destroy in capture_output + backend/drm: get rid of BO handle table + output: fix stack variable lifetime in wlr_output_send_present + backend/drm: avoid creating empty FB_DAMAGE_CLIPS prop + ci: add .gitlab-ci.yml + s/GitHub/GitLab/ + xwayland: add support for -noTouchPointerEmulation + backend/session: introduce wlr_device_change_event + backend/drm: handle per-connector hotplug events + scene: fix calloc size mismatch + export-dmabuf-v1: stop using wlr_output_export_dmabuf + screencopy-v1: stop using wlr_output_export_dmabuf + output: drop wlr_output_export_dmabuf + linux-dmabuf-v1: properly validate flags + Remove support for DMA-BUF flags + output: add wlr_output_init_render + output: fix renderer buffer cap sanity check in wlr_output_init_render + Introduce WLR_DEVICE_LEASE events + backend/drm: introduce wlr_drm_lease + drm-lease-v1: listen to lease destroy event + backend/drm: scan leases on uevent + linux-dmabuf-v1: hide wlr_linux_buffer_params_v1 + backend/wayland: report parent presentation clock + input-device: remove wlr_input_device.link + render/vulkan: quiet glslangValidator + docs/env_vars: drop WLR_DIRECT_TTY + render: pick DRM FD in autocreate + render/allocator: fallback to renderer DRM FD in autocreate + backend/headless: stop picking a DRM FD + render: introduce WLR_RENDER_DRM_DEVICE + backend/headless: drop wlr_headless_backend_create_with_renderer + scene: add wlr_scene_xdg_surface_create + render/drm_format_set: add wlr_drm_format_has + Require INVALID for implicit format modifiers + backend/drm: fail on explicit modifier in drmModeAddFB2 + render/egl: always add LINEAR to supported modifiers + render/drm_format_set: remove special LINEAR case + backend/drm: always add LINEAR to supported modifiers + render: add DMA-BUF docs + scene: add support for viewporter + backend/drm: poison buffers which cannot be scanned out + output: destroy swapchain when disabled + output: don't leave dangling cursor_front_buffer + output: fix typo in wlr_output_impl.get_primary_formats docs + output: add wlr_output_get_primary_formats + scene: add wlr_scene_get_scene_output + render/egl: store IMG_context_priority in wlr_egl + render/egl: add wlr_egl_create_with_context + render/pixman: advertise MOD_INVALID instead of MOD_LINEAR + render/egl: improve modifier support detection + output: fix modifier stripping + readme: update wrapper libraries link + render/drm-format-set: add wlr_drm_format_set_intersect + output: add wlr_output_event_commit.buffer + export-dmabuf-v1: use wlr_output_event_commit.buffer + screencopy-v1: use wlr_output_event_commit.buffer + output: drop front_buffer + render: add wlr_renderer_init_wl_shm + linux-dmabuf-v1: implement v4 + linux-dmabuf-v1: add per-surface feedback + build: move wayland-client dep to backend/wayland/ + examples/layer-shell: remove wlroots dependency + examples: remove unnecessary wlroots deps for clients + examples: remove unnecessary partial_dependency() call + output: introduce wlr_output_set_name + Fix incorrect %zd formatting directives + output: add support for protocol interface version 4 + util/global: remove wl_display arg from wlr_global_destroy_safe + backend/drm: use drmModeFormatModifierBlobIterNext + backend/drm: use drmCloseBufferHandle + build: add subproject fallback for libdrm + backend/wayland: add basic linux-dmabuf feedback support + +Simon Zeni (36): + types/wlr_box: remove unused wlr_box_from_pixman_box32 and wlr_box_rotated_bounds functions + move wlr_box from /types to /util + util/box: stabilize interface + types/wlr_buffer: split wlr_client_buffer_import function + types/wlr_surface: get buffer size from wlr_buffer_import + types/wlr_buffer: remove wlr_resource_get_buffer_size + types/wlr_buffer: remove wlr_renderer argument from wlr_buffer_from_resource + types/wlr_buffer: introduce wlr_buffer_resource_interface + types/wlr_buffer: create custom wlr_buffer from wl_resource + render/wlr_texture: put wlr_texture_from_buffer into the public API + render/egl: initialize wlr_egl with EGL_PLATFORM_DEVICE_EXT + backend/drm: implement drm lease function + backend/drm: introduce wlr_drm_backend_get_non_master_fd + protocol/meson: bump wayland-protocols requirement to 1.22 + types: introduce wlr_drm_lease_v1 + types/buffer: make {begin,end}_data_ptr_access part of the public API + backend/multi: implement get_buffer_caps + render/allocator: make wlr_allocator part of the public API + examples: init wlr_output with allocator and renderer + tinywl: autocreate allocator and init output + backend: remove backend ensure renderer and allocator check + backend: remove backend_get_allocator + types/wlr_screencopy_v1: use renderer from output + types/wlr_scene: use renderer from wlr_output + backend/x11: get renderer from wlr_x11_output + backend/headless: don't store the parent renderer + backend/drm: stop initializing backend renderer + backend/multi: remove backend_get_renderer + backend: remove wlr_backend_get_renderer + backend/multi: add asserts in wlr_multi_backend_add + backend: fix attempt_backend_by_name multi backend self insertion + tinywl: init output render before commit + tinywl: build with meson if examples option is enabled + ci/archlinux: enable address and undefined sanitizers + backend: remove noop backend + types/wlr_drm_lease_v1: add NULL check to drm lease resource destroy + +Stacy Harper (1): + layer-shell: don't set committed flag if the property didn't change + +Tadeo Kondrak (2): + input-method-unstable-v2: Add error for surface with existing role + Implement input_method_v2 popups + +Tudor Brindus (3): + input/pointer: try harder to not send duplicate motion events + input/tablet: fix `wl_array_for_each` usage on tablet proximity + xwm: do not restack surfaces on activation + +Vyivel (2): + render/pixman: fix texture_is_opaque() + input/pointer: send axis source once per frame + +ayaka (1): + backend: make DRM and libinput backends optional + +buffet (1): + Update loc count in readme + +fwsmit (1): + examples/foreign-toplevel: fix toplevel not being freed + +muradm (1): + backend: wait for session to become active + +nyorain (1): + render/vulkan: add Vulkan renderer + +tiosgz (4): + for_each_surface: only iterate mapped surfaces + surface_at: check if surfaces are mapped + scene/subsurface_tree: hide unmapped subsurfaces + Fix wlr_scene_node_lower_to_bottom + +yuiiio (1): + render/egl: fix typo + +Érico Nogueira (1): + docs: mention WLR_RENDERER=vulkan. + +</summary> + <content type="html">&lt;p data-sourcepos="1:1-1:19" dir="auto"&gt;Release highlights:&lt;/p&gt;&amp;#x000A;&lt;ul data-sourcepos="3:1-11:0" dir="auto"&gt;&amp;#x000A;&lt;li data-sourcepos="3:1-3:99"&gt;A new experimental Vulkan renderer has been merged (manually enabled with &lt;code&gt;WLR_RENDERER=vulkan&lt;/code&gt;).&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="4:1-4:92"&gt;A new scene-graph API has been introduced to enable more code-sharing between compositors.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="5:1-5:81"&gt;Large parts of the backend and renderer APIs have been refactored and reworked.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="6:1-6:51"&gt;The &lt;code&gt;drm-lease-v1&lt;/code&gt; protocol has been implemented.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="7:1-7:150"&gt;Feedback support has been added to the &lt;code&gt;linux-dmabuf-unstable-v1&lt;/code&gt; implementation, unlocking many zero-copy and multi-GPU optimizations and features.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="8:1-8:70"&gt;The &lt;code&gt;wlr_output&lt;/code&gt; rendering API now supports 10bpc and 16bpc formats.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="9:1-9:69"&gt;The DRM backend now supports hotplugging secondary GPUs at runtime.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="10:1-11:0"&gt;&amp;#x000A;&lt;code&gt;wlr_region&lt;/code&gt; and &lt;code&gt;wlr_box&lt;/code&gt; are now stable APIs.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;details&gt;&amp;#x000A;&lt;summary&gt;Full changelog&lt;/summary&gt;&amp;#x000A;&lt;div class="gl-relative markdown-code-block js-markdown-code"&gt;&amp;#x000A;&lt;pre data-sourcepos="16:1-556:3" class="code highlight js-syntax-highlight language-plaintext" lang="plaintext" data-canonical-lang="" v-pre="true"&gt;&lt;code&gt;&lt;span id="LC1" class="line" lang="plaintext"&gt;Andri Yngvason (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC2" class="line" lang="plaintext"&gt; screencopy: Use output-&amp;gt;front_buffer instead of wlr_output_export_dmabuf&lt;/span&gt;&amp;#x000A;&lt;span id="LC3" class="line" lang="plaintext"&gt; screencopy: Handle shm copy in commit event handler&lt;/span&gt;&amp;#x000A;&lt;span id="LC4" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC5" class="line" lang="plaintext"&gt;Anthony Super (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC6" class="line" lang="plaintext"&gt; Add error handling to backend creation&lt;/span&gt;&amp;#x000A;&lt;span id="LC7" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC8" class="line" lang="plaintext"&gt;Chris Chamberlain (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC9" class="line" lang="plaintext"&gt; backend: fix return value of attempt_drm_backend&lt;/span&gt;&amp;#x000A;&lt;span id="LC10" class="line" lang="plaintext"&gt; backend/drm: add wlr_drm_backend_monitor&lt;/span&gt;&amp;#x000A;&lt;span id="LC11" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC12" class="line" lang="plaintext"&gt;Cole Mickens (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC13" class="line" lang="plaintext"&gt; egl: use alts for EGL_EXT_device_enum, if missing&lt;/span&gt;&amp;#x000A;&lt;span id="LC14" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC15" class="line" lang="plaintext"&gt;David Rosca (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC16" class="line" lang="plaintext"&gt; seat: Only resend keyboard/pointer enter to focused clients&lt;/span&gt;&amp;#x000A;&lt;span id="LC17" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC18" class="line" lang="plaintext"&gt;Demi Marie Obenour (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC19" class="line" lang="plaintext"&gt; Improve wlr_drm_format documentation&lt;/span&gt;&amp;#x000A;&lt;span id="LC20" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC21" class="line" lang="plaintext"&gt;Devin J. Pohly (9):&lt;/span&gt;&amp;#x000A;&lt;span id="LC22" class="line" lang="plaintext"&gt; scene: add node reparent function&lt;/span&gt;&amp;#x000A;&lt;span id="LC23" class="line" lang="plaintext"&gt; scene: ensure node cannot be reparented below itself&lt;/span&gt;&amp;#x000A;&lt;span id="LC24" class="line" lang="plaintext"&gt; scene: make graph loops fatal when debugging&lt;/span&gt;&amp;#x000A;&lt;span id="LC25" class="line" lang="plaintext"&gt; scene: stricter assertions on reparent&lt;/span&gt;&amp;#x000A;&lt;span id="LC26" class="line" lang="plaintext"&gt; scene: iterate nodes instead of surfaces when rendering&lt;/span&gt;&amp;#x000A;&lt;span id="LC27" class="line" lang="plaintext"&gt; scene: add RECT node type&lt;/span&gt;&amp;#x000A;&lt;span id="LC28" class="line" lang="plaintext"&gt; scene: replace surface_at() with node_at()&lt;/span&gt;&amp;#x000A;&lt;span id="LC29" class="line" lang="plaintext"&gt; examples/scene-graph: demonstrate scene_rect node type&lt;/span&gt;&amp;#x000A;&lt;span id="LC30" class="line" lang="plaintext"&gt; scene: remove redundant empty-region check in render_texture()&lt;/span&gt;&amp;#x000A;&lt;span id="LC31" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC32" class="line" lang="plaintext"&gt;Dylan Araps (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC33" class="line" lang="plaintext"&gt; util/time: make NSEC_PER_SEC static&lt;/span&gt;&amp;#x000A;&lt;span id="LC34" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC35" class="line" lang="plaintext"&gt;Elyes HAOUAS (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC36" class="line" lang="plaintext"&gt; Fix spelling errors&lt;/span&gt;&amp;#x000A;&lt;span id="LC37" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC38" class="line" lang="plaintext"&gt;Guido Günther (3):&lt;/span&gt;&amp;#x000A;&lt;span id="LC39" class="line" lang="plaintext"&gt; xwayland: Allow to retrieve _NET_STARTUP_ID&lt;/span&gt;&amp;#x000A;&lt;span id="LC40" class="line" lang="plaintext"&gt; xwayland: Allow to retrieve startup-id via _NET_STARTUP_INFO&lt;/span&gt;&amp;#x000A;&lt;span id="LC41" class="line" lang="plaintext"&gt; xdg-activation: Allow to submit tokens&lt;/span&gt;&amp;#x000A;&lt;span id="LC42" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC43" class="line" lang="plaintext"&gt;Haelwenn (lanodan) Monnier (3):&lt;/span&gt;&amp;#x000A;&lt;span id="LC44" class="line" lang="plaintext"&gt; render/pixman/renderer.c: Fix memory-leak in create_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC45" class="line" lang="plaintext"&gt; render/egl.c: Fix memory leaks in egl_create&lt;/span&gt;&amp;#x000A;&lt;span id="LC46" class="line" lang="plaintext"&gt; backend/drm/legacy.c: Fix memory leak in drm_legacy_crtc_set_gamma&lt;/span&gt;&amp;#x000A;&lt;span id="LC47" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC48" class="line" lang="plaintext"&gt;Hubert Hirtz (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC49" class="line" lang="plaintext"&gt; Fix a typo in CONTRIBUTING.md&lt;/span&gt;&amp;#x000A;&lt;span id="LC50" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC51" class="line" lang="plaintext"&gt;Isaac Freund (15):&lt;/span&gt;&amp;#x000A;&lt;span id="LC52" class="line" lang="plaintext"&gt; layer-shell: replace close() with destroy()&lt;/span&gt;&amp;#x000A;&lt;span id="LC53" class="line" lang="plaintext"&gt; tinywl: simplify logic for sending pointer events&lt;/span&gt;&amp;#x000A;&lt;span id="LC54" class="line" lang="plaintext"&gt; scene: assert that node != sibling in place above/below&lt;/span&gt;&amp;#x000A;&lt;span id="LC55" class="line" lang="plaintext"&gt; scene: add functions to place node on top/bottom&lt;/span&gt;&amp;#x000A;&lt;span id="LC56" class="line" lang="plaintext"&gt; output: fix leak of wlr_drm_format&lt;/span&gt;&amp;#x000A;&lt;span id="LC57" class="line" lang="plaintext"&gt; text-input/input-method: handle strdup() failure&lt;/span&gt;&amp;#x000A;&lt;span id="LC58" class="line" lang="plaintext"&gt; text-input: fix type of send_preedit_string() args&lt;/span&gt;&amp;#x000A;&lt;span id="LC59" class="line" lang="plaintext"&gt; wlr_drag: emit destroy after wl_data_device.leave&lt;/span&gt;&amp;#x000A;&lt;span id="LC60" class="line" lang="plaintext"&gt; tinywl: use wlr_scene&lt;/span&gt;&amp;#x000A;&lt;span id="LC61" class="line" lang="plaintext"&gt; scene: send surface enter/leave output events&lt;/span&gt;&amp;#x000A;&lt;span id="LC62" class="line" lang="plaintext"&gt; scene: add primary output to wlr_scene_surface&lt;/span&gt;&amp;#x000A;&lt;span id="LC63" class="line" lang="plaintext"&gt; scene: add wlr_scene_send_frame_done()&lt;/span&gt;&amp;#x000A;&lt;span id="LC64" class="line" lang="plaintext"&gt; tinywl: use wlr_scene_send_frame_done()&lt;/span&gt;&amp;#x000A;&lt;span id="LC65" class="line" lang="plaintext"&gt; scene: fix wlr_scene_send_frame_done() API&lt;/span&gt;&amp;#x000A;&lt;span id="LC66" class="line" lang="plaintext"&gt; scene: add wlr_scene_set_presentation()&lt;/span&gt;&amp;#x000A;&lt;span id="LC67" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC68" class="line" lang="plaintext"&gt;Jan Beich (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC69" class="line" lang="plaintext"&gt; backend: drop unconditional and unused &amp;lt;libinput.h&amp;gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC70" class="line" lang="plaintext"&gt; render: completely disable gles2 if requested but libEGL is found&lt;/span&gt;&amp;#x000A;&lt;span id="LC71" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC72" class="line" lang="plaintext"&gt;John Lindgren (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC73" class="line" lang="plaintext"&gt; Insert new outputs at the end of the list&lt;/span&gt;&amp;#x000A;&lt;span id="LC74" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC75" class="line" lang="plaintext"&gt;Jonathan Wong (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC76" class="line" lang="plaintext"&gt; Added whitespace between "output" and "(not"&lt;/span&gt;&amp;#x000A;&lt;span id="LC77" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC78" class="line" lang="plaintext"&gt;Joshua Ashton (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC79" class="line" lang="plaintext"&gt; render/vulkan: Use image view swizzles instead of shader hack&lt;/span&gt;&amp;#x000A;&lt;span id="LC80" class="line" lang="plaintext"&gt; render/vulkan: Optimize vertex shader&lt;/span&gt;&amp;#x000A;&lt;span id="LC81" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC82" class="line" lang="plaintext"&gt;José Expósito (8):&lt;/span&gt;&amp;#x000A;&lt;span id="LC83" class="line" lang="plaintext"&gt; protocol/meson: bump wayland-protocols requirement to 1.23&lt;/span&gt;&amp;#x000A;&lt;span id="LC84" class="line" lang="plaintext"&gt; pointer: add hold pointer event definition&lt;/span&gt;&amp;#x000A;&lt;span id="LC85" class="line" lang="plaintext"&gt; build: check if libinput supports hold gestures&lt;/span&gt;&amp;#x000A;&lt;span id="LC86" class="line" lang="plaintext"&gt; backend/libinput: send hold gesture events&lt;/span&gt;&amp;#x000A;&lt;span id="LC87" class="line" lang="plaintext"&gt; backend/wayland: send hold gesture events&lt;/span&gt;&amp;#x000A;&lt;span id="LC88" class="line" lang="plaintext"&gt; cursor: emit hold gesture events&lt;/span&gt;&amp;#x000A;&lt;span id="LC89" class="line" lang="plaintext"&gt; wlr_pointer_gestures: update protocol to version 2&lt;/span&gt;&amp;#x000A;&lt;span id="LC90" class="line" lang="plaintext"&gt; wlr_pointer_gestures: hold gestures (protocol v3)&lt;/span&gt;&amp;#x000A;&lt;span id="LC91" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC92" class="line" lang="plaintext"&gt;Kirill Primak (34):&lt;/span&gt;&amp;#x000A;&lt;span id="LC93" class="line" lang="plaintext"&gt; surface: don't cache frame callback lists&lt;/span&gt;&amp;#x000A;&lt;span id="LC94" class="line" lang="plaintext"&gt; util: add wlr_addon&lt;/span&gt;&amp;#x000A;&lt;span id="LC95" class="line" lang="plaintext"&gt; wlr_outputs: add wlr_addon_set&lt;/span&gt;&amp;#x000A;&lt;span id="LC96" class="line" lang="plaintext"&gt; wlr_output_layout: use wlr_addons&lt;/span&gt;&amp;#x000A;&lt;span id="LC97" class="line" lang="plaintext"&gt; util/addon: find both by owner and impl&lt;/span&gt;&amp;#x000A;&lt;span id="LC98" class="line" lang="plaintext"&gt; surface: fix place_below handling&lt;/span&gt;&amp;#x000A;&lt;span id="LC99" class="line" lang="plaintext"&gt; util/box: introduce wlr_fbox_transform()&lt;/span&gt;&amp;#x000A;&lt;span id="LC100" class="line" lang="plaintext"&gt; surface: fix wlr_surface_get_buffer_source_box()&lt;/span&gt;&amp;#x000A;&lt;span id="LC101" class="line" lang="plaintext"&gt; subsurface: unlock surface on destroy&lt;/span&gt;&amp;#x000A;&lt;span id="LC102" class="line" lang="plaintext"&gt; surface: cache frame callback lists again&lt;/span&gt;&amp;#x000A;&lt;span id="LC103" class="line" lang="plaintext"&gt; surface: move subsurface lists to state&lt;/span&gt;&amp;#x000A;&lt;span id="LC104" class="line" lang="plaintext"&gt; surface: rename impl and its functions&lt;/span&gt;&amp;#x000A;&lt;span id="LC105" class="line" lang="plaintext"&gt; surface: change surface_finalize_state() to surface_finalize_pending()&lt;/span&gt;&amp;#x000A;&lt;span id="LC106" class="line" lang="plaintext"&gt; surface: inline surface_commit_pending()&lt;/span&gt;&amp;#x000A;&lt;span id="LC107" class="line" lang="plaintext"&gt; xdg popup: move function to a file it belongs to&lt;/span&gt;&amp;#x000A;&lt;span id="LC108" class="line" lang="plaintext"&gt; xdg-toplevel: refactor configure/state flow&lt;/span&gt;&amp;#x000A;&lt;span id="LC109" class="line" lang="plaintext"&gt; xdg-surface: simplify configure mechanism&lt;/span&gt;&amp;#x000A;&lt;span id="LC110" class="line" lang="plaintext"&gt; xdg surface: check adding configure_idle for NULL&lt;/span&gt;&amp;#x000A;&lt;span id="LC111" class="line" lang="plaintext"&gt; layer-shell: refactor configure/state flow&lt;/span&gt;&amp;#x000A;&lt;span id="LC112" class="line" lang="plaintext"&gt; layer-shell: add `committed` bitmask&lt;/span&gt;&amp;#x000A;&lt;span id="LC113" class="line" lang="plaintext"&gt; xdg-surface: add pending state&lt;/span&gt;&amp;#x000A;&lt;span id="LC114" class="line" lang="plaintext"&gt; xdg-shell: remove redundant NULL buffer check&lt;/span&gt;&amp;#x000A;&lt;span id="LC115" class="line" lang="plaintext"&gt; layer-shell: move NULL buffer check to role precommit handler&lt;/span&gt;&amp;#x000A;&lt;span id="LC116" class="line" lang="plaintext"&gt; xdg-decoration: refactor configure/state flow&lt;/span&gt;&amp;#x000A;&lt;span id="LC117" class="line" lang="plaintext"&gt; output: disallow NULL event for wlr_output_send_present()&lt;/span&gt;&amp;#x000A;&lt;span id="LC118" class="line" lang="plaintext"&gt; output: add presented flag to presentation event&lt;/span&gt;&amp;#x000A;&lt;span id="LC119" class="line" lang="plaintext"&gt; presentation-time: don't send presented on discard&lt;/span&gt;&amp;#x000A;&lt;span id="LC120" class="line" lang="plaintext"&gt; presentation-time: use a surface addon&lt;/span&gt;&amp;#x000A;&lt;span id="LC121" class="line" lang="plaintext"&gt; CONTRIBUTING.md: add CoC section&lt;/span&gt;&amp;#x000A;&lt;span id="LC122" class="line" lang="plaintext"&gt; surface: fix damage transformation&lt;/span&gt;&amp;#x000A;&lt;span id="LC123" class="line" lang="plaintext"&gt; subsurface: simplify and fix parent commit handling&lt;/span&gt;&amp;#x000A;&lt;span id="LC124" class="line" lang="plaintext"&gt; subsurface: apply position change at the right moment&lt;/span&gt;&amp;#x000A;&lt;span id="LC125" class="line" lang="plaintext"&gt; surface: fix non-buffer damage handling&lt;/span&gt;&amp;#x000A;&lt;span id="LC126" class="line" lang="plaintext"&gt; subsurface: don't add to parent list immediately&lt;/span&gt;&amp;#x000A;&lt;span id="LC127" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC128" class="line" lang="plaintext"&gt;Manuel Stoeckl (7):&lt;/span&gt;&amp;#x000A;&lt;span id="LC129" class="line" lang="plaintext"&gt; render/pixel-format: add a few 10-bit and FP16 formats&lt;/span&gt;&amp;#x000A;&lt;span id="LC130" class="line" lang="plaintext"&gt; render/gles2: hide shm formats without GL support&lt;/span&gt;&amp;#x000A;&lt;span id="LC131" class="line" lang="plaintext"&gt; render/gles2: add a few 10-bit and FP16 formats&lt;/span&gt;&amp;#x000A;&lt;span id="LC132" class="line" lang="plaintext"&gt; output: lift up output format fallback logic&lt;/span&gt;&amp;#x000A;&lt;span id="LC133" class="line" lang="plaintext"&gt; output: use XRGB8888 format instead of ARGB8888&lt;/span&gt;&amp;#x000A;&lt;span id="LC134" class="line" lang="plaintext"&gt; output: Add function to set preferred render format&lt;/span&gt;&amp;#x000A;&lt;span id="LC135" class="line" lang="plaintext"&gt; output: remove XRGB8888 cursor fallback format&lt;/span&gt;&amp;#x000A;&lt;span id="LC136" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC137" class="line" lang="plaintext"&gt;MarkusVolk (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC138" class="line" lang="plaintext"&gt; backend.c: do not try to explicitly clean up the libinput backend&lt;/span&gt;&amp;#x000A;&lt;span id="LC139" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC140" class="line" lang="plaintext"&gt;Michele Sorcinelli (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC141" class="line" lang="plaintext"&gt; xwayland: do not free cursor in handle_server_ready()&lt;/span&gt;&amp;#x000A;&lt;span id="LC142" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC143" class="line" lang="plaintext"&gt;Moon Sungjoon (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC144" class="line" lang="plaintext"&gt; backend/wayland: improve wayland input device name&lt;/span&gt;&amp;#x000A;&lt;span id="LC145" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC146" class="line" lang="plaintext"&gt;Quantum (3):&lt;/span&gt;&amp;#x000A;&lt;span id="LC147" class="line" lang="plaintext"&gt; viewporter: remove crop and scale state upon destruction&lt;/span&gt;&amp;#x000A;&lt;span id="LC148" class="line" lang="plaintext"&gt; scene: fix compile error in release builds&lt;/span&gt;&amp;#x000A;&lt;span id="LC149" class="line" lang="plaintext"&gt; Fix uninitialized variable errors in release mode&lt;/span&gt;&amp;#x000A;&lt;span id="LC150" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC151" class="line" lang="plaintext"&gt;Raphael Robatsch (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC152" class="line" lang="plaintext"&gt; util/token: don't leak /dev/urandom fd to children&lt;/span&gt;&amp;#x000A;&lt;span id="LC153" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC154" class="line" lang="plaintext"&gt;Roman Gilg (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC155" class="line" lang="plaintext"&gt; backend/headless: unlink input device on destroy&lt;/span&gt;&amp;#x000A;&lt;span id="LC156" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC157" class="line" lang="plaintext"&gt;Ronan Pigott (3):&lt;/span&gt;&amp;#x000A;&lt;span id="LC158" class="line" lang="plaintext"&gt; xdg-activation-v1: enable compositors to request their own tokens&lt;/span&gt;&amp;#x000A;&lt;span id="LC159" class="line" lang="plaintext"&gt; xdg-activation-v1: add data field and emit token destroy events&lt;/span&gt;&amp;#x000A;&lt;span id="LC160" class="line" lang="plaintext"&gt; backend/wayland: use xdga client activation&lt;/span&gt;&amp;#x000A;&lt;span id="LC161" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC162" class="line" lang="plaintext"&gt;Rouven Czerwinski (6):&lt;/span&gt;&amp;#x000A;&lt;span id="LC163" class="line" lang="plaintext"&gt; backend/drm: return true on test if no crtc&lt;/span&gt;&amp;#x000A;&lt;span id="LC164" class="line" lang="plaintext"&gt; output: check output enabled before sending frame&lt;/span&gt;&amp;#x000A;&lt;span id="LC165" class="line" lang="plaintext"&gt; Revert "backend/drm: Check if output is enabled before sending frame event"&lt;/span&gt;&amp;#x000A;&lt;span id="LC166" class="line" lang="plaintext"&gt; backend/drm: try to allocate crtc for formats&lt;/span&gt;&amp;#x000A;&lt;span id="LC167" class="line" lang="plaintext"&gt; linux-dmabuf-v1: filter out LINEAR if implicit&lt;/span&gt;&amp;#x000A;&lt;span id="LC168" class="line" lang="plaintext"&gt; linux-dmabuf-v1: fix implicit check&lt;/span&gt;&amp;#x000A;&lt;span id="LC169" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC170" class="line" lang="plaintext"&gt;Simon Ser (288):&lt;/span&gt;&amp;#x000A;&lt;span id="LC171" class="line" lang="plaintext"&gt; build: bump version to 0.15.0&lt;/span&gt;&amp;#x000A;&lt;span id="LC172" class="line" lang="plaintext"&gt; backend/drm: rename page_flip_handler to handle_page_flip&lt;/span&gt;&amp;#x000A;&lt;span id="LC173" class="line" lang="plaintext"&gt; render/egl: remove stale wlr_egl_export_image_to_dmabuf decl&lt;/span&gt;&amp;#x000A;&lt;span id="LC174" class="line" lang="plaintext"&gt; render/egl: make most functions private&lt;/span&gt;&amp;#x000A;&lt;span id="LC175" class="line" lang="plaintext"&gt; xwayland: improve startup log message&lt;/span&gt;&amp;#x000A;&lt;span id="LC176" class="line" lang="plaintext"&gt; build: use meson.global_build_root()&lt;/span&gt;&amp;#x000A;&lt;span id="LC177" class="line" lang="plaintext"&gt; ci: remove -Dlibseat from Alpine build&lt;/span&gt;&amp;#x000A;&lt;span id="LC178" class="line" lang="plaintext"&gt; ci: make Meson warnings fatal&lt;/span&gt;&amp;#x000A;&lt;span id="LC179" class="line" lang="plaintext"&gt; Drop WLR_VERSION_API_*&lt;/span&gt;&amp;#x000A;&lt;span id="LC180" class="line" lang="plaintext"&gt; surface: remove SURFACE_VERSION&lt;/span&gt;&amp;#x000A;&lt;span id="LC181" class="line" lang="plaintext"&gt; surface: make wlr_subsurface_create private&lt;/span&gt;&amp;#x000A;&lt;span id="LC182" class="line" lang="plaintext"&gt; pointer: document event data types&lt;/span&gt;&amp;#x000A;&lt;span id="LC183" class="line" lang="plaintext"&gt; touch: document event data types&lt;/span&gt;&amp;#x000A;&lt;span id="LC184" class="line" lang="plaintext"&gt; surface: accept commits with buffer size not divisible by scale&lt;/span&gt;&amp;#x000A;&lt;span id="LC185" class="line" lang="plaintext"&gt; render/egl: replace wlr_egl_create with wlr_egl_create_with_drm_fd&lt;/span&gt;&amp;#x000A;&lt;span id="LC186" class="line" lang="plaintext"&gt; Remove unused wlr_list.h includes&lt;/span&gt;&amp;#x000A;&lt;span id="LC187" class="line" lang="plaintext"&gt; util/array: add array_remove_at&lt;/span&gt;&amp;#x000A;&lt;span id="LC188" class="line" lang="plaintext"&gt; backend/libinput: stop using wlr_list internally&lt;/span&gt;&amp;#x000A;&lt;span id="LC189" class="line" lang="plaintext"&gt; tablet: stop using wlr_list&lt;/span&gt;&amp;#x000A;&lt;span id="LC190" class="line" lang="plaintext"&gt; Drop wlr_list&lt;/span&gt;&amp;#x000A;&lt;span id="LC191" class="line" lang="plaintext"&gt; tablet-v2: fix pad and tool object versions&lt;/span&gt;&amp;#x000A;&lt;span id="LC192" class="line" lang="plaintext"&gt; buffer: introduce wlr_readonly_data_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC193" class="line" lang="plaintext"&gt; render: use wlr_readonly_data_buffer in wlr_texture_from_pixels&lt;/span&gt;&amp;#x000A;&lt;span id="LC194" class="line" lang="plaintext"&gt; render: drop wlr_renderer_impl.texture_from_pixels&lt;/span&gt;&amp;#x000A;&lt;span id="LC195" class="line" lang="plaintext"&gt; buffer: add wlr_dmabuf_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC196" class="line" lang="plaintext"&gt; render: use wlr_dmabuf_buffer in wlr_texture_from_dmabuf&lt;/span&gt;&amp;#x000A;&lt;span id="LC197" class="line" lang="plaintext"&gt; render: drop wlr_renderer_impl.texture_from_dmabuf&lt;/span&gt;&amp;#x000A;&lt;span id="LC198" class="line" lang="plaintext"&gt; buffer: make enum wlr_buffer_cap public&lt;/span&gt;&amp;#x000A;&lt;span id="LC199" class="line" lang="plaintext"&gt; backend/libinput: use wl_array for wlr_libinput_tablet.tools&lt;/span&gt;&amp;#x000A;&lt;span id="LC200" class="line" lang="plaintext"&gt; surface: allow locking pending state in commit handler&lt;/span&gt;&amp;#x000A;&lt;span id="LC201" class="line" lang="plaintext"&gt; Remove reference to the announce mailing list&lt;/span&gt;&amp;#x000A;&lt;span id="LC202" class="line" lang="plaintext"&gt; region: stabilize interface&lt;/span&gt;&amp;#x000A;&lt;span id="LC203" class="line" lang="plaintext"&gt; region: drop leftover reference to the mailing list&lt;/span&gt;&amp;#x000A;&lt;span id="LC204" class="line" lang="plaintext"&gt; Revert "backend/drm: populate cursor plane's current_fb"&lt;/span&gt;&amp;#x000A;&lt;span id="LC205" class="line" lang="plaintext"&gt; backend/drm: don't clear pending cursor FB on failed commit&lt;/span&gt;&amp;#x000A;&lt;span id="LC206" class="line" lang="plaintext"&gt; xcursor: improve documentation&lt;/span&gt;&amp;#x000A;&lt;span id="LC207" class="line" lang="plaintext"&gt; Add a stub wl_drm implementation&lt;/span&gt;&amp;#x000A;&lt;span id="LC208" class="line" lang="plaintext"&gt; drm: add support for DMA-BUFs&lt;/span&gt;&amp;#x000A;&lt;span id="LC209" class="line" lang="plaintext"&gt; buffer: handle wl_drm buffers&lt;/span&gt;&amp;#x000A;&lt;span id="LC210" class="line" lang="plaintext"&gt; render/gles2: use wlr_drm for wl_drm implementation&lt;/span&gt;&amp;#x000A;&lt;span id="LC211" class="line" lang="plaintext"&gt; render: remove wl_drm support from wlr_renderer&lt;/span&gt;&amp;#x000A;&lt;span id="LC212" class="line" lang="plaintext"&gt; render/egl: remove EGL_WL_bind_wayland_display support&lt;/span&gt;&amp;#x000A;&lt;span id="LC213" class="line" lang="plaintext"&gt; buffer: remove renderer param from wlr_resource_get_buffer_size&lt;/span&gt;&amp;#x000A;&lt;span id="LC214" class="line" lang="plaintext"&gt; buffer: stop sending wl_buffer.release events from wlr_client_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC215" class="line" lang="plaintext"&gt; buffer: unify texture creation in wlr_client_buffer_import&lt;/span&gt;&amp;#x000A;&lt;span id="LC216" class="line" lang="plaintext"&gt; output: detach buffer from renderer before commit&lt;/span&gt;&amp;#x000A;&lt;span id="LC217" class="line" lang="plaintext"&gt; output-damage: fix output swapchain handling&lt;/span&gt;&amp;#x000A;&lt;span id="LC218" class="line" lang="plaintext"&gt; touch: add frame event&lt;/span&gt;&amp;#x000A;&lt;span id="LC219" class="line" lang="plaintext"&gt; backend/libinput: send touch frame events&lt;/span&gt;&amp;#x000A;&lt;span id="LC220" class="line" lang="plaintext"&gt; backend/wayland: send touch frame events&lt;/span&gt;&amp;#x000A;&lt;span id="LC221" class="line" lang="plaintext"&gt; backend/x11: send touch frame events&lt;/span&gt;&amp;#x000A;&lt;span id="LC222" class="line" lang="plaintext"&gt; cursor: add touch frame event&lt;/span&gt;&amp;#x000A;&lt;span id="LC223" class="line" lang="plaintext"&gt; seat: add wlr_seat_touch_{send,notify}_frame&lt;/span&gt;&amp;#x000A;&lt;span id="LC224" class="line" lang="plaintext"&gt; Fix invalid uses of wl_array_for_each&lt;/span&gt;&amp;#x000A;&lt;span id="LC225" class="line" lang="plaintext"&gt; backend/drm: force linear layout for multi-GPU buffers&lt;/span&gt;&amp;#x000A;&lt;span id="LC226" class="line" lang="plaintext"&gt; backend/drm: stop using drm_surface_make_current in drm_surface_blit&lt;/span&gt;&amp;#x000A;&lt;span id="LC227" class="line" lang="plaintext"&gt; backend/drm: add test_only arg to wlr_drm_interface.crtc_commit&lt;/span&gt;&amp;#x000A;&lt;span id="LC228" class="line" lang="plaintext"&gt; backend/drm: move legacy-specific checks to legacy.c&lt;/span&gt;&amp;#x000A;&lt;span id="LC229" class="line" lang="plaintext"&gt; backend/drm: remove backend arg from wlr_drm_interface.crtc_commit&lt;/span&gt;&amp;#x000A;&lt;span id="LC230" class="line" lang="plaintext"&gt; buffer: rename wlr_client_buffer variables to client_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC231" class="line" lang="plaintext"&gt; buffer: stop using source resource in wlr_client_buffer_apply_damage&lt;/span&gt;&amp;#x000A;&lt;span id="LC232" class="line" lang="plaintext"&gt; buffer: add wlr_client_buffer.source&lt;/span&gt;&amp;#x000A;&lt;span id="LC233" class="line" lang="plaintext"&gt; buffer: stop using resource in client_buffer_get_dmabuf&lt;/span&gt;&amp;#x000A;&lt;span id="LC234" class="line" lang="plaintext"&gt; buffer: drop wlr_client_buffer.resource&lt;/span&gt;&amp;#x000A;&lt;span id="LC235" class="line" lang="plaintext"&gt; render/egl: rename wlr_egl.exts to better match Khronos&lt;/span&gt;&amp;#x000A;&lt;span id="LC236" class="line" lang="plaintext"&gt; render/gles2: rename wlr_egl.exts to better match Khronos&lt;/span&gt;&amp;#x000A;&lt;span id="LC237" class="line" lang="plaintext"&gt; render/gles2: set has_alpha for DMA-BUFs&lt;/span&gt;&amp;#x000A;&lt;span id="LC238" class="line" lang="plaintext"&gt; render/gles2: disable blending opportunistically&lt;/span&gt;&amp;#x000A;&lt;span id="LC239" class="line" lang="plaintext"&gt; buffer: drop resource arg from wlr_client_buffer_create&lt;/span&gt;&amp;#x000A;&lt;span id="LC240" class="line" lang="plaintext"&gt; output: add generic wlr_output_export_dmabuf implementation&lt;/span&gt;&amp;#x000A;&lt;span id="LC241" class="line" lang="plaintext"&gt; backend/headless: remove wlr_output_impl.export_dmabuf&lt;/span&gt;&amp;#x000A;&lt;span id="LC242" class="line" lang="plaintext"&gt; backend/drm: remove wlr_output_impl.export_dmabuf&lt;/span&gt;&amp;#x000A;&lt;span id="LC243" class="line" lang="plaintext"&gt; output: remove wlr_output_impl.export_dmabuf&lt;/span&gt;&amp;#x000A;&lt;span id="LC244" class="line" lang="plaintext"&gt; backend/wayland: properly cleanup wlr_wl_pointer&lt;/span&gt;&amp;#x000A;&lt;span id="LC245" class="line" lang="plaintext"&gt; backend/drm: fix NULL data in handle_drm_event&lt;/span&gt;&amp;#x000A;&lt;span id="LC246" class="line" lang="plaintext"&gt; buffer: re-use wlr_shm_client_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC247" class="line" lang="plaintext"&gt; backend/drm: stop restoring CRTCs on exit&lt;/span&gt;&amp;#x000A;&lt;span id="LC248" class="line" lang="plaintext"&gt; backend/drm: add DRM_MODE_CONNECTOR_USB to conn_get_name&lt;/span&gt;&amp;#x000A;&lt;span id="LC249" class="line" lang="plaintext"&gt; render: drop wlr_renderer_impl.init_wl_display&lt;/span&gt;&amp;#x000A;&lt;span id="LC250" class="line" lang="plaintext"&gt; render/egl: set EGL_IMAGE_PRESERVED_KHR&lt;/span&gt;&amp;#x000A;&lt;span id="LC251" class="line" lang="plaintext"&gt; render/egl: add support for EGL_EXT_device_drm_render_node&lt;/span&gt;&amp;#x000A;&lt;span id="LC252" class="line" lang="plaintext"&gt; xwayland: simplify argv filling logic&lt;/span&gt;&amp;#x000A;&lt;span id="LC253" class="line" lang="plaintext"&gt; xwayland: embed wlr_xwayland_server_options in server struct&lt;/span&gt;&amp;#x000A;&lt;span id="LC254" class="line" lang="plaintext"&gt; output: fallback to XRGB in output_pick_format&lt;/span&gt;&amp;#x000A;&lt;span id="LC255" class="line" lang="plaintext"&gt; backend/drm: implement get_primary_formats&lt;/span&gt;&amp;#x000A;&lt;span id="LC256" class="line" lang="plaintext"&gt; output: use pending resolution when allocating swapchain&lt;/span&gt;&amp;#x000A;&lt;span id="LC257" class="line" lang="plaintext"&gt; output: allocate and attach empty buffer on modeset&lt;/span&gt;&amp;#x000A;&lt;span id="LC258" class="line" lang="plaintext"&gt; output: fallback to modifier-less allocation on modeset test failure&lt;/span&gt;&amp;#x000A;&lt;span id="LC259" class="line" lang="plaintext"&gt; backend/drm: allow legacy scan-out if FB props match&lt;/span&gt;&amp;#x000A;&lt;span id="LC260" class="line" lang="plaintext"&gt; backend/drm: remove primary swapchain&lt;/span&gt;&amp;#x000A;&lt;span id="LC261" class="line" lang="plaintext"&gt; backend/drm: remove SCANOUT check in drm_connector_test&lt;/span&gt;&amp;#x000A;&lt;span id="LC262" class="line" lang="plaintext"&gt; backend/drm: drop drm_surface_{make,unset}_current&lt;/span&gt;&amp;#x000A;&lt;span id="LC263" class="line" lang="plaintext"&gt; backend/drm: drop get_renderer implementation&lt;/span&gt;&amp;#x000A;&lt;span id="LC264" class="line" lang="plaintext"&gt; backend/drm: stop initializing renderer for parent backend&lt;/span&gt;&amp;#x000A;&lt;span id="LC265" class="line" lang="plaintext"&gt; backend/drm: fix wrong type for get_cursor_format return values&lt;/span&gt;&amp;#x000A;&lt;span id="LC266" class="line" lang="plaintext"&gt; backend/noop: drop attach_render/rollback_render&lt;/span&gt;&amp;#x000A;&lt;span id="LC267" class="line" lang="plaintext"&gt; output: drop wlr_output_impl.{attach,rollback}_render&lt;/span&gt;&amp;#x000A;&lt;span id="LC268" class="line" lang="plaintext"&gt; output-damage: stop using enum wlr_output_state_buffer_type&lt;/span&gt;&amp;#x000A;&lt;span id="LC269" class="line" lang="plaintext"&gt; output: drop wlr_output_state.buffer_type&lt;/span&gt;&amp;#x000A;&lt;span id="LC270" class="line" lang="plaintext"&gt; render/pixel-format: add some 24 and 16-bit formats&lt;/span&gt;&amp;#x000A;&lt;span id="LC271" class="line" lang="plaintext"&gt; render/gles2: add support for some 24 and 16-bit formats&lt;/span&gt;&amp;#x000A;&lt;span id="LC272" class="line" lang="plaintext"&gt; backend/drm: preserve mode order from kernel&lt;/span&gt;&amp;#x000A;&lt;span id="LC273" class="line" lang="plaintext"&gt; render/pixel_format: add more formats for Pixman&lt;/span&gt;&amp;#x000A;&lt;span id="LC274" class="line" lang="plaintext"&gt; render/pixman/pixel_format: add more formats&lt;/span&gt;&amp;#x000A;&lt;span id="LC275" class="line" lang="plaintext"&gt; output: try skipping buffer allocation if the backend allows it&lt;/span&gt;&amp;#x000A;&lt;span id="LC276" class="line" lang="plaintext"&gt; backend/drm: require buffer on modeset in drm_connector_test&lt;/span&gt;&amp;#x000A;&lt;span id="LC277" class="line" lang="plaintext"&gt; examples/fullscreen-shell: remove unused render_data.view field&lt;/span&gt;&amp;#x000A;&lt;span id="LC278" class="line" lang="plaintext"&gt; build: remove "." from include dirs&lt;/span&gt;&amp;#x000A;&lt;span id="LC279" class="line" lang="plaintext"&gt; seat: allow compositors to not load a keymap&lt;/span&gt;&amp;#x000A;&lt;span id="LC280" class="line" lang="plaintext"&gt; ci: add smoke test&lt;/span&gt;&amp;#x000A;&lt;span id="LC281" class="line" lang="plaintext"&gt; backend/drm: add proper error handling to wlr_drm_backend_create&lt;/span&gt;&amp;#x000A;&lt;span id="LC282" class="line" lang="plaintext"&gt; backend/drm: always perform a test commit in drm_connector_test&lt;/span&gt;&amp;#x000A;&lt;span id="LC283" class="line" lang="plaintext"&gt; surface: kill wlr_surface.previous&lt;/span&gt;&amp;#x000A;&lt;span id="LC284" class="line" lang="plaintext"&gt; surface: drop surface_state_copy&lt;/span&gt;&amp;#x000A;&lt;span id="LC285" class="line" lang="plaintext"&gt; buffer: add addon set&lt;/span&gt;&amp;#x000A;&lt;span id="LC286" class="line" lang="plaintext"&gt; render/gles2: make wlr_gles2_buffer an addon&lt;/span&gt;&amp;#x000A;&lt;span id="LC287" class="line" lang="plaintext"&gt; render/gles2: make wlr_gles2_texture a wlr_buffer addon&lt;/span&gt;&amp;#x000A;&lt;span id="LC288" class="line" lang="plaintext"&gt; backend/drm: use addon for wlr_drm_fb&lt;/span&gt;&amp;#x000A;&lt;span id="LC289" class="line" lang="plaintext"&gt; backend/drm: add support for FB_DAMAGE_CLIPS&lt;/span&gt;&amp;#x000A;&lt;span id="LC290" class="line" lang="plaintext"&gt; backend: unify startup messages&lt;/span&gt;&amp;#x000A;&lt;span id="LC291" class="line" lang="plaintext"&gt; backend/drm: generate CVT reduced modes&lt;/span&gt;&amp;#x000A;&lt;span id="LC292" class="line" lang="plaintext"&gt; backend/{drm,libinput}: exclude headers when disabled&lt;/span&gt;&amp;#x000A;&lt;span id="LC293" class="line" lang="plaintext"&gt; Move allocator stuff into new directory&lt;/span&gt;&amp;#x000A;&lt;span id="LC294" class="line" lang="plaintext"&gt; render/egl: reopen DRM node for GBM&lt;/span&gt;&amp;#x000A;&lt;span id="LC295" class="line" lang="plaintext"&gt; backend/drm: introduce wlr_drm_bo_handle_table&lt;/span&gt;&amp;#x000A;&lt;span id="LC296" class="line" lang="plaintext"&gt; Introduce new scene-graph API&lt;/span&gt;&amp;#x000A;&lt;span id="LC297" class="line" lang="plaintext"&gt; examples/scene-graph: new example&lt;/span&gt;&amp;#x000A;&lt;span id="LC298" class="line" lang="plaintext"&gt; scene: add wlr_scene_node_toggle&lt;/span&gt;&amp;#x000A;&lt;span id="LC299" class="line" lang="plaintext"&gt; scene: allow nodes to have arbitrary parents&lt;/span&gt;&amp;#x000A;&lt;span id="LC300" class="line" lang="plaintext"&gt; scene: add user data pointer to wlr_scene_node&lt;/span&gt;&amp;#x000A;&lt;span id="LC301" class="line" lang="plaintext"&gt; scene: add wlr_scene_node_surface_at&lt;/span&gt;&amp;#x000A;&lt;span id="LC302" class="line" lang="plaintext"&gt; contributing: add new section about commit log&lt;/span&gt;&amp;#x000A;&lt;span id="LC303" class="line" lang="plaintext"&gt; contributing: use references for links&lt;/span&gt;&amp;#x000A;&lt;span id="LC304" class="line" lang="plaintext"&gt; contributing: clone wlroots fork with SSH&lt;/span&gt;&amp;#x000A;&lt;span id="LC305" class="line" lang="plaintext"&gt; contributing: turn remaining links into refs&lt;/span&gt;&amp;#x000A;&lt;span id="LC306" class="line" lang="plaintext"&gt; Link to gamja for web chat&lt;/span&gt;&amp;#x000A;&lt;span id="LC307" class="line" lang="plaintext"&gt; render/allocator: re-open GBM FD&lt;/span&gt;&amp;#x000A;&lt;span id="LC308" class="line" lang="plaintext"&gt; render/allocator/gbm: fix create() docs for FD ownership&lt;/span&gt;&amp;#x000A;&lt;span id="LC309" class="line" lang="plaintext"&gt; build: add subproject fallback for wayland&lt;/span&gt;&amp;#x000A;&lt;span id="LC310" class="line" lang="plaintext"&gt; build: add subproject fallback for wayland-protocols&lt;/span&gt;&amp;#x000A;&lt;span id="LC311" class="line" lang="plaintext"&gt; contributing: don't reference issues in commit first line&lt;/span&gt;&amp;#x000A;&lt;span id="LC312" class="line" lang="plaintext"&gt; render/allocator: use legacy authentication for primary nodes&lt;/span&gt;&amp;#x000A;&lt;span id="LC313" class="line" lang="plaintext"&gt; backend/drm: handle drm_surface_blit errors&lt;/span&gt;&amp;#x000A;&lt;span id="LC314" class="line" lang="plaintext"&gt; render/allocator/gbm: add log message for gbm_bo_get_fd_for_plane&lt;/span&gt;&amp;#x000A;&lt;span id="LC315" class="line" lang="plaintext"&gt; util/shm: add allocate_shm_file_pair&lt;/span&gt;&amp;#x000A;&lt;span id="LC316" class="line" lang="plaintext"&gt; keyboard: add wlr_keyboard.keymap_fd&lt;/span&gt;&amp;#x000A;&lt;span id="LC317" class="line" lang="plaintext"&gt; seat: avoid copying the keymap for each client&lt;/span&gt;&amp;#x000A;&lt;span id="LC318" class="line" lang="plaintext"&gt; subsurface: rename wlr_subsurface_state to wlr_subsurface_parent_state&lt;/span&gt;&amp;#x000A;&lt;span id="LC319" class="line" lang="plaintext"&gt; subsurface: move parent link to state&lt;/span&gt;&amp;#x000A;&lt;span id="LC320" class="line" lang="plaintext"&gt; buffer: take a wlr_buffer in wlr_client_buffer_apply_damage&lt;/span&gt;&amp;#x000A;&lt;span id="LC321" class="line" lang="plaintext"&gt; buffer: make wlr_client_buffer_apply_damage return a bool&lt;/span&gt;&amp;#x000A;&lt;span id="LC322" class="line" lang="plaintext"&gt; viewporter: add doc comment explaining compositor requirements&lt;/span&gt;&amp;#x000A;&lt;span id="LC323" class="line" lang="plaintext"&gt; viewporter: hide wlr_viewport&lt;/span&gt;&amp;#x000A;&lt;span id="LC324" class="line" lang="plaintext"&gt; surface: ensure buffer is reset to NULL in surface_state_move&lt;/span&gt;&amp;#x000A;&lt;span id="LC325" class="line" lang="plaintext"&gt; surface: drop wlr_surface_state.buffer_resource&lt;/span&gt;&amp;#x000A;&lt;span id="LC326" class="line" lang="plaintext"&gt; surface: fix abort on NULL buffer attach&lt;/span&gt;&amp;#x000A;&lt;span id="LC327" class="line" lang="plaintext"&gt; backend/drm: rename enum wlr_drm_connector_state to status&lt;/span&gt;&amp;#x000A;&lt;span id="LC328" class="line" lang="plaintext"&gt; backend/drm: introduce wlr_drm_connector_state&lt;/span&gt;&amp;#x000A;&lt;span id="LC329" class="line" lang="plaintext"&gt; backend/drm: fix crash on VT switch&lt;/span&gt;&amp;#x000A;&lt;span id="LC330" class="line" lang="plaintext"&gt; backend/drm: drop unused arg from get_possible_crtcs&lt;/span&gt;&amp;#x000A;&lt;span id="LC331" class="line" lang="plaintext"&gt; backend/drm: drop drm_connector_init_renderer&lt;/span&gt;&amp;#x000A;&lt;span id="LC332" class="line" lang="plaintext"&gt; output-damage: fix damage on modeset&lt;/span&gt;&amp;#x000A;&lt;span id="LC333" class="line" lang="plaintext"&gt; backend/drm: drop attempt_enable_needs_modeset&lt;/span&gt;&amp;#x000A;&lt;span id="LC334" class="line" lang="plaintext"&gt; backend/drm: drop wlr_drm_connector.desired_mode&lt;/span&gt;&amp;#x000A;&lt;span id="LC335" class="line" lang="plaintext"&gt; scene: fix wlr_scene_render_output offset&lt;/span&gt;&amp;#x000A;&lt;span id="LC336" class="line" lang="plaintext"&gt; scene: add scene outputs&lt;/span&gt;&amp;#x000A;&lt;span id="LC337" class="line" lang="plaintext"&gt; scene: add wlr_scene_output_commit&lt;/span&gt;&amp;#x000A;&lt;span id="LC338" class="line" lang="plaintext"&gt; scene: add wlr_scene_node_coords&lt;/span&gt;&amp;#x000A;&lt;span id="LC339" class="line" lang="plaintext"&gt; scene: add damage tracking support&lt;/span&gt;&amp;#x000A;&lt;span id="LC340" class="line" lang="plaintext"&gt; examples/scene-graph: use wlr_scene_output&lt;/span&gt;&amp;#x000A;&lt;span id="LC341" class="line" lang="plaintext"&gt; scene: move source to subdir&lt;/span&gt;&amp;#x000A;&lt;span id="LC342" class="line" lang="plaintext"&gt; scene: add wlr_scene_attach_output_layout&lt;/span&gt;&amp;#x000A;&lt;span id="LC343" class="line" lang="plaintext"&gt; buffer: add data_ptr access flags&lt;/span&gt;&amp;#x000A;&lt;span id="LC344" class="line" lang="plaintext"&gt; ci: switch to seatd-launch&lt;/span&gt;&amp;#x000A;&lt;span id="LC345" class="line" lang="plaintext"&gt; scene: add wlr_scene_tree&lt;/span&gt;&amp;#x000A;&lt;span id="LC346" class="line" lang="plaintext"&gt; surface: add addon set&lt;/span&gt;&amp;#x000A;&lt;span id="LC347" class="line" lang="plaintext"&gt; scene: add wlr_scene_subsurface_tree_create&lt;/span&gt;&amp;#x000A;&lt;span id="LC348" class="line" lang="plaintext"&gt; build: simplify get_variable calls&lt;/span&gt;&amp;#x000A;&lt;span id="LC349" class="line" lang="plaintext"&gt; backend/drm: add support for panel orientation&lt;/span&gt;&amp;#x000A;&lt;span id="LC350" class="line" lang="plaintext"&gt; scene: drop default case in wlr_scene_node_at&lt;/span&gt;&amp;#x000A;&lt;span id="LC351" class="line" lang="plaintext"&gt; scene: unify intersection logic in wlr_scene_node_at&lt;/span&gt;&amp;#x000A;&lt;span id="LC352" class="line" lang="plaintext"&gt; scene: add wlr_scene_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC353" class="line" lang="plaintext"&gt; util/box: introduce wlr_fbox_empty&lt;/span&gt;&amp;#x000A;&lt;span id="LC354" class="line" lang="plaintext"&gt; scene: add wlr_scene_buffer_set_source_box&lt;/span&gt;&amp;#x000A;&lt;span id="LC355" class="line" lang="plaintext"&gt; scene: add scene_node_get_size helper&lt;/span&gt;&amp;#x000A;&lt;span id="LC356" class="line" lang="plaintext"&gt; scene: use scene_node_get_size in wlr_scene_node_at&lt;/span&gt;&amp;#x000A;&lt;span id="LC357" class="line" lang="plaintext"&gt; scene: add wlr_scene_buffer_set_dest_size&lt;/span&gt;&amp;#x000A;&lt;span id="LC358" class="line" lang="plaintext"&gt; scene: add wlr_scene_buffer_set_transform&lt;/span&gt;&amp;#x000A;&lt;span id="LC359" class="line" lang="plaintext"&gt; backend: create renderer and allocator in wlr_backend_autocreate&lt;/span&gt;&amp;#x000A;&lt;span id="LC360" class="line" lang="plaintext"&gt; xdg-shell: introduce wlr_xdg_surface.current&lt;/span&gt;&amp;#x000A;&lt;span id="LC361" class="line" lang="plaintext"&gt; xdg-shell: rename wlr_xdg_surface.next_configure_serial&lt;/span&gt;&amp;#x000A;&lt;span id="LC362" class="line" lang="plaintext"&gt; xdg-shell: stop clearing wlr_xdg_surface state on unmap&lt;/span&gt;&amp;#x000A;&lt;span id="LC363" class="line" lang="plaintext"&gt; render/drm_format_set: add wlr_drm_format_has&lt;/span&gt;&amp;#x000A;&lt;span id="LC364" class="line" lang="plaintext"&gt; Require INVALID for implicit format modifiers&lt;/span&gt;&amp;#x000A;&lt;span id="LC365" class="line" lang="plaintext"&gt; backend/drm: fail on explicit modifier in drmModeAddFB2&lt;/span&gt;&amp;#x000A;&lt;span id="LC366" class="line" lang="plaintext"&gt; render/egl: always add LINEAR to supported modifiers&lt;/span&gt;&amp;#x000A;&lt;span id="LC367" class="line" lang="plaintext"&gt; render/drm_format_set: remove special LINEAR case&lt;/span&gt;&amp;#x000A;&lt;span id="LC368" class="line" lang="plaintext"&gt; Revert "render/drm_format_set: remove special LINEAR case"&lt;/span&gt;&amp;#x000A;&lt;span id="LC369" class="line" lang="plaintext"&gt; Revert "render/egl: always add LINEAR to supported modifiers"&lt;/span&gt;&amp;#x000A;&lt;span id="LC370" class="line" lang="plaintext"&gt; Revert "backend/drm: fail on explicit modifier in drmModeAddFB2"&lt;/span&gt;&amp;#x000A;&lt;span id="LC371" class="line" lang="plaintext"&gt; Revert "Require INVALID for implicit format modifiers"&lt;/span&gt;&amp;#x000A;&lt;span id="LC372" class="line" lang="plaintext"&gt; Revert "render/drm_format_set: add wlr_drm_format_has"&lt;/span&gt;&amp;#x000A;&lt;span id="LC373" class="line" lang="plaintext"&gt; render/allocator: use render node if available in reopen_drm_node&lt;/span&gt;&amp;#x000A;&lt;span id="LC374" class="line" lang="plaintext"&gt; render/allocator: use empty DRM lease to re-open node&lt;/span&gt;&amp;#x000A;&lt;span id="LC375" class="line" lang="plaintext"&gt; scene: remove surface commit listener when node is destroyed&lt;/span&gt;&amp;#x000A;&lt;span id="LC376" class="line" lang="plaintext"&gt; render/vulkan: check vulkan-headers dependency&lt;/span&gt;&amp;#x000A;&lt;span id="LC377" class="line" lang="plaintext"&gt; presentation-time: remove unused field&lt;/span&gt;&amp;#x000A;&lt;span id="LC378" class="line" lang="plaintext"&gt; scene: add wlr_scene_output_for_each_surface&lt;/span&gt;&amp;#x000A;&lt;span id="LC379" class="line" lang="plaintext"&gt; scene: add support for direct scan-out&lt;/span&gt;&amp;#x000A;&lt;span id="LC380" class="line" lang="plaintext"&gt; output: split into multiple files&lt;/span&gt;&amp;#x000A;&lt;span id="LC381" class="line" lang="plaintext"&gt; xdg-foreign-v2: use error enum&lt;/span&gt;&amp;#x000A;&lt;span id="LC382" class="line" lang="plaintext"&gt; output: refuse to enable with zero mode&lt;/span&gt;&amp;#x000A;&lt;span id="LC383" class="line" lang="plaintext"&gt; readme: refresh dependencies&lt;/span&gt;&amp;#x000A;&lt;span id="LC384" class="line" lang="plaintext"&gt; backend/drm: add entry for Valve EDID vendor&lt;/span&gt;&amp;#x000A;&lt;span id="LC385" class="line" lang="plaintext"&gt; backend/x11: fix code style in get_touchpoint_from_x11_touch_id&lt;/span&gt;&amp;#x000A;&lt;span id="LC386" class="line" lang="plaintext"&gt; scene: inline subsurface_tree_destroy&lt;/span&gt;&amp;#x000A;&lt;span id="LC387" class="line" lang="plaintext"&gt; sceeencopy-v1: listen to output destroy in capture_output&lt;/span&gt;&amp;#x000A;&lt;span id="LC388" class="line" lang="plaintext"&gt; backend/drm: get rid of BO handle table&lt;/span&gt;&amp;#x000A;&lt;span id="LC389" class="line" lang="plaintext"&gt; output: fix stack variable lifetime in wlr_output_send_present&lt;/span&gt;&amp;#x000A;&lt;span id="LC390" class="line" lang="plaintext"&gt; backend/drm: avoid creating empty FB_DAMAGE_CLIPS prop&lt;/span&gt;&amp;#x000A;&lt;span id="LC391" class="line" lang="plaintext"&gt; ci: add .gitlab-ci.yml&lt;/span&gt;&amp;#x000A;&lt;span id="LC392" class="line" lang="plaintext"&gt; s/GitHub/GitLab/&lt;/span&gt;&amp;#x000A;&lt;span id="LC393" class="line" lang="plaintext"&gt; xwayland: add support for -noTouchPointerEmulation&lt;/span&gt;&amp;#x000A;&lt;span id="LC394" class="line" lang="plaintext"&gt; backend/session: introduce wlr_device_change_event&lt;/span&gt;&amp;#x000A;&lt;span id="LC395" class="line" lang="plaintext"&gt; backend/drm: handle per-connector hotplug events&lt;/span&gt;&amp;#x000A;&lt;span id="LC396" class="line" lang="plaintext"&gt; scene: fix calloc size mismatch&lt;/span&gt;&amp;#x000A;&lt;span id="LC397" class="line" lang="plaintext"&gt; export-dmabuf-v1: stop using wlr_output_export_dmabuf&lt;/span&gt;&amp;#x000A;&lt;span id="LC398" class="line" lang="plaintext"&gt; screencopy-v1: stop using wlr_output_export_dmabuf&lt;/span&gt;&amp;#x000A;&lt;span id="LC399" class="line" lang="plaintext"&gt; output: drop wlr_output_export_dmabuf&lt;/span&gt;&amp;#x000A;&lt;span id="LC400" class="line" lang="plaintext"&gt; linux-dmabuf-v1: properly validate flags&lt;/span&gt;&amp;#x000A;&lt;span id="LC401" class="line" lang="plaintext"&gt; Remove support for DMA-BUF flags&lt;/span&gt;&amp;#x000A;&lt;span id="LC402" class="line" lang="plaintext"&gt; output: add wlr_output_init_render&lt;/span&gt;&amp;#x000A;&lt;span id="LC403" class="line" lang="plaintext"&gt; output: fix renderer buffer cap sanity check in wlr_output_init_render&lt;/span&gt;&amp;#x000A;&lt;span id="LC404" class="line" lang="plaintext"&gt; Introduce WLR_DEVICE_LEASE events&lt;/span&gt;&amp;#x000A;&lt;span id="LC405" class="line" lang="plaintext"&gt; backend/drm: introduce wlr_drm_lease&lt;/span&gt;&amp;#x000A;&lt;span id="LC406" class="line" lang="plaintext"&gt; drm-lease-v1: listen to lease destroy event&lt;/span&gt;&amp;#x000A;&lt;span id="LC407" class="line" lang="plaintext"&gt; backend/drm: scan leases on uevent&lt;/span&gt;&amp;#x000A;&lt;span id="LC408" class="line" lang="plaintext"&gt; linux-dmabuf-v1: hide wlr_linux_buffer_params_v1&lt;/span&gt;&amp;#x000A;&lt;span id="LC409" class="line" lang="plaintext"&gt; backend/wayland: report parent presentation clock&lt;/span&gt;&amp;#x000A;&lt;span id="LC410" class="line" lang="plaintext"&gt; input-device: remove wlr_input_device.link&lt;/span&gt;&amp;#x000A;&lt;span id="LC411" class="line" lang="plaintext"&gt; render/vulkan: quiet glslangValidator&lt;/span&gt;&amp;#x000A;&lt;span id="LC412" class="line" lang="plaintext"&gt; docs/env_vars: drop WLR_DIRECT_TTY&lt;/span&gt;&amp;#x000A;&lt;span id="LC413" class="line" lang="plaintext"&gt; render: pick DRM FD in autocreate&lt;/span&gt;&amp;#x000A;&lt;span id="LC414" class="line" lang="plaintext"&gt; render/allocator: fallback to renderer DRM FD in autocreate&lt;/span&gt;&amp;#x000A;&lt;span id="LC415" class="line" lang="plaintext"&gt; backend/headless: stop picking a DRM FD&lt;/span&gt;&amp;#x000A;&lt;span id="LC416" class="line" lang="plaintext"&gt; render: introduce WLR_RENDER_DRM_DEVICE&lt;/span&gt;&amp;#x000A;&lt;span id="LC417" class="line" lang="plaintext"&gt; backend/headless: drop wlr_headless_backend_create_with_renderer&lt;/span&gt;&amp;#x000A;&lt;span id="LC418" class="line" lang="plaintext"&gt; scene: add wlr_scene_xdg_surface_create&lt;/span&gt;&amp;#x000A;&lt;span id="LC419" class="line" lang="plaintext"&gt; render/drm_format_set: add wlr_drm_format_has&lt;/span&gt;&amp;#x000A;&lt;span id="LC420" class="line" lang="plaintext"&gt; Require INVALID for implicit format modifiers&lt;/span&gt;&amp;#x000A;&lt;span id="LC421" class="line" lang="plaintext"&gt; backend/drm: fail on explicit modifier in drmModeAddFB2&lt;/span&gt;&amp;#x000A;&lt;span id="LC422" class="line" lang="plaintext"&gt; render/egl: always add LINEAR to supported modifiers&lt;/span&gt;&amp;#x000A;&lt;span id="LC423" class="line" lang="plaintext"&gt; render/drm_format_set: remove special LINEAR case&lt;/span&gt;&amp;#x000A;&lt;span id="LC424" class="line" lang="plaintext"&gt; backend/drm: always add LINEAR to supported modifiers&lt;/span&gt;&amp;#x000A;&lt;span id="LC425" class="line" lang="plaintext"&gt; render: add DMA-BUF docs&lt;/span&gt;&amp;#x000A;&lt;span id="LC426" class="line" lang="plaintext"&gt; scene: add support for viewporter&lt;/span&gt;&amp;#x000A;&lt;span id="LC427" class="line" lang="plaintext"&gt; backend/drm: poison buffers which cannot be scanned out&lt;/span&gt;&amp;#x000A;&lt;span id="LC428" class="line" lang="plaintext"&gt; output: destroy swapchain when disabled&lt;/span&gt;&amp;#x000A;&lt;span id="LC429" class="line" lang="plaintext"&gt; output: don't leave dangling cursor_front_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC430" class="line" lang="plaintext"&gt; output: fix typo in wlr_output_impl.get_primary_formats docs&lt;/span&gt;&amp;#x000A;&lt;span id="LC431" class="line" lang="plaintext"&gt; output: add wlr_output_get_primary_formats&lt;/span&gt;&amp;#x000A;&lt;span id="LC432" class="line" lang="plaintext"&gt; scene: add wlr_scene_get_scene_output&lt;/span&gt;&amp;#x000A;&lt;span id="LC433" class="line" lang="plaintext"&gt; render/egl: store IMG_context_priority in wlr_egl&lt;/span&gt;&amp;#x000A;&lt;span id="LC434" class="line" lang="plaintext"&gt; render/egl: add wlr_egl_create_with_context&lt;/span&gt;&amp;#x000A;&lt;span id="LC435" class="line" lang="plaintext"&gt; render/pixman: advertise MOD_INVALID instead of MOD_LINEAR&lt;/span&gt;&amp;#x000A;&lt;span id="LC436" class="line" lang="plaintext"&gt; render/egl: improve modifier support detection&lt;/span&gt;&amp;#x000A;&lt;span id="LC437" class="line" lang="plaintext"&gt; output: fix modifier stripping&lt;/span&gt;&amp;#x000A;&lt;span id="LC438" class="line" lang="plaintext"&gt; readme: update wrapper libraries link&lt;/span&gt;&amp;#x000A;&lt;span id="LC439" class="line" lang="plaintext"&gt; render/drm-format-set: add wlr_drm_format_set_intersect&lt;/span&gt;&amp;#x000A;&lt;span id="LC440" class="line" lang="plaintext"&gt; output: add wlr_output_event_commit.buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC441" class="line" lang="plaintext"&gt; export-dmabuf-v1: use wlr_output_event_commit.buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC442" class="line" lang="plaintext"&gt; screencopy-v1: use wlr_output_event_commit.buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC443" class="line" lang="plaintext"&gt; output: drop front_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC444" class="line" lang="plaintext"&gt; render: add wlr_renderer_init_wl_shm&lt;/span&gt;&amp;#x000A;&lt;span id="LC445" class="line" lang="plaintext"&gt; linux-dmabuf-v1: implement v4&lt;/span&gt;&amp;#x000A;&lt;span id="LC446" class="line" lang="plaintext"&gt; linux-dmabuf-v1: add per-surface feedback&lt;/span&gt;&amp;#x000A;&lt;span id="LC447" class="line" lang="plaintext"&gt; build: move wayland-client dep to backend/wayland/&lt;/span&gt;&amp;#x000A;&lt;span id="LC448" class="line" lang="plaintext"&gt; examples/layer-shell: remove wlroots dependency&lt;/span&gt;&amp;#x000A;&lt;span id="LC449" class="line" lang="plaintext"&gt; examples: remove unnecessary wlroots deps for clients&lt;/span&gt;&amp;#x000A;&lt;span id="LC450" class="line" lang="plaintext"&gt; examples: remove unnecessary partial_dependency() call&lt;/span&gt;&amp;#x000A;&lt;span id="LC451" class="line" lang="plaintext"&gt; output: introduce wlr_output_set_name&lt;/span&gt;&amp;#x000A;&lt;span id="LC452" class="line" lang="plaintext"&gt; Fix incorrect %zd formatting directives&lt;/span&gt;&amp;#x000A;&lt;span id="LC453" class="line" lang="plaintext"&gt; output: add support for protocol interface version 4&lt;/span&gt;&amp;#x000A;&lt;span id="LC454" class="line" lang="plaintext"&gt; util/global: remove wl_display arg from wlr_global_destroy_safe&lt;/span&gt;&amp;#x000A;&lt;span id="LC455" class="line" lang="plaintext"&gt; backend/drm: use drmModeFormatModifierBlobIterNext&lt;/span&gt;&amp;#x000A;&lt;span id="LC456" class="line" lang="plaintext"&gt; backend/drm: use drmCloseBufferHandle&lt;/span&gt;&amp;#x000A;&lt;span id="LC457" class="line" lang="plaintext"&gt; build: add subproject fallback for libdrm&lt;/span&gt;&amp;#x000A;&lt;span id="LC458" class="line" lang="plaintext"&gt; backend/wayland: add basic linux-dmabuf feedback support&lt;/span&gt;&amp;#x000A;&lt;span id="LC459" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC460" class="line" lang="plaintext"&gt;Simon Zeni (36):&lt;/span&gt;&amp;#x000A;&lt;span id="LC461" class="line" lang="plaintext"&gt; types/wlr_box: remove unused wlr_box_from_pixman_box32 and wlr_box_rotated_bounds functions&lt;/span&gt;&amp;#x000A;&lt;span id="LC462" class="line" lang="plaintext"&gt; move wlr_box from /types to /util&lt;/span&gt;&amp;#x000A;&lt;span id="LC463" class="line" lang="plaintext"&gt; util/box: stabilize interface&lt;/span&gt;&amp;#x000A;&lt;span id="LC464" class="line" lang="plaintext"&gt; types/wlr_buffer: split wlr_client_buffer_import function&lt;/span&gt;&amp;#x000A;&lt;span id="LC465" class="line" lang="plaintext"&gt; types/wlr_surface: get buffer size from wlr_buffer_import&lt;/span&gt;&amp;#x000A;&lt;span id="LC466" class="line" lang="plaintext"&gt; types/wlr_buffer: remove wlr_resource_get_buffer_size&lt;/span&gt;&amp;#x000A;&lt;span id="LC467" class="line" lang="plaintext"&gt; types/wlr_buffer: remove wlr_renderer argument from wlr_buffer_from_resource&lt;/span&gt;&amp;#x000A;&lt;span id="LC468" class="line" lang="plaintext"&gt; types/wlr_buffer: introduce wlr_buffer_resource_interface&lt;/span&gt;&amp;#x000A;&lt;span id="LC469" class="line" lang="plaintext"&gt; types/wlr_buffer: create custom wlr_buffer from wl_resource&lt;/span&gt;&amp;#x000A;&lt;span id="LC470" class="line" lang="plaintext"&gt; render/wlr_texture: put wlr_texture_from_buffer into the public API&lt;/span&gt;&amp;#x000A;&lt;span id="LC471" class="line" lang="plaintext"&gt; render/egl: initialize wlr_egl with EGL_PLATFORM_DEVICE_EXT&lt;/span&gt;&amp;#x000A;&lt;span id="LC472" class="line" lang="plaintext"&gt; backend/drm: implement drm lease function&lt;/span&gt;&amp;#x000A;&lt;span id="LC473" class="line" lang="plaintext"&gt; backend/drm: introduce wlr_drm_backend_get_non_master_fd&lt;/span&gt;&amp;#x000A;&lt;span id="LC474" class="line" lang="plaintext"&gt; protocol/meson: bump wayland-protocols requirement to 1.22&lt;/span&gt;&amp;#x000A;&lt;span id="LC475" class="line" lang="plaintext"&gt; types: introduce wlr_drm_lease_v1&lt;/span&gt;&amp;#x000A;&lt;span id="LC476" class="line" lang="plaintext"&gt; types/buffer: make {begin,end}_data_ptr_access part of the public API&lt;/span&gt;&amp;#x000A;&lt;span id="LC477" class="line" lang="plaintext"&gt; backend/multi: implement get_buffer_caps&lt;/span&gt;&amp;#x000A;&lt;span id="LC478" class="line" lang="plaintext"&gt; render/allocator: make wlr_allocator part of the public API&lt;/span&gt;&amp;#x000A;&lt;span id="LC479" class="line" lang="plaintext"&gt; examples: init wlr_output with allocator and renderer&lt;/span&gt;&amp;#x000A;&lt;span id="LC480" class="line" lang="plaintext"&gt; tinywl: autocreate allocator and init output&lt;/span&gt;&amp;#x000A;&lt;span id="LC481" class="line" lang="plaintext"&gt; backend: remove backend ensure renderer and allocator check&lt;/span&gt;&amp;#x000A;&lt;span id="LC482" class="line" lang="plaintext"&gt; backend: remove backend_get_allocator&lt;/span&gt;&amp;#x000A;&lt;span id="LC483" class="line" lang="plaintext"&gt; types/wlr_screencopy_v1: use renderer from output&lt;/span&gt;&amp;#x000A;&lt;span id="LC484" class="line" lang="plaintext"&gt; types/wlr_scene: use renderer from wlr_output&lt;/span&gt;&amp;#x000A;&lt;span id="LC485" class="line" lang="plaintext"&gt; backend/x11: get renderer from wlr_x11_output&lt;/span&gt;&amp;#x000A;&lt;span id="LC486" class="line" lang="plaintext"&gt; backend/headless: don't store the parent renderer&lt;/span&gt;&amp;#x000A;&lt;span id="LC487" class="line" lang="plaintext"&gt; backend/drm: stop initializing backend renderer&lt;/span&gt;&amp;#x000A;&lt;span id="LC488" class="line" lang="plaintext"&gt; backend/multi: remove backend_get_renderer&lt;/span&gt;&amp;#x000A;&lt;span id="LC489" class="line" lang="plaintext"&gt; backend: remove wlr_backend_get_renderer&lt;/span&gt;&amp;#x000A;&lt;span id="LC490" class="line" lang="plaintext"&gt; backend/multi: add asserts in wlr_multi_backend_add&lt;/span&gt;&amp;#x000A;&lt;span id="LC491" class="line" lang="plaintext"&gt; backend: fix attempt_backend_by_name multi backend self insertion&lt;/span&gt;&amp;#x000A;&lt;span id="LC492" class="line" lang="plaintext"&gt; tinywl: init output render before commit&lt;/span&gt;&amp;#x000A;&lt;span id="LC493" class="line" lang="plaintext"&gt; tinywl: build with meson if examples option is enabled&lt;/span&gt;&amp;#x000A;&lt;span id="LC494" class="line" lang="plaintext"&gt; ci/archlinux: enable address and undefined sanitizers&lt;/span&gt;&amp;#x000A;&lt;span id="LC495" class="line" lang="plaintext"&gt; backend: remove noop backend&lt;/span&gt;&amp;#x000A;&lt;span id="LC496" class="line" lang="plaintext"&gt; types/wlr_drm_lease_v1: add NULL check to drm lease resource destroy&lt;/span&gt;&amp;#x000A;&lt;span id="LC497" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC498" class="line" lang="plaintext"&gt;Stacy Harper (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC499" class="line" lang="plaintext"&gt; layer-shell: don't set committed flag if the property didn't change&lt;/span&gt;&amp;#x000A;&lt;span id="LC500" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC501" class="line" lang="plaintext"&gt;Tadeo Kondrak (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC502" class="line" lang="plaintext"&gt; input-method-unstable-v2: Add error for surface with existing role&lt;/span&gt;&amp;#x000A;&lt;span id="LC503" class="line" lang="plaintext"&gt; Implement input_method_v2 popups&lt;/span&gt;&amp;#x000A;&lt;span id="LC504" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC505" class="line" lang="plaintext"&gt;Tudor Brindus (3):&lt;/span&gt;&amp;#x000A;&lt;span id="LC506" class="line" lang="plaintext"&gt; input/pointer: try harder to not send duplicate motion events&lt;/span&gt;&amp;#x000A;&lt;span id="LC507" class="line" lang="plaintext"&gt; input/tablet: fix `wl_array_for_each` usage on tablet proximity&lt;/span&gt;&amp;#x000A;&lt;span id="LC508" class="line" lang="plaintext"&gt; xwm: do not restack surfaces on activation&lt;/span&gt;&amp;#x000A;&lt;span id="LC509" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC510" class="line" lang="plaintext"&gt;Vyivel (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC511" class="line" lang="plaintext"&gt; render/pixman: fix texture_is_opaque()&lt;/span&gt;&amp;#x000A;&lt;span id="LC512" class="line" lang="plaintext"&gt; input/pointer: send axis source once per frame&lt;/span&gt;&amp;#x000A;&lt;span id="LC513" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC514" class="line" lang="plaintext"&gt;ayaka (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC515" class="line" lang="plaintext"&gt; backend: make DRM and libinput backends optional&lt;/span&gt;&amp;#x000A;&lt;span id="LC516" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC517" class="line" lang="plaintext"&gt;buffet (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC518" class="line" lang="plaintext"&gt; Update loc count in readme&lt;/span&gt;&amp;#x000A;&lt;span id="LC519" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC520" class="line" lang="plaintext"&gt;fwsmit (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC521" class="line" lang="plaintext"&gt; examples/foreign-toplevel: fix toplevel not being freed&lt;/span&gt;&amp;#x000A;&lt;span id="LC522" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC523" class="line" lang="plaintext"&gt;muradm (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC524" class="line" lang="plaintext"&gt; backend: wait for session to become active&lt;/span&gt;&amp;#x000A;&lt;span id="LC525" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC526" class="line" lang="plaintext"&gt;nyorain (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC527" class="line" lang="plaintext"&gt; render/vulkan: add Vulkan renderer&lt;/span&gt;&amp;#x000A;&lt;span id="LC528" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC529" class="line" lang="plaintext"&gt;tiosgz (4):&lt;/span&gt;&amp;#x000A;&lt;span id="LC530" class="line" lang="plaintext"&gt; for_each_surface: only iterate mapped surfaces&lt;/span&gt;&amp;#x000A;&lt;span id="LC531" class="line" lang="plaintext"&gt; surface_at: check if surfaces are mapped&lt;/span&gt;&amp;#x000A;&lt;span id="LC532" class="line" lang="plaintext"&gt; scene/subsurface_tree: hide unmapped subsurfaces&lt;/span&gt;&amp;#x000A;&lt;span id="LC533" class="line" lang="plaintext"&gt; Fix wlr_scene_node_lower_to_bottom&lt;/span&gt;&amp;#x000A;&lt;span id="LC534" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC535" class="line" lang="plaintext"&gt;yuiiio (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC536" class="line" lang="plaintext"&gt; render/egl: fix typo&lt;/span&gt;&amp;#x000A;&lt;span id="LC537" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC538" class="line" lang="plaintext"&gt;Érico Nogueira (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC539" class="line" lang="plaintext"&gt; docs: mention WLR_RENDERER=vulkan.&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&amp;#x000A;&lt;copy-code&gt;&lt;/copy-code&gt;&amp;#x000A;&lt;/div&gt;&amp;#x000A;&lt;/details&gt;&amp;#x000A;&lt;h2 data-sourcepos="560:1-560:24" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-changes-for-packagers" class="anchor" href="#changes-for-packagers" aria-hidden="true"&gt;&lt;/a&gt;Changes for packagers&lt;/h2&gt;&amp;#x000A;&lt;ul data-sourcepos="562:1-566:0" dir="auto"&gt;&amp;#x000A;&lt;li data-sourcepos="562:1-562:62"&gt;The project has moved from GitHub to gitlab.freedesktop.org.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="563:1-563:71"&gt;Wayland 1.20.0, wayland-protocols 1.24 and Meson 0.58.1 are required.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="564:1-564:140"&gt;&amp;#x000A;&lt;strong&gt;backend: make DRM and libinput backends optional&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3058" data-original="!3058" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="54170" data-project-path="wlroots/wlroots" data-iid="3058" data-reference-type="merge_request" data-container="body" data-placement="top" title="backend: make DRM and libinput backends optional" class="gfm gfm-merge_request"&gt;!3058&lt;/a&gt;): the &lt;code&gt;x11-backend&lt;/code&gt; build option has been superseded by the &lt;code&gt;backends&lt;/code&gt; option.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="565:1-566:0"&gt;&amp;#x000A;&lt;strong&gt;Implement vulkan renderer&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/2771" data-original="!2771" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="53989" data-project-path="wlroots/wlroots" data-iid="2771" data-reference-type="merge_request" data-container="body" data-placement="top" title="Implement vulkan renderer" class="gfm gfm-merge_request"&gt;!2771&lt;/a&gt;): vulkan-loader, vulkan-headers and glslang are new optional dependencies to build the experimental Vulkan renderer.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;h2 data-sourcepos="567:1-567:35" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-breaking-changes-for-compositors" class="anchor" href="#breaking-changes-for-compositors" aria-hidden="true"&gt;&lt;/a&gt;Breaking changes for compositors&lt;/h2&gt;&amp;#x000A;&lt;p data-sourcepos="569:1-569:42" dir="auto"&gt;These changes can affect most compositors.&lt;/p&gt;&amp;#x000A;&lt;ul data-sourcepos="571:1-604:0" dir="auto"&gt;&amp;#x000A;&lt;li data-sourcepos="571:1-574:108"&gt;&amp;#x000A;&lt;strong&gt;Stabilize &lt;code&gt;wlr_box&lt;/code&gt; API&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3011" data-original="!3011" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="54139" data-project-path="wlroots/wlroots" data-iid="3011" data-reference-type="merge_request" data-container="body" data-placement="top" title="Stabilize wlr_box API" class="gfm gfm-merge_request"&gt;!3011&lt;/a&gt;)&amp;#x000A;&lt;ul data-sourcepos="572:3-574:108"&gt;&amp;#x000A;&lt;li data-sourcepos="572:3-572:79"&gt;&amp;#x000A;&lt;code&gt;wlr_box_from_pixman_box32&lt;/code&gt; and &lt;code&gt;wlr_box_rotated_bounds&lt;/code&gt; have been removed.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="573:3-573:110"&gt;&amp;#x000A;&lt;code&gt;wlr/types/wlr_box.h&lt;/code&gt; has been moved to &lt;code&gt;wlr/util/box.h&lt;/code&gt; (a redirection with a warning is still in place).&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="574:3-574:108"&gt;Unnecessary &lt;code&gt;wlr_box.h&lt;/code&gt; includes have been replaced with forward declarations in public wlroots headers.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="575:1-575:254"&gt;&amp;#x000A;&lt;strong&gt;backend/drm: preserve mode order from kernel&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3078" data-original="!3078" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="54183" data-project-path="wlroots/wlroots" data-iid="3078" data-reference-type="merge_request" data-container="body" data-placement="top" title="backend/drm: preserve mode order from kernel" class="gfm gfm-merge_request"&gt;!3078&lt;/a&gt;): the order of &lt;code&gt;wlr_output.modes&lt;/code&gt; has been reversed for the DRM backend to match the kernel's ordering. Compositors are advised to use &lt;code&gt;wlr_output_preferred_mode&lt;/code&gt; instead of relying on mode order.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="576:1-576:204"&gt;&amp;#x000A;&lt;strong&gt;layer-shell: replace close() with destroy()&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3108" data-original="!3108" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="54213" data-project-path="wlroots/wlroots" data-iid="3108" data-reference-type="merge_request" data-container="body" data-placement="top" title="layer-shell: replace close() with destroy()" class="gfm gfm-merge_request"&gt;!3108&lt;/a&gt;): replace &lt;code&gt;wlr_layer_surface_v1_close&lt;/code&gt; calls with &lt;code&gt;wlr_layer_surface_v1_destroy&lt;/code&gt; and ensure the &lt;code&gt;wlr_layer_surface_v1&lt;/code&gt; isn't used after that call.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="577:1-577:239"&gt;&amp;#x000A;&lt;strong&gt;xwm: do not restack surfaces on activation&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/2915" data-original="!2915" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="54081" data-project-path="wlroots/wlroots" data-iid="2915" data-reference-type="merge_request" data-container="body" data-placement="top" title="xwm: do not restack surfaces on activation" class="gfm gfm-merge_request"&gt;!2915&lt;/a&gt;): &lt;code&gt;wlr_xwayland_surface_activate&lt;/code&gt; no longer brings windows to the front. Compositors now need to explicitly call &lt;code&gt;wlr_xwayland_surface_restack(xsurface, NULL, XCB_STACK_MODE_ABOVE)&lt;/code&gt;.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="578:1-580:136"&gt;&amp;#x000A;&lt;strong&gt;Minor surface refactor&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3169" data-original="!3169" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="54255" data-project-path="wlroots/wlroots" data-iid="3169" data-reference-type="merge_request" data-container="body" data-placement="top" title="Minor surface refactor" class="gfm gfm-merge_request"&gt;!3169&lt;/a&gt;):&amp;#x000A;&lt;ul data-sourcepos="579:4-580:136"&gt;&amp;#x000A;&lt;li data-sourcepos="579:4-579:139"&gt;&amp;#x000A;&lt;code&gt;wlr_subsurface.parent_link&lt;/code&gt; has been replaced with &lt;code&gt;wlr_subsurface.current.link&lt;/code&gt;; same goes for &lt;code&gt;wlr_subsurface.parent_pending_link&lt;/code&gt;.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="580:4-580:136"&gt;&amp;#x000A;&lt;code&gt;wlr_surface.subsurfaces_{above,below}&lt;/code&gt; has been moved to &lt;code&gt;wlr_surface_state&lt;/code&gt;, use &lt;code&gt;wlr_surface.current.subsurfaces_{above,below}&lt;/code&gt;.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="581:1-581:176"&gt;&amp;#x000A;&lt;strong&gt;xdg-toplevel: refactor configure/state flow&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3199" data-original="!3199" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="54271" data-project-path="wlroots/wlroots" data-iid="3199" data-reference-type="merge_request" data-container="body" data-placement="top" title="xdg-toplevel: refactor configure/state flow" class="gfm gfm-merge_request"&gt;!3199&lt;/a&gt;): compositors that used to check &lt;code&gt;wlr_xdg_toplevel.client_pending&lt;/code&gt; will now have to check &lt;code&gt;wlr_xdg_toplevel.requested&lt;/code&gt;.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="582:1-586:57"&gt;&amp;#x000A;&lt;strong&gt;xdg-shell: introduce wlr_xdg_surface_state&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3106" data-original="!3106" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="54207" data-project-path="wlroots/wlroots" data-iid="3106" data-reference-type="merge_request" data-container="body" data-placement="top" title="xdg-shell: introduce wlr_xdg_surface_state" class="gfm gfm-merge_request"&gt;!3106&lt;/a&gt;):&amp;#x000A;&lt;ul data-sourcepos="583:3-586:57"&gt;&amp;#x000A;&lt;li data-sourcepos="583:3-583:99"&gt;&amp;#x000A;&lt;code&gt;wlr_xdg_surface.configure_next_serial&lt;/code&gt; has been renamed to &lt;code&gt;wlr_xdg_surface.scheduled_serial&lt;/code&gt;.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="584:3-584:106"&gt;&amp;#x000A;&lt;code&gt;wlr_xdg_surface.configure_serial&lt;/code&gt; has been moved into &lt;code&gt;wlr_xdg_surface_state&lt;/code&gt; and is double-buffered.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="585:3-585:178"&gt;&amp;#x000A;&lt;code&gt;wlr_xdg_surface.geometry&lt;/code&gt; and &lt;code&gt;wlr_xdg_surface.next_geometry&lt;/code&gt; have been replaced with &lt;code&gt;wlr_xdg_surface.current.geometry&lt;/code&gt; and &lt;code&gt;wlr_xdg_surface.pending.geometry&lt;/code&gt; respectively.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="586:3-586:57"&gt;&amp;#x000A;&lt;code&gt;wlr_xdg_surface.has_next_geometry&lt;/code&gt; has been removed.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="587:1-590:116"&gt;&amp;#x000A;&lt;strong&gt;layer-shell: refactor configure/state flow&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3201" data-original="!3201" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="54272" data-project-path="wlroots/wlroots" data-iid="3201" data-reference-type="merge_request" data-container="body" data-placement="top" title="layer-shell: refactor configure/state flow" class="gfm gfm-merge_request"&gt;!3201&lt;/a&gt;):&amp;#x000A;&lt;ul data-sourcepos="588:3-590:116"&gt;&amp;#x000A;&lt;li data-sourcepos="588:3-588:128"&gt;compositors that used to check &lt;code&gt;wlr_layer_surface_v1.client_pending&lt;/code&gt; will now have to check &lt;code&gt;wlr_layer_surface_v1.pending&lt;/code&gt;.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="589:3-589:136"&gt;&amp;#x000A;&lt;code&gt;wlr_layer_surface_v1_configure()&lt;/code&gt; now returns the configure serial, &lt;code&gt;wlr_layer_surface_v1.configure_next_serial&lt;/code&gt; has been removed.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="590:3-590:116"&gt;&amp;#x000A;&lt;code&gt;wlr_layer_surface_v1.configure_serial&lt;/code&gt; has been moved into &lt;code&gt;wlr_layer_surface_v1_state&lt;/code&gt; and is double-buffered.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="591:1-594:130"&gt;&amp;#x000A;&lt;strong&gt;xdg-decoration: refactor configure/state flow&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3228" data-original="!3228" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="54289" data-project-path="wlroots/wlroots" data-iid="3228" data-reference-type="merge_request" data-container="body" data-placement="top" title="xdg-decoration: refactor configure/state flow" class="gfm gfm-merge_request"&gt;!3228&lt;/a&gt;)&amp;#x000A;&lt;ul data-sourcepos="592:3-594:130"&gt;&amp;#x000A;&lt;li data-sourcepos="592:3-592:125"&gt;&amp;#x000A;&lt;code&gt;wlr_xdg_toplevel_decoration_v1.client_pending_mode&lt;/code&gt; has been renamed to &lt;code&gt;wlr_xdg_toplevel_decoration_v1.requested_mode&lt;/code&gt;.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="593:3-593:125"&gt;&amp;#x000A;&lt;code&gt;wlr_xdg_toplevel_decoration_v1.server_pending_mode&lt;/code&gt; has been renamed to &lt;code&gt;wlr_xdg_toplevel_decoration_v1.scheduled_mode&lt;/code&gt;.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="594:3-594:130"&gt;&amp;#x000A;&lt;code&gt;wlr_xdg_toplevel_decoration_v1.current_mode&lt;/code&gt; has been moved to &lt;code&gt;wlr_xdg_toplevel_decoration_v1_state&lt;/code&gt; and is double-buffered.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="595:1-595:202"&gt;&amp;#x000A;&lt;strong&gt;backend: create renderer and allocator in &lt;code&gt;wlr_backend_autocreate&lt;/code&gt;&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3222" data-original="!3222" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="54283" data-project-path="wlroots/wlroots" data-iid="3222" data-reference-type="merge_request" data-container="body" data-placement="top" title="backend: create renderer and allocator in wlr_backend_autocreate" class="gfm gfm-merge_request"&gt;!3222&lt;/a&gt;): &lt;code&gt;wlr_backend_get_renderer&lt;/code&gt; can now fail if &lt;code&gt;wlr_backend_autocreate&lt;/code&gt; isn't used and the renderer couldn't be initialized.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="596:1-596:328"&gt;&amp;#x000A;&lt;strong&gt;&lt;code&gt;*_for_each_surface&lt;/code&gt; and &lt;code&gt;*_surface_at&lt;/code&gt;: skip unmapped surfaces&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3220" data-original="!3220" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="54295" data-project-path="wlroots/wlroots" data-iid="3220" data-reference-type="merge_request" data-container="body" data-placement="top" title="for_each_surface and surface_at: skip unmapped surfaces" class="gfm gfm-merge_request"&gt;!3220&lt;/a&gt;): for compositors which only use &lt;code&gt;*_for_each_surface&lt;/code&gt; for rendering, this should fix bugs. For compositors which really mean to iterate over all surfaces in the tree regardless of their mapped status, the function needs to be manually re-implemented.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="597:1-597:91"&gt;&amp;#x000A;&lt;strong&gt;output: drop wlr_output_export_dmabuf&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3328" data-original="!3328" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="54566" data-project-path="wlroots/wlroots" data-iid="3328" data-reference-type="merge_request" data-container="body" data-placement="top" title="output: drop wlr_output_export_dmabuf" class="gfm gfm-merge_request"&gt;!3328&lt;/a&gt;): use &lt;code&gt;wlr_output.front_buffer&lt;/code&gt; instead.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="598:1-598:153"&gt;&amp;#x000A;&lt;strong&gt;text-input: fix type of send_preedit_string() args&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3336" data-original="!3336" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="54626" data-project-path="wlroots/wlroots" data-iid="3336" data-reference-type="merge_request" data-container="body" data-placement="top" title="text-input: fix type of send_preedit_string() args" class="gfm gfm-merge_request"&gt;!3336&lt;/a&gt;): &lt;code&gt;wlr_text_input_v3_send_preedit_string&lt;/code&gt; now takes &lt;code&gt;int32_t&lt;/code&gt; args instead of &lt;code&gt;uint32_t&lt;/code&gt;.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="599:1-599:223"&gt;&amp;#x000A;&lt;strong&gt;output: wlr_output_init_render&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3349" data-original="!3349" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="54996" data-project-path="wlroots/wlroots" data-iid="3349" data-reference-type="merge_request" data-container="body" data-placement="top" title="Output renderer &amp;amp; allocator II : Electric boogaloo" class="gfm gfm-merge_request"&gt;!3349&lt;/a&gt;): each new &lt;code&gt;wlr_output&lt;/code&gt; must be initialized with an allocator and a renderer. See &lt;a href="https://gitlab.freedesktop.org/wlroots/wlroots/-/commit/a6538ced35872a86d37d6ca32b1d9ddb5fe2c4b7" data-original="https://gitlab.freedesktop.org/wlroots/wlroots/-/commit/a6538ced35872a86d37d6ca32b1d9ddb5fe2c4b7" data-link="false" data-link-reference="true" data-project="12103" data-commit="a6538ced35872a86d37d6ca32b1d9ddb5fe2c4b7" data-reference-type="commit" data-container="body" data-placement="top" title="tinywl: autocreate allocator and init output" class="gfm gfm-commit has-tooltip"&gt;a6538ced&lt;/a&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="600:1-600:164"&gt;&amp;#x000A;&lt;strong&gt;backend/headless: drop wlr_headless_backend_create_with_renderer&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3367" data-original="!3367" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="55449" data-project-path="wlroots/wlroots" data-iid="3367" data-reference-type="merge_request" data-container="body" data-placement="top" title="backend/headless: drop wlr_headless_backend_create_with_renderer" class="gfm gfm-merge_request"&gt;!3367&lt;/a&gt;): the headless backend no longer needs a parent renderer, nor does it return a DRM FD.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="601:1-601:123"&gt;&amp;#x000A;&lt;strong&gt;backend: remove noop backend&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3368" data-original="!3368" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="55463" data-project-path="wlroots/wlroots" data-iid="3368" data-reference-type="merge_request" data-container="body" data-placement="top" title="backend: remove noop backend" class="gfm gfm-merge_request"&gt;!3368&lt;/a&gt;): the noop backend has been removed, it's now superseded by the headless backend.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="602:1-602:119"&gt;&amp;#x000A;&lt;strong&gt;output: drop front_buffer&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3329" data-original="!3329" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="54567" data-project-path="wlroots/wlroots" data-iid="3329" data-reference-type="merge_request" data-container="body" data-placement="top" title="output: drop front_buffer" class="gfm gfm-merge_request"&gt;!3329&lt;/a&gt;): the newly commited buffer is available in the &lt;code&gt;wlr_output_commit_event&lt;/code&gt; struct&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="603:1-604:0"&gt;&amp;#x000A;&lt;strong&gt;output: introduce wlr_output_set_name&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3395" data-original="!3395" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="56135" data-project-path="wlroots/wlroots" data-iid="3395" data-reference-type="merge_request" data-container="body" data-placement="top" title="output: introduce wlr_output_set_name" class="gfm gfm-merge_request"&gt;!3395&lt;/a&gt;): &lt;code&gt;wlr_output.name&lt;/code&gt; is no longer an array, it's now a pointer. In general compositors should just work, except if they use &lt;code&gt;sizeof&lt;/code&gt; on this field.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;h2 data-sourcepos="605:1-605:53" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-breaking-changes-for-custom-backends-and-renderers" class="anchor" href="#breaking-changes-for-custom-backends-and-renderers" aria-hidden="true"&gt;&lt;/a&gt;Breaking changes for custom backends and renderers&lt;/h2&gt;&amp;#x000A;&lt;p data-sourcepos="607:1-608:20" dir="auto"&gt;These changes are unlikely to affect compositors that don't have a custom&amp;#x000A;backend or renderer.&lt;/p&gt;&amp;#x000A;&lt;ul data-sourcepos="610:1-627:151" dir="auto"&gt;&amp;#x000A;&lt;li data-sourcepos="610:1-610:53"&gt;&amp;#x000A;&lt;strong&gt;render/egl: make most functions private&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/2985" data-original="!2985" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="54122" data-project-path="wlroots/wlroots" data-iid="2985" data-reference-type="merge_request" data-container="body" data-placement="top" title="render/egl: make most functions private" class="gfm gfm-merge_request"&gt;!2985&lt;/a&gt;)&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="611:1-611:59"&gt;&amp;#x000A;&lt;strong&gt;surface: make &lt;code&gt;wlr_subsurface_create&lt;/code&gt; private&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/2993" data-original="!2993" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="54127" data-project-path="wlroots/wlroots" data-iid="2993" data-reference-type="merge_request" data-container="body" data-placement="top" title="surface: make wlr_subsurface_create private" class="gfm gfm-merge_request"&gt;!2993&lt;/a&gt;)&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="612:1-612:75"&gt;&amp;#x000A;&lt;strong&gt;render: drop &lt;code&gt;wlr_renderer_impl.texture_from_{pixels,dmabuf}&lt;/code&gt;&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/2997" data-original="!2997" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="54132" data-project-path="wlroots/wlroots" data-iid="2997" data-reference-type="merge_request" data-container="body" data-placement="top" title="render: drop wlr_renderer_impl.texture_from_{pixels,dmabuf}" class="gfm gfm-merge_request"&gt;!2997&lt;/a&gt;)&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="613:1-613:159"&gt;&amp;#x000A;&lt;strong&gt;Nuke &lt;code&gt;wlr_list&lt;/code&gt;&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3002" data-original="!3002" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="54134" data-project-path="wlroots/wlroots" data-iid="3002" data-reference-type="merge_request" data-container="body" data-placement="top" title="Nuke wlr_list" class="gfm gfm-merge_request"&gt;!3002&lt;/a&gt;): &lt;code&gt;wlr/types/wlr_list.h&lt;/code&gt; has been removed. &lt;code&gt;wlr_tablet.paths&lt;/code&gt; and &lt;code&gt;wlr_tablet_pad.paths&lt;/code&gt; are now &lt;code&gt;wl_array&lt;/code&gt; instead of &lt;code&gt;wlr_list&lt;/code&gt;.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="614:1-616:124"&gt;&amp;#x000A;&lt;strong&gt;Remove &lt;code&gt;wlr_resource_get_buffer_size&lt;/code&gt;&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3023" data-original="!3023" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="54143" data-project-path="wlroots/wlroots" data-iid="3023" data-reference-type="merge_request" data-container="body" data-placement="top" title="Remove wlr_resource_get_buffer_size" class="gfm gfm-merge_request"&gt;!3023&lt;/a&gt;)&amp;#x000A;&lt;ul data-sourcepos="615:3-616:124"&gt;&amp;#x000A;&lt;li data-sourcepos="615:3-615:52"&gt;&amp;#x000A;&lt;code&gt;wlr_resource_get_buffer_size&lt;/code&gt; has been removed.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="616:3-616:124"&gt;&amp;#x000A;&lt;code&gt;wlr_client_buffer_import&lt;/code&gt; has been split into two functions: &lt;code&gt;wlr_buffer_from_resource&lt;/code&gt; and &lt;code&gt;wlr_client_buffer_create&lt;/code&gt;.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="617:1-617:55"&gt;&amp;#x000A;&lt;strong&gt;buffer: drop &lt;code&gt;wlr_client_buffer.resource&lt;/code&gt;&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3039" data-original="!3039" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="54155" data-project-path="wlroots/wlroots" data-iid="3039" data-reference-type="merge_request" data-container="body" data-placement="top" title="buffer: drop wlr_client_buffer.resource" class="gfm gfm-merge_request"&gt;!3039&lt;/a&gt;)&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="618:1-618:126"&gt;&amp;#x000A;&lt;strong&gt;output: add generic &lt;code&gt;wlr_output_export_dmabuf&lt;/code&gt; implementation&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/2955" data-original="!2955" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="54105" data-project-path="wlroots/wlroots" data-iid="2955" data-reference-type="merge_request" data-container="body" data-placement="top" title="output: add generic wlr_output_export_dmabuf implementation" class="gfm gfm-merge_request"&gt;!2955&lt;/a&gt;): &lt;code&gt;wlr_output_impl.export_dmabuf&lt;/code&gt; has been dropped.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="619:1-619:62"&gt;&amp;#x000A;&lt;strong&gt;render: drop &lt;code&gt;wlr_renderer_impl.init_wl_display&lt;/code&gt;&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3062" data-original="!3062" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="54174" data-project-path="wlroots/wlroots" data-iid="3062" data-reference-type="merge_request" data-container="body" data-placement="top" title="render: drop wlr_renderer_impl.init_wl_display" class="gfm gfm-merge_request"&gt;!3062&lt;/a&gt;)&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="620:1-620:135"&gt;&amp;#x000A;&lt;strong&gt;Drop legacy output APIs&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3044" data-original="!3044" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="54161" data-project-path="wlroots/wlroots" data-iid="3044" data-reference-type="merge_request" data-container="body" data-placement="top" title="Drop legacy output APIs" class="gfm gfm-merge_request"&gt;!3044&lt;/a&gt;): &lt;code&gt;wlr_output_impl.{attach,rollback}_render&lt;/code&gt; and &lt;code&gt;wlr_output_state.buffer_type&lt;/code&gt; have been removed.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="621:1-621:104"&gt;&amp;#x000A;&lt;strong&gt;surface: drop &lt;code&gt;wlr_surface_state.buffer_resource&lt;/code&gt;&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3105" data-original="!3105" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="54206" data-project-path="wlroots/wlroots" data-iid="3105" data-reference-type="merge_request" data-container="body" data-placement="top" title="surface: drop wlr_surface_state.buffer_resource" class="gfm gfm-merge_request"&gt;!3105&lt;/a&gt;): use &lt;code&gt;wlr_surface_state.buffer&lt;/code&gt; instead.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="622:1-622:125"&gt;&amp;#x000A;&lt;strong&gt;buffer: add &lt;code&gt;data_ptr&lt;/code&gt; access flags&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/2994" data-original="!2994" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="54128" data-project-path="wlroots/wlroots" data-iid="2994" data-reference-type="merge_request" data-container="body" data-placement="top" title="buffer: add data_ptr access flags" class="gfm gfm-merge_request"&gt;!2994&lt;/a&gt;): &lt;code&gt;wlr_buffer_impl.begin_data_ptr_access&lt;/code&gt; now takes a new &lt;code&gt;flags&lt;/code&gt; argument.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="623:1-623:246"&gt;&amp;#x000A;&lt;strong&gt;output: add presented flag to presentation event&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3245" data-original="!3245" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="54298" data-project-path="wlroots/wlroots" data-iid="3245" data-reference-type="merge_request" data-container="body" data-placement="top" title="output: add presented flag to presentation event" class="gfm gfm-merge_request"&gt;!3245&lt;/a&gt;): wlr_output_send_present() doesn't accept NULL events anymore; &lt;code&gt;wlr_output_event_present&lt;/code&gt; now has a &lt;code&gt;presented&lt;/code&gt; flag which must be set to &lt;code&gt;true&lt;/code&gt; if the buffer was presented to a user.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="624:1-624:108"&gt;&amp;#x000A;&lt;strong&gt;backend: remove &lt;code&gt;wlr_backend_get_renderer&lt;/code&gt;&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3349" data-original="!3349" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="54996" data-project-path="wlroots/wlroots" data-iid="3349" data-reference-type="merge_request" data-container="body" data-placement="top" title="Output renderer &amp;amp; allocator II : Electric boogaloo" class="gfm gfm-merge_request"&gt;!3349&lt;/a&gt;): use &lt;code&gt;wlr_renderer_autocreate&lt;/code&gt; to create a renderer&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="625:1-625:96"&gt;&amp;#x000A;&lt;strong&gt;Remove support for DMA-BUF flags&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3351" data-original="!3351" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="55066" data-project-path="wlroots/wlroots" data-iid="3351" data-reference-type="merge_request" data-container="body" data-placement="top" title="Remove support for DMA-BUF flags" class="gfm gfm-merge_request"&gt;!3351&lt;/a&gt;): &lt;code&gt;wlr_dmabuf_attributes.flags&lt;/code&gt; has been removed.i&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="626:1-626:110"&gt;&amp;#x000A;&lt;strong&gt;input-device: remove wlr_input_device.link&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3363" data-original="!3363" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="55331" data-project-path="wlroots/wlroots" data-iid="3363" data-reference-type="merge_request" data-container="body" data-placement="top" title="input-device: remove wlr_input_device.link" class="gfm gfm-merge_request"&gt;!3363&lt;/a&gt;): input devices are owned by their respective backends&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="627:1-627:151"&gt;&amp;#x000A;&lt;strong&gt;dmabuf require INVALID for implicit format modifiers&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/merge_requests/3231" data-original="!3231" data-link="false" data-link-reference="false" data-project="12103" data-merge-request="54286" data-project-path="wlroots/wlroots" data-iid="3231" data-reference-type="merge_request" data-container="body" data-placement="top" title="Require INVALID for implicit format modifiers" class="gfm gfm-merge_request"&gt;!3231&lt;/a&gt;): allocators must recognize the INVALID and LINEAR modifiers to run on legacy drivers&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;</content> + <updated>2021-12-17T10:48:19Z</updated> + <media:thumbnail width="40" height="40" url="https://secure.gravatar.com/avatar/1ce071dd3264c7d9f5d9c0b7137faa6b?s=80&amp;d=identicon"/> + <author> + <name>Simon Ser</name> + <email>contact@emersion.fr</email> + </author> +</entry> +<entry> + <id>https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.14.1</id> + <link href="https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.14.1"/> + <title>0.14.1</title> + <summary>wlroots 0.14.1 + +This is bugfix release for wlroots 0.14.0. + +Simon Ser (10): + surface: accept commits with buffer size not divisible by scale + buffer: make enum wlr_buffer_cap public + surface: allow locking pending state in commit handler + Revert "backend/drm: populate cursor plane's current_fb" + backend/drm: don't clear pending cursor FB on failed commit + output: detach buffer from renderer before commit + output-damage: fix output swapchain handling + tablet-v2: fix pad and tool object versions + backend/drm: force linear layout for multi-GPU buffers + build: bump version to 0.14.1 +</summary> + <content type="html"></content> + <updated>2021-11-01T16:09:55Z</updated> + <media:thumbnail width="40" height="40" url="https://secure.gravatar.com/avatar/1ce071dd3264c7d9f5d9c0b7137faa6b?s=80&amp;d=identicon"/> + <author> + <name>Simon Ser</name> + <email>contact@emersion.fr</email> + </author> +</entry> +<entry> + <id>https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.14.0</id> + <link href="https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.14.0"/> + <title>0.14.0</title> + <summary>wlroots 0.14.0 + +Release highlights: + +- Renderer refactoring work is well underway: everything now uses the + new infrastructure under-the-hood except the DRM backend's primary + plane. +- The Pixman software renderer has been merged, alongside new allocators + (shared memory for Wayland/X11 and DRM dumb buffers). +- Session management is now completely offloaded to libseat. +- Support for the xdg-activation-v1 protocol has been merged. + +Full changelog below. + +Aleksei Bavshin (2): + xwayland: query window PIDs via XResQueryClientIds + xwayland: remove _NET_WM_PID handler + +Benoit Gschwind (1): + Document the wlr_output_layout_get function + +Brian McKenna (1): + Flush events in virtual pointer example + +Isaac Freund (1): + gtk-primary-selection: drop support + +Kenny Levinsen (12): + backend/session: Remove logind backend + ci: Add libseat-dev to alpine + backend/session: Make libseat mandatory + backend/session: Remove direct backend + backend/session: Remove noop backend + backend/session: Remove session_impl + backend/session: Close fd in wlr_session_close_file + backend/session: Close remaining devices on destroy + backend/drm: Do not require mode commit on enable + meson: Make private static library symbols local + ci: Build both static and shared + Revert "meson: Make private static library symbols local" + +Roman Gilg (1): + backend: move get_drm_fd to public interface + +Ryan Farley (2): + util/uuid: replace with util/token, remove libuuid + xwayland/sockets: ensure proper permissions + +Simon Ser (135): + build: bump version to 0.14.0 + render: drop wlr_renderer_blit_dmabuf + render: remove wlr_texture_to_dmabuf + render: drop support for ellipses + Remove WLR_HAS_XCB_ERRORS + build: disable libseat subproject server and man pages + build: remove wayland-scanner fallback + backend/libinput: terminate display on error + backend/drm: terminate display on drmHandleEvent failure + backend/x11: check for connection errors + render/gles2: prevent imported DMA-BUF textures from being mutated + examples/rotation: error out on invalid option + readme: mark libseat as mandatory dep + buffer: introduce wlr_buffer_get_shm + render: introduce shared memory allocator + backend/wayland: add support for wl_shm buffers + backend/wayland: fallback to wl_shm on missing render node + examples: use wlr_output_preferred_mode + examples: remove dependency on GLES2 for compositor examples + Stop specifying xkb_rule_names + linux-dmabuf-v1: drop some from_resource helpers + linux-dmabuf-v1: split params and buffer + render/gles2: log when creating renderer + output: correctly handle outputs without a test() impl + render/pixman: cleanup when renderer is destroyed + render/gles2: destroy textures on renderer teardown + render/pixman: destroy textures on renderer teardown + render: remove NULL checks in wlr_texture_impl.destroy + readme: update and cleanup xcb deps + readme: mention IRC channel + readme: use webchat link for IRC channel + render: unconditionally read WLR_RENDERER + Log drmGetDevices2 error code + xcursor: quiet debug log + backend/drm: fail instead of stripping a modifier + backend/drm: clarify error message on drmModeAddFB fallback + backend/drm: destroy when parent is destroyed + backend/session: add wlr_device.events.remove + backend/drm: destroy backend on udev remove event + backend/drm: carry on when disabling a CRTC fails + Revert "backend/drm: fail instead of stripping a modifier" + buffer: add format param to get_data_ptr + render/pixman: check format is supported in create_buffer + Log when WLR_BACKENDS/WLR_RENDERER is set + backend/drm: reword wlr_renderer failure message + render: remove wlr_ prefix from wlr_renderer_autocreate_with_drm_fd + render/allocator: add allocator_autocreate_with_drm_fd + backend/drm: fix allocator DRM FD on multi-GPU setups + render/gles2: assert texture comes from the same renderer + backend/drm: take wlr_output_state as arg in crtc_commit + backend/drm: take wlr_output_state as arg in commit callers + backend/drm: fill scratch wlr_output_state for set_mode + backend/drm: remove wlr_drm_crtc.pending_modeset + backend/drm: remove wlr_drm_crtc_state.active + backend/drm: remove wlr_drm_crtc_state.mode + backend/drm: remove mode arg from drm_connector_init_renderer + backend/drm: remove mode arg from drm_connector_set_mode + backend/drm: take output state arg in drm_connector_commit_buffer + backend/drm: take a wlr_drm_connector instead of a wlr_output + backend/drm: introduce drm_connector_commit_state + backend/headless: dup DRM FD in wlr_headless_backend_create_with_renderer + build: move wayland-protocols dep to protocol/ + render/egl: query and display EGL driver name + render: remove wlr_texture_get_size + render/gles2: remove unnecessary EGL import ext checks + linux-dmabuf-v1: implement wlr_buffer + render/gles2: add gles2_texture_create + render: introduce wlr_texture_from_buffer + render/gles2: implement texture_from_buffer + buffer: use wlr_texture_from_buffer for DMA-BUFs + screencopy-v1: stop using wlr_client_buffer + backend/drm: use wlr_texture_from_buffer + render/gbm_allocator: add support for gbm_bo_get_fd_for_plane + render/pixman: avoid sqrt() in render_quad without rotation + render: relax stride check in wlr_texture_from_pixels + backend: introduce wlr_backend_finish + backend: automatically create renderer + backend: automatically create allocator + backend/wayland: use common renderer and allocator + backend/headless: use common renderer and allocator + backend/x11: use common renderer and allocator + readme: add link to IRC web client + readme: fix broken IRC web client link + contributing: add link to IRC web chat + render/gles2: fix texture cleanup on destroy + render/drm_dumb_allocator: check for DRM master + render/allocator: add wlr_allocator.buffer_caps + backend: stop using renderer to get the buffer type + render: disallow wlr_renderer_destroy while rendering + render: add wlr_renderer_begin_with_buffer + output: add get_cursor_formats and get_cursor_size to interface + backend/wayland: implement get_cursor_formats + backend/drm: implement get_cursor_formats and get_cursor_size + backend/drm: remove format arg from drm_plane_init_surface + backend/drm: introduce drm_plane_pick_render_format + output: take a wlr_buffer in set_cursor + backend/drm: move cursor fields to wlr_drm_connector + xdg-activation-v1: new protocol implementation + xdg-activation-v1: add token timeout + surface: allow placing subsurfaces below parent + buffer: replace get_data_ptr with {begin,end}_data_ptr_access + render/gles2: add support for DATA_PTR buffers in texture_from_buffer + render/pixman: implement texture_from_buffer + buffer: introduce wlr_shm_client_buffer + buffer: use wlr_texture_from_buffer for wl_shm_buffer + output: add get_primary_formats to interface + output: split output_pick_cursor_format + output: make attach_render and rollback_render optional + backend/headless: remove swapchain + backend/x11: implement get_dmabuf_primary_formats + backend/x11: remove swapchain + backend/wayland: implement get_dmabuf_primary_formats + backend/wayland: remove swapchain + matrix: deprecate wlr_matrix_projection + screencopy-v1: use wlr_renderer_begin_with_buffer + output: use wlr_renderer_begin_with_buffer for cursor + backend/x11: use wlr_renderer_begin_with_buffer for cursor + render: drop wlr_ prefix from wlr_renderer_bind_buffer + render: add missing arg to wlr_renderer_impl.get_buffer_caps + backend/drm: use atomic test-only commits for modifier fallback + backend/drm: allow committing a buffer and a mode together + backend/drm: introduce drm_connector_alloc_crtc + backend/drm: allocate a CRTC in drm_connector_commit_state + backend/drm: allocate a CRTC in drm_connector_test + backend/drm: move drm_connector_set_pending_fb up + backend/drm: move session check from test_buffer to drm_connector_test + backend/drm: remove test_buffer + output: reset back buffer on failed commit + backend/drm: populate cursor plane's current_fb + backend/session: use drmIsKMS + backend/session: use DRM_PRIMARY_MINOR_NAME + build: simplify version script + xdg-activation-v1: fix wlr_xdg_activation_v1_create error path + backend: add output state allow-lists + Revert "build: workaround for meson disabler object not working with if not" + +Simon Zeni (22): + render: rename get_dmabuf_render_formats into get_render_formats + buffer: introduce wlr_buffer_get_data_ptr + render: introduce pixman renderer + renderer: create pixman renderer if getting drm fd failed + examples: introduce quads example + examples/rotation: remove unused includes + render/gles2: introduce wlr_gles2_renderer_create_with_drm_fd + render: introduce WLR_RENDERER in wlr_renderer_autocreate_with_drm_fd + render/egl: fail on EGL_MESA_device_software + render/pixman: implement preferred_read_format + pixman: implement read pixels + types/wlr_screencopy_v1: log error on read pixels failure + render/gbm_allocator: make wlr_gbm_allocator_create return a wlr_allocator + render/shm_allocator: make wlr_shm_allocator_create return a wlr_allocator + types/wlr_buffer: introduce wlr_buffer_cap + backend: introduce backend_get_buffer_caps + render: introduce renderer_get_render_buffer_caps + render/allocator: introduce wlr_allocator_autocreate + backend: use wlr_allocator_autocreate + render/gbm_allocator: duplicate drm fd during creation process + render: add DRM dumb buffer allocator + Update IRC links + +Stephan Hilb (1): + drm: check for PRIME support + +Tadeo Kondrak (1): + backend/x11: add support for shm buffers + +Thomas Weißschuh (1): + xwayland: actually use Xwayland from pkg-config + +Tobias Stoeckmann (1): + xcursor: fix CVE-2013-2003 + +Tudor Brindus (3): + xwm: use correct list link when iterating over `unpaired_surfaces` + xwm: implement _NET_CLIENT_LIST_STACKING + xwm: prevent X11 clients from blowing our stack by opening too many windows + +Yuya Nishihara (3): + Revert "xcursor: use strncat instead of strncpy" + xcursor: use memcpy() to append string of known size + virtual_keyboard: Emulate key release events on destroy + +ayaka (1): + render: make GLES2 renderer optional + +nyorain (1): + render: Assert that texture dimensions are &gt; 0 + +tomKPZ (1): + Fix stuck keys on X11 backend + +zccrs (4): + Make the xdg_popup_get_position to public + render/gles2: add wlr_renderer_is_gles2 + render/pixman: add wlr_*_is_pixman and wlr_pixman_texture_get_image + render: add get native paint target of renderer + +</summary> + <content type="html">&lt;p data-sourcepos="1:1-1:19" dir="auto"&gt;Release highlights:&lt;/p&gt;&amp;#x000A;&lt;ul data-sourcepos="3:1-7:0" dir="auto"&gt;&amp;#x000A;&lt;li data-sourcepos="3:1-3:143"&gt;Renderer refactoring work is well underway: everything now uses the new infrastructure under-the-hood except the DRM backend's primary plane.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="4:1-4:117"&gt;The Pixman renderer has been merged, alongside new allocators (shared memory for Wayland/X11 and DRM dumb buffers).&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="5:1-5:60"&gt;Session management is now completely offloaded to libseat.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="6:1-7:0"&gt;Support for the xdg-activation-v1 protocol has been merged.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;details&gt;&amp;#x000A;&lt;summary&gt;Full changelog&lt;/summary&gt;&amp;#x000A;&lt;div class="gl-relative markdown-code-block js-markdown-code"&gt;&amp;#x000A;&lt;pre data-sourcepos="12:1-244:3" class="code highlight js-syntax-highlight language-plaintext" lang="plaintext" data-canonical-lang="" v-pre="true"&gt;&lt;code&gt;&lt;span id="LC1" class="line" lang="plaintext"&gt;Aleksei Bavshin (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC2" class="line" lang="plaintext"&gt; xwayland: query window PIDs via XResQueryClientIds&lt;/span&gt;&amp;#x000A;&lt;span id="LC3" class="line" lang="plaintext"&gt; xwayland: remove _NET_WM_PID handler&lt;/span&gt;&amp;#x000A;&lt;span id="LC4" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC5" class="line" lang="plaintext"&gt;Benoit Gschwind (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC6" class="line" lang="plaintext"&gt; Document the wlr_output_layout_get function&lt;/span&gt;&amp;#x000A;&lt;span id="LC7" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC8" class="line" lang="plaintext"&gt;Brian McKenna (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC9" class="line" lang="plaintext"&gt; Flush events in virtual pointer example&lt;/span&gt;&amp;#x000A;&lt;span id="LC10" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC11" class="line" lang="plaintext"&gt;Isaac Freund (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC12" class="line" lang="plaintext"&gt; gtk-primary-selection: drop support&lt;/span&gt;&amp;#x000A;&lt;span id="LC13" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC14" class="line" lang="plaintext"&gt;Kenny Levinsen (12):&lt;/span&gt;&amp;#x000A;&lt;span id="LC15" class="line" lang="plaintext"&gt; backend/session: Remove logind backend&lt;/span&gt;&amp;#x000A;&lt;span id="LC16" class="line" lang="plaintext"&gt; ci: Add libseat-dev to alpine&lt;/span&gt;&amp;#x000A;&lt;span id="LC17" class="line" lang="plaintext"&gt; backend/session: Make libseat mandatory&lt;/span&gt;&amp;#x000A;&lt;span id="LC18" class="line" lang="plaintext"&gt; backend/session: Remove direct backend&lt;/span&gt;&amp;#x000A;&lt;span id="LC19" class="line" lang="plaintext"&gt; backend/session: Remove noop backend&lt;/span&gt;&amp;#x000A;&lt;span id="LC20" class="line" lang="plaintext"&gt; backend/session: Remove session_impl&lt;/span&gt;&amp;#x000A;&lt;span id="LC21" class="line" lang="plaintext"&gt; backend/session: Close fd in wlr_session_close_file&lt;/span&gt;&amp;#x000A;&lt;span id="LC22" class="line" lang="plaintext"&gt; backend/session: Close remaining devices on destroy&lt;/span&gt;&amp;#x000A;&lt;span id="LC23" class="line" lang="plaintext"&gt; backend/drm: Do not require mode commit on enable&lt;/span&gt;&amp;#x000A;&lt;span id="LC24" class="line" lang="plaintext"&gt; meson: Make private static library symbols local&lt;/span&gt;&amp;#x000A;&lt;span id="LC25" class="line" lang="plaintext"&gt; ci: Build both static and shared&lt;/span&gt;&amp;#x000A;&lt;span id="LC26" class="line" lang="plaintext"&gt; Revert "meson: Make private static library symbols local"&lt;/span&gt;&amp;#x000A;&lt;span id="LC27" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC28" class="line" lang="plaintext"&gt;Roman Gilg (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC29" class="line" lang="plaintext"&gt; backend: move get_drm_fd to public interface&lt;/span&gt;&amp;#x000A;&lt;span id="LC30" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC31" class="line" lang="plaintext"&gt;Ryan Farley (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC32" class="line" lang="plaintext"&gt; util/uuid: replace with util/token, remove libuuid&lt;/span&gt;&amp;#x000A;&lt;span id="LC33" class="line" lang="plaintext"&gt; xwayland/sockets: ensure proper permissions&lt;/span&gt;&amp;#x000A;&lt;span id="LC34" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC35" class="line" lang="plaintext"&gt;Simon Ser (135):&lt;/span&gt;&amp;#x000A;&lt;span id="LC36" class="line" lang="plaintext"&gt; build: bump version to 0.14.0&lt;/span&gt;&amp;#x000A;&lt;span id="LC37" class="line" lang="plaintext"&gt; render: drop wlr_renderer_blit_dmabuf&lt;/span&gt;&amp;#x000A;&lt;span id="LC38" class="line" lang="plaintext"&gt; render: remove wlr_texture_to_dmabuf&lt;/span&gt;&amp;#x000A;&lt;span id="LC39" class="line" lang="plaintext"&gt; render: drop support for ellipses&lt;/span&gt;&amp;#x000A;&lt;span id="LC40" class="line" lang="plaintext"&gt; Remove WLR_HAS_XCB_ERRORS&lt;/span&gt;&amp;#x000A;&lt;span id="LC41" class="line" lang="plaintext"&gt; build: disable libseat subproject server and man pages&lt;/span&gt;&amp;#x000A;&lt;span id="LC42" class="line" lang="plaintext"&gt; build: remove wayland-scanner fallback&lt;/span&gt;&amp;#x000A;&lt;span id="LC43" class="line" lang="plaintext"&gt; backend/libinput: terminate display on error&lt;/span&gt;&amp;#x000A;&lt;span id="LC44" class="line" lang="plaintext"&gt; backend/drm: terminate display on drmHandleEvent failure&lt;/span&gt;&amp;#x000A;&lt;span id="LC45" class="line" lang="plaintext"&gt; backend/x11: check for connection errors&lt;/span&gt;&amp;#x000A;&lt;span id="LC46" class="line" lang="plaintext"&gt; render/gles2: prevent imported DMA-BUF textures from being mutated&lt;/span&gt;&amp;#x000A;&lt;span id="LC47" class="line" lang="plaintext"&gt; examples/rotation: error out on invalid option&lt;/span&gt;&amp;#x000A;&lt;span id="LC48" class="line" lang="plaintext"&gt; readme: mark libseat as mandatory dep&lt;/span&gt;&amp;#x000A;&lt;span id="LC49" class="line" lang="plaintext"&gt; buffer: introduce wlr_buffer_get_shm&lt;/span&gt;&amp;#x000A;&lt;span id="LC50" class="line" lang="plaintext"&gt; render: introduce shared memory allocator&lt;/span&gt;&amp;#x000A;&lt;span id="LC51" class="line" lang="plaintext"&gt; backend/wayland: add support for wl_shm buffers&lt;/span&gt;&amp;#x000A;&lt;span id="LC52" class="line" lang="plaintext"&gt; backend/wayland: fallback to wl_shm on missing render node&lt;/span&gt;&amp;#x000A;&lt;span id="LC53" class="line" lang="plaintext"&gt; examples: use wlr_output_preferred_mode&lt;/span&gt;&amp;#x000A;&lt;span id="LC54" class="line" lang="plaintext"&gt; examples: remove dependency on GLES2 for compositor examples&lt;/span&gt;&amp;#x000A;&lt;span id="LC55" class="line" lang="plaintext"&gt; Stop specifying xkb_rule_names&lt;/span&gt;&amp;#x000A;&lt;span id="LC56" class="line" lang="plaintext"&gt; linux-dmabuf-v1: drop some from_resource helpers&lt;/span&gt;&amp;#x000A;&lt;span id="LC57" class="line" lang="plaintext"&gt; linux-dmabuf-v1: split params and buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC58" class="line" lang="plaintext"&gt; render/gles2: log when creating renderer&lt;/span&gt;&amp;#x000A;&lt;span id="LC59" class="line" lang="plaintext"&gt; output: correctly handle outputs without a test() impl&lt;/span&gt;&amp;#x000A;&lt;span id="LC60" class="line" lang="plaintext"&gt; render/pixman: cleanup when renderer is destroyed&lt;/span&gt;&amp;#x000A;&lt;span id="LC61" class="line" lang="plaintext"&gt; render/gles2: destroy textures on renderer teardown&lt;/span&gt;&amp;#x000A;&lt;span id="LC62" class="line" lang="plaintext"&gt; render/pixman: destroy textures on renderer teardown&lt;/span&gt;&amp;#x000A;&lt;span id="LC63" class="line" lang="plaintext"&gt; render: remove NULL checks in wlr_texture_impl.destroy&lt;/span&gt;&amp;#x000A;&lt;span id="LC64" class="line" lang="plaintext"&gt; readme: update and cleanup xcb deps&lt;/span&gt;&amp;#x000A;&lt;span id="LC65" class="line" lang="plaintext"&gt; readme: mention IRC channel&lt;/span&gt;&amp;#x000A;&lt;span id="LC66" class="line" lang="plaintext"&gt; readme: use webchat link for IRC channel&lt;/span&gt;&amp;#x000A;&lt;span id="LC67" class="line" lang="plaintext"&gt; render: unconditionally read WLR_RENDERER&lt;/span&gt;&amp;#x000A;&lt;span id="LC68" class="line" lang="plaintext"&gt; Log drmGetDevices2 error code&lt;/span&gt;&amp;#x000A;&lt;span id="LC69" class="line" lang="plaintext"&gt; xcursor: quiet debug log&lt;/span&gt;&amp;#x000A;&lt;span id="LC70" class="line" lang="plaintext"&gt; backend/drm: fail instead of stripping a modifier&lt;/span&gt;&amp;#x000A;&lt;span id="LC71" class="line" lang="plaintext"&gt; backend/drm: clarify error message on drmModeAddFB fallback&lt;/span&gt;&amp;#x000A;&lt;span id="LC72" class="line" lang="plaintext"&gt; backend/drm: destroy when parent is destroyed&lt;/span&gt;&amp;#x000A;&lt;span id="LC73" class="line" lang="plaintext"&gt; backend/session: add wlr_device.events.remove&lt;/span&gt;&amp;#x000A;&lt;span id="LC74" class="line" lang="plaintext"&gt; backend/drm: destroy backend on udev remove event&lt;/span&gt;&amp;#x000A;&lt;span id="LC75" class="line" lang="plaintext"&gt; backend/drm: carry on when disabling a CRTC fails&lt;/span&gt;&amp;#x000A;&lt;span id="LC76" class="line" lang="plaintext"&gt; Revert "backend/drm: fail instead of stripping a modifier"&lt;/span&gt;&amp;#x000A;&lt;span id="LC77" class="line" lang="plaintext"&gt; buffer: add format param to get_data_ptr&lt;/span&gt;&amp;#x000A;&lt;span id="LC78" class="line" lang="plaintext"&gt; render/pixman: check format is supported in create_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC79" class="line" lang="plaintext"&gt; Log when WLR_BACKENDS/WLR_RENDERER is set&lt;/span&gt;&amp;#x000A;&lt;span id="LC80" class="line" lang="plaintext"&gt; backend/drm: reword wlr_renderer failure message&lt;/span&gt;&amp;#x000A;&lt;span id="LC81" class="line" lang="plaintext"&gt; render: remove wlr_ prefix from wlr_renderer_autocreate_with_drm_fd&lt;/span&gt;&amp;#x000A;&lt;span id="LC82" class="line" lang="plaintext"&gt; render/allocator: add allocator_autocreate_with_drm_fd&lt;/span&gt;&amp;#x000A;&lt;span id="LC83" class="line" lang="plaintext"&gt; backend/drm: fix allocator DRM FD on multi-GPU setups&lt;/span&gt;&amp;#x000A;&lt;span id="LC84" class="line" lang="plaintext"&gt; render/gles2: assert texture comes from the same renderer&lt;/span&gt;&amp;#x000A;&lt;span id="LC85" class="line" lang="plaintext"&gt; backend/drm: take wlr_output_state as arg in crtc_commit&lt;/span&gt;&amp;#x000A;&lt;span id="LC86" class="line" lang="plaintext"&gt; backend/drm: take wlr_output_state as arg in commit callers&lt;/span&gt;&amp;#x000A;&lt;span id="LC87" class="line" lang="plaintext"&gt; backend/drm: fill scratch wlr_output_state for set_mode&lt;/span&gt;&amp;#x000A;&lt;span id="LC88" class="line" lang="plaintext"&gt; backend/drm: remove wlr_drm_crtc.pending_modeset&lt;/span&gt;&amp;#x000A;&lt;span id="LC89" class="line" lang="plaintext"&gt; backend/drm: remove wlr_drm_crtc_state.active&lt;/span&gt;&amp;#x000A;&lt;span id="LC90" class="line" lang="plaintext"&gt; backend/drm: remove wlr_drm_crtc_state.mode&lt;/span&gt;&amp;#x000A;&lt;span id="LC91" class="line" lang="plaintext"&gt; backend/drm: remove mode arg from drm_connector_init_renderer&lt;/span&gt;&amp;#x000A;&lt;span id="LC92" class="line" lang="plaintext"&gt; backend/drm: remove mode arg from drm_connector_set_mode&lt;/span&gt;&amp;#x000A;&lt;span id="LC93" class="line" lang="plaintext"&gt; backend/drm: take output state arg in drm_connector_commit_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC94" class="line" lang="plaintext"&gt; backend/drm: take a wlr_drm_connector instead of a wlr_output&lt;/span&gt;&amp;#x000A;&lt;span id="LC95" class="line" lang="plaintext"&gt; backend/drm: introduce drm_connector_commit_state&lt;/span&gt;&amp;#x000A;&lt;span id="LC96" class="line" lang="plaintext"&gt; backend/headless: dup DRM FD in wlr_headless_backend_create_with_renderer&lt;/span&gt;&amp;#x000A;&lt;span id="LC97" class="line" lang="plaintext"&gt; build: move wayland-protocols dep to protocol/&lt;/span&gt;&amp;#x000A;&lt;span id="LC98" class="line" lang="plaintext"&gt; render/egl: query and display EGL driver name&lt;/span&gt;&amp;#x000A;&lt;span id="LC99" class="line" lang="plaintext"&gt; render: remove wlr_texture_get_size&lt;/span&gt;&amp;#x000A;&lt;span id="LC100" class="line" lang="plaintext"&gt; render/gles2: remove unnecessary EGL import ext checks&lt;/span&gt;&amp;#x000A;&lt;span id="LC101" class="line" lang="plaintext"&gt; linux-dmabuf-v1: implement wlr_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC102" class="line" lang="plaintext"&gt; render/gles2: add gles2_texture_create&lt;/span&gt;&amp;#x000A;&lt;span id="LC103" class="line" lang="plaintext"&gt; render: introduce wlr_texture_from_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC104" class="line" lang="plaintext"&gt; render/gles2: implement texture_from_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC105" class="line" lang="plaintext"&gt; buffer: use wlr_texture_from_buffer for DMA-BUFs&lt;/span&gt;&amp;#x000A;&lt;span id="LC106" class="line" lang="plaintext"&gt; screencopy-v1: stop using wlr_client_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC107" class="line" lang="plaintext"&gt; backend/drm: use wlr_texture_from_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC108" class="line" lang="plaintext"&gt; render/gbm_allocator: add support for gbm_bo_get_fd_for_plane&lt;/span&gt;&amp;#x000A;&lt;span id="LC109" class="line" lang="plaintext"&gt; render/pixman: avoid sqrt() in render_quad without rotation&lt;/span&gt;&amp;#x000A;&lt;span id="LC110" class="line" lang="plaintext"&gt; render: relax stride check in wlr_texture_from_pixels&lt;/span&gt;&amp;#x000A;&lt;span id="LC111" class="line" lang="plaintext"&gt; backend: introduce wlr_backend_finish&lt;/span&gt;&amp;#x000A;&lt;span id="LC112" class="line" lang="plaintext"&gt; backend: automatically create renderer&lt;/span&gt;&amp;#x000A;&lt;span id="LC113" class="line" lang="plaintext"&gt; backend: automatically create allocator&lt;/span&gt;&amp;#x000A;&lt;span id="LC114" class="line" lang="plaintext"&gt; backend/wayland: use common renderer and allocator&lt;/span&gt;&amp;#x000A;&lt;span id="LC115" class="line" lang="plaintext"&gt; backend/headless: use common renderer and allocator&lt;/span&gt;&amp;#x000A;&lt;span id="LC116" class="line" lang="plaintext"&gt; backend/x11: use common renderer and allocator&lt;/span&gt;&amp;#x000A;&lt;span id="LC117" class="line" lang="plaintext"&gt; readme: add link to IRC web client&lt;/span&gt;&amp;#x000A;&lt;span id="LC118" class="line" lang="plaintext"&gt; readme: fix broken IRC web client link&lt;/span&gt;&amp;#x000A;&lt;span id="LC119" class="line" lang="plaintext"&gt; contributing: add link to IRC web chat&lt;/span&gt;&amp;#x000A;&lt;span id="LC120" class="line" lang="plaintext"&gt; render/gles2: fix texture cleanup on destroy&lt;/span&gt;&amp;#x000A;&lt;span id="LC121" class="line" lang="plaintext"&gt; render/drm_dumb_allocator: check for DRM master&lt;/span&gt;&amp;#x000A;&lt;span id="LC122" class="line" lang="plaintext"&gt; render/allocator: add wlr_allocator.buffer_caps&lt;/span&gt;&amp;#x000A;&lt;span id="LC123" class="line" lang="plaintext"&gt; backend: stop using renderer to get the buffer type&lt;/span&gt;&amp;#x000A;&lt;span id="LC124" class="line" lang="plaintext"&gt; render: disallow wlr_renderer_destroy while rendering&lt;/span&gt;&amp;#x000A;&lt;span id="LC125" class="line" lang="plaintext"&gt; render: add wlr_renderer_begin_with_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC126" class="line" lang="plaintext"&gt; output: add get_cursor_formats and get_cursor_size to interface&lt;/span&gt;&amp;#x000A;&lt;span id="LC127" class="line" lang="plaintext"&gt; backend/wayland: implement get_cursor_formats&lt;/span&gt;&amp;#x000A;&lt;span id="LC128" class="line" lang="plaintext"&gt; backend/drm: implement get_cursor_formats and get_cursor_size&lt;/span&gt;&amp;#x000A;&lt;span id="LC129" class="line" lang="plaintext"&gt; backend/drm: remove format arg from drm_plane_init_surface&lt;/span&gt;&amp;#x000A;&lt;span id="LC130" class="line" lang="plaintext"&gt; backend/drm: introduce drm_plane_pick_render_format&lt;/span&gt;&amp;#x000A;&lt;span id="LC131" class="line" lang="plaintext"&gt; output: take a wlr_buffer in set_cursor&lt;/span&gt;&amp;#x000A;&lt;span id="LC132" class="line" lang="plaintext"&gt; backend/drm: move cursor fields to wlr_drm_connector&lt;/span&gt;&amp;#x000A;&lt;span id="LC133" class="line" lang="plaintext"&gt; xdg-activation-v1: new protocol implementation&lt;/span&gt;&amp;#x000A;&lt;span id="LC134" class="line" lang="plaintext"&gt; xdg-activation-v1: add token timeout&lt;/span&gt;&amp;#x000A;&lt;span id="LC135" class="line" lang="plaintext"&gt; surface: allow placing subsurfaces below parent&lt;/span&gt;&amp;#x000A;&lt;span id="LC136" class="line" lang="plaintext"&gt; buffer: replace get_data_ptr with {begin,end}_data_ptr_access&lt;/span&gt;&amp;#x000A;&lt;span id="LC137" class="line" lang="plaintext"&gt; render/gles2: add support for DATA_PTR buffers in texture_from_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC138" class="line" lang="plaintext"&gt; render/pixman: implement texture_from_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC139" class="line" lang="plaintext"&gt; buffer: introduce wlr_shm_client_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC140" class="line" lang="plaintext"&gt; buffer: use wlr_texture_from_buffer for wl_shm_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC141" class="line" lang="plaintext"&gt; output: add get_primary_formats to interface&lt;/span&gt;&amp;#x000A;&lt;span id="LC142" class="line" lang="plaintext"&gt; output: split output_pick_cursor_format&lt;/span&gt;&amp;#x000A;&lt;span id="LC143" class="line" lang="plaintext"&gt; output: make attach_render and rollback_render optional&lt;/span&gt;&amp;#x000A;&lt;span id="LC144" class="line" lang="plaintext"&gt; backend/headless: remove swapchain&lt;/span&gt;&amp;#x000A;&lt;span id="LC145" class="line" lang="plaintext"&gt; backend/x11: implement get_dmabuf_primary_formats&lt;/span&gt;&amp;#x000A;&lt;span id="LC146" class="line" lang="plaintext"&gt; backend/x11: remove swapchain&lt;/span&gt;&amp;#x000A;&lt;span id="LC147" class="line" lang="plaintext"&gt; backend/wayland: implement get_dmabuf_primary_formats&lt;/span&gt;&amp;#x000A;&lt;span id="LC148" class="line" lang="plaintext"&gt; backend/wayland: remove swapchain&lt;/span&gt;&amp;#x000A;&lt;span id="LC149" class="line" lang="plaintext"&gt; matrix: deprecate wlr_matrix_projection&lt;/span&gt;&amp;#x000A;&lt;span id="LC150" class="line" lang="plaintext"&gt; screencopy-v1: use wlr_renderer_begin_with_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC151" class="line" lang="plaintext"&gt; output: use wlr_renderer_begin_with_buffer for cursor&lt;/span&gt;&amp;#x000A;&lt;span id="LC152" class="line" lang="plaintext"&gt; backend/x11: use wlr_renderer_begin_with_buffer for cursor&lt;/span&gt;&amp;#x000A;&lt;span id="LC153" class="line" lang="plaintext"&gt; render: drop wlr_ prefix from wlr_renderer_bind_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC154" class="line" lang="plaintext"&gt; render: add missing arg to wlr_renderer_impl.get_buffer_caps&lt;/span&gt;&amp;#x000A;&lt;span id="LC155" class="line" lang="plaintext"&gt; backend/drm: use atomic test-only commits for modifier fallback&lt;/span&gt;&amp;#x000A;&lt;span id="LC156" class="line" lang="plaintext"&gt; backend/drm: allow committing a buffer and a mode together&lt;/span&gt;&amp;#x000A;&lt;span id="LC157" class="line" lang="plaintext"&gt; backend/drm: introduce drm_connector_alloc_crtc&lt;/span&gt;&amp;#x000A;&lt;span id="LC158" class="line" lang="plaintext"&gt; backend/drm: allocate a CRTC in drm_connector_commit_state&lt;/span&gt;&amp;#x000A;&lt;span id="LC159" class="line" lang="plaintext"&gt; backend/drm: allocate a CRTC in drm_connector_test&lt;/span&gt;&amp;#x000A;&lt;span id="LC160" class="line" lang="plaintext"&gt; backend/drm: move drm_connector_set_pending_fb up&lt;/span&gt;&amp;#x000A;&lt;span id="LC161" class="line" lang="plaintext"&gt; backend/drm: move session check from test_buffer to drm_connector_test&lt;/span&gt;&amp;#x000A;&lt;span id="LC162" class="line" lang="plaintext"&gt; backend/drm: remove test_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC163" class="line" lang="plaintext"&gt; output: reset back buffer on failed commit&lt;/span&gt;&amp;#x000A;&lt;span id="LC164" class="line" lang="plaintext"&gt; backend/drm: populate cursor plane's current_fb&lt;/span&gt;&amp;#x000A;&lt;span id="LC165" class="line" lang="plaintext"&gt; backend/session: use drmIsKMS&lt;/span&gt;&amp;#x000A;&lt;span id="LC166" class="line" lang="plaintext"&gt; backend/session: use DRM_PRIMARY_MINOR_NAME&lt;/span&gt;&amp;#x000A;&lt;span id="LC167" class="line" lang="plaintext"&gt; build: simplify version script&lt;/span&gt;&amp;#x000A;&lt;span id="LC168" class="line" lang="plaintext"&gt; xdg-activation-v1: fix wlr_xdg_activation_v1_create error path&lt;/span&gt;&amp;#x000A;&lt;span id="LC169" class="line" lang="plaintext"&gt; backend: add output state allow-lists&lt;/span&gt;&amp;#x000A;&lt;span id="LC170" class="line" lang="plaintext"&gt; Revert "build: workaround for meson disabler object not working with if not"&lt;/span&gt;&amp;#x000A;&lt;span id="LC171" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC172" class="line" lang="plaintext"&gt;Simon Zeni (22):&lt;/span&gt;&amp;#x000A;&lt;span id="LC173" class="line" lang="plaintext"&gt; render: rename get_dmabuf_render_formats into get_render_formats&lt;/span&gt;&amp;#x000A;&lt;span id="LC174" class="line" lang="plaintext"&gt; buffer: introduce wlr_buffer_get_data_ptr&lt;/span&gt;&amp;#x000A;&lt;span id="LC175" class="line" lang="plaintext"&gt; render: introduce pixman renderer&lt;/span&gt;&amp;#x000A;&lt;span id="LC176" class="line" lang="plaintext"&gt; renderer: create pixman renderer if getting drm fd failed&lt;/span&gt;&amp;#x000A;&lt;span id="LC177" class="line" lang="plaintext"&gt; examples: introduce quads example&lt;/span&gt;&amp;#x000A;&lt;span id="LC178" class="line" lang="plaintext"&gt; examples/rotation: remove unused includes&lt;/span&gt;&amp;#x000A;&lt;span id="LC179" class="line" lang="plaintext"&gt; render/gles2: introduce wlr_gles2_renderer_create_with_drm_fd&lt;/span&gt;&amp;#x000A;&lt;span id="LC180" class="line" lang="plaintext"&gt; render: introduce WLR_RENDERER in wlr_renderer_autocreate_with_drm_fd&lt;/span&gt;&amp;#x000A;&lt;span id="LC181" class="line" lang="plaintext"&gt; render/egl: fail on EGL_MESA_device_software&lt;/span&gt;&amp;#x000A;&lt;span id="LC182" class="line" lang="plaintext"&gt; render/pixman: implement preferred_read_format&lt;/span&gt;&amp;#x000A;&lt;span id="LC183" class="line" lang="plaintext"&gt; pixman: implement read pixels&lt;/span&gt;&amp;#x000A;&lt;span id="LC184" class="line" lang="plaintext"&gt; types/wlr_screencopy_v1: log error on read pixels failure&lt;/span&gt;&amp;#x000A;&lt;span id="LC185" class="line" lang="plaintext"&gt; render/gbm_allocator: make wlr_gbm_allocator_create return a wlr_allocator&lt;/span&gt;&amp;#x000A;&lt;span id="LC186" class="line" lang="plaintext"&gt; render/shm_allocator: make wlr_shm_allocator_create return a wlr_allocator&lt;/span&gt;&amp;#x000A;&lt;span id="LC187" class="line" lang="plaintext"&gt; types/wlr_buffer: introduce wlr_buffer_cap&lt;/span&gt;&amp;#x000A;&lt;span id="LC188" class="line" lang="plaintext"&gt; backend: introduce backend_get_buffer_caps&lt;/span&gt;&amp;#x000A;&lt;span id="LC189" class="line" lang="plaintext"&gt; render: introduce renderer_get_render_buffer_caps&lt;/span&gt;&amp;#x000A;&lt;span id="LC190" class="line" lang="plaintext"&gt; render/allocator: introduce wlr_allocator_autocreate&lt;/span&gt;&amp;#x000A;&lt;span id="LC191" class="line" lang="plaintext"&gt; backend: use wlr_allocator_autocreate&lt;/span&gt;&amp;#x000A;&lt;span id="LC192" class="line" lang="plaintext"&gt; render/gbm_allocator: duplicate drm fd during creation process&lt;/span&gt;&amp;#x000A;&lt;span id="LC193" class="line" lang="plaintext"&gt; render: add DRM dumb buffer allocator&lt;/span&gt;&amp;#x000A;&lt;span id="LC194" class="line" lang="plaintext"&gt; Update IRC links&lt;/span&gt;&amp;#x000A;&lt;span id="LC195" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC196" class="line" lang="plaintext"&gt;Stephan Hilb (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC197" class="line" lang="plaintext"&gt; drm: check for PRIME support&lt;/span&gt;&amp;#x000A;&lt;span id="LC198" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC199" class="line" lang="plaintext"&gt;Tadeo Kondrak (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC200" class="line" lang="plaintext"&gt; backend/x11: add support for shm buffers&lt;/span&gt;&amp;#x000A;&lt;span id="LC201" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC202" class="line" lang="plaintext"&gt;Thomas Weißschuh (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC203" class="line" lang="plaintext"&gt; xwayland: actually use Xwayland from pkg-config&lt;/span&gt;&amp;#x000A;&lt;span id="LC204" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC205" class="line" lang="plaintext"&gt;Tobias Stoeckmann (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC206" class="line" lang="plaintext"&gt; xcursor: fix CVE-2013-2003&lt;/span&gt;&amp;#x000A;&lt;span id="LC207" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC208" class="line" lang="plaintext"&gt;Tudor Brindus (3):&lt;/span&gt;&amp;#x000A;&lt;span id="LC209" class="line" lang="plaintext"&gt; xwm: use correct list link when iterating over `unpaired_surfaces`&lt;/span&gt;&amp;#x000A;&lt;span id="LC210" class="line" lang="plaintext"&gt; xwm: implement _NET_CLIENT_LIST_STACKING&lt;/span&gt;&amp;#x000A;&lt;span id="LC211" class="line" lang="plaintext"&gt; xwm: prevent X11 clients from blowing our stack by opening too many windows&lt;/span&gt;&amp;#x000A;&lt;span id="LC212" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC213" class="line" lang="plaintext"&gt;Yuya Nishihara (3):&lt;/span&gt;&amp;#x000A;&lt;span id="LC214" class="line" lang="plaintext"&gt; Revert "xcursor: use strncat instead of strncpy"&lt;/span&gt;&amp;#x000A;&lt;span id="LC215" class="line" lang="plaintext"&gt; xcursor: use memcpy() to append string of known size&lt;/span&gt;&amp;#x000A;&lt;span id="LC216" class="line" lang="plaintext"&gt; virtual_keyboard: Emulate key release events on destroy&lt;/span&gt;&amp;#x000A;&lt;span id="LC217" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC218" class="line" lang="plaintext"&gt;ayaka (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC219" class="line" lang="plaintext"&gt; render: make GLES2 renderer optional&lt;/span&gt;&amp;#x000A;&lt;span id="LC220" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC221" class="line" lang="plaintext"&gt;nyorain (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC222" class="line" lang="plaintext"&gt; render: Assert that texture dimensions are &amp;gt; 0&lt;/span&gt;&amp;#x000A;&lt;span id="LC223" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC224" class="line" lang="plaintext"&gt;tomKPZ (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC225" class="line" lang="plaintext"&gt; Fix stuck keys on X11 backend&lt;/span&gt;&amp;#x000A;&lt;span id="LC226" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC227" class="line" lang="plaintext"&gt;zccrs (4):&lt;/span&gt;&amp;#x000A;&lt;span id="LC228" class="line" lang="plaintext"&gt; Make the xdg_popup_get_position to public&lt;/span&gt;&amp;#x000A;&lt;span id="LC229" class="line" lang="plaintext"&gt; render/gles2: add wlr_renderer_is_gles2&lt;/span&gt;&amp;#x000A;&lt;span id="LC230" class="line" lang="plaintext"&gt; render/pixman: add wlr_*_is_pixman and wlr_pixman_texture_get_image&lt;/span&gt;&amp;#x000A;&lt;span id="LC231" class="line" lang="plaintext"&gt; render: add get native paint target of renderer&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&amp;#x000A;&lt;copy-code&gt;&lt;/copy-code&gt;&amp;#x000A;&lt;/div&gt;&amp;#x000A;&lt;/details&gt;&amp;#x000A;&lt;h2 data-sourcepos="248:1-248:24" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-changes-for-packagers" class="anchor" href="#changes-for-packagers" aria-hidden="true"&gt;&lt;/a&gt;Changes for packagers&lt;/h2&gt;&amp;#x000A;&lt;ul data-sourcepos="250:1-253:0" dir="auto"&gt;&amp;#x000A;&lt;li data-sourcepos="250:1-250:268"&gt;&amp;#x000A;&lt;strong&gt;session: Remove logind backend&lt;/strong&gt; (#2786) and &lt;strong&gt;session: Remove direct and noop backends&lt;/strong&gt; (#2839): wlroots now depends on &lt;a href="https://git.sr.ht/~kennylevinsen/seatd/" rel="nofollow noreferrer noopener" target="_blank"&gt;libseat&lt;/a&gt; for logind support (instead of depending on systemd/elogind) and for daemon-less operation.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="251:1-251:103"&gt;&amp;#x000A;&lt;strong&gt;util/uuid: replace with util/token, remove libuuid&lt;/strong&gt; (#2833): wlroots no longer depends on libuuid.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="252:1-253:0"&gt;&amp;#x000A;&lt;strong&gt;render: make GLES2 renderer optional&lt;/strong&gt; (&lt;a href="/wlroots/wlroots/-/commit/ed1924800de905f5462c8cc6e36fbc60b69d3030" data-original="ed1924800de905f5462c8cc6e36fbc60b69d3030" data-link="false" data-link-reference="false" data-project="12103" data-commit="ed1924800de905f5462c8cc6e36fbc60b69d3030" data-reference-type="commit" data-container="body" data-placement="top" title="render: make GLES2 renderer optional" class="gfm gfm-commit has-tooltip"&gt;ed192480&lt;/a&gt;): GLES2 is now an optional dependency (note, many compositors still depend on GLES2)&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;h2 data-sourcepos="254:1-254:35" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-breaking-changes-for-compositors" class="anchor" href="#breaking-changes-for-compositors" aria-hidden="true"&gt;&lt;/a&gt;Breaking changes for compositors&lt;/h2&gt;&amp;#x000A;&lt;p data-sourcepos="256:1-256:42" dir="auto"&gt;These changes can affect most compositors.&lt;/p&gt;&amp;#x000A;&lt;ul data-sourcepos="258:1-269:0" dir="auto"&gt;&amp;#x000A;&lt;li data-sourcepos="258:1-258:121"&gt;&amp;#x000A;&lt;strong&gt;render: drop &lt;code&gt;wlr_renderer_blit_dmabuf&lt;/code&gt;&lt;/strong&gt; (#2789): this functionality can be replaced with &lt;code&gt;wlr_renderer_bind_buffer&lt;/code&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="259:1-259:90"&gt;&amp;#x000A;&lt;strong&gt;render: remove &lt;code&gt;wlr_texture_to_dmabuf&lt;/code&gt;&lt;/strong&gt; (#2806): instead, use &lt;code&gt;wlr_buffer_get_dmabuf&lt;/code&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="260:1-260:99"&gt;&amp;#x000A;&lt;strong&gt;render: drop support for ellipses&lt;/strong&gt; (#2808): instead, use rects or roll your own OpenGL shaders&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="261:1-261:126"&gt;&amp;#x000A;&lt;strong&gt;Drop gtk-primary-selection support&lt;/strong&gt; (#2460): this protocol has been superseded by the standard primary-selection protocol&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="262:1-262:41"&gt;&amp;#x000A;&lt;strong&gt;Remove &lt;code&gt;WLR_HAS_XCB_ERRORS&lt;/code&gt;&lt;/strong&gt; (#2825)&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="263:1-263:140"&gt;&amp;#x000A;&lt;strong&gt;session: Remove logind backend&lt;/strong&gt; (#2786): libseat is now required for logind. &lt;code&gt;WLR_HAS_SYSTEMD&lt;/code&gt; and &lt;code&gt;WLR_HAS_ELOGIND&lt;/code&gt; have been removed.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="264:1-264:176"&gt;&amp;#x000A;&lt;strong&gt;session: Remove direct and noop backends&lt;/strong&gt; (#2839): libseat is now required unconditionally. &lt;code&gt;WLR_HAS_LIBSEAT&lt;/code&gt; has been removed. &lt;code&gt;wlr/session/interface.h&lt;/code&gt; has been removed.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="265:1-265:156"&gt;&amp;#x000A;&lt;strong&gt;util/uuid: replace with util/token, remove libuuid&lt;/strong&gt; (#2833): &lt;code&gt;WLR_HAS_XDG_FOREIGN&lt;/code&gt; has been removed, because xdg-foreign support is now always enabled.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="266:1-266:134"&gt;&amp;#x000A;&lt;strong&gt;render: remove &lt;code&gt;wlr_texture_get_size&lt;/code&gt;&lt;/strong&gt; (#2922): compositors can just access the &lt;code&gt;wlr_texture.width&lt;/code&gt; and &lt;code&gt;height&lt;/code&gt; fields directly.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="267:1-267:164"&gt;&amp;#x000A;&lt;strong&gt;surface: allow placing subsurfaces below parent&lt;/strong&gt; (#2948): &lt;code&gt;wlr_surface.subsurfaces&lt;/code&gt; has been split into two lists: &lt;code&gt;subsurfaces_above&lt;/code&gt; and &lt;code&gt;subsurfaces_below&lt;/code&gt;.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="268:1-269:0"&gt;&amp;#x000A;&lt;strong&gt;matrix: deprecate &lt;code&gt;wlr_matrix_projection&lt;/code&gt;&lt;/strong&gt; (#2846)&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;h2 data-sourcepos="270:1-270:53" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-breaking-changes-for-custom-backends-and-renderers" class="anchor" href="#breaking-changes-for-custom-backends-and-renderers" aria-hidden="true"&gt;&lt;/a&gt;Breaking changes for custom backends and renderers&lt;/h2&gt;&amp;#x000A;&lt;p data-sourcepos="272:1-273:20" dir="auto"&gt;These changes are unlikely to affect compositors that don't have a custom&amp;#x000A;backend or renderer.&lt;/p&gt;&amp;#x000A;&lt;ul data-sourcepos="275:1-280:190" dir="auto"&gt;&amp;#x000A;&lt;li data-sourcepos="275:1-275:82"&gt;&amp;#x000A;&lt;strong&gt;render: rename &lt;code&gt;get_dmabuf_render_formats&lt;/code&gt; into &lt;code&gt;get_render_formats&lt;/code&gt;&lt;/strong&gt; (#2858)&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="276:1-276:158"&gt;&amp;#x000A;&lt;strong&gt;linux-dmabuf-v1: split params and buffer&lt;/strong&gt; (#2848): &lt;code&gt;wlr_dmabuf_v1_buffer_from_params_resource&lt;/code&gt; and &lt;code&gt;wlr_linux_dmabuf_v1_from_resource&lt;/code&gt; have been removed.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="277:1-277:57"&gt;&amp;#x000A;&lt;strong&gt;buffer: add format param to &lt;code&gt;get_data_ptr&lt;/code&gt;&lt;/strong&gt; (#2894).&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="278:1-278:109"&gt;&amp;#x000A;&lt;strong&gt;&lt;code&gt;wlr_allocator_autocreate&lt;/code&gt;&lt;/strong&gt; (#2884): renderers must implement the new &lt;code&gt;get_render_buffer_caps&lt;/code&gt; function.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="279:1-279:162"&gt;&amp;#x000A;&lt;strong&gt;Cache and re-use DMA-BUF textures&lt;/strong&gt; (#2851): renderers must now implement the new &lt;code&gt;wlr_renderer_impl.texture_from_buffer&lt;/code&gt; function to import client DMA-BUFs.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="280:1-280:190"&gt;&amp;#x000A;&lt;strong&gt;render/pixman: avoid copy when creating textures&lt;/strong&gt; (#2892): renderers must now implement the new &lt;code&gt;wlr_renderer_impl.texture_from_buffer&lt;/code&gt; function to import client shared memory buffers.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;</content> + <updated>2021-11-01T16:10:07Z</updated> + <media:thumbnail width="40" height="40" url="https://secure.gravatar.com/avatar/1ce071dd3264c7d9f5d9c0b7137faa6b?s=80&amp;d=identicon"/> + <author> + <name>Simon Ser</name> + <email>contact@emersion.fr</email> + </author> +</entry> +<entry> + <id>https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.13.0</id> + <link href="https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.13.0"/> + <title>0.13.0</title> + <summary>wlroots 0.13.0 + +Andri Yngvason (1): + types/seat: Clear focus in wlr_seat_destroy() + +Ariadne Conill (1): + drm: add fallback drmModeAddFB for drivers which do not support drmModeAddFB2 + +Brandon Dowdy (7): + examples: remove dependency on wlr_egl from clients + render/egl: remove wlr_egl_{create,destroy}_surface + render/egl: remove *config_attribs and wlr_egl-&gt;config + examples: remove "major" and "minor" from egl_common.c + render/egl: add check for EGL_KHR_surfaceless_context + examples/egl_common: make attribs const + region: remove leftover description of resource_list + +BrassyPanache (1): + Expose ICCCM input status + +Chris Chamberlain (1): + Free xwayland cursor in wlr_xwayland_destroy + +Daniel Kondor (1): + layer-shell: allow new values for keyboard-interactivity + +Dominik Honnef (1): + xwayland: use pipe instead of SIGUSR1 to signal readiness + +Ilia Bozhinov (10): + texture: document that functions should not be called while rendering + xwm: add wlr_xwayland_surface_restack() + drm: do not unset make/model before emitting destroy event + egl: fix memory leak + noop: listen to display destroy and destroy the backend + util: add support for generating UUIDs + xdg-shell: add wlr_xdg_toplevel_set_parent + types: add wlr_xdg_foreign_registry + types: add wlr_xdg_foreign_v1 + types: add wlr_xdg_foreign_v2 + +Ilia Mirkin (8): + backend/x11: set a blank cursor rather than hiding globally + backend/x11: make sure output transform matrix is initialized + backend/x11: add support for scanout mode + backend/x11: skip events we don't care about + backend/x11: keep track of exposed rects, add them to damage regions + xwayland: free render picture backing cursor + backend/x11: use native cursors + backend/x11: clamp hotspot to texture bounds + +Isaac Freund (28): + Replace wlr_key_state with wl_keyboard_key_state + Use uint32_t in wlr_renderer_begin signature + Remove unneeded includes from wlr_input_device.h + backend/libseat: fix change_vt return value + wlr-output-management: add missing NULL check + screencopy: handle compositor not setting damage + screencopy: use output transform for damage copy + screencopy: check if damage committed before copy + screencopy: don't use output transform for damage copy + docs: fix error in wlr_output_set_damage() comment + xwayland: avoid crash on repeated server_finish_display() call + subsurface: handle NULL parent in get_root_surface + toplevel-management: ignore inert seats + toplevel-management: handle strdup failure + toplevel-management: avoid redundant state events + docs: wlr_surface_from_resource cannot return NULL + primary selection: destroy devices before manager + gtk primary selection: destroy devices before manager + layer shell: advertise version 3 + xdg shell: make unconstrain_from_box arg const + xdg shell: add wlr_xdg_surface_for_each_popup_surface() + xdg shell: add wlr_xdg_surface_popup_surface_at() + layer shell: add wlr_layer_surface_v1_popup_surface_at() + xdg/layer shell: reduce code duplication in iterators + output-management: use same types as wlr_output + xdg shell: remove wlr_xdg_surface_for_each_popup() + layer shell: rename popup iterator for consistency + xdg-output: destroy outputs before manager + +Justus Rossmeier (1): + tablet_v2: Fix implicit grab end detection + +Kenny Levinsen (7): + backend/drm: Use legacy gamma size for legacy backend + surface: Make send_enter store entered outputs + backend/wayland: Avoid uninitialized read + wlr_seat_pointer: Remove log on notify_button + backend/session/libseat: Set loglevel to INFO + docs: Minor libseat corrections + xdg_shell: Fix invert_y of top right anchor + +Lukas Märdian (2): + Fix false positive -Wstringop-truncation + xcursor: use strncat instead of strncpy + +Manuel Stoeckl (3): + xwayland/xwm: make atom_map const + xcursor: make cursor data and metadata const + Make implementation function lists static const + +Marten Ringwelski (1): + wlr-output-management: Handle modes added after initializing + +Mykola Orliuk (8): + backend/wayland: Bind seat listener to wlr_wl_seat + backend/wayland: Link input devices with seats + backend/wayland: Add registering multiple seats + backend/wayland: Use seat name in input names + backend/wayland: Listen to pointers from all seats + backend/wayland: Bind pointer listener to seat + backend/wayland: Add active pointer per host seat + backend/wayland: Set cursor indivdualy per output + +Quantum (1): + render/wlr_texture: clamp texture coordinates to edge by default + +Ronan Pigott (2): + render/egl: recognize EGL_BAD_DEVICE_EXT error + backend/drm: avoid gcc stringop-truncation warning + +Rouven Czerwinski (1): + util: fix uuid support for freebsd + +Simon Ser (287): + backend/libinput: require libinput 1.14 + render: introduce wlr_allocator + render: introduce wlr_gbm_allocator + render/drm_format_set: introduce wlr_drm_format_dup + render: introduce wlr_swapchain + buffer: add wlr_client_buffer_get + render: introduce wlr_renderer_bind_buffer + render/gles2: implement wlr_renderer_bind_buffer + render/gles2: fix y-inverted output when rendering to buffer + backend/drm: use wlr_swapchain + render/swapchain: add support for buffer age + backend/drm: add support for wlr_swapchain buffer age + backend/drm: get rid of wlr_drm_fb_type + backend/drm: add support for wlr_swapchain multi-GPU + backend/drm: check drm_surface_render_black_frame return value + render/egl: introduce wlr_egl_dup_drm_fd + render: introduce wlr_renderer_get_drm_fd + backend/headless: switch to wlr_swapchain + backend/headless: implement export_dmabuf + build: improve summary via bool_yn + render/egl: stop including eglmesaext.h + backend/session: don't return FD on failure in open_file + backend/session: operate on wlr_device + backend/session: filter udev events by sysname + backend/session: introduce wlr_session.events.add_drm_card + backend/session: wait for DRM device if none found + Revert "session/logind: support CanGraphical property" + backend/session: replace session_signal with events.active + backend/session/logind: log when using XDG_SESSION_ID + backend/session: add a timeout waiting for GPUs + backend/x11: log errors + backend/x11: log unhandled X11 events + backend/x11: log unhandled client messages + backend/drm: stop force-probing connectors + backend/wayland: don't set EGL visual + render/egl: don't rely on being able to open primary node + render: expand wlr_renderer_get{,_dmabuf}_formats docs + render: remove wlr_renderer_format_supported + render: introduce wlr_renderer_get_dmabuf_render_formats + backend/headless: use a format suitable for rendering + render: rename wlr_renderer_get_dmabuf_formats + render: rename wlr_renderer_get_formats + render: assert {X,A}RGB8888 are supported + render/egl: remove wlr_egl.external_only_dmabuf_formats + backend/drm: rotation is a plane property + backend/drm: "scaling mode" is a connector property + Revert "backend/drm: stop force-probing connectors" + xwayland: add -core to flags + build: add leftover WLR_HAS_LIBCAP + backend/drm: take a wlr_drm_format in init_drm_surface + render/drm_format_set: introduce wlr_drm_format_intersect + backend/drm: query render formats + backend/drm: remove unused if in drm_connector_move_cursor + backend/session/libseat: set XDG_SESSION_TYPE + render/egl: support config-less wlr_egl + backend/headless: create a config-less EGL context + backend/drm: use EGL_PLATFORM_GBM_KHR + backend/drm: unset current surface before importing + render/drm_format_set: allocate using cap when duplicating + backend/drm: stop tracking overlay planes + backend/headless: add support for direct scan-out + backend/drm: fix missing wlr_drm_format.cap + render/drm_format_set: assert len &lt;= cap when duplicating + backend/drm: remove EGL config + render/gles2: don't eglGetConfigAttrib on EGL_NO_CONFIG_KHR + render/gles2: query alpha size from render buffer + output: improve basic test logging + backend/drm: remove workaround for amdgpu DP MST + output: stop assuming a frame is pending in init + backend/wayland: stop rendering black frame on init + backend/wayland: use wlr_swapchain for main surface + backend/wayland: use wlr_swapchain for cursor surface + build: move wayland-egl dependency to examples/ + backend/wayland: query render formats + backend/x11: switch to wlr_swapchain + backend/x11: query modifiers supported by X11 server + backend/x11: fix xinput mask mixed up with present + backend/drm: stop using GBM flags + Remove inline keyword + render/gles2: require GL_EXT_unpack_subimage + backend/drm: dup FD before wlr_gbm_allocator_create + backend: use fcntl(F_DUPFD_CLOEXEC) instead of dup + backend/drm: add wlr_drm_connector.backend + backend/headless: select the rendering device ourselves + backend/x11: fix DRI3 formats not used + render/allocator: ignore NULL in wlr_allocator_destroy + backend/drm: remove nouveau workaround + backend/drm: add wlr_drm_backend.name + backend/drm: print DRM device name when scanning connectors + render/drm_format_set: add wlr_drm_format_{create,add} + backend/drm: use wlr_drm_format_{create,add} + backend/x11: use DRI3Open to get DRM FD + util/time: add timespec_from_nsec + backend/x11: send more precise output present events + backend/drm: introduce wlr_drm_conn_log + backend/drm: introduce wlr_drm_connector.name + backend/drm: refactor wlr_output destruction + backend/drm: remove unused wlr_drm_plane.drm_format + backend/wayland: remove EGL config + backend/wayland: re-use wl_buffers + backend/x11: re-use pixmaps + backend/x11: destroy buffers when destroying output + backend/drm: don't save texture in gbm_bo user data + backend/drm: grab DMA-BUF from wlr_buffer instead of gbm_bo + backend/drm: drop export_drm_bo + backend/drm: make drm_fb_acquire return a FB ID + backend/drm: remove drm_fb_acquire + backend/drm: error on size mismatch in drm_surface_blit + backend/drm: destroy DRM connectors that disappear + backend/drm: assert connector state after wlr_output_destroy + backend/drm: use plural form for possible_crtcs + backend/drm: don't retry page-flip when modifiers are unsupported + Remove contrib/_incr_version + docs/env_vars: _WAYLAND_DISPLAY isn't used anymore + docs/env_vars: document seatd session + backend/drm: log whether ADDFB2 modifiers are supported + backend/drm: add special case for cursor in add_plane + backend/drm: make drmModePlane arg in add_plane const + backend/drm: use connector log helpers in atomic backend + client-buffer: remove unnecessary wlr_resource_get_buffer_size + Stop using wlr_texture_get_size + backend/drm: make listener names more idiomatic + backend/x11: implement a real rendering loop + backend/x11: create per-window present event contexts + backend/drm: force LINEAR for cursor plane formats + render/drm_format_set: add special case for LINEAR-only formats + backend/drm: extract linear format creation into function + backend/drm: remove special linear case for cursor plane + Remove wlr_create_renderer_func_t + backend/x11: always open render node + backend/x11: print version on extension error + backend/drm: ignore hotplug events while inactive + backend/drm: stash pending page-flip CRTC + examples: remove visual for EGL_PLATFORM_WAYLAND_EXT + examples: request an EGL config + backend/wayland: re-use cursor wl_buffers + backend/session: allow wlr_session_find_gpus to return an error + backend/wayland: remove unnecessary flags from event source + render: remove EGL config and visual from wlr_renderer_autocreate + backend/drm: don't log errno on plane_get_next_fb failure + render/egl: document that config may be zero + render/egl: use KHR function pointer type + render/egl: document NULL config_attribs passed to wlr_egl_init + backend/drm: make wlr_drm_plane.{pending,queued,current}_fb pointers + backend/drm: introduce drm_fb_create + backend/drm: add wlr_drm_buf.local_wlr_buf + backend/drm: only keep track of local buffer + backend/drm: re-use FBs + backend/drm: stop using surface size for BO + xwayland: remove protocol debug messages + protocol: add drm.xml + backend/wayland: use the EGL GBM platform + output-damage: use output commit event + gamma-control-v1: schedule frame when resetting gamma LUT + build: remove Clang workarounds + render/gles2: fix EGL use-after-free + build: use more consistent feature names in summary + render/egl: remove support for EGL_NATIVE_VISUAL_ID + render/egl: remove wlr_egl_swap_buffers + render/egl: replace init/finish with create/destroy + render/egl: remove surface and buffer age args from make_current + backend/drm: fix segfault in page_flip_handler + backend/drm: remove unnecessary wlr_drm_fb.wlr_buf check + render/gles2: save/restore EGL context in destroy_buffer + render: document wlr_renderer_bind_buffer + backend: remove unnecessary GLES2 includes + output-damage: stop listening to scale/transform events + output-layout: stop listening to scale/transform events + output: remove scale/transform events + render/gles2: restore EGL context after texture operations + render/gbm_allocator: log GBM backend name + render/gbm_allocator: document that DRM primary FDs work + render/gbm_allocator: fix gbm_device use-after-free + render: extract gles2 build files to subdir + backend: add get_drm_fd to interface + backend/multi: implement get_drm_fd + backend/wayland: implement get_drm_fd + backend/drm: implement get_drm_fd + backend/x11: implement get_drm_fd + backend/headless: implement get_drm_fd + render/gles2: make EGL context current in bind_buffer + output-damage: stop relying on output pending state on commit + output: send commit event after pending state is cleared + render/egl: fix gbm_device use-after-free + render: introduce private wlr_renderer_autocreate_with_drm_fd + backend/drm: use local DRM FD for wlr_rend + backend/headless: create renderer after wlr_backend_init + render/gbm_allocator: export to DMA-BUF on init + render/gbm_allocator: set modifier to INVALID if implicit + backend/x11: log when creating X11 backend + backend/x11: log DRM node name + backend/x11: add support for DRI3 1.0 + backend/x11: add xcb_dri3_pixmap_from_buffers check for n_planes + backend/drm: add support for the subconnector property + backend/drm: add wlr_drm_connector_get_id + backend/drm: fix modifiers for cursor plane buffers + backend/x11: fix region not being actually used + Revert "render/egl: remove unused gbm_device member" + Revert "render: add wlr_egl_create_from_drm_fd function" + render/gbm_allocator: avoid drmPrimeHandleToFD + backend/drm: document wlr_drm_plane surface fields + backend/drm: simplify drm_fb_lock_surface + backend/drm: don't blit in drm_fb_import + xwayland: drop unused enum net_wm_state_action + render/egl: fix NULL dereference when using llvmpipe + xwayland: fix extraneous NET_WM_STATE log messages + backend/x11: remove output_set_refresh + backend/wayland: remove unnecessary cast + render/egl: log whether DMA-BUF modifiers are supported + render/dmabuf: cleanup on wlr_dmabuf_attributes_copy error + render/dmabuf: make src arg const in wlr_dmabuf_attributes_copy + region: make wlr_region_create private + region: remove resource_list arg from region_create + backend/wayland: flush remote display + Fix bad indentation + readme: fix typo in xcb-icccm dependency + render/gles2: remove YUV blocklist + backend/x11: drop x11-xcb dependency + seat: use WL_SEAT_ERROR_CAPABILITY + surface: check buffer size is compatible with scale + build: remove extra whitespace + examples: drop wlroots dep from egl_common.c + examples: drop wlr/render/egl.h include from client examples + examples: remove wlroots dep from client examples + build: use dictionnary for features instead of configuration_data + build: set have_* dep variables for our features + build: set pkg-config variables for our features + Replace leftover conf_data with features + build: bump meson version to 0.56.0 + surface: move INVALID_SIZE check into surface_state_finalize + surface: don't send protocol error on invalid buffer size + backend: add error messages in attach_render impls + render/gles2: check buffer stride when uploading texture + render/gles2: remove current_buffer checks + render/shm_format: add wl_shm_format conversion helpers + render/gles2: convert format table to DRM formats + render/gles2: replace wlr_gles2_texture.wl_format with drm_format + render: use DRM formats in wlr_renderer_get_shm_texture_formats + output: use DRM format in wlr_output_preferred_read_format + render: use DRM formats in wlr_renderer_read_pixels + render: use DRM formats in wlr_texture_from_pixels + Remove unnecessary wayland-server-protocol.h includes + build: add -Wformat=2 -Walloca + build: rollback -Wformat=2 + buffer: add missing convert_wl_shm_format_to_drm call + Fix wl_shm_format passed to wlr_texture_from_pixels + examples: add libdrm partial dependency for compositors + readme: make it clear build/ is a dir + readme: use spaces for list indent + readme: use references for links + backend/session: fix KMS device filtering + xwayland: add dependency on xwayland + xwayland: check executable exists on init + xwayland: use -listenfd if available + backend/drm: add new writeback and SPI connector types + output: document hotspot coord space + output: fix transform matrix for 90/270 rotations + render/egl: don't fail on EGL_MESA_device_software + screencopy: stop using wlr_renderer_blit_dmabuf + Fix buffer blit matrices + ci: update xwayland dep on alpine + examples/dmabuf-capture: stop using av_init_packet + linux-dmabuf-v1: always advertise support for implicit modifiers + surface: introduce commit sequence numbers + surface: introduce cached states + subsurface: use cached surface state + subsurface: immediately unlock cached state in set_desync + render/egl, backend/wayland: add workaround for split render/display setups + xwayland: assume no WM_HINTS means window wants input + xwayland: require xcb-icccm + xwayland: use ICCCM state defines from xcb-icccm + backend/drm: use format table in test_buffer + build: add subproject fallback for libseat + surface: make wlr_surface_create private + surface: remove resource_list arg from surface_create + render/egl: stop relying on platform for high priority + backend/drm: try to import buffer when testing it + backend/drm: improve logs in drm_fb_create + backend/drm: reject DMA-BUFs with flags + backend/x11: reject DMA-BUFs with flags + build: simplify HAS_LIBUUID definition + build: use get_variable instead of get_pkgconfig_variable + backend/drm: don't set NONBLOCK with TEST_ONLY + backend/drm: downgrade test-only commit failure log level + backend/drm: use atomic test-only commits for direct scan-out + backend/drm: stop testing for buffer in drm_connector_commit_buffer + build: bump to v0.13.0 + +Simon Zeni (15): + ci: build tinywl + tinywl: fix wlr_backend_autocreate call + backend: remove wlr_egl from all backends + remove unnecessary egl includes + render: drop egl parameters from wlr_renderer_autocreate + render: remove egl include from wlr_renderer + render: add wlr_egl_create_from_drm_fd function + render/egl: remove unused gbm_device member + render/egl: fail to create wlr_egl on software renderer + output: improve transform matrix calculation + render/pixel_format: introduce pixel format info table + Move render/shm_format functions to render/pixel_format + backend/drm: use pixel format table in renderer + render/pixel_format: add XBGR8888 and ABGR8888 format + render/gles2: remove depth and bpp gles2_pixel_format, use drm pixel format + +Stephane Chauveau (1): + backend/drm: don't assume possible_crtcs has only one bit set + +Tadeo Kondrak (3): + xdg-foreign: Make imported object inert when exported is destroyed + xdg-foreign: rename finish_* functions to destroy_* + text_input_v3: correct typo in enum field + +Tudor Brindus (21): + xwayland: use wlr_log_errno instead of %m + xwayland/selection: prevent fd leak on unsupported MIME type + xwayland/selection: rename Wayland-facing data and helpers + xwayland/selection: make `xwm_data_source_write` return 0 on failure + xwayland/selection: explicitly bail if first write to Wayland fd fails + xwayland/selection: simplify incremental transfer control flow + xwayland/selection: extract out property requests + xwayland/selection: refactor remaining incremental transfer code + xwayland/selection: end incr transfer on empty prop, not next selection + xwayland/selection: don't request another selection while one is pending + xwayland/selection: don't leak Wayland fd if ConvertSelection fails + xwayland/selection: destroy all selections on Xwayland restart + xwayland/selection: make xwm_selection_finish take a wlr_xwm_selection * + xwayland/selection: introduce `xwm_selection_transfer_init` + xwayland/selection: make xwm_selection_init take a wlr_xwm_selection * + xwayland/selection: use one X11 window per incoming transfer + xwayland/selection: use one target window per selection + xwayland/selection: allow simultaneous Wayland-to-X11 transfers + xwayland/selection: ignore requests for anything but the newest data + xwayland/selection: log when proxy window loses ownership + xwayland/selection: flush connection after changing xwm selection owner + +fwsmit (1): + examples/foreign-toplevel: Add documenation and output selection + +zccrs (2): + Use absolute paths in include in header files + render/egl: check "EGL_KHR_platform_gbm" for EGL gbm platform + +</summary> + <content type="html">&lt;p data-sourcepos="1:1-1:55" dir="auto"&gt;wlroots 0.13.0 includes the following breaking changes.&lt;/p&gt;&amp;#x000A;&lt;h3 data-sourcepos="3:1-3:36" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-breaking-changes-for-compositors" class="anchor" href="#breaking-changes-for-compositors" aria-hidden="true"&gt;&lt;/a&gt;Breaking changes for compositors&lt;/h3&gt;&amp;#x000A;&lt;p data-sourcepos="5:1-5:42" dir="auto"&gt;These changes can affect most compositors.&lt;/p&gt;&amp;#x000A;&lt;ul data-sourcepos="7:1-42:0" dir="auto"&gt;&amp;#x000A;&lt;li data-sourcepos="7:1-8:74"&gt;&amp;#x000A;&lt;strong&gt;Replace wlr_key_state with wl_keyboard_key_state&lt;/strong&gt; (#2446):&amp;#x000A;&lt;code&gt;enum wlr_key_state&lt;/code&gt; has been replaced with &lt;code&gt;enum wl_keyboard_key_state&lt;/code&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="9:1-9:62"&gt;&amp;#x000A;&lt;strong&gt;Use &lt;code&gt;uint32_t&lt;/code&gt; in &lt;code&gt;wlr_renderer_begin&lt;/code&gt; signature&lt;/strong&gt; (#2433)&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="10:1-10:64"&gt;&amp;#x000A;&lt;strong&gt;Remove unneeded includes from &lt;code&gt;wlr_input_device.h&lt;/code&gt;&lt;/strong&gt; (#2470)&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="11:1-15:57"&gt;&amp;#x000A;&lt;strong&gt;Renderer v6, incremental version&lt;/strong&gt; (#2240): some implicit assumptions about&amp;#x000A;&lt;code&gt;wlr_renderer&lt;/code&gt;'s EGL context no longer hold true. Compositors not using EGL&amp;#x000A;directly shouldn't be affected.&amp;#x000A;&lt;ul data-sourcepos="14:3-15:57"&gt;&amp;#x000A;&lt;li data-sourcepos="14:3-14:65"&gt;wlroots' framebuffer no longer is the EGL default framebuffer&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="15:3-15:57"&gt;wlroots' framebuffer no longer has a depth attachment&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="16:1-18:58"&gt;&amp;#x000A;&lt;strong&gt;Remove &lt;code&gt;wlr_create_renderer_func_t&lt;/code&gt;&lt;/strong&gt; (#2561)&amp;#x000A;&lt;ul data-sourcepos="17:3-18:58"&gt;&amp;#x000A;&lt;li data-sourcepos="17:3-17:192"&gt;&amp;#x000A;&lt;code&gt;wlr_backend_autocreate&lt;/code&gt;, &lt;code&gt;wlr_drm_backend_create&lt;/code&gt;, &lt;code&gt;wlr_headless_backend_create&lt;/code&gt;, &lt;code&gt;wlr_wl_backend_create&lt;/code&gt;, &lt;code&gt;wlr_x11_backend_create&lt;/code&gt; no longer take a &lt;code&gt;wlr_renderer_create_func_t&lt;/code&gt; parameter&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="18:3-18:58"&gt;The &lt;code&gt;wlr_renderer_create_func_t&lt;/code&gt; type has been removed&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="19:1-20:80"&gt;&amp;#x000A;&lt;strong&gt;backend/noop: listen to display destroy and destroy the backend&lt;/strong&gt; (#2583):&amp;#x000A;the noop backend should no longer be manually destroyed after the &lt;code&gt;wl_display&lt;/code&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="21:1-23:51"&gt;&amp;#x000A;&lt;strong&gt;xdg shell: remove &lt;code&gt;wlr_xdg_surface_for_each_popup&lt;/code&gt;&lt;/strong&gt; (#2610)&amp;#x000A;&lt;code&gt;wlr_xdg_surface_for_each_popup&lt;/code&gt; has been removed, use&amp;#x000A;&lt;code&gt;wlr_xdg_surface_for_each_popup_surface&lt;/code&gt; instead.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="24:1-26:48"&gt;&amp;#x000A;&lt;strong&gt;layer shell: rename popup iterator for consistency&lt;/strong&gt; (#2617):&amp;#x000A;&lt;code&gt;wlr_layer_surface_v1_for_each_popup&lt;/code&gt; has been renamed to&amp;#x000A;&lt;code&gt;wlr_layer_surface_v1_for_each_popup_surface&lt;/code&gt;.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="27:1-29:82"&gt;&amp;#x000A;&lt;strong&gt;Keyboard interactivity options&lt;/strong&gt; (#2555):&amp;#x000A;&lt;code&gt;wlr_layer_surface_v1_state.keyboard_interactivity&lt;/code&gt; has now the type&amp;#x000A;&lt;code&gt;enum zwlr_layer_surface_v1_keyboard_interactivity&lt;/code&gt; to reflect protocol changes.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="30:1-31:85"&gt;&amp;#x000A;&lt;strong&gt;output: remove scale/transform events&lt;/strong&gt; (#2631): the &lt;code&gt;scale&lt;/code&gt; and &lt;code&gt;transform&lt;/code&gt;&amp;#x000A;output events have been removed, compositors should use the &lt;code&gt;commit&lt;/code&gt; event instead.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="32:1-33:183"&gt;&amp;#x000A;&lt;strong&gt;output: send commit event after pending state is cleared&lt;/strong&gt; (#2630):&amp;#x000A;compositors can no longer read the to-be-committed state from &lt;code&gt;wlr_output.pending&lt;/code&gt; in an output &lt;code&gt;commit&lt;/code&gt; event handler. Instead, use the current state and &lt;code&gt;wlr_output_event_commit&lt;/code&gt;.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="34:1-35:152"&gt;&amp;#x000A;&lt;strong&gt;render/wlr_texture: clamp texture coordinates to edge by default&lt;/strong&gt; (#2476):&amp;#x000A;the GLES2 renderer no longer wraps textures with &lt;code&gt;GL_REPEAT&lt;/code&gt;. If you want to repeat a texture, manually change wlroots' default via &lt;code&gt;glTexParameteri&lt;/code&gt;.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="36:1-36:159"&gt;&amp;#x000A;&lt;strong&gt;text_input_v3: correct typo in enum field&lt;/strong&gt; (#2735): &lt;code&gt;WLR_TEXT_INPUT_v3_FEATURE_CONTENT_TYPE&lt;/code&gt; has been renamed to &lt;code&gt;WLR_TEXT_INPUT_V3_FEATURE_CONTENT_TYPE&lt;/code&gt;.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="37:1-42:0"&gt;&amp;#x000A;&lt;strong&gt;Stop using &lt;code&gt;wl_shm_format&lt;/code&gt;&lt;/strong&gt; (#2744): the renderer functions take &lt;code&gt;DRM_FORMAT_*&lt;/code&gt; values instead of &lt;code&gt;WL_SHM_FORMAT_*&lt;/code&gt;. Make sure you don't have any remaining &lt;code&gt;WL_SHM_FORMAT_*&lt;/code&gt; enum values in your compositor.&amp;#x000A;&lt;ul data-sourcepos="38:3-42:0"&gt;&amp;#x000A;&lt;li data-sourcepos="38:3-38:93"&gt;&amp;#x000A;&lt;code&gt;wlr_renderer_read_pixels&lt;/code&gt; now takes a DRM format code instead of an &lt;code&gt;enum wl_shm_format&lt;/code&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="39:3-39:106"&gt;&amp;#x000A;&lt;code&gt;wlr_renderer_get_shm_texture_formats&lt;/code&gt; now returns DRM format codes instead of an &lt;code&gt;enum wl_shm_format&lt;/code&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="40:3-40:93"&gt;&amp;#x000A;&lt;code&gt;wlr_renderer_read_pixels&lt;/code&gt; now takes a DRM format code instead of an &lt;code&gt;enum wl_shm_format&lt;/code&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="41:3-42:0"&gt;&amp;#x000A;&lt;code&gt;wlr_output_preferred_read_format&lt;/code&gt; now returns a DRM format code instead of an &lt;code&gt;enum wl_shm_format&lt;/code&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;h3 data-sourcepos="43:1-43:54" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-breaking-changes-for-custom-backends-and-renderers" class="anchor" href="#breaking-changes-for-custom-backends-and-renderers" aria-hidden="true"&gt;&lt;/a&gt;Breaking changes for custom backends and renderers&lt;/h3&gt;&amp;#x000A;&lt;p data-sourcepos="45:1-46:20" dir="auto"&gt;These changes are unlikely to affect compositors that don't have a custom&amp;#x000A;backend or renderer.&lt;/p&gt;&amp;#x000A;&lt;ul data-sourcepos="48:1-76:0" dir="auto"&gt;&amp;#x000A;&lt;li data-sourcepos="48:1-52:106"&gt;&amp;#x000A;&lt;strong&gt;render: add &lt;code&gt;wlr_renderer_get_dmabuf_render_formats&lt;/code&gt;&lt;/strong&gt; (#2483)&amp;#x000A;&lt;ul data-sourcepos="49:3-52:106"&gt;&amp;#x000A;&lt;li data-sourcepos="49:3-49:89"&gt;&amp;#x000A;&lt;code&gt;wlr_egl_get_dmabuf_formats&lt;/code&gt; has been renamed to &lt;code&gt;wlr_egl_get_dmabuf_texture_formats&lt;/code&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="50:3-50:89"&gt;&amp;#x000A;&lt;code&gt;wlr_renderer_get_formats&lt;/code&gt; has been renamed to &lt;code&gt;wlr_renderer_get_shm_texture_formats&lt;/code&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="51:3-51:99"&gt;&amp;#x000A;&lt;code&gt;wlr_renderer_get_dmabuf_formats&lt;/code&gt; has been renamed to &lt;code&gt;wlr_renderer_get_dmabuf_texture_formats&lt;/code&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="52:3-52:106"&gt;&amp;#x000A;&lt;code&gt;wlr_renderer_format_supported&lt;/code&gt; has been removed (instead, use &lt;code&gt;wlr_renderer_get_shm_texture_formats&lt;/code&gt;)&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="53:1-58:98"&gt;&amp;#x000A;&lt;strong&gt;backend/session: misc. refactoring, replace CanGraphical with udev&lt;/strong&gt; (#2465)&amp;#x000A;&lt;ul data-sourcepos="54:3-58:98"&gt;&amp;#x000A;&lt;li data-sourcepos="54:3-54:69"&gt;&amp;#x000A;&lt;code&gt;wlr_drm_backend_create&lt;/code&gt; takes a &lt;code&gt;wlr_device&lt;/code&gt; instead of a DRM FD&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="55:3-55:71"&gt;&amp;#x000A;&lt;code&gt;wlr_device.signal&lt;/code&gt; has been replaced by &lt;code&gt;wlr_device.events.change&lt;/code&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="56:3-56:81"&gt;&amp;#x000A;&lt;code&gt;wlr_session.session_signal&lt;/code&gt; has been replaced by &lt;code&gt;wlr_session.events.active&lt;/code&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="57:3-57:96"&gt;&amp;#x000A;&lt;code&gt;wlr_session_open_file&lt;/code&gt; and &lt;code&gt;wlr_session_close_file&lt;/code&gt; now take a &lt;code&gt;wlr_device&lt;/code&gt; instead of a FD&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="58:3-58:98"&gt;&amp;#x000A;&lt;code&gt;wlr_session_find_gpus&lt;/code&gt; now fills an array of &lt;code&gt;wlr_device&lt;/code&gt; pointers instead of an array of FDs&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="59:1-60:71"&gt;&amp;#x000A;&lt;strong&gt;backend/session: allow wlr_session_find_gpus to return an error&lt;/strong&gt; (#2578):&amp;#x000A;&lt;code&gt;wlr_session_find_gpus&lt;/code&gt; now returns a &lt;code&gt;ssize_t&lt;/code&gt; instead of a &lt;code&gt;size_t&lt;/code&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="61:1-65:95"&gt;&amp;#x000A;&lt;strong&gt;render/egl: remove unused features, introduce create/destroy&lt;/strong&gt; (#2623)&amp;#x000A;&lt;ul data-sourcepos="62:3-65:95"&gt;&amp;#x000A;&lt;li data-sourcepos="62:3-62:72"&gt;The &lt;code&gt;EGLint visual_id&lt;/code&gt; parameter of &lt;code&gt;wlr_egl_init&lt;/code&gt; has been removed.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="63:3-63:44"&gt;&amp;#x000A;&lt;code&gt;wlr_egl_swap_buffers&lt;/code&gt; has been removed.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="64:3-64:103"&gt;&amp;#x000A;&lt;code&gt;wlr_egl_init&lt;/code&gt; and &lt;code&gt;wlr_egl_finish&lt;/code&gt; have been replaced with &lt;code&gt;wlr_egl_create&lt;/code&gt; and &lt;code&gt;wlr_egl_destroy&lt;/code&gt;.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="65:3-65:95"&gt;&amp;#x000A;&lt;code&gt;wlr_egl_make_current&lt;/code&gt; no longer takes the arguments &lt;code&gt;EGLSurface surface, int *buffer_age&lt;/code&gt;.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="66:1-67:49"&gt;&amp;#x000A;&lt;strong&gt;Remove &lt;code&gt;wlr_egl&lt;/code&gt; from backends&lt;/strong&gt; (#2602): &lt;code&gt;wlr_renderer_autocreate&lt;/code&gt; no&amp;#x000A;longer takes a &lt;code&gt;struct wlr_egl *&lt;/code&gt; as parameter.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="68:1-70:44"&gt;&amp;#x000A;&lt;strong&gt;Drop EGL from wlr_renderer_autocreate&lt;/strong&gt; (#2639): &lt;code&gt;wlr_renderer_autocreate&lt;/code&gt;&amp;#x000A;no longer takes the arguments &lt;code&gt;EGLenum platform, void *remote_display&lt;/code&gt;.&amp;#x000A;Instead it takes a &lt;code&gt;struct wlr_backend *&lt;/code&gt;.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="71:1-71:106"&gt;&amp;#x000A;&lt;strong&gt;render/egl: remove &lt;code&gt;config_attribs&lt;/code&gt;, &lt;code&gt;wlr_egl.config&lt;/code&gt; and &lt;code&gt;wlr_egl_{create,destroy}_surface&lt;/code&gt;&lt;/strong&gt; (#2666)&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="72:1-72:52"&gt;&amp;#x000A;&lt;strong&gt;region: make wlr_region_create private&lt;/strong&gt; (#2662)&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="73:1-73:54"&gt;&amp;#x000A;&lt;strong&gt;surface: make wlr_surface_create private&lt;/strong&gt; (#2814)&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="74:1-74:75"&gt;&amp;#x000A;&lt;strong&gt;Add static+const qualifiers&lt;/strong&gt; (#2720): &lt;code&gt;wlr_tablet.impl&lt;/code&gt; is now &lt;code&gt;const&lt;/code&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="75:1-76:0"&gt;&amp;#x000A;&lt;strong&gt;Update output transform matrix calculation&lt;/strong&gt; (#2770): the projection has been moved from &lt;code&gt;wlr_output.transform_matrix&lt;/code&gt; to the GLES2 renderer. Compositors using &lt;code&gt;wlr_output.transform_matrix&lt;/code&gt; only with the GLES2 renderer don't need an update.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;details&gt;&amp;#x000A;&lt;summary&gt;Full changelog&lt;/summary&gt;&amp;#x000A;&lt;div class="gl-relative markdown-code-block js-markdown-code"&gt;&amp;#x000A;&lt;pre data-sourcepos="81:1-548:3" class="code highlight js-syntax-highlight language-plaintext" lang="plaintext" data-canonical-lang="" v-pre="true"&gt;&lt;code&gt;&lt;span id="LC1" class="line" lang="plaintext"&gt;Andri Yngvason (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC2" class="line" lang="plaintext"&gt; types/seat: Clear focus in wlr_seat_destroy()&lt;/span&gt;&amp;#x000A;&lt;span id="LC3" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC4" class="line" lang="plaintext"&gt;Ariadne Conill (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC5" class="line" lang="plaintext"&gt; drm: add fallback drmModeAddFB for drivers which do not support drmModeAddFB2&lt;/span&gt;&amp;#x000A;&lt;span id="LC6" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC7" class="line" lang="plaintext"&gt;Brandon Dowdy (7):&lt;/span&gt;&amp;#x000A;&lt;span id="LC8" class="line" lang="plaintext"&gt; examples: remove dependency on wlr_egl from clients&lt;/span&gt;&amp;#x000A;&lt;span id="LC9" class="line" lang="plaintext"&gt; render/egl: remove wlr_egl_{create,destroy}_surface&lt;/span&gt;&amp;#x000A;&lt;span id="LC10" class="line" lang="plaintext"&gt; render/egl: remove *config_attribs and wlr_egl-&amp;gt;config&lt;/span&gt;&amp;#x000A;&lt;span id="LC11" class="line" lang="plaintext"&gt; examples: remove "major" and "minor" from egl_common.c&lt;/span&gt;&amp;#x000A;&lt;span id="LC12" class="line" lang="plaintext"&gt; render/egl: add check for EGL_KHR_surfaceless_context&lt;/span&gt;&amp;#x000A;&lt;span id="LC13" class="line" lang="plaintext"&gt; examples/egl_common: make attribs const&lt;/span&gt;&amp;#x000A;&lt;span id="LC14" class="line" lang="plaintext"&gt; region: remove leftover description of resource_list&lt;/span&gt;&amp;#x000A;&lt;span id="LC15" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC16" class="line" lang="plaintext"&gt;BrassyPanache (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC17" class="line" lang="plaintext"&gt; Expose ICCCM input status&lt;/span&gt;&amp;#x000A;&lt;span id="LC18" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC19" class="line" lang="plaintext"&gt;Chris Chamberlain (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC20" class="line" lang="plaintext"&gt; Free xwayland cursor in wlr_xwayland_destroy&lt;/span&gt;&amp;#x000A;&lt;span id="LC21" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC22" class="line" lang="plaintext"&gt;Daniel Kondor (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC23" class="line" lang="plaintext"&gt; layer-shell: allow new values for keyboard-interactivity&lt;/span&gt;&amp;#x000A;&lt;span id="LC24" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC25" class="line" lang="plaintext"&gt;Dominik Honnef (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC26" class="line" lang="plaintext"&gt; xwayland: use pipe instead of SIGUSR1 to signal readiness&lt;/span&gt;&amp;#x000A;&lt;span id="LC27" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC28" class="line" lang="plaintext"&gt;Ilia Bozhinov (10):&lt;/span&gt;&amp;#x000A;&lt;span id="LC29" class="line" lang="plaintext"&gt; texture: document that functions should not be called while rendering&lt;/span&gt;&amp;#x000A;&lt;span id="LC30" class="line" lang="plaintext"&gt; xwm: add wlr_xwayland_surface_restack()&lt;/span&gt;&amp;#x000A;&lt;span id="LC31" class="line" lang="plaintext"&gt; drm: do not unset make/model before emitting destroy event&lt;/span&gt;&amp;#x000A;&lt;span id="LC32" class="line" lang="plaintext"&gt; egl: fix memory leak&lt;/span&gt;&amp;#x000A;&lt;span id="LC33" class="line" lang="plaintext"&gt; noop: listen to display destroy and destroy the backend&lt;/span&gt;&amp;#x000A;&lt;span id="LC34" class="line" lang="plaintext"&gt; util: add support for generating UUIDs&lt;/span&gt;&amp;#x000A;&lt;span id="LC35" class="line" lang="plaintext"&gt; xdg-shell: add wlr_xdg_toplevel_set_parent&lt;/span&gt;&amp;#x000A;&lt;span id="LC36" class="line" lang="plaintext"&gt; types: add wlr_xdg_foreign_registry&lt;/span&gt;&amp;#x000A;&lt;span id="LC37" class="line" lang="plaintext"&gt; types: add wlr_xdg_foreign_v1&lt;/span&gt;&amp;#x000A;&lt;span id="LC38" class="line" lang="plaintext"&gt; types: add wlr_xdg_foreign_v2&lt;/span&gt;&amp;#x000A;&lt;span id="LC39" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC40" class="line" lang="plaintext"&gt;Ilia Mirkin (8):&lt;/span&gt;&amp;#x000A;&lt;span id="LC41" class="line" lang="plaintext"&gt; backend/x11: set a blank cursor rather than hiding globally&lt;/span&gt;&amp;#x000A;&lt;span id="LC42" class="line" lang="plaintext"&gt; backend/x11: make sure output transform matrix is initialized&lt;/span&gt;&amp;#x000A;&lt;span id="LC43" class="line" lang="plaintext"&gt; backend/x11: add support for scanout mode&lt;/span&gt;&amp;#x000A;&lt;span id="LC44" class="line" lang="plaintext"&gt; backend/x11: skip events we don't care about&lt;/span&gt;&amp;#x000A;&lt;span id="LC45" class="line" lang="plaintext"&gt; backend/x11: keep track of exposed rects, add them to damage regions&lt;/span&gt;&amp;#x000A;&lt;span id="LC46" class="line" lang="plaintext"&gt; xwayland: free render picture backing cursor&lt;/span&gt;&amp;#x000A;&lt;span id="LC47" class="line" lang="plaintext"&gt; backend/x11: use native cursors&lt;/span&gt;&amp;#x000A;&lt;span id="LC48" class="line" lang="plaintext"&gt; backend/x11: clamp hotspot to texture bounds&lt;/span&gt;&amp;#x000A;&lt;span id="LC49" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC50" class="line" lang="plaintext"&gt;Isaac Freund (28):&lt;/span&gt;&amp;#x000A;&lt;span id="LC51" class="line" lang="plaintext"&gt; Replace wlr_key_state with wl_keyboard_key_state&lt;/span&gt;&amp;#x000A;&lt;span id="LC52" class="line" lang="plaintext"&gt; Use uint32_t in wlr_renderer_begin signature&lt;/span&gt;&amp;#x000A;&lt;span id="LC53" class="line" lang="plaintext"&gt; Remove unneeded includes from wlr_input_device.h&lt;/span&gt;&amp;#x000A;&lt;span id="LC54" class="line" lang="plaintext"&gt; backend/libseat: fix change_vt return value&lt;/span&gt;&amp;#x000A;&lt;span id="LC55" class="line" lang="plaintext"&gt; wlr-output-management: add missing NULL check&lt;/span&gt;&amp;#x000A;&lt;span id="LC56" class="line" lang="plaintext"&gt; screencopy: handle compositor not setting damage&lt;/span&gt;&amp;#x000A;&lt;span id="LC57" class="line" lang="plaintext"&gt; screencopy: use output transform for damage copy&lt;/span&gt;&amp;#x000A;&lt;span id="LC58" class="line" lang="plaintext"&gt; screencopy: check if damage committed before copy&lt;/span&gt;&amp;#x000A;&lt;span id="LC59" class="line" lang="plaintext"&gt; screencopy: don't use output transform for damage copy&lt;/span&gt;&amp;#x000A;&lt;span id="LC60" class="line" lang="plaintext"&gt; docs: fix error in wlr_output_set_damage() comment&lt;/span&gt;&amp;#x000A;&lt;span id="LC61" class="line" lang="plaintext"&gt; xwayland: avoid crash on repeated server_finish_display() call&lt;/span&gt;&amp;#x000A;&lt;span id="LC62" class="line" lang="plaintext"&gt; subsurface: handle NULL parent in get_root_surface&lt;/span&gt;&amp;#x000A;&lt;span id="LC63" class="line" lang="plaintext"&gt; toplevel-management: ignore inert seats&lt;/span&gt;&amp;#x000A;&lt;span id="LC64" class="line" lang="plaintext"&gt; toplevel-management: handle strdup failure&lt;/span&gt;&amp;#x000A;&lt;span id="LC65" class="line" lang="plaintext"&gt; toplevel-management: avoid redundant state events&lt;/span&gt;&amp;#x000A;&lt;span id="LC66" class="line" lang="plaintext"&gt; docs: wlr_surface_from_resource cannot return NULL&lt;/span&gt;&amp;#x000A;&lt;span id="LC67" class="line" lang="plaintext"&gt; primary selection: destroy devices before manager&lt;/span&gt;&amp;#x000A;&lt;span id="LC68" class="line" lang="plaintext"&gt; gtk primary selection: destroy devices before manager&lt;/span&gt;&amp;#x000A;&lt;span id="LC69" class="line" lang="plaintext"&gt; layer shell: advertise version 3&lt;/span&gt;&amp;#x000A;&lt;span id="LC70" class="line" lang="plaintext"&gt; xdg shell: make unconstrain_from_box arg const&lt;/span&gt;&amp;#x000A;&lt;span id="LC71" class="line" lang="plaintext"&gt; xdg shell: add wlr_xdg_surface_for_each_popup_surface()&lt;/span&gt;&amp;#x000A;&lt;span id="LC72" class="line" lang="plaintext"&gt; xdg shell: add wlr_xdg_surface_popup_surface_at()&lt;/span&gt;&amp;#x000A;&lt;span id="LC73" class="line" lang="plaintext"&gt; layer shell: add wlr_layer_surface_v1_popup_surface_at()&lt;/span&gt;&amp;#x000A;&lt;span id="LC74" class="line" lang="plaintext"&gt; xdg/layer shell: reduce code duplication in iterators&lt;/span&gt;&amp;#x000A;&lt;span id="LC75" class="line" lang="plaintext"&gt; output-management: use same types as wlr_output&lt;/span&gt;&amp;#x000A;&lt;span id="LC76" class="line" lang="plaintext"&gt; xdg shell: remove wlr_xdg_surface_for_each_popup()&lt;/span&gt;&amp;#x000A;&lt;span id="LC77" class="line" lang="plaintext"&gt; layer shell: rename popup iterator for consistency&lt;/span&gt;&amp;#x000A;&lt;span id="LC78" class="line" lang="plaintext"&gt; xdg-output: destroy outputs before manager&lt;/span&gt;&amp;#x000A;&lt;span id="LC79" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC80" class="line" lang="plaintext"&gt;Justus Rossmeier (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC81" class="line" lang="plaintext"&gt; tablet_v2: Fix implicit grab end detection&lt;/span&gt;&amp;#x000A;&lt;span id="LC82" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC83" class="line" lang="plaintext"&gt;Kenny Levinsen (7):&lt;/span&gt;&amp;#x000A;&lt;span id="LC84" class="line" lang="plaintext"&gt; backend/drm: Use legacy gamma size for legacy backend&lt;/span&gt;&amp;#x000A;&lt;span id="LC85" class="line" lang="plaintext"&gt; surface: Make send_enter store entered outputs&lt;/span&gt;&amp;#x000A;&lt;span id="LC86" class="line" lang="plaintext"&gt; backend/wayland: Avoid uninitialized read&lt;/span&gt;&amp;#x000A;&lt;span id="LC87" class="line" lang="plaintext"&gt; wlr_seat_pointer: Remove log on notify_button&lt;/span&gt;&amp;#x000A;&lt;span id="LC88" class="line" lang="plaintext"&gt; backend/session/libseat: Set loglevel to INFO&lt;/span&gt;&amp;#x000A;&lt;span id="LC89" class="line" lang="plaintext"&gt; docs: Minor libseat corrections&lt;/span&gt;&amp;#x000A;&lt;span id="LC90" class="line" lang="plaintext"&gt; xdg_shell: Fix invert_y of top right anchor&lt;/span&gt;&amp;#x000A;&lt;span id="LC91" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC92" class="line" lang="plaintext"&gt;Lukas Märdian (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC93" class="line" lang="plaintext"&gt; Fix false positive -Wstringop-truncation&lt;/span&gt;&amp;#x000A;&lt;span id="LC94" class="line" lang="plaintext"&gt; xcursor: use strncat instead of strncpy&lt;/span&gt;&amp;#x000A;&lt;span id="LC95" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC96" class="line" lang="plaintext"&gt;Manuel Stoeckl (3):&lt;/span&gt;&amp;#x000A;&lt;span id="LC97" class="line" lang="plaintext"&gt; xwayland/xwm: make atom_map const&lt;/span&gt;&amp;#x000A;&lt;span id="LC98" class="line" lang="plaintext"&gt; xcursor: make cursor data and metadata const&lt;/span&gt;&amp;#x000A;&lt;span id="LC99" class="line" lang="plaintext"&gt; Make implementation function lists static const&lt;/span&gt;&amp;#x000A;&lt;span id="LC100" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC101" class="line" lang="plaintext"&gt;Marten Ringwelski (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC102" class="line" lang="plaintext"&gt; wlr-output-management: Handle modes added after initializing&lt;/span&gt;&amp;#x000A;&lt;span id="LC103" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC104" class="line" lang="plaintext"&gt;Mykola Orliuk (8):&lt;/span&gt;&amp;#x000A;&lt;span id="LC105" class="line" lang="plaintext"&gt; backend/wayland: Bind seat listener to wlr_wl_seat&lt;/span&gt;&amp;#x000A;&lt;span id="LC106" class="line" lang="plaintext"&gt; backend/wayland: Link input devices with seats&lt;/span&gt;&amp;#x000A;&lt;span id="LC107" class="line" lang="plaintext"&gt; backend/wayland: Add registering multiple seats&lt;/span&gt;&amp;#x000A;&lt;span id="LC108" class="line" lang="plaintext"&gt; backend/wayland: Use seat name in input names&lt;/span&gt;&amp;#x000A;&lt;span id="LC109" class="line" lang="plaintext"&gt; backend/wayland: Listen to pointers from all seats&lt;/span&gt;&amp;#x000A;&lt;span id="LC110" class="line" lang="plaintext"&gt; backend/wayland: Bind pointer listener to seat&lt;/span&gt;&amp;#x000A;&lt;span id="LC111" class="line" lang="plaintext"&gt; backend/wayland: Add active pointer per host seat&lt;/span&gt;&amp;#x000A;&lt;span id="LC112" class="line" lang="plaintext"&gt; backend/wayland: Set cursor indivdualy per output&lt;/span&gt;&amp;#x000A;&lt;span id="LC113" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC114" class="line" lang="plaintext"&gt;Quantum (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC115" class="line" lang="plaintext"&gt; render/wlr_texture: clamp texture coordinates to edge by default&lt;/span&gt;&amp;#x000A;&lt;span id="LC116" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC117" class="line" lang="plaintext"&gt;Ronan Pigott (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC118" class="line" lang="plaintext"&gt; render/egl: recognize EGL_BAD_DEVICE_EXT error&lt;/span&gt;&amp;#x000A;&lt;span id="LC119" class="line" lang="plaintext"&gt; backend/drm: avoid gcc stringop-truncation warning&lt;/span&gt;&amp;#x000A;&lt;span id="LC120" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC121" class="line" lang="plaintext"&gt;Rouven Czerwinski (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC122" class="line" lang="plaintext"&gt; util: fix uuid support for freebsd&lt;/span&gt;&amp;#x000A;&lt;span id="LC123" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC124" class="line" lang="plaintext"&gt;Simon Ser (287):&lt;/span&gt;&amp;#x000A;&lt;span id="LC125" class="line" lang="plaintext"&gt; backend/libinput: require libinput 1.14&lt;/span&gt;&amp;#x000A;&lt;span id="LC126" class="line" lang="plaintext"&gt; render: introduce wlr_allocator&lt;/span&gt;&amp;#x000A;&lt;span id="LC127" class="line" lang="plaintext"&gt; render: introduce wlr_gbm_allocator&lt;/span&gt;&amp;#x000A;&lt;span id="LC128" class="line" lang="plaintext"&gt; render/drm_format_set: introduce wlr_drm_format_dup&lt;/span&gt;&amp;#x000A;&lt;span id="LC129" class="line" lang="plaintext"&gt; render: introduce wlr_swapchain&lt;/span&gt;&amp;#x000A;&lt;span id="LC130" class="line" lang="plaintext"&gt; buffer: add wlr_client_buffer_get&lt;/span&gt;&amp;#x000A;&lt;span id="LC131" class="line" lang="plaintext"&gt; render: introduce wlr_renderer_bind_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC132" class="line" lang="plaintext"&gt; render/gles2: implement wlr_renderer_bind_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC133" class="line" lang="plaintext"&gt; render/gles2: fix y-inverted output when rendering to buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC134" class="line" lang="plaintext"&gt; backend/drm: use wlr_swapchain&lt;/span&gt;&amp;#x000A;&lt;span id="LC135" class="line" lang="plaintext"&gt; render/swapchain: add support for buffer age&lt;/span&gt;&amp;#x000A;&lt;span id="LC136" class="line" lang="plaintext"&gt; backend/drm: add support for wlr_swapchain buffer age&lt;/span&gt;&amp;#x000A;&lt;span id="LC137" class="line" lang="plaintext"&gt; backend/drm: get rid of wlr_drm_fb_type&lt;/span&gt;&amp;#x000A;&lt;span id="LC138" class="line" lang="plaintext"&gt; backend/drm: add support for wlr_swapchain multi-GPU&lt;/span&gt;&amp;#x000A;&lt;span id="LC139" class="line" lang="plaintext"&gt; backend/drm: check drm_surface_render_black_frame return value&lt;/span&gt;&amp;#x000A;&lt;span id="LC140" class="line" lang="plaintext"&gt; render/egl: introduce wlr_egl_dup_drm_fd&lt;/span&gt;&amp;#x000A;&lt;span id="LC141" class="line" lang="plaintext"&gt; render: introduce wlr_renderer_get_drm_fd&lt;/span&gt;&amp;#x000A;&lt;span id="LC142" class="line" lang="plaintext"&gt; backend/headless: switch to wlr_swapchain&lt;/span&gt;&amp;#x000A;&lt;span id="LC143" class="line" lang="plaintext"&gt; backend/headless: implement export_dmabuf&lt;/span&gt;&amp;#x000A;&lt;span id="LC144" class="line" lang="plaintext"&gt; build: improve summary via bool_yn&lt;/span&gt;&amp;#x000A;&lt;span id="LC145" class="line" lang="plaintext"&gt; render/egl: stop including eglmesaext.h&lt;/span&gt;&amp;#x000A;&lt;span id="LC146" class="line" lang="plaintext"&gt; backend/session: don't return FD on failure in open_file&lt;/span&gt;&amp;#x000A;&lt;span id="LC147" class="line" lang="plaintext"&gt; backend/session: operate on wlr_device&lt;/span&gt;&amp;#x000A;&lt;span id="LC148" class="line" lang="plaintext"&gt; backend/session: filter udev events by sysname&lt;/span&gt;&amp;#x000A;&lt;span id="LC149" class="line" lang="plaintext"&gt; backend/session: introduce wlr_session.events.add_drm_card&lt;/span&gt;&amp;#x000A;&lt;span id="LC150" class="line" lang="plaintext"&gt; backend/session: wait for DRM device if none found&lt;/span&gt;&amp;#x000A;&lt;span id="LC151" class="line" lang="plaintext"&gt; Revert "session/logind: support CanGraphical property"&lt;/span&gt;&amp;#x000A;&lt;span id="LC152" class="line" lang="plaintext"&gt; backend/session: replace session_signal with events.active&lt;/span&gt;&amp;#x000A;&lt;span id="LC153" class="line" lang="plaintext"&gt; backend/session/logind: log when using XDG_SESSION_ID&lt;/span&gt;&amp;#x000A;&lt;span id="LC154" class="line" lang="plaintext"&gt; backend/session: add a timeout waiting for GPUs&lt;/span&gt;&amp;#x000A;&lt;span id="LC155" class="line" lang="plaintext"&gt; backend/x11: log errors&lt;/span&gt;&amp;#x000A;&lt;span id="LC156" class="line" lang="plaintext"&gt; backend/x11: log unhandled X11 events&lt;/span&gt;&amp;#x000A;&lt;span id="LC157" class="line" lang="plaintext"&gt; backend/x11: log unhandled client messages&lt;/span&gt;&amp;#x000A;&lt;span id="LC158" class="line" lang="plaintext"&gt; backend/drm: stop force-probing connectors&lt;/span&gt;&amp;#x000A;&lt;span id="LC159" class="line" lang="plaintext"&gt; backend/wayland: don't set EGL visual&lt;/span&gt;&amp;#x000A;&lt;span id="LC160" class="line" lang="plaintext"&gt; render/egl: don't rely on being able to open primary node&lt;/span&gt;&amp;#x000A;&lt;span id="LC161" class="line" lang="plaintext"&gt; render: expand wlr_renderer_get{,_dmabuf}_formats docs&lt;/span&gt;&amp;#x000A;&lt;span id="LC162" class="line" lang="plaintext"&gt; render: remove wlr_renderer_format_supported&lt;/span&gt;&amp;#x000A;&lt;span id="LC163" class="line" lang="plaintext"&gt; render: introduce wlr_renderer_get_dmabuf_render_formats&lt;/span&gt;&amp;#x000A;&lt;span id="LC164" class="line" lang="plaintext"&gt; backend/headless: use a format suitable for rendering&lt;/span&gt;&amp;#x000A;&lt;span id="LC165" class="line" lang="plaintext"&gt; render: rename wlr_renderer_get_dmabuf_formats&lt;/span&gt;&amp;#x000A;&lt;span id="LC166" class="line" lang="plaintext"&gt; render: rename wlr_renderer_get_formats&lt;/span&gt;&amp;#x000A;&lt;span id="LC167" class="line" lang="plaintext"&gt; render: assert {X,A}RGB8888 are supported&lt;/span&gt;&amp;#x000A;&lt;span id="LC168" class="line" lang="plaintext"&gt; render/egl: remove wlr_egl.external_only_dmabuf_formats&lt;/span&gt;&amp;#x000A;&lt;span id="LC169" class="line" lang="plaintext"&gt; backend/drm: rotation is a plane property&lt;/span&gt;&amp;#x000A;&lt;span id="LC170" class="line" lang="plaintext"&gt; backend/drm: "scaling mode" is a connector property&lt;/span&gt;&amp;#x000A;&lt;span id="LC171" class="line" lang="plaintext"&gt; Revert "backend/drm: stop force-probing connectors"&lt;/span&gt;&amp;#x000A;&lt;span id="LC172" class="line" lang="plaintext"&gt; xwayland: add -core to flags&lt;/span&gt;&amp;#x000A;&lt;span id="LC173" class="line" lang="plaintext"&gt; build: add leftover WLR_HAS_LIBCAP&lt;/span&gt;&amp;#x000A;&lt;span id="LC174" class="line" lang="plaintext"&gt; backend/drm: take a wlr_drm_format in init_drm_surface&lt;/span&gt;&amp;#x000A;&lt;span id="LC175" class="line" lang="plaintext"&gt; render/drm_format_set: introduce wlr_drm_format_intersect&lt;/span&gt;&amp;#x000A;&lt;span id="LC176" class="line" lang="plaintext"&gt; backend/drm: query render formats&lt;/span&gt;&amp;#x000A;&lt;span id="LC177" class="line" lang="plaintext"&gt; backend/drm: remove unused if in drm_connector_move_cursor&lt;/span&gt;&amp;#x000A;&lt;span id="LC178" class="line" lang="plaintext"&gt; backend/session/libseat: set XDG_SESSION_TYPE&lt;/span&gt;&amp;#x000A;&lt;span id="LC179" class="line" lang="plaintext"&gt; render/egl: support config-less wlr_egl&lt;/span&gt;&amp;#x000A;&lt;span id="LC180" class="line" lang="plaintext"&gt; backend/headless: create a config-less EGL context&lt;/span&gt;&amp;#x000A;&lt;span id="LC181" class="line" lang="plaintext"&gt; backend/drm: use EGL_PLATFORM_GBM_KHR&lt;/span&gt;&amp;#x000A;&lt;span id="LC182" class="line" lang="plaintext"&gt; backend/drm: unset current surface before importing&lt;/span&gt;&amp;#x000A;&lt;span id="LC183" class="line" lang="plaintext"&gt; render/drm_format_set: allocate using cap when duplicating&lt;/span&gt;&amp;#x000A;&lt;span id="LC184" class="line" lang="plaintext"&gt; backend/drm: stop tracking overlay planes&lt;/span&gt;&amp;#x000A;&lt;span id="LC185" class="line" lang="plaintext"&gt; backend/headless: add support for direct scan-out&lt;/span&gt;&amp;#x000A;&lt;span id="LC186" class="line" lang="plaintext"&gt; backend/drm: fix missing wlr_drm_format.cap&lt;/span&gt;&amp;#x000A;&lt;span id="LC187" class="line" lang="plaintext"&gt; render/drm_format_set: assert len &amp;lt;= cap when duplicating&lt;/span&gt;&amp;#x000A;&lt;span id="LC188" class="line" lang="plaintext"&gt; backend/drm: remove EGL config&lt;/span&gt;&amp;#x000A;&lt;span id="LC189" class="line" lang="plaintext"&gt; render/gles2: don't eglGetConfigAttrib on EGL_NO_CONFIG_KHR&lt;/span&gt;&amp;#x000A;&lt;span id="LC190" class="line" lang="plaintext"&gt; render/gles2: query alpha size from render buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC191" class="line" lang="plaintext"&gt; output: improve basic test logging&lt;/span&gt;&amp;#x000A;&lt;span id="LC192" class="line" lang="plaintext"&gt; backend/drm: remove workaround for amdgpu DP MST&lt;/span&gt;&amp;#x000A;&lt;span id="LC193" class="line" lang="plaintext"&gt; output: stop assuming a frame is pending in init&lt;/span&gt;&amp;#x000A;&lt;span id="LC194" class="line" lang="plaintext"&gt; backend/wayland: stop rendering black frame on init&lt;/span&gt;&amp;#x000A;&lt;span id="LC195" class="line" lang="plaintext"&gt; backend/wayland: use wlr_swapchain for main surface&lt;/span&gt;&amp;#x000A;&lt;span id="LC196" class="line" lang="plaintext"&gt; backend/wayland: use wlr_swapchain for cursor surface&lt;/span&gt;&amp;#x000A;&lt;span id="LC197" class="line" lang="plaintext"&gt; build: move wayland-egl dependency to examples/&lt;/span&gt;&amp;#x000A;&lt;span id="LC198" class="line" lang="plaintext"&gt; backend/wayland: query render formats&lt;/span&gt;&amp;#x000A;&lt;span id="LC199" class="line" lang="plaintext"&gt; backend/x11: switch to wlr_swapchain&lt;/span&gt;&amp;#x000A;&lt;span id="LC200" class="line" lang="plaintext"&gt; backend/x11: query modifiers supported by X11 server&lt;/span&gt;&amp;#x000A;&lt;span id="LC201" class="line" lang="plaintext"&gt; backend/x11: fix xinput mask mixed up with present&lt;/span&gt;&amp;#x000A;&lt;span id="LC202" class="line" lang="plaintext"&gt; backend/drm: stop using GBM flags&lt;/span&gt;&amp;#x000A;&lt;span id="LC203" class="line" lang="plaintext"&gt; Remove inline keyword&lt;/span&gt;&amp;#x000A;&lt;span id="LC204" class="line" lang="plaintext"&gt; render/gles2: require GL_EXT_unpack_subimage&lt;/span&gt;&amp;#x000A;&lt;span id="LC205" class="line" lang="plaintext"&gt; backend/drm: dup FD before wlr_gbm_allocator_create&lt;/span&gt;&amp;#x000A;&lt;span id="LC206" class="line" lang="plaintext"&gt; backend: use fcntl(F_DUPFD_CLOEXEC) instead of dup&lt;/span&gt;&amp;#x000A;&lt;span id="LC207" class="line" lang="plaintext"&gt; backend/drm: add wlr_drm_connector.backend&lt;/span&gt;&amp;#x000A;&lt;span id="LC208" class="line" lang="plaintext"&gt; backend/headless: select the rendering device ourselves&lt;/span&gt;&amp;#x000A;&lt;span id="LC209" class="line" lang="plaintext"&gt; backend/x11: fix DRI3 formats not used&lt;/span&gt;&amp;#x000A;&lt;span id="LC210" class="line" lang="plaintext"&gt; render/allocator: ignore NULL in wlr_allocator_destroy&lt;/span&gt;&amp;#x000A;&lt;span id="LC211" class="line" lang="plaintext"&gt; backend/drm: remove nouveau workaround&lt;/span&gt;&amp;#x000A;&lt;span id="LC212" class="line" lang="plaintext"&gt; backend/drm: add wlr_drm_backend.name&lt;/span&gt;&amp;#x000A;&lt;span id="LC213" class="line" lang="plaintext"&gt; backend/drm: print DRM device name when scanning connectors&lt;/span&gt;&amp;#x000A;&lt;span id="LC214" class="line" lang="plaintext"&gt; render/drm_format_set: add wlr_drm_format_{create,add}&lt;/span&gt;&amp;#x000A;&lt;span id="LC215" class="line" lang="plaintext"&gt; backend/drm: use wlr_drm_format_{create,add}&lt;/span&gt;&amp;#x000A;&lt;span id="LC216" class="line" lang="plaintext"&gt; backend/x11: use DRI3Open to get DRM FD&lt;/span&gt;&amp;#x000A;&lt;span id="LC217" class="line" lang="plaintext"&gt; util/time: add timespec_from_nsec&lt;/span&gt;&amp;#x000A;&lt;span id="LC218" class="line" lang="plaintext"&gt; backend/x11: send more precise output present events&lt;/span&gt;&amp;#x000A;&lt;span id="LC219" class="line" lang="plaintext"&gt; backend/drm: introduce wlr_drm_conn_log&lt;/span&gt;&amp;#x000A;&lt;span id="LC220" class="line" lang="plaintext"&gt; backend/drm: introduce wlr_drm_connector.name&lt;/span&gt;&amp;#x000A;&lt;span id="LC221" class="line" lang="plaintext"&gt; backend/drm: refactor wlr_output destruction&lt;/span&gt;&amp;#x000A;&lt;span id="LC222" class="line" lang="plaintext"&gt; backend/drm: remove unused wlr_drm_plane.drm_format&lt;/span&gt;&amp;#x000A;&lt;span id="LC223" class="line" lang="plaintext"&gt; backend/wayland: remove EGL config&lt;/span&gt;&amp;#x000A;&lt;span id="LC224" class="line" lang="plaintext"&gt; backend/wayland: re-use wl_buffers&lt;/span&gt;&amp;#x000A;&lt;span id="LC225" class="line" lang="plaintext"&gt; backend/x11: re-use pixmaps&lt;/span&gt;&amp;#x000A;&lt;span id="LC226" class="line" lang="plaintext"&gt; backend/x11: destroy buffers when destroying output&lt;/span&gt;&amp;#x000A;&lt;span id="LC227" class="line" lang="plaintext"&gt; backend/drm: don't save texture in gbm_bo user data&lt;/span&gt;&amp;#x000A;&lt;span id="LC228" class="line" lang="plaintext"&gt; backend/drm: grab DMA-BUF from wlr_buffer instead of gbm_bo&lt;/span&gt;&amp;#x000A;&lt;span id="LC229" class="line" lang="plaintext"&gt; backend/drm: drop export_drm_bo&lt;/span&gt;&amp;#x000A;&lt;span id="LC230" class="line" lang="plaintext"&gt; backend/drm: make drm_fb_acquire return a FB ID&lt;/span&gt;&amp;#x000A;&lt;span id="LC231" class="line" lang="plaintext"&gt; backend/drm: remove drm_fb_acquire&lt;/span&gt;&amp;#x000A;&lt;span id="LC232" class="line" lang="plaintext"&gt; backend/drm: error on size mismatch in drm_surface_blit&lt;/span&gt;&amp;#x000A;&lt;span id="LC233" class="line" lang="plaintext"&gt; backend/drm: destroy DRM connectors that disappear&lt;/span&gt;&amp;#x000A;&lt;span id="LC234" class="line" lang="plaintext"&gt; backend/drm: assert connector state after wlr_output_destroy&lt;/span&gt;&amp;#x000A;&lt;span id="LC235" class="line" lang="plaintext"&gt; backend/drm: use plural form for possible_crtcs&lt;/span&gt;&amp;#x000A;&lt;span id="LC236" class="line" lang="plaintext"&gt; backend/drm: don't retry page-flip when modifiers are unsupported&lt;/span&gt;&amp;#x000A;&lt;span id="LC237" class="line" lang="plaintext"&gt; Remove contrib/_incr_version&lt;/span&gt;&amp;#x000A;&lt;span id="LC238" class="line" lang="plaintext"&gt; docs/env_vars: _WAYLAND_DISPLAY isn't used anymore&lt;/span&gt;&amp;#x000A;&lt;span id="LC239" class="line" lang="plaintext"&gt; docs/env_vars: document seatd session&lt;/span&gt;&amp;#x000A;&lt;span id="LC240" class="line" lang="plaintext"&gt; backend/drm: log whether ADDFB2 modifiers are supported&lt;/span&gt;&amp;#x000A;&lt;span id="LC241" class="line" lang="plaintext"&gt; backend/drm: add special case for cursor in add_plane&lt;/span&gt;&amp;#x000A;&lt;span id="LC242" class="line" lang="plaintext"&gt; backend/drm: make drmModePlane arg in add_plane const&lt;/span&gt;&amp;#x000A;&lt;span id="LC243" class="line" lang="plaintext"&gt; backend/drm: use connector log helpers in atomic backend&lt;/span&gt;&amp;#x000A;&lt;span id="LC244" class="line" lang="plaintext"&gt; client-buffer: remove unnecessary wlr_resource_get_buffer_size&lt;/span&gt;&amp;#x000A;&lt;span id="LC245" class="line" lang="plaintext"&gt; Stop using wlr_texture_get_size&lt;/span&gt;&amp;#x000A;&lt;span id="LC246" class="line" lang="plaintext"&gt; backend/drm: make listener names more idiomatic&lt;/span&gt;&amp;#x000A;&lt;span id="LC247" class="line" lang="plaintext"&gt; backend/x11: implement a real rendering loop&lt;/span&gt;&amp;#x000A;&lt;span id="LC248" class="line" lang="plaintext"&gt; backend/x11: create per-window present event contexts&lt;/span&gt;&amp;#x000A;&lt;span id="LC249" class="line" lang="plaintext"&gt; backend/drm: force LINEAR for cursor plane formats&lt;/span&gt;&amp;#x000A;&lt;span id="LC250" class="line" lang="plaintext"&gt; render/drm_format_set: add special case for LINEAR-only formats&lt;/span&gt;&amp;#x000A;&lt;span id="LC251" class="line" lang="plaintext"&gt; backend/drm: extract linear format creation into function&lt;/span&gt;&amp;#x000A;&lt;span id="LC252" class="line" lang="plaintext"&gt; backend/drm: remove special linear case for cursor plane&lt;/span&gt;&amp;#x000A;&lt;span id="LC253" class="line" lang="plaintext"&gt; Remove wlr_create_renderer_func_t&lt;/span&gt;&amp;#x000A;&lt;span id="LC254" class="line" lang="plaintext"&gt; backend/x11: always open render node&lt;/span&gt;&amp;#x000A;&lt;span id="LC255" class="line" lang="plaintext"&gt; backend/x11: print version on extension error&lt;/span&gt;&amp;#x000A;&lt;span id="LC256" class="line" lang="plaintext"&gt; backend/drm: ignore hotplug events while inactive&lt;/span&gt;&amp;#x000A;&lt;span id="LC257" class="line" lang="plaintext"&gt; backend/drm: stash pending page-flip CRTC&lt;/span&gt;&amp;#x000A;&lt;span id="LC258" class="line" lang="plaintext"&gt; examples: remove visual for EGL_PLATFORM_WAYLAND_EXT&lt;/span&gt;&amp;#x000A;&lt;span id="LC259" class="line" lang="plaintext"&gt; examples: request an EGL config&lt;/span&gt;&amp;#x000A;&lt;span id="LC260" class="line" lang="plaintext"&gt; backend/wayland: re-use cursor wl_buffers&lt;/span&gt;&amp;#x000A;&lt;span id="LC261" class="line" lang="plaintext"&gt; backend/session: allow wlr_session_find_gpus to return an error&lt;/span&gt;&amp;#x000A;&lt;span id="LC262" class="line" lang="plaintext"&gt; backend/wayland: remove unnecessary flags from event source&lt;/span&gt;&amp;#x000A;&lt;span id="LC263" class="line" lang="plaintext"&gt; render: remove EGL config and visual from wlr_renderer_autocreate&lt;/span&gt;&amp;#x000A;&lt;span id="LC264" class="line" lang="plaintext"&gt; backend/drm: don't log errno on plane_get_next_fb failure&lt;/span&gt;&amp;#x000A;&lt;span id="LC265" class="line" lang="plaintext"&gt; render/egl: document that config may be zero&lt;/span&gt;&amp;#x000A;&lt;span id="LC266" class="line" lang="plaintext"&gt; render/egl: use KHR function pointer type&lt;/span&gt;&amp;#x000A;&lt;span id="LC267" class="line" lang="plaintext"&gt; render/egl: document NULL config_attribs passed to wlr_egl_init&lt;/span&gt;&amp;#x000A;&lt;span id="LC268" class="line" lang="plaintext"&gt; backend/drm: make wlr_drm_plane.{pending,queued,current}_fb pointers&lt;/span&gt;&amp;#x000A;&lt;span id="LC269" class="line" lang="plaintext"&gt; backend/drm: introduce drm_fb_create&lt;/span&gt;&amp;#x000A;&lt;span id="LC270" class="line" lang="plaintext"&gt; backend/drm: add wlr_drm_buf.local_wlr_buf&lt;/span&gt;&amp;#x000A;&lt;span id="LC271" class="line" lang="plaintext"&gt; backend/drm: only keep track of local buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC272" class="line" lang="plaintext"&gt; backend/drm: re-use FBs&lt;/span&gt;&amp;#x000A;&lt;span id="LC273" class="line" lang="plaintext"&gt; backend/drm: stop using surface size for BO&lt;/span&gt;&amp;#x000A;&lt;span id="LC274" class="line" lang="plaintext"&gt; xwayland: remove protocol debug messages&lt;/span&gt;&amp;#x000A;&lt;span id="LC275" class="line" lang="plaintext"&gt; protocol: add drm.xml&lt;/span&gt;&amp;#x000A;&lt;span id="LC276" class="line" lang="plaintext"&gt; backend/wayland: use the EGL GBM platform&lt;/span&gt;&amp;#x000A;&lt;span id="LC277" class="line" lang="plaintext"&gt; output-damage: use output commit event&lt;/span&gt;&amp;#x000A;&lt;span id="LC278" class="line" lang="plaintext"&gt; gamma-control-v1: schedule frame when resetting gamma LUT&lt;/span&gt;&amp;#x000A;&lt;span id="LC279" class="line" lang="plaintext"&gt; build: remove Clang workarounds&lt;/span&gt;&amp;#x000A;&lt;span id="LC280" class="line" lang="plaintext"&gt; render/gles2: fix EGL use-after-free&lt;/span&gt;&amp;#x000A;&lt;span id="LC281" class="line" lang="plaintext"&gt; build: use more consistent feature names in summary&lt;/span&gt;&amp;#x000A;&lt;span id="LC282" class="line" lang="plaintext"&gt; render/egl: remove support for EGL_NATIVE_VISUAL_ID&lt;/span&gt;&amp;#x000A;&lt;span id="LC283" class="line" lang="plaintext"&gt; render/egl: remove wlr_egl_swap_buffers&lt;/span&gt;&amp;#x000A;&lt;span id="LC284" class="line" lang="plaintext"&gt; render/egl: replace init/finish with create/destroy&lt;/span&gt;&amp;#x000A;&lt;span id="LC285" class="line" lang="plaintext"&gt; render/egl: remove surface and buffer age args from make_current&lt;/span&gt;&amp;#x000A;&lt;span id="LC286" class="line" lang="plaintext"&gt; backend/drm: fix segfault in page_flip_handler&lt;/span&gt;&amp;#x000A;&lt;span id="LC287" class="line" lang="plaintext"&gt; backend/drm: remove unnecessary wlr_drm_fb.wlr_buf check&lt;/span&gt;&amp;#x000A;&lt;span id="LC288" class="line" lang="plaintext"&gt; render/gles2: save/restore EGL context in destroy_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC289" class="line" lang="plaintext"&gt; render: document wlr_renderer_bind_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC290" class="line" lang="plaintext"&gt; backend: remove unnecessary GLES2 includes&lt;/span&gt;&amp;#x000A;&lt;span id="LC291" class="line" lang="plaintext"&gt; output-damage: stop listening to scale/transform events&lt;/span&gt;&amp;#x000A;&lt;span id="LC292" class="line" lang="plaintext"&gt; output-layout: stop listening to scale/transform events&lt;/span&gt;&amp;#x000A;&lt;span id="LC293" class="line" lang="plaintext"&gt; output: remove scale/transform events&lt;/span&gt;&amp;#x000A;&lt;span id="LC294" class="line" lang="plaintext"&gt; render/gles2: restore EGL context after texture operations&lt;/span&gt;&amp;#x000A;&lt;span id="LC295" class="line" lang="plaintext"&gt; render/gbm_allocator: log GBM backend name&lt;/span&gt;&amp;#x000A;&lt;span id="LC296" class="line" lang="plaintext"&gt; render/gbm_allocator: document that DRM primary FDs work&lt;/span&gt;&amp;#x000A;&lt;span id="LC297" class="line" lang="plaintext"&gt; render/gbm_allocator: fix gbm_device use-after-free&lt;/span&gt;&amp;#x000A;&lt;span id="LC298" class="line" lang="plaintext"&gt; render: extract gles2 build files to subdir&lt;/span&gt;&amp;#x000A;&lt;span id="LC299" class="line" lang="plaintext"&gt; backend: add get_drm_fd to interface&lt;/span&gt;&amp;#x000A;&lt;span id="LC300" class="line" lang="plaintext"&gt; backend/multi: implement get_drm_fd&lt;/span&gt;&amp;#x000A;&lt;span id="LC301" class="line" lang="plaintext"&gt; backend/wayland: implement get_drm_fd&lt;/span&gt;&amp;#x000A;&lt;span id="LC302" class="line" lang="plaintext"&gt; backend/drm: implement get_drm_fd&lt;/span&gt;&amp;#x000A;&lt;span id="LC303" class="line" lang="plaintext"&gt; backend/x11: implement get_drm_fd&lt;/span&gt;&amp;#x000A;&lt;span id="LC304" class="line" lang="plaintext"&gt; backend/headless: implement get_drm_fd&lt;/span&gt;&amp;#x000A;&lt;span id="LC305" class="line" lang="plaintext"&gt; render/gles2: make EGL context current in bind_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC306" class="line" lang="plaintext"&gt; output-damage: stop relying on output pending state on commit&lt;/span&gt;&amp;#x000A;&lt;span id="LC307" class="line" lang="plaintext"&gt; output: send commit event after pending state is cleared&lt;/span&gt;&amp;#x000A;&lt;span id="LC308" class="line" lang="plaintext"&gt; render/egl: fix gbm_device use-after-free&lt;/span&gt;&amp;#x000A;&lt;span id="LC309" class="line" lang="plaintext"&gt; render: introduce private wlr_renderer_autocreate_with_drm_fd&lt;/span&gt;&amp;#x000A;&lt;span id="LC310" class="line" lang="plaintext"&gt; backend/drm: use local DRM FD for wlr_rend&lt;/span&gt;&amp;#x000A;&lt;span id="LC311" class="line" lang="plaintext"&gt; backend/headless: create renderer after wlr_backend_init&lt;/span&gt;&amp;#x000A;&lt;span id="LC312" class="line" lang="plaintext"&gt; render/gbm_allocator: export to DMA-BUF on init&lt;/span&gt;&amp;#x000A;&lt;span id="LC313" class="line" lang="plaintext"&gt; render/gbm_allocator: set modifier to INVALID if implicit&lt;/span&gt;&amp;#x000A;&lt;span id="LC314" class="line" lang="plaintext"&gt; backend/x11: log when creating X11 backend&lt;/span&gt;&amp;#x000A;&lt;span id="LC315" class="line" lang="plaintext"&gt; backend/x11: log DRM node name&lt;/span&gt;&amp;#x000A;&lt;span id="LC316" class="line" lang="plaintext"&gt; backend/x11: add support for DRI3 1.0&lt;/span&gt;&amp;#x000A;&lt;span id="LC317" class="line" lang="plaintext"&gt; backend/x11: add xcb_dri3_pixmap_from_buffers check for n_planes&lt;/span&gt;&amp;#x000A;&lt;span id="LC318" class="line" lang="plaintext"&gt; backend/drm: add support for the subconnector property&lt;/span&gt;&amp;#x000A;&lt;span id="LC319" class="line" lang="plaintext"&gt; backend/drm: add wlr_drm_connector_get_id&lt;/span&gt;&amp;#x000A;&lt;span id="LC320" class="line" lang="plaintext"&gt; backend/drm: fix modifiers for cursor plane buffers&lt;/span&gt;&amp;#x000A;&lt;span id="LC321" class="line" lang="plaintext"&gt; backend/x11: fix region not being actually used&lt;/span&gt;&amp;#x000A;&lt;span id="LC322" class="line" lang="plaintext"&gt; Revert "render/egl: remove unused gbm_device member"&lt;/span&gt;&amp;#x000A;&lt;span id="LC323" class="line" lang="plaintext"&gt; Revert "render: add wlr_egl_create_from_drm_fd function"&lt;/span&gt;&amp;#x000A;&lt;span id="LC324" class="line" lang="plaintext"&gt; render/gbm_allocator: avoid drmPrimeHandleToFD&lt;/span&gt;&amp;#x000A;&lt;span id="LC325" class="line" lang="plaintext"&gt; backend/drm: document wlr_drm_plane surface fields&lt;/span&gt;&amp;#x000A;&lt;span id="LC326" class="line" lang="plaintext"&gt; backend/drm: simplify drm_fb_lock_surface&lt;/span&gt;&amp;#x000A;&lt;span id="LC327" class="line" lang="plaintext"&gt; backend/drm: don't blit in drm_fb_import&lt;/span&gt;&amp;#x000A;&lt;span id="LC328" class="line" lang="plaintext"&gt; xwayland: drop unused enum net_wm_state_action&lt;/span&gt;&amp;#x000A;&lt;span id="LC329" class="line" lang="plaintext"&gt; render/egl: fix NULL dereference when using llvmpipe&lt;/span&gt;&amp;#x000A;&lt;span id="LC330" class="line" lang="plaintext"&gt; xwayland: fix extraneous NET_WM_STATE log messages&lt;/span&gt;&amp;#x000A;&lt;span id="LC331" class="line" lang="plaintext"&gt; backend/x11: remove output_set_refresh&lt;/span&gt;&amp;#x000A;&lt;span id="LC332" class="line" lang="plaintext"&gt; backend/wayland: remove unnecessary cast&lt;/span&gt;&amp;#x000A;&lt;span id="LC333" class="line" lang="plaintext"&gt; render/egl: log whether DMA-BUF modifiers are supported&lt;/span&gt;&amp;#x000A;&lt;span id="LC334" class="line" lang="plaintext"&gt; render/dmabuf: cleanup on wlr_dmabuf_attributes_copy error&lt;/span&gt;&amp;#x000A;&lt;span id="LC335" class="line" lang="plaintext"&gt; render/dmabuf: make src arg const in wlr_dmabuf_attributes_copy&lt;/span&gt;&amp;#x000A;&lt;span id="LC336" class="line" lang="plaintext"&gt; region: make wlr_region_create private&lt;/span&gt;&amp;#x000A;&lt;span id="LC337" class="line" lang="plaintext"&gt; region: remove resource_list arg from region_create&lt;/span&gt;&amp;#x000A;&lt;span id="LC338" class="line" lang="plaintext"&gt; backend/wayland: flush remote display&lt;/span&gt;&amp;#x000A;&lt;span id="LC339" class="line" lang="plaintext"&gt; Fix bad indentation&lt;/span&gt;&amp;#x000A;&lt;span id="LC340" class="line" lang="plaintext"&gt; readme: fix typo in xcb-icccm dependency&lt;/span&gt;&amp;#x000A;&lt;span id="LC341" class="line" lang="plaintext"&gt; render/gles2: remove YUV blocklist&lt;/span&gt;&amp;#x000A;&lt;span id="LC342" class="line" lang="plaintext"&gt; backend/x11: drop x11-xcb dependency&lt;/span&gt;&amp;#x000A;&lt;span id="LC343" class="line" lang="plaintext"&gt; seat: use WL_SEAT_ERROR_CAPABILITY&lt;/span&gt;&amp;#x000A;&lt;span id="LC344" class="line" lang="plaintext"&gt; surface: check buffer size is compatible with scale&lt;/span&gt;&amp;#x000A;&lt;span id="LC345" class="line" lang="plaintext"&gt; build: remove extra whitespace&lt;/span&gt;&amp;#x000A;&lt;span id="LC346" class="line" lang="plaintext"&gt; examples: drop wlroots dep from egl_common.c&lt;/span&gt;&amp;#x000A;&lt;span id="LC347" class="line" lang="plaintext"&gt; examples: drop wlr/render/egl.h include from client examples&lt;/span&gt;&amp;#x000A;&lt;span id="LC348" class="line" lang="plaintext"&gt; examples: remove wlroots dep from client examples&lt;/span&gt;&amp;#x000A;&lt;span id="LC349" class="line" lang="plaintext"&gt; build: use dictionnary for features instead of configuration_data&lt;/span&gt;&amp;#x000A;&lt;span id="LC350" class="line" lang="plaintext"&gt; build: set have_* dep variables for our features&lt;/span&gt;&amp;#x000A;&lt;span id="LC351" class="line" lang="plaintext"&gt; build: set pkg-config variables for our features&lt;/span&gt;&amp;#x000A;&lt;span id="LC352" class="line" lang="plaintext"&gt; Replace leftover conf_data with features&lt;/span&gt;&amp;#x000A;&lt;span id="LC353" class="line" lang="plaintext"&gt; build: bump meson version to 0.56.0&lt;/span&gt;&amp;#x000A;&lt;span id="LC354" class="line" lang="plaintext"&gt; surface: move INVALID_SIZE check into surface_state_finalize&lt;/span&gt;&amp;#x000A;&lt;span id="LC355" class="line" lang="plaintext"&gt; surface: don't send protocol error on invalid buffer size&lt;/span&gt;&amp;#x000A;&lt;span id="LC356" class="line" lang="plaintext"&gt; backend: add error messages in attach_render impls&lt;/span&gt;&amp;#x000A;&lt;span id="LC357" class="line" lang="plaintext"&gt; render/gles2: check buffer stride when uploading texture&lt;/span&gt;&amp;#x000A;&lt;span id="LC358" class="line" lang="plaintext"&gt; render/gles2: remove current_buffer checks&lt;/span&gt;&amp;#x000A;&lt;span id="LC359" class="line" lang="plaintext"&gt; render/shm_format: add wl_shm_format conversion helpers&lt;/span&gt;&amp;#x000A;&lt;span id="LC360" class="line" lang="plaintext"&gt; render/gles2: convert format table to DRM formats&lt;/span&gt;&amp;#x000A;&lt;span id="LC361" class="line" lang="plaintext"&gt; render/gles2: replace wlr_gles2_texture.wl_format with drm_format&lt;/span&gt;&amp;#x000A;&lt;span id="LC362" class="line" lang="plaintext"&gt; render: use DRM formats in wlr_renderer_get_shm_texture_formats&lt;/span&gt;&amp;#x000A;&lt;span id="LC363" class="line" lang="plaintext"&gt; output: use DRM format in wlr_output_preferred_read_format&lt;/span&gt;&amp;#x000A;&lt;span id="LC364" class="line" lang="plaintext"&gt; render: use DRM formats in wlr_renderer_read_pixels&lt;/span&gt;&amp;#x000A;&lt;span id="LC365" class="line" lang="plaintext"&gt; render: use DRM formats in wlr_texture_from_pixels&lt;/span&gt;&amp;#x000A;&lt;span id="LC366" class="line" lang="plaintext"&gt; Remove unnecessary wayland-server-protocol.h includes&lt;/span&gt;&amp;#x000A;&lt;span id="LC367" class="line" lang="plaintext"&gt; build: add -Wformat=2 -Walloca&lt;/span&gt;&amp;#x000A;&lt;span id="LC368" class="line" lang="plaintext"&gt; build: rollback -Wformat=2&lt;/span&gt;&amp;#x000A;&lt;span id="LC369" class="line" lang="plaintext"&gt; buffer: add missing convert_wl_shm_format_to_drm call&lt;/span&gt;&amp;#x000A;&lt;span id="LC370" class="line" lang="plaintext"&gt; Fix wl_shm_format passed to wlr_texture_from_pixels&lt;/span&gt;&amp;#x000A;&lt;span id="LC371" class="line" lang="plaintext"&gt; examples: add libdrm partial dependency for compositors&lt;/span&gt;&amp;#x000A;&lt;span id="LC372" class="line" lang="plaintext"&gt; readme: make it clear build/ is a dir&lt;/span&gt;&amp;#x000A;&lt;span id="LC373" class="line" lang="plaintext"&gt; readme: use spaces for list indent&lt;/span&gt;&amp;#x000A;&lt;span id="LC374" class="line" lang="plaintext"&gt; readme: use references for links&lt;/span&gt;&amp;#x000A;&lt;span id="LC375" class="line" lang="plaintext"&gt; backend/session: fix KMS device filtering&lt;/span&gt;&amp;#x000A;&lt;span id="LC376" class="line" lang="plaintext"&gt; xwayland: add dependency on xwayland&lt;/span&gt;&amp;#x000A;&lt;span id="LC377" class="line" lang="plaintext"&gt; xwayland: check executable exists on init&lt;/span&gt;&amp;#x000A;&lt;span id="LC378" class="line" lang="plaintext"&gt; xwayland: use -listenfd if available&lt;/span&gt;&amp;#x000A;&lt;span id="LC379" class="line" lang="plaintext"&gt; backend/drm: add new writeback and SPI connector types&lt;/span&gt;&amp;#x000A;&lt;span id="LC380" class="line" lang="plaintext"&gt; output: document hotspot coord space&lt;/span&gt;&amp;#x000A;&lt;span id="LC381" class="line" lang="plaintext"&gt; output: fix transform matrix for 90/270 rotations&lt;/span&gt;&amp;#x000A;&lt;span id="LC382" class="line" lang="plaintext"&gt; render/egl: don't fail on EGL_MESA_device_software&lt;/span&gt;&amp;#x000A;&lt;span id="LC383" class="line" lang="plaintext"&gt; screencopy: stop using wlr_renderer_blit_dmabuf&lt;/span&gt;&amp;#x000A;&lt;span id="LC384" class="line" lang="plaintext"&gt; Fix buffer blit matrices&lt;/span&gt;&amp;#x000A;&lt;span id="LC385" class="line" lang="plaintext"&gt; ci: update xwayland dep on alpine&lt;/span&gt;&amp;#x000A;&lt;span id="LC386" class="line" lang="plaintext"&gt; examples/dmabuf-capture: stop using av_init_packet&lt;/span&gt;&amp;#x000A;&lt;span id="LC387" class="line" lang="plaintext"&gt; linux-dmabuf-v1: always advertise support for implicit modifiers&lt;/span&gt;&amp;#x000A;&lt;span id="LC388" class="line" lang="plaintext"&gt; surface: introduce commit sequence numbers&lt;/span&gt;&amp;#x000A;&lt;span id="LC389" class="line" lang="plaintext"&gt; surface: introduce cached states&lt;/span&gt;&amp;#x000A;&lt;span id="LC390" class="line" lang="plaintext"&gt; subsurface: use cached surface state&lt;/span&gt;&amp;#x000A;&lt;span id="LC391" class="line" lang="plaintext"&gt; subsurface: immediately unlock cached state in set_desync&lt;/span&gt;&amp;#x000A;&lt;span id="LC392" class="line" lang="plaintext"&gt; render/egl, backend/wayland: add workaround for split render/display setups&lt;/span&gt;&amp;#x000A;&lt;span id="LC393" class="line" lang="plaintext"&gt; xwayland: assume no WM_HINTS means window wants input&lt;/span&gt;&amp;#x000A;&lt;span id="LC394" class="line" lang="plaintext"&gt; xwayland: require xcb-icccm&lt;/span&gt;&amp;#x000A;&lt;span id="LC395" class="line" lang="plaintext"&gt; xwayland: use ICCCM state defines from xcb-icccm&lt;/span&gt;&amp;#x000A;&lt;span id="LC396" class="line" lang="plaintext"&gt; backend/drm: use format table in test_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC397" class="line" lang="plaintext"&gt; build: add subproject fallback for libseat&lt;/span&gt;&amp;#x000A;&lt;span id="LC398" class="line" lang="plaintext"&gt; surface: make wlr_surface_create private&lt;/span&gt;&amp;#x000A;&lt;span id="LC399" class="line" lang="plaintext"&gt; surface: remove resource_list arg from surface_create&lt;/span&gt;&amp;#x000A;&lt;span id="LC400" class="line" lang="plaintext"&gt; render/egl: stop relying on platform for high priority&lt;/span&gt;&amp;#x000A;&lt;span id="LC401" class="line" lang="plaintext"&gt; backend/drm: try to import buffer when testing it&lt;/span&gt;&amp;#x000A;&lt;span id="LC402" class="line" lang="plaintext"&gt; backend/drm: improve logs in drm_fb_create&lt;/span&gt;&amp;#x000A;&lt;span id="LC403" class="line" lang="plaintext"&gt; backend/drm: reject DMA-BUFs with flags&lt;/span&gt;&amp;#x000A;&lt;span id="LC404" class="line" lang="plaintext"&gt; backend/x11: reject DMA-BUFs with flags&lt;/span&gt;&amp;#x000A;&lt;span id="LC405" class="line" lang="plaintext"&gt; build: simplify HAS_LIBUUID definition&lt;/span&gt;&amp;#x000A;&lt;span id="LC406" class="line" lang="plaintext"&gt; build: use get_variable instead of get_pkgconfig_variable&lt;/span&gt;&amp;#x000A;&lt;span id="LC407" class="line" lang="plaintext"&gt; backend/drm: don't set NONBLOCK with TEST_ONLY&lt;/span&gt;&amp;#x000A;&lt;span id="LC408" class="line" lang="plaintext"&gt; backend/drm: downgrade test-only commit failure log level&lt;/span&gt;&amp;#x000A;&lt;span id="LC409" class="line" lang="plaintext"&gt; backend/drm: use atomic test-only commits for direct scan-out&lt;/span&gt;&amp;#x000A;&lt;span id="LC410" class="line" lang="plaintext"&gt; backend/drm: stop testing for buffer in drm_connector_commit_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC411" class="line" lang="plaintext"&gt; build: bump to v0.13.0&lt;/span&gt;&amp;#x000A;&lt;span id="LC412" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC413" class="line" lang="plaintext"&gt;Simon Zeni (15):&lt;/span&gt;&amp;#x000A;&lt;span id="LC414" class="line" lang="plaintext"&gt; ci: build tinywl&lt;/span&gt;&amp;#x000A;&lt;span id="LC415" class="line" lang="plaintext"&gt; tinywl: fix wlr_backend_autocreate call&lt;/span&gt;&amp;#x000A;&lt;span id="LC416" class="line" lang="plaintext"&gt; backend: remove wlr_egl from all backends&lt;/span&gt;&amp;#x000A;&lt;span id="LC417" class="line" lang="plaintext"&gt; remove unnecessary egl includes&lt;/span&gt;&amp;#x000A;&lt;span id="LC418" class="line" lang="plaintext"&gt; render: drop egl parameters from wlr_renderer_autocreate&lt;/span&gt;&amp;#x000A;&lt;span id="LC419" class="line" lang="plaintext"&gt; render: remove egl include from wlr_renderer&lt;/span&gt;&amp;#x000A;&lt;span id="LC420" class="line" lang="plaintext"&gt; render: add wlr_egl_create_from_drm_fd function&lt;/span&gt;&amp;#x000A;&lt;span id="LC421" class="line" lang="plaintext"&gt; render/egl: remove unused gbm_device member&lt;/span&gt;&amp;#x000A;&lt;span id="LC422" class="line" lang="plaintext"&gt; render/egl: fail to create wlr_egl on software renderer&lt;/span&gt;&amp;#x000A;&lt;span id="LC423" class="line" lang="plaintext"&gt; output: improve transform matrix calculation&lt;/span&gt;&amp;#x000A;&lt;span id="LC424" class="line" lang="plaintext"&gt; render/pixel_format: introduce pixel format info table&lt;/span&gt;&amp;#x000A;&lt;span id="LC425" class="line" lang="plaintext"&gt; Move render/shm_format functions to render/pixel_format&lt;/span&gt;&amp;#x000A;&lt;span id="LC426" class="line" lang="plaintext"&gt; backend/drm: use pixel format table in renderer&lt;/span&gt;&amp;#x000A;&lt;span id="LC427" class="line" lang="plaintext"&gt; render/pixel_format: add XBGR8888 and ABGR8888 format&lt;/span&gt;&amp;#x000A;&lt;span id="LC428" class="line" lang="plaintext"&gt; render/gles2: remove depth and bpp gles2_pixel_format, use drm pixel format&lt;/span&gt;&amp;#x000A;&lt;span id="LC429" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC430" class="line" lang="plaintext"&gt;Stephane Chauveau (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC431" class="line" lang="plaintext"&gt; backend/drm: don't assume possible_crtcs has only one bit set&lt;/span&gt;&amp;#x000A;&lt;span id="LC432" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC433" class="line" lang="plaintext"&gt;Tadeo Kondrak (3):&lt;/span&gt;&amp;#x000A;&lt;span id="LC434" class="line" lang="plaintext"&gt; xdg-foreign: Make imported object inert when exported is destroyed&lt;/span&gt;&amp;#x000A;&lt;span id="LC435" class="line" lang="plaintext"&gt; xdg-foreign: rename finish_* functions to destroy_*&lt;/span&gt;&amp;#x000A;&lt;span id="LC436" class="line" lang="plaintext"&gt; text_input_v3: correct typo in enum field&lt;/span&gt;&amp;#x000A;&lt;span id="LC437" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC438" class="line" lang="plaintext"&gt;Tudor Brindus (21):&lt;/span&gt;&amp;#x000A;&lt;span id="LC439" class="line" lang="plaintext"&gt; xwayland: use wlr_log_errno instead of %m&lt;/span&gt;&amp;#x000A;&lt;span id="LC440" class="line" lang="plaintext"&gt; xwayland/selection: prevent fd leak on unsupported MIME type&lt;/span&gt;&amp;#x000A;&lt;span id="LC441" class="line" lang="plaintext"&gt; xwayland/selection: rename Wayland-facing data and helpers&lt;/span&gt;&amp;#x000A;&lt;span id="LC442" class="line" lang="plaintext"&gt; xwayland/selection: make `xwm_data_source_write` return 0 on failure&lt;/span&gt;&amp;#x000A;&lt;span id="LC443" class="line" lang="plaintext"&gt; xwayland/selection: explicitly bail if first write to Wayland fd fails&lt;/span&gt;&amp;#x000A;&lt;span id="LC444" class="line" lang="plaintext"&gt; xwayland/selection: simplify incremental transfer control flow&lt;/span&gt;&amp;#x000A;&lt;span id="LC445" class="line" lang="plaintext"&gt; xwayland/selection: extract out property requests&lt;/span&gt;&amp;#x000A;&lt;span id="LC446" class="line" lang="plaintext"&gt; xwayland/selection: refactor remaining incremental transfer code&lt;/span&gt;&amp;#x000A;&lt;span id="LC447" class="line" lang="plaintext"&gt; xwayland/selection: end incr transfer on empty prop, not next selection&lt;/span&gt;&amp;#x000A;&lt;span id="LC448" class="line" lang="plaintext"&gt; xwayland/selection: don't request another selection while one is pending&lt;/span&gt;&amp;#x000A;&lt;span id="LC449" class="line" lang="plaintext"&gt; xwayland/selection: don't leak Wayland fd if ConvertSelection fails&lt;/span&gt;&amp;#x000A;&lt;span id="LC450" class="line" lang="plaintext"&gt; xwayland/selection: destroy all selections on Xwayland restart&lt;/span&gt;&amp;#x000A;&lt;span id="LC451" class="line" lang="plaintext"&gt; xwayland/selection: make xwm_selection_finish take a wlr_xwm_selection *&lt;/span&gt;&amp;#x000A;&lt;span id="LC452" class="line" lang="plaintext"&gt; xwayland/selection: introduce `xwm_selection_transfer_init`&lt;/span&gt;&amp;#x000A;&lt;span id="LC453" class="line" lang="plaintext"&gt; xwayland/selection: make xwm_selection_init take a wlr_xwm_selection *&lt;/span&gt;&amp;#x000A;&lt;span id="LC454" class="line" lang="plaintext"&gt; xwayland/selection: use one X11 window per incoming transfer&lt;/span&gt;&amp;#x000A;&lt;span id="LC455" class="line" lang="plaintext"&gt; xwayland/selection: use one target window per selection&lt;/span&gt;&amp;#x000A;&lt;span id="LC456" class="line" lang="plaintext"&gt; xwayland/selection: allow simultaneous Wayland-to-X11 transfers&lt;/span&gt;&amp;#x000A;&lt;span id="LC457" class="line" lang="plaintext"&gt; xwayland/selection: ignore requests for anything but the newest data&lt;/span&gt;&amp;#x000A;&lt;span id="LC458" class="line" lang="plaintext"&gt; xwayland/selection: log when proxy window loses ownership&lt;/span&gt;&amp;#x000A;&lt;span id="LC459" class="line" lang="plaintext"&gt; xwayland/selection: flush connection after changing xwm selection owner&lt;/span&gt;&amp;#x000A;&lt;span id="LC460" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC461" class="line" lang="plaintext"&gt;fwsmit (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC462" class="line" lang="plaintext"&gt; examples/foreign-toplevel: Add documenation and output selection&lt;/span&gt;&amp;#x000A;&lt;span id="LC463" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC464" class="line" lang="plaintext"&gt;zccrs (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC465" class="line" lang="plaintext"&gt; Use absolute paths in include in header files&lt;/span&gt;&amp;#x000A;&lt;span id="LC466" class="line" lang="plaintext"&gt; render/egl: check "EGL_KHR_platform_gbm" for EGL gbm platform&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&amp;#x000A;&lt;copy-code&gt;&lt;/copy-code&gt;&amp;#x000A;&lt;/div&gt;&amp;#x000A;&lt;/details&gt;</content> + <updated>2021-04-07T19:22:33Z</updated> + <media:thumbnail width="40" height="40" url="https://secure.gravatar.com/avatar/1ce071dd3264c7d9f5d9c0b7137faa6b?s=80&amp;d=identicon"/> + <author> + <name>Simon Ser</name> + <email>contact@emersion.fr</email> + </author> +</entry> +<entry> + <id>https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.12.0</id> + <link href="https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.12.0"/> + <title>0.12.0</title> + <summary>wlroots 0.12.0 + +Antonin Décimo (3): + Fix typos + Fix incorrect format parameters + xwayland: free server in error path + +Daniel De Graaf (1): + wlr_virtual_keyboard: fix fd leak + +Daniel Kondor (2): + foreign-toplevel-management: report parent toplevel + foreign toplevel: send parent event only to clients that support it + +Devin J. Pohly (1): + drm: fix uninitialized read + +Drew DeVault (1): + Remove xdg-shell v6 + +Guido Cella (1): + render: Don't crash on 0 dimensions + +Ilia Bozhinov (9): + xwayland: do not allow apps to change focus after wlroots request + make sure to fail setting gamma on disabled outputs + backend/wayland: destroy relative pointer when output is disconnected + wayland: emit relative pointer events only for current pointer + xwayland: disconnect display destroy listener even if xwayland didn't initialize + xwayland: add set_geometry event + backend/wayland: add touch support to the wayland backend + xdg_shell: fix a typo + xdg_shell: handle inert popups + +Isaac Freund (6): + xdg-shell: split last-acked and current state + layer-shell: add for_each_popup + layer-shell: error on 0 dimension without anchors + xdg_positioner: remove unused field + wlr_drag: remove unused point_destroy field + xwayland: remove unused listener + +Kenny Levinsen (2): + session: Add libseat backend + session: Add missing init to direct-freebsd + +Marten Ringwelski (1): + backend/drm: Check if output is enabled before sending frame event + +Mykola Orliuk (5): + backend/wayland: manage cursor for current pointer + backend/wayland: factor out wlr_wl_seat + backend/wayland: add error flow in create_wl_seat + backend/wayland: fix input creation error handling + backend/wayland: fix some keyboard/touch leaks + +Patrick Steinhardt (1): + session: Don't refuse unprivileged creation of "direct" backend + +Roman Gilg (3): + output-management-v1: add head identifying events + output-management-v1: send head identifying information + output-management-v1: send complete head state on enable change + +Ronan Pigott (1): + virtual_pointer: remember current axis for axis events + +Rouven Czerwinski (2): + examples: remove unnecessary gles2.h imports + xwm: add loop detection for read_surface_parent + +Ryan Walklin (4): + Implement logind session SetType method to change session type to wayland + Also set XDG_SESSION_TYPE + Don't set XDG_SESSION_TYPE unless logind SetType succeeds + Quieten failure to set login session type + +Scott Moreau (2): + xwm: Set _NET_WM_STATE_FOCUSED property for the focused surface + foreign toplevel: Fix whitespace error + +Simon Ser (31): + xwayland/xwm: don't insert surface in list on error + xwayland/xwm: add prop count assert in xsurface_set_net_wm_state + xwayland/xwm: use initializer for props in xsurface_set_wm_state + render/gles2: make wlr_gles2_texture_from_* private + render/gles2: keep ref to wlr_gles2_renderer in wlr_gles2_texture + render/gles2: make push/pop debug functions take a wlr_renderer + render/gles2: remove gles2_procs + gamma-control-v1: fix use-after-free in gamma_control_handle_set_gamma + examples/simple: use wlr_output_preferred_mode + examples/simple: use wlr_renderer instead of GL + Remove unnecessary wl_display_dispatch calls + output: introduce wlr_output_event_commit + output-power-management-v1: listen to output commit + examples/dmabuf-capture: add extra roundtrip for wl_output listener + backend/session/libseat: register log handler + backend: remove check for _WAYLAND_DISPLAY + backend/libinput: improve logger callback + render: define EGL_NO_PLATFORM_SPECIFIC_TYPES (#2452) + backend/drm: fix "a page-flip is already pending" errors on modeset + xwayland: minor code style fixes + xwayland: log unhandled NET_WM_STATE property changes + gamma-control-v1: apply gamma LUT when output gets enabled + screencopy: stop setting needs_frame flag + backend/drm: export pending FB in export_dmabuf, if any + output: update docs to reflect reality + output: add when field to wlr_output_event_commit + export-dmabuf: export DMA-BUF on output commit + screencopy: perform DMA-BUF copy on output commit + screencopy: send failed when copying a DMA-BUF with a region + input-method: send modifiers in set_keyboard + Update version to 0.12.0 + +Tobias Langendorf (1): + xwm: add support for xwayland minimize + +Tudor Brindus (11): + examples: use `perror` instead of `fprintf` GNU %m `printf` extension + xwayland: using %m in `wlr_log` is broken, use `wlr_log_errno` instead + xwayland: fix use-after-free in selection handling + xwayland: introduce WLR_XWAYLAND for specifying which Xwayland to use + xwayland: remove stale transfers from the same requestor + xwayland: notify requestor when we fail to respond to their request + xwayland: fix minor typo in debug log + types/wlr_keyboard: use bitmasks for wlr_keyboard_led and wlr_keyboard_modifier enums + types/wlr_output_layout: use bitmask for wlr_direction + util/edges: use bitmask for wlr_edges + render/dmabuf: use bitmask for wlr_dmabuf_attributes_flags + +Valentin (2): + Use fixed size integer type + Fix undefined behavior + +nerdopolis (1): + Accommodate for CONFIG_VT=0, all TTYs are in seat0, but not all seat0s have TTYs +</summary> + <content type="html">&lt;p data-sourcepos="1:1-1:154" dir="auto"&gt;Note: the PGP signing key &lt;a href="https://github.com/swaywm/wlroots/issues/2462#issuecomment-723578521" rel="nofollow noreferrer noopener" target="_blank"&gt;has changed to 34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48&lt;/a&gt;.&lt;/p&gt;&amp;#x000A;&lt;p data-sourcepos="3:1-3:55" dir="auto"&gt;wlroots 0.12.0 includes the following breaking changes:&lt;/p&gt;&amp;#x000A;&lt;h3 data-sourcepos="5:1-5:51" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-rendergles2-remove-gles2_procs-global-2351" class="anchor" href="#rendergles2-remove-gles2_procs-global-2351" aria-hidden="true"&gt;&lt;/a&gt;render/gles2: remove gles2_procs global (#2351)&lt;/h3&gt;&amp;#x000A;&lt;p data-sourcepos="7:1-7:76" dir="auto"&gt;The &lt;code&gt;wlr_gles2_texture_from_*&lt;/code&gt; family of functions are no longer public API.&lt;/p&gt;&amp;#x000A;&lt;h3 data-sourcepos="9:1-9:48" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-remove-xdg-shell-unstable-v6-support-2391" class="anchor" href="#remove-xdg-shell-unstable-v6-support-2391" aria-hidden="true"&gt;&lt;/a&gt;Remove xdg-shell-unstable-v6 support (#2391)&lt;/h3&gt;&amp;#x000A;&lt;p data-sourcepos="11:1-11:73" dir="auto"&gt;&lt;code&gt;wlr_xdg_shell_v6&lt;/code&gt; has been dropped and is superseded by &lt;code&gt;wlr_xdg_shell&lt;/code&gt;.&lt;/p&gt;&amp;#x000A;&lt;h3 data-sourcepos="13:1-13:66" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-output-fix-blurred-hw-cursors-with-fractional-scaling-2107" class="anchor" href="#output-fix-blurred-hw-cursors-with-fractional-scaling-2107" aria-hidden="true"&gt;&lt;/a&gt;output: fix blurred hw cursors with fractional scaling (#2107)&lt;/h3&gt;&amp;#x000A;&lt;p data-sourcepos="15:1-15:93" dir="auto"&gt;For backends: &lt;code&gt;wlr_output_impl.set_cursor&lt;/code&gt; now takes a &lt;code&gt;float scale&lt;/code&gt; instead of an &lt;code&gt;int32_t&lt;/code&gt;.&lt;/p&gt;&amp;#x000A;&lt;h3 data-sourcepos="17:1-17:45" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-introduce-wlr_output_event_commit-2315" class="anchor" href="#introduce-wlr_output_event_commit-2315" aria-hidden="true"&gt;&lt;/a&gt;Introduce wlr_output_event_commit (#2315)&lt;/h3&gt;&amp;#x000A;&lt;p data-sourcepos="19:1-19:137" dir="auto"&gt;The &lt;code&gt;wlr_output.events.commit&lt;/code&gt; event now has a data argument of type &lt;code&gt;struct wlr_output_event_commit *&lt;/code&gt; instead of &lt;code&gt;struct wlr_output *&lt;/code&gt;.&lt;/p&gt;&amp;#x000A;&lt;details&gt;&amp;#x000A;&lt;summary&gt;Full changelog&lt;/summary&gt;&amp;#x000A;&lt;div class="gl-relative markdown-code-block js-markdown-code"&gt;&amp;#x000A;&lt;pre data-sourcepos="25:1-160:3" class="code highlight js-syntax-highlight language-plaintext" lang="plaintext" data-canonical-lang="" v-pre="true"&gt;&lt;code&gt;&lt;span id="LC1" class="line" lang="plaintext"&gt;Antonin Décimo (3):&lt;/span&gt;&amp;#x000A;&lt;span id="LC2" class="line" lang="plaintext"&gt; Fix typos&lt;/span&gt;&amp;#x000A;&lt;span id="LC3" class="line" lang="plaintext"&gt; Fix incorrect format parameters&lt;/span&gt;&amp;#x000A;&lt;span id="LC4" class="line" lang="plaintext"&gt; xwayland: free server in error path&lt;/span&gt;&amp;#x000A;&lt;span id="LC5" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC6" class="line" lang="plaintext"&gt;Daniel De Graaf (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC7" class="line" lang="plaintext"&gt; wlr_virtual_keyboard: fix fd leak&lt;/span&gt;&amp;#x000A;&lt;span id="LC8" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC9" class="line" lang="plaintext"&gt;Daniel Kondor (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC10" class="line" lang="plaintext"&gt; foreign-toplevel-management: report parent toplevel&lt;/span&gt;&amp;#x000A;&lt;span id="LC11" class="line" lang="plaintext"&gt; foreign toplevel: send parent event only to clients that support it&lt;/span&gt;&amp;#x000A;&lt;span id="LC12" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC13" class="line" lang="plaintext"&gt;Devin J. Pohly (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC14" class="line" lang="plaintext"&gt; drm: fix uninitialized read&lt;/span&gt;&amp;#x000A;&lt;span id="LC15" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC16" class="line" lang="plaintext"&gt;Drew DeVault (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC17" class="line" lang="plaintext"&gt; Remove xdg-shell v6&lt;/span&gt;&amp;#x000A;&lt;span id="LC18" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC19" class="line" lang="plaintext"&gt;Guido Cella (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC20" class="line" lang="plaintext"&gt; render: Don't crash on 0 dimensions&lt;/span&gt;&amp;#x000A;&lt;span id="LC21" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC22" class="line" lang="plaintext"&gt;Ilia Bozhinov (9):&lt;/span&gt;&amp;#x000A;&lt;span id="LC23" class="line" lang="plaintext"&gt; xwayland: do not allow apps to change focus after wlroots request&lt;/span&gt;&amp;#x000A;&lt;span id="LC24" class="line" lang="plaintext"&gt; make sure to fail setting gamma on disabled outputs&lt;/span&gt;&amp;#x000A;&lt;span id="LC25" class="line" lang="plaintext"&gt; backend/wayland: destroy relative pointer when output is disconnected&lt;/span&gt;&amp;#x000A;&lt;span id="LC26" class="line" lang="plaintext"&gt; wayland: emit relative pointer events only for current pointer&lt;/span&gt;&amp;#x000A;&lt;span id="LC27" class="line" lang="plaintext"&gt; xwayland: disconnect display destroy listener even if xwayland didn't initialize&lt;/span&gt;&amp;#x000A;&lt;span id="LC28" class="line" lang="plaintext"&gt; xwayland: add set_geometry event&lt;/span&gt;&amp;#x000A;&lt;span id="LC29" class="line" lang="plaintext"&gt; backend/wayland: add touch support to the wayland backend&lt;/span&gt;&amp;#x000A;&lt;span id="LC30" class="line" lang="plaintext"&gt; xdg_shell: fix a typo&lt;/span&gt;&amp;#x000A;&lt;span id="LC31" class="line" lang="plaintext"&gt; xdg_shell: handle inert popups&lt;/span&gt;&amp;#x000A;&lt;span id="LC32" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC33" class="line" lang="plaintext"&gt;Isaac Freund (6):&lt;/span&gt;&amp;#x000A;&lt;span id="LC34" class="line" lang="plaintext"&gt; xdg-shell: split last-acked and current state&lt;/span&gt;&amp;#x000A;&lt;span id="LC35" class="line" lang="plaintext"&gt; layer-shell: add for_each_popup&lt;/span&gt;&amp;#x000A;&lt;span id="LC36" class="line" lang="plaintext"&gt; layer-shell: error on 0 dimension without anchors&lt;/span&gt;&amp;#x000A;&lt;span id="LC37" class="line" lang="plaintext"&gt; xdg_positioner: remove unused field&lt;/span&gt;&amp;#x000A;&lt;span id="LC38" class="line" lang="plaintext"&gt; wlr_drag: remove unused point_destroy field&lt;/span&gt;&amp;#x000A;&lt;span id="LC39" class="line" lang="plaintext"&gt; xwayland: remove unused listener&lt;/span&gt;&amp;#x000A;&lt;span id="LC40" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC41" class="line" lang="plaintext"&gt;Kenny Levinsen (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC42" class="line" lang="plaintext"&gt; session: Add libseat backend&lt;/span&gt;&amp;#x000A;&lt;span id="LC43" class="line" lang="plaintext"&gt; session: Add missing init to direct-freebsd&lt;/span&gt;&amp;#x000A;&lt;span id="LC44" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC45" class="line" lang="plaintext"&gt;Marten Ringwelski (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC46" class="line" lang="plaintext"&gt; backend/drm: Check if output is enabled before sending frame event&lt;/span&gt;&amp;#x000A;&lt;span id="LC47" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC48" class="line" lang="plaintext"&gt;Mykola Orliuk (5):&lt;/span&gt;&amp;#x000A;&lt;span id="LC49" class="line" lang="plaintext"&gt; backend/wayland: manage cursor for current pointer&lt;/span&gt;&amp;#x000A;&lt;span id="LC50" class="line" lang="plaintext"&gt; backend/wayland: factor out wlr_wl_seat&lt;/span&gt;&amp;#x000A;&lt;span id="LC51" class="line" lang="plaintext"&gt; backend/wayland: add error flow in create_wl_seat&lt;/span&gt;&amp;#x000A;&lt;span id="LC52" class="line" lang="plaintext"&gt; backend/wayland: fix input creation error handling&lt;/span&gt;&amp;#x000A;&lt;span id="LC53" class="line" lang="plaintext"&gt; backend/wayland: fix some keyboard/touch leaks&lt;/span&gt;&amp;#x000A;&lt;span id="LC54" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC55" class="line" lang="plaintext"&gt;Patrick Steinhardt (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC56" class="line" lang="plaintext"&gt; session: Don't refuse unprivileged creation of "direct" backend&lt;/span&gt;&amp;#x000A;&lt;span id="LC57" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC58" class="line" lang="plaintext"&gt;Roman Gilg (3):&lt;/span&gt;&amp;#x000A;&lt;span id="LC59" class="line" lang="plaintext"&gt; output-management-v1: add head identifying events&lt;/span&gt;&amp;#x000A;&lt;span id="LC60" class="line" lang="plaintext"&gt; output-management-v1: send head identifying information&lt;/span&gt;&amp;#x000A;&lt;span id="LC61" class="line" lang="plaintext"&gt; output-management-v1: send complete head state on enable change&lt;/span&gt;&amp;#x000A;&lt;span id="LC62" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC63" class="line" lang="plaintext"&gt;Ronan Pigott (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC64" class="line" lang="plaintext"&gt; virtual_pointer: remember current axis for axis events&lt;/span&gt;&amp;#x000A;&lt;span id="LC65" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC66" class="line" lang="plaintext"&gt;Rouven Czerwinski (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC67" class="line" lang="plaintext"&gt; examples: remove unnecessary gles2.h imports&lt;/span&gt;&amp;#x000A;&lt;span id="LC68" class="line" lang="plaintext"&gt; xwm: add loop detection for read_surface_parent&lt;/span&gt;&amp;#x000A;&lt;span id="LC69" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC70" class="line" lang="plaintext"&gt;Ryan Walklin (4):&lt;/span&gt;&amp;#x000A;&lt;span id="LC71" class="line" lang="plaintext"&gt; Implement logind session SetType method to change session type to wayland&lt;/span&gt;&amp;#x000A;&lt;span id="LC72" class="line" lang="plaintext"&gt; Also set XDG_SESSION_TYPE&lt;/span&gt;&amp;#x000A;&lt;span id="LC73" class="line" lang="plaintext"&gt; Don't set XDG_SESSION_TYPE unless logind SetType succeeds&lt;/span&gt;&amp;#x000A;&lt;span id="LC74" class="line" lang="plaintext"&gt; Quieten failure to set login session type&lt;/span&gt;&amp;#x000A;&lt;span id="LC75" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC76" class="line" lang="plaintext"&gt;Scott Moreau (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC77" class="line" lang="plaintext"&gt; xwm: Set _NET_WM_STATE_FOCUSED property for the focused surface&lt;/span&gt;&amp;#x000A;&lt;span id="LC78" class="line" lang="plaintext"&gt; foreign toplevel: Fix whitespace error&lt;/span&gt;&amp;#x000A;&lt;span id="LC79" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC80" class="line" lang="plaintext"&gt;Simon Ser (31):&lt;/span&gt;&amp;#x000A;&lt;span id="LC81" class="line" lang="plaintext"&gt; xwayland/xwm: don't insert surface in list on error&lt;/span&gt;&amp;#x000A;&lt;span id="LC82" class="line" lang="plaintext"&gt; xwayland/xwm: add prop count assert in xsurface_set_net_wm_state&lt;/span&gt;&amp;#x000A;&lt;span id="LC83" class="line" lang="plaintext"&gt; xwayland/xwm: use initializer for props in xsurface_set_wm_state&lt;/span&gt;&amp;#x000A;&lt;span id="LC84" class="line" lang="plaintext"&gt; render/gles2: make wlr_gles2_texture_from_* private&lt;/span&gt;&amp;#x000A;&lt;span id="LC85" class="line" lang="plaintext"&gt; render/gles2: keep ref to wlr_gles2_renderer in wlr_gles2_texture&lt;/span&gt;&amp;#x000A;&lt;span id="LC86" class="line" lang="plaintext"&gt; render/gles2: make push/pop debug functions take a wlr_renderer&lt;/span&gt;&amp;#x000A;&lt;span id="LC87" class="line" lang="plaintext"&gt; render/gles2: remove gles2_procs&lt;/span&gt;&amp;#x000A;&lt;span id="LC88" class="line" lang="plaintext"&gt; gamma-control-v1: fix use-after-free in gamma_control_handle_set_gamma&lt;/span&gt;&amp;#x000A;&lt;span id="LC89" class="line" lang="plaintext"&gt; examples/simple: use wlr_output_preferred_mode&lt;/span&gt;&amp;#x000A;&lt;span id="LC90" class="line" lang="plaintext"&gt; examples/simple: use wlr_renderer instead of GL&lt;/span&gt;&amp;#x000A;&lt;span id="LC91" class="line" lang="plaintext"&gt; Remove unnecessary wl_display_dispatch calls&lt;/span&gt;&amp;#x000A;&lt;span id="LC92" class="line" lang="plaintext"&gt; output: introduce wlr_output_event_commit&lt;/span&gt;&amp;#x000A;&lt;span id="LC93" class="line" lang="plaintext"&gt; output-power-management-v1: listen to output commit&lt;/span&gt;&amp;#x000A;&lt;span id="LC94" class="line" lang="plaintext"&gt; examples/dmabuf-capture: add extra roundtrip for wl_output listener&lt;/span&gt;&amp;#x000A;&lt;span id="LC95" class="line" lang="plaintext"&gt; backend/session/libseat: register log handler&lt;/span&gt;&amp;#x000A;&lt;span id="LC96" class="line" lang="plaintext"&gt; backend: remove check for _WAYLAND_DISPLAY&lt;/span&gt;&amp;#x000A;&lt;span id="LC97" class="line" lang="plaintext"&gt; backend/libinput: improve logger callback&lt;/span&gt;&amp;#x000A;&lt;span id="LC98" class="line" lang="plaintext"&gt; render: define EGL_NO_PLATFORM_SPECIFIC_TYPES (#2452)&lt;/span&gt;&amp;#x000A;&lt;span id="LC99" class="line" lang="plaintext"&gt; backend/drm: fix "a page-flip is already pending" errors on modeset&lt;/span&gt;&amp;#x000A;&lt;span id="LC100" class="line" lang="plaintext"&gt; xwayland: minor code style fixes&lt;/span&gt;&amp;#x000A;&lt;span id="LC101" class="line" lang="plaintext"&gt; xwayland: log unhandled NET_WM_STATE property changes&lt;/span&gt;&amp;#x000A;&lt;span id="LC102" class="line" lang="plaintext"&gt; gamma-control-v1: apply gamma LUT when output gets enabled&lt;/span&gt;&amp;#x000A;&lt;span id="LC103" class="line" lang="plaintext"&gt; screencopy: stop setting needs_frame flag&lt;/span&gt;&amp;#x000A;&lt;span id="LC104" class="line" lang="plaintext"&gt; backend/drm: export pending FB in export_dmabuf, if any&lt;/span&gt;&amp;#x000A;&lt;span id="LC105" class="line" lang="plaintext"&gt; output: update docs to reflect reality&lt;/span&gt;&amp;#x000A;&lt;span id="LC106" class="line" lang="plaintext"&gt; output: add when field to wlr_output_event_commit&lt;/span&gt;&amp;#x000A;&lt;span id="LC107" class="line" lang="plaintext"&gt; export-dmabuf: export DMA-BUF on output commit&lt;/span&gt;&amp;#x000A;&lt;span id="LC108" class="line" lang="plaintext"&gt; screencopy: perform DMA-BUF copy on output commit&lt;/span&gt;&amp;#x000A;&lt;span id="LC109" class="line" lang="plaintext"&gt; screencopy: send failed when copying a DMA-BUF with a region&lt;/span&gt;&amp;#x000A;&lt;span id="LC110" class="line" lang="plaintext"&gt; input-method: send modifiers in set_keyboard&lt;/span&gt;&amp;#x000A;&lt;span id="LC111" class="line" lang="plaintext"&gt; Update version to 0.12.0&lt;/span&gt;&amp;#x000A;&lt;span id="LC112" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC113" class="line" lang="plaintext"&gt;Tobias Langendorf (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC114" class="line" lang="plaintext"&gt; xwm: add support for xwayland minimize&lt;/span&gt;&amp;#x000A;&lt;span id="LC115" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC116" class="line" lang="plaintext"&gt;Tudor Brindus (11):&lt;/span&gt;&amp;#x000A;&lt;span id="LC117" class="line" lang="plaintext"&gt; examples: use `perror` instead of `fprintf` GNU %m `printf` extension&lt;/span&gt;&amp;#x000A;&lt;span id="LC118" class="line" lang="plaintext"&gt; xwayland: using %m in `wlr_log` is broken, use `wlr_log_errno` instead&lt;/span&gt;&amp;#x000A;&lt;span id="LC119" class="line" lang="plaintext"&gt; xwayland: fix use-after-free in selection handling&lt;/span&gt;&amp;#x000A;&lt;span id="LC120" class="line" lang="plaintext"&gt; xwayland: introduce WLR_XWAYLAND for specifying which Xwayland to use&lt;/span&gt;&amp;#x000A;&lt;span id="LC121" class="line" lang="plaintext"&gt; xwayland: remove stale transfers from the same requestor&lt;/span&gt;&amp;#x000A;&lt;span id="LC122" class="line" lang="plaintext"&gt; xwayland: notify requestor when we fail to respond to their request&lt;/span&gt;&amp;#x000A;&lt;span id="LC123" class="line" lang="plaintext"&gt; xwayland: fix minor typo in debug log&lt;/span&gt;&amp;#x000A;&lt;span id="LC124" class="line" lang="plaintext"&gt; types/wlr_keyboard: use bitmasks for wlr_keyboard_led and wlr_keyboard_modifier enums&lt;/span&gt;&amp;#x000A;&lt;span id="LC125" class="line" lang="plaintext"&gt; types/wlr_output_layout: use bitmask for wlr_direction&lt;/span&gt;&amp;#x000A;&lt;span id="LC126" class="line" lang="plaintext"&gt; util/edges: use bitmask for wlr_edges&lt;/span&gt;&amp;#x000A;&lt;span id="LC127" class="line" lang="plaintext"&gt; render/dmabuf: use bitmask for wlr_dmabuf_attributes_flags&lt;/span&gt;&amp;#x000A;&lt;span id="LC128" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC129" class="line" lang="plaintext"&gt;Valentin (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC130" class="line" lang="plaintext"&gt; Use fixed size integer type&lt;/span&gt;&amp;#x000A;&lt;span id="LC131" class="line" lang="plaintext"&gt; Fix undefined behavior&lt;/span&gt;&amp;#x000A;&lt;span id="LC132" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC133" class="line" lang="plaintext"&gt;nerdopolis (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC134" class="line" lang="plaintext"&gt; Accommodate for CONFIG_VT=0, all TTYs are in seat0, but not all seat0s have TTYs&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&amp;#x000A;&lt;copy-code&gt;&lt;/copy-code&gt;&amp;#x000A;&lt;/div&gt;&amp;#x000A;&lt;/details&gt;</content> + <updated>2020-11-08T14:02:24Z</updated> + <media:thumbnail width="40" height="40" url="https://secure.gravatar.com/avatar/1ce071dd3264c7d9f5d9c0b7137faa6b?s=80&amp;d=identicon"/> + <author> + <name>Simon Ser</name> + <email>contact@emersion.fr</email> + </author> +</entry> +<entry> + <id>https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.11.0</id> + <link href="https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.11.0"/> + <title>0.11.0</title> + <summary>wlroots 0.11.0 + +Aleksei Bavshin (1): + xdg-shell: fix popups rendered outside of the screen + +Andri Yngvason (15): + virtual-pointer: Add request for mapping to specific output + export-dmabuf: Schedule output frame on request + export-dmabuf: Keep frame-&gt;output = NULL until frame is ready + render: egl: Add utility functions for saving/restoring context + render: Add wlr_renderer_blit_dmabuf() + protocol: screencopy: Extend to report linux-dmabuf capability + screencopy: Implement copying into linux-dmabuf + examples: Add screencopy-dmabuf example + render: Fix blit_dmabuf() breakage due to API change + backend: drm: Fix dmabuf resource leak + screencopy: Use correct constant for y-inversion + render: gles2: Fix y-inversion in gles2_blit_dmabuf() + screencopy: Use correct dmabuf to get y-inversion flag + examples: screencopy-dmabuf: Fix y-inversion + render: egl: Use current display to restore NULL context + +Brian Ashworth (2): + meson.build: update wayland requirement to 1.18 + wlr_keyboard_group: introduce enter and leave + +David96 (1): + Add wlr_surface_accepts_touch + +Dorota Czaplejewicz (1): + text_input_v3: Note features supported by the text field + +Filip Sandborg (1): + Fix uint32 overflow in fill_empty_gamma_table on Icelake platform + +Greg Depoire--Ferrer (1): + tinywl: Fix wrong anchor point while resizing a window + +Greg V (1): + xdg-shell: check for existing role before setting xdg_popup_surface_role + +Guido Günther (4): + Add wlr-output-power-management + Implement wlr-output-power-management-v1 + examples: add output-power-management example client + wlr_output_power_management_v1: Init output_power-&gt;link + +Ilia Bozhinov (2): + output-management: add current_configuration_dirty + examples: make output-power-management oneshot by default + +Isaac Freund (16): + Send keyboard enter/leave on capability change + Properly popluate keys array for enter on creation + Send pointer enter/leave on capability change + Return failure of wlr_renderer_init_wl_display() + Return false on wlr_keyboard_set_keymap() failure + tinywl: remove redundant create output global call + Document the events of wlr_layer_surface + tinywl: remove unused variables + tinywl: handle request set selection + layer shell: only send unmap on close if mapped + Make wlr_xcursor_manager_load() return a bool + layer-shell: handle serial wrapping overflow + xdg-shell: handle serial wrapping overflow + xdg-decoration: free old configure structs + layer-shell: upgrade to v3, implement destructor + layer-shell: remove unused surface list + +Jan Beich (2): + backend/session: allow GPU enumeration on FreeBSD + xcursor: also look for cursor themes under ${datadir}/icons by default + +Jan Staněk (1): + Declare wlr_seat globals as extern + +John Chadwick (1): + xwm: end transfers when the requestor is destroyed + +JonnyMako (1): + backend/drm: fix missing cursor on external monitors with multi-GPU setup and nouveau + +Julien Olivain (1): + render/egl: include EGL/eglmesaext.h only if present + +Kalyan Sriram (2): + tinywl: fix geo_box bug in cursor resizing + Don't send redundant capability updates + +Kenny Levinsen (3): + logind: Close fd before releasing device + seat: Create inert objects for missing capabilities + wlr_drag: Destroy drag after releasing grabs + +Kirill Chibisov (1): + xcursor: add xorg-x11 and cursors path to XCURSORPATH + +Manuel Stoeckl (2): + Fix output rotation direction + output: fix output transform compositions + +Michael Weiser (3): + keyboard-shortcuts-inhibit: Implement the protocol + keyboard-shortcuts-inhibit: Add client example + idle-inhibit: Style and naming improvements + +Rabit (1): + Prevent memory leak in copypaste of the screencopy example + +Rouven Czerwinski (4): + backend/drm: add env variable to disable modifiers + backend/drm: remove overzealous finish_drm_surface + render: assert sane values for box functions + surface: don't unset width and height in finalize + +Scott Anderson (8): + meson: Fix protocol includes for compositor examples + examples: Fix compositor-examples + wlr_surface: Post error if multiple role objects created + backend/drm: introduce wlr_drm_fb + backend/drm: don't have fallback atomic commits + backend/drm: move atomic cursor code into pageflip code + backend/drm: don't allow legacy to use direct scanout + Remove libcap support + +Scott Moreau (3): + build: Add 'auto' to logind-provider combo option + xwayland: Don't discard ready signals + xwm: Destroy xwm on hangup or error + +Simon Ser (129): + build: replace version with soversion + render: unconditionally disable implicit X11 includes + meson: fix wayland-server minimum required version + util: add wlr_output_destroy_safe + output: don't destroy global immediately + seat: don't destroy global immediately + xwayland: ignore pointer focus changes + backend/wayland: rename wl_seat.c to seat.c + output: remove wlr_output_impl.schedule_frame + backend/wayland: fix seat caps handling + Introduce wlr_client_buffer + output: add adaptive_sync_enabled property + backend/x11: add support for adaptive_sync_enabled + backend/drm: add support for adaptive_sync_enabled + xwayland: use explicit indexes when initializing atom_map + xwayland: remove duplicate _NET_WM_NAME entry + xwayland: remove underscore prefix from atom names + output: make wlr_output_schedule_frame set output-&gt;needs_frame + output: don't send a needs_frame event if already sent + util/log: improve time prefix + render/gles2: remove duplicated format list + buffer: remove unused wlr_client_buffer fields + output: add comment about needs_frame in wlr_output_schedule_frame + output: replace wlr_output.damage with a damage event + backend/wayland: close keymap FD + Gracefully handle inert wl_output resources + buffer: add destroy event + buffer: add a release event + buffer: add width and height + output: introduce wlr_output_test + output: check buffer in wlr_output_test + backend: reset EGL surface after buffer swap + Add wlr_output_impl.rollback + render/egl: make config attribs const + backend: set EGL_RENDERABLE_TYPE and EGL_SURFACE_TYPE + render/gles2: only call wlr_egl_bind_display if supported + render: only expose linux-dmabuf if EGL extension is supported + output: fix blurred hw cursors with fractional scaling + output: check for buffer size compatibility in common code + backend/wayland: check scan-out buffer is compatible in output_test + output: fix maybe-uninitialized warning + backend/multi: add backends at end of list + build: use meson.override_dependency + build: use dicts instead of get_variable + build: use summary instead of message + output_layout: improve docs + render/drm_format_set: disallow DRM_FORMAT_INVALID + render/gles2: add wlr_gles2_renderer_check_ext + backend/headless: use FBOs instead of pbuffers + backend/headless: add wlr_headless_backend_create_with_renderer + render/texture: add width and height fields + render/texture: make write_pixels optional + backend/drm: strip alpha channel if necessary + Remove .swp file added by mistake + util/log: write log importance + backend/drm: make page-flip error scarier + examples/dmabuf-capture: use getopt + backend/multi: handle backends depending on each other properly + backend/headless: handle renderer destroy + backend/drm: remove wlr_drm_interface.crtc_move_cursor + backend/drm: remove unused fields + backend/drm: remove mode argument to crtc_pageflip + backend/drm: apply gamma LUT on page-flip + backend/drm: rename crtc_pageflip to crtc_commit + backend/drm: remove conn_enable from interface + backend/drm: remove crtc_set_cursor from interface + backend/drm: GAMMA_LUT_SIZE isn't atomic + backend/drm: simplify atomic commit logic + backend/drm: fix crash in session_signal + backend/drm: remove missing cursor plane workaround + backend/drm: fix combined modeset+enable commits + backend/drm: disable cursor in dealloc_crtc + backend/drm: print error in set_plane_props + backend/drm: fix segfault in drm_crtc_page_flip + output: make wlr_output_set_gamma atomic + backend/drm: fix atomic commits when the GAMMA_LUT prop is missing + Fix -Wreturn-type warnings + render/egl: introduce wlr_egl_unset_current + backend/drm: fix current EGL context on multi-GPU + backend/drm: add missing wlr_egl_unset_current + xwayland: split server + xwayland: add option to disable WM + render/egl: unset current context after swapping buffers + backend/drm: rollback atomic blobs + backend/drm: refuse to enable an output without a mode + backend/drm: remove drm_connector_set_custom_mode + backend/drm: remove enable_drm_connector + backend/drm: make drm_connector_set_mode take a wlr_drm_connector + backend/drm: nuke retry_pageflip + backend/drm: introduce pending and current CRTC state + backend/drm: don't set cursor if off-screen + backend/drm: fix missing crtc-&gt;cursor NULL check + Add comments for missing tablet tool entries + backend/drm: rollback pending CRTC state on test commit + backend/drm: make adaptive_sync atomic + backend/drm: commit/rollback FBs in drm_crtc_commit + backend/drm: drop extra wlr_output_update_enabled call + backend/drm: always perform a CRTC commit in drm_connector_commit + backend/wayland: fix spurious eglSwapBuffers failures + render: stop making EGL context current in wlr_egl_init + backend/drm: fix black screens when enabling output + render: choose DMA-BUF texture target via eglQueryDmaBufModifiersEXT + contributing: resource destroy handlers need to cleanup pointers + contributing: add note about events that destroy objects + backend/drm: fix stack overflow in dealloc_crtc + buffer: document wlr_buffer_get_dmabuf DMA-BUF lifetime + output: document wlr_output_export_dmabuf + render/egl: explicit client extension handling + examples/screencopy-dmabuf: call strncpy with maxlen - 1 + examples/fullscreen-shell: stop advertising linux-dmabuf unconditonally + render/gles2: use .x/.y instead of .s/.t + box: add wlr_fbox + util/region: add wlr_region_scale_xy + render: add wlr_render_subtexture_with_matrix + surface: add wlr_surface_state.viewport + surface: introduce wlr_surface_get_buffer_source_box + viewporter: new protocol implementation + surface: ignore viewport src rect on NULL buffer + render/egl: print error name + output: rename impl-&gt;rollback to rollback_render + output: make rollback_render mandatory + output: fix dangling renderer context after wlr_output_preferred_read_format + backend/noop: add missing rollback_render output impl + examples/pointer: fix wlr_renderer_end call order + output: add backend docs + backend/drm: fix DPMS on legacy interface + backend/drm: fix typo in drm_surface_make_current arg + backend/drm: check drm_surface_make_current return value + Update version to 0.11.0 + +Simon Zeni (1): + render/gles2: use glGetAttribLocation instead of hardcoded indices + +Thomas Hebb (3): + wlr_seat: Declare functions in the same order for pointer, keyboard, and touch + wlr_seat: Clarify wording of non-grab-respecting function comments + Allow keyboard and pointer grabs to hook clear_focus() + +Tudor Brindus (19): + backend/libinput: correctly populate x/y fields on tablet proximity in + input/tablet: populate tool tip event position + input/tablet: fix up updated axes after rotation + input/tablet: clear focused surface on surface destroy + wlr/types: use bitshifts for tablet axes enum + backend/wayland: emit tablet tool axis events to the axis handler + input/keyboard: expose keymap matching helper + input/pointer: notify compositor when constraint region changes + tablet: pass motion events to implicitly grabbed surface + tablet: expose wlr_tablet_tool_v2_has_implicit_grab function + util/log: use bright black rather than black for WLR_DEBUG + xwayland: send focus change event unconditionally + xwayland: add error-checking to `server_start_lazy` + backend/wayland: scale tablet tool position into [0, 1] range + util: fix and move `get_current_time_msec` into a util file + util/time: de-duplicate `timespec_to_msec` + util/time: move `timespec_sub` to time utilities + input/keyboard: send modifiers on first keyboard enter + input/pointer: add wlr_seat_pointer_wrap + +Tudor Roman (1): + seat: add selection event docs + +Will Daly (1): + Fix error when reconnecting external display + +j-n-f (1): + examples: fix improper use of `free` + +r-c-f (1): + seat: add check for NULL keyboard + +xdavidwu (3): + virtual-keyboard: add wlr_input_device_get_virtual_keyboard + input-method: implement keyboard grabs + examples/input-method-keyboard-grab: new example + +</summary> + <content type="html">&lt;p data-sourcepos="1:1-1:55" dir="auto"&gt;wlroots 0.11.0 includes the following breaking changes:&lt;/p&gt;&amp;#x000A;&lt;h3 data-sourcepos="3:1-3:49" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-build-replace-version-with-soversion-2005" class="anchor" href="#build-replace-version-with-soversion-2005" aria-hidden="true"&gt;&lt;/a&gt;build: replace version with soversion (#2005)&lt;/h3&gt;&amp;#x000A;&lt;p data-sourcepos="5:1-5:44" dir="auto"&gt;&lt;code&gt;WLR_VERSION_API_*&lt;/code&gt; definitions are dropped.&lt;/p&gt;&amp;#x000A;&lt;h3 data-sourcepos="7:1-7:71" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-fix-wl_output_transform-rotation-direction-and-composition-2023" class="anchor" href="#fix-wl_output_transform-rotation-direction-and-composition-2023" aria-hidden="true"&gt;&lt;/a&gt;Fix wl_output_transform rotation direction, and composition (#2023)&lt;/h3&gt;&amp;#x000A;&lt;p data-sourcepos="9:1-10:11" dir="auto"&gt;Output transformations have been aligned with the Wayland protocol's&amp;#x000A;definition.&lt;/p&gt;&amp;#x000A;&lt;h3 data-sourcepos="12:1-12:53" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-backenddrm-add-support-for-custom-modes-1881" class="anchor" href="#backenddrm-add-support-for-custom-modes-1881" aria-hidden="true"&gt;&lt;/a&gt;backend/drm: add support for custom modes (#1881)&lt;/h3&gt;&amp;#x000A;&lt;p data-sourcepos="14:1-14:74" dir="auto"&gt;&lt;code&gt;wlr_drm_connector_add_mode&lt;/code&gt; now returns the new mode instead of a &lt;code&gt;bool&lt;/code&gt;.&lt;/p&gt;&amp;#x000A;&lt;h3 data-sourcepos="16:1-16:39" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-introduce-wlr_client_buffer-2043" class="anchor" href="#introduce-wlr_client_buffer-2043" aria-hidden="true"&gt;&lt;/a&gt;Introduce wlr_client_buffer (#2043)&lt;/h3&gt;&amp;#x000A;&lt;p data-sourcepos="18:1-19:34" dir="auto"&gt;Compositors that don't directly use &lt;code&gt;wlr_buffer&lt;/code&gt; shouldn't need an update. For&amp;#x000A;compositors which use it directly:&lt;/p&gt;&amp;#x000A;&lt;ul data-sourcepos="21:1-28:0" dir="auto"&gt;&amp;#x000A;&lt;li data-sourcepos="21:1-21:54"&gt;&amp;#x000A;&lt;code&gt;wlr_buffer&lt;/code&gt; has been renamed to &lt;code&gt;wlr_client_buffer&lt;/code&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="22:1-23:68"&gt;&amp;#x000A;&lt;code&gt;wlr_buffer_{ref,unref,get_dmabuf}&lt;/code&gt; and &lt;code&gt;wlr_output_attach_buffer&lt;/code&gt; still take&amp;#x000A;a &lt;code&gt;wlr_buffer&lt;/code&gt;, compositors need to use &lt;code&gt;&amp;amp;wlr_client_buffer-&amp;gt;base&lt;/code&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="24:1-25:65"&gt;&amp;#x000A;&lt;code&gt;wlr_buffer_create&lt;/code&gt; and &lt;code&gt;wlr_buffer_apply_damage&lt;/code&gt; have been renamed to&amp;#x000A;&lt;code&gt;wlr_client_buffer_create&lt;/code&gt; and &lt;code&gt;wlr_client_buffer_apply_damage&lt;/code&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="26:1-28:0"&gt;&amp;#x000A;&lt;code&gt;wlr_buffer_get_resource_size&lt;/code&gt; has been renamed to&amp;#x000A;&lt;code&gt;wlr_resource_get_buffer_size&lt;/code&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;h3 data-sourcepos="29:1-29:52" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-augment-wlr_buffer-to-support-swapchains-2044" class="anchor" href="#augment-wlr_buffer-to-support-swapchains-2044" aria-hidden="true"&gt;&lt;/a&gt;Augment wlr_buffer to support swapchains (#2044)&lt;/h3&gt;&amp;#x000A;&lt;ul data-sourcepos="31:1-39:0" dir="auto"&gt;&amp;#x000A;&lt;li data-sourcepos="31:1-33:68"&gt;Compositors that want to keep a reference to a &lt;code&gt;wlr_buffer&lt;/code&gt; to read it later&amp;#x000A;should call &lt;code&gt;wlr_buffer_lock&lt;/code&gt; and &lt;code&gt;wlr_buffer_unlock&lt;/code&gt; instead of&amp;#x000A;&lt;code&gt;wlr_buffer_ref&lt;/code&gt; and &lt;code&gt;wlr_buffer_unref&lt;/code&gt;. Same applies to backends.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="34:1-36:10"&gt;&amp;#x000A;&lt;code&gt;wlr_client_buffer_create&lt;/code&gt; has been renamed to &lt;code&gt;wlr_client_buffer_import&lt;/code&gt;.&amp;#x000A;Callers need to &lt;code&gt;wlr_buffer_unlock&lt;/code&gt; the resulting buffer once they're done&amp;#x000A;with it.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="37:1-39:0"&gt;Users who create buffers need to call &lt;code&gt;wlr_buffer_drop&lt;/code&gt; instead of&amp;#x000A;&lt;code&gt;wlr_buffer_unref&lt;/code&gt;.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;h3 data-sourcepos="40:1-40:57" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-output-remove-wlr_output_implschedule_frame-2046" class="anchor" href="#output-remove-wlr_output_implschedule_frame-2046" aria-hidden="true"&gt;&lt;/a&gt;output: remove wlr_output_impl.schedule_frame (#2046)&lt;/h3&gt;&amp;#x000A;&lt;p data-sourcepos="42:1-42:64" dir="auto"&gt;For backends: &lt;code&gt;wlr_output_impl.schedule_frame&lt;/code&gt; has been removed.&lt;/p&gt;&amp;#x000A;&lt;h3 data-sourcepos="44:1-44:65" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-output-replace-wlr_outputdamage-with-a-damage-event-2065" class="anchor" href="#output-replace-wlr_outputdamage-with-a-damage-event-2065" aria-hidden="true"&gt;&lt;/a&gt;output: replace wlr_output.damage with a damage event (#2065)&lt;/h3&gt;&amp;#x000A;&lt;p data-sourcepos="46:1-46:77" dir="auto"&gt;&lt;code&gt;wlr_output.damage&lt;/code&gt; is removed, listen to &lt;code&gt;wlr_output.events.damage&lt;/code&gt; instead.&lt;/p&gt;&amp;#x000A;&lt;h3 data-sourcepos="48:1-48:45" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-implement-the-viewporter-protocol-2092" class="anchor" href="#implement-the-viewporter-protocol-2092" aria-hidden="true"&gt;&lt;/a&gt;Implement the viewporter protocol (#2092)&lt;/h3&gt;&amp;#x000A;&lt;p data-sourcepos="50:1-52:17" dir="auto"&gt;Renderer implementations need to be updated, &lt;code&gt;render_texture_with_matrix&lt;/code&gt; has&amp;#x000A;been replaced with &lt;code&gt;render_subtexture_with_matrix&lt;/code&gt; which allows specifying a&amp;#x000A;source rectangle.&lt;/p&gt;&amp;#x000A;&lt;h3 data-sourcepos="54:1-54:45" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-output-introduce-wlr_output_test-2097" class="anchor" href="#output-introduce-wlr_output_test-2097" aria-hidden="true"&gt;&lt;/a&gt;output: introduce wlr_output_test (#2097)&lt;/h3&gt;&amp;#x000A;&lt;ul data-sourcepos="56:1-61:0" dir="auto"&gt;&amp;#x000A;&lt;li data-sourcepos="56:1-58:61"&gt;For compositors: &lt;code&gt;wlr_output_attach_buffer&lt;/code&gt; doesn't return a &lt;code&gt;bool&lt;/code&gt; anymore.&amp;#x000A;The checks previously performed in this function are now performed in&amp;#x000A;&lt;code&gt;wlr_output_commit&lt;/code&gt; and the new &lt;code&gt;wlr_output_test&lt;/code&gt; function.&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="59:1-61:0"&gt;For backends: &lt;code&gt;wlr_output_impl.attach_buffer&lt;/code&gt; is gone, buffer checks now need&amp;#x000A;to be performed in &lt;code&gt;commit&lt;/code&gt;. A new &lt;code&gt;test&lt;/code&gt; function has been added.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;h3 data-sourcepos="62:1-62:66" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-output-fix-blurred-hw-cursors-with-fractional-scaling-2107" class="anchor" href="#output-fix-blurred-hw-cursors-with-fractional-scaling-2107" aria-hidden="true"&gt;&lt;/a&gt;output: fix blurred hw cursors with fractional scaling (#2107)&lt;/h3&gt;&amp;#x000A;&lt;p data-sourcepos="64:1-65:13" dir="auto"&gt;For backends: &lt;code&gt;wlr_output_impl.set_cursor&lt;/code&gt; now takes a &lt;code&gt;float scale&lt;/code&gt; instead of&amp;#x000A;an &lt;code&gt;int32_t&lt;/code&gt;.&lt;/p&gt;&amp;#x000A;&lt;h3 data-sourcepos="67:1-67:32" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-texture-improvements-2139" class="anchor" href="#texture-improvements-2139" aria-hidden="true"&gt;&lt;/a&gt;Texture improvements (#2139)&lt;/h3&gt;&amp;#x000A;&lt;p data-sourcepos="69:1-69:14" dir="auto"&gt;For renderers:&lt;/p&gt;&amp;#x000A;&lt;ul data-sourcepos="71:1-73:0" dir="auto"&gt;&amp;#x000A;&lt;li data-sourcepos="71:1-71:54"&gt;&amp;#x000A;&lt;code&gt;wlr_texture_init&lt;/code&gt; now takes the size of the texture&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="72:1-73:0"&gt;&amp;#x000A;&lt;code&gt;wlr_texture_impl.get_size&lt;/code&gt; has been removed&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;h3 data-sourcepos="74:1-74:34" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-xwayland-split-server-2175" class="anchor" href="#xwayland-split-server-2175" aria-hidden="true"&gt;&lt;/a&gt;xwayland: split server (#2175)&lt;/h3&gt;&amp;#x000A;&lt;p data-sourcepos="76:1-78:51" dir="auto"&gt;&lt;code&gt;wlr_xwayland.display_name&lt;/code&gt; is now a &lt;code&gt;const char *&lt;/code&gt; field. Most compositors&amp;#x000A;should still be able to use it like before. Server-specific fields have been&amp;#x000A;moved from &lt;code&gt;wlr_xwayland&lt;/code&gt; to &lt;code&gt;wlr_xwayland_server&lt;/code&gt;.&lt;/p&gt;&amp;#x000A;&lt;h3 data-sourcepos="80:1-80:57" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-make-wlr_xcursor_manager_load-return-a-bool-2195" class="anchor" href="#make-wlr_xcursor_manager_load-return-a-bool-2195" aria-hidden="true"&gt;&lt;/a&gt;Make wlr_xcursor_manager_load() return a bool (#2195)&lt;/h3&gt;&amp;#x000A;&lt;p data-sourcepos="82:1-83:40" dir="auto"&gt;&lt;code&gt;wlr_xcursor_manager_load&lt;/code&gt; now returns a bool. Compositors that check the&amp;#x000A;return value need to invert their check.&lt;/p&gt;&amp;#x000A;&lt;h3 data-sourcepos="85:1-85:52" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-output-make-wlr_output_set_gamma-atomic-2196" class="anchor" href="#output-make-wlr_output_set_gamma-atomic-2196" aria-hidden="true"&gt;&lt;/a&gt;output: make wlr_output_set_gamma atomic (#2196)&lt;/h3&gt;&amp;#x000A;&lt;ul data-sourcepos="87:1-91:0" dir="auto"&gt;&amp;#x000A;&lt;li data-sourcepos="87:1-88:8"&gt;&amp;#x000A;&lt;code&gt;wlr_output_set_gamma&lt;/code&gt; is now double-buffered and applied on the next output&amp;#x000A;commit&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="89:1-91:0"&gt;&amp;#x000A;&lt;code&gt;wlr_output_impl.set_gamma&lt;/code&gt; is gone. Backends now need to read the pending&amp;#x000A;output state on commit instead.&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;h3 data-sourcepos="92:1-92:66" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-allow-keyboard-and-pointer-grabs-to-hook-clear_focus-2217" class="anchor" href="#allow-keyboard-and-pointer-grabs-to-hook-clear_focus-2217" aria-hidden="true"&gt;&lt;/a&gt;Allow keyboard and pointer grabs to hook clear_focus() (#2217)&lt;/h3&gt;&amp;#x000A;&lt;p data-sourcepos="94:1-96:11" dir="auto"&gt;The &lt;code&gt;wlr_seat_*_enter&lt;/code&gt; family of functions used to segfault when a NULL&amp;#x000A;surface was passed under some circumstances, they now assert that the surface&amp;#x000A;isn't NULL.&lt;/p&gt;&amp;#x000A;&lt;h3 data-sourcepos="98:1-98:44" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-backenddrm-atomic-improvements-2238" class="anchor" href="#backenddrm-atomic-improvements-2238" aria-hidden="true"&gt;&lt;/a&gt;backend/drm: atomic improvements (#2238)&lt;/h3&gt;&amp;#x000A;&lt;p data-sourcepos="100:1-101:20" dir="auto"&gt;&lt;code&gt;wlr_output_enable_adaptive_sync&lt;/code&gt; must now be followed by &lt;code&gt;wlr_output_commit&lt;/code&gt;&amp;#x000A;to apply the change.&lt;/p&gt;&amp;#x000A;&lt;h3 data-sourcepos="103:1-103:80" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-render-choose-dma-buf-texture-target-via-eglquerydmabufmodifiersext-2255" class="anchor" href="#render-choose-dma-buf-texture-target-via-eglquerydmabufmodifiersext-2255" aria-hidden="true"&gt;&lt;/a&gt;render: choose DMA-BUF texture target via eglQueryDmaBufModifiersEXT (#2255)&lt;/h3&gt;&amp;#x000A;&lt;p data-sourcepos="105:1-106:9" dir="auto"&gt;&lt;code&gt;wlr_egl_create_image_from_dmabuf&lt;/code&gt; now takes an additional &lt;code&gt;external_only&lt;/code&gt;&amp;#x000A;argument.&lt;/p&gt;&amp;#x000A;&lt;h3 data-sourcepos="108:1-108:88" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-output-fix-dangling-renderer-context-after-wlr_output_preferred_read_format-2292" class="anchor" href="#output-fix-dangling-renderer-context-after-wlr_output_preferred_read_format-2292" aria-hidden="true"&gt;&lt;/a&gt;output: fix dangling renderer context after wlr_output_preferred_read_format (#2292)&lt;/h3&gt;&amp;#x000A;&lt;p data-sourcepos="110:1-112:53" dir="auto"&gt;For backends: &lt;code&gt;wlr_output_impl.rollback&lt;/code&gt; has been renamed to &lt;code&gt;rollback_render&lt;/code&gt;&amp;#x000A;and now needs to unconditionally unset the renderer context. It'll only be&amp;#x000A;called if &lt;code&gt;attach_render&lt;/code&gt; has previously been called.&lt;/p&gt;&amp;#x000A;&lt;h3 data-sourcepos="114:1-114:51" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-layer-shell-remove-unused-surface-list-2309" class="anchor" href="#layer-shell-remove-unused-surface-list-2309" aria-hidden="true"&gt;&lt;/a&gt;layer-shell: remove unused surface list (#2309)&lt;/h3&gt;&amp;#x000A;&lt;p data-sourcepos="116:1-116:47" dir="auto"&gt;&lt;code&gt;wlr_layer_shell_v1.surfaces&lt;/code&gt; has been removed.&lt;/p&gt;&amp;#x000A;&lt;div class="gl-relative markdown-code-block js-markdown-code"&gt;&amp;#x000A;&lt;pre data-sourcepos="118:1-423:3" class="code highlight js-syntax-highlight language-plaintext" lang="plaintext" data-canonical-lang="" v-pre="true"&gt;&lt;code&gt;&lt;span id="LC1" class="line" lang="plaintext"&gt;Aleksei Bavshin (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC2" class="line" lang="plaintext"&gt; xdg-shell: fix popups rendered outside of the screen&lt;/span&gt;&amp;#x000A;&lt;span id="LC3" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC4" class="line" lang="plaintext"&gt;Andri Yngvason (15):&lt;/span&gt;&amp;#x000A;&lt;span id="LC5" class="line" lang="plaintext"&gt; virtual-pointer: Add request for mapping to specific output&lt;/span&gt;&amp;#x000A;&lt;span id="LC6" class="line" lang="plaintext"&gt; export-dmabuf: Schedule output frame on request&lt;/span&gt;&amp;#x000A;&lt;span id="LC7" class="line" lang="plaintext"&gt; export-dmabuf: Keep frame-&amp;gt;output = NULL until frame is ready&lt;/span&gt;&amp;#x000A;&lt;span id="LC8" class="line" lang="plaintext"&gt; render: egl: Add utility functions for saving/restoring context&lt;/span&gt;&amp;#x000A;&lt;span id="LC9" class="line" lang="plaintext"&gt; render: Add wlr_renderer_blit_dmabuf()&lt;/span&gt;&amp;#x000A;&lt;span id="LC10" class="line" lang="plaintext"&gt; protocol: screencopy: Extend to report linux-dmabuf capability&lt;/span&gt;&amp;#x000A;&lt;span id="LC11" class="line" lang="plaintext"&gt; screencopy: Implement copying into linux-dmabuf&lt;/span&gt;&amp;#x000A;&lt;span id="LC12" class="line" lang="plaintext"&gt; examples: Add screencopy-dmabuf example&lt;/span&gt;&amp;#x000A;&lt;span id="LC13" class="line" lang="plaintext"&gt; render: Fix blit_dmabuf() breakage due to API change&lt;/span&gt;&amp;#x000A;&lt;span id="LC14" class="line" lang="plaintext"&gt; backend: drm: Fix dmabuf resource leak&lt;/span&gt;&amp;#x000A;&lt;span id="LC15" class="line" lang="plaintext"&gt; screencopy: Use correct constant for y-inversion&lt;/span&gt;&amp;#x000A;&lt;span id="LC16" class="line" lang="plaintext"&gt; render: gles2: Fix y-inversion in gles2_blit_dmabuf()&lt;/span&gt;&amp;#x000A;&lt;span id="LC17" class="line" lang="plaintext"&gt; screencopy: Use correct dmabuf to get y-inversion flag&lt;/span&gt;&amp;#x000A;&lt;span id="LC18" class="line" lang="plaintext"&gt; examples: screencopy-dmabuf: Fix y-inversion&lt;/span&gt;&amp;#x000A;&lt;span id="LC19" class="line" lang="plaintext"&gt; render: egl: Use current display to restore NULL context&lt;/span&gt;&amp;#x000A;&lt;span id="LC20" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC21" class="line" lang="plaintext"&gt;Brian Ashworth (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC22" class="line" lang="plaintext"&gt; meson.build: update wayland requirement to 1.18&lt;/span&gt;&amp;#x000A;&lt;span id="LC23" class="line" lang="plaintext"&gt; wlr_keyboard_group: introduce enter and leave&lt;/span&gt;&amp;#x000A;&lt;span id="LC24" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC25" class="line" lang="plaintext"&gt;David96 (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC26" class="line" lang="plaintext"&gt; Add wlr_surface_accepts_touch&lt;/span&gt;&amp;#x000A;&lt;span id="LC27" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC28" class="line" lang="plaintext"&gt;Dorota Czaplejewicz (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC29" class="line" lang="plaintext"&gt; text_input_v3: Note features supported by the text field&lt;/span&gt;&amp;#x000A;&lt;span id="LC30" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC31" class="line" lang="plaintext"&gt;Filip Sandborg (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC32" class="line" lang="plaintext"&gt; Fix uint32 overflow in fill_empty_gamma_table on Icelake platform&lt;/span&gt;&amp;#x000A;&lt;span id="LC33" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC34" class="line" lang="plaintext"&gt;Greg Depoire--Ferrer (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC35" class="line" lang="plaintext"&gt; tinywl: Fix wrong anchor point while resizing a window&lt;/span&gt;&amp;#x000A;&lt;span id="LC36" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC37" class="line" lang="plaintext"&gt;Greg V (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC38" class="line" lang="plaintext"&gt; xdg-shell: check for existing role before setting xdg_popup_surface_role&lt;/span&gt;&amp;#x000A;&lt;span id="LC39" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC40" class="line" lang="plaintext"&gt;Guido Günther (4):&lt;/span&gt;&amp;#x000A;&lt;span id="LC41" class="line" lang="plaintext"&gt; Add wlr-output-power-management&lt;/span&gt;&amp;#x000A;&lt;span id="LC42" class="line" lang="plaintext"&gt; Implement wlr-output-power-management-v1&lt;/span&gt;&amp;#x000A;&lt;span id="LC43" class="line" lang="plaintext"&gt; examples: add output-power-management example client&lt;/span&gt;&amp;#x000A;&lt;span id="LC44" class="line" lang="plaintext"&gt; wlr_output_power_management_v1: Init output_power-&amp;gt;link&lt;/span&gt;&amp;#x000A;&lt;span id="LC45" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC46" class="line" lang="plaintext"&gt;Ilia Bozhinov (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC47" class="line" lang="plaintext"&gt; output-management: add current_configuration_dirty&lt;/span&gt;&amp;#x000A;&lt;span id="LC48" class="line" lang="plaintext"&gt; examples: make output-power-management oneshot by default&lt;/span&gt;&amp;#x000A;&lt;span id="LC49" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC50" class="line" lang="plaintext"&gt;Isaac Freund (16):&lt;/span&gt;&amp;#x000A;&lt;span id="LC51" class="line" lang="plaintext"&gt; Send keyboard enter/leave on capability change&lt;/span&gt;&amp;#x000A;&lt;span id="LC52" class="line" lang="plaintext"&gt; Properly popluate keys array for enter on creation&lt;/span&gt;&amp;#x000A;&lt;span id="LC53" class="line" lang="plaintext"&gt; Send pointer enter/leave on capability change&lt;/span&gt;&amp;#x000A;&lt;span id="LC54" class="line" lang="plaintext"&gt; Return failure of wlr_renderer_init_wl_display()&lt;/span&gt;&amp;#x000A;&lt;span id="LC55" class="line" lang="plaintext"&gt; Return false on wlr_keyboard_set_keymap() failure&lt;/span&gt;&amp;#x000A;&lt;span id="LC56" class="line" lang="plaintext"&gt; tinywl: remove redundant create output global call&lt;/span&gt;&amp;#x000A;&lt;span id="LC57" class="line" lang="plaintext"&gt; Document the events of wlr_layer_surface&lt;/span&gt;&amp;#x000A;&lt;span id="LC58" class="line" lang="plaintext"&gt; tinywl: remove unused variables&lt;/span&gt;&amp;#x000A;&lt;span id="LC59" class="line" lang="plaintext"&gt; tinywl: handle request set selection&lt;/span&gt;&amp;#x000A;&lt;span id="LC60" class="line" lang="plaintext"&gt; layer shell: only send unmap on close if mapped&lt;/span&gt;&amp;#x000A;&lt;span id="LC61" class="line" lang="plaintext"&gt; Make wlr_xcursor_manager_load() return a bool&lt;/span&gt;&amp;#x000A;&lt;span id="LC62" class="line" lang="plaintext"&gt; layer-shell: handle serial wrapping overflow&lt;/span&gt;&amp;#x000A;&lt;span id="LC63" class="line" lang="plaintext"&gt; xdg-shell: handle serial wrapping overflow&lt;/span&gt;&amp;#x000A;&lt;span id="LC64" class="line" lang="plaintext"&gt; xdg-decoration: free old configure structs&lt;/span&gt;&amp;#x000A;&lt;span id="LC65" class="line" lang="plaintext"&gt; layer-shell: upgrade to v3, implement destructor&lt;/span&gt;&amp;#x000A;&lt;span id="LC66" class="line" lang="plaintext"&gt; layer-shell: remove unused surface list&lt;/span&gt;&amp;#x000A;&lt;span id="LC67" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC68" class="line" lang="plaintext"&gt;Jan Beich (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC69" class="line" lang="plaintext"&gt; backend/session: allow GPU enumeration on FreeBSD&lt;/span&gt;&amp;#x000A;&lt;span id="LC70" class="line" lang="plaintext"&gt; xcursor: also look for cursor themes under ${datadir}/icons by default&lt;/span&gt;&amp;#x000A;&lt;span id="LC71" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC72" class="line" lang="plaintext"&gt;Jan Staněk (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC73" class="line" lang="plaintext"&gt; Declare wlr_seat globals as extern&lt;/span&gt;&amp;#x000A;&lt;span id="LC74" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC75" class="line" lang="plaintext"&gt;John Chadwick (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC76" class="line" lang="plaintext"&gt; xwm: end transfers when the requestor is destroyed&lt;/span&gt;&amp;#x000A;&lt;span id="LC77" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC78" class="line" lang="plaintext"&gt;JonnyMako (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC79" class="line" lang="plaintext"&gt; backend/drm: fix missing cursor on external monitors with multi-GPU setup and nouveau&lt;/span&gt;&amp;#x000A;&lt;span id="LC80" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC81" class="line" lang="plaintext"&gt;Julien Olivain (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC82" class="line" lang="plaintext"&gt; render/egl: include EGL/eglmesaext.h only if present&lt;/span&gt;&amp;#x000A;&lt;span id="LC83" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC84" class="line" lang="plaintext"&gt;Kalyan Sriram (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC85" class="line" lang="plaintext"&gt; tinywl: fix geo_box bug in cursor resizing&lt;/span&gt;&amp;#x000A;&lt;span id="LC86" class="line" lang="plaintext"&gt; Don't send redundant capability updates&lt;/span&gt;&amp;#x000A;&lt;span id="LC87" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC88" class="line" lang="plaintext"&gt;Kenny Levinsen (3):&lt;/span&gt;&amp;#x000A;&lt;span id="LC89" class="line" lang="plaintext"&gt; logind: Close fd before releasing device&lt;/span&gt;&amp;#x000A;&lt;span id="LC90" class="line" lang="plaintext"&gt; seat: Create inert objects for missing capabilities&lt;/span&gt;&amp;#x000A;&lt;span id="LC91" class="line" lang="plaintext"&gt; wlr_drag: Destroy drag after releasing grabs&lt;/span&gt;&amp;#x000A;&lt;span id="LC92" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC93" class="line" lang="plaintext"&gt;Kirill Chibisov (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC94" class="line" lang="plaintext"&gt; xcursor: add xorg-x11 and cursors path to XCURSORPATH&lt;/span&gt;&amp;#x000A;&lt;span id="LC95" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC96" class="line" lang="plaintext"&gt;Manuel Stoeckl (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC97" class="line" lang="plaintext"&gt; Fix output rotation direction&lt;/span&gt;&amp;#x000A;&lt;span id="LC98" class="line" lang="plaintext"&gt; output: fix output transform compositions&lt;/span&gt;&amp;#x000A;&lt;span id="LC99" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC100" class="line" lang="plaintext"&gt;Michael Weiser (3):&lt;/span&gt;&amp;#x000A;&lt;span id="LC101" class="line" lang="plaintext"&gt; keyboard-shortcuts-inhibit: Implement the protocol&lt;/span&gt;&amp;#x000A;&lt;span id="LC102" class="line" lang="plaintext"&gt; keyboard-shortcuts-inhibit: Add client example&lt;/span&gt;&amp;#x000A;&lt;span id="LC103" class="line" lang="plaintext"&gt; idle-inhibit: Style and naming improvements&lt;/span&gt;&amp;#x000A;&lt;span id="LC104" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC105" class="line" lang="plaintext"&gt;Rabit (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC106" class="line" lang="plaintext"&gt; Prevent memory leak in copypaste of the screencopy example&lt;/span&gt;&amp;#x000A;&lt;span id="LC107" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC108" class="line" lang="plaintext"&gt;Rouven Czerwinski (4):&lt;/span&gt;&amp;#x000A;&lt;span id="LC109" class="line" lang="plaintext"&gt; backend/drm: add env variable to disable modifiers&lt;/span&gt;&amp;#x000A;&lt;span id="LC110" class="line" lang="plaintext"&gt; backend/drm: remove overzealous finish_drm_surface&lt;/span&gt;&amp;#x000A;&lt;span id="LC111" class="line" lang="plaintext"&gt; render: assert sane values for box functions&lt;/span&gt;&amp;#x000A;&lt;span id="LC112" class="line" lang="plaintext"&gt; surface: don't unset width and height in finalize&lt;/span&gt;&amp;#x000A;&lt;span id="LC113" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC114" class="line" lang="plaintext"&gt;Scott Anderson (8):&lt;/span&gt;&amp;#x000A;&lt;span id="LC115" class="line" lang="plaintext"&gt; meson: Fix protocol includes for compositor examples&lt;/span&gt;&amp;#x000A;&lt;span id="LC116" class="line" lang="plaintext"&gt; examples: Fix compositor-examples&lt;/span&gt;&amp;#x000A;&lt;span id="LC117" class="line" lang="plaintext"&gt; wlr_surface: Post error if multiple role objects created&lt;/span&gt;&amp;#x000A;&lt;span id="LC118" class="line" lang="plaintext"&gt; backend/drm: introduce wlr_drm_fb&lt;/span&gt;&amp;#x000A;&lt;span id="LC119" class="line" lang="plaintext"&gt; backend/drm: don't have fallback atomic commits&lt;/span&gt;&amp;#x000A;&lt;span id="LC120" class="line" lang="plaintext"&gt; backend/drm: move atomic cursor code into pageflip code&lt;/span&gt;&amp;#x000A;&lt;span id="LC121" class="line" lang="plaintext"&gt; backend/drm: don't allow legacy to use direct scanout&lt;/span&gt;&amp;#x000A;&lt;span id="LC122" class="line" lang="plaintext"&gt; Remove libcap support&lt;/span&gt;&amp;#x000A;&lt;span id="LC123" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC124" class="line" lang="plaintext"&gt;Scott Moreau (3):&lt;/span&gt;&amp;#x000A;&lt;span id="LC125" class="line" lang="plaintext"&gt; build: Add 'auto' to logind-provider combo option&lt;/span&gt;&amp;#x000A;&lt;span id="LC126" class="line" lang="plaintext"&gt; xwayland: Don't discard ready signals&lt;/span&gt;&amp;#x000A;&lt;span id="LC127" class="line" lang="plaintext"&gt; xwm: Destroy xwm on hangup or error&lt;/span&gt;&amp;#x000A;&lt;span id="LC128" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC129" class="line" lang="plaintext"&gt;Simon Ser (129):&lt;/span&gt;&amp;#x000A;&lt;span id="LC130" class="line" lang="plaintext"&gt; build: replace version with soversion&lt;/span&gt;&amp;#x000A;&lt;span id="LC131" class="line" lang="plaintext"&gt; render: unconditionally disable implicit X11 includes&lt;/span&gt;&amp;#x000A;&lt;span id="LC132" class="line" lang="plaintext"&gt; meson: fix wayland-server minimum required version&lt;/span&gt;&amp;#x000A;&lt;span id="LC133" class="line" lang="plaintext"&gt; util: add wlr_output_destroy_safe&lt;/span&gt;&amp;#x000A;&lt;span id="LC134" class="line" lang="plaintext"&gt; output: don't destroy global immediately&lt;/span&gt;&amp;#x000A;&lt;span id="LC135" class="line" lang="plaintext"&gt; seat: don't destroy global immediately&lt;/span&gt;&amp;#x000A;&lt;span id="LC136" class="line" lang="plaintext"&gt; xwayland: ignore pointer focus changes&lt;/span&gt;&amp;#x000A;&lt;span id="LC137" class="line" lang="plaintext"&gt; backend/wayland: rename wl_seat.c to seat.c&lt;/span&gt;&amp;#x000A;&lt;span id="LC138" class="line" lang="plaintext"&gt; output: remove wlr_output_impl.schedule_frame&lt;/span&gt;&amp;#x000A;&lt;span id="LC139" class="line" lang="plaintext"&gt; backend/wayland: fix seat caps handling&lt;/span&gt;&amp;#x000A;&lt;span id="LC140" class="line" lang="plaintext"&gt; Introduce wlr_client_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC141" class="line" lang="plaintext"&gt; output: add adaptive_sync_enabled property&lt;/span&gt;&amp;#x000A;&lt;span id="LC142" class="line" lang="plaintext"&gt; backend/x11: add support for adaptive_sync_enabled&lt;/span&gt;&amp;#x000A;&lt;span id="LC143" class="line" lang="plaintext"&gt; backend/drm: add support for adaptive_sync_enabled&lt;/span&gt;&amp;#x000A;&lt;span id="LC144" class="line" lang="plaintext"&gt; xwayland: use explicit indexes when initializing atom_map&lt;/span&gt;&amp;#x000A;&lt;span id="LC145" class="line" lang="plaintext"&gt; xwayland: remove duplicate _NET_WM_NAME entry&lt;/span&gt;&amp;#x000A;&lt;span id="LC146" class="line" lang="plaintext"&gt; xwayland: remove underscore prefix from atom names&lt;/span&gt;&amp;#x000A;&lt;span id="LC147" class="line" lang="plaintext"&gt; output: make wlr_output_schedule_frame set output-&amp;gt;needs_frame&lt;/span&gt;&amp;#x000A;&lt;span id="LC148" class="line" lang="plaintext"&gt; output: don't send a needs_frame event if already sent&lt;/span&gt;&amp;#x000A;&lt;span id="LC149" class="line" lang="plaintext"&gt; util/log: improve time prefix&lt;/span&gt;&amp;#x000A;&lt;span id="LC150" class="line" lang="plaintext"&gt; render/gles2: remove duplicated format list&lt;/span&gt;&amp;#x000A;&lt;span id="LC151" class="line" lang="plaintext"&gt; buffer: remove unused wlr_client_buffer fields&lt;/span&gt;&amp;#x000A;&lt;span id="LC152" class="line" lang="plaintext"&gt; output: add comment about needs_frame in wlr_output_schedule_frame&lt;/span&gt;&amp;#x000A;&lt;span id="LC153" class="line" lang="plaintext"&gt; output: replace wlr_output.damage with a damage event&lt;/span&gt;&amp;#x000A;&lt;span id="LC154" class="line" lang="plaintext"&gt; backend/wayland: close keymap FD&lt;/span&gt;&amp;#x000A;&lt;span id="LC155" class="line" lang="plaintext"&gt; Gracefully handle inert wl_output resources&lt;/span&gt;&amp;#x000A;&lt;span id="LC156" class="line" lang="plaintext"&gt; buffer: add destroy event&lt;/span&gt;&amp;#x000A;&lt;span id="LC157" class="line" lang="plaintext"&gt; buffer: add a release event&lt;/span&gt;&amp;#x000A;&lt;span id="LC158" class="line" lang="plaintext"&gt; buffer: add width and height&lt;/span&gt;&amp;#x000A;&lt;span id="LC159" class="line" lang="plaintext"&gt; output: introduce wlr_output_test&lt;/span&gt;&amp;#x000A;&lt;span id="LC160" class="line" lang="plaintext"&gt; output: check buffer in wlr_output_test&lt;/span&gt;&amp;#x000A;&lt;span id="LC161" class="line" lang="plaintext"&gt; backend: reset EGL surface after buffer swap&lt;/span&gt;&amp;#x000A;&lt;span id="LC162" class="line" lang="plaintext"&gt; Add wlr_output_impl.rollback&lt;/span&gt;&amp;#x000A;&lt;span id="LC163" class="line" lang="plaintext"&gt; render/egl: make config attribs const&lt;/span&gt;&amp;#x000A;&lt;span id="LC164" class="line" lang="plaintext"&gt; backend: set EGL_RENDERABLE_TYPE and EGL_SURFACE_TYPE&lt;/span&gt;&amp;#x000A;&lt;span id="LC165" class="line" lang="plaintext"&gt; render/gles2: only call wlr_egl_bind_display if supported&lt;/span&gt;&amp;#x000A;&lt;span id="LC166" class="line" lang="plaintext"&gt; render: only expose linux-dmabuf if EGL extension is supported&lt;/span&gt;&amp;#x000A;&lt;span id="LC167" class="line" lang="plaintext"&gt; output: fix blurred hw cursors with fractional scaling&lt;/span&gt;&amp;#x000A;&lt;span id="LC168" class="line" lang="plaintext"&gt; output: check for buffer size compatibility in common code&lt;/span&gt;&amp;#x000A;&lt;span id="LC169" class="line" lang="plaintext"&gt; backend/wayland: check scan-out buffer is compatible in output_test&lt;/span&gt;&amp;#x000A;&lt;span id="LC170" class="line" lang="plaintext"&gt; output: fix maybe-uninitialized warning&lt;/span&gt;&amp;#x000A;&lt;span id="LC171" class="line" lang="plaintext"&gt; backend/multi: add backends at end of list&lt;/span&gt;&amp;#x000A;&lt;span id="LC172" class="line" lang="plaintext"&gt; build: use meson.override_dependency&lt;/span&gt;&amp;#x000A;&lt;span id="LC173" class="line" lang="plaintext"&gt; build: use dicts instead of get_variable&lt;/span&gt;&amp;#x000A;&lt;span id="LC174" class="line" lang="plaintext"&gt; build: use summary instead of message&lt;/span&gt;&amp;#x000A;&lt;span id="LC175" class="line" lang="plaintext"&gt; output_layout: improve docs&lt;/span&gt;&amp;#x000A;&lt;span id="LC176" class="line" lang="plaintext"&gt; render/drm_format_set: disallow DRM_FORMAT_INVALID&lt;/span&gt;&amp;#x000A;&lt;span id="LC177" class="line" lang="plaintext"&gt; render/gles2: add wlr_gles2_renderer_check_ext&lt;/span&gt;&amp;#x000A;&lt;span id="LC178" class="line" lang="plaintext"&gt; backend/headless: use FBOs instead of pbuffers&lt;/span&gt;&amp;#x000A;&lt;span id="LC179" class="line" lang="plaintext"&gt; backend/headless: add wlr_headless_backend_create_with_renderer&lt;/span&gt;&amp;#x000A;&lt;span id="LC180" class="line" lang="plaintext"&gt; render/texture: add width and height fields&lt;/span&gt;&amp;#x000A;&lt;span id="LC181" class="line" lang="plaintext"&gt; render/texture: make write_pixels optional&lt;/span&gt;&amp;#x000A;&lt;span id="LC182" class="line" lang="plaintext"&gt; backend/drm: strip alpha channel if necessary&lt;/span&gt;&amp;#x000A;&lt;span id="LC183" class="line" lang="plaintext"&gt; Remove .swp file added by mistake&lt;/span&gt;&amp;#x000A;&lt;span id="LC184" class="line" lang="plaintext"&gt; util/log: write log importance&lt;/span&gt;&amp;#x000A;&lt;span id="LC185" class="line" lang="plaintext"&gt; backend/drm: make page-flip error scarier&lt;/span&gt;&amp;#x000A;&lt;span id="LC186" class="line" lang="plaintext"&gt; examples/dmabuf-capture: use getopt&lt;/span&gt;&amp;#x000A;&lt;span id="LC187" class="line" lang="plaintext"&gt; backend/multi: handle backends depending on each other properly&lt;/span&gt;&amp;#x000A;&lt;span id="LC188" class="line" lang="plaintext"&gt; backend/headless: handle renderer destroy&lt;/span&gt;&amp;#x000A;&lt;span id="LC189" class="line" lang="plaintext"&gt; backend/drm: remove wlr_drm_interface.crtc_move_cursor&lt;/span&gt;&amp;#x000A;&lt;span id="LC190" class="line" lang="plaintext"&gt; backend/drm: remove unused fields&lt;/span&gt;&amp;#x000A;&lt;span id="LC191" class="line" lang="plaintext"&gt; backend/drm: remove mode argument to crtc_pageflip&lt;/span&gt;&amp;#x000A;&lt;span id="LC192" class="line" lang="plaintext"&gt; backend/drm: apply gamma LUT on page-flip&lt;/span&gt;&amp;#x000A;&lt;span id="LC193" class="line" lang="plaintext"&gt; backend/drm: rename crtc_pageflip to crtc_commit&lt;/span&gt;&amp;#x000A;&lt;span id="LC194" class="line" lang="plaintext"&gt; backend/drm: remove conn_enable from interface&lt;/span&gt;&amp;#x000A;&lt;span id="LC195" class="line" lang="plaintext"&gt; backend/drm: remove crtc_set_cursor from interface&lt;/span&gt;&amp;#x000A;&lt;span id="LC196" class="line" lang="plaintext"&gt; backend/drm: GAMMA_LUT_SIZE isn't atomic&lt;/span&gt;&amp;#x000A;&lt;span id="LC197" class="line" lang="plaintext"&gt; backend/drm: simplify atomic commit logic&lt;/span&gt;&amp;#x000A;&lt;span id="LC198" class="line" lang="plaintext"&gt; backend/drm: fix crash in session_signal&lt;/span&gt;&amp;#x000A;&lt;span id="LC199" class="line" lang="plaintext"&gt; backend/drm: remove missing cursor plane workaround&lt;/span&gt;&amp;#x000A;&lt;span id="LC200" class="line" lang="plaintext"&gt; backend/drm: fix combined modeset+enable commits&lt;/span&gt;&amp;#x000A;&lt;span id="LC201" class="line" lang="plaintext"&gt; backend/drm: disable cursor in dealloc_crtc&lt;/span&gt;&amp;#x000A;&lt;span id="LC202" class="line" lang="plaintext"&gt; backend/drm: print error in set_plane_props&lt;/span&gt;&amp;#x000A;&lt;span id="LC203" class="line" lang="plaintext"&gt; backend/drm: fix segfault in drm_crtc_page_flip&lt;/span&gt;&amp;#x000A;&lt;span id="LC204" class="line" lang="plaintext"&gt; output: make wlr_output_set_gamma atomic&lt;/span&gt;&amp;#x000A;&lt;span id="LC205" class="line" lang="plaintext"&gt; backend/drm: fix atomic commits when the GAMMA_LUT prop is missing&lt;/span&gt;&amp;#x000A;&lt;span id="LC206" class="line" lang="plaintext"&gt; Fix -Wreturn-type warnings&lt;/span&gt;&amp;#x000A;&lt;span id="LC207" class="line" lang="plaintext"&gt; render/egl: introduce wlr_egl_unset_current&lt;/span&gt;&amp;#x000A;&lt;span id="LC208" class="line" lang="plaintext"&gt; backend/drm: fix current EGL context on multi-GPU&lt;/span&gt;&amp;#x000A;&lt;span id="LC209" class="line" lang="plaintext"&gt; backend/drm: add missing wlr_egl_unset_current&lt;/span&gt;&amp;#x000A;&lt;span id="LC210" class="line" lang="plaintext"&gt; xwayland: split server&lt;/span&gt;&amp;#x000A;&lt;span id="LC211" class="line" lang="plaintext"&gt; xwayland: add option to disable WM&lt;/span&gt;&amp;#x000A;&lt;span id="LC212" class="line" lang="plaintext"&gt; render/egl: unset current context after swapping buffers&lt;/span&gt;&amp;#x000A;&lt;span id="LC213" class="line" lang="plaintext"&gt; backend/drm: rollback atomic blobs&lt;/span&gt;&amp;#x000A;&lt;span id="LC214" class="line" lang="plaintext"&gt; backend/drm: refuse to enable an output without a mode&lt;/span&gt;&amp;#x000A;&lt;span id="LC215" class="line" lang="plaintext"&gt; backend/drm: remove drm_connector_set_custom_mode&lt;/span&gt;&amp;#x000A;&lt;span id="LC216" class="line" lang="plaintext"&gt; backend/drm: remove enable_drm_connector&lt;/span&gt;&amp;#x000A;&lt;span id="LC217" class="line" lang="plaintext"&gt; backend/drm: make drm_connector_set_mode take a wlr_drm_connector&lt;/span&gt;&amp;#x000A;&lt;span id="LC218" class="line" lang="plaintext"&gt; backend/drm: nuke retry_pageflip&lt;/span&gt;&amp;#x000A;&lt;span id="LC219" class="line" lang="plaintext"&gt; backend/drm: introduce pending and current CRTC state&lt;/span&gt;&amp;#x000A;&lt;span id="LC220" class="line" lang="plaintext"&gt; backend/drm: don't set cursor if off-screen&lt;/span&gt;&amp;#x000A;&lt;span id="LC221" class="line" lang="plaintext"&gt; backend/drm: fix missing crtc-&amp;gt;cursor NULL check&lt;/span&gt;&amp;#x000A;&lt;span id="LC222" class="line" lang="plaintext"&gt; Add comments for missing tablet tool entries&lt;/span&gt;&amp;#x000A;&lt;span id="LC223" class="line" lang="plaintext"&gt; backend/drm: rollback pending CRTC state on test commit&lt;/span&gt;&amp;#x000A;&lt;span id="LC224" class="line" lang="plaintext"&gt; backend/drm: make adaptive_sync atomic&lt;/span&gt;&amp;#x000A;&lt;span id="LC225" class="line" lang="plaintext"&gt; backend/drm: commit/rollback FBs in drm_crtc_commit&lt;/span&gt;&amp;#x000A;&lt;span id="LC226" class="line" lang="plaintext"&gt; backend/drm: drop extra wlr_output_update_enabled call&lt;/span&gt;&amp;#x000A;&lt;span id="LC227" class="line" lang="plaintext"&gt; backend/drm: always perform a CRTC commit in drm_connector_commit&lt;/span&gt;&amp;#x000A;&lt;span id="LC228" class="line" lang="plaintext"&gt; backend/wayland: fix spurious eglSwapBuffers failures&lt;/span&gt;&amp;#x000A;&lt;span id="LC229" class="line" lang="plaintext"&gt; render: stop making EGL context current in wlr_egl_init&lt;/span&gt;&amp;#x000A;&lt;span id="LC230" class="line" lang="plaintext"&gt; backend/drm: fix black screens when enabling output&lt;/span&gt;&amp;#x000A;&lt;span id="LC231" class="line" lang="plaintext"&gt; render: choose DMA-BUF texture target via eglQueryDmaBufModifiersEXT&lt;/span&gt;&amp;#x000A;&lt;span id="LC232" class="line" lang="plaintext"&gt; contributing: resource destroy handlers need to cleanup pointers&lt;/span&gt;&amp;#x000A;&lt;span id="LC233" class="line" lang="plaintext"&gt; contributing: add note about events that destroy objects&lt;/span&gt;&amp;#x000A;&lt;span id="LC234" class="line" lang="plaintext"&gt; backend/drm: fix stack overflow in dealloc_crtc&lt;/span&gt;&amp;#x000A;&lt;span id="LC235" class="line" lang="plaintext"&gt; buffer: document wlr_buffer_get_dmabuf DMA-BUF lifetime&lt;/span&gt;&amp;#x000A;&lt;span id="LC236" class="line" lang="plaintext"&gt; output: document wlr_output_export_dmabuf&lt;/span&gt;&amp;#x000A;&lt;span id="LC237" class="line" lang="plaintext"&gt; render/egl: explicit client extension handling&lt;/span&gt;&amp;#x000A;&lt;span id="LC238" class="line" lang="plaintext"&gt; examples/screencopy-dmabuf: call strncpy with maxlen - 1&lt;/span&gt;&amp;#x000A;&lt;span id="LC239" class="line" lang="plaintext"&gt; examples/fullscreen-shell: stop advertising linux-dmabuf unconditonally&lt;/span&gt;&amp;#x000A;&lt;span id="LC240" class="line" lang="plaintext"&gt; render/gles2: use .x/.y instead of .s/.t&lt;/span&gt;&amp;#x000A;&lt;span id="LC241" class="line" lang="plaintext"&gt; box: add wlr_fbox&lt;/span&gt;&amp;#x000A;&lt;span id="LC242" class="line" lang="plaintext"&gt; util/region: add wlr_region_scale_xy&lt;/span&gt;&amp;#x000A;&lt;span id="LC243" class="line" lang="plaintext"&gt; render: add wlr_render_subtexture_with_matrix&lt;/span&gt;&amp;#x000A;&lt;span id="LC244" class="line" lang="plaintext"&gt; surface: add wlr_surface_state.viewport&lt;/span&gt;&amp;#x000A;&lt;span id="LC245" class="line" lang="plaintext"&gt; surface: introduce wlr_surface_get_buffer_source_box&lt;/span&gt;&amp;#x000A;&lt;span id="LC246" class="line" lang="plaintext"&gt; viewporter: new protocol implementation&lt;/span&gt;&amp;#x000A;&lt;span id="LC247" class="line" lang="plaintext"&gt; surface: ignore viewport src rect on NULL buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC248" class="line" lang="plaintext"&gt; render/egl: print error name&lt;/span&gt;&amp;#x000A;&lt;span id="LC249" class="line" lang="plaintext"&gt; output: rename impl-&amp;gt;rollback to rollback_render&lt;/span&gt;&amp;#x000A;&lt;span id="LC250" class="line" lang="plaintext"&gt; output: make rollback_render mandatory&lt;/span&gt;&amp;#x000A;&lt;span id="LC251" class="line" lang="plaintext"&gt; output: fix dangling renderer context after wlr_output_preferred_read_format&lt;/span&gt;&amp;#x000A;&lt;span id="LC252" class="line" lang="plaintext"&gt; backend/noop: add missing rollback_render output impl&lt;/span&gt;&amp;#x000A;&lt;span id="LC253" class="line" lang="plaintext"&gt; examples/pointer: fix wlr_renderer_end call order&lt;/span&gt;&amp;#x000A;&lt;span id="LC254" class="line" lang="plaintext"&gt; output: add backend docs&lt;/span&gt;&amp;#x000A;&lt;span id="LC255" class="line" lang="plaintext"&gt; backend/drm: fix DPMS on legacy interface&lt;/span&gt;&amp;#x000A;&lt;span id="LC256" class="line" lang="plaintext"&gt; backend/drm: fix typo in drm_surface_make_current arg&lt;/span&gt;&amp;#x000A;&lt;span id="LC257" class="line" lang="plaintext"&gt; backend/drm: check drm_surface_make_current return value&lt;/span&gt;&amp;#x000A;&lt;span id="LC258" class="line" lang="plaintext"&gt; Update version to 0.11.0&lt;/span&gt;&amp;#x000A;&lt;span id="LC259" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC260" class="line" lang="plaintext"&gt;Simon Zeni (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC261" class="line" lang="plaintext"&gt; render/gles2: use glGetAttribLocation instead of hardcoded indices&lt;/span&gt;&amp;#x000A;&lt;span id="LC262" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC263" class="line" lang="plaintext"&gt;Thomas Hebb (3):&lt;/span&gt;&amp;#x000A;&lt;span id="LC264" class="line" lang="plaintext"&gt; wlr_seat: Declare functions in the same order for pointer, keyboard, and touch&lt;/span&gt;&amp;#x000A;&lt;span id="LC265" class="line" lang="plaintext"&gt; wlr_seat: Clarify wording of non-grab-respecting function comments&lt;/span&gt;&amp;#x000A;&lt;span id="LC266" class="line" lang="plaintext"&gt; Allow keyboard and pointer grabs to hook clear_focus()&lt;/span&gt;&amp;#x000A;&lt;span id="LC267" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC268" class="line" lang="plaintext"&gt;Tudor Brindus (19):&lt;/span&gt;&amp;#x000A;&lt;span id="LC269" class="line" lang="plaintext"&gt; backend/libinput: correctly populate x/y fields on tablet proximity in&lt;/span&gt;&amp;#x000A;&lt;span id="LC270" class="line" lang="plaintext"&gt; input/tablet: populate tool tip event position&lt;/span&gt;&amp;#x000A;&lt;span id="LC271" class="line" lang="plaintext"&gt; input/tablet: fix up updated axes after rotation&lt;/span&gt;&amp;#x000A;&lt;span id="LC272" class="line" lang="plaintext"&gt; input/tablet: clear focused surface on surface destroy&lt;/span&gt;&amp;#x000A;&lt;span id="LC273" class="line" lang="plaintext"&gt; wlr/types: use bitshifts for tablet axes enum&lt;/span&gt;&amp;#x000A;&lt;span id="LC274" class="line" lang="plaintext"&gt; backend/wayland: emit tablet tool axis events to the axis handler&lt;/span&gt;&amp;#x000A;&lt;span id="LC275" class="line" lang="plaintext"&gt; input/keyboard: expose keymap matching helper&lt;/span&gt;&amp;#x000A;&lt;span id="LC276" class="line" lang="plaintext"&gt; input/pointer: notify compositor when constraint region changes&lt;/span&gt;&amp;#x000A;&lt;span id="LC277" class="line" lang="plaintext"&gt; tablet: pass motion events to implicitly grabbed surface&lt;/span&gt;&amp;#x000A;&lt;span id="LC278" class="line" lang="plaintext"&gt; tablet: expose wlr_tablet_tool_v2_has_implicit_grab function&lt;/span&gt;&amp;#x000A;&lt;span id="LC279" class="line" lang="plaintext"&gt; util/log: use bright black rather than black for WLR_DEBUG&lt;/span&gt;&amp;#x000A;&lt;span id="LC280" class="line" lang="plaintext"&gt; xwayland: send focus change event unconditionally&lt;/span&gt;&amp;#x000A;&lt;span id="LC281" class="line" lang="plaintext"&gt; xwayland: add error-checking to `server_start_lazy`&lt;/span&gt;&amp;#x000A;&lt;span id="LC282" class="line" lang="plaintext"&gt; backend/wayland: scale tablet tool position into [0, 1] range&lt;/span&gt;&amp;#x000A;&lt;span id="LC283" class="line" lang="plaintext"&gt; util: fix and move `get_current_time_msec` into a util file&lt;/span&gt;&amp;#x000A;&lt;span id="LC284" class="line" lang="plaintext"&gt; util/time: de-duplicate `timespec_to_msec`&lt;/span&gt;&amp;#x000A;&lt;span id="LC285" class="line" lang="plaintext"&gt; util/time: move `timespec_sub` to time utilities&lt;/span&gt;&amp;#x000A;&lt;span id="LC286" class="line" lang="plaintext"&gt; input/keyboard: send modifiers on first keyboard enter&lt;/span&gt;&amp;#x000A;&lt;span id="LC287" class="line" lang="plaintext"&gt; input/pointer: add wlr_seat_pointer_wrap&lt;/span&gt;&amp;#x000A;&lt;span id="LC288" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC289" class="line" lang="plaintext"&gt;Tudor Roman (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC290" class="line" lang="plaintext"&gt; seat: add selection event docs&lt;/span&gt;&amp;#x000A;&lt;span id="LC291" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC292" class="line" lang="plaintext"&gt;Will Daly (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC293" class="line" lang="plaintext"&gt; Fix error when reconnecting external display&lt;/span&gt;&amp;#x000A;&lt;span id="LC294" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC295" class="line" lang="plaintext"&gt;j-n-f (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC296" class="line" lang="plaintext"&gt; examples: fix improper use of `free`&lt;/span&gt;&amp;#x000A;&lt;span id="LC297" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC298" class="line" lang="plaintext"&gt;r-c-f (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC299" class="line" lang="plaintext"&gt; seat: add check for NULL keyboard&lt;/span&gt;&amp;#x000A;&lt;span id="LC300" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC301" class="line" lang="plaintext"&gt;xdavidwu (3):&lt;/span&gt;&amp;#x000A;&lt;span id="LC302" class="line" lang="plaintext"&gt; virtual-keyboard: add wlr_input_device_get_virtual_keyboard&lt;/span&gt;&amp;#x000A;&lt;span id="LC303" class="line" lang="plaintext"&gt; input-method: implement keyboard grabs&lt;/span&gt;&amp;#x000A;&lt;span id="LC304" class="line" lang="plaintext"&gt; examples/input-method-keyboard-grab: new example&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&amp;#x000A;&lt;copy-code&gt;&lt;/copy-code&gt;&amp;#x000A;&lt;/div&gt;</content> + <updated>2020-07-15T22:28:37Z</updated> + <media:thumbnail width="40" height="40" url="https://secure.gravatar.com/avatar/1ce071dd3264c7d9f5d9c0b7137faa6b?s=80&amp;d=identicon"/> + <author> + <name>Simon Ser</name> + <email>contact@emersion.fr</email> + </author> +</entry> +<entry> + <id>https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.10.1</id> + <link href="https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.10.1"/> + <title>0.10.1</title> + <summary>wlroots 0.10.1 + +This is a bugfix release for wlroots 0.10.0. + +Aleksei Bavshin (1): + xdg-shell: fix popups rendered outside of the screen + +Scott Anderson (2): + meson: Fix protocol includes for compositor examples + examples: Fix compositor-examples + +Simon Ser (2): + xwayland: ignore pointer focus changes + Update version to 0.10.1 +</summary> + <content type="html">&lt;p data-sourcepos="1:1-1:22" dir="auto"&gt;Release for tag 0.10.1&lt;/p&gt;</content> + <updated>2020-03-10T14:00:10Z</updated> + <media:thumbnail width="40" height="40" url="https://secure.gravatar.com/avatar/1ce071dd3264c7d9f5d9c0b7137faa6b?s=80&amp;d=identicon"/> + <author> + <name>Simon Ser</name> + <email>contact@emersion.fr</email> + </author> +</entry> +<entry> + <id>https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.10.0</id> + <link href="https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.10.0"/> + <title>0.10.0</title> + <summary>wlroots 0.10.0 + +Drew DeVault (1): + Drop RDP backend + +Jan Staněk (1): + Honor the `examples` meson setting + +Jason (1): + Allow WLR_RDP_PORT to be any valid TCP/UDP port number + +Scott Anderson (1): + Bump meson version to 0.51.2 + +Simon Ser (9): + backend/wayland: listen to wl_buffer.release events + backend/wayland: handle display errors more gracefully + render/egl: remove SURFACELESS_MESA special case + render/gles2: unbind textures after use + docs: remove rootston-specific env vars + docs: establish one section per backend + docs: document XDG_SESSION_ID + backend/drm: prevent outputs from being destroyed on commit + keyboard-group: two NULL keymaps are equal + +xdavidwu (1): + text-input: fix missing destroy signal init</summary> + <content type="html">&lt;p data-sourcepos="1:1-1:55" dir="auto"&gt;wlroots 0.10.0 includes the following breaking changes:&lt;/p&gt;&amp;#x000A;&lt;h2 data-sourcepos="3:1-3:43" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-the-rdp-backend-has-been-removed-1988" class="anchor" href="#the-rdp-backend-has-been-removed-1988" aria-hidden="true"&gt;&lt;/a&gt;The RDP backend has been removed (#1988)&lt;/h2&gt;&amp;#x000A;&lt;p data-sourcepos="5:1-5:127" dir="auto"&gt;The RDP (remote desktop) backend has been removed entirely in favor of solutions like &lt;a href="https://github.com/any1/wayvnc" rel="nofollow noreferrer noopener" target="_blank"&gt;wayvnc&lt;/a&gt;.&lt;/p&gt;&amp;#x000A;&lt;div class="gl-relative markdown-code-block js-markdown-code"&gt;&amp;#x000A;&lt;pre data-sourcepos="7:1-34:3" class="code highlight js-syntax-highlight language-plaintext" lang="plaintext" data-canonical-lang="" v-pre="true"&gt;&lt;code&gt;&lt;span id="LC1" class="line" lang="plaintext"&gt;wlroots 0.10.0&lt;/span&gt;&amp;#x000A;&lt;span id="LC2" class="line" lang="plaintext"&gt;Drew DeVault (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC3" class="line" lang="plaintext"&gt; Drop RDP backend&lt;/span&gt;&amp;#x000A;&lt;span id="LC4" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC5" class="line" lang="plaintext"&gt;Jan Staněk (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC6" class="line" lang="plaintext"&gt; Honor the `examples` meson setting&lt;/span&gt;&amp;#x000A;&lt;span id="LC7" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC8" class="line" lang="plaintext"&gt;Jason (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC9" class="line" lang="plaintext"&gt; Allow WLR_RDP_PORT to be any valid TCP/UDP port number&lt;/span&gt;&amp;#x000A;&lt;span id="LC10" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC11" class="line" lang="plaintext"&gt;Scott Anderson (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC12" class="line" lang="plaintext"&gt; Bump meson version to 0.51.2&lt;/span&gt;&amp;#x000A;&lt;span id="LC13" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC14" class="line" lang="plaintext"&gt;Simon Ser (9):&lt;/span&gt;&amp;#x000A;&lt;span id="LC15" class="line" lang="plaintext"&gt; backend/wayland: listen to wl_buffer.release events&lt;/span&gt;&amp;#x000A;&lt;span id="LC16" class="line" lang="plaintext"&gt; backend/wayland: handle display errors more gracefully&lt;/span&gt;&amp;#x000A;&lt;span id="LC17" class="line" lang="plaintext"&gt; render/egl: remove SURFACELESS_MESA special case&lt;/span&gt;&amp;#x000A;&lt;span id="LC18" class="line" lang="plaintext"&gt; render/gles2: unbind textures after use&lt;/span&gt;&amp;#x000A;&lt;span id="LC19" class="line" lang="plaintext"&gt; docs: remove rootston-specific env vars&lt;/span&gt;&amp;#x000A;&lt;span id="LC20" class="line" lang="plaintext"&gt; docs: establish one section per backend&lt;/span&gt;&amp;#x000A;&lt;span id="LC21" class="line" lang="plaintext"&gt; docs: document XDG_SESSION_ID&lt;/span&gt;&amp;#x000A;&lt;span id="LC22" class="line" lang="plaintext"&gt; backend/drm: prevent outputs from being destroyed on commit&lt;/span&gt;&amp;#x000A;&lt;span id="LC23" class="line" lang="plaintext"&gt; keyboard-group: two NULL keymaps are equal&lt;/span&gt;&amp;#x000A;&lt;span id="LC24" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC25" class="line" lang="plaintext"&gt;xdavidwu (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC26" class="line" lang="plaintext"&gt; text-input: fix missing destroy signal init&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&amp;#x000A;&lt;copy-code&gt;&lt;/copy-code&gt;&amp;#x000A;&lt;/div&gt;</content> + <updated>2020-01-22T18:22:04Z</updated> + <media:thumbnail width="40" height="40" url="https://secure.gravatar.com/avatar/3db493f2a40c406b488668a4660dc629?s=80&amp;d=identicon"/> + <author> + <name>Drew DeVault</name> + <email>sir@cmpwn.com</email> + </author> +</entry> +<entry> + <id>https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.9.1</id> + <link href="https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.9.1"/> + <title>0.9.1</title> + <summary>wlroots 0.9.1 + +Andri Yngvason (1): + virtual-pointer: Actually use the value passed to axis_discrete + +Ilia Bozhinov (1): + xwm: allow applications to change focus between their own surfaces + +Simon Ser (1): + backend/wayland: fix frame callback not registered</summary> + <content type="html">&lt;div class="gl-relative markdown-code-block js-markdown-code"&gt;&amp;#x000A;&lt;pre data-sourcepos="1:1-11:3" class="code highlight js-syntax-highlight language-plaintext" lang="plaintext" data-canonical-lang="" v-pre="true"&gt;&lt;code&gt;&lt;span id="LC1" class="line" lang="plaintext"&gt;wlroots 0.9.1&lt;/span&gt;&amp;#x000A;&lt;span id="LC2" class="line" lang="plaintext"&gt;Andri Yngvason (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC3" class="line" lang="plaintext"&gt; virtual-pointer: Actually use the value passed to axis_discrete&lt;/span&gt;&amp;#x000A;&lt;span id="LC4" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC5" class="line" lang="plaintext"&gt;Ilia Bozhinov (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC6" class="line" lang="plaintext"&gt; xwm: allow applications to change focus between their own surfaces&lt;/span&gt;&amp;#x000A;&lt;span id="LC7" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC8" class="line" lang="plaintext"&gt;Simon Ser (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC9" class="line" lang="plaintext"&gt; backend/wayland: fix frame callback not registered&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&amp;#x000A;&lt;copy-code&gt;&lt;/copy-code&gt;&amp;#x000A;&lt;/div&gt;</content> + <updated>2020-01-06T14:01:10Z</updated> + <media:thumbnail width="40" height="40" url="https://secure.gravatar.com/avatar/3db493f2a40c406b488668a4660dc629?s=80&amp;d=identicon"/> + <author> + <name>Drew DeVault</name> + <email>sir@cmpwn.com</email> + </author> +</entry> +<entry> + <id>https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.9.0</id> + <link href="https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.9.0"/> + <title>0.9.0</title> + <summary>wlroots 0.9.0 + +Alynx Zhou (1): + Skip assign when sub_x or sub_y is NULL in wlr_surface_surface_at + +Andri Yngvason (3): + output: Add commit sequence number + protocol/screencopy: Add damage reporting + screencopy: Implement damage reporting + +Brian Ashworth (2): + Introduce wlr_keyboard_group + wlr_keyboard_group: fix mem leak in refresh_state + +Danilo Spinella (1): + Add new define EGL_NO_X11 for newer mesa library + +Dorota Czaplejewicz (1): + virtual_keyboard: Accept keycode 0 + +Drew DeVault (1): + Introduce wlr_renderer_get_egl + +Ferdinand Bachmann (1): + Add missing include required by mesa and libglvnd change + +György Kurucz (1): + Fix heap-use-after-free in wlr_send_tablet_v2_tablet_pad_leave + +Ilia Bozhinov (1): + wlr_box: properly calculate closest point for non-positive area boxes + +Ivan Molodetskikh (1): + output: add block_idle_frame + +Jan Beich (1): + examples: set mode when creating shm object + +Jason (2): + Amend typos + Amend typo + +Josef Gajdusek (1): + virtual-pointer: Add support for the wlr-virtual-pointer-unstable-v1 + +Manuel Stoeckl (1): + output: fix cursor wl_surface.{enter,leave} tracking + +Ronan Pigott (2): + session/logind: support CanGraphical property + render/gles2: do not set GL_TEXTURE_MAG_FILTER + +Rouven Czerwinski (1): + backend/drm: print preferred mode + +Scott Anderson (8): + backend/x11: Give X11 a real rendering loop + session/logind: Clean up add_signal_matches + render/gles: Simplify textures a bit + backend: Do not attempt DRM on X11/WL failure + backend/x11: Drop required present version + backend/x11: Revert usage of present extension + meson: Various improvements + meson: Remove tag generation + +Scott Moreau (3): + xwayland: Expose configure request mask + build: Pass library as first argument to pkgconfig.generate() + xwayland: Clean up if Xwayland fails to start + +Simon Ser (51): + build: workaround for meson disabler object not working with if not + render/egl: support formats with zero modifiers + backend/drm: use modifiers for our GBM buffers + build: simplify by using disabler deps + backend/wayland: add support for direct scan-out + render/gles2: don't unset the current EGL surface when destroying texture + protocol: sync layer-shell with upstream + backend/drm: track gbm_bo during direct scan-out + render/egl: prevent use-after-free when destroying current surface + backend/drm: retry without modifiers for the primary plane + backend/drm: add support for custom modes + output-management-v1: add assertion as a safety net + render: remove EGL includes from wlr_texture.h + render/gles2: provide public API to access GL texture + backend/wayland: add support for relative-pointer-unstable-v1 + backend/wayland: expose remote objects + output: add wlr_output_event_present.commit_seq + Add -Wmissing-prototypes + output: set wlr_output.commit_seq before firing the commit event + output: fix off-by-one wlr_output_event_present.commit_seq + presentation-time: make API more flexible + presentation-time: add helper for common case + backend/wayland: add support for presentation-time + render: remove return in wlr_texture_get_size + Simplify globals implementation by removing destructors + Revert "output: add block_idle_frame" + keyboard: emit key events without keymap + backend/drm, backend/libinput: listen to session destroy + backend/drm: fix segfault in init_drm_surface + backend/drm: add BenQ to manufacturer list + buffer: improve error handling + surface: don't unref the current buffer on failure + output: fix wlr_output_preferred_mode fallback + Refactor EGL/GL API loading + ci: add xorgproto dep to Arch build + render: fix EGL extensions not loaded + Revert "ci: add xorgproto dep to Arch build" + ci: add a build run with all features disabled + output: add description + xdg-output-v1: use wlr_output.description + output-management-v1: use wlr_output.description + output: re-introduce atomic mode, enabled, scale and transform + backend/drm: modeset before enabling an output + output: clear pending bit if pending == current + output: refuse to commit a buffer or modeset a disabled output + tinywl: enable and commit output when modesetting + xdg-shell: fix inert xdg_surface handling + xdg-shell: make wlr_xdg_surface_from_resource reject NULL + output: only advertise current mode + backend/drm: don't modeset with a NULL mode after TTY switch + render: guard rendering operations between begin() and end() + +Timidger (2): + layer_shell: set layer of existing surface + Use layer shell v2 + +Ting-Wei Lan (1): + backend/session/freebsd: Fix the way to get TTY path + +myfreeweb (1): + Send tablet tool frame on proximity_out + +n3rdopolis (2): + Update environment variable documentation to include more backends + note libinput as well</summary> + <content type="html">&lt;p data-sourcepos="1:1-1:54" dir="auto"&gt;wlroots 0.9.0 includes the following breaking changes:&lt;/p&gt;&amp;#x000A;&lt;h2 data-sourcepos="3:1-3:51" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-layer_shell-set-layer-of-existing-surface-1842" class="anchor" href="#layer_shell-set-layer-of-existing-surface-1842" aria-hidden="true"&gt;&lt;/a&gt;layer_shell: set layer of existing surface #1842&lt;/h2&gt;&amp;#x000A;&lt;p data-sourcepos="5:1-5:184" dir="auto"&gt;The layer of a layer surface may now be changed at runtime. The &lt;code&gt;layer&lt;/code&gt; field has been removed from &lt;code&gt;struct wlr_layer_surface_v1&lt;/code&gt; and introduced to &lt;code&gt;struct wlr_layer_surface_v1_state&lt;/code&gt;.&lt;/p&gt;&amp;#x000A;&lt;h2 data-sourcepos="7:1-7:50" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-backenddrm-add-support-for-custom-modes-1881" class="anchor" href="#backenddrm-add-support-for-custom-modes-1881" aria-hidden="true"&gt;&lt;/a&gt;backend/drm: add support for custom modes #1881&lt;/h2&gt;&amp;#x000A;&lt;p data-sourcepos="9:1-9:72" dir="auto"&gt;&lt;code&gt;wlr_drm_connector_add_mode&lt;/code&gt; now returns the new mode instead of a bool.&lt;/p&gt;&amp;#x000A;&lt;h2 data-sourcepos="11:1-11:64" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-simplify-globals-implementation-by-removing-destructors-1915" class="anchor" href="#simplify-globals-implementation-by-removing-destructors-1915" aria-hidden="true"&gt;&lt;/a&gt;Simplify globals implementation by removing destructors #1915&lt;/h2&gt;&amp;#x000A;&lt;p data-sourcepos="13:1-13:68" dir="auto"&gt;Destructors and resource lists for static globals have been removed.&lt;/p&gt;&amp;#x000A;&lt;h2 data-sourcepos="15:1-15:38" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-improve-presentation-time-api-1919" class="anchor" href="#improve-presentation-time-api-1919" aria-hidden="true"&gt;&lt;/a&gt;Improve presentation-time API #1919&lt;/h2&gt;&amp;#x000A;&lt;p data-sourcepos="17:1-17:493" dir="auto"&gt;Instead of calling &lt;code&gt;wlr_presentation_surface_sampled&lt;/code&gt; at render time and &lt;code&gt;wlr_presentation_send_surface_presented&lt;/code&gt; at presentation time, most compositors now just need to call &lt;code&gt;wlr_presentation_surface_sampled_on_output&lt;/code&gt; at render time. Compositors that call &lt;code&gt;wlr_buffer_ref&lt;/code&gt; need to call &lt;code&gt;wlr_presentation_surface_sampled&lt;/code&gt; when they ref the buffer, &lt;code&gt;wlr_presentation_feedback_send_presented&lt;/code&gt; when this buffer has been presented for the first time and then &lt;code&gt;wlr_presentation_feedback_destroy&lt;/code&gt;.&lt;/p&gt;&amp;#x000A;&lt;h2 data-sourcepos="19:1-19:71" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-output-re-introduce-atomic-mode-enabled-scale-and-transform-1797" class="anchor" href="#output-re-introduce-atomic-mode-enabled-scale-and-transform-1797" aria-hidden="true"&gt;&lt;/a&gt;output: re-introduce atomic mode, enabled, scale and transform #1797&lt;/h2&gt;&amp;#x000A;&lt;ul data-sourcepos="21:1-24:0" dir="auto"&gt;&amp;#x000A;&lt;li data-sourcepos="21:1-21:183"&gt;Compositors now need to call &lt;code&gt;wlr_output_commit&lt;/code&gt; after &lt;code&gt;wlr_output_enable&lt;/code&gt;, &lt;code&gt;wlr_output_set_mode&lt;/code&gt;, &lt;code&gt;wlr_output_set_custom_mode&lt;/code&gt;, &lt;code&gt;wlr_output_set_transform&lt;/code&gt; or &lt;code&gt;wlr_output_set_scale&lt;/code&gt;&amp;#x000A;&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="22:1-22:117"&gt;&amp;#x000A;&lt;code&gt;wlr_output_set_mode&lt;/code&gt; no longer implicitly enables the output, compositors need to call &lt;code&gt;wlr_output_enable&lt;/code&gt; as well&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="23:1-24:0"&gt;Compositors now need to call &lt;code&gt;wlr_output_rollback&lt;/code&gt; after &lt;code&gt;wlr_output_attach_render&lt;/code&gt; if they decide not to render&lt;/li&gt;&amp;#x000A;&lt;/ul&gt;&amp;#x000A;&lt;div class="gl-relative markdown-code-block js-markdown-code"&gt;&amp;#x000A;&lt;pre data-sourcepos="25:1-160:3" class="code highlight js-syntax-highlight language-plaintext" lang="plaintext" data-canonical-lang="" v-pre="true"&gt;&lt;code&gt;&lt;span id="LC1" class="line" lang="plaintext"&gt;Alynx Zhou (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC2" class="line" lang="plaintext"&gt; Skip assign when sub_x or sub_y is NULL in wlr_surface_surface_at&lt;/span&gt;&amp;#x000A;&lt;span id="LC3" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC4" class="line" lang="plaintext"&gt;Andri Yngvason (3):&lt;/span&gt;&amp;#x000A;&lt;span id="LC5" class="line" lang="plaintext"&gt; output: Add commit sequence number&lt;/span&gt;&amp;#x000A;&lt;span id="LC6" class="line" lang="plaintext"&gt; protocol/screencopy: Add damage reporting&lt;/span&gt;&amp;#x000A;&lt;span id="LC7" class="line" lang="plaintext"&gt; screencopy: Implement damage reporting&lt;/span&gt;&amp;#x000A;&lt;span id="LC8" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC9" class="line" lang="plaintext"&gt;Brian Ashworth (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC10" class="line" lang="plaintext"&gt; Introduce wlr_keyboard_group&lt;/span&gt;&amp;#x000A;&lt;span id="LC11" class="line" lang="plaintext"&gt; wlr_keyboard_group: fix mem leak in refresh_state&lt;/span&gt;&amp;#x000A;&lt;span id="LC12" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC13" class="line" lang="plaintext"&gt;Danilo Spinella (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC14" class="line" lang="plaintext"&gt; Add new define EGL_NO_X11 for newer mesa library&lt;/span&gt;&amp;#x000A;&lt;span id="LC15" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC16" class="line" lang="plaintext"&gt;Dorota Czaplejewicz (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC17" class="line" lang="plaintext"&gt; virtual_keyboard: Accept keycode 0&lt;/span&gt;&amp;#x000A;&lt;span id="LC18" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC19" class="line" lang="plaintext"&gt;Drew DeVault (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC20" class="line" lang="plaintext"&gt; Introduce wlr_renderer_get_egl&lt;/span&gt;&amp;#x000A;&lt;span id="LC21" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC22" class="line" lang="plaintext"&gt;Ferdinand Bachmann (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC23" class="line" lang="plaintext"&gt; Add missing include required by mesa and libglvnd change&lt;/span&gt;&amp;#x000A;&lt;span id="LC24" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC25" class="line" lang="plaintext"&gt;György Kurucz (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC26" class="line" lang="plaintext"&gt; Fix heap-use-after-free in wlr_send_tablet_v2_tablet_pad_leave&lt;/span&gt;&amp;#x000A;&lt;span id="LC27" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC28" class="line" lang="plaintext"&gt;Ilia Bozhinov (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC29" class="line" lang="plaintext"&gt; wlr_box: properly calculate closest point for non-positive area boxes&lt;/span&gt;&amp;#x000A;&lt;span id="LC30" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC31" class="line" lang="plaintext"&gt;Ivan Molodetskikh (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC32" class="line" lang="plaintext"&gt; output: add block_idle_frame&lt;/span&gt;&amp;#x000A;&lt;span id="LC33" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC34" class="line" lang="plaintext"&gt;Jan Beich (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC35" class="line" lang="plaintext"&gt; examples: set mode when creating shm object&lt;/span&gt;&amp;#x000A;&lt;span id="LC36" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC37" class="line" lang="plaintext"&gt;Jason (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC38" class="line" lang="plaintext"&gt; Amend typos&lt;/span&gt;&amp;#x000A;&lt;span id="LC39" class="line" lang="plaintext"&gt; Amend typo&lt;/span&gt;&amp;#x000A;&lt;span id="LC40" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC41" class="line" lang="plaintext"&gt;Josef Gajdusek (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC42" class="line" lang="plaintext"&gt; virtual-pointer: Add support for the wlr-virtual-pointer-unstable-v1&lt;/span&gt;&amp;#x000A;&lt;span id="LC43" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC44" class="line" lang="plaintext"&gt;Manuel Stoeckl (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC45" class="line" lang="plaintext"&gt; output: fix cursor wl_surface.{enter,leave} tracking&lt;/span&gt;&amp;#x000A;&lt;span id="LC46" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC47" class="line" lang="plaintext"&gt;Ronan Pigott (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC48" class="line" lang="plaintext"&gt; session/logind: support CanGraphical property&lt;/span&gt;&amp;#x000A;&lt;span id="LC49" class="line" lang="plaintext"&gt; render/gles2: do not set GL_TEXTURE_MAG_FILTER&lt;/span&gt;&amp;#x000A;&lt;span id="LC50" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC51" class="line" lang="plaintext"&gt;Rouven Czerwinski (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC52" class="line" lang="plaintext"&gt; backend/drm: print preferred mode&lt;/span&gt;&amp;#x000A;&lt;span id="LC53" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC54" class="line" lang="plaintext"&gt;Scott Anderson (8):&lt;/span&gt;&amp;#x000A;&lt;span id="LC55" class="line" lang="plaintext"&gt; backend/x11: Give X11 a real rendering loop&lt;/span&gt;&amp;#x000A;&lt;span id="LC56" class="line" lang="plaintext"&gt; session/logind: Clean up add_signal_matches&lt;/span&gt;&amp;#x000A;&lt;span id="LC57" class="line" lang="plaintext"&gt; render/gles: Simplify textures a bit&lt;/span&gt;&amp;#x000A;&lt;span id="LC58" class="line" lang="plaintext"&gt; backend: Do not attempt DRM on X11/WL failure&lt;/span&gt;&amp;#x000A;&lt;span id="LC59" class="line" lang="plaintext"&gt; backend/x11: Drop required present version&lt;/span&gt;&amp;#x000A;&lt;span id="LC60" class="line" lang="plaintext"&gt; backend/x11: Revert usage of present extension&lt;/span&gt;&amp;#x000A;&lt;span id="LC61" class="line" lang="plaintext"&gt; meson: Various improvements&lt;/span&gt;&amp;#x000A;&lt;span id="LC62" class="line" lang="plaintext"&gt; meson: Remove tag generation&lt;/span&gt;&amp;#x000A;&lt;span id="LC63" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC64" class="line" lang="plaintext"&gt;Scott Moreau (3):&lt;/span&gt;&amp;#x000A;&lt;span id="LC65" class="line" lang="plaintext"&gt; xwayland: Expose configure request mask&lt;/span&gt;&amp;#x000A;&lt;span id="LC66" class="line" lang="plaintext"&gt; build: Pass library as first argument to pkgconfig.generate()&lt;/span&gt;&amp;#x000A;&lt;span id="LC67" class="line" lang="plaintext"&gt; xwayland: Clean up if Xwayland fails to start&lt;/span&gt;&amp;#x000A;&lt;span id="LC68" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC69" class="line" lang="plaintext"&gt;Simon Ser (51):&lt;/span&gt;&amp;#x000A;&lt;span id="LC70" class="line" lang="plaintext"&gt; build: workaround for meson disabler object not working with if not&lt;/span&gt;&amp;#x000A;&lt;span id="LC71" class="line" lang="plaintext"&gt; render/egl: support formats with zero modifiers&lt;/span&gt;&amp;#x000A;&lt;span id="LC72" class="line" lang="plaintext"&gt; backend/drm: use modifiers for our GBM buffers&lt;/span&gt;&amp;#x000A;&lt;span id="LC73" class="line" lang="plaintext"&gt; build: simplify by using disabler deps&lt;/span&gt;&amp;#x000A;&lt;span id="LC74" class="line" lang="plaintext"&gt; backend/wayland: add support for direct scan-out&lt;/span&gt;&amp;#x000A;&lt;span id="LC75" class="line" lang="plaintext"&gt; render/gles2: don't unset the current EGL surface when destroying texture&lt;/span&gt;&amp;#x000A;&lt;span id="LC76" class="line" lang="plaintext"&gt; protocol: sync layer-shell with upstream&lt;/span&gt;&amp;#x000A;&lt;span id="LC77" class="line" lang="plaintext"&gt; backend/drm: track gbm_bo during direct scan-out&lt;/span&gt;&amp;#x000A;&lt;span id="LC78" class="line" lang="plaintext"&gt; render/egl: prevent use-after-free when destroying current surface&lt;/span&gt;&amp;#x000A;&lt;span id="LC79" class="line" lang="plaintext"&gt; backend/drm: retry without modifiers for the primary plane&lt;/span&gt;&amp;#x000A;&lt;span id="LC80" class="line" lang="plaintext"&gt; backend/drm: add support for custom modes&lt;/span&gt;&amp;#x000A;&lt;span id="LC81" class="line" lang="plaintext"&gt; output-management-v1: add assertion as a safety net&lt;/span&gt;&amp;#x000A;&lt;span id="LC82" class="line" lang="plaintext"&gt; render: remove EGL includes from wlr_texture.h&lt;/span&gt;&amp;#x000A;&lt;span id="LC83" class="line" lang="plaintext"&gt; render/gles2: provide public API to access GL texture&lt;/span&gt;&amp;#x000A;&lt;span id="LC84" class="line" lang="plaintext"&gt; backend/wayland: add support for relative-pointer-unstable-v1&lt;/span&gt;&amp;#x000A;&lt;span id="LC85" class="line" lang="plaintext"&gt; backend/wayland: expose remote objects&lt;/span&gt;&amp;#x000A;&lt;span id="LC86" class="line" lang="plaintext"&gt; output: add wlr_output_event_present.commit_seq&lt;/span&gt;&amp;#x000A;&lt;span id="LC87" class="line" lang="plaintext"&gt; Add -Wmissing-prototypes&lt;/span&gt;&amp;#x000A;&lt;span id="LC88" class="line" lang="plaintext"&gt; output: set wlr_output.commit_seq before firing the commit event&lt;/span&gt;&amp;#x000A;&lt;span id="LC89" class="line" lang="plaintext"&gt; output: fix off-by-one wlr_output_event_present.commit_seq&lt;/span&gt;&amp;#x000A;&lt;span id="LC90" class="line" lang="plaintext"&gt; presentation-time: make API more flexible&lt;/span&gt;&amp;#x000A;&lt;span id="LC91" class="line" lang="plaintext"&gt; presentation-time: add helper for common case&lt;/span&gt;&amp;#x000A;&lt;span id="LC92" class="line" lang="plaintext"&gt; backend/wayland: add support for presentation-time&lt;/span&gt;&amp;#x000A;&lt;span id="LC93" class="line" lang="plaintext"&gt; render: remove return in wlr_texture_get_size&lt;/span&gt;&amp;#x000A;&lt;span id="LC94" class="line" lang="plaintext"&gt; Simplify globals implementation by removing destructors&lt;/span&gt;&amp;#x000A;&lt;span id="LC95" class="line" lang="plaintext"&gt; Revert "output: add block_idle_frame"&lt;/span&gt;&amp;#x000A;&lt;span id="LC96" class="line" lang="plaintext"&gt; keyboard: emit key events without keymap&lt;/span&gt;&amp;#x000A;&lt;span id="LC97" class="line" lang="plaintext"&gt; backend/drm, backend/libinput: listen to session destroy&lt;/span&gt;&amp;#x000A;&lt;span id="LC98" class="line" lang="plaintext"&gt; backend/drm: fix segfault in init_drm_surface&lt;/span&gt;&amp;#x000A;&lt;span id="LC99" class="line" lang="plaintext"&gt; backend/drm: add BenQ to manufacturer list&lt;/span&gt;&amp;#x000A;&lt;span id="LC100" class="line" lang="plaintext"&gt; buffer: improve error handling&lt;/span&gt;&amp;#x000A;&lt;span id="LC101" class="line" lang="plaintext"&gt; surface: don't unref the current buffer on failure&lt;/span&gt;&amp;#x000A;&lt;span id="LC102" class="line" lang="plaintext"&gt; output: fix wlr_output_preferred_mode fallback&lt;/span&gt;&amp;#x000A;&lt;span id="LC103" class="line" lang="plaintext"&gt; Refactor EGL/GL API loading&lt;/span&gt;&amp;#x000A;&lt;span id="LC104" class="line" lang="plaintext"&gt; ci: add xorgproto dep to Arch build&lt;/span&gt;&amp;#x000A;&lt;span id="LC105" class="line" lang="plaintext"&gt; render: fix EGL extensions not loaded&lt;/span&gt;&amp;#x000A;&lt;span id="LC106" class="line" lang="plaintext"&gt; Revert "ci: add xorgproto dep to Arch build"&lt;/span&gt;&amp;#x000A;&lt;span id="LC107" class="line" lang="plaintext"&gt; ci: add a build run with all features disabled&lt;/span&gt;&amp;#x000A;&lt;span id="LC108" class="line" lang="plaintext"&gt; output: add description&lt;/span&gt;&amp;#x000A;&lt;span id="LC109" class="line" lang="plaintext"&gt; xdg-output-v1: use wlr_output.description&lt;/span&gt;&amp;#x000A;&lt;span id="LC110" class="line" lang="plaintext"&gt; output-management-v1: use wlr_output.description&lt;/span&gt;&amp;#x000A;&lt;span id="LC111" class="line" lang="plaintext"&gt; output: re-introduce atomic mode, enabled, scale and transform&lt;/span&gt;&amp;#x000A;&lt;span id="LC112" class="line" lang="plaintext"&gt; backend/drm: modeset before enabling an output&lt;/span&gt;&amp;#x000A;&lt;span id="LC113" class="line" lang="plaintext"&gt; output: clear pending bit if pending == current&lt;/span&gt;&amp;#x000A;&lt;span id="LC114" class="line" lang="plaintext"&gt; output: refuse to commit a buffer or modeset a disabled output&lt;/span&gt;&amp;#x000A;&lt;span id="LC115" class="line" lang="plaintext"&gt; tinywl: enable and commit output when modesetting&lt;/span&gt;&amp;#x000A;&lt;span id="LC116" class="line" lang="plaintext"&gt; xdg-shell: fix inert xdg_surface handling&lt;/span&gt;&amp;#x000A;&lt;span id="LC117" class="line" lang="plaintext"&gt; xdg-shell: make wlr_xdg_surface_from_resource reject NULL&lt;/span&gt;&amp;#x000A;&lt;span id="LC118" class="line" lang="plaintext"&gt; output: only advertise current mode&lt;/span&gt;&amp;#x000A;&lt;span id="LC119" class="line" lang="plaintext"&gt; backend/drm: don't modeset with a NULL mode after TTY switch&lt;/span&gt;&amp;#x000A;&lt;span id="LC120" class="line" lang="plaintext"&gt; render: guard rendering operations between begin() and end()&lt;/span&gt;&amp;#x000A;&lt;span id="LC121" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC122" class="line" lang="plaintext"&gt;Timidger (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC123" class="line" lang="plaintext"&gt; layer_shell: set layer of existing surface&lt;/span&gt;&amp;#x000A;&lt;span id="LC124" class="line" lang="plaintext"&gt; Use layer shell v2&lt;/span&gt;&amp;#x000A;&lt;span id="LC125" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC126" class="line" lang="plaintext"&gt;Ting-Wei Lan (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC127" class="line" lang="plaintext"&gt; backend/session/freebsd: Fix the way to get TTY path&lt;/span&gt;&amp;#x000A;&lt;span id="LC128" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC129" class="line" lang="plaintext"&gt;myfreeweb (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC130" class="line" lang="plaintext"&gt; Send tablet tool frame on proximity_out&lt;/span&gt;&amp;#x000A;&lt;span id="LC131" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC132" class="line" lang="plaintext"&gt;n3rdopolis (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC133" class="line" lang="plaintext"&gt; Update environment variable documentation to include more backends&lt;/span&gt;&amp;#x000A;&lt;span id="LC134" class="line" lang="plaintext"&gt; note libinput as well&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&amp;#x000A;&lt;copy-code&gt;&lt;/copy-code&gt;&amp;#x000A;&lt;/div&gt;</content> + <updated>2019-12-31T15:11:54Z</updated> + <media:thumbnail width="40" height="40" url="https://secure.gravatar.com/avatar/3db493f2a40c406b488668a4660dc629?s=80&amp;d=identicon"/> + <author> + <name>Drew DeVault</name> + <email>sir@cmpwn.com</email> + </author> +</entry> +<entry> + <id>https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.8.1</id> + <link href="https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.8.1"/> + <title>0.8.1</title> + <summary>wlroots 0.8.1 + +This update fixes Drew's continued ability to find novel ways to mess up +releases. + +Filip Sandborg (1): + render/gles2: fix calculation for partial gles2 pixel read (#1809) + +Ilia Bozhinov (1): + layer-shell: ignore ack_configure() on closed surfaces + +Ivan Molodetskikh (2): + presentation_feedback: add the sampled state + drm: use IMPORT_FD for INVALID modifier + +Markus Ongyerth (3): + Move initialization of wlr_tablet_pad into types/wlr_tablet_pad + Add zwp-tablet-unstable-v2 client support + Clean up wayland backend tablet support + +Rouven Czerwinski (1): + backend/drm: check for mst: in path property + +Scott Anderson (1): + render/egl: Change KHR_debug log to include error code + +Sebastian Krzyszkowiak (1): + wlr_seat_touch: Destroy the touchpoint on client destroy + +Simon Ser (1): + compositor: disconnect client on OOM in create_surface + +Versus Void (1): + xdg-output: send wl_output.done after xdg_output created + +amingin (1): + Fixes crash of compositor when unvalidated keycode 0 is passed (#1833)</summary> + <content type="html">&lt;p data-sourcepos="1:1-1:21" dir="auto"&gt;Release for tag 0.8.1&lt;/p&gt;</content> + <updated>2019-10-07T19:28:20Z</updated> + <media:thumbnail width="40" height="40" url="https://secure.gravatar.com/avatar/3db493f2a40c406b488668a4660dc629?s=80&amp;d=identicon"/> + <author> + <name>Drew DeVault</name> + <email>sir@cmpwn.com</email> + </author> +</entry> +<entry> + <id>https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.8.0</id> + <link href="https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.8.0"/> + <title>0.8.0</title> + <summary>wlroots 0.8.0 + +wlroots 0.8.0 includes the following breaking changes: + + presentation_feedback: add the sampled state + +The wlr_presentation_time structures have been rewritten. To correctly +support presentation-time, use wlr_presentation_surface_sampled after +you sample (read from) each surface. + +Changelog: + +Drew DeVault (4): + wlr_idle_inhibit_v1: style fixes + drm backend: detect non-desktop outputs + drm backend: implement DRM lease issuance + Introduce wlr_drm_lease_v1 + +Filip Sandborg (1): + render/gles2: fix calculation for partial gles2 pixel read (#1809) + +Ilia Bozhinov (1): + layer-shell: ignore ack_configure() on closed surfaces + +Ivan Molodetskikh (1): + presentation_feedback: add the sampled state + +Rouven Czerwinski (1): + backend/drm: check for mst: in path property + +Scott Anderson (1): + render/egl: Change KHR_debug log to include error code + +Sebastian Krzyszkowiak (1): + wlr_seat_touch: Destroy the touchpoint on client destroy + +Simon Ser (1): + compositor: disconnect client on OOM in create_surface + +Versus Void (1): + xdg-output: send wl_output.done after xdg_output created</summary> + <content type="html">&lt;p data-sourcepos="1:1-1:54" dir="auto"&gt;wlroots 0.8.0 includes the following breaking changes:&lt;/p&gt;&amp;#x000A;&lt;h2 data-sourcepos="3:1-3:47" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-presentation_feedback-add-the-sampled-state" class="anchor" href="#presentation_feedback-add-the-sampled-state" aria-hidden="true"&gt;&lt;/a&gt;presentation_feedback: add the sampled state&lt;/h2&gt;&amp;#x000A;&lt;p data-sourcepos="5:1-7:36" dir="auto"&gt;The wlr_presentation_time structures have been rewritten. To correctly&amp;#x000A;support presentation-time, use wlr_presentation_surface_sampled after&amp;#x000A;you sample (read from) each surface.&lt;/p&gt;&amp;#x000A;&lt;p data-sourcepos="9:1-9:10" dir="auto"&gt;Changelog:&lt;/p&gt;&amp;#x000A;&lt;div class="gl-relative markdown-code-block js-markdown-code"&gt;&amp;#x000A;&lt;pre data-sourcepos="11:1-41:3" class="code highlight js-syntax-highlight language-plaintext" lang="plaintext" data-canonical-lang="" v-pre="true"&gt;&lt;code&gt;&lt;span id="LC1" class="line" lang="plaintext"&gt;Drew DeVault (4):&lt;/span&gt;&amp;#x000A;&lt;span id="LC2" class="line" lang="plaintext"&gt; wlr_idle_inhibit_v1: style fixes&lt;/span&gt;&amp;#x000A;&lt;span id="LC3" class="line" lang="plaintext"&gt; drm backend: detect non-desktop outputs&lt;/span&gt;&amp;#x000A;&lt;span id="LC4" class="line" lang="plaintext"&gt; drm backend: implement DRM lease issuance&lt;/span&gt;&amp;#x000A;&lt;span id="LC5" class="line" lang="plaintext"&gt; Introduce wlr_drm_lease_v1&lt;/span&gt;&amp;#x000A;&lt;span id="LC6" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC7" class="line" lang="plaintext"&gt;Filip Sandborg (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC8" class="line" lang="plaintext"&gt; render/gles2: fix calculation for partial gles2 pixel read (#1809)&lt;/span&gt;&amp;#x000A;&lt;span id="LC9" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC10" class="line" lang="plaintext"&gt;Ilia Bozhinov (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC11" class="line" lang="plaintext"&gt; layer-shell: ignore ack_configure() on closed surfaces&lt;/span&gt;&amp;#x000A;&lt;span id="LC12" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC13" class="line" lang="plaintext"&gt;Ivan Molodetskikh (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC14" class="line" lang="plaintext"&gt; presentation_feedback: add the sampled state&lt;/span&gt;&amp;#x000A;&lt;span id="LC15" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC16" class="line" lang="plaintext"&gt;Rouven Czerwinski (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC17" class="line" lang="plaintext"&gt; backend/drm: check for mst: in path property&lt;/span&gt;&amp;#x000A;&lt;span id="LC18" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC19" class="line" lang="plaintext"&gt;Scott Anderson (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC20" class="line" lang="plaintext"&gt; render/egl: Change KHR_debug log to include error code&lt;/span&gt;&amp;#x000A;&lt;span id="LC21" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC22" class="line" lang="plaintext"&gt;Sebastian Krzyszkowiak (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC23" class="line" lang="plaintext"&gt; wlr_seat_touch: Destroy the touchpoint on client destroy&lt;/span&gt;&amp;#x000A;&lt;span id="LC24" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC25" class="line" lang="plaintext"&gt;Simon Ser (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC26" class="line" lang="plaintext"&gt; compositor: disconnect client on OOM in create_surface&lt;/span&gt;&amp;#x000A;&lt;span id="LC27" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC28" class="line" lang="plaintext"&gt;Versus Void (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC29" class="line" lang="plaintext"&gt; xdg-output: send wl_output.done after xdg_output created&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&amp;#x000A;&lt;copy-code&gt;&lt;/copy-code&gt;&amp;#x000A;&lt;/div&gt;</content> + <updated>2019-10-07T11:52:12Z</updated> + <media:thumbnail width="40" height="40" url="https://secure.gravatar.com/avatar/3db493f2a40c406b488668a4660dc629?s=80&amp;d=identicon"/> + <author> + <name>Drew DeVault</name> + <email>sir@cmpwn.com</email> + </author> +</entry> +<entry> + <id>https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.7.0</id> + <link href="https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.7.0"/> + <title>0.7.0</title> + <summary>wlroots 0.7.0 + +wlroots 0.7.0 includes the following breaking changes: + + wlr_output_mode: drop wlr_outupt_mode.flags + +This field was never used and has now been removed. + + wlr_output: drop wlr_output.transform + +This field was not meaningful. + + Orbital screenshooter and gamma-control have been removed + +These protocols are obsolete and have been replaced with more mature wlr +protocols. + +Andri Yngvason (2): + backend: touch: Assign good ids to single touch devices + backend: touch: Fixup incomplete patch for single touch devices. + +Antonin Décimo (12): + render/drm: keep old drm_format if realloc fails + xcursor: avoid leak and loss of all cursors if cursors realloc fails + Fix memory leak + Simplify check + wlr_surface: condition is always false + xdg_shell: remove variable self-assignment + backend/session: non-void function should return a value + backend/drm: use UINT64_C for uint64_t literals + Avoid loss of a fractional part + backend/wayland: check if zxdg_toplevel_decoration_v1 is not NULL + xwayland: prevent possible array overrun + examples: remove duplicated condition + +Ashkan Kiani (1): + Use a set to track pointer button state. + +Brian Ashworth (4): + session/logind: keep active for pause_device gone + zwp_virtual-keyboard: fix mmap error handling + wlr_xdg_toplevel: reparent on parent unmap + wlr-layer-shell-v1: destroy xdg popups on unmap + +Dorota Czaplejewicz (2): + x11: Send a frame event on the pointer after button events + virtual_keyboard: Require keymap before accepting keycodes + +Drew DeVault (4): + Remove rootston + Add libinput-1.14 support + Revert "render/drm: keep old drm_format if realloc fails" + Add _incr_version to contrib/ + +Greg V (1): + Support pointer-gestures on Wayland backend + +Guido Günther (4): + wlr_seat_touch: Don't destroy touch point with surface + layer-shell: Remove unused event source + layer-shell: Reject requests on gone surfaces + text_input: Don't forget to send enter events + +Ilia Bozhinov (2): + output: clear output-&gt;damage on successful commit + output-damage: set needs swap only when we have new damage + +Jan Beich (1): + Test RDP backend on FreeBSD as well + +Jan Chren (2): + session/logind: specify seat exactly + session/logind: check for XDG_SESSION_ID first + +Jason Francis (3): + screencopy: fix segfault on disabled output + screencopy: send failed after output disconnect + export-dmabuf-v1: fix segfault on output disable + +Manuel Stoeckl (6): + Implement serial validation for selection requests + wlr_seat: Fix edge cases with serial validation + wlr_pointer_gestures: Register event serials + wlr_tablet_v2: Register event serials + wlr_seat: special-case first serial set use + Use -fmacro-prefix-map to strip build path + +Michiel (1): + Fixes #1689 RDP RemoteFX crash + +Rouven Czerwinski (5): + wlr_output: remove idle_done on output destroy + drm: legacy: issue a NULL modeset on disable + backend: drm: switch to pageflip_handler_2 + backend/drm: destroy output immediately + Revert "output: atomic mode" + +Scott Anderson (3): + Remove WLR_DRM_NO_ATOMIC_GAMMA workaround + backend/drm: Simplify object matching code + backend/drm: Exit-early if 0 crtcs + +Sebastian Krzyszkowiak (9): + seat: Move focus back to first shell surface when unfocusing layer surface + xdg_shell(_v6): Take maximize/fullscreen state into account on view init + wlr_touch: Declare wlr_touch_impl usage as const + backends/x11: Touch support + wlr_input_method_v2: Remove input method's resource from the list on destroy + wlr_seat_touch: add a way for a grab to ignore a touch point + wlr_xdg_popup: grab touch events alongside pointer and keyboard + wlr_xdg_popup: don't treat all surfaces of grabbing client as grabbing surfaces + Revert "wlr_xdg_popup: don't treat all surfaces of grabbing client as grabbing surfaces" + +Silvan Jegen (1): + rootston: remove duplicated include + +Simon Ser (26): + backend/wayland: use xdg-decoration-unstable-v1 + backend/wayland: remove wl_shm + render/gles2: print GL_RENDERER + Remove orbital screenshooter and gamma-control + backend/drm: check format when scanning out DMA-BUF + backend/drm: strip alpha channel on scan-out + render/dmabuf: add wlr_dmabuf_attributes_copy + buffer: add wlr_buffer_get_dmabuf + output: change set_dmabuf to attach_buffer + output: fix attach_buffer semantics + output: save buffer in pending state + backend/drm: hold buffers while scanning out + backend/drm: reject DMA-BUFs with flags + rootston: add support for direct scan-out + output: refuse to scan-out if software cursors are used + output: introduce wlr_output_lock_attach_render + output-damage: support direct scan-out + backend/drm: fallback to drmModeAddFB2 + backend/drm: add support for multiplanar BOs + output: reset the pending state on failed commit + output: remove wlr_output_impl.transform + output: drop wlr_output_mode.flags + Remove all wayland-server.h includes + output: atomic mode, enabled, scale and transform + xdg-output: add support for xdg-output-unstable-v1 version 3 + backend/drm: fix missing plane formats + +emersion (1): + backend/drm: add basic support for direct scan-out</summary> + <content type="html">&lt;p data-sourcepos="1:1-1:54" dir="auto"&gt;wlroots 0.7.0 includes the following breaking changes:&lt;/p&gt;&amp;#x000A;&lt;h2 data-sourcepos="3:1-3:46" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-wlr_output_mode-drop-wlr_outupt_modeflags" class="anchor" href="#wlr_output_mode-drop-wlr_outupt_modeflags" aria-hidden="true"&gt;&lt;/a&gt;wlr_output_mode: drop wlr_outupt_mode.flags&lt;/h2&gt;&amp;#x000A;&lt;p data-sourcepos="5:1-5:51" dir="auto"&gt;This field was never used and has now been removed.&lt;/p&gt;&amp;#x000A;&lt;h2 data-sourcepos="7:1-7:40" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-wlr_output-drop-wlr_outputtransform" class="anchor" href="#wlr_output-drop-wlr_outputtransform" aria-hidden="true"&gt;&lt;/a&gt;wlr_output: drop wlr_output.transform&lt;/h2&gt;&amp;#x000A;&lt;p data-sourcepos="9:1-9:30" dir="auto"&gt;This field was not meaningful.&lt;/p&gt;&amp;#x000A;&lt;h2 data-sourcepos="11:1-11:60" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-orbital-screenshooter-and-gamma-control-have-been-removed" class="anchor" href="#orbital-screenshooter-and-gamma-control-have-been-removed" aria-hidden="true"&gt;&lt;/a&gt;Orbital screenshooter and gamma-control have been removed&lt;/h2&gt;&amp;#x000A;&lt;p data-sourcepos="13:1-13:83" dir="auto"&gt;These protocols are obsolete and have been replaced with more mature wlr protocols.&lt;/p&gt;&amp;#x000A;&lt;div class="gl-relative markdown-code-block js-markdown-code"&gt;&amp;#x000A;&lt;pre data-sourcepos="15:1-145:3" class="code highlight js-syntax-highlight language-plaintext" lang="plaintext" data-canonical-lang="" v-pre="true"&gt;&lt;code&gt;&lt;span id="LC1" class="line" lang="plaintext"&gt;Andri Yngvason (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC2" class="line" lang="plaintext"&gt; backend: touch: Assign good ids to single touch devices&lt;/span&gt;&amp;#x000A;&lt;span id="LC3" class="line" lang="plaintext"&gt; backend: touch: Fixup incomplete patch for single touch devices.&lt;/span&gt;&amp;#x000A;&lt;span id="LC4" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC5" class="line" lang="plaintext"&gt;Antonin Décimo (12):&lt;/span&gt;&amp;#x000A;&lt;span id="LC6" class="line" lang="plaintext"&gt; render/drm: keep old drm_format if realloc fails&lt;/span&gt;&amp;#x000A;&lt;span id="LC7" class="line" lang="plaintext"&gt; xcursor: avoid leak and loss of all cursors if cursors realloc fails&lt;/span&gt;&amp;#x000A;&lt;span id="LC8" class="line" lang="plaintext"&gt; Fix memory leak&lt;/span&gt;&amp;#x000A;&lt;span id="LC9" class="line" lang="plaintext"&gt; Simplify check&lt;/span&gt;&amp;#x000A;&lt;span id="LC10" class="line" lang="plaintext"&gt; wlr_surface: condition is always false&lt;/span&gt;&amp;#x000A;&lt;span id="LC11" class="line" lang="plaintext"&gt; xdg_shell: remove variable self-assignment&lt;/span&gt;&amp;#x000A;&lt;span id="LC12" class="line" lang="plaintext"&gt; backend/session: non-void function should return a value&lt;/span&gt;&amp;#x000A;&lt;span id="LC13" class="line" lang="plaintext"&gt; backend/drm: use UINT64_C for uint64_t literals&lt;/span&gt;&amp;#x000A;&lt;span id="LC14" class="line" lang="plaintext"&gt; Avoid loss of a fractional part&lt;/span&gt;&amp;#x000A;&lt;span id="LC15" class="line" lang="plaintext"&gt; backend/wayland: check if zxdg_toplevel_decoration_v1 is not NULL&lt;/span&gt;&amp;#x000A;&lt;span id="LC16" class="line" lang="plaintext"&gt; xwayland: prevent possible array overrun&lt;/span&gt;&amp;#x000A;&lt;span id="LC17" class="line" lang="plaintext"&gt; examples: remove duplicated condition&lt;/span&gt;&amp;#x000A;&lt;span id="LC18" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC19" class="line" lang="plaintext"&gt;Ashkan Kiani (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC20" class="line" lang="plaintext"&gt; Use a set to track pointer button state.&lt;/span&gt;&amp;#x000A;&lt;span id="LC21" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC22" class="line" lang="plaintext"&gt;Brian Ashworth (4):&lt;/span&gt;&amp;#x000A;&lt;span id="LC23" class="line" lang="plaintext"&gt; session/logind: keep active for pause_device gone&lt;/span&gt;&amp;#x000A;&lt;span id="LC24" class="line" lang="plaintext"&gt; zwp_virtual-keyboard: fix mmap error handling&lt;/span&gt;&amp;#x000A;&lt;span id="LC25" class="line" lang="plaintext"&gt; wlr_xdg_toplevel: reparent on parent unmap&lt;/span&gt;&amp;#x000A;&lt;span id="LC26" class="line" lang="plaintext"&gt; wlr-layer-shell-v1: destroy xdg popups on unmap&lt;/span&gt;&amp;#x000A;&lt;span id="LC27" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC28" class="line" lang="plaintext"&gt;Dorota Czaplejewicz (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC29" class="line" lang="plaintext"&gt; x11: Send a frame event on the pointer after button events&lt;/span&gt;&amp;#x000A;&lt;span id="LC30" class="line" lang="plaintext"&gt; virtual_keyboard: Require keymap before accepting keycodes&lt;/span&gt;&amp;#x000A;&lt;span id="LC31" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC32" class="line" lang="plaintext"&gt;Drew DeVault (4):&lt;/span&gt;&amp;#x000A;&lt;span id="LC33" class="line" lang="plaintext"&gt; Remove rootston&lt;/span&gt;&amp;#x000A;&lt;span id="LC34" class="line" lang="plaintext"&gt; Add libinput-1.14 support&lt;/span&gt;&amp;#x000A;&lt;span id="LC35" class="line" lang="plaintext"&gt; Revert "render/drm: keep old drm_format if realloc fails"&lt;/span&gt;&amp;#x000A;&lt;span id="LC36" class="line" lang="plaintext"&gt; Add _incr_version to contrib/&lt;/span&gt;&amp;#x000A;&lt;span id="LC37" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC38" class="line" lang="plaintext"&gt;Greg V (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC39" class="line" lang="plaintext"&gt; Support pointer-gestures on Wayland backend&lt;/span&gt;&amp;#x000A;&lt;span id="LC40" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC41" class="line" lang="plaintext"&gt;Guido Günther (4):&lt;/span&gt;&amp;#x000A;&lt;span id="LC42" class="line" lang="plaintext"&gt; wlr_seat_touch: Don't destroy touch point with surface&lt;/span&gt;&amp;#x000A;&lt;span id="LC43" class="line" lang="plaintext"&gt; layer-shell: Remove unused event source&lt;/span&gt;&amp;#x000A;&lt;span id="LC44" class="line" lang="plaintext"&gt; layer-shell: Reject requests on gone surfaces&lt;/span&gt;&amp;#x000A;&lt;span id="LC45" class="line" lang="plaintext"&gt; text_input: Don't forget to send enter events&lt;/span&gt;&amp;#x000A;&lt;span id="LC46" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC47" class="line" lang="plaintext"&gt;Ilia Bozhinov (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC48" class="line" lang="plaintext"&gt; output: clear output-&amp;gt;damage on successful commit&lt;/span&gt;&amp;#x000A;&lt;span id="LC49" class="line" lang="plaintext"&gt; output-damage: set needs swap only when we have new damage&lt;/span&gt;&amp;#x000A;&lt;span id="LC50" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC51" class="line" lang="plaintext"&gt;Jan Beich (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC52" class="line" lang="plaintext"&gt; Test RDP backend on FreeBSD as well&lt;/span&gt;&amp;#x000A;&lt;span id="LC53" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC54" class="line" lang="plaintext"&gt;Jan Chren (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC55" class="line" lang="plaintext"&gt; session/logind: specify seat exactly&lt;/span&gt;&amp;#x000A;&lt;span id="LC56" class="line" lang="plaintext"&gt; session/logind: check for XDG_SESSION_ID first&lt;/span&gt;&amp;#x000A;&lt;span id="LC57" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC58" class="line" lang="plaintext"&gt;Jason Francis (3):&lt;/span&gt;&amp;#x000A;&lt;span id="LC59" class="line" lang="plaintext"&gt; screencopy: fix segfault on disabled output&lt;/span&gt;&amp;#x000A;&lt;span id="LC60" class="line" lang="plaintext"&gt; screencopy: send failed after output disconnect&lt;/span&gt;&amp;#x000A;&lt;span id="LC61" class="line" lang="plaintext"&gt; export-dmabuf-v1: fix segfault on output disable&lt;/span&gt;&amp;#x000A;&lt;span id="LC62" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC63" class="line" lang="plaintext"&gt;Manuel Stoeckl (6):&lt;/span&gt;&amp;#x000A;&lt;span id="LC64" class="line" lang="plaintext"&gt; Implement serial validation for selection requests&lt;/span&gt;&amp;#x000A;&lt;span id="LC65" class="line" lang="plaintext"&gt; wlr_seat: Fix edge cases with serial validation&lt;/span&gt;&amp;#x000A;&lt;span id="LC66" class="line" lang="plaintext"&gt; wlr_pointer_gestures: Register event serials&lt;/span&gt;&amp;#x000A;&lt;span id="LC67" class="line" lang="plaintext"&gt; wlr_tablet_v2: Register event serials&lt;/span&gt;&amp;#x000A;&lt;span id="LC68" class="line" lang="plaintext"&gt; wlr_seat: special-case first serial set use&lt;/span&gt;&amp;#x000A;&lt;span id="LC69" class="line" lang="plaintext"&gt; Use -fmacro-prefix-map to strip build path&lt;/span&gt;&amp;#x000A;&lt;span id="LC70" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC71" class="line" lang="plaintext"&gt;Michiel (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC72" class="line" lang="plaintext"&gt; Fixes #1689 RDP RemoteFX crash&lt;/span&gt;&amp;#x000A;&lt;span id="LC73" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC74" class="line" lang="plaintext"&gt;Rouven Czerwinski (5):&lt;/span&gt;&amp;#x000A;&lt;span id="LC75" class="line" lang="plaintext"&gt; wlr_output: remove idle_done on output destroy&lt;/span&gt;&amp;#x000A;&lt;span id="LC76" class="line" lang="plaintext"&gt; drm: legacy: issue a NULL modeset on disable&lt;/span&gt;&amp;#x000A;&lt;span id="LC77" class="line" lang="plaintext"&gt; backend: drm: switch to pageflip_handler_2&lt;/span&gt;&amp;#x000A;&lt;span id="LC78" class="line" lang="plaintext"&gt; backend/drm: destroy output immediately&lt;/span&gt;&amp;#x000A;&lt;span id="LC79" class="line" lang="plaintext"&gt; Revert "output: atomic mode"&lt;/span&gt;&amp;#x000A;&lt;span id="LC80" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC81" class="line" lang="plaintext"&gt;Scott Anderson (3):&lt;/span&gt;&amp;#x000A;&lt;span id="LC82" class="line" lang="plaintext"&gt; Remove WLR_DRM_NO_ATOMIC_GAMMA workaround&lt;/span&gt;&amp;#x000A;&lt;span id="LC83" class="line" lang="plaintext"&gt; backend/drm: Simplify object matching code&lt;/span&gt;&amp;#x000A;&lt;span id="LC84" class="line" lang="plaintext"&gt; backend/drm: Exit-early if 0 crtcs&lt;/span&gt;&amp;#x000A;&lt;span id="LC85" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC86" class="line" lang="plaintext"&gt;Sebastian Krzyszkowiak (9):&lt;/span&gt;&amp;#x000A;&lt;span id="LC87" class="line" lang="plaintext"&gt; seat: Move focus back to first shell surface when unfocusing layer surface&lt;/span&gt;&amp;#x000A;&lt;span id="LC88" class="line" lang="plaintext"&gt; xdg_shell(_v6): Take maximize/fullscreen state into account on view init&lt;/span&gt;&amp;#x000A;&lt;span id="LC89" class="line" lang="plaintext"&gt; wlr_touch: Declare wlr_touch_impl usage as const&lt;/span&gt;&amp;#x000A;&lt;span id="LC90" class="line" lang="plaintext"&gt; backends/x11: Touch support&lt;/span&gt;&amp;#x000A;&lt;span id="LC91" class="line" lang="plaintext"&gt; wlr_input_method_v2: Remove input method's resource from the list on destroy&lt;/span&gt;&amp;#x000A;&lt;span id="LC92" class="line" lang="plaintext"&gt; wlr_seat_touch: add a way for a grab to ignore a touch point&lt;/span&gt;&amp;#x000A;&lt;span id="LC93" class="line" lang="plaintext"&gt; wlr_xdg_popup: grab touch events alongside pointer and keyboard&lt;/span&gt;&amp;#x000A;&lt;span id="LC94" class="line" lang="plaintext"&gt; wlr_xdg_popup: don't treat all surfaces of grabbing client as grabbing surfaces&lt;/span&gt;&amp;#x000A;&lt;span id="LC95" class="line" lang="plaintext"&gt; Revert "wlr_xdg_popup: don't treat all surfaces of grabbing client as grabbing surfaces"&lt;/span&gt;&amp;#x000A;&lt;span id="LC96" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC97" class="line" lang="plaintext"&gt;Silvan Jegen (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC98" class="line" lang="plaintext"&gt; rootston: remove duplicated include&lt;/span&gt;&amp;#x000A;&lt;span id="LC99" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC100" class="line" lang="plaintext"&gt;Simon Ser (26):&lt;/span&gt;&amp;#x000A;&lt;span id="LC101" class="line" lang="plaintext"&gt; backend/wayland: use xdg-decoration-unstable-v1&lt;/span&gt;&amp;#x000A;&lt;span id="LC102" class="line" lang="plaintext"&gt; backend/wayland: remove wl_shm&lt;/span&gt;&amp;#x000A;&lt;span id="LC103" class="line" lang="plaintext"&gt; render/gles2: print GL_RENDERER&lt;/span&gt;&amp;#x000A;&lt;span id="LC104" class="line" lang="plaintext"&gt; Remove orbital screenshooter and gamma-control&lt;/span&gt;&amp;#x000A;&lt;span id="LC105" class="line" lang="plaintext"&gt; backend/drm: check format when scanning out DMA-BUF&lt;/span&gt;&amp;#x000A;&lt;span id="LC106" class="line" lang="plaintext"&gt; backend/drm: strip alpha channel on scan-out&lt;/span&gt;&amp;#x000A;&lt;span id="LC107" class="line" lang="plaintext"&gt; render/dmabuf: add wlr_dmabuf_attributes_copy&lt;/span&gt;&amp;#x000A;&lt;span id="LC108" class="line" lang="plaintext"&gt; buffer: add wlr_buffer_get_dmabuf&lt;/span&gt;&amp;#x000A;&lt;span id="LC109" class="line" lang="plaintext"&gt; output: change set_dmabuf to attach_buffer&lt;/span&gt;&amp;#x000A;&lt;span id="LC110" class="line" lang="plaintext"&gt; output: fix attach_buffer semantics&lt;/span&gt;&amp;#x000A;&lt;span id="LC111" class="line" lang="plaintext"&gt; output: save buffer in pending state&lt;/span&gt;&amp;#x000A;&lt;span id="LC112" class="line" lang="plaintext"&gt; backend/drm: hold buffers while scanning out&lt;/span&gt;&amp;#x000A;&lt;span id="LC113" class="line" lang="plaintext"&gt; backend/drm: reject DMA-BUFs with flags&lt;/span&gt;&amp;#x000A;&lt;span id="LC114" class="line" lang="plaintext"&gt; rootston: add support for direct scan-out&lt;/span&gt;&amp;#x000A;&lt;span id="LC115" class="line" lang="plaintext"&gt; output: refuse to scan-out if software cursors are used&lt;/span&gt;&amp;#x000A;&lt;span id="LC116" class="line" lang="plaintext"&gt; output: introduce wlr_output_lock_attach_render&lt;/span&gt;&amp;#x000A;&lt;span id="LC117" class="line" lang="plaintext"&gt; output-damage: support direct scan-out&lt;/span&gt;&amp;#x000A;&lt;span id="LC118" class="line" lang="plaintext"&gt; backend/drm: fallback to drmModeAddFB2&lt;/span&gt;&amp;#x000A;&lt;span id="LC119" class="line" lang="plaintext"&gt; backend/drm: add support for multiplanar BOs&lt;/span&gt;&amp;#x000A;&lt;span id="LC120" class="line" lang="plaintext"&gt; output: reset the pending state on failed commit&lt;/span&gt;&amp;#x000A;&lt;span id="LC121" class="line" lang="plaintext"&gt; output: remove wlr_output_impl.transform&lt;/span&gt;&amp;#x000A;&lt;span id="LC122" class="line" lang="plaintext"&gt; output: drop wlr_output_mode.flags&lt;/span&gt;&amp;#x000A;&lt;span id="LC123" class="line" lang="plaintext"&gt; Remove all wayland-server.h includes&lt;/span&gt;&amp;#x000A;&lt;span id="LC124" class="line" lang="plaintext"&gt; output: atomic mode, enabled, scale and transform&lt;/span&gt;&amp;#x000A;&lt;span id="LC125" class="line" lang="plaintext"&gt; xdg-output: add support for xdg-output-unstable-v1 version 3&lt;/span&gt;&amp;#x000A;&lt;span id="LC126" class="line" lang="plaintext"&gt; backend/drm: fix missing plane formats&lt;/span&gt;&amp;#x000A;&lt;span id="LC127" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC128" class="line" lang="plaintext"&gt;emersion (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC129" class="line" lang="plaintext"&gt; backend/drm: add basic support for direct scan-out&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&amp;#x000A;&lt;copy-code&gt;&lt;/copy-code&gt;&amp;#x000A;&lt;/div&gt;</content> + <updated>2019-08-27T03:32:24Z</updated> + <media:thumbnail width="40" height="40" url="https://secure.gravatar.com/avatar/3db493f2a40c406b488668a4660dc629?s=80&amp;d=identicon"/> + <author> + <name>Drew DeVault</name> + <email>sir@cmpwn.com</email> + </author> +</entry> +<entry> + <id>https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.6.0</id> + <link href="https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.6.0"/> + <title>0.6.0</title> + <summary>wlroots 0.6.0 + +wlroots 0.6.0 includes the following breaking changes: + + Remove wlr_wl_shell + +We have removed the long-deprecated wl_shell implementation from +wlroots. + + output: refactor frame submission API + +To migrate from the old API to the new one: + +1. Replace wlr_output_make_current calls with wlr_output_attach_render +2. Replace wlr_output_swap_buffers calls with wlr_output_set_damage and + wlr_output_commit +3. Replace wlr_output_damage_make_current calls with + wlr_output_damage_attach_render +4. Replace wlr_output_damage_swap_buffers with wlr_output_set_damage and + wlr_output_commit +5. Replace wlr_output.needs_swap with wlr_output.needs_frame +6. Replace wlr_output.events.swap_buffers with + wlr_output.events.precommit + + output: remove lx, ly + +The layout coordinates have been removed from wlr_output. Wayland +clients now receive a non-meaningful value from this interface, and +should switch to using xdg-output for this purpose. + + Rename lid_switch to switch_device to disambiguate lid and tablet + mode switches + +To update your compositors, run s/lid_switch/switch_device/g. + +Full changelog: + +Alyssa Ross (1): + Fix missing headers when building without X11 + +Brian Ashworth (6): + backend/wayland: improve output number handling + backend/x11: improve output number handling + backend/headless: improve output number handling + backend/noop: improve output number handling + wlr_xdg_toplevel: store pending fullscreen output + wlr_xdg_toplevel_v6: store pending fullscreen output + +Drew DeVault (2): + Add FreeRDP backend for remote desktop support + Remove wlr_wl_shell + +Guido Günther (3): + wlr_output: Add preferred property (#1625) + rootston: Also iterate layer shell popups + Emit preferred mode + +Ilia Bozhinov (8): + meson.build: require libinput &gt;= 1.9.0 + noop: implement setting a custom mode + rootston: remove disabled outputs from the output layout + output: do nothing in output_set_image if backend has no renderer + idle: enable the compositors to add custom idle timeouts (#1655) + foreign-toplevel: support fullscreen state and request + rootston: add support for foreign-toplevel fullscreening + examples: add fullscreening to foreign-toplevel.c + +Jan Beich (2): + backend: unbreak on 32-bit architectures + Switch to system epoll-shim.pc in FreeBSD build + +Markus Ongyerth (1): + send proximity_out in proximity in for tablet_v2 + +Ryan Walklin (1): + s/lid_switch/switch_device + +Scott Anderson (2): + render: introduce wlr_drm_format_set + Advertise wl_seat version 7 + +Simon Ser (20): + data-device: ignore accept for selection offers + output: introduce wlr_output_preferred_mode + rootston: use wlr_output_preferred_mode + output: refactor frame submission API + output: refactor backend API + output: rename swap_buffers event to precommit + output-damage: refactor API + output: rename needs_commit to needs_frame + render/egl: fix zero-length VLA + backend/wayland: fix wlr_wl_pointer use-after-free + output-damage: fix segfault after destroy + render/egl: fix swapping with no damage + rootston: don't submit too much damage + output: disambiguate the two types of damage + rootston: fix damage tracking debug mode + output: introduce wlr_output_schedule_done + xdg-output: schedule a wl_output.done event on update + seat: fallback to v6 if libwayland 1.17 isn't available + backend/noop: disallow rendering + ci: enable Meson auto features + +Stuart Dilts (1): + types/meson.build: Add compile args for libinput to lib_wlr_types (#1636) + +emersion (18): + meson: remove -Wredundant-decls + render: switch wlr_renderer to wlr_drm_format_set + util/log: setup wayland log handler + Add support for wlr-output-management-unstable-v1 + Split wlr_output_configuration_head_v1 + Add apply and test events to manager + output-management-v1: various fixes + rootston: add output-management-v1 support + output-management-v1: add support for modes + rootston: update output-management-v1 state when output is modeset + output-management-v1: add support for position, transform and scale + output-management-v1: support applying configuration + output-management-v1: fix wl_fixed_t conversion + output-management-v1: support outputs without modes + output-management-v1: update protocol, add set_custom_mode + rootston: disable then enable outputs when applying output-management state + output-management-v1: add more docs + output: remove lx, ly</summary> + <content type="html">&lt;p data-sourcepos="1:1-1:54" dir="auto"&gt;wlroots 0.6.0 includes the following breaking changes:&lt;/p&gt;&amp;#x000A;&lt;h2 data-sourcepos="3:1-3:22" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-remove-wlr_wl_shell" class="anchor" href="#remove-wlr_wl_shell" aria-hidden="true"&gt;&lt;/a&gt;Remove wlr_wl_shell&lt;/h2&gt;&amp;#x000A;&lt;p data-sourcepos="5:1-5:73" dir="auto"&gt;We have removed the long-deprecated wl_shell implementation from wlroots.&lt;/p&gt;&amp;#x000A;&lt;h2 data-sourcepos="7:1-7:40" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-output-refactor-frame-submission-api" class="anchor" href="#output-refactor-frame-submission-api" aria-hidden="true"&gt;&lt;/a&gt;output: refactor frame submission API&lt;/h2&gt;&amp;#x000A;&lt;p data-sourcepos="9:1-9:43" dir="auto"&gt;To migrate from the old API to the new one:&lt;/p&gt;&amp;#x000A;&lt;ol data-sourcepos="11:1-17:0" dir="auto"&gt;&amp;#x000A;&lt;li data-sourcepos="11:1-11:70"&gt;Replace wlr_output_make_current calls with wlr_output_attach_render&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="12:1-12:89"&gt;Replace wlr_output_swap_buffers calls with wlr_output_set_damage and wlr_output_commit&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="13:1-13:84"&gt;Replace wlr_output_damage_make_current calls with wlr_output_damage_attach_render&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="14:1-14:90"&gt;Replace wlr_output_damage_swap_buffers with wlr_output_set_damage and wlr_output_commit&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="15:1-15:60"&gt;Replace wlr_output.needs_swap with wlr_output.needs_frame&lt;/li&gt;&amp;#x000A;&lt;li data-sourcepos="16:1-17:0"&gt;Replace wlr_output.events.swap_buffers with wlr_output.events.precommit&lt;/li&gt;&amp;#x000A;&lt;/ol&gt;&amp;#x000A;&lt;h2 data-sourcepos="18:1-18:24" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-output-remove-lx-ly" class="anchor" href="#output-remove-lx-ly" aria-hidden="true"&gt;&lt;/a&gt;output: remove lx, ly&lt;/h2&gt;&amp;#x000A;&lt;p data-sourcepos="20:1-20:185" dir="auto"&gt;The layout coordinates have been removed from wlr_output. Wayland clients now receive a non-meaningful value from this interface, and should switch to using xdg-output for this purpose.&lt;/p&gt;&amp;#x000A;&lt;h2 data-sourcepos="22:1-22:82" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-rename-lid_switch-to-switch_device-to-disambiguate-lid-and-tablet-mode-switches" class="anchor" href="#rename-lid_switch-to-switch_device-to-disambiguate-lid-and-tablet-mode-switches" aria-hidden="true"&gt;&lt;/a&gt;Rename lid_switch to switch_device to disambiguate lid and tablet mode switches&lt;/h2&gt;&amp;#x000A;&lt;p data-sourcepos="24:1-24:61" dir="auto"&gt;To update your compositors, run s/lid_switch/switch_device/g.&lt;/p&gt;&amp;#x000A;&lt;h1 data-sourcepos="26:1-26:11" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-changelog" class="anchor" href="#changelog" aria-hidden="true"&gt;&lt;/a&gt;Changelog&lt;/h1&gt;&amp;#x000A;&lt;div class="gl-relative markdown-code-block js-markdown-code"&gt;&amp;#x000A;&lt;pre data-sourcepos="28:1-117:3" class="code highlight js-syntax-highlight language-plaintext" lang="plaintext" data-canonical-lang="" v-pre="true"&gt;&lt;code&gt;&lt;span id="LC1" class="line" lang="plaintext"&gt;Alyssa Ross (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC2" class="line" lang="plaintext"&gt; Fix missing headers when building without X11&lt;/span&gt;&amp;#x000A;&lt;span id="LC3" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC4" class="line" lang="plaintext"&gt;Brian Ashworth (6):&lt;/span&gt;&amp;#x000A;&lt;span id="LC5" class="line" lang="plaintext"&gt; backend/wayland: improve output number handling&lt;/span&gt;&amp;#x000A;&lt;span id="LC6" class="line" lang="plaintext"&gt; backend/x11: improve output number handling&lt;/span&gt;&amp;#x000A;&lt;span id="LC7" class="line" lang="plaintext"&gt; backend/headless: improve output number handling&lt;/span&gt;&amp;#x000A;&lt;span id="LC8" class="line" lang="plaintext"&gt; backend/noop: improve output number handling&lt;/span&gt;&amp;#x000A;&lt;span id="LC9" class="line" lang="plaintext"&gt; wlr_xdg_toplevel: store pending fullscreen output&lt;/span&gt;&amp;#x000A;&lt;span id="LC10" class="line" lang="plaintext"&gt; wlr_xdg_toplevel_v6: store pending fullscreen output&lt;/span&gt;&amp;#x000A;&lt;span id="LC11" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC12" class="line" lang="plaintext"&gt;Drew DeVault (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC13" class="line" lang="plaintext"&gt; Add FreeRDP backend for remote desktop support&lt;/span&gt;&amp;#x000A;&lt;span id="LC14" class="line" lang="plaintext"&gt; Remove wlr_wl_shell&lt;/span&gt;&amp;#x000A;&lt;span id="LC15" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC16" class="line" lang="plaintext"&gt;Guido Günther (3):&lt;/span&gt;&amp;#x000A;&lt;span id="LC17" class="line" lang="plaintext"&gt; wlr_output: Add preferred property (#1625)&lt;/span&gt;&amp;#x000A;&lt;span id="LC18" class="line" lang="plaintext"&gt; rootston: Also iterate layer shell popups&lt;/span&gt;&amp;#x000A;&lt;span id="LC19" class="line" lang="plaintext"&gt; Emit preferred mode&lt;/span&gt;&amp;#x000A;&lt;span id="LC20" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC21" class="line" lang="plaintext"&gt;Ilia Bozhinov (8):&lt;/span&gt;&amp;#x000A;&lt;span id="LC22" class="line" lang="plaintext"&gt; meson.build: require libinput &amp;gt;= 1.9.0&lt;/span&gt;&amp;#x000A;&lt;span id="LC23" class="line" lang="plaintext"&gt; noop: implement setting a custom mode&lt;/span&gt;&amp;#x000A;&lt;span id="LC24" class="line" lang="plaintext"&gt; rootston: remove disabled outputs from the output layout&lt;/span&gt;&amp;#x000A;&lt;span id="LC25" class="line" lang="plaintext"&gt; output: do nothing in output_set_image if backend has no renderer&lt;/span&gt;&amp;#x000A;&lt;span id="LC26" class="line" lang="plaintext"&gt; idle: enable the compositors to add custom idle timeouts (#1655)&lt;/span&gt;&amp;#x000A;&lt;span id="LC27" class="line" lang="plaintext"&gt; foreign-toplevel: support fullscreen state and request&lt;/span&gt;&amp;#x000A;&lt;span id="LC28" class="line" lang="plaintext"&gt; rootston: add support for foreign-toplevel fullscreening&lt;/span&gt;&amp;#x000A;&lt;span id="LC29" class="line" lang="plaintext"&gt; examples: add fullscreening to foreign-toplevel.c&lt;/span&gt;&amp;#x000A;&lt;span id="LC30" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC31" class="line" lang="plaintext"&gt;Jan Beich (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC32" class="line" lang="plaintext"&gt; backend: unbreak on 32-bit architectures&lt;/span&gt;&amp;#x000A;&lt;span id="LC33" class="line" lang="plaintext"&gt; Switch to system epoll-shim.pc in FreeBSD build&lt;/span&gt;&amp;#x000A;&lt;span id="LC34" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC35" class="line" lang="plaintext"&gt;Markus Ongyerth (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC36" class="line" lang="plaintext"&gt; send proximity_out in proximity in for tablet_v2&lt;/span&gt;&amp;#x000A;&lt;span id="LC37" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC38" class="line" lang="plaintext"&gt;Ryan Walklin (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC39" class="line" lang="plaintext"&gt; s/lid_switch/switch_device&lt;/span&gt;&amp;#x000A;&lt;span id="LC40" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC41" class="line" lang="plaintext"&gt;Scott Anderson (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC42" class="line" lang="plaintext"&gt; render: introduce wlr_drm_format_set&lt;/span&gt;&amp;#x000A;&lt;span id="LC43" class="line" lang="plaintext"&gt; Advertise wl_seat version 7&lt;/span&gt;&amp;#x000A;&lt;span id="LC44" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC45" class="line" lang="plaintext"&gt;Simon Ser (20):&lt;/span&gt;&amp;#x000A;&lt;span id="LC46" class="line" lang="plaintext"&gt; data-device: ignore accept for selection offers&lt;/span&gt;&amp;#x000A;&lt;span id="LC47" class="line" lang="plaintext"&gt; output: introduce wlr_output_preferred_mode&lt;/span&gt;&amp;#x000A;&lt;span id="LC48" class="line" lang="plaintext"&gt; rootston: use wlr_output_preferred_mode&lt;/span&gt;&amp;#x000A;&lt;span id="LC49" class="line" lang="plaintext"&gt; output: refactor frame submission API&lt;/span&gt;&amp;#x000A;&lt;span id="LC50" class="line" lang="plaintext"&gt; output: refactor backend API&lt;/span&gt;&amp;#x000A;&lt;span id="LC51" class="line" lang="plaintext"&gt; output: rename swap_buffers event to precommit&lt;/span&gt;&amp;#x000A;&lt;span id="LC52" class="line" lang="plaintext"&gt; output-damage: refactor API&lt;/span&gt;&amp;#x000A;&lt;span id="LC53" class="line" lang="plaintext"&gt; output: rename needs_commit to needs_frame&lt;/span&gt;&amp;#x000A;&lt;span id="LC54" class="line" lang="plaintext"&gt; render/egl: fix zero-length VLA&lt;/span&gt;&amp;#x000A;&lt;span id="LC55" class="line" lang="plaintext"&gt; backend/wayland: fix wlr_wl_pointer use-after-free&lt;/span&gt;&amp;#x000A;&lt;span id="LC56" class="line" lang="plaintext"&gt; output-damage: fix segfault after destroy&lt;/span&gt;&amp;#x000A;&lt;span id="LC57" class="line" lang="plaintext"&gt; render/egl: fix swapping with no damage&lt;/span&gt;&amp;#x000A;&lt;span id="LC58" class="line" lang="plaintext"&gt; rootston: don't submit too much damage&lt;/span&gt;&amp;#x000A;&lt;span id="LC59" class="line" lang="plaintext"&gt; output: disambiguate the two types of damage&lt;/span&gt;&amp;#x000A;&lt;span id="LC60" class="line" lang="plaintext"&gt; rootston: fix damage tracking debug mode&lt;/span&gt;&amp;#x000A;&lt;span id="LC61" class="line" lang="plaintext"&gt; output: introduce wlr_output_schedule_done&lt;/span&gt;&amp;#x000A;&lt;span id="LC62" class="line" lang="plaintext"&gt; xdg-output: schedule a wl_output.done event on update&lt;/span&gt;&amp;#x000A;&lt;span id="LC63" class="line" lang="plaintext"&gt; seat: fallback to v6 if libwayland 1.17 isn't available&lt;/span&gt;&amp;#x000A;&lt;span id="LC64" class="line" lang="plaintext"&gt; backend/noop: disallow rendering&lt;/span&gt;&amp;#x000A;&lt;span id="LC65" class="line" lang="plaintext"&gt; ci: enable Meson auto features&lt;/span&gt;&amp;#x000A;&lt;span id="LC66" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC67" class="line" lang="plaintext"&gt;Stuart Dilts (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC68" class="line" lang="plaintext"&gt; types/meson.build: Add compile args for libinput to lib_wlr_types (#1636)&lt;/span&gt;&amp;#x000A;&lt;span id="LC69" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC70" class="line" lang="plaintext"&gt;emersion (18):&lt;/span&gt;&amp;#x000A;&lt;span id="LC71" class="line" lang="plaintext"&gt; meson: remove -Wredundant-decls&lt;/span&gt;&amp;#x000A;&lt;span id="LC72" class="line" lang="plaintext"&gt; render: switch wlr_renderer to wlr_drm_format_set&lt;/span&gt;&amp;#x000A;&lt;span id="LC73" class="line" lang="plaintext"&gt; util/log: setup wayland log handler&lt;/span&gt;&amp;#x000A;&lt;span id="LC74" class="line" lang="plaintext"&gt; Add support for wlr-output-management-unstable-v1&lt;/span&gt;&amp;#x000A;&lt;span id="LC75" class="line" lang="plaintext"&gt; Split wlr_output_configuration_head_v1&lt;/span&gt;&amp;#x000A;&lt;span id="LC76" class="line" lang="plaintext"&gt; Add apply and test events to manager&lt;/span&gt;&amp;#x000A;&lt;span id="LC77" class="line" lang="plaintext"&gt; output-management-v1: various fixes&lt;/span&gt;&amp;#x000A;&lt;span id="LC78" class="line" lang="plaintext"&gt; rootston: add output-management-v1 support&lt;/span&gt;&amp;#x000A;&lt;span id="LC79" class="line" lang="plaintext"&gt; output-management-v1: add support for modes&lt;/span&gt;&amp;#x000A;&lt;span id="LC80" class="line" lang="plaintext"&gt; rootston: update output-management-v1 state when output is modeset&lt;/span&gt;&amp;#x000A;&lt;span id="LC81" class="line" lang="plaintext"&gt; output-management-v1: add support for position, transform and scale&lt;/span&gt;&amp;#x000A;&lt;span id="LC82" class="line" lang="plaintext"&gt; output-management-v1: support applying configuration&lt;/span&gt;&amp;#x000A;&lt;span id="LC83" class="line" lang="plaintext"&gt; output-management-v1: fix wl_fixed_t conversion&lt;/span&gt;&amp;#x000A;&lt;span id="LC84" class="line" lang="plaintext"&gt; output-management-v1: support outputs without modes&lt;/span&gt;&amp;#x000A;&lt;span id="LC85" class="line" lang="plaintext"&gt; output-management-v1: update protocol, add set_custom_mode&lt;/span&gt;&amp;#x000A;&lt;span id="LC86" class="line" lang="plaintext"&gt; rootston: disable then enable outputs when applying output-management state&lt;/span&gt;&amp;#x000A;&lt;span id="LC87" class="line" lang="plaintext"&gt; output-management-v1: add more docs&lt;/span&gt;&amp;#x000A;&lt;span id="LC88" class="line" lang="plaintext"&gt; output: remove lx, ly&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&amp;#x000A;&lt;copy-code&gt;&lt;/copy-code&gt;&amp;#x000A;&lt;/div&gt;</content> + <updated>2019-05-03T15:55:46Z</updated> + <media:thumbnail width="40" height="40" url="https://secure.gravatar.com/avatar/3db493f2a40c406b488668a4660dc629?s=80&amp;d=identicon"/> + <author> + <name>Drew DeVault</name> + <email>sir@cmpwn.com</email> + </author> +</entry> +<entry> + <id>https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.5.0</id> + <link href="https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.5.0"/> + <title>0.5.0</title> + <summary>wlroots 0.5.0 + +Brian Ashworth (1): + wlr_output_layout_get_box: handle empty layout + +Guido Günther (4): + Unbreak build with '-Wstrict-prototypes' + rootston/view: Remove redundant declaration in the same file + wlr_xdg_shell: Remove redundant declaration in the same file + Remove glEGLImageTargetTexture2DOES + +Ian Fan (1): + seat: fix remaining wlr_button_state enum rename + +Ilia Bozhinov (2): + xwm: use min size as base size hint if it is missing and vice versa + xwm: fix typos in WM_NORMAL_HINTS handling + +Niklas Schulze (1): + backend/session: Allow setting a custom tty via WLR_DIRECT_TTY + +Scott Anderson (1): + backend/drm: Don't fail on failing to find overlay format + +emersion (15): + seat: guard against button count corruption + meson: enable more compiler warnings + seat: use wlr_button_state enum instead of uint32_t + seat: only store serial if pressing a button + tinywl: send pointer frame events + backend/session: add noop session + rootston: refactor rendering + rootston: fix rotated views rendering + rootston: fix Xwayland children rendering when fullscreen + rootston: split rendering code into render.c + rootston: fix input events for rotated views + xwayland: don't set DISPLAY + seat: add debug logs when validating grab serials + backend/session: open TTY with O_CLOEXEC for direct session + xwayland: set CLOEXEC on /dev/null FD</summary> + <content type="html">&lt;h1 data-sourcepos="1:1-1:18" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-breaking-changes" class="anchor" href="#breaking-changes" aria-hidden="true"&gt;&lt;/a&gt;Breaking changes&lt;/h1&gt;&amp;#x000A;&lt;h2 data-sourcepos="3:1-3:109" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-display-is-no-longer-set-automatically-for-xwayland-1596" class="anchor" href="#display-is-no-longer-set-automatically-for-xwayland-1596" aria-hidden="true"&gt;&lt;/a&gt;DISPLAY is no longer set automatically for Xwayland (&lt;a href="https://github.com/swaywm/wlroots/pull/1596" rel="nofollow noreferrer noopener" target="_blank"&gt;#1596&lt;/a&gt;)&lt;/h2&gt;&amp;#x000A;&lt;p data-sourcepos="5:1-5:151" dir="auto"&gt;The DISPLAY is now written to &lt;code&gt;wlr_xwayland.display_name&lt;/code&gt; and it is the compositor's responsibility to export it to the environment of its X11 clients.&lt;/p&gt;&amp;#x000A;&lt;h1 data-sourcepos="7:1-7:11" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-changelog" class="anchor" href="#changelog" aria-hidden="true"&gt;&lt;/a&gt;Changelog&lt;/h1&gt;&amp;#x000A;&lt;div class="gl-relative markdown-code-block js-markdown-code"&gt;&amp;#x000A;&lt;pre data-sourcepos="9:1-48:3" class="code highlight js-syntax-highlight language-plaintext" lang="plaintext" data-canonical-lang="" v-pre="true"&gt;&lt;code&gt;&lt;span id="LC1" class="line" lang="plaintext"&gt;Brian Ashworth (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC2" class="line" lang="plaintext"&gt; wlr_output_layout_get_box: handle empty layout&lt;/span&gt;&amp;#x000A;&lt;span id="LC3" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC4" class="line" lang="plaintext"&gt;Guido Günther (4):&lt;/span&gt;&amp;#x000A;&lt;span id="LC5" class="line" lang="plaintext"&gt; Unbreak build with '-Wstrict-prototypes'&lt;/span&gt;&amp;#x000A;&lt;span id="LC6" class="line" lang="plaintext"&gt; rootston/view: Remove redundant declaration in the same file&lt;/span&gt;&amp;#x000A;&lt;span id="LC7" class="line" lang="plaintext"&gt; wlr_xdg_shell: Remove redundant declaration in the same file&lt;/span&gt;&amp;#x000A;&lt;span id="LC8" class="line" lang="plaintext"&gt; Remove glEGLImageTargetTexture2DOES&lt;/span&gt;&amp;#x000A;&lt;span id="LC9" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC10" class="line" lang="plaintext"&gt;Ian Fan (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC11" class="line" lang="plaintext"&gt; seat: fix remaining wlr_button_state enum rename&lt;/span&gt;&amp;#x000A;&lt;span id="LC12" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC13" class="line" lang="plaintext"&gt;Ilia Bozhinov (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC14" class="line" lang="plaintext"&gt; xwm: use min size as base size hint if it is missing and vice versa&lt;/span&gt;&amp;#x000A;&lt;span id="LC15" class="line" lang="plaintext"&gt; xwm: fix typos in WM_NORMAL_HINTS handling&lt;/span&gt;&amp;#x000A;&lt;span id="LC16" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC17" class="line" lang="plaintext"&gt;Niklas Schulze (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC18" class="line" lang="plaintext"&gt; backend/session: Allow setting a custom tty via WLR_DIRECT_TTY&lt;/span&gt;&amp;#x000A;&lt;span id="LC19" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC20" class="line" lang="plaintext"&gt;Scott Anderson (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC21" class="line" lang="plaintext"&gt; backend/drm: Don't fail on failing to find overlay format&lt;/span&gt;&amp;#x000A;&lt;span id="LC22" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC23" class="line" lang="plaintext"&gt;emersion (15):&lt;/span&gt;&amp;#x000A;&lt;span id="LC24" class="line" lang="plaintext"&gt; seat: guard against button count corruption&lt;/span&gt;&amp;#x000A;&lt;span id="LC25" class="line" lang="plaintext"&gt; meson: enable more compiler warnings&lt;/span&gt;&amp;#x000A;&lt;span id="LC26" class="line" lang="plaintext"&gt; seat: use wlr_button_state enum instead of uint32_t&lt;/span&gt;&amp;#x000A;&lt;span id="LC27" class="line" lang="plaintext"&gt; seat: only store serial if pressing a button&lt;/span&gt;&amp;#x000A;&lt;span id="LC28" class="line" lang="plaintext"&gt; tinywl: send pointer frame events&lt;/span&gt;&amp;#x000A;&lt;span id="LC29" class="line" lang="plaintext"&gt; backend/session: add noop session&lt;/span&gt;&amp;#x000A;&lt;span id="LC30" class="line" lang="plaintext"&gt; rootston: refactor rendering&lt;/span&gt;&amp;#x000A;&lt;span id="LC31" class="line" lang="plaintext"&gt; rootston: fix rotated views rendering&lt;/span&gt;&amp;#x000A;&lt;span id="LC32" class="line" lang="plaintext"&gt; rootston: fix Xwayland children rendering when fullscreen&lt;/span&gt;&amp;#x000A;&lt;span id="LC33" class="line" lang="plaintext"&gt; rootston: split rendering code into render.c&lt;/span&gt;&amp;#x000A;&lt;span id="LC34" class="line" lang="plaintext"&gt; rootston: fix input events for rotated views&lt;/span&gt;&amp;#x000A;&lt;span id="LC35" class="line" lang="plaintext"&gt; xwayland: don't set DISPLAY&lt;/span&gt;&amp;#x000A;&lt;span id="LC36" class="line" lang="plaintext"&gt; seat: add debug logs when validating grab serials&lt;/span&gt;&amp;#x000A;&lt;span id="LC37" class="line" lang="plaintext"&gt; backend/session: open TTY with O_CLOEXEC for direct session&lt;/span&gt;&amp;#x000A;&lt;span id="LC38" class="line" lang="plaintext"&gt; xwayland: set CLOEXEC on /dev/null FD&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&amp;#x000A;&lt;copy-code&gt;&lt;/copy-code&gt;&amp;#x000A;&lt;/div&gt;</content> + <updated>2019-03-11T14:40:18Z</updated> + <media:thumbnail width="40" height="40" url="https://secure.gravatar.com/avatar/3db493f2a40c406b488668a4660dc629?s=80&amp;d=identicon"/> + <author> + <name>Drew DeVault</name> + <email>sir@cmpwn.com</email> + </author> +</entry> +<entry> + <id>https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.4.1</id> + <link href="https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.4.1"/> + <title>0.4.1</title> + <summary>wlroots 0.4.1 + +Guido Günther (1): + rootston: Make add_{switch,binding}_config static + +athrungithub (1): + clang compile fix #1572 + +emersion (1): + Bump version to 0.4</summary> + <content type="html">&lt;p data-sourcepos="1:1-1:21" dir="auto"&gt;Release for tag 0.4.1&lt;/p&gt;</content> + <updated>2019-02-27T15:56:05Z</updated> + <media:thumbnail width="40" height="40" url="https://secure.gravatar.com/avatar/3db493f2a40c406b488668a4660dc629?s=80&amp;d=identicon"/> + <author> + <name>Drew DeVault</name> + <email>sir@cmpwn.com</email> + </author> +</entry> +<entry> + <id>https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.4</id> + <link href="https://gitlab.freedesktop.org/wlroots/wlroots/-/tags/0.4"/> + <title>0.4</title> + <summary>wlroots 0.4 + +Brian Ashworth (4): + xwm: stack below on map + drm: do not modeset to current mode + wlr_output: do not modeset to current mode + backend/drm: fix modeset on drm fd resume + +Connor E (2): + Make popup inert when destroyed. + Add build-*/ to gitignore. + +Drew DeVault (2): + Use freebsd/latest for FreeBSD sr.ht builds + Revert "drm: do not modeset to current mode" + +Geoff Greer (1): + Add a wlr_output_set_subpixel() + +Ivan Molodetskikh (2): + data-control: add primary selection support + Update data-control + +Jan Beich (1): + Add xcb-errors to FreeBSD build + +Markus Ongyerth (1): + Prevent NULL dereference in tablet_tool handler + +Rouven Czerwinski (1): + backend/drm: fix memory leak in realloc crtcs + +Scott Anderson (1): + backend/drm: Unset cursor on cleanup + +Sebastian Krzyszkowiak (3): + Post protocol error on invalid wl_surface scale + rootston: don't try to maximize fullscreen surfaces + rootston: surface_at: check for fullscreen surfaces in between TOP and OVERLAY layers + +Uli Schlachter (1): + xwm: Add _NET_CLIENT_LIST support + +Vincent Vanlaer (3): + Allow cursor render surface to be used as fb + Copy cursor surface to secondary gpu if necessary + Add workaround for hardware cursors on nouveau + +emersion (21): + Bump project version to 0.3 + data-device: destroy previous source when starting drag + xdg-shell: destroy child popups on unmap + Deprecate old protocols + primary-selection-v1: copy from gtk-primary-selection + surface: error out on invalid transform + subsurface: add map/unmap events + xwayland, data-device: fix surface state on unmap + data-device: make old offers inert before sending selection + backend/drm: fix NULL dereference when unsetting cursor + xwayland: don't use SOCK_CLOEXEC + xwayland: remove remaining SOCK_CLOEXEC + data-device: refactor wlr_drag + data-device: fix drag cleanup if not started + rootston: cancel drag on invalid serial + data-offer: send WL_DATA_OFFER_ERROR_INVALID_FINISH + data-device: unbreak wl_data_source.cancel during drag-and-drop + rootston: move part of desktop.c to view.c, use an interface for views + rootston: add a view child interface + rootston: make roots_view embedded and remove unions + data-device: check if there's a source before sending dnd_finish + +mnussbaum (1): + Allow compositors to run as systemd user units</summary> + <content type="html">&lt;h1 data-sourcepos="1:1-1:18" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-breaking-changes" class="anchor" href="#breaking-changes" aria-hidden="true"&gt;&lt;/a&gt;Breaking Changes&lt;/h1&gt;&amp;#x000A;&lt;h2 data-sourcepos="3:1-3:82" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-drag-and-drop-has-been-refactored-httpsgithubcomswaywmwlrootspull1517" class="anchor" href="#drag-and-drop-has-been-refactored-httpsgithubcomswaywmwlrootspull1517" aria-hidden="true"&gt;&lt;/a&gt;Drag-and-drop has been refactored (&lt;a href="https://github.com/swaywm/wlroots/pull/1517" rel="nofollow noreferrer noopener" target="_blank"&gt;https://github.com/swaywm/wlroots/pull/1517&lt;/a&gt;)&lt;/h2&gt;&amp;#x000A;&lt;p data-sourcepos="5:1-5:310" dir="auto"&gt;Compositors need to listen to the &lt;code&gt;wlr_seat.request_start_drag&lt;/code&gt; event (just like selection). They need to accept the drag with &lt;code&gt;wlr_seat_start_{pointer,touch}_drag&lt;/code&gt; or to reject it. See &lt;a href="https://github.com/swaywm/wlroots/pull/1517/files#diff-19f03743c0929495d76a97cfd459b7ceR606" rel="nofollow noreferrer noopener" target="_blank"&gt;the related rootston changes&lt;/a&gt;.&lt;/p&gt;&amp;#x000A;&lt;p data-sourcepos="7:1-7:109" dir="auto"&gt;Additionally, the &lt;code&gt;new_drag_icon&lt;/code&gt; event has been removed, use &lt;code&gt;start_drag&lt;/code&gt; instead to collect the drag icon.&lt;/p&gt;&amp;#x000A;&lt;h1 data-sourcepos="9:1-9:11" dir="auto"&gt;&amp;#x000A;&lt;a id="user-content-changelog" class="anchor" href="#changelog" aria-hidden="true"&gt;&lt;/a&gt;Changelog&lt;/h1&gt;&amp;#x000A;&lt;div class="gl-relative markdown-code-block js-markdown-code"&gt;&amp;#x000A;&lt;pre data-sourcepos="11:1-83:3" class="code highlight js-syntax-highlight language-plaintext" lang="plaintext" data-canonical-lang="" v-pre="true"&gt;&lt;code&gt;&lt;span id="LC1" class="line" lang="plaintext"&gt;Brian Ashworth (4):&lt;/span&gt;&amp;#x000A;&lt;span id="LC2" class="line" lang="plaintext"&gt; xwm: stack below on map&lt;/span&gt;&amp;#x000A;&lt;span id="LC3" class="line" lang="plaintext"&gt; drm: do not modeset to current mode&lt;/span&gt;&amp;#x000A;&lt;span id="LC4" class="line" lang="plaintext"&gt; wlr_output: do not modeset to current mode&lt;/span&gt;&amp;#x000A;&lt;span id="LC5" class="line" lang="plaintext"&gt; backend/drm: fix modeset on drm fd resume&lt;/span&gt;&amp;#x000A;&lt;span id="LC6" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC7" class="line" lang="plaintext"&gt;Connor E (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC8" class="line" lang="plaintext"&gt; Make popup inert when destroyed.&lt;/span&gt;&amp;#x000A;&lt;span id="LC9" class="line" lang="plaintext"&gt; Add build-*/ to gitignore.&lt;/span&gt;&amp;#x000A;&lt;span id="LC10" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC11" class="line" lang="plaintext"&gt;Drew DeVault (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC12" class="line" lang="plaintext"&gt; Use freebsd/latest for FreeBSD sr.ht builds&lt;/span&gt;&amp;#x000A;&lt;span id="LC13" class="line" lang="plaintext"&gt; Revert "drm: do not modeset to current mode"&lt;/span&gt;&amp;#x000A;&lt;span id="LC14" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC15" class="line" lang="plaintext"&gt;Geoff Greer (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC16" class="line" lang="plaintext"&gt; Add a wlr_output_set_subpixel()&lt;/span&gt;&amp;#x000A;&lt;span id="LC17" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC18" class="line" lang="plaintext"&gt;Ivan Molodetskikh (2):&lt;/span&gt;&amp;#x000A;&lt;span id="LC19" class="line" lang="plaintext"&gt; data-control: add primary selection support&lt;/span&gt;&amp;#x000A;&lt;span id="LC20" class="line" lang="plaintext"&gt; Update data-control&lt;/span&gt;&amp;#x000A;&lt;span id="LC21" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC22" class="line" lang="plaintext"&gt;Jan Beich (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC23" class="line" lang="plaintext"&gt; Add xcb-errors to FreeBSD build&lt;/span&gt;&amp;#x000A;&lt;span id="LC24" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC25" class="line" lang="plaintext"&gt;Markus Ongyerth (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC26" class="line" lang="plaintext"&gt; Prevent NULL dereference in tablet_tool handler&lt;/span&gt;&amp;#x000A;&lt;span id="LC27" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC28" class="line" lang="plaintext"&gt;Rouven Czerwinski (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC29" class="line" lang="plaintext"&gt; backend/drm: fix memory leak in realloc crtcs&lt;/span&gt;&amp;#x000A;&lt;span id="LC30" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC31" class="line" lang="plaintext"&gt;Scott Anderson (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC32" class="line" lang="plaintext"&gt; backend/drm: Unset cursor on cleanup&lt;/span&gt;&amp;#x000A;&lt;span id="LC33" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC34" class="line" lang="plaintext"&gt;Sebastian Krzyszkowiak (3):&lt;/span&gt;&amp;#x000A;&lt;span id="LC35" class="line" lang="plaintext"&gt; Post protocol error on invalid wl_surface scale&lt;/span&gt;&amp;#x000A;&lt;span id="LC36" class="line" lang="plaintext"&gt; rootston: don't try to maximize fullscreen surfaces&lt;/span&gt;&amp;#x000A;&lt;span id="LC37" class="line" lang="plaintext"&gt; rootston: surface_at: check for fullscreen surfaces in between TOP and OVERLAY layers&lt;/span&gt;&amp;#x000A;&lt;span id="LC38" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC39" class="line" lang="plaintext"&gt;Uli Schlachter (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC40" class="line" lang="plaintext"&gt; xwm: Add _NET_CLIENT_LIST support&lt;/span&gt;&amp;#x000A;&lt;span id="LC41" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC42" class="line" lang="plaintext"&gt;Vincent Vanlaer (3):&lt;/span&gt;&amp;#x000A;&lt;span id="LC43" class="line" lang="plaintext"&gt; Allow cursor render surface to be used as fb&lt;/span&gt;&amp;#x000A;&lt;span id="LC44" class="line" lang="plaintext"&gt; Copy cursor surface to secondary gpu if necessary&lt;/span&gt;&amp;#x000A;&lt;span id="LC45" class="line" lang="plaintext"&gt; Add workaround for hardware cursors on nouveau&lt;/span&gt;&amp;#x000A;&lt;span id="LC46" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC47" class="line" lang="plaintext"&gt;emersion (21):&lt;/span&gt;&amp;#x000A;&lt;span id="LC48" class="line" lang="plaintext"&gt; Bump project version to 0.3&lt;/span&gt;&amp;#x000A;&lt;span id="LC49" class="line" lang="plaintext"&gt; data-device: destroy previous source when starting drag&lt;/span&gt;&amp;#x000A;&lt;span id="LC50" class="line" lang="plaintext"&gt; xdg-shell: destroy child popups on unmap&lt;/span&gt;&amp;#x000A;&lt;span id="LC51" class="line" lang="plaintext"&gt; Deprecate old protocols&lt;/span&gt;&amp;#x000A;&lt;span id="LC52" class="line" lang="plaintext"&gt; primary-selection-v1: copy from gtk-primary-selection&lt;/span&gt;&amp;#x000A;&lt;span id="LC53" class="line" lang="plaintext"&gt; surface: error out on invalid transform&lt;/span&gt;&amp;#x000A;&lt;span id="LC54" class="line" lang="plaintext"&gt; subsurface: add map/unmap events&lt;/span&gt;&amp;#x000A;&lt;span id="LC55" class="line" lang="plaintext"&gt; xwayland, data-device: fix surface state on unmap&lt;/span&gt;&amp;#x000A;&lt;span id="LC56" class="line" lang="plaintext"&gt; data-device: make old offers inert before sending selection&lt;/span&gt;&amp;#x000A;&lt;span id="LC57" class="line" lang="plaintext"&gt; backend/drm: fix NULL dereference when unsetting cursor&lt;/span&gt;&amp;#x000A;&lt;span id="LC58" class="line" lang="plaintext"&gt; xwayland: don't use SOCK_CLOEXEC&lt;/span&gt;&amp;#x000A;&lt;span id="LC59" class="line" lang="plaintext"&gt; xwayland: remove remaining SOCK_CLOEXEC&lt;/span&gt;&amp;#x000A;&lt;span id="LC60" class="line" lang="plaintext"&gt; data-device: refactor wlr_drag&lt;/span&gt;&amp;#x000A;&lt;span id="LC61" class="line" lang="plaintext"&gt; data-device: fix drag cleanup if not started&lt;/span&gt;&amp;#x000A;&lt;span id="LC62" class="line" lang="plaintext"&gt; rootston: cancel drag on invalid serial&lt;/span&gt;&amp;#x000A;&lt;span id="LC63" class="line" lang="plaintext"&gt; data-offer: send WL_DATA_OFFER_ERROR_INVALID_FINISH&lt;/span&gt;&amp;#x000A;&lt;span id="LC64" class="line" lang="plaintext"&gt; data-device: unbreak wl_data_source.cancel during drag-and-drop&lt;/span&gt;&amp;#x000A;&lt;span id="LC65" class="line" lang="plaintext"&gt; rootston: move part of desktop.c to view.c, use an interface for views&lt;/span&gt;&amp;#x000A;&lt;span id="LC66" class="line" lang="plaintext"&gt; rootston: add a view child interface&lt;/span&gt;&amp;#x000A;&lt;span id="LC67" class="line" lang="plaintext"&gt; rootston: make roots_view embedded and remove unions&lt;/span&gt;&amp;#x000A;&lt;span id="LC68" class="line" lang="plaintext"&gt; data-device: check if there's a source before sending dnd_finish&lt;/span&gt;&amp;#x000A;&lt;span id="LC69" class="line" lang="plaintext"&gt;&lt;/span&gt;&amp;#x000A;&lt;span id="LC70" class="line" lang="plaintext"&gt;mnussbaum (1):&lt;/span&gt;&amp;#x000A;&lt;span id="LC71" class="line" lang="plaintext"&gt; Allow compositors to run as systemd user units&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&amp;#x000A;&lt;copy-code&gt;&lt;/copy-code&gt;&amp;#x000A;&lt;/div&gt;</content> + <updated>2019-02-25T22:10:42Z</updated> + <media:thumbnail width="40" height="40" url="https://secure.gravatar.com/avatar/1ce071dd3264c7d9f5d9c0b7137faa6b?s=80&amp;d=identicon"/> + <author> + <name>emersion</name> + <email>contact@emersion.fr</email> + </author> +</entry> +</feed> diff --git a/test/news_parse_ex_test.exs b/test/news_parse_ex_test.exs @@ -15,4 +15,13 @@ defmodule NewsParseExTest do assert(parsed.id == "https://example.org/feed/") assert(parsed.last_update == ~U[2021-11-01 16:09:55Z]) end + + test "parses Gitlab atom feed" do + feed = File.read!("test/fixtures/gitlab/wlroots-2022-12-27.atom") + + {:ok, parsed} = NewsParseEx.parse(feed) + assert(parsed.title == "wlroots tags") + assert(parsed.id == "https://gitlab.freedesktop.org/wlroots/wlroots/-/tags") + assert(parsed.last_update == ~U[2021-11-01T16:09:55Z]) + end end