[Libreoffice-commits] core.git: 27 commits - bin/find-can-be-private-symbols.classes.results cui/source cui/util external/libxml2 filter/source helpcontent2 include/drawinglayer include/svtools include/svx include/unotools offapi/com offapi/UnoApi_offapi.mk oox/source ridljar/com sc/inc sc/source sd/qa sd/source solenv/clang-format starmath/source stoc/source svtools/source svx/qa svx/source sw/inc sw/qa sw/source toolkit/source vcl/Library_vcl.mk vcl/skia vcl/source writerfilter/source

Chris Sherlock (via logerrit) logerrit at kemper.freedesktop.org
Thu Aug 19 12:32:49 UTC 2021


 bin/find-can-be-private-symbols.classes.results                    |   49 +
 cui/source/dialogs/colorpicker.cxx                                 |   33 +
 cui/source/dialogs/tipofthedaydlg.cxx                              |   10 
 cui/util/cui.component                                             |    4 
 external/libxml2/ExternalProject_libxml2.mk                        |    2 
 filter/source/msfilter/escherex.cxx                                |   14 
 filter/source/msfilter/eschesdo.cxx                                |    2 
 filter/source/msfilter/svdfppt.cxx                                 |    2 
 filter/source/svg/svgexport.cxx                                    |    2 
 helpcontent2                                                       |    2 
 include/drawinglayer/primitive2d/PolygonHairlinePrimitive2D.hxx    |   68 ++
 include/drawinglayer/primitive2d/PolygonMarkerPrimitive2D.hxx      |   91 +++
 include/drawinglayer/primitive2d/PolygonStrokeArrowPrimitive2D.hxx |   78 +++
 include/drawinglayer/primitive2d/PolygonStrokePrimitive2D.hxx      |   83 +++
 include/drawinglayer/primitive2d/PolygonWavePrimitive2D.hxx        |   73 ++
 include/drawinglayer/primitive2d/polygonprimitive2d.hxx            |  250 ----------
 include/svtools/colrdlg.hxx                                        |    9 
 include/svx/PaletteManager.hxx                                     |    3 
 include/svx/svdundo.hxx                                            |    4 
 include/svx/unoapi.hxx                                             |    3 
 include/unotools/compatibility.hxx                                 |    2 
 offapi/UnoApi_offapi.mk                                            |    1 
 offapi/com/sun/star/cui/AsyncColorPicker.idl                       |   41 +
 oox/source/drawingml/shape.cxx                                     |    2 
 oox/source/export/drawingml.cxx                                    |   10 
 oox/source/export/shapes.cxx                                       |    6 
 oox/source/vml/vmlshape.cxx                                        |    6 
 ridljar/com/sun/star/lib/util/NativeLibraryLoader.java             |    9 
 sc/inc/postit.hxx                                                  |    8 
 sc/source/core/data/postit.cxx                                     |    9 
 sc/source/filter/excel/xeescher.cxx                                |    2 
 sc/source/filter/excel/xiescher.cxx                                |    2 
 sc/source/filter/xcl97/xcl97esc.cxx                                |    4 
 sc/source/filter/xcl97/xcl97rec.cxx                                |    2 
 sc/source/filter/xml/xmlcelli.cxx                                  |   14 
 sc/source/filter/xml/xmlexprt.cxx                                  |    2 
 sc/source/ui/Accessibility/AccessibleDocument.cxx                  |    2 
 sc/source/ui/inc/datatransformation.hxx                            |    4 
 sc/source/ui/sidebar/CellAppearancePropertyPanel.cxx               |   17 
 sc/source/ui/sidebar/CellAppearancePropertyPanel.hxx               |    2 
 sd/qa/unit/export-tests.cxx                                        |    4 
 sd/qa/unit/misc-tests.cxx                                          |    4 
 sd/source/core/CustomAnimationEffect.cxx                           |    4 
 sd/source/filter/eppt/eppt.cxx                                     |    2 
 sd/source/filter/eppt/epptso.cxx                                   |    4 
 sd/source/ui/accessibility/AccessibleDrawDocumentView.cxx          |    8 
 sd/source/ui/animations/CustomAnimationPane.cxx                    |    2 
 sd/source/ui/slideshow/slideshowimpl.cxx                           |    2 
 sd/source/ui/unoidl/unoobj.cxx                                     |    2 
 solenv/clang-format/excludelist                                    |    1 
 starmath/source/mathml/import.cxx                                  |    6 
 stoc/source/uriproc/UriReference.cxx                               |   16 
 stoc/source/uriproc/UriReference.hxx                               |    6 
 svtools/source/dialogs/colrdlg.cxx                                 |   65 ++
 svx/qa/unit/customshapes.cxx                                       |   36 -
 svx/qa/unit/svdraw.cxx                                             |    2 
 svx/source/accessibility/AccessibleControlShape.cxx                |    2 
 svx/source/accessibility/AccessibleShape.cxx                       |   12 
 svx/source/customshapes/EnhancedCustomShapeEngine.cxx              |   12 
 svx/source/customshapes/EnhancedCustomShapeHandle.cxx              |    8 
 svx/source/sdr/primitive2d/primitivefactory2d.cxx                  |    2 
 svx/source/svdraw/svdoashp.cxx                                     |    8 
 svx/source/svdraw/svdundo.cxx                                      |    4 
 svx/source/table/tableundo.cxx                                     |   10 
 svx/source/table/tableundo.hxx                                     |    3 
 svx/source/tbxctrls/PaletteManager.cxx                             |   29 -
 svx/source/tbxctrls/fillctrl.cxx                                   |   10 
 svx/source/unodraw/UnoGraphicExporter.cxx                          |    8 
 svx/source/unodraw/unoshape.cxx                                    |    9 
 sw/inc/AnnotationWin.hxx                                           |    3 
 sw/inc/PostItMgr.hxx                                               |    7 
 sw/qa/extras/odfexport/data/shapes-hyperlink.odt                   |binary
 sw/qa/extras/odfexport/odfexport2.cxx                              |   19 
 sw/qa/extras/ooxmlexport/data/Simple-TOC.odt                       |binary
 sw/qa/extras/ooxmlexport/ooxmlexport16.cxx                         |   12 
 sw/qa/extras/uiwriter/uiwriter2.cxx                                |   45 +
 sw/source/core/access/accmap.cxx                                   |    4 
 sw/source/core/doc/DocumentContentOperationsManager.cxx            |   64 ++
 sw/source/core/inc/ModelTraverser.hxx                              |    2 
 sw/source/filter/ww8/styles.cxx                                    |    2 
 sw/source/filter/ww8/wrtw8esh.cxx                                  |    2 
 sw/source/filter/ww8/ww8par.cxx                                    |    2 
 sw/source/filter/ww8/ww8par4.cxx                                   |    2 
 sw/source/uibase/docvw/AnnotationWin.cxx                           |    6 
 sw/source/uibase/docvw/AnnotationWin2.cxx                          |    4 
 sw/source/uibase/docvw/PostItMgr.cxx                               |    6 
 toolkit/source/controls/tree/treedatamodel.cxx                     |   24 
 vcl/Library_vcl.mk                                                 |    1 
 vcl/skia/gdiimpl.cxx                                               |   16 
 vcl/source/control/fixed.cxx                                       |    1 
 vcl/source/outdev/background.cxx                                   |   77 +++
 vcl/source/outdev/bitmap.cxx                                       |    3 
 vcl/source/outdev/font.cxx                                         |   12 
 vcl/source/outdev/outdevstate.cxx                                  |   58 --
 vcl/source/outdev/wallpaper.cxx                                    |   11 
 writerfilter/source/dmapper/GraphicImport.cxx                      |    4 
 writerfilter/source/rtftok/rtfsdrimport.cxx                        |    2 
 97 files changed, 1039 insertions(+), 558 deletions(-)

New commits:
commit ddf90ad13d1e4df45dc414d737e50f086c8737fd
Author:     Chris Sherlock <chris.sherlock79 at gmail.com>
AuthorDate: Wed May 5 18:03:51 2021 +1000
Commit:     Tomaž Vajngerl <quikee at gmail.com>
CommitDate: Thu Aug 19 13:56:57 2021 +0200

    vcl: move ImplReleaseFonts() to outdev/font.cxx
    
    Change-Id: I4bd54c24f415e28014690fd775a3a5136d2be433
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115371
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>

diff --git a/vcl/source/outdev/font.cxx b/vcl/source/outdev/font.cxx
index 6c761ec4bf07..1db0ad16207f 100644
--- a/vcl/source/outdev/font.cxx
+++ b/vcl/source/outdev/font.cxx
@@ -1437,4 +1437,16 @@ void OutputDevice::ResetNewFontCache()
     mxFontCache = std::make_shared<ImplFontCache>();
 }
 
+void OutputDevice::ImplReleaseFonts()
+{
+    mpGraphics->ReleaseFonts();
+
+    mbNewFont = true;
+    mbInitFont = true;
+
+    mpFontInstance.clear();
+    mpDeviceFontList.reset();
+    mpDeviceFontSizeList.reset();
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/source/outdev/outdevstate.cxx b/vcl/source/outdev/outdevstate.cxx
index c50349cc1f30..51b2c0c874ad 100644
--- a/vcl/source/outdev/outdevstate.cxx
+++ b/vcl/source/outdev/outdevstate.cxx
@@ -571,17 +571,4 @@ void OutputDevice::InitFillColor()
     mbInitFillColor = false;
 }
 
-void OutputDevice::ImplReleaseFonts()
-{
-    mpGraphics->ReleaseFonts();
-
-    mbNewFont = true;
-    mbInitFont = true;
-
-    mpFontInstance.clear();
-    mpDeviceFontList.reset();
-    mpDeviceFontSizeList.reset();
-}
-
-
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 0f7401838d77172ef545e38cd07fac253869c904
Author:     Chris Sherlock <chris.sherlock79 at gmail.com>
AuthorDate: Wed May 5 05:08:54 2021 +1000
Commit:     Tomaž Vajngerl <quikee at gmail.com>
CommitDate: Thu Aug 19 13:56:10 2021 +0200

    vcl: add braces to SetBackground() function to make reading easier
    
    Change-Id: Icb91c4e8aae3f6f25515ca75a3cc230d9238dd4a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115370
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>

diff --git a/vcl/source/outdev/background.cxx b/vcl/source/outdev/background.cxx
index 6bcb3fdeb6c5..2a6d96c3328f 100644
--- a/vcl/source/outdev/background.cxx
+++ b/vcl/source/outdev/background.cxx
@@ -49,7 +49,9 @@ void OutputDevice::SetBackground( const Wallpaper& rBackground )
         // Some of these are probably wrong (e.g. if the gradient has transparency),
         // but hopefully nobody uses that. If you do, feel free to implement it properly.
         if( rBackground.GetStyle() == WallpaperStyle::NONE )
+        {
             mpAlphaVDev->SetBackground( rBackground );
+        }
         else if( rBackground.IsBitmap())
         {
             BitmapEx bitmap = rBackground.GetBitmap();
@@ -59,7 +61,9 @@ void OutputDevice::SetBackground( const Wallpaper& rBackground )
                 mpAlphaVDev->SetBackground( Wallpaper( COL_BLACK ));
         }
         else if( rBackground.IsGradient())
+        {
             mpAlphaVDev->SetBackground( Wallpaper( COL_BLACK ));
+        }
         else
         {
             // Color background.
commit eb1bf3c87104790fc17a71d070e570cce278c9e4
Author:     Chris Sherlock <chris.sherlock79 at gmail.com>
AuthorDate: Wed May 5 04:03:43 2021 +1000
Commit:     Tomaž Vajngerl <quikee at gmail.com>
CommitDate: Thu Aug 19 13:55:34 2021 +0200

    vcl: move background functions to background.cxx
    
    Change-Id: Iee2e42f3881512d2e779d16505c50f76731e398a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115369
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>

diff --git a/solenv/clang-format/excludelist b/solenv/clang-format/excludelist
index c2cc51592e42..f6c57e5785fc 100644
--- a/solenv/clang-format/excludelist
+++ b/solenv/clang-format/excludelist
@@ -15028,6 +15028,7 @@ vcl/source/opengl/win/WinDeviceInfo.cxx
 vcl/source/opengl/win/context.cxx
 vcl/source/opengl/x11/X11DeviceInfo.cxx
 vcl/source/opengl/x11/context.cxx
+vcl/source/outdev/background.cxx
 vcl/source/outdev/bitmap.cxx
 vcl/source/outdev/clipping.cxx
 vcl/source/outdev/curvedshapes.cxx
diff --git a/vcl/Library_vcl.mk b/vcl/Library_vcl.mk
index 9fb2e352bdea..c7a0e5c48986 100644
--- a/vcl/Library_vcl.mk
+++ b/vcl/Library_vcl.mk
@@ -211,6 +211,7 @@ $(eval $(call gb_Library_add_exception_objects,vcl,\
     vcl/source/edit/xtextedt \
     vcl/source/toolkit/group \
     vcl/source/toolkit/morebtn \
+    vcl/source/outdev/background \
     vcl/source/outdev/outdev \
     vcl/source/outdev/outdevstate \
     vcl/source/outdev/clipping \
diff --git a/vcl/source/outdev/background.cxx b/vcl/source/outdev/background.cxx
new file mode 100644
index 000000000000..6bcb3fdeb6c5
--- /dev/null
+++ b/vcl/source/outdev/background.cxx
@@ -0,0 +1,73 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * 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/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ *   Licensed to the Apache Software Foundation (ASF) under one or more
+ *   contributor license agreements. See the NOTICE file distributed
+ *   with this work for additional information regarding copyright
+ *   ownership. The ASF licenses this file to you under the Apache
+ *   License, Version 2.0 (the "License"); you may not use this file
+ *   except in compliance with the License. You may obtain a copy of
+ *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <vcl/virdev.hxx>
+
+Color OutputDevice::GetBackgroundColor() const
+{
+    return GetBackground().GetColor();
+}
+
+void OutputDevice::SetBackground()
+{
+
+    maBackground = Wallpaper();
+    mbBackground = false;
+
+    if( mpAlphaVDev )
+        mpAlphaVDev->SetBackground();
+}
+
+void OutputDevice::SetBackground( const Wallpaper& rBackground )
+{
+
+    maBackground = rBackground;
+
+    if( rBackground.GetStyle() == WallpaperStyle::NONE )
+        mbBackground = false;
+    else
+        mbBackground = true;
+
+    if( mpAlphaVDev )
+    {
+        // Some of these are probably wrong (e.g. if the gradient has transparency),
+        // but hopefully nobody uses that. If you do, feel free to implement it properly.
+        if( rBackground.GetStyle() == WallpaperStyle::NONE )
+            mpAlphaVDev->SetBackground( rBackground );
+        else if( rBackground.IsBitmap())
+        {
+            BitmapEx bitmap = rBackground.GetBitmap();
+            if( bitmap.IsAlpha())
+                mpAlphaVDev->SetBackground( Wallpaper( BitmapEx( Bitmap( bitmap.GetAlpha()))));
+            else
+                mpAlphaVDev->SetBackground( Wallpaper( COL_BLACK ));
+        }
+        else if( rBackground.IsGradient())
+            mpAlphaVDev->SetBackground( Wallpaper( COL_BLACK ));
+        else
+        {
+            // Color background.
+            int transparency = 255 - rBackground.GetColor().GetAlpha();
+            mpAlphaVDev->SetBackground( Wallpaper( Color( transparency, transparency, transparency )));
+        }
+    }
+}
+
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/vcl/source/outdev/outdevstate.cxx b/vcl/source/outdev/outdevstate.cxx
index 7fa966606744..c50349cc1f30 100644
--- a/vcl/source/outdev/outdevstate.cxx
+++ b/vcl/source/outdev/outdevstate.cxx
@@ -436,51 +436,6 @@ void OutputDevice::SetLineColor( const Color& rColor )
         mpAlphaVDev->SetLineColor( COL_BLACK );
 }
 
-void OutputDevice::SetBackground()
-{
-
-    maBackground = Wallpaper();
-    mbBackground = false;
-
-    if( mpAlphaVDev )
-        mpAlphaVDev->SetBackground();
-}
-
-void OutputDevice::SetBackground( const Wallpaper& rBackground )
-{
-
-    maBackground = rBackground;
-
-    if( rBackground.GetStyle() == WallpaperStyle::NONE )
-        mbBackground = false;
-    else
-        mbBackground = true;
-
-    if( mpAlphaVDev )
-    {
-        // Some of these are probably wrong (e.g. if the gradient has transparency),
-        // but hopefully nobody uses that. If you do, feel free to implement it properly.
-        if( rBackground.GetStyle() == WallpaperStyle::NONE )
-            mpAlphaVDev->SetBackground( rBackground );
-        else if( rBackground.IsBitmap())
-        {
-            BitmapEx bitmap = rBackground.GetBitmap();
-            if( bitmap.IsAlpha())
-                mpAlphaVDev->SetBackground( Wallpaper( BitmapEx( Bitmap( bitmap.GetAlpha()))));
-            else
-                mpAlphaVDev->SetBackground( Wallpaper( COL_BLACK ));
-        }
-        else if( rBackground.IsGradient())
-            mpAlphaVDev->SetBackground( Wallpaper( COL_BLACK ));
-        else
-        {
-            // Color background.
-            int transparency = 255 - rBackground.GetColor().GetAlpha();
-            mpAlphaVDev->SetBackground( Wallpaper( Color( transparency, transparency, transparency )));
-        }
-    }
-}
-
 void OutputDevice::SetFont( const vcl::Font& rNewFont )
 {
 
diff --git a/vcl/source/outdev/wallpaper.cxx b/vcl/source/outdev/wallpaper.cxx
index 37f3b0c1bcd1..2223eba4c6a2 100644
--- a/vcl/source/outdev/wallpaper.cxx
+++ b/vcl/source/outdev/wallpaper.cxx
@@ -17,13 +17,11 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
-#include <cassert>
-
-#include <vcl/gdimtf.hxx>
 #include <vcl/metaact.hxx>
-#include <vcl/outdev.hxx>
 #include <vcl/virdev.hxx>
 
+#include <cassert>
+
 Color OutputDevice::GetReadableFontColor(const Color& rFontColor, const Color& rBgColor) const
 {
     if (rBgColor.IsDark() && rFontColor.IsDark())
@@ -34,11 +32,6 @@ Color OutputDevice::GetReadableFontColor(const Color& rFontColor, const Color& r
         return rFontColor;
 }
 
-Color OutputDevice::GetBackgroundColor() const
-{
-    return GetBackground().GetColor();
-}
-
 void OutputDevice::DrawWallpaper( const tools::Rectangle& rRect,
                                   const Wallpaper& rWallpaper )
 {
commit 1103727fb24b368419ea0cfd2382560ef6b82f43
Author:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Thu Aug 19 16:13:33 2021 +0900
Commit:     Tomaž Vajngerl <quikee at gmail.com>
CommitDate: Thu Aug 19 13:52:49 2021 +0200

    drawinglayer: split polygonprimitive2d.hxx into multiple files
    
    The header polygonprimitive2d.hxx contains multiple primitives,
    which should be independent in their own header files.
    Split them in its own file, but for now keep polygonprimitive2d.hxx
    with includes all the new headers so that compilation goes through
    with no need to change any other files.
    
    Change-Id: I5c8ea2ed0c6d38374c1b871fef562b2164b9c8fc
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120708
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>

diff --git a/include/drawinglayer/primitive2d/PolygonHairlinePrimitive2D.hxx b/include/drawinglayer/primitive2d/PolygonHairlinePrimitive2D.hxx
new file mode 100644
index 000000000000..7530162b2168
--- /dev/null
+++ b/include/drawinglayer/primitive2d/PolygonHairlinePrimitive2D.hxx
@@ -0,0 +1,68 @@
+/* -*- 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/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ *   Licensed to the Apache Software Foundation (ASF) under one or more
+ *   contributor license agreements. See the NOTICE file distributed
+ *   with this work for additional information regarding copyright
+ *   ownership. The ASF licenses this file to you under the Apache
+ *   License, Version 2.0 (the "License"); you may not use this file
+ *   except in compliance with the License. You may obtain a copy of
+ *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#pragma once
+
+#include <drawinglayer/drawinglayerdllapi.h>
+
+#include <drawinglayer/primitive2d/BufferedDecompositionPrimitive2D.hxx>
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/color/bcolor.hxx>
+
+namespace drawinglayer::primitive2d
+{
+/** PolygonHairlinePrimitive2D class
+
+    This primitive defines a Hairline. Since hairlines are view-dependent,
+    this primitive is view-dependent, too.
+
+    This is one of the non-decomposable primitives, so a renderer
+    should process it.
+ */
+class DRAWINGLAYER_DLLPUBLIC PolygonHairlinePrimitive2D final : public BasePrimitive2D
+{
+private:
+    /// the hairline geometry
+    basegfx::B2DPolygon maPolygon;
+
+    /// the hairline color
+    basegfx::BColor maBColor;
+
+public:
+    /// constructor
+    PolygonHairlinePrimitive2D(const basegfx::B2DPolygon& rPolygon, const basegfx::BColor& rBColor);
+
+    /// data read access
+    const basegfx::B2DPolygon& getB2DPolygon() const { return maPolygon; }
+    const basegfx::BColor& getBColor() const { return maBColor; }
+
+    /// compare operator
+    virtual bool operator==(const BasePrimitive2D& rPrimitive) const override;
+
+    /// get range
+    virtual basegfx::B2DRange
+    getB2DRange(const geometry::ViewInformation2D& rViewInformation) const override;
+
+    /// provide unique ID
+    virtual sal_uInt32 getPrimitive2DID() const override;
+};
+
+} // end of namespace primitive2d::drawinglayer
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/drawinglayer/primitive2d/PolygonMarkerPrimitive2D.hxx b/include/drawinglayer/primitive2d/PolygonMarkerPrimitive2D.hxx
new file mode 100644
index 000000000000..9bdcb53528cf
--- /dev/null
+++ b/include/drawinglayer/primitive2d/PolygonMarkerPrimitive2D.hxx
@@ -0,0 +1,91 @@
+/* -*- 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/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ *   Licensed to the Apache Software Foundation (ASF) under one or more
+ *   contributor license agreements. See the NOTICE file distributed
+ *   with this work for additional information regarding copyright
+ *   ownership. The ASF licenses this file to you under the Apache
+ *   License, Version 2.0 (the "License"); you may not use this file
+ *   except in compliance with the License. You may obtain a copy of
+ *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#pragma once
+
+#include <drawinglayer/drawinglayerdllapi.h>
+
+#include <drawinglayer/primitive2d/BufferedDecompositionPrimitive2D.hxx>
+#include <basegfx/matrix/b2dhommatrix.hxx>
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/color/bcolor.hxx>
+
+namespace drawinglayer::primitive2d
+{
+/** PolygonMarkerPrimitive2D class
+
+    This primitive defines a two-colored marker hairline which is
+    dashed with the given dash length. Since hairlines are view-dependent,
+    this primitive is view-dependent, too.
+
+    It will be decomposed to the needed PolygonHairlinePrimitive2D if
+    not handled directly by a renderer.
+ */
+class DRAWINGLAYER_DLLPUBLIC PolygonMarkerPrimitive2D final
+    : public BufferedDecompositionPrimitive2D
+{
+private:
+    /// the marker hairline geometry
+    basegfx::B2DPolygon maPolygon;
+
+    /// the two colors
+    basegfx::BColor maRGBColorA;
+    basegfx::BColor maRGBColorB;
+
+    /// the dash distance in 'pixels'
+    double mfDiscreteDashLength;
+
+    /// decomposition is view-dependent, remember last InverseObjectToViewTransformation
+    basegfx::B2DHomMatrix maLastInverseObjectToViewTransformation;
+
+    /// local decomposition.
+    virtual void
+    create2DDecomposition(Primitive2DContainer& rContainer,
+                          const geometry::ViewInformation2D& rViewInformation) const override;
+
+public:
+    /// constructor
+    PolygonMarkerPrimitive2D(const basegfx::B2DPolygon& rPolygon, const basegfx::BColor& rRGBColorA,
+                             const basegfx::BColor& rRGBColorB, double fDiscreteDashLength);
+
+    /// data read access
+    const basegfx::B2DPolygon& getB2DPolygon() const { return maPolygon; }
+    const basegfx::BColor& getRGBColorA() const { return maRGBColorA; }
+    const basegfx::BColor& getRGBColorB() const { return maRGBColorB; }
+    double getDiscreteDashLength() const { return mfDiscreteDashLength; }
+
+    /// compare operator
+    virtual bool operator==(const BasePrimitive2D& rPrimitive) const override;
+
+    /// get range
+    virtual basegfx::B2DRange
+    getB2DRange(const geometry::ViewInformation2D& rViewInformation) const override;
+
+    /// Override standard getDecomposition to be view-dependent here
+    virtual void
+    get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor,
+                       const geometry::ViewInformation2D& rViewInformation) const override;
+
+    /// provide unique ID
+    virtual sal_uInt32 getPrimitive2DID() const override;
+};
+
+} // end of namespace primitive2d::drawinglayer
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/drawinglayer/primitive2d/PolygonStrokeArrowPrimitive2D.hxx b/include/drawinglayer/primitive2d/PolygonStrokeArrowPrimitive2D.hxx
new file mode 100644
index 000000000000..2577ffdfbeb7
--- /dev/null
+++ b/include/drawinglayer/primitive2d/PolygonStrokeArrowPrimitive2D.hxx
@@ -0,0 +1,78 @@
+/* -*- 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/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ *   Licensed to the Apache Software Foundation (ASF) under one or more
+ *   contributor license agreements. See the NOTICE file distributed
+ *   with this work for additional information regarding copyright
+ *   ownership. The ASF licenses this file to you under the Apache
+ *   License, Version 2.0 (the "License"); you may not use this file
+ *   except in compliance with the License. You may obtain a copy of
+ *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#pragma once
+
+#include <drawinglayer/drawinglayerdllapi.h>
+
+#include <drawinglayer/primitive2d/PolygonStrokePrimitive2D.hxx>
+#include <drawinglayer/attribute/linestartendattribute.hxx>
+
+namespace drawinglayer::primitive2d
+{
+/** PolygonStrokeArrowPrimitive2D class
+
+    This primitive defines a PolygonStrokePrimitive2D,
+    possibly extended by start and end definitions, which are
+    normally used for arrows.
+ */
+class DRAWINGLAYER_DLLPUBLIC PolygonStrokeArrowPrimitive2D final : public PolygonStrokePrimitive2D
+{
+private:
+    /// geometric definitions for line start and end
+    attribute::LineStartEndAttribute maStart;
+    attribute::LineStartEndAttribute maEnd;
+
+    /// local decomposition.
+    virtual void
+    create2DDecomposition(Primitive2DContainer& rContainer,
+                          const geometry::ViewInformation2D& rViewInformation) const override;
+
+public:
+    /// constructor
+    PolygonStrokeArrowPrimitive2D(const basegfx::B2DPolygon& rPolygon,
+                                  const attribute::LineAttribute& rLineAttribute,
+                                  const attribute::StrokeAttribute& rStrokeAttribute,
+                                  const attribute::LineStartEndAttribute& rStart,
+                                  const attribute::LineStartEndAttribute& rEnd);
+
+    /// constructor without stroking
+    PolygonStrokeArrowPrimitive2D(const basegfx::B2DPolygon& rPolygon,
+                                  const attribute::LineAttribute& rLineAttribute,
+                                  const attribute::LineStartEndAttribute& rStart,
+                                  const attribute::LineStartEndAttribute& rEnd);
+
+    /// data read access
+    const attribute::LineStartEndAttribute& getStart() const { return maStart; }
+    const attribute::LineStartEndAttribute& getEnd() const { return maEnd; }
+
+    /// compare operator
+    virtual bool operator==(const BasePrimitive2D& rPrimitive) const override;
+
+    /// get range
+    virtual basegfx::B2DRange
+    getB2DRange(const geometry::ViewInformation2D& rViewInformation) const override;
+
+    /// provide unique ID
+    virtual sal_uInt32 getPrimitive2DID() const override;
+};
+
+} // end of namespace primitive2d::drawinglayer
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/drawinglayer/primitive2d/PolygonStrokePrimitive2D.hxx b/include/drawinglayer/primitive2d/PolygonStrokePrimitive2D.hxx
new file mode 100644
index 000000000000..ab1566033f2f
--- /dev/null
+++ b/include/drawinglayer/primitive2d/PolygonStrokePrimitive2D.hxx
@@ -0,0 +1,83 @@
+/* -*- 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/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ *   Licensed to the Apache Software Foundation (ASF) under one or more
+ *   contributor license agreements. See the NOTICE file distributed
+ *   with this work for additional information regarding copyright
+ *   ownership. The ASF licenses this file to you under the Apache
+ *   License, Version 2.0 (the "License"); you may not use this file
+ *   except in compliance with the License. You may obtain a copy of
+ *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#pragma once
+
+#include <drawinglayer/drawinglayerdllapi.h>
+
+#include <drawinglayer/primitive2d/BufferedDecompositionPrimitive2D.hxx>
+#include <drawinglayer/attribute/lineattribute.hxx>
+#include <drawinglayer/attribute/strokeattribute.hxx>
+#include <basegfx/polygon/b2dpolygon.hxx>
+
+namespace drawinglayer::primitive2d
+{
+/** PolygonStrokePrimitive2D class
+
+    This primitive defines a line with line width, line join, line color
+    and stroke attributes. It will be decomposed dependent on the definition
+    to the needed primitives, e.g. filled PolyPolygons for fat lines.
+ */
+class DRAWINGLAYER_DLLPUBLIC PolygonStrokePrimitive2D : public BufferedDecompositionPrimitive2D
+{
+private:
+    /// the line geometry
+    basegfx::B2DPolygon maPolygon;
+
+    /// the line attributes like width, join and color
+    attribute::LineAttribute maLineAttribute;
+
+    /// the line stroking (if used)
+    attribute::StrokeAttribute maStrokeAttribute;
+
+protected:
+    /// local decomposition.
+    virtual void
+    create2DDecomposition(Primitive2DContainer& rContainer,
+                          const geometry::ViewInformation2D& rViewInformation) const override;
+
+public:
+    /// constructor
+    PolygonStrokePrimitive2D(const basegfx::B2DPolygon& rPolygon,
+                             const attribute::LineAttribute& rLineAttribute,
+                             const attribute::StrokeAttribute& rStrokeAttribute);
+
+    /// constructor without stroking
+    PolygonStrokePrimitive2D(const basegfx::B2DPolygon& rPolygon,
+                             const attribute::LineAttribute& rLineAttribute);
+
+    /// data read access
+    const basegfx::B2DPolygon& getB2DPolygon() const { return maPolygon; }
+    const attribute::LineAttribute& getLineAttribute() const { return maLineAttribute; }
+    const attribute::StrokeAttribute& getStrokeAttribute() const { return maStrokeAttribute; }
+
+    /// compare operator
+    virtual bool operator==(const BasePrimitive2D& rPrimitive) const override;
+
+    /// get range
+    virtual basegfx::B2DRange
+    getB2DRange(const geometry::ViewInformation2D& rViewInformation) const override;
+
+    /// provide unique ID
+    virtual sal_uInt32 getPrimitive2DID() const override;
+};
+
+} // end of namespace primitive2d::drawinglayer
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/drawinglayer/primitive2d/PolygonWavePrimitive2D.hxx b/include/drawinglayer/primitive2d/PolygonWavePrimitive2D.hxx
new file mode 100644
index 000000000000..0a11f861f680
--- /dev/null
+++ b/include/drawinglayer/primitive2d/PolygonWavePrimitive2D.hxx
@@ -0,0 +1,73 @@
+/* -*- 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/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ *   Licensed to the Apache Software Foundation (ASF) under one or more
+ *   contributor license agreements. See the NOTICE file distributed
+ *   with this work for additional information regarding copyright
+ *   ownership. The ASF licenses this file to you under the Apache
+ *   License, Version 2.0 (the "License"); you may not use this file
+ *   except in compliance with the License. You may obtain a copy of
+ *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#pragma once
+
+#include <drawinglayer/drawinglayerdllapi.h>
+#include <drawinglayer/primitive2d/PolygonStrokePrimitive2D.hxx>
+
+namespace drawinglayer::primitive2d
+{
+/** PolygonWavePrimitive2D class
+
+    This primitive defines a waveline based on a PolygonStrokePrimitive2D
+    where the wave is defined by wave width and wave length.
+ */
+class PolygonWavePrimitive2D final : public PolygonStrokePrimitive2D
+{
+private:
+    /// wave definition
+    double mfWaveWidth;
+    double mfWaveHeight;
+
+    /// local decomposition.
+    virtual void
+    create2DDecomposition(Primitive2DContainer& rContainer,
+                          const geometry::ViewInformation2D& rViewInformation) const override;
+
+public:
+    /// constructor
+    PolygonWavePrimitive2D(const basegfx::B2DPolygon& rPolygon,
+                           const attribute::LineAttribute& rLineAttribute,
+                           const attribute::StrokeAttribute& rStrokeAttribute, double fWaveWidth,
+                           double fWaveHeight);
+
+    /// constructor without stroking
+    PolygonWavePrimitive2D(const basegfx::B2DPolygon& rPolygon,
+                           const attribute::LineAttribute& rLineAttribute, double fWaveWidth,
+                           double fWaveHeight);
+
+    /// data read access
+    double getWaveWidth() const { return mfWaveWidth; }
+    double getWaveHeight() const { return mfWaveHeight; }
+
+    /// compare operator
+    virtual bool operator==(const BasePrimitive2D& rPrimitive) const override;
+
+    /// get range
+    virtual basegfx::B2DRange
+    getB2DRange(const geometry::ViewInformation2D& rViewInformation) const override;
+
+    /// provide unique ID
+    virtual sal_uInt32 getPrimitive2DID() const override;
+};
+
+} // end of namespace primitive2d::drawinglayer
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/drawinglayer/primitive2d/polygonprimitive2d.hxx b/include/drawinglayer/primitive2d/polygonprimitive2d.hxx
index 21d970d5835a..874edde03583 100644
--- a/include/drawinglayer/primitive2d/polygonprimitive2d.hxx
+++ b/include/drawinglayer/primitive2d/polygonprimitive2d.hxx
@@ -21,250 +21,10 @@
 
 #include <drawinglayer/drawinglayerdllapi.h>
 
