[Libreoffice-commits] core.git: Branch 'aoo/trunk' - 5 commits - drawinglayer/source framework/source svx/source sw/inc sw/source vcl/aqua

Armin Le Grand alg at apache.org
Tue Feb 18 21:08:17 CET 2014


 drawinglayer/source/primitive2d/graphicprimitivehelper2d.cxx |   16 +
 framework/source/layoutmanager/layoutmanager.cxx             |    1 
 svx/source/sidebar/possize/PosSizePropertyPanel.cxx          |   23 ++
 svx/source/sidebar/possize/PosSizePropertyPanel.hxx          |   12 +
 sw/inc/IDocumentContentOperations.hxx                        |    2 
 sw/inc/doc.hxx                                               |    5 
 sw/source/core/doc/doclay.cxx                                |  101 +++++------
 sw/source/core/frmedt/fecopy.cxx                             |    7 
 sw/source/core/frmedt/fefly1.cxx                             |    2 
 sw/source/core/unocore/unodraw.cxx                           |    2 
 sw/source/filter/html/htmldraw.cxx                           |    2 
 sw/source/filter/rtf/swparrtf.cxx                            |    4 
 sw/source/filter/ww8/ww8graf.cxx                             |    4 
 sw/source/filter/ww8/ww8graf2.cxx                            |    2 
 sw/source/filter/ww8/ww8par4.cxx                             |    2 
 vcl/aqua/source/gdi/ctlayout.cxx                             |   62 ++----
 16 files changed, 147 insertions(+), 100 deletions(-)

New commits:
commit 0a0bcaaec8c80bce3bd83c2e3d3aa1b0001bd91f
Author: Armin Le Grand <alg at apache.org>
Date:   Tue Feb 18 16:37:20 2014 +0000

    i124073 choose a more compiler-independent way of construction

diff --git a/drawinglayer/source/primitive2d/graphicprimitivehelper2d.cxx b/drawinglayer/source/primitive2d/graphicprimitivehelper2d.cxx
index 7bbe180..5803670 100755
--- a/drawinglayer/source/primitive2d/graphicprimitivehelper2d.cxx
+++ b/drawinglayer/source/primitive2d/graphicprimitivehelper2d.cxx
@@ -759,9 +759,23 @@ namespace drawinglayer
                             basegfx::B2DPolygon aMaskPolygon(basegfx::tools::createUnitPolygon());
                             aMaskPolygon.transform(rTransform);
 
-                            aRetval[0] = new MaskPrimitive2D(
+                            // #124073# the clde below was compiler-dependent. Normally,
+                            // a compiler will
+                            // - alloc mem
+                            // - ececute the constructor
+                            // - do the assignment
+                            // but the mac compiler does alloc-assign-constructor, thus
+                            // modifying aRetval[0] befure aRetval gets used in the
+                            // constructor. This creates an endless loop in the primitive
+                            // stack. Thus do it the safe way.
+                            //
+                            // aRetval[0] = new MaskPrimitive2D(
+                            //     basegfx::B2DPolyPolygon(aMaskPolygon),
+                            //     aRetval);
+                            MaskPrimitive2D* pMaskPrimitive2D = new MaskPrimitive2D(
                                 basegfx::B2DPolyPolygon(aMaskPolygon),
                                 aRetval);
+                            aRetval[0] = pMaskPrimitive2D;
                         }
 #ifdef USE_DEBUG_CODE_TO_TEST_METAFILE_DECOMPOSE
                     }
commit be899f92bafeac8dbb02732de5249c7fa7a1f08d
Author: Herbert Dürr <hdu at apache.org>
Date:   Tue Feb 18 15:32:46 2014 +0000

    #i124233# fix CoreText justification of text with trailing spaces
    
    the fix works also for EditEngine by ignoring Writer's halfspace magic.
    TODO: replace that halfspace magic with a generic solution.

diff --git a/vcl/aqua/source/gdi/ctlayout.cxx b/vcl/aqua/source/gdi/ctlayout.cxx
index 11df073..3ec11c9 100644
--- a/vcl/aqua/source/gdi/ctlayout.cxx
+++ b/vcl/aqua/source/gdi/ctlayout.cxx
@@ -72,7 +72,6 @@ private:
     // cached details about the resulting layout
     // mutable members since these details are all lazy initialized
     mutable double  mfCachedWidth;          // cached value of resulting typographical width
