sw/inc/frmfmt.hxx                   |   14 +++++---------
 sw/source/core/draw/dcontact.cxx    |   11 +++++++++++
 sw/source/core/layout/atrfrm.cxx    |   16 ++--------------
 sw/source/core/layout/fly.cxx       |   19 ++++++++++++-------
 sw/source/core/unocore/unoframe.cxx |   19 +++++++++++--------
 sw/source/filter/ww8/ww8graf.cxx    |   17 +++++++++--------
 6 files changed, 50 insertions(+), 46 deletions(-)

New commits:
commit 3acdc0a0fca421addde76da36b156af70c234939
Author: Bjoern Michaelsen <bjoern.michael...@canonical.com>
Date:   Tue Feb 14 19:09:30 2017 +0100

    Revert commits that caused instability on the Linux debug tinderbox
    
    Revert "DYING_FLYFRAMEFORMAT not needed anymore"
    
    This reverts commit 837545feb63f31095d69d006aeda520637c3bc8c.
    
    Revert "give SwFlyDrawContact a clear owner: SwFlyFrameFormat"
    
    This reverts commit 4ae93f7d3b063d13ff757884444a468212227ef9.

diff --git a/sw/inc/frmfmt.hxx b/sw/inc/frmfmt.hxx
index 9d40d96..b55ca5d 100644
--- a/sw/inc/frmfmt.hxx
+++ b/sw/inc/frmfmt.hxx
@@ -174,15 +174,11 @@ public:
 
 // The FlyFrame-Format
 
-class SdrModel;
-class SwFlyDrawContact;
-
 class SW_DLLPUBLIC SwFlyFrameFormat: public SwFrameFormat
 {
     friend class SwDoc;
     OUString msTitle;
     OUString msDesc;
-    std::unique_ptr<SwFlyDrawContact> m_pContact;
 
     /** Both not existent.
        it stores the previous position of Prt rectangle from 
RequestObjectResize
@@ -194,13 +190,12 @@ class SW_DLLPUBLIC SwFlyFrameFormat: public SwFrameFormat
     SwFlyFrameFormat &operator=( const SwFlyFrameFormat &rCpy ) = delete;
 
 protected:
-    SwFlyFrameFormat(SwAttrPool& rPool, const OUString& rFormatNm, 
SwFrameFormat* pDrvdFrame);
+    SwFlyFrameFormat( SwAttrPool& rPool, const OUString &rFormatNm,
+                    SwFrameFormat *pDrvdFrame )
+        : SwFrameFormat( rPool, rFormatNm, pDrvdFrame, RES_FLYFRMFMT )
+    {}
 
 public:
-    SwFlyDrawContact* GetContact()
-        { return m_pContact.get(); };
-    void InitContact(SdrModel* pSdrModel);
-    void ClearContact();
     virtual ~SwFlyFrameFormat() override;
 
     /// Creates the views.
@@ -262,6 +257,7 @@ namespace sw
 {
     enum class DrawFrameFormatHintId {
         DYING,
+        DYING_FLYFRAMEFORMAT, /* possibly can be merged with DYING, if all 
client handle it and handle it the same */
         PREPPASTING,
         PREP_INSERT_FLY,
         PREP_DELETE_FLY,
diff --git a/sw/source/core/draw/dcontact.cxx b/sw/source/core/draw/dcontact.cxx
index 9a4c78e..6d2c08b 100644
--- a/sw/source/core/draw/dcontact.cxx
+++ b/sw/source/core/draw/dcontact.cxx
@@ -594,6 +594,17 @@ void SwFlyDrawContact::SwClientNotify(const SwModify& 
rMod, const SfxHint& rHint
     {
         pKillDrawHint->m_rpContact = this;
     }
+    else if (auto pDrawFrameFormatHint = dynamic_cast<const 
sw::DrawFrameFormatHint*>(&rHint))
+    {
+        switch(pDrawFrameFormatHint->m_eId)
+        {
+            case sw::DrawFrameFormatHintId::DYING_FLYFRAMEFORMAT:
+                delete this;
+                break;
+            default:
+                ;
+        }
+    }
 }
 
 // SwDrawContact
diff --git a/sw/source/core/layout/atrfrm.cxx b/sw/source/core/layout/atrfrm.cxx
index 01c5923..1b420b7 100644
--- a/sw/source/core/layout/atrfrm.cxx
+++ b/sw/source/core/layout/atrfrm.cxx
@@ -2866,20 +2866,6 @@ void SwFrameFormats::dumpAsXml(xmlTextWriterPtr pWriter, 
const char* pName) cons
 
 IMPL_FIXEDMEMPOOL_NEWDEL( SwFlyFrameFormat )
 
-SwFlyFrameFormat::SwFlyFrameFormat(SwAttrPool& rPool, const OUString& 
rFormatNm, SwFrameFormat* pDrvdFrame)
-    : SwFrameFormat(rPool, rFormatNm, pDrvdFrame, RES_FLYFRMFMT)
-    , m_pContact(nullptr)
-{}
-
-void SwFlyFrameFormat::InitContact(SdrModel* pSdrModel)
-{
-    m_pContact = std::unique_ptr<SwFlyDrawContact>(new SwFlyDrawContact(this, 
pSdrModel));
-}
-void SwFlyFrameFormat::ClearContact()
-{
-    m_pContact.reset(nullptr);
-}
-
 SwFlyFrameFormat::~SwFlyFrameFormat()
 {
     SwIterator<SwFlyFrame,SwFormat> aIter( *this );
@@ -2889,6 +2875,8 @@ SwFlyFrameFormat::~SwFlyFrameFormat()
         {
             SwFrame::DestroyFrame(pLast);
         } while( nullptr != ( pLast = aIter.Next() ));
+
+    
CallSwClientNotify(sw::DrawFrameFormatHint(sw::DrawFrameFormatHintId::DYING_FLYFRAMEFORMAT));
 }
 
 /// Creates the Frames if the format describes a paragraph-bound frame.
diff --git a/sw/source/core/layout/fly.cxx b/sw/source/core/layout/fly.cxx
index 6e8cf94..55f1ac2 100644
--- a/sw/source/core/layout/fly.cxx
+++ b/sw/source/core/layout/fly.cxx
@@ -397,21 +397,25 @@ void SwFlyFrame::InitDrawObj()
     // need to create a new Ref, else we create the Contact now.
 
     IDocumentDrawModelAccess& rIDDMA = 
GetFormat()->getIDocumentDrawModelAccess();
-    if(!GetFormat()->GetContact())
+    SwFlyDrawContact *pContact = SwIterator<SwFlyDrawContact,SwFormat>( 
*GetFormat() ).First();
+    if ( !pContact )
     {
         // #i52858# - method name changed
-        GetFormat()->InitContact(rIDDMA.GetOrCreateDrawModel());
+        pContact = new SwFlyDrawContact( GetFormat(),
+                                          rIDDMA.GetOrCreateDrawModel() );
     }
-    OSL_ENSURE(GetFormat()->GetContact(), "InitDrawObj failed");
+    OSL_ENSURE( pContact, "InitDrawObj failed" );
     // OD 2004-03-22 #i26791#
-    SetDrawObj( *(CreateNewRef( GetFormat()->GetContact() )) );
+    SetDrawObj( *(CreateNewRef( pContact )) );
 
     // Set the right Layer
     // OD 2004-01-19 #110582#
+    SdrLayerID nHeavenId = rIDDMA.GetHeavenId();
+    SdrLayerID nHellId = rIDDMA.GetHellId();
     // OD 2004-03-22 #i26791#
-    GetVirtDrawObj()->SetLayer(GetFormat()->GetOpaque().GetValue()
-        ? rIDDMA.GetHeavenId()
-        : rIDDMA.GetHellId());
+    GetVirtDrawObj()->SetLayer( GetFormat()->GetOpaque().GetValue()
+                                ? nHeavenId
+                                : nHellId );
 }
 
 void SwFlyFrame::FinitDrawObj()
@@ -455,6 +459,7 @@ void SwFlyFrame::FinitDrawObj()
         pContact->GetMaster()->SetUserCall(nullptr);
     GetVirtDrawObj()->SetUserCall(nullptr); // Else calls delete of the 
ContactObj
     delete GetVirtDrawObj();            // Deregisters itself at the Master
