freedesktop-gitlab wlroots/wlroots 0.17.0

latest releases: 0.18.1, 0.18.0, 0.17.4...
11 months ago

Release highlights:
  • New protocol implementations:
    • content-type-v1 to tag surfaces with their content type (audio, video,
      game, etc).
    • xwayland-shell-v1 to improve XWayland reliability.
    • wp-fractional-scale-v1 to allow clients to submit buffers with a
      non-integer scale factor matching the output.
    • tearing-control to allow clients to opt-in for tearing page-flips.
    • security-context-v1 to identify clients running in sandboxes.
    • cursor-shape-v1 for server-side cursor themes.
  • Introduce a new output layers API to leverage KMS planes.
  • Add a new renderer API with improved design and performance. Add an API to
    query the time taken to render.
  • Continued work on the Vulkan renderer: add more RGB formats, add YUV buffers,
    add interoperability with implicit synchronization instead of blocking.
  • Add support for the new wl_surface.preferred_buffer_{scale,transform} events.
  • Improved scene-graph, including support for linux-dmabuf feedback and
    clipping surfaces.
  • Improved wlr_cursor which now keeps track of the current cursor image.
  • Add an implementation of the wl_shm interface, replacing libwayland's for
    improved reliability and performance.
  • The Wayland backend supports embedding a wlroots compositor inside an
    existing Wayland client.
  • wl_surface roles have been refactored.

Full changelog
Alexander Orzechowski (146):
      wlr_scene: Add drag icon helper
      output: Initialize request_state
      wlr_scene: Don't cull the entire output when entering direct scanout
      wlr_scene: Expand damage cull region with fractional scales
      wlr_texture: Expose owning renderer
      output_init_render: Allow re-initialization
      wlr_drm: Add missing wlr_buffer import
      addon: Add more logging
      addon: Remove extra newline from logging
      tinywl: Nuke view->{x, y}
      subcompositor: Clarify comment on subsurface mapped consideration
      subcompositor: Clean up subsurface_consider_map
      wlr_scene: Send intersecting list of scene outputs for outputs_update signal
      wlr_scene: Rename wlr_scene_surface_from_buffer
      wlr_scene: Cleanup header includes
      wlr_scene: Extract considering logic for direct scanout
      wlr_scene: Add dmabuf_feedback helper
      wlr_scene: Skip direct scanout if there is no damage
      output: Drop output_is_direct_scanout
      wlr_scene: Send presentation event before direct scanout output commit
      wlr_scene: Fix potential use-after-free in wlr_scene_buffer_set_buffer
      tinywl: Release everything before destroy
      linux_dmabuf_v1: Use wlr_drm_format_set_union
      drm_format_set: Mark as unstable
      wlr_compositer: Keep track if surface has committed a buffer before.
      wlr_compositor: Decide opacity from new has_buffer flag.
      drm_format_set_union: Require initialized dst and remove assert
      drm_format_set_intersect: Require initialized dst and remove assert
      wlr_cursor: Consider surface state when setting new cursor surface
      wlr_cursor: Don't multiply hotspot by scale^2
      wlr_drm_format: Introduce drm_format_finish
      wlr_drm_format_set: Remove redundant text in comment for finish function
      wlr_drm_format: Make structure constant length
      wlr_drm_format: Don't take double pointer in wlr_drm_format_add
      wlr_drm_format: Change wlr_drm_format_create to init
      wlr_drm_format: Change wlr_drm_format_dup to copy
      wlr_drm_format: Rework wlr_drm_format_intersect
      wlr_drm_format_set: Store formats on array
      wlr_drm_format_set_intersect: Clear destination before trying to write to it
      output_pick_format: Fail if no format could be chosen
      wlr_{box, fbox}_equal: Handle NULL
      wlr_{box, fbox}_equal: Consider empty boxes NULL
      renderer/gles2: Interpret matrix as column major in shader
      renderer/gles2: Merge get_buffer and create_buffer
      renderer/gles2: Compute texture coordinates based off of vertex positions
      renderer/gles2: Implement render pass interface
      wlr_scene: Add documentation to wlr_scene_buffer_from_node
      wlr_scene: Make scene_tree_from_node public
      wlr_scene: Make scene_rect_from_node public
      wlr_scene: Introduce wlr_scene_buffer_set_opacity
      examples: Drop quads
      renderer: Don't pass NULL options
      render/gles2: Handle NULL timer
      wlr_seat_pointer: cursor surfaces are always mapped
      wlr_tablet_v2_tool: Tablet tool surfaces are always mapped
      output: introduce wlr_output_state_set_damage()
      scene: Don't rely on output current state during rendering
      scene: introduce wlr_scene_output_build_state()
      wlr_output_state: Consider buffer uninitialized if not committed
      wlr_output_state: Consider gamma_lut uninitialized if not committed
      wlr_scene: Don't use direct scanout if trying to commit a new render_format
      examples: Drop usage of wlr_output.pending
      tinywl: Drop usage of wlr_output.pending
      output: add documentation for wlr_output_state
      wlr_scene: Fix transforms with non 1 scale
      wlr_damage_ring_set_bounds: Ignore duplicate size requests
      wlr_scene: Reset damage ring bounds every frame
      wlr_scene: Clear damage ring on scale change
      wlr_scene: Clear damage ring on transform change
      render/vulkan: Dynamically handle pipeline creation for textures
      render/vulkan: Handle quad pipeline through generic pipeline path
      render/vulkan/pipeline_key: Add blending
      render/vulkan: Dynamically create pipeline layouts
      render/vulkan: Inline init_sampler
      render/vulkan: Dynamically create texture views
      output_state: Gamma lut should be freed only if committed
      renderer: Introduce wlr_scale_filter_mode
      pixman: Remove dead code
      render: Introduce wlr_render_texture_options.blend_mode
      backend/drm: Use texture blend_mode for multigpu blit
      render/vulkan: Initialize to fix compilation error
      wlr_scene: Introduce wlr_scene_buffer_set_filter_mode
      backend/drm: Fix typo
      render/vulkan: Don't compute texture.has_alpha until first... ...texture view is dynamically created
      output: Introduce wlr_output_state_copy()
      scene: Use wlr_output_state_copy for direct scanout path
      examples/tablet: Don't use new render API and old render API together
      wlr_scene: Add opaque region blend mode optimization
      backend/drm: Don't add pollute fixed modes list with custom modes
      backend/x11: Reject non 0 refresh rate mode sets
      backend/wayland: Reject non 0 refresh rate mode sets
      output: Set output mode during main commit
      wlr_scene_buffer: Publicize some state
      wlr_scene: Wrap render_list nodes in struct
      wlr_scene: Simplify direct scanout handling
      wlr_scene: Don't recompute node location during rendering
      wlr_scene: Fix buffer damage for output state
      wlr_scene: Fix damage tracking with non atomic opaque region configuration
      wlr_scene: Don't damage when setting opaque region
      screencopy_v1: Use new renderer API for gpu blit path
      screencopy_v1: Implement copy regions with gpu blit path
      renderer: Sanity check texture source bounds
      output: Extract common commit logic
      output: Add initialization state to wlr_output_init
      backend/x11: Use output state to set init custom mode
      backend/wayland: Use output state to set init custom mode
      backend/headless: Use output state to set init custom mode
      backend/drm: Move output variable up in connect_drm_connector
      backend/drm: Use output state to set init mode
      wlr_output: Make wlr_output_update_{custom,}_mode private
      output: Inline wlr_output_update_{custom,}_mode
      output: Schedule mode updates to happen with rest of output events
      wlr_output: Nuke wlr_output_update_enabled
      renderer/vulkan: Defer device lost signal until end of pass
      egl: Remove dead code
      egl: Don't assume display is owned when KHR_display_reference is unsupported
      wlr_output: Set current_mode during new custom mode
      backend/drm: Compute custom mode correctly
      output: Mutate frame_pending needs_frame when there is an explicit output commit
      render/pass: Introduce wlr_render_rect_options_get_box
      renderer: Use wlr_render_rect_options_get_box
      render/pass: Remove empty box early return
      cursor: Unset cursor image when there is not available xcursor theme
      cursor: Remove dead code
      cursor: Unset cursor if texture upload failed
      output_defer_present: Calloc right struct
      treewide: Migrate from sizeof(struct) to sizeof(*pointer) where practical
      renderer_autocreate_with_drm_fd: Ensure fd isn't bogus
      renderer: Don't crash when trying to fallback to pixman
      wlr_output: Add applied state to commit event
      output_event_commit: Remove committed and buffer
      scene_output_layout: Don't destroy output when output layout is destroyed
      scene/output_layout: Add assert for duplicate output insertion
      wlr_scene: Amend scene_buffer.point_accepts_input to take coordinate pointers
      wlr_scene_subsurface_tree: Addon to scene
      set_buffer_with_surface_state: Take whole surface struct
      wlr_scene_surface: Introduce scene_surface_set_clip
      wlr_scene: Introduce wlr_scene_subsurface_tree_set_clip
      wlr_scene: Update outputs when output scale/transform changes
      wlr_scene: Update outputs when primary output is changed
      wlr_scene: Update outputs if subpixel status changes
      backend/drm: Track page flips in list
      backend/drm: Destroy page flips on backend destroy
      screencopy: Define proper destination for dmabuf copy
      screencopy: Move frame bounds sanity check into common code
      screencopy: Use box size instead for shm copy

