Skip to content

river 0.3.0

Latest
Compare
Choose a tag to compare
@ifreund ifreund released this 16 Apr 12:29
· 7 commits to master since this release
v0.3.0
d3178ae

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: eliminate an @intCast()
      Cursor: use inflight_mode as needed in updateState()
      XdgToplevel: tweak fullscreen state policy
      pointer-constraints: fix assertion failure
      rules: rename "tag" action to "tags"
      xdg-toplevel: ignore redundant move/resize requests
      river: remove dead code
      View: handle map while no outputs are available
      Cursor: clamp cursor movement to resize bounds
      Cursor: fix high polling rate resize regression
      session-lock: fix pointer focus handling on map
      build: update to wlroots 0.17
      SceneNodeData: fix fromNode()
      Output: fix regression of initial mode logic
      Root: fix faulty assertion, cleanup
      Output: fix initial commit for wayland backend
      ci: fix arch and alpine
      build: fix comment on scanner.generate() versions
      deps: update to lastest zig-wlroots
      gamma-control: track wlroots 0.17 changes
      output-management: fix output config application
      output-management: work around wlroots crash
      build: require at least wlroots 0.17.1
      TextInput: remove pending_focused_surface
      TextInput: handle multiple text inputs correctly
      TextInput/InputRelay: style nits
      TextInput: fix consecutive enable requests
      Keyboard: clarify keypress routing logic
      XdgToplevel: fix frame perfection on unmap
      river: drop support for wl_drm
      linux-dmabuf: send better per-surface feedback
      xdg-activation: fix race with transaction system
      Cursor: clean up cursor theme loading
      Keyboard: delete some uneeded code
      Output: fix possible crash on destroy
      river: re-add wl_drm support for now
      Keyboard: fix mapping XF86ScreenSaver
      Seat: fix potential crash in handleMapping()
      Root: remove unneeded fallback.inflight lists
      Root: fix stack order on restore from 0 outputs
      river: log version during startup
      Keyboard: check translated keysyms for mappings
      Keyboard: don't send enter before keymap event
      river: fix -log-level filtering
      Root: use Output.PendingState for fallback
      attach-mode: code/documentation style tweaks
      xdg-toplevel: handle destroy before xdg-decoration
      command/zoom: always warp cursor if configured
      View: clip scene tree to output
      XdgToplevel: handle configure timeout gracefully
      View: don't clip off CSD shadow and the like
      Keyboard: style/naming nits and comment tweaks
      Keyboard: ignore >32 simultaneous key presses
      command/input: cleanup memory manangement a bit
      command/map: remove references to locked mods
      Root: trival code cleanup in deactivateOutput()
      InputConfig: simplify libinput API usage
      XdgToplevel: handle timed out state in configure()
      Root: fix crash on output disable
      Root: fix crash on deinit()
      rules: fix assertion failure
      XdgToplevel: work around buggy clients
      InputConfig: code style cleanups
      output-management: fix output destroy handling
      Root: fix auto-layout output coordinates
      linux-dmabuf: disable per-surface feedback
      deps: update to latest zig-wayland and zig-wlroots
      river: only expose xwayland_shell_v1 to Xwayland
      mailmap: map Isaac's old email to the new one
      build: enable frame pointers in release safe
      View: clean up attach-mode code, add assert
      Root: reduce transaction timeout to 50ms
      View: remove faulty assertion
      tablet-v2: implement tablet tool support
      build: require wlroots version 0.17.2
      deps: switch to codeberg upstreams, update
      View: improve transaction timeout handling
      View: fix SSD desync on consecutive timeouts
      Server: clean up initialization
      Layout: eliminate "self" naming convention
      Root: eliminate "self" naming convention
      Seat: eliminate "self" naming convention
      Output: eliminate "self" naming convention
      View: eliminate "self" naming convention
      Cursor: eliminate "self" naming convention
      XdgToplevel: eliminate "self" naming convention
      XwaylandView: eliminate "self" naming convention
      Mapping: eliminate "self" naming convention
      XwaylandOverrideRedirect: eliminate "self" naming convention
      InputManager: eliminate "self" naming convention
      Keyboard: eliminate "self" naming convention
      Config: eliminate "self" naming convention
      LayoutManager: eliminate "self" naming convention
      idle-inhibit: fix naming, eliminate "self" naming convention
      InputConfig: eliminate "self" naming convention
      SeatStatus: eliminate "self" naming convention
      StatusManager: eliminate "self" naming convention
      PointerMapping: eliminate "self" naming convention
      LayoutDemand: eliminate "self" naming convention
      Mode: eliminate "self" naming convention
      Control: eliminate "self" naming convention
      SwitchMapping: eliminate "self" naming convention
      Switch: eliminate "self" naming convention
      Vector: eliminate "self" naming convention
      RuleList: eliminate "self" naming convention
      Server: remove all listeners on deinit()
      pointer-gestures: move to input manager
      security-context: implement protocol
      XdgToplevel: validate move/resize request serial
      touch: handle cancel event, fix assertion failure
      deps: update zig-wayland for a minor cleanup
      Root: increase transaction timeout to 100ms
      View: fix potential assertion failure on destroy
      layer-shell: crop surfaces to output bounds
      docs: migrate to codeberg
      command/map: add note about upstream xkbcommon fix
      codeberg: add bug report issue template
      codeberg: maybe fix issue template
      codeberg: maybe fix issue template take 2
      docs: update wiki url
      docs: update release urls for codeberg migration
      logo: add an official river logo
      docs: update README stability disclaimer
      docs: fix typo in previous commit
      ci: migrate to codeberg
      View: always check if current.output is null
      logo: use adaptive color/no background for readme
      View: fix assertion failure if focused while destroying
      Output: fix possible assertion failure on enable
      Root: fix leak on view destroy
      View: add more assertions around destruction
      river: raise the file descriptor limit
      docs: add Code of Conduct
      docs: fix broken link in coc
      docs: fix another broken link in the coc
      logo: make readme logo bigger on small displays
      docs: redefine Code of Conduct scope
      docs: update URL in man pages
      layer-surface: close if exclusive zones too large
      input: minor fixes and cleanups for scroll-factor
      docs: freshen up readme with text from website
      docs: remove website url at top of readme
      build: bump version to 0.3.0

