Skip to content

1.2.9-2

Choose a tag to compare

@C0sm0cats C0sm0cats released this 14 Feb 12:01
· 34 commits to main since this release

Post Multi-Monitor Fix Updates

1) Manual Layout Persistence Was Reworked

We moved from a single workspace-level layout memory to a layout-profile model.

Added runtime structures

  • workspace_layout_profiles: stores assignments per (monitor, workspace, layout, info)
  • _workspace_manual_layout_lock: keeps a workspace pinned to a manual layout until explicit user change
  • _manual_layout_reset_block: keeps picker prefill empty after a workspace reset
  • _manual_layout_profile_reset_block: blocks automatic recreation of a reset layout variant

Added helpers

  • _normalize_layout_signature(layout, info)
  • _layout_profile_key(mon_idx, ws_idx, layout, info)

2) Reset Layout Is Now Layout-Specific

_reset_manual_layout(...) now supports targeted reset for one selected layout variant.

Behavior:

  • Reset of a non-current selected layout clears only that saved profile.
  • Reset of the currently active selected layout also clears visual/runtime assignment for that workspace.
  • Reset now requires an explicit target layout (layout=None is rejected).

3) Anti-Reappearance Prefill Logic (Intentional)

After reset, picker prefill stays empty until explicit Apply.

Implemented via:

  • _manual_layout_reset_block
  • _manual_layout_profile_reset_block
  • profile-aware prefill resolution in get_current_grid_prefill(...)

This is intentional to prevent old slot assignments from silently reappearing.

4) Manual Layout Lock Is Enforced During Auto-Tiling

smart_tile_with_restore() now checks manual lock state and can force the remembered manual signature instead of auto-choosing a new layout.

Effects:

  • No unintended layout drift while a workspace is manually configured.
  • Compaction logic only runs when layout changed automatically (not when manual lock is active).

5) Workspace Save/Restore Was Aligned With Reset Semantics

In save_workspace(...):

  • current layout signature is normalized before persistence
  • reset-blocked profiles are not auto-recreated during autosave
  • profile entries are only restored when allowed by reset markers

6) Monitor Topology Reconciliation Includes New Layout State

_reconcile_workspaces_after_monitor_change(...) now migrates/filter-copies:

  • workspace_layout_profiles
  • _workspace_manual_layout_lock
  • _manual_layout_reset_block
  • _manual_layout_profile_reset_block

This keeps post-reset/manual-layout behavior consistent after monitor count changes.

7) UI/UX Refinements

Border and color constants

  • Added BORDER_COLOR_ACTIVE and BORDER_COLOR_SWAP
  • Replaced hardcoded border color literals in border/swap paths

Layout picker button styling

  • Added reset button palette constants:
    • RESET_BTN_BG
    • RESET_BTN_HOVER
    • RESET_BTN_ACTIVE

Layout picker footer wording

  • Cancel button renamed to Quit (Layout Manager dialog only)

8) Concurrency/Consistency Adjustments

  • Additional lock-guarded reads were added around layout-signature checks in monitor processing paths to avoid stale reads/races.

9) Net Result

Post Multi-monitor Fix behavior is now:

  • more deterministic for manual layouts,
  • safer on reset (no accidental assignment comeback),
  • consistent across workspace saves and monitor topology changes,
  • clearer visually in the Layout Manager and border feedback.