Skip to content

feat(switcher): add per-workspace window switcher toggle - #3654

Open
Aceix wants to merge 1 commit into
noctalia-dev:mainfrom
Aceix:feat/window-switcher-per-workspace
Open

feat(switcher): add per-workspace window switcher toggle#3654
Aceix wants to merge 1 commit into
noctalia-dev:mainfrom
Aceix:feat/window-switcher-per-workspace

Conversation

@Aceix

@Aceix Aceix commented Jul 26, 2026

Copy link
Copy Markdown

Summary

Adds a settings-panel toggle (Keybinds > window_switcher.per_workspace) that restricts the Alt-Tab window switcher to windows on the currently active workspace, instead of always listing windows across every workspace.

Motivation

I needed to switch between windows within the same workspace

Type of Change

  • Bug fix
  • New feature
  • Breaking change
  • Refactoring
  • Build / packaging

Manual Coverage

  • Tested on Niri
  • Tested on Hyprland
  • Tested on Sway
  • Tested on another compositor:
  • Tested with different bar positions and density settings
  • Tested at different interface scaling values
  • Tested with multiple monitors

Screenshots / Videos

Checklist

  • This PR is ready for review, or it is marked as Draft.
  • I read and followed the relevant guidance in CONTRIBUTING.md.
  • I ran just format with clang-format v22+ installed, or this PR has no code changes.
  • I ran the relevant build or test commands, or explained why they were not run.
  • I self-reviewed the changes.
  • I checked for new warnings or errors.
  • I will update end-user documentation after merge, or this PR does not change user-facing configuration or behavior.
  • I added or updated assets/translations/en.json, or this PR adds no new user-facing strings.
  • I did not edit non-English translation files unless this PR is explicitly for translation tooling, an import/export sync, or a maintainer-requested locale change.
  • I used the existing canonical names for config keys, IPC names, paths, and identifiers.

Additional Notes

AI powered change

Adds a settings-panel toggle (Keybinds > window_switcher.per_workspace)
that restricts the Alt-Tab window switcher to windows on the currently
active workspace, instead of always listing windows across every
workspace.

Filtering lives in the shared buildWindowEntries() path used by every
compositor backend via CompositorPlatform::workspaceWindowAssignments(),
so it applies wherever a backend reports per-window workspace keys
(Hyprland, Sway, niri, labwc, mango, the generic ext-workspace/triad
backend). Windows with no workspace assignment (e.g. on backends without
workspace-window tracking, such as KDE/KWin and dwl) always pass through
unfiltered, so the toggle degrades to a no-op there rather than emptying
the switcher.

Also fixes WindowSwitcher::show() calling refreshWindows() before
m_output was assigned, which made the filter (and any future
per-output logic) see a stale/null output on first open.
@Aceix
Aceix marked this pull request as ready for review July 27, 2026 19:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant