diff options
| author | Emmanuel Pescosta <[email protected]> | 2014-03-28 18:48:48 +0100 |
|---|---|---|
| committer | Emmanuel Pescosta <[email protected]> | 2014-03-28 18:48:48 +0100 |
| commit | 5d63b9a111e6ae76ff7b9f5ba9cd26be873aa115 (patch) | |
| tree | 2ea10c0569e29c258330d6fe19fbe24dd5d88b7f /src/search/dolphinsearchbox.cpp | |
| parent | 5c2f52e62a7cfef961c2f67585c84c04b4193370 (diff) | |
When you open a new tab while the search mode is enabled, the
newly opened tab also starts the same search (Because new tab is opened with
the current view url), but the search box is in read-only mode. So you cannot
close the search bar nor edit the search text.
This patch fixes this by parsing the search url. The value of the "search"
parameter is used as search text and the value of the "url" parameter is used
for the search path ("root" folder for the search when "Search from here" mode
is enabled).
In case of Baloo search urls, we use Baloo::Query::fromSearchUrl.
Removed everything related to read only mode in DolphinSearchBox, not needed
anymore.
REVIEW: 111968
BUG: 311950
FIXED-IN: 4.13.0
Diffstat (limited to 'src/search/dolphinsearchbox.cpp')
| -rw-r--r-- | src/search/dolphinsearchbox.cpp | 76 |
1 files changed, 47 insertions, 29 deletions
diff --git a/src/search/dolphinsearchbox.cpp b/src/search/dolphinsearchbox.cpp index 0a7056682..46ca01a4c 100644 --- a/src/search/dolphinsearchbox.cpp +++ b/src/search/dolphinsearchbox.cpp @@ -49,7 +49,6 @@ DolphinSearchBox::DolphinSearchBox(QWidget* parent) : QWidget(parent), m_startedSearching(false), - m_readOnly(false), m_active(true), m_topLayout(0), m_searchLabel(0), @@ -63,7 +62,6 @@ DolphinSearchBox::DolphinSearchBox(QWidget* parent) : m_facetsToggleButton(0), m_facetsWidget(0), m_searchPath(), - m_readOnlyQuery(), m_startSearchTimer(0) { } @@ -102,7 +100,7 @@ void DolphinSearchBox::setSearchPath(const KUrl& url) const QString elidedLocation = metrics.elidedText(location, Qt::ElideMiddle, maxWidth); m_fromHereButton->setText(i18nc("action:button", "From Here (%1)", elidedLocation)); - const bool showSearchFromButtons = url.isLocalFile() && !m_readOnly; + const bool showSearchFromButtons = url.isLocalFile(); m_separator->setVisible(showSearchFromButtons); m_fromHereButton->setVisible(showSearchFromButtons); m_everywhereButton->setVisible(showSearchFromButtons); @@ -152,23 +150,24 @@ KUrl DolphinSearchBox::urlForSearching() const return url; } -void DolphinSearchBox::selectAll() -{ - m_searchInput->selectAll(); -} - -void DolphinSearchBox::setReadOnly(bool readOnly, const KUrl& query) +void DolphinSearchBox::fromSearchUrl(const KUrl& url) { - if (m_readOnly != readOnly || m_readOnlyQuery != query) { - m_readOnly = readOnly; - m_readOnlyQuery = query; - applyReadOnlyState(); + if (url.protocol() == "baloosearch") { + fromBalooSearchUrl(url); + } else if (url.protocol() == "filenamesearch") { + const QMap<QString, QString>& queryItems = url.queryItems(); + setText(queryItems.value("search")); + setSearchPath(queryItems.value("url")); + m_contentButton->setChecked(queryItems.value("checkContent") == "yes"); + } else { + setText(QString()); + setSearchPath(url); } } -bool DolphinSearchBox::isReadOnly() const +void DolphinSearchBox::selectAll() { - return m_readOnly; + m_searchInput->selectAll(); } void DolphinSearchBox::setActive(bool active) @@ -426,7 +425,6 @@ void DolphinSearchBox::init() connect(m_startSearchTimer, SIGNAL(timeout()), this, SLOT(emitSearchRequest())); updateFacetsToggleButton(); - applyReadOnlyState(); } KUrl DolphinSearchBox::balooUrlForSearching() const @@ -464,26 +462,46 @@ KUrl DolphinSearchBox::balooUrlForSearching() const #endif } -void DolphinSearchBox::applyReadOnlyState() +void DolphinSearchBox::fromBalooSearchUrl(const KUrl& url) { #ifdef HAVE_BALOO - if (m_readOnly) { - m_searchLabel->setText(Baloo::Query::titleFromQueryUrl(m_readOnlyQuery)); + const Baloo::Query query = Baloo::Query::fromSearchUrl(url); + const Baloo::Term term = query.term(); + + // Block all signals to avoid unnecessary "searchRequest" signals + // while we adjust the search text and the facet widget. + blockSignals(true); + + const QVariantHash customOptions = query.customOptions(); + if (customOptions.contains("includeFolder")) { + setSearchPath(customOptions.value("includeFolder").toString()); } else { -#else - { -#endif - m_searchLabel->setText(i18nc("@label:textbox", "Find:")); + setSearchPath(QDir::homePath()); } - m_searchInput->setVisible(!m_readOnly); - m_optionsScrollArea->setVisible(!m_readOnly); + if (!query.searchString().isEmpty()) { + setText(query.searchString()); + } - if (m_readOnly) { - m_facetsWidget->hide(); - } else { - m_facetsWidget->setVisible(SearchSettings::showFacetsWidget()); + QStringList types = query.types(); + types.removeOne("File"); // We are only interested in facet widget types + if (!types.isEmpty()) { + m_facetsWidget->setFacetType(types.first()); + } + + foreach (const Baloo::Term& subTerm, term.subTerms()) { + const QString property = subTerm.property(); + + if (property == QLatin1String("filename")) { + setText(subTerm.value().toString()); + } else if (m_facetsWidget->isRatingTerm(subTerm)) { + m_facetsWidget->setRatingTerm(subTerm); + } } + + m_startSearchTimer->stop(); + blockSignals(false); +#endif } void DolphinSearchBox::updateFacetsToggleButton() |
