sw/qa/extras/ooxmlexport/data/test76734_2K7.docx |binary
 sw/qa/extras/ooxmlexport/ooxmlexport.cxx         |    8 ++++++++
 sw/source/filter/ww8/docxattributeoutput.cxx     |   13 ++++++++++---
 3 files changed, 18 insertions(+), 3 deletions(-)

New commits:
commit df098f6207fdf79d566bf50cc2c2c87fcd295ff8
Author: Sourav <sourav.maha...@synerzip.com>
Date:   Fri Mar 28 18:25:39 2014 +0530

    fdo76734-Text Box is not preserved for file created in MSWord 2007.
    
    Issue:Only one AlternateContent is getting written in the RT file 
irrespective of
    the number of TextBoxes in the original file which is causing the issue.
    RootCause is found in DocxAttributeOutput::OutputFlyFrame_Impl where under 
case
    sw::Frame::eTxtBox,m_aFramesOfParagraph.push_back(sw::Frame(rFrame)); is 
getting executed only once.
    push_back should happen as many number of times as there are TextBoxes in 
the original file.
    
    if(rFrame.GetFrmFmt().GetName() == 
m_aFramesOfParagraph[nIndex].GetFrmFmt().GetName())
        bDuplicate = true;
    
    In the above check both the GetName() are returning values as empty which 
leads to
    bDuplicate equals TRUE and hence push_back does not happen.
    I have introduced one more check to handle this.
    
    Also changes are made in for loop to make it more efficient.
    
    Conflicts:
        sw/qa/extras/ooxmlexport/ooxmlexport.cxx
    Reviewed on:
        https://gerrit.libreoffice.org/8782
    
    Change-Id: I397aa3c4548cb57e8dacbf3fbf9ebaf87c0daa80

diff --git a/sw/qa/extras/ooxmlexport/data/test76734_2K7.docx 
b/sw/qa/extras/ooxmlexport/data/test76734_2K7.docx
new file mode 100644
index 0000000..5e0e114
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/test76734_2K7.docx 
differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx 
b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
index 1e1fd6d..68ef7ebb 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
@@ -3041,6 +3041,14 @@ DECLARE_OOXMLEXPORT_TEST(testFDO76586, "fdo76586.docx")
     assertXPath(pXmlDoc, "//w:tblGrid/w:gridCol[2]", "w", "7843");
 }
 
+DECLARE_OOXMLEXPORT_TEST(test76734_2K7, "test76734_2K7.docx")
+{
+    xmlDocPtr pXmlDoc = parseExport("word/document.xml");
+    if (!pXmlDoc)
+        return;
+    assertXPath(pXmlDoc, 
"/w:document[1]/w:body[1]/w:p[1]/w:r[3]/mc:AlternateContent[1]/mc:Choice[1]", 
"Requires", "wps");
+}
+
 #endif
 
 CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx 
b/sw/source/filter/ww8/docxattributeoutput.cxx
index 4ba7f2b..04f5d37 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -4179,10 +4179,17 @@ void DocxAttributeOutput::OutputFlyFrame_Impl( const 
sw::Frame &rFrame, const Po
             {
                 // The frame output is postponed to the end of the anchor 
paragraph
                 bool bDuplicate = false;
-                for( unsigned nIndex = 0; nIndex < 
m_aFramesOfParagraph.size(); ++nIndex )
+                const OUString& rName = rFrame.GetFrmFmt().GetName();
+                unsigned nSize = m_aFramesOfParagraph.size();
+                for( unsigned nIndex = 0; nIndex < nSize; ++nIndex )
                 {
-                    if( rFrame.GetFrmFmt().GetName() == 
m_aFramesOfParagraph[nIndex].GetFrmFmt().GetName() )
-                        bDuplicate = true;
+                    const OUString& rNameExisting = 
m_aFramesOfParagraph[nIndex].GetFrmFmt().GetName();
+
+                    if (!rName.isEmpty() && !rNameExisting.isEmpty())
+                    {
+                        if (rName == rNameExisting)
+                            bDuplicate = true;
+                    }
                 }
 
                 if( !bDuplicate )
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to