mirror of
https://github.com/danbulant/dotfiles
synced 2026-09-17 13:23:51 +00:00
77 lines
2.4 KiB
Diff
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;
|
|
}
|