From 97c2e2bf5a6e0a497e0a11cde6611c68f3767cd6 Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Wed, 6 Aug 2025 14:32:40 +0800 Subject: fix(launcher:selection): widget switching --- launcher/components/App.qml | 35 ++++++++++++++++++++++++++++++++++ launcher/components/IComponent.qml | 4 ++++ launcher/components/SelectionState.qml | 10 ++++++++++ launcher/components/Spell.qml | 13 +++++++++++++ 4 files changed, 62 insertions(+) (limited to 'launcher/components') diff --git a/launcher/components/App.qml b/launcher/components/App.qml index 6f0e4ce..f36e10e 100644 --- a/launcher/components/App.qml +++ b/launcher/components/App.qml @@ -53,6 +53,41 @@ IComponent { selectedIndex++; } + home: function () { + if (repeater.count === 0) + return true; + selectedIndex = -1; + selectedIndex = 0; + } + end: function () { + if (repeater.count === 0) + return true; + selectedIndex = repeater.count; + selectedIndex = repeater.count - 1; + } + + pgup: function () { + if (repeater.count === 0) + return true; + const pageSize = Math.floor(flickable.height / (General.appIconSize + Launcher.innerMargin * 2)); + if (selectedIndex - pageSize < 0) { + selectedIndex = 0; + } else { + selectedIndex -= pageSize; + } + } + + pgdn: function () { + if (repeater.count === 0) + return true; + const pageSize = Math.floor(flickable.height / (General.appIconSize + Launcher.innerMargin * 2)); + if (selectedIndex + pageSize >= repeater.count) { + selectedIndex = repeater.count - 1; + } else { + selectedIndex += pageSize; + } + } + onEntriesChanged: { selectedIndex = 0; flickable.contentY = 0; diff --git a/launcher/components/IComponent.qml b/launcher/components/IComponent.qml index b8963d2..661dd67 100644 --- a/launcher/components/IComponent.qml +++ b/launcher/components/IComponent.qml @@ -39,6 +39,10 @@ IRect { property var prev: () => {} property var next: () => {} property var exec: () => {} + property var home: () => {} + property var end: () => {} + property var pgup: () => {} + property var pgdn: () => {} signal close diff --git a/launcher/components/SelectionState.qml b/launcher/components/SelectionState.qml index 2e53155..6df7116 100644 --- a/launcher/components/SelectionState.qml +++ b/launcher/components/SelectionState.qml @@ -8,8 +8,18 @@ Singleton { property int cursorPosition: 0 property var priorities: [] property int selectedPriority: 0 + property int previousSelectedPriority: 0 property var widgets: [] + onSelectedPriorityChanged: { + if (selectedPriority > previousSelectedPriority) + priorities[selectedPriority].home(); + else + priorities[selectedPriority].end(); + + previousSelectedPriority = selectedPriority; + } + // order them based on widgets(which came from order from config) onPrioritiesChanged: { for (let i = priorities.length - 1; i >= 0; i--) diff --git a/launcher/components/Spell.qml b/launcher/components/Spell.qml index 4501132..5d45e0b 100644 --- a/launcher/components/Spell.qml +++ b/launcher/components/Spell.qml @@ -72,6 +72,19 @@ IComponent { }; } + home: function () { + if (loader.repeater.count === 0) + return true; + selectedIndex = -1; + selectedIndex = 0; + } + end: function () { + if (loader.repeater.count === 0) + return true; + selectedIndex = loader.repeater.count; + selectedIndex = loader.repeater.count - 1; + } + prev: function () { if (selectedIndex <= 0) return true; -- cgit v1.2.3