feat(ui): warn when search results are stale
ci-release / verify (push) Successful in 34s
ci-release / publish-linux-amd64 (push) Has been skipped

This commit is contained in:
2026-07-25 22:11:30 +02:00
parent 07fc419f1e
commit 79001370b8
2 changed files with 25 additions and 0 deletions
+23
View File
@@ -1287,6 +1287,15 @@ public:
.arg(QStringLiteral(FOLDERSCOPE_VERSION))); .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_ = new QProgressBar;
progress_->setRange(0, 0); progress_->setRange(0, 0);
progress_->setMinimumWidth(280); progress_->setMinimumWidth(280);
@@ -1515,6 +1524,8 @@ private slots:
if (isSearching_ || options_.roots.trimmed().isEmpty()) if (isSearching_ || options_.roots.trimmed().isEmpty())
return; return;
isSearching_ = true; isSearching_ = true;
lastSearchOptions_ = options_;
updateStaleSearchWarning();
applyDisplayOptions(); applyDisplayOptions();
model_->setRows({}); model_->setRows({});
searchAction_->setEnabled(false); searchAction_->setEnabled(false);
@@ -1539,6 +1550,7 @@ private slots:
refreshAction_->setEnabled(true); refreshAction_->setEnabled(true);
progress_->hide(); progress_->hide();
statusBar()->showMessage(message); statusBar()->showMessage(message);
updateStaleSearchWarning();
if (autoSizeOnSearchEnd_) { if (autoSizeOnSearchEnd_) {
table_->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive); table_->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive);
table_->resizeColumnsToContents(); table_->resizeColumnsToContents();
@@ -1995,6 +2007,15 @@ private:
settings.setValue(QStringLiteral("hidden"), options_.hidden); settings.setValue(QStringLiteral("hidden"), options_.hidden);
settings.setValue(QStringLiteral("readonly"), options_.readonly); settings.setValue(QStringLiteral("readonly"), options_.readonly);
settings.setValue(QStringLiteral("executable"), options_.executable); settings.setValue(QStringLiteral("executable"), options_.executable);
updateStaleSearchWarning();
}
void updateStaleSearchWarning()
{
if (!staleSearchWarning_)
return;
staleSearchWarning_->setVisible(
lastSearchOptions_.has_value() && options_ != *lastSearchOptions_);
} }
void loadOptions() void loadOptions()
@@ -2058,9 +2079,11 @@ private:
QAction *searchAction_{}; QAction *searchAction_{};
QAction *stopAction_{}; QAction *stopAction_{};
QAction *refreshAction_{}; QAction *refreshAction_{};
QLabel *staleSearchWarning_{};
QProgressBar *progress_{}; QProgressBar *progress_{};
QThread workerThread_; QThread workerThread_;
SearchEngine *engine_{}; SearchEngine *engine_{};
std::optional<SearchOptions> lastSearchOptions_;
QString findQuery_; QString findQuery_;
QString summarySizeUnitName_ = QStringLiteral("Automatic"); QString summarySizeUnitName_ = QStringLiteral("Automatic");
QString doubleClickAction_ = QStringLiteral("Open Properties Window"); QString doubleClickAction_ = QStringLiteral("Open Properties Window");
+2
View File
@@ -45,6 +45,8 @@ struct SearchOptions {
QString hidden = QStringLiteral("Any"); QString hidden = QStringLiteral("Any");
QString readonly = QStringLiteral("Any"); QString readonly = QStringLiteral("Any");
QString executable = QStringLiteral("Any"); QString executable = QStringLiteral("Any");
bool operator==(const SearchOptions &) const = default;
}; };
struct FileRecord { struct FileRecord {