59 lines
1.2 KiB
QML
59 lines
1.2 KiB
QML
pragma Singleton
|
|
|
|
import Quickshell
|
|
import qs.Commons
|
|
|
|
Singleton {
|
|
id: root
|
|
|
|
// A ref. to the lockScreen, so it's accessible from anywhere
|
|
// This is not a panel...
|
|
property var lockScreen: null
|
|
|
|
// Currently opened panel
|
|
property var openedPanel: null
|
|
readonly property bool hasOpenedPanel: (openedPanel !== null)
|
|
|
|
property var registeredPanels: ({})
|
|
|
|
signal willOpen
|
|
signal willClose
|
|
|
|
// Register this panel
|
|
function registerPanel(panel) {
|
|
registeredPanels[panel.objectName] = panel
|
|
Logger.log("PanelService", "Registered:", panel.objectName)
|
|
}
|
|
|
|
// Returns a panel
|
|
function getPanel(name) {
|
|
return registeredPanels[name] || null
|
|
}
|
|
|
|
// Check if a panel exists
|
|
function hasPanel(name) {
|
|
return name in registeredPanels
|
|
}
|
|
|
|
// Helper to keep only one panel open at any time
|
|
function willOpenPanel(panel) {
|
|
if (openedPanel && openedPanel !== panel) {
|
|
openedPanel.close()
|
|
}
|
|
openedPanel = panel
|
|
|
|
// emit signal
|
|
willOpen()
|
|
}
|
|
|
|
function willClosePanel(panel) {
|
|
// emit signal
|
|
willClose()
|
|
}
|
|
|
|
function closedPanel(panel) {
|
|
if (openedPanel && openedPanel === panel) {
|
|
openedPanel = null
|
|
}
|
|
}
|
|
}
|