Gui: Check for every VP expiration in TaskAttacher

This commit is contained in:
Kacper Donat
2025-09-22 19:44:31 +02:00
committed by Chris Hennes
parent 39d39f34c3
commit 5bf0e30676
4 changed files with 23 additions and 9 deletions

View File

@@ -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

View File

@@ -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<Private> d;
};

View File

@@ -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<Gui::ViewProviderPlane>();
if (!planeViewProvider) {
return;
}
planeViewProvider->resetTemporarySize();
planeViewProvider->setLabelVisibility(false);
}

View File

@@ -26,6 +26,7 @@
#define GUI_TASKVIEW_TaskAttacher_H
#include <Gui/Selection/Selection.h>
#include <Gui/DocumentObserver.h>
#include <Gui/ViewProviderDocumentObject.h>
#include <Gui/TaskView/TaskView.h>
#include <Gui/TaskView/TaskDialog.h>
@@ -159,7 +160,7 @@ private:
Connection connectDelObject;
Connection connectDelDocument;
std::vector<Gui::ViewProviderPlane*> modifiedPlaneViewProviders;
std::vector<Gui::ViewProviderWeakPtrT> modifiedPlaneViewProviders;
App::PropertyOverrideContext overrides;
};