X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/c331d7068574dd468101ed8ade3ce51a2a8560c0..1b192c67f9735cd724c4958e7ba32a7b549770b6:/src/search/dolphinsearchbox.cpp diff --git a/src/search/dolphinsearchbox.cpp b/src/search/dolphinsearchbox.cpp index 23f520de1..9143ddcb7 100644 --- a/src/search/dolphinsearchbox.cpp +++ b/src/search/dolphinsearchbox.cpp @@ -1,21 +1,8 @@ -/*************************************************************************** -* Copyright (C) 2010 by Peter Penz * -* * -* This program is free software; you can redistribute it and/or modify * -* it under the terms of the GNU General Public License as published by * -* the Free Software Foundation; either version 2 of the License, or * -* (at your option) any later version. * -* * -* This program is distributed in the hope that it will be useful, * -* but WITHOUT ANY WARRANTY; without even the implied warranty of * -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -* GNU General Public License for more details. * -* * -* You should have received a copy of the GNU General Public License * -* along with this program; if not, write to the * -* Free Software Foundation, Inc., * -* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * -* **************************************************************************/ +/* + * SPDX-FileCopyrightText: 2010 Peter Penz + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ #include "global.h" #include "dolphinsearchbox.h" @@ -136,6 +123,7 @@ QUrl DolphinSearchBox::urlForSearching() const } query.addQueryItem(QStringLiteral("url"), searchPath().url()); + query.addQueryItem(QStringLiteral("title"), queryTitle(m_searchInput->text())); url.setQuery(query); } @@ -145,8 +133,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); @@ -176,7 +164,7 @@ void DolphinSearchBox::setActive(bool active) m_active = active; if (active) { - emit activated(); + Q_EMIT activated(); } } } @@ -214,11 +202,14 @@ void DolphinSearchBox::keyReleaseEvent(QKeyEvent* event) QWidget::keyReleaseEvent(event); if (event->key() == Qt::Key_Escape) { if (m_searchInput->text().isEmpty()) { - emit closeRequest(); + Q_EMIT closeRequest(); } else { m_searchInput->clear(); } } + else if (event->key() == Qt::Key_Down) { + Q_EMIT focusViewRequest(); + } } bool DolphinSearchBox::eventFilter(QObject* obj, QEvent* event) @@ -250,7 +241,7 @@ void DolphinSearchBox::emitSearchRequest() m_startSearchTimer->stop(); m_startedSearching = true; m_saveSearchAction->setEnabled(true); - emit searchRequest(); + Q_EMIT searchRequest(); } void DolphinSearchBox::emitCloseRequest() @@ -258,7 +249,7 @@ void DolphinSearchBox::emitCloseRequest() m_startSearchTimer->stop(); m_startedSearching = false; m_saveSearchAction->setEnabled(false); - emit closeRequest(); + Q_EMIT closeRequest(); } void DolphinSearchBox::slotConfigurationChanged() @@ -277,20 +268,20 @@ void DolphinSearchBox::slotSearchTextChanged(const QString& text) } else { m_startSearchTimer->start(); } - emit searchTextChanged(text); + Q_EMIT searchTextChanged(text); } void DolphinSearchBox::slotReturnPressed() { emitSearchRequest(); - emit returnPressed(); + Q_EMIT focusViewRequest(); } void DolphinSearchBox::slotFacetChanged() { m_startedSearching = true; m_startSearchTimer->stop(); - emit searchRequest(); + Q_EMIT searchRequest(); } void DolphinSearchBox::slotSearchSaved() @@ -340,13 +331,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 +351,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); @@ -425,8 +416,12 @@ void DolphinSearchBox::init() m_facetsWidget->layout()->setSpacing(Dolphin::LAYOUT_SPACING_SMALL); connect(m_facetsWidget, &DolphinFacetsWidget::facetChanged, this, &DolphinSearchBox::slotFacetChanged); + // Put the options into a QScrollArea. This prevents increasing the view width + // in case that not enough width for the options is available. + QWidget* optionsContainer = new QWidget(this); + // Apply layout for the options - QHBoxLayout* optionsLayout = new QHBoxLayout(); + QHBoxLayout* optionsLayout = new QHBoxLayout(optionsContainer); optionsLayout->setContentsMargins(0, 0, 0, 0); optionsLayout->setSpacing(Dolphin::LAYOUT_SPACING_SMALL); optionsLayout->addWidget(m_fileNameButton); @@ -438,11 +433,6 @@ void DolphinSearchBox::init() optionsLayout->addWidget(moreSearchToolsButton); optionsLayout->addStretch(1); - // Put the options into a QScrollArea. This prevents increasing the view width - // in case that not enough width for the options is available. - QWidget* optionsContainer = new QWidget(this); - optionsContainer->setLayout(optionsLayout); - m_optionsScrollArea = new QScrollArea(this); m_optionsScrollArea->setFrameShape(QFrame::NoFrame); m_optionsScrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); @@ -469,6 +459,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 +487,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 @@ -511,7 +506,10 @@ void DolphinSearchBox::updateFromQuery(const DolphinQuery& query) setSearchPath(QUrl::fromLocalFile(QDir::homePath())); } - setText(query.text()); + // If the input box has focus, do not update to avoid messing with user typing + if (!m_searchInput->hasFocus()) { + setText(query.text()); + } if (query.hasContentSearch()) { m_contentButton->setChecked(true); @@ -541,7 +539,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