┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/search
diff options
context:
space:
mode:
Diffstat (limited to 'src/search')
-rw-r--r--src/search/dolphinquery.cpp44
-rw-r--r--src/search/dolphinquery.h12
-rw-r--r--src/search/dolphinsearchbox.cpp37
-rw-r--r--src/search/dolphinsearchbox.h5
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;