mirror of
https://github.com/noctalia-dev/noctalia-shell.git
synced 2026-05-11 17:08:27 +08:00
7a68030f69
+ Always access lockScreen via panel service and removed deprecation notice.
94 lines
2.3 KiB
QML
94 lines
2.3 KiB
QML
pragma Singleton
|
|
|
|
import Quickshell
|
|
import qs.Commons
|
|
|
|
Singleton {
|
|
id: root
|
|
|
|
// A ref. to the lockScreen, so it's accessible from anywhere.
|
|
property var lockScreen: null
|
|
|
|
// Panels
|
|
property var registeredPanels: ({})
|
|
property var openedPanel: null
|
|
signal willOpen
|
|
signal didClose
|
|
|
|
// Popup menu windows (one per screen) - used for both tray menus and context menus
|
|
property var popupMenuWindows: ({})
|
|
signal popupMenuWindowRegistered(var screen)
|
|
|
|
// Register this panel (called after panel is loaded)
|
|
function registerPanel(panel) {
|
|
registeredPanels[panel.objectName] = panel;
|
|
Logger.d("PanelService", "Registered panel:", panel.objectName);
|
|
}
|
|
|
|
// Register popup menu window for a screen
|
|
function registerPopupMenuWindow(screen, window) {
|
|
if (!screen || !window)
|
|
return;
|
|
var key = screen.name;
|
|
popupMenuWindows[key] = window;
|
|
Logger.d("PanelService", "Registered popup menu window for screen:", key);
|
|
popupMenuWindowRegistered(screen);
|
|
}
|
|
|
|
// Get popup menu window for a screen
|
|
function getPopupMenuWindow(screen) {
|
|
if (!screen)
|
|
return null;
|
|
return popupMenuWindows[screen.name] || null;
|
|
}
|
|
|
|
// Returns a panel (loads it on-demand if not yet loaded)
|
|
function getPanel(name, screen) {
|
|
if (!screen) {
|
|
Logger.d("PanelService", "missing screen for getPanel:", name);
|
|
// If no screen specified, return the first matching panel
|
|
for (var key in registeredPanels) {
|
|
if (key.startsWith(name + "-")) {
|
|
return registeredPanels[key];
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
var panelKey = `${name}-${screen.name}`;
|
|
|
|
// Check if panel is already loaded
|
|
if (registeredPanels[panelKey]) {
|
|
return registeredPanels[panelKey];
|
|
}
|
|
|
|
Logger.w("PanelService", "Panel not found:", panelKey);
|
|
return 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 closedPanel(panel) {
|
|
if (openedPanel && openedPanel === panel) {
|
|
openedPanel = null;
|
|
}
|
|
|
|
// emit signal
|
|
didClose();
|
|
}
|
|
}
|