mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-04-14 09:42:10 -04:00
osd: reverse media playback icons and handle screen changes
This commit is contained in:
@@ -9,6 +9,20 @@ Singleton {
|
|||||||
|
|
||||||
property var currentOSDsByScreen: ({})
|
property var currentOSDsByScreen: ({})
|
||||||
|
|
||||||
|
Connections {
|
||||||
|
target: Quickshell
|
||||||
|
function onScreensChanged() {
|
||||||
|
const activeNames = {};
|
||||||
|
for (let i = 0; i < Quickshell.screens.length; i++)
|
||||||
|
activeNames[Quickshell.screens[i].name] = true;
|
||||||
|
for (const screenName in osdManager.currentOSDsByScreen) {
|
||||||
|
if (activeNames[screenName])
|
||||||
|
continue;
|
||||||
|
osdManager.currentOSDsByScreen[screenName] = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function showOSD(osd) {
|
function showOSD(osd) {
|
||||||
if (!osd || !osd.screen)
|
if (!osd || !osd.screen)
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -16,18 +16,28 @@ DankOSD {
|
|||||||
autoHideInterval: 3000
|
autoHideInterval: 3000
|
||||||
enableMouseInteraction: true
|
enableMouseInteraction: true
|
||||||
|
|
||||||
function getPlaybackIcon() {
|
property string _displayIcon: "music_note"
|
||||||
if (!player)
|
|
||||||
return "music_note";
|
function updatePlaybackIcon() {
|
||||||
|
if (!player) {
|
||||||
|
_displayIcon = "music_note";
|
||||||
|
iconDebounce.stop();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let icon = "music_note";
|
||||||
switch (player.playbackState) {
|
switch (player.playbackState) {
|
||||||
case MprisPlaybackState.Playing:
|
case MprisPlaybackState.Playing:
|
||||||
return "play_arrow";
|
icon = "pause";
|
||||||
|
break;
|
||||||
case MprisPlaybackState.Paused:
|
case MprisPlaybackState.Paused:
|
||||||
case MprisPlaybackState.Stopped:
|
case MprisPlaybackState.Stopped:
|
||||||
return "pause";
|
icon = "play_arrow";
|
||||||
default:
|
break;
|
||||||
return "music_note";
|
|
||||||
}
|
}
|
||||||
|
if (icon === _displayIcon)
|
||||||
|
return;
|
||||||
|
iconDebounce.pendingIcon = icon;
|
||||||
|
iconDebounce.restart();
|
||||||
}
|
}
|
||||||
|
|
||||||
function togglePlaying() {
|
function togglePlaying() {
|
||||||
@@ -38,6 +48,13 @@ DankOSD {
|
|||||||
|
|
||||||
property bool _pendingShow: false
|
property bool _pendingShow: false
|
||||||
|
|
||||||
|
Timer {
|
||||||
|
id: iconDebounce
|
||||||
|
interval: 150
|
||||||
|
property string pendingIcon: "music_note"
|
||||||
|
onTriggered: root._displayIcon = pendingIcon
|
||||||
|
}
|
||||||
|
|
||||||
Image {
|
Image {
|
||||||
id: artPreloader
|
id: artPreloader
|
||||||
source: TrackArtService._bgArtSource
|
source: TrackArtService._bgArtSource
|
||||||
@@ -86,6 +103,7 @@ DankOSD {
|
|||||||
if (!SettingsData.osdMediaPlaybackEnabled)
|
if (!SettingsData.osdMediaPlaybackEnabled)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
root.updatePlaybackIcon();
|
||||||
TrackArtService.loadArtwork(player.trackArtUrl);
|
TrackArtService.loadArtwork(player.trackArtUrl);
|
||||||
|
|
||||||
if (!player.trackArtUrl || player.trackArtUrl === "") {
|
if (!player.trackArtUrl || player.trackArtUrl === "") {
|
||||||
@@ -202,7 +220,7 @@ DankOSD {
|
|||||||
|
|
||||||
DankIcon {
|
DankIcon {
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
name: getPlaybackIcon()
|
name: root._displayIcon
|
||||||
size: Theme.iconSize
|
size: Theme.iconSize
|
||||||
color: playPauseButton.containsMouse ? Theme.primary : Theme.surfaceText
|
color: playPauseButton.containsMouse ? Theme.primary : Theme.surfaceText
|
||||||
}
|
}
|
||||||
@@ -272,7 +290,7 @@ DankOSD {
|
|||||||
|
|
||||||
DankIcon {
|
DankIcon {
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
name: getPlaybackIcon()
|
name: root._displayIcon
|
||||||
size: Theme.iconSize
|
size: Theme.iconSize
|
||||||
color: playPauseButtonVert.containsMouse ? Theme.primary : Theme.surfaceText
|
color: playPauseButtonVert.containsMouse ? Theme.primary : Theme.surfaceText
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,6 +66,29 @@ PanelWindow {
|
|||||||
|
|
||||||
screen: modelData
|
screen: modelData
|
||||||
visible: false
|
visible: false
|
||||||
|
|
||||||
|
Connections {
|
||||||
|
target: Quickshell
|
||||||
|
function onScreensChanged() {
|
||||||
|
if (!root.visible && !root.shouldBeVisible)
|
||||||
|
return;
|
||||||
|
const currentScreenName = root.screen?.name;
|
||||||
|
if (!currentScreenName) {
|
||||||
|
root.hide();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (let i = 0; i < Quickshell.screens.length; i++) {
|
||||||
|
if (Quickshell.screens[i].name === currentScreenName)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
root.shouldBeVisible = false;
|
||||||
|
root.visible = false;
|
||||||
|
hideTimer.stop();
|
||||||
|
closeTimer.stop();
|
||||||
|
osdHidden();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
WlrLayershell.layer: WlrLayershell.Overlay
|
WlrLayershell.layer: WlrLayershell.Overlay
|
||||||
WlrLayershell.exclusiveZone: -1
|
WlrLayershell.exclusiveZone: -1
|
||||||
WlrLayershell.keyboardFocus: WlrKeyboardFocus.None
|
WlrLayershell.keyboardFocus: WlrKeyboardFocus.None
|
||||||
|
|||||||
Reference in New Issue
Block a user