github swaywm/sway 1.10-rc1

pre-release11 hours ago

Sway 1.10-rc1 contains 228 changes from 43 contributors.

This pre-release depends on wlroots 0.18.0. See the wlroots release notes.

New features

  • All of the enhancements from wlroots 0.18.
  • Rewrite the renderer to leverage the wlroots scene-graph API, resulting in improved performance.
  • Add GPU reset recovery for improved robustness.
  • Add a command to use an ICC profile for an output.
  • Improved output configuration algorithm to light up more outputs when the GPU bandwidth is constrained. WLR_DRM_NO_MODIFIERS shouldn't be necessary anymore to workaround black screens on Intel.
  • Add support for IME popups used for CJK.
  • Add support for tearing-control-v1, to opt-in for tearing page-flips for gaming use-cases.
  • Add support for ext-transient-seat-v1, allowing remoting apps such as wayvnc to create separate temporary seats for input events.
  • Add support for ext-foreign-toplevel-list-v1, the new standard protocol to obtain information about other toplevels. This will eventually be used by taskbars, window switchers and per-toplevel screen capture.
  • Add support for xdg-shell v5 with popup repositioning and hiding maximize/minimize buttons in CSD.

Changes

  • dmenu_run is no longer a dependency of the default config file.
  • The default config file now contains keybindings with pactl for volume adjustment, brightnessctl for brightness adjustment and grim for screenshots.
  • The legacy wl_drm protocol is now disabled by default (superseded by the standard linux-dmabuf-v1 protocol). This causes breakage in xorg-xwayland < 24.1.0, libva < 2.22.0 and amdvlk < 2024.Q4.1, and can be re-enabled manually via -Dlegacy-wl-drm.
  • The xwayland built-time option has been removed: Xwayland support is now enabled at build-time if it was enabled for wlroots.
Full changelog
-k (2):
      Add descriptions for `stacking` and `tabbed` layouts
      man: Fix trailing spaces

33KK (1):
      Fix `bindsym --to-code` not respecting input configs

Access (1):
      text_input: Implement input-method popups

Adam Chovanec (1):
      readme: update Czech translation

Aidan Dang (1):
      Add `primary_selection` config option

Alan (1):
      Update grimshot.1.scd

Aleksei Bavshin (3):
      ipc: make `bar <bar_id> mode|hidden_state` behave as documented
      xdg-shell: use toplevel geometry to adjust the popup box
      xdg-activation: distinguish activation and urgency requests

Alex Maese (3):
      sway: Add non-desktop-output type
      sway: add non-desktop outputs to json when running `swaymsg -t get_outputs`
      swaymsg: show non-desktop property when pretty printing outputs

Alexander Browne (1):
      Minor update to focus_on_window_activation

Alexander Courtis (1):
      Apply new adaptive sync value from wlr-output-management

Alexander Gramiak (1):
      sway/input: don't pass possibly invalid modifiers pointer

Alexander Orzechowski (61):
      view: Fix null dereference
      container_floating_set_default_size: Store workspace size box on the stack
      workspace_create: Don't allow NULL name
      warp_to_constraint_cursor_hint: Handle NULL view
      swaybar: Set opaque region properly
      swaybar: Lift background clearing out of main rendering function
      Chase wlroots!4067
      xdg_shell: Fix crash if popup generates while toplevel is in the scratchpad
      render: pass rendering state together in a struct
      render: Don't pass matrix into render_texture
      render: Use wlr_render_pass
      Don't crash if there is no damage during render
      gamma_control_v1: Reset dirty flag
      render: Use wlroots scale filter
      swaybar: Implement wp_cursor_shape_v1
      swaynag: Implement wp_cursor_shape_v1
      Chase wlroots!4331
      Don't destroy output layout on exit
      output: Destroy when output layout is destroyed
      desktop: Rename layers to shell_layers
      view: init function should return a success bool
      scene_graph: Maintain `wlr_scene_node`s for the sway tree.
      scene_graph: Use built-in linux dmabuf feedback handling
      scene_graph: Introduce sway_scene_descriptor
      renderer: Render scene_graph
      scene_graph: Port seat drag icons
      scene_graph: Port seatop_move_tiling indicators
      scene_graph: Port ext_session_v1
      seat: Remove dead seatop_render function
      renderer: Remove in favor of scene_graph
      Introduce sway_text_node
      input: Query scene graph for relevant surface/node intersections
      scene_graph: Port layer_shell
      scene_graph: Port container server side decorations
      transaction: ready signals will return success bools
      scene_graph: Port xdg_shell
      scene_graph: Port xwayland
      xwayland: Cleanup geometry handling on commit
      scene_graph: Port view saved buffers
      Delete old damage tracking code
      container: Don't track outputs
      scene_graph: Arrange scene graph on transaction apply
      scene_graph: Port opacity and filter modes
      scene_graph: Implement toplevel clipping
      Fix SIGSEGV on surface destroy
      remove damage debug options
      scene_graph: port wlr_forgein_toplevel_management output enter/leave events
      layer_shell: Fix typo of return instead of continue
      Ensure get_text_width() returns a positive value
      layer_shell: Arrange popups even if exclusive zone doesn't change
      xdg_shell: Extract struct for popup descriptor
      layer_shell: Handle popups through popup descriptor
      Force bilinear scaling when scaling down
      sway_text_node: Allow 0 text width
      transaction: Reparent all container children when disabling for scratchpad
      container: Skip % char if it doesn't match a view property
      text_input: Check for allocation failure
      text_input: Move popup placement to own function
      transaction: Allow no popup descriptor in popup list
      text_input: Properly handle map/unmap events
      text_input: Inline input_popup_update into input_popup_set_focus