-    mutable double  mfTrailingSpaceWidth;   // in Pixels
 
     // x-offset relative to layout origin
     // currently only used in RTL-layouts
@@ -89,7 +88,6 @@ CTLayout::CTLayout( const CTTextStyle* pTextStyle )
 ,   mnTrailingSpaces( 0 )
 ,   mfFontScale( pTextStyle->mfFontScale )
 ,   mfCachedWidth( -1 )
-,   mfTrailingSpaceWidth( 0 )
 ,   mnBaseAdv( 0 )
 {
     CFRetain( mpTextStyle->GetStyleDict() );
@@ -146,60 +144,49 @@ void CTLayout::AdjustLayout( ImplLayoutArgs& rArgs )
         return;
 
     const DynCoreTextSyms& rCT = DynCoreTextSyms::get();
-    // CoreText fills trailing space during justification so we have to
-    // take that into account when requesting CT to justify something
-    mfTrailingSpaceWidth = rCT.LineGetTrailingWhitespaceWidth( mpCTLine );
-    const int nTrailingSpaceWidth = rint( mfFontScale * mfTrailingSpaceWidth );
 
-    int nOrigWidth = GetTextWidth();
     int nPixelWidth = rArgs.mnLayoutWidth;
-    if( nPixelWidth )
-    {
-        nPixelWidth -= nTrailingSpaceWidth;
-        if( nPixelWidth <= 0)
-            return;
-    }
-    else if( rArgs.mpDXArray )
+    if( rArgs.mpDXArray )
     {
         // for now we are only interested in the layout width
         // TODO: use all mpDXArray elements for layouting
-        nPixelWidth = rArgs.mpDXArray[ mnCharCount - 1 - mnTrailingSpaces ];
+        nPixelWidth = rArgs.mpDXArray[ mnCharCount-1 ];
     }
 
     // short-circuit when justifying an all-whitespace string
     if( mnTrailingSpaces >= mnCharCount)
     {
-        mfCachedWidth = mfTrailingSpaceWidth = nPixelWidth / mfFontScale;
+        mfCachedWidth = nPixelWidth / mfFontScale;
         return;
     }
 
-    // in RTL-layouts trailing spaces are leftmost
-    // TODO: use BiDi-algorithm to thoroughly check this assumption
-    if( rArgs.mnFlags & SAL_LAYOUT_BIDI_RTL)
-        mnBaseAdv = nTrailingSpaceWidth;
-
     // return early if there is nothing to do
     if( nPixelWidth <= 0 )
         return;
 
     // HACK: justification requests which change the width by just one pixel are probably
     // #i86038# introduced by lossy conversions between integer based coordinate system
+    const int nOrigWidth = GetTextWidth();
     if( (nOrigWidth >= nPixelWidth-1) && (nOrigWidth <= nPixelWidth+1) )
         return;
 
     // if the text to be justified has whitespace in it then
     // - Writer goes crazy with its HalfSpace magic
-    // - LayoutEngine handles spaces specially (in particular at the text start or end)
+    // - CoreText handles spaces specially (in particular at the text end)
     if( mnTrailingSpaces ) {
-        // adjust for Writer's SwFntObj::DrawText() Halfspace magic at the text end
-        std::vector<sal_Int32> aOrigDXAry;
-        aOrigDXAry.resize( mnCharCount);
-        FillDXArray( &aOrigDXAry[0] );
-        int nLastCharSpace = rArgs.mpDXArray[ mnCharCount-1-mnTrailingSpaces ]
-            - aOrigDXAry[ mnCharCount-1-mnTrailingSpaces ];
-        nPixelWidth -= nLastCharSpace;
-        if( nPixelWidth < 0 )
+        int nTrailingSpaceWidth = 0;
+        if( rArgs.mpDXArray) {
+            const int nFullPixWidth = nPixelWidth;
+            nPixelWidth = rArgs.mpDXArray[ mnCharCount-1-mnTrailingSpaces ];
+            nTrailingSpaceWidth = nFullPixWidth - nPixelWidth;
+        } else {
+            const double fTrailingSpaceWidth = rCT.LineGetTrailingWhitespaceWidth( mpCTLine );
+            nTrailingSpaceWidth = rint(fTrailingSpaceWidth);
+        }
+        nPixelWidth -= nTrailingSpaceWidth;
+        if( nPixelWidth <= 0 )
             return;
+
         // recreate the CoreText line layout without trailing spaces
         CFRelease( mpCTLine );
         CFStringRef aCFText = CFStringCreateWithCharactersNoCopy( NULL, rArgs.mpStr + mnMinCharPos,
@@ -208,9 +195,15 @@ void CTLayout::AdjustLayout( ImplLayoutArgs& rArgs )
         mpCTLine = CTLineCreateWithAttributedString( pAttrStr );
         CFRelease( aCFText);
         CFRelease( pAttrStr );
+
+        // in RTL-layouts trailing spaces are leftmost
+        // TODO: use BiDi-algorithm to thoroughly check this assumption
+        if( rArgs.mnFlags & SAL_LAYOUT_BIDI_RTL)
+            mnBaseAdv = nTrailingSpaceWidth;
     }
 
-    CTLineRef pNewCTLine = rCT.LineCreateJustifiedLine( mpCTLine, 1.0, nPixelWidth / mfFontScale );
+    const double fAdjustedWidth = nPixelWidth / mfFontScale;
+    CTLineRef pNewCTLine = rCT.LineCreateJustifiedLine( mpCTLine, 1.0, fAdjustedWidth );
     if( !pNewCTLine ) { // CTLineCreateJustifiedLine can and does fail
         // handle failure by keeping the unjustified layout
         // TODO: a better solution such as
@@ -221,8 +214,7 @@ void CTLayout::AdjustLayout( ImplLayoutArgs& rArgs )
     }
     CFRelease( mpCTLine );
     mpCTLine = pNewCTLine;
-    mfCachedWidth = -1; // TODO: can we set it directly to target width we requested? For now we re-measure
-    mfTrailingSpaceWidth = 0;
+    mfCachedWidth = fAdjustedWidth;
 }
 
 // -----------------------------------------------------------------------
@@ -404,8 +396,8 @@ long CTLayout::FillDXArray( sal_Int32* pDXArray ) const
             CTRunRef pGlyphRun = (CTRunRef)CFArrayGetValueAtIndex( aGlyphRuns, nRunIndex );
             const CFIndex nGlyphCount = CTRunGetGlyphCount( pGlyphRun );
             const CFRange aFullRange = CFRangeMake( 0, nGlyphCount );
-            aSizeVec.reserve( nGlyphCount );
-            aIndexVec.reserve( nGlyphCount );
+            aSizeVec.resize( nGlyphCount );
+            aIndexVec.resize( nGlyphCount );
             CTRunGetAdvances( pGlyphRun, aFullRange, &aSizeVec[0] );
             CTRunGetStringIndices( pGlyphRun, aFullRange, &aIndexVec[0] );
             for( int i = 0; i != nGlyphCount; ++i ) {
commit 7e5783030c82f8ec87b88899869e9152cf5c3271
Author: Andre Fischer <af at apache.org>
Date:   Tue Feb 18 14:17:32 2014 +0000

    124216: Detect changes of the UI scale.

diff --git a/svx/source/sidebar/possize/PosSizePropertyPanel.cxx b/svx/source/sidebar/possize/PosSizePropertyPanel.cxx
index e59b562..a329fef 100644
--- a/svx/source/sidebar/possize/PosSizePropertyPanel.cxx
+++ b/svx/source/sidebar/possize/PosSizePropertyPanel.cxx
@@ -996,6 +996,7 @@ void PosSizePropertyPanel::NotifyItemUpdate(
 
         case SID_ATTR_METRIC:
             MetricState( eState, pState );
+            UpdateUIScale();
             break;
 
         default:
@@ -1350,6 +1351,28 @@ void PosSizePropertyPanel::DisableControls()
 }
 
 
+
+
+void PosSizePropertyPanel::UpdateUIScale (void)
+{
+    const Fraction aUIScale (mpView->GetModel()->GetUIScale());
+    if (maUIScale != aUIScale)
+    {
+        // UI scale has changed.
+
+        // Remember the new UI scale.
+        maUIScale = aUIScale;
+
+        // The content of the position and size boxes is only updated when item changes are notified.
+        // Request such notifications without changing the actual item values.
+        GetBindings()->Invalidate(SID_ATTR_TRANSFORM_POS_X, sal_True, sal_False);
+        GetBindings()->Invalidate(SID_ATTR_TRANSFORM_POS_Y, sal_True, sal_False);
+        GetBindings()->Invalidate(SID_ATTR_TRANSFORM_WIDTH, sal_True, sal_False);
+        GetBindings()->Invalidate(SID_ATTR_TRANSFORM_HEIGHT, sal_True, sal_False);
+    }
+}
+
+
 } } // end of namespace svx::sidebar
 
 // eof
