X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/e30357343bdadd6bf6bb94e5adf54d8b840ef1bd..167d5184eda19f8ce549d6a645c800ab39bce936:/src/search/dolphinsearchbox.cpp diff --git a/src/search/dolphinsearchbox.cpp b/src/search/dolphinsearchbox.cpp index 6a87edc9e..5bcd6be6a 100644 --- a/src/search/dolphinsearchbox.cpp +++ b/src/search/dolphinsearchbox.cpp @@ -85,50 +85,43 @@ 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))); - - bool hasFacetsSupport = false; -#ifdef HAVE_BALOO - const Baloo::IndexerConfig searchInfo; - hasFacetsSupport = searchInfo.fileIndexingEnabled() && searchInfo.shouldBeIndexed(m_searchPath.toLocalFile()); -#endif - m_facetsWidget->setEnabled(hasFacetsSupport); } QUrl DolphinSearchBox::searchPath() const { - return m_searchPath; + return m_everywhereButton->isChecked() ? QUrl::fromLocalFile(QDir::homePath()) : m_searchPath; } QUrl DolphinSearchBox::urlForSearching() const { QUrl url; - bool useBalooSearch = false; -#ifdef HAVE_BALOO - const Baloo::IndexerConfig searchInfo; - useBalooSearch = searchInfo.fileIndexingEnabled() && searchInfo.shouldBeIndexed(m_searchPath.toLocalFile()); -#endif - if (useBalooSearch) { + + if (isIndexingEnabled()) { url = balooUrlForSearching(); } else { url.setScheme(QStringLiteral("filenamesearch")); @@ -139,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); } @@ -160,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() @@ -203,6 +196,7 @@ void DolphinSearchBox::showEvent(QShowEvent* event) m_searchInput->setFocus(); m_startedSearching = false; } + updateFacetsToggleButton(); } void DolphinSearchBox::hideEvent(QHideEvent* event) @@ -291,9 +285,7 @@ void DolphinSearchBox::slotReturnPressed() void DolphinSearchBox::slotFacetsButtonToggled() { - const bool facetsIsVisible = !m_facetsWidget->isVisible(); - m_facetsWidget->setVisible(facetsIsVisible); - updateFacetsToggleButton(); + setFacetsVisible(m_facetsToggleButton->isChecked()); } void DolphinSearchBox::slotFacetChanged() @@ -338,14 +330,16 @@ void DolphinSearchBox::loadSettings() m_fileNameButton->setChecked(true); } - m_facetsWidget->setVisible(SearchSettings::showFacetsWidget()); + setFacetsVisible(SearchSettings::showFacetsWidget()); } void DolphinSearchBox::saveSettings() { SearchSettings::setLocation(m_fromHereButton->isChecked() ? QStringLiteral("FromHere") : QStringLiteral("Everywhere")); SearchSettings::setWhat(m_fileNameButton->isChecked() ? QStringLiteral("FileName") : QStringLiteral("Content")); - SearchSettings::setShowFacetsWidget(m_facetsToggleButton->isChecked()); + if (isIndexingEnabled()) { + SearchSettings::setShowFacetsWidget(m_facetsToggleButton->isChecked()); + } SearchSettings::self()->save(); } @@ -481,8 +475,6 @@ void DolphinSearchBox::init() m_startSearchTimer->setSingleShot(true); m_startSearchTimer->setInterval(1000); connect(m_startSearchTimer, &QTimer::timeout, this, &DolphinSearchBox::emitSearchRequest); - - updateFacetsToggleButton(); } QUrl DolphinSearchBox::balooUrlForSearching() const @@ -558,11 +550,52 @@ void DolphinSearchBox::fromBalooSearchUrl(const QUrl& url) #endif } +void DolphinSearchBox::setFacetsVisible(bool visible) +{ + const bool indexingEnabled = isIndexingEnabled(); + m_facetsWidget->setEnabled(indexingEnabled); + m_facetsWidget->setVisible(indexingEnabled && visible); + updateFacetsToggleButton(); +} + void DolphinSearchBox::updateFacetsToggleButton() { - const bool facetsIsVisible = SearchSettings::showFacetsWidget(); - m_facetsToggleButton->setChecked(facetsIsVisible ? true : false); - m_facetsToggleButton->setIcon(QIcon::fromTheme(facetsIsVisible ? QStringLiteral("arrow-up-double") : QStringLiteral("arrow-down-double"))); - m_facetsToggleButton->setText(facetsIsVisible ? i18nc("action:button", "Fewer Options") : i18nc("action:button", "More Options")); + const bool facetsEnabled = m_facetsWidget->isEnabled(); + const bool facetsVisible = m_facetsWidget->isVisible(); + + m_facetsToggleButton->setEnabled(facetsEnabled); + m_facetsToggleButton->setChecked(facetsVisible); + + m_facetsToggleButton->setIcon(QIcon::fromTheme( + facetsVisible ? QStringLiteral("arrow-up-double") : + QStringLiteral("arrow-down-double"))); + + m_facetsToggleButton->setText( + facetsVisible ? i18nc("@action:button", "Fewer Options") : + i18nc("@action:button", "More Options")); + + if (facetsEnabled) { + m_facetsToggleButton->setToolTip(QString()); + } else { +#ifdef HAVE_BALOO + const Baloo::IndexerConfig searchInfo; + if (!searchInfo.fileIndexingEnabled()) { + m_facetsToggleButton->setToolTip(i18nc("@info:tooltip", "Advanced search options are not available because the file indexing service is disabled.")); + } else { + m_facetsToggleButton->setToolTip(i18nc("@info:tooltip", "Advanced search options are not available because this location is not indexed.")); + } +#else + m_facetsToggleButton->setToolTip(i18nc("@info:tooltip", "Advanced search options are not available because this version of Dolphin does not support the Baloo file indexer.")); +#endif + } } +bool DolphinSearchBox::isIndexingEnabled() const +{ +#ifdef HAVE_BALOO + const Baloo::IndexerConfig searchInfo; + return searchInfo.fileIndexingEnabled() && searchInfo.shouldBeIndexed(searchPath().toLocalFile()); +#else + return false; +#endif +}