Alice Carroll (1):
      Support cursor capture in grimshot

Aljaz Gantar (2):
      fix type error when class_name none
      refactor icon_for_window function

Andri Yngvason (2):
      sway/commands/output: Add command for unplugging non-physical outputs
      Implement transient seat management

Ankit Pandey (3):
      commands/move: Warp cursor after moving workspace to another output
      root: Try to preserve relative positions of floating containers
      root: Set inactive focus when scratchpad is moved to new workspace

Anna (navi) Figueiredo Gomes (2):
      sway/config/output.c: fix null deref on output config
      sway/commands/move.c: arrange new workspace

Artturin (2):
      chase wlroots wlr_renderer_begin_buffer_pass change
      chase wlroots 'presentation-time: add separate helper for zero-copy '

AsciiWolf (2):
      Translate README to Czech
      Fix typo in Czech README translation

Ashraf (1):
      Translate README to Arabic

Baltazár Radics (5):
      ipc: make get_deco_rect check config->hide_lone_tab
      man: sway(5) move fixes
      container_get_siblings: handle NULL workspace
      Fix input command order (rotation_angle)
      ipc: add ability to subscribe to output event

Bart Pelle (1):
      docs: fix invalid release signing keys

Bartel Sielski (1):
      idle_inhibit: Fix tree view after changes in commit 152a559e

Bartłomiej Burdukiewicz (1):
      main: removed vc4 detection code.

Bill Doyle (1):
      Only defer seat attachment during initial startup

Bill Li (4):
      Updating criteria checking with PCRE2
      chase wlroots!4411
      Chase wlroots!4482
      ci: use package x11-servers/xwayland instead of x11-servers/xwayland-devel

Billli11 (1):
      Remove wlr_presentation in sway_server struct

Birger Schacht (1):
      Fix a couple of typos

Caduser2020 (1):
      Simplify swaybar/swaynag scaling code

Callum Andrew (1):
      criteria: allow matching for NULL string criteria

Carl Smedstad (6):
      Remove duplicate declarations
      Add missing includes & remove duplicates
      Make cmd_handler.command const
      Remove redundant return statements
      Replace math functions that promote float to double
      Use correct length for strncmp comparison

Cedric Sodhi (1):
      Added reference for event types to swaymsg manpage

Cezary Drożak (1):
      input/libinput: add scroll_button_lock method

Christian Llupo (1):
      README: Added Greek translation

Cole Mickens (1):
      meson.build: require wayland-protocols 1.24

Daniel De Graaf (9):
      Fix overly-wide mark textures
      Avoid format-truncation warning
      Shuffle variables to satisfy -Werror=restrict
      Implement ext-session-lock-v1
      Avoid inspecting a NULL view in seat_set_focus
      ext-session-lock: disable direct scan-out when locked
      Rework session lock keyboard focus handling
      Fix focus tracking when session lock is active
      Fix SIGSEGV on output destroy

Daniel Eklöf (2):
      sway: commands: exec: restore SIGPIPE before exec:ing
      sway: restore SIGPIPE handler before exec:ing swaybar

Daniel Hill (1):
      Fix map_to_output * turning off device

Daniel Kahn Gillmor (1):
      sway-ipc(7): Escape backslashes correctly in GET_CONFIG output

Daniel Otero (1):
      config: Fix swaybar pango_markup inconsistency

David Rosca (4):
      seatop_down: Change type of sx, sy to double in begin_seatop_down
      Add `output modeline` command
      xwayland: Clear wlr_xwayland_surface in handle_destroy
      container: Fix crash when view unmaps + maps quickly

David96 (1):
      commands/move: Fix crash when pos_y is omitted

Dominique Martinet (1):
      view_destroy: fix use-after-free with subsurface_destroy

Drew DeVault (1):
      config.in: change terminal emulator to foot

Dudemanguy (6):
      container: ignore borders in fullscreen windows
      xdg-decoration: let floating clients set borders
      view: update wlr_toplevel size on client resizes
      Revert "view: update wlr_toplevel size on client resizes"
      xdg_shell: update wlr_toplevel size on client resizes
      xdg_shell: don't update wlr_toplevel if the container has no size yet

Dylan Araps (1):
      Add meson options to enable/disable swaybar and swaynag

EBADBEEF (1):
      view: re-apply criteria when window gets unmapped

Elyes HAOUAS (2):
      desktop/layer_shell.c: Fix misspelled "exclusive"
      sway-input.5.scd: Fix spelling errors

Elyes Haouas (1):
      Fix old style function definitions

Elyesa (1):
      Add Turkish README

Emil Engberg (1):
      Add toggle for output adaptive_sync

Eric Engestrom (2):
      cmd_bind_or_unbind_switch: fix copy/paste typo error message
      sway: allow IPCs on proprietary drivers