diff --git a/svx/source/sidebar/possize/PosSizePropertyPanel.hxx b/svx/source/sidebar/possize/PosSizePropertyPanel.hxx
index 1a5412e..095c8a1 100644
--- a/svx/source/sidebar/possize/PosSizePropertyPanel.hxx
+++ b/svx/source/sidebar/possize/PosSizePropertyPanel.hxx
@@ -184,6 +184,18 @@ private:
     void DisableControls();
     void AdaptWidthHeightScalePosition(bool bOriginal);
     void AdaptAngleFlipDialPosition(bool bOriginal);
+
+    /** Check if the UI scale has changed and handle such a change.
+        UI scale is an SD only feature.  The UI scale is represented by items
+        ATTR_OPTIONS_SCALE_X and
+        ATTR_OPTIONS_SCALE_Y.
+        As we have no direct access (there is no dependency of svx on sd) we have to
+        use a small trick (aka hack):
+        a) call this method whenever a change of the metric item is notified,
+        b) check if the UI scale has changed (strangely, the UI scale value is available at the SdrModel.
+        c) invalidate the items for position and size to trigger notifications of their current values.
+    */
+    void UpdateUIScale (void);
 };
 
 
commit 28c0c081d07e5a49ccd238e7f4e882347ab3690c
Author: Oliver-Rainer Wittmann <orw at apache.org>
Date:   Tue Feb 18 11:47:13 2014 +0000

    124188: <SwDoc::InsertDrawObj(..)> - assure correct insertion of text attribute for as-character anchored drawing objects
    
    Thx to Andre for his deep analysis.

