From 35b309aa3efac59b12e0c6bfc127516649f8cfa2 Mon Sep 17 00:00:00 2001 From: Pan Zhang Date: Mon, 16 Mar 2026 16:23:55 +0800 Subject: dolphinviewcontainer: Avoid adding an extra history entry when leaving search results MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When navigating away from a search result, hiding the search bar unintentionally emitted urlChangeRequested(searchPath). This inserted an extra navigation step into the history, causing the “Back” button to require multiple presses to return to the search results. Introduce Search::Bar::HideBehavior to allow callers to hide the search bar without triggering a URL change, and use it when the bar is automatically hidden due to non-search navigation. BUG: 515236 --- src/dolphinviewcontainer.cpp | 2 +- src/search/bar.cpp | 6 ++++-- src/search/bar.h | 15 ++++++++++++++- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp index 4d7472ed3..56c659b76 100644 --- a/src/dolphinviewcontainer.cpp +++ b/src/dolphinviewcontainer.cpp @@ -339,7 +339,7 @@ void DolphinViewContainer::setSearchBarVisible(bool visible) { if (!visible) { if (isSearchBarVisible()) { - m_searchBar->setVisible(false, WithAnimation); + m_searchBar->setVisible(false, WithAnimation, Search::Bar::HideBehavior::KeepCurrentUrl); } return; } diff --git a/src/search/bar.cpp b/src/search/bar.cpp index 851eef942..7e31cb0f2 100644 --- a/src/search/bar.cpp +++ b/src/search/bar.cpp @@ -187,11 +187,13 @@ void Bar::selectAll() m_searchTermEditor->selectAll(); } -void Bar::setVisible(bool visible, Animated animated) +void Bar::setVisible(bool visible, Animated animated, HideBehavior hideBehavior) { if (!visible) { m_startSearchTimer->stop(); - Q_EMIT urlChangeRequested(m_searchConfiguration->searchPath()); + if (hideBehavior == HideBehavior::RestoreUrl) { + Q_EMIT urlChangeRequested(m_searchConfiguration->searchPath()); + } if (isAncestorOf(QApplication::focusWidget())) { Q_EMIT focusViewRequest(); } diff --git a/src/search/bar.h b/src/search/bar.h index 969335232..1017d813f 100644 --- a/src/search/bar.h +++ b/src/search/bar.h @@ -51,6 +51,19 @@ class Bar : public AnimatedHeightWidget, public UpdatableStateInterface Q_OBJECT public: + enum class HideBehavior { + /** + * When hiding the bar, request that the view switches back to a non-search URL (the search path). + * This is the behavior when the user explicitly quits searching. + */ + RestoreUrl, + /** + * When hiding the bar, do not request any URL change. + * This is used when the UI is hidden automatically because the view navigated elsewhere already. + */ + KeepCurrentUrl, + }; + /** * @brief Constructs a Search::Bar with an initial state matching @p dolphinQuery and with parent @p parent. */ @@ -80,7 +93,7 @@ public: * be properly un/checked. * @see AnimatedHeightWidget::setVisible(). */ - void setVisible(bool visible, Animated animated); + void setVisible(bool visible, Animated animated, HideBehavior hideBehavior = HideBehavior::RestoreUrl); /** * @returns false, when the search UI has not yet been changed to search for anything specific. For example when no search term has been entered yet. -- cgit v1.3