[Libreoffice-commits] .: Branch 'libreoffice-3-6' - sw/source writerfilter/inc writerfilter/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Fri Oct 19 13:12:01 PDT 2012


 sw/source/filter/rtf/swparrtf.cxx                 |    4 +++-
 writerfilter/inc/dmapper/DomainMapper.hxx         |    3 ++-
 writerfilter/source/dmapper/DomainMapper.cxx      |    5 +++--
 writerfilter/source/dmapper/DomainMapper_Impl.cxx |   11 +++++++++--
 writerfilter/source/dmapper/DomainMapper_Impl.hxx |    7 ++++++-
 writerfilter/source/dmapper/PropertyMap.cxx       |    6 ++++--
 writerfilter/source/filter/RtfFilter.cxx          |    3 ++-
 7 files changed, 29 insertions(+), 10 deletions(-)

New commits:
commit b401b8977df3d9755f6d8999172ce2ecdaef93f0
Author: Miklos Vajna <vmiklos at suse.cz>
Date:   Mon Oct 15 16:42:15 2012 +0200

    fdo#46669 sw: RTF paste should not change page styles
    
    (cherry picked from commit 4f1ba0486241bd239e46b71405662db8e10d9b96)
    
    Conflicts:
    	writerfilter/inc/dmapper/DomainMapper.hxx
    	writerfilter/source/dmapper/DomainMapper.cxx
    	writerfilter/source/dmapper/DomainMapper_Impl.cxx
    	writerfilter/source/dmapper/DomainMapper_Impl.hxx
    	writerfilter/source/filter/RtfFilter.cxx
    
    Change-Id: Ic163a639fae9de838258b3cca9567a29ab875a35
    Reviewed-on: https://gerrit.libreoffice.org/878
    Reviewed-by: Michael Stahl <mstahl at redhat.com>
    Tested-by: Michael Stahl <mstahl at redhat.com>

diff --git a/sw/source/filter/rtf/swparrtf.cxx b/sw/source/filter/rtf/swparrtf.cxx
index 95ca3dd..53b460d 100644
--- a/sw/source/filter/rtf/swparrtf.cxx
+++ b/sw/source/filter/rtf/swparrtf.cxx
@@ -151,10 +151,12 @@ sal_uLong SwRTFReader::Read( SwDoc &rDoc, const String& /*rBaseURL*/, SwPaM& /*r
     xImporter->setTargetDocument(xDstDoc);
 
     uno::Reference<document::XFilter> xFilter(xInterface, uno::UNO_QUERY_THROW);
-    uno::Sequence<beans::PropertyValue> aDescriptor(1);
+    uno::Sequence<beans::PropertyValue> aDescriptor(2);
     aDescriptor[0].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("InputStream"));
     uno::Reference<io::XStream> xStream(new utl::OStreamWrapper(*pStrm));
     aDescriptor[0].Value <<= xStream;
+    aDescriptor[1].Name = "IsNewDoc";
+    aDescriptor[1].Value <<= sal_False;
     xFilter->filter(aDescriptor);
 
     return 0;
diff --git a/writerfilter/inc/dmapper/DomainMapper.hxx b/writerfilter/inc/dmapper/DomainMapper.hxx
index 95ddc6f..eaf5e74 100644
--- a/writerfilter/inc/dmapper/DomainMapper.hxx
+++ b/writerfilter/inc/dmapper/DomainMapper.hxx
@@ -89,7 +89,8 @@ public:
     DomainMapper(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& xContext,
                                 ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > xInputStream,
                                 ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent > xModel,
-                                SourceDocumentType eDocumentType );
+                                SourceDocumentType eDocumentType,
+                                bool bIsNewDoc = true);
     virtual ~DomainMapper();
 
     // Stream
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index 3eed3cd..37fbfd4 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -97,11 +97,12 @@ struct _PageSz
 DomainMapper::DomainMapper( const uno::Reference< uno::XComponentContext >& xContext,
                             uno::Reference< io::XInputStream > xInputStream,
                             uno::Reference< lang::XComponent > xModel,
-                            SourceDocumentType eDocumentType) :
+                            SourceDocumentType eDocumentType,
+                            bool bIsNewDoc ) :
 LoggedProperties(dmapper_logger, "DomainMapper"),
 LoggedTable(dmapper_logger, "DomainMapper"),
 LoggedStream(dmapper_logger, "DomainMapper"),
-    m_pImpl( new DomainMapper_Impl( *this, xContext, xModel, eDocumentType )),
+    m_pImpl( new DomainMapper_Impl( *this, xContext, xModel, eDocumentType, bIsNewDoc )),
     mnBackgroundColor(0), mbIsHighlightSet(false)
 {
     // #i24363# tab stops relative to indent
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index ee6e291..951d500 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -184,7 +184,8 @@ DomainMapper_Impl::DomainMapper_Impl(
             DomainMapper& rDMapper,
             uno::Reference < uno::XComponentContext >  xContext,
             uno::Reference< lang::XComponent >  xModel,
-            SourceDocumentType eDocumentType) :
+            SourceDocumentType eDocumentType,
+            bool bIsNewDoc) :
         m_eDocumentType( eDocumentType ),
         m_rDMapper( rDMapper ),
         m_xTextDocument( xModel, uno::UNO_QUERY ),
@@ -209,7 +210,8 @@ DomainMapper_Impl::DomainMapper_Impl(
         m_bIsFirstParaInSection( true ),
         m_bIsLastParaInSection( false ),
         m_bParaSectpr( false ),
-        m_bUsingEnhancedFields( false )
+        m_bUsingEnhancedFields( false ),
+        m_bIsNewDoc(bIsNewDoc)
 {
     appendTableManager( );
     GetBodyText();
@@ -3679,6 +3681,11 @@ SectionPropertyMap * DomainMapper_Impl::GetSectionContext()
     return pSectionContext;
 }
 
+bool DomainMapper_Impl::IsNewDoc()
+{
+    return m_bIsNewDoc;
+}
+
 }}
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
index 0cfee56..6208f9c 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
@@ -369,12 +369,15 @@ private:
                                                                 throw(::com::sun::star::uno::Exception);
     ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >       GetDocumentSettings();
 
+    bool m_bIsNewDoc;
+
 public:
     DomainMapper_Impl(
             DomainMapper& rDMapper,
             uno::Reference < uno::XComponentContext >  xContext,
             uno::Reference< lang::XComponent >  xModel,
-            SourceDocumentType eDocumentType );
+            SourceDocumentType eDocumentType,
+            bool bIsNewDoc );
     DomainMapper_Impl();
     virtual ~DomainMapper_Impl();
 
@@ -625,6 +628,8 @@ public:
     SectionPropertyMap * GetSectionContext();
     /// If the current paragraph has a numbering style associated, this method returns its character style
     com::sun::star::uno::Reference<com::sun::star::beans::XPropertySet> GetCurrentNumberingCharStyle();
+    /// If we're importing into a new document, or just pasting to an existing one.
+    bool IsNewDoc();
 };
 } //namespace dmapper
 } //namespace writerfilter
diff --git a/writerfilter/source/dmapper/PropertyMap.cxx b/writerfilter/source/dmapper/PropertyMap.cxx
index f26e9ed..60de3eb 100644
--- a/writerfilter/source/dmapper/PropertyMap.cxx
+++ b/writerfilter/source/dmapper/PropertyMap.cxx
@@ -980,7 +980,8 @@ void SectionPropertyMap::CloseSectionGroup( DomainMapper_Impl& rDM_Impl )
 
         operator[](PropertyDefinition(PROP_GRID_MODE, false)) = uno::makeAny(nGridMode);
 
-        _ApplyProperties( xFollowPageStyle );
+        if (rDM_Impl.IsNewDoc())
+            _ApplyProperties( xFollowPageStyle );
 
         //todo: creating a "First Page" style depends on HasTitlePage und _fFacingPage_
         if( m_bTitlePage )
@@ -989,7 +990,8 @@ void SectionPropertyMap::CloseSectionGroup( DomainMapper_Impl& rDM_Impl )
             PrepareHeaderFooterProperties( true );
             uno::Reference< beans::XPropertySet > xFirstPageStyle = GetPageStyle(
                                 rDM_Impl.GetPageStyles(), rDM_Impl.GetTextFactory(), true );
-            _ApplyProperties( xFirstPageStyle );
+            if (rDM_Impl.IsNewDoc())
+                _ApplyProperties( xFirstPageStyle );
 
             sal_Int32 nPaperBin = m_nFirstPaperBin >= 0 ? m_nFirstPaperBin : m_nPaperBin >= 0 ? m_nPaperBin : 0;
             if( nPaperBin )
diff --git a/writerfilter/source/filter/RtfFilter.cxx b/writerfilter/source/filter/RtfFilter.cxx
index 7e862c8..7da28bb 100644
--- a/writerfilter/source/filter/RtfFilter.cxx
+++ b/writerfilter/source/filter/RtfFilter.cxx
@@ -75,6 +75,7 @@ sal_Bool RtfFilter::filter( const uno::Sequence< beans::PropertyValue >& aDescri
     try
     {
         MediaDescriptor aMediaDesc( aDescriptor );
+        bool bIsNewDoc = aMediaDesc.getUnpackedValueOrDefault( "IsNewDoc", true );
 #ifdef DEBUG_IMPORT
         OUString sURL = aMediaDesc.getUnpackedValueOrDefault( MediaDescriptor::PROP_URL(), OUString() );
         ::std::string sURLc = OUStringToOString(sURL, RTL_TEXTENCODING_ASCII_US).getStr();
@@ -96,7 +97,7 @@ sal_Bool RtfFilter::filter( const uno::Sequence< beans::PropertyValue >& aDescri
                 uno::Reference<task::XStatusIndicator>());
 
         writerfilter::Stream::Pointer_t pStream(
-                new writerfilter::dmapper::DomainMapper(m_xContext, xInputStream, m_xDstDoc, writerfilter::dmapper::DOCUMENT_RTF));
+                new writerfilter::dmapper::DomainMapper(m_xContext, xInputStream, m_xDstDoc, writerfilter::dmapper::DOCUMENT_RTF, bIsNewDoc));
         writerfilter::rtftok::RTFDocument::Pointer_t const pDocument(
                 writerfilter::rtftok::RTFDocumentFactory::createDocument(m_xContext, xInputStream, m_xDstDoc, xFrame, xStatusIndicator));
         pDocument->resolve(*pStream);


More information about the Libreoffice-commits mailing list