From b3002b42b4b7bb47008b3b6d5611f35c724c0dd5 Mon Sep 17 00:00:00 2001 From: quadbyte Date: Tue, 12 Aug 2025 18:58:22 -0400 Subject: [PATCH] SettingsWindow Loading - reworked the way we load the settings to avoid using Qt.createComponent which breaks hot reload and more - introduced a new PanelManager singleton to hold some references to some panels and later will be used to force having a single panel opened at all time --- Modules/Settings/SettingsWindow.qml | 3 ++- Modules/Settings/Tabs/Network.qml | 2 +- Modules/SidePanel/Cards/ProfileCard.qml | 16 +--------------- Services/PanelManager.qml | 10 ++++++++++ shell.qml | 9 +++++++++ 5 files changed, 23 insertions(+), 17 deletions(-) create mode 100644 Services/PanelManager.qml diff --git a/Modules/Settings/SettingsWindow.qml b/Modules/Settings/SettingsWindow.qml index ca8a4da..e388186 100644 --- a/Modules/Settings/SettingsWindow.qml +++ b/Modules/Settings/SettingsWindow.qml @@ -3,9 +3,10 @@ import QtQuick.Controls import QtQuick.Layouts import Quickshell import Quickshell.Wayland +import qs.Modules.Settings.Tabs as Tabs import qs.Services import qs.Widgets -import "Tabs" as Tabs + NLoader { id: root diff --git a/Modules/Settings/Tabs/Network.qml b/Modules/Settings/Tabs/Network.qml index 9229fa8..e3d66d5 100644 --- a/Modules/Settings/Tabs/Network.qml +++ b/Modules/Settings/Tabs/Network.qml @@ -35,7 +35,7 @@ ColumnLayout { Layout.fillWidth: true NText { - text: "Network Settings" + text: "Interfaces" font.pointSize: Style.fontSizeXL * scaling font.weight: Style.fontWeightBold color: Colors.textPrimary diff --git a/Modules/SidePanel/Cards/ProfileCard.qml b/Modules/SidePanel/Cards/ProfileCard.qml index ac9041a..83f39c4 100644 --- a/Modules/SidePanel/Cards/ProfileCard.qml +++ b/Modules/SidePanel/Cards/ProfileCard.qml @@ -60,21 +60,7 @@ NBox { NIconButton { icon: "settings" onClicked: { - if (!root.settingsWindow) { - const comp = Qt.createComponent("../../Settings/SettingsWindow.qml") - if (comp.status === Component.Ready) { - root.settingsWindow = comp.createObject(root) - } else { - comp.statusChanged.connect(function () { - if (comp.status === Component.Ready) { - root.settingsWindow = comp.createObject(root) - } - }) - } - } - if (root.settingsWindow) { - root.settingsWindow.isLoaded = !root.settingsWindow.isLoaded - } + PanelManager.settingsWindow.isLoaded = !PanelManager.settingsWindow.isLoaded } } NIconButton { diff --git a/Services/PanelManager.qml b/Services/PanelManager.qml new file mode 100644 index 0000000..b7cbde5 --- /dev/null +++ b/Services/PanelManager.qml @@ -0,0 +1,10 @@ +pragma Singleton + +import Quickshell +import qs.Modules.Settings + +Singleton { + id: root + + property SettingsWindow settingsWindow: null +} diff --git a/shell.qml b/shell.qml index 4248b32..fa36846 100644 --- a/shell.qml +++ b/shell.qml @@ -12,6 +12,7 @@ import qs.Modules.DemoPanel import qs.Modules.Background import qs.Modules.SidePanel import qs.Modules.Notification +import qs.Modules.Settings import qs.Services ShellRoot { @@ -38,9 +39,17 @@ ShellRoot { id: calendar } + SettingsWindow { + id: settingsWindow + } + Component.onCompleted: { + PanelManager.settingsWindow = settingsWindow + // Ensure our singleton is created as soon as possible // so we start fetching weather asap if necessary Location.init() + + } }