From 794ea9efce38cac12b03cdbdc8b145f640e002fb Mon Sep 17 00:00:00 2001 From: Lemmy Date: Wed, 18 Feb 2026 12:58:31 -0500 Subject: [PATCH] settings: improve support of "Separate window" mode --- .../Panels/Settings/SettingsPanelWindow.qml | 47 ++++++++++++------- Services/UI/SettingsPanelService.qml | 3 ++ 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/Modules/Panels/Settings/SettingsPanelWindow.qml b/Modules/Panels/Settings/SettingsPanelWindow.qml index b786ca966..ff1e1d41c 100644 --- a/Modules/Panels/Settings/SettingsPanelWindow.qml +++ b/Modules/Panels/Settings/SettingsPanelWindow.qml @@ -25,27 +25,38 @@ FloatingWindow { property bool isInitialized: false + // Navigate to a specific tab and optional subtab. + // Works whether the window is already visible or just becoming visible. + function navigateTo(tab, subTab) { + const tabId = tab !== undefined ? tab : 0; + const subTabId = (subTab !== undefined && subTab !== null && subTab >= 0) ? subTab : -1; + if (isInitialized) { + settingsContent.navigateToTab(tabId, subTabId); + } else { + settingsContent.requestedTab = tabId; + if (subTabId >= 0) + settingsContent._pendingSubTab = subTabId; + settingsContent.initialize(); + isInitialized = true; + } + } + + // Navigate to a search result entry. + // Works whether the window is already visible or just becoming visible. + function navigateToEntry(entry) { + if (isInitialized) { + Qt.callLater(() => settingsContent.navigateToResult(entry)); + } else { + settingsContent.requestedTab = entry.tab; + settingsContent.initialize(); + Qt.callLater(() => settingsContent.navigateToResult(entry)); + isInitialized = true; + } + } + // Sync visibility with service onVisibleChanged: { if (visible) { - if (!isInitialized) { - // Check if we have a search entry to navigate to - if (SettingsPanelService.requestedEntry) { - const entry = SettingsPanelService.requestedEntry; - SettingsPanelService.requestedEntry = null; - settingsContent.requestedTab = entry.tab; - settingsContent.initialize(); - Qt.callLater(() => settingsContent.navigateToResult(entry)); - } else { - settingsContent.requestedTab = SettingsPanelService.requestedTab; - if (SettingsPanelService.requestedSubTab >= 0) { - settingsContent._pendingSubTab = SettingsPanelService.requestedSubTab; - SettingsPanelService.requestedSubTab = -1; - } - settingsContent.initialize(); - } - isInitialized = true; - } SettingsPanelService.isWindowOpen = true; } else { isInitialized = false; diff --git a/Services/UI/SettingsPanelService.qml b/Services/UI/SettingsPanelService.qml index 7bb3fa64f..fa561e29f 100644 --- a/Services/UI/SettingsPanelService.qml +++ b/Services/UI/SettingsPanelService.qml @@ -33,6 +33,7 @@ Singleton { settingsWindow.visible = true; isWindowOpen = true; windowOpened(); + settingsWindow.navigateToEntry(entry); } } else { if (!screen) { @@ -61,6 +62,7 @@ Singleton { settingsWindow.visible = true; isWindowOpen = true; windowOpened(); + settingsWindow.navigateTo(tabId, subTabId); } } else { if (!screen) { @@ -81,6 +83,7 @@ Singleton { settingsWindow.visible = true; isWindowOpen = true; windowOpened(); + settingsWindow.navigateTo(requestedTab, -1); } }