Andri Yngvason (3):
      wlr_seat: Extract seat_client_create() function
      seat: Let client manage its own resources
      seat: Provide dummy resources for inert seats

Austin Shafer (3):
      Add union function for format sets
      drm_plane_pick_render_format: return false if no format could be found
      dmabuf: Remove assumption that all mods are in fallback tranche

Brett Ernst (6):
      vulkan: increase max stage size to support large buffers
      drm_format_set: fix realloc size
      add minimalist cairo example
      backend/wayland: log output test failure reasons
      backend/x11: log output test failure reasons
      renderer/vulkan: don't add two alphas together in blend func

Brian J. Tarricone (1):
      Fix possible crash in server-decoration when surface destroyed

Christopher Snowhill (1):
      xwayland: fix memory leak

Clayton Craft (1):
      backend/drm: use panel_orientation if it is set

Consolatis (2):
      xcursors: Alias existing cursor defaults to cursor-spec cursor names
      xdg-activation: accept pointer focus for new tokens

Edgars Cīrulis (1):
      xcursor: Resolve warning in xcursor_build_theme_dir

Eric Engestrom (1):
      render/egl: skip incompatible EGL devices

Evyatar Stalinsky (1):
      util/log: fix buffer overflow

Guido Günther (1):
      seat/pointer: Initialize low_res_value

Isaac Freund (3):
      session-lock: send more protocol errors
      xdg-shell: improve validation of resize edges
      xdg-decoration: send missing protocol errors

Jan Beich (1):
      vulkan: silence -Wint-conversion on 32-bit architectures

JiDe Zhang (5):
      wlr_output_cursor: assert renderer isn't NULL
      wlr_output: update cursor when scale changed
      xwayland: fix double free wlr_xwayland_shell_v1
      Fix output layers order error on wayland backend
      Remove unnecessary code

Johan Malm (2):
      scene/layer_shell_v1.c: set exclusive zone correctly
      scene/layer_shell_v1.c: remove redundant comment

John Lindgren (6):
      xwayland: Read and publish _NET_WM_STRUT_PARTIAL property
      xwayland: Send synthetic ConfigureNotify per ICCCM 4.1.5
      wlr_gamma_control: add missing forward declarations
      wlr_scene: clarify wlr_scene_output ownership semantics
      xwayland: stop translating _NET_WM_STRUT_PARTIAL coordinates
      xwayland: add wlr_xwayland_set_workareas()

Kenny Levinsen (6):
      addon: Allow NULL owner of addon
      wp-fractional-scale-v1: new protocol implementation
      scene: Add fractional scale handling
      gamma-control: Read ramps using pread
      output: allow_artifacts -> allow_reconfiguration
      backend/drm: Automatic non-blocking commits

