Skip to content

Releases: riverwm/river

river 0.3.0

16 Apr 12:29
v0.3.0
d3178ae
Compare
Choose a tag to compare

NOTICE: This is the last river release that will be announced on github. The upstream river repository has moved to https://codeberg.org/river/river and this release as well as all past and future releases can be found there.

This one's been in the pipeline for quite a while, it's been over a year since 0.2.0 was released and river has seen significant improvements since then. The past few months I've done my best to fix as many bugs as possible but a non-bugfix release always entails new code reaching a lot of people with diverse setups. If you find a bug in river please open an issue.

Here's a summary of the important changes since river 0.2.

New features:

  • Better rendering performance due to the new wlroots rendering API and gles2 renderer improvements.
  • Finely-grained damage tracking leveraging the wlroots scene graph API.
  • Interactive resize of windows with the cursor from all edges/corners.
  • Basic tablet input support
    • Only the tablet-v2 protocol is is supported, no pointer emulation is done.
    • Drawing with a tablet tool works in inkscape, libreoffice, etc.
    • Tablet pad input devices are not yet supported, tracking issue: https://codeberg.org/river/river/issues/1021
  • Rules system to apply settings to windows with a matching app-id/title. See rule-add in the riverctl(1) man page. The following rule types are added in this release:
    • float/no-float
    • ssd/csd
    • fullscreen/no-fullscreen
    • tags
    • output
    • position
    • dimensions
  • New -current-tags flag for send-to-output
  • New -no-xwayland flag for starting river with xwayland disabled even if built with support.
  • New above, below and after <N> attach modes plus the ability to configure attach mode per output with the new output-attach-mode riverctl command.
  • New -skip-floating flag for focus-view
  • New scroll-factor input configuration option
  • The input-method-v2 and text-input-v3 protocols are supported, with the exception of input-method popups.
  • The presentation-time protocol is supported.
  • The fractional-scale-v1 protocol is supported.
  • The cursor-shape-v1 protocol is supported.
  • The xdg-shell protocol version 5 is supported, up from version 2.

Breaking changes compared to 0.2:

  • River now honors the client-side vs server-side decoration wishes of clients by default instead of attempting to force server-side decorations everywhere. To approximate the old behavior the command riverctl rule-add ssd may be used.
  • The float-filter-add and csd-filter-add riverctl commands have been removed, use rule-add instead and see the riverctl(1) man page for documentation.
  • The attach-mode riverctl command is deprecated and currently aliased to the new default-attach-mode command. The alias may be removed in the future.
  • Rendering order has changed slightly and and is now based off of focus order instead of window management stack order.
  • Pointer constraints have been reimplemented and the new implementation does less automatic warping of the cursor.

Packaging changes:

Community:

Thank you to everyone who has contributed code and bug reports to river! River would no be where it is today without you.

Thanks as well to everyone who has donated to me in support of river's development, your support means a lot to me.

If my work on river adds value to your life and you'd like to support me financially you can find donation information here.

Full changelog
Alexander Courtis (1):
      wlr-output-management: apply adaptive sync state

Doclic (2):
      river: make RuleList return deleted items
      river: add outputs rule

Hugo Machet (9):
      ci: Use meson setup command
      View: fix pointer comparison in notifyTitle()
      completions: Rewrite zsh
      completions/zsh: Fix incomplete input names
      river: add -no-xwayland cli flag
      InputConfig: Implement disable while trackpointing
      example/init: Replace light with brightnessctl
      completions: Add missing completions
      mailmap: map Hugo's old emails to new one

Isaac Freund (250):
      build: bump version to 0.3.0-dev
      rivertile: fix code to disallow 0 main count
      session-lock: wait for present before locking
      session-lock: fix assertion failure due to race
      session-lock: fix assertion failure on abnormal client behavior
      render: fix rounding for fractional scaling
      deps: update to Zig 0.10
      flags: further cleanup after Zig 0.10
      deps: update zig-wayland to fix build on aarch64
      Seat: rework Xwayland Override Redirect focus
      command/layout: fix a memory leak
      session-lock: properly handle disabled outputs
      idle-inhibit: fix use-after-free
      wlr-output-management: leverage new wlroots APIs
      session-lock: fix assertion failure on hot-plug while locked
      wlr-output-management: fix bug due to zig miscompilation
      docs: fix typos in riverctl man page
      docs: remove repology badge from readme
      Seat: guard setFocusRaw() usage while locked
      deps: update to latest zig-wayland/zig-wlroots
      deps: update to latest zig-wayland/zig-wlroots
      Keyboard: fix keyboard-layout mapping crash
      pointer-constraints: remove protocol
      render: remove damage tracking
      wlr-foreign-toplevel-management: remove protocol
      render: use wlr_scene to render views
      Cursor: remove surfaceAt()
      session-lock: use the scene graph
      Output: use separate scene trees for layers
      View: implement borders with scene graph
      Xwayland: create scene tree
      View: remove dead code
      LayerSurface: render using the scene graph
      XdgPopup: reimplement using the scene graph
      xdg-shell: implement version 5
      DragIcon: render using the scene graph
      Xwayland: render using the scene graph
      View: use saved surface trees for transactions
      river: rework core data structures & transactions
      OutputStatus: rework implementation
      LayerSurface: fix use-after-free on destroy
      river: fix various fullscreen related bugs
      csd-filter-add/remove: add missing applyPending()
      Root: centralize focus(null) calls in applyPending()
      Output: inline renderOutput function
      session-lock: fix race with multiple outputs
      Root: fix more fullscreen bugs
      View: move borders state to State struct
      View: clamp to output on exiting float/fullscreen
      Root: fix use of view.current before update
      Output: fix background of transformed outputs
      View: only send configures through transactions
      View: fix frame perfection on unmap
      river: render floating views above the layout
      View: handle destroy during inflight layout demand
      Xwayland: fix has_fixed_size heuristic for floating
      XdgToplevel: fix size_changed check on commit
      Root: keep all fullscreen views the correct size
      Xwayland: hide override redirect windows if locked
      deps: update zig-wlroots to fix Xwayland crash
      Cursor: allow resizing from all edges
      xdg-shell: honor client move/resize requests
      View: rework configure abstraction
      Cursor: store offset and warp cursor during move
      river: fix a few leaks
      river: clean up some uneeded TODOs
      SceneNodeData: allow access from wlr_surfaces
      Server: remove headless backend
      presentation-time: support protocol
      Cursor: use pending position to warp during move
      Seat: use the grab aware API to clear focus
      pointer-constraints: implement protocol
      Xwayland: only raise views if activated
      wlr-foreign-toplevel-management: implement protocol
      river: improve comments on pending/inflight/current
      Seat: fix potential assertion failure
      layer-shell: apply exclusive zones in separate pass
      Xwayland: eliminate unneeded user data usage
      XdgToplevel: clean up wlr_surface data on destroy
      river-status: only send layout name if changed
      example/init: Fix confusing comments
      xdg-shell: determine tiled state by float state
      View: add `none` impl tag for better safety checks
      xdg-decoration: clean up implementation
      river: add rules system
      docs: fix typo in riverctl man page
      example/init: update for rules system
      doc: fix typo in riverctl man page
      Output: reinitialize output_status, cleanup
      Root: remove incorrect assertions in addOutput()
      Root: separate fallback list to handle 0 outputs
      Cursor: fix warp on output change with no views
      XdgToplevel: ensure view dimensions match geometry
      Cursor: lock to current geometry during move/resize
      Cursor: apply x/y change during resize on commit
      build: work around zig 0.10.0 bug to fix CI
      LayerSurface: handle focus when switching outputs
      LayerSurface: fix surfaces on multiple outputs at once
      session-lock: fix assertion failures and clean up
      XdgToplevel: store scene node in wlr_surface data
      river-layout: Remove incorrect assertion
      build: update to Zig 0.11.0
      View: clean up after Zig update
      Cursor: use total delta for resize calculation
      docs: explain unknown info in output identifiers
      docs: update PACKAGING.md for Zig 0.11
      DragIcon: set position on creation
      rivertile: eliminat...
