dotfiles/pkgs/dms-settings-reopen.patch
Daniel Bulant c64ce3a78d
fixes
2026-08-30 23:29:10 +02:00

77 lines
2.4 KiB
Diff

--- a/quickshell/Services/PopoutService.qml
+++ b/quickshell/Services/PopoutService.qml
@@ -388,8 +388,40 @@
property string _settingsPendingTab: ""
property int _settingsPendingTabIndex: -1
+ property double _settingsShownAt: 0
+
+ function _settingsWindowDead() {
+ if (!settingsModal?.visible)
+ return false;
+ // Toplevel registration is async; a freshly shown window looks dead.
+ if (Date.now() - _settingsShownAt < 2000)
+ return false;
+ const settingsTitle = I18n.tr("Settings", "settings window title");
+ for (const toplevel of ToplevelManager.toplevels.values) {
+ if (toplevel.title === "Settings" || toplevel.title === settingsTitle)
+ return false;
+ }
+ return true;
+ }
+
+ function _rebuildDeadSettings() {
+ settingsModal.visible = false;
+ settingsModal = null;
+ settingsModalLoader.active = false;
+ _settingsWantsOpen = true;
+ _settingsWantsToggle = false;
+ Qt.callLater(() => {
+ if (settingsModalLoader)
+ settingsModalLoader.activeAsync = true;
+ });
+ }
+
function openSettings() {
if (settingsModal) {
+ if (_settingsWindowDead()) {
+ _rebuildDeadSettings();
+ return;
+ }
settingsModal.show();
} else if (settingsModalLoader) {
_settingsWantsOpen = true;
@@ -399,8 +431,23 @@
}
}
+ Connections {
+ target: root.settingsModal
+ function onVisibleChanged() {
+ if (root.settingsModal?.visible)
+ root._settingsShownAt = Date.now();
+ }
+ }
+
function openSettingsWithTab(tabName: string) {
if (settingsModal) {
+ if (_settingsWindowDead()) {
+ _settingsPendingTab = tabName;
+ _rebuildDeadSettings();
+ return;
+ }
settingsModal.showWithTabName(tabName);
return;
}
@@ -413,6 +460,11 @@
function openSettingsWithTabIndex(tabIndex: int) {
if (settingsModal) {
+ if (_settingsWindowDead()) {
+ _settingsPendingTabIndex = tabIndex;
+ _rebuildDeadSettings();
+ return;
+ }
settingsModal.showWithTab(tabIndex);
return;
}