Skip to content

Releases: Plyply99/Plaid

v51.17

Choose a tag to compare

@Plyply99 Plyply99 released this 29 Sep 16:24

v51.17

What's fixed

  • Lingering scratchpad border — Fallout 76 Quick Configuration (and similar apps) used to keep their yellow scratchpad border after being removed from the scratchpad. It now cleans up properly.
  • Scratchpad key going silent — on some logins the scratchpad shortcut randomly stopped working. Plaid now notices when it clashes with a GNOME shortcut, tells you in plain language, and can fix it with one click.

New for fresh installs

  • New default scratchpad shortcuts: Shift+Super+S to stash a window away, Ctrl+Super+S to bring your scratchpads back — chosen so they don't step on anything GNOME uses.

Good to know

  • Your shortcuts stay exactly as they are. The new defaults only apply to brand-new installs — existing setups are untouched. (Tiny exception: if you've never changed a single Plaid setting, you'll get the new shortcuts above — rebind in Preferences → Keybindings if you'd rather keep the classic ones.)
  • While Plaid runs, a few GNOME shortcuts (like Super+H for minimize) politely step aside — but only when Plaid is actually using that key. They come back if you turn Plaid off.
  • Changed your mind about GNOME's Super+Shift+Escape? Run gsettings reset org.gnome.mutter.keybindings cancel-input-capture to get it back.

v51.16

Choose a tag to compare

@Plyply99 Plyply99 released this 29 Sep 11:20

v51.16

Scratch layer fix + the floating double-border resolution.

Highlights

  • Scratch layer fixed — "Add to Scratchpad did nothing" (no popup, no minimize, no ring): the late-identity force-reveal (meant for spawn-hidden windows) was un-minimizing scratch windows within milliseconds of the add — GTK re-applies titles on state changes, so any identity/title notify undid the hide instantly. Registered-late floats (e.g. nautilus, which is float-listed yet registered) were the affected class. The reveal now skips deliberately minimized windows; spawn-hidden windows still reveal as intended. Also converted _scratchpadRemove's silent catch into a logged scratch remove failed: (it had been swallowing toggle-off errors with no trace)
  • Double border on floating XWayland windows fixed — the exactly-one-border client-type rule (after two failed earlier attempts): Wayland + rounded corners → the SDF is the sole border (the widget is captured and clipped by the mask, and its creation raced the mask — the DDT border flip-flop, also fixed); X11 → the widget is the border when its stroke fits the allocation (shadowed windows), the SDF for zero-shadow electron windows (Steam's Special Offers); childless X11 windows get a widget placeholder that swaps seamlessly to the SDF when the surface attaches — no double, no borderless gap
  • Widget borders animate now — they were drawn via Clutter's queue_redraw(), which repaints the cached texture without running the cairo handler; the gradient rotation never fired (masked by the SDF being the visible border on masked windows). Now invalidated via the DrawingArea's own queue_repaint() — widget gradients rotate like the SDF borders

Diagnostics (enable Debug Logging in prefs to view)

  • float reveal skipped (minimized) / scratch add: after minimize… / popup shown: <title> / mask uniforms: … — the probes that diagnosed this round

Notes

  • The scratch ring for Wayland windows now draws via the SDF (just inside the border) instead of the outer widget ring — single ring, consistent with the exactly-one-border rule
  • The Steam login-popup double border falls under the fixed client-type rule

Known limitations (upstream, unchanged)

  • Steam/XWayland content-loss on workspace round-trips (steam-for-linux#10869)
  • eframe/wgpu apps have no rounded corners (content bypasses Clutter's paint pipeline)

v51.15

Choose a tag to compare

@Plyply99 Plyply99 released this 28 Sep 22:56

v51.15

The GNOME 50/51 API audit, the stacking rework, and two cleanup batches.

Highlights

  • API audit — features that never worked, now fixed:
    • The float re-assert was dead for years (global.window_group.get_child_index() doesn't exist in GNOME 50/51 — the helper threw, silently swallowed) — this was the float-sink; floats/transients are now genuinely re-raised after restacks
    • The background-app lock-cycle resume was dead (win.is_client_window() doesn't exist) — no more duplicate bg-app spawn after lock cycles
    • The grab grace threshold never scaled (monitor lookup API missing) — now sized per monitor
    • The blur's stage-view correction is now feature-detected — correct sampling on non-origin monitors under GNOME 50
  • Stacking rework (the switch-arrival flash): raises now use mutter-native win.raise() (regional damage + persistent mutter z — no more whole-screen redraws, and the reveal can't undo the raise), the blur-sibling glue only reorders when a sibling is genuinely above its float, and a 50ms settle poll after workspace switches covers XWayland's late surface commits — switching workspaces is jank-free
  • Gaps (outside/inside consistency): all 10 leftover workArea ± gap area computations now honor the per-edge outside gaps — no more drag-end jumps or misaligned drop previews with non-default outside gaps
  • Hygiene: per-pass border-animation log pairs eliminated, settle corrections no longer starved by the animation gate, rotation follows Border Animation Speed alone, dead code removed, [plaid] double-prefix fixed, Wayland-only guard that actually works (introspectable context check), timer/signal/map lifecycle prunes

Notes

  • No schema changes (no settings migration)
  • The Wayland guard now genuinely rejects X11 sessions (it was inert before) — Wayland behavior unchanged
  • Known limitations (upstream, unchanged): Steam/XWayland content-loss on workspace round-trips (steam-for-linux#10869), Steam login-popup transient double border, eframe/wgpu no rounded corners

v51.14

Choose a tag to compare

@Plyply99 Plyply99 released this 24 Sep 20:13

v51.14

The Firefox placement saga, the Inside/Outside gaps rework, and the popups consolidation.

Highlights

  • Firefox placement saga (client session-restore race): Firefox re-applies its remembered window geometry AFTER being tiled, fighting the placement. Fixed end-to-end:
    • The real blocker: _windowSlotRect returned null for single-dwindle windows (the BSP tree is never built for a lone window), so every settle re-assert silently no-oped — single-window slots now match the placement rect exactly
    • A 400ms settle-window poll (6s per new window) corrects client resizes within ~0.5s via a direct re-place (the forced-configure path — the same mechanism as the maximize keybind)
    • Tight 4px verify tolerance for new-window placements; a one-shot settle re-request after placement give-ups
    • Upstream context: this is the known Wayland tiler-vs-client resize fight (niri#2457: "clients are in full control of their size"); compositors only enforce geometry in the maximize/tile states, which are gap-less — so a gap-design tiler must win the last move
  • Gaps rework (Hyprland-style): gap → Inside Gaps (inside-gap, spacing between windows), single-gap-* → Outside Gaps (outside-gap-top/bottom/left/right, per-edge spacing between windows and the screen edges). Multi-window layouts' outer edges now use the outside gaps — one concept everywhere, live re-tile on changes
  • Popups consolidation: one Show Popups toggle (was workspace-popup + tiling-popup)
  • Self-heals: mask-only windows purge stale widget borders; blur siblings re-attach when their source actor is detached/replaced
  • Debug Logging toggle (from v51.12's lineage) — verbose diagnostics to the journal, enable only when troubleshooting

Known limitations (upstream, not Plaid)

  • Floating Steam/electron (XWayland) windows can lose content or sink below the tiled stack after a workspace round-trip — reproduces with Plaid fully disabled; Chromium/XWayland occlusion behavior (steam-for-linux#10869, open since May 2024; -system-composer tested and does not help). Likely resolves when Steam ships native Wayland
  • Steam's login popup shows a transient double border during its geometry churn (accepted cosmetic quirk — the widget border is the live border for floating windows)
  • eframe/wgpu apps do not get rounded corners (architectural: content bypasses Clutter's paint pipeline)

v51.13

Choose a tag to compare

@Plyply99 Plyply99 released this 23 Sep 07:55

v51.13

Small quality-of-life patch.

Changes

  • Scratchpad hotkey is now a toggle: Super+Shift+Esc hides the focused window into the scratchpad — press it again to fully restore it (original workspace, position, and size). The separate "Remove from scratchpad" keybinding (Super+Ctrl+Shift+Esc) is gone — redundant with the toggle. Prefs/schema/terminal-settings labels updated to match.

v51.12

Choose a tag to compare

@Plyply99 Plyply99 released this 21 Sep 11:29

v51.12

EGO-readiness cleanup, deep-review hardening, and the Steam/XWayland saga resolution.

Highlights

  • EGO-readiness cleanup: spike probes removed, bg-app cycle logs debug-gated, terminal-profile-integration is now opt-in (default off) with a prefs toggle
  • Deep-review hardening (correctness + responsiveness): DDT late-claim visibility, fade-in fix, reveal-timer tracking, radius clamps, warp-clear borders, dead-code sweep, mask/scan-signature gates, drag-preview, retile stabilization, prefs history on popover-open
  • New Debug Logging toggle in prefs (verbose [plaid] diagnostics to the journal — enable only when troubleshooting)
  • Steam/XWayland resolution: border/mask restored to the proven v51.11 mechanism; float re-assert now covers unmanaged windows; border sig-gate tracks actor replacements (borders survive X11 surface round-trips); mask self-heal — X11 windows whose client texture swaps (foreign-texture captures render empty) get their mask dropped + quarantined instead of showing transparent content

Known limitations (upstream, not Plaid)

  • Floating Steam/electron (XWayland) windows can lose content or sink below the tiled stack after a workspace round-trip — reproduces with Plaid fully disabled; Chromium/XWayland occlusion behavior (same family as steam-for-linux#11077 / electron#48737). Likely resolves when Steam ships full Wayland
  • Steam's login popup shows a transient double border during its geometry churn (accepted cosmetic quirk — the widget border is the live border for floating windows)
  • eframe/wgpu apps do not get rounded corners (architectural: content bypasses Clutter's paint pipeline)

v51.11

Choose a tag to compare

@Plyply99 Plyply99 released this 20 Sep 15:40

Blur is now rendered entirely in-house: a pure-GJS effect that renders mutter's own Gaussian kernel with Plaid's rounded-corner cut, through cached offscreen buffers. No bundled libraries, no environment configuration, no restart — the same code works on GNOME 50 and 51.

Older installs are swept automatically: leftover artifacts from the previous blur implementation (an environment.d config and the bundled library directory) are removed on enable.

v51.10

Choose a tag to compare

@Plyply99 Plyply99 released this 19 Sep 11:53

Fixes and polish batch.

  • Cursor warp on GNOME 51: the same clutter_get_default_backend removal that
    broke the blur library also silently disabled cursor warp (every trigger
    threw). Warp now resolves the backend via the context-accessor route
    (stage → context → backend); the GNOME 50 path is unchanged
  • Non-resizable windows (min===max size hints) now float immediately instead
    of running the ~2s placement retry dance before the give-up float
  • Hover-focus: minimized windows are skipped in the pointer scan — a hidden
    DDT, scratchpad-hid, or Super+H window overlapping the cursor no longer
    nulls the scan via the popup reach-through protection
  • New "Show Init Overlay" toggle (General page, default on, applies at your
    next login) for the full-screen "Plaid is initializing…" login moment
  • Log hygiene: routine landing/audit/maximize/scratchpad/background-app
    diagnostics are gated behind the debug setting; error logs stay loud

Validated: GNOME 50.4 host (toggle on/off, DDT hover-focus with large DDT
heights, fixed-size float, warp unchanged). GNOME 51 warp verification on the
CachyOS machine still pending at release time.

v51.09

Choose a tag to compare

@Plyply99 Plyply99 released this 15 Sep 16:49

Fixes a GNOME 51rc session crash on blur enable.

Root cause: the 51.beta → 51.rc transition removed the private Clutter accessor clutter_get_default_backend from libmutter-clutter — extensions binding mutter's private blur layer (this extension's C blur library, cloned from GNOME Shell's ShellBlurEffect) died with 'undefined symbol: clutter_get_default_backend' at first blur use, taking the compositor down with it. Verified on CachyOS/Arch (mut terr 51rc-1) and Fedora 45 (mut ter-51~rc-2): both rc trees lack the symbol (nm -D fingerprint), while 51.beta exported it.

Fixes:

  • The blur attach builds lazily at first paint (after the actor binds) with a NULL-actor-safe context-accessor route: ClutterContext → Backend → CoglContext via clutter_actor_get_context/clutter_context_get_backend/clutter_backend_get_cogl_context (the 51rc-era actors), eliminating the β-era global accessor dependency
  • GNOME 51rc removed StBoxLayout's vertical property — five StBoxLayout constructors now use orientation: Clutter.Orientation.VERTICAL (dual-safe on 50 as well)
  • Environment.d conf freshness reads bytes via TextDecoder instead of Uint8Array.toString (deprecation-free on gjs 1.90+)

Also shipped with the earlier v51.07/08 blur work: the in-guest 51rc-built blur library validated on CachyOS (crash-free enable, ABI-correct). Blur rendering itself on 51rc llvmpipe stacks shows a silent no-op upstream (both native ShellBlurEffect and this library) — tracked separately; the crash class introduced by blur enable is fixed here.

Validated: CachyOS/Arch GNOME 51rc (session holds, crash chain eliminated), Fedora 45 ABI fingerprint, GNOME 50.4 host unaffected by the ABI guard.

v51.08

Choose a tag to compare

@Plyply99 Plyply99 released this 03 Sep 20:40

Blur: the bundled typelibs now ship RAW (shared-library is a bare name resolved via the session LD_LIBRARY_PATH from plaid-blur.conf) — one machine-independent artifact for host, VMs, and auto-updated installs. Fixes v51.07 auto-updates silently downgrading non-host installs to Shell.BlurEffect square blur (baked host paths). The Blur-import failure fallback is now loud in the journal and distinguishes the designed pre-relog state from artifact breakage. build-blur.sh: typelib baking is opt-in via INSTALL_LIB (system images without the conf, e.g. PlaidOS). Anti-aliased corners from v51.07 unchanged. Validated on GNOME 50.4 host (gjs 1.88) and 51.beta VM (gjs 1.89, llvmpipe).