Makefile.in | 2 bridges/source/cpp_uno/shared/vtablefactory.cxx | 18 chart2/source/view/main/VLegend.cxx | 17 configure.ac | 6 connectivity/source/commontools/TTableHelper.cxx | 5 connectivity/source/drivers/firebird/DatabaseMetaData.cxx | 2 drawinglayer/source/processor2d/vclpixelprocessor2d.cxx | 48 emfio/qa/cppunit/emf/EmfImportTest.cxx | 36 emfio/qa/cppunit/emf/data/test_mm_hienglish_ref.emf |binary emfio/qa/cppunit/emf/data/test_mm_himetric_ref.emf |binary emfio/source/reader/mtftools.cxx | 58 extensions/source/macosx/spotlight/OOoContentDataParser.h | 2 extensions/source/macosx/spotlight/OOoContentDataParser.m | 7 extensions/source/macosx/spotlight/OOoMetaDataParser.h | 2 extensions/source/macosx/spotlight/OOoMetaDataParser.m | 6 extensions/source/propctrlr/standardcontrol.cxx | 5 external/mariadb-connector-c/StaticLibrary_mariadb-connector-c.mk | 3 external/mariadb-connector-c/UnpackedTarball_mariadb-connector-c.mk | 10 external/nss/nss_macosx.patch | 21 external/python3/ExternalProject_python3.mk | 20 filter/source/msfilter/eschesdo.cxx | 37 formula/source/ui/dlg/funcutl.cxx | 8 fpicker/source/aqua/AquaFilePickerDelegate.hxx | 2 fpicker/source/aqua/SalAquaFilePicker.mm | 8 hardened_runtime.xcent.in | 2 helpcontent2 | 2 i18npool/CustomTarget_breakiterator.mk | 1 i18npool/source/breakiterator/data/char.txt | 119 icon-themes/colibre/cmd/32/mergecells.png |binary icon-themes/colibre/cmd/32/selecttable.png |binary icon-themes/colibre/cmd/32/splitcell.png |binary icon-themes/colibre/cmd/32/togglemergecells.png |binary icon-themes/colibre/cmd/lc_mergecells.png |binary icon-themes/colibre/cmd/lc_selecttable.png |binary icon-themes/colibre/cmd/lc_splitcell.png |binary icon-themes/colibre/cmd/lc_togglemergecells.png |binary icon-themes/colibre/cmd/sc_mergecells.png |binary icon-themes/colibre/cmd/sc_selecttable.png |binary icon-themes/colibre/cmd/sc_splitcell.png |binary icon-themes/colibre/cmd/sc_togglemergecells.png |binary icon-themes/colibre_svg/cmd/32/mergecells.svg | 2 icon-themes/colibre_svg/cmd/32/selecttable.svg | 2 icon-themes/colibre_svg/cmd/32/splitcell.svg | 2 icon-themes/colibre_svg/cmd/32/togglemergecells.svg | 2 icon-themes/colibre_svg/cmd/lc_mergecells.svg | 2 icon-themes/colibre_svg/cmd/lc_selecttable.svg | 2 icon-themes/colibre_svg/cmd/lc_splitcell.svg | 2 icon-themes/colibre_svg/cmd/lc_togglemergecells.svg | 2 icon-themes/colibre_svg/cmd/sc_mergecells.svg | 4 icon-themes/colibre_svg/cmd/sc_selecttable.svg | 3 icon-themes/colibre_svg/cmd/sc_splitcell.svg | 4 icon-themes/colibre_svg/cmd/sc_togglemergecells.svg | 5 include/formula/funcutl.hxx | 5 include/o3tl/lru_map.hxx | 1 include/svx/linectrl.hxx | 5 include/svx/sdrpagewindow.hxx | 4 include/svx/sidebar/LinePropertyPanelBase.hxx | 4 odk/CustomTarget_unowinreg.mk | 2 readlicense_oo/license/CREDITS.fodt | 4572 +++++----- sal/rtl/math.cxx | 99 sc/source/core/data/postit.cxx | 11 sc/source/filter/xml/xmlexprt.cxx | 5 sc/source/ui/namedlg/namedlg.cxx | 16 sd/Library_sd.mk | 5 sd/source/filter/eppt/epptso.cxx | 2 sd/source/ui/func/futransf.cxx | 3 sd/source/ui/view/drviews2.cxx | 4 sd/source/ui/view/sdview3.cxx | 7 sfx2/source/appl/shutdowniconaqua.mm | 18 sfx2/source/sidebar/SidebarController.cxx | 15 solenv/bin/macosx-codesign-app-bundle | 10 solenv/clang-format/blacklist | 1 solenv/flatpak-manifest.in | 6 svx/source/sidebar/line/LinePropertyPanelBase.cxx | 18 svx/source/svdraw/sdrpagewindow.cxx | 33 svx/source/svdraw/svdotxat.cxx | 11 svx/source/svdraw/svdpagv.cxx | 11 svx/source/tbxctrls/linectrl.cxx | 10 sw/CppunitTest_sw_ooxmlexport16.mk | 14 sw/Module_sw.mk | 1 sw/qa/core/layout/data/btlr-nested-cell.odt |binary sw/qa/core/layout/layout.cxx | 26 sw/qa/extras/layout/data/tdf136816.odt |binary sw/qa/extras/layout/layout.cxx | 13 sw/qa/extras/ooxmlexport/data/tdf123621.docx |binary sw/qa/extras/ooxmlexport/data/tdf138612.docx |binary sw/qa/extras/ooxmlexport/data/tdf138892_noNumbering.docx |binary sw/qa/extras/ooxmlexport/ooxmlexport10.cxx | 2 sw/qa/extras/ooxmlexport/ooxmlexport15.cxx | 11 sw/qa/extras/ooxmlexport/ooxmlexport16.cxx | 43 sw/qa/extras/ooxmlexport/ooxmlexport5.cxx | 17 sw/qa/extras/uiwriter/data3/tdf138130.docx |binary sw/qa/extras/uiwriter/uiwriter3.cxx | 30 sw/qa/extras/ww8export/data/tdf128501.doc |binary sw/qa/extras/ww8export/ww8export3.cxx | 17 sw/qa/uitest/table/sheetToTable.py | 107 sw/qa/uitest/writer_tests/data/hiddenRow.ods |binary sw/qa/uitest/writer_tests/data/tdf129083.odt |binary sw/source/core/crsr/swcrsr.cxx | 10 sw/source/core/doc/docbm.cxx | 7 sw/source/core/layout/anchoreddrawobject.cxx | 12 sw/source/core/layout/frmtool.cxx | 9 sw/source/core/layout/ssfrm.cxx | 3 sw/source/core/txtnode/ndtxt.cxx | 11 sw/source/core/view/viewsh.cxx | 5 sw/source/uibase/dochdl/swdtflvr.cxx | 19 sw/source/uibase/docvw/AnnotationWin2.cxx | 11 sw/uiconfig/swriter/ui/pagemargincontrol.ui | 2 translations | 2 vcl/source/filter/jpeg/JpegReader.cxx | 4 vcl/source/filter/jpeg/jpeg.h | 2 vcl/source/filter/jpeg/jpegc.cxx | 3 vcl/source/window/menu.cxx | 7 vcl/unx/gtk3/a11y/gtk3atkaction.cxx | 2 vcl/unx/gtk3/gtk3gtkinst.cxx | 12 vcl/unx/gtk3/gtk3gtksalmenu.cxx | 4 writerfilter/qa/cppunittests/dmapper/PropertyMap.cxx | 24 writerfilter/qa/cppunittests/dmapper/data/follow-page-top-margin.docx |binary writerfilter/source/dmapper/DomainMapper.cxx | 6 writerfilter/source/dmapper/DomainMapper.hxx | 2 writerfilter/source/dmapper/DomainMapper_Impl.cxx | 11 writerfilter/source/dmapper/DomainMapper_Impl.hxx | 2 writerfilter/source/dmapper/PropertyMap.cxx | 9 writerfilter/source/dmapper/TablePropertiesHandler.hxx | 3 xmlsecurity/qa/unit/pdfsigning/pdfsigning.cxx | 7 125 files changed, 3255 insertions(+), 2572 deletions(-)
New commits: commit 6d7e059e8f632f35496b8528a90d6ad3dc4f6ae1 Author: Michael Weghorn <[email protected]> AuthorDate: Fri Dec 18 08:21:02 2020 +0100 Commit: Michael Weghorn <[email protected]> CommitDate: Fri Dec 18 08:21:02 2020 +0100 Revert "HACK: Revert "tdf#132940 Crash in mergedlo!vcl::Region::operator="" tdf#131281 has now properly been fixed with commit 5592d5e97810e68bcc0a70b2892c4ad487a06f81 Author: Armin Le Grand (allotropia) <[email protected]> Date: Tue Dec 15 00:52:05 2020 +0100 tdf#131281 Always draw FormControls when TiledRendering When FormControls are not in layout mode it would be necessary to have real VCL ChildWindows in the client (usually the office). While this is done in the office itself and thus the visualization of FormControls (and their usage) is guaranteed, this is currently not the case for existing clients of TiledRendering. The big solution would be an API for the TiledRendering client to get infos for FormControls and create these locally (what would allow to have these editable/interactive and in the style of the client system). As long as this is not the case, I add this fallback to render the FormControls as content to the tiles to get them visualized at all. so drop the hack that was only done to make the revert of the commit that introduced the regression tdf#132940 apply cleanly. This reverts commit 1297eab938570ef6ffd7526fb59e1b97fdb22de8. diff --git a/include/svx/sdrpagewindow.hxx b/include/svx/sdrpagewindow.hxx index 80417a6729a0..f5cb98c297da 100644 --- a/include/svx/sdrpagewindow.hxx +++ b/include/svx/sdrpagewindow.hxx @@ -68,8 +68,8 @@ public: rtl::Reference< sdr::overlay::OverlayManager > const & GetOverlayManager() const; // #i72752# allow patcing SdrPaintWindow from SdrPageView::DrawLayer if needed - void patchPaintWindow(SdrPaintWindow& rPaintWindow); - void unpatchPaintWindow(); + [[nodiscard]] SdrPaintWindow* patchPaintWindow(SdrPaintWindow& rPaintWindow); + void unpatchPaintWindow(SdrPaintWindow* pPreviousPaintWindow); // the repaint method. For migration from pPaintProc, use one more parameter void PrePaint(); diff --git a/svx/source/svdraw/sdrpagewindow.cxx b/svx/source/svdraw/sdrpagewindow.cxx index fb3155c0eb14..6d197dab5282 100644 --- a/svx/source/svdraw/sdrpagewindow.cxx +++ b/svx/source/svdraw/sdrpagewindow.cxx @@ -163,22 +163,41 @@ rtl::Reference< sdr::overlay::OverlayManager > const & SdrPageWindow::GetOverlay return GetPaintWindow().GetOverlayManager(); } -void SdrPageWindow::patchPaintWindow(SdrPaintWindow& rPaintWindow) +SdrPaintWindow* SdrPageWindow::patchPaintWindow(SdrPaintWindow& rPaintWindow) { - mpImpl->mpOriginalPaintWindow = mpImpl->mpPaintWindow; - mpImpl->mpPaintWindow = &rPaintWindow; - mpImpl->mpOriginalPaintWindow->setPatched(&rPaintWindow); + if (!mpImpl->mpOriginalPaintWindow) + { + // first patch + mpImpl->mpOriginalPaintWindow = mpImpl->mpPaintWindow; + mpImpl->mpPaintWindow = &rPaintWindow; + mpImpl->mpOriginalPaintWindow->setPatched(&rPaintWindow); + return mpImpl->mpOriginalPaintWindow; + } + else + { + // second or more patch + auto pPreviousPaintWindow = mpImpl->mpPaintWindow; + mpImpl->mpPaintWindow = &rPaintWindow; + mpImpl->mpOriginalPaintWindow->setPatched(&rPaintWindow); + return pPreviousPaintWindow; + } } -void SdrPageWindow::unpatchPaintWindow() +void SdrPageWindow::unpatchPaintWindow(SdrPaintWindow* pPreviousPaintWindow) { - DBG_ASSERT(mpImpl->mpOriginalPaintWindow, "SdrPageWindow::unpatchPaintWindow: paint window not patched!" ); - if (mpImpl->mpOriginalPaintWindow) + if (pPreviousPaintWindow == mpImpl->mpOriginalPaintWindow) { + // first patch mpImpl->mpPaintWindow = mpImpl->mpOriginalPaintWindow; mpImpl->mpOriginalPaintWindow->setPatched(nullptr); mpImpl->mpOriginalPaintWindow = nullptr; } + else + { + // second or more patch + mpImpl->mpPaintWindow = pPreviousPaintWindow; + mpImpl->mpOriginalPaintWindow->setPatched(pPreviousPaintWindow); + } } void SdrPageWindow::PrePaint() diff --git a/svx/source/svdraw/svdpagv.cxx b/svx/source/svdraw/svdpagv.cxx index 215e37bc7c94..480182782984 100644 --- a/svx/source/svdraw/svdpagv.cxx +++ b/svx/source/svdraw/svdpagv.cxx @@ -32,6 +32,7 @@ #include <svx/sdrpagewindow.hxx> #include <svx/sdrpaintwindow.hxx> #include <comphelper/lok.hxx> +#include <comphelper/scopeguard.hxx> #include <basegfx/range/b2irectangle.hxx> using namespace ::com::sun::star; @@ -290,13 +291,13 @@ void SdrPageView::DrawLayer(SdrLayerID nID, OutputDevice* pGivenTarget, else aTemporaryPaintWindow.SetRedrawRegion(vcl::Region(rRect)); // patch the ExistingPageWindow - pPreparedTarget->patchPaintWindow(aTemporaryPaintWindow); - + auto pPreviousWindow = pPreparedTarget->patchPaintWindow(aTemporaryPaintWindow); + // unpatch window when leaving the scope + const ::comphelper::ScopeGuard aGuard( + [&pPreviousWindow, &pPreparedTarget]() { pPreparedTarget->unpatchPaintWindow(pPreviousWindow); } ); + // redraw the layer pPreparedTarget->RedrawLayer(&nID, pRedirector, pPageFrame); - - // restore the ExistingPageWindow - pPreparedTarget->unpatchPaintWindow(); } else { diff --git a/sw/source/core/view/viewsh.cxx b/sw/source/core/view/viewsh.cxx index b711cf472bad..ef26275ab9fd 100644 --- a/sw/source/core/view/viewsh.cxx +++ b/sw/source/core/view/viewsh.cxx @@ -1719,6 +1719,7 @@ class RenderContextGuard { std::unique_ptr<SdrPaintWindow> m_TemporaryPaintWindow; SdrPageWindow* m_pPatchedPageWindow; + SdrPaintWindow* m_pPreviousPaintWindow = nullptr; public: RenderContextGuard(VclPtr<vcl::RenderContext>& pRef, vcl::RenderContext* pValue, SwViewShell* pShell) @@ -1741,7 +1742,7 @@ public: if (nullptr != m_pPatchedPageWindow) { m_TemporaryPaintWindow.reset(new SdrPaintWindow(*pDrawView, *pValue)); - m_pPatchedPageWindow->patchPaintWindow(*m_TemporaryPaintWindow); + m_pPreviousPaintWindow = m_pPatchedPageWindow->patchPaintWindow(*m_TemporaryPaintWindow); } } } @@ -1752,7 +1753,7 @@ public: { if(nullptr != m_pPatchedPageWindow) { - m_pPatchedPageWindow->unpatchPaintWindow(); + m_pPatchedPageWindow->unpatchPaintWindow(m_pPreviousPaintWindow); } } }; commit 2869cb0306c61e88a6da82516c7f8f9680989663 Merge: ab1a1dd57489 5592d5e97810 Author: Michael Weghorn <[email protected]> AuthorDate: Fri Dec 18 08:20:18 2020 +0100 Commit: Michael Weghorn <[email protected]> CommitDate: Fri Dec 18 08:20:18 2020 +0100 Merge branch 'libreoffice-7-0' into distro/lhm/libreoffice-7-0+backports Change-Id: I5b6d41823bc68ee9e8bb940855a8572e5d04b96d commit 5592d5e97810e68bcc0a70b2892c4ad487a06f81 Author: Armin Le Grand (allotropia) <[email protected]> AuthorDate: Tue Dec 15 00:52:05 2020 +0100 Commit: Michael Weghorn <[email protected]> CommitDate: Fri Dec 18 07:46:18 2020 +0100 tdf#131281 Always draw FormControls when TiledRendering When FormControls are not in layout mode it would be necessary to have real VCL ChildWindows in the client (usually the office). While this is done in the office itself and thus the visualization of FormControls (and their usage) is guaranteed, this is currently not the case for existing clients of TiledRendering. The big solution would be an API for the TiledRendering client to get infos for FormControls and create these locally (what would allow to have these editable/interactive and in the style of the client system). As long as this is not the case, I add this fallback to render the FormControls as content to the tiles to get them visualized at all. Change-Id: I0f7a5e7dc028373145a6a19b639ce82bdafc149d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107735 Tested-by: Jenkins Reviewed-by: Armin Le Grand <[email protected]> (cherry picked from commit bcb8d2d3a08991b4e57189b81f8702aaa8af8a89) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107805 Reviewed-by: Michael Weghorn <[email protected]> diff --git a/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx b/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx index 2e7aa5c96bad..f64d2b474246 100644 --- a/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx +++ b/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx @@ -20,6 +20,7 @@ #include "vclpixelprocessor2d.hxx" #include "vclhelperbufferdevice.hxx" #include "helperwrongspellrenderer.hxx" +#include <comphelper/lok.hxx> #include <sal/log.hxx> #include <tools/stream.hxx> @@ -663,31 +664,50 @@ void VclPixelProcessor2D::processControlPrimitive2D( if (xNewGraphics.is()) { - // link graphics and view - xControlView->setGraphics(xNewGraphics); - - // get position - const basegfx::B2DHomMatrix aObjectToPixel(maCurrentTransformation - * rControlPrimitive.getTransform()); - const basegfx::B2DPoint aTopLeftPixel(aObjectToPixel * basegfx::B2DPoint(0.0, 0.0)); - // find out if the control is already visualized as a VCL-ChildWindow. If yes, // it does not need to be painted at all. uno::Reference<awt::XWindow2> xControlWindow(rXControl, uno::UNO_QUERY_THROW); - const bool bControlIsVisibleAsChildWindow(rXControl->getPeer().is() - && xControlWindow->isVisible()); + bool bControlIsVisibleAsChildWindow(rXControl->getPeer().is() + && xControlWindow->isVisible()); + + // tdf#131281 The FormControls are not painted when using the Tiled Rendering for a simple + // reason: when e.g. bControlIsVisibleAsChildWindow is true. This is the case because the + // office is in non-layout mode (default for controls at startup). For the common office + // this means that there exists a real VCL-System-Window for the control, so it is *not* + // painted here due to being exactly obscured by that real Window (and creates danger of + // flickering, too). + // Tiled Rendering clients usually do *not* have real VCL-Windows for the controls, but + // exactly that would be needed on each client displaying the tiles (what would be hard + // to do but also would have advantages - the clients would have real controls in the + // shape of their traget system which could be interacted with...). It is also what the + // office does. + // For now, fallback to just render these controls when Tiled Rendering is active to just + // have them displayed on all clients. + if (bControlIsVisibleAsChildWindow && comphelper::LibreOfficeKit::isActive()) + { + // Do force paint when we are in Tiled Renderer and FormControl is 'visible' + bControlIsVisibleAsChildWindow = false; + } if (!bControlIsVisibleAsChildWindow) { - // draw it. Do not forget to use the evtl. offsetted origin of the target device, + // Needs to be drawn. Link new graphics and view + xControlView->setGraphics(xNewGraphics); + + // get position + const basegfx::B2DHomMatrix aObjectToPixel(maCurrentTransformation + * rControlPrimitive.getTransform()); + const basegfx::B2DPoint aTopLeftPixel(aObjectToPixel * basegfx::B2DPoint(0.0, 0.0)); + + // Do not forget to use the evtl. offsetted origin of the target device, // e.g. when used with mask/transparence buffer device const Point aOrigin(mpOutputDevice->GetMapMode().GetOrigin()); xControlView->draw(aOrigin.X() + basegfx::fround(aTopLeftPixel.getX()), aOrigin.Y() + basegfx::fround(aTopLeftPixel.getY())); - } - // restore original graphics - xControlView->setGraphics(xOriginalGraphics); + // restore original graphics + xControlView->setGraphics(xOriginalGraphics); + } } } catch (const uno::Exception&) commit 33d85de4b964638192eabdb5753a5ca87d6892b7 Author: Xisco Fauli <[email protected]> AuthorDate: Tue Dec 1 19:17:24 2020 +0100 Commit: Miklos Vajna <[email protected]> CommitDate: Thu Dec 17 16:52:15 2020 +0100 tdf#128501: DOC export: fix lost bitmap fill for OOXML custom shapes this fix is based on 7032be2e9edd82dad2d67f1582aaa57676bda4a1 which fixes the same problem for PPT filter Change-Id: Id62c29892dd3fce42d27e2e46a7933154cb973f6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107003 Tested-by: Jenkins Reviewed-by: Xisco Fauli <[email protected]> (cherry picked from commit 2f9325b270fab10f6900aec30ca27135363c4c69) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107094 Reviewed-by: Miklos Vajna <[email protected]> diff --git a/filter/source/msfilter/eschesdo.cxx b/filter/source/msfilter/eschesdo.cxx index efe3c908b6b4..1443b46702c6 100644 --- a/filter/source/msfilter/eschesdo.cxx +++ b/filter/source/msfilter/eschesdo.cxx @@ -33,6 +33,7 @@ #include <com/sun/star/text/XText.hpp> #include <com/sun/star/text/TextContentAnchorType.hpp> #include <com/sun/star/drawing/CircleKind.hpp> +#include <com/sun/star/drawing/FillStyle.hpp> #include <comphelper/extract.hxx> #include <com/sun/star/drawing/HomogenMatrix3.hpp> #include <basegfx/matrix/b2dhommatrix.hxx> @@ -263,15 +264,35 @@ sal_uInt32 ImplEESdrWriter::ImplWriteShape( ImplEESdrObject& rObj, } else { - addShape(sal::static_int_cast< sal_uInt16 >(eShapeType), - nMirrorFlags | ShapeFlag::HaveShapeProperty | ShapeFlag::HaveAnchor); - aPropOpt.CreateCustomShapeProperties( eShapeType, rObj.GetShapeRef() ); - aPropOpt.CreateFillProperties( rObj.mXPropSet, true ); - if ( rObj.ImplGetText() ) + const Reference< XPropertySet > xPropSet = rObj.mXPropSet; + drawing::FillStyle eFS = drawing::FillStyle_NONE; + if(xPropSet.is()) + { + uno::Reference< XPropertySetInfo > xPropInfo = xPropSet->getPropertySetInfo(); + if ( xPropInfo.is() && xPropInfo->hasPropertyByName("FillStyle")) + xPropSet->getPropertyValue("FillStyle") >>= eFS; + } + + if (eFS == drawing::FillStyle_BITMAP && eShapeType == mso_sptMax) + { + // We can't map this custom shape to a DOC preset and it has a bitmap fill. + // Make sure that at least the bitmap fill is not lost. + addShape( ESCHER_ShpInst_PictureFrame, ShapeFlag::HaveShapeProperty | ShapeFlag::HaveAnchor ); + if ( aPropOpt.CreateGraphicProperties( rObj.mXPropSet, "Bitmap", false, true, true, bOOxmlExport ) ) + aPropOpt.AddOpt( ESCHER_Prop_LockAgainstGrouping, 0x800080 ); + } + else { - if ( !aPropOpt.IsFontWork() ) - aPropOpt.CreateTextProperties( rObj.mXPropSet, mpEscherEx->QueryTextID( - rObj.GetShapeRef(), rObj.GetShapeId() ), true, false ); + addShape(sal::static_int_cast< sal_uInt16 >(eShapeType), + nMirrorFlags | ShapeFlag::HaveShapeProperty | ShapeFlag::HaveAnchor); + aPropOpt.CreateCustomShapeProperties( eShapeType, rObj.GetShapeRef() ); + aPropOpt.CreateFillProperties( rObj.mXPropSet, true ); + if ( rObj.ImplGetText() ) + { + if ( !aPropOpt.IsFontWork() ) + aPropOpt.CreateTextProperties( rObj.mXPropSet, mpEscherEx->QueryTextID( + rObj.GetShapeRef(), rObj.GetShapeId() ), true, false ); + } } } } diff --git a/sw/qa/extras/ww8export/data/tdf128501.doc b/sw/qa/extras/ww8export/data/tdf128501.doc new file mode 100644 index 000000000000..3313e397a961 Binary files /dev/null and b/sw/qa/extras/ww8export/data/tdf128501.doc differ diff --git a/sw/qa/extras/ww8export/ww8export3.cxx b/sw/qa/extras/ww8export/ww8export3.cxx index a663a034074b..7d8756fbe6cb 100644 --- a/sw/qa/extras/ww8export/ww8export3.cxx +++ b/sw/qa/extras/ww8export/ww8export3.cxx @@ -71,6 +71,23 @@ DECLARE_WW8EXPORT_TEST(testArabicZeroNumbering, "arabic-zero-numbering.doc") aMap["NumberingType"].get<sal_uInt16>()); } +DECLARE_WW8EXPORT_TEST(testTdf128501, "tdf128501.doc") +{ + if (!mbExported) + { + uno::Reference<drawing::XShapeDescriptor> xShapeDescriptor = getShape(1); + CPPUNIT_ASSERT_EQUAL(OUString("com.sun.star.drawing.CustomShape"), xShapeDescriptor->getShapeType()); + } + else + { + uno::Reference<drawing::XShapeDescriptor> xShapeDescriptor = getShape(1); + // Without the fix in place, this test would have failed with + // - Expected: FrameShape + // - Actual : com.sun.star.drawing.CustomShape + CPPUNIT_ASSERT_EQUAL(OUString("FrameShape"), xShapeDescriptor->getShapeType()); + } +} + CPPUNIT_TEST_FIXTURE(SwModelTestBase, testArabicZeroNumberingFootnote) { // Create a document, set footnote numbering type to ARABIC_ZERO. commit 4114e5304425ff54e6957ef417e96e01a4cef532 Author: Tünde Tóth <[email protected]> AuthorDate: Tue Dec 15 14:17:15 2020 +0100 Commit: Xisco Fauli <[email protected]> CommitDate: Thu Dec 17 15:20:43 2020 +0100 tdf#136816: fix hidden legend entries in "Column and Line" charts Regression from commit: 300e65cc47f3d6ae1563350757dbfadc080d7452 (tdf#123268 fix lost chart if all legend entries are hidden) Change-Id: Id59cd8d681dada123feadbe7910be7fbc7ec37f6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107757 Tested-by: Jenkins Tested-by: László Németh <[email protected]> Reviewed-by: László Németh <[email protected]> (cherry picked from commit 1eb25c11500a235aa141a327a5489f6861e60a89) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107802 Reviewed-by: Xisco Fauli <[email protected]> Signed-off-by: Xisco Fauli <[email protected]> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107874 diff --git a/chart2/source/view/main/VLegend.cxx b/chart2/source/view/main/VLegend.cxx index d16495e426f3..1975e5d8404c 100644 --- a/chart2/source/view/main/VLegend.cxx +++ b/chart2/source/view/main/VLegend.cxx @@ -1000,8 +1000,6 @@ void VLegend::createShapes( std::vector<ViewLegendEntry> aNewEntries = pLegendEntryProvider->createLegendEntries( aMaxSymbolExtent, eLegendPosition, xLegendProp, xLegendContainer, m_xShapeFactory, m_xContext, mrModel); - if (aNewEntries.size() == 0) - return; aViewEntries.insert( aViewEntries.end(), aNewEntries.begin(), aNewEntries.end() ); } } @@ -1042,17 +1040,14 @@ void VLegend::createShapes( // create the buttons pButton->createShapes(xModelPage); } - } - Reference< drawing::XShape > xBorder = - pShapeFactory->createRectangle( xLegendContainer, - aLegendSize, - awt::Point(0,0), - aLineFillProperties.first, - aLineFillProperties.second, ShapeFactory::StackPosition::Bottom ); + Reference<drawing::XShape> xBorder = pShapeFactory->createRectangle( + xLegendContainer, aLegendSize, awt::Point(0, 0), aLineFillProperties.first, + aLineFillProperties.second, ShapeFactory::StackPosition::Bottom); - //because of this name this border will be used for marking the legend - ShapeFactory::setShapeName( xBorder, "MarkHandles" ); + //because of this name this border will be used for marking the legend + ShapeFactory::setShapeName(xBorder, "MarkHandles"); + } } } catch( const uno::Exception & ) diff --git a/sw/qa/extras/layout/data/tdf136816.odt b/sw/qa/extras/layout/data/tdf136816.odt new file mode 100644 index 000000000000..0b6599bea319 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf136816.odt differ diff --git a/sw/qa/extras/layout/layout.cxx b/sw/qa/extras/layout/layout.cxx index acf877c323bf..27eca2137324 100644 --- a/sw/qa/extras/layout/layout.cxx +++ b/sw/qa/extras/layout/layout.cxx @@ -4215,6 +4215,19 @@ static SwRect lcl_getVisibleFlyObjRect(SwWrtShell* pWrtShell) return aFlyRect; } +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf136816) +{ + SwDoc* pDoc = createDoc("tdf136816.odt"); + SwDocShell* pShell = pDoc->GetDocShell(); + // Dump the rendering of the first page as an XML file. + std::shared_ptr<GDIMetaFile> xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + // Check number of legend entries + assertXPath(pXmlDoc, "//text[contains(text(),\"Column\")]", 2); +} + CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testStableAtPageAnchoredFlyPosition) { // this doc has two page-anchored frames: one tiny on page 3 and one large on page 4. commit 8b1efde9272adb2b7e4c438eba63193249216c9c Author: Caolán McNamara <[email protected]> AuthorDate: Tue Dec 15 17:35:32 2020 +0000 Commit: Xisco Fauli <[email protected]> CommitDate: Thu Dec 17 14:10:32 2020 +0100 tdf#138950 allow up to one short read to not trigger cancelling import Change-Id: Iedbfc344c311c40244ba2f58c56c62ac47584028 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107794 Tested-by: Jenkins Reviewed-by: Xisco Fauli <[email protected]> diff --git a/vcl/source/filter/jpeg/JpegReader.cxx b/vcl/source/filter/jpeg/JpegReader.cxx index df7374770463..cbdac58aa3c6 100644 --- a/vcl/source/filter/jpeg/JpegReader.cxx +++ b/vcl/source/filter/jpeg/JpegReader.cxx @@ -47,7 +47,7 @@ static void init_source (j_decompress_ptr cinfo) * This is correct behavior for reading a series of images from one source. */ source->start_of_file = TRUE; - source->no_data_available = FALSE; + source->no_data_available_failures = 0; } } @@ -86,7 +86,7 @@ static boolean fill_input_buffer (j_decompress_ptr cinfo) if (!nbytes) { - source->no_data_available = TRUE; + source->no_data_available_failures++; if (source->start_of_file) /* Treat empty input file as fatal error */ { ERREXIT(cinfo, JERR_INPUT_EMPTY); diff --git a/vcl/source/filter/jpeg/jpeg.h b/vcl/source/filter/jpeg/jpeg.h index 2f951e065934..79ec824ada22 100644 --- a/vcl/source/filter/jpeg/jpeg.h +++ b/vcl/source/filter/jpeg/jpeg.h @@ -59,7 +59,7 @@ struct SourceManagerStruct { SvStream* stream; /* source stream */ JOCTET* buffer; /* start of buffer */ boolean start_of_file; /* have we gotten any data yet? */ - boolean no_data_available; + int no_data_available_failures; }; #endif diff --git a/vcl/source/filter/jpeg/jpegc.cxx b/vcl/source/filter/jpeg/jpegc.cxx index c1fbb535a8e4..3f6a362f826c 100644 --- a/vcl/source/filter/jpeg/jpegc.cxx +++ b/vcl/source/filter/jpeg/jpegc.cxx @@ -267,7 +267,8 @@ static void ReadJPEG(JpegStuff& rContext, JPEGReader* pJPEGReader, void* pInputS rContext.pCYMKBuffer.resize(nWidth * 4); } - for (*pLines = 0; *pLines < nHeight && !source->no_data_available; (*pLines)++) + // tdf#138950 allow up to one short read (no_data_available_failures <= 1) to not trigger cancelling import + for (*pLines = 0; *pLines < nHeight && source->no_data_available_failures <= 1; (*pLines)++) { size_t yIndex = *pLines; commit 4cc753b6b9a7011da3ea50a1c90ed10870b9a2e0 Author: Caolán McNamara <[email protected]> AuthorDate: Tue Dec 15 15:17:27 2020 +0000 Commit: Xisco Fauli <[email protected]> CommitDate: Thu Dec 17 14:07:43 2020 +0100 tdf#138701 leave current combobox cursor valid if the contents won't change Change-Id: I6d7f5de7b79d447590fcfa325f4be7430eaffd5f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107708 Tested-by: Jenkins Reviewed-by: Xisco Fauli <[email protected]> diff --git a/extensions/source/propctrlr/standardcontrol.cxx b/extensions/source/propctrlr/standardcontrol.cxx index a9b422440932..0b64c9518ef2 100644 --- a/extensions/source/propctrlr/standardcontrol.cxx +++ b/extensions/source/propctrlr/standardcontrol.cxx @@ -583,7 +583,10 @@ namespace pcr { OUString sText; _rValue >>= sText; - getTypedControlWindow()->set_entry_text( sText ); + weld::ComboBox* pControlWindow = getTypedControlWindow(); + // tdf#138701 leave current cursor valid if the contents won't change + if (pControlWindow->get_active_text() != sText) + pControlWindow->set_entry_text(sText); } Any SAL_CALL OComboboxControl::getValue() commit 4b87577ea3f80e1e3df5ce1b492dea267577f072 Author: Caolán McNamara <[email protected]> AuthorDate: Thu Dec 10 11:27:15 2020 +0000 Commit: Xisco Fauli <[email protected]> CommitDate: Thu Dec 17 14:03:52 2020 +0100 Resolves: tdf#138789 disable widgets on 'none' when status changes instead of when chage is dispatched, the chart case has its own dispatcher that disables the base class one. This fixes the reported problem, and the related problem of updating when moving focus from one line that has style 'none' to one that doesn't, and vice-versa, where no change is dispached on received on context change Change-Id: I6afb396e75ba93c13fcae71c52618cfce7f9cecb Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107527 Tested-by: Jenkins Reviewed-by: Xisco Fauli <[email protected]> diff --git a/include/svx/linectrl.hxx b/include/svx/linectrl.hxx index 62f428aa5136..7ade8dc06643 100644 --- a/include/svx/linectrl.hxx +++ b/include/svx/linectrl.hxx @@ -32,6 +32,7 @@ class XLineStyleItem; class XLineDashItem; typedef std::function<bool(const OUString&, const css::uno::Any&)> LineStyleSelectFunction; +typedef std::function<void(bool)> LineStyleIsNoneFunction; // SvxLineStyleController: class SVXCORE_DLLPUBLIC SvxLineStyleToolBoxControl final : public svt::PopupWindowController @@ -40,6 +41,7 @@ private: std::unique_ptr<svx::ToolboxButtonLineStyleUpdater> m_xBtnUpdater; LineStyleSelectFunction m_aLineStyleSelectFunction; + LineStyleIsNoneFunction m_aLineStyleIsNoneFunction; public: SvxLineStyleToolBoxControl( const css::uno::Reference<css::uno::XComponentContext>& rContext ); @@ -56,7 +58,10 @@ public: virtual ~SvxLineStyleToolBoxControl() override; + // called when the user selects a line style void setLineStyleSelectFunction(const LineStyleSelectFunction& aLineStyleSelectFunction); + // called when the line style changes, can be used to trigger disabling the arrows if the none line style is selected + void setLineStyleIsNoneFunction(const LineStyleIsNoneFunction& aLineStyleIsNoneFunction); void dispatchLineStyleCommand(const OUString& rCommand, const css::uno::Sequence<css::beans::PropertyValue>& rArgs); private: diff --git a/include/svx/sidebar/LinePropertyPanelBase.hxx b/include/svx/sidebar/LinePropertyPanelBase.hxx index 40b4cc6f4688..2da80e9a6b54 100644 --- a/include/svx/sidebar/LinePropertyPanelBase.hxx +++ b/include/svx/sidebar/LinePropertyPanelBase.hxx @@ -45,7 +45,7 @@ namespace svx namespace sidebar { -class DisableArrowsWrapper; +class LineStyleNoneChange; class SVX_DLLPUBLIC LinePropertyPanelBase : public PanelLayout { @@ -116,7 +116,7 @@ private: //popup windows std::unique_ptr<LineWidthPopup> mxLineWidthPopup; - std::unique_ptr<DisableArrowsWrapper> mxDisableArrowsWrapper; + std::unique_ptr<LineStyleNoneChange> mxLineStyleNoneChange; sal_uInt16 mnTrans; MapUnit meMapUnit; diff --git a/svx/source/sidebar/line/LinePropertyPanelBase.cxx b/svx/source/sidebar/line/LinePropertyPanelBase.cxx index f2c1b4553ea4..ef4778f4ad7c 100644 --- a/svx/source/sidebar/line/LinePropertyPanelBase.cxx +++ b/svx/source/sidebar/line/LinePropertyPanelBase.cxx @@ -36,26 +36,20 @@ const char SELECTWIDTH[] = "SelectWidth"; namespace svx::sidebar { // trigger disabling the arrows if the none line style is selected -class DisableArrowsWrapper +class LineStyleNoneChange { private: LinePropertyPanelBase& m_rPanel; public: - DisableArrowsWrapper(LinePropertyPanelBase& rPanel) + LineStyleNoneChange(LinePropertyPanelBase& rPanel) : m_rPanel(rPanel) { } - bool operator()(const OUString& rCommand, const css::uno::Any& rValue) + void operator()(bool bLineStyleNone) { - if (rCommand == ".uno:XLineStyle") - { - css::drawing::LineStyle eLineStyle(css::drawing::LineStyle_NONE); - rValue >>= eLineStyle; - m_rPanel.SetNoneLineStyle(eLineStyle == css::drawing::LineStyle_NONE); - } - return false; + m_rPanel.SetNoneLineStyle(bLineStyleNone); } }; @@ -89,7 +83,7 @@ LinePropertyPanelBase::LinePropertyPanelBase( mxGridLineProps(m_xBuilder->weld_widget("lineproperties")), mxBoxArrowProps(m_xBuilder->weld_widget("arrowproperties")), mxLineWidthPopup(new LineWidthPopup(mxTBWidth.get(), *this)), - mxDisableArrowsWrapper(new DisableArrowsWrapper(*this)), + mxLineStyleNoneChange(new LineStyleNoneChange(*this)), mnTrans(0), meMapUnit(MapUnit::MapMM), mnWidthCoreValue(0), @@ -150,7 +144,7 @@ void LinePropertyPanelBase::Initialize() mxLBCapStyle->connect_changed( LINK( this, LinePropertyPanelBase, ChangeCapStyleHdl ) ); SvxLineStyleToolBoxControl* pLineStyleControl = getLineStyleToolBoxControl(*mxLineStyleDispatch); - pLineStyleControl->setLineStyleSelectFunction(*mxDisableArrowsWrapper); + pLineStyleControl->setLineStyleIsNoneFunction(*mxLineStyleNoneChange); } void LinePropertyPanelBase::updateLineTransparence(bool bDisabled, bool bSetOrDefault, diff --git a/svx/source/tbxctrls/linectrl.cxx b/svx/source/tbxctrls/linectrl.cxx index df0115f5b91b..cece7eea8085 100644 --- a/svx/source/tbxctrls/linectrl.cxx +++ b/svx/source/tbxctrls/linectrl.cxx @@ -91,6 +91,7 @@ void SAL_CALL SvxLineStyleToolBoxControl::statusChanged( const frame::FeatureSta const SvxDashListItem* pItem = pSh->GetItem( SID_DASH_LIST ); if (pItem) { + bool bNoneLineStyle = false; XDashListRef xList = pItem->GetDashList(); int nIndex = m_xBtnUpdater->GetStyleIndex(); switch (nIndex) @@ -107,6 +108,7 @@ void SAL_CALL SvxLineStyleToolBoxControl::statusChanged( const frame::FeatureSta } else pToolBox->SetItemImage(nId, Image(aEmpty)); + bNoneLineStyle = true; break; } case 1: @@ -128,6 +130,9 @@ void SAL_CALL SvxLineStyleToolBoxControl::statusChanged( const frame::FeatureSta pToolBox->SetItemImage(nId, Image(xList->GetUiBitmap(nIndex - 2))); break; } + + if (m_aLineStyleIsNoneFunction) + m_aLineStyleIsNoneFunction(bNoneLineStyle); } } } @@ -172,6 +177,11 @@ void SvxLineStyleToolBoxControl::setLineStyleSelectFunction(const LineStyleSelec m_aLineStyleSelectFunction = rLineStyleSelectFunction; } +void SvxLineStyleToolBoxControl::setLineStyleIsNoneFunction(const LineStyleIsNoneFunction& rLineStyleIsNoneFunction) +{ + m_aLineStyleIsNoneFunction = rLineStyleIsNoneFunction; +} + void SvxLineStyleToolBoxControl::dispatchLineStyleCommand(const OUString& rCommand, const Sequence<PropertyValue>& rArgs) { if (m_aLineStyleSelectFunction && m_aLineStyleSelectFunction(rCommand, rArgs[0].Value)) commit 5fbd913cf62aa215c66f1f2de47723dc82c83571 Author: Caolán McNamara <[email protected]> AuthorDate: Tue Dec 15 16:35:24 2020 +0000 Commit: Xisco Fauli <[email protected]> CommitDate: Thu Dec 17 13:54:56 2020 +0100 tdf#138661 don't emit value-changed when not changed by user in the FormattedSpinButton which is the standard mode for these signals and what the SpinButton does, and in this case the FormattedSpinButton is considered "modified" when it shouldn't be Change-Id: I26865e099c02fdd2745c41b347b7006d8560fb20 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107711 Tested-by: Jenkins Reviewed-by: Xisco Fauli <[email protected]> diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx index 0290359bebce..b8629d49cbd6 100644 --- a/vcl/unx/gtk3/gtk3gtkinst.cxx +++ b/vcl/unx/gtk3/gtk3gtkinst.cxx @@ -12235,6 +12235,18 @@ public: enable_notify_events(); } + virtual void disable_notify_events() override + { + g_signal_handler_block(m_pButton, m_nValueChangedSignalId); + GtkInstanceEntry::disable_notify_events(); + } + + virtual void enable_notify_events() override + { + GtkInstanceEntry::enable_notify_events(); + g_signal_handler_unblock(m_pButton, m_nValueChangedSignalId); + } + virtual ~GtkInstanceFormattedSpinButton() override { g_signal_handler_disconnect(m_pButton, m_nInputSignalId); commit 594a27f191347fadf25ddf795b4f68263ef8abb2 Author: Caolán McNamara <[email protected]> AuthorDate: Wed Dec 16 12:42:05 2020 +0000 Commit: Xisco Fauli <[email protected]> CommitDate: Thu Dec 17 13:51:49 2020 +0100 tdf#138963 Clicking the position statusbar box disables selection if there is no object selected, since... commit d3dbbdce4eb71ae848e7682374e011c4a6129b15 Date: Wed Jan 17 15:20:31 2018 +0100 lokdialog: Convert the Format -> ... -> Position and Size... to async exec. Change-Id: Idcdbfb1366db61e247c31eab5cb27a39978b0fd9 Change-Id: I959789b055a880ac4c48a863c17eb6769b322577 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107800 Tested-by: Jenkins Reviewed-by: Xisco Fauli <[email protected]> diff --git a/sd/source/ui/func/futransf.cxx b/sd/source/ui/func/futransf.cxx index 4984c675ec4c..fa7398e48b43 100644 --- a/sd/source/ui/func/futransf.cxx +++ b/sd/source/ui/func/futransf.cxx @@ -106,8 +106,7 @@ void FuTransform::DoExecute( SfxRequest& rReq ) bWelded = true; } - if (!pDlg) - return; + assert(pDlg && "there must be a dialog at this point"); auto pRequest = std::make_shared<SfxRequest>(rReq); rReq.Ignore(); // the 'old' request is not relevant any more diff --git a/sd/source/ui/view/drviews2.cxx b/sd/source/ui/view/drviews2.cxx index 58cd5e5297b2..ae0f01121d63 100644 --- a/sd/source/ui/view/drviews2.cxx +++ b/sd/source/ui/view/drviews2.cxx @@ -1461,7 +1461,9 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq) case SID_ATTR_TRANSFORM: { SetCurrentFunction( FuTransform::Create( this, GetActiveWindow(), mpDrawView.get(), GetDoc(), rReq ) ); - if (rReq.GetArgs()) + // tdf#138963 conditions tested for here must be the same as those + // of the early returns from FuTransform::DoExecute + if (rReq.GetArgs() || !mpDrawView->AreObjectsMarked()) { Invalidate(SID_RULER_OBJECT); Cancel(); commit 871940eba642bec3cc263b48048ee4ffbf8a6c0f Author: Caolán McNamara <[email protected]> AuthorDate: Tue Dec 15 14:51:47 2020 +0000 Commit: Xisco Fauli <[email protected]> CommitDate: Thu Dec 17 13:49:50 2020 +0100 tdf#138935 rsDeckId is invalid by the time collectUIInformation is called Change-Id: I4afc1ed1bbbfbbd510617a51b9aa6d627471d80d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107706 Tested-by: Jenkins Reviewed-by: Xisco Fauli <[email protected]> diff --git a/sfx2/source/sidebar/SidebarController.cxx b/sfx2/source/sidebar/SidebarController.cxx index 68066f4f4918..b890f9950f56 100644 --- a/sfx2/source/sidebar/SidebarController.cxx +++ b/sfx2/source/sidebar/SidebarController.cxx @@ -608,6 +608,8 @@ void SidebarController::OpenThenToggleDeck ( } } RequestOpenDeck(); + // before SwitchToDeck which may cause the rsDeckId string to be released + collectUIInformation(rsDeckId); SwitchToDeck(rsDeckId); // Make sure the sidebar is wide enough to fit the requested content @@ -618,8 +620,6 @@ void SidebarController::OpenThenToggleDeck ( if (mnSavedSidebarWidth < nRequestedWidth) SetChildWindowWidth(nRequestedWidth); } - - collectUIInformation(rsDeckId); } void SidebarController::OpenThenSwitchToDeck ( commit a10c7ec17fe57c0367ce5a4cbefd89e8b63e069b Author: Julien Nabet <[email protected]> AuthorDate: Sat Dec 12 12:16:27 2020 +0100 Commit: Xisco Fauli <[email protected]> CommitDate: Thu Dec 17 13:36:30 2020 +0100 tdf#138822: really undo when clicking Cancel in managing Named Ranges Change-Id: Ib4d15e7e5287221ea51eb3e20dd1811c97999306 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107635 Tested-by: Jenkins Reviewed-by: Eike Rathke <[email protected]> (cherry picked from commit 1790ed500f3033581ee4a3ef43428d7fda4692cc) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107807 diff --git a/sc/source/ui/namedlg/namedlg.cxx b/sc/source/ui/namedlg/namedlg.cxx index 69181ec246b2..4262a824f902 100644 --- a/sc/source/ui/namedlg/namedlg.cxx +++ b/sc/source/ui/namedlg/namedlg.cxx @@ -462,6 +462,7 @@ IMPL_LINK_NOARG(ScNameDlg, OkBtnHdl, weld::Button&, void) IMPL_LINK_NOARG(ScNameDlg, CancelBtnHdl, weld::Button&, void) { + mbCloseWithoutUndo = true; response(RET_CANCEL); } commit 88aa8f5343705008b86ef41512993a00d331a668 Author: Justin Luth <[email protected]> AuthorDate: Tue Dec 15 10:01:03 2020 +0300 Commit: Miklos Vajna <[email protected]> CommitDate: Wed Dec 16 15:57:54 2020 +0100 tdf#138892 writerfilter: cancel style list if bNoNumbering This fixes 6.1 regression from tdf#95377's commit e24e2d2fb02239753c1520a0458b44683ea4cc2e. Starting in 7.0 (tdf#131321), paragraph styles kept their numbering property. But even before that, non-paragraphs marked by bNoNumbering were having their direct numbering removed, and then finishParagraph applied para-style numbering since there was no direct numbering. So, we need to pass the bNoNumbering to finishParagraph so that it can cancel out a style-assigned numbering. Change-Id: I0c24af4e9bd0ea3712179a47ed3550f91c8f44b7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107738 Tested-by: Jenkins Reviewed-by: Justin Luth <[email protected]> (cherry picked from commit bfcd952dc7820c4cf8761c4222d29ede039391dc) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107795 (cherry picked from commit e901ffcb93d217f2cc09021a3b2fecb36f9884f6) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107796 Reviewed-by: Miklos Vajna <[email protected]> Tested-by: Justin Luth <[email protected]> diff --git a/solenv/clang-format/blacklist b/solenv/clang-format/blacklist index 5a1512485d53..b01ce8d1f15a 100644 --- a/solenv/clang-format/blacklist +++ b/solenv/clang-format/blacklist @@ -14200,6 +14200,7 @@ sw/qa/extras/ooxmlexport/ooxmlexport11.cxx sw/qa/extras/ooxmlexport/ooxmlexport13.cxx sw/qa/extras/ooxmlexport/ooxmlexport14.cxx sw/qa/extras/ooxmlexport/ooxmlexport15.cxx +sw/qa/extras/ooxmlexport/ooxmlexport16.cxx sw/qa/extras/ooxmlexport/ooxmlexport2.cxx sw/qa/extras/ooxmlexport/ooxmlexport3.cxx sw/qa/extras/ooxmlexport/ooxmlexport4.cxx diff --git a/sw/CppunitTest_sw_ooxmlexport16.mk b/sw/CppunitTest_sw_ooxmlexport16.mk new file mode 100644 index 000000000000..4e78cef57760 --- /dev/null +++ b/sw/CppunitTest_sw_ooxmlexport16.mk @@ -0,0 +1,14 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +#************************************************************************* +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +#************************************************************************* + +$(eval $(call sw_ooxmlexport_test,16)) + +# vim: set noet sw=4 ts=4: diff --git a/sw/Module_sw.mk b/sw/Module_sw.mk index be2e7e8d86c7..c1dff1df5c5a 100644 --- a/sw/Module_sw.mk +++ b/sw/Module_sw.mk @@ -81,6 +81,7 @@ $(eval $(call gb_Module_add_slowcheck_targets,sw,\ CppunitTest_sw_ooxmlexport13 \ CppunitTest_sw_ooxmlexport14 \ CppunitTest_sw_ooxmlexport15 \ + CppunitTest_sw_ooxmlexport16 \ CppunitTest_sw_ooxmlexport_template \ CppunitTest_sw_ooxmlfieldexport \ CppunitTest_sw_ooxmllinks \ diff --git a/sw/qa/extras/ooxmlexport/data/tdf138892_noNumbering.docx b/sw/qa/extras/ooxmlexport/data/tdf138892_noNumbering.docx new file mode 100644 index 000000000000..5c0a0176e37c Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf138892_noNumbering.docx differ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx new file mode 100644 index 000000000000..174f2f0f7330 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx @@ -0,0 +1,43 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include <swmodeltestbase.hxx> + +#include <com/sun/star/beans/XPropertySet.hpp> +#include <com/sun/star/text/XTextViewCursorSupplier.hpp> +#include <com/sun/star/text/XTextTable.hpp> +#include <com/sun/star/text/XTextTablesSupplier.hpp> + +char const DATA_DIRECTORY[] = "/sw/qa/extras/ooxmlexport/data/"; + +class Test : public SwModelTestBase +{ +public: + Test() : SwModelTestBase(DATA_DIRECTORY, "Office Open XML Text") {} + +protected: + /** + * Denylist handling + */ + bool mustTestImportOf(const char* filename) const override { + // If the testcase is stored in some other format, it's pointless to test. + return OString(filename).endsWith(".docx"); + } +}; + +DECLARE_OOXMLEXPORT_TEST(testTdf138892_noNumbering, "tdf138892_noNumbering.docx") +{ + CPPUNIT_ASSERT_MESSAGE("Para1: Bullet point", !getProperty<OUString>(getParagraph(1), "NumberingStyleName").isEmpty()); + CPPUNIT_ASSERT_MESSAGE("Para2: <blank line>", getProperty<OUString>(getParagraph(2), "NumberingStyleName").isEmpty()); + CPPUNIT_ASSERT_MESSAGE("Para3: <blank line>", getProperty<OUString>(getParagraph(3), "NumberingStyleName").isEmpty()); +} + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index 76fc96b9f56c..d7f14e534d48 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -3524,7 +3524,7 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len) xContext->Erase(PROP_NUMBERING_LEVEL); } m_pImpl->SetParaSectpr(false); - finishParagraph(bRemove); + finishParagraph(bRemove, bNoNumbering); if (bRemove) m_pImpl->RemoveLastParagraph(); } @@ -4005,11 +4005,11 @@ void DomainMapper::HandleRedline( Sprm& rSprm ) m_pImpl->SetCurrentRedlineIsRead(); } -void DomainMapper::finishParagraph(const bool bRemove) +void DomainMapper::finishParagraph(const bool bRemove, const bool bNoNumbering) { if (m_pImpl->m_pSdtHelper->validateDateFormat()) m_pImpl->m_pSdtHelper->createDateContentControl(); - m_pImpl->finishParagraph(m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH), bRemove); + m_pImpl->finishParagraph(m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH), bRemove, bNoNumbering); } } //namespace writerfilter diff --git a/writerfilter/source/dmapper/DomainMapper.hxx b/writerfilter/source/dmapper/DomainMapper.hxx index c8281f9334ec..179f06ccd77c 100644 --- a/writerfilter/source/dmapper/DomainMapper.hxx +++ b/writerfilter/source/dmapper/DomainMapper.hxx @@ -161,7 +161,7 @@ private: // Table virtual void lcl_entry(writerfilter::Reference<Properties>::Pointer_t ref) override; - void finishParagraph(const bool bRemove = false); + void finishParagraph(const bool bRemove = false, const bool bNoNumbering = false); static void handleUnderlineType(const Id nId, const ::tools::SvRef<PropertyMap>& rContext); void handleParaJustification(const sal_Int32 nIntValue, const ::tools::SvRef<PropertyMap>& rContext, const bool bExchangeLeftRight); diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index ba2fa918f82f..7a248ca36aa2 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -1347,7 +1347,7 @@ static sal_Int32 lcl_getListId(const StyleSheetEntryPtr& rEntry, const StyleShee return lcl_getListId(pParent, rStyleTable, rNumberingFromBaseStyle); } -void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap, const bool bRemove ) +void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap, const bool bRemove, const bool bNoNumbering ) { if (m_bDiscardHeaderFooter) return; @@ -1402,7 +1402,7 @@ void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap, con //apply numbering level/style to paragraph if it was set at the style, but only if the paragraph itself //does not specify the numbering const sal_Int16 nListLevel = pStyleSheetProperties->GetListLevel(); - if ( !isNumberingViaRule && nListLevel >= 0 ) + if ( !bNoNumbering && !isNumberingViaRule && nListLevel >= 0 ) pParaContext->Insert( PROP_NUMBERING_LEVEL, uno::makeAny(nListLevel), false ); bool bNumberingFromBaseStyle = false; @@ -1410,7 +1410,9 @@ void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap, con auto const pList(GetListTable()->GetList(nListId)); if (pList && nListId >= 0 && !pParaContext->isSet(PROP_NUMBERING_STYLE_NAME)) { - if ( !isNumberingViaRule ) + if ( bNoNumbering ) + pParaContext->Insert( PROP_NUMBERING_STYLE_NAME, uno::makeAny(OUString()) ); + else if ( !isNumberingViaRule ) { isNumberingViaStyle = true; // Since LO7.0/tdf#131321 fixed the loss of numbering in styles, this OUGHT to be obsolete, diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx index dc0693ecae6e..c423c9de5fe8 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx @@ -677,7 +677,7 @@ public: void setParaSdtEndDeferred(bool bParaSdtEndDeferred); bool isParaSdtEndDeferred() const; - void finishParagraph( const PropertyMapPtr& pPropertyMap, const bool bRemove = false); + void finishParagraph( const PropertyMapPtr& pPropertyMap, const bool bRemove = false, const bool bNoNumbering = false); void appendTextPortion( const OUString& rString, const PropertyMapPtr& pPropertyMap ); void appendTextContent(const css::uno::Reference<css::text::XTextContent>&, const css::uno::Sequence<css::beans::PropertyValue>&); void appendOLE( const OUString& rStreamName, const std::shared_ptr<OLEHandler>& pOleHandler ); commit b4e9f8093daecec90e8294287029070262a634ac Author: Miklos Vajna <[email protected]> AuthorDate: Mon Dec 14 21:05:02 2020 +0100 Commit: Xisco Fauli <[email protected]> CommitDate: Wed Dec 16 13:13:26 2020 +0100 tdf#138600 sw: fix too small print area for btlr text in nested table Regression from commit 435ab51ec8920033b7865f27f4afee8a852a0b31 (tdf#128399 sw btlr: fix clicking to lower rotated cell, 2019-10-29), the bugdoc has a btlr table cell and the row frame of the outer table has a bottom value which is very small at the point when SwFrame::GetPaintArea() is invoked for the inner btlr cell. This means the "cell should not leave its parent" mechanism kicks in and reduces the bottom of the paint area to a small value, so the text is not visible at all. Fix the problem by teaching SwFrame::GetPaintArea() that btlr cell frames are OK to leave their parent towards the bottom of the page; that parent will grow at a later phase of the layout process anyway. Change-Id: I99334bbf0116df8d8ed27f192c81c0441b6c797d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107730 Tested-by: Jenkins Reviewed-by: Miklos Vajna <[email protected]> Signed-off-by: Xisco Fauli <[email protected]> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107787 Signed-off-by: Xisco Fauli <[email protected]> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107818 diff --git a/sw/qa/core/layout/data/btlr-nested-cell.odt b/sw/qa/core/layout/data/btlr-nested-cell.odt new file mode 100644 index 000000000000..ca7a4798db97 Binary files /dev/null and b/sw/qa/core/layout/data/btlr-nested-cell.odt differ diff --git a/sw/qa/core/layout/layout.cxx b/sw/qa/core/layout/layout.cxx index 947152de49c6..6a6840f425a4 100644 --- a/sw/qa/core/layout/layout.cxx +++ b/sw/qa/core/layout/layout.cxx @@ -15,6 +15,8 @@ #include <wrtsh.hxx> #include <IDocumentDrawModelAccess.hxx> #include <drawdoc.hxx> +#include <IDocumentLayoutAccess.hxx> +#include <rootfrm.hxx> static char const DATA_DIRECTORY[] = "/sw/qa/core/layout/data/"; @@ -171,6 +173,30 @@ CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testTextBoxAutoGrowVertical) CPPUNIT_ASSERT(aShapeRect.IsInside(aFlyRect)); } +CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testBtlrNestedCell) +{ + // Load a document with a nested table, the inner A1 cell has a btlr text direction. + load(DATA_DIRECTORY, "btlr-nested-cell.odt"); + SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get()); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout(); + SwFrame* pPage = pLayout->GetLower(); + SwFrame* pBody = pPage->GetLower(); + SwFrame* pOuterTable = pBody->GetLower()->GetNext(); + SwFrame* pInnerTable = pOuterTable->GetLower()->GetLower()->GetLower(); + + // Check the paint area of the only text frame in the cell. + SwFrame* pTextFrame = pInnerTable->GetLower()->GetLower()->GetLower(); + long nFrameBottom = pTextFrame->getFrameArea().Bottom(); + SwRect aPaintArea = pTextFrame->GetPaintArea(); + + // Without the accompanying fix in place, this test would have failed with: + // - Expected greater or equal than: 2829 + // - Actual : 2080 + // i.e. part of the text frame area was not painted, hiding the actual text. + CPPUNIT_ASSERT_GREATEREQUAL(nFrameBottom, aPaintArea.Bottom()); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/core/layout/ssfrm.cxx b/sw/source/core/layout/ssfrm.cxx index 1a92144a5583..59d7d64afdd8 100644 --- a/sw/source/core/layout/ssfrm.cxx +++ b/sw/source/core/layout/ssfrm.cxx @@ -626,7 +626,8 @@ SwRect SwFrame::GetPaintArea() const pTmp->IsCellFrame() || pTmp->IsRowFrame() || //nobody leaves a table! pTmp->IsRootFrame() ) { - if( bLeft || aRectFnSet.XDiff(nTmpLeft, nLeft) > 0 ) + // BTLR is OK to expand towards the physical down direction. Physical down is left. + if( bLeft || (aRectFnSet.XDiff(nTmpLeft, nLeft) > 0 && !IsVertLRBT()) ) nLeft = nTmpLeft; if( bRight || aRectFnSet.XDiff(nRight, nTmpRight) > 0 ) nRight = nTmpRight; commit bb3d6a788001436ef29d0f5e53431c8c0a75040e Author: Julien Nabet <[email protected]> AuthorDate: Sat Dec 12 13:43:48 2020 +0100 Commit: Xisco Fauli <[email protected]> CommitDate: Mon Dec 14 13:37:24 2020 +0100 tdf#138851: Named range manager always display "Document (Global)" at launching In Init() method, call SelectionChanged() at the end so we're sure everything is up-to-date. Change-Id: I1bd8c44e172cd9f739650a6f76478214c0a31ac0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107628 Tested-by: Jenkins Reviewed-by: Xisco Fauli <[email protected]> diff --git a/sc/source/ui/namedlg/namedlg.cxx b/sc/source/ui/namedlg/namedlg.cxx index 7c3a91e320af..69181ec246b2 100644 --- a/sc/source/ui/namedlg/namedlg.cxx +++ b/sc/source/ui/namedlg/namedlg.cxx @@ -111,13 +111,6 @@ void ScNameDlg::Init() xTreeView->get_height_rows(10)); m_xRangeManagerTable.reset(new ScRangeManagerTable(std::move(xTreeView), m_RangeMap, maCursorPos)); - if (m_xRangeManagerTable->n_children()) - { - m_xRangeManagerTable->set_cursor(0); - m_xRangeManagerTable->CheckForFormulaString(); - SelectionChanged(); - } - m_xRangeManagerTable->connect_changed( LINK( this, ScNameDlg, SelectionChangedHdl_Impl ) ); m_xBtnOk->connect_clicked( LINK( this, ScNameDlg, OkBtnHdl ) ); @@ -145,6 +138,14 @@ void ScNameDlg::Init() } CheckForEmptyTable(); + + if (m_xRangeManagerTable->n_children()) + { + m_xRangeManagerTable->set_cursor(0); + m_xRangeManagerTable->CheckForFormulaString(); + SelectionChanged(); + } + } bool ScNameDlg::IsRefInputMode() const commit a60f4a6222fdbcb4a1adebe670eaf1636a014da6 Author: Xisco Fauli <[email protected]> AuthorDate: Thu Dec 10 17:04:59 2020 +0100 Commit: Caolán McNamara <[email protected]> CommitDate: Fri Dec 11 20:51:22 2020 +0100 sw: add missing nullptr check introduced by 0aa0fda64057647219954480ac1bab86b0f0e433 See: https://crashreport.libreoffice.org/stats/signature/SwCursor::UpDown(bool,unsigned%20short,Point%20const%20*,long,SwRootFrame%20&) Change-Id: Ifb7a86b0dfd1477d6ffa15c7d4d3289984747f87 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107561 Tested-by: Jenkins Reviewed-by: Miklos Vajna <[email protected]> (cherry picked from commit 0a80dcad342c1be71f467e46a0cf4f5dd1259056) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107615 Reviewed-by: Caolán McNamara <[email protected]> diff --git a/sw/source/core/crsr/swcrsr.cxx b/sw/source/core/crsr/swcrsr.cxx index e1237d8cffab..879d632dfc8b 100644 --- a/sw/source/core/crsr/swcrsr.cxx +++ b/sw/source/core/crsr/swcrsr.cxx @@ -2044,9 +2044,15 @@ bool SwCursor::UpDown( bool bUp, sal_uInt16 nCnt, } else { + sal_Int32 nOffset = 0; + // Jump to beginning or end of line when the cursor at first or last line. - SwNode& rNode = GetPoint()->nNode.GetNode(); - const sal_Int32 nOffset = bUp ? 0 : rNode.GetTextNode()->GetText().getLength(); + if(!bUp) + { + SwTextNode* pTextNd = GetPoint()->nNode.GetNode().GetTextNode(); + if (pTextNd) + nOffset = pTextNd->GetText().getLength(); + } const SwPosition aPos(*GetContentNode(), nOffset); //if cursor has already been at start or end of file, commit c918fad2cbc01e42394ac6ede21366a47532ecc2 Author: Caolán McNamara <[email protected]> AuthorDate: Fri Dec 11 11:26:19 2020 +0000 Commit: Adolfo Jayme Barrientos <[email protected]> CommitDate: Fri Dec 11 17:28:36 2020 +0100 tdf#76644 extended tips not shown for 'gen' menu items since... commit d7fe5ab30ca9df722eec33d428baedd258075eac Date: Thu Aug 1 11:23:58 2013 +0200 convert vcl/menu.hxx from XubString to OUString (second attempt) probably currently only useful with HELP_DEBUG=1 Change-Id: I66e94e57e117d4e1d83f132a82377b28d3674d86 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107548 Tested-by: Jenkins Reviewed-by: Adolfo Jayme Barrientos <[email protected]> diff --git a/vcl/source/window/menu.cxx b/vcl/source/window/menu.cxx index bcfbdbb37773..f48e1c3f0fbc 100644 --- a/vcl/source/window/menu.cxx +++ b/vcl/source/window/menu.cxx @@ -1086,7 +1086,10 @@ OUString Menu::ImplGetHelpText( sal_uInt16 nItemId ) const { MenuItemData* pData = pItemList->GetData( nItemId ); - if ( pData && pData->aHelpText.isEmpty() && + if (!pData) + return OUString(); + + if ( pData->aHelpText.isEmpty() && (( !pData->aHelpId.isEmpty() ) || ( !pData->aCommandStr.isEmpty() ))) { Help* pHelp = Application::GetHelp(); @@ -1099,7 +1102,7 @@ OUString Menu::ImplGetHelpText( sal_uInt16 nItemId ) const } } - return OUString(); + return pData->aHelpText; } OUString Menu::GetHelpText( sal_uInt16 nItemId ) const commit 863f2877fe4be1394b5d35dd18ce15cd30c1e9b7 Author: Miklos Vajna <[email protected]> AuthorDate: Mon Dec 7 21:02:12 2020 +0100 Commit: Xisco Fauli <[email protected]> CommitDate: Fri Dec 11 16:22:20 2020 +0100 tdf#135217 DOCX import: remove no longer needed top/bottom margin sync Regression from commit b7ae863efeb082816cc4fe660527a9650d90e186 (tdf#117503 DOCX import: fix out of sync first/later top margin, 2018-05-28), which adjusted the import so that the export can pair first/follow page styles and write them into a single Word section. But changing the import for pairing purposes is not a good idea after all, as it also affects the layout of the imported document. In the meantime, commit 51534ac2b9747975945acb6a1e1ba5cc6d73f5c2 (tdf#127778 DOCX import: fix unexpected heading on non-first page when the first page has a heading, 2020-05-11) already fixed the export side, so this is not even necessary, just remove it. (cherry picked from commit 29993781ac991e85bfbd61f9e076c9d8088cd3ab) Change-Id: I94c02517ae1e0804547f81c43bb5890327d32376 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107400 Tested-by: Jenkins Reviewed-by: Miklos Vajna <[email protected]> (cherry picked from commit d6674aaa23b34af702681beb4c0f219e6f50069c) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107387 Reviewed-by: Xisco Fauli <[email protected]> diff --git a/writerfilter/qa/cppunittests/dmapper/PropertyMap.cxx b/writerfilter/qa/cppunittests/dmapper/PropertyMap.cxx index 71b3ab80e50b..2c7586649c01 100644 --- a/writerfilter/qa/cppunittests/dmapper/PropertyMap.cxx +++ b/writerfilter/qa/cppunittests/dmapper/PropertyMap.cxx @@ -13,6 +13,8 @@ #include <com/sun/star/frame/Desktop.hpp> #include <com/sun/star/text/XPageCursor.hpp> #include <com/sun/star/text/XTextViewCursorSupplier.hpp> +#include <com/sun/star/style/XStyleFamiliesSupplier.hpp> +#include <com/sun/star/beans/XPropertySet.hpp> using namespace ::com::sun::star; @@ -63,6 +65,28 @@ CPPUNIT_TEST_FIXTURE(Test, testFloatingTableHeader) // i.e. a document which is 1 page in Word was imported as a 3 page one. CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int16>(1), xCursor->getPage()); } + +CPPUNIT_TEST_FIXTURE(Test, testFollowPageTopMargin) +{ + // Load a document with 2 pages: first page has larger top margin, second page has smaller top + // margin. + OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "follow-page-top-margin.docx"; + getComponent() = loadFromDesktop(aURL); + uno::Reference<style::XStyleFamiliesSupplier> xStyleFamiliesSupplier(getComponent(), + uno::UNO_QUERY); + uno::Reference<container::XNameAccess> xStyleFamilies + = xStyleFamiliesSupplier->getStyleFamilies(); + uno::Reference<container::XNameAccess> xStyleFamily(xStyleFamilies->getByName("PageStyles"), + uno::UNO_QUERY); + uno::Reference<beans::XPropertySet> xStyle(xStyleFamily->getByName("Standard"), uno::UNO_QUERY); + auto nTopMargin = xStyle->getPropertyValue("TopMargin").get<sal_Int32>(); + + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 250 + // - Actual : 1249 + // i.e. the top margin on page 2 was too large. + CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(250), nTopMargin); +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/qa/cppunittests/dmapper/data/follow-page-top-margin.docx b/writerfilter/qa/cppunittests/dmapper/data/follow-page-top-margin.docx new file mode 100644 index 000000000000..ceae0b784e18 Binary files /dev/null and b/writerfilter/qa/cppunittests/dmapper/data/follow-page-top-margin.docx differ diff --git a/writerfilter/source/dmapper/PropertyMap.cxx b/writerfilter/source/dmapper/PropertyMap.cxx index d510bfc8be35..297877d680dd 100644 --- a/writerfilter/source/dmapper/PropertyMap.cxx +++ b/writerfilter/source/dmapper/PropertyMap.cxx @@ -1031,15 +1031,6 @@ void SectionPropertyMap::PrepareHeaderFooterProperties( bool bFirstPage ) //now set the top/bottom margin for the follow page style Insert( PROP_TOP_MARGIN, uno::makeAny( std::max<sal_Int32>(nTopMargin, 0) ) ); Insert( PROP_BOTTOM_MARGIN, uno::makeAny( std::max<sal_Int32>(nBottomMargin, 0) ) ); - - if (bCopyFirstToFollow) - { - if (HasHeader(/*bFirstPage=*/true)) - m_aFollowPageStyle->setPropertyValue("TopMargin", getProperty(PROP_TOP_MARGIN)->second); - if (HasFooter(/*bFirstPage=*/true)) - m_aFollowPageStyle->setPropertyValue("BottomMargin", - getProperty(PROP_BOTTOM_MARGIN)->second); - } } static uno::Reference< beans::XPropertySet > lcl_GetRangeProperties( bool bIsFirstSection, commit a9d8d1ab16f8bead44b3383b0315e32f86a82e08 Author: Rene Engelhard <[email protected]> AuthorDate: Sat Dec 5 10:47:36 2020 +0100 Commit: Michael Stahl <[email protected]> CommitDate: Fri Dec 11 12:32:22 2020 +0100 use -static-libgcc for unowinreg.dll to fix " For another, at least the unowinreg.dll resulting from --enable-build-unowinreg on Fedora 33 would have had a dependency on libgcc_s_dw2-1.dll that would generally not have been available in a target Windows environment. " mentioned in 01241113947fc7bd7f7b765dd897bb023c8ca99 Change-Id: Ib247c816f05de8c4ef20a939a86e780df5e40dea Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107253 Tested-by: Jenkins Reviewed-by: Michael Stahl <[email protected]> (cherry picked from commit 328988babda60300fd854a116ceca742a4bd79ca) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107538 diff --git a/odk/CustomTarget_unowinreg.mk b/odk/CustomTarget_unowinreg.mk index 3a46ddfd6860..a847e1d6bb38 100644 --- a/odk/CustomTarget_unowinreg.mk +++ b/odk/CustomTarget_unowinreg.mk @@ -19,7 +19,7 @@ $(call gb_CustomTarget_get_workdir,odk/unowinreg)/unowinreg.dll : \ $(if $(filter FREEBSD,$(OS)),-I$(JAVA_HOME)/include/freebsd \ -I$(JAVA_HOME)/include/bsd -I$(JAVA_HOME)/include/linux,\ $(if $(filter NETBSD,$(OS)),-I$(JAVA_HOME)/include/netbsd))) \ - -shared -o $@ $< \ + -shared -static-libgcc -o $@ $< \ -Wl,--kill-at -lkernel32 -ladvapi32 && \ $(MINGWSTRIP) $@ commit 3b5b96ecdb7b9a1daabbc0b40c3fe9c598a1bd5b Author: Caolán McNamara <[email protected]> AuthorDate: Wed Dec 9 09:57:11 2020 +0000 Commit: Michael Stahl <[email protected]> CommitDate: Fri Dec 11 12:30:18 2020 +0100 negative return passed to parameter that cannot be negative Change-Id: I4b39a2130e961c6f2ca97695e4625df5a95e00b8 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107461 Tested-by: Jenkins Reviewed-by: Michael Stahl <[email protected]> diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 12aa623de2b2..ba2fa918f82f 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -75,6 +75,7 @@ #include <com/sun/star/lang/XMultiServiceFactory.hpp> #include <editeng/flditem.hxx> #include <editeng/unotext.hxx> +#include <o3tl/safeint.hxx> #include <o3tl/temporary.hxx> #include <oox/mathml/import.hxx> #include <xmloff/odffields.hxx> @@ -148,7 +149,7 @@ static void lcl_handleDropdownField( const uno::Reference< beans::XPropertySet > rxFieldProps->setPropertyValue( "Items", uno::makeAny( sItems ) ); sal_Int32 nResult = pFFDataHandler->getDropDownResult().toInt32(); - if ( nResult ) + if (nResult > 0 && o3tl::make_unsigned(nResult) < sItems.size()) rxFieldProps->setPropertyValue( "SelectedItem", uno::makeAny( sItems[ nResult ] ) ); if ( !pFFDataHandler->getHelpText().isEmpty() ) rxFieldProps->setPropertyValue( "Help", uno::makeAny( pFFDataHandler->getHelpText() ) ); commit d0f3639a5a91ff69e5a0c8883cabb8558803ec85 Author: Aron Budea <[email protected]> AuthorDate: Wed Dec 9 18:39:54 2020 +0100 Commit: Caolán McNamara <[email protected]> CommitDate: Fri Dec 11 10:56:12 2020 +0100 tdf#138762: crash when trying to open sidebar w chart in Writer In Writer when in chart edit mode, and the chart is deselected, the object selection remains. Opening Properties sidebar at this point crashed. Calc and Impress were unaffected. Regression from b5fdb148fe87a90f3e586efcea7aa6ef865fa42a Change-Id: I356c3a42c41dd38e4739df27c72c6d67722b1dbc Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107500 Tested-by: Jenkins Reviewed-by: Aron Budea <[email protected]> (cherry picked from commit 7e5991dc695d1e590483615c2907811ce4117834) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107543 Reviewed-by: Caolán McNamara <[email protected]> diff --git a/sfx2/source/sidebar/SidebarController.cxx b/sfx2/source/sidebar/SidebarController.cxx index 08606a83f9dc..68066f4f4918 100644 --- a/sfx2/source/sidebar/SidebarController.cxx +++ b/sfx2/source/sidebar/SidebarController.cxx @@ -611,10 +611,13 @@ void SidebarController::OpenThenToggleDeck ( SwitchToDeck(rsDeckId); // Make sure the sidebar is wide enough to fit the requested content - sal_Int32 nRequestedWidth = (mpCurrentDeck->GetMinimalWidth() + TabBar::GetDefaultWidth()) - * mpTabBar->GetDPIScaleFactor(); - if (mnSavedSidebarWidth < nRequestedWidth) - SetChildWindowWidth(nRequestedWidth); + if (mpCurrentDeck && mpTabBar) + { + sal_Int32 nRequestedWidth = (mpCurrentDeck->GetMinimalWidth() + TabBar::GetDefaultWidth()) + * mpTabBar->GetDPIScaleFactor(); + if (mnSavedSidebarWidth < nRequestedWidth) + SetChildWindowWidth(nRequestedWidth); + } collectUIInformation(rsDeckId); } commit 2e6ecdfec95ac18a197cf31a67455cd103b73198 Author: Caolán McNamara <[email protected]> AuthorDate: Thu Dec 10 13:14:18 2020 +0000 Commit: Adolfo Jayme Barrientos <[email protected]> CommitDate: Fri Dec 11 03:18:11 2020 +0100 fix printing of 'margins in comment' mangled since... commit c200aa27ee4a0f5a89af6e970c2c22580029eded Author: Caolán McNamara <[email protected]> Date: Thu May 21 15:54:15 2020 +0100 remove Size arg from Window::Draw and depend on GetSizePixel which was a real monday-morning commit that bizarrely dropped drawing of the date/resolved widgets entirely and failed to notice that the PixelToLogic call in SwPostItMgr::DrawNotesForPage was originally called on the input pPostIt, not the output pDev Change-Id: I73b87f5889ef13018bcc43f97cd65169a3b77a65 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107534 Tested-by: Jenkins Reviewed-by: Adolfo Jayme Barrientos <[email protected]> diff --git a/sw/source/uibase/docvw/AnnotationWin2.cxx b/sw/source/uibase/docvw/AnnotationWin2.cxx index 9c3539f2e6d7..04c1f8332695 100644 --- a/sw/source/uibase/docvw/AnnotationWin2.cxx +++ b/sw/source/uibase/docvw/AnnotationWin2.cxx @@ -260,7 +260,7 @@ void SwAnnotationWin::SetCursorLogicPosition(const Point& rPosition, bool bPoint void SwAnnotationWin::Draw(OutputDevice* pDev, const Point& rPt, DrawFlags nInFlags) { - Size aSz = pDev->PixelToLogic(GetSizePixel()); + Size aSz = PixelToLogic(GetSizePixel()); if (mpMetadataAuthor->IsVisible() ) { @@ -287,6 +287,7 @@ void SwAnnotationWin::Draw(OutputDevice* pDev, const Point& rPt, DrawFlags nInFl aPos += rPt; vcl::Font aFont( mpMetadataDate->GetSettings().GetStyleSettings().GetFieldFont() ); mpMetadataDate->SetControlFont( aFont ); + mpMetadataDate->Draw(pDev, aPos, nInFlags); mpMetadataDate->SetControlFont( aOrigFont ); } @@ -297,13 +298,11 @@ void SwAnnotationWin::Draw(OutputDevice* pDev, const Point& rPt, DrawFlags nInFl aPos += rPt; vcl::Font aFont( mpMetadataResolved->GetSettings().GetStyleSettings().GetFieldFont() ); mpMetadataResolved->SetControlFont( aFont ); + mpMetadataResolved->Draw(pDev, aPos, nInFlags); mpMetadataResolved->SetControlFont( aOrigFont ); } - Size aOrigSize(mpSidebarTextControl->GetSizePixel()); - mpSidebarTextControl->SetSizePixel(aSz); mpSidebarTextControl->Draw(pDev, rPt, nInFlags); - mpSidebarTextControl->SetSizePixel(aOrigSize); const drawinglayer::geometry::ViewInformation2D aNewViewInfos; std::unique_ptr<drawinglayer::processor2d::BaseProcessor2D> pProcessor( @@ -319,6 +318,8 @@ void SwAnnotationWin::Draw(OutputDevice* pDev, const Point& rPt, DrawFlags nInFl if (!mpVScrollbar->IsVisible()) return; + // if there is a scrollbar shown, draw "..." to indicate the comment isn't + // completely shown vcl::Font aOrigFont(mpMetadataDate->GetControlFont()); Color aOrigBg( mpMetadataDate->GetControlBackground() ); OUString sOrigText(mpMetadataDate->GetText()); @@ -330,7 +331,7 @@ void SwAnnotationWin::Draw(OutputDevice* pDev, const Point& rPt, DrawFlags nInFl mpMetadataDate->SetControlFont( aFont ); mpMetadataDate->SetControlBackground( Color(0xFFFFFF) ); mpMetadataDate->SetText("..."); - aOrigSize = mpMetadataDate->GetSizePixel(); + Size aOrigSize = mpMetadataDate->GetSizePixel(); mpMetadataDate->SetSizePixel(mpMenuButton->GetSizePixel()); mpMetadataDate->Draw(pDev, aPos, nInFlags); mpMetadataDate->SetSizePixel(aOrigSize); commit d4d320365cc84b45d6a39826a0d4a69360b8c7f7 Author: Caolán McNamara <[email protected]> AuthorDate: Wed Dec 9 09:10:34 2020 +0000 Commit: Michael Stahl <[email protected]> CommitDate: Thu Dec 10 15:36:53 2020 +0100 leaked_storage Change-Id: I462636907a7f16a69d2fae2529c6ffbbf925774b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107392 Tested-by: Jenkins Reviewed-by: Michael Stahl <[email protected]> diff --git a/vcl/unx/gtk3/a11y/gtk3atkaction.cxx b/vcl/unx/gtk3/a11y/gtk3atkaction.cxx index fa9d096606e6..7d3313aa4066 100644 --- a/vcl/unx/gtk3/a11y/gtk3atkaction.cxx +++ b/vcl/unx/gtk3/a11y/gtk3atkaction.cxx @@ -208,7 +208,7 @@ appendKeyStrokes(OStringBuffer& rBuffer, const uno::Sequence< awt::KeyStroke >& { // The KeyCode approach did not work, probably a non ascii character // let's hope that there is a character given in KeyChar. - rBuffer.append( OUStringToGChar( OUString( rKeyStroke.KeyChar ) ) ); + rBuffer.append(OUStringToOString(OUString(rKeyStroke.KeyChar), RTL_TEXTENCODING_UTF8)); } } } commit c8d335f9bfa6a6fd0887171e2b51035dcbb42078 Author: László Németh <[email protected]> AuthorDate: Wed Dec 9 20:38:40 2020 +0100 Commit: Xisco Fauli <[email protected]> CommitDate: Thu Dec 10 15:35:46 2020 +0100 tdf#138688 tdf#124646 sw: fix crash at pasting Calc data .. in a table before a numbered paragraph. Dispatcher calls of the workaround for tdf#124646 missed the temporary table in this case, selecting + copying nothing and after that trying to paste the same non-native Calc data again, resulting infinite recursion. Replacing FN_CHAR_LEFT with FN_LINE_UP solved the problem (FN_CHAR_LEFT selected the numbers of the numbered list instead of the temporary table). Fixing the fragile dispatcher calls, now we check the selection of the temporary table to avoid similar crashes. Unit tests are added for the fix, also for the original problem of tdf#124646 (avoid copying hidden rows from Calc, e.g. copying only visible result of a filtering). Regression from commit 0c3ac02d8a3c7ea50ae262daf134c28df5c8b343 (tdf#124646 Don't paste hidden rows of Calc sheets into Writer tables). (Note: to check/show the fix of the crash manually, run the test with $ (cd sw && make -srj8 UITest_sw_table UITEST_TEST_NAME="sheetToTable.sheetToTable.test_tdf138688" SAL_USE_VCLPLUGIN=gen) adding import time time.sleep(5) to the called function of sheetToTable.py) Change-Id: I7b90af8219d6fd00b75d91f7c92fff5744373cc6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107508 Tested-by: László Németh <[email protected]> Reviewed-by: László Németh <[email protected]> (cherry picked from commit 7720f8cf22718415adb3db2304916581f864f884) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107487 Tested-by: Jenkins Reviewed-by: Xisco Fauli <[email protected]> diff --git a/sw/qa/uitest/table/sheetToTable.py b/sw/qa/uitest/table/sheetToTable.py new file mode 100644 index 000000000000..d14529d4af9e --- /dev/null +++ b/sw/qa/uitest/table/sheetToTable.py @@ -0,0 +1,107 @@ +# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*- +# +# 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/. +# +from uitest.framework import UITestCase +from uitest.uihelper.common import get_state_as_dict +from uitest.uihelper.common import select_pos +from libreoffice.uno.propertyvalue import mkPropertyValues +from uitest.uihelper.common import get_state_as_dict, type_text +from uitest.uihelper.calc import enter_text_to_cell +import org.libreoffice.unotest +import pathlib + +def get_url_for_data_file(file_name): + return pathlib.Path(org.libreoffice.unotest.makeCopyFromTDOC(file_name)).as_uri() + +#Calc sheet to Writer table + +class sheetToTable(UITestCase): + def test_sheet_to_table_without_hidden_rows(self): + calc_doc = self.ui_test.load_file(get_url_for_data_file("hiddenRow.ods")) + xCalcDoc = self.xUITest.getTopFocusWindow() + self.xUITest.executeCommand(".uno:SelectAll") + self.xUITest.executeCommand(".uno:Copy") + gridwin = xCalcDoc.getChild("grid_window") + document = self.ui_test.get_component() + self.ui_test.close_doc() + writer_doc = self.ui_test.load_file(get_url_for_data_file("tableToText.odt")) + document = self.ui_test.get_component() + xWriterDoc = self.xUITest.getTopFocusWindow() + self.xUITest.executeCommand(".uno:Paste") + #verify (don't copy hidden cells) + self.assertEqual(document.TextTables.getCount(), 1) + table = document.getTextTables()[0] + # This was 3 (copied hidden row) + self.assertEqual(len(table.getRows()), 2) + self.assertEqual(table.getCellByName("A1").getString(), "1") + # This was "2 (hidden)" (copied hidden row) + self.assertEqual(table.getCellByName("A2").getString(), "3") + self.ui_test.close_doc() + + def test_tdf138688(self): + calc_doc = self.ui_test.load_file(get_url_for_data_file("hiddenRow.ods")) + xCalcDoc = self.xUITest.getTopFocusWindow() + self.xUITest.executeCommand(".uno:SelectAll") + self.xUITest.executeCommand(".uno:Copy") + gridwin = xCalcDoc.getChild("grid_window") + document = self.ui_test.get_component() + self.ui_test.close_doc() + writer_doc = self.ui_test.load_file(get_url_for_data_file("tableToText.odt")) + document = self.ui_test.get_component() + xWriterDoc = self.xUITest.getTopFocusWindow() + + # set numbering in the paragraph after the table + self.xUITest.executeCommand(".uno:GoDown") + self.xUITest.executeCommand(".uno:GoDown") + self.xUITest.executeCommand(".uno:DefaultNumbering") + self.xUITest.executeCommand(".uno:GoUp") + self.xUITest.executeCommand(".uno:GoUp") + + #verify (this was a freezing/crash) + self.xUITest.executeCommand(".uno:Paste") + + #verify also tdf#124646 (don't copy hidden cells) + self.assertEqual(document.TextTables.getCount(), 1) + table = document.getTextTables()[0] + # This was 3 (copied hidden row) + self.assertEqual(len(table.getRows()), 2) + self.assertEqual(table.getCellByName("A1").getString(), "1") + # This was "2 (hidden)" (copied hidden row) + self.assertEqual(table.getCellByName("A2").getString(), "3") + self.ui_test.close_doc() + + def test_tdf129083(self): + calc_doc = self.ui_test.create_doc_in_start_center("calc") + + xCalcDoc = self.xUITest.getTopFocusWindow() + gridwin = xCalcDoc.getChild("grid_window") + document = self.ui_test.get_component() + + enter_text_to_cell(gridwin, "A1", "Test 1") + enter_text_to_cell(gridwin, "A2", "Test 2") + enter_text_to_cell(gridwin, "A3", "Test 3") + enter_text_to_cell(gridwin, "A4", "Test 4") + + gridwin.executeAction("SELECT", mkPropertyValues({"RANGE": "A1:A4"})) + + self.xUITest.executeCommand(".uno:Copy") + + self.ui_test.close_doc() + + writer_doc = self.ui_test.load_file(get_url_for_data_file("tdf129083.odt")) + document = self.ui_test.get_component() + xWriterDoc = self.xUITest.getTopFocusWindow() + + self.xUITest.executeCommand(".uno:Paste") + + self.assertEqual(document.TextTables.getCount(), 1) + table = document.getTextTables()[0] + self.assertEqual(len(table.getRows()), 4) + self.assertEqual(table.getCellByName("A1").getString(), "Test 1") + self.assertEqual(table.getCellByName("A2").getString(), "Test 2") + self.assertEqual(table.getCellByName("A3").getString(), "Test 3") + self.assertEqual(table.getCellByName("A4").getString(), "Test 4") + self.ui_test.close_doc() diff --git a/sw/qa/uitest/writer_tests/data/hiddenRow.ods b/sw/qa/uitest/writer_tests/data/hiddenRow.ods new file mode 100644 index 000000000000..8b5d98a182fb Binary files /dev/null and b/sw/qa/uitest/writer_tests/data/hiddenRow.ods differ diff --git a/sw/qa/uitest/writer_tests/data/tdf129083.odt b/sw/qa/uitest/writer_tests/data/tdf129083.odt new file mode 100644 index 000000000000..3de65273e8a1 Binary files /dev/null and b/sw/qa/uitest/writer_tests/data/tdf129083.odt differ diff --git a/sw/source/uibase/dochdl/swdtflvr.cxx b/sw/source/uibase/dochdl/swdtflvr.cxx index 27ac5dbbef58..6c07f242f6a5 100644 --- a/sw/source/uibase/dochdl/swdtflvr.cxx +++ b/sw/source/uibase/dochdl/swdtflvr.cxx @@ -1464,11 +1464,20 @@ bool SwTransferable::Paste(SwWrtShell& rSh, TransferableDataHelper& rData, RndSt if ( SwTransferable::PasteData( rData, rSh, EXCHG_OUT_ACTION_INSERT_STRING, nActionFlags, SotClipboardFormatId::HTML, nDestination, false, false, nullptr, 0, false, nAnchorType, bIgnoreComments, &aPasteContext, ePasteTable) ) { - pDispatch->Execute(FN_CHAR_LEFT, SfxCallMode::SYNCHRON); - pDispatch->Execute(FN_TABLE_SELECT_ALL, SfxCallMode::SYNCHRON); - pDispatch->Execute(SID_COPY, SfxCallMode::SYNCHRON); + bool bFoundTemporaryTable = false; + pDispatch->Execute(FN_LINE_UP, SfxCallMode::SYNCHRON); + if (rSh.GetDoc()->IsIdxInTable(rSh.GetCursor()->GetNode()) != nullptr) + { + bFoundTemporaryTable = true; + pDispatch->Execute(FN_TABLE_SELECT_ALL, SfxCallMode::SYNCHRON); + pDispatch->Execute(SID_COPY, SfxCallMode::SYNCHRON); + } for(sal_uInt32 a = 0; a < 1 + (nLevel * 2); a++) pDispatch->Execute(SID_UNDO, SfxCallMode::SYNCHRON); + // clipboard content hasn't changed (limit potential infinite + // recursion with the same non-native table, as was in tdf#138688) + if (!bFoundTemporaryTable) + return false; if (ePasteTable == PasteTableType::PASTE_TABLE) pDispatch->Execute(FN_PASTE_NESTED_TABLE, SfxCallMode::SYNCHRON); else if (ePasteTable == PasteTableType::PASTE_ROW) commit 9700c6ecc6a488247b5c504577d3599ac54d497e Author: Caolán McNamara <[email protected]> AuthorDate: Wed Dec 9 09:36:00 2020 +0000 Commit: Michael Stahl <[email protected]> CommitDate: Thu Dec 10 15:35:03 2020 +0100 unref pSubMenuModel at the end of the scope Change-Id: Ia427c736f989de38f30c455aeed0f43811a456b5 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107475 Tested-by: Jenkins Reviewed-by: Michael Stahl <[email protected]> diff --git a/vcl/unx/gtk3/gtk3gtksalmenu.cxx b/vcl/unx/gtk3/gtk3gtksalmenu.cxx index 262187f16658..6e47e4eae91a 100644 --- a/vcl/unx/gtk3/gtk3gtksalmenu.cxx +++ b/vcl/unx/gtk3/gtk3gtksalmenu.cxx @@ -325,7 +325,7 @@ void GtkSalMenu::ImplUpdate(bool bRecurse, bool bRemoveDisabledEntries) pSubMenuModel = g_lo_menu_get_submenu_from_item_in_section( pLOMenu, nSection, nItemPos ); } - g_object_unref( pSubMenuModel ); + assert(pSubMenuModel); if (bRecurse || bNonMenuChangedToMenu) { @@ -334,6 +334,8 @@ void GtkSalMenu::ImplUpdate(bool bRecurse, bool bRemoveDisabledEntries) pSubmenu->SetActionGroup( G_ACTION_GROUP( pActionGroup ) ); pSubmenu->ImplUpdate(true, bRemoveDisabledEntries); } + + g_object_unref( pSubMenuModel ); } g_free( aNativeCommand ); commit cce4ed9dbb9c6189b07795213aa8731baf22cd2f Author: Tor Lillqvist <[email protected]> AuthorDate: Thu Nov 19 22:04:21 2020 +0200 Commit: Michael Stahl <[email protected]> CommitDate: Thu Dec 10 15:29:16 2020 +0100 Allow --enable-macosx-sandbox without the codesigning identities For cases where you just want "make test-install" to construct an app bundle that you will manipulate and then sign separately. Change-Id: Iad805618f74ec783ebc013a664f928511b388383 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/106185 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Tor Lillqvist <[email protected]> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/106260 Tested-by: Jenkins Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107252 Reviewed-by: Michael Stahl <[email protected]> diff --git a/Makefile.in b/Makefile.in index 6af416b8a2f9..cc08afb4a5e8 100644 --- a/Makefile.in +++ b/Makefile.in @@ -348,7 +348,6 @@ ifeq ($(OS_FOR_BUILD),WNT) cd $(SRCDIR)/instsetoo_native && $(MAKE) LIBO_TEST_INSTALL=TRUE $(GMAKE_OPTIONS) else @$(SRCDIR)/solenv/bin/ooinstall $(TESTINSTALLDIR) -ifneq ($(MACOSX_CODESIGNING_IDENTITY),) # # Create Resources/*.lproj directories for languages supported by macOS set -x; for lang in ca cs da de el en es fi fr hr hu id it ja ko ms nl no pl pt pt_PT ro ru sk sv th tr uk vi zh_CN zh_TW; do \ @@ -377,6 +376,7 @@ ifneq ($(ENABLE_MACOSX_SANDBOX),) rm $(TESTINSTALLDIR)/$(PRODUCTNAME_WITHOUT_SPACES).app/Contents/MacOS/unoinfo endif # +ifneq ($(MACOSX_CODESIGNING_IDENTITY),) # Then use the macosx-codesign-app-bundle script @$(SRCDIR)/solenv/bin/macosx-codesign-app-bundle $(TESTINSTALLDIR)/$(PRODUCTNAME_WITHOUT_SPACES).app endif diff --git a/configure.ac b/configure.ac index 8006a535baad..b5c6c049b406 100644 --- a/configure.ac +++ b/configure.ac @@ -3094,11 +3094,9 @@ if test $_os = Darwin; then AC_MSG_CHECKING([whether to sandbox the application]) - if test -z "$MACOSX_CODESIGNING_IDENTITY" -a "$enable_macosx_sandbox" = yes; then - AC_MSG_ERROR([macOS sandboxing requires code signing]) - elif test -n "$ENABLE_JAVA" -a "$enable_macosx_sandbox" = yes; then + if test -n "$ENABLE_JAVA" -a "$enable_macosx_sandbox" = yes; then AC_MSG_ERROR([macOS sandboxing (actually App Store rules) disallows use of Java]) - elif test -n "$MACOSX_CODESIGNING_IDENTITY" -a "$enable_macosx_sandbox" = yes; then + elif test "$enable_macosx_sandbox" = yes; then ENABLE_MACOSX_SANDBOX=TRUE AC_DEFINE(HAVE_FEATURE_MACOSX_SANDBOX) AC_MSG_RESULT([yes]) commit 992c1de725dd7590f63044ce2f1c5337fd271d9a Author: Tor Lillqvist <[email protected]> AuthorDate: Fri Nov 20 01:02:02 2020 +0200 Commit: Michael Stahl <[email protected]> CommitDate: Thu Dec 10 15:25:59 2020 +0100 Check first if there is such a "bin" directory before attempting to use it In the test-install target in Makefile.in we remove the "bin" folder of the LibreOfficePython framework. Change-Id: Idf3d440c4f9465f21b5dcae60d4fc5ac21965dd8 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/106284 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Tor Lillqvist <[email protected]> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/106398 Tested-by: Jenkins Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107251 Reviewed-by: Michael Stahl <[email protected]> diff --git a/solenv/bin/macosx-codesign-app-bundle b/solenv/bin/macosx-codesign-app-bundle index 2353032e3a8a..8aa725745327 100755 --- a/solenv/bin/macosx-codesign-app-bundle +++ b/solenv/bin/macosx-codesign-app-bundle @@ -99,10 +99,12 @@ while read framework; do if test ! -L "$version" -a -d "$version"; then # Assume the framework has a XML (and not binary) Info.plist id=`grep -A 1 '<key>CFBundleIdentifier</key>' $version/Resources/Info.plist | tail -1 | sed -e 's,.*<string>,,' -e 's,</string>.*,,'` - # files in bin are not covered by signing the framework... - for scriptorexecutable in $(find $version/bin/ -type f); do - codesign --verbose --options=runtime --force --identifier=$id --sign "$MACOSX_CODESIGNING_IDENTITY" "$scriptorexecutable" >> "/tmp/codesign_${fn}.log" 2>&1 - done + if test -d $version/bin; then + # files in bin are not covered by signing the framework... + for scriptorexecutable in $(find $version/bin/ -type f); do + codesign --verbose --options=runtime --force --identifier=$id --sign "$MACOSX_CODESIGNING_IDENTITY" "$scriptorexecutable" >> "/tmp/codesign_${fn}.log" 2>&1 + done + fi codesign --verbose --force --identifier=$id --sign "$MACOSX_CODESIGNING_IDENTITY" "$version" >> "/tmp/codesign_${fn}.log" 2>&1 if [ "$?" != "0" ] ; then exit 1 commit 5a98daf9f6e6bec4ccaead5df256f8f1cd9c1b15 Author: Caolán McNamara <[email protected]> AuthorDate: Wed Dec 9 09:11:58 2020 +0000 Commit: Michael Stahl <[email protected]> CommitDate: Thu Dec 10 15:23:43 2020 +0100 uninit_member Change-Id: Idd42a139dabf74ee20afa8b6fb3c9ec25c7b0b19 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107390 Tested-by: Jenkins Reviewed-by: Michael Stahl <[email protected]> diff --git a/sw/source/uibase/dochdl/swdtflvr.cxx b/sw/source/uibase/dochdl/swdtflvr.cxx index b4e91dcec5f0..27ac5dbbef58 100644 --- a/sw/source/uibase/dochdl/swdtflvr.cxx +++ b/sw/source/uibase/dochdl/swdtflvr.cxx @@ -244,7 +244,9 @@ SwTransferable::SwTransferable( SwWrtShell& rSh ) : m_pWrtShell( &rSh ), m_pCreatorView( nullptr ), m_pOrigGraphic( nullptr ), - m_eBufferType( TransferBufferType::NONE ) + m_eBufferType( TransferBufferType::NONE ), + m_bOldIdle(false), + m_bCleanUp(false) { rSh.GetView().AddTransferable(*this); SwDocShell* pDShell = rSh.GetDoc()->GetDocShell(); commit f9b1ce7a2afeb5d26fb7901eedc40212269156dd Author: Caolán McNamara <[email protected]> AuthorDate: Wed Dec 9 09:49:40 2020 +0000 Commit: Michael Stahl <[email protected]> CommitDate: Thu Dec 10 15:22:54 2020 +0100 passed_freed_arg: InsertObjectAtView returns false if pObj was deleted Change-Id: Ife8049e0426659f9b83504f1aced52b62159554b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107477 Tested-by: Jenkins Reviewed-by: Michael Stahl <[email protected]> diff --git a/sd/source/ui/view/sdview3.cxx b/sd/source/ui/view/sdview3.cxx index c4ae7621a60c..cc856512ae21 100644 --- a/sd/source/ui/view/sdview3.cxx +++ b/sd/source/ui/view/sdview3.cxx @@ -995,12 +995,13 @@ bool View::InsertData( const TransferableDataHelper& rDataHelper, nOptions |= SdrInsertFlags::DONTMARK; } - InsertObjectAtView( pObj, *pPV, nOptions ); + // bInserted of false means that pObj has been deleted + bool bInserted = InsertObjectAtView( pObj, *pPV, nOptions ); - if( pImageMap ) + if (bInserted && pImageMap) pObj->AppendUserData( std::unique_ptr<SdrObjUserData>(new SvxIMapInfo( *pImageMap )) ); - if (pObj->IsChart()) + if (bInserted && pObj->IsChart()) { bool bDisableDataTableDialog = false; svt::EmbeddedObjectRef::TryRunningState( xObj ); commit 4c2c161018165b7484233547fea1511c84b3ffe3 Author: Eike Rathke <[email protected]> AuthorDate: Fri Nov 27 17:38:46 2020 +0100 Commit: Michael Stahl <[email protected]> CommitDate: Thu Dec 10 15:21:06 2020 +0100 Resolves: tdf#136272 convert DBL_MAX to 1.7976931348623157e+308 This is a combination of 4 commits. Resolves: tdf#136272 convert DBL_MAX to 1.7976931348623157e+308 ... and the 4 subsequent nextafters to appropriate strings. An interim workaround to not write the out-of-range string 1.79769313486232e+308 until we have a proper rounding. Reviewed-on: https://gerrit.libreoffice.org/c/core/+/106717 Tested-by: Jenkins Reviewed-by: Eike Rathke <[email protected]> (cherry picked from commit 4713c19e2b79341dc27e66d4c6449497db1e73d8) Consistently use RTL_CONSTASCII_LENGTH(), tdf#136272 follow-up The mix with SAL_N_ELEMENTS() was confusing and even wrong in one case. Ife73342b0efc01ed4e76e217d372fc32500c9b2c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/106764 Reviewed-by: Eike Rathke <[email protected]> Tested-by: Jenkins (cherry picked from commit 1a0f9a9c56e7b7952b813b3efd34f9be6c853957) Fix comment I2ae6e3cadc0f182c4798e5d33b0c7f07fbcbbff6 (cherry picked from commit b8404ae521a9c2d183d4e076a7884627ba353e4b) Typo in rounded digit string, tdf#138360 follow-up Ic436d3e9f0c93cb36c5e4377519f2aeb6b7fbd5f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107034 Reviewed-by: Eike Rathke <[email protected]> Tested-by: Jenkins (cherry picked from commit d8e0b1c81ffa16be8aae2231bcd3c02e8c01cf88) Change-Id: I5f98a7f0a8e0421fd024a8cc37cc6f3a198d02d1 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/106686 Tested-by: Jenkins Reviewed-by: Michael Stahl <[email protected]> diff --git a/sal/rtl/math.cxx b/sal/rtl/math.cxx index 9c32cff30f2f..bd9d2c8a601f 100644 --- a/sal/rtl/math.cxx +++ b/sal/rtl/math.cxx @@ -274,6 +274,84 @@ void doubleToString(typename T::String ** pResult, return; } + // Unfortunately the old rounding below writes 1.79769313486232e+308 for + // DBL_MAX and 4 subsequent nextafter(...,0). + static const double fB1 = std::nextafter( DBL_MAX, 0); + static const double fB2 = std::nextafter( fB1, 0); + static const double fB3 = std::nextafter( fB2, 0); + static const double fB4 = std::nextafter( fB3, 0); + if ((fValue >= fB4) && eFormat != rtl_math_StringFormat_F) + { + // 1.7976931348623157e+308 instead of rounded 1.79769313486232e+308 + // that can't be converted back as out of range. For rounded values if + // they exceed range they should not be written to exchange strings or + // file formats. + + // Writing pDig up to decimals(-1,-2) then appending one digit from + // pRou xor one or two digits from pSlot[]. + constexpr char pDig[] = "7976931348623157"; + constexpr char pRou[] = "8087931359623267"; // the only up-carry is 80 + static_assert(SAL_N_ELEMENTS(pDig) == SAL_N_ELEMENTS(pRou), "digit count mismatch"); + constexpr sal_Int32 nDig2 = RTL_CONSTASCII_LENGTH(pRou) - 2; + sal_Int32 nCapacity = RTL_CONSTASCII_LENGTH(pRou) + 8; // + "-1.E+308" + const char pSlot[5][2][3] = + { // rounded, not + "67", "57", // DBL_MAX + "65", "55", + "53", "53", + "51", "51", + "59", "49", + }; + + if (!pResultCapacity) + { + pResultCapacity = &nCapacity; + T::createBuffer(pResult, pResultCapacity); + nResultOffset = 0; + } + + if (bSign) + T::appendAscii(pResult, pResultCapacity, &nResultOffset, + RTL_CONSTASCII_STRINGPARAM("-")); + + nDecPlaces = std::clamp<sal_Int32>( nDecPlaces, 0, RTL_CONSTASCII_LENGTH(pRou)); + if (nDecPlaces == 0) + { + T::appendAscii(pResult, pResultCapacity, &nResultOffset, + RTL_CONSTASCII_STRINGPARAM("2")); + } + else + { + T::appendAscii(pResult, pResultCapacity, &nResultOffset, + RTL_CONSTASCII_STRINGPARAM("1")); + T::appendChars(pResult, pResultCapacity, &nResultOffset, &cDecSeparator, 1); + if (nDecPlaces <= 2) + { + T::appendAscii(pResult, pResultCapacity, &nResultOffset, pRou, nDecPlaces); + } + else if (nDecPlaces <= nDig2) + { + T::appendAscii(pResult, pResultCapacity, &nResultOffset, pDig, nDecPlaces - 1); + T::appendAscii(pResult, pResultCapacity, &nResultOffset, pRou + nDecPlaces - 1, 1); + } + else + { + const sal_Int32 nDec = nDecPlaces - nDig2; + nDecPlaces -= nDec; + // nDec-1 is also offset into slot, rounded(1-1=0) or not(2-1=1) + const size_t nSlot = ((fValue < fB3) ? 4 : ((fValue < fB2) ? 3 + : ((fValue < fB1) ? 2 : ((fValue < DBL_MAX) ? 1 : 0)))); + + T::appendAscii(pResult, pResultCapacity, &nResultOffset, pDig, nDecPlaces); + T::appendAscii(pResult, pResultCapacity, &nResultOffset, pSlot[nSlot][nDec-1], nDec); + } + } + T::appendAscii(pResult, pResultCapacity, &nResultOffset, + RTL_CONSTASCII_STRINGPARAM("E+308")); + + return; + } + // Use integer representation for integer values that fit into the // mantissa (1.((2^53)-1)) with a precision of 1 for highest accuracy. const sal_Int64 kMaxInt = (static_cast< sal_Int64 >(1) << 53) - 1; commit 5fc2c93e69ddb2ab6b8061c1f23fa500224c4fa6 Author: Caolán McNamara <[email protected]> AuthorDate: Fri Dec 4 12:58:20 2020 +0000 Commit: Xisco Fauli <[email protected]> CommitDate: Thu Dec 10 12:57:51 2020 +0100 disable tests that don't work without pdfium we're probably past the end of the road on --disable-pdfium Change-Id: Id91ea6c77bbdb3ecf609a7ffd16a278eb3b17e91 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107223 Tested-by: Jenkins Reviewed-by: Xisco Fauli <[email protected]> diff --git a/xmlsecurity/qa/unit/pdfsigning/pdfsigning.cxx b/xmlsecurity/qa/unit/pdfsigning/pdfsigning.cxx index 7659fe9485c5..68738134cc36 100644 --- a/xmlsecurity/qa/unit/pdfsigning/pdfsigning.cxx +++ b/xmlsecurity/qa/unit/pdfsigning/pdfsigning.cxx @@ -7,6 +7,8 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#include <config_features.h> + #include <com/sun/star/xml/crypto/SEInitializer.hpp> #include <com/sun/star/security/DocumentSignatureInformation.hpp> @@ -414,6 +416,7 @@ CPPUNIT_TEST_FIXTURE(PDFSigningTest, testBadCertP1) = verify(m_directories.getURLFromSrc(DATA_DIRECTORY) + "bad-cert-p1.pdf", 1, /*rExpectedSubFilter=*/OString()); CPPUNIT_ASSERT(!aInfos.empty()); ... etc. - the rest is truncated _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