Erik Reider (5):
      Added scroll_factor input variable to ipc output
      Init the damage_ring bounds on output creation
      Fix damage-ring bounds not being set when unplugging -> plugging in monitor
      Fix layer old damage not being offset by the monitor layout coords
      Add support for wlr-layer-shell ON_DEMAND keyboard interactivity

Eskil (1):
      Add Swedish README

Evgeniy Khramtsov (1):
      commands: Remove unused code after 1d3681f52135

Felix Pehla (1):
      commands/output/color_profile: allows use of relative path for ICC profile

Ferdinand Bachmann (2):
      man: document supported modifier names
      input: add Super as alternative for Mod4

Ferdinand Schober (4):
      allow pointer_constraints on layer_shell surfaces
      check for NULL
      use seat directly
      Use keyboard_state.focused_surface directly

Filip Szczepański (1):
      Fix crash in xdg_activation_v1.c

Florian Franzen (1):
      sway: add bindgesture command

Furkan Sahin (1):
      swaybar: Fix 100% cpu usage if dbus dies.

Greg Depoire--Ferrer (1):
      swaynag: move close_button up to fix SIGSEGV

Hodong (1):
      swaybar: remove the argument of StatusNotifierHostRegistered

Hongyi (1):
      Polish the language in README.zh-CN.md & sync with English one

Hugo Osvaldo Barrera (8):
      grimshot: Exit 1 on cancellation
      Use fixed titlebar heights
      Deduplicate code for rendering titlebar texts
      Avoid unecessary font metric calculations
      Drop hardcoded font metric values
      Avoid unecessary string copy
      Reject font values that are invalid for pango
      Reuse parsed PangoFontDescription

Issam E. Maghni (1):
      cairo: Replace <cairo/cairo.h> by <cairo.h>

István Donkó (1):
      Add Hungarian translation for the README

Ivan Fedotov (1):
      Add toggle logic inside DPMS handler

Jack Byrne (1):
      Change 'Danish' to 'Dansk' in README

James Edwards-Jones (1):
      swaynag: adds option to set wayland shell layer

James Knight (1):
      build: avoid git repository discovery when determining version

Jan Beich (1):
      readme: Stop recommending setuid bit for non-logind systems

Jari Ronkainen (1):
      Improve built-in touchscreen detection

Jason Nader (4):
      swaymsg: use INT_MAX max JSON depth when parsing IPC response
      swaymsg: be explicit about the json parser error
      swaymsg: fix misplaced return value
      refactor: use JSON_MAX_DEPTH everywhere

JingMatrix (1):
      Add null-safety check for virtual keyboard keymaps

Joan Bruguera (2):
      swaybar: Prioritize hotspot events to bar bindings
      swaybar: Make hotspots block bar release bindings

Joan Bruguera Micó (1):
      layer-shell: Restore interactive layer focus code

Joe Kappus (1):
      build: bump wlroots dependency to 0.17.0

Johan Sköld (1):
      i3 compat: Adding support for the `all` criteria

John Chadwick (1):
      Improve tablet tool button handling.

Jon Wallace (2):
      Use heading markdown to demarcate sections of commands Its a little tought to notice that the COMMANDS section is actually 3 sections. Use markdown to make this easier to see for the user.
      use subheadings instead

Jonas Große Sundrup (3):
      clarify the type of raw output
      change incorrectly documented output types
      cross-reference further documentation

Kenny Levinsen (55):
      ci: Install libseat
      meson: libseat is no longer optional
      Remove usage of surface->sx|sy
      desktop/render: Pass explicit clip box to render
      input: Move get_current_time_msec in from util
      ci: Test wlroots static linking
      readme: Align Danish translation with main README
      meson: check: false on run_command
      Print deprecation notice when running SUID
      Refuse to start when SUID is detected
      seat: Avoid sending redundant keymaps on reload
      seat: Set keyboard if seat keyboard is NULL
      render: Apply clip to rendered texture correctly
      render: Clear using wlr_output dimensions
      config/output: Split apply_output_config
      config/output: Introduce apply_output_configs
      output/config: Add apply_all_output_configs
      Use apply_all_output_configs to light up outputs
      desktop/output: Use apply_output_configs for output mgmt
      config/output: Remove apply_output_config
      output/config: Remove reset_outputs and co.
      config/output: Make merge_output_config static
      output/config: Remove unused test_output_config
      commands/output/toggle: Use free_output_config
      config/output: Refactor handling of tiered configs
      server: Use wlr_renderer_get_texture_formats
      desktop/output: Fix check if config should be stored
      config/output: Use all outputs for config merge
      config/output: Search for output config fallbacks
      config/output: Print output state during tests
      config/output: Skip VRR tests when not supported
      desktop/output: Debounce modesets
      common/pango: Disable glyph position rounding
      desktop/output: Stop repaint loop when not needed
      config/output: Do not set adaptive_sync if not supported
      config/output: Skip search if config has a mode
      desktop/transaction: Deactivate workspace on inactive outputs
      config/output: Add support for 6-bit render fmt
      config/output: Stringify render format when logging it
      desktop/output: Do not use commit listener to arrange
      tree/output: Rely on modeset arranging root
      (desktop|tree)/output: Do not use layout listener to arrange
      desktop/output: Avoid duplicate output manager update
      tree/output: Avoid duplicate input mapping configure
      tree/arrange: Remove redundant output geometry update
      tree/arrange; Skip arranging disabled outputs
      config/output: Support multiple matches in find_output_config
      config/output: Always start with default in find_output_config
      config/output: Accept a list of output_configs to use
      config/output: Rename to apply_stored_output_configs
      ext-session-lock: Do not use commit listener to arrange
      commands/gaps: Check config->reading instead
      desktop/output: Expose request_modeset
      config: Batch input/output configuration on load
      desktop/output: Clear modeset timer on output manager apply