diff --git a/sw/inc/IDocumentContentOperations.hxx b/sw/inc/IDocumentContentOperations.hxx
index e82b3f8..b6fa207 100644
--- a/sw/inc/IDocumentContentOperations.hxx
+++ b/sw/inc/IDocumentContentOperations.hxx
@@ -138,7 +138,7 @@ public:
     /** Einfuegen eines DrawObjectes. Das Object muss bereits im DrawModel
     angemeldet sein.
     */
-    virtual SwDrawFrmFmt* Insert(const SwPaM &rRg, SdrObject& rDrawObj, const SfxItemSet* pFlyAttrSet, SwFrmFmt*) = 0;
+    virtual SwDrawFrmFmt* InsertDrawObj( const SwPaM &rRg, SdrObject& rDrawObj, const SfxItemSet& rFlyAttrSet ) = 0;
 
     /** Einfuegen von OLE-Objecten.
     */
diff --git a/sw/inc/doc.hxx b/sw/inc/doc.hxx
index d18e58b..38802a3 100644
--- a/sw/inc/doc.hxx
+++ b/sw/inc/doc.hxx
@@ -891,7 +891,10 @@ public:
                         const SfxItemSet* pFlyAttrSet, const SfxItemSet* pGrfAttrSet, SwFrmFmt*);
     virtual SwFlyFrmFmt* Insert(const SwPaM& rRg, const GraphicObject& rGrfObj, const SfxItemSet* pFlyAttrSet,
                         const SfxItemSet* pGrfAttrSet, SwFrmFmt*);
-    virtual SwDrawFrmFmt* Insert(const SwPaM &rRg, SdrObject& rDrawObj, const SfxItemSet* pFlyAttrSet, SwFrmFmt*);
+    virtual SwDrawFrmFmt* InsertDrawObj(
+        const SwPaM &rRg,
+        SdrObject& rDrawObj,
+        const SfxItemSet& rFlyAttrSet );
     virtual SwFlyFrmFmt* Insert(const SwPaM &rRg, const svt::EmbeddedObjectRef& xObj, const SfxItemSet* pFlyAttrSet,
                         const SfxItemSet* pGrfAttrSet, SwFrmFmt*);
 
diff --git a/sw/source/core/doc/doclay.cxx b/sw/source/core/doc/doclay.cxx
index ba7e59b..577b367 100644
--- a/sw/source/core/doc/doclay.cxx
+++ b/sw/source/core/doc/doclay.cxx
@@ -923,57 +923,49 @@ if( GetIDocumentUndoRedo().DoesUndo() )
 }
 
 
