Improve activity list highlighting/keyboard item selection
authorClaudio Cambra <claudio.cambra@gmail.com>
Tue, 26 Jul 2022 17:21:17 +0000 (19:21 +0200)
committerClaudio Cambra <claudio.cambra@gmail.com>
Wed, 7 Sep 2022 16:27:14 +0000 (18:27 +0200)
Signed-off-by: Claudio Cambra <claudio.cambra@gmail.com>
src/gui/tray/ActivityItem.qml
src/gui/tray/ActivityList.qml

index 9dbc41cd3c0edb951ad95b80686caa0b07170303..74e15b5633131549507de4851d09fbf6b54273f0 100644 (file)
@@ -27,10 +27,6 @@ ItemDelegate {
     Accessible.name: (model.path !== "" && model.displayPath !== "") ? qsTr("Open %1 locally").arg(model.displayPath) : model.message
     Accessible.onPressAction: root.clicked()
 
-    background: Rectangle {
-        color: root.hovered ? Style.lightHover : "transparent"
-    }
-
     NCToolTip {
         visible: root.hovered && !activityContent.childHovered && model.displayLocation !== ""
         text: qsTr("In %1").arg(model.displayLocation)
index f3a6416c2afe644d3e639346906316baf04a5008..8106c939f3aa98947a62d73f459eefae312d8645 100644 (file)
@@ -2,6 +2,7 @@ import QtQuick 2.15
 import QtQuick.Controls 2.15
 
 import com.nextcloud.desktopclient 1.0 as NC
+import Style 1.0
 
 ScrollView {
     id: controlRoot
@@ -14,6 +15,7 @@ ScrollView {
 
     contentWidth: availableWidth
     padding: 1
+    focus: false
 
     ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
 
@@ -24,19 +26,49 @@ ScrollView {
     ListView {
         id: activityList
 
-        keyNavigationEnabled: true
-
         Accessible.role: Accessible.List
         Accessible.name: qsTr("Activity list")
 
         clip: true
-
         spacing: 0
+        currentIndex: -1
+        interactive: true
+
+        highlight: Rectangle {
+            id: activityHover
+            width: activityList.currentItem.width
+            height: activityList.currentItem.height
+            color: Style.lightHover
+            visible: activityList.activeFocus
+        }
+        highlightFollowsCurrentItem: true
+        highlightMoveDuration: 0
+        highlightResizeDuration: 0
+        highlightRangeMode: ListView.ApplyRange
+        preferredHighlightBegin: 0
+        preferredHighlightEnd: controlRoot.height
 
         delegate: ActivityItem {
             isFileActivityList: controlRoot.isFileActivityList
             width: activityList.contentWidth
             flickable: activityList
+            onEntered: {
+                // When we set the currentIndex the list view will scroll...
+                // unless we tamper with the preferred highlight points to stop this.
+                const savedPreferredHighlightBegin = activityList.preferredHighlightBegin;
+                const savedPreferredHighlightEnd = activityList.preferredHighlightEnd;
+                // Set overkill values to make sure no scroll happens when we hover with mouse
+                activityList.preferredHighlightBegin = -controlRoot.height;
+                activityList.preferredHighlightEnd = controlRoot.height * 2;
+
+                activityList.currentIndex = index
+
+                // Reset original values so keyboard navigation makes list view scroll
+                activityList.preferredHighlightBegin = savedPreferredHighlightBegin;
+                activityList.preferredHighlightEnd = savedPreferredHighlightEnd;
+
+                forceActiveFocus();
+            }
             onClicked: {
                 if (model.isCurrentUserFileActivity && model.openablePath) {
                     openFile("file://" + model.openablePath);