diff --git a/src/Gui/DocumentObserver.cpp b/src/Gui/DocumentObserver.cpp index 70a4a1655f..a81735a5b9 100644 --- a/src/Gui/DocumentObserver.cpp +++ b/src/Gui/DocumentObserver.cpp @@ -345,6 +345,10 @@ ViewProviderWeakPtrT::ViewProviderWeakPtrT(ViewProviderDocumentObject* obj) { } +ViewProviderWeakPtrT::ViewProviderWeakPtrT(ViewProviderWeakPtrT&&) = default; + +ViewProviderWeakPtrT& ViewProviderWeakPtrT::operator=(ViewProviderWeakPtrT&&) = default; + ViewProviderWeakPtrT::~ViewProviderWeakPtrT() = default; ViewProviderDocumentObject* ViewProviderWeakPtrT::_get() const noexcept diff --git a/src/Gui/DocumentObserver.h b/src/Gui/DocumentObserver.h index df8bb9fec6..620dc8de85 100644 --- a/src/Gui/DocumentObserver.h +++ b/src/Gui/DocumentObserver.h @@ -174,6 +174,12 @@ class GuiExport ViewProviderWeakPtrT { public: explicit ViewProviderWeakPtrT(ViewProviderDocumentObject*); + + ViewProviderWeakPtrT(ViewProviderWeakPtrT &&); + ViewProviderWeakPtrT &operator=(ViewProviderWeakPtrT &&); + + FC_DISABLE_COPY(ViewProviderWeakPtrT); + ~ViewProviderWeakPtrT(); /*! @@ -221,12 +227,6 @@ public: private: ViewProviderDocumentObject* _get() const noexcept; -public: - // disable - ViewProviderWeakPtrT(const ViewProviderWeakPtrT&) = delete; - ViewProviderWeakPtrT& operator=(const ViewProviderWeakPtrT&) = delete; - -private: class Private; std::unique_ptr d; }; diff --git a/src/Mod/Part/Gui/TaskAttacher.cpp b/src/Mod/Part/Gui/TaskAttacher.cpp index 0cc2c7552d..4155479e1b 100644 --- a/src/Mod/Part/Gui/TaskAttacher.cpp +++ b/src/Mod/Part/Gui/TaskAttacher.cpp @@ -230,7 +230,7 @@ TaskAttacher::TaskAttacher(Gui::ViewProviderDocumentObject* ViewProvider, QWidge continue; } - modifiedPlaneViewProviders.push_back(planeViewProvider); + modifiedPlaneViewProviders.emplace_back(planeViewProvider); planeViewProvider->setTemporaryScale(ViewParams::instance()->getDatumTemporaryScaleFactor()); planeViewProvider->setLabelVisibility(true); @@ -267,7 +267,16 @@ TaskAttacher::~TaskAttacher() connectDelObject.disconnect(); connectDelDocument.disconnect(); - for (auto planeViewProvider : modifiedPlaneViewProviders) { + for (auto& vp : modifiedPlaneViewProviders) { + if (vp.expired()) { + continue; + } + + auto planeViewProvider = vp.get(); + if (!planeViewProvider) { + return; + } + planeViewProvider->resetTemporarySize(); planeViewProvider->setLabelVisibility(false); } diff --git a/src/Mod/Part/Gui/TaskAttacher.h b/src/Mod/Part/Gui/TaskAttacher.h index 9d06fcf93a..55ead58826 100644 --- a/src/Mod/Part/Gui/TaskAttacher.h +++ b/src/Mod/Part/Gui/TaskAttacher.h @@ -26,6 +26,7 @@ #define GUI_TASKVIEW_TaskAttacher_H #include +#include #include #include #include @@ -159,7 +160,7 @@ private: Connection connectDelObject; Connection connectDelDocument; - std::vector modifiedPlaneViewProviders; + std::vector modifiedPlaneViewProviders; App::PropertyOverrideContext overrides; };