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->... Add missing & 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
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 supersedeswlr_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 changelog
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->...
Add missing &
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
Changes for packagers
- backend/drm: use pnp.ids to fetch EDID data (!3638): hwdata is a new build-time dependency required for the DRM backend.
Breaking changes for compositors
These changes can affect most compositors.
-
layer-shell: fix type of margins (!3404)
-
wlr_layer_surface_v1_state.margin.{top,bottom,left,right}
type has been changed fromuint32_t
toint32_t
as specified by the protocol.
-
-
remove wlr_box.h redirection (!3405)
-
wlr/types/wlr_box.h
has been removed; usewlr/util/box.h
instead.
-
-
Split wl_compositor and wl_subcompositor implementation (!3412)
-
wlr_subcompositor
is not created automatically anymore on callingwlr_compositor_create()
; usewlr_subcompositor_create()
. -
wlr/types/wlr_surface.h
has been deprecated; usewlr/types/compositor.h
andwlr/types/wlr_subcompositor.h
. -
wlr_compositor.events.destroy
signal is now fired with NULL argument.
-
-
surface: improve role precommit hook (!3191)
-
wlr_surface_role.precommit
now also takesconst wlr_surface_state *
state which is to be applied, and the signal is emitted right before the actual commit, not whenwl_surface.commit
request is received.
-
-
output-layout: make wlr_output_layout_get_box() take a box as parameter (!3439)
-
wlr_output_layout_get_box()
now returns nothing and takesstruct wlr_box *
as a parameter. If the function fails, the box is emptied.
-
-
xdg-shell refactor (!3326)
- All
wlr_xdg_toplevel_*()
functions now takewlr_xdg_toplevel
as the main parameter. - All
wlr_xdg_popup_*()
functions now takewlr_xdg_popup
as the main parameter. -
wlr_xdg_toplevel_*_event
structs now have awlr_xdg_toplevel
field instead ofwlr_xdg_surface
. -
wlr_xdg_toplevel::parent
is nowwlr_xdg_toplevel
instead ofwlr_xdg_surface
. -
wlr_xdg_toplevel_set_fullscreen_event
is removed. - All
wlr_xdg_surface
signals now have NULL as their argument. - All
wlr_xdg_toplevel
signals which don't have an associated event struct now have NULL as their argument.
- All
-
xdg-positioner: update + rewrite unconstraining logic (!3446)
- The previous
wlr_xdg_positioner
has been renamed towlr_xdg_positioner_rules
.- The new
wlr_xdg_positioner
represents an actual Wayland object.
- The new
- The following functions have been removed:
wlr_positioner_invert_x()
wlr_positioner_invert_y()
wlr_xdg_popup_get_anchor_point()
-
wlr_xdg_positioner_get_geometry()
has been renamed towlr_xdg_positioner_rules_get_geometry()
and now takeswlr_box *
as a parameter.
- The previous
-
Input device refactor (!3434, !3452, !3469, !3481, !3482, !3484, !3626)
-
wlr_headless_input_device
has been removed, compositors can define their own devices for headless backend. -
vendor_id
andproduct_id
are defaulted to 0 and set when needed by the libinput backend. - Specialized input devices (keyboard, pointers, etc) have
struct wlr_input_device *base
field. -
wlr_input_device_impl
has been removed. -
wlr_input_device_destroy
has been removed. - The
wlr_input_device
interface has been made private. - Specialized input device
destroy
function and implementation has been removed.- Use
finish
functions to clean input devices up before destruction.
- Use
-
wlr_keyboard
,wlr_virtual_keyboard_v1
andwlr_virtual_pointer_v1
destroy events are removed in favor of the basewlr_input_device
destroy event. (!3481) -
output_name
,width_mm
andheight_mm
have been moved fromwlr_input_device
to related specialized input devices. - Specialized input devices' events have been renamed and now follow
wlr_{input type}_{event type}_event
format. - The union field in
wlr_input_device
has been removed, the newwlr_*_from_input_device
functions can be used instead.
-
- wlr_switch: remove WLR_SWITCH_STATE_TOGGLE (!3462)
-
types/wlr_tablet_tool: remove name ambiguity (!3485)
-
wlr_tablet.name
has been removed,wlr_input_device.name
must be used instead. (!3485)
-
-
wlr_output: Handle subpixel hints through output commits (!3420):
-
wlr_output_set_subpixel
calls must now be followed by awlr_output_commit
call to be applied.
-
-
seat: take wlr_keyboard in wlr_seat_set_keyboard() (!3498)
-
wlr_seat_set_keyboard()
now takes awlr_keyboard *
instead ofwlr_input_device
.
-
-
xdg-toplevel: don't schedule configures on state requests (!3512)
- compositors must now manually call
wlr_xdg_surface_schedule_configure
onrequest_maximize
/request_fullscreen
if they weren't handling the request.
- compositors must now manually call
-
xwayland: Fix order of wlr_xwayland_surface_size_hints fields (!3495)
-
wlr_xwayland_surface_hints
andwlr_xwayland_surface_size_hints
have been replaced byxcb_icccm_wm_hints_t
andxcb_size_hints_t
respectively.wlr_xwayland_surface.hints_urgency
has been removed, usexcb_icccm_wm_hints_get_urgency
instead.
-
-
xdg-shell: specify version in wlr_xdg_shell_create (!3547)
- Compositors must now pass their maximum supported xdg-shell version to
wlr_xdg_shell_create()
. This allows for wlroots to implement newer versions without a breaking change requiring compositors to implement the newer version as well.
- Compositors must now pass their maximum supported xdg-shell version to
-
wlr_scene: Refactor wlr_scene_surface to be a helper on top of wlr_scene_buffer (!3497)
-
wlr_scene_surface_create()
,wlr_scene_xdg_surface_create()
, etc. now createwlr_scene_buffer
nodes with associated helpers. - Use
wlr_scene_surface_from_buffer()
to get a scene surface from awlr_scene_buffer
.
-
-
xdg-shell: add v3 support (!3514)
-
wlr_xdg_popup.geometry
has been moved towlr_xdg_popup_state
and is now double-buffered. -
wlr_xdg_popup_unconstrain()
now schedules a configure. -
wlr_xdg_popup.positioner_rules
is removed.
-
-
wlr_scene: Only allow parenting on a wlr_scene_tree (!3509)
- The
WLR_SCENE_NODE_ROOT
node type is removed, the root node is now a glorifiedwlr_scene_tree
. -
wlr_scene_node_state
has been inlined intowlr_scene_node
. -
wlr_scene_tree
now has the children linked list, not thewlr_scene_node
- Reparenting and scene node creation functions now only accept a
wlr_scene_tree
. - Helpers such as
wlr_scene_subsurface_tree_create()
now return awlr_scene_tree
.
- The
-
output: drop wlr_output_cursor.events.destroy (!3578)
- Listen to wlr_output.events.destroy instead.
-
matrix: remove wlr_matrix_projection() (!3613)
- This was deprecated 1 year ago and has now been removed.
-
Set mapped before firing map/unmap events (!3660)
-
mapped
flag is now consistently set before emittingmap
/unmap
signals. - This affects compositors which rely on a specific state of the flag on those events.
-
-
surface: implement wl_surface.offset (!2992)
- To check whether the surface offset has changed,
WLR_SURFACE_STATE_OFFSET
must be used instead ofWLR_SURFACE_STATE_BUFFER
.
- To check whether the surface offset has changed,
-
output: fail commits if adaptive sync cannot be enabled (!3637)
- Compositors now need to use
wlr_output_test()
to check if an output supports adaptive sync.
- Compositors now need to use
-
xdg-shell: fix geometry types (!3818)
- The types of
wlr_xdg_toplevel_state.{,min_,max_}{width,height}
,wlr_xdg_toplevel_configure.{,bounds.}{width,height}
, andwlr_xdg_toplevel_show_window_menu_event.{x,y}
have been changed fromuint32_t
toint32_t
.
- The types of
-
output-damage: deprecate (!3837)
-
wlr_output_damage
API has been deprecated. Usewlr_damage_ring
(wlr/types/wlr_damage_ring.h
) instead.
-
Breaking changes for custom backends and renderers
These changes are unlikely to affect compositors that don't have a custom backend or renderer.
-
render: allow texture creation while rendering (!3464): renderers must now correctly handle texture creation between
wlr_renderer_begin
andwlr_renderer_end
. -
buffer: extract interface to separate header (!3472):
wlr_buffer
implementations now need to includewlr/interfaces/wlr_buffer.h
. - render: replace wlr_texture_write_pixels with update_from_buffer (!3585)
- render: drop wlr_renderer_read_pixels() flags (!3749)