┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews
diff options
context:
space:
mode:
authorMéven Car <[email protected]>2019-10-26 12:53:04 +0200
committerMéven Car <[email protected]>2019-10-26 12:53:34 +0200
commita5ce798f282b6cf9e153bba89f9caea0cec37da0 (patch)
tree818304092ce30546b7d6fc126ed471e9f7b5fd57 /src/kitemviews
parentd8c11a67bd98820fd2c9a4b616460857af70344b (diff)
When the selection is deselected, restart the keyboard search from the beginning
Summary: BUG: 411538 FIXED-IN: 19.12 Test Plan: Open a directory with 3 files starting with the same letter. 1. Press this letter key twice 2. The second file is selected 3. Deselect the file with the mouse or using Esc 4. Wait 1 second 5. Press the same key again Before: The third file gets selected After: The first file get selected ctest Reviewers: #dolphin, elvisangelaccio, ngraham Reviewed By: #dolphin, elvisangelaccio, ngraham Subscribers: ngraham, kfm-devel Tags: #dolphin Differential Revision: https://phabricator.kde.org/D23716
Diffstat (limited to 'src/kitemviews')
-rw-r--r--src/kitemviews/kitemlistcontroller.cpp2
-rw-r--r--src/kitemviews/private/kitemlistkeyboardsearchmanager.cpp19
-rw-r--r--src/kitemviews/private/kitemlistkeyboardsearchmanager.h3
3 files changed, 21 insertions, 3 deletions
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
index ad859c52a..8cc9529ef 100644
--- a/src/kitemviews/kitemlistcontroller.cpp
+++ b/src/kitemviews/kitemlistcontroller.cpp
@@ -61,6 +61,8 @@ KItemListController::KItemListController(KItemModelBase* model, KItemListView* v
this, &KItemListController::slotChangeCurrentItem);
connect(m_selectionManager, &KItemListSelectionManager::currentChanged,
m_keyboardManager, &KItemListKeyboardSearchManager::slotCurrentChanged);
+ connect(m_selectionManager, &KItemListSelectionManager::selectionChanged,
+ m_keyboardManager, &KItemListKeyboardSearchManager::slotSelectionChanged);
m_autoActivationTimer = new QTimer(this);
m_autoActivationTimer->setSingleShot(true);
diff --git a/src/kitemviews/private/kitemlistkeyboardsearchmanager.cpp b/src/kitemviews/private/kitemlistkeyboardsearchmanager.cpp
index 82e8aa2ff..09b4eaf23 100644
--- a/src/kitemviews/private/kitemlistkeyboardsearchmanager.cpp
+++ b/src/kitemviews/private/kitemlistkeyboardsearchmanager.cpp
@@ -22,9 +22,9 @@
#include "kitemlistkeyboardsearchmanager.h"
-
KItemListKeyboardSearchManager::KItemListKeyboardSearchManager(QObject* parent) :
QObject(parent),
+ m_isSearchRestarted(false),
m_timeout(1000)
{
m_keyboardInputTime.invalidate();
@@ -64,9 +64,13 @@ void KItemListKeyboardSearchManager::addKeys(const QString& keys)
const bool sameKey = m_searchedString.length() > 1 && m_searchedString.count(firstKey) == m_searchedString.length();
// Searching for a matching item should start from the next item if either
- // 1. a new search is started, or
+ // 1. a new search is started and a search has not been restarted or
// 2. a 'repeated key' search is done.
- const bool searchFromNextItem = newSearch || sameKey;
+ const bool searchFromNextItem = (!m_isSearchRestarted && newSearch) || sameKey;
+
+ // to remember not to searchFromNextItem if selection was deselected
+ // loosing keyboard search context basically
+ m_isSearchRestarted = false;
emit changeCurrentItem(sameKey ? firstKey : m_searchedString, searchFromNextItem);
}
@@ -85,6 +89,7 @@ qint64 KItemListKeyboardSearchManager::timeout() const
void KItemListKeyboardSearchManager::cancelSearch()
{
+ m_isSearchRestarted = true;
m_searchedString.clear();
}
@@ -97,3 +102,11 @@ void KItemListKeyboardSearchManager::slotCurrentChanged(int current, int previou
cancelSearch();
}
}
+
+void KItemListKeyboardSearchManager::slotSelectionChanged(const KItemSet& current, const KItemSet& previous)
+{
+ if (!previous.isEmpty() && current.isEmpty() && previous.count() > 0 && current.count() == 0) {
+ // The selection has been emptied. We should cancel the search.
+ cancelSearch();
+ }
+}
diff --git a/src/kitemviews/private/kitemlistkeyboardsearchmanager.h b/src/kitemviews/private/kitemlistkeyboardsearchmanager.h
index 29bec1414..9995c16b0 100644
--- a/src/kitemviews/private/kitemlistkeyboardsearchmanager.h
+++ b/src/kitemviews/private/kitemlistkeyboardsearchmanager.h
@@ -24,6 +24,7 @@
#define KITEMLISTKEYBOARDSEARCHMANAGER_H
#include "dolphin_export.h"
+#include "kitemviews/kitemset.h"
#include <QElapsedTimer>
#include <QObject>
@@ -64,6 +65,7 @@ public:
public slots:
void slotCurrentChanged(int current, int previous);
+ void slotSelectionChanged(const KItemSet& current, const KItemSet& previous);
signals:
/**
@@ -79,6 +81,7 @@ signals:
private:
QString m_searchedString;
+ bool m_isSearchRestarted;
QElapsedTimer m_keyboardInputTime;
qint64 m_timeout;
};