From 31ea8d76164e8d614566c568277b6c176e4c4b78 Mon Sep 17 00:00:00 2001 From: ocbwoy3 Date: Fri, 23 Jan 2026 23:45:38 +0200 Subject: [PATCH] core: shell state manager --- Shell/ShellStateManager.qml | 52 +++++++++++++++++++++++++++++++++++++ shell.qml | 10 ++++--- 2 files changed, 58 insertions(+), 4 deletions(-) create mode 100644 Shell/ShellStateManager.qml diff --git a/Shell/ShellStateManager.qml b/Shell/ShellStateManager.qml new file mode 100644 index 0000000..506323b --- /dev/null +++ b/Shell/ShellStateManager.qml @@ -0,0 +1,52 @@ +pragma Singleton +import QtQuick + +QtObject { + id: manager + + property bool shellOpen: false + property var windowRequests: ({}) + property var globals: ({}) + + signal shellOpened + signal shellClosed + signal windowRequested(string name, var payload) + + function openShell() { + if (!shellOpen) { + console.log("ShellStateManager: openShell"); + shellOpen = true; + shellOpened(); + } + } + + function closeShell() { + if (shellOpen) { + console.log("ShellStateManager: closeShell"); + shellOpen = false; + shellClosed(); + } + } + + function toggleShell() { + console.log("ShellStateManager: toggleShell (isOpen " + shellOpen + ")"); + shellOpen ? closeShell() : openShell(); + } + + function requestWindow(name, payload) { + console.log("ShellStateManager: requestWindow", name, payload); + windowRequests[name] = { + payload: payload, + timestamp: Date.now() + }; + windowRequested(name, payload); + } + + function setGlobal(key, value) { + globals[key] = value; + } + + function global(key, defaultValue) { + return globals.hasOwnProperty(key) ? globals[key] : defaultValue; + } +} diff --git a/shell.qml b/shell.qml index 1d72b29..b7947f1 100644 --- a/shell.qml +++ b/shell.qml @@ -5,7 +5,9 @@ import "Shell" ShellRoot { id: baseShell - property bool isOpen: false + + // Use the singleton directly; it controls the shell state globally. + property bool isOpen: ShellStateManager.shellOpen WLRLayerTopbar { visible: baseShell.isOpen @@ -20,7 +22,7 @@ ShellRoot { triggerDescription: "Toggle the menu" name: "shell_toggle" onReleased: { - baseShell.isOpen = !baseShell.isOpen; + ShellStateManager.toggleShell() } } @@ -28,10 +30,10 @@ ShellRoot { target: "deltarune.shell" enabled: true function open(): void { - baseShell.isOpen = true; + ShellStateManager.openShell() } function close(): void { - baseShell.isOpen = false; + ShellStateManager.closeShell() } } }