1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-06-08 04:09:15 -04:00
Files
DankMaterialShell/quickshell/Common/OSDManager.qml
T
Klesh Wong fc07611b3b fix(osd): ensure OSD appears on all monitors after resume (#2453)
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>
2026-05-20 11:58:13 -04:00

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;
}
}