Skip to content
wlroots 0.18.0

Alexander Orzechowski (54):
      output: Drop transform matrix
      render/gles2: Don't track has_alpha in pixel_format
      renderer: Drop wlr_renderer_begin
      output: Drop wlr_output_attach_render
      output: Drop back_buffer
      render: Drop rendering_with_buffer
      render/gles2: Lazily create buffer fbo
      renderer/gles2: Bail rendering to external buffers when binding them
      render/gles2: Destroy textures first
      render/gles2: Don't double import dmabuf
      render/gles2: Don't track image in texture
      render/gles2: Don't attach texture as buffer addon
      render/gles2: Inline texture invalidation
      wlr_texture: Introduce wlr_texture_read_pixels
      wlr_texture: Introduce wlr_texture_read_pixels_options helpers
      render/pixman: Implement texture_read_pixels
      render/gles2: Implement texture_read_pixels
      render/vulkan: Implement texture_read_pixels
      wlr_texture: Introduce wlr_texture_preferred_read_format
      render: Implement texture_preferred_read_format
      backend/x11: Use wlr_texture_read_pixels
      screencopy_v1: Use new read pixels API
      render: Nuke old read pixels API
      renderer: Drop buffer binding
      swapchain: Add wlr_swapchain_has_buffer
      wlr_scene: Track output damage separately
      wlr_scene: Use wlr_damage_ring_rotate_buffer()
      wlr_scene: Don't damage whole damage ring when exiting direct scanout
      wlr_scene: Apply output damage once
      wlr_scene: fix transformed outputs backend damage clearing
      wlr_damage_ring: Fix inverted conditional
      output: Drop pending state
      wlr_damage_ring: Replace wlr_damage_ring_rotate_buffer with original list impl
      backend/drm: Init connector after we try to allocate a crtc for it
      backend/drm: Remove dead code
      backend/drm: Ensure a primary fb is available when configuring an output
      wlr_scene: Call surface enter scale events on surface create
      wlr_scene: Assert that buffer returned from swapchain is the right size
      wlr_scene: Decide when to commit output damage with buffers in damage ring
      wlr_scene: Add support for custom swapchains
      wlr_scene: Fix crash when committing NULL buffer
      wlr_scene: Track damage of null textures
      screencopy: Remove dead code
      screencopy: Add some logging
      wlr_scene: Fix WLR_SCENE_DEBUG_DAMAGE_HIGHLIGHT output damage
      wlr_scene: Schedule new frame for WLR_SCENE_DEBUG_DAMAGE_HIGHLIGHT in output commit handler
      wlr_scene: Set `wlr_damage_ring_set_bounds` earlier
      wlr_scene: Add WLR_SCENE_HIGHLIGHT_TRANSPARENT_REGION env
      docs: Add notes about WLR_SCENE_DISABLE_VISIBILITY effectively disabling direct scanout.
      wlr_scene: send preferred buffer transform
      wlr_scene: Drop map/unmap listeners from xdg_shell
      wlr_scene: Drop map/unmap listeners from drag_icon
      wlr_scene: Drop map/unmap listeners from layer_shell_v1
      wlr_scene: Don't disable scene nodes at creation time

Andri Yngvason (1):
      Create & implement transient seat protocol

Austin Shafer (2):
      allocator: remove backend parameter in allocator_autocreate_with_drm_fd
      linux_dmabuf_v1: allow callbacks for checking dmabuf import

Biswapriyo Nath (1):
      render/vulkan: Fix clang compiler error in 32 bit ARM Android

Chloé Vulquin (1):
      xcursor: catch theme inheritance loops

Consolatis (2):
      scene: do not reset scene_buffer state on buffer release
      xwayland: remove saved_{width,height}

David Turner (6):
      render/pixman: fix flipped transforms
      render/pixman: Fix source crop
      render/pixman: Improve transform performance
      render/pixman: half-pixel shift to match GPUs
      render/pixman: Remove half-pixel shift
      render/pixman: Fix non-uniform scale with rotation

Félix Poisot (1):
      render/vulkan: correct sRBG gamma expansion in shader

Grigory Kirillov (1):
      xwayland: add support for _NET_WM_WINDOW_TYPE_DESKTOP atom

Guido Günther (2):
      input-method: Simplify resetting of input state
      gles2: Avoid crash when glGetInteger64vEXT is missing

He Yong (1):
      tinywl: destroy wlr_renderer, wlr_allocator and wlr_cursor

Ian Forbes (1):
      drm/backend: add support for cursor hotspots

Ilia Bozhinov (2):
      seat: add serials to touch up events
      xwayland: add a size-safe wrapper for xcb_send_event

Isaac Freund (14):
      keyboard: fix type of wlr_keyboard_modifiers.group
      input-device: unconfuse tablet naming
      wlr_tablet_v2: fix destroy listener name
      mailmap: map Isaac's old email to the new one
      cursor-shape-v1: expose tablet tool in event
      tablet_v2: destroy tablet seats on manager destroy
      wlr_shm: make wl_global public
      idle-notify: make wl_global public
      single-pixel-buffer: make wl_global public
      security-context: constify lookup_client()
      scene: constify subsurface_tree_set_clip()
      touch: make cancel functions take a wlr_seat_client
      scene: ensure layer surface usable area >0
      wlr_surface: update get_root_surface() docs

JiDe Zhang (1):
      output: reset hardware_cursor on failure

John Lindgren (4):
      xwayland: add map_request signal
      util: fix non-linear behavior of wlr_box_closest_point()
      vulkan: perform sRGB-to-linear conversion correctly for premultiplied values
      util: let wlr_box_closest_point() be within 1/65536 of right/bottom edge

Kenny Levinsen (22):
      backend/drm: Free current_modeinfo on error
      backend/drm: Remove erroneous free
      drm-lease-v1: Free the wlr_drm_lease_v1 on error
      xwayland/xwm: Avoid zero-size allocaiton
      xwayland/xwm: Allocate to the right variable
      render/drm_format_set: Clean up on union failure
      render/vulkan: Avoid double-free on calloc error
      gamma-control-v1: Remove dead variable assignment
      xwayland/xwm: Initialize client_id_cookie
      wlr_gamma_control: Store gamma size when creating control
      backend/drm: Skip multi-gpu outputs in backend tests
      backend/drm: Free drm device name on error
      wlr_scene: Skip direct scanout on color transform
      editorconfig: Unset maximum line length for .git
      wlr_output: Add adaptive_sync_supported
      backend/drm: Use cached vrr support flag
      render/vulkan: Recycle memory maps for stage spans
      render/vulkan: Unmap span before freeing memory
      render/vulkan: Use new span map handling for 3dlut
      render/vulkan: Unref color transform on pass submit
      render/vulkan: Fix 3dlut stage span map offset
      render/vulkan: vkMapMemory stage spans up front

