summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2014-10-15 13:00:24 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2014-10-15 13:19:08 +0200
commit5a5d55a8a0f82406a8001015a723596f21d3562c (patch)
treeed05c894f717b340c42e336d5f6e589fc9b51c7a
parentecc5cbc69e4c2df4ddbe46bbc2f973cc60a10772 (diff)
fdo#82860 RTF import: fix handling of SHAPE fields
No need to use fieldmarks for these. Change-Id: I8d2c797f2b00be88e445dab0dd69cb1a9556c02c
-rw-r--r--sw/qa/extras/rtfexport/data/fdo82860.odtbin0 -> 9222 bytes
-rw-r--r--sw/qa/extras/rtfexport/rtfexport.cxx10
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx30
3 files changed, 28 insertions, 12 deletions
diff --git a/sw/qa/extras/rtfexport/data/fdo82860.odt b/sw/qa/extras/rtfexport/data/fdo82860.odt
new file mode 100644
index 000000000000..f6804103d073
--- /dev/null
+++ b/sw/qa/extras/rtfexport/data/fdo82860.odt
Binary files differ
diff --git a/sw/qa/extras/rtfexport/rtfexport.cxx b/sw/qa/extras/rtfexport/rtfexport.cxx
index 5c74c5385b68..2ffbb38c5ddf 100644
--- a/sw/qa/extras/rtfexport/rtfexport.cxx
+++ b/sw/qa/extras/rtfexport/rtfexport.cxx
@@ -709,6 +709,16 @@ DECLARE_RTFEXPORT_TEST(testNumberingFont, "numbering-font.rtf")
CPPUNIT_ASSERT_EQUAL(OUString("Verdana"), getProperty<OUString>(xStyle, "CharFontName"));
}
+DECLARE_RTFEXPORT_TEST(testFdo82860, "fdo82860.odt")
+{
+ // The problem was that:
+ // 1) The import tried to use fieldmarks for SHAPE fields
+ // 2) The exporter did not handle "shape with textbox" text.
+ uno::Reference<text::XTextRange> xTextRange(getShape(1), uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextRange->getText();
+ CPPUNIT_ASSERT_EQUAL(OUString("hello"), getParagraphOfText(1, xText)->getString());
+}
+
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 8bdf7f74aa6f..adee004dc44e 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -4001,20 +4001,26 @@ void DomainMapper_Impl::CloseFieldCommand()
* To handle unsupported fields used fieldmark API.
*/
OUString aCode( pContext->GetCommand().trim() );
- xFieldInterface = m_xTextFactory->createInstance("com.sun.star.text.Fieldmark");
- const uno::Reference<text::XTextContent> xTextContent(xFieldInterface, uno::UNO_QUERY_THROW);
- uno::Reference< text::XTextAppend > xTextAppend;
- xTextAppend = m_aTextAppendStack.top().xTextAppend;
- uno::Reference< text::XTextCursor > xCrsr = xTextAppend->createTextCursorByRange(pContext->GetStartRange());
- if (xTextContent.is())
+ // Don't waste resources on wrapping shapes inside a fieldmark.
+ if (aCode != "SHAPE")
{
- xTextAppend->insertTextContent(xCrsr,xTextContent, sal_True);
+ xFieldInterface = m_xTextFactory->createInstance("com.sun.star.text.Fieldmark");
+ const uno::Reference<text::XTextContent> xTextContent(xFieldInterface, uno::UNO_QUERY_THROW);
+ uno::Reference< text::XTextAppend > xTextAppend;
+ xTextAppend = m_aTextAppendStack.top().xTextAppend;
+ uno::Reference< text::XTextCursor > xCrsr = xTextAppend->createTextCursorByRange(pContext->GetStartRange());
+ if (xTextContent.is())
+ {
+ xTextAppend->insertTextContent(xCrsr,xTextContent, sal_True);
+ }
+ const uno::Reference<uno::XInterface> xContent(xTextContent);
+ uno::Reference< text::XFormField> xFormField(xContent, uno::UNO_QUERY);
+ xFormField->setFieldType(aCode);
+ m_bStartGenericField = true;
+ pContext->SetFormField( xFormField );
}
- const uno::Reference<uno::XInterface> xContent(xTextContent);
- uno::Reference< text::XFormField> xFormField(xContent, uno::UNO_QUERY);
- xFormField->setFieldType(aCode);
- m_bStartGenericField = true;
- pContext->SetFormField( xFormField );
+ else
+ m_bParaHadField = false;
}
//set the text field if there is any
pContext->SetTextField( uno::Reference< text::XTextField >( xFieldInterface, uno::UNO_QUERY ) );