From 167d5184eda19f8ce549d6a645c800ab39bce936 Mon Sep 17 00:00:00 2001 From: Ismael Asensio Date: Sun, 20 Oct 2019 11:43:32 +0200 Subject: [PATCH] [dolphin/search] Fix search behavior when selecting "Your Files" Summary: Fix the search box forgetting the location where the user was previously searching into. To do a search on "All Files" instead of setting the `m_searchPath` to `$HOME`, it checks the button state, so the "From Here" location is not lost. As an added benefit, selecting "Your Files" when in a non-indexed folder will use the baloo search instead of a fully non-indexed search from $HOME. This issue is the last remaining one of the series started with D24422, with the purpose of fixing the searchbox parsing and update. Test Plan: - Toggle between "From Here/Your Files" and navigate between locations - The search box remembers the location and keeps a coherent state {F7575402} Reviewers: #dolphin, elvisangelaccio Subscribers: kfm-devel Tags: #dolphin Differential Revision: https://phabricator.kde.org/D24577 --- src/search/dolphinsearchbox.cpp | 42 +++++++++++++++++---------------- src/search/dolphinsearchbox.h | 4 ++-- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/src/search/dolphinsearchbox.cpp b/src/search/dolphinsearchbox.cpp index 838a8b38c..5bcd6be6a 100644 --- a/src/search/dolphinsearchbox.cpp +++ b/src/search/dolphinsearchbox.cpp @@ -85,34 +85,36 @@ void DolphinSearchBox::setSearchPath(const QUrl& url) return; } + const QUrl cleanedUrl = url.adjusted(QUrl::RemoveUserInfo | QUrl::StripTrailingSlash); + + if (cleanedUrl.path() == QDir::homePath()) { + m_fromHereButton->setChecked(false); + m_everywhereButton->setChecked(true); + if (!m_searchPath.isEmpty()) { + return; + } + } else { + m_everywhereButton->setChecked(false); + m_fromHereButton->setChecked(true); + } + m_searchPath = url; QFontMetrics metrics(m_fromHereButton->font()); const int maxWidth = metrics.height() * 8; - const QUrl cleanedUrl = url.adjusted(QUrl::RemoveUserInfo | QUrl::StripTrailingSlash); QString location = cleanedUrl.fileName(); if (location.isEmpty()) { location = cleanedUrl.toString(QUrl::PreferLocalFile); } - if (m_fromHereButton->isChecked() && cleanedUrl.path() == QDir::homePath()) { - m_fromHereButton->setChecked(false); - m_everywhereButton->setChecked(true); - } else { - m_fromHereButton->setChecked(true); - m_everywhereButton->setChecked(false); - } - const QString elidedLocation = metrics.elidedText(location, Qt::ElideMiddle, maxWidth); m_fromHereButton->setText(i18nc("action:button", "From Here (%1)", elidedLocation)); m_fromHereButton->setToolTip(i18nc("action:button", "Limit search to '%1' and its subfolders", cleanedUrl.toString(QUrl::PreferLocalFile))); - - setFacetsVisible(SearchSettings::showFacetsWidget()); } QUrl DolphinSearchBox::searchPath() const { - return m_searchPath; + return m_everywhereButton->isChecked() ? QUrl::fromLocalFile(QDir::homePath()) : m_searchPath; } QUrl DolphinSearchBox::urlForSearching() const @@ -130,13 +132,7 @@ QUrl DolphinSearchBox::urlForSearching() const query.addQueryItem(QStringLiteral("checkContent"), QStringLiteral("yes")); } - QString encodedUrl; - if (m_everywhereButton->isChecked()) { - encodedUrl = QDir::homePath(); - } else { - encodedUrl = m_searchPath.url(); - } - query.addQueryItem(QStringLiteral("url"), encodedUrl); + query.addQueryItem(QStringLiteral("url"), searchPath().url()); url.setQuery(query); } @@ -151,12 +147,18 @@ void DolphinSearchBox::fromSearchUrl(const QUrl& url) } else if (url.scheme() == QLatin1String("filenamesearch")) { const QUrlQuery query(url); setText(query.queryItemValue(QStringLiteral("search"))); + if (m_searchPath.scheme() != url.scheme()) { + m_searchPath = QUrl(); + } setSearchPath(QUrl::fromUserInput(query.queryItemValue(QStringLiteral("url")), QString(), QUrl::AssumeLocalFile)); m_contentButton->setChecked(query.queryItemValue(QStringLiteral("checkContent")) == QLatin1String("yes")); } else { setText(QString()); + m_searchPath = QUrl(); setSearchPath(url); } + + setFacetsVisible(SearchSettings::showFacetsWidget()); } void DolphinSearchBox::selectAll() @@ -592,7 +594,7 @@ bool DolphinSearchBox::isIndexingEnabled() const { #ifdef HAVE_BALOO const Baloo::IndexerConfig searchInfo; - return searchInfo.fileIndexingEnabled() && searchInfo.shouldBeIndexed(m_searchPath.toLocalFile()); + return searchInfo.fileIndexingEnabled() && searchInfo.shouldBeIndexed(searchPath().toLocalFile()); #else return false; #endif diff --git a/src/search/dolphinsearchbox.h b/src/search/dolphinsearchbox.h index e70317450..35b422631 100644 --- a/src/search/dolphinsearchbox.h +++ b/src/search/dolphinsearchbox.h @@ -62,8 +62,8 @@ public: QString text() const; /** - * Sets the current path that is used as root for - * searching files, if "From Here" has been selected. + * Sets the current path that is used as root for searching files. + * If @url is the Home dir, "From Here" is selected instead. */ void setSearchPath(const QUrl& url); QUrl searchPath() const; -- 2.47.3