]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Restore the URL when DolphinSearchBox is cleared
authorAmol Godbole <amolagodbole@gmail.com>
Mon, 4 Sep 2023 07:39:13 +0000 (07:39 +0000)
committerMéven Car <meven.car@kdemail.net>
Mon, 4 Sep 2023 07:39:13 +0000 (07:39 +0000)
Currently, the URL navigator is not updated when the search box is cleared. This MR restores the URL, by closing and reopening the box.

The call for emitting closeRequest() on pressing Esc has been replaced with emitCloseRequest(). The wait duration before starting a search has been reduced to 500ms to increase responsiveness.

Also, the bugfix for BUG: 423328 is slightly incorrect and causes the search term to not be displayed when opening a saved search for the first time. As a better solution for this bug, DolphinSearchBox::setText() now updates the text only if the text has changed.

BUG: 473775

src/dolphinviewcontainer.cpp
src/dolphinviewcontainer.h
src/search/dolphinsearchbox.cpp
src/search/dolphinsearchbox.h

index 63d5bd27b27dfe62f68bc58f894ca1e0d7b41396..66a9a116ac3cf487fe65aa74e3ab21f7d782b564 100644 (file)
@@ -84,6 +84,7 @@ DolphinViewContainer::DolphinViewContainer(const QUrl &url, QWidget *parent)
     m_searchBox = new DolphinSearchBox(this);
     m_searchBox->hide();
     connect(m_searchBox, &DolphinSearchBox::activated, this, &DolphinViewContainer::activate);
+    connect(m_searchBox, &DolphinSearchBox::openRequest, this, &DolphinViewContainer::openSearchBox);
     connect(m_searchBox, &DolphinSearchBox::closeRequest, this, &DolphinViewContainer::closeSearchBox);
     connect(m_searchBox, &DolphinSearchBox::searchRequest, this, &DolphinViewContainer::startSearching);
     connect(m_searchBox, &DolphinSearchBox::focusViewRequest, this, &DolphinViewContainer::requestFocus);
@@ -891,6 +892,11 @@ void DolphinViewContainer::startSearching()
     }
 }
 
+void DolphinViewContainer::openSearchBox()
+{
+    setSearchModeEnabled(true);
+}
+
 void DolphinViewContainer::closeSearchBox()
 {
     setSearchModeEnabled(false);
index 0c8b184fe3e2a94e76ebd3574792218482e41b5e..52fd688f6fc32f279149b3ee154bc31de5a49705 100644 (file)
@@ -382,6 +382,7 @@ private Q_SLOTS:
      * Gets the search URL from the searchbox and starts searching.
      */
     void startSearching();
+    void openSearchBox();
     void closeSearchBox();
 
     /**
index 9df417c4f70cfc7bce3874b8449a2ca922381c36..a09f252937e7853451a4fac160646636d4fd217c 100644 (file)
@@ -60,7 +60,9 @@ DolphinSearchBox::~DolphinSearchBox()
 
 void DolphinSearchBox::setText(const QString &text)
 {
-    m_searchInput->setText(text);
+    if (m_searchInput->text() != text) {
+        m_searchInput->setText(text);
+    }
 }
 
 QString DolphinSearchBox::text() const
@@ -201,7 +203,7 @@ void DolphinSearchBox::keyReleaseEvent(QKeyEvent *event)
     QWidget::keyReleaseEvent(event);
     if (event->key() == Qt::Key_Escape) {
         if (m_searchInput->text().isEmpty()) {
-            Q_EMIT closeRequest();
+            emitCloseRequest();
         } else {
             m_searchInput->clear();
         }
@@ -261,7 +263,11 @@ void DolphinSearchBox::slotConfigurationChanged()
 void DolphinSearchBox::slotSearchTextChanged(const QString &text)
 {
     if (text.isEmpty()) {
-        m_startSearchTimer->stop();
+        // Restore URL when search box is cleared by closing and reopening the box.
+        emitCloseRequest();
+        QTimer::singleShot(0, this, [this] {
+            Q_EMIT openRequest();
+        });
     } else {
         m_startSearchTimer->start();
     }
@@ -270,6 +276,10 @@ void DolphinSearchBox::slotSearchTextChanged(const QString &text)
 
 void DolphinSearchBox::slotReturnPressed()
 {
+    if (m_searchInput->text().isEmpty()) {
+        return;
+    }
+
     emitSearchRequest();
     Q_EMIT focusViewRequest();
 }
@@ -443,10 +453,10 @@ void DolphinSearchBox::init()
     loadSettings();
 
     // The searching should be started automatically after the user did not change
-    // the text within one second
+    // the text for a while
     m_startSearchTimer = new QTimer(this);
     m_startSearchTimer->setSingleShot(true);
-    m_startSearchTimer->setInterval(1000);
+    m_startSearchTimer->setInterval(500);
     connect(m_startSearchTimer, &QTimer::timeout, this, &DolphinSearchBox::emitSearchRequest);
 }
 
@@ -496,10 +506,7 @@ void DolphinSearchBox::updateFromQuery(const DolphinQuery &query)
         setSearchPath(QUrl::fromLocalFile(QDir::homePath()));
     }
 
-    // If the input box has focus, do not update to avoid messing with user typing
-    if (!m_searchInput->hasFocus()) {
-        setText(query.text());
-    }
+    setText(query.text());
 
     if (query.hasContentSearch()) {
         m_contentButton->setChecked(true);
index 4ccb7ac1070377ae7899b0f363093e103ccbc4d5..b73c2899ff9f1bdced71c4abaa1a8c4b164cce67 100644 (file)
@@ -111,6 +111,11 @@ Q_SIGNALS:
      */
     void closeRequest();
 
+    /**
+     * Is emitted when the search box should be opened.
+     */
+    void openRequest();
+
     /**
      * Is emitted, if the searchbox has been activated by
      * an user interaction