Sway 1.9 contains 238 changes from 67 contributors.
This release depends on wlroots 0.17.0. See the wlroots release notes.
New features
- All of the enhancements from wlroots 0.17, including support for the new content-type-v1, xwayland-shell-v1, wp-fractional-scale-v1, security-context-v1 and cursor-shape-v1 protocols
- Improved xdg-activation-v1 support with workspace tracking and multi-seat
- The rendering code has been ported to the new wlroots rendering API, yielding better performance
- A new config option to disable primary selection
- A new input commands to set libinput's rotation angle and scroll button lock
- Tablet tool buttons can now be used for floating mode resize
- The IPC output event is now supported
- Add support for layer-shell's on-demand keyboard interactivity
Changes
- The default menu has been changed to wmenu: #7384
- The KDE idle protocol is no longer supported (superseded by the standard idle-notify-v1 protocol)
Full changelog
33KK (1):
Fix `bindsym --to-code` not respecting input configs
Aidan Dang (1):
Add `primary_selection` config option
Aleksei Bavshin (1):
xdg-activation: distinguish activation and urgency requests
Alexander Courtis (1):
Apply new adaptive sync value from wlr-output-management
Alexander Orzechowski (16):
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
output: Destroy when output layout is destroyed
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
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 (2):
Fix input command order (rotation_angle)
ipc: add ability to subscribe to output event
Bill Li (1):
chase wlroots!4411
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
Daniel Hill (1):
Fix map_to_output * turning off device
Dudemanguy (4):
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
EBADBEEF (1):
view: re-apply criteria when window gets unmapped
Elyes Haouas (1):
Fix old style function definitions
Erik Reider (4):
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
Hodong (1):
swaybar: remove the argument of StatusNotifierHostRegistered
Jan Beich (1):
readme: Stop recommending setuid bit for non-logind systems
Joan Bruguera (2):
swaybar: Prioritize hotspot events to bar bindings
swaybar: Make hotspots block bar release bindings
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.
Kenny Levinsen (4):
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
Kirill Primak (9):
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
Leonardo Hernández Hernández (1):
chase wlroots!4316
Lina Banik (1):
seat: Fix reloading cursor theme after change
Lucas Zampieri (1):
Add libinput RotationAngle
Manuel Stoeckl (4):
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
Mark Bolhuis (1):
input: Move wlr_pointer_gestures_v1 to sway_input_manager
Matt Fellenz (1):
Use locale time format for default bar command
Mukundan314 (1):
swaybar: always subscribe to mode and workspace
NemuiBanila (1):
seat: Fix cursor theme reload for tablet tool
Nick Kipshidze (1):
Add Georgian README
Radical (1):
Add Norwegian READMR
Robin Jarry (1):
Allow windows in scratchpad to set the urgent flag
Ronan Pigott (19):
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
Rouven Czerwinski (1):
gamma_control_v1: handle destroyed output
Sergei Trofimovich (2):
swaynag/config.c: fix build against gcc-14 (-Walloc-size)
sway/config.c: use `memcpy()` for known buffer size
Shaked Flur (1):
man: add --inhibited and --no-repeat to bindsym and bindcode usage
Simon Ser (100):
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
ci: checkout wlroots 0.17
desktop/xwayland: correctly handle association on o-r change
input: reconfigure send_events on output hotplug
readme: add swaybg as optional dep
Mark DRM lease protocol privileged
Clarify gdk-pixbuf dependency purpose
build: bump version to 1.9-rc.1
build: bump version to 1.9-rc.2
build: bump version to 1.9-rc.3
commands: make primary_selection a config-only command
Fix build with wlroots DRM backend disabled
build: bump version to 1.9-rc.4
build: bump version to 1.9
Simon Zeni (4):
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
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
Tobias Bengfort (1):
focus_on_window_activation: raise if floating
Tobias Predel (1):
root: free non_desktop_outputs list on root_destroy
Violet Purcell (1):
sway/config.c: only reset primary_selection at launch
bretello (1):
fix crash when resizing tiled scratchpad windows
denppa (1):
build: fix build with wayland-scanner subproject
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
llyyr (2):
sway{,bar}: use default font hint style
swaybar: don't set current workspace as not visible
luzpaz (1):
Fix typo
mrusme (1):
Update sway.5.scd
nerdopolis (1):
Fix build on Debian Stable
novenary (1):
Disable direct scanout for surfaces with popups
nukoseer (1):
Calculate tiled resize amount relative to parent container
ookami (1):
Rebase all cursors in handle_surface_map
rj1 (1):
fix typo
Łukasz Adamczak (2):
Correct window_rect.y with hide_edge_borders
Clarify documentation for window_rect