import QtQuick import QtQuick.Layouts import Quickshell import Quickshell.Services.Mpris import Quickshell.Io import qs.common import qs import Quickshell.Wayland Scope { id: root property bool visible: false readonly property MprisPlayer acivePlayer: MprisController.activePlayer() readonly property real osdWidth: Appearance.sizes.osdWidth readonly property real widgetWidth: Appearance.sizes.mediaControlsWidth readonly property real widgetHeight: Appearance.sizes.mediaControlsHeight property real contentPadding: 13 property real popupRounding: Appearance.rounding.screenRounding - Appearance.sizes.elevationMargin + 1 property real artRounding: Appearance.rounding.verysmall Loader { id: mediaControlsLoader active: GlobalStates.mediaControlsOpen onActiveChanged: { if (!mediaControlsLoader.active & !MprisController.hasPlayers) { GlobalStates.mediaControlsOpen = false; } } sourceComponent: PanelWindow { id: mediaControlsRoot visible: true exclusionMode: ExclusionMode.Ignore exclusiveZone: 0 margins { top: Appearance.sizes.barHeight bottom: Appearance.sizes.barHeight //left: (mediaControlsRoot.screen.width / 2) - (osdWidth / 2) - widgetWidth } implicitWidth: root.widgetWidth implicitHeight: playerColumnLayout.implicitHeight color: "transparent" WlrLayershell.namespace: "quickshell:mediaControls" anchors { top: !Config.options.bar.bottom bottom: Config.options.bar.bottom //left: true } mask: Region { item: playerColumnLayout } ColumnLayout { id: playerColumnLayout anchors.fill: parent spacing: -Appearance.sizes.elevationMargin Repeater { model: ScriptModel { values: MprisController.meaningfulPlayers } delegate: PlayerControl { required property MprisPlayer modelData contentPadding: root.contentPadding popupRounding: root.popupRounding artRounding: root.artRounding player: modelData } } } } } IpcHandler { target: "mediaControls" function toggle(): void { mediaControlsLoader.active = !mediaControlsLoader.active; } function close(): void { mediaControls.loader.active = false; } function open(): void { mediaControlsLoader.active = true; } } }