]> cloud.milkyroute.net Git - dolphin.git/commitdiff
[dolphin] Add an action to toggle the searchbar
authorIsmael Asensio <isma.af@mgmail.com>
Sun, 1 Sep 2019 19:59:43 +0000 (21:59 +0200)
committerElvis Angelaccio <elvis.angelaccio@kde.org>
Sun, 1 Sep 2019 19:59:43 +0000 (21:59 +0200)
Summary:
Make search action toggle the searchbar instead of just launching it.

The search action in dolphin did only bring up the search bar, but to close it again you had to go to the closing button on the same searchbar.
This behavior in inconsistent with other dolphin actions which toggle panels or tools.

BEFORE:
{F7256652}

AFTER:
{F7256862}

BUG: 344617
FIXED-IN: 19.12.0
Closes T8473

Depends on D23075

Test Plan:
- Enable the search mode: the searchbar appears and the toolbar button gets checked
- Press the search button again, and it goes back to normal mode.
- The search button state is coherent with the searchbox
- Coherence is kept when changing to a split view or different tab
- Shorcut <Ctrl-F> does not close the searchbar, but moves the focus to it.

Reviewers: #dolphin, ngraham, #vdg, elvisangelaccio

Reviewed By: ngraham, #vdg

Subscribers: ndavis, felixernst, elvisangelaccio, kfm-devel

Tags: #dolphin

Maniphest Tasks: T8473

Differential Revision: https://phabricator.kde.org/D23232

src/dolphinmainwindow.cpp
src/dolphinmainwindow.h
src/dolphinui.rc
src/dolphinviewcontainer.cpp
src/dolphinviewcontainer.h

index bdf5dbac5298ce4b8acbf7264312a2bb543b4036..9368a9028ec829abba6b38435b6d587c6ef1cde2 100644 (file)
@@ -617,6 +617,12 @@ void DolphinMainWindow::find()
     m_activeViewContainer->setSearchModeEnabled(true);
 }
 
+void DolphinMainWindow::updateSearchAction()
+{
+    QAction* toggleSearchAction = actionCollection()->action(QStringLiteral("toggle_search"));
+    toggleSearchAction->setChecked(m_activeViewContainer->isSearchModeEnabled());
+}
+
 void DolphinMainWindow::updatePasteAction()
 {
     QAction* pasteAction = actionCollection()->action(KStandardAction::name(KStandardAction::Paste));
@@ -1084,6 +1090,9 @@ void DolphinMainWindow::activeViewChanged(DolphinViewContainer* viewContainer)
     m_activeViewContainer = viewContainer;
 
     if (oldViewContainer) {
+        const QAction* toggleSearchAction = actionCollection()->action(QStringLiteral("toggle_search"));
+        toggleSearchAction->disconnect(oldViewContainer);
+
         // Disconnect all signals between the old view container (container,
         // view and url navigator) and main window.
         oldViewContainer->disconnect(this);
@@ -1104,6 +1113,7 @@ void DolphinMainWindow::activeViewChanged(DolphinViewContainer* viewContainer)
     updatePasteAction();
     updateViewActions();
     updateGoActions();
+    updateSearchAction();
 
     const QUrl url = viewContainer->url();
     emit urlChanged(url);
@@ -1225,6 +1235,17 @@ void DolphinMainWindow::setupActions()
         "the find bar so we can have a look at it while the settings are "
         "explained.</para>"));
 
+    // toggle_search acts as a copy of the main searchAction to be used mainly
+    // in the toolbar, with no default shortcut attached, to avoid messing with
+    // existing workflows (search bar always open and Ctrl-F to focus)
+    QAction *toggleSearchAction = actionCollection()->addAction(QStringLiteral("toggle_search"));
+    toggleSearchAction->setText(i18nc("@action:inmenu", "Toggle Search Bar"));
+    toggleSearchAction->setIconText(i18nc("@action:intoolbar", "Search"));
+    toggleSearchAction->setIcon(searchAction->icon());
+    toggleSearchAction->setToolTip(searchAction->toolTip());
+    toggleSearchAction->setWhatsThis(searchAction->whatsThis());
+    toggleSearchAction->setCheckable(true);
+
     QAction* selectAllAction = KStandardAction::selectAll(this, &DolphinMainWindow::selectAll, actionCollection());
     selectAllAction->setWhatsThis(xi18nc("@info:whatsthis", "This selects all "
         "files and folders in the current location."));
