diff --git a/src/Mod/TechDraw/App/DrawViewBalloon.h b/src/Mod/TechDraw/App/DrawViewBalloon.h index 97af50cff7..f9781854eb 100644 --- a/src/Mod/TechDraw/App/DrawViewBalloon.h +++ b/src/Mod/TechDraw/App/DrawViewBalloon.h @@ -82,6 +82,8 @@ public: Base::Vector3d getOriginOffset() const; + App::PropertyLink *getOwnerProperty() override { return &SourceView; } + protected: void onChanged(const App::Property* prop) override; void handleChangedPropertyType(Base::XMLReader& reader, const char* TypeName, diff --git a/src/Mod/TechDraw/Gui/ViewProviderBalloon.cpp b/src/Mod/TechDraw/Gui/ViewProviderBalloon.cpp index 384f998e67..0edd57cbdf 100644 --- a/src/Mod/TechDraw/Gui/ViewProviderBalloon.cpp +++ b/src/Mod/TechDraw/Gui/ViewProviderBalloon.cpp @@ -48,6 +48,7 @@ #include "QGIViewBalloon.h" #include "TaskBalloon.h" #include "ViewProviderBalloon.h" +#include "ViewProviderPage.h" using namespace TechDrawGui; using namespace TechDraw; @@ -115,12 +116,18 @@ void ViewProviderBalloon::updateData(const App::Property* prop) //Balloon handles X, Y updates differently that other QGIView //call QGIViewBalloon::updateView if (prop == &(getViewObject()->X) || - prop == &(getViewObject()->Y) ){ + prop == &(getViewObject()->Y)){ QGIView* qgiv = getQView(); if (qgiv) { qgiv->updateView(true); } } + if (prop == &(getViewObject()->SourceView)) { + // Ensure the QGraphicsItems hierarchy matches the DocumentObject's + if (ViewProviderPage* vpp = getViewProviderPage()) { + vpp->fixSceneDependencies(); + } + } //Skip QGIView X, Y processing - do not call ViewProviderDrawingView Gui::ViewProviderDocumentObject::updateData(prop); diff --git a/src/Mod/TechDraw/Gui/ViewProviderDrawingView.cpp b/src/Mod/TechDraw/Gui/ViewProviderDrawingView.cpp index 23813978a3..b67f7ea2a8 100644 --- a/src/Mod/TechDraw/Gui/ViewProviderDrawingView.cpp +++ b/src/Mod/TechDraw/Gui/ViewProviderDrawingView.cpp @@ -172,7 +172,6 @@ void ViewProviderDrawingView::hide() } } } - QGIView* ViewProviderDrawingView::getQView() { TechDraw::DrawView* dv = getViewObject(); @@ -190,8 +189,9 @@ QGIView* ViewProviderDrawingView::getQView() return nullptr; } - if (vpp->getQGSPage()) { - return dynamic_cast(vpp->getQGSPage()->findQViewForDocObj(getViewObject())); + QGSPage* page = vpp->getQGSPage(); + if (page) { + return dynamic_cast(page->findQViewForDocObj(getViewObject())); } return nullptr;