summaryrefslogtreecommitdiff
path: root/launcher/components
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2025-08-06 14:32:40 +0800
committerlittleblack111 <littleblack11111@gmail.com>2025-08-07 17:27:45 +0800
commit97c2e2bf5a6e0a497e0a11cde6611c68f3767cd6 (patch)
tree1e0dc8e2106f09232a74740cba2dab6c6dda0359 /launcher/components
parent2f857a56d14ec5937df5bf94f6d2775e47cbf817 (diff)
fix(launcher:selection): widget switching
Diffstat (limited to 'launcher/components')
-rw-r--r--launcher/components/App.qml35
-rw-r--r--launcher/components/IComponent.qml4
-rw-r--r--launcher/components/SelectionState.qml10
-rw-r--r--launcher/components/Spell.qml13
4 files changed, 62 insertions, 0 deletions
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;