mirror of
https://invent.kde.org/system/dolphin
synced 2024-11-05 18:47:12 +00:00
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:
parent
12c2b72bb9
commit
82fc1b54bd
3 changed files with 30 additions and 5 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue