[Libreoffice-commits] .: sw/inc sw/source

Caolán McNamara caolan at kemper.freedesktop.org
Mon Feb 27 04:44:00 PST 2012


 sw/inc/doc.hxx                   |    2 -
 sw/source/core/doc/docfmt.cxx    |   48 ++++++++++++++++++++++++---------------
 sw/source/ui/dochdl/swdtflvr.cxx |    2 -
 3 files changed, 32 insertions(+), 20 deletions(-)

New commits:
commit 15547450bdba10959473c2cb5891f29ad5053b09
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Mon Feb 27 12:39:06 2012 +0000

    Resolves: fdo#46038 don't copy page styles into temporary clipboard doc
    
    writer rtf export has a nasty pgdsctbl extension
    sd rtf import has nasty "if its got a table keyword in it its a table"
    logic
    
    Classically we never put our styles into the temporary clipboard, so fastest
    and safest fix is to simply skip putting the page styles into it.

diff --git a/sw/inc/doc.hxx b/sw/inc/doc.hxx
index 580108e..cfe9935 100644
--- a/sw/inc/doc.hxx
+++ b/sw/inc/doc.hxx
@@ -1286,7 +1286,7 @@ public:
     SwGrfFmtColl* CopyGrfColl( const SwGrfFmtColl& rColl );
 
     // Replace all styles with those from rSource.
-    void ReplaceStyles( const SwDoc& rSource );
+    void ReplaceStyles( const SwDoc& rSource, bool bIncludePageStyles = true );
 
     // Replace all property defaults with those from rSource.
     void ReplaceDefaults( const SwDoc& rSource );
diff --git a/sw/source/core/doc/docfmt.cxx b/sw/source/core/doc/docfmt.cxx
index 05227ea..01176c9 100644
--- a/sw/source/core/doc/docfmt.cxx
+++ b/sw/source/core/doc/docfmt.cxx
@@ -2134,7 +2134,7 @@ void SwDoc::CopyPageDesc( const SwPageDesc& rSrcDesc, SwPageDesc& rDstDesc,
     }
 }
 
-void SwDoc::ReplaceStyles( const SwDoc& rSource )
+void SwDoc::ReplaceStyles( const SwDoc& rSource, bool bIncludePageStyles )
 {
     ::sw::UndoGuard const undoGuard(GetIDocumentUndoRedo());
 
@@ -2145,26 +2145,38 @@ void SwDoc::ReplaceStyles( const SwDoc& rSource )
     CopyFmtArr( *rSource.pTxtFmtCollTbl, *pTxtFmtCollTbl,
                 &SwDoc::_MakeTxtFmtColl, *pDfltTxtFmtColl );
 
-    // and now the page templates
-    sal_uInt16 nCnt = rSource.aPageDescs.Count();
-    if( nCnt )
-    {
-        // a different Doc -> Number formatter needs to be merged
-        SwTblNumFmtMerge aTNFM( rSource, *this );
+    sal_uInt16 nCnt;
 
-        // 1st step: Create all formats (skip the 0th - it's the default!)
-        while( nCnt )
+    //To-Do:
+    //  a) in rtf export don't export our hideous pgdsctbl
+    //  extension to rtf anymore
+    //  b) in sd rtf import (View::InsertData) don't use
+    //  a super-fragile test for mere presence of \trowd to
+    //  indicate import of rtf into a table
+    //  c) then drop use of bIncludePageStyles
+    if (bIncludePageStyles)
+    {
+        // and now the page templates
+        nCnt = rSource.aPageDescs.Count();
+        if( nCnt )
         {
-            SwPageDesc *pSrc = rSource.aPageDescs[ --nCnt ];
-            if( 0 == ::lcl_FindPageDesc( aPageDescs, pSrc->GetName() ) )
-                MakePageDesc( pSrc->GetName() );
-        }
+            // a different Doc -> Number formatter needs to be merged
+            SwTblNumFmtMerge aTNFM( rSource, *this );
 
-        // 2nd step: Copy all attributes, set the right parents
-        for( nCnt = rSource.aPageDescs.Count(); nCnt; )
-        {
-            SwPageDesc *pSrc = rSource.aPageDescs[ --nCnt ];
-            CopyPageDesc( *pSrc, *::lcl_FindPageDesc( aPageDescs, pSrc->GetName() ));
+            // 1st step: Create all formats (skip the 0th - it's the default!)
+            while( nCnt )
+            {
+                SwPageDesc *pSrc = rSource.aPageDescs[ --nCnt ];
+                if( 0 == ::lcl_FindPageDesc( aPageDescs, pSrc->GetName() ) )
+                    MakePageDesc( pSrc->GetName() );
+            }
+
+            // 2nd step: Copy all attributes, set the right parents
+            for( nCnt = rSource.aPageDescs.Count(); nCnt; )
+            {
+                SwPageDesc *pSrc = rSource.aPageDescs[ --nCnt ];
+                CopyPageDesc( *pSrc, *::lcl_FindPageDesc( aPageDescs, pSrc->GetName() ));
+            }
         }
     }
 
diff --git a/sw/source/ui/dochdl/swdtflvr.cxx b/sw/source/ui/dochdl/swdtflvr.cxx
index b7be519..adfa4d1 100644
--- a/sw/source/ui/dochdl/swdtflvr.cxx
+++ b/sw/source/ui/dochdl/swdtflvr.cxx
@@ -379,7 +379,7 @@ namespace
 
         //It would probably make most sense here to only insert the styles used
         //by the selection, e.g. apply SwDoc::IsUsed on styles ?
-        rDest.ReplaceStyles(rSrc);
+        rDest.ReplaceStyles(rSrc, false);
 
         rSrcWrtShell.Copy(&rDest);
     }


More information about the Libreoffice-commits mailing list