Skip to content

Monitor actions and paged Scroll (0.91.17–0.91.23) - #23

Merged
Fi3w0 merged 7 commits into
masterfrom
feat/focus-column-or-monitor
Nov 2, 2026
Merged

Fi3w0 merged 7 commits into
masterfrom
feat/focus-column-or-monitor

Conversation

@Fi3w0

@Fi3w0 Fi3w0 commented Nov 2, 2026

Copy link
Copy Markdown
Owner

Layer 2 multi-monitor actions plus paged Scroll, 0.91.17–0.91.23.

Monitor actions

  • focus-monitor-left/right/up/down, focus-monitor:<name> — restore the destination's last window; pointer follows (0.91.17).
  • move-window-to-monitor-* / :<name> — focus and pointer follow; groups, pins, float size, fullscreen/maximize return travel (0.91.18).
  • move-column-to-monitor-* / :<name> — Scroll only; rows, weights, width share and selected row travel (0.91.19).
  • move-workspace-to-monitor-* / :<name> — Classic/Scroll; keeps the number if free, else first free slot (0.91.20).
  • focus-column-or-monitor-left/right, focus-window-or-monitor-up/down — directional focus, monitor handoff at strip ends; all engines (0.91.21).

Paged Scroll

  • scroll { pages = true } (off by default): a page is a column holding at most two windows side by side along the strip; new window = new page; nothing moves between pages automatically; scroll-left/right flips pages (0.91.22).
  • Pages keep tile_proportion and center_focused (neighbors peek; 1.0 = full-screen pages) and the view always settles on a whole page except during a touchpad swipe (0.91.23).

Verification

  • Four gates at 0.91.23: 766 tests (734+23+9), fmt, strict Clippy (all-features and default), locked all-feature release build.
  • Real-protocol multi-output fixtures for every monitor action; layout fixtures for pages in both orientations.
  • Native on two monitors (DP-4 1920x1080 + HDMI-A-2 2560x1440 @1.25): all monitor actions driven over IPC and watched by the maintainer; pages enabled in the maintainer's real config on 0.91.23, confirmed working.
  • Not covered: physical keybind presses for the new actions (none bound by default), drag-and-drop preview look in page mode.

Fi3w0 added 7 commits October 30, 2026 18:33
Select neighboring monitors from live logical geometry and restore recent window focus. Move the pointer onto the restored window, preserving Ocean views and supporting shared cameras. Guard lock, exclusive layers and active pointer interactions.

Add real-protocol multi-output coverage across all three engines and document 0.91.17. All 751 tests, fmt, both strict Clippy variants, debug/release builds and a private rendered CLI smoke pass. Native multi-monitor pointer verification remains pending.
Add directional and named monitor transfers using live logical geometry and the focused window's own output. Follow focus and pointer, preserve group and pin ownership, Scroll width proportions and floating/fullscreen/maximized restore geometry.

Share tile-transfer and pointer handoff primitives, refresh Space membership before hit-testing, and handle pending client resize buffers. Reveal off-camera Ocean reefs with existing navigation behavior.

All 753 tests, fmt, both strict Clippy variants, debug/release builds and private rendered CLI smoke pass. Multi-output behavior has real-protocol coverage; native transfer appearance and physical input remain unverified.
Transfer whole columns to the destination active workspace, keeping row order, height weights, width proportion, selected row, tab groups and output pins. Focus and pointer follow; floating selection delegates to the window transfer.

Publish moved members after column reconstruction so IPC snapshots contain final column positions and sizing. Reuse live topology and preserve existing window/drop guards, fullscreen ownership and normal restore records.

All 755 tests, fmt, both strict Clippy variants, debug/release builds and private rendered CLI smoke pass. A real IPC subscriber and multi-output Wayland fixture cover the column transaction; native transfer appearance and physical input remain unverified.
Preserve the workspace number when free, otherwise choose the first free normal slot. Transfer the complete layout, Scroll view and parked owners, then follow focus and pointer. Keep sticky floaters on their monitor unless fullscreen suspends the pin.

Validate 761 tests, formatting, strict all-feature and default Clippy, debug and optimized builds, and a rendered three-client CLI smoke test. Native multi-monitor appearance and input remain pending.
Add focus-column-or-monitor-left/right and focus-window-or-monitor-up/down
(niri names). They run ordinary directional focus and, when focus does not
move or nothing is focused, focus the monitor on that side from the
focused window's monitor. All engines; Classic/Scroll directional focus
that lands on another monitor also moves the pointer.
scroll { pages = true } makes every Scroll column one page, exactly one
viewport long, holding at most two windows split along the strip. New
windows open a new page, the camera shows whole pages, scroll-left/right
flips pages, and windows only change pages through swap, consume or drag.
Along-strip resize moves the divider within a 20% limit.
Pages are ordinary column widths again, so tile_proportion, presets and
center_focused still apply and neighbor pages peek in; tile_proportion 1.0
keeps full-screen pages. The view settles on a whole page (centered when
centering applies) except while a touchpad swipe pans the strip, and
scroll-left/right flips between those page views.
@Fi3w0
Fi3w0 merged commit 4c86882 into master Nov 2, 2026
1 check passed
@Fi3w0
Fi3w0 deleted the feat/focus-column-or-monitor branch November 2, 2026 14:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant