diff options
| author | Frank Reininghaus <[email protected]> | 2011-08-30 13:10:38 +0200 |
|---|---|---|
| committer | Frank Reininghaus <[email protected]> | 2011-08-30 18:22:56 +0200 |
| commit | 9dc7cd79e7f650ccf57520888c069eef5d03a57f (patch) | |
| tree | 2065e7b8ce20ee1127a03af618357258c0e6d0b8 /src/kitemviews | |
| parent | 1e897556b035cf950a8071266d18b3e191d4c7d7 (diff) | |
KItemListKeyboardSearchManager improvements and unit tests
This commit implements a 'repeated key search' feature, similar
to QAbstractItemView, and adds unit tests for keyboard searching.
Diffstat (limited to 'src/kitemviews')
| -rw-r--r-- | src/kitemviews/kitemlistkeyboardsearchmanager.cpp | 17 | ||||
| -rw-r--r-- | src/kitemviews/kitemlistkeyboardsearchmanager_p.h | 4 |
2 files changed, 15 insertions, 6 deletions
diff --git a/src/kitemviews/kitemlistkeyboardsearchmanager.cpp b/src/kitemviews/kitemlistkeyboardsearchmanager.cpp index 9552a7582..cefedfc2c 100644 --- a/src/kitemviews/kitemlistkeyboardsearchmanager.cpp +++ b/src/kitemviews/kitemlistkeyboardsearchmanager.cpp @@ -45,10 +45,23 @@ void KItemListKeyboardSearchManager::addKeys(const QString& keys) || !keyboardTimeWasValid || keys.isEmpty()) { m_searchedString.clear(); } - const bool searchFromNextItem = m_searchedString.isEmpty(); + + const bool newSearch = m_searchedString.isEmpty(); + if (!keys.isEmpty()) { m_searchedString.append(keys); - emit changeCurrentItem(m_searchedString, searchFromNextItem); + + // Special case: + // If the same key is pressed repeatedly, the next item matching that key should be highlighted + const QChar firstKey = m_searchedString.length() > 0 ? m_searchedString.at(0) : QChar(); + 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 + // 2. a 'repeated key' search is done. + const bool searchFromNextItem = newSearch || sameKey; + + emit changeCurrentItem(sameKey ? firstKey : m_searchedString, searchFromNextItem); } m_keyboardInputTime.start(); } diff --git a/src/kitemviews/kitemlistkeyboardsearchmanager_p.h b/src/kitemviews/kitemlistkeyboardsearchmanager_p.h index 3441dd7bc..05de76a8c 100644 --- a/src/kitemviews/kitemlistkeyboardsearchmanager_p.h +++ b/src/kitemviews/kitemlistkeyboardsearchmanager_p.h @@ -29,10 +29,6 @@ #include <QString> #include <QElapsedTimer> -class KItemListController; -class QInputMethodEvent; -class QKeyEvent; - /** * @brief Controls the keyboard searching ability for a KItemListController. * |
