Skip to content

v0.8.0

Latest

Choose a tag to compare

@github-actions github-actions released this 22 Jul 15:15
· 3 commits to main since this release
v0.8.0
aac906e

Fixed

  • Launch no longer resets compositor idle timers; pointer parking is now
    opt-in via CURSOR_WARP (default false) (#4).
    The post-launch warp
    injects virtual-pointer motion, and niri routes wlr-virtual-pointer (wlrctl)
    and uinput (ydotool) events into process_input_event, which reports every
    pointer event to ext-idle-notify-v1 as activity (niri src/input/mod.rs;
    window opening and focus changes never notify activity, so issue #4's
    focus/enter hypothesis was wrong). Each launch therefore reset every idle
    daemon timer: the flash-and-die from #4 was this reset arriving as
    resumeCommand, and idle stages after the screensaver (lock, screen off)
    fired one screensaver-threshold late. With the warp off, launch generates no
    activity and downstream stages fire on schedule. Hide the pointer with
    niri's cursor { hide-after-inactive-ms 500 } instead; set
    CURSOR_WARP="true" to restore parking. New plugin setting cursorWarp
    (default off) writes the key. The launch/kill debounce stays as a guard for
    warp-enabled setups.

Added

  • Mirror mode: automatic canvas fit on mismatched-resolution monitors
    (#24).
    Mirror now sizes the shared tte canvas to the smallest output's
    cell grid by default — no config needed — so mismatched-resolution monitors
    render byte-identical out of the box (previously you had to set
    MIRROR_CANVAS_COLS/ROWS by hand; #14). The launcher can't measure cell
    metrics without a terminal, so each mirror surface records its cell grid to a
    .cell-metrics cache the launcher reads next launch; the first run on a new
    monitor or font layout calibrates and applies the fit from the next launch.
    Matched-resolution setups are unchanged (the fit equals the full-screen
    canvas, so it's skipped), and an explicit MIRROR_CANVAS_COLS/ROWS still
    wins. When the auto-fit box is smaller than the shared logo it's used anyway
    with a warning, since it must fit the smallest output.
  • Mirror mode: pixel-identical rendering across mismatched-resolution
    monitors (#14).
    Two new config keys, MIRROR_CANVAS_COLS and
    MIRROR_CANVAS_ROWS, lock tte's canvas to a fixed cell box in mirror mode
    (--canvas-width/--canvas-height, centered via the --anchor-canvas c
    already passed at every call site). Because the animated region is then the
    same cell grid on every output, tte's deterministic RNG renders
    byte-identical animations even when the monitors differ in resolution —
    previously mirror only matched on equal-resolution outputs and otherwise
    played the same effect with a different layout. Manual override of the
    automatic fit above: both must be positive integers to take effect; a blank,
    garbage, or half-set value defers to the auto-fit. Like MIRROR_INTERVAL,
    it's an advanced config-file knob and is not surfaced in the Noctalia plugin
    UI.

Fixed

  • Driver dropped options passed after the command word. main() stopped
    parsing at the first positional, so niri-screensaver run --seed N --logo X
    — exactly how the launcher spawns each surface — silently discarded --seed
    and --logo. Mirror mode therefore never received its shared seed and fell
    back to independent per-monitor RNG on real hardware (it had only been
    mock-tested). Options are now parsed in any position; the command is the first
    positional and an effect name the second. This is what makes mirror's shared
    seed/logo (and the #24 canvas flags) actually reach tte.