File 0002-Skip-over-empty-columns-when-doing-keyboard-nav-betw.patch of Package plasma5-desktop.openSUSE_13.2_Update
From e02467941700688fe56b923ab3cd3e3d27fac7d1 Mon Sep 17 00:00:00 2001
From: Eike Hein <hein@kde.org>
Date: Sat, 4 Apr 2015 19:08:27 +0200
Subject: [PATCH 2/4] Skip over empty columns when doing keyboard nav between
runner matches columns.
Implicity a fix for
BUG:345843
but adds an additional sanity check anyway.
---
.../package/contents/ui/FullRepresentation.qml | 40 +++++++++++++++++-----
.../kicker/package/contents/ui/ItemListView.qml | 2 +-
2 files changed, 33 insertions(+), 9 deletions(-)
diff --git a/applets/kicker/package/contents/ui/FullRepresentation.qml b/applets/kicker/package/contents/ui/FullRepresentation.qml
index bdfbfb7df5a88ac0c2744ac9bccf2cd3a6685bfb..7df85da09bc6a37561e677fc4d78f533a2e8c7c3 100644
--- a/applets/kicker/package/contents/ui/FullRepresentation.qml
+++ b/applets/kicker/package/contents/ui/FullRepresentation.qml
@@ -282,20 +282,43 @@ FocusScope {
var target = null;
if (event.key == Qt.Key_Right) {
- if (index < (runnerColumnsRepeater.count - 1)) {
- target = runnerColumnsRepeater.itemAt(index + 1);
- } else {
- target = runnerColumnsRepeater.itemAt(0);
+ var targets = new Array();
+
+ for (var i = index + 1; i < runnerModel.count; ++i) {
+ targets[targets.length] = i;
+ }
+
+ for (var i = 0; i < index; ++i) {
+ targets[targets.length] = i;
+ }
+
+ for (var i = 0; i < targets.length; ++i) {
+ if (runnerModel.modelForRow(targets[i]).count) {
+ target = runnerColumnsRepeater.itemAt(targets[i]);
+ break;
+ }
}
} else if (event.key == Qt.Key_Left) {
- if (index == 0) {
- target = runnerColumnsRepeater.itemAt(0);
- } else {
- target = runnerColumnsRepeater.itemAt(index - 1);
+ var targets = new Array();
+
+ for (var i = index - 1; i >= 0; --i) {
+ targets[targets.length] = i;
+ }
+
+ for (var i = runnerModel.count - 1; i > index; --i) {
+ targets[targets.length] = i;
+ }
+
+ for (var i = 0; i < targets.length; ++i) {
+ if (runnerModel.modelForRow(targets[i]).count) {
+ target = runnerColumnsRepeater.itemAt(targets[i]);
+ break;
+ }
}
}
if (target) {
+ event.accepted = true;
currentIndex = -1;
target.currentIndex = 0;
target.focus = true;
@@ -409,6 +432,7 @@ FocusScope {
for (var i = 0; i < runnerModel.count; ++i) {
if (runnerModel.modelForRow(i).count) {
runnerColumnsRepeater.itemAt(i).currentIndex = 0;
+ break;
}
}
}
diff --git a/applets/kicker/package/contents/ui/ItemListView.qml b/applets/kicker/package/contents/ui/ItemListView.qml
index a5cdcdc3b4cdb856e002c5cc39a167187c726f32..894d1d015f54a4196ad27bfd1522eb9395ce81df 100644
--- a/applets/kicker/package/contents/ui/ItemListView.qml
+++ b/applets/kicker/package/contents/ui/ItemListView.qml
@@ -168,7 +168,7 @@ FocusScope {
return;
}
- if (currentItem != null && !currentItem.hasChildren || !plasmoid.expanded) {
+ if (currentItem == null || !currentItem.hasChildren || !plasmoid.expanded) {
dialogSpawnTimer.stop();
return;
--
2.3.4