Kirill Chibisov (1):
      build: fix building with basu

Kirill Primak (39):
      view: fix saved buffer order
      surface: chase wlr subsurface list/link change
      render: fix -Ddamage=rerender
      view: fix child position calc
      xdg-shell: chase wlr xdg toplevel refactor
      Revert "xdg_shell: schedule configure on maximize requests"
      xdg-shell: remove unused request_maximize listener
      layer-shell: chase wlr layer surface refactor
      layer-shell: check `committed` bitmask
      layer-shell: fix commit handler
      container: fix surface_is_popup()
      output: remove surface buffer damage check
      swaynag: remove buffer destruction condition
      chore: chase wlr_output_layout_get_box() update
      Chase wlroots xdg-shell refactor
      chore: chase wlroots xdg-shell update
      xdg-shell: schedule a configure on maximize request
      input: chase delta_discrete semantics change
      ci: install hwdata
      Use wlr_damage_ring
      output: set damage ring bounds to pixel values
      input/tablet: handle focusing NULL surface
      xwayland: don't rely on event source being data
      chore: chase wlroots map logic unification
      lock: listen to the correct map signal
      xwayland: fix mapped state check in OR handlers
      chore: chase wlroots xdg-surface role rework
      view: check if the buffer was uploaded on save
      xdg-shell: send maximized if tiled isn't supported
      xdg-shell: chase events update
      layer-shell: don't try to unmap on destroy
      layer-shell: wait for an initial commit before configuring
      layer-shell: don't configure uninitialized surfaces
      Chase wlroots!4003
      Chase wlroots!4443
      view: drop ext_foreign_destroy
      protocols: use tablet-v2 xml from stable/
      tearing: remove trailing whitespace
      tearing: fix UAF on destroy

Leonardo Hernández Hernández (3):
      sway/input: fix bad position of wlr_drag
      sway/input: wlr_seat_keyboard() now takes wlr_keyboard
      chase wlroots!4316

Lina Banik (1):
      seat: Fix reloading cursor theme after change

LordRishav (1):
      Add a Hindi (हिन्दी) translation to the README

Lucas Zampieri (1):
      Add libinput RotationAngle

Ludvig Michaelsson (1):
      swaybar: signal status command's process group

Luofan Chen (1):
      input: Rename WLR_INPUT_DEVICE_TABLET_TOOL to WLR_INPUT_DEVICE_TABLET

M.Zeinali (1):
      readme: use right-to-left marks in ir translation

Manuel Stoeckl (13):
      commands/exec: stop truncating >4095-byte commands
      Update URL to wlroots project (GitHub->GitLab)
      Add 'output render_bit_depth [8|10]' command
      sway/main: move constants off the stack
      Use shm_open instead of mkstemp
      swaynag: call swaynag_destroy on clean exit
      swaybar: handle wayland-cursor failures
      sway/server: Fix null pointer crash when Xwayland disabled
      common: Drop unused render_background_image
      common: rename load_background_image to load_image
      common: move load_image to swaybar
      desktop/layer_shell: provide fractional scale on creation
      sway/commands/output: Add command to set color profile

Marco Rubin (1):
      Translated README into Italian

Mark Bolhuis (1):
      input: Move wlr_pointer_gestures_v1 to sway_input_manager

Martin Michlmayr (1):
      sway-output.5: improve display of parameter

Matt Fellenz (1):
      Use locale time format for default bar command

Merlin Lex (1):
      ext-foreign-toplevel-list: Implement protocol

Michael Weiser (2):
      Prevent use-after-free on first bar subcommand error
      config: Remove unused mouse binding structure

Moon Sungjoon (1):
      sway/input: destroy sway_switch properly

Muhamed Hobi (1):
      Fix snprintf compiler warning

Mukundan314 (1):
      swaybar: always subscribe to mode and workspace

Nathan Schulte (5):
      swaybar: properly draw urgent block right border
      swaybar: properly draw blocks with transparent black border
      swaybar: fix cairo_font_options leak
      swaybar: fix tray_padding vs min-height re: scale
      swaybar: fix tray item icon scaling, positioning

NemuiBanila (1):
      seat: Fix cursor theme reload for tablet tool

Nick Kipshidze (1):
      Add Georgian README

Nicolas Avrutin (1):
      commands/focus: fix segfault when no container is already focused.

Nihal Jere (11):
      config.in: use portable hour specifier
      config.in: use swaynag -B instead of -b
      swaynag: die on all allocation failures
      swaynag: allocate button_details with details
      swaynag: statically allocate button_close, and move declaration
      swaynag: remove unnecessary zero of swaynag struct
      swaynag: remove redundant status variables in main
      remove unnecessary strlen call
      swaynag: do error checking and rename read_from_stdin
      swaynag: improve robustness when loading config
      swaynag: combine consecutive declaration/assignments

Norbert Bolanowski (1):
      move title_format to container