-    //Einfuegen eines DrawObjectes. Das Object muss bereits im DrawModel
-    // angemeldet sein.
-SwDrawFrmFmt* SwDoc::Insert( const SwPaM &rRg,
-                             SdrObject& rDrawObj,
-                             const SfxItemSet* pFlyAttrSet,
-                             SwFrmFmt* pDefFmt )
+// Insert drawing object, which has to be already inserted in the DrawModel
+SwDrawFrmFmt* SwDoc::InsertDrawObj(
+    const SwPaM &rRg,
+    SdrObject& rDrawObj,
+    const SfxItemSet& rFlyAttrSet )
 {
-    SwDrawFrmFmt *pFmt = MakeDrawFrmFmt( aEmptyStr,
-                                        pDefFmt ? pDefFmt : GetDfltFrmFmt() );
+    SwDrawFrmFmt* pFmt = MakeDrawFrmFmt( aEmptyStr, GetDfltFrmFmt() );
 
     const SwFmtAnchor* pAnchor = 0;
-    if( pFlyAttrSet )
-    {
-        pFlyAttrSet->GetItemState( RES_ANCHOR, sal_False,
-                                    (const SfxPoolItem**)&pAnchor );
-        pFmt->SetFmtAttr( *pFlyAttrSet );
-    }
-
-    RndStdIds eAnchorId = pAnchor ? pAnchor->GetAnchorId()
-                                  : pFmt->GetAnchor().GetAnchorId();
+    rFlyAttrSet.GetItemState( RES_ANCHOR, sal_False, (const SfxPoolItem**) &pAnchor );
+    pFmt->SetFmtAttr( rFlyAttrSet );
 
-    // Anker noch nicht gesetzt ?
-    // DrawObjecte duerfen niemals in Kopf-/Fusszeilen landen.
+    RndStdIds eAnchorId = pAnchor != NULL ? pAnchor->GetAnchorId() : pFmt->GetAnchor().GetAnchorId();
     const bool bIsAtCntnt = (FLY_AT_PAGE != eAnchorId);
 
     const SwNodeIndex* pChkIdx = 0;
-    if( !pAnchor )
+    if ( pAnchor == NULL )
     {
         pChkIdx = &rRg.GetPoint()->nNode;
     }
-    else if( bIsAtCntnt )
+    else if ( bIsAtCntnt )
     {
-        pChkIdx = pAnchor->GetCntntAnchor()
-                    ? &pAnchor->GetCntntAnchor()->nNode
-                    : &rRg.GetPoint()->nNode;
+        pChkIdx =
+            pAnchor->GetCntntAnchor() ? &pAnchor->GetCntntAnchor()->nNode : &rRg.GetPoint()->nNode;
     }
 
-    // OD 24.06.2003 #108784# - allow drawing objects in header/footer, but
-    // control objects aren't allowed in header/footer.
-    if( pChkIdx &&
-        ::CheckControlLayer( &rDrawObj ) &&
-        IsInHeaderFooter( *pChkIdx ) )
+    // allow drawing objects in header/footer, but control objects aren't allowed in header/footer.
+    if( pChkIdx != NULL
+        && ::CheckControlLayer( &rDrawObj )
+        && IsInHeaderFooter( *pChkIdx ) )
     {
-       pFmt->SetFmtAttr( SwFmtAnchor( eAnchorId = FLY_AT_PAGE ) );
+        // apply at-page anchor format
+        eAnchorId = FLY_AT_PAGE;
+        pFmt->SetFmtAttr( SwFmtAnchor( eAnchorId ) );
     }
-    else if( !pAnchor || (bIsAtCntnt && !pAnchor->GetCntntAnchor() ))
+    else if( pAnchor == NULL
+             || ( bIsAtCntnt
+                  && pAnchor->GetCntntAnchor() == NULL ) )
     {
-        // dann setze ihn, wird im Undo gebraucht
-        SwFmtAnchor aAnch( pAnchor ? *pAnchor : pFmt->GetAnchor() );
+        // apply anchor format
+        SwFmtAnchor aAnch( pAnchor != NULL ? *pAnchor : pFmt->GetAnchor() );
         eAnchorId = aAnch.GetAnchorId();
-        if( FLY_AT_FLY == eAnchorId )
+        if ( eAnchorId == FLY_AT_FLY )
         {
             SwPosition aPos( *rRg.GetNode()->FindFlyStartNode() );
             aAnch.SetAnchor( &aPos );
@@ -981,39 +973,50 @@ SwDrawFrmFmt* SwDoc::Insert( const SwPaM &rRg,
         else
         {
             aAnch.SetAnchor( rRg.GetPoint() );
-            if ( FLY_AT_PAGE == eAnchorId )
+            if ( eAnchorId == FLY_AT_PAGE )
             {
-                eAnchorId = rDrawObj.ISA( SdrUnoObj )
-                                    ? FLY_AS_CHAR : FLY_AT_PARA;
+                eAnchorId = rDrawObj.ISA( SdrUnoObj ) ? FLY_AS_CHAR : FLY_AT_PARA;
                 aAnch.SetType( eAnchorId );
             }
         }
         pFmt->SetFmtAttr( aAnch );
     }
 
-    // bei als Zeichen gebundenen Draws das Attribut im Absatz setzen
-    if ( FLY_AS_CHAR == eAnchorId )
+    // insert text attribute for as-character anchored drawing object
+    if ( eAnchorId == FLY_AS_CHAR )
     {
-        xub_StrLen nStt = rRg.GetPoint()->nContent.GetIndex();
-        SwFmtFlyCnt aFmt( pFmt );
-        rRg.GetPoint()->nNode.GetNode().GetTxtNode()->InsertItem(
-                aFmt, nStt, nStt );
+        bool bAnchorAtPageAsFallback = true;
+        const SwFmtAnchor& rDrawObjAnchorFmt = pFmt->GetAnchor();
+        if ( rDrawObjAnchorFmt.GetCntntAnchor() != NULL )
+        {
+            SwTxtNode* pAnchorTxtNode =
+                    rDrawObjAnchorFmt.GetCntntAnchor()->nNode.GetNode().GetTxtNode();
+            if ( pAnchorTxtNode != NULL )
+            {
+                const xub_StrLen nStt = rDrawObjAnchorFmt.GetCntntAnchor()->nContent.GetIndex();
+                SwFmtFlyCnt aFmt( pFmt );
+                pAnchorTxtNode->InsertItem( aFmt, nStt, nStt );
+                bAnchorAtPageAsFallback = false;
+            }
+        }
+
+        if ( bAnchorAtPageAsFallback )
+        {
+            ASSERT( false, "SwDoc::InsertDrawObj(..) - missing content anchor for as-character anchored drawing object --> anchor at-page" );
+            pFmt->SetFmtAttr( SwFmtAnchor( FLY_AT_PAGE ) );
+        }
     }
 
     SwDrawContact* pContact = new SwDrawContact( pFmt, &rDrawObj );
 
-    // ggfs. Frames anlegen
-    if( GetCurrentViewShell() )
+    if ( GetCurrentViewShell() )
     {
+        // create layout representation
         pFmt->MakeFrms();
-        // --> OD 2005-02-09 #i42319# - follow-up of #i35635#
-        // move object to visible layer
-        // --> OD 2007-07-10 #i79391#
         if ( pContact->GetAnchorFrm() )
         {
             pContact->MoveObjToVisibleLayer( &rDrawObj );
         }
-        // <--
     }
 
     if (GetIDocumentUndoRedo().DoesUndo())
diff --git a/sw/source/core/frmedt/fecopy.cxx b/sw/source/core/frmedt/fecopy.cxx
index 2ad6706..660b147 100644
--- a/sw/source/core/frmedt/fecopy.cxx
+++ b/sw/source/core/frmedt/fecopy.cxx
@@ -211,7 +211,7 @@ sal_Bool SwFEShell::Copy( SwDoc* pClpDoc, const String* pNewClpTxt )
                     pClpDoc->CloneSdrObj( *pObj, sal_False, sal_True );
 
                 SwPaM aTemp(aPos);
-                pClpDoc->Insert(aTemp, *pNew, &aSet, NULL);
+                pClpDoc->InsertDrawObj(aTemp, *pNew, aSet );
             }
             else
             {
@@ -396,8 +396,7 @@ sal_Bool SwFEShell::CopyDrawSel( SwFEShell* pDestShell, const Point& rSttPt,
                     aSet.Put( aAnchor );
                     SdrObject* pNew = pDestDoc->CloneSdrObj( *pObj, bIsMove &&
                                                 GetDoc() == pDestDoc, sal_True );
-                    pFmt = pDestDoc->Insert( *pDestShell->GetCrsr(),
-                                            *pNew, &aSet, NULL );
+                    pFmt = pDestDoc->InsertDrawObj( *pDestShell->GetCrsr(), *pNew, aSet );
                 }
                 else
                     pFmt = pDestDoc->CopyLayoutFmt( *pFmt, aAnchor, true, true );
@@ -1456,7 +1455,7 @@ void SwFEShell::Paste( SvStream& rStrm, sal_uInt16 nAction, const Point* pPt )
 
                     DelSelectedObj();
 
-                    pFmt = GetDoc()->Insert( *GetCrsr(), *pNewObj, &aFrmSet, NULL );
+                    pFmt = GetDoc()->InsertDrawObj( *GetCrsr(), *pNewObj, aFrmSet );
                 }
                 else
                 {
diff --git a/sw/source/core/frmedt/fefly1.cxx b/sw/source/core/frmedt/fefly1.cxx
index 502975e..2bc9e1f 100644
--- a/sw/source/core/frmedt/fefly1.cxx
+++ b/sw/source/core/frmedt/fefly1.cxx
@@ -965,7 +965,7 @@ void SwFEShell::InsertDrawObj( SdrObject& rDrawObj,
         ::lcl_FindAnchorPos( *this, *GetDoc(), rInsertPosition, *pFrm, rFlyAttrSet );
     }
     // insert drawing object into the document creating a new <SwDrawFrmFmt> instance
-    SwDrawFrmFmt* pFmt = GetDoc()->Insert( aPam, rDrawObj, &rFlyAttrSet, 0 );
+    SwDrawFrmFmt* pFmt = GetDoc()->InsertDrawObj( aPam, rDrawObj, rFlyAttrSet );
 
     // move object to visible layer
     SwContact* pContact = static_cast<SwContact*>(rDrawObj.GetUserCall());
diff --git a/sw/source/core/unocore/unodraw.cxx b/sw/source/core/unocore/unodraw.cxx
index 6839590..7cc73e4 100644
--- a/sw/source/core/unocore/unodraw.cxx
+++ b/sw/source/core/unocore/unodraw.cxx
@@ -759,7 +759,7 @@ void SwXDrawPage::add(const uno::Reference< drawing::XShape > & xShape)
     if ( !pTemp )
         pTemp = pPam;
     UnoActionContext aAction(pDoc);
-    pDoc->Insert( *pTemp, *pObj, &aSet, NULL );
+    pDoc->InsertDrawObj( *pTemp, *pObj, aSet );
     SwFrmFmt* pFmt = ::FindFrmFmt( pObj );
     if(pFmt)
         pFmt->Add(pShape);
diff --git a/sw/source/filter/html/htmldraw.cxx b/sw/source/filter/html/htmldraw.cxx
index b354426..f287a1c 100644
--- a/sw/source/filter/html/htmldraw.cxx
+++ b/sw/source/filter/html/htmldraw.cxx
@@ -220,7 +220,7 @@ void SwHTMLParser::InsertDrawObject( SdrObject* pNewDrawObj,
     }
     aFrmSet.Put( aAnchor );
 
-    pDoc->Insert( *pPam, *pNewDrawObj, &aFrmSet, NULL );
+    pDoc->InsertDrawObj( *pPam, *pNewDrawObj, aFrmSet );
 }
 
 /*  */
diff --git a/sw/source/filter/rtf/swparrtf.cxx b/sw/source/filter/rtf/swparrtf.cxx
index ae7c826..f63a4cc 100644
--- a/sw/source/filter/rtf/swparrtf.cxx
+++ b/sw/source/filter/rtf/swparrtf.cxx
@@ -1311,7 +1311,7 @@ void SwRTFParser::ReadDrawingObject()
 
         pStroke->SetSnapRect(aRect);
 
-        /* SwFrmFmt* pRetFrmFmt = */pDoc->Insert(*pPam, *pStroke, &aFlySet, NULL);
+        /* SwFrmFmt* pRetFrmFmt = */pDoc->InsertDrawObj(*pPam, *pStroke, aFlySet );
     }
 }
 