Read more

river 0.2.6

25 Nov 11:38
v0.2.6
deb80d0
Compare
Choose a tag to compare

Well, I managed to make a typo during the Zig upgrade for 0.2.5 which broke
input device identifiers. This release fixes that.

Hopefully that's the only regression I managed to introduce from 0.2.4 but
if something else comes up release numbers are luckily pretty cheap :)

Full changelog:

Isaac Freund (3):
      build: bump version to 0.2.6-dev
      InputDevice: fix identifier generation
      build: bump version to 0.2.6

river 0.2.5

24 Nov 11:50
v0.2.5
80fc81e
Compare
Choose a tag to compare

This release makes no functional changes since 0.2.4. The only difference
is that it requires Zig 0.11 rather than Zig 0.10.

I had originally planned for 0.3.0 to be the next release and to update the
zig version required then, but 0.3.0 is taking longer than expected to wrap up
at my quality standards. Distro maintainers requested a Zig 0.11 compatible
release to ease packaging until 0.3.0 is done.

Full changelog:

Isaac Freund (3):
      build: bump version to 0.2.5-dev
      build: update to Zig 0.11.0
      build: bump version to 0.2.5

river 0.2.4

10 Feb 16:06
v0.2.4
3947456
Compare
Choose a tag to compare

This release fixes yet another small handful of bugs, including a couple of
assertion failures causing crashes. With luck this may be the last 0.2.x
bugfix release though if any more bugs are found and fixed I'll likely tag
another in a month or so. Thank you all for the bug reports and patches!

Full changelog:

Alexander Courtis (1):
      wlr-output-management: apply adaptive sync state

Isaac Freund (6):
      build: bump version to 0.2.4-dev
      session-lock: fix assertion failure on hot-plug while locked
      docs: fix typos in riverctl man page
      docs: remove repology badge from readme
      Seat: guard setFocusRaw() usage while locked
      build: bump version to 0.2.4

river 0.2.3

23 Jan 13:10
v0.2.3
f91ef2c
Compare
Choose a tag to compare

This release fixes a handful of bugs. Notably, dropdown menus and
similar should work more reliably for X11 clients using the Xwayland
compatibility layer. Thank you all for the bug reports and patches!

Full changelog:

Hugo Machet (1):
      View: fix pointer comparison in notifyTitle()

Isaac Freund (7):
      build: bump version to 0.2.3-dev
      deps: update zig-wayland to fix build on aarch64
      Seat: rework Xwayland Override Redirect focus
      command/layout: fix a memory leak
      session-lock: properly handle disabled outputs
      idle-inhibit: fix use-after-free
      build: bump version to 0.2.3

Zakariyya Von Forslun (2):
      Seat: keep parent Xwayland view of a focused OR surface activated
      Cursor: fix incorrect lock manager state assertion

river 0.2.2

08 Jan 16:18
v0.2.2
cb020a3
Compare
Choose a tag to compare

This release updates the Zig version required to 0.10. Other than that,
there are no changes since version 0.2.1.

Full changelog:

Isaac Freund (4):
      build: bump version to 0.2.2-dev
      deps: update to Zig 0.10
      flags: further cleanup after Zig 0.10
      build: bump version to 0.2.2

river 0.2.1

08 Jan 15:07
v0.2.1
4007d66
Compare
Choose a tag to compare

This release contains a handful of bugfixes and minor improvements that
didn't quite make it in to the 0.2.0 release. Thank you all for the
bug reports and patches!

Full changelog:

Hugo Machet (1):
      ci: Use meson setup command

Isaac Freund (7):
      build: bump version to 0.2.1-dev
      rivertile: fix code to disallow 0 main count
      session-lock: wait for present before locking
      session-lock: fix assertion failure due to race
      session-lock: fix assertion failure on abnormal client behavior
      render: fix rounding for fractional scaling
      build: bump version to 0.2.1

Leon Henrik Plickat (1):
      completions: add keyboard-layout

MaxVerevkin (1):
      render: premultiply alpha for user-provided colors

alex (1):
      river: fix bug in snap down / right

river 0.2.0

02 Jan 00:48
v0.2.0
4d8f816
Compare
Choose a tag to compare

river 0.2.0

This release brings many new features and improvements, as well as a few
small breaking changes since river 0.1. Many thanks to everyone who
contributed and happy New Year!

New features:

  • Touch input is supported for clients that accept touch input. No
    pointer emulation is implemented yet.
  • ext-session-lock-v1 is supported. This is a more robust protocol for
    screenlocking that I developed earlier this year. See this blog
    post
    for more information.
  • ext-idle-notify-v1 is supported. This replaces the KDE idle
    protocol, support for which has been removed.
  • riverctl focus-output and riverctl send-to-output may target an
    output by name.
  • riverctl map has a new -layout flag which may be used to map keys
    independent of the currently active keyboard layout.
  • riverctl keyboard-layout allows setting the keyboard layout and xkb
    options at runtime.
  • riverctl map-switch allows running a command when e.g. a laptop
    lid is closed.
  • riverctl map-pointer may run arbitrary commands.
  • riverctl focus-follows-cursor has a new always mode.
  • riverctl set-cursor-warp has a new on-focus-change mode.
  • The cursor may be (automatically) hidden with the new
    riverctl hide-cursor command.
  • Keyboard groups are now supported with the new
    riverctl keyboard-group-create and related commands.
  • wlr-output-management-unstable-v1 version 4 is now implemented,
    which means that adaptive sync or VRR may be enabled using a suitable
    client.
  • wp-single-pixel-buffer-v1 is supported.
  • The river-status-unstable-v1 protocol has been extended to expose
    the current mode and layout name to clients such as status bars.
  • The river-layout-v3 protocol has been extended to expose the
    currently active tags when a command is sent to the layout generator
    client.

Breaking changes compared to 0.1:

  • Input device names are now prefixed with the device type 422cd3e.
  • The riverctl spawn-tagmask command applies globally 39104ae.
  • Support for the input-inhibit protocol has been removed 78a46c3.
    Lock screens should now use ext-session-lock-v1
  • Support for the org_kde_kwin_idle protocol has been removed
    6ac3928. The ext-idle-notify-v1 protocol should be used instead.

Packaging changes:

  • wlroots 0.16 is required as a build dependency instead of 0.15.
Full changelog
Aiz (1):
      river-status: fix typo in layout_name_clear description

Alexander Courtis (1):
      map-pointer: allow running arbitrary commands

Andrea Feletto (1):
      river: support wp-single-pixel-buffer-v1

Campbell Barton (1):
      contrib: mention default-layout command in FAQ

Daniel Eklöf (3):
      completions: zsh: new completions for the ‘hide-cursor’ command
      completions: bash: new completions for the ‘hide-cursor’ command
      completions: fish: new completions for the ‘hide-cursor’ command

Duncan Overbruck (1):
      Cursor: Add a hide-cursor command

Hugo Machet (10):
      docs: update zig version required in readme
      rivertile: Use saturating addition
      command/map: Warn users on keybinding overwritten
      Xwayland: Handle minimize request
      ci: Add sourcehut builds
      Mode: Use ArrayListUnmanaged to save memory
      code: Cleanup use of std library for consistancy
      command: Remove allocator arg
      ci: Update to zig 0.9.1
      ci: Fix builds manifests

Isaac Freund (95):
      build: bump version to 0.2.0-dev
      docs: clarify description of dependencies
      docs: remove reference to /etc/river/init
      Cursor: fix pointer drags with focus-follows-cursor
      Cursor: add workaround in pointer drag termination
      layer-shell: tighten up handling of large margins
      common/flags: make argFlag() return a slice
      river: update to wlroots 0.15.0
      Cursor: dedup XcursorManager.setCursorImage() calls
      layer-shell: fix regression from wlroots 0.15 update
      ci: update for wlroots 0.15.0
      Cursor: properly handle clients setting the cursor image
      Subsurface: add commit listener on create if mapped
      river: remove wlroots 0.14 workarounds
      docs: soften the README disclaimer a bit
      build: update to zig version 0.9.0
      Cursor: fix down mode motion events for subsurfaces
      Xwayland: move window to top of X11 stack on focus
      Seat: do a better job of cleaning up listeners
      Cursor: remove minor outdated workaround
      XdgPopup: fix unconstrain from box coords
      command/map: add Alt/Super as aliases for Mod1/Mod4
      example/init: Use Alt/Super aliases
      docs: fix typo in river(1) man page
      XdgPopup: remove commit listener on destroy if mapped
      layer-shell: center when opposing anchors are set
      wlr-output-management: simplify implementation
      ci: run on 0.1.x branch
      code: relicense to GPL-3.0-only
      View: fix/simplify logic in applyPending()
      View: use last set fullscreen state in applyPending()
      rivertile: properly validate -main-ratio flag
      rivertile: use u31s to remove most @intCast()s
      DragIcon: Properly initialize if already mapped
      doc: Add additional style rule to CONTRIBUTING.md
      layer-shell: allow surfaces larger than the output
      layer-shell: fix overflow with large bottom margin
      Cursor: Don't passthrough() on update if hidden
      ci: make wget output non verbose
      deps: update to latest zig-wayland
      layer-shell: fix overflow if desired size exceeds output bounds
      build: follow semantic versioning for -dev versions
      Output: remove overzealous assert
      build: add -Dstrip and -Dpie build options
      docs: create PACKAGING.md
      docs: expand on -Dcpu in PACKAGING.md
      docs: add note on example init file to PACKAGING.md
      Xwayland: handle override redirect state changes
      View: refactor initialization
      ci: fix xbps invocation
      Xwayland: Rename XwaylandUnmanaged to XwaylandOverrideRedirect
      river-status: add mode event to seat status
      river-status: only send mode event if client bound version 3
      Cursor: revive 'always' focus-follows-cursor mode
      build: don't scan xdg-output
      example/init: don't use exec
      InputDevice: move to separate file
      InputDevice: use "switch" in input device names
      Seat: refactor InputDevice handling
      Cursor: implement initial touch support
      deps: update to latest zig-wlroots
      Xwayland: fix View.fromWlrSurface for OR surfaces
      deps: update to latest zig-wlroots
      ci: explicitly install libevdev
      Seat: send enter event on keyboard device creation
      river: fix SIGPIPE handling, cleanup fork/execve
      layout: only arrange on user command if layout is active
      layer-shell: start transaction on map
      river: refactor keyboard groups implementation
      river: update to wlroots 0.16
      ci: update to wlroots 0.16.0 and wayland 1.21.0
      ci: remove Void Linux CI
      input-inhibit: remove support for protocol
      ext-session-lock: implement protocol
      session-lock: add basic logging
      session-lock: send wl_pointer.enter immediately
      deps: update to latest zig-wlroots
      example/init: run rivertile in background
      map-pointer: minor fixes and cleanups
      river-layout: fix version of layout_name events
      View: honor fullscreen requests before map
      build: handle wlroots built without xwayland support
      idle: support ext-idle-notify-v1, drop KDE protocol
      flags: rewrite to allow [:0]const u8 arguments
      command/keyboard-layout: use flags.zig, cleanup
      docs: improve keyboard layout documentation
      command/map: use flags.zig, cleanup
      flags: automatically prepend '-'
      session-lock: fix potential race
      Config: use a single xkb keymap for all keyboards
      touch: support drag and drop
      layout: fix size of CSD views
      river-control: update zig-wayland to fix leak
      command/spawn-tagmask: apply globally
      build: bump to version 0.2.0

