Skip to content

Track active layouts across Spaces and navigate from layout rows #33

Description

@olerida

Summary

Extend the layout status indicator so it communicates whether a saved layout was recently detected as active in any macOS Space, and make the layout row navigate to that Space when possible.

Proposed behavior

  • Show a blue status dot when Settle has detected the layout as active in any visited Space during the current Settle session.
  • Show a gray status dot when the layout is not known to be active in any Space.
  • Keep the existing row highlight for the layout that is active in the currently visible Space.
  • When a user clicks the main area of a row with a blue dot, attempt to navigate to the Space where that layout was most recently detected.
  • Keep all per-layout icon buttons and menus unchanged. Clicking an icon must perform only that icon action and must not trigger row navigation.
  • If the same layout was detected in multiple Spaces, navigate to the most recently detected one.

Important platform limitation

macOS does not provide a supported public API for enumerating stable Space identifiers or directly switching to an arbitrary Space. Therefore both cross-Space status and navigation must be explicitly treated as best-effort:

  • Cross-Space state is remembered when Settle restores or recognizes a layout in the visible Space.
  • The remembered state is updated or removed when that Space is visited again and no longer matches the layout.
  • The cache must remain session-scoped and start empty after launching Settle to avoid presenting stale state as authoritative.
  • Navigation should use supported APIs to activate and raise a representative matched window from the target layout, allowing macOS to switch to its Space when system behavior permits it.
  • Do not use private Space APIs.
  • If navigation cannot be completed, leave windows untouched and show concise status feedback.

The blue dot therefore means recently detected active in another Space during this session, not a guaranteed real-time system state. This meaning must also be reflected in tooltips and accessibility labels.

Stale and partially closed layouts

Row navigation must remain separate from layout restoration. Consider a layout containing windows A and B that was restored in Space 1, followed by the user moving to Space 2 and closing one or both windows:

  • If either A or B still exists, clicking the blue row should use a remaining matched window to navigate to Space 1.
  • After arriving, Settle must revalidate the visible Space. If one saved window is missing, the layout is no longer fully active and its dot must turn gray.
  • If neither A nor B exists, navigation cannot be completed. Settle must clear the stale blue state and show concise feedback.
  • Clicking the row must never reopen missing windows or restore the layout. Reopening and repositioning windows remains the responsibility of the existing Restore icon.
  • Failed or partial navigation must not move, reopen, or otherwise modify windows.

Acceptance criteria

  • A layout detected in the current Space has a blue dot and the existing active-row highlight.
  • After changing Spaces, the previously detected layout keeps a blue dot without keeping the current-Space highlight.
  • A layout never detected during the current session has a gray dot.
  • Returning to a remembered Space revalidates its layout state and clears stale state when it no longer matches.
  • Clicking the main row area of a blue layout attempts to navigate to its most recently detected Space.
  • If part of a remembered layout remains open, row navigation uses a remaining matched window and then revalidates the layout as inactive when windows are missing.
  • If no matched window remains, row navigation clears the stale blue state and reports that the layout is no longer active.
  • Row navigation never reopens missing windows; only the Restore action may restore them.
  • Clicking preview, restore, overwrite, menu, disclosure, or reorder controls does not trigger row navigation.
  • Failed navigation is non-destructive and produces user-visible feedback.
  • The remembered cross-Space state is cleared when Settle relaunches.
  • Layout deletion or overwrite invalidates any incompatible remembered state.
  • New user-visible text is localized in English, Spanish, Catalan, French, and German.
  • Automated tests cover state transitions, stale-state invalidation, multiple detected Spaces, and row-versus-icon click behavior where practical.

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:appNative macOS app workbacklogPlanned work not started yetenhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions