basic/qa/basic_coverage/test_mod_operator.vb | 25 ++++++++++ basic/source/comp/exprnode.cxx | 13 +++-- dev/null |binary filter/source/msfilter/eschesdo.cxx | 20 ++++---- filter/source/msfilter/eschesdo.hxx | 4 - include/filter/msfilter/escherex.hxx | 4 - sc/inc/document.hxx | 2 sc/qa/unit/uicalc/data/tdf99913.xlsx |binary sc/qa/unit/uicalc/uicalc.cxx | 9 +++ sc/source/core/tool/compiler.cxx | 9 +++ sc/source/filter/excel/xeescher.cxx | 4 - sc/source/filter/oox/worksheethelper.cxx | 65 +++++++++++++++++++++++---- sfx2/source/sidebar/DeckLayouter.cxx | 11 ++++ svx/qa/unit/customshapes.cxx | 18 ------- vcl/Library_vclplug_gtk3.mk | 1 vcl/Library_vclplug_gtk3_kde5.mk | 1 vcl/source/filter/ipdf/pdfread.cxx | 2 vcl/unx/gtk3/a11y/atkwrapper.hxx | 1 vcl/unx/gtk3/a11y/gtk3atkwrapper.cxx | 28 +++++++++++ xmloff/source/draw/ximpcustomshape.cxx | 9 --- 20 files changed, 167 insertions(+), 59 deletions(-)
New commits: commit 143098db8c67c90bd8bd1c90c2feb191a285023b Author: Caolán McNamara <[email protected]> AuthorDate: Wed Mar 24 11:33:42 2021 +0000 Commit: Andras Timar <[email protected]> CommitDate: Tue Apr 6 13:58:52 2021 +0200 tdf#141197 if we have a sysobj child then include that in the atk hierarchy this also should make the case of an embedded video visible in the atk hierarchy as well as the target of the native gtk widgets in a vcl window container in the startcenter Change-Id: Ia91439cbccbffbb0badbfb466f7ab6d1ccbfe3ae Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113526 Tested-by: Jenkins Reviewed-by: Michael Stahl <[email protected]> diff --git a/vcl/Library_vclplug_gtk3.mk b/vcl/Library_vclplug_gtk3.mk index 9e67d5efc265..317152b59fe9 100644 --- a/vcl/Library_vclplug_gtk3.mk +++ b/vcl/Library_vclplug_gtk3.mk @@ -36,6 +36,7 @@ $(eval $(call gb_Library_set_include,vclplug_gtk3,\ $(eval $(call gb_Library_add_defs,vclplug_gtk3,\ -DVCLPLUG_GTK_IMPLEMENTATION \ + -DVCL_INTERNALS \ )) $(eval $(call gb_Library_use_custom_headers,vclplug_gtk3,\ diff --git a/vcl/Library_vclplug_gtk3_kde5.mk b/vcl/Library_vclplug_gtk3_kde5.mk index 51dafda097be..602be3d13b45 100644 --- a/vcl/Library_vclplug_gtk3_kde5.mk +++ b/vcl/Library_vclplug_gtk3_kde5.mk @@ -41,6 +41,7 @@ $(eval $(call gb_Library_add_cxxflags,vclplug_gtk3_kde5,\ $(eval $(call gb_Library_add_defs,vclplug_gtk3_kde5,\ -DVCLPLUG_GTK_IMPLEMENTATION -DVCLPLUG_GTK3_KDE5_IMPLEMENTATION \ + -DVCL_INTERNALS \ )) $(eval $(call gb_Library_use_custom_headers,vclplug_gtk3_kde5,\ diff --git a/vcl/unx/gtk3/a11y/atkwrapper.hxx b/vcl/unx/gtk3/a11y/atkwrapper.hxx index d9c651a2eae8..0fcbce6369fd 100644 --- a/vcl/unx/gtk3/a11y/atkwrapper.hxx +++ b/vcl/unx/gtk3/a11y/atkwrapper.hxx @@ -46,6 +46,7 @@ struct AtkObjectWrapper { AtkObject aParent; AtkObject* mpOrig; //if we're a GtkDrawingArea acting as a custom LibreOffice widget, this is the toolkit default impl + AtkObject* mpSysObjChild; //if we're a container for a sysobj, then this is the sysobj native gtk AtkObject css::uno::Reference<css::accessibility::XAccessible> mpAccessible; css::uno::Reference<css::accessibility::XAccessibleContext> mpContext; diff --git a/vcl/unx/gtk3/a11y/gtk3atkwrapper.cxx b/vcl/unx/gtk3/a11y/gtk3atkwrapper.cxx index cbce84b09fd1..1d53043f3d2b 100644 --- a/vcl/unx/gtk3/a11y/gtk3atkwrapper.cxx +++ b/vcl/unx/gtk3/a11y/gtk3atkwrapper.cxx @@ -40,10 +40,14 @@ #include <com/sun/star/accessibility/XAccessibleImage.hpp> #include <com/sun/star/accessibility/XAccessibleHypertext.hpp> #include <com/sun/star/accessibility/XAccessibleSelection.hpp> +#include <com/sun/star/awt/XWindow.hpp> #include <rtl/strbuf.hxx> #include <osl/diagnose.h> #include <tools/diagnose_ex.h> +#include <vcl/syschild.hxx> +#include <vcl/sysdata.hxx> +#include <vcl/toolkit/unowrap.hxx> #include "atkwrapper.hxx" #include "atkregistry.hxx" @@ -407,6 +411,10 @@ static gint wrapper_get_n_children( AtkObject *atk_obj ) { AtkObjectWrapper *obj = ATK_OBJECT_WRAPPER (atk_obj); + + if (obj->mpSysObjChild) + return 1; + gint n = 0; if( obj->mpContext.is() ) @@ -429,6 +437,13 @@ wrapper_ref_child( AtkObject *atk_obj, gint i ) { AtkObjectWrapper *obj = ATK_OBJECT_WRAPPER (atk_obj); + + if (obj->mpSysObjChild) + { + g_object_ref(obj->mpSysObjChild); + return obj->mpSysObjChild; + } + AtkObject* child = nullptr; // see comments above atk_object_wrapper_remove_child @@ -875,6 +890,19 @@ atk_object_wrapper_new( const css::uno::Reference< css::accessibility::XAccessib } } + // tdf#141197 if we have a sysobj child then include that in the hierarchy + if (UnoWrapperBase* pWrapper = UnoWrapperBase::GetUnoWrapper()) + { + css::uno::Reference<css::awt::XWindow> xAWTWindow(rxAccessible, css::uno::UNO_QUERY); + VclPtr<vcl::Window> xWindow = pWrapper->GetWindow(xAWTWindow); + if (xWindow && xWindow->GetType() == WindowType::SYSTEMCHILDWINDOW) + { + const SystemEnvData* pEnvData = static_cast<SystemChildWindow*>(xWindow.get())->GetSystemData(); + if (GtkWidget *pSysObj = pEnvData ? static_cast<GtkWidget*>(pEnvData->pWidget) : nullptr) + pWrap->mpSysObjChild = gtk_widget_get_accessible(pSysObj); + } + } + return ATK_OBJECT( pWrap ); } catch (const uno::Exception &) commit f4034873bab7021785387ad5aa6ba9bcc10bd52d Author: Tünde Tóth <[email protected]> AuthorDate: Wed Mar 24 14:07:15 2021 +0100 Commit: Andras Timar <[email protected]> CommitDate: Tue Apr 6 13:57:24 2021 +0200 tdf#99913 XLSX import: set filtered flag for rows hidden by AutoFilter to support copying the result of filtering. Unlike ODS and XLS, XLSX doesn't differentiates filtered and manually hidden rows, and without this fix, copy of the unupdated data of the loaded filtering contained the hidden rows, too. Change-Id: I390d1a84b9bf275f3d3782756553b2f236487758 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113040 Tested-by: László Németh <[email protected]> Reviewed-by: László Németh <[email protected]> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113382 Tested-by: Jenkins Reviewed-by: Xisco Fauli <[email protected]> diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx index 46f3e51d1a99..832a02410eed 100644 --- a/sc/inc/document.hxx +++ b/sc/inc/document.hxx @@ -1947,7 +1947,7 @@ public: SC_DLLPUBLIC SCROW LastVisibleRow(SCROW nStartRow, SCROW nEndRow, SCTAB nTab) const; SCROW CountVisibleRows(SCROW nStartRow, SCROW nEndRow, SCTAB nTab) const; - bool RowFiltered(SCROW nRow, SCTAB nTab, SCROW* pFirstRow = nullptr, SCROW* pLastRow = nullptr) const; + SC_DLLPUBLIC bool RowFiltered(SCROW nRow, SCTAB nTab, SCROW* pFirstRow = nullptr, SCROW* pLastRow = nullptr) const; bool HasFilteredRows(SCROW nStartRow, SCROW nEndRow, SCTAB nTab) const; bool ColFiltered(SCCOL nCol, SCTAB nTab) const; SC_DLLPUBLIC void SetRowFiltered(SCROW nStartRow, SCROW nEndRow, SCTAB nTab, bool bFiltered); diff --git a/sc/qa/unit/uicalc/data/tdf99913.xlsx b/sc/qa/unit/uicalc/data/tdf99913.xlsx new file mode 100644 index 000000000000..3fd18a12984a Binary files /dev/null and b/sc/qa/unit/uicalc/data/tdf99913.xlsx differ diff --git a/sc/qa/unit/uicalc/uicalc.cxx b/sc/qa/unit/uicalc/uicalc.cxx index c744528b8e0e..59edd0527c4e 100644 --- a/sc/qa/unit/uicalc/uicalc.cxx +++ b/sc/qa/unit/uicalc/uicalc.cxx @@ -364,6 +364,15 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf123202) CPPUNIT_ASSERT(pDoc->RowHidden(2, 0)); } +CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf99913) +{ + ScModelObj* pModelObj = createDoc("tdf99913.xlsx"); + ScDocument* pDoc = pModelObj->GetDocument(); + CPPUNIT_ASSERT(pDoc); + + CPPUNIT_ASSERT(pDoc->RowFiltered(2, 0)); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/filter/oox/worksheethelper.cxx b/sc/source/filter/oox/worksheethelper.cxx index 110ce64ba79c..93b6fe88f429 100644 --- a/sc/source/filter/oox/worksheethelper.cxx +++ b/sc/source/filter/oox/worksheethelper.cxx @@ -68,6 +68,8 @@ #include <stlsheet.hxx> #include <stlpool.hxx> #include <cellvalue.hxx> +#include <columnspanset.hxx> +#include <dbdata.hxx> #include <svl/stritem.hxx> #include <editeng/eeitem.hxx> @@ -340,9 +342,12 @@ private: void convertColumns( OutlineLevelVec& orColLevels, const ValueRange& rColRange, const ColumnModel& rModel ); /** Converts row properties for all rows in the sheet. */ - void convertRows(); + void convertRows(const std::vector<sc::ColRowSpan>& rSpans); /** Converts row properties. */ - void convertRows( OutlineLevelVec& orRowLevels, const ValueRange& rRowRange, const RowModel& rModel, double fDefHeight = -1.0 ); + void convertRows(OutlineLevelVec& orRowLevels, const ValueRange& rRowRange, + const RowModel& rModel, + const std::vector<sc::ColRowSpan>& rSpans, + double fDefHeight = -1.0); /** Converts outline grouping for the passed column or row. */ void convertOutlines( OutlineLevelVec& orLevels, sal_Int32 nColRow, sal_Int32 nLevel, bool bCollapsed, bool bRows ); @@ -946,7 +951,37 @@ void WorksheetGlobals::finalizeWorksheetImport() lclUpdateProgressBar( mxFinalProgress, 0.5 ); convertColumns(); - convertRows(); + + // tdf#99913 rows hidden by filter need extra flag + ScDocument& rDoc = getScDocument(); + std::vector<sc::ColRowSpan> aSpans; + SCTAB nTab = getSheetIndex(); + ScDBData* pDBData = rDoc.GetAnonymousDBData(nTab); + if (pDBData && pDBData->HasAutoFilter()) + { + ScRange aRange; + pDBData->GetArea(aRange); + SCCOLROW nStartRow = static_cast<SCCOLROW>(aRange.aStart.Row()); + SCCOLROW nEndRow = static_cast<SCCOLROW>(aRange.aEnd.Row()); + aSpans.push_back(sc::ColRowSpan(nStartRow, nEndRow)); + } + ScDBCollection* pDocColl = rDoc.GetDBCollection(); + if (!pDocColl->empty()) + { + ScDBCollection::NamedDBs& rDBs = pDocColl->getNamedDBs(); + for (const auto& rxDB : rDBs) + { + if (rxDB->GetTab() == nTab && rxDB->HasAutoFilter()) + { + ScRange aRange; + rxDB->GetArea(aRange); + SCCOLROW nStartRow = static_cast<SCCOLROW>(aRange.aStart.Row()); + SCCOLROW nEndRow = static_cast<SCCOLROW>(aRange.aEnd.Row()); + aSpans.push_back(sc::ColRowSpan(nStartRow, nEndRow)); + } + } + } + convertRows(aSpans); lclUpdateProgressBar( mxFinalProgress, 1.0 ); } @@ -1200,7 +1235,7 @@ void WorksheetGlobals::convertColumns( OutlineLevelVec& orColLevels, convertOutlines( orColLevels, rColRange.mnFirst, rModel.mnLevel, rModel.mbCollapsed, false ); } -void WorksheetGlobals::convertRows() +void WorksheetGlobals::convertRows(const std::vector<sc::ColRowSpan>& rSpans) { sal_Int32 nNextRow = 0; sal_Int32 nMaxRow = mrMaxApiPos.Row(); @@ -1213,21 +1248,23 @@ void WorksheetGlobals::convertRows() ValueRange aRowRange( ::std::max( rowModel.first, nNextRow ), ::std::min( rowModel.second.second, nMaxRow ) ); // process gap between two row models, use default row model if( nNextRow < aRowRange.mnFirst ) - convertRows( aRowLevels, ValueRange( nNextRow, aRowRange.mnFirst - 1 ), maDefRowModel ); + convertRows(aRowLevels, ValueRange(nNextRow, aRowRange.mnFirst - 1), maDefRowModel, + rSpans); // process the row model - convertRows( aRowLevels, aRowRange, rowModel.second.first, maDefRowModel.mfHeight ); + convertRows(aRowLevels, aRowRange, rowModel.second.first, rSpans, maDefRowModel.mfHeight); // cache next row to be processed nNextRow = aRowRange.mnLast + 1; } // remaining default rows to end of sheet - convertRows( aRowLevels, ValueRange( nNextRow, nMaxRow ), maDefRowModel ); + convertRows(aRowLevels, ValueRange(nNextRow, nMaxRow), maDefRowModel, rSpans); // close remaining row outlines spanning to end of sheet convertOutlines( aRowLevels, nMaxRow + 1, 0, false, true ); } -void WorksheetGlobals::convertRows( OutlineLevelVec& orRowLevels, - const ValueRange& rRowRange, const RowModel& rModel, double fDefHeight ) +void WorksheetGlobals::convertRows(OutlineLevelVec& orRowLevels, const ValueRange& rRowRange, + const RowModel& rModel, + const std::vector<sc::ColRowSpan>& rSpans, double fDefHeight) { // row height: convert points to row height in 1/100 mm double fHeight = (rModel.mfHeight >= 0.0) ? rModel.mfHeight : fDefHeight; @@ -1249,6 +1286,16 @@ void WorksheetGlobals::convertRows( OutlineLevelVec& orRowLevels, { ScDocument& rDoc = getScDocument(); rDoc.SetRowHidden( nStartRow, nEndRow, nTab, true ); + for (const auto& rSpan : rSpans) + { + // tdf#99913 rows hidden by filter need extra flag + if (rSpan.mnStart <= nStartRow && nStartRow <= rSpan.mnEnd) + { + SCROW nLast = ::std::min(nEndRow, rSpan.mnEnd); + rDoc.SetRowFiltered(nStartRow, nLast, nTab, true); + break; + } + } } // outline settings for this row range commit 5eb0320780f6a4b8085f5dedb880ba4f04cf0424 Author: Caolán McNamara <[email protected]> AuthorDate: Thu Apr 1 21:25:10 2021 +0100 Commit: Andras Timar <[email protected]> CommitDate: Tue Apr 6 13:57:07 2021 +0200 ofz#32796: no pdfium during wmf fuzzing Change-Id: I418615dd68618bb8623a052cf52a85b917d4382d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113492 Tested-by: Caolán McNamara <[email protected]> Reviewed-by: Caolán McNamara <[email protected]> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113527 Tested-by: Jenkins Reviewed-by: Xisco Fauli <[email protected]> diff --git a/vcl/source/filter/ipdf/pdfread.cxx b/vcl/source/filter/ipdf/pdfread.cxx index a36eacbfd41a..80f207a68196 100644 --- a/vcl/source/filter/ipdf/pdfread.cxx +++ b/vcl/source/filter/ipdf/pdfread.cxx @@ -74,6 +74,8 @@ bool getCompatibleStream(SvStream& rInStream, SvStream& rOutStream) { // Downconvert to PDF-1.6. auto pPdfium = vcl::pdf::PDFiumLibrary::get(); + if (!pPdfium) + return false; // Read input into a buffer. SvMemoryStream aInBuffer; commit b261ee04d9176f07ae79e74226a2a23e47b3c4d0 Author: Caolán McNamara <[email protected]> AuthorDate: Tue Mar 2 14:12:20 2021 +0000 Commit: Andras Timar <[email protected]> CommitDate: Tue Apr 6 13:57:01 2021 +0200 make Analog Clock sidebar extension demo work from... https://wiki.openoffice.org/wiki/Sidebar_for_Developers#Example:_Analog_Clock_Extension http://people.apache.org/~af/clock/AnalogClock.oxt presumably compatibility was broken at: commit e66be44b69ee2a1b99bda32af93ea453c669b319 Date: Sun Jun 2 04:46:58 2013 +0200 sidebar: Restrict the minimal width of the sidebar. Change-Id: Id1531d4531a3e9bceb3d37a9e74a7a06497098e3 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111868 Tested-by: Jenkins Reviewed-by: Caolán McNamara <[email protected]> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113525 Reviewed-by: Xisco Fauli <[email protected]> diff --git a/sfx2/source/sidebar/DeckLayouter.cxx b/sfx2/source/sidebar/DeckLayouter.cxx index f90ec176b2d0..bebc75e726ad 100644 --- a/sfx2/source/sidebar/DeckLayouter.cxx +++ b/sfx2/source/sidebar/DeckLayouter.cxx @@ -433,7 +433,16 @@ void GetRequestedSizes ( << " Maximum: " << rItem.maLayoutSize.Maximum); } - sal_Int32 nWidth = xPanel->getMinimalWidth(); + sal_Int32 nWidth = rMinimalWidth; + try + { + // The demo sidebar extension "Analog Clock" fails with + // java.lang.AbstractMethodError here + nWidth = xPanel->getMinimalWidth(); + } + catch (...) + { + } uno::Reference<frame::XDesktop2> xDesktop = frame::Desktop::create(comphelper::getProcessComponentContext()); commit 9f90edc5a9a8ca192508f4fe97e43583dc3e2309 Author: Caolán McNamara <[email protected]> AuthorDate: Fri Apr 2 14:28:37 2021 +0100 Commit: Andras Timar <[email protected]> CommitDate: Tue Apr 6 13:56:56 2021 +0200 ofz: Segv on unknown address Change-Id: I6c69375a89781fc0b87230203335c861efb562f9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113481 Tested-by: Jenkins Reviewed-by: Xisco Fauli <[email protected]> diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx index eb8706596910..85ceb6a0d8f3 100644 --- a/sc/source/core/tool/compiler.cxx +++ b/sc/source/core/tool/compiler.cxx @@ -2643,7 +2643,14 @@ Label_MaskStateMachine: if (eState != ssSkipReference) { *pSym++ = c; - *pSym++ = *pSrc++; + + if( pSym == &cSymbol[ MAXSTRLEN ] ) + { + SetError( FormulaError::StringOverflow); + eState = ssStop; + } + else + *pSym++ = *pSrc++; } bAddToSymbol = false; } commit 72aa34f8f8f51040c6f94efc90a70a44d8d18ff3 Author: Andreas Heinisch <[email protected]> AuthorDate: Sun Apr 4 19:34:47 2021 +0200 Commit: Andras Timar <[email protected]> CommitDate: Tue Apr 6 13:56:51 2021 +0200 tdf#141201 - Round MOD literals to Integer values (regression from commit I8dbfdf4bb2eceac0b5afbddd3f35e1dcde2db68b "tdf#84435: Mod operator does not deal with decimals as described in help"). Change-Id: I74b231d3814148579a3be0a92b7602fa4387281f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113571 Tested-by: Jenkins Reviewed-by: Andreas Heinisch <[email protected]> (cherry picked from commit a9fcd2cf2bfb42693787e8c4197e5988e155e235) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113635 diff --git a/basic/qa/basic_coverage/test_mod_operator.vb b/basic/qa/basic_coverage/test_mod_operator.vb new file mode 100644 index 000000000000..006d97558052 --- /dev/null +++ b/basic/qa/basic_coverage/test_mod_operator.vb @@ -0,0 +1,25 @@ +' +' 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/. +' + +Function doUnitTest as Integer + + doUnitTest = 0 + + Dim a As Double, b as Double + a = 16.4 + b = 5.9 + + ' tdf#141201 - MOD operands are rounded to Integer values before the operation is performed + if (a MOD b <> 4) Then Exit Function + if (16.4 MOD 5.9 <> 4) Then Exit Function + if (15.9 MOD 6.4 <> 4) Then Exit Function + if (2147483647.4 MOD 4 <> 3) Then Exit Function + + doUnitTest = 1 + +End Function diff --git a/basic/source/comp/exprnode.cxx b/basic/source/comp/exprnode.cxx index 02f8801f1aea..1771da0017f3 100644 --- a/basic/source/comp/exprnode.cxx +++ b/basic/source/comp/exprnode.cxx @@ -27,6 +27,8 @@ #include <basic/sberrors.hxx> +#include <rtl/math.hxx> + SbiExprNode::SbiExprNode( std::unique_ptr<SbiExprNode> l, SbiToken t, std::unique_ptr<SbiExprNode> r ) : pLeft(std::move(l)), pRight(std::move(r)), @@ -294,8 +296,13 @@ void SbiExprNode::FoldConstantsBinaryNode(SbiParser* pParser) { double nl = pLeft->nVal; double nr = pRight->nVal; + // tdf#141201 - round MOD literals to Integer values + if (eTok == MOD) + { + nl = rtl::math::round(nl); + nr = rtl::math::round(nr); + } tools::Long ll = 0, lr = 0; - tools::Long llMod = 0, lrMod = 0; if( ( eTok >= AND && eTok <= IMP ) || eTok == IDIV || eTok == MOD ) { @@ -322,8 +329,6 @@ void SbiExprNode::FoldConstantsBinaryNode(SbiParser* pParser) nr = SbxMINLNG; } ll = static_cast<tools::Long>(nl); lr = static_cast<tools::Long>(nr); - llMod = static_cast<tools::Long>(nl); - lrMod = static_cast<tools::Long>(nr); if( bErr ) { pParser->Error( ERRCODE_BASIC_MATH_OVERFLOW ); @@ -388,7 +393,7 @@ void SbiExprNode::FoldConstantsBinaryNode(SbiParser* pParser) { pParser->Error( ERRCODE_BASIC_ZERODIV ); nVal = HUGE_VAL; bError = true; - } else nVal = llMod - lrMod * (llMod/lrMod); + } else nVal = ll - lr * (ll/lr); eType = SbxLONG; break; case AND: nVal = static_cast<double>( ll & lr ); eType = SbxLONG; break; commit b8f72a53c417eb81b51b11088634e1f8fd07c637 Author: Regina Henschel <[email protected]> AuthorDate: Sat Apr 3 13:56:22 2021 +0200 Commit: Andras Timar <[email protected]> CommitDate: Tue Apr 6 13:56:44 2021 +0200 Revert "tdf#141127 Use ODF default values for draw:extrusion-skew" This reverts commit 2bf8c1e0e211601a70b6b28fdb92f636c7969513. Reason for revert: tdf#141268 LibreOffice uses -135deg skew angle as internal default. If a user does not touch the direction, the value is not written to file, although that would be necessary because it is not ODF default. With the patch applied the missing value will be interpreted as 45deg on opening. So the first step is, to write -135deg to file. And then after some time, when wrong files are unlikely, the patch can be applied. A suggestion for writing -135deg is from Julien Nabet in https://gerrit.libreoffice.org/c/core/+/113257. From code it looks good to me, but I have not tested it yet. I would only add some comments to explain the situation. Change-Id: I71673ad2e5376c2a78fa74900e95117b8543e268 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113538 Tested-by: Jenkins Reviewed-by: Regina Henschel <[email protected]> (cherry picked from commit f1b55d3f8e963069fc798bcf559ae9af2bf18b64) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113636 Reviewed-by: Xisco Fauli <[email protected]> diff --git a/svx/qa/unit/customshapes.cxx b/svx/qa/unit/customshapes.cxx index 036aff90543f..db7808a16f2f 100644 --- a/svx/qa/unit/customshapes.cxx +++ b/svx/qa/unit/customshapes.cxx @@ -933,24 +933,6 @@ CPPUNIT_TEST_FIXTURE(CustomshapesTest, testTdf136176) } } } - -CPPUNIT_TEST_FIXTURE(CustomshapesTest, testTdf141127WrongSkewDefault) -{ - // Load a document that has a shape in extrusion mode, but no draw:extrusion-skew attribute. - // Error was, that the shape uses the MS Office binary defaults and so the extruded side faces - // were not left/bottom, but top/right. - OUString sURL = m_directories.getURLFromSrc(sDataDirectory) + "tdf141127_defaultSkewAngle.odp"; - mxComponent = loadFromDesktop(sURL, "com.sun.star.comp.presentation.PresentationDocument"); - CPPUNIT_ASSERT_MESSAGE("Could not load document", mxComponent.is()); - uno::Reference<drawing::XShape> xShape(getShape(0)); - SdrObjCustomShape& rSdrCustomShape( - static_cast<SdrObjCustomShape&>(*GetSdrObjectFromXShape(xShape))); - - // Check left/bottom of bound rect. Without fix it would be left=15994, bottom=6999. - tools::Rectangle aBoundRect(rSdrCustomShape.GetCurrentBoundRect()); - CPPUNIT_ASSERT_EQUAL(tools::Long(15371), aBoundRect.Left()); - CPPUNIT_ASSERT_EQUAL(tools::Long(7622), aBoundRect.Bottom()); -} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/svx/qa/unit/data/tdf141127_defaultSkewAngle.odp b/svx/qa/unit/data/tdf141127_defaultSkewAngle.odp deleted file mode 100644 index 5cd0da96ec20..000000000000 Binary files a/svx/qa/unit/data/tdf141127_defaultSkewAngle.odp and /dev/null differ diff --git a/xmloff/source/draw/ximpcustomshape.cxx b/xmloff/source/draw/ximpcustomshape.cxx index ef58c7664baa..3bd71eae268d 100644 --- a/xmloff/source/draw/ximpcustomshape.cxx +++ b/xmloff/source/draw/ximpcustomshape.cxx @@ -1291,15 +1291,6 @@ void XMLEnhancedCustomShapeContext::endFastElement(sal_Int32 ) } } - //tdf#141127 Add ODF default values. Otherwise defaults from MS Office binary format are used. - if (!maExtrusion.empty()) - { - auto it = std::find_if(maExtrusion.begin(), maExtrusion.end(), - [](css::beans::PropertyValue& rProp){return EASGet(rProp.Name) == EAS_Skew;} ); - if (it == maExtrusion.end()) - GetEnhancedParameterPair(maExtrusion, "50 45", EAS_Skew); - } - SdXMLCustomShapePropertyMerge( mrCustomShapeGeometry, maExtrusion, EASGet( EAS_Extrusion ) ); SdXMLCustomShapePropertyMerge( mrCustomShapeGeometry, maPath, EASGet( EAS_Path ) ); SdXMLCustomShapePropertyMerge( mrCustomShapeGeometry, maTextPath, EASGet( EAS_TextPath ) ); commit 62f927465a51c9366789f870dc59faef4cd6b977 Author: Justin Luth <[email protected]> AuthorDate: Wed Mar 31 09:21:45 2021 +0200 Commit: Andras Timar <[email protected]> CommitDate: Tue Apr 6 13:56:28 2021 +0200 tdf#139786 partial revert tdf#106181 XLSX export: output form controls Not every export is going to be to OOXML format, so don't just set ooxmlexport to true and remove the "if" clause (especially when leaving the comment that this is for DOCX only). This is a partial revert to 7.1 (and backported to 6.4.5) commit 577dd32b1c4eb0a4cff574fbabca987cb52b831b. Change-Id: If7ea32a236715ec779cac302773c4c9da19865a0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113399 Tested-by: Jenkins Reviewed-by: Justin Luth <[email protected]> (cherry picked from commit a3c5c0f7ce73001adab7475fde1f8ffec4eef48b) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113484 Reviewed-by: Xisco Fauli <[email protected]> diff --git a/filter/source/msfilter/eschesdo.cxx b/filter/source/msfilter/eschesdo.cxx index 24f47d62909f..4972bcaef6c6 100644 --- a/filter/source/msfilter/eschesdo.cxx +++ b/filter/source/msfilter/eschesdo.cxx @@ -421,8 +421,8 @@ sal_uInt32 ImplEESdrWriter::ImplWriteShape( ImplEESdrObject& rObj, { const Reference< XPropertySet > xPropSet = rObj.mXPropSet; const Reference<XPropertySetInfo> xPropInfo = xPropSet.is() ? xPropSet->getPropertySetInfo() : Reference<XPropertySetInfo>(); - // This code is expected to be called only for DOCX format. - if (xPropInfo.is()) + // This code is expected to be called only for DOCX/XLSX formats. + if (xPropInfo.is() && bOOxmlExport) { bool bInline = false; if (xPropInfo->hasPropertyByName("AnchorType")) @@ -834,7 +834,7 @@ void ImplEESdrWriter::ImplInitPageValues() } void ImplEESdrWriter::ImplWritePage( - EscherSolverContainer& rSolverContainer ) + EscherSolverContainer& rSolverContainer, bool ooxmlExport ) { ImplInitPageValues(); @@ -845,7 +845,7 @@ void ImplEESdrWriter::ImplWritePage( mXShapes->getByIndex( n )) ); if( aObj.IsValid() ) { - ImplWriteShape( aObj, rSolverContainer, true ); + ImplWriteShape( aObj, rSolverContainer, ooxmlExport ); } } } @@ -924,10 +924,10 @@ void ImplEESdrWriter::ImplFlushSolverContainer() } } -void ImplEESdrWriter::ImplWriteCurrentPage() +void ImplEESdrWriter::ImplWriteCurrentPage(bool ooxmlExport) { assert(mpSolverContainer && "ImplEESdrWriter::ImplWriteCurrentPage: no SolverContainer"); - ImplWritePage( *mpSolverContainer ); + ImplWritePage( *mpSolverContainer, ooxmlExport ); ImplExitPage(); } @@ -937,16 +937,16 @@ sal_uInt32 ImplEESdrWriter::ImplWriteTheShape( ImplEESdrObject& rObj , bool ooxm return ImplWriteShape( rObj, *mpSolverContainer, ooxmlExport ); } -void EscherEx::AddSdrPage( const SdrPage& rPage ) +void EscherEx::AddSdrPage( const SdrPage& rPage, bool ooxmlExport ) { if ( mpImplEESdrWriter->ImplInitPage( rPage ) ) - mpImplEESdrWriter->ImplWriteCurrentPage(); + mpImplEESdrWriter->ImplWriteCurrentPage(ooxmlExport); } -void EscherEx::AddUnoShapes( const Reference< XShapes >& rxShapes ) +void EscherEx::AddUnoShapes( const Reference< XShapes >& rxShapes, bool ooxmlExport ) { if ( mpImplEESdrWriter->ImplInitUnoShapes( rxShapes ) ) - mpImplEESdrWriter->ImplWriteCurrentPage(); + mpImplEESdrWriter->ImplWriteCurrentPage(ooxmlExport); } sal_uInt32 EscherEx::AddSdrObject( const SdrObject& rObj, bool ooxmlExport ) diff --git a/filter/source/msfilter/eschesdo.hxx b/filter/source/msfilter/eschesdo.hxx index fc1522c79dca..d2ea3d52b235 100644 --- a/filter/source/msfilter/eschesdo.hxx +++ b/filter/source/msfilter/eschesdo.hxx @@ -113,7 +113,7 @@ class ImplEESdrWriter std::unique_ptr<EscherSolverContainer> mpSolverContainer; void ImplInitPageValues(); - void ImplWritePage( EscherSolverContainer& rSolver ); + void ImplWritePage( EscherSolverContainer& rSolver, bool ooxmlExport ); sal_uInt32 ImplWriteShape( ImplEESdrObject& rObj, EscherSolverContainer& rSolver, const bool bOOxmlExport = false ); // returns ShapeID @@ -133,7 +133,7 @@ public: EscherExHostAppData* ImplGetHostData() { return mpHostAppData; } bool ImplInitPage( const SdrPage& rPage ); bool ImplInitUnoShapes( const css::uno::Reference< css::drawing::XShapes >& rxShapes ); - void ImplWriteCurrentPage(); + void ImplWriteCurrentPage( bool ooxmlExport ); sal_uInt32 ImplWriteTheShape( ImplEESdrObject& rObj, bool ooxmlExport ); void ImplExitPage(); }; diff --git a/include/filter/msfilter/escherex.hxx b/include/filter/msfilter/escherex.hxx index f55074ecf856..9ab3d891da2a 100644 --- a/include/filter/msfilter/escherex.hxx +++ b/include/filter/msfilter/escherex.hxx @@ -1158,8 +1158,8 @@ public: // ...Sdr... implemented in eschesdo.cxx - void AddSdrPage( const SdrPage& rPage ); - void AddUnoShapes( const css::uno::Reference< css::drawing::XShapes >& rxShapes ); + void AddSdrPage( const SdrPage& rPage, bool ooxmlExport = false ); + void AddUnoShapes( const css::uno::Reference< css::drawing::XShapes >& rxShapes, bool ooxmlExport = false ); /// returns the ShapeID sal_uInt32 AddSdrObject( const SdrObject& rObj, bool ooxmlExport = false ); diff --git a/sc/source/filter/excel/xeescher.cxx b/sc/source/filter/excel/xeescher.cxx index 22c2462df750..7a7514aa7061 100644 --- a/sc/source/filter/excel/xeescher.cxx +++ b/sc/source/filter/excel/xeescher.cxx @@ -1804,7 +1804,7 @@ void XclExpObjectManager::StartSheet() rtl::Reference< XclExpRecordBase > XclExpObjectManager::ProcessDrawing( const SdrPage* pSdrPage ) { if( pSdrPage ) - mxEscherEx->AddSdrPage( *pSdrPage ); + mxEscherEx->AddSdrPage( *pSdrPage, GetOutput() != EXC_OUTPUT_BINARY ); // the first dummy object may still be open OSL_ENSURE( mxEscherEx->GetGroupLevel() <= 1, "XclExpObjectManager::ProcessDrawing - still groups open?" ); while( mxEscherEx->GetGroupLevel() ) @@ -1816,7 +1816,7 @@ rtl::Reference< XclExpRecordBase > XclExpObjectManager::ProcessDrawing( const Sd rtl::Reference< XclExpRecordBase > XclExpObjectManager::ProcessDrawing( const Reference< XShapes >& rxShapes ) { if( rxShapes.is() ) - mxEscherEx->AddUnoShapes( rxShapes ); + mxEscherEx->AddUnoShapes( rxShapes, GetOutput() != EXC_OUTPUT_BINARY ); // the first dummy object may still be open OSL_ENSURE( mxEscherEx->GetGroupLevel() <= 1, "XclExpObjectManager::ProcessDrawing - still groups open?" ); while( mxEscherEx->GetGroupLevel() ) _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