Olivia Taliesin (1):
      Removed destination-is-ancestor check from container_move_to_container to match i3 behaviour

Oğuz Ersen (1):
      bash-completion: localize variables

Patrick Hilhorst (1):
      treat fullscreen windows as 'tiled' for commands/focus

Puck Meerburg (2):
      tree: support formatting null titles
      criteria: allow matching on empty (NULL) titles

Radical (1):
      Add Norwegian READMR

Ragnar Groot Koerkamp (5):
      Fix #6299 Disable auto_back_and_forth for next_on_output
      Move auto_back_and_forth logic out of workspace_switch
      Only call workspace_auto_back_and_forth when needed
      Revert "Add workspace {prev,next}_on_output --create"
      Update clang format to better match existing code

Rahiel Kasim (1):
      fix typo in sway-output.5.scd

Rasmus Moorats (1):
      fix cursor input for layer-shell surfaces

Ricardo Steijn (1):
      Add support for tearing-control-v1

RoastVeg (1):
      Handle border width and height on minimum floating sizes

Robin Jarry (1):
      Allow windows in scratchpad to set the urgent flag

Ronan Pigott (35):
      output: damage whole output when exiting scanout
      container: retain focus position on floating enable
      cmd_fullscreen: allow fullscreen on fullscreen split containers
      workspace: reap empty parents when adding tiles
      xdg-shell: ignore unecessary fullscreen request ouput hints
      cmd_fullscreen: ignore fullscreen request on workspaces
      view: commit transactions for foreign toplevel requests
      layer_shell: damage previous area when a surface shrinks
      command: implement split none
      commands: update split none command for a047b5ee4
      output: change output::destroy to output::disable
      output: emit node::destroy event
      cmd/swap: error on swapping a container with itself
      root: move the workspace matching code to its own file
      node: prettify node type names
      launcher: track workspaces by node
      launcher: use xdga tokens
      launcher: rename pid_workspace to launcher_ctx
      view: associate launch contexts with views
      launcher: initialize launcher_ctxs once on startup
      launcher: fudge the interface a bit
      launcher: export xdga tokens and use them for workspace matching
      launcher: export X startup ids and use them for workspace matching
      criteria: be lenient on window_role and instance too
      input: enable user xkb configs with cap_sys_nice
      view: make request_activate take a seat
      launcher: make launcher context seat aware
      launcher: support external launcher tokens
      xdg-activation: fix urgency when the client does not specify a seat
      container: rehome the container_swap function into container.c
      Add a .mailmap file
      launcher: track the seat in the launcher ctx
      commands/move: do not force focus on the moved container
      view: send scale notification when the output is known
      xdg-activation: launcher tokens are activation requests

Rouven Czerwinski (5):
      view: handle case where map_ws is NULL
      transaction: destroying nodes aren't hidden
      server: request xdg-shell v2
      realtime: request SCHED_RR using CAP_SYS_NICE
      gamma_control_v1: handle destroyed output

Scott Dubinsky (1):
      Remove unguarded double include

Sefa Eyeoglu (4):
      fix: handle NULL from json_tokener_new_ex
      fix: use sane value for json_tokener max_depth
      refactor: use sway_abort instead
      build: bump wlroots dependency to 0.16.0

Sergei Trofimovich (2):
      swaynag/config.c: fix build against gcc-14 (-Walloc-size)
      sway/config.c: use `memcpy()` for known buffer size

Seth Barberee (1):
      [IPC] Add repeat delay/rate info to keyboard

Shaked Flur (1):
      man: add --inhibited and --no-repeat to bindsym and bindcode usage

Simon Plakolb (2):
      input: Use seatop_down on layer surface click
      seatop_down: End if surface is destroyed or other seatop starts