Jackson Abascal (1):
      input: fix typo in natural-scroll

Jan Evers (1):
      example/init: fix typos

Justin Wood (1):
      docs: Fix typo in readme

Leon Henrik Plickat (13):
      Cursor: improve output focus handling on button press
      Cursor: update image if needed on xcursor theme change
      input: keep applying input configs after first match
      input: Improve input device name format
      rivertile: Use saturating arithmetics to prevent over-/underflow when using user defined values
      river: error out if default init is not executable
      river: keep floating views within bounds when sending to output
      river-layout: add user_command_tags event
      river: advertise correct version of layout protocol
      river: add keyboard groups
      river-status: expose current layout name
      river: add keyboard-layout command
      river: fix resize command

Leonardo Gibrowski Faé (1):
      docs: fix typo in river(1) man page

MaxVerevkin (2):
      river-status: correctly advertise version 4
      river-control: mark callback events as destructors

Nick Hastings (1):
      contrib: add desktop file

Peter Kaplan (4):
      input: add map-switch/unmap-switch commands
      command/hide-cursor: fix crash on missing option
      command/map: layout-pinned mappings
      Mapping: Do not translate keys with xkb

Wannes De Meyer (1):
      docs: fix wlroots link in readme

Zakariyya Von Forslun (5):
      xwayland-unmanaged: handle focus on map/cursor button
      cursor: fix Xwayland unmanaged surfaceAt coordinates
      Xwayland: add handling of override redirect listeners
      Cursor: fix focus for Xwayland override redirect windows
      Xwayla...
Read more

river 0.1.3

05 Feb 18:20
v0.1.3
a959d09
Compare
Choose a tag to compare

This release contains many bug fixes and a few small improvements. Thank
you to all our users for the bug reports!

River's license has also been changed from GPL-3.0-or-later to GPL-3.0-only.

Full changelog:

Hugo Machet (4):
      docs: update zig version required in readme
      rivertile: Use saturating addition
      command/map: Warn users on keybinding overwritten
      Xwayland: Handle minimize request

Isaac Freund (17):
      build: bump version to 0.1.3-dev
      Cursor: fix down mode motion events for subsurfaces
      Xwayland: move window to top of X11 stack on focus
      Seat: do a better job of cleaning up listeners
      Cursor: remove minor outdated workaround
      XdgPopup: fix unconstrain from box coords
      command/map: add Alt/Super as aliases for Mod1/Mod4
      example/init: Use Alt/Super aliases
      docs: fix typo in river(1) man page
      XdgPopup: remove commit listener on destroy if mapped
      layer-shell: center when opposing anchors are set
      wlr-output-management: simplify implementation
      ci: run on 0.1.x branch
      code: relicense to GPL-3.0-only
      View: fix/simplify logic in applyPending()
      View: use last set fullscreen state in applyPending()
      build: bump version to 0.1.3

Justin Wood (1):
      docs: Fix typo in readme

Leon Henrik Plickat (2):
      Cursor: update image if needed on xcursor theme change
      input: keep applying input configs after first match

Nick Hastings (1):
      contrib: add desktop file

river 0.1.2

24 Dec 05:44
v0.1.2
0c26a49
Compare
Choose a tag to compare

This release updates the Zig version required to 0.9.0. Other than that,
there are no changes since version 0.1.1.

Full changelog:

Isaac Freund (3):
      build: bump version to 0.1.2-dev
      build: update to zig version 0.9.0
      build: bump version to 0.1.2