From c5ce992786b620e302eb906520f191e7abc0493f Mon Sep 17 00:00:00 2001 From: "Zheng, Lei" Date: Wed, 19 Aug 2020 11:32:49 +0800 Subject: [PATCH] App: fix Link extensionGetPropertyByName() Do not query linked object if the owner object has property with the given name. --- src/App/Link.cpp | 22 +++++++++++++++------- src/App/Link.h | 2 ++ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/App/Link.cpp b/src/App/Link.cpp index de37eeef2d..624d77286a 100644 --- a/src/App/Link.cpp +++ b/src/App/Link.cpp @@ -34,6 +34,7 @@ #include "Link.h" #include "LinkBaseExtensionPy.h" #include +#include #include "ComplexGeoData.h" #include "ComplexGeoDataPy.h" @@ -1421,14 +1422,21 @@ static bool isExcludedProperties(const char *name) { } Property *LinkBaseExtension::extensionGetPropertyByName(const char* name) const { - auto prop = inherited::extensionGetPropertyByName(name); - if(prop || isExcludedProperties(name)) - return prop; + if (checkingProperty) + return inherited::extensionGetPropertyByName(name); + Base::StateLocker guard(checkingProperty); + if(isExcludedProperties(name)) + return nullptr; auto owner = getContainer(); - if(owner && owner->canLinkProperties()) { - auto linked = getTrueLinkedObject(true); - if(linked) - return linked->getPropertyByName(name); + if (owner) { + App::Property *prop = owner->getPropertyByName(name); + if(prop) + return prop; + if(owner->canLinkProperties()) { + auto linked = getTrueLinkedObject(true); + if(linked) + return linked->getPropertyByName(name); + } } return 0; } diff --git a/src/App/Link.h b/src/App/Link.h index 25edbf1e8b..ff06365ad9 100644 --- a/src/App/Link.h +++ b/src/App/Link.h @@ -319,6 +319,8 @@ protected: mutable bool enableLabelCache; bool hasOldSubElement; + + mutable bool checkingProperty = false; }; ///////////////////////////////////////////////////////////////////////////