diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/kitemviews/kitemlistkeyboardsearchmanager.cpp | 17 | ||||
| -rw-r--r-- | src/kitemviews/kitemlistkeyboardsearchmanager_p.h | 10 | ||||
| -rw-r--r-- | src/tests/kitemlistkeyboardsearchmanagertest.cpp | 8 |
3 files changed, 30 insertions, 5 deletions
diff --git a/src/kitemviews/kitemlistkeyboardsearchmanager.cpp b/src/kitemviews/kitemlistkeyboardsearchmanager.cpp index 1ff60d09c..f4dc1a547 100644 --- a/src/kitemviews/kitemlistkeyboardsearchmanager.cpp +++ b/src/kitemviews/kitemlistkeyboardsearchmanager.cpp @@ -28,7 +28,8 @@ #include <KDebug> KItemListKeyboardSearchManager::KItemListKeyboardSearchManager(QObject* parent) : - QObject(parent) + QObject(parent), + m_timeout(5000) { m_keyboardInputTime.invalidate(); } @@ -41,8 +42,7 @@ void KItemListKeyboardSearchManager::addKeys(const QString& keys) { const bool keyboardTimeWasValid = m_keyboardInputTime.isValid(); const qint64 keyboardInputTimeElapsed = m_keyboardInputTime.restart(); - const qint64 timeout = 5000; - if (keyboardInputTimeElapsed > timeout || !keyboardTimeWasValid || keys.isEmpty()) { + if (keyboardInputTimeElapsed > m_timeout || !keyboardTimeWasValid || keys.isEmpty()) { m_searchedString.clear(); } @@ -65,3 +65,14 @@ void KItemListKeyboardSearchManager::addKeys(const QString& keys) } m_keyboardInputTime.start(); } + +void KItemListKeyboardSearchManager::setTimeout(qint64 milliseconds) +{ + m_timeout = milliseconds; +} + +qint64 KItemListKeyboardSearchManager::timeout() const +{ + return m_timeout; +} + diff --git a/src/kitemviews/kitemlistkeyboardsearchmanager_p.h b/src/kitemviews/kitemlistkeyboardsearchmanager_p.h index 05de76a8c..d6a6686db 100644 --- a/src/kitemviews/kitemlistkeyboardsearchmanager_p.h +++ b/src/kitemviews/kitemlistkeyboardsearchmanager_p.h @@ -49,6 +49,15 @@ public: */ void addKeys(const QString& keys); + /** + * Sets the delay after which the search is cancelled to \a milliseconds. + * If the time interval between two calls of addKeys(const QString&) is + * larger than this, the second call will start a new search, rather than + * combining the keys received from both calls to a single search string. + */ + void setTimeout(qint64 milliseconds); + qint64 timeout() const; + signals: /** * Is emitted if the current item should be changed corresponding @@ -64,6 +73,7 @@ signals: private: QString m_searchedString; QElapsedTimer m_keyboardInputTime; + qint64 m_timeout; }; #endif diff --git a/src/tests/kitemlistkeyboardsearchmanagertest.cpp b/src/tests/kitemlistkeyboardsearchmanagertest.cpp index 14a09a31c..aeca1f779 100644 --- a/src/tests/kitemlistkeyboardsearchmanagertest.cpp +++ b/src/tests/kitemlistkeyboardsearchmanagertest.cpp @@ -65,6 +65,10 @@ void KItemListKeyboardSearchManagerTest::testBasicKeyboardSearch() void KItemListKeyboardSearchManagerTest::testAbortedKeyboardSearch() { + // Set the timeout to a small value (the default is 5000 milliseconds) + // to save time when running this test. + m_keyboardSearchManager.setTimeout(100); + QSignalSpy spy(&m_keyboardSearchManager, SIGNAL(changeCurrentItem(QString,bool))); m_keyboardSearchManager.addKeys("f"); @@ -75,9 +79,9 @@ void KItemListKeyboardSearchManagerTest::testAbortedKeyboardSearch() QCOMPARE(spy.count(), 1); QCOMPARE(spy.takeFirst(), QList<QVariant>() << "fi" << false); - // If the delay between two key presses is larger than 5000 milliseconds, + // If the delay between two key presses is larger than the chosen timeout, // a new search is started. We add a small safety margin to avoid race conditions. - QTest::qWait(5000 + 10); + QTest::qWait(m_keyboardSearchManager.timeout() + 10); m_keyboardSearchManager.addKeys("l"); QCOMPARE(spy.count(), 1); |
