basic/qa/cppunit/test_compiler_checks.cxx | 41 basic/source/comp/scanner.cxx | 7 basic/source/inc/scanner.hxx | 1 connectivity/source/drivers/firebird/PreparedStatement.cxx | 35 download.lst | 4 drawinglayer/source/processor2d/vclpixelprocessor2d.cxx | 7 editeng/source/editeng/editdoc.cxx | 2 editeng/source/editeng/impedit.cxx | 3 external/nss/asan.patch.1 | 4 external/nss/nss-ios.patch | 8 external/nss/nss.patch | 6 i18nlangtag/qa/cppunit/test_languagetag.cxx | 2 i18nlangtag/source/isolang/isolang.cxx | 2 readlicense_oo/license/CREDITS.fodt | 4508 ++++++------- sc/qa/unit/ucalc_formula.cxx | 4 sc/source/core/tool/refdata.cxx | 2 svx/source/form/formcontrolling.cxx | 1 svx/source/styles/CommonStylePreviewRenderer.cxx | 5 sw/inc/ndindex.hxx | 9 sw/source/core/doc/docdesc.cxx | 132 sw/source/core/doc/docnew.cxx | 6 sw/source/core/frmedt/fecopy.cxx | 45 sw/source/core/layout/atrfrm.cxx | 2 sw/source/uibase/docvw/FrameControlsManager.cxx | 30 sw/source/uibase/docvw/PageBreakWin.cxx | 176 sw/source/uibase/inc/FrameControl.hxx | 3 sw/source/uibase/inc/PageBreakWin.hxx | 62 sw/source/uibase/inc/uiobject.hxx | 4 sw/source/uibase/sidebar/WriterInspectorTextPanel.cxx | 8 sw/source/uibase/uitest/uiobject.cxx | 4 30 files changed, 2665 insertions(+), 2458 deletions(-)
New commits: commit ecdc56a92bff0b53b987d2dc17b561e9e4180a03 Author: Michael Stahl <[email protected]> AuthorDate: Fri Jun 3 17:56:02 2022 +0200 Commit: Andras Timar <[email protected]> CommitDate: Thu Jun 9 11:02:07 2022 +0200 sw: fix pasting multiple flys in SwFEShell::Paste() This was most recently fixed in 3cfd63cb55ab1a7e6df53eaeb2a7623be05983d0 but that didn't take into account that now with Ctrl+A multiple flys can be selected and copied, and all of them should be pasted; remove the odd restriction to paste only one text frame. This reveals that pasting a text frame will actually select the text frame, so subsequent flys end up anchored inside the text frame; delay selection until all flys have been pasted. Change-Id: I049f60ca9656e5075d481d4501bb1ffdd28a4e21 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135366 Tested-by: Jenkins Reviewed-by: Michael Stahl <[email protected]> (cherry picked from commit badad69848f10b462a11f5b5e784cb468a94b180) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135390 Reviewed-by: Caolán McNamara <[email protected]> diff --git a/sw/source/core/frmedt/fecopy.cxx b/sw/source/core/frmedt/fecopy.cxx index a907e0e838a0..28a439e2c566 100644 --- a/sw/source/core/frmedt/fecopy.cxx +++ b/sw/source/core/frmedt/fecopy.cxx @@ -709,7 +709,7 @@ namespace { } namespace { - bool lcl_PasteFlyOrDrawFormat(SwPaM& rPaM, SwFrameFormat* pCpyFormat, SwFEShell& rSh) + SwFrameFormat* lcl_PasteFlyOrDrawFormat(SwPaM& rPaM, SwFrameFormat* pCpyFormat, SwFEShell& rSh) { auto& rImp = *rSh.Imp(); auto& rDoc = *rSh.GetDoc(); @@ -752,7 +752,7 @@ namespace { // positioning for group members pNew->NbcSetAnchorPos(aGrpAnchor); pNew->SetSnapRect(aSnapRect); - return true; + return nullptr; } } SwFormatAnchor aAnchor(pCpyFormat->GetAnchor()); @@ -766,18 +766,18 @@ namespace { { const SdrObject *pCpyObj = pCpyFormat->FindSdrObject(); if(pCpyObj && CheckControlLayer(pCpyObj)) - return true; + return nullptr; } else if(pCpyFormat->Which() == RES_FLYFRMFMT && IsInTextBox(pCpyFormat)) { // This is a fly frame which is anchored in a TextBox, ignore it as // it's already copied as part of copying the content of the // TextBox. - return true; + return nullptr; } // Ignore TextBoxes, they are already handled in sw::DocumentLayoutManager::CopyLayoutFormat(). if(SwTextBoxHelper::isTextBox(pCpyFormat, RES_FLYFRMFMT)) - return true; + return nullptr; aAnchor.SetAnchor(pPos); } else if(RndStdIds::FLY_AT_PAGE == aAnchor.GetAnchorId()) @@ -791,9 +791,13 @@ namespace { } SwFrameFormat* pNew = rDoc.getIDocumentLayoutAccess().CopyLayoutFormat(*pCpyFormat, aAnchor, true, true); + return pNew; + } + void lcl_SelectFlyFormat(SwFrameFormat *const pNew, SwFEShell& rSh) + { if(!pNew) - return true; + return; switch(pNew->Which()) { case RES_FLYFRMFMT: @@ -803,10 +807,11 @@ namespace { SwFlyFrame* pFlyFrame = static_cast<SwFlyFrameFormat*>(pNew)->GetFrame(&aPt); if(pFlyFrame) rSh.SelectFlyFrame(*pFlyFrame); - return false; + break; } case RES_DRAWFRMFMT: { + auto& rDrawView = *rSh.Imp()->GetDrawView(); assert(dynamic_cast<SwDrawFrameFormat*>(pNew)); SwDrawFrameFormat* pDrawFormat = static_cast<SwDrawFrameFormat*>(pNew); // #i52780# - drawing object has to be made visible on paste. @@ -821,7 +826,6 @@ namespace { default: SAL_WARN("sw.core", "unknown fly type"); } - return true; } } @@ -1038,13 +1042,24 @@ bool SwFEShell::Paste(SwDoc& rClpDoc, bool bNestedTable) // we need a DrawView if(!Imp()->GetDrawView()) MakeDrawView(); - for(auto pCpyFormat: *rClpDoc.GetSpzFrameFormats()) - if(pCpyFormat->Which() != RES_FLYFRMFMT) - lcl_PasteFlyOrDrawFormat(rPaM, pCpyFormat, *this); - for(auto pCpyFormat: *rClpDoc.GetSpzFrameFormats()) - if(pCpyFormat->Which() == RES_FLYFRMFMT) - if(!lcl_PasteFlyOrDrawFormat(rPaM, pCpyFormat, *this)) - break; + ::std::vector<SwFrameFormat*> inserted; + for (auto const pFlyFormat : *rClpDoc.GetSpzFrameFormats()) + { + // if anchored inside other fly, will be copied when copying + // top-level fly, so skip here! (other non-body anchor + // shouldn't happen here) + SwFormatAnchor const& rAnchor(pFlyFormat->GetAnchor()); + if (RndStdIds::FLY_AT_PAGE == rAnchor.GetAnchorId() + || rClpDoc.GetNodes().GetEndOfExtras().GetIndex() < rAnchor.GetContentAnchor()->nNode.GetIndex()) + { + inserted.emplace_back( + lcl_PasteFlyOrDrawFormat(rPaM, pFlyFormat, *this)); + } + } + for (auto const pFlyFormat : inserted) + { + lcl_SelectFlyFormat(pFlyFormat, *this); + } } else { commit 474b1154c2eeadf3fef10d795ee96aeac9ac96fe Author: Julien Nabet <[email protected]> AuthorDate: Tue Jun 7 22:57:43 2022 +0200 Commit: Andras Timar <[email protected]> CommitDate: Thu Jun 9 11:02:07 2022 +0200 tdf#149470: Firebird, Clob may need several segments to store a very long input Change-Id: I85c7789f46d834d2ae1b251f915382f833bd529d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135480 Reviewed-by: Julien Nabet <[email protected]> (cherry picked from commit a943e7ddd13315b18d7b33cd1b2f852144f54344) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135392 Tested-by: Jenkins Reviewed-by: Caolán McNamara <[email protected]> diff --git a/connectivity/source/drivers/firebird/PreparedStatement.cxx b/connectivity/source/drivers/firebird/PreparedStatement.cxx index 392785b9c816..3209f9d02aea 100644 --- a/connectivity/source/drivers/firebird/PreparedStatement.cxx +++ b/connectivity/source/drivers/firebird/PreparedStatement.cxx @@ -52,6 +52,8 @@ using namespace com::sun::star::util; IMPLEMENT_SERVICE_INFO(OPreparedStatement,"com.sun.star.sdbcx.firebird.PreparedStatement","com.sun.star.sdbc.PreparedStatement"); +constexpr size_t MAX_SIZE_SEGMENT = 65535; // max value of a segment of CLOB, if we want more than 65535 bytes, we need more segments + OPreparedStatement::OPreparedStatement( Connection* _pConnection, const OUString& sql) @@ -663,10 +665,41 @@ void OPreparedStatement::setClob( sal_Int32 nParameterIndex, const OUString& rSt OString sData = OUStringToOString( rStr, RTL_TEXTENCODING_UTF8); - ISC_STATUS aErr = isc_put_segment( m_statusVector, + size_t nDataSize = sData.getLength(); + ISC_STATUS aErr = 0; + // we can't store more than MAX_SIZE_SEGMENT in a segment + if (nDataSize <= MAX_SIZE_SEGMENT) + { + aErr = isc_put_segment( m_statusVector, &aBlobHandle, sData.getLength(), sData.getStr() ); + } + else + { + // if we need more, let's split the input and first let's calculate the nb of entire chunks needed + size_t nNbEntireChunks = nDataSize / MAX_SIZE_SEGMENT; + for (size_t i = 0; i < nNbEntireChunks; ++i) + { + OString strCurrentChunk = sData.copy(i * MAX_SIZE_SEGMENT, MAX_SIZE_SEGMENT); + aErr = isc_put_segment( m_statusVector, + &aBlobHandle, + strCurrentChunk.getLength(), + strCurrentChunk.getStr() ); + if (aErr) + break; + } + size_t nRemainingBytes = nDataSize - (nNbEntireChunks * MAX_SIZE_SEGMENT); + if (nRemainingBytes && !aErr) + { + // then copy the remaining + OString strCurrentChunk = sData.copy(nNbEntireChunks * MAX_SIZE_SEGMENT, nRemainingBytes); + aErr = isc_put_segment( m_statusVector, + &aBlobHandle, + strCurrentChunk.getLength(), + strCurrentChunk.getStr() ); + } + } // We need to make sure we close the Blob even if there are errors, hence evaluate // errors after closing. commit cd40969931beed2e568366eb55f73a3471974d42 Author: Eike Rathke <[email protected]> AuthorDate: Mon Jun 6 14:34:34 2022 +0200 Commit: Andras Timar <[email protected]> CommitDate: Thu Jun 9 11:02:07 2022 +0200 Resolves: tdf#148163 Preserve names of bad cell reference input again A regression of commit e247262327d04ad9933f4af354050f4420c6e303 CommitDate: Tue Jul 30 23:49:55 2013 -0400 More on avoiding direct access to data members. that changed, for example, invalid sheet references - aRef.nTab = MAXTAB+3; + aRef.SetTabDeleted(true); The then following commit 8a19af57bbcc57a02a7d87c6408d1e3212a6deba CommitDate: Tue Jul 30 23:50:03 2013 -0400 Now nobody accesses reference members directly. Make them private. changed ScSingleRefData::Valid() - return nCol >= 0 && nCol <= MAXCOL && - nRow >= 0 && nRow <= MAXROW && - nTab >= 0 && nTab <= MAXTAB; + return ColValid() && RowValid() && TabValid(); without taking the deleted flags into account, where previous to commit e247262327d04ad9933f4af354050f4420c6e303 nTab > MAXTAB fulfilled the condition of not valid. This makes it necessary to adjust the TestFormula::testFuncRangeOp() test case that relied on the broken behaviour. Change-Id: I42e769ca0d56a2eb786bb6f65917f0c15d082763 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135453 Reviewed-by: Eike Rathke <[email protected]> Tested-by: Jenkins (cherry picked from commit 104596d005b32bd2bba15554e8c9ae740327aa46) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135379 Reviewed-by: Xisco Fauli <[email protected]> diff --git a/sc/qa/unit/ucalc_formula.cxx b/sc/qa/unit/ucalc_formula.cxx index 1693b2a0d6c8..5c9e723614f5 100644 --- a/sc/qa/unit/ucalc_formula.cxx +++ b/sc/qa/unit/ucalc_formula.cxx @@ -7411,8 +7411,8 @@ void TestFormula::testFuncRangeOp() // have to be adapted. aPos.IncRow(); m_pDoc->SetString( aPos, "=SUM(B1:Sheet2.B2:Sheet3.B3)"); - ASSERT_FORMULA_EQUAL(*m_pDoc, aPos, "SUM(#REF!.B2:#REF!.B3)", "Wrong formula."); - CPPUNIT_ASSERT_EQUAL( OUString("#REF!"), m_pDoc->GetString(aPos)); + ASSERT_FORMULA_EQUAL(*m_pDoc, aPos, "SUM(b1:sheet2.b2:Sheet3.B3)", "Wrong formula."); + CPPUNIT_ASSERT_EQUAL( OUString("#NAME?"), m_pDoc->GetString(aPos)); aPos.IncRow(); m_pDoc->SetString( aPos, "=SUM(Sheet1.B1:Sheet3.B2:Sheet2.B3)"); diff --git a/sc/source/core/tool/refdata.cxx b/sc/source/core/tool/refdata.cxx index ec18dc06f598..8bd55dfc92ec 100644 --- a/sc/source/core/tool/refdata.cxx +++ b/sc/source/core/tool/refdata.cxx @@ -129,7 +129,7 @@ bool ScSingleRefData::IsDeleted() const bool ScSingleRefData::Valid(const ScDocument& rDoc) const { - return ColValid(rDoc) && RowValid(rDoc) && TabValid(); + return !IsDeleted() && ColValid(rDoc) && RowValid(rDoc) && TabValid(); } bool ScSingleRefData::ColValid(const ScDocument& rDoc) const commit 9c9a9fed4558ca4b11d2d3615c94eedecee2efaa Author: Eike Rathke <[email protected]> AuthorDate: Tue Jun 7 15:36:03 2022 +0200 Commit: Andras Timar <[email protected]> CommitDate: Thu Jun 9 11:02:06 2022 +0200 Related: tdf#147390 Accept oc-FR-lengadoc and oc-ES-aranes for oc-FR and oc-ES ... as aliases for forward compatibility with the change in LO 7.4 Change-Id: I13848f982a0c76abd8e2186d81bbfc9770c89a7d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135473 Tested-by: Jenkins Reviewed-by: Adolfo Jayme Barrientos <[email protected]> diff --git a/i18nlangtag/qa/cppunit/test_languagetag.cxx b/i18nlangtag/qa/cppunit/test_languagetag.cxx index 84e363d01eb4..7b875c5832d5 100644 --- a/i18nlangtag/qa/cppunit/test_languagetag.cxx +++ b/i18nlangtag/qa/cppunit/test_languagetag.cxx @@ -749,6 +749,8 @@ bool checkMapping( std::u16string_view rStr1, std::u16string_view rStr2 ) if (rStr1 == u"cmn-CN" ) return rStr2 == u"zh-CN"; if (rStr1 == u"cmn-TW" ) return rStr2 == u"zh-TW"; if (rStr1 == u"kw-UK" ) return rStr2 == u"kw-GB"; + if (rStr1 == u"oc-FR-lengadoc" ) return rStr2 == u"oc-FR"; + if (rStr1 == u"oc-ES-aranes" ) return rStr2 == u"oc-ES"; return rStr1 == rStr2; } diff --git a/i18nlangtag/source/isolang/isolang.cxx b/i18nlangtag/source/isolang/isolang.cxx index 5d0a23c1f6d7..2a7a46763886 100644 --- a/i18nlangtag/source/isolang/isolang.cxx +++ b/i18nlangtag/source/isolang/isolang.cxx @@ -778,6 +778,8 @@ Bcp47CountryEntry const aImplBcp47CountryEntries[] = { LANGUAGE_USER_ENGLISH_UK_OED, "en-GB-oed", "GB", "", LANGUAGE_USER_ENGLISH_UK_OXENDICT }, // grandfathered, deprecated, prefer en-GB-oxendict { LANGUAGE_SPANISH_DATED, "es-ES-u-co-trad", "ES", "es-u-co-trad", k0 }, // RFC6067/CLDR { LANGUAGE_SPANISH_DATED, "es-ES_tradnl", "ES", "", kSAME }, // MS malformed + { LANGUAGE_OCCITAN_FRANCE, "oc-FR-lengadoc", "FR", "oc-lengadoc", kSAME }, // forward compatibility + { LANGUAGE_USER_OCCITAN_ARANESE, "oc-ES-aranes", "ES", "oc-aranes", kSAME }, // forward compatibility // { LANGUAGE_YUE_CHINESE_HONGKONG, "zh-yue-HK", "HK", "", 0 }, // MS reserved, prefer yue-HK; do not add unless LanguageTag::simpleExtract() can handle it to not call liblangtag for rsc! { LANGUAGE_YIDDISH, "yi-001", "", "", k0 }, // MS since rev.15, was "yi-Hebr" reserved, "001"="World" { LANGUAGE_FRENCH_WEST_INDIES, "fr-029", "", "", k0 }, // MS since rev.15, was "Neither defined nor reserved", "029"="Caribbean" commit fb4b7c63bda11451dd883618c58628d1050c17fb Author: Michael Stahl <[email protected]> AuthorDate: Sun May 22 13:50:11 2022 +0200 Commit: Andras Timar <[email protected]> CommitDate: Thu Jun 9 11:02:06 2022 +0200 sw: SwNodeIndex GCC12 spurious -Werror=dangling-pointer= It doesn't understand that ~SwNodeIndex() will remove the pointer, which is obfuscated by over-boostified code. In member function ‘void SwNodeIndex::RegisterIndex(SwNodes&)’, inlined from ‘SwNodeIndex::SwNodeIndex(SwNodes&, SwNodeOffset)’ at sw/inc/ndindex.hxx:54:22, inlined from ‘bool SwNodes::InsBoxen(SwTableNode*, SwTableLine*, SwTableBoxFormat*, SwTextFormatColl*, const SfxItemSet*, sal_uInt16, sal_uInt16)’ at sw/source/core/docnode/ndtbl.cxx:301:41: sw/inc/ndindex.hxx:37:31: error: storing the address of local variable ‘aEndIdx’ in ‘*this.SwNodes::m_vIndices’ [-Werror=dangling-pointer=] 37 | rNodes.m_vIndices = this; | ~~~~~~~~~~~~~~~~~~^~~~~~ sw/source/core/docnode/ndtbl.cxx: In member function ‘bool SwNodes::InsBoxen(SwTableNode*, SwTableLine*, SwTableBoxFormat*, SwTextFormatColl*, const SfxItemSet*, sal_uInt16, sal_uInt16)’: sw/source/core/docnode/ndtbl.cxx:301:17: note: ‘aEndIdx’ declared here 301 | SwNodeIndex aEndIdx( *this, nIdxPos ); | ^~~~~~~ sw/source/core/docnode/ndtbl.cxx:301:17: note: ‘<unknown>’ declared here Change-Id: I3f24cd8e3e0b1fd0a0943150d3d83d09f2c984fc Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134741 Tested-by: Jenkins Reviewed-by: Michael Stahl <[email protected]> (cherry picked from commit 486991b8ec2b63324c8cf5a26e9091942c24b3d9) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134774 Reviewed-by: Thorsten Behrens <[email protected]> diff --git a/sw/inc/ndindex.hxx b/sw/inc/ndindex.hxx index 7d03b0bcadaf..64201ac3e1b3 100644 --- a/sw/inc/ndindex.hxx +++ b/sw/inc/ndindex.hxx @@ -36,7 +36,16 @@ class SW_DLLPUBLIC SwNodeIndex final : public sw::Ring<SwNodeIndex> void RegisterIndex( SwNodes& rNodes ) { if(!rNodes.m_vIndices) + { +#if defined(__GNUC__) && __GNUC__ == 12 +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdangling-pointer" +#endif rNodes.m_vIndices = this; +#if defined(__GNUC__) && __GNUC__ == 12 +#pragma GCC diagnostic pop +#endif + } MoveTo(rNodes.m_vIndices); } void DeRegisterIndex( SwNodes& rNodes ) commit eeca80a49fc05b5ec7162b7783f4fd734e99943e Author: Michael Stahl <[email protected]> AuthorDate: Sun May 22 13:25:50 2022 +0200 Commit: Andras Timar <[email protected]> CommitDate: Thu Jun 9 11:02:06 2022 +0200 svx: work around GCC12 spurious -Werror=stringop-overflow /usr/include/c++/12/bits/stl_algobase.h:431:30: error: ‘void* __builtin_memcpy(void*, const void*, long unsigned int)’ writing 1 or more bytes into a region of size 0 overflows the destination [-Werror=stringop-overflow=] Change-Id: Ib581b5788ff5d363b688000e700a42074c3b78eb Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134740 Tested-by: Jenkins Reviewed-by: Michael Stahl <[email protected]> (cherry picked from commit d37486537e7d404b19acdfaec358cb0ad706940c) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134633 Reviewed-by: Thorsten Behrens <[email protected]> diff --git a/svx/source/form/formcontrolling.cxx b/svx/source/form/formcontrolling.cxx index 456e5a88ffbf..221ae3584f21 100644 --- a/svx/source/form/formcontrolling.cxx +++ b/svx/source/form/formcontrolling.cxx @@ -425,6 +425,7 @@ namespace svx SID_FM_VIEW_AS_GRID }; sal_Int32 nFeatureCount = SAL_N_ELEMENTS( pSupportedFeatures ); + aSupportedFeatures.reserve(nFeatureCount); // work around GCC12 spurious -Werror=stringop-overflow= aSupportedFeatures.insert( aSupportedFeatures.begin(), pSupportedFeatures, pSupportedFeatures + nFeatureCount ); m_pInvalidationCallback->invalidateFeatures( aSupportedFeatures ); commit 2c4909def706e28168398b95af179d003bc25106 Author: Andreas Heinisch <[email protected]> AuthorDate: Fri Jun 3 09:41:05 2022 +0200 Commit: Andras Timar <[email protected]> CommitDate: Thu Jun 9 11:02:06 2022 +0200 tdf#149402 - BASIC: Don't extend comment if line ends in a whitespace Change-Id: I8adf530e77a0e65329fa59ac2873b99f48befac4 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135336 Tested-by: Jenkins Reviewed-by: Andreas Heinisch <[email protected]> (cherry picked from commit fbce18558a58cddf910b788a67c2f2d4d25d68e9) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135378 Reviewed-by: Xisco Fauli <[email protected]> diff --git a/basic/qa/cppunit/test_compiler_checks.cxx b/basic/qa/cppunit/test_compiler_checks.cxx index e2882f3f694c..044977670e62 100644 --- a/basic/qa/cppunit/test_compiler_checks.cxx +++ b/basic/qa/cppunit/test_compiler_checks.cxx @@ -73,4 +73,45 @@ CPPUNIT_TEST_FIXTURE(CppUnit::TestFixture, testTdf149157_vba) CPPUNIT_ASSERT(!aMacro.HasError()); } +CPPUNIT_TEST_FIXTURE(CppUnit::TestFixture, testTdf149402) +{ + MacroSnippet aMacro("Function extentComment() As Integer\n" + " ' _ \n" + " If Not extentComment Then\n" + " extentComment = 1\n" + " Else\n" + " End If\n" + "End Function\n"); + aMacro.Compile(); + CPPUNIT_ASSERT(!aMacro.HasError()); +} + +CPPUNIT_TEST_FIXTURE(CppUnit::TestFixture, testTdf149402_compatible) +{ + MacroSnippet aMacro("Option Compatible\n" + "Function extentComment() As Integer\n" + " ' _ \n" + " If Not extentComment Then\n" + " extentComment = 1\n" + " Else\n" + " End If\n" + "End Function\n"); + aMacro.Compile(); + CPPUNIT_ASSERT(!aMacro.HasError()); +} + +CPPUNIT_TEST_FIXTURE(CppUnit::TestFixture, testTdf149402_vba) +{ + MacroSnippet aMacro("Option VBASupport 1\n" + "Function extentComment() As Integer\n" + " ' _ \n" + " If Not extentComment Then\n" + " extentComment = 1\n" + " Else\n" + " End If\n" + "End Function\n"); + aMacro.Compile(); + CPPUNIT_ASSERT(!aMacro.HasError()); +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/basic/source/comp/scanner.cxx b/basic/source/comp/scanner.cxx index d391e7b6dff2..8c63dcd6643c 100644 --- a/basic/source/comp/scanner.cxx +++ b/basic/source/comp/scanner.cxx @@ -53,6 +53,7 @@ SbiScanner::SbiScanner(const OUString& rBuf, StarBASIC* p) , bVBASupportOn(false) , bPrevLineExtentsComment(false) , bClosingUnderscore(false) + , bLineEndsWithWhitespace(false) , bInStatement(false) { } @@ -186,6 +187,8 @@ bool SbiScanner::readLine() while(nBufPos < nEnd && BasicCharClass::isWhitespace(aBuf[nEnd - 1])) --nEnd; + // tdf#149402 - check if line ends with a whitespace + bLineEndsWithWhitespace = (n > nEnd); aLine = aBuf.copy(nBufPos, nEnd - nBufPos); // Fast-forward past the line ending @@ -663,7 +666,9 @@ PrevLineCommentLbl: bPrevLineExtentsComment = false; aSym = "REM"; sal_Int32 nLen = aLine.getLength() - nLineIdx; - if( bCompatible && aLine[nLineIdx + nLen - 1] == '_' && aLine[nLineIdx + nLen - 2] == ' ' ) + // tdf#149402 - don't extend comment if line ends in a whitespace (asicCharClass::isWhitespace) + if (bCompatible && !bLineEndsWithWhitespace && aLine[nLineIdx + nLen - 1] == '_' + && aLine[nLineIdx + nLen - 2] == ' ') bPrevLineExtentsComment = true; nCol2 = nCol2 + nLen; nLineIdx = -1; diff --git a/basic/source/inc/scanner.hxx b/basic/source/inc/scanner.hxx index 39dda9fa391c..cc3cbb5d7b41 100644 --- a/basic/source/inc/scanner.hxx +++ b/basic/source/inc/scanner.hxx @@ -62,6 +62,7 @@ protected: bool bVBASupportOn; // true: OPTION VBASupport 1 otherwise default False bool bPrevLineExtentsComment; // true: Previous line is comment and ends on "... _" bool bClosingUnderscore; // true: Closing underscore followed by end of line + bool bLineEndsWithWhitespace; // true: Line ends with whitespace (BasicCharClass::isWhitespace) bool bInStatement; void GenError( ErrCode ); commit 5e48e5dfa8bb9cb5f98e992c24967959afd24abe Author: Caolán McNamara <[email protected]> AuthorDate: Thu May 26 15:52:38 2022 +0100 Commit: Andras Timar <[email protected]> CommitDate: Thu Jun 9 11:02:06 2022 +0200 tdf#147708 create floating menubutton on demand and destroy when it is fully faded out. Otherwise windows runs out of gdi handles with document with large number of page breaks todo: rename some things in a follow up commit after this more easily backportable commit is merged Change-Id: Ibbe3cd00d1027ac34915c4bff73e3a330e300f38 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135138 Tested-by: Jenkins Reviewed-by: Adolfo Jayme Barrientos <[email protected]> diff --git a/sw/source/uibase/docvw/FrameControlsManager.cxx b/sw/source/uibase/docvw/FrameControlsManager.cxx index 75ad1b600ed9..1e1387020baa 100644 --- a/sw/source/uibase/docvw/FrameControlsManager.cxx +++ b/sw/source/uibase/docvw/FrameControlsManager.cxx @@ -127,7 +127,7 @@ void SwFrameControlsManager::SetPageBreakControl( const SwPageFrame* pPageFrame else { SwFrameControlPtr pNewControl = std::make_shared<SwFrameControl>( - VclPtr<SwPageBreakWin>::Create( m_pEditWin, pPageFrame ).get() ); + VclPtr<SwBreakDashedLine>::Create( m_pEditWin, pPageFrame ).get() ); const SwViewOption* pViewOpt = m_pEditWin->GetView().GetWrtShell().GetViewOptions(); pNewControl->SetReadonly( pViewOpt->IsReadonly() ); @@ -136,7 +136,7 @@ void SwFrameControlsManager::SetPageBreakControl( const SwPageFrame* pPageFrame pControl.swap( pNewControl ); } - SwPageBreakWin* pWin = static_cast<SwPageBreakWin *>(pControl->GetWindow()); + SwBreakDashedLine* pWin = static_cast<SwBreakDashedLine*>(pControl->GetWindow()); assert (pWin != nullptr); pWin->UpdatePosition(); if (!pWin->IsVisible()) @@ -215,15 +215,20 @@ void SwFrameControlsManager::SetOutlineContentVisibilityButton(const SwContentFr pWin->ShowAll(true); } -const SwPageFrame* SwFrameMenuButtonBase::GetPageFrame() const +const SwPageFrame* SwFrameMenuButtonBase::GetPageFrame(const SwFrame* pFrame) { - if (m_pFrame->IsPageFrame()) - return static_cast<const SwPageFrame*>( m_pFrame ); + if (pFrame->IsPageFrame()) + return static_cast<const SwPageFrame*>(pFrame); + + if (pFrame->IsFlyFrame()) + return static_cast<const SwFlyFrame*>(pFrame)->GetAnchorFrame()->FindPageFrame(); - if (m_pFrame->IsFlyFrame()) - return static_cast<const SwFlyFrame*>(m_pFrame)->GetAnchorFrame()->FindPageFrame(); + return pFrame->FindPageFrame(); +} - return m_pFrame->FindPageFrame(); +const SwPageFrame* SwFrameMenuButtonBase::GetPageFrame() const +{ + return SwFrameMenuButtonBase::GetPageFrame(m_pFrame); } void SwFrameMenuButtonBase::dispose() @@ -234,11 +239,16 @@ void SwFrameMenuButtonBase::dispose() InterimItemWindow::dispose(); } -void SwFrameMenuButtonBase::SetVirDevFont() +void SwFrameMenuButtonBase::SetVirDevFont(OutputDevice& rVirDev) { // Get the font and configure it vcl::Font aFont = Application::GetSettings().GetStyleSettings().GetToolFont(); - weld::SetPointFont(*m_xVirDev, aFont); + weld::SetPointFont(rVirDev, aFont); +} + +void SwFrameMenuButtonBase::SetVirDevFont() +{ + SetVirDevFont(*m_xVirDev); } SwFrameControl::SwFrameControl( const VclPtr<vcl::Window> &pWindow ) diff --git a/sw/source/uibase/docvw/PageBreakWin.cxx b/sw/source/uibase/docvw/PageBreakWin.cxx index 3fcd9063efc1..2db9b5141cec 100644 --- a/sw/source/uibase/docvw/PageBreakWin.cxx +++ b/sw/source/uibase/docvw/PageBreakWin.cxx @@ -59,69 +59,91 @@ using namespace basegfx; using namespace basegfx::utils; -namespace +SwBreakDashedLine::SwBreakDashedLine(SwEditWin* pEditWin, const SwFrame *pFrame) + : SwDashedLine(pEditWin, &SwViewOption::GetPageBreakColor) + , m_pEditWin(pEditWin) + , m_pFrame(pFrame) { - class SwBreakDashedLine : public SwDashedLine - { - private: - VclPtr<SwPageBreakWin> m_pWin; + set_id("PageBreak"); // for uitest +} - public: - SwBreakDashedLine( vcl::Window* pParent, Color& ( *pColorFn )(), SwPageBreakWin* pWin ) : - SwDashedLine( pParent, pColorFn ), - m_pWin( pWin ) {}; - virtual ~SwBreakDashedLine() override { disposeOnce(); } - virtual void dispose() override { m_pWin.clear(); SwDashedLine::dispose(); } +SwPageBreakWin& SwBreakDashedLine::GetOrCreateWin() +{ + if (!m_pWin) + { + m_pWin = VclPtr<SwPageBreakWin>::Create(this, m_pEditWin, m_pFrame); + m_pWin->SetPosSizePixel(m_aBtnRect.TopLeft(), m_aBtnRect.GetSize()); + m_pWin->SetZOrder(this, ZOrderFlags::Before); + } + return *m_pWin; +} - virtual void MouseMove( const MouseEvent& rMEvt ) override; - }; +void SwBreakDashedLine::DestroyWin() +{ + m_pWin.disposeAndClear(); +} - void SwBreakDashedLine::MouseMove( const MouseEvent& rMEvt ) +void SwBreakDashedLine::MouseMove( const MouseEvent& rMEvt ) +{ + if ( rMEvt.IsLeaveWindow() ) { - if ( rMEvt.IsLeaveWindow() ) - { - // don't fade if we just move to the 'button' - Point aEventPos( GetPosPixel() + rMEvt.GetPosPixel() ); - if ( !m_pWin->Contains( aEventPos ) || !m_pWin->IsVisible() ) - m_pWin->Fade( false ); - } - else if ( !m_pWin->IsVisible() ) - { - m_pWin->Fade( true ); - } + // don't fade if we just move to the 'button' + Point aEventPos( GetPosPixel() + rMEvt.GetPosPixel() ); + if (m_pWin && (!Contains(aEventPos) || !m_pWin->IsVisible())) + m_pWin->Fade(false); + } + else if (!m_pWin || !m_pWin->IsVisible()) + { + GetOrCreateWin().Fade(true); + } - if ( !rMEvt.IsSynthetic() && !m_pWin->IsVisible() ) - { - m_pWin->UpdatePosition( rMEvt.GetPosPixel() ); - } + if (!rMEvt.IsSynthetic() && (!m_pWin || !m_pWin->IsVisible())) + { + UpdatePosition(rMEvt.GetPosPixel()); } } -SwPageBreakWin::SwPageBreakWin( SwEditWin* pEditWin, const SwFrame *pFrame ) : - SwFrameMenuButtonBase(pEditWin, pFrame, "modules/swriter/ui/pbmenubutton.ui", "PBMenuButton"), +void SwBreakDashedLine::ShowAll(bool bShow) +{ + Show(bShow); +} + +void SwBreakDashedLine::SetReadonly(bool bReadonly) +{ + ShowAll(!bReadonly); +} + +bool SwBreakDashedLine::Contains(const Point &rDocPt) const +{ + if (m_aBtnRect.Contains(rDocPt)) + return true; + + ::tools::Rectangle aLineRect(GetPosPixel(), GetSizePixel()); + return aLineRect.Contains(rDocPt); +} + +SwPageBreakWin::SwPageBreakWin(SwBreakDashedLine* pLine, SwEditWin* pEditWin, const SwFrame *pFrame) : + InterimItemWindow(pEditWin, "modules/swriter/ui/pbmenubutton.ui", "PBMenuButton"), m_xMenuButton(m_xBuilder->weld_menu_button("menubutton")), - m_pLine( nullptr ), + m_pLine(pLine), + m_pEditWin(pEditWin), + m_pFrame(pFrame), m_bIsAppearing( false ), m_nFadeRate( 100 ), m_nDelayAppearing( 0 ), m_aFadeTimer("SwPageBreakWin m_aFadeTimer"), m_bDestroyed( false ) { - set_id("PageBreak"); // for uitest - m_xMenuButton->connect_toggled(LINK(this, SwPageBreakWin, ToggleHdl)); m_xMenuButton->connect_selected(LINK(this, SwPageBreakWin, SelectHdl)); m_xMenuButton->set_accessible_name(SwResId(STR_PAGE_BREAK_BUTTON)); m_xVirDev = m_xMenuButton->create_virtual_device(); - SetVirDevFont(); + SwFrameMenuButtonBase::SetVirDevFont(*m_xVirDev); // Use pixels for the rest of the drawing m_xVirDev->SetMapMode( MapMode ( MapUnit::MapPixel ) ); - // Create the line control - m_pLine = VclPtr<SwBreakDashedLine>::Create( GetEditWin(), &SwViewOption::GetPageBreakColor, this ); - m_aFadeTimer.SetTimeout( 50 ); m_aFadeTimer.SetInvokeHandler( LINK( this, SwPageBreakWin, FadeHandler ) ); } @@ -136,10 +158,12 @@ void SwPageBreakWin::dispose() m_bDestroyed = true; m_aFadeTimer.Stop(); m_xVirDev.disposeAndClear(); - m_pLine.disposeAndClear(); + + m_pLine.clear(); + m_pEditWin.clear(); m_xMenuButton.reset(); - SwFrameMenuButtonBase::dispose(); + InterimItemWindow::dispose(); } void SwPageBreakWin::PaintButton() @@ -241,26 +265,27 @@ static SvxBreak lcl_GetBreakItem(const SwContentFrame* pCnt) IMPL_LINK(SwPageBreakWin, SelectHdl, const OString&, rIdent, void) { - SwFrameControlPtr pThis = GetEditWin()->GetFrameControlsManager( ).GetControl( FrameControlType::PageBreak, GetFrame() ); + SwFrameControlPtr pFrameControl = m_pEditWin->GetFrameControlsManager().GetControl(FrameControlType::PageBreak, m_pFrame); - execute(rIdent); + m_pLine->execute(rIdent); // Only fade if there is more than this temporary shared pointer: // The main reference has been deleted due to a page break removal - if ( pThis.use_count() > 1 ) + if (pFrameControl.use_count() > 1) Fade( false ); } -void SwPageBreakWin::execute(std::string_view rIdent) +void SwBreakDashedLine::execute(std::string_view rIdent) { + const SwPageFrame* pPageFrame = SwFrameMenuButtonBase::GetPageFrame(m_pFrame); // Is there a PageBefore break on this page? - SwContentFrame *pCnt = const_cast<SwContentFrame*>(GetPageFrame()->FindFirstBodyContent()); + SwContentFrame *pCnt = const_cast<SwContentFrame*>(pPageFrame->FindFirstBodyContent()); SvxBreak eBreak = lcl_GetBreakItem( pCnt ); // Also check the previous page - to see if there is a PageAfter break SwContentFrame *pPrevCnt = nullptr; SvxBreak ePrevBreak = SvxBreak::NONE; - const SwPageFrame* pPrevPage = static_cast<const SwPageFrame*>(GetPageFrame()->GetPrev()); + const SwPageFrame* pPrevPage = static_cast<const SwPageFrame*>(pPageFrame->GetPrev()); if ( pPrevPage ) { pPrevCnt = const_cast<SwContentFrame*>(pPrevPage->FindLastBodyContent()); @@ -269,9 +294,7 @@ void SwPageBreakWin::execute(std::string_view rIdent) if (pCnt && rIdent == "edit") { - SwEditWin* pEditWin = GetEditWin(); - - SwWrtShell& rSh = pEditWin->GetView().GetWrtShell(); + SwWrtShell& rSh = m_pEditWin->GetView().GetWrtShell(); bool bOldLock = rSh.IsViewLocked(); rSh.LockView( true ); @@ -290,8 +313,8 @@ void SwPageBreakWin::execute(std::string_view rIdent) rSh.SetSelection( rNd ); - SfxStringItem aItem(pEditWin->GetView().GetPool().GetWhich(FN_FORMAT_TABLE_DLG), "textflow"); - pEditWin->GetView().GetViewFrame()->GetDispatcher()->ExecuteList( + SfxStringItem aItem(m_pEditWin->GetView().GetPool().GetWhich(FN_FORMAT_TABLE_DLG), "textflow"); + m_pEditWin->GetView().GetViewFrame()->GetDispatcher()->ExecuteList( FN_FORMAT_TABLE_DLG, SfxCallMode::SYNCHRON | SfxCallMode::RECORD, { &aItem }); @@ -301,15 +324,15 @@ void SwPageBreakWin::execute(std::string_view rIdent) else { SwPaM aPaM( rNd ); - SwPaMItem aPaMItem( pEditWin->GetView().GetPool( ).GetWhich( FN_PARAM_PAM ), &aPaM ); - SfxStringItem aItem( pEditWin->GetView().GetPool( ).GetWhich( SID_PARA_DLG ), "textflow" ); - pEditWin->GetView().GetViewFrame()->GetDispatcher()->ExecuteList( + SwPaMItem aPaMItem( m_pEditWin->GetView().GetPool( ).GetWhich( FN_PARAM_PAM ), &aPaM ); + SfxStringItem aItem( m_pEditWin->GetView().GetPool( ).GetWhich( SID_PARA_DLG ), "textflow" ); + m_pEditWin->GetView().GetViewFrame()->GetDispatcher()->ExecuteList( SID_PARA_DLG, SfxCallMode::SYNCHRON | SfxCallMode::RECORD, { &aItem, &aPaMItem }); } rSh.LockView( bOldLock ); - pEditWin->GrabFocus( ); + m_pEditWin->GrabFocus( ); } else if (pCnt && rIdent == "delete") { @@ -320,7 +343,7 @@ void SwPageBreakWin::execute(std::string_view rIdent) rNd.GetDoc().GetIDocumentUndoRedo( ).StartUndo( SwUndoId::UI_DELETE_PAGE_BREAK, nullptr ); SfxItemSetFixed<RES_PAGEDESC, RES_BREAK> aSet( - GetEditWin()->GetView().GetWrtShell().GetAttrPool()); + m_pEditWin->GetView().GetWrtShell().GetAttrPool()); aSet.Put( SwFormatPageDesc( nullptr ) ); // This break could be from the current paragraph, if it has a PageBefore break. @@ -328,7 +351,7 @@ void SwPageBreakWin::execute(std::string_view rIdent) aSet.Put( SvxFormatBreakItem( SvxBreak::NONE, RES_BREAK ) ); rNd.GetDoc().getIDocumentContentOperations().InsertItemSet( - SwPaM(rNd), aSet, SetAttrMode::DEFAULT, GetPageFrame()->getRootFrame()); + SwPaM(rNd), aSet, SetAttrMode::DEFAULT, pPageFrame->getRootFrame()); // This break could be from the previous paragraph, if it has a PageAfter break. if ( ePrevBreak == SvxBreak::PageAfter ) @@ -346,7 +369,7 @@ void SwPageBreakWin::execute(std::string_view rIdent) } } -void SwPageBreakWin::UpdatePosition(const std::optional<Point>& xEvtPt) +void SwBreakDashedLine::UpdatePosition(const std::optional<Point>& xEvtPt) { if ( xEvtPt ) { @@ -355,7 +378,7 @@ void SwPageBreakWin::UpdatePosition(const std::optional<Point>& xEvtPt) m_xMousePt = xEvtPt; } - const SwPageFrame* pPageFrame = GetPageFrame(); + const SwPageFrame* pPageFrame = SwFrameMenuButtonBase::GetPageFrame(m_pFrame); const SwFrame* pPrevPage = pPageFrame; do { @@ -408,34 +431,20 @@ void SwPageBreakWin::UpdatePosition(const std::optional<Point>& xEvtPt) } // Set the button position - Point aBtnPos( nBtnLeft, nYLineOffset - BUTTON_HEIGHT / 2 ); - SetPosSizePixel( aBtnPos, aBtnSize ); - m_xVirDev->SetOutputSizePixel(aBtnSize); + m_aBtnRect = ::tools::Rectangle(Point(nBtnLeft, nYLineOffset - BUTTON_HEIGHT / 2), aBtnSize); + if (m_pWin) + m_pWin->SetRectanglePixel(m_aBtnRect); // Set the line position Point aLinePos( nLineLeft, nYLineOffset - 5 ); Size aLineSize( nLineRight - nLineLeft, 10 ); - m_pLine->SetPosSizePixel( aLinePos, aLineSize ); -} - -void SwPageBreakWin::ShowAll( bool bShow ) -{ - m_pLine->Show( bShow ); + SetPosSizePixel(aLinePos, aLineSize); } -bool SwPageBreakWin::Contains( const Point &rDocPt ) const +void SwPageBreakWin::SetRectanglePixel(const ::tools::Rectangle& rRect) { - ::tools::Rectangle aRect( GetPosPixel(), GetSizePixel() ); - if ( aRect.Contains( rDocPt ) ) - return true; - - ::tools::Rectangle aLineRect( m_pLine->GetPosPixel(), m_pLine->GetSizePixel() ); - return aLineRect.Contains( rDocPt ); -} - -void SwPageBreakWin::SetReadonly( bool bReadonly ) -{ - ShowAll( !bReadonly ); + SetPosSizePixel(rRect.TopLeft(), rRect.GetSize()); + m_xVirDev->SetOutputSizePixel(rRect.GetSize()); } void SwPageBreakWin::Fade( bool bFadeIn ) @@ -474,10 +483,13 @@ IMPL_LINK_NOARG(SwPageBreakWin, FadeHandler, Timer *, void) if ( m_nFadeRate != 100 && !IsVisible() ) Show(); else if ( m_nFadeRate == 100 && IsVisible( ) ) + { Hide(); + m_pLine->DestroyWin(); + } else { - UpdatePosition(); + m_pLine->UpdatePosition(); PaintButton(); } @@ -485,7 +497,7 @@ IMPL_LINK_NOARG(SwPageBreakWin, FadeHandler, Timer *, void) m_aFadeTimer.Start(); } -FactoryFunction SwPageBreakWin::GetUITestFactory() const +FactoryFunction SwBreakDashedLine::GetUITestFactory() const { return PageBreakUIObject::create; } diff --git a/sw/source/uibase/inc/FrameControl.hxx b/sw/source/uibase/inc/FrameControl.hxx index e53c765bf831..561dac78fcb7 100644 --- a/sw/source/uibase/inc/FrameControl.hxx +++ b/sw/source/uibase/inc/FrameControl.hxx @@ -73,6 +73,9 @@ public: virtual const SwFrame* GetFrame() override { return m_pFrame; } virtual SwEditWin* GetEditWin() override { return m_pEditWin; } const SwPageFrame* GetPageFrame() const; + + static const SwPageFrame* GetPageFrame(const SwFrame* pFrame); + static void SetVirDevFont(OutputDevice& rDevice); }; #endif diff --git a/sw/source/uibase/inc/PageBreakWin.hxx b/sw/source/uibase/inc/PageBreakWin.hxx index 53d2eec4c1a9..1806290d1817 100644 --- a/sw/source/uibase/inc/PageBreakWin.hxx +++ b/sw/source/uibase/inc/PageBreakWin.hxx @@ -10,6 +10,7 @@ #define INCLUDED_SW_SOURCE_UIBASE_INC_PAGEBREAKWIN_HXX #include "edtwin.hxx" +#include "DashedLine.hxx" #include "FrameControl.hxx" #include <vcl/timer.hxx> #include <optional> @@ -17,39 +18,72 @@ class Menu; class SwPageFrame; +class SwPageBreakWin; + /** Class for the page break control window. This control shows a line indicating a manual page break and a button providing a few actions on that page break. */ -class SwPageBreakWin final : public SwFrameMenuButtonBase +class SwBreakDashedLine : public SwDashedLine, public ISwFrameControl +{ +private: + VclPtr<SwPageBreakWin> m_pWin; + VclPtr<SwEditWin> m_pEditWin; + std::optional<Point> m_xMousePt; + ::tools::Rectangle m_aBtnRect; + const SwFrame* m_pFrame; + + SwPageBreakWin& GetOrCreateWin(); + +public: + SwBreakDashedLine(SwEditWin* pEditWin, const SwFrame *pFrame); + + virtual ~SwBreakDashedLine() override { disposeOnce(); } + virtual void dispose() override { m_pWin.disposeAndClear(); m_pEditWin.clear(); SwDashedLine::dispose(); } + + virtual void MouseMove(const MouseEvent& rMEvt) override; + + virtual const SwFrame* GetFrame() override { return m_pFrame; } + virtual SwEditWin* GetEditWin() override { return m_pEditWin; } + virtual void ShowAll(bool bShow) override; + virtual bool Contains(const Point &rDocPt) const override; + virtual void SetReadonly(bool bReadonly) override; + + void execute(std::string_view rIdent); + + virtual FactoryFunction GetUITestFactory() const override; + + void UpdatePosition(const std::optional<Point>& xEvtPt = std::optional<Point>()); + void DestroyWin(); +}; + +class SwPageBreakWin final : public InterimItemWindow { std::unique_ptr<weld::MenuButton> m_xMenuButton; - VclPtr<vcl::Window> m_pLine; + VclPtr<SwBreakDashedLine> m_pLine; + VclPtr<SwEditWin> m_pEditWin; + VclPtr<VirtualDevice> m_xVirDev; + const SwFrame* m_pFrame; bool m_bIsAppearing; int m_nFadeRate; int m_nDelayAppearing; ///< Before we show the control, let it transparent for a few timer ticks to avoid appearing with every mouse over. Timer m_aFadeTimer; bool m_bDestroyed; - std::optional<Point> m_xMousePt; - public: - SwPageBreakWin( SwEditWin* pEditWin, const SwFrame *pFrame ); + SwPageBreakWin(SwBreakDashedLine* pLine, SwEditWin* pEditWin, const SwFrame *pFrame); virtual ~SwPageBreakWin() override; virtual void dispose() override; - void execute(std::string_view rIdent); - void UpdatePosition(const std::optional<Point>& xEvtPt = std::optional<Point>()); - - virtual void ShowAll( bool bShow ) override; - virtual bool Contains( const Point &rDocPt ) const override; - - void SetReadonly( bool bReadonly ) override; - void Fade( bool bFadeIn ); - virtual FactoryFunction GetUITestFactory() const override; + void SetRectanglePixel(const ::tools::Rectangle& rRect); + + const SwPageFrame* GetPageFrame() const + { + return SwFrameMenuButtonBase::GetPageFrame(m_pFrame); + } private: DECL_LINK( FadeHandler, Timer *, void ); diff --git a/sw/source/uibase/inc/uiobject.hxx b/sw/source/uibase/inc/uiobject.hxx index 248654023e32..1e08e64ef324 100644 --- a/sw/source/uibase/inc/uiobject.hxx +++ b/sw/source/uibase/inc/uiobject.hxx @@ -66,7 +66,7 @@ class PageBreakUIObject final : public WindowUIObject { public: - PageBreakUIObject(const VclPtr<SwPageBreakWin>& xEditWin); + PageBreakUIObject(const VclPtr<SwBreakDashedLine>& xEditWin); virtual void execute(const OUString& rAction, const StringMap& rParameters) override; @@ -77,7 +77,7 @@ private: virtual OUString get_name() const override; - VclPtr<SwPageBreakWin> mxPageBreakUIObject; + VclPtr<SwBreakDashedLine> mxPageBreakUIObject; }; diff --git a/sw/source/uibase/uitest/uiobject.cxx b/sw/source/uibase/uitest/uiobject.cxx index 5f8a408c4b85..cb773c87aba4 100644 --- a/sw/source/uibase/uitest/uiobject.cxx +++ b/sw/source/uibase/uitest/uiobject.cxx @@ -220,7 +220,7 @@ OUString CommentUIObject::get_name() const return "CommentUIObject"; } -PageBreakUIObject::PageBreakUIObject(const VclPtr<SwPageBreakWin>& xPageBreakUIObject): +PageBreakUIObject::PageBreakUIObject(const VclPtr<SwBreakDashedLine>& xPageBreakUIObject): WindowUIObject(xPageBreakUIObject), mxPageBreakUIObject(xPageBreakUIObject) { @@ -237,7 +237,7 @@ void PageBreakUIObject::execute(const OUString& rAction, std::unique_ptr<UIObject> PageBreakUIObject::create(vcl::Window* pWindow) { - SwPageBreakWin* pPageBreakWin = dynamic_cast<SwPageBreakWin*>(pWindow); + SwBreakDashedLine* pPageBreakWin = dynamic_cast<SwBreakDashedLine*>(pWindow); assert(pPageBreakWin); return std::unique_ptr<UIObject>(new PageBreakUIObject(pPageBreakWin)); } commit f328068f5d337d8cbdff67d1a55fb359759c4874 Author: Noel Grandin <[email protected]> AuthorDate: Sat Jun 4 18:42:53 2022 +0200 Commit: Andras Timar <[email protected]> CommitDate: Thu Jun 9 11:02:06 2022 +0200 tdf#149304 Stylist does not show upper/lower case font effects SvxFont has code to handle these extra features, we just need to call that Change-Id: I45691efeeead3ea60ab838eeb081fa5f19a76b90 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135428 Tested-by: Jenkins Reviewed-by: Noel Grandin <[email protected]> (cherry picked from commit 6aaa3e617523783b98bc68e260a3a7b4912d11b8) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135377 Reviewed-by: Adolfo Jayme Barrientos <[email protected]> diff --git a/svx/source/styles/CommonStylePreviewRenderer.cxx b/svx/source/styles/CommonStylePreviewRenderer.cxx index 79f8376b0ae8..7ad9c8697dd1 100644 --- a/svx/source/styles/CommonStylePreviewRenderer.cxx +++ b/svx/source/styles/CommonStylePreviewRenderer.cxx @@ -218,7 +218,10 @@ bool CommonStylePreviewRenderer::render(const tools::Rectangle& aRectangle, Rend aFontDrawPosition.AdjustY((aRectangle.GetHeight() - aPixelSize.Height()) / 2 ); } - mrOutputDev.DrawText(aFontDrawPosition, rText); + if (m_pFont) + m_pFont->QuickDrawText( &mrOutputDev, aFontDrawPosition, rText, 0, rText.getLength(), {} ); + else + mrOutputDev.DrawText(aFontDrawPosition, rText); mrOutputDev.Pop(); commit f6704b03aea9087fee2470de04d03f35bbc4887d Author: Gülşah Köse <[email protected]> AuthorDate: Thu May 26 11:03:41 2022 +0300 Commit: Andras Timar <[email protected]> CommitDate: Thu Jun 9 11:02:06 2022 +0200 tdf#136787 Add control to create 1-bit B&W bitmap while creating mask. Glow effect creates half transparent pixels on shadow. Creating 1-bit B&W bitmap mask treates that half transparent pixels as black. We control 1-bit B&W bitmap creation when we have half transparent pixels. Change-Id: Iaf298a0e5ffeeb6637fe5d3f56cf4f8e30a203e4 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134981 Tested-by: Jenkins Reviewed-by: Gülşah Köse <[email protected]> (cherry picked from commit a658129012f1d183f95f8bf5dd6d7ff6926cd495) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135269 diff --git a/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx b/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx index 139bb0ba080a..53e75ac37d55 100644 --- a/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx +++ b/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx @@ -982,11 +982,12 @@ namespace nTransparency defines minimal transparency level. */ AlphaMask ProcessAndBlurAlphaMask(const Bitmap& rMask, double fErodeDilateRadius, - double fBlurRadius, sal_uInt8 nTransparency) + double fBlurRadius, sal_uInt8 nTransparency, + bool bConvertTo1Bit = true) { // Only completely white pixels on the initial mask must be considered for transparency. Any // other color must be treated as black. This creates 1-bit B&W bitmap. - BitmapEx mask(rMask.CreateMask(COL_WHITE)); + BitmapEx mask(bConvertTo1Bit ? rMask.CreateMask(COL_WHITE) : rMask); // Scaling down increases performance without noticeable quality loss. Additionally, // current blur implementation can only handle blur radius between 2 and 254. @@ -1178,7 +1179,7 @@ void VclPixelProcessor2D::processShadowPrimitive2D(const primitive2d::ShadowPrim BitmapEx bitmapEx = mpOutputDevice->GetBitmapEx(aRect.TopLeft(), aRect.GetSize()); - AlphaMask mask = ProcessAndBlurAlphaMask(bitmapEx.GetAlpha(), 0, fBlurRadius, 0); + AlphaMask mask = ProcessAndBlurAlphaMask(bitmapEx.GetAlpha(), 0, fBlurRadius, 0, false); const basegfx::BColor aShadowColor( maBColorModifierStack.getModifiedColor(rCandidate.getShadowColor())); commit a07f251d664b8aa89245535e821ee63827ba694d Author: Michael Stahl <[email protected]> AuthorDate: Fri Jun 3 13:33:54 2022 +0200 Commit: Andras Timar <[email protected]> CommitDate: Thu Jun 9 11:02:05 2022 +0200 tdf#148309 sw_redlinehide: fix mail merge performance regression The problem is that in the call to pTargetShell->EndAllAction(), the cursor is on the node before the newly appended one that has the page break, and only this node is formatted (via GetFormatted()), so no new page frames are inserted in the layout, which then creates massive performance problems later, particularly since the bugdoc contains multiple at-page anchored flys. (regression from commit 42448f48bb48a13d6618a181b12840db6d85c574) Change-Id: I05cd2a515a7f67132ab1c8c6fa0d675252ea3a15 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135356 Tested-by: Michael Stahl <[email protected]> Reviewed-by: Michael Stahl <[email protected]> (cherry picked from commit ff525d0d70ea9d189a430bde944b56d048b03e55) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135273 Tested-by: Jenkins Reviewed-by: Caolán McNamara <[email protected]> diff --git a/sw/source/core/doc/docnew.cxx b/sw/source/core/doc/docnew.cxx index 7aa134edf841..da65b2957229 100644 --- a/sw/source/core/doc/docnew.cxx +++ b/sw/source/core/doc/docnew.cxx @@ -1102,6 +1102,11 @@ SwNodeIndex SwDoc::AppendDoc(const SwDoc& rSource, sal_uInt16 const nStartPageNu // set break on the last paragraph getIDocumentContentOperations().InsertPoolItem(SwPaM(aBreakPos), pageDesc, SetAttrMode::DEFAULT, pTargetShell->GetLayout()); + // tdf#148309 move to the last node - so that the "flush page break" + // code below will format the frame of the node with the page break, + // which is required for new page frames to be created! Else layout + // performance will be terrible. + pTargetShell->SttEndDoc(false); // There is now a new empty text node on the new page. If it has // any marks, those are from the previous page: move them back @@ -1132,6 +1137,7 @@ SwNodeIndex SwDoc::AppendDoc(const SwDoc& rSource, sal_uInt16 const nStartPageNu if ( !bDeletePrevious ) { SAL_INFO( "sw.pageframe", "(Flush pagebreak AKA EndAllAction" ); + assert(pTargetShell->GetCursor()->GetPoint()->nNode.GetNode().GetTextNode()->GetSwAttrSet().HasItem(RES_PAGEDESC)); pTargetShell->EndAllAction(); SAL_INFO( "sw.pageframe", "Flush changes AKA EndAllAction)" ); pTargetShell->StartAllAction(); commit a6532e94dd65cbfc86935fc3f2c56cc9d0fa3d2b Author: Noel Grandin <[email protected]> AuthorDate: Thu Jun 2 12:42:55 2022 +0200 Commit: Andras Timar <[email protected]> CommitDate: Thu Jun 9 11:02:05 2022 +0200 tdf#145603 Drag-n-drop in formula bar creates mismatch Revert commit 60d35f767781de4b8f1e7b264b12015f655c647d tdf#132740 don't broadcast if modified status has not changed Change-Id: I5a0292499522e21708a2d5607966e4c2b3a18ba0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135301 Tested-by: Jenkins Reviewed-by: Noel Grandin <[email protected]> (cherry picked from commit 0030fa0d5174b45ae7f99e3ae923bbec83e50cd1) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135264 Reviewed-by: Caolán McNamara <[email protected]> diff --git a/editeng/source/editeng/editdoc.cxx b/editeng/source/editeng/editdoc.cxx index 3aa587b04ad1..b2bb1398af1b 100644 --- a/editeng/source/editeng/editdoc.cxx +++ b/editeng/source/editeng/editdoc.cxx @@ -2216,8 +2216,6 @@ void EditDoc::ClearSpellErrors() void EditDoc::SetModified( bool b ) { - if (bModified == b) - return; bModified = b; if ( bModified ) { commit e55d4084706660c35ec69c02c1a68b713b24dc93 Author: Noel Grandin <[email protected]> AuthorDate: Thu Jun 2 13:20:38 2022 +0200 Commit: Andras Timar <[email protected]> CommitDate: Thu Jun 9 11:02:05 2022 +0200 tdf#143964 insert/overwrite cursor shape lags in formula editing Revert "tdf#132740 bypass work if selection has not changed" This reverts commit 865641047be4a693f7a51635ce06eab15675126d. Change-Id: I69244a1e57ce979bf21946e31df7165f8791423c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135302 Tested-by: Jenkins Reviewed-by: Noel Grandin <[email protected]> (cherry picked from commit 30703dbe59e909e257876524785836e7f4d993b2) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135265 Reviewed-by: Caolán McNamara <[email protected]> diff --git a/editeng/source/editeng/impedit.cxx b/editeng/source/editeng/impedit.cxx index b2ce6d198752..8c373127d3db 100644 --- a/editeng/source/editeng/impedit.cxx +++ b/editeng/source/editeng/impedit.cxx @@ -242,9 +242,6 @@ const OutlinerViewShell* ImpEditView::GetViewShell() const void ImpEditView::SetEditSelection( const EditSelection& rEditSelection ) { - if (aEditSelection == rEditSelection) - return; - // set state before notification aEditSelection = rEditSelection; commit 4e29d47a981dc178f6c5597d7c2d149c43b86998 Author: Caolán McNamara <[email protected]> AuthorDate: Wed Jun 1 15:28:40 2022 +0100 Commit: Andras Timar <[email protected]> CommitDate: Thu Jun 9 11:00:57 2022 +0200 Related: tdf#149408 inspector crash with a writer OLE inside calc also on *leaving* the OLE mode Change-Id: I97e9cd7cd4dc1803c4bc40865a08a194819c9ff2 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135261 Tested-by: Jenkins Reviewed-by: Xisco Fauli <[email protected]> diff --git a/sw/source/uibase/sidebar/WriterInspectorTextPanel.cxx b/sw/source/uibase/sidebar/WriterInspectorTextPanel.cxx index 9ecce3226ac7..09c773a1d28a 100644 --- a/sw/source/uibase/sidebar/WriterInspectorTextPanel.cxx +++ b/sw/source/uibase/sidebar/WriterInspectorTextPanel.cxx @@ -80,7 +80,11 @@ WriterInspectorTextPanel::WriterInspectorTextPanel(weld::Widget* pParent) updateEntries(aStore, m_nParIdx); } -WriterInspectorTextPanel::~WriterInspectorTextPanel() { m_pShell->SetChgLnk(m_oldLink); } +WriterInspectorTextPanel::~WriterInspectorTextPanel() +{ + if (m_pShell) + m_pShell->SetChgLnk(m_oldLink); +} static OUString PropertyNametoRID(const OUString& rName) { commit 888f7c9d935028a486657b94335839818ddb2641 Author: Michael Stahl <[email protected]> AuthorDate: Wed Jun 1 12:14:44 2022 +0200 Commit: Andras Timar <[email protected]> CommitDate: Thu Jun 9 11:00:57 2022 +0200 nss: upgrade to release 3.79 Fixes CVE-2022-1097 and moz#1767590 "memory safety violations" Change-Id: I6895f066ad943402231b616dae0d7ed6f5678b5e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135234 Tested-by: Jenkins Reviewed-by: Michael Stahl <[email protected]> Signed-off-by: Xisco Fauli <[email protected]> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135248 Reviewed-by: Christian Lohmaier <[email protected]> diff --git a/download.lst b/download.lst index 54fd86ec7547..8968baafb9c3 100644 --- a/download.lst +++ b/download.lst @@ -215,8 +215,8 @@ export MYTHES_SHA256SUM := 1e81f395d8c851c3e4e75b568e20fa2fa549354e75ab397f9de4b export MYTHES_TARBALL := a8c2c5b8f09e7ede322d5c602ff6a4b6-mythes-1.2.4.tar.gz export NEON_SHA256SUM := cf1ee3ac27a215814a9c80803fcee4f0ede8466ebead40267a9bd115e16a8678 export NEON_TARBALL := neon-0.31.2.tar.gz -export NSS_SHA256SUM := 07a9e5b70f121a62706140d4cacc3006d3efb869da40f3a2bf7a65d37847f4d9 -export NSS_TARBALL := nss-3.73-with-nspr-4.32.tar.gz +export NSS_SHA256SUM := 5369ed274a19f480ec94e1faef04da63e3cbac1a82e15bb1751e58b2f274b835 +export NSS_TARBALL := nss-3.79-with-nspr-4.34.tar.gz export ODFGEN_SHA256SUM := 55200027fd46623b9bdddd38d275e7452d1b0ff8aeddcad6f9ae6dc25f610625 export ODFGEN_VERSION_MICRO := 8 export ODFGEN_TARBALL := libodfgen-0.1.$(ODFGEN_VERSION_MICRO).tar.xz diff --git a/external/nss/asan.patch.1 b/external/nss/asan.patch.1 index 7dfd6ed4e782..ce584a34a3b5 100644 --- a/external/nss/asan.patch.1 +++ b/external/nss/asan.patch.1 @@ -7,6 +7,6 @@ diff -ur nss.org/nss/coreconf/Linux.mk nss/nss/coreconf/Linux.mk # against the libsanitizer runtime built into the main executable. -ZDEFS_FLAG = -Wl,-z,defs +ZDEFS_FLAG = - DSO_LDOPTS += $(if $(findstring 2.11.90.0.8,$(shell ld -v)),,$(ZDEFS_FLAG)) $(if $(filter-out $(OS),ANDROID),-Wl$(COMMA)-z$(COMMA)origin '-Wl$(COMMA)-rpath$(COMMA)$$ORIGIN') - LDFLAGS += $(ARCHFLAG) -z noexecstack + DSO_LDOPTS += $(if $(findstring 2.11.90.0.8,$(shell $(LD) -v)),,$(ZDEFS_FLAG)) $(if $(filter-out $(OS),ANDROID),-Wl$(COMMA)-z$(COMMA)origin '-Wl$(COMMA)-rpath$(COMMA)$$ORIGIN') + LDFLAGS += $(ARCHFLAG) -z noexecstack diff --git a/external/nss/nss-ios.patch b/external/nss/nss-ios.patch index 4263ecbe5f3d..86f85a873810 100644 --- a/external/nss/nss-ios.patch +++ b/external/nss/nss-ios.patch @@ -68,13 +68,13 @@ secmod_LoadPKCS11Module(SECMODModule *mod, SECMODModule **oldModule) { @@ -465,6 +465,7 @@ - /* load the library. If this succeeds, then we have to remember to + /* load the library. If this succeeds, then we have to remember to * unload the library if anything goes wrong from here on out... */ +#ifndef NSS_STATIC_PKCS11 // With NSS_STATIC_PKCS11, the only module wodule we load here is nssckbi - library = PR_LoadLibrary(mod->dllName); - mod->library = (void *)library; - + #if defined(_WIN32) + if (nssUTF8_Length(mod->dllName, NULL)) { + wchar_t *dllNameWide = _NSSUTIL_UTF8ToWide(mod->dllName); @@ -487,6 +487,11 @@ mod->moduleDBFunc = (void *) PR_FindSymbol(library, "NSS_ReturnModuleSpecData"); diff --git a/external/nss/nss.patch b/external/nss/nss.patch index d9aaee5199bb..66fbe37dc5ed 100644 --- a/external/nss/nss.patch +++ b/external/nss/nss.patch @@ -87,9 +87,9 @@ # Also, -z defs conflicts with Address Sanitizer, which emits relocations # against the libsanitizer runtime built into the main executable. ZDEFS_FLAG = -Wl,-z,defs --DSO_LDOPTS += $(if $(findstring 2.11.90.0.8,$(shell ld -v)),,$(ZDEFS_FLAG)) -+DSO_LDOPTS += $(if $(findstring 2.11.90.0.8,$(shell ld -v)),,$(ZDEFS_FLAG)) $(if $(filter-out $(OS),ANDROID),-Wl$(COMMA)-z$(COMMA)origin '-Wl$(COMMA)-rpath$(COMMA)$$ORIGIN') - LDFLAGS += $(ARCHFLAG) -z noexecstack +-DSO_LDOPTS += $(if $(findstring 2.11.90.0.8,$(shell $(LD) -v)),,$(ZDEFS_FLAG)) ++DSO_LDOPTS += $(if $(findstring 2.11.90.0.8,$(shell $(LD) -v)),,$(ZDEFS_FLAG)) $(if $(filter-out $(OS),ANDROID),-Wl$(COMMA)-z$(COMMA)origin '-Wl$(COMMA)-rpath$(COMMA)$$ORIGIN') + LDFLAGS += $(ARCHFLAG) -z noexecstack # On Maemo, we need to use the -rpath-link flag for even the standard system @@ -177,8 +177,13 @@ commit 4850317481b3dcc08c124904fe7826e0156276ff Author: Xisco Fauli <[email protected]> AuthorDate: Tue May 31 13:29:00 2022 +0200 Commit: Andras Timar <[email protected]> CommitDate: Thu Jun 9 11:00:57 2022 +0200 sw: avoid EXCEPTION_INT_DIVIDE_BY_ZERO See https://crashreport.libreoffice.org/stats/signature/SwFormatCol::Calc(unsigned%20short,unsigned%20short) Change-Id: I79321737b7bed3acff3418d0b51dc6225baaf57f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135184 Reviewed-by: Michael Stahl <[email protected]> Tested-by: Xisco Fauli <[email protected]> (cherry picked from commit ea4cd397300120a0f825752182eb3b943eb8a1b2) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135254 Tested-by: Jenkins Reviewed-by: Xisco Fauli <[email protected]> diff --git a/sw/source/core/layout/atrfrm.cxx b/sw/source/core/layout/atrfrm.cxx index 4791fda80169..5876f3624c53 100644 --- a/sw/source/core/layout/atrfrm.cxx +++ b/sw/source/core/layout/atrfrm.cxx @@ -1065,7 +1065,7 @@ void SwFormatCol::Calc( sal_uInt16 nGutterWidth, sal_uInt16 nAct ) { tools::Long nTmp = rCol.GetWishWidth(); nTmp *= GetWishWidth(); - nTmp /= nAct; + nTmp = nAct == 0 ? nTmp : nTmp / nAct; rCol.SetWishWidth(sal_uInt16(nTmp)); } } commit ac3969aaf5b57d0d0834fabb43430fbd1c1d13ef Author: Xisco Fauli <[email protected]> AuthorDate: Wed Jun 1 12:02:36 2022 +0200 Commit: Andras Timar <[email protected]> CommitDate: Thu Jun 9 11:00:57 2022 +0200 sw: fix crash in SwDoc::CopyMasterHeader and SwDoc::CopyMasterFooter Similar to 3eda5d345f14f8926358df7b425c452a8a165c7d "tdf#149184 DOCX: fix crash removing footer, then saving to doc" check that GetHeaderFormat and GetFooterFormat are not nullptr Also restructure the code a bit to reduce the scope of pRight See https://crashreport.libreoffice.org/stats/signature/SwDoc::CopyMasterHeader(SwPageDesc%20const%20&,SwFormatHeader%20const%20&,SwPageDesc%20&,bool,bool) and https://crashreport.libreoffice.org/stats/signature/SwDoc::CopyMasterFooter(SwPageDesc%20const%20&,SwFormatFooter%20const%20&,SwPageDesc%20&,bool,bool) Change-Id: Ia30d06593124d90b88f7d26ed7be9a5d7a64872c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135230 Reviewed-by: Miklos Vajna <[email protected]> Tested-by: Jenkins (cherry picked from commit 89b0d94850aeda0a97907945538e4d5f41bac970) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135256 Reviewed-by: Xisco Fauli <[email protected]> diff --git a/sw/source/core/doc/docdesc.cxx b/sw/source/core/doc/docdesc.cxx index d22fee74ca79..1ba9d86b480f 100644 --- a/sw/source/core/doc/docdesc.cxx +++ b/sw/source/core/doc/docdesc.cxx @@ -268,8 +268,6 @@ void SwDoc::CopyMasterHeader(const SwPageDesc &rChged, const SwFormatHeader &rHe } else { - const SwFrameFormat *pRight = rHead.GetHeaderFormat(); - const SwFormatContent &aRCnt = pRight->GetContent(); const SwFormatContent &aCnt = rFormatHead.GetHeaderFormat()->GetContent(); if (!aCnt.GetContentIdx()) @@ -277,36 +275,44 @@ void SwDoc::CopyMasterHeader(const SwPageDesc &rChged, const SwFormatHeader &rHe const SwFrameFormat& rChgedFrameFormat = getConstFrameFormat(rChged, bLeft, bFirst); rDescFrameFormat.SetFormatAttr( rChgedFrameFormat.GetHeader() ); } - else if ((*aRCnt.GetContentIdx() == *aCnt.GetContentIdx()) || - // The ContentIdx is _always_ different when called from - // SwDocStyleSheet::SetItemSet, because it deep-copies the - // PageDesc. So check if it was previously shared. - (bFirst ? rDesc.IsFirstShared() : rDesc.IsHeaderShared())) + else { - SwFrameFormat *pFormat = new SwFrameFormat( GetAttrPool(), - bFirst ? "First header" : "Left header", - GetDfltFrameFormat() ); - ::lcl_DescSetAttr( *pRight, *pFormat, false ); - // The section which the right header attribute is pointing - // is copied, and the Index to the StartNode is set to - // the left or first header attribute. - SwNodeIndex aTmp( GetNodes().GetEndOfAutotext() ); - SwStartNode* pSttNd = SwNodes::MakeEmptySection( aTmp, SwHeaderStartNode ); - SwNodeRange aRange( aRCnt.GetContentIdx()->GetNode(), SwNodeOffset(0), - *aRCnt.GetContentIdx()->GetNode().EndOfSectionNode() ); - aTmp = *pSttNd->EndOfSectionNode(); - GetNodes().Copy_( aRange, aTmp, false ); - aTmp = *pSttNd; - GetDocumentContentOperationsManager().CopyFlyInFlyImpl(aRange, nullptr, aTmp); - SwPaM const source(aRange.aStart, aRange.aEnd); - SwPosition dest(aTmp); - sw::CopyBookmarks(source, dest); - pFormat->SetFormatAttr( SwFormatContent( pSttNd ) ); - rDescFrameFormat.SetFormatAttr( SwFormatHeader( pFormat ) ); + const SwFrameFormat *pRight = rHead.GetHeaderFormat(); + if (!pRight) + return; + const SwFormatContent &aRCnt = pRight->GetContent(); + + if ((*aRCnt.GetContentIdx() == *aCnt.GetContentIdx()) || + // The ContentIdx is _always_ different when called from + // SwDocStyleSheet::SetItemSet, because it deep-copies the + // PageDesc. So check if it was previously shared. + (bFirst ? rDesc.IsFirstShared() : rDesc.IsHeaderShared())) + { + SwFrameFormat *pFormat = new SwFrameFormat( GetAttrPool(), + bFirst ? "First header" : "Left header", + GetDfltFrameFormat() ); + ::lcl_DescSetAttr( *pRight, *pFormat, false ); + // The section which the right header attribute is pointing + // is copied, and the Index to the StartNode is set to + // the left or first header attribute. + SwNodeIndex aTmp( GetNodes().GetEndOfAutotext() ); + SwStartNode* pSttNd = SwNodes::MakeEmptySection( aTmp, SwHeaderStartNode ); + SwNodeRange aRange( aRCnt.GetContentIdx()->GetNode(), SwNodeOffset(0), + *aRCnt.GetContentIdx()->GetNode().EndOfSectionNode() ); + aTmp = *pSttNd->EndOfSectionNode(); + GetNodes().Copy_( aRange, aTmp, false ); + aTmp = *pSttNd; + GetDocumentContentOperationsManager().CopyFlyInFlyImpl(aRange, nullptr, aTmp); + SwPaM const source(aRange.aStart, aRange.aEnd); + SwPosition dest(aTmp); + sw::CopyBookmarks(source, dest); + pFormat->SetFormatAttr( SwFormatContent( pSttNd ) ); + rDescFrameFormat.SetFormatAttr( SwFormatHeader( pFormat ) ); + } + else + ::lcl_DescSetAttr( *pRight, + *const_cast<SwFrameFormat*>(rFormatHead.GetHeaderFormat()), false ); } - else - ::lcl_DescSetAttr( *pRight, - *const_cast<SwFrameFormat*>(rFormatHead.GetHeaderFormat()), false ); } } } @@ -343,44 +349,50 @@ void SwDoc::CopyMasterFooter(const SwPageDesc &rChged, const SwFormatFooter &rFo } else { - const SwFrameFormat *pRight = rFoot.GetFooterFormat(); - const SwFormatContent &aRCnt = pRight->GetContent(); const SwFormatContent &aLCnt = rFormatFoot.GetFooterFormat()->GetContent(); if( !aLCnt.GetContentIdx() ) { const SwFrameFormat& rChgedFrameFormat = getConstFrameFormat(rChged, bLeft, bFirst); rDescFrameFormat.SetFormatAttr( rChgedFrameFormat.GetFooter() ); } - else if ((*aRCnt.GetContentIdx() == *aLCnt.GetContentIdx()) || - // The ContentIdx is _always_ different when called from - // SwDocStyleSheet::SetItemSet, because it deep-copies the - // PageDesc. So check if it was previously shared. - (bFirst ? rDesc.IsFirstShared() : rDesc.IsFooterShared())) + else { - SwFrameFormat *pFormat = new SwFrameFormat( GetAttrPool(), - bFirst ? "First footer" : "Left footer", - GetDfltFrameFormat() ); - ::lcl_DescSetAttr( *pRight, *pFormat, false ); - // The section to which the right footer attribute is pointing - // is copied, and the Index to the StartNode is set to - // the left footer attribute. - SwNodeIndex aTmp( GetNodes().GetEndOfAutotext() ); - SwStartNode* pSttNd = SwNodes::MakeEmptySection( aTmp, SwFooterStartNode ); - SwNodeRange aRange( aRCnt.GetContentIdx()->GetNode(), SwNodeOffset(0), - *aRCnt.GetContentIdx()->GetNode().EndOfSectionNode() ); - aTmp = *pSttNd->EndOfSectionNode(); - GetNodes().Copy_( aRange, aTmp, false ); - aTmp = *pSttNd; - GetDocumentContentOperationsManager().CopyFlyInFlyImpl(aRange, nullptr, aTmp); - SwPaM const source(aRange.aStart, aRange.aEnd); - SwPosition dest(aTmp); - sw::CopyBookmarks(source, dest); - pFormat->SetFormatAttr( SwFormatContent( pSttNd ) ); - rDescFrameFormat.SetFormatAttr( SwFormatFooter( pFormat ) ); + const SwFrameFormat *pRight = rFoot.GetFooterFormat(); + if (!pRight) + return; + const SwFormatContent &aRCnt = pRight->GetContent(); + + if ((*aRCnt.GetContentIdx() == *aLCnt.GetContentIdx()) || + // The ContentIdx is _always_ different when called from + // SwDocStyleSheet::SetItemSet, because it deep-copies the + // PageDesc. So check if it was previously shared. + (bFirst ? rDesc.IsFirstShared() : rDesc.IsFooterShared())) + { + SwFrameFormat *pFormat = new SwFrameFormat( GetAttrPool(), + bFirst ? "First footer" : "Left footer", + GetDfltFrameFormat() ); + ::lcl_DescSetAttr( *pRight, *pFormat, false ); + // The section to which the right footer attribute is pointing + // is copied, and the Index to the StartNode is set to + // the left footer attribute. + SwNodeIndex aTmp( GetNodes().GetEndOfAutotext() ); + SwStartNode* pSttNd = SwNodes::MakeEmptySection( aTmp, SwFooterStartNode ); + SwNodeRange aRange( aRCnt.GetContentIdx()->GetNode(), SwNodeOffset(0), + *aRCnt.GetContentIdx()->GetNode().EndOfSectionNode() ); + aTmp = *pSttNd->EndOfSectionNode(); + GetNodes().Copy_( aRange, aTmp, false ); + aTmp = *pSttNd; + GetDocumentContentOperationsManager().CopyFlyInFlyImpl(aRange, nullptr, aTmp); + SwPaM const source(aRange.aStart, aRange.aEnd); + SwPosition dest(aTmp); + sw::CopyBookmarks(source, dest); + pFormat->SetFormatAttr( SwFormatContent( pSttNd ) ); + rDescFrameFormat.SetFormatAttr( SwFormatFooter( pFormat ) ); + } + else + ::lcl_DescSetAttr( *pRight, + *const_cast<SwFrameFormat*>(rFormatFoot.GetFooterFormat()), false ); } - else - ::lcl_DescSetAttr( *pRight, - *const_cast<SwFrameFormat*>(rFormatFoot.GetFooterFormat()), false ); } } } commit c3df2d673cc12baa1f851510348a785d3e4566fa Author: Caolán McNamara <[email protected]> AuthorDate: Wed Jun 1 11:57:30 2022 +0100 Commit: Andras Timar <[email protected]> CommitDate: Thu Jun 9 11:00:57 2022 +0200 Resolves: tdf#149408 inspector crash with a writer OLE inside calc toplevel isn't a SwDocShell at this point, its a ScDocShell Change-Id: I3aa3c72e494cf6c0ceff1286a7026ca01385ab8e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135173 Reviewed-by: Michael Stahl <[email protected]> Tested-by: Jenkins diff --git a/sw/source/uibase/sidebar/WriterInspectorTextPanel.cxx b/sw/source/uibase/sidebar/WriterInspectorTextPanel.cxx index 33d2ae6774e0..9ecce3226ac7 100644 --- a/sw/source/uibase/sidebar/WriterInspectorTextPanel.cxx +++ b/sw/source/uibase/sidebar/WriterInspectorTextPanel.cxx @@ -65,7 +65,7 @@ WriterInspectorTextPanel::WriterInspectorTextPanel(weld::Widget* pParent) : InspectorTextPanel(pParent) , m_nParIdx(0) { - SwDocShell* pDocSh = static_cast<SwDocShell*>(SfxObjectShell::Current()); + SwDocShell* pDocSh = dynamic_cast<SwDocShell*>(SfxObjectShell::Current()); m_pShell = pDocSh ? pDocSh->GetWrtShell() : nullptr; if (m_pShell) { commit d7460745dfda789952744dd2dc74793dde03e47e Author: Christian Lohmaier <[email protected]> AuthorDate: Wed Jun 1 14:23:48 2022 +0200 Commit: Andras Timar <[email protected]> CommitDate: Thu Jun 9 11:00:56 2022 +0200 update credits Change-Id: I159625c29c07188e991ad55de291594f31715f02 (cherry picked from commit 6c3e1ec7d2177271ea6e01da4cedce022823c622) diff --git a/readlicense_oo/license/CREDITS.fodt b/readlicense_oo/license/CREDITS.fodt index 0b6221d184ee..b196b49a048c 100644 --- a/readlicense_oo/license/CREDITS.fodt +++ b/readlicense_oo/license/CREDITS.fodt @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> <office:document xmlns:officeooo="http://openoffice.org/2009/office" xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rpt="http://openoffice.org/2005/report" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns :config:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="ur n:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:xforms="http://www.w3.org/2002/xforms" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text"> - <office:meta><dc:title>Credits » LibreOffice</dc:title><meta:keyword>Credits</meta:keyword><meta:keyword>contributors</meta:keyword><meta:keyword>coders</meta:keyword><meta:keyword>developers</meta:keyword><dc:description>Credits for the LibreOffice development/coding.</dc:description><meta:generator>LibreOffice/7.3.3.2$Linux_X86_64 LibreOffice_project/d1d0ea68f081ee2800a922cac8f79445e4603348</meta:generator><dc:date>2012-02-20T22:17:18.060000000</dc:date><meta:editing-duration>PT14M12S</meta:editing-duration><meta:editing-cycles>3</meta:editing-cycles><meta:document-statistic meta:table-count="5" meta:image-count="1" meta:object-count="0" meta:page-count="2" meta:paragraph-count="4545" meta:word-count="16825" meta:character-count="121474" meta:non-whitespace-character-count="106475"/><meta:user-defined meta:name="google-site-verification">JUebjoxEpqXoQcpltWRTwzBZEEHtch3wApdhgiQPFiA</meta:user-defined></office:meta> + <office:meta><dc:title>Credits » LibreOffice</dc:title><meta:keyword>Credits</meta:keyword><meta:keyword>contributors</meta:keyword><meta:keyword>coders</meta:keyword><meta:keyword>developers</meta:keyword><dc:description>Credits for the LibreOffice development/coding.</dc:description><meta:generator>LibreOffice/7.3.3.2$Linux_X86_64 LibreOffice_project/d1d0ea68f081ee2800a922cac8f79445e4603348</meta:generator><dc:date>2012-02-20T22:17:18.060000000</dc:date><meta:editing-duration>PT14M12S</meta:editing-duration><meta:editing-cycles>3</meta:editing-cycles><meta:document-statistic meta:table-count="5" meta:image-count="1" meta:object-count="0" meta:page-count="2" meta:paragraph-count="4551" meta:word-count="16845" meta:character-count="121610" meta:non-whitespace-character-count="106593"/><meta:user-defined meta:name="google-site-verification">JUebjoxEpqXoQcpltWRTwzBZEEHtch3wApdhgiQPFiA</meta:user-defined></office:meta> <office:settings> <config:config-item-set config:name="ooo:view-settings"> - <config:config-item config:name="ViewAreaTop" config:type="long">1647</config:config-item> + <config:config-item config:name="ViewAreaTop" config:type="long">1822</config:config-item> <config:config-item config:name="ViewAreaLeft" config:type="long">501</config:config-item> <config:config-item config:name="ViewAreaWidth" config:type="long">32175</config:config-item> <config:config-item config:name="ViewAreaHeight" config:type="long">29238</config:config-item> @@ -13,12 +13,12 @@ <config:config-item-map-indexed config:name="Views"> <config:config-item-map-entry> <config:config-item config:name="ViewId" config:type="string">view2</config:config-item> - <config:config-item config:name="ViewLeft" config:type="long">3649</config:config-item> - <config:config-item config:name="ViewTop" config:type="long">3434</config:config-item> + <config:config-item config:name="ViewLeft" config:type="long">14550</config:config-item> + <config:config-item config:name="ViewTop" config:type="long">7303</config:config-item> <config:config-item config:name="VisibleLeft" config:type="long">501</config:config-item> - <config:config-item config:name="VisibleTop" config:type="long">1647</config:config-item> + <config:config-item config:name="VisibleTop" config:type="long">1822</config:config-item> <config:config-item config:name="VisibleRight" config:type="long">32674</config:config-item> - <config:config-item config:name="VisibleBottom" config:type="long">30884</config:config-item> + <config:config-item config:name="VisibleBottom" config:type="long">31059</config:config-item> <config:config-item config:name="ZoomType" config:type="short">0</config:config-item> <config:config-item config:name="ViewLayoutColumns" config:type="short">0</config:config-item> <config:config-item config:name="ViewLayoutBookMode" config:type="boolean">false</config:config-item> @@ -97,7 +97,7 @@ </config:config-item-map-indexed> <config:config-item config:name="PrinterSetup" config:type="base64Binary"/> <config:config-item config:name="AddParaTableSpacingAtStart" config:type="boolean">true</config:config-item> - <config:config-item config:name="Rsid" config:type="int">10942412</config:config-item> + <config:config-item config:name="Rsid" config:type="int">10970830</config:config-item> <config:config-item config:name="EmbeddedDatabaseName" config:type="string"/> <config:config-item config:name="FieldAutoUpdate" config:type="boolean">true</config:config-item> <config:config-item config:name="OutlineLevelYieldsNumbering" config:type="boolean">false</config:config-item> @@ -166,7 +166,7 @@ <office:styles> <style:default-style style:family="graphic"> <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:flow-with-text="true"/> - <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:writing-mode="lr-tb" style:font-independent-line-spacing="false"> + <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:font-independent-line-spacing="false"> <style:tab-stops/> </style:paragraph-properties> <style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Thorndale AMT" fo:font-size="12pt" fo:language="hu" fo:country="HU" style:letter-kerning="true" style:font-name-asian="SimSun" style:font-size-asian="12pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Mangal1" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/> @@ -344,13 +344,13 @@ </office:styles> <office:automatic-styles> <style:style style:name="Tabelle1" style:family="table"> - <style:table-properties style:width="26.492cm" table:align="left"/> + <style:table-properties style:width="26.704cm" table:align="left"/> </style:style> <style:style style:name="Tabelle1.A" style:family="table-column"> <style:table-column-properties style:column-width="6.854cm"/> </style:style> <style:style style:name="Tabelle1.B" style:family="table-column"> - <style:table-column-properties style:column-width="6.061cm"/> + <style:table-column-properties style:column-width="6.272cm"/> </style:style> <style:style style:name="Tabelle1.C" style:family="table-column"> <style:table-column-properties style:column-width="6.749cm"/> @@ -361,7 +361,7 @@ <style:style style:name="Tabelle1.A1" style:family="table-cell"> <style:table-cell-properties style:vertical-align="middle" fo:padding="0.049cm" fo:border="none"/> </style:style> - <style:style style:name="Tabelle1.B406" style:family="table-cell"> + <style:style style:name="Tabelle1.D406" style:family="table-cell"> <style:table-cell-properties fo:padding="0.049cm" fo:border="none"/> </style:style> <style:style style:name="Tabelle2" style:family="table"> @@ -425,21 +425,21 @@ <style:table-properties style:width="31.752cm" table:align="left"/> </style:style> <style:style style:name="Tabelle5.A" style:family="table-column"> - <style:table-column-properties style:column-width="7.978cm"/> + <style:table-column-properties style:column-width="6.048cm"/> </style:style> <style:style style:name="Tabelle5.B" style:family="table-column"> - <style:table-column-properties style:column-width="6.218cm"/> + <style:table-column-properties style:column-width="10.943cm"/> </style:style> <style:style style:name="Tabelle5.C" style:family="table-column"> - <style:table-column-properties style:column-width="10.896cm"/> + <style:table-column-properties style:column-width="7.955cm"/> </style:style> <style:style style:name="Tabelle5.D" style:family="table-column"> - <style:table-column-properties style:column-width="6.66cm"/> + <style:table-column-properties style:column-width="6.805cm"/> </style:style> <style:style style:name="Tabelle5.A1" style:family="table-cell"> <style:table-cell-properties style:vertical-align="middle" fo:padding="0.049cm" fo:border="none"/> </style:style> - <style:style style:name="Tabelle5.D686" style:family="table-cell"> + <style:style style:name="Tabelle5.D687" style:family="table-cell"> <style:table-cell-properties fo:padding="0.049cm" fo:border="none"/> </style:style> <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Table_20_Contents"> @@ -1081,7 +1081,7 @@ </draw:frame> <text:section text:style-name="Sect1" text:name="BgContainer"> <text:p text:style-name="P16">Credits</text:p> - <text:p text:style-name="Text_20_body">1751 individuals contributed to OpenOffice.org (and whose contributions were imported into LibreOffice) or LibreOffice until 2022-05-06 12:21:50.</text:p> + <text:p text:style-name="Text_20_body">1753 individuals contributed to OpenOffice.org (and whose contributions were imported into LibreOffice) or LibreOffice until 2022-05-31 13:29:00.</text:p> <text:p text:style-name="Text_20_body"><text:span text:style-name="T1">*</text:span> marks developers whose first contributions happened after 2010-09-28.</text:p> <text:h text:style-name="Heading_20_2" text:outline-level="2">Developers committing code since 2010-09-28</text:h> <table:table table:name="Tabelle1" table:style-name="Tabelle1"> @@ -1089,12 +1089,12 @@ <table:table-column table:style-name="Tabelle1.B"/> <table:table-column table:style-name="Tabelle1.C"/> <table:table-column table:style-name="Tabelle1.D"/> - <table:table-row table:style-name="TableLine159187968"> + <table:table-row table:style-name="TableLine132826464"> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> <text:p text:style-name="Table_20_Contents">Ruediger Timm<text:line-break/>Commits: 82464<text:line-break/>Joined: 2000-10-10</text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents">Caolán McNamara<text:line-break/>Commits: 32932<text:line-break/>Joined: 2000-10-10</text:p> + <text:p text:style-name="Table_20_Contents">Caolán McNamara<text:line-break/>Commits: 33046<text:line-break/>Joined: 2000-10-10</text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> <text:p text:style-name="Table_20_Contents">Kurt Zenker<text:line-break/>Commits: 31752<text:line-break/>Joined: 2000-09-25</text:p> @@ -1103,7 +1103,7 @@ <text:p text:style-name="Table_20_Contents">Oliver Bolte<text:line-break/>Commits: 31008<text:line-break/>Joined: 2000-09-19</text:p> </table:table-cell> </table:table-row> - <table:table-row table:style-name="TableLine159187968"> + <table:table-row table:style-name="TableLine132826464"> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> <text:p text:style-name="Table_20_Contents">Jens-Heiner Rechtien [hr]<text:line-break/>Commits: 28805<text:line-break/>Joined: 2000-09-18</text:p> </table:table-cell> @@ -1111,27 +1111,27 @@ <text:p text:style-name="Table_20_Contents">Vladimir Glazunov<text:line-break/>Commits: 25434<text:line-break/>Joined: 2000-12-04</text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents">Stephan Bergmann<text:line-break/>Commits: 19788<text:line-break/>Joined: 2000-10-04</text:p> + <text:p text:style-name="Table_20_Contents">Stephan Bergmann<text:line-break/>Commits: 19860<text:line-break/>Joined: 2000-10-04</text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Noel Grandin<text:line-break/>Commits: 15942<text:line-break/>Joined: <text:span text:style-name="T2">2011-12-12</text:span></text:p> + <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Noel Grandin<text:line-break/>Commits: 16150<text:line-break/>Joined: <text:span text:style-name="T2">2011-12-12</text:span></text:p> </table:table-cell> </table:table-row> - <table:table-row table:style-name="TableLine159187968"> + <table:table-row table:style-name="TableLine132826464"> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> <text:p text:style-name="Table_20_Contents">Ivo Hinkelmann<text:line-break/>Commits: 9480<text:line-break/>Joined: 2002-09-09</text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents">Tor Lillqvist<text:line-break/>Commits: 9069<text:line-break/>Joined: 2010-03-23</text:p> + <text:p text:style-name="Table_20_Contents">Tor Lillqvist<text:line-break/>Commits: 9073<text:line-break/>Joined: 2010-03-23</text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents">Miklos Vajna<text:line-break/>Commits: 8916<text:line-break/>Joined: 2010-07-29</text:p> + <text:p text:style-name="Table_20_Contents">Miklos Vajna<text:line-break/>Commits: 8975<text:line-break/>Joined: 2010-07-29</text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents">Michael Stahl<text:line-break/>Commits: 7951<text:line-break/>Joined: 2008-06-16</text:p> + <text:p text:style-name="Table_20_Contents">Michael Stahl<text:line-break/>Commits: 7979<text:line-break/>Joined: 2008-06-16</text:p> </table:table-cell> </table:table-row> - <table:table-row table:style-name="TableLine159187968"> + <table:table-row table:style-name="TableLine132826464"> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> <text:p text:style-name="Table_20_Contents">Kohei Yoshida<text:line-break/>Commits: 5571<text:line-break/>Joined: 2009-06-19</text:p> </table:table-cell> @@ -1139,29 +1139,29 @@ <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Markus Mohrhard<text:line-break/>Commits: 5203<text:line-break/>Joined: <text:span text:style-name="T2">2011-03-17</text:span></text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents">Eike Rathke<text:line-break/>Commits: 5067<text:line-break/>Joined: 2000-10-11</text:p> + <text:p text:style-name="Table_20_Contents">Eike Rathke<text:line-break/>Commits: 5078<text:line-break/>Joined: 2000-10-11</text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> <text:p text:style-name="Table_20_Contents">Frank Schoenheit [fs]<text:line-break/>Commits: 5008<text:line-break/>Joined: 2000-09-19</text:p> </table:table-cell> </table:table-row> - <table:table-row table:style-name="TableLine159187968"> + <table:table-row table:style-name="TableLine132826464"> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> <text:p text:style-name="Table_20_Contents">David Tardon<text:line-break/>Commits: 3648<text:line-break/>Joined: 2009-11-12</text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Julien Nabet<text:line-break/>Commits: 3457<text:line-break/>Joined: <text:span text:style-name="T2">2010-11-04</text:span></text:p> + <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Julien Nabet<text:line-break/>Commits: 3471<text:line-break/>Joined: <text:span text:style-name="T2">2010-11-04</text:span></text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Andrea Gelmini<text:line-break/>Commits: 3085<text:line-break/>Joined: <text:span text:style-name="T2">2014-10-30</text:span></text:p> + <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Andrea Gelmini<text:line-break/>Commits: 3105<text:line-break/>Joined: <text:span text:style-name="T2">2014-10-30</text:span></text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Tomaž Vajngerl<text:line-break/>Commits: 3024<text:line-break/>Joined: <text:span text:style-name="T2">2012-06-02</text:span></text:p> + <text:p text:style-name="Table_20_Contents">Luboš Luňák<text:line-break/>Commits: 3084<text:line-break/>Joined: 2010-09-21</text:p> </table:table-cell> </table:table-row> - <table:table-row table:style-name="TableLine159187968"> + <table:table-row table:style-name="TableLine132826464"> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents">Luboš Luňák<text:line-break/>Commits: 3017<text:line-break/>Joined: 2010-09-21</text:p> + <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Tomaž Vajngerl<text:line-break/>Commits: 3037<text:line-break/>Joined: <text:span text:style-name="T2">2012-06-02</text:span></text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> <text:p text:style-name="Table_20_Contents">Hans-Joachim Lankenau<text:line-break/>Commits: 3007<text:line-break/>Joined: 2000-09-19</text:p> @@ -1173,7 +1173,7 @@ <text:p text:style-name="Table_20_Contents">Jan Holesovsky<text:line-break/>Commits: 2668<text:line-break/>Joined: 2009-06-23</text:p> </table:table-cell> </table:table-row> - <table:table-row table:style-name="TableLine159187968"> + <table:table-row table:style-name="TableLine132826464"> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> <text:p text:style-name="Table_20_Contents">Mathias Bauer<text:line-break/>Commits: 2580<text:line-break/>Joined: 2000-09-20</text:p> </table:table-cell> @@ -1187,9 +1187,9 @@ <text:p text:style-name="Table_20_Contents">Bjoern Michaelsen<text:line-break/>Commits: 2454<text:line-break/>Joined: 2009-10-14</text:p> </table:table-cell> </table:table-row> - <table:table-row table:style-name="TableLine159187968"> + <table:table-row table:style-name="TableLine132826464"> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Mike Kaganski<text:line-break/>Commits: 2260<text:line-break/>Joined: <text:span text:style-name="T2">2015-04-26</text:span></text:p> + <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Mike Kaganski<text:line-break/>Commits: 2287<text:line-break/>Joined: <text:span text:style-name="T2">2015-04-26</text:span></text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Norbert Thiebaud<text:line-break/>Commits: 2176<text:line-break/>Joined: <text:span text:style-name="T2">2010-09-29</text:span></text:p> @@ -1201,12 +1201,12 @@ <text:p text:style-name="Table_20_Contents">Philipp Lohmann [pl]<text:line-break/>Commits: 2089<text:line-break/>Joined: 2000-09-21</text:p> </table:table-cell> </table:table-row> - <table:table-row table:style-name="TableLine159187968"> + <table:table-row table:style-name="TableLine132826464"> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Andras Timar<text:line-break/>Commits: 1965<text:line-break/>Joined: <text:span text:style-name="T2">2010-10-02</text:span></text:p> + <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Andras Timar<text:line-break/>Commits: 1967<text:line-break/>Joined: <text:span text:style-name="T2">2010-10-02</text:span></text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> - <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Xisco Fauli<text:line-break/>Commits: 1897<text:line-break/>Joined: <text:span text:style-name="T2">2011-02-06</text:span></text:p> + <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Xisco Fauli<text:line-break/>Commits: 1931<text:line-break/>Joined: <text:span text:style-name="T2">2011-02-06</text:span></text:p> </table:table-cell> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> <text:p text:style-name="Table_20_Contents">Christian Lippka<text:line-break/>Commits: 1805<text:line-break/>Joined: 2000-09-25</text:p> @@ -1215,12 +1215,12 @@ <text:p text:style-name="Table_20_Contents"><text:span text:style-name="T1">*</text:span>Matúš Kukan<text:line-break/>Commits: 1712<text:line-break/>Joined: <text:span text:style-name="T2">2011-04-06</text:span></text:p> </table:table-cell> </table:table-row> - <table:table-row table:style-name="TableLine159187968"> + <table:table-row table:style-name="TableLine132826464"> <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string"> ... etc. - the rest is truncated
