diff options
Diffstat (limited to 'src/search')
| -rw-r--r-- | src/search/dolphinquery.cpp | 44 | ||||
| -rw-r--r-- | src/search/dolphinquery.h | 12 | ||||
| -rw-r--r-- | src/search/dolphinsearchbox.cpp | 37 | ||||
| -rw-r--r-- | src/search/dolphinsearchbox.h | 5 |
4 files changed, 67 insertions, 31 deletions
diff --git a/src/search/dolphinquery.cpp b/src/search/dolphinquery.cpp index ab107f43f..0581a02ec 100644 --- a/src/search/dolphinquery.cpp +++ b/src/search/dolphinquery.cpp @@ -27,6 +27,7 @@ #endif namespace { +#ifdef HAVE_BALOO /** Checks if a given term in the Baloo::Query::searchString() is a special search term * @return: the specific search token of the term, or an empty QString() if none is found */ @@ -67,20 +68,40 @@ namespace { } return textParts; } +#endif } -DolphinQuery DolphinQuery::fromBalooSearchUrl(const QUrl& searchUrl) + +DolphinQuery DolphinQuery::fromSearchUrl(const QUrl& searchUrl) { DolphinQuery model; model.m_searchUrl = searchUrl; + if (searchUrl.scheme() == QLatin1String("baloosearch")) { + model.parseBalooQuery(); + } + + return model; +} + +bool DolphinQuery::supportsScheme(const QString& urlScheme) +{ + static const QStringList supportedSchemes = { + QStringLiteral("baloosearch"), + }; + + return supportedSchemes.contains(urlScheme); +} + +void DolphinQuery::parseBalooQuery() +{ #ifdef HAVE_BALOO - const Baloo::Query query = Baloo::Query::fromSearchUrl(searchUrl); + const Baloo::Query query = Baloo::Query::fromSearchUrl(m_searchUrl); - model.m_includeFolder = query.includeFolder(); + m_includeFolder = query.includeFolder(); const QStringList types = query.types(); - model.m_fileType = types.isEmpty() ? QString() : types.first(); + m_fileType = types.isEmpty() ? QString() : types.first(); QStringList textParts; QString fileName; @@ -93,34 +114,33 @@ DolphinQuery DolphinQuery::fromBalooSearchUrl(const QUrl& searchUrl) if (token == QLatin1String("filename:")) { if (!value.isEmpty()) { fileName = value; - model.m_hasFileName = true; + m_hasFileName = true; } continue; } else if (!token.isEmpty()) { - model.m_searchTerms << token + value; + m_searchTerms << token + value; continue; } else if (subTerm == QLatin1String("AND") && subTerm != subTerms.at(0) && subTerm != subTerms.back()) { continue; } else if (!value.isEmpty()) { textParts << value; - model.m_hasContentSearch = true; + m_hasContentSearch = true; } } - if (model.m_hasFileName) { - if (model.m_hasContentSearch) { + if (m_hasFileName) { + if (m_hasContentSearch) { textParts << QStringLiteral("filename:\"%1\"").arg(fileName); } else { textParts << fileName; } } - model.m_searchText = textParts.join(QLatin1Char(' ')); - + m_searchText = textParts.join(QLatin1Char(' ')); #endif - return model; } + QUrl DolphinQuery::searchUrl() const { return m_searchUrl; diff --git a/src/search/dolphinquery.h b/src/search/dolphinquery.h index 544f246bc..5032621a9 100644 --- a/src/search/dolphinquery.h +++ b/src/search/dolphinquery.h @@ -32,9 +32,10 @@ class DolphinQuery { public: - /** Calls Baloo::Query::fromSearchUrl() with the given @p searchUrl - * and parses the result to extract its separate components */ - static DolphinQuery fromBalooSearchUrl(const QUrl& searchUrl); + /** Parses the components of @p searchUrl for the supported schemes */ + static DolphinQuery fromSearchUrl(const QUrl& searchUrl); + /** Checks whether the DolphinQuery supports the given @p urlScheme */ + static bool supportsScheme(const QString& urlScheme); /** @return the \a searchUrl passed to Baloo::Query::fromSearchUrl() */ QUrl searchUrl() const; @@ -54,6 +55,11 @@ public: bool hasFileName() const; private: + /** Calls Baloo::Query::fromSearchUrl() on the current searchUrl + * and parses the result to extract its separate components */ + void parseBalooQuery(); + +private: QUrl m_searchUrl; QString m_searchText; QString m_fileType; diff --git a/src/search/dolphinsearchbox.cpp b/src/search/dolphinsearchbox.cpp index 23f520de1..239280280 100644 --- a/src/search/dolphinsearchbox.cpp +++ b/src/search/dolphinsearchbox.cpp @@ -136,6 +136,7 @@ QUrl DolphinSearchBox::urlForSearching() const } query.addQueryItem(QStringLiteral("url"), searchPath().url()); + query.addQueryItem(QStringLiteral("title"), queryTitle(m_searchInput->text())); url.setQuery(query); } @@ -145,8 +146,8 @@ QUrl DolphinSearchBox::urlForSearching() const void DolphinSearchBox::fromSearchUrl(const QUrl& url) { - if (url.scheme() == QLatin1String("baloosearch")) { - const DolphinQuery query = DolphinQuery::fromBalooSearchUrl(url); + if (DolphinQuery::supportsScheme(url.scheme())) { + const DolphinQuery query = DolphinQuery::fromSearchUrl(url); updateFromQuery(query); } else if (url.scheme() == QLatin1String("filenamesearch")) { const QUrlQuery query(url); @@ -219,6 +220,9 @@ void DolphinSearchBox::keyReleaseEvent(QKeyEvent* event) m_searchInput->clear(); } } + else if (event->key() == Qt::Key_Down) { + emit focusViewRequest(); + } } bool DolphinSearchBox::eventFilter(QObject* obj, QEvent* event) @@ -283,7 +287,7 @@ void DolphinSearchBox::slotSearchTextChanged(const QString& text) void DolphinSearchBox::slotReturnPressed() { emitSearchRequest(); - emit returnPressed(); + emit focusViewRequest(); } void DolphinSearchBox::slotFacetChanged() @@ -340,13 +344,6 @@ void DolphinSearchBox::saveSettings() void DolphinSearchBox::init() { - // Create close button - QToolButton* closeButton = new QToolButton(this); - closeButton->setAutoRaise(true); - closeButton->setIcon(QIcon::fromTheme(QStringLiteral("dialog-close"))); - closeButton->setToolTip(i18nc("@info:tooltip", "Quit searching")); - connect(closeButton, &QToolButton::clicked, this, &DolphinSearchBox::emitCloseRequest); - // Create search box m_searchInput = new QLineEdit(this); m_searchInput->setPlaceholderText(i18n("Search...")); @@ -367,11 +364,18 @@ void DolphinSearchBox::init() m_searchInput->addAction(m_saveSearchAction, QLineEdit::TrailingPosition); connect(m_saveSearchAction, &QAction::triggered, this, &DolphinSearchBox::slotSearchSaved); + // Create close button + QToolButton* closeButton = new QToolButton(this); + closeButton->setAutoRaise(true); + closeButton->setIcon(QIcon::fromTheme(QStringLiteral("dialog-close"))); + closeButton->setToolTip(i18nc("@info:tooltip", "Quit searching")); + connect(closeButton, &QToolButton::clicked, this, &DolphinSearchBox::emitCloseRequest); + // Apply layout for the search input QHBoxLayout* searchInputLayout = new QHBoxLayout(); searchInputLayout->setContentsMargins(0, 0, 0, 0); - searchInputLayout->addWidget(closeButton); searchInputLayout->addWidget(m_searchInput); + searchInputLayout->addWidget(closeButton); // Create "Filename" and "Content" button m_fileNameButton = new QToolButton(this); @@ -469,6 +473,12 @@ void DolphinSearchBox::init() connect(m_startSearchTimer, &QTimer::timeout, this, &DolphinSearchBox::emitSearchRequest); } +QString DolphinSearchBox::queryTitle(const QString& text) const +{ + return i18nc("@title UDS_DISPLAY_NAME for a KIO directory listing. %1 is the query the user entered.", + "Query Results from '%1'", text); +} + QUrl DolphinSearchBox::balooUrlForSearching() const { #ifdef HAVE_BALOO @@ -491,8 +501,7 @@ QUrl DolphinSearchBox::balooUrlForSearching() const query.setSearchString(queryStrings.join(QLatin1Char(' '))); - return query.toSearchUrl(i18nc("@title UDS_DISPLAY_NAME for a KIO directory listing. %1 is the query the user entered.", - "Query Results from '%1'", text)); + return query.toSearchUrl(queryTitle(text)); #else return QUrl(); #endif @@ -541,7 +550,7 @@ bool DolphinSearchBox::isIndexingEnabled() const { #ifdef HAVE_BALOO const Baloo::IndexerConfig searchInfo; - return searchInfo.fileIndexingEnabled() && searchInfo.shouldBeIndexed(searchPath().toLocalFile()); + return searchInfo.fileIndexingEnabled() && !searchPath().isEmpty() && searchInfo.shouldBeIndexed(searchPath().toLocalFile()); #else return false; #endif diff --git a/src/search/dolphinsearchbox.h b/src/search/dolphinsearchbox.h index 5fef4ec5a..4afd752bc 100644 --- a/src/search/dolphinsearchbox.h +++ b/src/search/dolphinsearchbox.h @@ -118,8 +118,6 @@ signals: */ void searchTextChanged(const QString& text); - void returnPressed(); - /** * Emitted as soon as the search box should get closed. */ @@ -131,6 +129,7 @@ signals: * @see DolphinSearchBox::setActive() */ void activated(); + void focusViewRequest(); private slots: void emitSearchRequest(); @@ -162,6 +161,8 @@ private: bool isIndexingEnabled() const; private: + QString queryTitle(const QString& text) const; + bool m_startedSearching; bool m_active; |
