Repository navigation
1.2.9-2
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_ACTIVEandBORDER_COLOR_SWAP - Replaced hardcoded border color literals in border/swap paths
Layout picker button styling
- Added reset button palette constants:
RESET_BTN_BGRESET_BTN_HOVERRESET_BTN_ACTIVE
Layout picker footer wording
Cancelbutton renamed toQuit(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.