summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2016-01-28 17:52:40 +0100
committerMiklos Vajna <vmiklos@collabora.co.uk>2016-01-28 20:39:27 +0000
commit8f1a1092d47947847e1d888b0284e8364c663d1f (patch)
tree12cd9177ea41431e2a2c8d5ab811a7fd1cb25a3a
parentbc01f53028f23d78c2c92ede87ee71f79433e4f0 (diff)
tdf#97371 DOCX import: fix text covered by shape
Regression from commit 358666e4204364ce915ee95372dc6f2fca545253 (tdf#90153 DOCX import: fix default sw TextFrame roundtrip, 2015-09-28), the problem was that at the moment SwTextBoxHelper::syncProperty() doesn't handle an AnchorType at-para -> at-char transition, so the importer shouldn't do that for TextBoxes till sw core gets extended to support the scenario. Change-Id: I8308bfd306672bc68984fbf019767c174130e18d Reviewed-on: https://gerrit.libreoffice.org/21885 Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk> Tested-by: Jenkins <ci@libreoffice.org>
-rw-r--r--sw/CppunitTest_sw_ooxmlimport.mk1
-rw-r--r--sw/qa/extras/ooxmlimport/data/tdf97371.docxbin0 -> 18800 bytes
-rw-r--r--sw/qa/extras/ooxmlimport/ooxmlimport.cxx15
-rw-r--r--writerfilter/source/dmapper/GraphicImport.cxx7
4 files changed, 22 insertions, 1 deletions
diff --git a/sw/CppunitTest_sw_ooxmlimport.mk b/sw/CppunitTest_sw_ooxmlimport.mk
index 4074255a7cf3..dbcead9598c3 100644
--- a/sw/CppunitTest_sw_ooxmlimport.mk
+++ b/sw/CppunitTest_sw_ooxmlimport.mk
@@ -27,6 +27,7 @@ $(eval $(call gb_CppunitTest_use_libraries,sw_ooxmlimport, \
sw \
tl \
vcl \
+ svxcore \
$(gb_UWINAPI) \
))
diff --git a/sw/qa/extras/ooxmlimport/data/tdf97371.docx b/sw/qa/extras/ooxmlimport/data/tdf97371.docx
new file mode 100644
index 000000000000..87e67ddf877b
--- /dev/null
+++ b/sw/qa/extras/ooxmlimport/data/tdf97371.docx
Binary files differ
diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
index 14ddf51297cc..2fe18f889cc5 100644
--- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
+++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
@@ -74,10 +74,12 @@
#include <comphelper/sequenceashashmap.hxx>
#include <com/sun/star/text/GraphicCrop.hpp>
#include <swtypes.hxx>
+#include <drawdoc.hxx>
#include <tools/datetimeutils.hxx>
#include <oox/drawingml/drawingmltypes.hxx>
#include <unotools/streamwrap.hxx>
#include <comphelper/propertysequence.hxx>
+#include <svx/svdpage.hxx>
#include <com/sun/star/drawing/HomogenMatrix3.hpp>
#include <bordertest.hxx>
@@ -3064,6 +3066,19 @@ DECLARE_OOXMLIMPORT_TEST(testTdf95213, "tdf95213.docx")
CPPUNIT_ASSERT_EQUAL(awt::FontWeight::NORMAL, getProperty<float>(xStyle, "CharWeight"));
}
+DECLARE_OOXMLIMPORT_TEST(testTdf97371, "tdf97371.docx")
+{
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument *>(mxComponent.get());
+ CPPUNIT_ASSERT(pTextDoc);
+ SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc();
+ SdrPage* pPage = pDoc->getIDocumentDrawModelAccess().GetDrawModel()->GetPage(0);
+ SdrObject* pShape = pPage->GetObj(0);
+ SdrObject* pTextBox = pPage->GetObj(1);
+ long nDiff = std::abs(pShape->GetSnapRect().Top() - pTextBox->GetSnapRect().Top());
+ // The top of the two shapes were 410 and 3951, now it should be 3950 and 3951.
+ CPPUNIT_ASSERT(nDiff < 10);
+}
+
// base class to supply a helper method for testHFLinkToPrev
class testHFBase : public Test
{
diff --git a/writerfilter/source/dmapper/GraphicImport.cxx b/writerfilter/source/dmapper/GraphicImport.cxx
index a9d3225662ff..735687d7d3ee 100644
--- a/writerfilter/source/dmapper/GraphicImport.cxx
+++ b/writerfilter/source/dmapper/GraphicImport.cxx
@@ -805,8 +805,13 @@ void GraphicImport::lcl_attribute(Id nName, Value& rValue)
// This needs to be AT_PARAGRAPH by default and not AT_CHARACTER, otherwise shape will move when the user inserts a new paragraph.
text::TextContentAnchorType eAnchorType = text::TextContentAnchorType_AT_PARAGRAPH;
- if (m_pImpl->nVertRelation == text::RelOrientation::TEXT_LINE)
+
+ // Avoid setting AnchorType for TextBoxes till SwTextBoxHelper::syncProperty() doesn't handle transition.
+ bool bTextBox = false;
+ xShapeProps->getPropertyValue("TextBox") >>= bTextBox;
+ if (m_pImpl->nVertRelation == text::RelOrientation::TEXT_LINE && !bTextBox)
eAnchorType = text::TextContentAnchorType_AT_CHARACTER;
+
xShapeProps->setPropertyValue("AnchorType", uno::makeAny(eAnchorType));
//only the position orientation is handled in applyPosition()