Simon Ser (243):
      ci: add xcb-util-wm dependency for wlroots
      Remove advice about Firefox from issue template
      readme: make it clearer that meson takes a dir as argument
      build: bump version to 1.6
      build: update wlroots dependency version to 0.14.x
      build: stop checking for logind
      desktop/render: remove unused wlr_gles2_texture_attribs
      Remove WLR_HAS_XDG_FOREIGN checks
      Log wlroots version on startup
      Avoid creating zero-sized textures for titlebars
      Use cairo_image_surface_get_stride instead of guessing it
      Avoid creating zero-sized textures for marks
      Use execlp("sh") instead of execl("/bin/sh")
      commands/exec_always: log error on execlp failure
      Remove support for arbitrary rotations
      build: remove sd-bus status item
      readme: switch back to IRC web client
      Implement xdg-activation-v1
      Iterate over subsurfaces below the parent surface
      build: bump wlroots dependency to 0.15.0
      contrib: drop incr_version script
      build: use meson.global_build_root()
      build: use Dependency.get_variable instead of get_pkgconfig_variable
      build: use ExternalProgram.full_path instead of path
      ci: make Meson warnings fatal
      tree/container: fix indentation
      Update wlr_box includes
      Add support for touch frame events
      Fix wl_pointer.frame not sent on touch emulation
      swaybar: exit cleanly when disconnected from IPC
      swaybar: log Wayland display errors
      Document view_map
      Fallback to other output modes if preferred mode fails
      layer-shell: replace close() with destroy()
      readme: switch to Libera Chat for ir
      readme: link to gamja for IRC
      Rename pango_printf to render_text
      readme: mention seatd
      build: remove scdoc stdin/stdout hack
      Add -Dnoscanout debug option
      readme: add missing space
      Add support for DRM panel orientation
      Chase wlr_xdg_surface breaking changes
      readme: drop recommendation about packaging
      Handle present events with NULL timespec field
      github: don't truncate debug logs
      Remove --my-next-gpu-wont-be-nvidia
      Bump RLIMIT_NOFILE
      Replace wlr_headless_backend_create_with_renderer call
      build: use list for sdbus dep
      Delete .clang-format
      Fixup headless output names
      Add support for linux-dmabuf surface hints
      swaynag: remove xdg-output logic
      swaymsg: replace if with switch in pretty_print
      swaymsg: add GET_TREE pretty-printing
      swaybar: fix errno handling in status_handle_readable
      Add cairo_image_surface_create error handling
      build: bump version to 1.8-dev
      Destroy sub-surfaces with parent layer-shell surface
      Add safety assert in parse_movement_unit
      Upgrade for wlroots surface refactoring
      commands/focus: drop trailing whitespace
      build: execute wlroots subproject before finding deps
      Use bools for CLI flags
      readme: add link to Italian translation
      readme: sort language list alphabetically
      readme: use relative links for translations
      xdg-shell: use wlr_xdg_toplevel in sway_view
      xdg-shell: use wlr_xdg_popup in sway_xdg_popup
      Remove all sprintf calls
      Remove WLR_SWITCH_STATE_TOGGLE usage
      swaybar: remove swaybar_output.input_region
      swaybar: set opaque region
      Replace strncpy with memcpy
      De-duplicate IPC output descriptions
      Handle NULL output make/model/serial
      build: link with -pthread
      ipc: remove chatty debug log messages
      config/output: use wlr_output_commit_state
      Remove access to wlr_input_device union
      Rename dpms output command to power
      ipc: add "power" to output reply
      config.in: switch to `output power`
      Remove internal references to DPMS
      Enable single-pixel-buffer-v1
      ipc: drop WLR_OUTPUT_ADAPTIVE_SYNC_UNKNOWN case
      config/output: test adaptive sync
      ipc: expose mode picture aspect ratio
      swaymsg: show mode picture aspect ratio
      build: simplify protocol paths
      Fix leaks in criteria_destroy()
      Add support for ext-idle-notify-v1
      Use wl_signal_emit_mutable()
      lock: fix crash on output destroy
      input/seat: locally compute drag icon offset
      Listen to the output request_state event
      ipc: add view content type
      Update for wlroots!3814
      build: drop wayland-scanner fallback
      build: unify server & client protocol generation
      build: drop "server" from target name for protocol code
      build: drop intermediate libraries for protocols
      build: drop unused wayland-egl dependency
      build: bump version to 1.9-dev
      Make GLES2 optional
      Make DRM backend optional
      Make session optional
      Make libinput backend optional
      build: remove trailing newline at end of file
      build: move completions to separate file
      build: fix have_xwayland when xcb-icccm is not found
      Chase breaking changes in wlroots!3903
      ci: install Xwayland .pc file
      swaynag: fix NULL font description
      swaynag: drop swaynag_type.font
      man: fix typo in output disable docs
      tree/container: drop unnecessary check in container_get_siblings()
      Send wl_surface.enter for ext-session-lock surfaces
      Fix indentation in surface_is_xdg_popup()
      Fix pointer events for ext-session-lock surfaces
      Check return value of wlr_renderer_begin()
      Switch default menu to wmenu
      ipc: add support for output event
      Convert to wlr_xwayland_surface_try_from_wlr_surface()
      Convert to *_try_from_wlr_surface()
      swaymsg: print output power status
      swaymsg: s/inactive/disabled/
      ci: install hwdata-dev on Alpine
      Use wlr_linux_dmabuf_feedback_v1_init_with_options()
      Introduce surface_{enter,leave}_output()
      Add support for fractional-scale-v1
      Update surface fractional scale on output change
      layer-shell: enter output before surface is mapped
      Adjust scale for fractional-scale-v1
      Constify pixman_region32_t for rendering functions
      Move output commit out of output_render()
      Check for empty damage before attaching render buffer
      man: deprecate seat cursor move/set/press/release
      ipc: add LIBINPUT_CONFIG_ACCEL_PROFILE_CUSTOM entry
      Remove duplicate wlr_damage_ring_set_bounds() call
      Pass version to wlr_compositor_create()
      Skip direct scan-out commit when damage is empty
      Set output damage during direct scan-out
      Introduce output_match_name_or_id()
      Use all_output_by_name_or_id() in merge_id_on_name()
      Use output_match_name_or_id() in apply_output_config_to_outputs()
      Use output_match_name_or_id() in workspace functions
      Add format_str() and vformat_str()
      pango: add printf attribute
      commands/floating_minmax_size: fix error strings
      commands: add printf attribute to cmd_results_new()
      config: add printf attribute to config_add_swaynag_warning()
      swaynag: add printf attribute to swaynag_log()
      common/gesture: use format_str()
      Use format_str() throughout
      render: fix titlebar texture clipping
      Handle gamma-control-v1 set_gamma events
      desktop/output: use detached output state for page-flips
      desktop/output: fix damage bitfield in wlr_output_state
      Use wlr_cursor_set_xcursor()
      Use wlr_cursor_unset_image()
      idle-inhibit-v1: simplify with server global
      Use "default" XCursor instead of "left_ptr"
      Send wl_surface.preferred_buffer_scale
      swaynag: handle wayland-cursor failures
      Deprecate seat idle_wake
      Add support for cursor-shape-v1
      desktop/output: drop logic to handle backend-applied mode
      desktop/output: drop handle_mode()
      desktop/output: fix output manager enabled state
      output: drop current_mode
      Move contrib/ to separate repository
      Hide xwayland_shell_v1 from regular clients
      Drop support for KDE's idle protocol
      input/seat: don't configure mappings for switches
      input/seat: rename seat_apply_input_config
      Only reconfigure input mappings on output change
      input/input-manager: drop input_manager_configure_all_inputs
      Apply gamma LUT when an output re-enabled
      Add support for security-context-v1
      Fix reference to wlr_output_event_commit.committed
      Add wlr/util/transform.h includes
      Pass wl_display to wlr_output_layout
      desktop/xwayland: correctly handle association on o-r change
      Drop fglrx detection
      Detect Nvidia proprietary driver via drmGetVersion()
      Detect proprietary DisplayLink drivers
      input/seat: drop exclusive_client
      input/{keyboard,switch}: rename input_inhibited variable to locked
      input/seat: inline seat_set_exclusive_client() with NULL client
      input/seat: rename seat_set_exclusive_client()
      input/seat: simplify seat_is_input_allowed()
      Check wlr_pointer_constraint_v1_state.cursor_hint.enabled
      input: reconfigure send_events on output hotplug
      readme: add swaybg as optional dep
      Drop wl_drm
      Mark DRM lease protocol privileged
      Clarify gdk-pixbuf dependency purpose
      Add debug flag to re-enable wl_drm
      build: bump version to 1.10-dev
      Drop old security config remnants
      commands/primary_selection: drop duplicate bool parsing
      commands: note how xwayland/primary_selection are reset on reload
      commands: make primary_selection a config-only command
      config: use format_str() instead of hand-rolled snprintf()
      Fix build with wlroots DRM backend disabled
      Drop unnecessary includes from sway/server.h
      input/text_input: fix dangling listeners
      Define _POSIX_C_SOURCE globally
      Add release script
      Convert to new pointer enums
      config: error out on keysym translation XKB state failure
      config: add fallback without env vars for keysym translation XKB keymap
      Fetch input device vendor/product from libinput
      xdg-shell: implement popup repositioning
      xdg-shell: send WM capabilities
      config/output: drop enabling flag
      server: fix wlr_seat use-after-free on exit
      Re-create renderer when lost
      man: drop fractional scale warning
      man: document that the scale might be adjusted
      input: pass wlr_seat_client to wlr_seat_touch_notify_cancel()
      config/output: fix NULL derefs in store_output_config()
      config/output: drop fast path in store_output_config()
      tree/container: ensure pixman rect is valid in container_arrange_title_bar()
      build: disable wayland-protocols subproject tests by default
      build: drop xwayland option
      server: hide xdg_output from unprivileged clients
      input/text_input: ensure keyboard is set before sending modifiers
      Drop server.h include from input/input-manager.h
      Set color transform when calling wlr_scene_output_build_state()
      tree/view: set default min size to 1×1
      tree/view: ensure content_{width,height} is positive
      desktop/output: unify page-flip codepath
      tree/container: drop decl for container_update_textures_recursive()
      sway_text_node: avoid unnecessary redraws
      ci: pin wlroots to v0.18.x
      desktop/xwayland: don't restack when marking window as inactive
      Bind a few utilities to special keys in default config
      Switch default config to wmenu-run
      Add support for alpha-modifier-v1
      build: bump version to 1.10-rc1

