From b43ecdad4ed956a3075ecb55aed4497217d011d9 Mon Sep 17 00:00:00 2001 From: Berthold Stoeger Date: Wed, 13 Nov 2019 20:53:10 +0100 Subject: [PATCH] Undo: don't delete dive sites when pasting dives We used to only keep sites with dives around. This changed when implementing the dive site tab. The paste-dive code was written using the old semantics and thus, when overwriting dive sites, it deleted unused dive sites. To make things consistent, remove that code. It would be very weird when dive sites are deleted by pasting, but not by setting a different dive site manually. Bonus: no more dependencies on desktop-includes in the undo code. Signed-off-by: Berthold Stoeger --- desktop-widgets/command_edit.cpp | 31 ------------------------------- desktop-widgets/command_edit.h | 1 - 2 files changed, 32 deletions(-) diff --git a/desktop-widgets/command_edit.cpp b/desktop-widgets/command_edit.cpp index 97fc05c95..638bfb792 100644 --- a/desktop-widgets/command_edit.cpp +++ b/desktop-widgets/command_edit.cpp @@ -6,7 +6,6 @@ #include "core/qthelper.h" // for copy_qstring #include "core/subsurface-string.h" #include "core/tag.h" -#include "desktop-widgets/mapwidget.h" // TODO: Replace desktop-dependency by signal namespace Command { @@ -752,15 +751,6 @@ bool PasteDives::workToBeDone() void PasteDives::undo() { - bool diveSiteListChanged = false; - - // If we had taken ownership of dive sites, readd them to the system - for (OwningDiveSitePtr &ds: ownedDiveSites) { - register_dive_site(ds.release()); - diveSiteListChanged = true; - } - ownedDiveSites.clear(); - QVector divesToNotify; // Remember dives so that we can send signals later divesToNotify.reserve(dives.size()); for (PasteState &state: dives) { @@ -769,24 +759,6 @@ void PasteDives::undo() invalidate_dive_cache(state.d); // Ensure that dive is written in git_save() } - // If dive sites were pasted, collect all overwritten dive sites - // and remove those which don't have users anymore from the core. - // But keep an owning pointer. Thus if this undo command is freed, the - // dive-site will be automatically deleted and on redo() it can be - // readded to the system - if (what.divesite) { - std::vector divesites; - for (const PasteState &d: dives) { - if (std::find(divesites.begin(), divesites.end(), d.divesite) == divesites.end()) - divesites.push_back(d.divesite); - } - for (dive_site *ds: divesites) { - unregister_dive_site(ds); - ownedDiveSites.emplace_back(ds); - diveSiteListChanged = true; - } - } - // Send signals. DiveField fields(DiveField::NONE); fields.notes = what.notes; @@ -802,9 +774,6 @@ void PasteDives::undo() emit diveListNotifier.cylindersReset(divesToNotify); if (what.weights) emit diveListNotifier.weightsystemsReset(divesToNotify); - - if (diveSiteListChanged) - MapWidget::instance()->reload(); } // Redo and undo do the same diff --git a/desktop-widgets/command_edit.h b/desktop-widgets/command_edit.h index 45fde9e59..8532523e2 100644 --- a/desktop-widgets/command_edit.h +++ b/desktop-widgets/command_edit.h @@ -257,7 +257,6 @@ struct PasteState { class PasteDives : public Base { dive_components what; std::vector dives; - std::vector ownedDiveSites; dive *current; public: PasteDives(const dive *d, dive_components what);