embeddedobj/source/commonembedding/persistence.cxx |   35 +++++++++++++++++++++
 embeddedobj/source/inc/commonembobj.hxx            |    2 +
 2 files changed, 37 insertions(+)

New commits:
commit 33686f67da4bc640014cb51888fbf90f83375e97
Author:     Caolán McNamara <[email protected]>
AuthorDate: Thu Dec 21 14:55:02 2023 +0000
Commit:     Caolán McNamara <[email protected]>
CommitDate: Thu Dec 21 21:14:25 2023 +0100

    make use of toplevel docmodel's UserAllowsLinkUpdate property
    
    Change-Id: Ia560c123c2f9dd08acb7eeaafccee332dd16300e
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/161133
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <[email protected]>

diff --git a/embeddedobj/source/commonembedding/persistence.cxx 
b/embeddedobj/source/commonembedding/persistence.cxx
index 6859de216c24..0ce42dce7be7 100644
--- a/embeddedobj/source/commonembedding/persistence.cxx
+++ b/embeddedobj/source/commonembedding/persistence.cxx
@@ -362,8 +362,43 @@ uno::Reference< util::XCloseable > 
OCommonEmbeddedObject::InitNewDocument_Impl()
     return xDocument;
 }
 
+bool OCommonEmbeddedObject::getAllowLinkUpdate() const
+{
+    // assume we can update if we can't determine a parent
+    bool bAllowLinkUpdate(true);
+
+    try
+    {
+        uno::Reference<container::XChild> xParent(m_xParent, uno::UNO_QUERY);
+        while (xParent)
+        {
+            uno::Reference<container::XChild> 
xGrandParent(xParent->getParent(), uno::UNO_QUERY);
+            if (!xGrandParent)
+                break;
+            xParent = xGrandParent;
+        }
+
+        uno::Reference<beans::XPropertySet> xPropSet(xParent, uno::UNO_QUERY);
+        if (xPropSet.is())
+        {
+            uno::Any aAny = xPropSet->getPropertyValue("AllowLinkUpdate");
+            aAny >>= bAllowLinkUpdate;
+        }
+    }
+    catch (const uno::Exception&)
+    {
+    }
+
+    SAL_WARN_IF(!bAllowLinkUpdate, "embeddedobj.common", "getAllowLinkUpdate 
is false");
+
+    return bAllowLinkUpdate;
+}
+
 uno::Reference< util::XCloseable > OCommonEmbeddedObject::LoadLink_Impl()
 {
+    if (!getAllowLinkUpdate())
+        return nullptr;
+
     sal_Int32 nLen = m_bLinkHasPassword ? 3 : 2;
     uno::Sequence< beans::PropertyValue > aArgs( 
m_aDocMediaDescriptor.getLength() + nLen );
     auto pArgs = aArgs.getArray();
diff --git a/embeddedobj/source/inc/commonembobj.hxx 
b/embeddedobj/source/inc/commonembobj.hxx
index bbd2de63ec70..ac6c27d10a11 100644
--- a/embeddedobj/source/inc/commonembobj.hxx
+++ b/embeddedobj/source/inc/commonembobj.hxx
@@ -254,6 +254,8 @@ private:
 
     int ShowMsgDialog(TranslateId Msg, const OUString& sFileName);
 
+    bool getAllowLinkUpdate() const;
+
 protected:
     void SetInplaceActiveState();
 

Reply via email to