Simon Zeni (13):
      view: remove reference to wlr_wl_shell_surface
      introduce wlr_drm_lease_v1
      sway: create wlr_renderer and wlr_allocator
      sway: replace noop_output by fallback_output
      sway/commands: add missing wlr_keyboard interface include in xkb_switch_layout
      sway/input: use wlr_input_device from input device base
      sway/input/cursor: take device mm size from wlr_tablet
      sway/input/seat: take output name from specialized input device
      sway/input: follow up wlroots input device events renaming
      sway/server: specify wlr-layer-shell version on creation
      sway/desktop/output: listen to output mode in commit handle
      sway/lock: handle mode in output commit handler
      ci: add libdisplay-info dependency

Stacy Harper (1):
      Implement seatop_touch

Stanislav Ochotnický (1):
      man: add warning for hide_cursor configuration

Steffen Dirkwinkel (1):
      config/output: support DRM_FORMAT_ARGB8888

Tamino Bauknecht (4):
      gitignore: Ignore clangd-generated directory .cache/
      config/output: Allow approximation of output refresh rate
      sway: raise error on non-accessible background file
      sway/output: Improve logging of swaybg execvp failure and more checks

Tarcísio Eduardo Moreira Crocomo (2):
      Implement clickfinger_button_map support.
      build: bump libinput version required

Tassilo Horn (1):
      Fix compile after wlroots commit c3e54021f8bbf3ec1c1e5906459be0ae85f5fb8c