Kirill Primak (104):
      xwayland: fix wlr_xwayland_surface_from_wlr_surface() docs
      input-inhibitor: deprecate
      xdg-shell: send invalid_size errors
      Nuke deprecated include/wlr/types/wlr_surface.h
      scene: introduce wlr_scene_buffer.events.outputs_update
      scene: fix output damage expansion condition
      output-layout: fix function decl indentation
      output-layout: remove wlr_output_layout_output_state
      output-layout: improve API
      tinywl: handle wlr_output.events.request_state
      xdg-shell: use defunct_role_object error
      util/region: forbid "shrinking" a region with wlr_region_expand()
      xwayland/xwm: constify needles
      render/vulkan: remove NULL renderer check on texture destroy
      render/vulkan: always finish buffer addon on texture destroy
      util/addon: ensure the set is empty after finish
      xwayland/xwm: dissociate even if surface is NULL
      presentation-time: finish surface addon
      backend/x11: fix delta_discrete value
      output-layout: improve closest point for no outputs case
      xwayland/xwm: introduce wlr_xwayland_surface_try_from_wlr_surface()
      subcompositor: fix mapped parent check
      xwayland/shell: actually use wlr_xwayland_surface_v1.link
      layer-shell: forbid changing the existing popup parent
      tinywl: init server to zeros
      xwm: remove misleading comment
      xwm: make atom_map static
      xwm: emit new_surface/destroy on associate/dissociate
      xdg-shell: improve unmapping logic slightly
      subcompositor: simplify get_subsurface handler
      subcompositor: use bad_parent error
      compositor: use defunct_role_object error
      keyboard: use the new data in wlr_keyboard_set_keymap()
      util/box: simplify empty box case in wlr_box_intersection()
      util/box: always treat NULL boxes as empty
      util/box: transform empty boxes' origins
      Revert "xwm: emit new_surface/destroy on associate/dissociate"
      xwm: introduce associate/dissociate events
      compositor: introduce unified map logic
      subcompositor: use unified map logic
      xdg-shell: use unified map logic
      layer-shell: use unified map logic
      session-lock: use unified map logic
      input-method: use unified map logic
      drag: use unified map logic
      xwm: use unified map logic
      compositor: remove wlr_surface_role.precommit
      xwm: check for a buffer before mapping
      session-lock: remove unused wlr_session_lock_surface_v1.events.map
      session-lock: fix buffer check
      subcompositor: consider mapping on parent map
      compositor: notify subsurfaces about a commit in the rendering order
      compositor: unmap subsurfaces too on unmap
      Add some missing includes/declarations
      compositor: add a note about ignored input regions
      Clear input regions if they're ignored
      subcompositor: simplify subsurface_consider_map(), call on add
      cursor: fix applying hotspot offset
      drag: don't set icon's role_data
      subcompositor: set role_data with wlr_surface_set_role()
      compositor: improve role-specific documentation
      seat: remove a TODO comment about simulating keyboard events
      compositor: add wlr_surface_role.no_object
      compositor: fix wlr_surface_set_role() error messages
      compositor: introduce wlr_surface_set_role_object()
      compositor: don't call role unmap hook without an object
      fullscreen-shell: set surface role
      viewporter: check for an existing viewport
      subcompositor: don't remove inert role resource
      layer-shell: don't remove inert role resource
      session-lock: don't remove inert role resource
      xwayland-shell: don't remove inert role resource
      input-method-v2: don't remove inert role resource
      xdg-shell: update stale docs
      data-device: remove undefined grab interface decls
      xwayland/shell: don't listen to wlr_surface.events.destroy
      Unmap wlr_surface before making its role object inert
      compositor: add "mapped" flag doc
      xdg-shell: don't return anything from create_xdg_surface()
      Don't assume xdg_surface.{toplevel,popup} is non-NULL
      xdg-popup: avoid using wlr_surface_destroy_role_object()
      xdg-shell: rework roles
      Unify signal data docs
      xdg-popup: validate parent
      xdg-surface: assert that xdg_surface isn't inert
      xdg-surface: fix init state flow
      docs: replace the less commonly used "::" with "."
      seat: remove wlr_seat_validate_grab_serial()
      scene-output-layout: assert lo->output == so->output
      util/addon: make wlr_addon_set_finish() safer
      layer-shell: check for NULL in wlr_layer_surface_v1_destroy()
      xdg-shell: fix wlr_xdg_popup_destroy() docs
      Drop wl_client and user data assertions in bind handlers
      layer-shell: check the configured flag earlier
      compositor: add wlr_surface.unmap_commit
      layer-shell: don't use wlr_surface_role.unmap hook
      layer-shell: track surface init state
      xdg-shell: use wlr_surface.unmap_commit
      xdg-toplevel: don't send maximized if tiled is requested but not supported
      tinywl: fix xdg_toplevel_destroy() docs
      tinywl: don't use "I"/"my" in docs
      Add missing type declarations in headers
      xcursor: fix NULL deref on malloc() fail
      xcursor: don't store NULL xcursors

Leo Li (1):
      wlr_scene: Use cached node coordinates where possible

Leonardo Hernández Hernández (3):
      scene: send wl_surface.preferred_buffer_scale
      xdg-shell: add support for v6
      xdg-decoration: store an xdg_toplevel instead of xdg_surface

Manuel Stoeckl (13):
      render/vulkan: update shm texture data in one batch
      render/vulkan: add support for RGB565 texture format
      render/vulkan: align staging buffers for texture upload
      render/gles2: use byte-aligned rows for glReadPixels
      render/vulkan: increase next descriptor pool size
      render/vulkan: allow rendering to non-8-bit buffers
      screencopy-v1: fix logical->physical region transform
      render: ensure wlr_render_rect_options->box is nonempty
      render/vulkan: fix validation error with vkCmdBlitImage
      screencopy_v1: only bind, not render with, buffer in shm copy path
      util: add struct to track union of rectangles
      render/vulkan: constrain blend to output subpass to redrawn region
      render/vulkan: undo alpha premult for 8-bpc ARGB/ABGR

Ronan Pigott (2):
      wlr_xdg_activation_v1: add new_token event
      scene: apply rounding when translating buffer damage

Rose Hudson (14):
      examples/touch: fix incorrect event type
      backend/wayland: support touch cancel events
      examples/touch: support touch cancel events
      util: add timespec_to_nsec
      add render timer API
      render/gles2: implement timer API
      scene_output: optionally record and report timings
      export-dmabuf, screencopy: schedule_frame -> needs_frame
      output_layout: return wlr_output_layout_output when adding output
      scene_output_layout: make output adding explicit
      backend/drm: don't set frame_pending on modeset
      backend/drm: report !presented if session is inactive
      output: don't forbid multiple commits per frame
      output: defer fake present events until after commit

Rouven Czerwinski (1):
      session-lock: add missing lock_surface_destroy

