diff options
Diffstat (limited to 'sw/source/filter')
-rw-r--r-- | sw/source/filter/ww8/docxattributeoutput.cxx | 15 | ||||
-rw-r--r-- | sw/source/filter/ww8/docxattributeoutput.hxx | 2 |
2 files changed, 8 insertions, 9 deletions
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index cab5cdf6e454..9957ff4a470d 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -293,10 +293,13 @@ void DocxAttributeOutput::EndParagraph( ww8::WW8TableNodeInfoInner::Pointer_t pT m_pSerializer->mergeTopMarks(); // Write the anchored frame if any - if ( m_pParentFrame ) + // Make a copy and clear the original early, as this method is called + // recursively for in-frame paragraphs + std::vector<sw::Frame> aParentFrames = m_aParentFrames; + m_aParentFrames.clear(); + for (size_t i = 0; i < aParentFrames.size(); ++i) { - sw::Frame *pParentFrame = m_pParentFrame; - m_pParentFrame = NULL; + sw::Frame* pParentFrame = &aParentFrames[i]; const SwFrmFmt& rFrmFmt = pParentFrame->GetFrmFmt( ); const SwNodeIndex* pNodeIndex = rFrmFmt.GetCntnt().GetCntntIdx(); @@ -356,8 +359,6 @@ void DocxAttributeOutput::EndParagraph( ww8::WW8TableNodeInfoInner::Pointer_t pT m_rExport.RestoreData(); m_rExport.mpParentFrame = NULL; - - delete pParentFrame; } m_pSerializer->endElementNS( XML_w, XML_p ); @@ -2772,7 +2773,7 @@ void DocxAttributeOutput::OutputFlyFrame_Impl( const sw::Frame &rFrame, const Po case sw::Frame::eTxtBox: { // The frame output is postponed to the end of the anchor paragraph - m_pParentFrame = new sw::Frame(rFrame); + m_aParentFrames.push_back(sw::Frame(rFrame)); } break; case sw::Frame::eOle: @@ -5162,7 +5163,6 @@ DocxAttributeOutput::DocxAttributeOutput( DocxExport &rExport, FSHelperPtr pSeri m_nTableDepth( 0 ), m_bParagraphOpened( false ), m_nColBreakStatus( COLBRK_NONE ), - m_pParentFrame( NULL ), m_bTextFrameSyntax( false ), m_closeHyperlinkInThisRun( false ), m_closeHyperlinkInPreviousRun( false ), @@ -5192,7 +5192,6 @@ DocxAttributeOutput::~DocxAttributeOutput() delete m_pEndnotesList, m_pEndnotesList = NULL; delete m_pTableWrt, m_pTableWrt = NULL; - delete m_pParentFrame; } DocxExport& DocxAttributeOutput::GetExport() diff --git a/sw/source/filter/ww8/docxattributeoutput.hxx b/sw/source/filter/ww8/docxattributeoutput.hxx index c4232759216b..06f12fa11c1b 100644 --- a/sw/source/filter/ww8/docxattributeoutput.hxx +++ b/sw/source/filter/ww8/docxattributeoutput.hxx @@ -642,7 +642,7 @@ private: // beginning of the next paragraph DocxColBreakStatus m_nColBreakStatus; - sw::Frame *m_pParentFrame; + std::vector<sw::Frame> m_aParentFrames; bool m_bTextFrameSyntax; OStringBuffer m_aTextFrameStyle; // close of hyperlink needed |