aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--qt-models/filtermodels.cpp38
1 files changed, 25 insertions, 13 deletions
diff --git a/qt-models/filtermodels.cpp b/qt-models/filtermodels.cpp
index 331439bb4..5b1169de8 100644
--- a/qt-models/filtermodels.cpp
+++ b/qt-models/filtermodels.cpp
@@ -227,21 +227,33 @@ void MultiFilterSortModel::myInvalidate()
int i;
struct dive *d;
- divesDisplayed = 0;
-
- // Apply filter for each dive
- for_each_dive (i, d) {
- bool show = showDive(d);
- filter_dive(d, show);
- if (show)
- divesDisplayed++;
+ {
+ // This marker prevents the UI from getting notifications on selection changes.
+ // It is active until the end of the scope.
+ // This is actually meant for the undo-commands, so that they can do their work
+ // without having the UI updated.
+ // Here, it is used because invalidating the filter can generate numerous
+ // selection changes, which do full ui reloads. Instead, do that all at once
+ // as a consequence of the filterFinished signal right after the local scope.
+ auto marker = diveListNotifier.enterCommand();
+
+ divesDisplayed = 0;
+
+ // Apply filter for each dive
+ for_each_dive (i, d) {
+ bool show = showDive(d);
+ filter_dive(d, show);
+ if (show)
+ divesDisplayed++;
+ }
+
+ invalidateFilter();
+
+ // Tell the dive trip model to update the displayed-counts
+ DiveTripModelBase::instance()->filterFinished();
+ countsChanged();
}
- invalidateFilter();
-
- // Tell the dive trip model to update the displayed-counts
- DiveTripModelBase::instance()->filterFinished();
- countsChanged();
emit filterFinished();
#if !defined(SUBSURFACE_MOBILE)