Simon Ser (468):
      build: bump version to 0.17.0-dev
      render/vulkan: add helper to load command function pointer
      render/vulkan: switch to timeline semaphores
      render/vulkan: add a command buffer pool
      render/vulkan: use command buffer pool for stage
      render/vulkan: always wait for last stage to complete before rendering
      render/vulkan: wait for device to become idle in vulkan_destroy()
      render/vulkan: use initializer for VkBufferImageCopy
      backend/drm: ensure disconnected outputs are disabled after VT switch
      build: move udev dep to backend/
      build: add subproject fallback for Pixman
      build: bump pixman version
      backend: remove const casts for pixman_region32_t
      util/region: constify
      render/texture: constify wlr_texture_update_from_buffer()
      buffer: constify wlr_client_buffer_apply_damage()
      damage-ring: constify wlr_damage_ring_add()
      output-damage: constify wlr_output_damage_add()
      output: constify damage APIs
      region: constify
      scene: constify region APIs
      layer-shell-v1: specify version in constructor
      backend/drm: log refresh rate in Hz
      backend/drm: log modesetting commits
      backend/drm: fix FPE when disabling output
      compositor: drop wlr_surface.{sx,sy}
      backend/drm: only request page-flip if active
      content-type-v1: new protocol implementation
      output: introduce request_state event
      backend/wayland: use request_state when toplevel is resized
      backend/x11: use request_state when window is resized
      content-type-v1: add version param to wlr_content_type_manager_v1_create()
      render: add docs for wlr_renderer
      render: make some wlr_renderer fields private
      render: allow wlr_renderer_impl.begin to fail
      render: make wlr_renderer_begin return a bool
      output: check wlr_renderer_begin return value
      scene: check wlr_renderer_begin return value
      render: add wlr_renderer.events.lost
      render/gles2: query glGetGraphicsResetStatusKHR
      render/egl: enable EGL_LOSE_CONTEXT_ON_RESET
      render/vulkan: detect device loss
      render/pixel_format: import pixel_format_info_check_stride()
      Introduce wlr_shm
      render: use wlr_shm in wlr_renderer_init_wl_shm()
      buffer: drop wlr_shm_client_buffer
      shm: allow accessing multiple shm mapping concurrently
      backend: return wlr_session in wlr_backend_autocreate() call
      backend: drop wlr_backend_get_session()
      backend: rename backend to multi in wlr_backend_autocreate()
      allocator/drm_dumb: use libdrm dumb buffer helpers
      output: call wlr_output_update_enabled() after commit
      backend/drm: don't damage output on CRTC change
      output: drop wlr_output_damage_whole()
      linux-dmabuf-v1: use resource interface
      wl-drm: use resource interface
      xwayland-shell-v1: new protocol implementation
      xwayland: add wlr_xwayland_shell_v1_set_client()
      xwayland: add wlr_xwayland_shell_v1_destroy()
      xwayland/server: add start signal
      xwayland/server: delay non-lazy startup
      xwayland/shell: add wlr_xwayland_shell_v1_surface_from_serial()
      xwayland/xwm: add support for xwayland-shell-v1
      Relax 80 column limit
      render: stop pulling <wlr/backend.h>
      backend/session: drop unused <libudev.h>
      backend: stop pulling <wlr/backend/session.h>
      render/gles2, render/pixman: stop pulling <wlr/backend.h>
      backend/multi: stop pulling <wlr/backend/session.h>
      compsitor: document wlr_compositor_create()
      compositor: release current buffer after commit event
      compositor: make renderer optional
      shm: add create() function without a wlr_renderer
      backend/session: disable libseat examples for subproject by default
      backend: error out when missing DRM and libinput in wlr_backend_autocreate()
      util/time: use int64_t return value for get_current_time_msec()
      backend: use time helpers to implement timeouts
      backend/session: make optional
      scene: use wlr_output_state for direct scanout
      scene: set output damage during direct scan-out
      build: exclude <wlr/types/wlr_drm_lease_v1.h> without DRM backend
      render/vulkan: drop unused fields from wlr_vk_format_modifier_props
      render/vulkan: destroy textures after command buffer completes
      render/vulkan: release stage buffers after command buffer completes
      render/dmabuf: add dmabuf_import_sync_file
      render/vulkan: import semaphore to DMA-BUF instead of blocking
      linux-dmabuf-v1: add "_with_renderer" suffix to create() function
      linux-dmabuf-v1: add version arg to create()
      linux-dmabuf-v1: don't use wlr_renderer to sanity check DMA-BUFs
      linux-dmabuf-v1: don't use wlr_renderer to send legacy format list
      linux-dmabuf-v1: drop wlr_renderer field
      linux-dmabuf-v1: introduce wlr_linux_dmabuf_v1_create()
      scene: stop listening for output enable/mode events
      output-damage: stop listening for output mode events
      output-layout: stop listening for output mode events
      output: drop enable/mode events
      render/vulkan: drop "_format" in wlr_vk_format fields
      render/vulkan: explain format mapping with DRM
      render/pixel-format: add various new formats
      render/pixel-format: drop unnecessary fields in the table
      render/vulkan: add more 8 bits per channel formats
      render/vulkan: add more packed formats
      render/vulkan: add 64-bit UNORM and SFLOAT formats
      render/drm-format-set: add wlr_drm_format_set_copy()
      wl-drm: don't store wlr_renderer
      wl-drm: only advertise formats supporting implicit modifiers
      render/vulkan: extract DMA-BUF format query to separate function
      render/vulkan: simplify vulkan_format_props_query()
      render/vulkan: improve message on format prop error
      render/vulkan: check for barrier array alloc failure
      render/vulkan: make vulkan_format_props_find_modifier() return value const
      render/vulkan: make shm/dmabuf split clearer in wlr_vk_format_props
      render/vulkan: move VkDescriptorSetAllocateInfo down
      render/vulkan: fix missing pSignalSemaphores for stage CB
      render/vulkan: use initializers for VkImageMemoryBarrier
      render/vulkan: fix comma
      render/vulkan: fix vkCmdClearAttachments validation error
      render/vulkan: remove pre_cb in vulkan_end()
      render/vulkan: remove stage_cb conditional
      render/vulkan: use initializers for VkSubmitInfo
      compositor: document wlr_surface_{enter,leave,send_frame_done}
      xwayland/xwm: rename xwm_map_shell_surface()
      compositor: add wlr_surface.events.precommit
      xwayland/xwm: replace role with addon
      render/dmabuf: add dmabuf_export_sync_file()
      render/vulkan: wait for DMA-BUF fences
      render: simplify renderer_autocreate_with_drm_fd()
      util/env: add docs
      util/env: make env_parse_switch() return a size_t
      backend/wayland: ensure buffers are released on shutdown
      backend/x11: ensure buffers are released on shutdown
      build: use a configuration file for internal features
      xwayland: use internal_config
      xcursor: use internal_config
      render/allocator/gbm: use internal_config
      backend/libinput: use internal_config
      build: unify naming for HAVE_* defines
      backend/drm: fix VRR test
      backend/drm: simplify dealloc_crtc() commit
      backend/drm: stop using goto in set_plane_props()
      backend/drm: pass fb as arg in set_plane_props()
      backend/drm: use separate field to store pending cursor FB
      backend/drm: store pending FB in state
      xwayland: remove find_program() fallback when dep is not found
      xwayland: use HAVE_ prefix for xcb_xfixes_set_client_disconnect_mode
      render/pixman: skip mask for opaque texture rendering
      egl: consistently use EGLint for DMA-BUF format
      render/egl: stop advertising render support for external-only formats
      backend/drm: add drm_connector_status_str()
      backend/drm: print stringified connector status in realloc_crtcs()
      backend/drm: update wlr_drm_connnector.crtc in drm_connector_commit_state()
      backend/drm: clear pending cursor FB in drm_connector_commit_state()
      backend/drm: rename wlr_drm_backend.outputs to connectors
      backend/drm: refuse to switch CRTC for enabled connector
      backend/drm: prevent out-of-bounds array access on unknown subpixel
      backend/drm: drop unused arg in connector_get_current_mode()
      backend/drm: fetch fresh legacy CRTC in connector_get_current_mode()
      backend/drm: remove wlr_drm_crtc.legacy_crtc
      keyboard: improve documentation
      backend/drm: check return value of get_drm_{connector,crtc}_props()
      xwayland/xwm: assert that we're not overwriting when associating
      xwayland/xwm: remove unnecessary surface_id reset
      backend/x11: fix initial value of wlr_x11_buffer.n_busy
      tablet-tool: revert bitfield in enum wlr_tablet_tool_tip_state
      backend/drm: disable all CRTCs after VT switch
      render/vulkan: check that requested size is smaller than max
      tinywl: fix extra whitespace
      seat/keyboard: skip wl_array allocation
      seat/keyboard: constify wlr_seat_keyboard_send_modifiers()
      seat/keyboard: constify args in wlr_seat_keyboard_enter()
      seat/keyboard: constify wlr_seat_keyboard_notify_modifiers()
      seat/keyboard: constify wlr_seat_keyboard_notify_enter()
      backend/drm: set "max bpc" property based on pixel format
      xdg-shell: reset added/committed flag on unmap
      xdg-shell: remove unnecessary return
      xdg-shell: rename wlr_xdg_toplevel.added to sent_initial_configure
      xdg-shell: rename wlr_xdg_popup.committed to sent_initial_configure
      examples, tinywl: use "default" cursor instead of "left_ptr"
      examples: use NULL theme name instead of "default"
      xwayland/xwm: reset serial in xwayland_surface_dissociate()
      xdg-shell: convert to try_from
      input-method-v2: convert to try_from
      layer-shell-v1: convert to try_from
      ext-session-lock-v1: convert to try_from
      subcompositor: convert to try_from
      backend/wayland: don't cache next item when destroying buffers
      output: don't attach buffer on first commit if disabled
      backend/wayland: allow superseding a previous commit
      backend/wayland: update output mode after commit is done
      ci: install hwdata-dev on Alpine
      backend/drm: require hwdata pkg-config file
      backend/wayland: make destroy_wl_seats() handle a single seat
      backend/wayland: handle wl_registry.global_remove for wl_seat
      render/gles2: use correct type for shader type
      render/gles2: default to highp if available
      linux-dmabuf-v1: stop using const in feedback
      linux-dmabuf-v1: add basic helpers for feedback
      linux-dmabuf-v1: add wlr_linux_dmabuf_feedback_v1_init_with_options()
      linux-dmabuf-v1: use wlr_linux_dmabuf_feedback_v1_init_with_options()
      linux-dmabuf-v1: fix missing SCANOUT flag
      Switch IRC channel to #wlroots
      build: remove unnecessary pkgconfig arguments
      build: set pkgconfig URL
      build: enable subproject for libxkbcommon
      Add wlr_output_layer
      output: add wlr_output_set_layers()
      backend/wayland: implement output layers
      examples/output-layers: new example
      backend/drm: init wlr_drm_plane for all plane types
      backend/drm: add libliftoff interface
      backend/drm: add libliftoff composition layer
      backend/drm: add support for output layers
      output-layer: add feedback event
      backend/drm: send output layer feedback events
      linux-dmabuf-v1: add helper for output layer feedback events
      examples/output-layers: relay feedback events
      backend/drm: drop unnecessary pixman_region32_t casts
      screencopy-v1: drop unnecessary pixman_region32_t casts
      output: expose wlr_output_state_finish()
      output: expose wlr_output_state_set_buffer()
      backend/drm: drop wlr_drm_layer.pending_{width,height}
      backend/headless: unconditionally accept all output layers
      output-layer: document interactions with screen capture
      backend: create DRM backend monitor when WLR_BACKENDS is used
      backend: avoid adding NULL backend in attempt_backend_by_name()
      backend: disable DRM backend monitor when WLR_DRM_DEVICES is used
      render/swapchain: make public
      Switch to "meson setup"
      swapchain: remove allocator listener on destroy
      output: introduce wlr_output_configure_primary_swapchain()
      output: leverage wlr_output_configure_primary_swapchain()
      output: allow modeset with buffer while frame is pending
      backend: make wlr_backend_autocreate() fail when DRM is missing
      backend: move #ifdefs to nested functions
      examples/dmabuf-capture: fix frame_number deprecated in FFmpeg 6.0
      render/vulkan: prefer render node for wlr_renderer_get_drm_fd()
      backend/drm: use libdisplay-info to parse EDID
      backend/drm: use libdisplay-info for CVT mode generation
      backend/wayland: destroy zwp_linux_buffer_params_v1 objects
      util/log: prefix WLR_REL_SRC_DIR with underscore
      backend/wayland: fix leak of some globals
      gamma-control-v1: fix handling of duplicate control
      gamma-control-v1: simplify get_gamma_control error handling
      output-layer: require all layers in wlr_output_state.layers
      backend/drm: log drm_connector_alloc_crtc() failures
      render/vulkan: avoid double-close on sync_file FD after semaphore import
      output-layer: cache current state
      backend/wayland: only re-order sub-surfaces when necessary
      backend/wayland: only update layer position when necessary
      backend/wayland: only unmap layers when necessary
      output-layer: add support for scaling buffers
      output: add wlr_output_is_direct_scanout_allowed()
      scene: check wlr_output_is_direct_scanout_allowed()
      output: drop direct scan-out check in output_basic_test()
      output-damage: drop
      xcursor: adjust style, use calloc()
      compositor: pass version in wlr_compositor_create
      compositor: add wlr_surface_set_preferred_buffer_scale()
      compositor: add wlr_surface_set_preferred_buffer_transform()
      xcursor: sync with libwayland
      render/vulkan: use full names for extension command fields
      render/vulkan: remove extra newline
      render/vulkan: use initializer in vulkan_change_layout_queue()
      render/vulkan: fix signedness of strcmp() return value
      output-layer: add cropping support
      Add a new renderer API
      render: add render pass helpers
      render/pass: add legacy render pass implementation
      output: add wlr_output_add_software_cursors_to_render_pass()
      scene: port to wlr_render_pass
      render/pixman: add begin_pixman_data_ptr_access()
      render/pixman: implement render pass API
      render/vulkan: use VK_KHR_synchronization2
      render/pixman: fix scaling in render_pass_add_texture()
      render: introduce blend mode
      output/cursor: fix buffer size when nested and scaled
      render/vulkan: fix code style for function brackets
      xwayland: enable use of a xserver subproject
      render/vulkan: add support for NV12
      output: add output_cursor_set_texture()
      cursor: add surface handling
      output: drop wlr_output_cursor_set_surface
      render/vulkan: improve logging when creating texture
      wlr-export-dmabuf-v1: handle output destroy
      render/vulkan: enable NV12 on big-endian
      render/vulkan: wait for idle queue before destroying render buffer
      seat/keyboard: allow no keymap
      keyboard: don't change current keymap on wlr_keyboard_set_keymap() error
      keyboard: add support for resetting the keymap
      linux-dmabuf-v1: fix wlr_drm_format_set leak in feedback_compile()
      render/pixel-format: add docs
      render/pixel-format: add support for block-based formats
      render/pixel-format: add YVYU and VYUY
      render/vulkan: drop unnecessary comments
      render/vulkan: fix YCbCr format check in vulkan_texture_from_pixels()
      render/vulkan: extract quad pipeline init to separate function
      render/vulkan: fix VkPipelineLayout when texturing NV12
      render/vulkan: use identity swizzle for YCbCr formats
      render/vulkan: use VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE for default sampler
      render/vulkan: use same sampler params for RGBA and NV12
      render/vulkan: introduce struct wlr_vk_pipeline_layout
      render/vulkan: add vulkan_get_pipeline_layout()
      render/vulkan: add init_{default,ycbcr}_pipeline_layout()
      render/vulkan: generalize YCbCr format support
      render/vulkan: check format support before creating YCbCr sampler
      render/vulkan: require support for linear filter for YCbCr
      render/vulkan: add more YCbCr formats
      render/vulkan: de-dup pipeline layout initialization
      render/egl: check for EGL_EXT_device_query in get_egl_device_from_drm_fd()
      render/vulkan: drop unused vulkan_change_layout_queue()
      render/vulkan: drop unused vulkan_has_extension()
      render/vulkan: document TEXTURE_TRANSFORM_* in shader
      output: use pending render format if any
      render/vulkan: add 10, 12, and 16-bit YCbCr formats
      render/vulkan: implement render pass API
      output: add wlr_output_begin_render_pass()
      backend/drm: use new rendering API
      examples: convert to new rendering API
      output/cursor: use new rendering API
      backend/drm: move forward decl up for drmModeModeInfo
      render/vulkan: handle vulkan_record_stage_cb() failures
      backend/drm: introduce wlr_drm_mode_get_info()
      render/vulkan: improve error handling in render_pass_submit()
      render/vulkan: improve error handling in vulkan_begin_render_pass()
      cursor: ignore wlr_cursor_set_surface() with same surface
      cursor: unset wlr_output_cursor.texture on surface destroy
      cursor: fix wl_pointer.set_cursor hotspot updates
      output/cursor: fix scale and transform
      backend/wayland: add scaling support for output layers
      backend/wayland: add support for cropping output layers
      examples/multi-pointer: drop
      presentation-time: constify wlr_presentation_feedback_send_presented()
      render/vulkan: rename tex_features to shm_tex_features
      render/vulkan: split off YCbCr texture features
      render/vulkan: de-duplicate texture VkImageView init
      render/vulkan: require format info for shm
      render/vulkan: fix bound pipeline check for output_pipe
      render/vulkan: fix blend subpass matrix
      render/vulkan: reset scissor before post-blend subpass
      gamma-control-v1: introduce set_gamma event
      gamma-control-v1: add wlr_gamma_control_manager_v1_get_control()
      output: add wlr_output_state_set_gamma_lut()
      gamma-control-v1: add wlr_gamma_control_v1_apply()
      gamma-control-v1: add wlr_gamma_control_v1_send_failed_and_destroy()
      gamma-control-v1: stop applying gamma LUTs implicitly
      render/vulkan: rename tex_usage to shm_tex_usage
      cursor: only reset the cursor when the surface changes
      backend/drm: clip FB damage
      examples/output-layers: fix layers not included in commit
      output: add wlr_output_state_set_layers()
      backend/libinput: ignore multiple events for same pointer button
      backend/libinput: use struct initializers for events
      examples: drop unnecessary include_directories
      build: drop proto_inc
      cursor: add wlr_cursor_set_xcursor()
      cursor: add wlr_cursor_unset_image()
      allocator: only use DRM auth if we are master
      output: attach buffer to state in output_ensure_buffer()
      output: stop using wlr_output.back_buffer in output_ensure_buffer()
      seat: fix keyboard/pointer/touch resource destroy
      output/swapchain: fix error return value types
      cursor: add support for animated XCursor
      xwayland: unset wlr_xwayland.server on destroy
      backend/drm: fix libliftoff_plane double-free
      input-method-v2: add popup_surface_from_resource()
      compositor: replace role_data with role_resource
      compositor: listen to role_resource destroy signal
      output: add wlr_output_state_init()
      backend/drm: remove duplicate needs_frame() in set_cursor()
      backend/wayland: unmap when output is disabled
      backend/x11: unmap when output is disabled
      backend/headless: only schedule a new frame if buffer was submitted
      backend/headless: add support for disabled outputs
      tinywl: enable new outputs
      examples: enable new outputs
      backend/wayland: mark new outputs as disabled
      backend/x11: leave new outputs disabled by default
      backend/headless: leave new outputs disabled by default
      contributing: add instructions for forking
      output-layer: add wlr_output_layer_state.damage
      backend/wayland: handle output layer damage
      backend/drm: handle output layer damage
      cursor: store wlr_cursor inline in wlr_cursor_state
      cursor: use wlr_cursor_unset_image() in wlr_cursor_set_surface()
      cursor: track surface globally, instead of per-output
      cursor: keep track of XCursor manager and name
      cursor: add cursor_update_outputs()
      cursor: set image for new outputs
      examples/pointer: use wlr_cursor_set_xcursor()
      cursor: stop using set_image() in wlr_cursor_unset_image()
      cursor: add wlr_cursor_set_buffer()
      xcursor-manager: drop wlr_xcursor_manager_set_cursor_image()
      cursor: remove wlr_cursor_set_image()
      cursor: remove usage of wlr_output_cursor_set_image()
      output: drop wlr_output_cursor_set_image()
      license: add copyright line for all contributors
      Use struct initializers instead of memset()
      xwayland: document associate/dissociate events
      xwayland: drop struct wlr_xwayland_move_event
      xwayland: document event data
      xwayland: use initializer for struct wlr_xwayland_resize_event
      xwayland: pass NULL as event data
      render/gles2: drop unnecessary cast
      Use wl_container_of() instead of casts
      render: constify struct wlr_buffer_pass_options
      render: document wlr_buffer_pass_options.timer
      render/gles2: wrap timer setup in push_gles2_debug()
      scene: rename output_present event to output_sample
      scene: add wlr_scene_output_sample_event
      presentation-time: add separate helper for zero-copy
      backend/drm: stop checking for wlr_client_buffer
      cursor, output: apply viewport to cursor
      cursor-shape-v1: new protocol implementation
      backend/drm: restore custom modes
      xwayland: avoid calling xwm_get_atom_name() when debug logs are off
      xwayland: drop wlr_xwayland_surface.events.set_pid
      Avoid using memcpy() to copy structs
      backend/wayland: take existing wl_display in wlr_wl_backend_create()
      backend/wayland: tag wl_surface
      backend/wayland: add wlr_wl_output_create_from_surface()
      examples/embedded: new example
      render: split render pass API into separate header
      backend/wayland: wait for xdg_surface.configure explicitly
      backend/headless: fix broken output frame events
      buffer: make wlr_client_buffer functions private
      compositor: drop wlr_surface_destroy_role_object()
      render: only open DRM render node if necessary
      output: trigger frame/present events on all commits on enabled output
      render/pass: ensure rect has positive size
      backend/drm: drop no-op shortcut
      tinywl: set minimum wlroots version in Makefile
      render/vulkan: de-duplicate VkImageUsageFlags
      backend/drm: restore pending page-flip check when tearing
      contributing: add safety section
      xdg-shell: document wlr_xdg_surface's initialized & initial_commit
      render/drm_format_set: use published kernel doc URL
      xwayland: batch property requests when handling new window
      xwayland: batch client ID request with other property requests
      render: log error when requested renderer is compile-time disabled
      render/allocator: log message when GBM is disabled
      Add GitLab issue template
      security-context-v1: new protocol implementation
      security-context-v1: add commit event
      docs: add architecture document
      xwayland/server: add ready flag
      xwayland: add wlr_xwayland_create_with_server()
      build: rename libdrm partial dep to be more explicit
      Revert "backend/drm: Automatic non-blocking commits"
      examples: split clients in separate repository
      render/vulkan: undo alpha premult before sRGB encoding/decoding
      examples: drop dead client code
      util/token: rename TOKEN_STRLEN to TOKEN_SIZE
      util/token: add docs
      backend: drop wlr_backend_get_presentation_clock()
      cursor: log missing XCursor
      xcursor: add fallbacks for legacy names
      ci: halt on UBSan error in smoke test
      xdg-shell: add wlr_xdg_{toplevel,popup}_try_from_wlr_surface()
      tinywl: fix crash when previously focused surface is not a toplevel
      tinywl: stop using the word "view" to refer to toplevels
      backend/drm: ensure plane surfaces are cleaned up on shutdown
      backend/drm: leave CRTCs on when shutting down
      backend/drm: introduce page-flip tracking struct
      backend/drm: fix pending page-flip check
      backend/drm: add wlr_drm_connector_state.nonblock
      backend/drm: drop unnecessary flags in legacy interface
      linux-dmabuf-v1: skip import check on split render/display SoCs
      build: bump version to 0.17.0

