From abd4ffadf30e02284290ea35e8f45d9ffd8eb5ee Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Mon, 15 Oct 2012 12:53:05 +0200 Subject: [PATCH] fdo#52208 DOCX import: don't always ignore cont sect break at the doc end Regression from commit 1fdd61db155cf63d5dd55cc2bfb45af33796e131, continuous section break does make sense at the end of the doc, if the previous type was a non-continuous. Change-Id: I6d82c67e068d8dc3ce1edb1a5fe6ad293afd805d --- sw/qa/extras/ooxmlimport/data/fdo52208.docx | Bin 0 -> 13356 bytes sw/qa/extras/ooxmlimport/ooxmlimport.cxx | 13 +++++++++++++ writerfilter/source/dmapper/DomainMapper.cxx | 12 ++++++++++-- writerfilter/source/dmapper/PropertyMap.hxx | 1 + 4 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 sw/qa/extras/ooxmlimport/data/fdo52208.docx diff --git a/sw/qa/extras/ooxmlimport/data/fdo52208.docx b/sw/qa/extras/ooxmlimport/data/fdo52208.docx new file mode 100644 index 0000000000000000000000000000000000000000..be842ad2acbc1a00d1515d767a96a1aadfb431d4 GIT binary patch literal 13356 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, "LeftMargin")); } +void Test::testFdo52208() +{ + // The problem was that the document had 2 pages instead of 1. + load("fdo52208.docx"); + uno::Reference xModel(mxComponent, uno::UNO_QUERY); + uno::Reference xTextViewCursorSupplier(xModel->getCurrentController(), uno::UNO_QUERY); + uno::Reference xCursor(xTextViewCursorSupplier->getViewCursor(), uno::UNO_QUERY); + xCursor->jumpToLastPage(); + CPPUNIT_ASSERT_EQUAL(sal_Int16(1), xCursor->getPage()); +} + CPPUNIT_TEST_SUITE_REGISTRATION(Test); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index c5a42a9fa36a..089ba5e9255f 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -2392,9 +2392,17 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, PropertyMapPtr rContext, SprmType OSL_ENSURE(pSectionContext, "SectionContext unavailable!"); if(pSectionContext) { - // Ignore continous section break at the end of the document + // Ignore continous section break at the end of the document, if the previous section had the same type as well // It makes the importer loose margin settings with no benefit - if (m_pImpl->GetParaSectpr() || nIntValue != 0) + SectionPropertyMap* pLastContext = m_pImpl->GetLastSectionContext(); + int nPrevBreakType = 0; + bool bHasPrevSection = false; + if (pLastContext) + { + bHasPrevSection = true; + nPrevBreakType = pLastContext->GetBreakType(); + } + if (m_pImpl->GetParaSectpr() || nIntValue != 0 || (bHasPrevSection && nPrevBreakType != nIntValue)) pSectionContext->SetBreakType( nIntValue ); } break; diff --git a/writerfilter/source/dmapper/PropertyMap.hxx b/writerfilter/source/dmapper/PropertyMap.hxx index d19988a58537..6d622800bf8d 100644 --- a/writerfilter/source/dmapper/PropertyMap.hxx +++ b/writerfilter/source/dmapper/PropertyMap.hxx @@ -235,6 +235,7 @@ public: void SetPageNoRestart( bool bSet ) { m_bPageNoRestart = bSet; } void SetPageNumber( sal_Int32 nSet ) { m_nPageNumber = nSet; } void SetBreakType( sal_Int32 nSet ) { m_nBreakType = nSet; } + sal_Int32 GetBreakType( ) { return m_nBreakType; } void SetPaperBin( sal_Int32 nSet ); void SetFirstPaperBin( sal_Int32 nSet );