diff options
-rw-r--r-- | sw/qa/extras/layout/data/tdf123898.odt | bin | 0 -> 9642 bytes | |||
-rw-r--r-- | sw/qa/extras/layout/layout.cxx | 14 | ||||
-rw-r--r-- | sw/source/core/txtnode/txtedt.cxx | 56 |
3 files changed, 17 insertions, 53 deletions
diff --git a/sw/qa/extras/layout/data/tdf123898.odt b/sw/qa/extras/layout/data/tdf123898.odt Binary files differnew file mode 100644 index 000000000000..31800aadb18b --- /dev/null +++ b/sw/qa/extras/layout/data/tdf123898.odt diff --git a/sw/qa/extras/layout/layout.cxx b/sw/qa/extras/layout/layout.cxx index a0cc3dea15a5..8fa2b9b821bc 100644 --- a/sw/qa/extras/layout/layout.cxx +++ b/sw/qa/extras/layout/layout.cxx @@ -71,6 +71,7 @@ public: void testTdf115094(); void testTdf122607(); void testBtlrCell(); + void testTdf123898(); CPPUNIT_TEST_SUITE(SwLayoutWriter); CPPUNIT_TEST(testRedlineFootnotes); @@ -112,6 +113,7 @@ public: CPPUNIT_TEST(testTdf115094); CPPUNIT_TEST(testTdf122607); CPPUNIT_TEST(testBtlrCell); + CPPUNIT_TEST(testTdf123898); CPPUNIT_TEST_SUITE_END(); private: @@ -2895,6 +2897,18 @@ void SwLayoutWriter::testBtlrCell() #endif } +void SwLayoutWriter::testTdf123898() +{ + createDoc("tdf123898.odt"); + + // Make sure spellchecker has done its job already + Scheduler::ProcessEventsToIdle(); + + xmlDocPtr pXmlDoc = parseLayoutDump(); + // Make sure that the arrow on the left is not there (there are 43 children if it's there) + assertXPathChildren(pXmlDoc, "/root/page/body/txt/anchored/fly/txt", 42); +} + CPPUNIT_TEST_SUITE_REGISTRATION(SwLayoutWriter); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sw/source/core/txtnode/txtedt.cxx b/sw/source/core/txtnode/txtedt.cxx index f7c307c4c18f..39ca6f1a85a1 100644 --- a/sw/source/core/txtnode/txtedt.cxx +++ b/sw/source/core/txtnode/txtedt.cxx @@ -221,71 +221,21 @@ static SwRect lcl_CalculateRepaintRect( SwTextFrame & rTextFrame, SwTextNode & rNode, sal_Int32 const nChgStart, sal_Int32 const nChgEnd) { - SwRect aRect; - TextFrameIndex const iChgStart(rTextFrame.MapModelToView(&rNode, nChgStart)); TextFrameIndex const iChgEnd(rTextFrame.MapModelToView(&rNode, nChgEnd)); - SwPosition aPos( rNode, nChgEnd ); - SwCursorMoveState aTmpState( MV_NONE ); - aTmpState.m_b2Lines = true; - rTextFrame.GetCharRect( aRect, aPos, &aTmpState ); - - const SwTextFrame *pEndFrame = &rTextFrame; + SwRect aRect = rTextFrame.GetPaintArea(); + SwRect aTmp = rTextFrame.GetPaintArea(); - while( pEndFrame->HasFollow() && - iChgEnd >= pEndFrame->GetFollow()->GetOfst()) - pEndFrame = pEndFrame->GetFollow(); - - // information about end of repaint area - if ( aTmpState.m_p2Lines ) - { - Sw2LinesPos* pEnd2Pos = aTmpState.m_p2Lines.get(); - // we are inside a special portion, take left border - SwRectFnSet aRectFnSet(pEndFrame); - aRectFnSet.SetTop( aRect, aRectFnSet.GetTop(pEnd2Pos->aLine) ); - if ( pEndFrame->IsRightToLeft() ) - aRectFnSet.SetLeft( aRect, aRectFnSet.GetLeft(pEnd2Pos->aPortion) ); - else - aRectFnSet.SetLeft( aRect, aRectFnSet.GetRight(pEnd2Pos->aPortion) ); - aRectFnSet.SetWidth( aRect, 1 ); - aRectFnSet.SetHeight( aRect, aRectFnSet.GetHeight(pEnd2Pos->aLine) ); - aTmpState.m_p2Lines.reset(); - } - - aTmpState.m_p2Lines = nullptr; - SwRect aTmp; - aPos = SwPosition( rNode, nChgStart ); - rTextFrame.GetCharRect( aTmp, aPos, &aTmpState ); - - // i63141: GetCharRect(..) could cause a formatting, - // during the formatting SwTextFrames could be joined, deleted, created... - // => we have to reinit pStartFrame and pEndFrame after the formatting const SwTextFrame* pStartFrame = &rTextFrame; while( pStartFrame->HasFollow() && iChgStart >= pStartFrame->GetFollow()->GetOfst()) pStartFrame = pStartFrame->GetFollow(); - pEndFrame = pStartFrame; + const SwTextFrame* pEndFrame = pStartFrame; while( pEndFrame->HasFollow() && iChgEnd >= pEndFrame->GetFollow()->GetOfst()) pEndFrame = pEndFrame->GetFollow(); - // information about start of repaint area - if ( aTmpState.m_p2Lines ) - { - Sw2LinesPos* pSt2Pos = aTmpState.m_p2Lines.get(); - // we are inside a special portion, take right border - SwRectFnSet aRectFnSet(pStartFrame); - aRectFnSet.SetTop( aTmp, aRectFnSet.GetTop(pSt2Pos->aLine) ); - if ( pStartFrame->IsRightToLeft() ) - aRectFnSet.SetLeft( aTmp, aRectFnSet.GetRight(pSt2Pos->aPortion) ); - else - aRectFnSet.SetLeft( aTmp, aRectFnSet.GetLeft(pSt2Pos->aPortion) ); - aRectFnSet.SetWidth( aTmp, 1 ); - aRectFnSet.SetHeight( aTmp, aRectFnSet.GetHeight(pSt2Pos->aLine) ); - aTmpState.m_p2Lines.reset(); - } - bool bSameFrame = true; if( rTextFrame.HasFollow() ) |