From c43f16b05b11abddb9e4b80159ee598c3fc8bf57 Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Tue, 19 Aug 2025 21:41:46 +0800 Subject: refactor(launcher:components): drop mouseTriggered flag, simplify selection logic Removed the redundant `mouseTriggered` property and its related checks across App, Clip, Emoji, and Spell components. Selection state is now guarded directly by index bounds and loader/view availability, reducing complexity and ensuring consistent behavior between keyboard and mouse interactions. --- popups/launcher/components/App.qml | 21 +++++++-------------- popups/launcher/components/Clip.qml | 11 ++--------- popups/launcher/components/Emoji.qml | 17 +++++++++++------ popups/launcher/components/Spell.qml | 14 +++++++++----- 4 files changed, 29 insertions(+), 34 deletions(-) (limited to 'popups') diff --git a/popups/launcher/components/App.qml b/popups/launcher/components/App.qml index 0bb5fd9..a26d990 100644 --- a/popups/launcher/components/App.qml +++ b/popups/launcher/components/App.qml @@ -12,7 +12,6 @@ IComponent { property list entries: active ? AppSearch.query(inputCleaned) : [] property int selectedIndex: -1 - property bool mouseTriggered: false name: "Applications" @@ -45,27 +44,23 @@ IComponent { up: function () { if (selectedIndex <= 0) return true; - mouseTriggered = false; selectedIndex--; } down: function () { if (selectedIndex + 1 > listView.count - 1) return true; - mouseTriggered = false; selectedIndex++; } home: function () { if (listView.count === 0) return true; - mouseTriggered = false; selectedIndex = -1; selectedIndex = 0; } end: function () { if (listView.count === 0) return true; - mouseTriggered = false; selectedIndex = listView.count; selectedIndex = listView.count - 1; } @@ -73,7 +68,6 @@ IComponent { pgup: function () { if (listView.count === 0) return true; - mouseTriggered = false; const pageSize = Math.floor(listView.height / (General.appIconSize + Launcher.innerMargin * 2)); if (selectedIndex - pageSize < 0) { selectedIndex = 0; @@ -85,7 +79,6 @@ IComponent { pgdn: function () { if (listView.count === 0) return true; - mouseTriggered = false; const pageSize = Math.floor(listView.height / (General.appIconSize + Launcher.innerMargin * 2)); if (selectedIndex + pageSize >= listView.count) { selectedIndex = listView.count - 1; @@ -99,6 +92,7 @@ IComponent { syncSelectionState(); return; } + selectedIndex = 0; listView.contentY = 0; syncSelectionState(); @@ -106,15 +100,18 @@ IComponent { onSelectedIndexChanged: { syncSelectionState(); - if (selectedIndex < 0 || selectedIndex >= listView.count || mouseTriggered) - return; Qt.callLater(() => { listView.positionViewAtIndex(selectedIndex, ListView.Contain); }); } syncSelectionState: function () { - Qt.callLater(() => state.selected = listView.itemAtIndex(selectedIndex)); + Qt.callLater(() => { + if (selectedIndex < 0 || selectedIndex >= listView.count) + return; + + state.selected = listView.itemAtIndex(selectedIndex); + }); } IInnerComponent { @@ -165,12 +162,8 @@ IComponent { anchors.fill: parent hoverEnabled: true onPositionChanged: { - root.mouseTriggered = true; root.selectedIndex = index; } - onExited: { - root.mouseTriggered = true; - } onPressed: { root._exec(); } diff --git a/popups/launcher/components/Clip.qml b/popups/launcher/components/Clip.qml index bc8d65f..7c6a5d5 100644 --- a/popups/launcher/components/Clip.qml +++ b/popups/launcher/components/Clip.qml @@ -12,7 +12,6 @@ IComponent { property var clipHist: active ? Clip.query(inputCleaned) : [] property int selectedIndex: -1 - property bool mouseTriggered: false name: "Clipboard" @@ -35,13 +34,11 @@ IComponent { up: function () { if (selectedIndex <= 0) return true; - mouseTriggered = false; selectedIndex--; } down: function () { if (selectedIndex + 1 > listView.count - 1) return true; - mouseTriggered = false; selectedIndex++; } @@ -50,14 +47,14 @@ IComponent { syncSelectionState(); return; } - mouseTriggered = false; + selectedIndex = 0; listView.positionViewAtBeginning(); syncSelectionState(); } onSelectedIndexChanged: { - if (!mouseTriggered && selectedIndex >= 0 && selectedIndex < listView.count) { + if (selectedIndex >= 0 && selectedIndex < listView.count) { Qt.callLater(() => { listView.positionViewAtIndex(selectedIndex, ListView.Contain); }); @@ -150,12 +147,8 @@ IComponent { anchors.fill: parent hoverEnabled: true onPositionChanged: { - root.mouseTriggered = true; root.selectedIndex = index; } - onExited: { - root.mouseTriggered = true; - } onPressed: { root._exec(); } diff --git a/popups/launcher/components/Emoji.qml b/popups/launcher/components/Emoji.qml index 4e3a58d..10906c8 100644 --- a/popups/launcher/components/Emoji.qml +++ b/popups/launcher/components/Emoji.qml @@ -26,18 +26,18 @@ IComponent { syncSelectionState(); return; } - selectedIndex = emojis.length > 0 ? 0 : -1; + + selectedIndex = 0; if (loader.item && loader.item.flickable) loader.item.flickable.contentY = 0; }); } onSelectedIndexChanged: { - if (!loader.view || !loader.item || !loader.item.flickable) - return; - if (selectedIndex < 0 || selectedIndex >= loader.view.count) - return; Qt.callLater(() => { + if (!loader.view || selectedIndex < 0 || selectedIndex >= loader.view.count) + return; + syncSelectionState(); loader.view.currentIndex = selectedIndex; loader.view.positionViewAtIndex(selectedIndex, GridView.Contain); @@ -91,7 +91,12 @@ IComponent { } syncSelectionState: function () { - Qt.callLater(() => state.selected = loader.view.itemAtIndex(selectedIndex)); + Qt.callLater(() => { + if (!loader.view || selectedIndex < 0 || selectedIndex >= loader.view.count) + return; + + state.selected = loader.view.itemAtIndex(selectedIndex); + }); } IInnerComponent { diff --git a/popups/launcher/components/Spell.qml b/popups/launcher/components/Spell.qml index cfe315f..b0ccd8f 100644 --- a/popups/launcher/components/Spell.qml +++ b/popups/launcher/components/Spell.qml @@ -39,11 +39,10 @@ IComponent { } onSelectedIndexChanged: { - if (!loader.view || !loader.item || !loader.item.flickable) - return; - if (selectedIndex < 0 || selectedIndex >= loader.view.count) - return; Qt.callLater(() => { + if (!loader.view || selectedIndex < 0 || selectedIndex >= loader.view.count) + return; + syncSelectionState(); loader.view.currentIndex = selectedIndex; loader.view.positionViewAtIndex(selectedIndex, GridView.Contain); @@ -115,7 +114,12 @@ IComponent { } syncSelectionState: function () { - Qt.callLater(() => state.selected = loader.view.itemAtIndex(selectedIndex)); + Qt.callLater(() => { + if (!loader.view || selectedIndex < 0 || selectedIndex >= loader.view.count) + return; + + state.selected = loader.view.itemAtIndex(selectedIndex); + }); } IInnerComponent { -- cgit v1.2.3