-#include <drawinglayer/primitive2d/BufferedDecompositionPrimitive2D.hxx>
-#include <drawinglayer/attribute/lineattribute.hxx>
-#include <drawinglayer/attribute/strokeattribute.hxx>
-#include <drawinglayer/attribute/linestartendattribute.hxx>
-#include <basegfx/matrix/b2dhommatrix.hxx>
-#include <basegfx/polygon/b2dpolygon.hxx>
-#include <basegfx/color/bcolor.hxx>
-
-namespace drawinglayer::primitive2d
-{
-/** PolygonHairlinePrimitive2D class
-
-    This primitive defines a Hairline. Since hairlines are view-dependent,
-    this primitive is view-dependent, too.
-
-    This is one of the non-decomposable primitives, so a renderer
-    should process it.
- */
-class DRAWINGLAYER_DLLPUBLIC PolygonHairlinePrimitive2D final : public BasePrimitive2D
-{
-private:
-    /// the hairline geometry
-    basegfx::B2DPolygon maPolygon;
-
-    /// the hairline color
-    basegfx::BColor maBColor;
-
-public:
-    /// constructor
-    PolygonHairlinePrimitive2D(const basegfx::B2DPolygon& rPolygon, const basegfx::BColor& rBColor);
-
-    /// data read access
-    const basegfx::B2DPolygon& getB2DPolygon() const { return maPolygon; }
-    const basegfx::BColor& getBColor() const { return maBColor; }
-
-    /// compare operator
-    virtual bool operator==(const BasePrimitive2D& rPrimitive) const override;
-
-    /// get range
-    virtual basegfx::B2DRange
-    getB2DRange(const geometry::ViewInformation2D& rViewInformation) const override;
-
-    /// provide unique ID
-    virtual sal_uInt32 getPrimitive2DID() const override;
-};
-
-/** PolygonMarkerPrimitive2D class
-
-    This primitive defines a two-colored marker hairline which is
-    dashed with the given dash length. Since hairlines are view-dependent,
-    this primitive is view-dependent, too.
-
-    It will be decomposed to the needed PolygonHairlinePrimitive2D if
-    not handled directly by a renderer.
- */
-class DRAWINGLAYER_DLLPUBLIC PolygonMarkerPrimitive2D final
-    : public BufferedDecompositionPrimitive2D
-{
-private:
-    /// the marker hairline geometry
-    basegfx::B2DPolygon maPolygon;
-
-    /// the two colors
-    basegfx::BColor maRGBColorA;
-    basegfx::BColor maRGBColorB;
-
-    /// the dash distance in 'pixels'
-    double mfDiscreteDashLength;
-
-    /// decomposition is view-dependent, remember last InverseObjectToViewTransformation
-    basegfx::B2DHomMatrix maLastInverseObjectToViewTransformation;
-
-    /// local decomposition.
-    virtual void
-    create2DDecomposition(Primitive2DContainer& rContainer,
-                          const geometry::ViewInformation2D& rViewInformation) const override;
-
-public:
-    /// constructor
-    PolygonMarkerPrimitive2D(const basegfx::B2DPolygon& rPolygon, const basegfx::BColor& rRGBColorA,
-                             const basegfx::BColor& rRGBColorB, double fDiscreteDashLength);
-
-    /// data read access
-    const basegfx::B2DPolygon& getB2DPolygon() const { return maPolygon; }
-    const basegfx::BColor& getRGBColorA() const { return maRGBColorA; }
-    const basegfx::BColor& getRGBColorB() const { return maRGBColorB; }
-    double getDiscreteDashLength() const { return mfDiscreteDashLength; }
-
-    /// compare operator
-    virtual bool operator==(const BasePrimitive2D& rPrimitive) const override;
-
-    /// get range
-    virtual basegfx::B2DRange
-    getB2DRange(const geometry::ViewInformation2D& rViewInformation) const override;
-
-    /// Override standard getDecomposition to be view-dependent here
-    virtual void
-    get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor,
-                       const geometry::ViewInformation2D& rViewInformation) const override;
-
-    /// provide unique ID
-    virtual sal_uInt32 getPrimitive2DID() const override;
-};
-
-/** PolygonStrokePrimitive2D class
-
-    This primitive defines a line with line width, line join, line color
-    and stroke attributes. It will be decomposed dependent on the definition
-    to the needed primitives, e.g. filled PolyPolygons for fat lines.
- */
-class DRAWINGLAYER_DLLPUBLIC PolygonStrokePrimitive2D : public BufferedDecompositionPrimitive2D
-{
-private:
-    /// the line geometry
-    basegfx::B2DPolygon maPolygon;
-
-    /// the line attributes like width, join and color
-    attribute::LineAttribute maLineAttribute;
-
-    /// the line stroking (if used)
-    attribute::StrokeAttribute maStrokeAttribute;
-
-protected:
-    /// local decomposition.
-    virtual void
-    create2DDecomposition(Primitive2DContainer& rContainer,
-                          const geometry::ViewInformation2D& rViewInformation) const override;
-
-public:
-    /// constructor
-    PolygonStrokePrimitive2D(const basegfx::B2DPolygon& rPolygon,
-                             const attribute::LineAttribute& rLineAttribute,
-                             const attribute::StrokeAttribute& rStrokeAttribute);
-
-    /// constructor without stroking
-    PolygonStrokePrimitive2D(const basegfx::B2DPolygon& rPolygon,
-                             const attribute::LineAttribute& rLineAttribute);
-
-    /// data read access
-    const basegfx::B2DPolygon& getB2DPolygon() const { return maPolygon; }
-    const attribute::LineAttribute& getLineAttribute() const { return maLineAttribute; }
-    const attribute::StrokeAttribute& getStrokeAttribute() const { return maStrokeAttribute; }
-
-    /// compare operator
-    virtual bool operator==(const BasePrimitive2D& rPrimitive) const override;
-
-    /// get range
-    virtual basegfx::B2DRange
-    getB2DRange(const geometry::ViewInformation2D& rViewInformation) const override;
-
-    /// provide unique ID
-    virtual sal_uInt32 getPrimitive2DID() const override;
-};
-
-/** PolygonWavePrimitive2D class
-
-    This primitive defines a waveline based on a PolygonStrokePrimitive2D
-    where the wave is defined by wave width and wave length.
- */
-class PolygonWavePrimitive2D final : public PolygonStrokePrimitive2D
-{
-private:
-    /// wave definition
-    double mfWaveWidth;
-    double mfWaveHeight;
-
-    /// local decomposition.
-    virtual void
-    create2DDecomposition(Primitive2DContainer& rContainer,
-                          const geometry::ViewInformation2D& rViewInformation) const override;
-
-public:
-    /// constructor
-    PolygonWavePrimitive2D(const basegfx::B2DPolygon& rPolygon,
-                           const attribute::LineAttribute& rLineAttribute,
-                           const attribute::StrokeAttribute& rStrokeAttribute, double fWaveWidth,
-                           double fWaveHeight);
-
-    /// constructor without stroking
-    PolygonWavePrimitive2D(const basegfx::B2DPolygon& rPolygon,
-                           const attribute::LineAttribute& rLineAttribute, double fWaveWidth,
-                           double fWaveHeight);
-
-    /// data read access
-    double getWaveWidth() const { return mfWaveWidth; }
-    double getWaveHeight() const { return mfWaveHeight; }
-
-    /// compare operator
-    virtual bool operator==(const BasePrimitive2D& rPrimitive) const override;
-
-    /// get range
-    virtual basegfx::B2DRange
-    getB2DRange(const geometry::ViewInformation2D& rViewInformation) const override;
-
-    /// provide unique ID
-    virtual sal_uInt32 getPrimitive2DID() const override;
-};
-
-/** PolygonStrokeArrowPrimitive2D class
-
-    This primitive defines a PolygonStrokePrimitive2D,
-    possibly extended by start and end definitions, which are
-    normally used for arrows.
- */
-class DRAWINGLAYER_DLLPUBLIC PolygonStrokeArrowPrimitive2D final : public PolygonStrokePrimitive2D
-{
-private:
-    /// geometric definitions for line start and end
-    attribute::LineStartEndAttribute maStart;
-    attribute::LineStartEndAttribute maEnd;
-
-    /// local decomposition.
-    virtual void
-    create2DDecomposition(Primitive2DContainer& rContainer,
-                          const geometry::ViewInformation2D& rViewInformation) const override;
-
-public:
-    /// constructor
-    PolygonStrokeArrowPrimitive2D(const basegfx::B2DPolygon& rPolygon,
-                                  const attribute::LineAttribute& rLineAttribute,
-                                  const attribute::StrokeAttribute& rStrokeAttribute,
-                                  const attribute::LineStartEndAttribute& rStart,
-                                  const attribute::LineStartEndAttribute& rEnd);
-
-    /// constructor without stroking
-    PolygonStrokeArrowPrimitive2D(const basegfx::B2DPolygon& rPolygon,
-                                  const attribute::LineAttribute& rLineAttribute,
-                                  const attribute::LineStartEndAttribute& rStart,
-                                  const attribute::LineStartEndAttribute& rEnd);
-
-    /// data read access
-    const attribute::LineStartEndAttribute& getStart() const { return maStart; }
-    const attribute::LineStartEndAttribute& getEnd() const { return maEnd; }
-
-    /// compare operator
-    virtual bool operator==(const BasePrimitive2D& rPrimitive) const override;
-
-    /// get range
-    virtual basegfx::B2DRange
-    getB2DRange(const geometry::ViewInformation2D& rViewInformation) const override;
-
-    /// provide unique ID
-    virtual sal_uInt32 getPrimitive2DID() const override;
-};
-} // end of namespace primitive2d::drawinglayer
+#include <drawinglayer/primitive2d/PolygonStrokePrimitive2D.hxx>
+#include <drawinglayer/primitive2d/PolygonWavePrimitive2D.hxx>
+#include <drawinglayer/primitive2d/PolygonMarkerPrimitive2D.hxx>
+#include <drawinglayer/primitive2d/PolygonHairlinePrimitive2D.hxx>
+#include <drawinglayer/primitive2d/PolygonStrokeArrowPrimitive2D.hxx>
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 5440492ff9f949ee9ed9052e8bab6f5136d78b2a
Author:     Gabor Kelemen <kelemen.gabor2 at nisz.hu>
AuthorDate: Thu Aug 5 22:56:19 2021 +0200
Commit:     László Németh <nemeth at numbertext.org>
CommitDate: Thu Aug 19 13:39:32 2021 +0200

    tdf143726 DOCX: export default TOC Header style with correct name
    
    This seems to have been a typo since it was mapped to the default
    name of the Table of Authorities index's heading in Word
    which is not really supported anyways.
    
    Change-Id: I4cadce18c30c5497f27479fcc251fdf85d859145
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120091
    Tested-by: László Németh <nemeth at numbertext.org>
    Reviewed-by: László Németh <nemeth at numbertext.org>

diff --git a/sw/qa/extras/ooxmlexport/data/Simple-TOC.odt b/sw/qa/extras/ooxmlexport/data/Simple-TOC.odt
new file mode 100644
index 000000000000..475f59e051a9
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/Simple-TOC.odt differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx
index 21609b3a9c8e..d1f0603ec884 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx
@@ -858,6 +858,16 @@ DECLARE_OOXMLEXPORT_EXPORTONLY_TEST(testTdf139549, "tdf139549.docx")
     CPPUNIT_ASSERT_DOUBLES_EQUAL(40.1, aStyleCommandValue.toFloat(), 0.1);
 }
 
+
+DECLARE_OOXMLEXPORT_TEST(testTdf143726, "Simple-TOC.odt")
+{
+    xmlDocUniquePtr pXmlStyles = parseExport("word/styles.xml");
+    CPPUNIT_ASSERT(pXmlStyles);
+    // Without the fix this was "TOA Heading" which belongs to the "Table of Authorities" index in Word
+    // TOC's heading style should be exported as "TOC Heading" as that's the default Word style name
+    assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='ContentsHeading']/w:name", "val", "TOC Heading");
+}
+
 CPPUNIT_PLUGIN_IMPLEMENT();
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/filter/ww8/styles.cxx b/sw/source/filter/ww8/styles.cxx
index 4c8c9bc49555..6f613b40fad6 100644
--- a/sw/source/filter/ww8/styles.cxx
+++ b/sw/source/filter/ww8/styles.cxx
@@ -73,7 +73,7 @@ namespace
             "Endnote Text",
             "Table of Authorities",
             "Macro Text",
-            "TOA Heading",
+            "TOC Heading",
             "List",
             "List 2",
             "List 3",
commit b55db12f79a01ccbd3276f4a291fe20750efbaf3
Author:     Noel Grandin <noel.grandin at collabora.co.uk>
AuthorDate: Thu Aug 19 10:27:00 2021 +0200
Commit:     Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Thu Aug 19 13:09:33 2021 +0200

    use std::optional<OutlinerParaObject> in SwPostItMgr
    
    it is a COW object, no need to allocate separately on heap
    
    Change-Id: I9388d2a850a39a8645071dfb2907a4fe7785ac21
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120703
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>

diff --git a/sw/inc/AnnotationWin.hxx b/sw/inc/AnnotationWin.hxx
index 69335760f4fe..53ae31f83b10 100644
--- a/sw/inc/AnnotationWin.hxx
+++ b/sw/inc/AnnotationWin.hxx
@@ -21,6 +21,7 @@
 #define INCLUDED_SW_INC_ANNOTATIONWIN_HXX
 
 #include <basegfx/range/b2drange.hxx>
+#include <editeng/outlobj.hxx>
 #include <tools/date.hxx>
 #include <tools/time.hxx>
 #include <vcl/InterimItemWindow.hxx>
@@ -80,7 +81,7 @@ class SAL_DLLPUBLIC_RTTI SwAnnotationWin final : public InterimItemWindow
 
         /// Calculate parent postit id of current annotation window
         sal_uInt32 CalcParent();
-        void       InitAnswer(OutlinerParaObject const * pText);
+        void       InitAnswer(OutlinerParaObject const & rText);
 
         bool IsProtected() const;
 
diff --git a/sw/inc/PostItMgr.hxx b/sw/inc/PostItMgr.hxx
index 760fc7f8abe7..a2f0af3b9dea 100644
--- a/sw/inc/PostItMgr.hxx
+++ b/sw/inc/PostItMgr.hxx
@@ -33,6 +33,7 @@
 #include <unotools/configitem.hxx>
 #include <com/sun/star/uno/Any.hxx>
 #include "SidebarWindowsTypes.hxx"
+#include <editeng/outlobj.hxx>
 #include <svl/lstner.hxx>
 #include <vcl/vclptr.hxx>
 
@@ -137,7 +138,7 @@ class SAL_DLLPUBLIC_RTTI SwPostItMgr final : public SfxListener
         bool                            mbReadOnly;
         bool                            mbDeleteNote;
         FieldShadowState                mShadowState;
-        OutlinerParaObject*             mpAnswer;
+        std::optional<OutlinerParaObject> mpAnswer;
         OUString                        maAnswerText;
         bool                            mbIsShowAnchor;
 
@@ -251,8 +252,8 @@ class SAL_DLLPUBLIC_RTTI SwPostItMgr final : public SfxListener
         static Color           GetColorLight(std::size_t aAuthorIndex);
         static Color           GetColorAnchor(std::size_t aAuthorIndex);
 
-        void                RegisterAnswer(OutlinerParaObject* pAnswer) { mpAnswer = pAnswer;}
-        OutlinerParaObject* IsAnswer() {return mpAnswer;}
+        void                RegisterAnswer(OutlinerParaObject* pAnswer) { if (pAnswer) mpAnswer =* pAnswer; else mpAnswer.reset(); }
+        OutlinerParaObject* IsAnswer() { return mpAnswer ? &*mpAnswer : nullptr; }
         void                RegisterAnswerText(const OUString& aAnswerText) { maAnswerText = aAnswerText; }
         const OUString&     GetAnswerText() const { return maAnswerText; }
         void CheckMetaText();
diff --git a/sw/source/uibase/docvw/AnnotationWin.cxx b/sw/source/uibase/docvw/AnnotationWin.cxx
index 01d12affedad..7ecc4889b5fc 100644
--- a/sw/source/uibase/docvw/AnnotationWin.cxx
+++ b/sw/source/uibase/docvw/AnnotationWin.cxx
@@ -397,7 +397,7 @@ sal_uInt32 SwAnnotationWin::CountFollowing()
     return aCount - 1;
 }
 
-void SwAnnotationWin::InitAnswer(OutlinerParaObject const * pText)
+void SwAnnotationWin::InitAnswer(OutlinerParaObject const & rText)
 {
     // If tiled annotations is off in lok case, skip adding additional reply text.
     if (comphelper::LibreOfficeKit::isActive() && !comphelper::LibreOfficeKit::isTiledAnnotations())
@@ -420,8 +420,8 @@ void SwAnnotationWin::InitAnswer(OutlinerParaObject const * pText)
 
     // insert old, selected text or "..."
     // TODO: iterate over all paragraphs, not only first one to find out if it is empty
-    if (!pText->GetTextObject().GetText(0).isEmpty())
-        GetOutlinerView()->GetEditView().InsertText(pText->GetTextObject());
+    if (!rText.GetTextObject().GetText(0).isEmpty())
+        GetOutlinerView()->GetEditView().InsertText(rText.GetTextObject());
     else
         GetOutlinerView()->InsertText("...");
     GetOutlinerView()->InsertText("\"\n");
diff --git a/sw/source/uibase/docvw/AnnotationWin2.cxx b/sw/source/uibase/docvw/AnnotationWin2.cxx
index 71a78d6fae0e..12988e4d3343 100644
--- a/sw/source/uibase/docvw/AnnotationWin2.cxx
+++ b/sw/source/uibase/docvw/AnnotationWin2.cxx
@@ -1072,8 +1072,8 @@ void SwAnnotationWin::ExecuteCommand(sal_uInt16 nSlot)
             // will be created
             if (!mpOutliner->GetEditEngine().GetText().isEmpty())
             {
-                OutlinerParaObject* pPara = new OutlinerParaObject(GetOutlinerView()->GetEditView().CreateTextObject());
-                mrMgr.RegisterAnswer(pPara);
+                OutlinerParaObject aPara(GetOutlinerView()->GetEditView().CreateTextObject());
+                mrMgr.RegisterAnswer(&aPara);
             }
             if (mrMgr.HasActiveSidebarWin())
                 mrMgr.SetActiveSidebarWin(nullptr);
diff --git a/sw/source/uibase/docvw/PostItMgr.cxx b/sw/source/uibase/docvw/PostItMgr.cxx
index fe85da695657..a60b70b6cbef 100644
--- a/sw/source/uibase/docvw/PostItMgr.cxx
+++ b/sw/source/uibase/docvw/PostItMgr.cxx
@@ -200,7 +200,6 @@ SwPostItMgr::SwPostItMgr(SwView* pView)
     , mbLayouting(false)
     , mbReadOnly(mpView->GetDocShell()->IsReadOnly())
     , mbDeleteNote(true)
-    , mpAnswer(nullptr)
     , mbIsShowAnchor( false )
 {
     if(!mpView->GetDrawView() )
@@ -742,9 +741,8 @@ void SwPostItMgr::LayoutPostIts()
                             if (mpAnswer)
                             {
                                 if (static_cast<bool>(pPostIt->CalcParent())) //do we really have another note in front of this one
-                                    pPostIt->InitAnswer(mpAnswer);
-                                delete mpAnswer;
-                                mpAnswer = nullptr;
+                                    pPostIt->InitAnswer(*mpAnswer);
+                                mpAnswer.reset();
                             }
                         }
 
commit 1b06e7e9e8c467de3450077fe8b90be6b7f73e4b
Author:     Katarina Behrens <bubli at bubli.org>
AuthorDate: Wed Aug 18 22:21:41 2021 +0200
Commit:     Katarina Behrens <bubli at bubli.org>
CommitDate: Thu Aug 19 12:27:39 2021 +0200

    tdf#143567: Distinguish bitmap vs. pattern fill style
    
    By the time fill style state change (SID_ATTR_FILL_STYLE) happens,
    the actual bitmap fill may or may not be known. If it is not known,
    it is impossible to tell whether it is a regular bitmap or
    a pattern. That's why this toolbar sometimes incorrectly reports
    bitmap fill instead of pattern one
    
    To solve the problem, we adjust fill style listbox selection only
    later, by the time we know for sure the fill IS a pattern
    
    Change-Id: I0aa95c49601d77dca29ab54ad4c056a76a90e049
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120687
    Tested-by: Jenkins
    Reviewed-by: Katarina Behrens <bubli at bubli.org>

diff --git a/svx/source/tbxctrls/fillctrl.cxx b/svx/source/tbxctrls/fillctrl.cxx
index 3711d7fc4053..6c93563a0b20 100644
--- a/svx/source/tbxctrls/fillctrl.cxx
+++ b/svx/source/tbxctrls/fillctrl.cxx
@@ -142,13 +142,6 @@ void SvxFillToolBoxControl::StateChangedAtToolBoxControl(
                     mpLbFillType->set_sensitive(true);
                     drawing::FillStyle eXFS = mpStyleItem->GetValue();
                     mnLastXFS = sal::static_int_cast< sal_Int32 >(eXFS);
-
-                    if (eXFS == drawing::FillStyle_BITMAP &&
-                        mpBitmapItem && mpBitmapItem->isPattern() )
-                    {
-                        mnLastXFS = sal::static_int_cast<sal_Int32>(PATTERN);
-                    }
-
                     mpLbFillType->set_active(mnLastXFS);
 
                     if(drawing::FillStyle_NONE == eXFS)
@@ -555,6 +548,9 @@ void SvxFillToolBoxControl::Update()
                 }
                 else if (mpBitmapItem && mpBitmapItem->isPattern() && pSh->GetItem(SID_PATTERN_LIST))
                 {
+                    mnLastXFS = sal::static_int_cast<sal_Int32>(PATTERN);
+                    mpLbFillType->set_active(mnLastXFS);
+
                     SvxFillAttrBox::Fill(*mpLbFillAttr, pSh->GetItem(SID_PATTERN_LIST)->GetPatternList());
                     const OUString aString(mpBitmapItem->GetName());
 
commit 97b61ea3297e04e64aab1e1a4ec50202e9f86fff
Author:     Michael Stahl <michael.stahl at allotropia.de>
AuthorDate: Mon Aug 16 11:09:47 2021 +0200
Commit:     Michael Stahl <michael.stahl at allotropia.de>
CommitDate: Thu Aug 19 12:20:57 2021 +0200

    ridljar: check that UnoClassLoader is used for NativeLibraryLoader
    
    The native libraries are local to class loaders, so
    System.load("java_uno.so") will fail with any other class loader.
    
    Change-Id: Ifa3b1b8dfef07b64828943654e28ff1f0fb5a494
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120527
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.stahl at allotropia.de>

diff --git a/ridljar/com/sun/star/lib/util/NativeLibraryLoader.java b/ridljar/com/sun/star/lib/util/NativeLibraryLoader.java
index eb5c6af34e90..d255a71ea5d1 100644
--- a/ridljar/com/sun/star/lib/util/NativeLibraryLoader.java
+++ b/ridljar/com/sun/star/lib/util/NativeLibraryLoader.java
@@ -21,6 +21,7 @@ package com.sun.star.lib.util;
 import java.io.File;
 import java.net.URL;
 import java.net.URLClassLoader;
+import com.sun.star.lib.unoloader.UnoClassLoader;
 
 /**
  * Helper functions to locate and load native files.
@@ -35,6 +36,14 @@ import java.net.URLClassLoader;
  * algorithm.</p>
  */
 public final class NativeLibraryLoader {
+    static {
+        // if it's some other class loader, then resolving the symbol
+        // Java_com_sun_star_bridges_jni_1uno_JNI_1proxy_dispatch_1call in
+        // java_uno will not work and result in UnsatisfiedLinkError
+        if (!(NativeLibraryLoader.class.getClassLoader() instanceof com.sun.star.lib.unoloader.UnoClassLoader)) {
+            System.err.println("warning: com.sun.star.lib.util.NativeLibraryLoader must be loaded by com.sun.star.lib.unoloader.UnoClassLoader for java_uno bridge to work (not a problem if this is using Java remote bridge or unit test)");
+        }
+    }
     /**
      * Load a system library, using a given class loader to locate the library.
      *
commit 71ebb55b4e888c8d1642d52742fc6d0d11ba3b9e
Author:     Michael Stahl <michael.stahl at allotropia.de>
AuthorDate: Tue Aug 17 17:15:18 2021 +0200
Commit:     Michael Stahl <michael.stahl at allotropia.de>
CommitDate: Thu Aug 19 12:13:32 2021 +0200

    toolkit: fix deadlock in MutableTreeNode
    
    Broadcasting may call back into this, from
    TreeControlPeer::updateNode().
    
    Release maMutex before broadcasting to fix it.
    
    (regression f7ee6baa1b14410fa79aac5dd9d6877df44a823a)
    
    Change-Id: I91a8e043aaed02422601e5d4d5253379abab5d7b
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120616
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.stahl at allotropia.de>

diff --git a/toolkit/source/controls/tree/treedatamodel.cxx b/toolkit/source/controls/tree/treedatamodel.cxx
index b482d854349c..935fc39d46ff 100644
--- a/toolkit/source/controls/tree/treedatamodel.cxx
+++ b/toolkit/source/controls/tree/treedatamodel.cxx
@@ -85,7 +85,8 @@ public:
 
     void setParent( MutableTreeNode* pParent );
     void broadcast_changes();
-    void broadcast_changes(const Reference< XTreeNode >& xNode, bool bNew);
+    void broadcast_changes(std::unique_lock<std::mutex> & rLock,
+            const Reference< XTreeNode >& xNode, bool bNew);
 
     // XMutableTreeNode
     virtual css::uno::Any SAL_CALL getDataValue() override;
@@ -273,11 +274,14 @@ void MutableTreeNode::broadcast_changes()
     }
 }
 
-void MutableTreeNode::broadcast_changes(const Reference< XTreeNode >& xNode, bool bNew)
+void MutableTreeNode::broadcast_changes(std::unique_lock<std::mutex> & rLock,
+        const Reference< XTreeNode >& xNode, bool const bNew)
 {
-    if( mxModel.is() )
+    auto const xModel(mxModel);
+    rLock.unlock();
+    if (xModel.is())
     {
-        mxModel->broadcast( bNew ? nodes_inserted : nodes_removed, this, xNode );
+        xModel->broadcast(bNew ? nodes_inserted : nodes_removed, this, xNode);
     }
 }
 
@@ -295,7 +299,7 @@ void SAL_CALL MutableTreeNode::setDataValue( const Any& _datavalue )
 
 void SAL_CALL MutableTreeNode::appendChild( const Reference< XMutableTreeNode >& xChildNode )
 {
-    std::scoped_lock aGuard( maMutex );
+    std::unique_lock aGuard( maMutex );
     rtl::Reference< MutableTreeNode > xImpl( dynamic_cast< MutableTreeNode* >( xChildNode.get() ) );
 
     if( !xImpl.is() || xImpl->mbIsInserted || (this == xImpl.get()) )
@@ -305,12 +309,12 @@ void SAL_CALL MutableTreeNode::appendChild( const Reference< XMutableTreeNode >&
     xImpl->setParent(this);
     xImpl->mbIsInserted = true;
 
-    broadcast_changes( xChildNode, true );
+    broadcast_changes(aGuard, xChildNode, true);
 }
 
 void SAL_CALL MutableTreeNode::insertChildByIndex( sal_Int32 nChildIndex, const Reference< XMutableTreeNode >& xChildNode )
 {
-    std::scoped_lock aGuard( maMutex );
+    std::unique_lock aGuard( maMutex );
 
     if( (nChildIndex < 0) || (nChildIndex > static_cast<sal_Int32>(maChildren.size())) )
         throw IndexOutOfBoundsException();
@@ -327,12 +331,12 @@ void SAL_CALL MutableTreeNode::insertChildByIndex( sal_Int32 nChildIndex, const
     maChildren.insert( aIter, xImpl );
     xImpl->setParent( this );
 
-    broadcast_changes( xChildNode, true );
+    broadcast_changes(aGuard, xChildNode, true);
 }
 
 void SAL_CALL MutableTreeNode::removeChildByIndex( sal_Int32 nChildIndex )
 {
-    std::scoped_lock aGuard( maMutex );
+    std::unique_lock aGuard( maMutex );
 
     if( (nChildIndex < 0) || (nChildIndex >= static_cast<sal_Int32>(maChildren.size())) )
         throw IndexOutOfBoundsException();
@@ -351,7 +355,7 @@ void SAL_CALL MutableTreeNode::removeChildByIndex( sal_Int32 nChildIndex )
     xImpl->setParent(nullptr);
     xImpl->mbIsInserted = false;
 
-    broadcast_changes( xImpl, false );
+    broadcast_changes(aGuard, xImpl, false);
 }
 
 void SAL_CALL MutableTreeNode::setHasChildrenOnDemand( sal_Bool bChildrenOnDemand )
commit 074790ad6f4e02e7aed3f9c954f0b4005b40fa21
Author:     Noel Grandin <noel.grandin at collabora.co.uk>
AuthorDate: Thu Aug 19 11:23:13 2021 +0200
Commit:     Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Thu Aug 19 12:12:06 2021 +0200

    remove some locking from UriReference
    
    we write these fields in the constructor and then never modify them
    again, so safe to skip locking
    
    Change-Id: I5cb5ea085ee8c2f6e4ce6417c2648265aa5a06d1
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120704
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>

diff --git a/stoc/source/uriproc/UriReference.cxx b/stoc/source/uriproc/UriReference.cxx
index b5962ea74342..de39330579e2 100644
--- a/stoc/source/uriproc/UriReference.cxx
+++ b/stoc/source/uriproc/UriReference.cxx
@@ -71,41 +71,34 @@ bool UriReference::isAbsolute() const {
 
 OUString UriReference::getSchemeSpecificPart()
 {
-    std::lock_guard g(m_mutex);
     OUStringBuffer buf;
     appendSchemeSpecificPart(buf);
     return buf.makeStringAndClear();
 }
 
 bool UriReference::isHierarchical() {
-    std::lock_guard g(m_mutex);
     return m_scheme.isEmpty() || m_hasAuthority || m_path.startsWith("/");
 }
 
 bool UriReference::hasAuthority() {
-    std::lock_guard g(m_mutex);
     return m_hasAuthority;
 }
 
-OUString UriReference::getAuthority() {
-    std::lock_guard g(m_mutex);
+const OUString& UriReference::getAuthority() {
     return m_authority;
 }
 
-OUString UriReference::getPath() {
-    std::lock_guard g(m_mutex);
+const OUString& UriReference::getPath() {
     return m_path;
 }
 
 bool UriReference::hasRelativePath() {
-    std::lock_guard g(m_mutex);
     return !m_hasAuthority
         && (m_path.isEmpty() || m_path[0] != '/');
 }
 
 sal_Int32 UriReference::getPathSegmentCount()
 {
-    std::lock_guard g(m_mutex);
     if (m_path.isEmpty()) {
         return 0;
     } else {
@@ -123,7 +116,6 @@ sal_Int32 UriReference::getPathSegmentCount()
 
 OUString UriReference::getPathSegment(sal_Int32 index)
 {
-    std::lock_guard g(m_mutex);
     if (!m_path.isEmpty() && index >= 0) {
         for (sal_Int32 i = m_path[0] == '/' ? 1 : 0;; ++i) {
             if (index-- == 0) {
@@ -140,12 +132,10 @@ OUString UriReference::getPathSegment(sal_Int32 index)
 }
 
 bool UriReference::hasQuery() {
-    std::lock_guard g(m_mutex);
     return m_hasQuery;
 }
 
-OUString UriReference::getQuery() {
-    std::lock_guard g(m_mutex);
+const OUString& UriReference::getQuery() {
     return m_query;
 }
 
diff --git a/stoc/source/uriproc/UriReference.hxx b/stoc/source/uriproc/UriReference.hxx
index 90a095873364..9c137e9daa42 100644
--- a/stoc/source/uriproc/UriReference.hxx
+++ b/stoc/source/uriproc/UriReference.hxx
@@ -55,10 +55,10 @@ public:
     bool hasAuthority();
 
     /// @throws css::uno::RuntimeException
-    OUString getAuthority();
+    const OUString& getAuthority();
 
     /// @throws css::uno::RuntimeException
-    OUString getPath();
+    const OUString& getPath();
 
     /// @throws css::uno::RuntimeException
     bool hasRelativePath();
@@ -73,7 +73,7 @@ public:
     bool hasQuery();
 
     /// @throws css::uno::RuntimeException
-    OUString getQuery();
+    const OUString& getQuery();
 
     /// @throws css::uno::RuntimeException
     bool hasFragment();
commit 60485d591882954bbec717bfc0f4ffce8c9e9d5e
Author:     Noel Grandin <noel at peralex.com>
AuthorDate: Wed Aug 18 22:05:55 2021 +0200
Commit:     Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Thu Aug 19 12:02:48 2021 +0200

    reduce skia re-alloc costs (tdf#105575)
    
    by reserving space before building the SkPath
    
    Change-Id: Ic01f614bf574fd3252d379ed38e3039cb0c56b18
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120701
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>

diff --git a/vcl/skia/gdiimpl.cxx b/vcl/skia/gdiimpl.cxx
index 858bdfe6895a..fa1e43f0533c 100644
--- a/vcl/skia/gdiimpl.cxx
+++ b/vcl/skia/gdiimpl.cxx
@@ -146,6 +146,11 @@ void addPolyPolygonToPath(const basegfx::B2DPolyPolygon& rPolyPolygon, SkPath& r
     if (nPolygonCount == 0)
         return;
 
+    sal_uInt32 nPointCount = 0;
+    for (const auto& rPolygon : rPolyPolygon)
+        nPointCount += rPolygon.count();
+    rPath.incReserve(nPointCount * 2);
+
     for (const auto& rPolygon : rPolyPolygon)
     {
         addPolygonToPath(rPolygon, rPath, hasOnlyOrthogonal);
@@ -555,6 +560,7 @@ void SkiaSalGraphicsImpl::setCanvasClipRegion(SkCanvas* canvas, const vcl::Regio
     // in case a polygon is used leads to off-by-one errors such as tdf#133208.
     RectangleVector rectangles;
     region.GetRegionRectangles(rectangles);
+    path.incReserve(rectangles.size() + 1);
     for (const tools::Rectangle& rectangle : rectangles)
         path.addRect(SkRect::MakeXYWH(rectangle.Left(), rectangle.Top(), rectangle.GetWidth(),
                                       rectangle.GetHeight()));
@@ -1137,9 +1143,14 @@ bool SkiaSalGraphicsImpl::drawPolyLine(const basegfx::B2DHomMatrix& rObjectToDev
     if (eLineJoin != basegfx::B2DLineJoin::NONE || fLineWidth <= 1.0)
     {
         SkPath aPath;
+        sal_uInt32 nPointCount = 0;
+        for (const auto& rPolygon : std::as_const(aPolyPolygonLine))
+            nPointCount += (rPolygon.count() + 1);
+        aPath.incReserve(nPointCount + 2);
+
         aPath.setFillType(SkPathFillType::kEvenOdd);
-        for (sal_uInt32 a(0); a < aPolyPolygonLine.count(); a++)
-            addPolygonToPath(aPolyPolygonLine.getB2DPolygon(a), aPath);
+        for (const auto& rPolygon : std::as_const(aPolyPolygonLine))
+            addPolygonToPath(rPolygon, aPath);
         aPath.offset(toSkX(0) + posFix, toSkY(0) + posFix, nullptr);
         addUpdateRegion(aPath.getBounds());
         getDrawCanvas()->drawPath(aPath, aPaint);
@@ -1440,6 +1451,7 @@ void SkiaSalGraphicsImpl::invert(basegfx::B2DPolygon const& rPoly, SalInvert eFl
         rasterHack = true;
 #endif
     SkPath aPath;
+    aPath.incReserve(rPoly.count());
     addPolygonToPath(rPoly, aPath);
     aPath.setFillType(SkPathFillType::kEvenOdd);
     addUpdateRegion(aPath.getBounds());
commit 966d043b631fd1e850d0eb62d657fbca8f62c033
Author:     Bayram Çiçek <mail at bayramcicek.com.tr>
AuthorDate: Mon Aug 16 00:31:15 2021 +0300
Commit:     Muhammet Kara <muhammet.kara at collabora.com>
CommitDate: Thu Aug 19 12:01:51 2021 +0200

    tdf#143890: Show preview of diagonal borders / Calc
    
    - in "Properties sidebar > Cell Appearance",
    Calc shows preview of the selected cell borders.
    (preview is at the bottom of "Background" text)
    
    - this feature doesn't work for diagonal borders.
    
    - diagonal borders preview is now shown with
    this patch.
    
    Change-Id: I9d98b045ccef5e8469cc38f08e5f14c3199d027c
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120519
    Tested-by: Jenkins
    Reviewed-by: Muhammet Kara <muhammet.kara at collabora.com>

diff --git a/sc/source/ui/sidebar/CellAppearancePropertyPanel.cxx b/sc/source/ui/sidebar/CellAppearancePropertyPanel.cxx
index 188a638e7315..75cb52209942 100644
--- a/sc/source/ui/sidebar/CellAppearancePropertyPanel.cxx
+++ b/sc/source/ui/sidebar/CellAppearancePropertyPanel.cxx
@@ -258,9 +258,9 @@ void CellAppearancePropertyPanel::NotifyItemUpdate(
                     mbBottom = true;
 
                 if(!AllSettings::GetLayoutRTL())
-                    UpdateCellBorder(mbTop, mbBottom, mbLeft, mbRight, mbVer, mbHor);
+                    UpdateCellBorder(mbTop, mbBottom, mbLeft, mbRight, mbVer, mbHor, mbDiagTLBR, mbDiagBLTR);
                 else
-                    UpdateCellBorder(mbTop, mbBottom, mbRight, mbLeft, mbVer, mbHor);
+                    UpdateCellBorder(mbTop, mbBottom, mbRight, mbLeft, mbVer, mbHor, mbDiagTLBR, mbDiagBLTR);
 
                 if(mbLeft || mbRight || mbTop || mbBottom)
                     mbOuterBorder = true;
@@ -301,9 +301,9 @@ void CellAppearancePropertyPanel::NotifyItemUpdate(
                     bBottom = true;
 
                 if(!AllSettings::GetLayoutRTL())
-                    UpdateCellBorder(bTop, bBottom, bLeft, bRight, mbVer, mbHor);
+                    UpdateCellBorder(bTop, bBottom, bLeft, bRight, mbVer, mbHor, mbDiagTLBR, mbDiagBLTR);
                 else
-                    UpdateCellBorder(bTop, bBottom, bRight, bLeft, mbVer, mbHor);
+                    UpdateCellBorder(bTop, bBottom, bRight, bLeft, mbVer, mbHor, mbDiagTLBR, mbDiagBLTR);
 
                 if(mbVer || mbHor || bLeft || bRight || bTop || bBottom)
                     mbInnerBorder = true;
@@ -337,6 +337,7 @@ void CellAppearancePropertyPanel::NotifyItemUpdate(
                 }
             }
         }
+        UpdateCellBorder(mbTop, mbBottom, mbLeft, mbRight, mbVer, mbHor, mbDiagTLBR, mbDiagBLTR);
         UpdateControlState();
         break;
     case SID_ATTR_BORDER_DIAG_BLTR:
@@ -363,6 +364,7 @@ void CellAppearancePropertyPanel::NotifyItemUpdate(
                 }
             }
         }
+        UpdateCellBorder(mbTop, mbBottom, mbLeft, mbRight, mbVer, mbHor, mbDiagTLBR, mbDiagBLTR);
         UpdateControlState();
         break;
     }
@@ -464,7 +466,8 @@ void CellAppearancePropertyPanel::UpdateControlState()
     }
 }
 
-void CellAppearancePropertyPanel::UpdateCellBorder(bool bTop, bool bBot, bool bLeft, bool bRight, bool bVer, bool bHor)
+void CellAppearancePropertyPanel::UpdateCellBorder(bool bTop, bool bBot, bool bLeft, bool bRight,
+                                                   bool bVer, bool bHor, bool bTLBR, bool bBLTR)
 {
     const Size aBmpSize = maIMGCellBorder.GetBitmapEx().GetSizePixel();
 
@@ -488,6 +491,10 @@ void CellAppearancePropertyPanel::UpdateCellBorder(bool bTop, bool bBot, bool bL
             pVirDev->DrawLine( aVT,aVB );
         if(bHor)
             pVirDev->DrawLine( aHL,aHR );
+        if(bTLBR)
+            pVirDev->DrawLine( aTL,aBR );
+        if(bBLTR)
+            pVirDev->DrawLine( aBL,aTR );
         mxTBCellBorder->set_item_image(SETBORDERSTYLE, pVirDev);
     }
     else
diff --git a/sc/source/ui/sidebar/CellAppearancePropertyPanel.hxx b/sc/source/ui/sidebar/CellAppearancePropertyPanel.hxx
index d695df4ceb0a..412cd37e107a 100644
--- a/sc/source/ui/sidebar/CellAppearancePropertyPanel.hxx
+++ b/sc/source/ui/sidebar/CellAppearancePropertyPanel.hxx
@@ -139,7 +139,7 @@ private:
     void Initialize();
     void SetStyleIcon();
     void UpdateControlState();
-    void UpdateCellBorder(bool bTop, bool bBot, bool bLeft, bool bRight, bool bVer, bool bHor);
+    void UpdateCellBorder(bool bTop, bool bBot, bool bLeft, bool bRight, bool bVer, bool bHor, bool bTLBR, bool bBLTR);
 };
 
 } // end of namespace ::sc::sidebar
commit 55c4bfc5717c6f915e8760eec95be76813d5fce8
Author:     Noel Grandin <noel.grandin at collabora.co.uk>
AuthorDate: Thu Aug 19 10:00:01 2021 +0200
Commit:     Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Thu Aug 19 11:53:13 2021 +0200

    use std::optional<OutlinerParaObject> in SdrUndoAttrObj
    
    it is a COW object, no need to allocate separately on heap
    
    Change-Id: Ibfecb263eedb6ef5eca8122e80a564cb1e872db1
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120699
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>

diff --git a/include/svx/svdundo.hxx b/include/svx/svdundo.hxx
index ccfa69476bba..0064aa85c6c5 100644
--- a/include/svx/svdundo.hxx
+++ b/include/svx/svdundo.hxx
@@ -154,10 +154,10 @@ protected:
     bool bHaveToTakeRedoSet;
 
     // When assigning TextItems to a drawing object with text:
-    std::unique_ptr<OutlinerParaObject> pTextUndo;
+    std::optional<OutlinerParaObject> pTextUndo;
     // #i8508#
     // The text rescue mechanism needs also to be implemented for redo actions.
-    std::unique_ptr<OutlinerParaObject> pTextRedo;
+    std::optional<OutlinerParaObject> pTextRedo;
 
     // If we have a group object:
     std::unique_ptr<SdrUndoGroup> pUndoGroup;
diff --git a/svx/source/svdraw/svdundo.cxx b/svx/source/svdraw/svdundo.cxx
index 2eea31d23237..51f35d8e80c7 100644
--- a/svx/source/svdraw/svdundo.cxx
+++ b/svx/source/svdraw/svdundo.cxx
@@ -279,7 +279,7 @@ SdrUndoAttrObj::SdrUndoAttrObj(SdrObject& rNewObj, bool bStyleSheet1, bool bSave
     {
         auto p = pObj->GetOutlinerParaObject();
         if(p)
-            pTextUndo.reset( new OutlinerParaObject(*p) );
+            pTextUndo = *p;
     }
 }
 
@@ -316,7 +316,7 @@ void SdrUndoAttrObj::Undo()
                 // #i8508#
                 auto p = pObj->GetOutlinerParaObject();
                 if(p)
-                    pTextRedo.reset( new OutlinerParaObject(*p) );
+                    pTextRedo = *p;
             }
         }
 
diff --git a/svx/source/table/tableundo.cxx b/svx/source/table/tableundo.cxx
index 2840562a4acf..66641469dd09 100644
--- a/svx/source/table/tableundo.cxx
+++ b/svx/source/table/tableundo.cxx
@@ -61,10 +61,8 @@ void CellUndo::dispose()
     maUndoData.mpProperties = nullptr;
     delete maRedoData.mpProperties;
     maRedoData.mpProperties = nullptr;
-    delete maUndoData.mpOutlinerParaObject;
-    maUndoData.mpOutlinerParaObject = nullptr;
-    delete maRedoData.mpOutlinerParaObject;
-    maRedoData.mpOutlinerParaObject = nullptr;
+    maUndoData.mpOutlinerParaObject.reset();
+    maRedoData.mpOutlinerParaObject.reset();
 }
 
 void CellUndo::ObjectInDestruction(const SdrObject& )
@@ -136,9 +134,9 @@ void CellUndo::getDataFromCell( Data& rData )
         rData.mpProperties = mxCell->CloneProperties( *mxObjRef, *mxCell);
 
     if( mxCell->GetOutlinerParaObject() )
-        rData.mpOutlinerParaObject = new OutlinerParaObject(*mxCell->GetOutlinerParaObject());
+        rData.mpOutlinerParaObject = *mxCell->GetOutlinerParaObject();
     else
-        rData.mpOutlinerParaObject =  nullptr;
+        rData.mpOutlinerParaObject.reset();
 
     rData.msFormula = mxCell->msFormula;
     rData.mfValue = mxCell->mfValue;
diff --git a/svx/source/table/tableundo.hxx b/svx/source/table/tableundo.hxx
index 861251963658..822f5ec642fa 100644
--- a/svx/source/table/tableundo.hxx
+++ b/svx/source/table/tableundo.hxx
@@ -55,7 +55,7 @@ private:
     struct Data
     {
         sdr::properties::TextProperties* mpProperties;
-        OutlinerParaObject* mpOutlinerParaObject;
+        std::optional<OutlinerParaObject> mpOutlinerParaObject;
 
         OUString        msFormula;
         double          mfValue;
@@ -66,7 +66,6 @@ private:
 
         Data()
             : mpProperties(nullptr)
-            , mpOutlinerParaObject(nullptr)
             , mfValue(0)
             , mnError(0)
             , mbMerged(false)
commit e545598e738407019419a4c0fc252314d8f434d4
Author:     Rafael Lima <rafael.palma.lima at gmail.com>
AuthorDate: Thu Aug 19 10:23:38 2021 +0200
Commit:     Gerrit Code Review <gerrit at gerrit.libreoffice.org>
CommitDate: Thu Aug 19 10:23:38 2021 +0200

    Update git submodules
    
    * Update helpcontent2 from branch 'master'
      to e0504d8b59b76437009203f68877a07fb9951cde
      - tdf#73359 update information about image/frame alignment
    
        Change-Id: Iecca0467229b019c9dd35589375ba269e2dcb713
        Reviewed-on: https://gerrit.libreoffice.org/c/help/+/120585
        Tested-by: Jenkins
        Reviewed-by: Olivier Hallot <olivier.hallot at libreoffice.org>

diff --git a/helpcontent2 b/helpcontent2
index a50cd071131a..e0504d8b59b7 160000
--- a/helpcontent2
+++ b/helpcontent2
@@ -1 +1 @@
-Subproject commit a50cd071131aaf106c24c9d3b58cb0b90e019fcb
+Subproject commit e0504d8b59b76437009203f68877a07fb9951cde
commit ee3171adb24a3d720466fa43bec869910333f892
Author:     László Németh <nemeth at numbertext.org>
AuthorDate: Wed Aug 18 13:50:37 2021 +0200
Commit:     László Németh <nemeth at numbertext.org>
CommitDate: Thu Aug 19 10:21:35 2021 +0200

    tdf#143918 sw: fix reject of multiple changes
    
    Reuse "extra data" (i.e. tracked direct character
    formatting) of the previous redline on the formatted
    text range to track all character formatting changes,
    i.e. the new and the previous ones, too. E.g. modified
    text size and color of the word are rejectable now,
    not only the last one (e.g. text color) of the multiple
    formatting changes.
    
    Follow-up to commit 0115a77eb84afb0d820d8e23f45e49b30b82a8d3
    "tdf#50447 sw: track changes of character formatting".
    
    Change-Id: I6a82603ecce9885cd06bc27bedbadaac72f97240
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120668
    Tested-by: László Németh <nemeth at numbertext.org>
    Reviewed-by: László Németh <nemeth at numbertext.org>

diff --git a/sw/qa/extras/uiwriter/uiwriter2.cxx b/sw/qa/extras/uiwriter/uiwriter2.cxx
index 429501de75c8..a38fc9fb8742 100644
--- a/sw/qa/extras/uiwriter/uiwriter2.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter2.cxx
@@ -2847,6 +2847,51 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf50447)
     }
 }
 
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf143918)
+{
+    SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf126206.docx");
+
+    SwWrtShell* const pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+
+    // bold text
+    auto xText = getParagraph(1)->getText();
+    CPPUNIT_ASSERT(xText.is());
+    {
+        auto xCursor(xText->createTextCursorByRange(getRun(getParagraph(1), 1)));
+        CPPUNIT_ASSERT(xCursor.is());
+        CPPUNIT_ASSERT_EQUAL(OUString("Lorem "), xCursor->getString());
+        CPPUNIT_ASSERT_EQUAL(awt::FontWeight::BOLD, getProperty<float>(xCursor, "CharWeight"));
+    }
+
+    // remove bold formatting with change tracking and after that, apply underline, too
+    pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/true, 6, /*bBasicCall=*/false);
+    dispatchCommand(mxComponent, ".uno:Bold", {});
+    dispatchCommand(mxComponent, ".uno:Underline", {});
+
+    xText = getParagraph(1)->getText();
+    CPPUNIT_ASSERT(xText.is());
+    {
+        auto xCursor(xText->createTextCursorByRange(getRun(getParagraph(1), 2)));
+        CPPUNIT_ASSERT(xCursor.is());
+        CPPUNIT_ASSERT_EQUAL(OUString("Lorem "), xCursor->getString());
+        CPPUNIT_ASSERT_EQUAL(awt::FontWeight::NORMAL, getProperty<float>(xCursor, "CharWeight"));
+    }
+
+    // reject tracked changes
+    dispatchCommand(mxComponent, ".uno:RejectAllTrackedChanges", {});
+
+    // bold text again
+    xText = getParagraph(1)->getText();
+    CPPUNIT_ASSERT(xText.is());
+    {
+        auto xCursor(xText->createTextCursorByRange(getRun(getParagraph(1), 1)));
+        CPPUNIT_ASSERT(xCursor.is());
+        CPPUNIT_ASSERT_EQUAL(OUString("Lorem "), xCursor->getString());
+        // This was NORMAL (only underlining was removed)
+        CPPUNIT_ASSERT_EQUAL(awt::FontWeight::BOLD, getProperty<float>(xCursor, "CharWeight"));
+    }
+}
+
 CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf101873)
 {
     SwDoc* pDoc = createSwDoc();
diff --git a/sw/source/core/doc/DocumentContentOperationsManager.cxx b/sw/source/core/doc/DocumentContentOperationsManager.cxx
index a3e13851130b..29e9e372804d 100644
--- a/sw/source/core/doc/DocumentContentOperationsManager.cxx
+++ b/sw/source/core/doc/DocumentContentOperationsManager.cxx
@@ -1645,11 +1645,43 @@ namespace //local functions originally from docfmt.cxx
         }
 
         SwRangeRedline * pRedline = nullptr;
+        SwRedlineExtraData_FormatColl* pExtra = nullptr;
         if( rDoc.getIDocumentRedlineAccess().IsRedlineOn() && pCharSet && pCharSet->Count() )
         {
             if( pUndo )
                 pUndo->SaveRedlineData( rRg, false );
 
+            // check existing redline on the same range, and use its extra data, if it exists
+            SwRedlineTable::size_type nRedlPos = rDoc.getIDocumentRedlineAccess().GetRedlinePos(
+                    rRg.Start()->nNode.GetNode(), RedlineType::Format );
+            if( SwRedlineTable::npos != nRedlPos )
+            {
+                const SwPosition *pRStt, *pREnd;
+                do {
+                    SwRangeRedline* pTmp = rDoc.getIDocumentRedlineAccess().GetRedlineTable()[ nRedlPos ];
+                    pRStt = pTmp->Start();
+                    pREnd = pTmp->End();
+                    SwComparePosition eCompare = ComparePosition( *rRg.Start(), *rRg.End(), *pRStt, *pREnd );
+                    if ( eCompare == SwComparePosition::Inside || eCompare == SwComparePosition::Equal )
+                    {
+                        if (pTmp->GetExtraData())
+                        {
+                            const SwRedlineExtraData* pExtraData = pTmp->GetExtraData();
+                            const SwRedlineExtraData_FormatColl* pFormattingChanges =
+                                dynamic_cast<const SwRedlineExtraData_FormatColl*>(pExtraData);
+                            // Check if the extra data is of type 'formatting changes'
+                            if (pFormattingChanges)
+                            {
+                                // Get the item set that holds all the changes properties
+                                const SfxItemSet *pChangesSet = pFormattingChanges->GetItemSet();
+                                pExtra = new SwRedlineExtraData_FormatColl( "", USHRT_MAX, pChangesSet );
+                                break;
+                            }
+                        }
+                    }
+                } while( pRStt <= rRg.Start() && ++nRedlPos < rDoc.getIDocumentRedlineAccess().GetRedlineTable().size());
+            }
+
             pRedline = new SwRangeRedline( RedlineType::Format, rRg );
             auto const result(rDoc.getIDocumentRedlineAccess().AppendRedline( pRedline, true));
             if (IDocumentRedlineAccess::AppendResult::IGNORED == result)
@@ -1679,20 +1711,24 @@ namespace //local functions originally from docfmt.cxx
                     // store original text attributes to reject formatting change
                     if (pRedline)
                     {
-                        // Apply the first character's attributes to the ReplaceText
-                        SfxItemSet aSet( rDoc.GetAttrPool(),
-                                    svl::Items<RES_CHRATR_BEGIN,     RES_TXTATR_WITHEND_END - 1,
-                                    RES_UNKNOWNATR_BEGIN, RES_UNKNOWNATR_END-1> );
-                        pNode->GetTextNode()->GetParaAttr( aSet, pStt->nContent.GetIndex() + 1, aCntEnd.GetIndex() );
-
-                        aSet.ClearItem( RES_TXTATR_REFMARK );
-                        aSet.ClearItem( RES_TXTATR_TOXMARK );
-                        aSet.ClearItem( RES_TXTATR_CJK_RUBY );
-                        aSet.ClearItem( RES_TXTATR_INETFMT );
-                        aSet.ClearItem( RES_TXTATR_META );
-                        aSet.ClearItem( RES_TXTATR_METAFIELD );
-
-                        auto pExtra = new SwRedlineExtraData_FormatColl( "", USHRT_MAX, &aSet );
+                        // no existing format redline in the range
+                        if (!pExtra)
+                        {
+                            // Apply the first character's attributes to the ReplaceText
+                            SfxItemSet aSet( rDoc.GetAttrPool(),
+                                        svl::Items<RES_CHRATR_BEGIN,     RES_TXTATR_WITHEND_END - 1,
+                                        RES_UNKNOWNATR_BEGIN, RES_UNKNOWNATR_END-1> );
+                            pNode->GetTextNode()->GetParaAttr( aSet, pStt->nContent.GetIndex() + 1, aCntEnd.GetIndex() );
+
+                            aSet.ClearItem( RES_TXTATR_REFMARK );
+                            aSet.ClearItem( RES_TXTATR_TOXMARK );
+                            aSet.ClearItem( RES_TXTATR_CJK_RUBY );
+                            aSet.ClearItem( RES_TXTATR_INETFMT );
+                            aSet.ClearItem( RES_TXTATR_META );
+                            aSet.ClearItem( RES_TXTATR_METAFIELD );
+                            pExtra = new SwRedlineExtraData_FormatColl( "", USHRT_MAX, &aSet );
+                        }
+
                         if ( pExtra )
                         {
                             std::unique_ptr<SwRedlineExtraData_FormatColl> xRedlineExtraData;
commit 68bbc75dfeb7c910de7e3d40e840c9959d6875c0
Author:     Noel Grandin <noel.grandin at collabora.co.uk>
AuthorDate: Wed Aug 18 13:18:56 2021 +0200
Commit:     Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Thu Aug 19 10:18:21 2021 +0200

    reduce visibility of some symbols
    
    Change-Id: I16b6be2217f56e5961e1352201a8ee4e2b033e97
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120658
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>

diff --git a/bin/find-can-be-private-symbols.classes.results b/bin/find-can-be-private-symbols.classes.results
index d8cb7c7c4152..b831d7ffbfbe 100644
--- a/bin/find-can-be-private-symbols.classes.results
+++ b/bin/find-can-be-private-symbols.classes.results
@@ -13,16 +13,12 @@ BitmapSimpleColorQuantizationFilter
 BitmapSmoothenFilter
 BitmapSobelGreyFilter
 BitmapSolarizeFilter
-BubbleWindow
 BuilderUtils
-CommandListBox
-CommandPopupHandler
 ConditionEditDropTarget
 CurrencyFormatter
 DdeGetPutItem
 DdeLink
 DdeService
-DdeTopic
 DevelopmentToolDockingWindow
 E3dCompoundObject
 EditUndo
@@ -32,7 +28,6 @@ FontSelectPattern
 FontSubsetInfo
 GalleryBinaryStorageLocations
 GalleryStorageLocations
-GenPspGfxBackend
 GrBackendFormat
 GrBackendRenderTarget
 GrBackendSurfaceMutableState
@@ -71,10 +66,16 @@ SalInfoPrinter
 SalPrinter
 SalSystem
 SbClassModuleObject
+ScChart2DataProvider
 ScFormatEntry
+ScMultiBlockUndo
 ScPaintHint
 ScPreviewShell
+ScRefUndoData
 ScRefreshTimer
+ScSimpleUndo
+ScUndoCut
+ScUndoPaste
 SdAbstractDialogFactory
 SdOptionsItem
 SdOptionsLayout
@@ -117,20 +118,29 @@ SfxStyleSheetModifiedHint
 SfxViewFrameItem
 SfxVisibilityItem
 SpinListenerMultiplexer
+SvtCompatibilityEntry
 SvxPrintItem
 SvxRsidItem
 SvxShowText
 SvxTPage
 SwAnchoredObject
 SwAuthenticator
+SwAutoCorrect
+SwBaseShell
 SwColExample
 SwConnectionListener
 SwContrastGrf
+SwDocFac
 SwDocShell::LockAllViewsGuard_Impl
 SwDrawFrameFormat
 SwDrawModeGrf
+SwDrawTextInfo
+SwEditWin
+SwEnvItem
 SwExtraRedline
+SwExtraRedlineTable
 SwFltRedline
+SwFlyFrame
 SwFormatEditInReadonly
 SwFormatEndAtTextEnd
 SwFormatFollowTextFlow
@@ -138,22 +148,38 @@ SwFormatFootnoteAtTextEnd
 SwFormatLayoutSplit
 SwFormatNoBalancedColumns
 SwFormatRowSplit
+SwFrame
 SwGammaGrf
+SwHHCWrapper
+SwHTMLWriter
 SwHeaderAndFooterEatSpacingItem
+SwHyphWrapper
 SwLayoutFrame
 SwLuminanceGrf
 SwMirrorGrf
 SwNumRuleItem
 SwPagePreview
+SwReader
+SwReaderWriter
+SwRect
 SwRedlineExtraData
 SwRedlineExtraData_FormatColl
+SwRootFrame
 SwShellCursor
+SwSortedObjs
+SwSpellPopup
 SwTableCellInfo::Impl
 SwTableCellRedline
 SwTableRowRedline
 SwTestItem
+SwTextFrame
+SwTextShell
+SwTransferable
+SwUnoCursorHelper
+SwVisibleCursor
 SwWebDocShell
 SwWebView
+SwWriter
 SwWrtShellItem
 SwXTextRange::Impl
 SwXTextTableCursor
@@ -161,13 +187,13 @@ SyntaxHighlighter::Tokenizer
 SystemWindow::ImplData
 TBCExtraInfo
 TBCGeneralInfo
+TranslateNId
 VclBin
 VclBuilder::MenuAndId
 VclBuilder::ParserState
 VclBuilder::sortIntoBestTabTraversalOrder
 VclDrawingArea
 VclGrid
-VclScrolledWindow
 VclWindowEvent
 WString
 WindowListenerMultiplexer
@@ -233,6 +259,7 @@ formula::FormulaFAPToken
 formula::FormulaIndexToken
 formula::FormulaJumpToken
 formula::FormulaMissingToken
+formula::FormulaSpaceToken
 formula::FormulaTokenIterator::Item
 formula::FormulaTypedDoubleToken
 formula::FormulaUnknownToken
@@ -251,6 +278,10 @@ oox::ole::AxPageModel
 oox::ole::AxTabStripModel
 oox::ole::AxToggleButtonModel
 oox::ole::AxUserFormModel
+sc::CopyFromClipContext
+sc::DeleteRowTransformation
+sc::FindReplaceTransformation
+sc::FormulaGroupInterpreter
 sd::DrawView
 sdr::SelectionController
 sdr::ViewSelection
@@ -258,9 +289,13 @@ sdr::animation::primitiveAnimator
 sdr::contact::ObjectContactPainter
 svx::CommonStyleManager
 svx::PropertyValueProvider
-sw::BorderCacheOwner
+sw::AccessibilityCheck
 sw::BroadcastingModify
+sw::IndexingExport
+sw::ModelTraverser
+sw::UndoManager
 sw::UnoCursorHint
+sw::search::SearchResultLocator
 ucbhelper::ActiveDataSink
 ucbhelper::InteractionAbort
 ucbhelper::InteractionApprove
diff --git a/include/unotools/compatibility.hxx b/include/unotools/compatibility.hxx
index 85c6c2484a31..eae757103e6c 100644
--- a/include/unotools/compatibility.hxx
+++ b/include/unotools/compatibility.hxx
@@ -33,7 +33,7 @@ namespace osl { class Mutex; }
 /*-************************************************************************************************************
     @descr  Struct to hold information about one compatibility entry
 *//*-*************************************************************************************************************/
-class UNOTOOLS_DLLPUBLIC SvtCompatibilityEntry
+class SvtCompatibilityEntry
 {
     public:
         /*-************************************************************************************************************
diff --git a/sc/source/ui/inc/datatransformation.hxx b/sc/source/ui/inc/datatransformation.hxx
index c82422db5a38..e5bf96690da0 100644
--- a/sc/source/ui/inc/datatransformation.hxx
+++ b/sc/source/ui/inc/datatransformation.hxx
@@ -183,7 +183,7 @@ class SC_DLLPUBLIC DateTimeTransformation : public DataTransformation
         const std::set<SCCOL>& getColumn() const;
 };
 
-class SC_DLLPUBLIC FindReplaceTransformation : public DataTransformation
+class FindReplaceTransformation : public DataTransformation
 {
     SCCOL mnCol;
     OUString maFindString;
@@ -198,7 +198,7 @@ class SC_DLLPUBLIC FindReplaceTransformation : public DataTransformation
         const OUString & getReplaceString() const;
 };
 
-class SC_DLLPUBLIC DeleteRowTransformation : public DataTransformation
+class DeleteRowTransformation : public DataTransformation
 {
     SCCOL mnCol;
     OUString maFindString;
diff --git a/sw/source/core/inc/ModelTraverser.hxx b/sw/source/core/inc/ModelTraverser.hxx
index e6aab62c998f..f3c6acb9c6dd 100644
--- a/sw/source/core/inc/ModelTraverser.hxx
+++ b/sw/source/core/inc/ModelTraverser.hxx
@@ -26,7 +26,7 @@ public:
     virtual void handleSdrObject(SdrObject* pObject) = 0;
 };
 
-class SW_DLLPUBLIC ModelTraverser
+class ModelTraverser
 {
 private:
     std::vector<std::shared_ptr<ModelTraverseHandler>> mpNodeHandler;
commit f54ccf09a5073b6e544c976da68de0c9fc0bdf6c
Author:     Szymon Kłos <szymon.klos at collabora.com>
AuthorDate: Fri Jul 16 10:06:43 2021 +0200
Commit:     Szymon Kłos <szymon.klos at collabora.com>
CommitDate: Thu Aug 19 10:02:15 2021 +0200

    Make Custom Color Picker dialog async
    
    - now supports also XAsynchronousExecutableDialog
    - inherits from SfxDialogController to attach correct LOKNotifier
    
    Change-Id: Ic21db4057b8087d74a437b1c8ec95408ade5264d
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119012
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
    Reviewed-by: Szymon Kłos <szymon.klos at collabora.com>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120670
    Tested-by: Jenkins

diff --git a/cui/source/dialogs/colorpicker.cxx b/cui/source/dialogs/colorpicker.cxx
index 3f1bb0e8c53d..1ecaa887e206 100644
--- a/cui/source/dialogs/colorpicker.cxx
+++ b/cui/source/dialogs/colorpicker.cxx
@@ -19,6 +19,7 @@
 
 #include <com/sun/star/uno/XComponentContext.hpp>
 #include <com/sun/star/ui/dialogs/XExecutableDialog.hpp>
+#include <com/sun/star/ui/dialogs/XAsynchronousExecutableDialog.hpp>
 #include <com/sun/star/beans/XPropertyAccess.hpp>
 #include <com/sun/star/lang/XInitialization.hpp>
 #include <com/sun/star/lang/XServiceInfo.hpp>
@@ -31,6 +32,7 @@
 #include <vcl/svapp.hxx>
 #include <vcl/virdev.hxx>
 #include <vcl/weld.hxx>
+#include <sfx2/basedlgs.hxx>
 #include <svx/hexcolorcontrol.hxx>
 #include <basegfx/color/bcolortools.hxx>
 #include <cmath>
@@ -727,7 +729,7 @@ void ColorSliderControl::SetValue(const Color& rColor, ColorMode eMode, double d
 
 namespace {
 
-class ColorPickerDialog : public weld::GenericDialogController
+class ColorPickerDialog : public SfxDialogController
 {
 private:
     ColorFieldControl m_aColorField;
@@ -790,7 +792,7 @@ private:
 }
 
 ColorPickerDialog::ColorPickerDialog(weld::Window* pParent, Color nColor, sal_Int16 nDialogMode)
-    : GenericDialogController(pParent, "cui/ui/colorpickerdialog.ui", "ColorPicker")
+    : SfxDialogController(pParent, "cui/ui/colorpickerdialog.ui", "ColorPicker")
     , m_xColorField(new weld::CustomWeld(*m_xBuilder, "colorField", m_aColorField))
     , m_xColorSlider(new weld::CustomWeld(*m_xBuilder, "colorSlider", m_aColorSlider))
     , m_xColorPreview(new weld::CustomWeld(*m_xBuilder, "preview", m_aColorPreview))
@@ -1205,7 +1207,7 @@ void ColorPickerDialog::setColorComponent( ColorComponent nComp, double dValue )
     }
 }
 
-typedef ::cppu::WeakComponentImplHelper< XServiceInfo, XExecutableDialog, XInitialization, XPropertyAccess > ColorPickerBase;
+typedef ::cppu::WeakComponentImplHelper< XServiceInfo, XExecutableDialog, XAsynchronousExecutableDialog, XInitialization, XPropertyAccess > ColorPickerBase;
 
 namespace {
 
@@ -1231,6 +1233,10 @@ public:
     virtual void SAL_CALL setTitle( const OUString& aTitle ) override;
     virtual sal_Int16 SAL_CALL execute(  ) override;
 
+    // XAsynchronousExecutableDialog
+    virtual void SAL_CALL setDialogTitle( const OUString& aTitle ) override;
+    virtual void SAL_CALL startExecuteModal( const css::uno::Reference< css::ui::dialogs::XDialogClosedListener >& xListener ) override;
+
 private:
     Color mnColor;
     sal_Int16 mnMode;
@@ -1279,7 +1285,8 @@ sal_Bool SAL_CALL ColorPicker::supportsService( const OUString& sServiceName )
 
 Sequence< OUString > SAL_CALL ColorPicker::getSupportedServiceNames(  )
 {
-    return { "com.sun.star.ui.dialogs.ColorPicker" };
+    return { "com.sun.star.ui.dialogs.ColorPicker",
+             "com.sun.star.ui.dialogs.AsyncColorPicker" };
 }
 
 // XPropertyAccess
@@ -1320,6 +1327,24 @@ sal_Int16 SAL_CALL ColorPicker::execute()
     return ret;
 }
 
+// XAsynchronousExecutableDialog
+void SAL_CALL ColorPicker::setDialogTitle( const OUString& )
+{
+}
+
+void SAL_CALL ColorPicker::startExecuteModal( const css::uno::Reference< css::ui::dialogs::XDialogClosedListener >& xListener )
+{
+    std::shared_ptr<ColorPickerDialog> xDlg = std::make_shared<ColorPickerDialog>(Application::GetFrameWeld(mxParent), mnColor, mnMode);
+    weld::DialogController::runAsync(xDlg, [this, xDlg, xListener] (sal_Int32 nResult) {
+        if (nResult)
+            mnColor = xDlg->GetColor();
+
+        sal_Int16 nRet = static_cast<sal_Int16>(nResult);
+        css::ui::dialogs::DialogClosedEvent aEvent( *this, nRet );
+        xListener->dialogClosed( aEvent );
+    });
+}
+
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cui/util/cui.component b/cui/util/cui.component
index 37023b4e1fa1..ae88b06d84bf 100644
--- a/cui/util/cui.component
+++ b/cui/util/cui.component
@@ -23,4 +23,8 @@
     constructor="com_sun_star_cui_ColorPicker_get_implementation">
     <service name="com.sun.star.ui.dialogs.ColorPicker"/>
   </implementation>
+  <implementation name="com.sun.star.cui.AsyncColorPicker"
+    constructor="com_sun_star_cui_ColorPicker_get_implementation">
+    <service name="com.sun.star.ui.dialogs.AsyncColorPicker"/>
+  </implementation>
 </component>
diff --git a/include/svtools/colrdlg.hxx b/include/svtools/colrdlg.hxx
index ce644d63a865..fabdbcd1177e 100644
--- a/include/svtools/colrdlg.hxx
+++ b/include/svtools/colrdlg.hxx
@@ -21,6 +21,10 @@
 
 #include <svtools/svtdllapi.h>
 #include <tools/color.hxx>
+#include <tools/link.hxx>
+#include <com/sun/star/ui/dialogs/XAsynchronousExecutableDialog.hpp>
+
+#include <functional>
 
 namespace weld { class Window; }
 
@@ -43,10 +47,15 @@ public:
     void            SetMode( svtools::ColorPickerMode eMode );
 
     short           Execute(weld::Window* pParent);
+    void            ExecuteAsync(weld::Window* pParent, const std::function<void(sal_Int32)>& func);
 
 private:
     Color               maColor;
     svtools::ColorPickerMode meMode;
+    ::com::sun::star::uno::Reference< ::com::sun::star::ui::dialogs::XAsynchronousExecutableDialog > mxDialog;
+    std::function<void(sal_Int32)> m_aResultFunc;
+
+    DECL_LINK( DialogClosedHdl, css::ui::dialogs::DialogClosedEvent*, void );
 };
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/svx/PaletteManager.hxx b/include/svx/PaletteManager.hxx
index 5d22e1d1f42d..179c2fb4a924 100644
--- a/include/svx/PaletteManager.hxx
+++ b/include/svx/PaletteManager.hxx
@@ -22,6 +22,7 @@
 #include <svx/Palette.hxx>
 #include <rtl/ustring.hxx>
 #include <svx/xtable.hxx>
+#include <svtools/colrdlg.hxx>
 
 #include <deque>
 #include <vector>
@@ -47,6 +48,8 @@ class SVXCORE_DLLPUBLIC PaletteManager
 
     ColorSelectFunction maColorSelectFunction;
     css::uno::Reference < css::uno::XComponentContext > m_context;
+
+    std::unique_ptr<SvColorDialog> m_pColorDlg;
 public:
     PaletteManager();
     ~PaletteManager();
diff --git a/offapi/UnoApi_offapi.mk b/offapi/UnoApi_offapi.mk
index 0de6196f54b4..72591fdbbbf8 100644
--- a/offapi/UnoApi_offapi.mk
+++ b/offapi/UnoApi_offapi.mk
@@ -100,6 +100,7 @@ $(eval $(call gb_UnoApi_add_idlfiles_nohdl,offapi,com/sun/star/configuration,\
     theDefaultProvider \
 ))
 $(eval $(call gb_UnoApi_add_idlfiles_nohdl,offapi,com/sun/star/cui,\
+    AsyncColorPicker \
     ColorPicker \
 ))
 $(eval $(call gb_UnoApi_add_idlfiles_nohdl,offapi,com/sun/star/datatransfer,\
diff --git a/offapi/com/sun/star/cui/AsyncColorPicker.idl b/offapi/com/sun/star/cui/AsyncColorPicker.idl
new file mode 100644
index 000000000000..a4f8c28d9b3e
--- /dev/null
+++ b/offapi/com/sun/star/cui/AsyncColorPicker.idl
@@ -0,0 +1,41 @@
+/* -*- 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/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ *   Licensed to the Apache Software Foundation (ASF) under one or more
+ *   contributor license agreements. See the NOTICE file distributed
+ *   with this work for additional information regarding copyright
+ *   ownership. The ASF licenses this file to you under the Apache
+ *   License, Version 2.0 (the "License"); you may not use this file
+ *   except in compliance with the License. You may obtain a copy of
+ *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#ifndef __com_sun_star_cui_AsyncColorPicker_idl__
+#define __com_sun_star_cui_AsyncColorPicker_idl__
+
+#include <com/sun/star/ui/dialogs/XAsynchronousExecutableDialog.idl>
+#include <com/sun/star/awt/XWindow.idl>
+
+
+module com { module sun { module star { module cui {
+
+/**
+    @since LibreOffice 7.2
+ */
+service AsyncColorPicker : com::sun::star::ui::dialogs::XAsynchronousExecutableDialog
+{
+    createWithParent([in] com::sun::star::awt::XWindow Parent);
+};
+
+}; }; }; };
+
+#endif
+
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svtools/source/dialogs/colrdlg.cxx b/svtools/source/dialogs/colrdlg.cxx
index dbd7bd143ce9..d913ef87c2e9 100644
--- a/svtools/source/dialogs/colrdlg.cxx
+++ b/svtools/source/dialogs/colrdlg.cxx
@@ -20,12 +20,15 @@
 
 #include <com/sun/star/awt/XWindow.hpp>
 #include <com/sun/star/beans/XPropertyAccess.hpp>