+    delete pContact;                  // Destroys the Master itself
 }
 
 void SwFlyFrame::ChainFrames( SwFlyFrame *pMaster, SwFlyFrame *pFollow )
diff --git a/sw/source/core/unocore/unoframe.cxx 
b/sw/source/core/unocore/unoframe.cxx
index 580522e..4101171 100644
--- a/sw/source/core/unocore/unoframe.cxx
+++ b/sw/source/core/unocore/unoframe.cxx
@@ -1360,20 +1360,23 @@ void SwXFrame::SetSelection(SwPaM& rCopySource)
 SdrObject *SwXFrame::GetOrCreateSdrObject(SwFlyFrameFormat &rFormat)
 {
     SdrObject* pObject = rFormat.FindSdrObject();
-    if(!pObject)
+    if( !pObject )
     {
-        SwDoc* pDoc = rFormat.GetDoc();
+        SwDoc *pDoc = rFormat.GetDoc();
         // #i52858# - method name changed
         SwDrawModel* pDrawModel = 
pDoc->getIDocumentDrawModelAccess().GetOrCreateDrawModel();
-        rFormat.InitContact(pDrawModel);
-        pObject = rFormat.GetContact()->GetMaster();
+        SwFlyDrawContact* pContactObject
+                    = new SwFlyDrawContact( &rFormat, pDrawModel );
+        pObject = pContactObject->GetMaster();
 
         const ::SwFormatSurround& rSurround = rFormat.GetSurround();
-        pObject->SetLayer((SURROUND_THROUGHT == rSurround.GetSurround() && 
!rFormat.GetOpaque().GetValue())
-                ? pDoc->getIDocumentDrawModelAccess().GetHellId()
-                : pDoc->getIDocumentDrawModelAccess().GetHeavenId());
-        pDrawModel->GetPage(0)->InsertObject(pObject);
+        pObject->SetLayer(
+            ( SURROUND_THROUGHT == rSurround.GetSurround() &&
+              !rFormat.GetOpaque().GetValue() ) ? 
pDoc->getIDocumentDrawModelAccess().GetHellId()
+                                             : 
pDoc->getIDocumentDrawModelAccess().GetHeavenId() );
+        pDrawModel->GetPage(0)->InsertObject( pObject );
     }
+
     return pObject;
 }
 
diff --git a/sw/source/filter/ww8/ww8graf.cxx b/sw/source/filter/ww8/ww8graf.cxx
index 279960f..3bd7449 100644
--- a/sw/source/filter/ww8/ww8graf.cxx
+++ b/sw/source/filter/ww8/ww8graf.cxx
@@ -2131,18 +2131,19 @@ 
SwWW8ImplReader::SetAttributesAtGrfNode(SvxMSDffImportRec const*const pRecord,
     }
 }
 
-SdrObject* SwWW8ImplReader::CreateContactObject(SwFrameFormat* pFormat)
+SdrObject* SwWW8ImplReader::CreateContactObject(SwFrameFormat* pFlyFormat)
 {
-    if(pFormat)
+    if (pFlyFormat)
     {
-        SdrObject* pNewObject = m_bNewDoc ? nullptr : 
pFormat->FindRealSdrObject();
+        SdrObject* pNewObject = m_bNewDoc ? nullptr : 
pFlyFormat->FindRealSdrObject();
         if (!pNewObject)
-            pNewObject = pFormat->FindSdrObject();
-        SwFlyFrameFormat* pFlyFormat(nullptr);
-        if (!pNewObject && (pFlyFormat = 
dynamic_cast<SwFlyFrameFormat*>(pFormat)))
+            pNewObject = pFlyFormat->FindSdrObject();
+        if (!pNewObject && dynamic_cast< const SwFlyFrameFormat *>( pFlyFormat 
) !=  nullptr)
         {
-            pFlyFormat->InitContact(m_pDrawModel);
-            pNewObject = pFlyFormat->GetContact()->GetMaster();
+            SwFlyDrawContact* pContactObject
+                = new 
SwFlyDrawContact(static_cast<SwFlyFrameFormat*>(pFlyFormat),
+                m_pDrawModel);
+            pNewObject = pContactObject->GetMaster();
         }
         return pNewObject;
     }
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to