diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2016-09-07 22:17:34 +0200 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2016-09-10 09:14:27 +0000 |
commit | ebd72cfc297ecfe617e9112f977a8ca12c2cacee (patch) | |
tree | 04d175efce27bb13c544d50de09f9e0389f17088 | |
parent | 7f037e2230d059320aff8610b6d24c0a44a71e41 (diff) |
tdf#78727 sw: fix missing textbox text when anchored inside flying table
It was missing as the shape text range was deleted twice, as
DelFlyInRange() thought both the fly and the draw frame format own its
contents range, while only the fly one does (when called by
SwDoc::MakeFlyAndMove(), called by SwXText::convertToTextFrame()).
Thanks Red Hat for the pizza!
(cherry picked from commit 9d9e5b40c1a6d91323564e60b25ccf04df86db4b)
Conflicts:
sw/qa/extras/uiwriter/uiwriter.cxx
Change-Id: I26e23550df085511e0e87f593f1a461057413d0e
Reviewed-on: https://gerrit.libreoffice.org/28776
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r-- | sw/qa/extras/uiwriter/data/tdf78727.docx | bin | 0 -> 15004 bytes | |||
-rw-r--r-- | sw/qa/extras/uiwriter/uiwriter.cxx | 12 | ||||
-rw-r--r-- | sw/source/core/doc/docedt.cxx | 3 |
3 files changed, 14 insertions, 1 deletions
diff --git a/sw/qa/extras/uiwriter/data/tdf78727.docx b/sw/qa/extras/uiwriter/data/tdf78727.docx Binary files differnew file mode 100644 index 000000000000..a8787d49cc42 --- /dev/null +++ b/sw/qa/extras/uiwriter/data/tdf78727.docx diff --git a/sw/qa/extras/uiwriter/uiwriter.cxx b/sw/qa/extras/uiwriter/uiwriter.cxx index 57d53fc8f4d0..5dcb81eed875 100644 --- a/sw/qa/extras/uiwriter/uiwriter.cxx +++ b/sw/qa/extras/uiwriter/uiwriter.cxx @@ -199,6 +199,7 @@ public: void testTdf99004(); void testTdf84695(); void testTdf84695NormalChar(); + void testTdf78727(); CPPUNIT_TEST_SUITE(SwUiWriterTest); CPPUNIT_TEST(testReplaceForward); @@ -300,6 +301,7 @@ public: CPPUNIT_TEST(testTdf99004); CPPUNIT_TEST(testTdf84695); CPPUNIT_TEST(testTdf84695NormalChar); + CPPUNIT_TEST(testTdf78727); CPPUNIT_TEST_SUITE_END(); private: @@ -3704,6 +3706,16 @@ void SwUiWriterTest::testTdf84695NormalChar() CPPUNIT_ASSERT_EQUAL(OUString("a"), xShape->getString()); } +void SwUiWriterTest::testTdf78727() +{ + SwDoc* pDoc = createDoc("tdf78727.docx"); + SdrPage* pPage = pDoc->getIDocumentDrawModelAccess().GetDrawModel()->GetPage(0); + // This was 1: make sure we don't loose the TextBox anchored inside the + // table that is moved inside a text frame. + std::set<const SwFrameFormat*> aSet; + CPPUNIT_ASSERT(SwTextBoxHelper::getCount(pPage, aSet) > 1); +} + CPPUNIT_TEST_SUITE_REGISTRATION(SwUiWriterTest); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sw/source/core/doc/docedt.cxx b/sw/source/core/doc/docedt.cxx index 0f55ea6b3724..a62ed4cb2c54 100644 --- a/sw/source/core/doc/docedt.cxx +++ b/sw/source/core/doc/docedt.cxx @@ -212,7 +212,8 @@ void DelFlyInRange( const SwNodeIndex& rMkNdIdx, { // If the Fly is deleted, all Flys in its content have to be deleted too. const SwFormatContent &rContent = pFormat->GetContent(); - if( rContent.GetContentIdx() ) + // But only fly formats own their content, not draw formats. + if (rContent.GetContentIdx() && pFormat->Which() == RES_FLYFRMFMT) { DelFlyInRange( *rContent.GetContentIdx(), SwNodeIndex( *rContent.GetContentIdx()-> |