[Libreoffice-commits] core.git: sw/source

Miklos Vajna vmiklos at collabora.co.uk
Fri Apr 3 00:09:24 PDT 2015


 sw/source/filter/ww8/docxattributeoutput.cxx |   14 ++------------
 sw/source/filter/ww8/docxattributeoutput.hxx |    4 ++--
 2 files changed, 4 insertions(+), 14 deletions(-)

New commits:
commit bdff04c635f9b65485f6a5a79116699cb1e82d72
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Fri Apr 3 09:08:33 2015 +0200

    DOCX export: use std::shared_ptr<> in FieldInfos::pField
    
    Change-Id: I8165adcad90e98cd166e27586f4948deb24b22c9

diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index 3fbd96d..793f85c 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -1031,8 +1031,6 @@ void DocxAttributeOutput::EndRun()
             // Unknown fields should be removed too
             if ( !pIt->bClose || ( pIt->eType == ww::eUNKNOWN ) )
             {
-                if (pIt->pField)
-                    delete pIt->pField;
                 pIt = m_Fields.erase( pIt );
                 continue;
             }
@@ -1071,8 +1069,6 @@ void DocxAttributeOutput::EndRun()
                 // If fields begin before hyperlink then
                 // it should end before hyperlink close
                 EndField_Impl( m_Fields.back( ) );
-                if (m_Fields.back().pField)
-                    delete m_Fields.back().pField;
                 m_Fields.pop_back();
             }
             m_pSerializer->endElementNS( XML_w, XML_hyperlink );
@@ -1093,8 +1089,6 @@ void DocxAttributeOutput::EndRun()
 
             // Remove the field if no end needs to be written
             if ( !pIt->bClose ) {
-                if (pIt->pField)
-                    delete pIt->pField;
                 pIt = m_Fields.erase( pIt );
                 continue;
             }
@@ -1225,8 +1219,6 @@ void DocxAttributeOutput::EndRun()
                 // If fields begin after hyperlink start then
                 // it should end before hyperlink close
                 EndField_Impl( m_Fields.back( ) );
-                if (m_Fields.back().pField)
-                    delete m_Fields.back().pField;
                 m_Fields.pop_back();
             }
 
@@ -1241,8 +1233,6 @@ void DocxAttributeOutput::EndRun()
         while ( m_Fields.begin() != m_Fields.end() )
         {
             EndField_Impl( m_Fields.front( ) );
-            if (m_Fields.front().pField)
-                delete m_Fields.front().pField;
             m_Fields.erase( m_Fields.begin( ) );
         }
 }
@@ -1405,7 +1395,7 @@ void DocxAttributeOutput::StartField_Impl( FieldInfos& rInfos, bool bWriteRun )
                     WriteFFData(  rInfos );
                 if ( rInfos.pField )
                 {
-                    const SwDropDownField& rFld2 = *static_cast<const SwDropDownField*>(rInfos.pField);
+                    const SwDropDownField& rFld2 = *static_cast<const SwDropDownField*>(rInfos.pField.get());
                     uno::Sequence<OUString> aItems =
                         rFld2.GetItemSequence();
                     GetExport().DoComboBox(rFld2.GetName(),
@@ -6552,7 +6542,7 @@ void DocxAttributeOutput::WriteField_Impl( const SwField* pFld, ww::eField eType
 {
     struct FieldInfos infos;
     if (pFld)
-        infos.pField = pFld->CopyField();
+        infos.pField.reset(pFld->CopyField());
     infos.sCmd = rFldCmd;
     infos.eType = eType;
     infos.bClose = WRITEFIELD_CLOSE & nMode;
diff --git a/sw/source/filter/ww8/docxattributeoutput.hxx b/sw/source/filter/ww8/docxattributeoutput.hxx
index 15ff8b6..c63efd3 100644
--- a/sw/source/filter/ww8/docxattributeoutput.hxx
+++ b/sw/source/filter/ww8/docxattributeoutput.hxx
@@ -52,13 +52,13 @@ namespace oox { namespace drawingml { class DrawingML; } }
 
 struct FieldInfos
 {
-    const SwField*    pField;
+    std::shared_ptr<const SwField> pField;
     const ::sw::mark::IFieldmark* pFieldmark;
     ww::eField  eType;
     bool        bOpen;
     bool        bClose;
     OUString    sCmd;
-    FieldInfos() : pField(NULL), pFieldmark(NULL), eType(ww::eUNKNOWN), bOpen(false), bClose(false){}
+    FieldInfos() : pFieldmark(NULL), eType(ww::eUNKNOWN), bOpen(false), bClose(false){}
 };
 
 enum DocxColBreakStatus


More information about the Libreoffice-commits mailing list