+#include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp>
 #include <com/sun/star/ui/dialogs/XExecutableDialog.hpp>
+#include <com/sun/star/cui/AsyncColorPicker.hpp>
 #include <com/sun/star/cui/ColorPicker.hpp>
 
 #include <comphelper/processfactory.hxx>
 
 #include <svtools/colrdlg.hxx>
+#include <svtools/dialogclosedlistener.hxx>
 #include <vcl/weld.hxx>
 #include <osl/diagnose.h>
 
@@ -34,6 +37,7 @@ using namespace ::com::sun::star::lang;
 using namespace ::com::sun::star::beans;
 using namespace ::com::sun::star::ui::dialogs;
 
+const OUStringLiteral sColor = u"Color";
 
 SvColorDialog::SvColorDialog()
     : meMode(svtools::ColorPickerMode::Select)
@@ -58,7 +62,6 @@ short SvColorDialog::Execute(weld::Window* pParent)
     short ret = 0;
     try
     {
-        static const OUStringLiteral sColor( u"Color" );
         Reference< XComponentContext > xContext( ::comphelper::getProcessComponentContext() );
 
         Reference<css::awt::XWindow> xParent;
@@ -69,7 +72,7 @@ short SvColorDialog::Execute(weld::Window* pParent)
         Reference< XPropertyAccess > xPropertyAccess( xDialog, UNO_QUERY_THROW );
 
         Sequence< PropertyValue > props( 2 );
-        props[0].Name = sColor;
+        props[0].Name = OUString( sColor );
         props[0].Value <<= maColor;
         props[1].Name = "Mode";
         props[1].Value <<= static_cast<sal_Int16>(meMode);
@@ -98,4 +101,62 @@ short SvColorDialog::Execute(weld::Window* pParent)
     return ret;
 }
 
