diff --git a/src/dolphincontextmenu.cpp b/src/dolphincontextmenu.cpp --- a/src/dolphincontextmenu.cpp +++ b/src/dolphincontextmenu.cpp @@ -369,11 +369,17 @@ QAction* action = exec(m_pos); if (addToPlacesAction && (action == addToPlacesAction)) { const DolphinViewContainer* container = m_mainWindow->activeViewContainer(); - if (container->url().isValid()) { + QUrl url = container->url(); + if (url.isValid()) { PlacesItemModel model; - PlacesItem* item = model.createPlacesItem(container->placesText(), - container->url(), - KIO::iconNameForUrl(container->url())); + QString icon; + if (m_mainWindow->activeViewContainer()->isSearchModeEnabled()) { + icon = QStringLiteral("folder-saved-search-symbolic"); + } else { + icon = KIO::iconNameForUrl(url); + icon = QStringLiteral("folder-saved-search-symbolic"); + } + PlacesItem* item = model.createPlacesItem(container->placesText(), url, icon); model.appendItemToGroup(item); model.saveBookmarks(); } diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp --- a/src/dolphinviewcontainer.cpp +++ b/src/dolphinviewcontainer.cpp @@ -362,7 +362,7 @@ QString text; if (isSearchModeEnabled()) { - text = m_searchBox->searchPath().fileName() + QLatin1String(": ") + m_searchBox->text(); + text = i18n("Search for %1 in %2", m_searchBox->text(), m_searchBox->searchPath().fileName()); } else { text = url().fileName(); if (text.isEmpty()) { diff --git a/src/search/dolphinsearchbox.h b/src/search/dolphinsearchbox.h --- a/src/search/dolphinsearchbox.h +++ b/src/search/dolphinsearchbox.h @@ -139,6 +139,7 @@ void slotReturnPressed(); void slotFacetsButtonToggled(); void slotFacetChanged(); + void slotSearchSaved(); private: void initButton(QToolButton* button); @@ -167,6 +168,7 @@ QLabel* m_searchLabel; QLineEdit* m_searchInput; + QAction* m_saveSearchAction; QScrollArea* m_optionsScrollArea; QToolButton* m_fileNameButton; QToolButton* m_contentButton; diff --git a/src/search/dolphinsearchbox.cpp b/src/search/dolphinsearchbox.cpp --- a/src/search/dolphinsearchbox.cpp +++ b/src/search/dolphinsearchbox.cpp @@ -22,6 +22,8 @@ #include "dolphin_searchsettings.h" #include "dolphinfacetswidget.h" +#include + #include #include #include @@ -54,6 +56,7 @@ m_topLayout(0), m_searchLabel(0), m_searchInput(0), + m_saveSearchAction(0), m_optionsScrollArea(0), m_fileNameButton(0), m_contentButton(0), @@ -250,13 +253,15 @@ { m_startSearchTimer->stop(); m_startedSearching = true; + m_saveSearchAction->setEnabled(true); emit searchRequest(); } void DolphinSearchBox::emitCloseRequest() { m_startSearchTimer->stop(); m_startedSearching = false; + m_saveSearchAction->setEnabled(false); emit closeRequest(); } @@ -299,6 +304,23 @@ emit searchRequest(); } +void DolphinSearchBox::slotSearchSaved() +{ + const QUrl searchURL = urlForSearching(); + if (searchURL.isValid()) { + PlacesItemModel model; + const QString label = i18n("Search for %1 in %2", text(), searchPath().fileName()); + // FIXME: We hardcode the 'folder-saved-search-symbolic' icon here because we can't trust KIO::iconNameForUrl() + // Due to https://bugs.kde.org/show_bug.cgi?id=386182 + // Once that is fixed, please use KIO::iconNameForUrl() instead + PlacesItem* item = model.createPlacesItem(label, + searchURL, + QStringLiteral("folder-saved-search-symbolic")); + model.appendItemToGroup(item); + model.saveBookmarks(); + } +} + void DolphinSearchBox::initButton(QToolButton* button) { button->installEventFilter(this); @@ -356,6 +378,14 @@ this, &DolphinSearchBox::slotSearchTextChanged); setFocusProxy(m_searchInput); + // Add "Save search" button inside search box + m_saveSearchAction = new QAction(this); + m_saveSearchAction->setIcon (QIcon::fromTheme(QStringLiteral("document-save-symbolic"))); + m_saveSearchAction->setText(i18nc("action:button", "Save this search to quickly access it again in the future")); + m_saveSearchAction->setEnabled(false); + m_searchInput->addAction(m_saveSearchAction, QLineEdit::TrailingPosition); + connect(m_saveSearchAction, &QAction::triggered, this, &DolphinSearchBox::slotSearchSaved); + // Apply layout for the search input QHBoxLayout* searchInputLayout = new QHBoxLayout(); searchInputLayout->setMargin(0);