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/kitemlistkeyboardsearchmanager.cpp | |
| 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/kitemlistkeyboardsearchmanager.cpp')
| -rw-r--r-- | src/kitemviews/kitemlistkeyboardsearchmanager.cpp | 17 |
1 files changed, 15 insertions, 2 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(); } |
