diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2014-09-18 15:47:59 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2014-09-18 15:57:12 +0200 |
commit | 419054c0f19acb323a0e51c7ef49a1a2d9f42ac8 (patch) | |
tree | 551edbbc0d7e249fe0a86b7b46e15f1ec8c33c99 /writerfilter | |
parent | 1c1fe7afb77e0538cdc4081ee266a7bda80f7b05 (diff) |
DOCX import: fix handling of dropdown SDT around cell
There were two problems here:
1) The CT_SdtContentCell handlers didn't emit the usual
NS_ooxml::LN_CT_SdtBlock_sdtContent /
NS_ooxml::LN_CT_SdtBlock_sdtEndContent tokens, so the dropdown control
was not created (and then was created with the wrong anchor).
2) In case the SDT was around the cell, the newline character was also
added to the text of the currently selected entry, resulting in an
invalid argument of SwXText::convertToTable(), so no table was created.
Change-Id: I4806626181f40c6d26ff7b25f5dbb863967d8077
Diffstat (limited to 'writerfilter')
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper.cxx | 13 | ||||
-rw-r--r-- | writerfilter/source/ooxml/model.xml | 5 |
2 files changed, 14 insertions, 4 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index 7c4fe8a4a3f1..5fd818c6eccc 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -2949,10 +2949,17 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len) m_pImpl->setSdtEndDeferred(false); } + bool bNewLine = len == 1 && (sText[0] == 0x0d || sText[0] == 0x07); if (!m_pImpl->m_pSdtHelper->getDropDownItems().empty()) { - m_pImpl->m_pSdtHelper->getSdtTexts().append(sText); - return; + if (bNewLine) + // Dropdown control has single-line texts, so in case of newline, create the control. + m_pImpl->m_pSdtHelper->createDropDownControl(); + else + { + m_pImpl->m_pSdtHelper->getSdtTexts().append(sText); + return; + } } // Form controls are not allowed in headers / footers; see sw::DocumentContentOperationsManager::InsertDrawObj() else if (!m_pImpl->m_pSdtHelper->getDateFormat().isEmpty() && !IsInHeaderFooter()) @@ -3005,7 +3012,7 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len) { m_pImpl->getTableManager().utext(data_, len); - if(len == 1 && (sText[0] == 0x0d || sText[0] == 0x07)) + if (bNewLine) { if (m_pImpl->m_bIgnoreNextPara) { diff --git a/writerfilter/source/ooxml/model.xml b/writerfilter/source/ooxml/model.xml index 0ae1df88b4d9..f194a139b599 100644 --- a/writerfilter/source/ooxml/model.xml +++ b/writerfilter/source/ooxml/model.xml @@ -18030,7 +18030,10 @@ <resource name="CT_SdtContentRun" resource="Stream"/> <resource name="CT_SdtContentBlock" resource="Stream"/> <resource name="CT_SdtContentRow" resource="Stream"/> - <resource name="CT_SdtContentCell" resource="Stream"/> + <resource name="CT_SdtContentCell" resource="Stream"> + <action name="start" action="startSdt"/> + <action name="end" action="endSdt"/> + </resource> <resource name="CT_SdtBlock" resource="Stream"> <element name="sdtPr" tokenid="ooxml:CT_SdtBlock_sdtPr"/> <element name="sdtEndPr" tokenid="ooxml:CT_SdtBlock_sdtEndPr"/> |