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 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 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 from uint32_t to int32_t as specified by the protocol.
  • remove wlr_box.h redirection (!3405)
    • wlr/types/wlr_box.h has been removed; use wlr/util/box.h instead.
  • Split wl_compositor and wl_subcompositor implementation (!3412)
    • wlr_subcompositor is not created automatically anymore on calling wlr_compositor_create(); use wlr_subcompositor_create().
    • wlr/types/wlr_surface.h has been deprecated; use wlr/types/compositor.h and wlr/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 takes const wlr_surface_state * state which is to be applied, and the signal is emitted right before the actual commit, not when wl_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 takes struct wlr_box * as a parameter. If the function fails, the box is emptied.
  • xdg-shell refactor (!3326)
    • All wlr_xdg_toplevel_*() functions now take wlr_xdg_toplevel as the main parameter.
    • All wlr_xdg_popup_*() functions now take wlr_xdg_popup as the main parameter.
    • wlr_xdg_toplevel_*_event structs now have a wlr_xdg_toplevel field instead of wlr_xdg_surface.
    • wlr_xdg_toplevel::parent is now wlr_xdg_toplevel instead of wlr_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.
  • xdg-positioner: update + rewrite unconstraining logic (!3446)
    • The previous wlr_xdg_positioner has been renamed to wlr_xdg_positioner_rules.
      • The new wlr_xdg_positioner represents an actual Wayland object.
    • 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 to wlr_xdg_positioner_rules_get_geometry() and now takes wlr_box * as a parameter.
  • 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 and product_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.
    • wlr_keyboard, wlr_virtual_keyboard_v1 and wlr_virtual_pointer_v1 destroy events are removed in favor of the base wlr_input_device destroy event. (!3481)
    • output_name, width_mm and height_mm have been moved from wlr_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 new wlr_*_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 a wlr_output_commit call to be applied.
  • seat: take wlr_keyboard in wlr_seat_set_keyboard() (!3498)
    • wlr_seat_set_keyboard() now takes a wlr_keyboard * instead of wlr_input_device.
  • xdg-toplevel: don't schedule configures on state requests (!3512)
    • compositors must now manually call wlr_xdg_surface_schedule_configure on request_maximize/request_fullscreen if they weren't handling the request.
  • xwayland: Fix order of wlr_xwayland_surface_size_hints fields (!3495)
    • wlr_xwayland_surface_hints and wlr_xwayland_surface_size_hints have been replaced by xcb_icccm_wm_hints_t and xcb_size_hints_t respectively. wlr_xwayland_surface.hints_urgency has been removed, use xcb_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.
  • 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 create wlr_scene_buffer nodes with associated helpers.
    • Use wlr_scene_surface_from_buffer() to get a scene surface from a wlr_scene_buffer.
  • xdg-shell: add v3 support (!3514)
    • wlr_xdg_popup.geometry has been moved to wlr_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 glorified wlr_scene_tree.
    • wlr_scene_node_state has been inlined into wlr_scene_node.
    • wlr_scene_tree now has the children linked list, not the wlr_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 a wlr_scene_tree.
  • 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 emitting map/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 of WLR_SURFACE_STATE_BUFFER.
  • 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.
  • xdg-shell: fix geometry types (!3818)
    • The types of wlr_xdg_toplevel_state.{,min_,max_}{width,height}, wlr_xdg_toplevel_configure.{,bounds.}{width,height}, and wlr_xdg_toplevel_show_window_menu_event.{x,y} have been changed from uint32_t to int32_t.
  • output-damage: deprecate (!3837)
    • wlr_output_damage API has been deprecated. Use wlr_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 and wlr_renderer_end.
  • buffer: extract interface to separate header (!3472): wlr_buffer implementations now need to include wlr/interfaces/wlr_buffer.h.
  • render: replace wlr_texture_write_pixels with update_from_buffer (!3585)
  • render: drop wlr_renderer_read_pixels() flags (!3749)