@@ -1343,7 +1343,7 @@ void SwRTFParser::InsertShpObject(SdrObject* pStroke, int _nZOrder)
         SdrPage* pDrawPg = pDrawModel->GetPage(0);
         pDrawPg->InsertObject(pStroke);
         pDrawPg->SetObjectOrdNum(pStroke->GetOrdNum(), _nZOrder);
-        /* SwFrmFmt* pRetFrmFmt = */pDoc->Insert(*pPam, *pStroke, &aFlySet, NULL);
+        /* SwFrmFmt* pRetFrmFmt = */pDoc->InsertDrawObj(*pPam, *pStroke, aFlySet );
 }
 
 ::basegfx::B2DPoint rotate(const ::basegfx::B2DPoint& rStart, const ::basegfx::B2DPoint& rEnd)
diff --git a/sw/source/filter/ww8/ww8graf.cxx b/sw/source/filter/ww8/ww8graf.cxx
index 77b2638..3e19201 100644
--- a/sw/source/filter/ww8/ww8graf.cxx
+++ b/sw/source/filter/ww8/ww8graf.cxx
@@ -1409,7 +1409,7 @@ void SwWW8ImplReader::ReadGrafLayer1( WW8PLCFspecial* pPF, long nGrafAnchorCp )
         if (SdrObject *pObject = ReadGrafPrimitive( nLeft, &aDo, aSet ))
         {
             pWWZOrder->InsertDrawingObject(pObject, SVBT16ToShort(aDo.dhgt));
-            SwFrmFmt *pFrm = rDoc.Insert( *pPaM, *pObject, &aSet, NULL);
+            SwFrmFmt *pFrm = rDoc.InsertDrawObj( *pPaM, *pObject, aSet );
             pObject->SetMergedItemSet(aSet);
             pAnchorStck->AddAnchor(*pPaM->GetPoint(), pFrm);
         }
