Sway 1.5 contains 284 changes from 78 contributors. This release introduces a lot of new features, but also contains numerous bug fixes.
The recommended wlroots version to use with this release is 0.11.0.
New features
- Headless outputs can now be created dynamically via the
create_output
command, and can be used with WayVNC - Input method editors (IME) are now supported via the input-method and
text-input protocols - Adaptive synchronization (aka. variable refresh rate, VRR) can be enabled
to reduce stuttering in games - Support for the viewporter protocol, allowing older X11 games to work
better and improve performance - Allow virtualization and remote desktop software to inhibit keyboard
shortcuts - Support for the wlr-foreign-toplevel-management protocol, allowing
custom docks and window switchers
Full changelog
Adam Kürthy (2):
Take window borders into account when resizing floating windows
Really fix floating window border resize problems
Aleksei Bavshin (1):
Adjust focus order to match rendering order of layer shell popups.
Alex Maese (2):
Add ability to remove the floating modifier
Add documentation for floating_modifier
Anders (1):
criteria: match containers without view
Andri Yngvason (6):
input: Assign virtual input devices to their selected seats
swaynag: Add multi-seat support
swaybar: Fix input device removal
input: Map virtual-pointer to the requested output
input: Mark virtual devices as such
input: keyboard: Never group virtual keyboards.
Bill Doyle (1):
Only destroy swaybar surface via ipc when needed
Bor Grošelj Simić (1):
input: implement cycling through keyboard layout list
Brian Ashworth (20):
render: do not render indicator on floating views
input/cursor: handle image surface destroy
input/cursor: handle setting a NULL image surface
view: remove workspace pid mapping for assigns
container: add inactive fullscreen to focus stack
desktop/output: fix mem leak in handle_new_output
output: apply oc to outputs using wl_for_each_safe
container_at_{tabbed,stacked}: check x-axis bounds
config: fix validation exit code and log level
cmd_swap: fix test_mark condition
output: fix updating output manager config
tree/view: do not attempt enter on hidden child
input_cmd_events: add support for input types
Revert "Don't apply exclusive zones of unmapped layer-shell surfaces"
sway.5: correct description of workspace [number]
ISSUE_TEMPLATE: note debug logs should be from TTY
input: reset keyboard groups keyboard on reset all
input: fix reloading crash due to keyboard group configuring
seat_cmd_cursor: emit frame events
input/keyboard: wlr_keyboard_group enter and leave
Campbell Vertesi (1):
Add note on quoting to swaymsg manpage
Cassandra McCarthy (1):
integer scaling, not integral
Cyril Levis (2):
Add the possibility to capture only one screen if several screens are use.
Change wording
Damien Tardy-Panis (1):
Add views idle inhibition status in get_tree output
David Arnold (2):
grimshot: Unary operator expected
grimshot: fix POSIX compliance
David96 (4):
Render layer shell popups over the top layer
Don't transfer focus to NULL node on touch
Don't unhide cursor on touch events
Implement pointer simulation if client hasn't bound to touch
Dennis Schridde (1):
Document input selector precedence
Di Ma (4):
Fix a use-after-free error in switch binding
Fix a use-after-free error in switch binding
Fix a use-after-free error in switch binding
Fix a use-after-free error in switch binding
Dominique Martinet (3):
swaynag: fix segfault on exit when arguments are not correct
swaynag: exit on wl_display_roundtrip error
build: make completions respect install prefixes
Drew DeVault (4):
Update wlroots version
Update version to 1.4
Implement wlr-foreign-toplevel-management-v1
Update version to v1.5-rc2
Ejez (1):
Correct typo in sway-output.5.scd
Eli Schwartz (3):
meson: use join_paths to build paths, instead of string concat
completion: use pkg-config to get install location for bash/fish
fish-completion: use the correct fallback directory
Eric Engestrom (1):
bash completion: swaymsg accepts --version, not --verbose
Geoffrey Casper (1):
Reload command now matches i3's implementation
Graham Christensen (1):
swaynag: allow specifying more buttons which execute and dismiss
Hristo Venev (2):
Do not truncate pointer coordinates to int.
swaybar: fix i3bar relative coordinates when scaling is used
Hugo Osvaldo Barrera (7):
grimshot: Allow configuring default directory
grimshot: Avoid screenshots overwriting each other
grimshot: Show usage when on invalid command
grimshot: Allow manually picking a window
grimshot: Add a separate flag for notifications
grimshot: Add a man page
grimshot: Skip creating a temp file when copying
Ian Fan (6):
ipc: add missing required properties
swaybar: fix memory leaks
tray: better errors when parsing index.theme
tray: allow themes to inherit from multiple themes
tray: tidy code
tray: track SNI callbacks
Ian Huang (1):
interpret "subpixel none" as CAIRO_ANTIALIAS_GRAY
Ihor Kalnytskyi (1):
scdoc: unbindcode --input-device, not input-device
Isaac Freund (1):
output: simplify loop over layer surfaces
JR Boyens (1):
Use transparency arg in the window focus event
Jamelly Ferreira (2):
Adding a version of README.md in Portuguese
Adding the link to the Portuguese on the English version of README.md
James Mills (1):
Fix typo in swaybar-protocol.7.scd
Jan Beich (2):
common/log: bump POSIX version used after e81d9fde667e
protocols: sync wlr-layer-shell-unstable-v1 with wlroots
Jason (2):
Docs: explain why menu command should be passed to sway
Update fish completions
Jason Nader (12):
Amend typo
commands/move: Fix crash when required args not provided
Check argc>0 before strcasecmp. Should shortcircuit
Docs: Add marks field to get_tree response
i3compat: add `window_type` to IPC response
i3compat: add `window_type` to IPC response
ipc-server: improve error message
Limit workspace numbers within 0..INT32_MAX
commands/bind.c: remove unnecessary check
sway/input/cursor.c: move NULL check to where it should be
sway/input/cursor.c: fix undefined behaviour when event is NULL
i3-compat: add GET_BINDING_STATE IPC command
Johan Bjäreholt (1):
tree/view: Make foreign-toplevel app_id fallback to class
Jonas Große Sundrup (1):
rephrase swayidle-timout example to improve readability
Josh Shone (1):
Fix hit test for floaters that cross outputs
Kalyan Sriram (1):
Save transform during transaction
Kenny Levinsen (9):
Simplify repaint scheduling documentation
view: Save all buffers associated with view
view: update_size should only update pending size
transaction: Account for full size when centering content
transaction: Improve transaction commentary
container: Remove useless surface dimensions
shells: Resize on commit if geometry x/y changes
transaction: Mark client resize immediately ready
seat: Refocus seat when wlr_drag is destroyed
Leo (2):
Fix redundant call to seat_send_focus()
im: Fix crash when im destorying and no focused surface exists
Leon Plickat (1):
change apply_exclusive() to closer match layer shell protocol
Linus Heckemann (1):
add --no-repeat option for bindings
Lucas M. Dutra (1):
fix typo
Luke Drummond (2):
swaynag: sway_abort on failure to properly register
swaybar: ensure correct init order for status_line
Martin Dørum (1):
swaybar: Fix scrolling with precise trackpads
Martin Michlmayr (2):
sway.5: make formatting more consistent
Fix typos in comments
Michael Weiser (5):
config: Fix typo in reload bindsym flag bitmask
input: Add support for keyboard shortcuts inhibit
commands: Add shortcuts_inhibitor command
commands: Adjust style in cursors command
commands: Add per-view shortcuts_inhibitor command
Milkey Mouse (1):
swaybar: add NULL check when listing workspaces
Nathan Rossi (1):
ipc: Handle unsupported binding event types
Nick Diego Yamane (1):
input/seatop_default: properly notify pointer leave
Olivier Fourdan (1):
input: Avoid creating the PAD device multiple times
Paul Ouellette (1):
Fix some mistakes in grimshot docs
Pedro Côrte-Real (3):
Avoid numerical instability in resize
Make sure we don't calculate fractional pixel gaps
Make all the container dimensions integers
Ronan Pigott (9):
commands/split: Fix error message typos
ipc-json: Remove unnecessary dereference
sway-input.5: Document repeat_delay and repeat_rate only once
sway.5: Document missing bindsym flags for unbindsym
Fix crash when showing scratchpad hidden split containers
cmd_move: Fix crash when moving to scratchpad hidden split containers
cmd_split: Refuse to split scratchpad hidden split containers
view: fix surface_new_subsurface use-after-free
xdg_shell: schedule configure on maximize requests
Ross Schulman (1):
Fix small typo in sway-input(5)
Rouven Czerwinski (3):
xwayland: handle size_hints == NULL
output: remove damage listeners in damage destroy
input/seatop_default: release on empty workspace
Ryan Dwyer (1):
Introduce pid criteria token
Simon Ser (52):
Fix unreliable scaling filter
Revert "Make all the container dimensions integers"
Fix seat_set_focus_layer crash when disabling output
Fix output scale auto-detection
Call apply_output_config instead of output_enable
Stop calling apply_output_config from output_enable
Apply the output scale filter after the output commit
Fix output transform anticlockwise
Fix output transform rotation direction
Specify that output transform applies clockwise rotations
Fix get_int_prop(WINDOW_TYPE) crash
Don't apply exclusive zones of unmapped layer-shell surfaces
Add support for wlr-output-power-management-unstable-v1
Make handle_destroy and output_repaint_timer_handler static
Only schedule a frame if client has requested a frame callback
Drop sway_output.surface_needs_frame
Use wlr_client_buffer
Add an adaptive_sync output command
Add adaptive_sync_status to output IPC reply
common/log: improve time prefix
readme: git is an optional dependency
Fix output mode usage
Change focus_on_window_activation default to urgent
Update for new wlr_buffer API
Stop checking wlr_output_attach_buffer return value
Introduce test_output_config
Add test-only support to wlr-output-management-unstable-v1
ci: don't build scdoc
ci: remove epoll-shim hardcoded pkg-config file
Fix initial modeset
Don't add disabled outputs back to output layout
Use bitshifts for bitfields
Implement create_output command for headless backend
Restrict relative output transforms to runtime changes
man: add note about sway-input and sway-output pages
Redirect questions to wiki/IRC
build: improve feature summary
Don't assert the cursor theme loads
Fix invisible cursor on startup
Add a secondary headless backend
Log Sway version on startup
Remove view child surface_{map,unmap} listeners on destroy
Add support for viewporter
Update version to 1.5-rc1
seat: fix segfault in sway_input_method_relay_set_focus
Don't set xwayland cursor when wlr_xwayland failed
Unset DISPLAY when wlr_xwayland fails
tree/view: fix segfault in view_update_title
config/output: don't change output state before commit
Assert output is found before removing from list
Bump wlroots dependency to 0.11.0
Bump version to 1.5
Some Chinese Guy (3):
Added focus following for touch_down
switched to setting focus with seat_set_focus
swapped hiding the cursor and sending a touch event as a more logical sequence
Tadeo Kondrak (1):
Null check sway_layer_surface when checking damage
Teddy Reed (1):
Fix ordering of setgid and setuid
Thayne McCombs (1):
Add missing items to documentation for GET_TREE response in ipc.
TheAvidDev (1):
Add wayland_client dependency to common
Thomas Hebb (3):
config: fix unfocused text color
Add each view's shell to JSON description
Use new wlroots API for clearing keyboard/pointer focus during grabs
Till Hofmann (1):
Avoid calling strcmp on nullptr
Tobi Fuhrimann (1):
Reference wev instead of xev
Torstein Husebø (1):
treewide: fix typos
Tudor Brindus (47):
input/cursor: correctly send tablet_v2 up event when over non-v2 surface
input/cursor: fix jerky resizing of non-tablet_v2 surfaces
input/cursor: fix hide cursor timeouts on tablets and touchscreens
config/output: reconfigure input devices on new output
input/cursor: correctly transfer focus when using tablet pen
config/output: reconfigure input devices after full output init
input/tablet: query tablet focused surface for cursor image check
Add debug symbol stack trace note to ISSUE_TEMPLATE.md
input/cursor: release simulated tool tip button when over v2 surface
input/cursor: make cursor rebasing cursor type-agnostic
input/cursor: disambiguate cursor functions from pointer functions
input: refactor tablet motion into seatop handler
input: rename pointer handlers to be unambiguous
input/cursor: remove erroneous cast for tablet tool button
input/keyboard: use wlr_keyboard_keymaps_match from wlroots
input/tablet: simplify parameter plumbing for tablet references
input/cursor: don't apply pointer constraint to emulated tablet input
input/pointer: only warp cursor when the confine region has changed
common/log: use bright black rather than black for SWAY_DEBUG
input/tablet: add seatop_down entry for tablet input
input/cursor: fix heap-buffer overflow in constraint set_region
input/cursor: keep reference to cursor in constraint
Log Xwayland startup failures
input/pointer: send pointer enter event on confine warp
ipc: invert output transformation when necessary
input/cursor: rename `simulated_tool_tip_down` to be more accurate
tree/container: refactor `tiling_container_at` to check bounds
xwayland: pass focus to previous unmanaged surface on unmap
input/cursor: refactor tablet tool tip events into seatops
common/util: fix `get_current_time_msec` returning microseconds
tree/container: introduce `container_toplevel_ancestor` helper
input/tablet: allow moving floating tablet v2 surfaces by pen input
input/tablet: allow moving tiling tablet v2 surfaces by pen input
input: tweak resize behavior to not change tab focus on border click
tree/view: fix smart gaps when ancestor container is tabbed or stacked
input/tablet: focus appropriate node on tip down
input/pointer: don't trigger pointer bindings for emulated input
input/cursor: send idle events based off device type, not input type
input/pointer: don't trigger pointer bindings for emulated input
input: disable events for map_to_output devices when output not present
input/seat: don't notify keyboard grabs with NULL surface on shutdown
input_cmd_click_method: fix typo in error text
input/pointer: correctly handle bindings for synthetic events
tree/view: fix smart borders with tabbed/stacked ancestor
commands/move: unwrap workspace container on move to new workspace
commands/move: maintain workspace_layout when moving
input/cursor: don't send wl_pointer.motion event on pointer unlock warp
Vinko Kašljević (1):
Add check for empty GEOM variable
Wai Hon Law (1):
Make the default workspace commands compatible with i3
Yorick van Pelt (1):
Fix crash: use wlr_output->name instead of possibly missing oc->name
jhalmen (1):
fix typos in sway-input.5.scd
lbonn (1):
ipc: show marks of containers without view in tree
r-c-f (1):
check for workspace command name arg
rinpatch (1):
sway.5: fix missing background scaling mode in a block example
roshal (1):
add dots to man
salkin-mada (1):
add danish README
skip-yell (1):
Add Korean README.md
taminaru (1):
Add Romanian translation
thermitegod (1):
Fix compiling with -fno-common
wb9688 (1):
Replace unprintable characters in input device id
xdavidwu (5):
Port input method and text input from rootston
input-method: remove surface listener before set
input-method: avoid and log unneeded set_focus
im: make text-input listeners per text-input
im: remove listener on pending surface destoryed
Érico Rolim (2):
security.d: remove directory
Remove code related to the security features