diff --git a/src/dolphinmainwindow.h b/src/dolphinmainwindow.h --- a/src/dolphinmainwindow.h +++ b/src/dolphinmainwindow.h @@ -117,6 +117,13 @@ /** Stores all settings and quits Dolphin. */ void quit(); + /** Updates visibility of search bar and active/inactive state of "Find" toolbar + * button, based on "setSearchModeEnabled" state of a DolphinViewContainer (a pane or tab) + * + * @see DolphinViewContainer::setSearchModeEnabled() + */ + void searchStateChanged(bool enabled); + signals: /** * Is sent if the selection of the currently active view has @@ -445,6 +452,17 @@ */ void slotToolBarActionMiddleClicked(QAction *action); + /** + * Toggles search state for current DolphinViewContainer + */ + void slotToggleSearch(); + + /** + * Enables search on the current DolphinViewContainer, shows the search bar, + * and automatically assigns keyboard focus to the search bar. + */ + void openFind(); + private: void setupActions(); void setupDockWidgets(); diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -970,6 +970,9 @@ oldViewContainer->disconnect(this); oldViewContainer->view()->disconnect(this); oldViewContainer->urlNavigator()->disconnect(this); + + // manually trigger slot to update search bar state on new view container + searchStateChanged(m_activeViewContainer->isSearchModeEnabled()); } connectViewSignals(viewContainer); @@ -1101,7 +1104,11 @@ // due to the long text, the text "Paste" is used: paste->setIconText(i18nc("@action:inmenu Edit", "Paste")); - KStandardAction::find(this, &DolphinMainWindow::find, actionCollection()); + QAction* openFind = actionCollection()->addAction(QStringLiteral("open_find")); + openFind->setText(i18nc("@action:inmenu Edit", "Find...")); + openFind->setIcon(QIcon::fromTheme(QStringLiteral("edit-find"))); + actionCollection()->setDefaultShortcut(openFind, Qt::CTRL + Qt::Key_F); + connect(openFind, &QAction::triggered, this, &DolphinMainWindow::openFind); QAction* selectAll = actionCollection()->addAction(QStringLiteral("select_all")); selectAll->setText(i18nc("@action:inmenu Edit", "Select All")); @@ -1253,6 +1260,13 @@ openInNewWindow->setText(i18nc("@action:inmenu", "Open in New Window")); openInNewWindow->setIcon(QIcon::fromTheme(QStringLiteral("window-new"))); connect(openInNewWindow, &QAction::triggered, this, &DolphinMainWindow::openInNewWindow); + + KToggleAction* showSearch = actionCollection()->add(QStringLiteral("toggle_find")); + showSearch->setText(i18nc("@action:intoolbar", "Find...")); + showSearch->setToolTip(i18nc("@info", "Toggle search bar")); + showSearch->setIcon(QIcon::fromTheme(QStringLiteral("edit-find"))); + connect(showSearch, &KToggleAction::triggered, this, &DolphinMainWindow::slotToggleSearch); + } void DolphinMainWindow::setupDockWidgets() @@ -1520,6 +1534,8 @@ void DolphinMainWindow::connectViewSignals(DolphinViewContainer* container) { + connect(container, &DolphinViewContainer::sendSearchState, + this, &DolphinMainWindow::searchStateChanged); connect(container, &DolphinViewContainer::showFilterBarChanged, this, &DolphinMainWindow::updateFilterBarAction); connect(container, &DolphinViewContainer::writeStateChanged, @@ -1628,3 +1644,21 @@ } } +void DolphinMainWindow::openFind() +{ + m_activeViewContainer->setSearchModeEnabled(true); + searchStateChanged(true); +} + +void DolphinMainWindow::slotToggleSearch() +{ + bool active = m_activeViewContainer->isSearchModeEnabled(); + m_activeViewContainer->setSearchModeEnabled(!active); +} + +void DolphinMainWindow::searchStateChanged(bool enabled) +{ + KToggleAction* findButton = + static_cast(actionCollection()->action(QStringLiteral("toggle_find"))); + findButton->setChecked(enabled); +} diff --git a/src/dolphinui.rc b/src/dolphinui.rc --- a/src/dolphinui.rc +++ b/src/dolphinui.rc @@ -1,5 +1,5 @@ - + @@ -17,6 +17,7 @@ + @@ -97,7 +98,7 @@ - + diff --git a/src/dolphinviewcontainer.h b/src/dolphinviewcontainer.h --- a/src/dolphinviewcontainer.h +++ b/src/dolphinviewcontainer.h @@ -166,6 +166,11 @@ */ void writeStateChanged(bool isFolderWritable); + /** Emitted whenever the search status for the current view container + * has changed + */ + void sendSearchState(bool enabled); + private slots: /** * Updates the number of items (= number of files + number of diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp --- a/src/dolphinviewcontainer.cpp +++ b/src/dolphinviewcontainer.cpp @@ -349,6 +349,9 @@ void DolphinViewContainer::setSearchModeEnabled(bool enabled) { + + emit sendSearchState(enabled); + if (enabled == isSearchModeEnabled()) { if (enabled && !m_searchBox->hasFocus()) { m_searchBox->setFocus();