Kirill Primak (63):
      input-inhibitor: drop
      xdg-{shell,decoration}: improve events
      layer-shell: emit new_surface event at the proper time
      subcompositor: don't map unadded subsurfaces
      subcompositor: emit new_subsurface immediately
      output: fix display destroy listener double removal
      compositor: deprecate wlr/types/wlr_region.h
      Revert "subcompositor: emit new_subsurface immediately"
      backend/x11: check buffer format in output_test()
      backend/x11: don't send ConfigureRequest with the same size
      xwm: don't do anything except mapping on MapRequest
      tinywl: don't send configures to uninitialized xdg_surfaces
      tinywl: check initialized instead of initial_commit
      tinywl: depend on the server xdg-shell header
      render/vulkan: fix possible double free
      render/drm_format_set: fix possible leak on realloc error
      backend/x11: handle touchpoint allocation failure
      xwayland: close pipe fds on set_cloexec() error
      security-context-v1: fix possible leaks on wl_client_create() and state copying errors
      single-pixel-buffer: send wl_buffer.release
      layer-shell: forbid set_size with values ≥INT32_MAX
      xwayland/xwm: associate even on xcb_get_property() failure
      compositor: introduce wlr_surface_reject_pending()
      compositor: don't get buffer from pending buffer resource too early
      backend/drm: use wlr_drm_backend.name for fd cloning
      cursor: fix and simplify region mapping
      compositor: drop wlr_surface.external_damage
      compositor: don't handle size or viewport src change in surface_update_damage()
      xdg-shell: drop automatic surface configuration
      pointer-constraints: handle inert pointer resources correctly
      ext-foreign-toplevel-list-v1: improve/fix update_state()
      backend/drm: set adaptive_sync_status again
      viewporter: fix "has buffer" check
      viewporter: fix outdated docs
      Avoid using wayland-{client,server}.h
      alpha-modifier-v1: add a missing NULL check in wlr_alpha_modifier_v1_get_surface_state()
      scene: fix double scaling of opaque region for blend mode optimization
      xdg-toplevel: allow edge_none for resizing
      output: extract hardware cursor disabling logic
      output: disable hardware cursor when falling back to software
      render/vulkan: fix texture clip region leak
      render/vulkan: free pipeline layouts on destroy
      render/vulkan: free render format setups on destroy
      render/vulkan: don't free a descriptor set from an already destroyed lut3d dummy pool
      backend/x11: send correct keyboard layout
      fullscreen-shell: deprecate
      backend/drm: add libliftoff log handler
      backend/drm: avoid "maybe uninitialized" warning
      backend/wayland: store output xdg_toplevel title
      backend/wayland: don't request a state too early
      backend/wayland: don't ack a configure event too early
      backend/wayland: commit null buffer only on unmap
      backend/wayland: improve/fix xdg_toplevel (re-)initialization
      backend/wayland: don't ack outdated configures
      xdg-popup: don't emit parent's new_popup signal too early
      xdg-popup: validate positioner on reposition request
      input-method: unmap popup surfaces on deactivate
      backend/wayland: dispatch remote display when waiting for a configure event
      backend/wayland: destroy ignored tablet proxies
      backend/drm: store drm prop lists as structs
      backend/wayland: introduce wlr_wl_output_set_app_id()
      Fix __VA_OPT__ macro invocations
      meson: bump wayland dep version to 1.23

Leo Li (2):
      render/pixel-format: Move has_alpha into it's own array
      render/gles2: Fixup dropping has_alpha from pixel_format

Leonardo Hernández Hernández (4):
      add an option to enable/disable libliftoff
      tinywl: don't try to remove xdg-shell-protocol.c
      tinywl: split compilation into two steps
      tinywl: allow specify pkg-config binary

Manuel Stoeckl (13):
      xdg-toplevel: check that title provided actually is UTF-8
      render/vulkan: track and use _UNORM variants of _SRGB formats
      render/vulkan: extract shm texture format query into function
      render/vulkan: detect which _UNORM formats support _SRGB views
      render/vulkan: create VkImage with option for _SRGB view, if possible
      render/vulkan: constify vulkan_format_props_find_modifier
      render/vulkan: use _SRGB image view when possible
      render/vulkan: add dummy 3d lookup table to output shader
      render/vulkan: add lut3d output shader option
      render/vulkan: create plain framebuffers on demand
      render/vulkan: add support for output color transforms
      wlr_scene: add color transform argument for rendering
      renderer: add field to indicate color transform support

MaxVerevkin (1):
      fix outdated comment in wlr_output.h

Paul Cercueil (1):
      Add more POSIX compliance macros to fix uClibc support

Roman Gilg (1):
      render/pixman: add wlr_pixman_renderer_get_buffer_image()

Sarunas Valaskevicius (1):
      Fix disappearing menus in QT apps

Sergei Trofimovich (1):
      backend: fix build against upcoming `gcc-14` (`-Werror=calloc-transposed-args`)

