From 1e068156adbcfe82bca106db3ae67f618e30be36 Mon Sep 17 00:00:00 2001 From: Lemmy Date: Sat, 28 Mar 2026 16:01:32 -0400 Subject: [PATCH] feat(settings): when switching settings panel mode, close and reopen the settings to see the actual change --- .../Panels/Settings/SettingsPanelWindow.qml | 4 ++++ .../Tabs/UserInterface/PanelsSubTab.qml | 20 +++++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/Modules/Panels/Settings/SettingsPanelWindow.qml b/Modules/Panels/Settings/SettingsPanelWindow.qml index 279f6a517..58d394b19 100644 --- a/Modules/Panels/Settings/SettingsPanelWindow.qml +++ b/Modules/Panels/Settings/SettingsPanelWindow.qml @@ -38,6 +38,10 @@ FloatingWindow { settingsContent._pendingSubTab = subTabId; settingsContent.initialize(); isInitialized = true; + // Tab content persists in window mode; if no subtab specified and the + // tab content is still loaded (same tab), reset to first subtab + if (subTabId < 0 && settingsContent.activeTabContent) + settingsContent.setSubTabIndex(0); } } diff --git a/Modules/Panels/Settings/Tabs/UserInterface/PanelsSubTab.qml b/Modules/Panels/Settings/Tabs/UserInterface/PanelsSubTab.qml index af01fe3c6..7ee185e18 100644 --- a/Modules/Panels/Settings/Tabs/UserInterface/PanelsSubTab.qml +++ b/Modules/Panels/Settings/Tabs/UserInterface/PanelsSubTab.qml @@ -3,6 +3,8 @@ import QtQuick.Controls import QtQuick.Layouts import Quickshell import qs.Commons +import qs.Modules.Panels.Settings // For SettingsPanel +import qs.Services.UI import qs.Widgets ColumnLayout { @@ -67,6 +69,7 @@ ColumnLayout { label: I18n.tr("panels.user-interface.settings-panel-mode-label") description: I18n.tr("panels.user-interface.settings-panel-mode-description") Layout.fillWidth: true + minimumWidth: 220 * Style.uiScaleRatio model: [ { "key": "attached", @@ -83,8 +86,21 @@ ColumnLayout { ] currentKey: Settings.data.ui.settingsPanelMode defaultValue: Settings.getDefaultValue("ui.settingsPanelMode") - onSelected: key => Settings.data.ui.settingsPanelMode = key - minimumWidth: 220 * Style.uiScaleRatio + onSelected: key => { + // Defer setup to next update so close can do its work properly + Qt.callLater(() => { + Settings.data.ui.settingsPanelMode = key; + }); + if (Settings.data.ui.settingsPanelMode === "window" || key === "window") { + // Just switched from/to window, need to close panel + var screen = PanelService.openedPanel?.screen || SettingsPanelService.settingsWindow?.screen || PanelService.findScreenForPanels(); + SettingsPanelService.close(screen); + + Qt.callLater(() => { + SettingsPanelService.openToTab(SettingsPanel.Tab.UserInterface, 1, screen); + }); + } + } } NToggle {