[PATCH] Avoid plotting when ProfileWidget2::plotDive is called speciously.
K. "pestophagous" Heller
pestophagous at gmail.com
Thu Oct 22 22:24:04 PDT 2015
One indirect call site of plotDive, MainTab::acceptChanges, can
trigger a replot several times during one pass through
acceptChanges. Avoiding some of the replots is both an
optimization and a small bug-fix. A replot could happen when
displayed_dive is presently zeroed-out, which made no sense.
Signed-off-by: K. Heller <pestophagous at gmail.com>
---
dive.h | 5 +++++
qt-ui/profile/profilewidget2.cpp | 17 +++++++++++------
2 files changed, 16 insertions(+), 6 deletions(-)
diff --git a/dive.h b/dive.h
index cef1106..cdb05ee 100644
--- a/dive.h
+++ b/dive.h
@@ -562,6 +562,11 @@ static inline struct divecomputer *get_dive_dc(struct dive *dive, int nr)
return dc;
}
+static inline bool dive_has_meaningful_state(struct dive *dive)
+{
+ return dive && (dive->id > 0);
+}
+
extern timestamp_t dive_endtime(const struct dive *dive);
extern void make_first_dc(void);
diff --git a/qt-ui/profile/profilewidget2.cpp b/qt-ui/profile/profilewidget2.cpp
index 3ccd1bb..2fa8f88 100644
--- a/qt-ui/profile/profilewidget2.cpp
+++ b/qt-ui/profile/profilewidget2.cpp
@@ -489,17 +489,22 @@ void ProfileWidget2::resetZoom()
// Currently just one dive, but the plan is to enable All of the selected dives.
void ProfileWidget2::plotDive(struct dive *d, bool force)
{
+ if (!d) {
+ if (selected_dive == -1)
+ return;
+ d = current_dive; // display the current dive
+ }
+
+ // check for 'meaningful' dive. saves spurious repaint(s) while carrying out
+ // updates due to clicking 'Apply changes' (or similar actions)
+ if (!dive_has_meaningful_state(d))
+ return;
+
static bool firstCall = true;
QTime measureDuration; // let's measure how long this takes us (maybe we'll turn of TTL calculation later
measureDuration.start();
if (currentState != ADD && currentState != PLAN) {
- if (!d) {
- if (selected_dive == -1)
- return;
- d = current_dive; // display the current dive
- }
-
// No need to do this again if we are already showing the same dive
// computer of the same dive, so we check the unique id of the dive
// and the selected dive computer number against the ones we are
--
2.5.0
More information about the subsurface
mailing list