From: Peter Penz Date: Sun, 10 Oct 2010 16:13:24 +0000 (+0000) Subject: Automatically start the searching if the user did not change the search-text for... X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/717a665c4e6c0c9455ed46163216e7525f36ff87 Automatically start the searching if the user did not change the search-text for at least a second. svn path=/trunk/KDE/kdebase/apps/; revision=1184510 --- diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp index 45490e363..aa20409ba 100644 --- a/src/dolphinviewcontainer.cpp +++ b/src/dolphinviewcontainer.cpp @@ -102,6 +102,7 @@ DolphinViewContainer::DolphinViewContainer(const KUrl& url, QWidget* parent) : m_searchBox->hide(); connect(m_searchBox, SIGNAL(closeRequest()), this, SLOT(closeSearchBox())); connect(m_searchBox, SIGNAL(search(QString)), this, SLOT(startSearching(QString))); + connect(m_searchBox, SIGNAL(returnPressed(QString)), this, SLOT(requestFocus())); m_dirLister = new DolphinDirLister(); m_dirLister->setAutoUpdate(true); @@ -431,7 +432,7 @@ void DolphinViewContainer::slotUrlNavigatorLocationChanged(const KUrl& url) } m_view->setUrl(url); - if (isActive()) { + if (isActive() && !isSearchUrl(url)) { // When an URL has been entered, the view should get the focus. // The focus must be requested asynchronously, as changing the URL might create // a new view widget. diff --git a/src/search/dolphinsearchbox.cpp b/src/search/dolphinsearchbox.cpp index 644736952..f12df73f3 100644 --- a/src/search/dolphinsearchbox.cpp +++ b/src/search/dolphinsearchbox.cpp @@ -34,6 +34,7 @@ #include #include #include +#include #include #include @@ -66,7 +67,8 @@ DolphinSearchBox::DolphinSearchBox(QWidget* parent) : m_filterButton(0), m_filterWidgetsLayout(0), m_filterWidgets(), - m_searchPath() + m_searchPath(), + m_startSearchTimer(0) { } @@ -156,6 +158,7 @@ void DolphinSearchBox::keyReleaseEvent(QKeyEvent* event) void DolphinSearchBox::emitSearchSignal() { + m_startSearchTimer->stop(); m_startedSearching = true; emit search(m_searchInput->text()); } @@ -167,6 +170,22 @@ void DolphinSearchBox::slotConfigurationChanged() } } +void DolphinSearchBox::slotSearchTextChanged(const QString& text) +{ + if (text.isEmpty()) { + m_startSearchTimer->stop(); + } else { + m_startSearchTimer->start(); + } + emit searchTextChanged(text); +} + +void DolphinSearchBox::slotReturnPressed(const QString& text) +{ + emitSearchSignal(); + emit returnPressed(text); +} + void DolphinSearchBox::setFilterWidgetsVisible(bool visible) { #ifdef HAVE_NEPOMUK @@ -241,10 +260,10 @@ void DolphinSearchBox::init() m_searchInput = new KLineEdit(this); m_searchInput->setClearButtonShown(true); m_searchInput->setFont(KGlobalSettings::generalFont()); - connect(m_searchInput, SIGNAL(returnPressed()), - this, SLOT(emitSearchSignal())); + connect(m_searchInput, SIGNAL(returnPressed(QString)), + this, SLOT(slotReturnPressed(QString))); connect(m_searchInput, SIGNAL(textChanged(QString)), - this, SIGNAL(searchTextChanged(QString))); + this, SLOT(slotSearchTextChanged(QString))); // Apply layout for the search input QHBoxLayout* searchInputLayout = new QHBoxLayout(); @@ -304,6 +323,13 @@ void DolphinSearchBox::init() searchLabel->setBuddy(m_searchInput); loadSettings(); + + // The searching should be started automatically after the user did not change + // the text within one second + m_startSearchTimer = new QTimer(this); + m_startSearchTimer->setSingleShot(true); + m_startSearchTimer->setInterval(1000); + connect(m_startSearchTimer, SIGNAL(timeout()), this, SLOT(emitSearchSignal())); } bool DolphinSearchBox::isSearchPathIndexed() const diff --git a/src/search/dolphinsearchbox.h b/src/search/dolphinsearchbox.h index f0ec73def..f88fc43f4 100644 --- a/src/search/dolphinsearchbox.h +++ b/src/search/dolphinsearchbox.h @@ -71,7 +71,7 @@ protected: signals: /** - * Is emitted when the user pressed Return or Enter + * Is emitted when a searching should be triggered * and provides the text that should be used as input * for searching. */ @@ -83,6 +83,8 @@ signals: */ void searchTextChanged(const QString& text); + void returnPressed(const QString& text); + /** * Emitted as soon as the search box should get closed. */ @@ -91,6 +93,8 @@ signals: private slots: void emitSearchSignal(); void slotConfigurationChanged(); + void slotSearchTextChanged(const QString& text); + void slotReturnPressed(const QString& text); void setFilterWidgetsVisible(bool visible); private: @@ -127,6 +131,8 @@ private: QList m_filterWidgets; KUrl m_searchPath; + + QTimer* m_startSearchTimer; }; #endif