include/svx/svdobj.hxx                       |   12 +++++-----
 include/svx/svdovirt.hxx                     |    6 +++++
 svx/source/sdr/contact/viewobjectcontact.cxx |    4 +++
 svx/source/svdraw/svdovirt.cxx               |   30 +++++++++++++++++++++++++++
 4 files changed, 46 insertions(+), 6 deletions(-)

New commits:
commit ae132145ff42a95dc24fb124847c04af4b8c8dab
Author:     Michael Stahl <michael.st...@allotropia.de>
AuthorDate: Tue Nov 29 13:11:25 2022 +0100
Commit:     Michael Stahl <michael.st...@allotropia.de>
CommitDate: Tue Nov 29 16:11:44 2022 +0100

    tdf#141386 svx,sw: fix setting name/title/description on SwVirtFlyDrawObj
    
    The problem is that setting the title via the dialog in Writer calls
    SwFlyFrameFormat::SetObjTitle() which sets SwFrameFormat::msTitle and
    SdrObject::m_pPlusData::aObjTitle on the master SwFlyDrawObj.
    
    Now ViewContactOfSdrObj::embedToObjectSpecificInformation() is called
    for the SwVirtFlyDrawObj, not the SwFlyDrawObj, because that one is not
    on the SdrPage.
    
    However, SwFlyFrameFormat::GetObjTitle() will return
    SwFrameFormat::msTitle as a fallback.
    
    So what's missing here is SwVirtFlyDrawObj must forward calls that
    get/set model properties to its associated SwFlyDrawObj - implement that
    in base class SdrVirtObj.
    
    But note that this does not fix the reported PDF export bug - that was
    already fixed by commit 122b4264d23df8b11419839ba700b88c4f936a6c in sw
    and this fix is for other users of ObjectInfoPrimitive2D.
    
    Change-Id: Id306c44c67c069777373e5e4d55415176b513afc
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/143465
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>

diff --git a/include/svx/svdobj.hxx b/include/svx/svdobj.hxx
index 3cc030c0b293..2404060e5936 100644
--- a/include/svx/svdobj.hxx
+++ b/include/svx/svdobj.hxx
@@ -374,14 +374,14 @@ public:
     // An object may have a user-set Name (Get/SetName()), e.g SdrGrafObj, 
SdrObjGroup
     // or SdrOle2Obj.
     // It may also have a Title and a Description for accessibility purposes.
-    void SetName(const OUString& rStr, const bool bSetChanged = true);
-    const OUString & GetName() const;
+    virtual void SetName(const OUString& rStr, const bool bSetChanged = true);
+    virtual const OUString & GetName() const;
     void MakeNameUnique();
     void MakeNameUnique(std::unordered_set<OUString>& rNameSet);
-    void SetTitle(const OUString& rStr);
-    OUString GetTitle() const;
-    void SetDescription(const OUString& rStr);
-    OUString GetDescription() const;
+    virtual void SetTitle(const OUString& rStr);
+    virtual OUString GetTitle() const;
+    virtual void SetDescription(const OUString& rStr);
+    virtual OUString GetDescription() const;
 
     // for group objects
     bool IsGroupObject() const;
diff --git a/include/svx/svdovirt.hxx b/include/svx/svdovirt.hxx
index 9f327d639bb1..fc8ce86247ed 100644
--- a/include/svx/svdovirt.hxx
+++ b/include/svx/svdovirt.hxx
@@ -62,6 +62,12 @@ public:
     virtual SdrInventor GetObjInventor() const override;
     virtual SdrObjKind GetObjIdentifier() const override;
     virtual SdrObjList* GetSubList() const override;
+    virtual void SetName(const OUString& rStr, const bool bSetChanged = true) 
override;
+    virtual const OUString& GetName() const override;
+    virtual void SetTitle(const OUString& rStr) override;
+    virtual OUString GetTitle() const override;
+    virtual void SetDescription(const OUString& rStr) override;
+    virtual OUString GetDescription() const override;
 
     virtual const tools::Rectangle& GetCurrentBoundRect() const override;
     virtual const tools::Rectangle& GetLastBoundRect() const override;
diff --git a/svx/source/sdr/contact/viewobjectcontact.cxx 
b/svx/source/sdr/contact/viewobjectcontact.cxx
index 9831cf3bfd59..8580603850ea 100644
--- a/svx/source/sdr/contact/viewobjectcontact.cxx
+++ b/svx/source/sdr/contact/viewobjectcontact.cxx
@@ -392,6 +392,10 @@ drawinglayer::primitive2d::Primitive2DContainer const & 
ViewObjectContact::getPr
         const SdrObjKind nIdentifier(pSdrObj->GetObjIdentifier());
         const bool bIsTextObj(nullptr != DynCastSdrTextObj(pSdrObj));
 
+        // Note: SwFlyDrawObj/SwVirtFlyDrawObj have SdrInventor::Swg - these
+        // are *not* handled here because not all of them are painted
+        // completely with primitives, so a tag here does not encapsulate them.
+        // The tag must be created by SwTaggedPDFHelper until this is fixed.
         if ( nInventor == SdrInventor::Default )
         {
             if ( nIdentifier == SdrObjKind::Group )
diff --git a/svx/source/svdraw/svdovirt.cxx b/svx/source/svdraw/svdovirt.cxx
index 23193d6e4aa4..ab95fd633b16 100644
--- a/svx/source/svdraw/svdovirt.cxx
+++ b/svx/source/svdraw/svdovirt.cxx
@@ -111,6 +111,36 @@ SdrObjList* SdrVirtObj::GetSubList() const
     return mxRefObj->GetSubList();
 }
 
+void SdrVirtObj::SetName(const OUString& rStr, const bool bSetChanged)
+{
+    return mxRefObj->SetName(rStr, bSetChanged);
+}
+
+const OUString & SdrVirtObj::GetName() const
+{
+    return mxRefObj->GetName();
+}
+
+void SdrVirtObj::SetTitle(const OUString& rStr)
+{
+    return mxRefObj->SetTitle(rStr);
+}
+
+OUString SdrVirtObj::GetTitle() const
+{
+    return mxRefObj->GetTitle();
+}
+
+void SdrVirtObj::SetDescription(const OUString& rStr)
+{
+    return mxRefObj->SetDescription(rStr);
+}
+
+OUString SdrVirtObj::GetDescription() const
+{
+    return mxRefObj->GetDescription();
+}
+
 const tools::Rectangle& SdrVirtObj::GetCurrentBoundRect() const
 {
     auto aRectangle = mxRefObj->GetCurrentBoundRect(); // TODO: Optimize this.

Reply via email to