From 79001370b84f321c3b4aaf39ff09a1a50463eabe Mon Sep 17 00:00:00 2001 From: mr-forust Date: Sat, 25 Jul 2026 22:11:30 +0200 Subject: [PATCH] feat(ui): warn when search results are stale --- src/main.cpp | 23 +++++++++++++++++++++++ src/search_core.h | 2 ++ 2 files changed, 25 insertions(+) diff --git a/src/main.cpp b/src/main.cpp index 50ffdaf..84b53ba 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1287,6 +1287,15 @@ public: .arg(QStringLiteral(FOLDERSCOPE_VERSION))); }); + staleSearchWarning_ = new QLabel( + tr("⚠ Search settings changed — press F5 to rescan")); + staleSearchWarning_->setStyleSheet( + QStringLiteral("QLabel { color: #f0b429; font-weight: 600; padding: 0 6px; }")); + staleSearchWarning_->setToolTip( + tr("Displayed results were produced with different search settings.")); + staleSearchWarning_->hide(); + statusBar()->addPermanentWidget(staleSearchWarning_); + progress_ = new QProgressBar; progress_->setRange(0, 0); progress_->setMinimumWidth(280); @@ -1515,6 +1524,8 @@ private slots: if (isSearching_ || options_.roots.trimmed().isEmpty()) return; isSearching_ = true; + lastSearchOptions_ = options_; + updateStaleSearchWarning(); applyDisplayOptions(); model_->setRows({}); searchAction_->setEnabled(false); @@ -1539,6 +1550,7 @@ private slots: refreshAction_->setEnabled(true); progress_->hide(); statusBar()->showMessage(message); + updateStaleSearchWarning(); if (autoSizeOnSearchEnd_) { table_->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive); table_->resizeColumnsToContents(); @@ -1995,6 +2007,15 @@ private: settings.setValue(QStringLiteral("hidden"), options_.hidden); settings.setValue(QStringLiteral("readonly"), options_.readonly); settings.setValue(QStringLiteral("executable"), options_.executable); + updateStaleSearchWarning(); + } + + void updateStaleSearchWarning() + { + if (!staleSearchWarning_) + return; + staleSearchWarning_->setVisible( + lastSearchOptions_.has_value() && options_ != *lastSearchOptions_); } void loadOptions() @@ -2058,9 +2079,11 @@ private: QAction *searchAction_{}; QAction *stopAction_{}; QAction *refreshAction_{}; + QLabel *staleSearchWarning_{}; QProgressBar *progress_{}; QThread workerThread_; SearchEngine *engine_{}; + std::optional lastSearchOptions_; QString findQuery_; QString summarySizeUnitName_ = QStringLiteral("Automatic"); QString doubleClickAction_ = QStringLiteral("Open Properties Window"); diff --git a/src/search_core.h b/src/search_core.h index 2d0023b..581f5e3 100644 --- a/src/search_core.h +++ b/src/search_core.h @@ -45,6 +45,8 @@ struct SearchOptions { QString hidden = QStringLiteral("Any"); QString readonly = QStringLiteral("Any"); QString executable = QStringLiteral("Any"); + + bool operator==(const SearchOptions &) const = default; }; struct FileRecord {