KItemListKeyboardSearchManager: make it possible to choose the timeout

It's now possible to change the timeout, after which any call of
KItemListKeyboardSearchManager::addKeys(const QString&) starts a new
search, from the default value of 5000 milliseconds. This is not used
in Dolphin at the moment, but it permits to reduce the timeout to a
small value in the unit test. Before this change, the unit test took
more than 5 seconds to complete.
This commit is contained in:
Frank Reininghaus 2012-03-29 19:56:53 +02:00
parent 12c2b72bb9
commit 82fc1b54bd
3 changed files with 30 additions and 5 deletions

View file

@ -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;
}

View file

@ -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

View file

@ -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);