Skip to content

feat(player): add option to dock lyrics & queue as a side drawer#394

Open
WGlegola wants to merge 1 commit into
sozercan:mainfrom
WGlegola:feat/lyrics-queue-drawer
Open

feat(player): add option to dock lyrics & queue as a side drawer#394
WGlegola wants to merge 1 commit into
sozercan:mainfrom
WGlegola:feat/lyrics-queue-drawer

Conversation

@WGlegola

@WGlegola WGlegola commented Jul 19, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds a General → Behavior setting, "Open lyrics & queue as a side drawer", that docks the lyrics and queue panels as a right-hand column which pushes the content aside — like the left sidebar — instead of floating over it as a glass overlay.

The setting is off by default, so the existing floating behavior is unchanged for anyone who doesn't opt in.

Motivation

The lyrics/queue panels currently appear as a floating glass "popup" on the trailing edge. Some users prefer a docked drawer (matching the left sidebar) that reserves its own space and lets the main content reflow beside it, rather than overlaying it.

What changed

  • SettingsManager — new persisted lyricsQueueDrawerEnabled flag (default false).
  • GeneralSettingsView — the toggle in the Behavior section.
  • MainWindowmainContent is a single stable HStack so the NavigationSplitView keeps its identity when the setting toggles (a naive branch swap rebuilt it and reset scroll). Floating mode keeps the trailing overlay; drawer mode docks rightDrawerColumn as a sibling column. The drawer's material extends up behind the transparent titlebar so it reads full-height like the sidebar, while its content stays within the safe area so the Up Next Clear/Edit controls remain out of the window-drag strip and stay clickable. The AI/command-bar button remains a standard toolbar item.
  • LyricsView / QueueView / QueueSidePanelView / SimpleLyricsView — a docked flag renders flush content (no fixed-width glass/material card); the drawer container supplies the background. The queue uses regular material rather than glass so NSTableView drag-and-drop keeps working.
  • QueueSidePanelView — the docked side-panel table column is sized deterministically (container width minus a scroller gutter) so rows don't clip on the right edge in the narrower drawer.
  • MainWindowLayoutrightDrawerWidth constant.

Behavior

Setting Lyrics / Queue
Off (default) Floating glass panel over the trailing edge (unchanged)
On Docked right-hand drawer that pushes content aside

Toggle it under Settings → General → Behavior.

Screenshots

kaset-drawer-screenshot kaset-drawer-setting

Testing

  • swift build, swiftlint --strict, and swiftformat clean.
  • swift test --skip KasetUITests — full suite passes (2285 tests).
  • Verified manually: toggle on/off, docked lyrics + queue (list and side-panel/Edit modes), drag-and-drop reorder in the docked panel, Clear/Edit clickability, and the side-panel rows no longer clipping.

Notes

  • No third-party dependencies.
  • Default off; no behavior change unless the user opts in.

Adds a General → Behavior setting, "Open lyrics & queue as a side drawer",
that docks the lyrics and queue panels as a right-hand column pushing the
content aside — like the left sidebar — instead of floating over it as a glass
overlay. Default off, so existing floating behavior is unchanged.

- SettingsManager: lyricsQueueDrawerEnabled (persisted, default false).
- GeneralSettingsView: the toggle in the Behavior section.
- MainWindow: a single stable HStack keeps the NavigationSplitView identity
  across the toggle; drawer mode docks rightDrawerColumn as a sibling column,
  floating mode keeps the trailing overlay. The drawer's material extends behind
  the transparent titlebar (full height like the sidebar) while its content stays
  below it, so the Up Next Clear/Edit controls remain out of the window-drag strip.
- LyricsView / QueueView / QueueSidePanelView / SimpleLyricsView: a docked flag
  renders flush content (no fixed-width glass/material card); the drawer container
  supplies the background. Queue uses regular material so NSTableView
  drag-and-drop keeps working.
- QueueSidePanelView: the docked side-panel column uses a deterministic width
  (container width minus a scroller gutter) so rows don't clip on the right edge.
- MainWindowLayout: rightDrawerWidth.
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