István Donkó (2):
      keyboard: add the ability to load layout from file
      input: add scroll-factor configuration

Leon Henrik Plickat (16):
      completions: add keyboard-layout
      riverctl: Add error messages for failed connections
      river: allow settings child type of RuleList
      river: change order of colums in list-rules command
      river: add tags rule
      river: fix crash when trying to add tag rule without tag argument
      river: focus-view and swap by spatial direction
      river: fix spatial direction focusing / swapping
      Keyboard: Add new keyboards to groups if matched
      keyboard-groups: use globber for identifier matching
      refactor input configuration
      river: fix names of input config settings
      command/input: support globs
      View: restore to previous output on reconnect
      TabletTool: use "pencil" cursor shape
      command/focus-view: add -skip-floating

LordMZTE (2):
      river: clear up docs on -c parameter
      command/input: add map-to-output

MaxVerevkin (4):
      render: premultiply alpha for user-provided colors
      river: Implement fractional_scale_v1
      Cursor: actually set xcursor_name
      river: Implement cursor_shape_v1

Orfeas (1):
      attach-mode: implement after <N>

Pablo Ovelleiro Corral (1):
      command/send-to-output: add -current-tags flag

Peter Kaplan (3):
      command/attach-modes: above and below options
      completions/zsh: Update attach-modes
      View: Add attachRelative function

Sage Hane (1):
      editorconfig: fix typo

Väinö Mäkelä (1):
      XdgToplevel: keep wlroots updated on view sizes

Wouter van Heijst (1):
      Cursor: Focus follows cursor focuses empty outputs

Yutaro Ohno (1):
      README: update required wlroots version to 0.17.2

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

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

polykernel (2):
      river: add position and dimensions rules
      river: add fullscreen rule

praschke (5):
      river: Implement input_method and text_input
      input-method: setKeyboard already sends modifiers
      input-method: send text-input enter event after all leave events
      input-method: check that the input method is active when committing
      input-method: address nits

tiosgz (19):
      Server: remove debug leftover
      river: update some comments
      Root: rename field outputs to active_outputs
      Root: make 'fallback output empty' assertion stricter
      Root: migrate {all,active}_outputs to wl.list
      Root: fix inflight_layout_demands counting
      Cursor: keep focus_follows_cursor_target updated
      riverctl: rule-{add,del}: reorder parameters
      completions/fish: partial overhaul
      completions/bash: complete input devices, fix typos
      editorconfig: reflect state of bash completion
      riverctl(1): add a section on terminology
      Keyboard: fix key handling/eating logic
      Keyboard: eat key before running mapping
      KeycodeSet: move to Keyboard.zig
      Keyboard: rework key processing semantic
      deps: update zig-wlroots
      Keyboard: don't crash when coming from a different tty
      Keyboard: ignore multiple presses of a key