Sway 1.10 contains 237 changes from 44 contributors.
This 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 andgrim
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
Access (1):
text_input: Implement input-method popups
Adam Chovanec (1):
readme: update Czech translation
Aleksei Bavshin (1):
xdg-activation: distinguish activation and urgency requests
Alexander Orzechowski (47):
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
Fix alpha-modifier-v1
layer_shell: Arrange exclusive zone clients first
layer_shell: Restore sway 1.9 ordering
Andri Yngvason (1):
Implement transient seat management
Anna (navi) Figueiredo Gomes (2):
sway/config/output.c: fix null deref on output config
sway/commands/move.c: arrange new workspace
Bill Li (2):
Chase wlroots!4482
ci: use package x11-servers/xwayland instead of x11-servers/xwayland-devel
Billli11 (1):
Remove wlr_presentation in sway_server struct
Daniel De Graaf (1):
Fix SIGSEGV on output destroy
Daniel Kahn Gillmor (1):
sway-ipc(7): Escape backslashes correctly in GET_CONFIG output
Emil Engberg (1):
Add toggle for output adaptive_sync
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
Furkan Sahin (2):
swaybar: Fix 100% cpu usage if dbus dies.
input/mouse: bugfix button2 being interpreted as trying to move the container
James Knight (1):
build: avoid git repository discovery when determining version
Jan Palus (1):
trigger container update after disabling urgent in timer
JingMatrix (1):
Add null-safety check for virtual keyboard keymaps
Joan Bruguera Micó (1):
layer-shell: Restore interactive layer focus code
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
Kenny Levinsen (47):
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
Re-init renderer for all outputs on lost context
config/output: Improve modeset state logging
config/output: Always set output states from config
config/output: Always set all output fields on finalize
config/output: Remove initial values in find_output_config
config/output: Remove remaining logs from queue_output_config
Kirill Primak (10):
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
Luofan Chen (1):
input: Rename WLR_INPUT_DEVICE_TABLET_TOOL to WLR_INPUT_DEVICE_TABLET
Manuel Stoeckl (5):
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
Merlin Lex (1):
ext-foreign-toplevel-list: Implement protocol
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
Ricardo Steijn (1):
Add support for tearing-control-v1
Ronan Pigott (4):
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
Scott Dubinsky (1):
Remove unguarded double include
Sergei Trofimovich (1):
sway/config.c: use `memcpy()` for known buffer size
ShootingStarDragons (1):
fix: sway crashes if switch to another workspace with surface when IME popup is shown
Simon Ser (66):
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
release: push tags before creating GitHub release
build: bump version to 1.10-rc2
build: bump version to 1.10-rc3
build: bump version to 1.10-rc4
build: bump version to v1.10
Steffen Dirkwinkel (1):
config/output: support DRM_FORMAT_ARGB8888
Tamino Bauknecht (2):
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
Violet Purcell (2):
sway/config.c: only reset primary_selection at launch
Update for versioned wlroots files
apreiml (1):
Update README.de.md to match the EN one
bretello (2):
fix crash when setting urgency on an hidden scratchpad container
prevent workspace_find_container from crashing with NULL workspaces
llyyr (13):
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
mrusme (1):
Update sway.5.scd
novenary (2):
transaction: fix missing top border with hide_lone_tab
ipc: properly check for titlebars
thal (1):
tree/view: Do not clip to geometry if using CSD