feat(slint): cast picker modal + cast teardown on logout/exit (Phase 4)
- CastPicker.slint: real modal (scrim + 400px card) replacing the static PlayerBar/PlayerBarSmall cast-menu PopupWindow stubs. Two rectangular tabs (Chromecast/DLNA, no pills, plain count) + per-tab device list from CastState.devices, connect-on-click (DLNA rows gate on can-play), connected banner with Disconnect + delivered-quality line (D3), scanning/empty states, error line. Mounted last in AppShell (on top). - PlayerBar + PlayerBarSmall cast buttons now open the modal (CastState.picker-open = true; CastActions.open()) instead of the dead popup. - Cast teardown wired: shutdown() on logout (fixes the Tauri connection + poll leak #33) and best-effort on app exit (renderer Stop + media server, #32). cargo check -p qbz-slint: clean (only the 6 pre-existing warnings). cc
This commit is contained in:
6 files changed
+346
-179
No files matched your search
@@ -36,6 +36,7 @@ import { TrackInfoModal } from "../album/TrackInfoModal.slint";
|
||||
import { AlbumCreditsModal } from "../album/AlbumCreditsModal.slint";
|
||||
import { ImmersiveView } from "../immersive/ImmersiveView.slint";
|
||||
import { QconnectDevModal } from "QconnectDevModal.slint";
|
||||
import { CastPicker } from "CastPicker.slint";
|
||||
import { DiscoverConfigModal } from "../discover/DiscoverConfigModal.slint";
|
||||
import { DragGhost } from "../primitives/DragGhost.slint";
|
||||
import { Toast } from "../primitives/Toast.slint";
|
||||
@@ -522,6 +523,12 @@ export component AppShell inherits Rectangle {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
// Cast (Chromecast / DLNA) device picker.
|
||||
CastPicker {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
// Floating track-drag ghost (follows the cursor, on top of all).
|
||||
DragGhost { }
|
||||
|
||||
|
||||
Reference in new issue
Block a user