diff --git a/components/mobileshell/qml/widgets/mediacontrols/BlurredBackground.qml b/components/mobileshell/qml/widgets/mediacontrols/BlurredBackground.qml index 90b113d2..d70f3475 100644 --- a/components/mobileshell/qml/widgets/mediacontrols/BlurredBackground.qml +++ b/components/mobileshell/qml/widgets/mediacontrols/BlurredBackground.qml @@ -11,7 +11,9 @@ import org.kde.plasma.core 2.0 as PlasmaCore Item { id: root + property string imageSource + property bool darken: false // clip corners so that the image has rounded corners layer.enabled: true @@ -39,7 +41,7 @@ Item { // ensure text is readable Rectangle { anchors.fill: parent - color: Qt.rgba(0, 0, 0, 0.6) + color: Qt.rgba(0, 0, 0, root.darken ? 0.8 : 0.6) } // apply lighten, saturate and blur effect diff --git a/components/mobileshell/qml/widgets/mediacontrols/MediaControlsSource.qml b/components/mobileshell/qml/widgets/mediacontrols/MediaControlsSource.qml index fb785059..5594bab1 100644 --- a/components/mobileshell/qml/widgets/mediacontrols/MediaControlsSource.qml +++ b/components/mobileshell/qml/widgets/mediacontrols/MediaControlsSource.qml @@ -94,6 +94,7 @@ PlasmaCore.DataSource { model.push({ 'application': playerData["Identity"], 'source': source, + 'desktopEntry': playerData["DesktopEntry"] }); } diff --git a/components/mobileshell/qml/widgets/mediacontrols/MediaControlsWidget.qml b/components/mobileshell/qml/widgets/mediacontrols/MediaControlsWidget.qml index 9ca30216..62771813 100644 --- a/components/mobileshell/qml/widgets/mediacontrols/MediaControlsWidget.qml +++ b/components/mobileshell/qml/widgets/mediacontrols/MediaControlsWidget.qml @@ -11,6 +11,7 @@ import QtQuick.Controls 2.15 as QQC2 import org.kde.kirigami 2.12 as Kirigami +import org.kde.plasma.private.mobileshell 1.0 as MobileShell import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.plasma.components 3.0 as PlasmaComponents3 import org.kde.plasma.extras 2.0 as PlasmaExtras @@ -67,103 +68,116 @@ Item { asynchronous: true - sourceComponent: Components.BaseItem { - id: playerItem + sourceComponent: MouseArea { + id: mouseArea + implicitHeight: playerItem.implicitHeight + implicitWidth: playerItem.implicitWidth - property string source: modelData.source - - padding: root.padding - implicitHeight: root.contentHeight + root.padding * 2 - implicitWidth: root.width - - background: BlurredBackground { - imageSource: mpris2Source.albumArt(playerItem.source) + onClicked: { + MobileShell.ShellUtil.launchApp(modelData.desktopEntry + ".desktop"); + MobileShell.TopPanelControls.closeActionDrawer(); } - contentItem: PlasmaCore.ColorScope { - colorGroup: PlasmaCore.Theme.ComplementaryColorGroup - width: playerItem.width - playerItem.leftPadding - playerItem.rightPadding + Components.BaseItem { + id: playerItem + anchors.fill: parent - RowLayout { - id: controlsRow - width: parent.width - height: parent.height - spacing: 0 + property string source: modelData.source + + padding: root.padding + implicitHeight: root.contentHeight + root.padding * 2 + implicitWidth: root.width + + background: BlurredBackground { + darken: mouseArea.pressed + imageSource: mpris2Source.albumArt(playerItem.source) + } + + contentItem: PlasmaCore.ColorScope { + colorGroup: PlasmaCore.Theme.ComplementaryColorGroup + width: playerItem.width - playerItem.leftPadding - playerItem.rightPadding + + RowLayout { + id: controlsRow + width: parent.width + height: parent.height + spacing: 0 - enabled: mpris2Source.canControl(playerItem.source) + enabled: mpris2Source.canControl(playerItem.source) - Image { - id: albumArt - Layout.preferredWidth: height - Layout.fillHeight: true - asynchronous: true - fillMode: Image.PreserveAspectFit - source: mpris2Source.albumArt(playerItem.source) - sourceSize.height: height - visible: status === Image.Loading || status === Image.Ready - } - - ColumnLayout { - Layout.leftMargin: albumArt.visible ? Kirigami.Units.largeSpacing : 0 - Layout.fillWidth: true - spacing: Kirigami.Units.smallSpacing - - Components.MarqueeLabel { - Layout.fillWidth: true - - inputText: mpris2Source.track(playerItem.source) || i18n("No media playing") - textFormat: Text.PlainText - font.pointSize: PlasmaCore.Theme.defaultFont.pointSize - color: "white" + Image { + id: albumArt + Layout.preferredWidth: height + Layout.fillHeight: true + asynchronous: true + fillMode: Image.PreserveAspectFit + source: mpris2Source.albumArt(playerItem.source) + sourceSize.height: height + visible: status === Image.Loading || status === Image.Ready } - Components.MarqueeLabel { + ColumnLayout { + Layout.leftMargin: albumArt.visible ? Kirigami.Units.largeSpacing : 0 Layout.fillWidth: true + spacing: Kirigami.Units.smallSpacing - // if no artist is given, show player name instead - inputText: mpris2Source.artist(playerItem.source) || modelData.application || "" - textFormat: Text.PlainText - font.pointSize: PlasmaCore.Theme.smallestFont.pointSize - opacity: 0.9 - color: "white" + Components.MarqueeLabel { + Layout.fillWidth: true + + inputText: mpris2Source.track(playerItem.source) || i18n("No media playing") + textFormat: Text.PlainText + font.pointSize: PlasmaCore.Theme.defaultFont.pointSize + color: "white" + } + + Components.MarqueeLabel { + Layout.fillWidth: true + + // if no artist is given, show player name instead + inputText: mpris2Source.artist(playerItem.source) || modelData.application || "" + textFormat: Text.PlainText + font.pointSize: PlasmaCore.Theme.smallestFont.pointSize + opacity: 0.9 + color: "white" + } } - } - PlasmaComponents3.ToolButton { - Layout.fillHeight: true - Layout.preferredWidth: height - - enabled: mpris2Source.canGoBack(playerItem.source) - icon.name: LayoutMirroring.enabled ? "media-skip-forward" : "media-skip-backward" - icon.width: PlasmaCore.Units.iconSizes.small - icon.height: PlasmaCore.Units.iconSizes.small - onClicked: mpris2Source.goPrevious(playerItem.source) - visible: mpris2Source.canGoBack(playerItem.source) || mpris2Source.canGoNext(playerItem.source) - Accessible.name: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Previous track") - } + PlasmaComponents3.ToolButton { + Layout.fillHeight: true + Layout.preferredWidth: height + + enabled: mpris2Source.canGoBack(playerItem.source) + icon.name: LayoutMirroring.enabled ? "media-skip-forward" : "media-skip-backward" + icon.width: PlasmaCore.Units.iconSizes.small + icon.height: PlasmaCore.Units.iconSizes.small + onClicked: mpris2Source.goPrevious(playerItem.source) + visible: mpris2Source.canGoBack(playerItem.source) || mpris2Source.canGoNext(playerItem.source) + Accessible.name: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Previous track") + } - PlasmaComponents3.ToolButton { - Layout.fillHeight: true - Layout.preferredWidth: height - - icon.name: mpris2Source.isPlaying(playerItem.source) ? "media-playback-pause" : "media-playback-start" - icon.width: PlasmaCore.Units.iconSizes.small - icon.height: PlasmaCore.Units.iconSizes.small - onClicked: mpris2Source.playPause(playerItem.source) - Accessible.name: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Play or Pause media") - } + PlasmaComponents3.ToolButton { + Layout.fillHeight: true + Layout.preferredWidth: height + + icon.name: mpris2Source.isPlaying(playerItem.source) ? "media-playback-pause" : "media-playback-start" + icon.width: PlasmaCore.Units.iconSizes.small + icon.height: PlasmaCore.Units.iconSizes.small + onClicked: mpris2Source.playPause(playerItem.source) + Accessible.name: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Play or Pause media") + } - PlasmaComponents3.ToolButton { - Layout.fillHeight: true - Layout.preferredWidth: height - - enabled: mpris2Source.canGoBack(playerItem.source) - icon.name: LayoutMirroring.enabled ? "media-skip-backward" : "media-skip-forward" - icon.width: PlasmaCore.Units.iconSizes.small - icon.height: PlasmaCore.Units.iconSizes.small - onClicked: mpris2Source.goNext(playerItem.source) - visible: mpris2Source.canGoBack(playerItem.source) || mpris2Source.canGoNext(playerItem.source) - Accessible.name: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Next track") + PlasmaComponents3.ToolButton { + Layout.fillHeight: true + Layout.preferredWidth: height + + enabled: mpris2Source.canGoBack(playerItem.source) + icon.name: LayoutMirroring.enabled ? "media-skip-backward" : "media-skip-forward" + icon.width: PlasmaCore.Units.iconSizes.small + icon.height: PlasmaCore.Units.iconSizes.small + onClicked: mpris2Source.goNext(playerItem.source) + visible: mpris2Source.canGoBack(playerItem.source) || mpris2Source.canGoNext(playerItem.source) + Accessible.name: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Next track") + } } } } diff --git a/containments/homescreens/folio/package/contents/ui/HomeDelegate.qml b/containments/homescreens/folio/package/contents/ui/HomeDelegate.qml index ac268166..652af3e8 100644 --- a/containments/homescreens/folio/package/contents/ui/HomeDelegate.qml +++ b/containments/homescreens/folio/package/contents/ui/HomeDelegate.qml @@ -65,7 +65,7 @@ ContainmentLayoutManager.ItemContainer { } HomeScreenLib.DesktopModel.setMinimizedDelegate(index, delegate); - HomeScreenLib.DesktopModel.runApplication(modelData.applicationStorageId); + MobileShell.ShellUtil.launchApp(modelData.applicationStorageId); } readonly property bool applicationRunning: model.applicationRunning