mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-06-08 12:13:31 -04:00
fc07611b3b
Some monitors, especially cheaper models, are slow to power on after sleep and may not be present in Quickshell.screens when onScreensChanged is triggered. This change adds a 3-second delay before updating currentOSDsByScreen to ensure all screens are detected, mitigating the issue of OSDs not appearing on certain monitors after resume. Co-authored-by: Klesh Wong <kleshwong@gmail.com>
55 lines
1.4 KiB
QML
55 lines
1.4 KiB
QML
pragma Singleton
|
|
pragma ComponentBehavior: Bound
|
|
|
|
import Quickshell
|
|
import QtQuick
|
|
|
|
Singleton {
|
|
id: osdManager
|
|
|
|
property var currentOSDsByScreen: ({})
|
|
|
|
Timer {
|
|
id: screensChangedDelayTimer
|
|
interval: 3000 // 3 seconds
|
|
repeat: false
|
|
onTriggered: {
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
Connections {
|
|
target: Quickshell
|
|
function onScreensChanged() {
|
|
screensChangedDelayTimer.restart();
|
|
}
|
|
}
|
|
|
|
function showOSD(osd) {
|
|
if (!osd || !osd.screen)
|
|
return;
|
|
const screenName = osd.screen.name;
|
|
const currentOSD = currentOSDsByScreen[screenName];
|
|
|
|
if (currentOSD && currentOSD !== osd) {
|
|
if (typeof currentOSD.hide === "function") {
|
|
try {
|
|
currentOSD.hide();
|
|
} catch (e) {
|
|
currentOSDsByScreen[screenName] = null;
|
|
}
|
|
} else {
|
|
currentOSDsByScreen[screenName] = null;
|
|
}
|
|
}
|
|
|
|
currentOSDsByScreen[screenName] = osd;
|
|
}
|
|
}
|