From 4b1c181d24cb1fb97cb36f2817087f5ef948d40a Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Wed, 20 Aug 2025 13:01:19 +0800 Subject: fix(launcher): perserve selected between launches launcher:component don't let syncSelectionState set selected if it's not valid --- popups/launcher/Launcher.qml | 9 +++++++++ popups/launcher/components/App.qml | 2 +- popups/launcher/components/Clip.qml | 6 +++++- popups/launcher/components/Emoji.qml | 2 +- popups/launcher/components/Spell.qml | 2 +- 5 files changed, 17 insertions(+), 4 deletions(-) diff --git a/popups/launcher/Launcher.qml b/popups/launcher/Launcher.qml index 25b2926..d1ff896 100644 --- a/popups/launcher/Launcher.qml +++ b/popups/launcher/Launcher.qml @@ -15,6 +15,15 @@ ILauncher { name: "quickshell::launcher::launcher" + Connections { + target: parentLoader + function onActiveChanged() { + if (!parentLoader.active && launcher.state) { + launcher.state.selected = null; + } + } + } + anchors.top: true margins.top: Launcher.topMargin aboveWindows: true diff --git a/popups/launcher/components/App.qml b/popups/launcher/components/App.qml index a26d990..a88c24a 100644 --- a/popups/launcher/components/App.qml +++ b/popups/launcher/components/App.qml @@ -107,7 +107,7 @@ IComponent { syncSelectionState: function () { Qt.callLater(() => { - if (selectedIndex < 0 || selectedIndex >= listView.count) + if (selectedIndex < 0 || selectedIndex >= listView.count || !root.visible) return; state.selected = listView.itemAtIndex(selectedIndex); diff --git a/popups/launcher/components/Clip.qml b/popups/launcher/components/Clip.qml index 7c6a5d5..138cb10 100644 --- a/popups/launcher/components/Clip.qml +++ b/popups/launcher/components/Clip.qml @@ -63,7 +63,11 @@ IComponent { } syncSelectionState: function () { - Qt.callLater(() => state.selected = listView.itemAtIndex(selectedIndex)); + Qt.callLater(() => { + if (!root.visible || selectedIndex < 0 || selectedIndex >= listView.count) + return; + state.selected = listView.itemAtIndex(selectedIndex); + }); } IInnerComponent { diff --git a/popups/launcher/components/Emoji.qml b/popups/launcher/components/Emoji.qml index 10906c8..8160894 100644 --- a/popups/launcher/components/Emoji.qml +++ b/popups/launcher/components/Emoji.qml @@ -92,7 +92,7 @@ IComponent { syncSelectionState: function () { Qt.callLater(() => { - if (!loader.view || selectedIndex < 0 || selectedIndex >= loader.view.count) + if (!loader.view || selectedIndex < 0 || selectedIndex >= loader.view.count || !root.visible) return; state.selected = loader.view.itemAtIndex(selectedIndex); diff --git a/popups/launcher/components/Spell.qml b/popups/launcher/components/Spell.qml index b0ccd8f..c627b9e 100644 --- a/popups/launcher/components/Spell.qml +++ b/popups/launcher/components/Spell.qml @@ -115,7 +115,7 @@ IComponent { syncSelectionState: function () { Qt.callLater(() => { - if (!loader.view || selectedIndex < 0 || selectedIndex >= loader.view.count) + if (!loader.view || selectedIndex < 0 || selectedIndex >= loader.view.count || !root.visible) return; state.selected = loader.view.itemAtIndex(selectedIndex); -- cgit v1.2.3