+void SvColorDialog::ExecuteAsync(weld::Window* pParent, const std::function<void(sal_Int32)>& func)
+{
+    m_aResultFunc = func;
+
+    try
+    {
+        Reference< XComponentContext > xContext( ::comphelper::getProcessComponentContext() );
+
+        Reference<css::awt::XWindow> xParent;
+        if (pParent)
+            xParent = pParent->GetXWindow();
+
+        mxDialog = css::cui::AsyncColorPicker::createWithParent(xContext, xParent);
+        Reference< XPropertyAccess > xPropertyAccess( mxDialog, UNO_QUERY_THROW );
+
+        Sequence< PropertyValue > props( 2 );
+        props[0].Name = OUString( sColor );
+        props[0].Value <<= maColor;
+        props[1].Name = "Mode";
+        props[1].Value <<= static_cast<sal_Int16>(meMode);
+
+        xPropertyAccess->setPropertyValues( props );
+
+        rtl::Reference< ::svt::DialogClosedListener > pListener = new ::svt::DialogClosedListener();
+        pListener->SetDialogClosedLink( LINK( this, SvColorDialog, DialogClosedHdl ) );
+
+        mxDialog->startExecuteModal( pListener );
+    }
+    catch(Exception&)
+    {
+        OSL_ASSERT(false);
+    }
+}
+
+IMPL_LINK( SvColorDialog, DialogClosedHdl, css::ui::dialogs::DialogClosedEvent*, pEvent, void )
+{
+    sal_Int32 nResult = 0;
+    sal_Int16 nDialogRet = pEvent->DialogResult;
+    if( nDialogRet == ExecutableDialogResults::OK )
+    {
+        nResult = RET_OK;
+
+        Reference< XPropertyAccess > xPropertyAccess( mxDialog, UNO_QUERY_THROW );
+        Sequence< PropertyValue > props = xPropertyAccess->getPropertyValues();
+
+        for( const auto& rProp : std::as_const(props) )
+        {
+            if( rProp.Name == sColor )
+            {
+                rProp.Value >>= maColor;
+            }
+        }
+    }
+
+    m_aResultFunc(nResult);
+    mxDialog.clear();
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/source/tbxctrls/PaletteManager.cxx b/svx/source/tbxctrls/PaletteManager.cxx
index 4084dffc993c..7bb067952438 100644
--- a/svx/source/tbxctrls/PaletteManager.cxx
+++ b/svx/source/tbxctrls/PaletteManager.cxx
@@ -28,7 +28,6 @@
 #include <svx/svxids.hrc>
 #include <svx/dialmgr.hxx>
 #include <tbxcolorupdate.hxx>
-#include <svtools/colrdlg.hxx>
 #include <vcl/svapp.hxx>
 #include <vcl/settings.hxx>
 #include <stack>
@@ -301,19 +300,21 @@ void PaletteManager::PopupColorPicker(weld::Window* pParent, const OUString& aCo
 {
     // The calling object goes away during aColorDlg.Execute(), so we must copy this
     OUString aCommandCopy = aCommand;
-    SvColorDialog aColorDlg;
-    aColorDlg.SetColor(rInitialColor);
-    aColorDlg.SetMode(svtools::ColorPickerMode::Modify);
-    if (aColorDlg.Execute(pParent) == RET_OK)
-    {
-        Color aLastColor = aColorDlg.GetColor();
-        OUString sColorName = "#" + aLastColor.AsRGBHexString().toAsciiUpperCase();
-        NamedColor aNamedColor = std::make_pair(aLastColor, sColorName);
-        if (mpBtnUpdater)
-            mpBtnUpdater->Update(aNamedColor);
-        AddRecentColor(aLastColor, sColorName);
-        maColorSelectFunction(aCommandCopy, aNamedColor);
-    }
+    m_pColorDlg = std::make_unique<SvColorDialog>();
+    m_pColorDlg->SetColor(rInitialColor);
+    m_pColorDlg->SetMode(svtools::ColorPickerMode::Modify);
+    m_pColorDlg->ExecuteAsync(pParent, [this, aCommandCopy] (sal_Int32 nResult) {
+        if (nResult == RET_OK)
+        {
+            Color aLastColor = m_pColorDlg->GetColor();
+            OUString sColorName = "#" + aLastColor.AsRGBHexString().toAsciiUpperCase();
+            NamedColor aNamedColor = std::make_pair(aLastColor, sColorName);
+            if (mpBtnUpdater)
+                mpBtnUpdater->Update(aNamedColor);
+            AddRecentColor(aLastColor, sColorName);
+            maColorSelectFunction(aCommandCopy, aNamedColor);
+        }
+    });
 }
 
 void PaletteManager::DispatchColorCommand(const OUString& aCommand, const NamedColor& rColor)
commit abd08d042fb397fbf97b93d8ca1a6426c1b304e6
Author:     Szymon Kłos <szymon.klos at collabora.com>
AuthorDate: Mon Jul 26 14:50:56 2021 +0200
Commit:     Szymon Kłos <szymon.klos at collabora.com>
CommitDate: Thu Aug 19 10:02:00 2021 +0200

    jsdialog: dump id for images
    

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list