github swaywm/sway 1.9
sway 1.9

latest releases: 1.10, 1.10-rc4, 1.10-rc3...
8 months ago

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

Don't miss a new sway release

NewReleases is sending notifications on new releases.