diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2014-10-15 13:00:24 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2014-10-15 13:19:08 +0200 |
commit | 5a5d55a8a0f82406a8001015a723596f21d3562c (patch) | |
tree | ed05c894f717b340c42e336d5f6e589fc9b51c7a | |
parent | ecc5cbc69e4c2df4ddbe46bbc2f973cc60a10772 (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.odt | bin | 0 -> 9222 bytes | |||
-rw-r--r-- | sw/qa/extras/rtfexport/rtfexport.cxx | 10 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.cxx | 30 |
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 Binary files differnew file mode 100644 index 000000000000..f6804103d073 --- /dev/null +++ b/sw/qa/extras/rtfexport/data/fdo82860.odt 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 ) ); |