Simon Ser (213):
      tinywl: fix wlroots dependency constraint in Makefile
      build: bump version to 0.18.0-dev
      render: drop legacy render pass
      output/cursor: drop legacy rendering API
      render/gles2: drop legacy rendering API
      render/pixman: drop legacy rendering API
      render/vulkan: drop legacy rendering API
      render: drop legacy rendering API
      util/transform: move over wl_output_transform helpers
      util/transform: add wlr_output_transform_coords()
      backend/session: take wl_event_loop instead of wl_display
      output-layout: take wl_display in constructor
      output: take wl_display in wlr_output_create_global()
      output: setup display destroy listener in wlr_output_create_global()
      output: take wl_event_loop in wlr_output_init()
      Cleanup wlr_matrix.h includes
      matrix: deprecate
      viewporter: rename state var in viewport_handle_surface_commit()
      viewporter: listen to client_commit
      viewporter: fix src buffer bounds check
      render/vulkan: drop current_command_buffer
      render/egl: fallback to GBM FD if EGLDevice is not available
      backend/drm: use DRM_IOCTL_MODE_CLOSEFB instead of RMFB
      render/gles2: check external-only flag in get_or_create_buffer()
      damage_ring: add wlr_damage_ring_rotate_buffer()
      backend/drm: split wlr_drm_fb related functions into separate file
      backend/drm: move drm_plane_finish_surface() to drm.c
      backend/drm: remove wlr_drm_renderer.backend
      render/gles2: reword wlr_gles2_texture comments
      output: drop stale references to wlr_output_attach_render()
      render/gles2: document EGL context gotchas
      render/gles2: save/restore context when creating/submitting a render pass
      output: replace wlr_render_timer arg with wlr_buffer_pass_options
      render: disable linux-dmabuf without DRM FD
      cursor: send surface scale events
      compositor: drop surface precommit event
      render/gles2: add wlr_gles2_renderer_get_buffer_fbo()
      build: automatically compute soversion
      ci: drop stale dependencies
      backend/drm: add wlr_drm_backend_get_parent()
      linux-dmabuf-v1: ignore scanout output for secondary DRM backends
      backend/drm: return secondary backend DRM FD
      cursor: fix initial cursor position for new outputs
      cursor: drop unnecessary commented code
      xcursor: fix duplicate cursor check check in load_callback()
      input-method-v2: drop unnecessary variable and cast
      output-layout: fix missing global for outputs with a custom mode
      compositor: reset wlr_surface.current.committed on commit
      pointer-constraints-v1: add cursor_hint.enabled
      pointer-constraints-v1: reset committed on commit
      compositor: adjust surface_state_move() comment
      compositor: remove unnecessary wlr_surface.has_buffer
      compositor: fix wlr_surface_has_buffer() doc comment
      compositor: add wlr_surface_state_has_buffer()
      compositor: add wlr_surface_synced
      compositor: add wlr_surface_role.client_commit
      xdg-shell: use wlr_surface_synced for wlr_xdg_surface
      xdg-shell: use wlr_surface_synced for toplevel
      xdg-shell: use wlr_surface_synced for popups
      presentation-time: use wlr_surface_synced
      subcompositor: use wlr_surface_synced
      xdg-decoration: use wlr_surface_synced for toplevel
      layer-shell-v1: use wlr_surface_synced
      pointer-constraints-v1: use wlr_surface_synced
      content-type-v1: use wlr_surface_synced
      session-lock-v1: drop negative buffer size checks
      session-lock-v1: use wlr_surface_synced
      tearing-control-v1: synchronize state with surface
      presentation-time: drop wlr_presentation arg
      scene: drop wlr_scene_set_presentation()
      backend/drm: save current refresh rate
      region: add docs for wlr_region_scale_xy() and wlr_region_confine()
      wl_drm: add deprecation notice
      render: stop auto-creating wl_drm
      Fix bool return types
      xdg-shell: assert that configure events carry positive or zero sizes
      pointer: add support for axis relative direction
      seat/pointer: add support for axis_relative_direction event
      backend/libinput: populate pointer axis relative direction
      backend/wayland: populate pointer axis relative direction
      backend/multi: emit destroy signal before destroying child backends
      backend: make attempt_drm_backend() return the primary backend
      backend: destroy multi backend when primary backend is
      backend: stop calling wl_display_terminate()
      backend/headless: take wl_event_loop instead of wl_display
      backend/libinput: drop wl_display argument
      backend/wayland: take wl_event_loop instead of wl_display
      backend/x11: take wl_event_loop instead of wl_display
      backend/drm: drop wl_display argument
      backend/multi: take wl_event_loop instead of wl_display
      backend: take wl_event_loop instead of wl_display in wlr_backend_autocreate()
      scene: release shm buffers once uploaded
      backend/drm: add support for atomic tearing page-flips
      linux-dmabuf-v1: fix include guard name
      linux-dmabuf-v1: switch to stable
      linux-dmabuf-v1: bump to v5
      backend/session: add docs
      switch: add docs
      backend/drm: drop unnecessary _XOPEN_SOURCE
      backend/drm: fix fb_damage_clips_arr memory leak
      backend/drm: add drm_page_flip_create()
      backend/drm: drop wlr_drm_backend arg from create_mode_blob()
      backend/drm: add destroy_blob()
      backend/drm: use early return in handle_session_active()
      backend/drm: extract logic to build current connector state
      backend/drm: call get_drm_connector_props() when creating connector
      backend/drm: atomically reset state after VT switch
      backend/drm: move restore logic to drm.c
      backend/drm: fix typo in restore_drm_device() comment
      backend/drm: skip reset after VT switch if possible
      util/log: drop unnecessary _XOPEN_SOURCE
      Define _POSIX_C_SOURCE globally
      scene: ignore duplicate wlr_scene_output_layout_add_output() calls
      buffer: add single-pixel-buffer-v1 special case in buffer_is_opaque()
      backend/drm: fix broken link to KMS property docs
      backend/drm: don't destroy previous DRM master blobs
      render/egl: add save_context parameter to wlr_egl_make_current()
      render/egl: drop wlr_egl_save_context()
      render/egl: drop wlr_egl_is_current()
      backend/drm: use output_pending_enabled()
      output: use output_pending_enabled() in output_basic_test()
      backend/drm: fix primary FB check
      backend/drm: move primary FB check after pending buffer logic
      backend/drm: improve CRTC reallocation pretty printing
      backend/drm: use CRTC pointers instead of indices in realloc_crtcs()
      input-device: add doc comments
      pointer: drop enum wlr_axis_source
      pointer: use enum wl_pointer_button_state
      pointer: drop enum wlr_axis_relative_direction
      pointer: drop enum wlr_axis_orientation
      backend/libinput: use NULL to indicate missing device name
      tablet-v2: only send id event is vendor is set
      input-device: fix WLR_INPUT_DEVICE_TABLET_TOOL doc comment
      cursor: use switch for input device type
      backend/x11: add error logging to query_dri3_drm_fd()
      backend/drm: fix queued cursor FB overwritten with NULL
      backend/drm: clear pending cursor FB in drm_connector_set_cursor()
      backend/drm: add drm_fb_copy()
      backend/drm: track cursor FB in wlr_drm_connector_state
      tinywl: fix wlr_seat use-after-free on exit
      backend/drm: ensure CRTC is set up in drm_connector_state_init()
      cursor-shape-v1: handle inert tablet tool client
      tablet-tool: add usb_vendor_id and usb_product_id to wlr_tablet
      tablet-v2: use wlr_tablet.usb_{vendor,product}_id
      input-device: drop wlr_input_device.{vendor,product}
      backend/libinput: check bus type before setting tablet USB IDs
      scene: simplify scene_node_update() condition when setting buffer
      compositor: handle renderer destroy
      compositor: use compositor to get renderer
      compositor: add wlr_compositor_set_renderer()
      buffer: listen to renderer destroy in wlr_client_buffer
      output: listen to renderer destroy in wlr_output_cursor
      scene: add scene_buffer_set_texture()
      scene: listen to renderer destroy in wlr_scene_buffer
      backend/drm: add wlr_drm_connector_state.connector
      backend/drm: extract post-commit logic into functions
      backend/drm: drop VRR debug message
      backend/drm: track pending atomic state in wlr_drm_connector_state
      backend/drm: add infrastructure for device-wide commits
      backend/drm: rework struct wlr_drm_page_flip for multiple connectors
      backend: add wlr_backend_{test,commit}()
      backend/multi: implement wlr_backend_impl.{test,commit}
      output-management-v1: add wlr_output_configuration_v1_build_state()
      backend/drm: unify connector test and commit codepaths
      backend/drm: drop drm_device_state_init_single()
      backend/drm: move post-commit disable logic to drm_connector_apply_commit()
      backend/drm: add drm_connector_prepare()
      backend/drm: fix adaptive sync no-op changes
      backend/drm: implement wlr_backend_impl.{test,commit}
      output-swapchain-manager: new helper
      backend/libinput: drop outdated gesture cap logging
      backend/libinput: drop stray space
      examples: send xdg_toplevel configure events
      tablet-tool: document event data
      xwayland: add a few docs
      render: unify getter for texture formats
      render: drop wlr_renderer_get_dmabuf_texture_formats()
      renderer: replace get_render_buffer_caps() with struct field
      render/color: introduce wlr_color_transform
      backend/drm: handle errors when fetching DRM name/version
      render/color: split off lcms2 code
      ci: convert last remnant from "meson setup" migration
      alpha-modifier-v1: new protocol implementation
      scene/surface: add support for alpha-modifier-v1
      render/vulkan: don't use UNDEFINED layout for imported DMA-BUFs
      render/allocator: document struct wlr_allocator
      seat/keyboard: drop unnecessary check in handle_keyboard_keymap()
      build: override versioned name
      backend/drm: add support for libliftoff v0.5.0
      render/color: add fallback stub when LCMS2 is disabled
      ci: add debugoptimized GCC build
      render/drm_syncobj: introduce wlr_drm_syncobj_timeline
      render/drm_syncobj: add wlr_drm_syncobj_timeline_import()
      render/drm_syncobj: add helpers to wait for timeline points
      linux-drm-syncobj-v1: new protocol implementation
      backend/session: log when loading WLR_DRM_DEVICES
      backend/session: use "KMS" instead of "DRM" in log messages
      build: check eglext.h header version
      Switch to stable tablet-v2 protocol
      render/color: fix return value type
      backend/drm: fix return value type in create_drm_connector()
      backend/drm: fix swapped calloc() arguments in get_or_create_layer()
      Use standard __VA_OPT__ instead of GNU's ##__VA_ARGS__
      build: build with C23 if supported
      build: require libinput v1.19
      shm: add support for wl_shm version 2
      backend/wayland: use wl_shm.release if available
      render: init wl_shm version 2
      build: use auto_features=disabled for libdrm subproject
      backend/drm: add support for SIZE_HINTS property
      ci: use tinywl built by Meson
      scene: only skip bottom-most black rects with fractional scaling
      build: bump version to 0.18.0

Simon Zeni (4):
      types/output: emit destroy event before destroying global
      xcursor/wlr_xcursor: properly clean xcursor in case of realloc failure in load_callback
      backend/libinput: avoid potential NULL access in wlr_libinput_get_device_handle
      backend/x11: don't exit on dri3 DRM FD query failure

Vaxry (2):
      xwayland: add wlr_xwayland_get_xwm_connection
      types/text-input-v3: assert on invalid _leave() and _enter() calls

Violet Purcell (2):
      Version pkgconfig, headers, and library for parallel installation
      tinywl: update for versioned pkg-config file

columbarius (1):
      ext-foreign-toplevel-list-v1: new protocol implementation

groveer (2):
      wlr_pointer_gestures_v1: init destroy signal
      wlr_pointer_gestures_v1: emit destroy signal in destroy function

nerdopolis (1):
      backend/libinput: Fix call of handle_libinput_readable() when WLR_LIBINPUT_NO_DEVICES is set

novenary (2):
      xwm: avoid restacking managed surfaces above OR surfaces
      xwm: ensure stack list only contains mapped managed surfaces

pastel raschke (2):
      input-method-v2: free current strings on commit
      input-method-v2: validate commit serial