diff --git a/.gitignore b/.gitignore index e6a2134..bd092f4 100644 --- a/.gitignore +++ b/.gitignore @@ -84,3 +84,6 @@ /libreoffice-4.2.2.1.tar.xz /libreoffice-help-4.2.2.1.tar.xz /libreoffice-translations-4.2.2.1.tar.xz +/libreoffice-4.2.3.1.tar.xz +/libreoffice-help-4.2.3.1.tar.xz +/libreoffice-translations-4.2.3.1.tar.xz diff --git a/0001-RTF-import-fix-spurious-page-breaks-at-doc-end-relat.patch b/0001-RTF-import-fix-spurious-page-breaks-at-doc-end-relat.patch deleted file mode 100644 index 655d7c0..0000000 --- a/0001-RTF-import-fix-spurious-page-breaks-at-doc-end-relat.patch +++ /dev/null @@ -1,357 +0,0 @@ -From 153993292cc9f11fed8fcba8de45b0c46d5e0ef2 Mon Sep 17 00:00:00 2001 -From: Michael Stahl -Date: Thu, 27 Feb 2014 23:48:59 +0100 -Subject: [PATCH] RTF import: fix spurious page breaks at doc end (related: - rhbz#1065629) - -When a document ends with \sect it's possible that a spurious page break -is created. In fact the spurious page break is always created by the -RTF importer, sometimes it is deleted again by -DomainMapper_Impl::RemoveLastParagraph() and sometimes not. - -It is created because on the final \sect RTFDocumentImpl::sectBreak() -still calls startSectionGroup(), and the popState() for the \rtf1 group -then calls sectBreak() another time. - -To prevent this, do not call startSectionGroup() from sectBreak() but -instead from setNeedSect(), and ensure that it is called as soon as -anything after \sect is read. - -One unit test fails because the \page is not handled properly: the -conversion to \skbpage \sect \skbnone is not correct, because the \skb* -keywords are an exception and affect the \sect that precedes them, not -the following one; sending the \skbpage later unfortunately requires -additional cleanup later. - -(cherry picked from commit e3f254ab8211fbab7541cde2100a35c875b0c240) - -RTF import: add unit test for page break in continuous section - -(cherry picked from commit f03218f43e8c25c2e136d364455f3cdaf95362b6) - -RTF import: fix paragraphs in header/footer - -(cherry picked from commit 74b3f4f00766d199df3b017d056cf7a00ae52988) - -Change-Id: I3c1a3bceb2c8b75bbecdc748170562451ce5f5c3 -Reviewed-on: https://gerrit.libreoffice.org/8439 -Reviewed-by: Miklos Vajna -Tested-by: Miklos Vajna ---- - .../rtfimport/data/cont-section-pagebreak.rtf | 16 +++++ - sw/qa/extras/rtfimport/data/footer-para.rtf | 5 ++ - sw/qa/extras/rtfimport/rtfimport.cxx | 42 +++++++++++++ - writerfilter/source/rtftok/rtfdocumentimpl.cxx | 71 +++++++++++++++------- - writerfilter/source/rtftok/rtfdocumentimpl.hxx | 3 + - 5 files changed, 116 insertions(+), 21 deletions(-) - create mode 100644 sw/qa/extras/rtfimport/data/cont-section-pagebreak.rtf - create mode 100644 sw/qa/extras/rtfimport/data/footer-para.rtf - -diff --git a/sw/qa/extras/rtfimport/data/cont-section-pagebreak.rtf b/sw/qa/extras/rtfimport/data/cont-section-pagebreak.rtf -new file mode 100644 -index 0000000..888dc2d ---- /dev/null -+++ b/sw/qa/extras/rtfimport/data/cont-section-pagebreak.rtf -@@ -0,0 +1,16 @@ -+{\rtf1 \ansi -+\fet0 \ftnbj \paperw11905 \paperh16837 \margt2267 \margb1133 \margl1417 \margr1417 -+ -+\sectd -+\sbknone -+FIRST -+\par -+\sect -+SECOND -+\par -+\page -+\sect -+THIRD -+\par -+\sect -+} -diff --git a/sw/qa/extras/rtfimport/data/footer-para.rtf b/sw/qa/extras/rtfimport/data/footer-para.rtf -new file mode 100644 -index 0000000..28863b2 ---- /dev/null -+++ b/sw/qa/extras/rtfimport/data/footer-para.rtf -@@ -0,0 +1,5 @@ -+{\rtf1\fbidis\ansi\ansicpg0\uc0\deff0\deflang0\deflangfe0\paperw11905\paperh16838\margl1200\margr1200\margt1200\margb1200\headery600\footery600\viewscale100\viewzk0\titlepg -+{\fonttbl{\f0\fnil Arial;}} -+{\footerf -+\pard\s0\fi0\li0\qc\ri0\sb0\sa0\itap0 \plain \f0\fs18 All Rights Reserved.\par} -+\pard\par} -diff --git a/sw/qa/extras/rtfimport/rtfimport.cxx b/sw/qa/extras/rtfimport/rtfimport.cxx -index 9504027..73bf749 100644 ---- a/sw/qa/extras/rtfimport/rtfimport.cxx -+++ b/sw/qa/extras/rtfimport/rtfimport.cxx -@@ -17,6 +17,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -1413,6 +1414,47 @@ DECLARE_RTFIMPORT_TEST(testNestedTable, "rhbz1065629.rtf") - getProperty(xCell, "RightBorder")); - CPPUNIT_ASSERT_EQUAL(static_cast(0xffffffff), - getProperty(xCell, "BackColor")); -+ -+ // \sect at the end resulted in spurious page break -+ CPPUNIT_ASSERT_EQUAL(1, getPages()); -+} -+ -+DECLARE_RTFIMPORT_TEST(testContSectionPageBreak, "cont-section-pagebreak.rtf") -+{ -+ uno::Reference xParaSecond = getParagraph(2); -+ CPPUNIT_ASSERT_EQUAL(OUString("SECOND"), xParaSecond->getString()); -+ CPPUNIT_ASSERT_EQUAL(style::BreakType_NONE, -+ getProperty(xParaSecond, "BreakType")); -+ CPPUNIT_ASSERT_EQUAL(OUString(""), -+ getProperty(xParaSecond, "PageDescName")); -+ // actually not sure how many paragraph there should be between -+ // SECOND and THIRD - important is that the page break is on there -+ uno::Reference xParaNext = getParagraph(3); -+ CPPUNIT_ASSERT_EQUAL(OUString(""), xParaNext->getString()); -+ CPPUNIT_ASSERT_EQUAL(OUString("Converted1"), -+ getProperty(xParaNext, "PageDescName")); -+ uno::Reference xParaThird = getParagraph(4); -+ CPPUNIT_ASSERT_EQUAL(OUString("THIRD"), xParaThird->getString()); -+ CPPUNIT_ASSERT_EQUAL(style::BreakType_NONE, -+ getProperty(xParaThird, "BreakType")); -+ CPPUNIT_ASSERT_EQUAL(OUString(""), -+ getProperty(xParaThird, "PageDescName")); -+ -+ CPPUNIT_ASSERT_EQUAL(2, getPages()); -+} -+ -+DECLARE_RTFIMPORT_TEST(testFooterPara, "footer-para.rtf") -+{ -+ // check that paragraph properties in footer are imported -+ uno::Reference xFooterText = -+ getProperty< uno::Reference >( -+ getStyles("PageStyles")->getByName("First Page"), "FooterText"); -+ uno::Reference xParagraph = -+ getParagraphOrTable(1, xFooterText); -+ CPPUNIT_ASSERT_EQUAL(OUString("All Rights Reserved."), -+ uno::Reference(xParagraph, uno::UNO_QUERY)->getString()); -+ CPPUNIT_ASSERT_EQUAL((sal_Int16)style::ParagraphAdjust_CENTER, -+ getProperty(xParagraph, "ParaAdjust")); - } - - DECLARE_RTFIMPORT_TEST(testCp1000016, "hello.rtf") -diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx -index d5e7843..0dc20b0 100644 ---- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx -+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx -@@ -279,7 +279,8 @@ RTFDocumentImpl::RTFDocumentImpl(uno::Reference const& x - m_aHexBuffer(), - m_bMathNor(false), - m_bIgnoreNextContSectBreak(false), -- m_bNeedSect(true), -+ m_nResetBreakOnSectBreak(static_cast(-1)), -+ m_bNeedSect(false), // done by checkFirstRun - m_bWasInFrame(false), - m_bHadPicture(false), - m_bHadSect(false), -@@ -392,16 +393,15 @@ void RTFDocumentImpl::checkFirstRun() - writerfilter::Reference::Pointer_t const pTable(new RTFReferenceTable(aSettingsTableEntries)); - Mapper().table(NS_ooxml::LN_settings_settings, pTable); - // start initial paragraph -- if (!m_pSuperstream) -- Mapper().startSectionGroup(); -- Mapper().startParagraphGroup(); -+ m_bFirstRun = false; -+ assert(!m_bNeedSect); -+ setNeedSect(); // first call that succeeds - - // set the requested default font, if there are none - RTFValue::Pointer_t pFont = m_aDefaultState.aCharacterSprms.find(NS_sprm::LN_CRgFtc0); - RTFValue::Pointer_t pCurrentFont = m_aStates.top().aCharacterSprms.find(NS_sprm::LN_CRgFtc0); - if (pFont && !pCurrentFont) - dispatchValue(RTF_F, pFont->getInt()); -- m_bFirstRun = false; - } - } - -@@ -417,7 +417,22 @@ void RTFDocumentImpl::setNeedPar(bool bNeedPar) - - void RTFDocumentImpl::setNeedSect(bool bNeedSect) - { -- m_bNeedSect = bNeedSect; -+ // ignore setting before checkFirstRun - every keyword calls setNeedSect! -+ if (!m_bNeedSect && bNeedSect && !m_bFirstRun) -+ { -+ if (!m_pSuperstream) // no sections in header/footer! -+ { -+ Mapper().startSectionGroup(); -+ } -+ // set flag in substream too - otherwise multiple startParagraphGroup -+ m_bNeedSect = bNeedSect; -+ Mapper().startParagraphGroup(); -+ setNeedPar(true); -+ } -+ else if (m_bNeedSect && !bNeedSect) -+ { -+ m_bNeedSect = bNeedSect; -+ } - } - - writerfilter::Reference::Pointer_t RTFDocumentImpl::getProperties(RTFSprms& rAttributes, RTFSprms& rSprms) -@@ -542,6 +557,7 @@ void RTFDocumentImpl::sectBreak(bool bFinal = false) - { - dispatchFlag(RTF_PARD); - dispatchSymbol(RTF_PAR); -+ m_bNeedSect = bNeedSect; - } - while (!m_nHeaderFooterPositions.empty()) - { -@@ -572,12 +588,7 @@ void RTFDocumentImpl::sectBreak(bool bFinal = false) - Mapper().endParagraphGroup(); - if (!m_pSuperstream) - Mapper().endSectionGroup(); -- if (!bFinal) -- { -- Mapper().startSectionGroup(); -- Mapper().startParagraphGroup(); -- } -- m_bNeedPar = true; -+ m_bNeedPar = false; - m_bNeedSect = false; - } - -@@ -1345,8 +1356,8 @@ void RTFDocumentImpl::replayBuffer(RTFBuffer_t& rBuffer, - - int RTFDocumentImpl::dispatchDestination(RTFKeyword nKeyword) - { -- checkUnicode(/*bUnicode =*/ true, /*bHex =*/ true); - setNeedSect(); -+ checkUnicode(/*bUnicode =*/ true, /*bHex =*/ true); - RTFSkipDestination aSkip(*this); - switch (nKeyword) - { -@@ -1867,11 +1878,11 @@ int RTFDocumentImpl::dispatchDestination(RTFKeyword nKeyword) - - int RTFDocumentImpl::dispatchSymbol(RTFKeyword nKeyword) - { -+ setNeedSect(); - if (nKeyword != RTF_HEXCHAR) - checkUnicode(/*bUnicode =*/ true, /*bHex =*/ true); - else - checkUnicode(/*bUnicode =*/ true, /*bHex =*/ false); -- setNeedSect(); - RTFSkipDestination aSkip(*this); - - if (RTF_LINE == nKeyword) -@@ -1944,7 +1955,15 @@ int RTFDocumentImpl::dispatchSymbol(RTFKeyword nKeyword) - if (m_bIgnoreNextContSectBreak) - m_bIgnoreNextContSectBreak = false; - else -+ { - sectBreak(); -+ if (m_nResetBreakOnSectBreak != -1) -+ { // this should run on _second_ \sect after \page -+ dispatchSymbol(m_nResetBreakOnSectBreak); // lazy reset -+ m_nResetBreakOnSectBreak = static_cast(-1); -+ m_bNeedSect = false; // dispatchSymbol set it -+ } -+ } - } - break; - case RTF_NOBREAK: -@@ -2116,19 +2135,24 @@ int RTFDocumentImpl::dispatchSymbol(RTFKeyword nKeyword) - RTFValue::Pointer_t pBreak = m_aStates.top().aSectionSprms.find(NS_sprm::LN_SBkc); - // Unless we're on a title page. - RTFValue::Pointer_t pTitlePg = m_aStates.top().aSectionSprms.find(NS_ooxml::LN_EG_SectPrContents_titlePg); -- if ((pBreak.get() && !pBreak->getInt()) && !(pTitlePg.get() && pTitlePg->getInt())) -+ if (((pBreak.get() && !pBreak->getInt()) -+ || m_nResetBreakOnSectBreak == RTF_SBKNONE) -+ && !(pTitlePg.get() && pTitlePg->getInt())) - { - if (m_bWasInFrame) - { - dispatchSymbol(RTF_PAR); - m_bWasInFrame = false; - } -- dispatchFlag(RTF_SBKPAGE); - sectBreak(); -- dispatchFlag(RTF_SBKNONE); -+ // note: this will not affect the following section break -+ // but the one just pushed -+ dispatchFlag(RTF_SBKPAGE); - if (m_bNeedPar) - dispatchSymbol(RTF_PAR); - m_bIgnoreNextContSectBreak = true; -+ // arrange to clean up the syntetic RTF_SBKPAGE -+ m_nResetBreakOnSectBreak = RTF_SBKNONE; - } - else - { -@@ -2162,8 +2186,8 @@ int RTFDocumentImpl::dispatchSymbol(RTFKeyword nKeyword) - - int RTFDocumentImpl::dispatchFlag(RTFKeyword nKeyword) - { -- checkUnicode(/*bUnicode =*/ true, /*bHex =*/ true); - setNeedSect(); -+ checkUnicode(/*bUnicode =*/ true, /*bHex =*/ true); - RTFSkipDestination aSkip(*this); - int nParam = -1; - int nSprm = -1; -@@ -2295,6 +2319,10 @@ int RTFDocumentImpl::dispatchFlag(RTFKeyword nKeyword) - } - if (nParam >= 0) - { -+ if (m_nResetBreakOnSectBreak != -1) -+ { -+ m_nResetBreakOnSectBreak = nKeyword; -+ } - RTFValue::Pointer_t pValue(new RTFValue(nParam)); - m_aStates.top().aSectionSprms.set(NS_sprm::LN_SBkc, pValue); - return 0; -@@ -2902,8 +2930,8 @@ int RTFDocumentImpl::dispatchFlag(RTFKeyword nKeyword) - - int RTFDocumentImpl::dispatchValue(RTFKeyword nKeyword, int nParam) - { -- checkUnicode(/*bUnicode =*/ nKeyword != RTF_U, /*bHex =*/ true); - setNeedSect(); -+ checkUnicode(/*bUnicode =*/ nKeyword != RTF_U, /*bHex =*/ true); - RTFSkipDestination aSkip(*this); - int nSprm = 0; - RTFValue::Pointer_t pIntValue(new RTFValue(nParam)); -@@ -3869,8 +3897,8 @@ int RTFDocumentImpl::dispatchValue(RTFKeyword nKeyword, int nParam) - - int RTFDocumentImpl::dispatchToggle(RTFKeyword nKeyword, bool bParam, int nParam) - { -- checkUnicode(/*bUnicode =*/ true, /*bHex =*/ true); - setNeedSect(); -+ checkUnicode(/*bUnicode =*/ true, /*bHex =*/ true); - RTFSkipDestination aSkip(*this); - int nSprm = -1; - RTFValue::Pointer_t pBoolValue(new RTFValue(!bParam || nParam != 0)); -@@ -4721,7 +4749,8 @@ int RTFDocumentImpl::popState() - // not in case of other substreams, like headers. - if (m_bNeedCr && !(m_nStreamType == NS_rtf::LN_footnote || m_nStreamType == NS_rtf::LN_endnote)) - dispatchSymbol(RTF_PAR); -- sectBreak(true); -+ if (m_bNeedSect) // may be set by dispatchSymbol above! -+ sectBreak(true); - } - - m_aStates.pop(); -diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.hxx b/writerfilter/source/rtftok/rtfdocumentimpl.hxx -index 932ec46..fa1f3d6 100644 ---- a/writerfilter/source/rtftok/rtfdocumentimpl.hxx -+++ b/writerfilter/source/rtftok/rtfdocumentimpl.hxx -@@ -524,6 +524,9 @@ namespace writerfilter { - bool m_bMathNor; - /// If the next continous section break should be ignored. - bool m_bIgnoreNextContSectBreak; -+ /// clean up a synthetic page break, see RTF_PAGE -+ /// if inactive value is -1, otherwise the RTF_SKB* to restore -+ RTFKeyword m_nResetBreakOnSectBreak; - /// If a section break is needed before the end of the doc (false right after a section break). - bool m_bNeedSect; - /// If aFrame.inFrame() was true in the previous state. --- -1.8.3.1 - diff --git a/0001-Resolves-rhbz-1007697-Update-on-a-Window-triggering-.patch b/0001-Resolves-rhbz-1007697-Update-on-a-Window-triggering-.patch deleted file mode 100644 index 929e1a4..0000000 --- a/0001-Resolves-rhbz-1007697-Update-on-a-Window-triggering-.patch +++ /dev/null @@ -1,168 +0,0 @@ -From dfd483bf9ab7fad58882fb2abff5cbf7f79a4e37 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= -Date: Fri, 28 Feb 2014 16:55:03 +0000 -Subject: [PATCH] Resolves: rhbz#1007697 Update on a Window triggering delete - on window -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Reviewed-on: https://gerrit.libreoffice.org/8396 -Reviewed-by: Caolán McNamara -Tested-by: Caolán McNamara -(cherry picked from commit 1ec2880679d88c89901ce00fe30dd78e584f6960) - -Conflicts: - svx/source/svdraw/sdrpaintwindow.cxx - vcl/source/window/window.cxx - -Change-Id: Ic6374ce45e3a3ba97217ae77e91f9143f46e277b ---- - svx/source/svdraw/sdrpaintwindow.cxx | 96 +++++++++++++++++++++++++++++------- - vcl/source/window/window.cxx | 5 ++ - 2 files changed, 83 insertions(+), 18 deletions(-) - -diff --git a/svx/source/svdraw/sdrpaintwindow.cxx b/svx/source/svdraw/sdrpaintwindow.cxx -index 6abacc5..81dff0b 100644 ---- a/svx/source/svdraw/sdrpaintwindow.cxx -+++ b/svx/source/svdraw/sdrpaintwindow.cxx -@@ -22,35 +22,95 @@ - #include - #include - #include -+#include -+#include -+ -+//rhbz#1007697 do this in two loops, one to collect the candidates -+//and another to update them because updating a candidate can -+//trigger the candidate to be deleted, so asking for its -+//sibling after that is going to fail hard -+class CandidateMgr -+{ -+ std::vector m_aCandidates; -+ std::set m_aDeletedCandidates; -+ DECL_LINK(WindowEventListener, VclSimpleEvent*); -+public: -+ void PaintTransparentChildren(Window & rWindow, Rectangle const& rPixelRect); -+ ~CandidateMgr(); -+}; -+ -+IMPL_LINK(CandidateMgr, WindowEventListener, VclSimpleEvent*, pEvent) -+{ -+ VclWindowEvent* pWinEvent = dynamic_cast< VclWindowEvent* >( pEvent ); -+ if (pWinEvent) -+ { -+ Window* pWindow = pWinEvent->GetWindow(); -+ if (pWinEvent->GetId() == VCLEVENT_OBJECT_DYING) -+ { -+ m_aDeletedCandidates.insert(pWindow); -+ } -+ } - -+ return 0; -+} -+ -+CandidateMgr::~CandidateMgr() -+{ -+ for (std::vector::iterator aI = m_aCandidates.begin(); -+ aI != m_aCandidates.end(); ++aI) -+ { -+ Window* pCandidate = *aI; -+ if (m_aDeletedCandidates.find(pCandidate) != m_aDeletedCandidates.end()) -+ continue; -+ pCandidate->RemoveEventListener(LINK(this, CandidateMgr, WindowEventListener)); -+ } -+} - - void PaintTransparentChildren(Window & rWindow, Rectangle const& rPixelRect) - { -- if (rWindow.IsChildTransparentModeEnabled()) -+ if (!rWindow.IsChildTransparentModeEnabled()) -+ return; -+ -+ CandidateMgr aManager; -+ aManager.PaintTransparentChildren(rWindow, rPixelRect); -+} -+ -+void CandidateMgr::PaintTransparentChildren(Window & rWindow, Rectangle const& rPixelRect) -+{ -+ Window * pCandidate = rWindow.GetWindow( WINDOW_FIRSTCHILD ); -+ while (pCandidate) - { -- Window * pCandidate = rWindow.GetWindow( WINDOW_FIRSTCHILD ); -- while (pCandidate) -+ if (pCandidate->IsPaintTransparent()) - { -- if (pCandidate->IsPaintTransparent()) -+ const Rectangle aCandidatePosSizePixel( -+ pCandidate->GetPosPixel(), -+ pCandidate->GetSizePixel()); -+ -+ if (aCandidatePosSizePixel.IsOver(rPixelRect)) - { -- const Rectangle aCandidatePosSizePixel( -- pCandidate->GetPosPixel(), -- pCandidate->GetSizePixel()); -- -- if (aCandidatePosSizePixel.IsOver(rPixelRect)) -- { -- pCandidate->Invalidate( -- INVALIDATE_NOTRANSPARENT|INVALIDATE_CHILDREN ); -- // important: actually paint the child here! -- pCandidate->Update(); -- } -+ m_aCandidates.push_back(pCandidate); -+ pCandidate->AddEventListener(LINK(this, CandidateMgr, WindowEventListener)); - } -- pCandidate = pCandidate->GetWindow( WINDOW_NEXT ); - } -+ pCandidate = pCandidate->GetWindow( WINDOW_NEXT ); - } --} - --//////////////////////////////////////////////////////////////////////////////////////////////////// -+ for (std::vector::iterator aI = m_aCandidates.begin(); -+ aI != m_aCandidates.end(); ++aI) -+ { -+ pCandidate = *aI; -+ if (m_aDeletedCandidates.find(pCandidate) != m_aDeletedCandidates.end()) -+ continue; -+ //rhbz#1007697 this can cause the window itself to be -+ //deleted. So we are listening to see if that happens -+ //and if so, then skip the update -+ pCandidate->Invalidate(INVALIDATE_NOTRANSPARENT|INVALIDATE_CHILDREN); -+ // important: actually paint the child here! -+ if (m_aDeletedCandidates.find(pCandidate) != m_aDeletedCandidates.end()) -+ continue; -+ pCandidate->Update(); -+ } -+} - - SdrPreRenderDevice::SdrPreRenderDevice(OutputDevice& rOriginal) - : mrOutputDevice(rOriginal) -diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx -index 1ef62c1..60a14f1 100644 ---- a/vcl/source/window/window.cxx -+++ b/vcl/source/window/window.cxx -@@ -7561,6 +7561,8 @@ void Window::Update() - // if there is something to paint, trigger a Paint - if ( pUpdateWindow->mpWindowImpl->mnPaintFlags & (IMPL_PAINT_PAINT | IMPL_PAINT_PAINTCHILDREN) ) - { -+ ImplDelData aDogTag(this); -+ - // trigger an update also for system windows on top of us, - // otherwise holes would remain - Window* pUpdateOverlapWindow = ImplGetFirstOverlapWindow()->mpWindowImpl->mpFirstOverlap; -@@ -7571,6 +7573,9 @@ void Window::Update() - } - - pUpdateWindow->ImplCallPaint( NULL, pUpdateWindow->mpWindowImpl->mnPaintFlags ); -+ -+ if (aDogTag.IsDead()) -+ return; - bFlush = sal_True; - } - --- -1.8.5.3 - diff --git a/0001-Resolves-rhbz-1038189-refresh-printer-list-when-prin.patch b/0001-Resolves-rhbz-1038189-refresh-printer-list-when-prin.patch deleted file mode 100644 index 318c888..0000000 --- a/0001-Resolves-rhbz-1038189-refresh-printer-list-when-prin.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 02efbed152a3a9e364cdb73628af0aed0f5d6f7a Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= -Date: Wed, 4 Dec 2013 16:48:08 +0000 -Subject: [PATCH] Resolves: rhbz#1038189 refresh printer list when print dialog - launched - -which is the the same thing the printer settings dialog does - -Change-Id: I36fb9f057b66faa8c9fce5a9934ed2fb70786363 ---- - vcl/source/window/printdlg.cxx | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/vcl/source/window/printdlg.cxx b/vcl/source/window/printdlg.cxx -index b8cb188..21941ca 100644 ---- a/vcl/source/window/printdlg.cxx -+++ b/vcl/source/window/printdlg.cxx -@@ -602,6 +602,8 @@ PrintDialog::PrintDialog( Window* i_pParent, const boost::shared_ptrCheck( maPController->getReversePrint() ); - -+ Printer::updatePrinters(); -+ - // fill printer listbox - const std::vector< OUString >& rQueues( Printer::GetPrinterQueues() ); - for( std::vector< OUString >::const_iterator it = rQueues.begin(); --- -1.8.3.1 - diff --git a/0001-fdo-74787-rhbz-1072553-Fix-deselection-problems-of-t.patch b/0001-fdo-74787-rhbz-1072553-Fix-deselection-problems-of-t.patch deleted file mode 100644 index d582773..0000000 --- a/0001-fdo-74787-rhbz-1072553-Fix-deselection-problems-of-t.patch +++ /dev/null @@ -1,72 +0,0 @@ -From b071644756772d0b6930ac2e6d27237b67e7febc Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zolnai=20Tam=C3=A1s?= -Date: Fri, 7 Mar 2014 10:57:52 +0100 -Subject: [PATCH 1/2] fdo#74787, rhbz#1072553: Fix deselection problems of - template view - -deselectItems() were added to make recent docs -view work, but it is unneccessary to -affect template view too. - -(regression from 0314034d8b23d5b69399cfcdf6b2f2add73f9f47) - -Conflicts: - sfx2/source/control/recentdocsview.cxx - -Change-Id: I0c805774321939991e308e9c8c669604e81dbad5 -Reviewed-on: https://gerrit.libreoffice.org/8490 -Tested-by: Michael Stahl -Reviewed-by: Michael Stahl ---- - include/sfx2/recentdocsview.hxx | 2 ++ - sfx2/source/control/recentdocsview.cxx | 7 +++++++ - sfx2/source/control/thumbnailview.cxx | 2 -- - 3 files changed, 9 insertions(+), 2 deletions(-) - -diff --git a/include/sfx2/recentdocsview.hxx b/include/sfx2/recentdocsview.hxx -index 1706935..d9ad72d 100644 ---- a/include/sfx2/recentdocsview.hxx -+++ b/include/sfx2/recentdocsview.hxx -@@ -66,6 +66,8 @@ protected: - void OpenItem( const ThumbnailViewItem *pItem ); - virtual void Paint( const Rectangle& rRect ); - -+ virtual void LoseFocus(); -+ - bool isAcceptedFile(const OUString &rURL) const; - - long mnItemMaxSize; -diff --git a/sfx2/source/control/recentdocsview.cxx b/sfx2/source/control/recentdocsview.cxx -index e462172..13f7dc3 100644 ---- a/sfx2/source/control/recentdocsview.cxx -+++ b/sfx2/source/control/recentdocsview.cxx -@@ -302,6 +302,13 @@ void RecentDocsView::Paint( const Rectangle &aRect ) - ThumbnailView::Paint(aRect); - } - -+void RecentDocsView::LoseFocus() -+{ -+ deselectItems(); -+ -+ ThumbnailView::LoseFocus(); -+} -+ - void RecentDocsView::SetThumbnailSize(long thumbnailSize) - { - mnItemMaxSize = thumbnailSize; -diff --git a/sfx2/source/control/thumbnailview.cxx b/sfx2/source/control/thumbnailview.cxx -index 3c6d094..a4e38a7 100644 ---- a/sfx2/source/control/thumbnailview.cxx -+++ b/sfx2/source/control/thumbnailview.cxx -@@ -918,8 +918,6 @@ void ThumbnailView::GetFocus() - - void ThumbnailView::LoseFocus() - { -- deselectItems(); -- - Control::LoseFocus(); - - // Tell the accessible object that we lost the focus. --- -1.8.3.1 - diff --git a/0001-fdo-75540-setProcessServiceFactory-must-be-called-be.patch b/0001-fdo-75540-setProcessServiceFactory-must-be-called-be.patch deleted file mode 100644 index b4eb34a..0000000 --- a/0001-fdo-75540-setProcessServiceFactory-must-be-called-be.patch +++ /dev/null @@ -1,139 +0,0 @@ -From 34c72f10939d473eb1a098fac1f05647c0232727 Mon Sep 17 00:00:00 2001 -From: Stephan Bergmann -Date: Thu, 27 Feb 2014 13:18:36 +0100 -Subject: [PATCH] fdo#75540 setProcessServiceFactory must be called before - InitVCL -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -...because InitVCL now calls: - -> comphelper::getProcessServiceFactory -> comphelper::getProcessComponentContext -> utl::DefaultFontConfiguration::DefaultFontConfiguration -> rtl::Static::get -> utl::DefaultFontConfiguration::get -> ImplStyleData::SetStandardStyles -> ImplStyleData::ImplStyleData -> boost::make_shared -> StyleSettings::StyleSettings -> ImplAllSettingsData::ImplAllSettingsData -> boost::make_shared -> AllSettings::AllSettings -> Application::InitSettings -> Application::GetSettings -> GtkInstance::AfterAppInit -> InitVCL -> ImplSVMain -> SVMain -> sal_main -> main - -and Application::Main is only called after InitVCL. - -(cherry picked from commit c828e3cc409077a1916911b8abf1d7b8dbb2078a) -Conflicts: - padmin/source/pamain.cxx - -Change-Id: I1126e33f454a4ea35ef295cbd3f48429c473efb4 -Reviewed-on: https://gerrit.libreoffice.org/8380 -Reviewed-by: Caolán McNamara -Tested-by: Caolán McNamara ---- - padmin/source/pamain.cxx | 54 +++++++++++++++++++++++++++--------------------- - 1 file changed, 30 insertions(+), 24 deletions(-) - -diff --git a/padmin/source/pamain.cxx b/padmin/source/pamain.cxx -index bbccadf..b510f99 100644 ---- a/padmin/source/pamain.cxx -+++ b/padmin/source/pamain.cxx -@@ -51,6 +51,11 @@ public: - virtual sal_uInt16 Exception( sal_uInt16 nError ); - - static OUString ReadStringHook( const OUString& ); -+ -+private: -+ virtual void Init() SAL_OVERRIDE; -+ -+ Reference< XComponentContext > xCtx_; - }; - - void vclmain::createApplication() -@@ -84,35 +89,13 @@ int MyApp::Main() - - EnableAutoHelpId(); - -- //------------------------------------------------- -- // create the global service-manager -- //------------------------------------------------- -- Reference< XComponentContext > xCtx; -- Reference< XMultiServiceFactory > xFactory; -- try -- { -- xCtx = defaultBootstrap_InitialComponentContext(); -- xFactory = Reference< XMultiServiceFactory >( xCtx->getServiceManager(), UNO_QUERY ); -- if( xFactory.is() ) -- setProcessServiceFactory( xFactory ); -- } -- catch( const com::sun::star::uno::Exception& ) -- { -- } -- -- if( ! xFactory.is() ) -- { -- fprintf( stderr, "Could not bootstrap UNO, installation must be in disorder. Exiting.\n" ); -- exit( 1 ); -- } -- - // Detect desktop environment - need to do this as early as possible - com::sun::star::uno::setCurrentContext( - new DesktopContext( com::sun::star::uno::getCurrentContext() ) ); - - // Create UCB (for backwards compatibility, in case some code still uses - // plain createInstance w/o args directly to obtain an instance): -- com::sun::star::ucb::UniversalContentBroker::create(xCtx); -+ com::sun::star::ucb::UniversalContentBroker::create(xCtx_); - - /* - * Initialize the Java UNO AccessBridge if accessibility is turned on -@@ -139,7 +122,7 @@ int MyApp::Main() - */ - try - { -- Reference xComp(xCtx, UNO_QUERY_THROW); -+ Reference xComp(xCtx_, UNO_QUERY_THROW); - xComp->dispose(); - } - catch(...) -@@ -149,4 +132,27 @@ int MyApp::Main() - return EXIT_SUCCESS; - } - -+void MyApp::Init() -+{ -+ // create the global service-manager -+ -+ Reference< XMultiServiceFactory > xFactory; -+ try -+ { -+ xCtx_ = defaultBootstrap_InitialComponentContext(); -+ xFactory = Reference< XMultiServiceFactory >( xCtx_->getServiceManager(), UNO_QUERY ); -+ if( xFactory.is() ) -+ setProcessServiceFactory( xFactory ); -+ } -+ catch( const com::sun::star::uno::Exception& ) -+ { -+ } -+ -+ if( ! xFactory.is() ) -+ { -+ fprintf( stderr, "Could not bootstrap UNO, installation must be in disorder. Exiting.\n" ); -+ exit( 1 ); -+ } -+} -+ - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ --- -1.8.5.3 - diff --git a/0001-rhbz-1043551-sw-avoid-division-by-0-in-Text-Grid-pai.patch b/0001-rhbz-1043551-sw-avoid-division-by-0-in-Text-Grid-pai.patch deleted file mode 100644 index 022df90..0000000 --- a/0001-rhbz-1043551-sw-avoid-division-by-0-in-Text-Grid-pai.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 3ef19ef7c5de8db17c693e2db286f79efbd98d8d Mon Sep 17 00:00:00 2001 -From: Michael Stahl -Date: Fri, 7 Mar 2014 15:56:37 +0100 -Subject: [PATCH] rhbz#1043551: sw: avoid division-by-0 in Text Grid painting - code - -Possible to trigger with a document containing: - style:layout-grid-base-height="0cm" - -(cherry picked from commit 71b55cf57460aec3fec948676251448934ba31d1) - -got to love the sal_Int32 as long/int -(cherry picked from commit 18c89ae6ff01f3d555a7cb030eb4572d504e8de7) - -Change-Id: Id3bd1f29157b39e8a577be0b87b86236dbe5a50c ---- - sw/source/core/layout/atrfrm.cxx | 12 ++++++++++++ - 1 file changed, 12 insertions(+) - -diff --git a/sw/source/core/layout/atrfrm.cxx b/sw/source/core/layout/atrfrm.cxx -index b06cea4..3c40518 100644 ---- a/sw/source/core/layout/atrfrm.cxx -+++ b/sw/source/core/layout/atrfrm.cxx -@@ -2262,12 +2262,24 @@ bool SwTextGridItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId ) - bRet = (rVal >>= nTmp); - nTmp = MM100_TO_TWIP( nTmp ); - if( bRet && (nTmp >= 0) && ( nTmp <= USHRT_MAX) ) -+ { -+ // rhbz#1043551 round up to 5pt -- 0 causes divide-by-zero -+ // in layout; 1pt ties the painting code up in knots for -+ // minutes with bazillion lines... -+#define MIN_TEXTGRID_SIZE 100 - if( (nMemberId & ~CONVERT_TWIPS) == MID_GRID_BASEHEIGHT ) -+ { -+ nTmp = std::max(nTmp, MIN_TEXTGRID_SIZE); - SetBaseHeight( (sal_uInt16)nTmp ); -+ } - else if( (nMemberId & ~CONVERT_TWIPS) == MID_GRID_BASEWIDTH ) -+ { -+ nTmp = std::max(nTmp, MIN_TEXTGRID_SIZE); - SetBaseWidth( (sal_uInt16)nTmp ); -+ } - else - SetRubyHeight( (sal_uInt16)nTmp ); -+ } - else - bRet = false; - } --- -1.8.3.1 - diff --git a/0001-rhbz-1072607-hopefully-fix-crash-in-SvxRuler-MouseMo.patch b/0001-rhbz-1072607-hopefully-fix-crash-in-SvxRuler-MouseMo.patch deleted file mode 100644 index 72c7529..0000000 --- a/0001-rhbz-1072607-hopefully-fix-crash-in-SvxRuler-MouseMo.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 58d0ba47f82e264e9b17c0e0d37bc043126d195d Mon Sep 17 00:00:00 2001 -From: Michael Stahl -Date: Thu, 6 Mar 2014 22:25:55 +0100 -Subject: [PATCH] rhbz#1072607: (hopefully) fix crash in SvxRuler::MouseMove() -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Not sure why mpParaItem is 0 here, add a check like in every other -SvxRuler method. - -(regression from 47a77d7dbc427e51421e2df8d59695834cb74980) - -Change-Id: Ic11a4d0c9b6ca217cd59d1d3f6789592996d2c1d -(cherry picked from commit 958616a323b7fe6b42cd642394cd90a9cd82e7f9) -Reviewed-on: https://gerrit.libreoffice.org/8492 -Reviewed-by: Tomaž Vajngerl -Tested-by: Tomaž Vajngerl ---- - svx/source/dialog/svxruler.cxx | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/svx/source/dialog/svxruler.cxx b/svx/source/dialog/svxruler.cxx -index a41d0e0..ca16c17 100644 ---- a/svx/source/dialog/svxruler.cxx -+++ b/svx/source/dialog/svxruler.cxx -@@ -580,6 +580,9 @@ void SvxRuler::MouseMove( const MouseEvent& rMEvt ) - { - case RULER_TYPE_INDENT: - { -+ if (!mpParaItem.get()) -+ break; -+ - long nIndex = aSelection.nAryPos + INDENT_GAP; - - long nIndentValue = 0.0; --- -1.8.3.1 - diff --git a/0001-writerfilter-salvage-a-field-parameter-parsing-train.patch b/0001-writerfilter-salvage-a-field-parameter-parsing-train.patch deleted file mode 100644 index 93e380b..0000000 --- a/0001-writerfilter-salvage-a-field-parameter-parsing-train.patch +++ /dev/null @@ -1,676 +0,0 @@ -From 50945ba67bf6dec66b1ed33011316e0fc9197572 Mon Sep 17 00:00:00 2001 -From: Michael Stahl -Date: Sat, 1 Mar 2014 22:05:51 +0100 -Subject: [PATCH] writerfilter: salvage a field parameter parsing train wreck - -Field parameters get horribly maimed by lcl_ExtractParameter which -clearly has never worked in its 7 years of existence (and looking at the -inanity at the call sites makes one wonder what the author was smoking). - -The format is actually quite annoying, since spaces between parameters -are optional. - -The old RTF filter was at least able to parse "PAGEREF bookmark" fields, -so this fixes such regressions (related: rhbz#1065629). - -(cherry picked from commit 3dc548476c7e88f7a67cc38daf622631a34e34dd) - -Conflicts: - writerfilter/source/dmapper/DomainMapper_Impl.cxx - -Change-Id: I9b2e32c3c7264be0fc1077cb8fb3f1bc5c1955bb -Reviewed-on: https://gerrit.libreoffice.org/8440 -Reviewed-by: Miklos Vajna -Tested-by: Miklos Vajna ---- - writerfilter/CppunitTest_writerfilter_misc.mk | 36 ++++ - writerfilter/Module_writerfilter.mk | 1 + - writerfilter/qa/cppunittests/misc/misc.cxx | 162 ++++++++++++++++ - writerfilter/source/dmapper/DomainMapper_Impl.cxx | 224 +++++++++++++++------- - writerfilter/source/dmapper/DomainMapper_Impl.hxx | 3 +- - 5 files changed, 356 insertions(+), 70 deletions(-) - create mode 100644 writerfilter/CppunitTest_writerfilter_misc.mk - create mode 100644 writerfilter/qa/cppunittests/misc/misc.cxx - -diff --git a/writerfilter/CppunitTest_writerfilter_misc.mk b/writerfilter/CppunitTest_writerfilter_misc.mk -new file mode 100644 -index 0000000..1cdcd80 ---- /dev/null -+++ b/writerfilter/CppunitTest_writerfilter_misc.mk -@@ -0,0 +1,36 @@ -+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- -+# -+# This file is part of the LibreOffice project. -+# -+# This Source Code Form is subject to the terms of the Mozilla Public -+# License, v. 2.0. If a copy of the MPL was not distributed with this -+# file, You can obtain one at http://mozilla.org/MPL/2.0/. -+# -+ -+$(eval $(call gb_CppunitTest_CppunitTest,writerfilter_misc)) -+ -+$(eval $(call gb_CppunitTest_use_api,writerfilter_misc,\ -+ offapi \ -+ udkapi \ -+)) -+ -+$(eval $(call gb_CppunitTest_use_external,writerfilter_misc,boost_headers)) -+ -+$(eval $(call gb_CppunitTest_use_libraries,writerfilter_misc, \ -+ writerfilter \ -+ cppu \ -+ sal \ -+ $(gb_UWINAPI) \ -+)) -+ -+$(eval $(call gb_CppunitTest_set_include,writerfilter_misc, \ -+ $$(INCLUDE) \ -+ -I$(SRCDIR)/writerfilter/inc \ -+)) -+ -+$(eval $(call gb_CppunitTest_add_exception_objects,writerfilter_misc, \ -+ writerfilter/qa/cppunittests/misc/misc \ -+)) -+ -+ -+# vim: set noet sw=4 ts=4: -diff --git a/writerfilter/Module_writerfilter.mk b/writerfilter/Module_writerfilter.mk -index 783b6ca..2fcb9e6 100644 ---- a/writerfilter/Module_writerfilter.mk -+++ b/writerfilter/Module_writerfilter.mk -@@ -16,6 +16,7 @@ $(eval $(call gb_Module_add_targets,writerfilter,\ - - $(eval $(call gb_Module_add_slowcheck_targets,writerfilter,\ - CppunitTest_writerfilter_rtftok \ -+ CppunitTest_writerfilter_misc \ - )) - - # vim: set noet sw=4 ts=4: -diff --git a/writerfilter/qa/cppunittests/misc/misc.cxx b/writerfilter/qa/cppunittests/misc/misc.cxx -new file mode 100644 -index 0000000..f7031b4 ---- /dev/null -+++ b/writerfilter/qa/cppunittests/misc/misc.cxx -@@ -0,0 +1,162 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -+/* -+ * This file is part of the LibreOffice project. -+ * -+ * This Source Code Form is subject to the terms of the Mozilla Public -+ * License, v. 2.0. If a copy of the MPL was not distributed with this -+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. -+ */ -+ -+#include -+#include -+ -+#include -+ -+#include -+#include -+#include -+#include -+ -+#include -+ -+#include -+ -+#include -+ -+ -+using namespace std; -+ -+ -+namespace writerfilter { namespace dmapper { -+ -+SAL_DLLPUBLIC_IMPORT // export just for test -+boost::tuple, vector > -+lcl_SplitFieldCommand(const OUString& rCommand); -+ -+} } -+ -+ -+namespace { -+ -+class WriterfilterMiscTest -+ : public ::CppUnit::TestFixture -+{ -+public: -+ virtual void setUp(); -+ virtual void tearDown(); -+ -+ void testFieldParameters(); -+ -+ CPPUNIT_TEST_SUITE(WriterfilterMiscTest); -+ CPPUNIT_TEST(testFieldParameters); -+ CPPUNIT_TEST_SUITE_END(); -+}; -+ -+void WriterfilterMiscTest::setUp() -+{ -+} -+ -+void WriterfilterMiscTest::tearDown() -+{ -+} -+ -+void WriterfilterMiscTest::testFieldParameters() -+{ -+ using writerfilter::dmapper::lcl_SplitFieldCommand; -+ boost::tuple, vector > result; -+ -+ result = lcl_SplitFieldCommand("PAGEREF last_page"); -+ CPPUNIT_ASSERT_EQUAL(OUString("PAGEREF"), boost::get<0>(result)); -+ CPPUNIT_ASSERT_EQUAL(size_t(1), boost::get<1>(result).size()); -+ CPPUNIT_ASSERT_EQUAL(OUString("last_page"), boost::get<1>(result)[0]); -+ CPPUNIT_ASSERT(boost::get<2>(result).empty()); -+ -+ result = lcl_SplitFieldCommand(" PAGEREF last_page "); -+ CPPUNIT_ASSERT_EQUAL(OUString("PAGEREF"), boost::get<0>(result)); -+ CPPUNIT_ASSERT_EQUAL(size_t(1), boost::get<1>(result).size()); -+ CPPUNIT_ASSERT_EQUAL(OUString("last_page"), boost::get<1>(result)[0]); -+ -+ result = lcl_SplitFieldCommand("pageref last_page"); -+ CPPUNIT_ASSERT(boost::get<2>(result).empty()); -+ CPPUNIT_ASSERT_EQUAL(OUString("PAGEREF"), boost::get<0>(result)); -+ CPPUNIT_ASSERT_EQUAL(size_t(1), boost::get<1>(result).size()); -+ CPPUNIT_ASSERT_EQUAL(OUString("last_page"), boost::get<1>(result)[0]); -+ CPPUNIT_ASSERT(boost::get<2>(result).empty()); -+ -+ result = lcl_SplitFieldCommand("pageref \"last_page\""); -+ CPPUNIT_ASSERT_EQUAL(OUString("PAGEREF"), boost::get<0>(result)); -+ CPPUNIT_ASSERT_EQUAL(size_t(1), boost::get<1>(result).size()); -+ CPPUNIT_ASSERT_EQUAL(OUString("last_page"), boost::get<1>(result)[0]); -+ CPPUNIT_ASSERT(boost::get<2>(result).empty()); -+ -+ result = lcl_SplitFieldCommand("\"PAGEREF\" \"last_page\" \"\" "); -+ CPPUNIT_ASSERT_EQUAL(OUString("PAGEREF"), boost::get<0>(result)); -+ CPPUNIT_ASSERT_EQUAL(size_t(2), boost::get<1>(result).size()); -+ CPPUNIT_ASSERT_EQUAL(OUString("last_page"), boost::get<1>(result)[0]); -+ CPPUNIT_ASSERT_EQUAL(OUString(), boost::get<1>(result)[1]); -+ CPPUNIT_ASSERT(boost::get<2>(result).empty()); -+ -+ result = lcl_SplitFieldCommand("\"PAGEREF\"\"last_page\" "); -+ CPPUNIT_ASSERT_EQUAL(OUString("PAGEREF"), boost::get<0>(result)); -+ CPPUNIT_ASSERT_EQUAL(size_t(1), boost::get<1>(result).size()); -+ CPPUNIT_ASSERT_EQUAL(OUString("last_page"), boost::get<1>(result)[0]); -+ CPPUNIT_ASSERT(boost::get<2>(result).empty()); -+ -+ result = lcl_SplitFieldCommand("PAGEREF\"last_page\" "); -+ CPPUNIT_ASSERT_EQUAL(OUString("PAGEREF"), boost::get<0>(result)); -+ CPPUNIT_ASSERT_EQUAL(size_t(1), boost::get<1>(result).size()); -+ CPPUNIT_ASSERT_EQUAL(OUString("last_page"), boost::get<1>(result)[0]); -+ CPPUNIT_ASSERT(boost::get<2>(result).empty()); -+ -+ result = lcl_SplitFieldCommand("\"PAGEREF\"last_page \"\""); -+ CPPUNIT_ASSERT_EQUAL(OUString("PAGEREF"), boost::get<0>(result)); -+ CPPUNIT_ASSERT_EQUAL(size_t(2), boost::get<1>(result).size()); -+ CPPUNIT_ASSERT_EQUAL(OUString("last_page"), boost::get<1>(result)[0]); -+ CPPUNIT_ASSERT_EQUAL(OUString(), boost::get<1>(result)[1]); -+ CPPUNIT_ASSERT(boost::get<2>(result).empty()); -+ -+ result = lcl_SplitFieldCommand("\"PAGEREF\"last_page \"\""); -+ CPPUNIT_ASSERT_EQUAL(OUString("PAGEREF"), boost::get<0>(result)); -+ CPPUNIT_ASSERT_EQUAL(size_t(2), boost::get<1>(result).size()); -+ CPPUNIT_ASSERT_EQUAL(OUString("last_page"), boost::get<1>(result)[0]); -+ CPPUNIT_ASSERT_EQUAL(OUString(), boost::get<1>(result)[1]); -+ CPPUNIT_ASSERT(boost::get<2>(result).empty()); -+ -+ result = lcl_SplitFieldCommand("pageref \"last\\\\pa\\\"ge\""); -+ CPPUNIT_ASSERT_EQUAL(OUString("PAGEREF"), boost::get<0>(result)); -+ CPPUNIT_ASSERT_EQUAL(size_t(1), boost::get<1>(result).size()); -+ CPPUNIT_ASSERT_EQUAL(OUString("last\\pa\"ge"), boost::get<1>(result)[0]); -+ CPPUNIT_ASSERT(boost::get<2>(result).empty()); -+ -+ result = lcl_SplitFieldCommand("PAGEREF\"last_page\"\\*"); -+ CPPUNIT_ASSERT_EQUAL(OUString("PAGEREF"), boost::get<0>(result)); -+ CPPUNIT_ASSERT_EQUAL(size_t(1), boost::get<1>(result).size()); -+ CPPUNIT_ASSERT_EQUAL(OUString("last_page"), boost::get<1>(result)[0]); -+ CPPUNIT_ASSERT_EQUAL(size_t(1), boost::get<2>(result).size()); -+ CPPUNIT_ASSERT_EQUAL(OUString("\\*"), boost::get<2>(result)[0]); -+ -+ result = lcl_SplitFieldCommand("PAGEREF last_page \\b foobar "); -+ CPPUNIT_ASSERT_EQUAL(OUString("PAGEREF"), boost::get<0>(result)); -+ CPPUNIT_ASSERT_EQUAL(size_t(1), boost::get<1>(result).size()); -+ CPPUNIT_ASSERT_EQUAL(OUString("last_page"), boost::get<1>(result)[0]); -+ CPPUNIT_ASSERT_EQUAL(size_t(2), boost::get<2>(result).size()); -+ CPPUNIT_ASSERT_EQUAL(OUString("\\B"), boost::get<2>(result)[0]); -+ CPPUNIT_ASSERT_EQUAL(OUString("foobar"), boost::get<2>(result)[1]); -+ -+ result = lcl_SplitFieldCommand("PAGEREF\\bfoobar\\A\"\""); -+ CPPUNIT_ASSERT_EQUAL(OUString("PAGEREF"), boost::get<0>(result)); -+ CPPUNIT_ASSERT(boost::get<1>(result).empty()); -+ CPPUNIT_ASSERT_EQUAL(size_t(4), boost::get<2>(result).size()); -+ CPPUNIT_ASSERT_EQUAL(OUString("\\B"), boost::get<2>(result)[0]); -+ CPPUNIT_ASSERT_EQUAL(OUString("foobar"), boost::get<2>(result)[1]); -+ CPPUNIT_ASSERT_EQUAL(OUString("\\A"), boost::get<2>(result)[2]); -+ CPPUNIT_ASSERT_EQUAL(OUString(), boost::get<2>(result)[3]); -+} -+ -+CPPUNIT_TEST_SUITE_REGISTRATION(WriterfilterMiscTest); -+ -+} -+ -+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 6b9562b..c7302cf 100644 ---- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx -+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx -@@ -66,6 +66,7 @@ - #include - - #include -+#include - - #include - #include -@@ -2003,37 +2004,133 @@ OUString lcl_ParseFormat( const OUString& rCommand ) - /*------------------------------------------------------------------------- - extract a parameter (with or without quotes) between the command and the following backslash - -----------------------------------------------------------------------*/ --OUString lcl_ExtractParameter(const OUString& rCommand, sal_Int32 nCommandLength ) -+static OUString lcl_ExtractToken(OUString const& rCommand, -+ sal_Int32 & rIndex, bool & rHaveToken, bool & rIsSwitch) - { -- sal_Int32 nStartIndex = nCommandLength; -- sal_Int32 nEndIndex = 0; -- sal_Int32 nQuoteIndex = rCommand.indexOf( '\"', nStartIndex); -- if( nQuoteIndex >= 0) -+ rHaveToken = false; -+ rIsSwitch = false; -+ -+ OUStringBuffer token; -+ bool bQuoted(false); -+ for (; rIndex < rCommand.getLength(); ++rIndex) - { -- nStartIndex = nQuoteIndex + 1; -- nEndIndex = rCommand.indexOf( '\"', nStartIndex + 1) - 1; -+ sal_Unicode const currentChar(rCommand[rIndex]); -+ switch (currentChar) -+ { -+ case '\\': -+ { -+ if (rIndex == rCommand.getLength() - 1) -+ { -+ SAL_INFO("writerfilter.dmapper", "field: trailing escape"); -+ ++rIndex; -+ return OUString(); -+ } -+ sal_Unicode const nextChar(rCommand[rIndex+1]); -+ if (bQuoted || '\\' == nextChar) -+ { -+ ++rIndex; // read 2 chars -+ token.append(nextChar); -+ } -+ else // field switch (case insensitive) -+ { -+ rHaveToken = true; -+ if (token.isEmpty()) -+ { -+ rIsSwitch = true; -+ rIndex += 2; // read 2 chars -+ return rCommand.copy(rIndex - 2, 2).toAsciiUpperCase(); -+ } -+ else -+ { // leave rIndex, read it again next time -+ return token.makeStringAndClear(); -+ } -+ } -+ } -+ break; -+ case '\"': -+ if (bQuoted || !token.isEmpty()) -+ { -+ rHaveToken = true; -+ if (bQuoted) -+ { -+ ++rIndex; -+ } -+ return token.makeStringAndClear(); -+ } -+ else -+ { -+ bQuoted = true; -+ } -+ break; -+ case ' ': -+ if (bQuoted) -+ { -+ token.append(' '); -+ } -+ else -+ { -+ if (!token.isEmpty()) -+ { -+ rHaveToken = true; -+ ++rIndex; -+ return token.makeStringAndClear(); -+ } -+ } -+ break; -+ default: -+ token.append(currentChar); -+ break; -+ } -+ } -+ assert(rIndex == rCommand.getLength()); -+ if (bQuoted) -+ { -+ SAL_INFO("writerfilter.dmapper", -+ "field argument with unterminated quote"); -+ return OUString(); - } - else - { -- nEndIndex = rCommand.indexOf(" \\", nStartIndex); -+ rHaveToken = !token.isEmpty(); -+ return token.makeStringAndClear(); - } -- OUString sRet; -- if( nEndIndex > nStartIndex + 1 ) -+} -+ -+SAL_DLLPUBLIC_EXPORT // export just for test -+boost::tuple, vector > -+lcl_SplitFieldCommand(const OUString& rCommand) -+{ -+ OUString sType; -+ vector arguments; -+ vector switches; -+ sal_Int32 nStartIndex(0); -+ -+ do - { -- //remove spaces at start and end of the result -- if(nQuoteIndex <= 0) -+ bool bHaveToken; -+ bool bIsSwitch; -+ OUString const token = -+ lcl_ExtractToken(rCommand, nStartIndex, bHaveToken, bIsSwitch); -+ assert(nStartIndex <= rCommand.getLength()); -+ if (bHaveToken) - { -- const sal_Unicode* pCommandStr = rCommand.getStr(); -- while( nStartIndex < nEndIndex && pCommandStr[nStartIndex] == ' ') -- ++nStartIndex; -- while( nEndIndex > nStartIndex && pCommandStr[nEndIndex] == ' ') -- --nEndIndex; -+ if (sType.isEmpty()) -+ { -+ sType = token.toAsciiUpperCase(); -+ } -+ else if (bIsSwitch || !switches.empty()) -+ { -+ switches.push_back(token); -+ } -+ else -+ { -+ arguments.push_back(token); -+ } - } -- sRet = rCommand.copy( nStartIndex, nEndIndex - nStartIndex + 1); -- } -- return sRet; --} -+ } while (nStartIndex < rCommand.getLength()); - -+ return boost::make_tuple(sType, arguments, switches); -+} - - - OUString lcl_ExctractAskVariableAndHint( const OUString& rCommand, OUString& rHint ) -@@ -2480,7 +2577,7 @@ void DomainMapper_Impl::handleAutoNum - } - - void DomainMapper_Impl::handleAuthor -- (FieldContextPtr pContext, -+ (OUString const& rFirstParam, - PropertyNameSupplier& rPropNameSupplier, - uno::Reference< uno::XInterface > & /*xFieldInterface*/, - uno::Reference< beans::XPropertySet > xFieldProperties, -@@ -2490,19 +2587,7 @@ void DomainMapper_Impl::handleAuthor - xFieldProperties->setPropertyValue - ( rPropNameSupplier.GetName(PROP_FULL_NAME), uno::makeAny( true )); - -- sal_Int32 nLen = sizeof( " AUTHOR" ); -- if ( eFieldId != FIELD_AUTHOR ) -- { -- if ( eFieldId == FIELD_USERINITIALS ) -- nLen = sizeof( " USERINITIALS" ); -- else if ( eFieldId == FIELD_USERNAME ) -- nLen = sizeof( " USERNAME" ); -- } -- -- OUString sParam = -- lcl_ExtractParameter(pContext->GetCommand(), nLen ); -- -- if(!sParam.isEmpty()) -+ if (!rFirstParam.isEmpty()) - { - xFieldProperties->setPropertyValue( - rPropNameSupplier.GetName( PROP_IS_FIXED ), -@@ -2513,16 +2598,14 @@ void DomainMapper_Impl::handleAuthor - - void DomainMapper_Impl::handleDocProperty - (FieldContextPtr pContext, -+ OUString const& rFirstParam, - PropertyNameSupplier& rPropNameSupplier, - uno::Reference< uno::XInterface > & xFieldInterface, - uno::Reference< beans::XPropertySet > xFieldProperties) - { - //some docproperties should be imported as document statistic fields, some as DocInfo fields - //others should be user fields -- OUString sParam = -- lcl_ExtractParameter(pContext->GetCommand(), sizeof(" DOCPROPERTY") ); -- -- if(!sParam.isEmpty()) -+ if (!rFirstParam.isEmpty()) - { - #define SET_ARABIC 0x01 - #define SET_FULL_NAME 0x02 -@@ -2562,7 +2645,7 @@ void DomainMapper_Impl::handleAuthor - for( ; nMap < sizeof(aDocProperties) / sizeof(DocPropertyMap); - ++nMap ) - { -- if(sParam.equalsAscii(aDocProperties[nMap].pDocPropertyName)) -+ if (rFirstParam.equalsAscii(aDocProperties[nMap].pDocPropertyName)) - { - sFieldServiceName = - OUString::createFromAscii -@@ -2589,7 +2672,7 @@ void DomainMapper_Impl::handleAuthor - uno::UNO_QUERY_THROW); - if( bIsCustomField ) - xFieldProperties->setPropertyValue( -- rPropNameSupplier.GetName(PROP_NAME), uno::makeAny( sParam )); -+ rPropNameSupplier.GetName(PROP_NAME), uno::makeAny(rFirstParam)); - else - { - if(0 != (aDocProperties[nMap].nFlags & SET_ARABIC)) -@@ -2889,13 +2972,14 @@ void DomainMapper_Impl::CloseFieldCommand() - try - { - uno::Reference< uno::XInterface > xFieldInterface; -- //at first determine the field type - erase leading and trailing whitespaces -- OUString sCommand( pContext->GetCommand().trim() ); -- sal_Int32 nSpaceIndex = sCommand.indexOf( ' ' ); -- if( 0 <= nSpaceIndex ) -- sCommand = sCommand.copy(0, nSpaceIndex).toAsciiUpperCase(); - -- FieldConversionMap_t::iterator aIt = aFieldConversionMap.find(sCommand); -+ boost::tuple, vector > const -+ field(lcl_SplitFieldCommand(pContext->GetCommand())); -+ OUString const sFirstParam(boost::get<1>(field).empty() -+ ? OUString() : boost::get<1>(field).front()); -+ -+ FieldConversionMap_t::iterator const aIt = -+ aFieldConversionMap.find(boost::get<0>(field)); - if(aIt != aFieldConversionMap.end()) - { - uno::Reference< beans::XPropertySet > xFieldProperties; -@@ -2937,7 +3021,8 @@ void DomainMapper_Impl::CloseFieldCommand() - if ( bCreateEnhancedField ) - { - FieldConversionMap_t aEnhancedFieldConversionMap = lcl_GetEnhancedFieldConversion(); -- FieldConversionMap_t::iterator aEnhancedIt = aEnhancedFieldConversionMap.find(sCommand); -+ FieldConversionMap_t::iterator aEnhancedIt = -+ aEnhancedFieldConversionMap.find(boost::get<0>(field)); - if ( aEnhancedIt != aEnhancedFieldConversionMap.end()) - sServiceName += OUString::createFromAscii(aEnhancedIt->second.cFieldServiceName ); - } -@@ -2975,7 +3060,9 @@ void DomainMapper_Impl::CloseFieldCommand() - case FIELD_AUTHOR : - case FIELD_USERNAME : - case FIELD_USERINITIALS : -- handleAuthor(pContext, rPropNameSupplier, xFieldInterface, xFieldProperties, aIt->second.eFieldId ); -+ handleAuthor(sFirstParam, rPropNameSupplier, -+ xFieldInterface, xFieldProperties, -+ aIt->second.eFieldId); - break; - case FIELD_DATE: - if (xFieldProperties.is()) -@@ -3014,14 +3101,14 @@ void DomainMapper_Impl::CloseFieldCommand() - } - break; - case FIELD_DOCPROPERTY : -- handleDocProperty(pContext, rPropNameSupplier, xFieldInterface, xFieldProperties); -+ handleDocProperty(pContext, sFirstParam, rPropNameSupplier, -+ xFieldInterface, xFieldProperties); - break; - case FIELD_DOCVARIABLE : - { -- OUString sParam = lcl_ExtractParameter(pContext->GetCommand(), sizeof(" DOCVARIABLE") ); - //create a user field and type - uno::Reference< beans::XPropertySet > xMaster = -- FindOrCreateFieldMaster( "com.sun.star.text.FieldMaster.User", sParam ); -+ FindOrCreateFieldMaster("com.sun.star.text.FieldMaster.User", sFirstParam); - uno::Reference< text::XDependentTextField > xDependentField( xFieldInterface, uno::UNO_QUERY_THROW ); - xDependentField->attachTextFieldMaster( xMaster ); - m_bSetUserFieldContent = true; -@@ -3047,7 +3134,7 @@ void DomainMapper_Impl::CloseFieldCommand() - else - { - //merge Read_SubF_Ruby into filter/.../util.cxx and reuse that ? -- nSpaceIndex = aCommand.indexOf(' '); -+ sal_Int32 nSpaceIndex = aCommand.indexOf(' '); - if(nSpaceIndex > 0) - aCommand = aCommand.copy(nSpaceIndex).trim(); - if (aCommand.startsWith("\\s")) -@@ -3178,8 +3265,7 @@ void DomainMapper_Impl::CloseFieldCommand() - case FIELD_INCLUDEPICTURE: break; - case FIELD_KEYWORDS : - { -- OUString sParam = lcl_ExtractParameter(pContext->GetCommand(), sizeof(" KEYWORDS") ); -- if(!sParam.isEmpty()) -+ if (!sFirstParam.isEmpty()) - { - xFieldProperties->setPropertyValue( - rPropNameSupplier.GetName( PROP_IS_FIXED ), uno::makeAny( true )); -@@ -3209,10 +3295,9 @@ void DomainMapper_Impl::CloseFieldCommand() - case FIELD_MERGEFIELD : - { - //todo: create a database field and fieldmaster pointing to a column, only -- OUString sParam = lcl_ExtractParameter(pContext->GetCommand(), sizeof(" MERGEFIELD") ); - //create a user field and type - uno::Reference< beans::XPropertySet > xMaster = -- FindOrCreateFieldMaster( "com.sun.star.text.FieldMaster.Database", sParam ); -+ FindOrCreateFieldMaster("com.sun.star.text.FieldMaster.Database", sFirstParam); - - // xFieldProperties->setPropertyValue( - // "FieldCode", -@@ -3243,21 +3328,21 @@ void DomainMapper_Impl::CloseFieldCommand() - if (xFieldProperties.is()) - { - bool bPageRef = aIt->second.eFieldId == FIELD_PAGEREF; -- OUString sBookmark = lcl_ExtractParameter(pContext->GetCommand(), -- (bPageRef ? sizeof(" PAGEREF") : sizeof(" REF"))); - - // Do we need a GetReference (default) or a GetExpression field? - uno::Reference< text::XTextFieldsSupplier > xFieldsSupplier( GetTextDocument(), uno::UNO_QUERY ); - uno::Reference< container::XNameAccess > xFieldMasterAccess = xFieldsSupplier->getTextFieldMasters(); - -- if (!xFieldMasterAccess->hasByName("com.sun.star.text.FieldMaster.SetExpression." + sBookmark)) -+ if (!xFieldMasterAccess->hasByName( -+ "com.sun.star.text.FieldMaster.SetExpression." -+ + sFirstParam)) - { - xFieldProperties->setPropertyValue( - rPropNameSupplier.GetName(PROP_REFERENCE_FIELD_SOURCE), - uno::makeAny( sal_Int16(text::ReferenceFieldSource::BOOKMARK)) ); - xFieldProperties->setPropertyValue( - rPropNameSupplier.GetName(PROP_SOURCE_NAME), -- uno::makeAny( sBookmark) ); -+ uno::makeAny(sFirstParam) ); - sal_Int16 nFieldPart = (bPageRef ? text::ReferenceFieldPart::PAGE : text::ReferenceFieldPart::TEXT); - OUString sValue; - if( lcl_FindInCommand( pContext->GetCommand(), 'p', sValue )) -@@ -3287,7 +3372,9 @@ void DomainMapper_Impl::CloseFieldCommand() - { - xFieldInterface = m_xTextFactory->createInstance("com.sun.star.text.TextField.GetExpression"); - xFieldProperties.set(xFieldInterface, uno::UNO_QUERY); -- xFieldProperties->setPropertyValue(rPropNameSupplier.GetName(PROP_CONTENT), uno::makeAny(sBookmark)); -+ xFieldProperties->setPropertyValue( -+ rPropNameSupplier.GetName(PROP_CONTENT), -+ uno::makeAny(sFirstParam)); - xFieldProperties->setPropertyValue(rPropNameSupplier.GetName(PROP_SUB_TYPE), uno::makeAny(text::SetVariableType::STRING)); - } - } -@@ -3354,8 +3441,7 @@ void DomainMapper_Impl::CloseFieldCommand() - case FIELD_STYLEREF : break; - case FIELD_SUBJECT : - { -- OUString sParam = lcl_ExtractParameter(pContext->GetCommand(), sizeof(" SUBJECT") ); -- if(!sParam.isEmpty()) -+ if (!sFirstParam.isEmpty()) - { - xFieldProperties->setPropertyValue( - rPropNameSupplier.GetName( PROP_IS_FIXED ), uno::makeAny( true )); -@@ -3370,8 +3456,7 @@ void DomainMapper_Impl::CloseFieldCommand() - break; - case FIELD_TITLE : - { -- OUString sParam = lcl_ExtractParameter(pContext->GetCommand(), sizeof(" TITLE") ); -- if(!sParam.isEmpty()) -+ if (!sFirstParam.isEmpty()) - { - xFieldProperties->setPropertyValue( - rPropNameSupplier.GetName( PROP_IS_FIXED ), uno::makeAny( true )); -@@ -3391,10 +3476,11 @@ void DomainMapper_Impl::CloseFieldCommand() - m_xTextFactory->createInstance( - OUString::createFromAscii(aIt->second.cFieldServiceName)), - uno::UNO_QUERY_THROW); -- OUString sTCText = lcl_ExtractParameter(pContext->GetCommand(), sizeof(" TC") ); -- if( !sTCText.isEmpty()) -+ if (!sFirstParam.isEmpty()) -+ { - xTC->setPropertyValue(rPropNameSupplier.GetName(PROP_ALTERNATIVE_TEXT), -- uno::makeAny(sTCText)); -+ uno::makeAny(sFirstParam)); -+ } - OUString sValue; - // \f TC entry in doc with multiple tables - // if( lcl_FindInCommand( pContext->GetCommand(), 'f', sValue )) -diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx -index 1ebf067..4686baa 100644 ---- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx -+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx -@@ -576,13 +576,14 @@ public: - uno::Reference< uno::XInterface > & xFieldInterface, - uno::Reference< beans::XPropertySet > xFieldProperties); - void handleAuthor -- (FieldContextPtr pContext, -+ (OUString const& rFirstParam, - PropertyNameSupplier& rPropNameSupplier, - uno::Reference< uno::XInterface > & xFieldInterface, - uno::Reference< beans::XPropertySet > xFieldProperties, - FieldId eFieldId); - void handleDocProperty - (FieldContextPtr pContext, -+ OUString const& rFirstParam, - PropertyNameSupplier& rPropNameSupplier, - uno::Reference< uno::XInterface > & xFieldInterface, - uno::Reference< beans::XPropertySet > xFieldProperties); --- -1.8.3.1 - diff --git a/0002-rhbz-988516-DOCX-import-fix-context-stack-when-impor.patch b/0002-rhbz-988516-DOCX-import-fix-context-stack-when-impor.patch deleted file mode 100644 index 0a18e41..0000000 --- a/0002-rhbz-988516-DOCX-import-fix-context-stack-when-impor.patch +++ /dev/null @@ -1,321 +0,0 @@ -From 9a156365277c93bd66c2ef21c42bfa377eaf314b Mon Sep 17 00:00:00 2001 -From: Michael Stahl -Date: Wed, 5 Mar 2014 23:29:06 +0100 -Subject: [PATCH 2/2] rhbz#988516: DOCX import: fix context stack when - importing header/footer - -When a header/footer substream is parsed, a ParagraphGroup is started, -but not ended; so the properties of the last paragraph in the -header/footer are applied to a paragraph in the body. - -The obvious fix to add a call to endParagraphGroup() at the end of w:p -element breaks table cells. So add a call to endParagraphGroup() at -the end of the "hdr"/"ftr" element. - -(The problem in the bugdoc became much more visible with commit -ca555c596043c88894b964ac5e21f5a7271d5f3b, but was there before) - -Change-Id: Ib054f1882793049b39424c1076ba5d4b319cd027 -(cherry picked from commit 2b78f2cd7b9e4bab0f3b3b9119238f36a1bbc7b2) -Reviewed-on: https://gerrit.libreoffice.org/8477 -Reviewed-by: Miklos Vajna -Tested-by: Miklos Vajna ---- - sw/qa/extras/ooxmlimport/data/rhbz988516.docx | Bin 0 -> 15513 bytes - sw/qa/extras/ooxmlimport/ooxmlimport.cxx | 12 ++++++++++++ - writerfilter/source/ooxml/model.xml | 4 +++- - 3 files changed, 15 insertions(+), 1 deletion(-) - create mode 100644 sw/qa/extras/ooxmlimport/data/rhbz988516.docx - -diff --git a/sw/qa/extras/ooxmlimport/data/rhbz988516.docx b/sw/qa/extras/ooxmlimport/data/rhbz988516.docx -new file mode 100644 -index 0000000000000000000000000000000000000000..38e2dcff324036a333060f10475fa60a6c872074 -GIT binary patch -literal 15513 -zcmeIZ1$SIYvMnrTW@ZM9EwU|UX0(`@S+bZ}vMgq1W@ct)wwM`Tx!=rmx2M1N{eXMV -zT2<@RI=SOSMnz=q%!rhg00lz>f&hX70sumx(rk6EoSBKe<#Um<{0_y|%4kxX9_wfXujK8kJWVvdvB{x3GzZLG1hUI}KSuFvEYfmD15B^ryX9v*4v0NJXQt4AO1_Crkg-5yR&;3pQO3{HeoF>t67MP~!HhlFvT7 -zm4^b}zU7rrlnWcTG$_gVGumLs2H%(Z>qZ5Fy2`-5oq{G8@-Jq&5Qaow)1vQja}EMT -z9+jYOs9&@mz}gF%)LCubz-Y?br2*1y4}DL(c-m3ZMw!SKW&~i6n|f!s37+%vRt{6$ -z8Td(H1!T^Tn|uZ#JA>>4?}C|h?kWwPbI0BQ0s8(93MBit_$G+KX}AVBtu){%EFiwM -z?F=pK89w~_{@=L%9~{ho>3VqVia01AT;MtQhVGyz`w9%n^wPR$mNUsQsDIK4urtDF -z?s9uu4pFo0iq`(k&k>pV6u*>N?t)Jc6}oD3nTshpA{*u|mJMN$vTB1G$-c($BIA{& -zR@UtEkuW|r|P4whcbVuI!1V#NmMM;|9$bW6he;#Q6-&-Uvy?xw~kwcV~j)1Evme=$-7 -zP>MpyCRK#)bHuosYevR|;P_qnO1?%ziq__rm&5Fng4l9c3JV~l?i&dqNL{0{BaxUa -zY}#N`v{WXZjv_@F5DRmwzY)`qLkt!4cu$j$hp$B8 -zJJ-6*IQ2bd=DipOX)8}dH&Y3qNoJZiR!O3|@ZLxQoZr01L5E=xKD8qRY(Zsg^-Q6{ -zBp|X;x?&NNeQ%m2swCz->doL`>?mF{Dp_vg%R9^82y=?pQQ|gxXOV(}Nj7VMdC41$ -z&H8Er8k;WB)VBFgu2t#gd0klJ#xB57v -zwM62{n9)cdgWu1)rf-3qh*grsEgQijkVQHSrtD11$qX!+U)#p>>Z&k_ePikQ -zl@~0>0T(SINTNVf&*Y}Lfk-hp0}+PCLMyT$V%)*PJAoEhc&AWW58cqpJ!D?RV7@8$DZ01{r@uapTT)crer3}gv&X&%120B#L(aj^*@W$)1v}>} -z5aX`KcGsY(8zB%8m3!iWP@*WxDLY!SP57F~;)`K>N))M6?yOdt>T`)FQei&EWKZ0U -zCEDc=V`71@Myuln7~{qpxcx9@+kQ(-dRgQ~OwB*0k$Brzkio5q;=h-Ig1xRYpU(3) -z>=PnoZdsaPzt;3bP|#PdH-OD;ni0~Az?RP20oSTj(5lXx7E}0j{nS+ -z)`_VQcZWL9=l$xj;%;)JGS7MSgd7^M6x|cGKJ;4&@9lXwMtHvOhR%{<#shz{1XV06cZy06~Nd3<>OXj@>*2Ka`Ok!A%o -z$RJnqtOQKmW5tb>=SWTLrOKK?Ur3!aLHwrLQSLPRCFU}FX-L?j(5I-dU)58z -zMz5sEc?==kMKrMb)NCl6WmrOqMTfEw*E}YExf^*DI*W8}Tq0Jw?}hWYXm;Ub+~|n9 -zeM3_vT*YGt54XY!^g!rB(bwY@v67V`j{*^vNI_mdXW&lrCT{%5k!>W -z-J&kUyY0>(=x)30Z*NSAZBKI~g$oQ)q9 -z_YYtTz@4F-6Ef)5xok_jZ4Ltq1jt4OS_bKA_+TvNJ+m%xS>R7rREo&Q -z_Ni*ceq0PK`$C5Dxbyr@Kv-0=a5eykk3vi>v#j-MHzq)K>B<{ddAde$$57@fN|Oqf -zcubxcy_T9S_-raITtaOW8O!c* -z%V;&gJwbKM2o{cSo7>#@CV(o>{qmI)n8$>_m8}n%Ch*?braLvvm$GSkguD%>j+RLm -z%vcy!t7bzO5aQZD)GeFo+b?zDM)$G*yoeY#YG^sygdf~i`FZh5TQ(OM#-15GwX1_r -zhQEAnJPSLRSaT}=fYZ5PhV2pPYeJPRQG<0YNFQ2{bK$ydm?sa`Ng*oS<*8l$0L)r22;>w0JZA>v9#*p!HcQO=K@#Xck -zMFjmq%16ZTA-Z2MJ7pK@^co9|McI~|lGL^xy$5RMDs+r2o}(*S0{k^S6z^t?+9=5x -zkCUsnZWAAPF9*iO({2LU1t}yX8$H!IdlC4|Zk$U~QC(N$nkLDWL#*3uUr)aORNq6j -zuO$q1prcI;#*qb4Lgdm)5Rd5|OBxM9j2~^<{>3{Q=JZVdXwmV#0z -z%(3^iqFE*wO$MB2PX)#~;WfIKCnH@al2Xx7?C@~gtoLJ1V7T75VfNE;sb -z*t>1j1MnxwX!LoaA(67NPHmOIH}!tVUa$wAfvap -zN;jf*_)+8P>xsjoITk1nus*hQk5MUFjcjehu*VN$YV(vwKU>l-rBu2r?Ty}r@V7xZ -zSATMDf;w2yPHVUzTOy4{y4IL&*?uYKaDRW?Zl%g#XeXN}W<)bt3tJRksa?D5E_av2 -z#x0~KWzRKjB|rJhM+kAtWxq|gXk(MrX#|g==_#nh8f*h2<-Rr}$e$F0 -zKrY_o-;<49o?CV~`9SMFYjGqHT!x2I@|9q53;lCy1{(~saPcIbiM=pwa;I8SndVTi -zuT@1)X?Xw_OG7jA7@AO!MppI5D$aPnA=o*c%1R1WHYj!C$}5`GM>cbg6CGg?OXuU9 -zRr-Ed%tI3FEpLM_({2;bg;uHY1H-8#>WH{-Pn#~GbKXCTQ+v}&T4P1B -zsgF~l`6?o@Ysq$W8p?Q2xxgfS2*V0Sp4iWoHUzR+Y1k^ByMu;ek3sai9oGAV;?y(r -z>X%ZmWza90@UY<|MNyG~X;S)L}uDn`+ZDgr8ZwKb(~fnVLygFbAWB93@;<+ -z4(pgOJ;~;@U*c?XiRmAwJ6T+gq-SMwxibjup5)*e#2QGPFxX>I^Kd}KYXjeaqmUFs -zmApt3*Ez_7q(CHkq!+1i*kSlbUSq{^LiG)>Osxc@5&pAGwKsHdFtswa|3#*2l>x+t -z1Ibf6^IhklDUxi#wwgblB;wdA)TKo=kC0bPKMBg3h?@3n;XE2G2SUtGFYHTF@<`Ik -z)+FXRAx8>6FD{Kx(k`VMGw9S{LTI^U`?}@+&!JIO67}v}Z)Q$kv32eC#~nQ?IMpyC -zqd=r?v{vf4wz^_bg_#o{RC^M1D8;kf{od_@GkNJ7&x-ws-B49^1>sYsuLesr*t!Nu -zH|l7ly{R+85~R-aO=xxvIq=~;Qv&ajtD8*;QWJctgiLdtjF8l$=`^TQ5AQ-fDEG*_ -z7wX86GrbfA9dgmf@@?yP%3`v-W@UKjVk-nrCdPlbd)*y -zdE&)%c(u~_jX{!I@-ksQ`GC=g%zMO_y-$iVmx4_|9{!QJNl@4`E_Nc2-^a>E)bQ#j -zjaV90zDU^RKw+zm`wpR}E3&jzJPUz|jg(6nb&}v>&IC2b2Pm9O@IYGk8nnX(qOv`S)~-hFhwsePE+2HoX3vSK>I&dY{LnCl} -zxe3>eT-M)1=8kE2PJvy%pwp0QP$1{THKZ&Th`1?xa{0wn)9SvFb$e>aIhKi&_gMuk -zVTeV}#CHi5oI|DIIeNDG!q*l%c`3^qQnPeYKJ2_Xo1PN!;lvoW!&JmvII_Ay#sWW< -zMOh}dCPCHr%u7)w)z+c0C}W=)jh+?lP!-?xbJ=oSG)GRqa;6QfMp2bP2h@h!?qNm$ -z-nV~@Rx{GFt~CHfEe5PYQ2tFsjR2WGMO{4$!(ZXr8n+g?%!m|lu5!dJ*si?|=KL)i -zo>n|;HlEKvKa^LSbX>Lq1N8I6Zzb -ziZUB>Lw2^uyZTm7B5W|L1x;>R^XebG>BfXs=}*PBA9({`F=$B5rUNIHToJOr2ln(j -zPH&I&yY_&--K4DAynC*!!5DK9%!-?$-?@q%;$vIBkbfvQjgQVqTf{LHIGJdhJvgAN -zE%x)%_!gpZ{?dFcEeiChW@>1{#xUw5I5!isxC>-CH0meGbc$g}S_=jf59VY8VMT5B -zdDr&o!Ey$yq=?Px_UhHlhx~B=6QR4M5|-6|-$)I}>ds{R1-2}5EoTRD9{IoxlnksP -zNWjV!kr@xxG#1w?ew|Q}&{N;Dz}E!vDbk${F2Rl0@}dtzxt2nkDsRuDiA;>zteSW4 -z%?CY4ep~kNnuBI0#}~T0D_e$+Iu?=UfW@hg^BOG+l?1kYZn%VnEFq?o*Pj@&RhtjQ -z4LtgYfn090cdvpB3+B2{t|_!vpUjOjg!7H>2`)$`5i0N}kLG(~kM~xapyay@2^@rP -z1~Jo#;BthnNV!Ds#%aGP36(n~vMs7jj#mxtH_6^cGR9};P{gR6z%9|QNO#)f?g2a;Du(la5}y288o&PRoYIEiI*qh;2JxF%!lktzyrj!voR -zjyGl6POR`Hcn3F`k3^>hYp*x-(zWMbK7qGi3-pIfZ;j%&;WS6WeQs0SdL32-_79@P -zha?FYdGJCCe$Yk5cjXEeEXEjCIlR{SgqPl!l$59^RG~Z^hq=50#w=<3MwIYHbyl}p -zSuR$?Jy+Fz_L4cYjxr7`6~V)t0f~lgG(6Hg5M-~9YpUc1or9&476(g#(UY~;+UK0h -z$Jx!5@JN-;18RNeV9^sXM#Jo!zr43!2Gt&0dtk}XDS$A;A(3Kyr%3cuo)vMf4w0<)L$dBC&GX -znep&sd>HPwjr6x^J{FDhP6Byw7oM7(M8MFjzpw}4E#aLBsY&QMHToU%K>2G~ -zbAd)gh!{dnelRbKJEMqfNpV?Q1B-3YpvzxV0d8JrBTc|1SDubbHk*j8zzZ5$0gY#4 -zF{3j}lOvTn4#yEuH=d=M;>zjwp2x29Zx}D!Yj6~%PlGhZf{wBMF4zN#t!WCcKAyA% -zjW%!;4=tQZM$kZWo0s%Wc2^jGkCoPVye_!UlPHznzQ8y0_0rT1{W^;PH%n-(YiMn+yM!TgZ5O*T -zPoidf+6)U}?CXkJmIiC)vasXCd4?meG_Gs5gj?mxxWG(yk?!U9Y?Sb>t}%z{P4N_4 -zc?208mnDmr63t?%=%B!hetSK02+}chD9!CHB>WV#IcJp;ObTE$ObfB?7VkUg;|B0> -z>y6#SYA=m5Et8B&FAY3x6T(MZjt+~wCU3%i1XFjZCHH&HXD%(v7Z1eR;hy+5KUk<_ -z*b^zuMaqy~z%S?B8P4lZ500W+)ZCaF_=cI4GrDp%HB+9tlzAlXq=6zQU`mz!aHUr2 -zBS3m#XAv)1qZ@0DeLzahE(;cG<8gsdywD_V0^c?|-Q8)28~LsaseTZ@h*88Kz*|mN -zUKg5RXIQl9?>1^|=>s{Ic*A8{9W2wUHwEa= -zS2$lQnA+2t%DKOe?sFm1T@}4iu`zjZoPWjq1g&h8f>mF#k+f4T1YnR -zhaw0DHy?T_KLEzzFAxX^J2Yln40yr+uj;)CK_G>HyyOqj;lGQ9O(WH*LRIXd=}qwt -z@HqU{67Nc$C{pA#n7u3KKbkj(IdhAC+m`CoGZ)Az`lW2uUKS8d7&~xq8N7QR?)@MG -zrZor*H=pArMP_A<0`lxHRew1EOcANhFDnp{85#fTV>Bkv)`#ufqW>uW{}jESN}q~J -zPAG%V7VYgePQ)|E3xUT@76OyV=|ZZ)94P!@$<0cC8kzAv+Gmj$u{i9T>Feesf|Cpm -z6n~&RthVW=>DTZA2k|k4xI>?svxbfFw2Atm{Evv#b?#RXT=B#7Vv8V#$#FVqhxTBW -zd~#mZtEzq!WHa0eb=bPN>*TEXhGhaq)raK1K8uat*ZSXAj0zv{)!z~x6SpqLmJYU0 -z>TU~*pkd!H^+%d9cIA -z>E~0Sh#g>de&-v?|9?vtrqedZXs`k!}YRLZH{c1Og(PF@Jy)~ -zBxViLN3w6!x!6r!osK^rAg2?CWJV?xdq -z6Gh)f6}rh8H_?^uq{l}Mw2v~H=>-IA&OF*uY~X>4J85-Uwhw0XmMk|ZkIQM1M99d^V{1Wso>)rJiddW$^Gr(|=LB*B9W!s==2g!iOc)L4tI2 -zz1i8Xlv6_GlOal?3{8wMdxU+Vxkh~inl)GIuE(;%*dz!j*xm><;woOPY&)u^I@`sv -zhnLaFQM$6DE4?{0IO%LjD1OI+7DQ+oK5Vw`sa1?&-JK771J1Z}#l2G((M+y_wNNFX -zLIGb#`Qv0CV$khV&4>m7}0 -zktG(O+rmeCrWY_C7Lmi{@o|qmJcB39qy;@b|61Y-eW8B)m -z!J>i4^Am!3wT8=Y1hC8JE*Tz$wK1r;&9Ad-C4bLtyTxqho(w)@h<>ES -zMHEU^5*FSAf9;Z!G1>K@YJMF3SaOeu3aE2fZ>wtCc9TM)buv54%27@8ruj7nHP$uZ|^{m2{70XLw48<6$pY>bV0^g0^?%`9p`ia9bIg5XVg -z>P@?G7#Si?7*+w~%61voX@wcKaTvA&oMEt#%HV<;9-C(Z^AVa*yVwUI{Z|AV?{PBea}u!;vA}_Szs#7czIUZ?;KM20U$>;5C!b+-GlGD1qXh9 -zDTk$9@gKKxvC`Rg4QnnY?6xX;y4n0uCz6V=!x>eGWczwPaLo}HpO-7sIsj2oB*yl# -z1Mi{Uu!Dy)Xb&W2cThWv3{xIhhwj8&G4UV_{1{_hxR{9$Sl0S^(&nBA@||vhuL@HA -za4WUVj~;9c?2e-TN{q~Qe7%eN=1|j(;KfmNNWqD&{?jn8ZctC=rcusHH-dP;oiJS3 -zB5<)z1h(p0V*+q5#Twz&)B+EyeHd_c?Pv3PtDj;!^ -zRcGgS-e>2xe?>+=s@R3+{VA$(C7J!mA!&SU^zvTJ~y#jjo -zhix1w&z+**22;HI_8~@!{*ZUr1@awWn%@1uw%rK#-G;co7@`QNm>ggVZeDac2}iKf -zUqi++24hyTvdyB1hsz>yc!N$`f#^c-CLf+% -zd5Xysr>mx_e^H|bowVhkS9(>~7EF(mn<}X_4Icjw -zOAK~9FS1#kEiyucE9*ZN2kP%5AU)lbOik3DN@nYo9mr1V%lM*jB` -zAPW-x3u&R&YzpO50;4;wJ8y2fex!&RuToeCu_U!UP=`~wd?WYUtO0N%$-XfK(5BJR -zl_{hsP;@!_?}juMS{a*`uCoRiK%!yQ%=>bp!l2d6-&&q$ -zG+!)5!HWx099OmwMljB$*rnNIt|{;pjXq>1U6!0ll_En|b_y_Ak$vrwX7aHh#}Ji1 -zaSxc_4{WzFck|N&UwLw19>2FVMG%(y$tvw?3xQ^E=N$uyFc<>+WNJ%k{j3(2^pL-# -zz}>Q@Q4lT2BGsdmPp_tVo8h`=(I#iRtyRryz3_E;e|&YEr@K;UGnC_Yu<7|)Nkw5W -zy13)|Bdc^fj@Sy+>z2o9dL+4D@flM^bAC?D)i>#Z99XZd*PGja-nQGJD6m)rY}+jY -zHrkN@g^7SNFj+fm8+!&_8=GI7c7O`r|1CxYP{ve+u3tqIZHS9JSncfMzU5dTLVeMC -z2f7-dy_OTHl9b&BV$qA4OAArem?}$7$uj3LthYC!Ln{mG$|B)IE)C_FHLhQ?X4=`T -zI?4%CCR7NIX^Yg$WsByA*9MqQ~xj(g$<&VNfk -zQdKjrz|e>GJ%X|_;!uvB;}ddIz-NlOcs;PIr2(f+(&!XW!O7mYqCQA!7#f}cod^g$ -z{W+DK9GUi%Xe#<{@UNH^Lg2TJ*24xTbMDDqtR9jS$?4*^HGC?FL?+W2M4apxK6 -ztT#v|82&AWKw#(ms{ZBff>{;rb!k!;llSM=YWxlZiroOWFa5;z>KQFq^fvw%Ro_OwWr; -zyNOqhpZx8M$6QN3*TqcW+1Py0SW}{g#UO3vKMv`|JvN1}nwexXL0xL87#QqylT7eF -zwe0*1~r&hqo>I?tck`K}|{NHzm+Jq_Jpv*hSyOCT3R^*o=jYks)!-}~ZnfuHO1IK2<*rlH=_mTs@S^I9Ec`g~R9^e;|6zNo8K^?eXxbDsdvr<2{ -z>}pN=RPf+=dowK}_5IL^9O!!!nk2_&mTlf0XL|hFk=a=fjg@N-?>eDd-}#L6flfhl -z1GQ;nf#L4GZJ-1%#S{_lb}E5-o=$14qm9btfCem^nAxnx%`quQstK9|~mNQvo -zq*Vgro7WXkq)@?dycAJPmc)o91I$$iDOd7#rI)k8o~$b>M`Y30_(NcQvx*QqQLr|sVlqVPd3Yyx}9<<=G -z{vTlWHL{)|QF?XWPR=)wP^4~W5nqmIN0*F<5Kn2u) -zl1^5RmU@PEfF$v+`72lPt91$^nkS%?+506O$TZooFn4;|XqZ(gF5wjjQnK=hVF_aS -zTZeh4^s=H7j~3&8y89XDy`J`09vh50K|q2ya@y3Fgak%S-ga=RW6h{qFs4d1K2eO% -z?nV@@S^VJ@$63Up-IlGtQ@^L%+iy~tb79E#5J$~^bsLQk+WgDq2o -zNF4fVxk)l8JL)AO6HSl6FZP%GYsA;W81R(ccj)?3SSHckvx@kZ9`W#W^IG!H$sq|W -zQOAm0JSCWP9flC>IL?frq+8f)uwzs~WaEKf8XpM?o>G~lv{+cAd*#63tz#}~^HsW; -z(0%sx%Q!7R;Dt=QZ1B`sC`JPcE*I;!zt}XzJt7zmW%IZe%#XG}jYpns;L!S#Xc?^d -zMdO@fQyopa?gA>{d{;ouBjy?_o#CU>PwEXLV+ly$=!xg`5^}5?Qubb+pFsLPB(aZ9 -zZ{(6&+!qE9G;;gJyj=s;XfhF|(l6Ak5T^7Y>6XFDs`6I_S~uPvc=ljb0k@DM60<^U -ze?uo27iIIEBRmCDuVgPL09_#UbtccMyB@ijp6V4LLmw|8#p$Umsp9Z1!23!Ui~Qy4 -zI4gWzR5wCE9@v$7Vh~inC65n~67m=)chV7H*mpIFV)(W`6bcp$_WbIc# -z&F=qoF<=mSKnVWx`NdzO-(RnPIL#<4@pl1#KOps2@FswD{pGmS@4&yG8u=>_44~`( -z>kP^7l727w|5H{BAc6N^2LOJD|6bPoC;S9(hTsqQUy7W6NB>@+`X^ckkR1F2{g-mp -z-_gHUIR1(L3aASC1O0owA8>H|bs -JJIAkI{|EA+bCm!9 - -literal 0 -HcmV?d00001 - -diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx -index dca64b7..4c8a790 100644 ---- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx -+++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx -@@ -189,6 +189,18 @@ DECLARE_OOXMLIMPORT_TEST(testN757890, "n757890.docx") - CPPUNIT_ASSERT_EQUAL(text::HoriOrientation::CENTER, nValue); - } - -+DECLARE_OOXMLIMPORT_TEST(testRhbz988516, "rhbz988516.docx") -+{ -+ // The problem was that the list properties of the footer leaked into body -+ CPPUNIT_ASSERT_EQUAL(OUString(), -+ getProperty(getParagraph(1), "NumberingStyleName")); -+ CPPUNIT_ASSERT_EQUAL(OUString("Enclosure 3"), getParagraph(2)->getString()); -+ CPPUNIT_ASSERT_EQUAL(OUString(), -+ getProperty(getParagraph(2), "NumberingStyleName")); -+ CPPUNIT_ASSERT_EQUAL(OUString(), -+ getProperty(getParagraph(3), "NumberingStyleName")); -+} -+ - DECLARE_OOXMLIMPORT_TEST(testFdo49940, "fdo49940.docx") - { - uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); -diff --git a/writerfilter/source/ooxml/model.xml b/writerfilter/source/ooxml/model.xml -index a049fde..6018582 100644 ---- a/writerfilter/source/ooxml/model.xml -+++ b/writerfilter/source/ooxml/model.xml -@@ -22557,7 +22557,9 @@ - - - -- -+ -+ -+ - - - --- -1.8.3.1 - diff --git a/libreoffice.spec b/libreoffice.spec index 71f7b69..f998610 100644 --- a/libreoffice.spec +++ b/libreoffice.spec @@ -1,5 +1,5 @@ # download path contains version without the last (fourth) digit -%define libo_version 4.2.2 +%define libo_version 4.2.3 # Should contain .alphaX / .betaX, if this is pre-release (actually # pre-RC) version. The pre-release string is part of tarball file names, # so we need a way to define it easily at one place. @@ -43,7 +43,7 @@ Summary: Free Software Productivity Suite Name: libreoffice Epoch: 1 Version: %{libo_version}.1 -Release: 7%{?libo_prerelease}%{?dist} +Release: 1%{?libo_prerelease}%{?dist} License: (MPLv1.1 or LGPLv3+) and LGPLv3 and LGPLv2+ and BSD and (MPLv1.1 or GPLv2 or LGPLv2 or Netscape) and Public Domain and ASL 2.0 and Artistic and MPLv2.0 Group: Applications/Productivity URL: http://www.libreoffice.org/default/ @@ -273,25 +273,16 @@ Patch10: libreoffice-rhel6glib.patch Patch11: 0001-Related-rhbz-1032774-bodge-around-reported-NULL-valu.patch Patch12: 0001-Resolves-rhbz-1035092-no-shortcut-key-for-Italian-To.patch Patch13: 0001-Resolves-rhbz-912529-Kerkis-SmallCaps-shown-instead-.patch -Patch14: 0001-Resolves-rhbz-1038189-refresh-printer-list-when-prin.patch -Patch15: 0001-disable-firebird-unit-test.patch -Patch16: 0001-never-run-autogen.sh.patch -Patch17: 0001-Related-rhbz-1065807-rework-i66157-for-multiple-writ.patch -Patch18: 0001-Resolves-rhbz-1065807-use-xdg-Templates-for-default-.patch -Patch19: 0001-explictly-list-common-lang-independant-template-dir.patch -Patch20: 0001-rhbz-1057977-avoid-use-of-invalidated-pointers.patch -Patch21: 0001-fdo-75540-setProcessServiceFactory-must-be-called-be.patch -Patch22: 0001-KDE-don-t-throw-on-TemplatePathVariable.patch -Patch23: 0001-Resolves-rhbz-1007697-Update-on-a-Window-triggering-.patch -Patch24: 0001-Wizards-should-look-for-templates-in-Template_intern.patch -Patch25: 0001-actively-search-for-wizards-dir-in-all-internal-temp.patch -Patch26: 0002-rhbz-988516-DOCX-import-fix-context-stack-when-impor.patch -Patch27: 0001-fdo-74787-rhbz-1072553-Fix-deselection-problems-of-t.patch -Patch28: 0001-rhbz-1072607-hopefully-fix-crash-in-SvxRuler-MouseMo.patch -Patch29: 0001-rhbz-1043551-sw-avoid-division-by-0-in-Text-Grid-pai.patch -Patch30: 0001-writerfilter-salvage-a-field-parameter-parsing-train.patch -Patch31: 0001-RTF-import-fix-spurious-page-breaks-at-doc-end-relat.patch -Patch32: 0001-Related-rhbz-1076264-intermittent-a11y-crash-in-calc.patch +Patch14: 0001-disable-firebird-unit-test.patch +Patch15: 0001-never-run-autogen.sh.patch +Patch16: 0001-Related-rhbz-1065807-rework-i66157-for-multiple-writ.patch +Patch17: 0001-Resolves-rhbz-1065807-use-xdg-Templates-for-default-.patch +Patch18: 0001-explictly-list-common-lang-independant-template-dir.patch +Patch19: 0001-rhbz-1057977-avoid-use-of-invalidated-pointers.patch +Patch20: 0001-KDE-don-t-throw-on-TemplatePathVariable.patch +Patch21: 0001-Wizards-should-look-for-templates-in-Template_intern.patch +Patch22: 0001-actively-search-for-wizards-dir-in-all-internal-temp.patch +Patch23: 0001-Related-rhbz-1076264-intermittent-a11y-crash-in-calc.patch %define instdir %{_libdir} %define baseinstdir %{instdir}/libreoffice @@ -2186,6 +2177,9 @@ update-desktop-database %{_datadir}/applications &> /dev/null || : %endif %changelog +* Mon Mar 17 2014 David Tardon - 1:4.2.3.1-1 +- update to 4.2.3 rc1 + * Fri Mar 14 2014 Caolán McNamara - 1:4.2.2.1-7 - Related: rhbz#1076264 intermittent a11y crash in calc diff --git a/sources b/sources index 62df1a4..c0827b7 100644 --- a/sources +++ b/sources @@ -6,6 +6,6 @@ a7983f859eafb2677d7ff386a023bc40 a7983f859eafb2677d7ff386a023bc40-xsltml_2.1.2. 1f24ab1d39f4a51faf22244c94a6203f 1f24ab1d39f4a51faf22244c94a6203f-xmlsec1-1.2.14.tar.gz 0168229624cfac409e766913506961a8 0168229624cfac409e766913506961a8-ucpp-1.3.2.tar.gz 12fb8b5b0d5132726e57b9b9fc7e22c4 libreoffice-multiliblauncher.sh -b8b00aac99c056e8908c1a89ad999f4b libreoffice-4.2.2.1.tar.xz -3c11900dce8a5e520abc8350045b2407 libreoffice-help-4.2.2.1.tar.xz -5ac66bd46617d00f759602c00e755ea0 libreoffice-translations-4.2.2.1.tar.xz +7a8fba9c3f362f4a4f4806606eb45f13 libreoffice-4.2.3.1.tar.xz +0e2ca22a12928232434ab285076f120d libreoffice-help-4.2.3.1.tar.xz +8a41d27f9a318d053457c4af19b5ded0 libreoffice-translations-4.2.3.1.tar.xz