From c557f329fd3bb1d33312e370b70ef023269648fb Mon Sep 17 00:00:00 2001 From: Lysec Date: Fri, 6 Feb 2026 13:57:54 +0100 Subject: [PATCH] SettingsPanelWindow: fix highlighting for separate window (#1706) --- .../Launcher/Providers/SettingsProvider.qml | 6 +---- .../Panels/Settings/SettingsPanelWindow.qml | 23 +++++++++++----- Services/UI/SettingsPanelService.qml | 26 +++++++++++++++++++ 3 files changed, 43 insertions(+), 12 deletions(-) diff --git a/Modules/Panels/Launcher/Providers/SettingsProvider.qml b/Modules/Panels/Launcher/Providers/SettingsProvider.qml index 0bade2f62..258391cd8 100644 --- a/Modules/Panels/Launcher/Providers/SettingsProvider.qml +++ b/Modules/Panels/Launcher/Providers/SettingsProvider.qml @@ -168,11 +168,7 @@ Item { launcher.close(); Qt.callLater(() => { - var settingsPanel = PanelService.getPanel("settingsPanel", launcher.screen); - if (settingsPanel) { - settingsPanel.requestedEntry = entry; - settingsPanel.open(); - } + SettingsPanelService.openToEntry(entry, launcher.screen); }); }; } diff --git a/Modules/Panels/Settings/SettingsPanelWindow.qml b/Modules/Panels/Settings/SettingsPanelWindow.qml index fad486b89..30603aa4b 100644 --- a/Modules/Panels/Settings/SettingsPanelWindow.qml +++ b/Modules/Panels/Settings/SettingsPanelWindow.qml @@ -26,13 +26,22 @@ FloatingWindow { // Sync visibility with service onVisibleChanged: { if (visible) { - settingsContent.requestedTab = SettingsPanelService.requestedTab; - settingsContent.initialize(); - if (SettingsPanelService.requestedSubTab >= 0) { - const tab = SettingsPanelService.requestedTab; - const subTab = SettingsPanelService.requestedSubTab; - SettingsPanelService.requestedSubTab = -1; - Qt.callLater(() => settingsContent.navigateToTab(tab, subTab)); + // 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; + settingsContent.initialize(); + if (SettingsPanelService.requestedSubTab >= 0) { + const tab = SettingsPanelService.requestedTab; + const subTab = SettingsPanelService.requestedSubTab; + SettingsPanelService.requestedSubTab = -1; + Qt.callLater(() => settingsContent.navigateToTab(tab, subTab)); + } } SettingsPanelService.isWindowOpen = true; } else { diff --git a/Services/UI/SettingsPanelService.qml b/Services/UI/SettingsPanelService.qml index 5639fee20..4cd4fd561 100644 --- a/Services/UI/SettingsPanelService.qml +++ b/Services/UI/SettingsPanelService.qml @@ -20,9 +20,35 @@ Singleton { // Requested subtab when opening (-1 means no specific subtab) property int requestedSubTab: -1 + // Requested entry for search navigation + property var requestedEntry: null + signal windowOpened signal windowClosed + // Open to a specific search entry (from launcher) + // For window mode, handles directly. For panel mode, delegates to panel. + function openToEntry(entry, screen) { + if (Settings.data.ui.settingsPanelMode === "window") { + requestedEntry = entry; + if (settingsWindow) { + settingsWindow.visible = true; + isWindowOpen = true; + windowOpened(); + } + } else { + if (!screen) { + Logger.w("SettingsPanelService", "Screen parameter required for panel mode"); + return; + } + var settingsPanel = PanelService.getPanel("settingsPanel", screen); + if (settingsPanel) { + settingsPanel.requestedEntry = entry; + settingsPanel.open(); + } + } + } + // Unified function to open settings to a specific tab and subtab // Respects user's settingsPanelMode setting (window vs panel) // For panel mode, screen parameter is required