@@ -1803,6 +1824,11 @@ void DolphinMainWindow::connectViewSignals(DolphinViewContainer* container)
             this, &DolphinMainWindow::updateFilterBarAction);
     connect(container, &DolphinViewContainer::writeStateChanged,
             this, &DolphinMainWindow::slotWriteStateChanged);
+    connect(container, &DolphinViewContainer::searchModeEnabledChanged,
+            this, &DolphinMainWindow::updateSearchAction);
+
+    const QAction* toggleSearchAction = actionCollection()->action(QStringLiteral("toggle_search"));
+    connect(toggleSearchAction, &QAction::triggered, container, &DolphinViewContainer::setSearchModeEnabled);
 
     const DolphinView* view = container->view();
     connect(view, &DolphinView::selectionChanged,
index dcfd9bce2dd022414c899616d705bd230c7bdc78..8453bfb36f76d27e63ac0a31f3b647cfaefa0e5c 100644 (file)
@@ -255,6 +255,9 @@ private slots:
     /** Replaces the URL navigator by a search box to find files. */
     void find();
 
+    /** Updates the state of the search action according to the view container. */
+    void updateSearchAction();
+
     /**
      * Updates the text of the paste action dependent on
      * the number of items which are in the clipboard.
index 207c5d4c2d2750c76f2edcba6ed6bf804368cc4d..69663c4710df96c2ed8343014f87237ca3710021 100644 (file)
@@ -1,5 +1,5 @@
 <!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
-<kpartgui name="dolphin" version="23">
+<kpartgui name="dolphin" version="24">
     <MenuBar>
         <Menu name="file">
             <Action name="new_menu" />
         <Spacer name="spacer_0" />
         <Action name="split_view" />
         <Action name="split_stash" />
-        <Action name="edit_find" />
+        <Action name="toggle_search" />
     </ToolBar>
     <ActionProperties scheme="Default">
         <Action priority="0" name="go_back"/>
         <Action priority="0" name="edit_cut"/>
         <Action priority="0" name="edit_copy"/>
         <Action priority="0" name="edit_paste"/>
-        <Action priority="0" name="edit_find"/>
+        <Action priority="0" name="toggle_search"/>
     </ActionProperties>
 </kpartgui>
index 5d1d257e5e4166f4e3a22dbbe95d4fa40cc3c9ed..25ca6fdd98c03f08c5210859ba26e11cddbee884 100644 (file)
@@ -412,6 +412,8 @@ void DolphinViewContainer::setSearchModeEnabled(bool enabled)
     }
 
     m_searchModeEnabled = enabled;
+
+    emit searchModeEnabledChanged(enabled);
 }
 
 bool DolphinViewContainer::isSearchModeEnabled() const
index 2c4c7a7e196e0ba4d768c072d016fd6ae2de462f..5207d2d35d47cf39572d156916d8ce504d65809f 100644 (file)
@@ -118,11 +118,8 @@ public:
     /** Returns true, if the filter bar is visible. */
     bool isFilterBarVisible() const;
 
-    /**
-     * Enables the search mode, if \p enabled is true. In the search mode the URL navigator
-     * will be hidden and replaced by a line editor that allows to enter a search term.
-     */
-    void setSearchModeEnabled(bool enabled);
+
+    /** Returns true if the search mode is enabled. */
     bool isSearchModeEnabled() const;
 
     /**
@@ -160,11 +157,21 @@ public slots:
      */
     void setFilterBarVisible(bool visible);
 
+    /**
+     * Enables the search mode, if \p enabled is true. In the search mode the URL navigator
+     * will be hidden and replaced by a line editor that allows to enter a search term.
+     */
+    void setSearchModeEnabled(bool enabled);
+
 signals:
     /**
      * Is emitted whenever the filter bar has changed its visibility state.
      */
     void showFilterBarChanged(bool shown);
+    /**
+     * Is emitted whenever the search mode has changed its state.
+     */
+    void searchModeEnabledChanged(bool enabled);
 
     /**
      * Is emitted when the write state of the folder has been changed. The application