barmodule: own hoverpanel internally, modules supply content as component

This commit is contained in:
Damocles 2026-04-25 14:07:26 +02:00
parent 26476dc930
commit 6fd36c812f
17 changed files with 367 additions and 453 deletions

View file

@ -12,6 +12,25 @@ M.BarModule {
opacity: S.Modules.mpris.enable && player !== null ? 1 : 0
visible: opacity > 0
tooltip: player ? (player.trackTitle || player.identity || "Media") + (playing ? " (playing)" : " (paused)") : "Media"
panelNamespace: "nova-mpris"
panelTitle: "Now Playing"
panelContentWidth: 280
panelComponent: Component {
C.MprisApplet {
width: parent.width
player: root.player
players: root._players
playing: root.playing
accentColor: root.accentColor
cachedArt: root._cachedArt
cavaBars: root._cavaBars
playerIdx: S.MprisService.playerIdx
onPlayerSwitched: idx => {
S.MprisService.switchPlayer(idx);
root.keepPanelOpen(400);
}
}
}
readonly property var _players: S.MprisService.players
readonly property MprisPlayer player: S.MprisService.player
@ -80,31 +99,4 @@ M.BarModule {
width: Math.min(implicitWidth, 200)
anchors.verticalCenter: parent.verticalCenter
}
M.HoverPanel {
id: hoverPanel
showPanel: root._showPanel
screen: QsWindow.window?.screen ?? null
anchorItem: root
accentColor: root.accentColor
panelNamespace: "nova-mpris"
panelTitle: "Now Playing"
contentWidth: 280
onDismissed: root.dismissPanel()
C.MprisApplet {
width: hoverPanel.contentWidth
player: root.player
players: root._players
playing: root.playing
accentColor: root.accentColor
cachedArt: root._cachedArt
cavaBars: root._cavaBars
playerIdx: S.MprisService.playerIdx
onPlayerSwitched: idx => {
S.MprisService.switchPlayer(idx);
hoverPanel.keepOpen(400);
}
}
}
}