Blame SOURCES/0001-DOCX-import-fix-handling-of-dropdown-SDT-around-cell.patch

ebc4bd
From bb21f53e6c9b6b3f4a2d8c5e55ebc3a08caa69ba Mon Sep 17 00:00:00 2001
ebc4bd
From: Miklos Vajna <vmiklos@collabora.co.uk>
ebc4bd
Date: Thu, 18 Sep 2014 15:47:59 +0200
ebc4bd
Subject: [PATCH] DOCX import: fix handling of dropdown SDT around cell
ebc4bd
ebc4bd
There were two problems here:
ebc4bd
ebc4bd
1) The CT_SdtContentCell handlers didn't emit the usual
ebc4bd
NS_ooxml::LN_CT_SdtBlock_sdtContent /
ebc4bd
NS_ooxml::LN_CT_SdtBlock_sdtEndContent tokens, so the dropdown control
ebc4bd
was not created (and then was created with the wrong anchor).
ebc4bd
ebc4bd
2) In case the SDT was around the cell, the newline character was also
ebc4bd
added to the text of the currently selected entry, resulting in an
ebc4bd
invalid argument of SwXText::convertToTable(), so no table was created.
ebc4bd
ebc4bd
(cherry picked from commit 419054c0f19acb323a0e51c7ef49a1a2d9f42ac8)
ebc4bd
ebc4bd
Conflicts:
ebc4bd
	sw/qa/extras/ooxmlexport/ooxmlexport.cxx
ebc4bd
	writerfilter/source/dmapper/DomainMapper.cxx
ebc4bd
	writerfilter/source/ooxml/model.xml
ebc4bd
ebc4bd
Change-Id: I4806626181f40c6d26ff7b25f5dbb863967d8077
ebc4bd
---
ebc4bd
 sw/qa/extras/ooxmlexport/ooxmlexport.cxx     |  9 ---------
ebc4bd
 writerfilter/source/dmapper/DomainMapper.cxx | 14 +++++++++++---
ebc4bd
 writerfilter/source/ooxml/model.xml          |  5 ++++-
ebc4bd
 3 files changed, 15 insertions(+), 13 deletions(-)
ebc4bd
ebc4bd
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
ebc4bd
index a443d58..24459d1 100644
ebc4bd
--- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
ebc4bd
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
ebc4bd
@@ -3566,15 +3566,6 @@ DECLARE_OOXMLEXPORT_TEST(testfdo79822, "fdo79822.docx")
ebc4bd
         return;
ebc4bd
 }
ebc4bd
 
ebc4bd
-DECLARE_OOXMLEXPORT_TEST(testfdo79817,"fdo79817.docx")
ebc4bd
-{
ebc4bd
-    xmlDocPtr pXmlDoc = parseExport("word/document.xml");
ebc4bd
-    if (!pXmlDoc)
ebc4bd
-        return;
ebc4bd
-    assertXPath ( pXmlDoc, "/w:document/w:body/w:p[3]/w:sdt/w:sdtPr/w:dataBinding", "storeItemID","{9222E47B-A68B-4AEB-9855-21C912B9D3D2}");
ebc4bd
-    assertXPath ( pXmlDoc, "/w:document/w:body/w:p[3]/w:sdt/w:sdtPr/w:dataBinding", "xpath","/ns0:properties[1]/documentManagement[1]/ns2:Responsible_x0020_Officer_x0020_Title[1]");
ebc4bd
-}
ebc4bd
-
ebc4bd
 DECLARE_OOXMLEXPORT_TEST(testfdo80522,"fdo80522.docx")
ebc4bd
 {
ebc4bd
    xmlDocPtr pXmlDoc = parseExport("[Content_Types].xml");
ebc4bd
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
ebc4bd
index 44efb59..baf91d9 100644
ebc4bd
--- a/writerfilter/source/dmapper/DomainMapper.cxx
ebc4bd
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
ebc4bd
@@ -2768,10 +2768,18 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len)
ebc4bd
     aBuffer.append( (const sal_Unicode *) data_, len);
ebc4bd
     sText = aBuffer.makeStringAndClear();
ebc4bd
 
ebc4bd
+
ebc4bd
+    bool bNewLine = len == 1 && (sText[0] == 0x0d || sText[0] == 0x07);
ebc4bd
     if (!m_pImpl->m_pSdtHelper->getDropDownItems().empty())
ebc4bd
     {
ebc4bd
-        m_pImpl->m_pSdtHelper->getSdtTexts().append(sText);
ebc4bd
-        return;
ebc4bd
+        if (bNewLine)
ebc4bd
+            // Dropdown control has single-line texts, so in case of newline, create the control.
ebc4bd
+            m_pImpl->m_pSdtHelper->createDropDownControl();
ebc4bd
+        else
ebc4bd
+        {
ebc4bd
+            m_pImpl->m_pSdtHelper->getSdtTexts().append(sText);
ebc4bd
+            return;
ebc4bd
+        }
ebc4bd
     }
ebc4bd
     else if (!m_pImpl->m_pSdtHelper->getDateFormat().isEmpty())
ebc4bd
     {
ebc4bd
@@ -2814,7 +2822,7 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len)
ebc4bd
     {
ebc4bd
         m_pImpl->getTableManager().utext(data_, len);
ebc4bd
 
ebc4bd
-        if(len == 1 && (sText[0] == 0x0d || sText[0] == 0x07))
ebc4bd
+        if (bNewLine)
ebc4bd
         {
ebc4bd
             if (m_pImpl->m_bIgnoreNextPara)
ebc4bd
             {
ebc4bd
diff --git a/writerfilter/source/ooxml/model.xml b/writerfilter/source/ooxml/model.xml
ebc4bd
index 69ac296..3f4e71c 100644
ebc4bd
--- a/writerfilter/source/ooxml/model.xml
ebc4bd
+++ b/writerfilter/source/ooxml/model.xml
ebc4bd
@@ -25033,7 +25033,10 @@
ebc4bd
     <resource name="CT_SdtContentRun" resource="Stream" tag="field"/>
ebc4bd
     <resource name="CT_SdtContentBlock" resource="Stream" tag="field"/>
ebc4bd
     <resource name="CT_SdtContentRow" resource="Stream" tag="field"/>
ebc4bd
-    <resource name="CT_SdtContentCell" resource="Stream" tag="field"/>
ebc4bd
+    <resource name="CT_SdtContentCell" resource="Stream" tag="field">
ebc4bd
+      <action name="start" action="startSdt"/>
ebc4bd
+      <action name="end" action="endSdt"/>
ebc4bd
+    </resource>
ebc4bd
     <resource name="CT_SdtBlock" resource="Stream" tag="field">
ebc4bd
       <element name="sdtPr" tokenid="ooxml:CT_SdtBlock_sdtPr"/>
ebc4bd
       <element name="sdtEndPr" tokenid="ooxml:CT_SdtBlock_sdtEndPr"/>
ebc4bd
-- 
ebc4bd
2.1.0
ebc4bd