* feat(bar): separate workspace appearance for unfocused displays
Add a toggle in the Workspace Appearance card to style workspace
indicators independently on displays that aren't currently focused.
The card is split into Focused Display and Unfocused Display(s) tabs.
When the new master toggle is off (default), unfocused displays inherit
the focused settings, preserving existing behavior. When on, unfocused
displays use their own colors (focused/occupied/unfocused/urgent) and
focused border (enable, color, thickness).
WorkspaceSwitcher resolves the focused monitor per compositor and routes
color/border resolution through isFocusedMonitor/useUnfocusedAppearance.
* refactor(bar): address review feedback for unfocused workspace appearance
- Consolidate focused-monitor lookup into BarWidgetService.getFocusedScreenName(),
adding Mango support, and drop the duplicate compositor switches in
WorkspaceSwitcher (effectiveScreenName + isFocusedMonitor now use the helper).
- Extract the shared color and border options into reusable
WorkspaceAppearanceColorOptions and WorkspaceAppearanceBorderFields components
so the focused and unfocused tabs no longer duplicate the layout.
- Gate the unfocused-display options on BarWidgetService.focusedScreenDetectionSupported
and show an explanatory note on compositors without focus detection (e.g. labwc),
instead of silently no-opping.
- Implement deep search icon resolution in DesktopService with runtime caching.
- Update Paths.getAppIcon to utilize enhanced resolution for mismatched app IDs.
- Align Workspace Switcher fallback icons with AppsDock visual style.
- Synchronize fallback text logic between Switcher and Dock using app names.
- New background toggles
- New maxIcon & maxText widget sizes (global)
- Dedicated M3 padding slider
- New independent icon scale options
- Updated logic to improve performance on single & dual bar modes
* feat(niri): Add drag-and-drop workspace reordering
Add interactive drag-and-drop reordering for Niri workspace indicators
with smooth animations matching the system tray behavior.
- Add moveWorkspaceToIndex() to NiriService for workspace reordering
- Implement drag detection with 5px threshold
- Add shift animation for items between source and target
- Clamp drag offset to stay within workspace row bounds
- Reset drag state when workspace list changes during drag
- Visual feedback: opacity change, border highlight on drag/drop target
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* feat(settings): Add workspace drag reorder toggle
Add workspaceDragReorder setting to enable/disable workspace
drag-and-drop reordering. Enabled by default, only visible on Niri.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* dankbar: show niri workspace names
Keep labels aligned with niri indices and live renames.
* dankbar: prefix named workspaces with index
Use workspace index toggle to show index: name labels.
* workspaces: change size conditions for workspace names
---------
Co-authored-by: bbedward <bbedward@gmail.com>
* feat: add configurable app ID substitutions setting
* feat: add live icon updates when substitutions change
* fix: cursor not showing on headerActions in non-collapsible cards
* fix: address PR review feedback
- add tags for search index
- remove hardcoded height from text fields
Steam Proton games use window class steam_app_XXXXX. Steam installs
icons as steam_icon_XXXXX. This maps between them so actual game
icons display instead of generic controller fallback.
* added reverse scrolling to settings and widget
* added support for dankbar scrolling
* Better settings description
* removed isNiri conditional from search index
* fix#1179 breaking normal scroll direction
* added reverse scrolling to settings and widget
* added support for dankbar scrolling
* Better settings description
* removed isNiri conditional from search index