mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-04-04 12:52:06 -04:00
47 lines
1.2 KiB
QML
47 lines
1.2 KiB
QML
pragma Singleton
|
|
pragma ComponentBehavior: Bound
|
|
|
|
import Quickshell
|
|
import QtQuick
|
|
|
|
Singleton {
|
|
id: osdManager
|
|
|
|
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) {
|
|
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;
|
|
}
|
|
}
|