Simon Zeni (9):
      render/egl: fix uninitialized pointers in init_dmabuf_formats
      render/vulkan: remove hardcoded validation layers
      types/wlr_seat: finish keyboard_state during wlr_seat_destroy
      render/drm_format_set: fill dst in wlr_drm_format_set_copy
      Revert "render/egl: skip incompatible EGL devices"
      types/wlr_drm_lease_v1: downgrade DRM backend error message to debug
      types/wlr_tearing_control_v1: use safe list iteration on destroy
      drop KDE idle protocol support
      render/vulkan: remove unused queue_props in renderer

Tobias Predel (2):
      wlr_drm_format_set_copy: Do not allocate heap
      backend_destroy: Similiar logic like DRM backend

Vasyl Vavrychuk (1):
      fullscreen-shell: add release request handler

Väinö Mäkelä (13):
      seat: Allow binding to inert seats
      data-device: Handle inert seats
      data-control: Handle inert seats
      tablet: Handle inert seats
      wlr_idle: Handle inert seats
      input-method: Handle inert seats
      keyboard-shortcuts-inhibit: Handle inert seats
      primary-selection: Handle inert seats
      text-input: Handle inert seats
      xdg-popup: Handle inert seats
      virtual-pointer: Handle inert seats
      virtual-keyboard: Handle inert seats
      wlr-output-management: Send custom modes to clients

