From e3dd8ec134b1a7910181cfe19d97d7a23658708a Mon Sep 17 00:00:00 2001 From: tetektoza Date: Sun, 22 Jun 2025 12:12:33 +0200 Subject: [PATCH] Core: Use an enum for search bar popup in preferences --- src/Gui/Dialogs/DlgPreferencesImp.cpp | 23 ++++++++++------------- src/Gui/Dialogs/DlgPreferencesImp.h | 11 +++++++++-- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/Gui/Dialogs/DlgPreferencesImp.cpp b/src/Gui/Dialogs/DlgPreferencesImp.cpp index ae338a809a..ede3e863b9 100644 --- a/src/Gui/Dialogs/DlgPreferencesImp.cpp +++ b/src/Gui/Dialogs/DlgPreferencesImp.cpp @@ -1258,11 +1258,6 @@ PreferencesSearchController::PreferencesSearchController(DlgPreferencesImp* pare m_searchResultsList->installEventFilter(m_parentDialog); } -PreferencesSearchController::~PreferencesSearchController() -{ - // Destructor - cleanup handled by Qt's object system -} - void PreferencesSearchController::setPreferencesModel(QStandardItemModel* model) { m_preferencesModel = model; @@ -1381,7 +1376,9 @@ void PreferencesSearchController::clearHighlights() void PreferencesSearchController::collectSearchResults(QWidget* widget, const QString& searchText, const QString& groupName, const QString& pageName, const QString& pageDisplayName, const QString& tabName) { - if (!widget) return; + if (!widget) { + return; + } const QString lowerSearchText = searchText.toLower(); @@ -1415,7 +1412,7 @@ void PreferencesSearchController::onSearchResultSelected() // This method is called when a search result is selected (arrow keys or single click) // Navigate immediately but keep popup open if (m_searchResultsList && m_searchResultsList->currentItem()) { - navigateToCurrentSearchResult(false); // false = don't close popup + navigateToCurrentSearchResult(PopupAction::KeepOpen); } ensureSearchBoxFocus(); @@ -1425,7 +1422,7 @@ void PreferencesSearchController::onSearchResultClicked() { // Handle single click - navigate immediately but keep popup open if (m_searchResultsList && m_searchResultsList->currentItem()) { - navigateToCurrentSearchResult(false); // false = don't close popup + navigateToCurrentSearchResult(PopupAction::KeepOpen); } ensureSearchBoxFocus(); @@ -1435,11 +1432,11 @@ void PreferencesSearchController::onSearchResultDoubleClicked() { // Handle double click - navigate and close popup if (m_searchResultsList && m_searchResultsList->currentItem()) { - navigateToCurrentSearchResult(true); // true = close popup + navigateToCurrentSearchResult(PopupAction::CloseAfter); } } -void PreferencesSearchController::navigateToCurrentSearchResult(bool closePopup) +void PreferencesSearchController::navigateToCurrentSearchResult(PopupAction action) { QListWidgetItem* currentItem = m_searchResultsList->currentItem(); @@ -1468,7 +1465,7 @@ void PreferencesSearchController::navigateToCurrentSearchResult(bool closePopup) // For page-level matches, we just navigate without highlighting anything // Close popup only if requested (double-click or Enter) - if (closePopup) { + if (action == PopupAction::CloseAfter) { hideSearchResultsList(); } } @@ -1831,7 +1828,7 @@ bool PreferencesSearchController::handleSearchBoxKeyPress(QKeyEvent* keyEvent) } case Qt::Key_Return: case Qt::Key_Enter: - navigateToCurrentSearchResult(true); // true = close popup + navigateToCurrentSearchResult(PopupAction::CloseAfter); return true; case Qt::Key_Escape: hideSearchResultsList(); @@ -1846,7 +1843,7 @@ bool PreferencesSearchController::handlePopupKeyPress(QKeyEvent* keyEvent) switch (keyEvent->key()) { case Qt::Key_Return: case Qt::Key_Enter: - navigateToCurrentSearchResult(true); // true = close popup + navigateToCurrentSearchResult(PopupAction::CloseAfter); return true; case Qt::Key_Escape: hideSearchResultsList(); diff --git a/src/Gui/Dialogs/DlgPreferencesImp.h b/src/Gui/Dialogs/DlgPreferencesImp.h index d67f577fb5..d724879e23 100644 --- a/src/Gui/Dialogs/DlgPreferencesImp.h +++ b/src/Gui/Dialogs/DlgPreferencesImp.h @@ -49,6 +49,13 @@ class DlgPreferencesImp; class GuiExport PreferencesSearchController : public QObject { Q_OBJECT + +private: + enum class PopupAction { + KeepOpen, // don't close popup (used for keyboard navigation) + CloseAfter // close popup (used for mouse clicks and Enter/Return) + }; + public: // Search results structure struct SearchResult { @@ -65,7 +72,7 @@ public: }; explicit PreferencesSearchController(DlgPreferencesImp* parentDialog, QObject* parent = nullptr); - ~PreferencesSearchController(); + ~PreferencesSearchController() = default; // Setup methods void setPreferencesModel(QStandardItemModel* model); @@ -93,7 +100,7 @@ public: void showSearchResultsList(); // Navigation - void navigateToCurrentSearchResult(bool closePopup); + void navigateToCurrentSearchResult(PopupAction action); Q_SIGNALS: void navigationRequested(const QString& groupName, const QString& pageName);