Thomas Hebb (4):
      input/seat: unset has_focus when focus_stack becomes empty
      Remove some erroneous apostrophes in comments
      Don't enter seatop_move_floating when fullscreen
      layer_shell: keep output non-NULL wherever possible

Thomas Jost (1):
      Strip quotes in bindsym --input-device=...

Tobias Bengfort (2):
      tray: do not render passive items
      focus_on_window_activation: raise if floating

Tobias Langendorf (1):
      remove usage of `wlr_texture_get_size`

Tobias Predel (1):
      root: free non_desktop_outputs list on root_destroy

Tobias Stoeckmann (1):
      Fix crash when starting without HOME

Tudor Brindus (8):
      tree/view: don't give focus to views mapped under fullscreen views
      desktop/xwayland: restack surface upon activation
      input/cursor: count pointer gestures as idle activity
      input/cursor: treat swipe begin as idle activity too
      input/cursor: pass through pointer hold gestures
      input: focus floating container when clicked on border
      input: focus container when scrolling on titlebar
      input: tweak focus behavior to allow focusing parent containers

Tuomas Yrjölä (1):
      xwayland: listen to `request_activate` event

Victor Makarov (1):
      xkb_switch_layout: fix relative layout switches

Violet Purcell (2):
      sway/config.c: only reset primary_selection at launch
      Update for versioned wlroots files

Vsevolod (1):
      Add focused_tab_title

Yaroslav de la Peña Smirnov (1):
      Fix keymap being NULL and segfaulting on dev add

Yasin Silavi (1):
      Fix farsi label

aajonusonline (1):
      sway-ipc.7.scd: fix typo

apreiml (1):
      Update README.de.md to match the EN one

apt-ghetto (1):
      Fix IRC links in READMEs and templates

ash lea (1):
      container: don't set fullscreen on children

bR3iN (2):
      Add `gaps <type> <scope> toggle <px>` command
      Add smart_gaps inverse_outer command

bretello (3):
      fix crash when resizing tiled scratchpad windows
      fix crash when setting urgency on an hidden scratchpad container
      prevent workspace_find_container from crashing with NULL workspaces

columbarius (1):
      config: allow whitespaces in config path

cparm (1):
      Avoid double free in criteria_destroy()

denppa (1):
      build: fix build with wayland-scanner subproject

frogtile (1):
      man: update Pango font description URL

fwsmit (1):
      desktop/layer_shell: fix centering for opposing anchors

grumpey (1):
      Update Pango font description URL in sway.5.scd

hrdl (3):
      Add support for touch cancel events
      handle_touch_cancel: fix begin default
      seatop_down: Call seatop_begin_default after sending touch events

iff (2):
      commands/input/map_from_region: don't treat 0x prefix as hex identifier
      Update sway-input.5.scd

kraftwerk28 (2):
      Chase wlroots X11 hints update
      Allocate enough space for `cmd_results->error`

lbonn (1):
      build: subproject support for wayland-protocols

llyyr (17):
      swaymsg: fix floating_nodes being ignored
      grimshot: fix tilde expansion within quotes
      sway{,bar}: use default font hint style
      swaybar: don't set current workspace as not visible
      meson: bump wlroots version after 0.17.0 release
      Chase wlroots!4440
      input/text_input: parent wlr_box may be uninitialized
      text_input: don't destroy scene_node twice
      ipc: add `floating` property to GET_TREE
      ipc: add `scratchpad_state` property to GET_TREE
      input/keyboard: don't send key release if we don't have focused surface
      input/seat: don't send redundant leave/enter on device creation
      input/keyboard: refactor into sway_keyboard_set_layout
      input/keyboard: don't set layout for virtual keyboard device
      xdg_shell: don't send configure events to uninitialized surfaces
      sway/tree/container: don't trunc coords in `floating_fix_coordinates`
      sway/input/keyboard: always set active keyboard if there is none

luzpaz (1):
      Fix typo

mrusme (1):
      Update sway.5.scd

mzeinali (1):
      Add persian README file

ndren (1):
      Replace pcre with pcre2

nerdopolis (1):
      Fix build on Debian Stable

novenary (4):
      Don't apply hide_edge_borders to any floating container
      Disable direct scanout for surfaces with popups
      transaction: fix missing top border with hide_lone_tab
      ipc: properly check for titlebars

nukoseer (1):
      Calculate tiled resize amount relative to parent container

ohno418 (1):
      Improve Japanese translation

ookami (1):
      Rebase all cursors in handle_surface_map

pudiva chip líquida (1):
      Support libinput's 1.21 new dwtp option

quinno (1):
      Fix typo in sway.5.scd

rj1 (1):
      fix typo

sergio (1):
      details-gackground typo fix

siikamiika (3):
      use node_is_view
      commands/focus: focus view inside container
      view: add new container as a sibling of tiled view

thal (1):
      tree/view: Do not clip to geometry if using CSD

tomKPZ (1):
      Add tab dragging functionality

xdavidwu (1):
      swaynag: fix pointer button events on scaled outputs

zkldi (1):
      fix: remove redundant empty statement in main.c

Łukasz Adamczak (2):
      Correct window_rect.y with hide_edge_borders
      Clarify documentation for window_rect

マリウス (1):
      man: Add XWayland information

Don't miss a new sway release

NewReleases is sending notifications on new releases.