bi4k8 (2):
      wlr_seat: clear `drag->seat_client` when destroyed
      cursor: compare to scaled coords

eri (4):
      buffer: convert to try_from References: wlroots/wlroots#884
      drm: convert to try_from References: wlroots/wlroots#884
      linux_dmabuf_v1: convert to try_from References: wlroots/wlroots#884
      render/vulkan: use VK_KHR_global_priority References: #3386

fakechen (1):
      egl: remove eglQueryWaylandBufferWL define

llyyr (1):
      render/vulkan: use correct source offset in read_pixels

mfk530 (1):
      xwayland: fix user_event_handler

novenary (1):
      xwayland: allow compositor to set withdrawn state

ptrcnull (1):
      backend/x11: prevent segfault on empty DRI3 response

q234rty (1):
      render/vulkan: use renamed glslang binary by default

rewine (2):
      wlr_idle_inhibit_manager_v1: add comments for signal parameters
      wlr_output: add comments for signal parameters

sunzhguy (2):
      wlr_cursor: update cursor when output enable and transform changed
      backend/drm: free fb later

vaxerski (2):
      staging/tearing-control: Add protocol support
      backend/drm: Add async page flip support to legacy

xiliuya (1):
      keyboard: only update LEDs when changed

zccrs (2):
      render/vulkan: add wlr_vk_texture_has_alpha
      backend/wayland: fix undefined reference to wlr_wl_input_device_get_seat