@@ -2839,7 +2839,7 @@ SwFrmFmt* SwWW8ImplReader::Read_GrafLayer( long nGrafAnchorCp )
                 pWWZOrder->InsertTextLayerObject(pObject);
             }
 
-            pRetFrmFmt = rDoc.Insert(*pPaM, *pObject, &aFlySet, NULL);
+            pRetFrmFmt = rDoc.InsertDrawObj(*pPaM, *pObject, aFlySet );
 
             ASSERT(pRetFrmFmt->GetAnchor().GetAnchorId() ==
                 eAnchor, "Not the anchor type requested!");
diff --git a/sw/source/filter/ww8/ww8graf2.cxx b/sw/source/filter/ww8/ww8graf2.cxx
index 7a308d3..b98c8c1 100644
--- a/sw/source/filter/ww8/ww8graf2.cxx
+++ b/sw/source/filter/ww8/ww8graf2.cxx
@@ -696,7 +696,7 @@ SwFrmFmt* SwWW8ImplReader::ImportGraf(SdrTextObj* pTextObj,
                             }
                         }
                         else
-                            pRet = rDoc.Insert(*pPaM, *pObject, &aAttrSet, NULL);
+                            pRet = rDoc.InsertDrawObj(*pPaM, *pObject, aAttrSet );
                     }
                 }
 
diff --git a/sw/source/filter/ww8/ww8par4.cxx b/sw/source/filter/ww8/ww8par4.cxx
index 68e01eb..a67d924 100644
--- a/sw/source/filter/ww8/ww8par4.cxx
+++ b/sw/source/filter/ww8/ww8par4.cxx
@@ -310,7 +310,7 @@ SwFrmFmt* SwWW8ImplReader::ImportOle(const Graphic* pGrf,
             SdrObject::Free( pRet );        // das brauchen wir nicht mehr
         }
         else
-            pFmt = rDoc.Insert(*pPaM, *pRet, pFlySet, NULL);
+            pFmt = rDoc.InsertDrawObj(*pPaM, *pRet, *pFlySet );
     }
     else if (
                 GRAPHIC_GDIMETAFILE == aGraph.GetType() ||
commit 0e90517f3dd568cfe2be4bf8c256b94c9401d046
Author: Andre Fischer <af at apache.org>
Date:   Tue Feb 18 09:21:55 2014 +0000

    122576: Reset the docking area acceptor in the destructor.

diff --git a/framework/source/layoutmanager/layoutmanager.cxx b/framework/source/layoutmanager/layoutmanager.cxx
index e2fadb1..7d8b77c 100644
--- a/framework/source/layoutmanager/layoutmanager.cxx
+++ b/framework/source/layoutmanager/layoutmanager.cxx
@@ -181,6 +181,7 @@ LayoutManager::~LayoutManager()
 {
     Application::RemoveEventListener( LINK( this, LayoutManager, SettingsChanged ) );
     m_aAsyncLayoutTimer.Stop();
+    setDockingAreaAcceptor(NULL);
 }
 
 // Internal helper function


More information about the Libreoffice-commits mailing list