v0.1.10

niri-wm/niriv0.1.10Nov 9, 2024by YaLTeR

AI Summary

Adds interactive window moving, pointer hiding, and improved input configuration.

Key Highlights

  • Interactive window moving by dragging
  • Pointer location hint request
  • Laptop lid and tablet mode switch bindings
  • Pointer hiding options (typing/idle)

New Features

  • Interactive window moving
  • Locked pointer location hint
  • Lid/tablet mode bindings
  • Pointer hiding options
  • Input config improvements (trackball, scroll-button, scroll-factor)
  • Desktop icons support (LXQt/Xfce)

Full Release Notes

Niri is a scrollable-tiling Wayland compositor. Windows are arranged in columns on an infinite strip going to the right. Opening a new window never causes existing windows to resize.

Here are the improvements from the last release.

## Interactive window moving

While not full-blown floating window support quite yet, this is an important step towards that. You can now move windows by dragging them by title bars, or anywhere while holding <kbd>Mod</kbd>.

https://github.com/user-attachments/assets/b0c36fc3-d4ca-459b-819b-fc7ee223a3d7

To prevent accidental layout changes, the windows rubber-band a little before you drag them out.

https://github.com/user-attachments/assets/7c50c95b-56fe-4d21-b659-ad8cd7f4fad7

Furthermore, I made both interactive moving and resizing work on a touchscreen.

https://github.com/user-attachments/assets/275f27fd-8c26-40a9-82c9-0cd975a96688

Thanks to @Pajn for implementing a fairly complete proof-of-concept of this feature!

## Locked pointer location hint

@sodiboo implemented the pointer location hint request. Apps like Blender use it to tell the compositor the final location after a locked pointer movement so that the compositor can update its own pointer location to match it.

https://github.com/user-attachments/assets/76e92efb-7c93-4b1f-876e-fbc61912f7ea

## Laptop lid and tablet mode switch bindings

Thanks to @cmeissl, you can now bind commands to laptop lid opening/closing and tablet mode switching. You can use this to automatically enable an on-screen keyboard when a convertible laptop enters tablet mode. See the [switch events wiki page](https://github.com/YaLTeR/niri/wiki/Configuration:-Switch-Events) for more information and examples.

Additionally, I implemented disabling of the internal laptop monitor when closing the lid. So your workspaces will automatically move to the external screen. If for some reason this breaks for you, set the new `keep-laptop-panel-on-when-lid-is-closed` [debug config](https://github.com/YaLTeR/niri/wiki/Configuration:-Debug-Options) flag.

## Pointer hiding

@yzy-1 implemented new cursor hiding options: hide when typing (on any key press), and hide after a set inactivity period. See [the wiki page](https://github.com/YaLTeR/niri/wiki/Configuration:-Miscellaneous#hide-when-typing) for more details.

```kdl
cursor {
    hide-when-typing

    // Or, after a timeout:
    // hide-after-inactive-ms 1000
}
```

To complement this, there are a few improvements to the hidden pointer behavior. The pointer will now show up on mouse button press, and on the contrary, it will stay hidden on programmatic and keyboard-triggered movement, like focusing a different monitor, or when using `warp-mouse-to-focus`.

## Input configuration improvements

Thanks to @tazjin, @chillinbythetree and @elipp for:

- Adding a `trackball` input config section.
- Adding a `scroll-button` setting to mice, touchpads, trackpoints, and trackballs.
- Adding a `scroll-factor` setting to mice and touchpads that you can use to speed up or slow down scrolling.

See the [input config wiki page](https://github.com/YaLTeR/niri/wiki/Configuration:-Input#pointing-devices) for more information.

## Other improvements in this release

- Tablet input no longer follows the monitor rotation: you need to rotate your graphics tablet together with your monitor. This makes convertible laptops work properly; this is also how input works on other desktop environments. Thanks @cmeissl.
- The GTK Access portal is now explicitly set in `niri-portals.conf`, which makes it work. It is required for applications requesting PipeWire webcam and microphone access, such as the Firefox package on Fedora 41. Thanks @cmeissl.
- The `niri-ipc` crate is now [published to crates.io](https://crates.io/crates/niri-ipc).
- Active workspace is now preserved across monitor disconnects and reconnects.
- Added a window `--id` argument to `niri msg action consume-or-expel-window-left/right` and to the IPC.
- Added an explicit `power-on-monitors` action that can be useful with certain hardware. Niri still automatically powers on monitors on any input event.
- Added support for running niri as a dinit service: files in `resources/dinit/` and corresponding code in `niri-session` (thanks @markK24).
- Added a `disable-monitor-names` [debug config](https://github.com/YaLTeR/niri/wiki/Configuration:-Debug-Options) flag as a workaround for niri crashing when plugging in two monitors reporting the exact same make/model/serial. This issue is tracked in #734.
- The focused window will now become visually inactive when a layer-shell app in front has keyboard focus.
- Fixed `focus-window-up-or-column-right` focusing left instead of right.
- Fixed an animation jump when expelling a narrower window from a column with uneven window widths.
- Fixed the logind power key inhibit file descriptor leaking into processes spawned by niri.
- Fixed window close view position restoration triggering for windows that didn't get focused upon opening.
- Fixed a crash when an output disappears immediately after connecting.
- Fixed used xdg-activation token memory leak.
- Fixed lock screen clients hanging until a monitor is enabled when no monitors are enabled.
- Updated Smithay:
    - Fixed memory leak when locking the screen.
    - Fixed occasional visual freezing of GTK and other apps.
    - Fixed a regression that made it so increasing the output scale in niri v0.1.9 didn't propagate to some clients, keeping them blurry.