zhoulei (1):
      backend/drm: fix di_info memory leak

Changes for packagers

  • backend/drm: require hwdata pkg-config file (!3993)
  • backend/drm: use libdisplay-info (!3994): libdisplay-info is a new dependency required for the DRM backend.

Breaking changes for compositors

These changes can affect most compositors.

  • Constify Pixman region APIs (!3800): wlr_region_from_resource and wlr_output_event_damage.damage now use const for the Pixman region.
  • layer-shell-v1: specify version in constructor (!3856): wlr_layer_shell_v1_create() takes a new version parameter. To retain existing behavior, pass 4.
  • compositor: drop wlr_surface.{sx,sy} (!3861): wlr_surface.{sx,sy} have been dropped, compositors should use wlr_surface.current.{dx,dy} in their commit handler instead.
  • output: introduce request_state event (!2693): backends no longer change the output mode behind the compositor's back. To retain the previous behavior, compositors can listen to the request_state event and call wlr_output_commit_state.
  • Nuke deprecated include/wlr/types/wlr_surface.h (!3712): the deprecated <wlr/types/wlr_surface.h> header has been dropped, use <wlr/types/wlr_compositor.h> instead.
  • backend: return wlr_session in wlr_backend_autocreate() call (!3814): wlr_backend_autocreate() now takes a new argument to return the wlr_session, wlr_backend_get_session() and wlr_backend_impl.get_session have been removed.
  • output: drop wlr_output_damage_whole() (!3851)
  • output: drop enable/mode events (!3911): compositors can listen to the "commit"
    event and check for WLR_OUTPUT_STATE_ENABLED/WLR_OUTPUT_STATE_MODE.
  • output-layout: improve API (!3627, !4318):
    • wlr_output_layout_add{,_auto}() now return a struct wlr_output_layout_output *.
    • wlr_output_layout_move() is removed, use wlr_output_layout_add() instead.
  • tablet-tool: revert bitfield in enum wlr_tablet_tool_tip_state (!3958)
  • seat/keyboard: constify and simplify (!3946): Several wlr_keyboard functions now take constant pointers to the keycodes and modifiers.
  • xdg-shell: reset added flag on unmap (!3986), xdg-surface: fix init state flow (!4335):
    • wlr_xdg_toplevel.added has been removed.
    • wlr_xdg_popup.committed has been renamed to sent_initial_configure.
  • xwayland/xwm: introduce wlr_xwayland_surface_try_from_wlr_surface() (!3923): wlr_surface_is_xwayland_surface() has been replaced with wlr_xwayland_surface_try_from_wlr_surface() which returns NULL if the surface isn't paired with a X11 window
  • Convert *_from_wlr_surface() functions to try_from pattern (!3991): wlr_surface_is_*() and *_from_wlr_surface() functions have been replaced with wlr_*_try_from_wlr_surface() functions which return NULL if the surface doesn't have the expected role
  • wlr_scene: Rename wlr_scene_surface_from_buffer (!4000): wlr_scene_surface_from_buffer() has been renamed to wlr_scene_surface_try_from_buffer()
  • linux-dmabuf-v1: rework feedback API and add helpers (!3933)
  • output: add wlr_output_is_direct_scanout_allowed() (!4067): compositors now need to check wlr_output_is_direct_scanout_allowed() before direct scan-out
  • output-damage: drop (!4068): compositors can migrate to wlr_damage_ring
  • compositor: add wlr_surface_configure_buffer_{scale,transform} (!3696): compositors now need to pass the interface version to wlr_compositor_create() (to retain current behavior, use version 5).
  • drm_format_set: Cleanups/changes (!4101): the dst argument of drm_format_set_{union,intersect}() must be zeroed or initialized
  • Rework wlr_drm_format (!4104): wlr_drm_format.modifiers is not longer a flexible array member
  • compositor: unify map logic (!4043): Map/unmap signals and mapped flags have been removed from surface role structures. Use the newly added wlr_surface.events.{map,unmap} and wlr_surface.mapped instead.
  • compositor: remove wlr_surface_role.precommit (!4161)
  • gamma-control-v1: allow compositors to apply gamma LUTs (!4046): gamma control will no longer implicity mutate output pending state. Compositors now need to listen to wlr_gamma_control_manager_v1.events.set_gamma and apply the new gamma LUTs via wlr_gamma_control_v1_apply() next time they commit the output.
  • Surface role rework (!4181, !4223, !4230):
    • wlr_surface.role_data has been replaced with wlr_surface.role_resource, which must now be set separately via wlr_surface_set_role_object().
    • Surface roles without a role object must set wlr_surface_role.no_object to true.
  • output: add wlr_output_state_init() (!4227): wlr_output_state_init must be called prior to using a wlr_output_state.
  • cursor: replace wlr_cursor_set_image() with wlr_cursor_set_buffer() (!4232):
    • wlr_cursor_set_image() has been replaced with wlr_cursor_set_buffer()
    • wlr_xcursor_manager_set_cursor_image() has been removed. Compositors should instead use wlr_cursor_set_xcursor()
  • output: drop wlr_output_cursor_set_image() (!4250): wlr_output_cursor_set_buffer() can be used instead.
  • xwayland: doc improvements and misc cleanups (!4258):
    • struct wlr_xwayland_move_event is removed.
    • struct wlr_xwayland_surface events which used to have the surface itself as data now have NULL.
  • scene: rename output_present event to output_sample (!4270): The event wlr_scene_buffer.event.output_present has been renamed to output_sample.
  • presentation-time: add separate helper for zero-copy (!4081): wlr_scene_buffer.event.output_sample has been changed to pass a struct wlr_scene_output_sample_event
  • backend/{wayland,x11,headless}: leave new outputs disabled by default (!4236): the compositor has to enable new outputs manually now.
  • xwayland: drop wlr_xwayland_surface.events.set_pid (!4306): The pid can be read when xsurface.events.associate event is called instead. The PID of an x11 window cannot change after this point.
  • xdg-decoration: store an xdg_toplevel instead of xdg_surface (!4316)
  • buffer: make wlr_client_buffer functions private (!4322): wlr_client_buffer_create() and wlr_client_buffer_apply_damage() are not supposed to be called by compositors.
  • xdg-shell: rework roles (!4288): wlr_xdg_surface.role semantics now match wlr_surface.role's: the field is only set once and never reset. Compositors might need to additionally check whether wlr_xdg_surface.{toplevel,popup} is not NULL where applicable.
  • compositor: drop wlr_surface_destroy_role_object() (!4324)
  • scene_output_layout: make output adding explicit (!4318), scene_output_layout: Don't destroy output when output layout is destroyed (!4358): Scene outputs aren't created or destroyed automatically anymore, compositors now need to manually call wlr_scene_output_create() and then wlr_scene_output_layout_add_output() when using the scene output layout helper.
  • drop KDE idle protocol support (!3778): this KDE protocol has been superseded by the standard idle-notify-v1 protocol.
  • seat: remove wlr_seat_validate_grab_serial() (!4273): this function was a placeholder.
  • output_event_commit: Replace committed and buffer with actual state struct (!4331): wlr_output_event_commit.{comitted,buffer} is removed. Compositors should instead get this state from the wlr_output_state struct.
  • Convert *_buffer_from_resource() functions to try_from (!4400)
  • xdg-toplevel: don't send maximized if tiled is requested but not supported (!4409): wlroots doesn't send xdg_toplevel.state.maximized if a tiled state was requested but the xdg_toplevel's version is too low anymore. To retain previous behavior, check the version of wlr_xdg_toplevel.resource and send xdg_toplevel.state.maximized manually if required.
  • backend: drop wlr_backend_get_presentation_clock() (!4411): all presentation timestamps are now guaranteed to be CLOCK_MONOTONIC.
  • wlr_scene: Amend scene_buffer.point_accepts_input to take coordinate pointers (!4131)

Breaking changes for custom backends and renderers

These changes are unlikely to affect compositors that don't have a custom
backend or renderer.

  • render: make wlr_renderer_begin return a bool (!3424) renderers are now able to return false in wlr_renderer_begin, this is useful in case of GPU reset.
  • linux-dmabuf-v1: remove dependency on wlr_renderer (!3903) compositors with custom renderers can call wlr_linux_dmabuf_v1_create_with_renderer to create the linux-dmabuf-unstable-v1 global with their renderer.
  • output: Introduce wlr_output_state to wlr_output_init (!4238): wlr_output_update_{custom,}_mode and wlr_output_update_enabled are removed. Backends that need to change state during runtime should use wlr_output_send_request_state and should send appropriate initialization state to wlr_output_init using wlr_output_state at init.

Don't miss a new wlroots release

NewReleases is sending notifications on new releases.