Hello community,

here is the log from the commit of package libreoffice for openSUSE:Factory 
checked in at 2020-06-03 20:30:45
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libreoffice (Old)
 and      /work/SRC/openSUSE:Factory/.libreoffice.new.3606 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libreoffice"

Wed Jun  3 20:30:45 2020 rev:204 rq:810707 version:6.4.4.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/libreoffice/libreoffice.changes  2020-05-14 
23:22:44.748712733 +0200
+++ /work/SRC/openSUSE:Factory/.libreoffice.new.3606/libreoffice.changes        
2020-06-03 20:31:50.545049559 +0200
@@ -1,0 +2,21 @@
+Mon Jun  1 18:25:46 UTC 2020 - Andras Timar <andras.ti...@collabora.com>
+
+- Fix bsc#1146025 - LO-L3: Colored textboxes in PPTX look very odd (SmartArt)
+  * bsc1146025.diff
+
+-------------------------------------------------------------------
+Tue May 26 11:25:10 UTC 2020 - Andras Timar <andras.ti...@collabora.com>
+
+- Fix bsc#1165849 - LO-L3: Shadow size for rectangle is only a fraction of 
Office 365
+  * bsc1165849-1.diff
+  * bsc1165849-2.diff
+  * bsc1165849-3.diff
+
+-------------------------------------------------------------------
+Thu May 21 09:12:27 UTC 2020 - Tomáš Chvátal <tchva...@suse.com>
+
+- Update to 6.4.4.2:
+  * 6.4.4 release
+- Remove merged patch bsc1160687-1.diff
+
+-------------------------------------------------------------------
@@ -23,2 +44,2 @@
-- Update to 6.4.3.2:
-  * 6.4.2 RC2 release
+- Update to 6.4.3.2 bsc#1171997 CVE-2020-12801:
+  * 6.4.3 RC2 release

Old:
----
  bsc1160687-1.diff
  libreoffice-6.4.3.2.tar.xz
  libreoffice-6.4.3.2.tar.xz.asc
  libreoffice-help-6.4.3.2.tar.xz
  libreoffice-help-6.4.3.2.tar.xz.asc
  libreoffice-translations-6.4.3.2.tar.xz
  libreoffice-translations-6.4.3.2.tar.xz.asc

New:
----
  bsc1146025.diff
  bsc1165849-1.diff
  bsc1165849-2.diff
  bsc1165849-3.diff
  libreoffice-6.4.4.2.tar.xz
  libreoffice-6.4.4.2.tar.xz.asc
  libreoffice-help-6.4.4.2.tar.xz
  libreoffice-help-6.4.4.2.tar.xz.asc
  libreoffice-translations-6.4.4.2.tar.xz
  libreoffice-translations-6.4.4.2.tar.xz.asc

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libreoffice.spec ++++++
--- /var/tmp/diff_new_pack.GZylHC/_old  2020-06-03 20:31:54.137060477 +0200
+++ /var/tmp/diff_new_pack.GZylHC/_new  2020-06-03 20:31:54.141060490 +0200
@@ -50,7 +50,7 @@
 %bcond_with system_gpgme
 %endif
 Name:           libreoffice
-Version:        6.4.3.2
+Version:        6.4.4.2
 Release:        0
 Summary:        A Free Office Suite (Framework)
 License:        LGPL-3.0-or-later AND MPL-2.0+
@@ -104,7 +104,6 @@
 # Bug 1165870 - LO-L3: Image shadow that should be invisible shown as 
extraneous line below
 Patch9:         bsc1165870.diff
 # Bug 1160687 - LO-L3: Elements on title page mixed up
-Patch10:        bsc1160687-1.diff
 Patch11:        bsc1160687-2.diff
 Patch12:        bsc1160687-3.diff
 Patch13:        bsc1160687-4.diff
@@ -112,6 +111,12 @@
 Patch15:        bsc1160687-6.diff
 Patch16:        bsc1160687-7.diff
 Patch17:        bsc1160687-8.diff
+# Bug 1165849 - LO-L3: Shadow size for rectangle is only a fraction of Office 
365
+Patch18:        bsc1165849-1.diff
+Patch19:        bsc1165849-2.diff
+Patch20:        bsc1165849-3.diff
+# Bug 1146025 - LO-L3: Colored textboxes in PPTX look very odd (SmartArt)
+Patch21:        bsc1146025.diff
 # try to save space by using hardlinks
 Patch990:       install-with-hardlinks.diff
 # save time by relying on rpm check rather than doing stupid find+grep
@@ -971,7 +976,6 @@
 %patch7 -p1
 %patch8 -p1
 %patch9 -p1
-%patch10 -p1
 %patch11 -p1
 %patch12 -p1
 %patch13 -p1
@@ -979,6 +983,10 @@
 %patch15 -p1
 %patch16 -p1
 %patch17 -p1
+%patch18 -p1
+%patch19 -p1
+%patch20 -p1
+%patch21 -p1
 %patch990 -p1
 %patch991 -p1
 







++++++ bsc1160687-1.diff -> bsc1146025.diff ++++++
--- /work/SRC/openSUSE:Factory/libreoffice/bsc1160687-1.diff    2020-05-14 
23:22:40.480703419 +0200
+++ /work/SRC/openSUSE:Factory/.libreoffice.new.3606/bsc1146025.diff    
2020-06-03 20:30:58.004889839 +0200
@@ -1,90 +1,501 @@
-From fda60625c9e8bbc0259c790e7da76e608a012451 Mon Sep 17 00:00:00 2001
+From bc15a8241b1c8e113bcbb83343652b2c84820e87 Mon Sep 17 00:00:00 2001
 From: Miklos Vajna <vmik...@collabora.com>
-Date: Mon, 27 Apr 2020 10:54:27 +0200
-Subject: [PATCH] DOCX import: handle <wp:positionH
- relativeFrom="insideMargin">
+Date: Fri, 22 May 2020 17:58:22 +0200
+Subject: [PATCH] bsc1146025.diff
 
-This is the same as page, but it is from-left on odd pages and
-from-right on even pages, i.e. our "mirror on even pages" mode.
+smartart import: handle multiple <a:schemeClr> in <dgm:fillClrLst>
 
-(cherry picked from commit fccbb557add457db16e0556c3f0172cafc2cf981)
+The TODO in the ColorFragmentHandler ctor was right: we only handled the
+last <a:schemeClr> child, but there can be multiple one.
+
+Use them based on the index of a shape in a <dgm:forEach> loop.
+
+Move the TODO to the only place which still assumes a single color in
+the color list.
+
+(cherry picked from commit 12bea6c897822964ad4705418da54411cb15749e)
 
 Conflicts:
-       writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx
+       oox/source/drawingml/colorchoicecontext.cxx
+       oox/source/drawingml/diagram/diagram.cxx
+       sd/qa/unit/import-tests-smartart.cxx
+
+oox smartart import: fix aspect ratio of shape with composite algo
+
+The layout node has alg=composite, then a parTx and a desTx child layout
+nodes. No matter what order is used (parent first, child first), the
+result will be wrong, as the constraints refer to each other. I did not
+spot any description in ISO 29500-1 that would describe what is the
+expected behavior.
+
+Researching this, found "One other consideration when specifying
+composite constraints is that the constraints must be specified in the
+same order as the nested layout nodes." at
+<http://web.archive.org/web/20111015151600/http://msdn.microsoft.com/en-us/magazine/cc163470.aspx>,
+which suggests to handle constraints for each shape in a parent -> child
+order, but keep a shared state when iterating over the children which
+gives us:
+
+- parent node, all direct constraints
+- for each child node:
+  - child's constraints from parent
+  - child's own constraints
+
+This way the desTx top value can depend on the parTx's height, and it's
+supported to define parTx's height only in the parTx layout node, not in
+the composite parent.
+
+And after all, it matches what PowerPoint does, so the column headings
+in the bugdoc have a 4:10 height:width aspect ratio.
+
+(cherry picked from commit 414586649582e182b2603702f4f586f4beeed8a9)
 
-Change-Id: I018e0ac165a3d802f64cfc314d5c5f58da3cb580
-Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93003
-Tested-by: Jenkins
-Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>
+oox smartart import, composite alg: implement vertical centering
+
+The bugdoc's case was that the total height would be used by 2 shapes,
+but then a constraint decreases the height of one shape, so not all
+vertical space is used.
+
+We used to just count from the top, need to center vertically, as
+PowerPoint does it.
+
+(cherry picked from commit acdde3c643fde015214c546b1567727272ea799e)
+
+Change-Id: I1c5c4f82e621f1110ef06b0490ff79f82f60f214
+deb76c1ddd1ffff8d2a217cddf81106d1bb97eb9
+436019e9e837b73130e387c9bcd309e20045b0f9
 ---
+ oox/inc/drawingml/colorchoicecontext.hxx      |  15 ++
+ oox/source/drawingml/colorchoicecontext.cxx   |  25 +++
+ oox/source/drawingml/diagram/diagram.cxx      |  17 +-
+ oox/source/drawingml/diagram/diagram.hxx      |  16 +-
+ .../diagram/diagramfragmenthandler.cxx        |  15 +-
+ .../drawingml/diagram/diagramlayoutatoms.cxx  | 162 ++++++++++++++----
+ .../drawingml/diagram/diagramlayoutatoms.hxx  |   3 +-
+ .../drawingml/diagram/layoutatomvisitors.cxx  |   4 +-
+ 8 files changed, 208 insertions(+), 49 deletions(-)
 
-diff --git a/writerfilter/source/dmapper/GraphicHelpers.cxx 
b/writerfilter/source/dmapper/GraphicHelpers.cxx
-index 3339156ae3b2..9168ad51eebd 100644
---- a/writerfilter/source/dmapper/GraphicHelpers.cxx
-+++ b/writerfilter/source/dmapper/GraphicHelpers.cxx
-@@ -102,6 +102,11 @@ void PositionHandler::lcl_attribute( Id aName, Value& 
rVal )
-                         m_nRelation =  text::RelOrientation::PAGE_FRAME;
-                         break;
-
-+                    case 
NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromH_insideMargin:
-+                        m_nRelation = text::RelOrientation::PAGE_FRAME;
-+                        m_bPageToggle = true;
-+                        break;
-+
-                     case 
NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromH_column:
-                         m_nRelation = text::RelOrientation::FRAME;
-                         break;
-diff --git a/writerfilter/source/dmapper/GraphicHelpers.hxx 
b/writerfilter/source/dmapper/GraphicHelpers.hxx
-index dbfe9ddd9f13..d28f2fb50bf7 100644
---- a/writerfilter/source/dmapper/GraphicHelpers.hxx
-+++ b/writerfilter/source/dmapper/GraphicHelpers.hxx
-@@ -37,6 +37,7 @@ public:
-     sal_Int16 orientation() const;
-     sal_Int16 relation() const { return m_nRelation;}
-     sal_Int32 position() const { return m_nPosition;}
-+    bool GetPageToggle() const { return m_bPageToggle; }
-  private:
-     virtual void lcl_attribute( Id aName, Value& rVal ) override;
-     virtual void lcl_sprm( Sprm& rSprm ) override;
-@@ -45,6 +46,7 @@ public:
-     sal_Int32 m_nPosition;
-     std::pair<OUString, OUString>& m_rPositionOffsets;
-     std::pair<OUString, OUString>& m_rAligns;
-+    bool m_bPageToggle = false;
+diff --git a/oox/inc/drawingml/colorchoicecontext.hxx 
b/oox/inc/drawingml/colorchoicecontext.hxx
+index 29889f494e3d..dae8d7fb8e25 100644
+--- a/oox/inc/drawingml/colorchoicecontext.hxx
++++ b/oox/inc/drawingml/colorchoicecontext.hxx
+@@ -22,6 +22,8 @@
+ 
+ #include <oox/core/contexthandler2.hxx>
+ 
++#include <vector>
++
+ namespace oox {
+ namespace drawingml {
+ 
+@@ -65,6 +67,19 @@ private:
+     Color&              mrColor;
  };
-
- class WrapHandler: public LoggedProperties
-diff --git a/writerfilter/source/dmapper/GraphicImport.cxx 
b/writerfilter/source/dmapper/GraphicImport.cxx
-index 97c807752f60..a2c19383c95d 100644
---- a/writerfilter/source/dmapper/GraphicImport.cxx
-+++ b/writerfilter/source/dmapper/GraphicImport.cxx
-@@ -193,6 +193,7 @@ public:
-
-     sal_Int16 nHoriOrient;
-     sal_Int16 nHoriRelation;
-+    bool bPageToggle = false;
-     sal_Int16 nVertOrient;
-     sal_Int16 nVertRelation;
-     text::WrapTextMode nWrap;
-@@ -343,8 +344,8 @@ public:
-                                                        
uno::makeAny(nLeftPosition));
-         xGraphicObjectProperties->setPropertyValue(getPropertyName( 
PROP_HORI_ORIENT_RELATION ),
-                 uno::makeAny(nHoriRelation));
--        xGraphicObjectProperties->setPropertyValue(getPropertyName( 
PROP_PAGE_TOGGLE ),
--                uno::makeAny(false));
-+        
xGraphicObjectProperties->setPropertyValue(getPropertyName(PROP_PAGE_TOGGLE),
-+                                                   uno::makeAny(bPageToggle));
-         if (!bRelativeOnly)
-             xGraphicObjectProperties->setPropertyValue(getPropertyName( 
PROP_VERT_ORIENT_POSITION),
-                                                        
uno::makeAny(nTopPosition));
-@@ -1089,6 +1090,7 @@ void GraphicImport::lcl_sprm(Sprm& rSprm)
-                 if( !m_pImpl->bUseSimplePos )
+ 
++/// Same as ColorContext, but handles multiple colors.
++class ColorsContext : public ::oox::core::ContextHandler2
++{
++public:
++    explicit ColorsContext(::oox::core::ContextHandler2Helper const& rParent,
++                           std::vector<Color>& rColors);
++
++    virtual ::oox::core::ContextHandlerRef
++    onCreateContext(sal_Int32 nElement, const ::oox::AttributeList& rAttribs) 
override;
++
++private:
++    std::vector<Color>& mrColors;
++};
+ 
+ } // namespace drawingml
+ } // namespace oox
+diff --git a/oox/source/drawingml/colorchoicecontext.cxx 
b/oox/source/drawingml/colorchoicecontext.cxx
+index cf6c17ecd3b4..a9e0d91ef32e 100644
+--- a/oox/source/drawingml/colorchoicecontext.cxx
++++ b/oox/source/drawingml/colorchoicecontext.cxx
+@@ -149,6 +149,31 @@ ColorContext::ColorContext( ContextHandler2Helper const & 
rParent, Color& rColor
+     return nullptr;
+ }
+ 
++ColorsContext::ColorsContext(ContextHandler2Helper const& rParent, 
std::vector<Color>& rColors)
++    : ContextHandler2(rParent)
++    , mrColors(rColors)
++{
++}
++
++::oox::core::ContextHandlerRef ColorsContext::onCreateContext(sal_Int32 
nElement,
++                                                              const 
AttributeList&)
++{
++    switch (nElement)
++    {
++        case A_TOKEN(scrgbClr):
++        case A_TOKEN(srgbClr):
++        case A_TOKEN(hslClr):
++        case A_TOKEN(sysClr):
++        case A_TOKEN(schemeClr):
++        case A_TOKEN(prstClr):
++        {
++            mrColors.emplace_back();
++            return new ColorValueContext(*this, mrColors.back());
++        }
++    }
++    return nullptr;
++}
++
+ } // namespace drawingml
+ } // namespace oox
+ 
+diff --git a/oox/source/drawingml/diagram/diagram.cxx 
b/oox/source/drawingml/diagram/diagram.cxx
+index b2f3373ad113..a03a06c39125 100644
+--- a/oox/source/drawingml/diagram/diagram.cxx
++++ b/oox/source/drawingml/diagram/diagram.cxx
+@@ -321,9 +321,11 @@ void loadDiagram( ShapePtr const & pShape,
+     if( !pData->getExtDrawings().empty() )
+     {
+         const DiagramColorMap::const_iterator aColor = 
pDiagram->getColors().find("node0");
+-        if( aColor != pDiagram->getColors().end() )
++        if( aColor != pDiagram->getColors().end() && 
!aColor->second.maTextFillColors.empty())
+         {
+-            pShape->setFontRefColorForNodes(aColor->second.maTextFillColor);
++            // TODO(F1): well, actually, there might be *several* color
++            // definitions in it, after all it's called list.
++            
pShape->setFontRefColorForNodes(DiagramColor::getColorByIndex(aColor->second.maTextFillColors,
 -1));
+         }
+     }
+ 
+@@ -425,6 +427,17 @@ void reloadDiagram(SdrObject* pObj, core::XmlFilterBase& 
rFilter)
+         child->addShape(rFilter, rFilter.getCurrentTheme(), xShapes, 
aTransformation, pShape->getFillProperties());
+ }
+ 
++const oox::drawingml::Color&
++DiagramColor::getColorByIndex(const std::vector<oox::drawingml::Color>& 
rColors, sal_Int32 nIndex)
++{
++    assert(!rColors.empty());
++    if (nIndex == -1)
++    {
++        return rColors[rColors.size() - 1];
++    }
++
++    return rColors[nIndex % rColors.size()];
++}
+ } }
+ 
+ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
+diff --git a/oox/source/drawingml/diagram/diagram.hxx 
b/oox/source/drawingml/diagram/diagram.hxx
+index 576c4007e29f..a674e248961e 100644
+--- a/oox/source/drawingml/diagram/diagram.hxx
++++ b/oox/source/drawingml/diagram/diagram.hxx
+@@ -22,6 +22,7 @@
+ 
+ #include <map>
+ #include <memory>
++#include <vector>
+ 
+ #include <rtl/ustring.hxx>
+ 
+@@ -111,12 +112,15 @@ typedef std::map<OUString,DiagramStyle> DiagramQStyleMap;
+ 
+ struct DiagramColor
+ {
+-    oox::drawingml::Color maFillColor;
+-    oox::drawingml::Color maLineColor;
+-    oox::drawingml::Color maEffectColor;
+-    oox::drawingml::Color maTextFillColor;
+-    oox::drawingml::Color maTextLineColor;
+-    oox::drawingml::Color maTextEffectColor;
++    std::vector<oox::drawingml::Color> maFillColors;
++    std::vector<oox::drawingml::Color> maLineColors;
++    std::vector<oox::drawingml::Color> maEffectColors;
++    std::vector<oox::drawingml::Color> maTextFillColors;
++    std::vector<oox::drawingml::Color> maTextLineColors;
++    std::vector<oox::drawingml::Color> maTextEffectColors;
++
++    static const oox::drawingml::Color&
++    getColorByIndex(const std::vector<oox::drawingml::Color>& rColors, 
sal_Int32 nIndex);
+ };
+ 
+ typedef std::map<OUString,DiagramColor> DiagramColorMap;
+diff --git a/oox/source/drawingml/diagram/diagramfragmenthandler.cxx 
b/oox/source/drawingml/diagram/diagramfragmenthandler.cxx
+index 6e1000af3627..7eae543dc6f9 100644
+--- a/oox/source/drawingml/diagram/diagramfragmenthandler.cxx
++++ b/oox/source/drawingml/diagram/diagramfragmenthandler.cxx
+@@ -196,21 +196,18 @@ ColorFragmentHandler::ColorFragmentHandler( 
::oox::core::XmlFilterBase& rFilter,
+             {
+                 // the actual colors - defer to color fragment handlers.
+ 
+-                // TODO(F1): well, actually, there might be *several* color
+-                // definitions in it, after all it's called list. But
+-                // apparently ColorContext doesn't handle that anyway...
+                 case DGM_TOKEN(fillClrLst):
+-                    return new ColorContext( *this, maColorEntry.maFillColor 
);
++                    return new ColorsContext( *this, 
maColorEntry.maFillColors );
+                 case DGM_TOKEN(linClrLst):
+-                    return new ColorContext( *this, maColorEntry.maLineColor 
);
++                    return new ColorsContext( *this, 
maColorEntry.maLineColors );
+                 case DGM_TOKEN(effectClrLst):
+-                    return new ColorContext( *this, 
maColorEntry.maEffectColor );
++                    return new ColorsContext( *this, 
maColorEntry.maEffectColors );
+                 case DGM_TOKEN(txFillClrLst):
+-                    return new ColorContext( *this, 
maColorEntry.maTextFillColor );
++                    return new ColorsContext( *this, 
maColorEntry.maTextFillColors );
+                 case DGM_TOKEN(txLinClrLst):
+-                    return new ColorContext( *this, 
maColorEntry.maTextLineColor );
++                    return new ColorsContext( *this, 
maColorEntry.maTextLineColors );
+                 case DGM_TOKEN(txEffectClrLst):
+-                    return new ColorContext( *this, 
maColorEntry.maTextEffectColor );
++                    return new ColorsContext( *this, 
maColorEntry.maTextEffectColors );
+             }
+             break;
+         }
+diff --git a/oox/source/drawingml/diagram/diagramlayoutatoms.cxx 
b/oox/source/drawingml/diagram/diagramlayoutatoms.cxx
+index ff83dde63fa3..19b1d10679f4 100644
+--- a/oox/source/drawingml/diagram/diagramlayoutatoms.cxx
++++ b/oox/source/drawingml/diagram/diagramlayoutatoms.cxx
+@@ -430,6 +430,42 @@ sal_Int32 AlgAtom::getVerticalShapesCount(const ShapePtr& 
rShape)
+     return nCount;
+ }
+ 
++namespace
++{
++/**
++ * Apply rConstraint to the rProperties shared layout state.
++ *
++ * Note that the order in which constraints are applied matters, given that 
constraints can refer to
++ * each other, and in case A depends on B and A is applied before B, the 
effect of A won't be
++ * updated when B is applied.
++ */
++void ApplyConstraintToLayout(const Constraint& rConstraint, 
LayoutPropertyMap& rProperties)
++{
++    const LayoutPropertyMap::const_iterator aRef = 
rProperties.find(rConstraint.msRefForName);
++    if (aRef != rProperties.end())
++    {
++        const LayoutProperty::const_iterator aRefType = 
aRef->second.find(rConstraint.mnRefType);
++        if (aRefType != aRef->second.end())
++            rProperties[rConstraint.msForName][rConstraint.mnType]
++                = aRefType->second * rConstraint.mfFactor;
++        else
++        {
++            // Values are never in EMU, while oox::drawingml::Shape position 
and size are always in
++            // EMU.
++            double fUnitFactor = 0;
++            if (isFontUnit(rConstraint.mnRefType))
++                // Points -> EMU.
++                fUnitFactor = EMU_PER_PT;
++            else
++                // Millimeters -> EMU.
++                fUnitFactor = EMU_PER_HMM * 100;
++            rProperties[rConstraint.msForName][rConstraint.mnType]
++                = rConstraint.mfValue * fUnitFactor;
++        }
++    }
++}
++}
++
+ void AlgAtom::layoutShape( const ShapePtr& rShape,
+                            const std::vector<Constraint>& rConstraints )
+ {
+@@ -443,6 +479,11 @@ void AlgAtom::layoutShape( const ShapePtr& rShape,
+             LayoutProperty& rParent = aProperties[""];
+ 
+             sal_Int32 nParentXOffset = 0;
++
++            // Track min/max vertical positions, so we can center everything 
at the end, if needed.
++            sal_Int32 nVertMin = std::numeric_limits<sal_Int32>::max();
++            sal_Int32 nVertMax = 0;
++
+             if (mfAspectRatio != 1.0)
+             {
+                 rParent[XML_w] = rShape->getSize().Width;
+@@ -467,31 +508,74 @@ void AlgAtom::layoutShape( const ShapePtr& rShape,
+ 
+             for (const auto & rConstr : rConstraints)
+             {
+-                const LayoutPropertyMap::const_iterator aRef = 
aProperties.find(rConstr.msRefForName);
+-                if (aRef != aProperties.end())
++                // Apply direct constraints for all layout nodes.
++                ApplyConstraintToLayout(rConstr, aProperties);
++            }
++
++            for (auto& aCurrShape : rShape->getChildren())
++            {
++                // Apply constraints from the current layout node for this 
child shape.
++                // Previous child shapes may have changed aProperties.
++                for (const auto& rConstr : rConstraints)
                  {
-                     m_pImpl->nHoriRelation = pHandler->relation();
-+                    m_pImpl->bPageToggle = pHandler->GetPageToggle();
-                     m_pImpl->nHoriOrient = pHandler->orientation();
-                     m_pImpl->nLeftPosition = pHandler->position();
-
---
+-                    const LayoutProperty::const_iterator aRefType = 
aRef->second.find(rConstr.mnRefType);
+-                    if (aRefType != aRef->second.end())
+-                        aProperties[rConstr.msForName][rConstr.mnType] = 
aRefType->second * rConstr.mfFactor;
+-                    else
++                    if (rConstr.msForName != aCurrShape->getInternalName())
+                     {
+-                        // Values are never in EMU, while 
oox::drawingml::Shape
+-                        // position and size are always in EMU.
+-                        double fUnitFactor = 0;
+-                        if (isFontUnit(rConstr.mnRefType))
+-                            // Points -> EMU.
+-                            fUnitFactor = EMU_PER_PT;
+-                        else
+-                            // Millimeters -> EMU.
+-                            fUnitFactor = EMU_PER_HMM * 100;
+-                        aProperties[rConstr.msForName][rConstr.mnType]
+-                            = rConstr.mfValue * fUnitFactor;
++                        continue;
++                    }
++
++                    ApplyConstraintToLayout(rConstr, aProperties);
++                }
++
++                // Apply constraints from the child layout node for this 
child shape.
++                // This builds on top of the own parent state + the state of 
previous shapes in the
++                // same composite algorithm.
++                const LayoutNode& rLayoutNode = getLayoutNode();
++                for (const auto& pDirectChild : rLayoutNode.getChildren())
++                {
++                    auto pLayoutNode = 
dynamic_cast<LayoutNode*>(pDirectChild.get());
++                    if (!pLayoutNode)
++                    {
++                        continue;
++                    }
++
++                    if (pLayoutNode->getName() != 
aCurrShape->getInternalName())
++                    {
++                        continue;
++                    }
++
++                    for (const auto& pChild : pLayoutNode->getChildren())
++                    {
++                        auto pConstraintAtom = 
dynamic_cast<ConstraintAtom*>(pChild.get());
++                        if (!pConstraintAtom)
++                        {
++                            continue;
++                        }
++
++                        const Constraint& rConstraint = 
pConstraintAtom->getConstraint();
++                        if (!rConstraint.msForName.isEmpty())
++                        {
++                            continue;
++                        }
++
++                        if (!rConstraint.msRefForName.isEmpty())
++                        {
++                            continue;
++                        }
++
++                        // Either an absolute value or a factor of a property.
++                        if (rConstraint.mfValue == 0.0 && 
rConstraint.mnRefType == XML_none)
++                        {
++                            continue;
++                        }
++
++                        Constraint aConstraint(rConstraint);
++                        aConstraint.msForName = pLayoutNode->getName();
++                        aConstraint.msRefForName = pLayoutNode->getName();
++
++                        ApplyConstraintToLayout(aConstraint, aProperties);
+                     }
+                 }
+-            }
+ 
+-            for (auto & aCurrShape : rShape->getChildren())
+-            {
+                 awt::Size aSize = rShape->getSize();
+                 awt::Point aPos(0, 0);
+ 
+@@ -535,6 +619,24 @@ void AlgAtom::layoutShape( const ShapePtr& rShape,
+                 aCurrShape->setSize(aSize);
+                 aCurrShape->setChildSize(aSize);
+                 aCurrShape->setPosition(aPos);
++
++                nVertMin = std::min(aPos.Y, nVertMin);
++                nVertMax = std::max(aPos.Y + aSize.Height, nVertMax);
++            }
++
++            // See if all vertical space is used or we have to center the 
content.
++            if (nVertMin >= 0 && nVertMax <= rParent[XML_h])
++            {
++                sal_Int32 nDiff = rParent[XML_h] - (nVertMax - nVertMin);
++                if (nDiff > 0)
++                {
++                    for (auto& aCurrShape : rShape->getChildren())
++                    {
++                        awt::Point aPosition = aCurrShape->getPosition();
++                        aPosition.Y += nDiff / 2;
++                        aCurrShape->setPosition(aPosition);
++                    }
++                }
+             }
+             break;
+         }
+@@ -1275,7 +1377,7 @@ void LayoutNode::accept( LayoutAtomVisitor& rVisitor )
+     rVisitor.visit(*this);
+ }
+ 
+-bool LayoutNode::setupShape( const ShapePtr& rShape, const dgm::Point* 
pPresNode ) const
++bool LayoutNode::setupShape( const ShapePtr& rShape, const dgm::Point* 
pPresNode, sal_Int32 nCurrIdx ) const
+ {
+     SAL_INFO(
+         "oox.drawingml",
+@@ -1413,15 +1515,17 @@ bool LayoutNode::setupShape( const ShapePtr& rShape, 
const dgm::Point* pPresNode
+         const DiagramColorMap::const_iterator aColor = 
mrDgm.getColors().find(aStyleLabel);
+         if( aColor != mrDgm.getColors().end() )
+         {
++            // Take the nth color from the color list in case we are the nth 
shape in a
++            // <dgm:forEach> loop.
+             const DiagramColor& rColor=aColor->second;
+-            if( rColor.maFillColor.isUsed() )
+-                rShape->getShapeStyleRefs()[XML_fillRef].maPhClr = 
rColor.maFillColor;
+-            if( rColor.maLineColor.isUsed() )
+-                rShape->getShapeStyleRefs()[XML_lnRef].maPhClr = 
rColor.maLineColor;
+-            if( rColor.maEffectColor.isUsed() )
+-                rShape->getShapeStyleRefs()[XML_effectRef].maPhClr = 
rColor.maEffectColor;
+-            if( rColor.maTextFillColor.isUsed() )
+-                rShape->getShapeStyleRefs()[XML_fontRef].maPhClr = 
rColor.maTextFillColor;
++            if( !rColor.maFillColors.empty() )
++                rShape->getShapeStyleRefs()[XML_fillRef].maPhClr = 
DiagramColor::getColorByIndex(rColor.maFillColors, nCurrIdx);
++            if( !rColor.maLineColors.empty() )
++                rShape->getShapeStyleRefs()[XML_lnRef].maPhClr = 
DiagramColor::getColorByIndex(rColor.maLineColors, nCurrIdx);
++            if( !rColor.maEffectColors.empty() )
++                rShape->getShapeStyleRefs()[XML_effectRef].maPhClr = 
DiagramColor::getColorByIndex(rColor.maEffectColors, nCurrIdx);
++            if( !rColor.maTextFillColors.empty() )
++                rShape->getShapeStyleRefs()[XML_fontRef].maPhClr = 
DiagramColor::getColorByIndex(rColor.maTextFillColors, nCurrIdx);
+         }
+     }
+ 
+diff --git a/oox/source/drawingml/diagram/diagramlayoutatoms.hxx 
b/oox/source/drawingml/diagram/diagramlayoutatoms.hxx
+index 91028971473e..2e4551642389 100644
+--- a/oox/source/drawingml/diagram/diagramlayoutatoms.hxx
++++ b/oox/source/drawingml/diagram/diagramlayoutatoms.hxx
+@@ -260,7 +260,8 @@ public:
+         { mpNodeShapes.push_back(pShape); }
+ 
+     bool setupShape( const ShapePtr& rShape,
+-                     const dgm::Point* pPresNode ) const;
++                     const dgm::Point* pPresNode,
++                     sal_Int32 nCurrIdx ) const;
+ 
+     const LayoutNode* getParentLayoutNode() const;
+ 
+diff --git a/oox/source/drawingml/diagram/layoutatomvisitors.cxx 
b/oox/source/drawingml/diagram/layoutatomvisitors.cxx
+index 4bfadc3affe8..c616ca3a9010 100644
+--- a/oox/source/drawingml/diagram/layoutatomvisitors.cxx
++++ b/oox/source/drawingml/diagram/layoutatomvisitors.cxx
+@@ -73,7 +73,7 @@ void ShapeCreationVisitor::visit(LayoutNode& rAtom)
+     {
+         // reuse existing shape
+         ShapePtr pShape = rAtom.getExistingShape();
+-        if (rAtom.setupShape(pShape, pNewNode))
++        if (rAtom.setupShape(pShape, pNewNode, mnCurrIdx))
+         {
+             pShape->setInternalName(rAtom.getName());
+             rAtom.addNodeShape(pShape);
+@@ -92,7 +92,7 @@ void ShapeCreationVisitor::visit(LayoutNode& rAtom)
+                 "oox.drawingml",
+                 "processing shape type " << 
(pShape->getCustomShapeProperties()->getShapePresetType()));
+ 
+-            if (rAtom.setupShape(pShape, pNewNode))
++            if (rAtom.setupShape(pShape, pNewNode, mnCurrIdx))
+             {
+                 pShape->setInternalName(rAtom.getName());
+                 pCurrParent->addChild(pShape);
+-- 
 2.26.1
 

++++++ bsc1160687-1.diff -> bsc1165849-1.diff ++++++
--- /work/SRC/openSUSE:Factory/libreoffice/bsc1160687-1.diff    2020-05-14 
23:22:40.480703419 +0200
+++ /work/SRC/openSUSE:Factory/.libreoffice.new.3606/bsc1165849-1.diff  
2020-06-03 20:30:59.076893098 +0200
@@ -1,90 +1,132 @@
-From fda60625c9e8bbc0259c790e7da76e608a012451 Mon Sep 17 00:00:00 2001
+From b4ed373a15b1e8d90c94ec7030ee3d3785f7e8f9 Mon Sep 17 00:00:00 2001
 From: Miklos Vajna <vmik...@collabora.com>
-Date: Mon, 27 Apr 2020 10:54:27 +0200
-Subject: [PATCH] DOCX import: handle <wp:positionH
- relativeFrom="insideMargin">
-
-This is the same as page, but it is from-left on odd pages and
-from-right on even pages, i.e. our "mirror on even pages" mode.
-
-(cherry picked from commit fccbb557add457db16e0556c3f0172cafc2cf981)
-
-Conflicts:
-       writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx
-
-Change-Id: I018e0ac165a3d802f64cfc314d5c5f58da3cb580
-Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93003
-Tested-by: Jenkins
-Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>
----
+Date: Fri, 8 May 2020 16:43:22 +0200
+Subject: [PATCH] Related: tdf#129916 svx: improve shadow size of custom shapes
+
+There are multiple problems with this bug document, the first is that
+the shadow primitive got the default position (0) of the owning shape.
+Do it the same way as commit 6454b6336b8de9a4c5899adeab552af6f794cdc4
+(tdf#130058 Import shadow size., 2020-04-14) did for graphic objects.
+
+This requires constructing a transform matrix in
+ViewContactOfSdrObjCustomShape::createViewIndependentPrimitive2DSequence(),
+include position and size in that as a start.
 
-diff --git a/writerfilter/source/dmapper/GraphicHelpers.cxx 
b/writerfilter/source/dmapper/GraphicHelpers.cxx
-index 3339156ae3b2..9168ad51eebd 100644
---- a/writerfilter/source/dmapper/GraphicHelpers.cxx
-+++ b/writerfilter/source/dmapper/GraphicHelpers.cxx
-@@ -102,6 +102,11 @@ void PositionHandler::lcl_attribute( Id aName, Value& 
rVal )
-                         m_nRelation =  text::RelOrientation::PAGE_FRAME;
-                         break;
-
-+                    case 
NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromH_insideMargin:
-+                        m_nRelation = text::RelOrientation::PAGE_FRAME;
-+                        m_bPageToggle = true;
-+                        break;
+(cherry picked from commit e2b0e614e1185c960b3015414919f69a1ed35aa0)
+
+Change-Id: Ia51df555c1984971afe7c52ba3f2658099a4e7b3
+---
+ .../primitive2d/sdrcustomshapeprimitive2d.hxx |  5 ++++-
+ .../viewcontactofsdrobjcustomshape.cxx        | 19 +++++++++++++------
+ .../primitive2d/sdrcustomshapeprimitive2d.cxx | 14 +++++++++++---
+ 3 files changed, 28 insertions(+), 10 deletions(-)
+
+diff --git a/svx/inc/sdr/primitive2d/sdrcustomshapeprimitive2d.hxx 
b/svx/inc/sdr/primitive2d/sdrcustomshapeprimitive2d.hxx
+index 285185684f15..84488906470a 100644
+--- a/svx/inc/sdr/primitive2d/sdrcustomshapeprimitive2d.hxx
++++ b/svx/inc/sdr/primitive2d/sdrcustomshapeprimitive2d.hxx
+@@ -47,6 +47,8 @@ namespace drawinglayer
+             // making exceptions with shadow generation
+             bool const                                        mb3DShape : 1;
+ 
++            basegfx::B2DHomMatrix maTransform;
 +
-                     case 
NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromH_column:
-                         m_nRelation = text::RelOrientation::FRAME;
-                         break;
-diff --git a/writerfilter/source/dmapper/GraphicHelpers.hxx 
b/writerfilter/source/dmapper/GraphicHelpers.hxx
-index dbfe9ddd9f13..d28f2fb50bf7 100644
---- a/writerfilter/source/dmapper/GraphicHelpers.hxx
-+++ b/writerfilter/source/dmapper/GraphicHelpers.hxx
-@@ -37,6 +37,7 @@ public:
-     sal_Int16 orientation() const;
-     sal_Int16 relation() const { return m_nRelation;}
-     sal_Int32 position() const { return m_nPosition;}
-+    bool GetPageToggle() const { return m_bPageToggle; }
-  private:
-     virtual void lcl_attribute( Id aName, Value& rVal ) override;
-     virtual void lcl_sprm( Sprm& rSprm ) override;
-@@ -45,6 +46,7 @@ public:
-     sal_Int32 m_nPosition;
-     std::pair<OUString, OUString>& m_rPositionOffsets;
-     std::pair<OUString, OUString>& m_rAligns;
-+    bool m_bPageToggle = false;
- };
-
- class WrapHandler: public LoggedProperties
-diff --git a/writerfilter/source/dmapper/GraphicImport.cxx 
b/writerfilter/source/dmapper/GraphicImport.cxx
-index 97c807752f60..a2c19383c95d 100644
---- a/writerfilter/source/dmapper/GraphicImport.cxx
-+++ b/writerfilter/source/dmapper/GraphicImport.cxx
-@@ -193,6 +193,7 @@ public:
-
-     sal_Int16 nHoriOrient;
-     sal_Int16 nHoriRelation;
-+    bool bPageToggle = false;
-     sal_Int16 nVertOrient;
-     sal_Int16 nVertRelation;
-     text::WrapTextMode nWrap;
-@@ -343,8 +344,8 @@ public:
-                                                        
uno::makeAny(nLeftPosition));
-         xGraphicObjectProperties->setPropertyValue(getPropertyName( 
PROP_HORI_ORIENT_RELATION ),
-                 uno::makeAny(nHoriRelation));
--        xGraphicObjectProperties->setPropertyValue(getPropertyName( 
PROP_PAGE_TOGGLE ),
--                uno::makeAny(false));
-+        
xGraphicObjectProperties->setPropertyValue(getPropertyName(PROP_PAGE_TOGGLE),
-+                                                   uno::makeAny(bPageToggle));
-         if (!bRelativeOnly)
-             xGraphicObjectProperties->setPropertyValue(getPropertyName( 
PROP_VERT_ORIENT_POSITION),
-                                                        
uno::makeAny(nTopPosition));
-@@ -1089,6 +1090,7 @@ void GraphicImport::lcl_sprm(Sprm& rSprm)
-                 if( !m_pImpl->bUseSimplePos )
+         protected:
+             // local decomposition.
+             virtual void create2DDecomposition(Primitive2DContainer& 
rContainer, const geometry::ViewInformation2D& aViewInformation) const override;
+@@ -57,7 +59,8 @@ namespace drawinglayer
+                 const Primitive2DContainer& rSubPrimitives,
+                 const basegfx::B2DHomMatrix& rTextBox,
+                 bool bWordWrap,
+-                bool b3DShape);
++                bool b3DShape,
++                const basegfx::B2DHomMatrix& rObjectMatrix);
+ 
+             // data access
+             const attribute::SdrShadowTextAttribute& getSdrSTAttribute() 
const { return maSdrSTAttribute; }
+diff --git a/svx/source/sdr/contact/viewcontactofsdrobjcustomshape.cxx 
b/svx/source/sdr/contact/viewcontactofsdrobjcustomshape.cxx
+index 8630b6dd1923..7a5c0487a13f 100644
+--- a/svx/source/sdr/contact/viewcontactofsdrobjcustomshape.cxx
++++ b/svx/source/sdr/contact/viewcontactofsdrobjcustomshape.cxx
+@@ -157,13 +157,13 @@ namespace sdr
+                 basegfx::B2DHomMatrix aTextBoxMatrix;
+                 bool bWordWrap(false);
+ 
++                // take unrotated snap rect as default, then get the
++                // unrotated text box. Rotation needs to be done centered
++                const tools::Rectangle 
aObjectBound(GetCustomShapeObj().GetGeoRect());
++                const basegfx::B2DRange aObjectRange = 
vcl::unotools::b2DRectangleFromRectangle(aObjectBound);
++
+                 if(bHasText)
                  {
-                     m_pImpl->nHoriRelation = pHandler->relation();
-+                    m_pImpl->bPageToggle = pHandler->GetPageToggle();
-                     m_pImpl->nHoriOrient = pHandler->orientation();
-                     m_pImpl->nLeftPosition = pHandler->position();
-
---
+-                    // take unrotated snap rect as default, then get the
+-                    // unrotated text box. Rotation needs to be done centered
+-                    const tools::Rectangle 
aObjectBound(GetCustomShapeObj().GetGeoRect());
+-                    const basegfx::B2DRange aObjectRange = 
vcl::unotools::b2DRectangleFromRectangle(aObjectBound);
+-
+                     // #i101684# get the text range unrotated and absolute to 
the object range
+                     const basegfx::B2DRange 
aTextRange(getCorrectedTextBoundRect());
+ 
+@@ -238,6 +238,12 @@ namespace sdr
+                     bWordWrap = 
GetCustomShapeObj().GetMergedItem(SDRATTR_TEXT_WORDWRAP).GetValue();
+                 }
+ 
++                // fill object matrix
++                const basegfx::B2DHomMatrix 
aObjectMatrix(basegfx::utils::createScaleShearXRotateTranslateB2DHomMatrix(
++                    aObjectRange.getWidth(), aObjectRange.getHeight(),
++                    /*fShearX=*/0, /*fRotate=*/0,
++                    aObjectRange.getMinX(), aObjectRange.getMinY()));
++
+                 // create primitive
+                 const drawinglayer::primitive2d::Primitive2DReference 
xReference(
+                     new drawinglayer::primitive2d::SdrCustomShapePrimitive2D(
+@@ -245,7 +251,8 @@ namespace sdr
+                         xGroup,
+                         aTextBoxMatrix,
+                         bWordWrap,
+-                        b3DShape));
++                        b3DShape,
++                        aObjectMatrix));
+                 xRetval = drawinglayer::primitive2d::Primitive2DContainer { 
xReference };
+             }
+ 
+diff --git a/svx/source/sdr/primitive2d/sdrcustomshapeprimitive2d.cxx 
b/svx/source/sdr/primitive2d/sdrcustomshapeprimitive2d.cxx
+index fb3018f7ff88..3e0350aaf56c 100644
+--- a/svx/source/sdr/primitive2d/sdrcustomshapeprimitive2d.cxx
++++ b/svx/source/sdr/primitive2d/sdrcustomshapeprimitive2d.cxx
+@@ -68,7 +68,13 @@ namespace drawinglayer
+                 // shadow will be correct (using ColorModifierStack), but 
expensive.
+                 if(!get3DShape())
+                 {
+-                    aRetval = createEmbeddedShadowPrimitive(aRetval, 
getSdrSTAttribute().getShadow());
++                    basegfx::B2DTuple aScale;
++                    basegfx::B2DTuple aTranslate;
++                    double fRotate = 0;
++                    double fShearX = 0;
++                    maTransform.decompose(aScale, aTranslate, fRotate, 
fShearX);
++                    aRetval = createEmbeddedShadowPrimitive(aRetval, 
getSdrSTAttribute().getShadow(),
++                                                            
aTranslate.getX(), aTranslate.getY());
+                 }
+             }
+ 
+@@ -80,13 +86,15 @@ namespace drawinglayer
+             const Primitive2DContainer& rSubPrimitives,
+             const basegfx::B2DHomMatrix& rTextBox,
+             bool bWordWrap,
+-            bool b3DShape)
++            bool b3DShape,
++            const basegfx::B2DHomMatrix& rTransform)
+         :   BufferedDecompositionPrimitive2D(),
+             maSdrSTAttribute(rSdrSTAttribute),
+             maSubPrimitives(rSubPrimitives),
+             maTextBox(rTextBox),
+             mbWordWrap(bWordWrap),
+-            mb3DShape(b3DShape)
++            mb3DShape(b3DShape),
++            maTransform(rTransform)
+         {
+         }
+ 
+-- 
 2.26.1
 

++++++ bsc1160687-1.diff -> bsc1165849-2.diff ++++++
--- /work/SRC/openSUSE:Factory/libreoffice/bsc1160687-1.diff    2020-05-14 
23:22:40.480703419 +0200
+++ /work/SRC/openSUSE:Factory/.libreoffice.new.3606/bsc1165849-2.diff  
2020-06-03 20:31:00.444897257 +0200
@@ -1,90 +1,141 @@
-From fda60625c9e8bbc0259c790e7da76e608a012451 Mon Sep 17 00:00:00 2001
+From f9dcb113bc2f81ef6abd2044d8512cd4e02f176c Mon Sep 17 00:00:00 2001
 From: Miklos Vajna <vmik...@collabora.com>
-Date: Mon, 27 Apr 2020 10:54:27 +0200
-Subject: [PATCH] DOCX import: handle <wp:positionH
- relativeFrom="insideMargin">
+Date: Mon, 11 May 2020 10:10:34 +0200
+Subject: [PATCH] Related: tdf#129916 svx: clean up duplicated matrix decompose
+ for shadow size
+
+Pass the object's transform matrix to createEmbeddedShadowPrimitive(),
+this allows decomposing it only at a single place. Also, this will allow
+creating the shadow based on the object size.
 
-This is the same as page, but it is from-left on odd pages and
-from-right on even pages, i.e. our "mirror on even pages" mode.
-
-(cherry picked from commit fccbb557add457db16e0556c3f0172cafc2cf981)
+(cherry picked from commit 4ba368a3dd793bdc703858f358e1af7112decadd)
 
 Conflicts:
-       writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx
+       svx/inc/sdr/primitive2d/sdrdecompositiontools.hxx
+       svx/source/sdr/primitive2d/sdrdecompositiontools.cxx
 
-Change-Id: I018e0ac165a3d802f64cfc314d5c5f58da3cb580
-Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93003
-Tested-by: Jenkins
-Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>
+Change-Id: I8d8bf59934b00e13cda1da0398910aa9f1ce3c59
 ---
-
-diff --git a/writerfilter/source/dmapper/GraphicHelpers.cxx 
b/writerfilter/source/dmapper/GraphicHelpers.cxx
-index 3339156ae3b2..9168ad51eebd 100644
---- a/writerfilter/source/dmapper/GraphicHelpers.cxx
-+++ b/writerfilter/source/dmapper/GraphicHelpers.cxx
-@@ -102,6 +102,11 @@ void PositionHandler::lcl_attribute( Id aName, Value& 
rVal )
-                         m_nRelation =  text::RelOrientation::PAGE_FRAME;
-                         break;
-
-+                    case 
NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromH_insideMargin:
-+                        m_nRelation = text::RelOrientation::PAGE_FRAME;
-+                        m_bPageToggle = true;
-+                        break;
-+
-                     case 
NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromH_column:
-                         m_nRelation = text::RelOrientation::FRAME;
-                         break;
-diff --git a/writerfilter/source/dmapper/GraphicHelpers.hxx 
b/writerfilter/source/dmapper/GraphicHelpers.hxx
-index dbfe9ddd9f13..d28f2fb50bf7 100644
---- a/writerfilter/source/dmapper/GraphicHelpers.hxx
-+++ b/writerfilter/source/dmapper/GraphicHelpers.hxx
-@@ -37,6 +37,7 @@ public:
-     sal_Int16 orientation() const;
-     sal_Int16 relation() const { return m_nRelation;}
-     sal_Int32 position() const { return m_nPosition;}
-+    bool GetPageToggle() const { return m_bPageToggle; }
-  private:
-     virtual void lcl_attribute( Id aName, Value& rVal ) override;
-     virtual void lcl_sprm( Sprm& rSprm ) override;
-@@ -45,6 +46,7 @@ public:
-     sal_Int32 m_nPosition;
-     std::pair<OUString, OUString>& m_rPositionOffsets;
-     std::pair<OUString, OUString>& m_rAligns;
-+    bool m_bPageToggle = false;
- };
-
- class WrapHandler: public LoggedProperties
-diff --git a/writerfilter/source/dmapper/GraphicImport.cxx 
b/writerfilter/source/dmapper/GraphicImport.cxx
-index 97c807752f60..a2c19383c95d 100644
---- a/writerfilter/source/dmapper/GraphicImport.cxx
-+++ b/writerfilter/source/dmapper/GraphicImport.cxx
-@@ -193,6 +193,7 @@ public:
-
-     sal_Int16 nHoriOrient;
-     sal_Int16 nHoriRelation;
-+    bool bPageToggle = false;
-     sal_Int16 nVertOrient;
-     sal_Int16 nVertRelation;
-     text::WrapTextMode nWrap;
-@@ -343,8 +344,8 @@ public:
-                                                        
uno::makeAny(nLeftPosition));
-         xGraphicObjectProperties->setPropertyValue(getPropertyName( 
PROP_HORI_ORIENT_RELATION ),
-                 uno::makeAny(nHoriRelation));
--        xGraphicObjectProperties->setPropertyValue(getPropertyName( 
PROP_PAGE_TOGGLE ),
--                uno::makeAny(false));
-+        
xGraphicObjectProperties->setPropertyValue(getPropertyName(PROP_PAGE_TOGGLE),
-+                                                   uno::makeAny(bPageToggle));
-         if (!bRelativeOnly)
-             xGraphicObjectProperties->setPropertyValue(getPropertyName( 
PROP_VERT_ORIENT_POSITION),
-                                                        
uno::makeAny(nTopPosition));
-@@ -1089,6 +1090,7 @@ void GraphicImport::lcl_sprm(Sprm& rSprm)
-                 if( !m_pImpl->bUseSimplePos )
+ .../svx/sdr/primitive2d/sdrdecompositiontools.hxx   |  4 ++--
+ .../sdr/primitive2d/sdrcustomshapeprimitive2d.cxx   |  7 +------
+ .../sdr/primitive2d/sdrdecompositiontools.cxx       | 13 +++++++++----
+ svx/source/sdr/primitive2d/sdrgrafprimitive2d.cxx   |  8 +-------
+ 4 files changed, 13 insertions(+), 19 deletions(-)
+
+diff --git a/include/svx/sdr/primitive2d/sdrdecompositiontools.hxx 
b/include/svx/sdr/primitive2d/sdrdecompositiontools.hxx
+index 844da339c111..8635981dc0ae 100644
+--- a/include/svx/sdr/primitive2d/sdrdecompositiontools.hxx
++++ b/include/svx/sdr/primitive2d/sdrdecompositiontools.hxx
+@@ -21,6 +21,7 @@
+ #define INCLUDED_SVX_SDR_PRIMITIVE2D_SDRDECOMPOSITIONTOOLS_HXX
+ 
+ #include <drawinglayer/primitive2d/baseprimitive2d.hxx>
++#include <basegfx/matrix/b2dhommatrix.hxx>
+ 
+ #include <svx/svxdllapi.h>
+ 
+@@ -72,8 +73,7 @@ namespace drawinglayer
+         Primitive2DContainer SVX_DLLPUBLIC createEmbeddedShadowPrimitive(
+             const Primitive2DContainer& rContent,
+             const attribute::SdrShadowAttribute& rShadow,
+-            sal_Int32 nGraphicTranslateX = 0,
+-            sal_Int32 nGraphicTranslateY = 0);
++            const basegfx::B2DHomMatrix& rObjectMatrix = 
basegfx::B2DHomMatrix());
+ 
+     } // end of namespace primitive2d
+ } // end of namespace drawinglayer
+diff --git a/svx/source/sdr/primitive2d/sdrcustomshapeprimitive2d.cxx 
b/svx/source/sdr/primitive2d/sdrcustomshapeprimitive2d.cxx
+index 3e0350aaf56c..2334b1d7fef6 100644
+--- a/svx/source/sdr/primitive2d/sdrcustomshapeprimitive2d.cxx
++++ b/svx/source/sdr/primitive2d/sdrcustomshapeprimitive2d.cxx
+@@ -68,13 +68,8 @@ namespace drawinglayer
+                 // shadow will be correct (using ColorModifierStack), but 
expensive.
+                 if(!get3DShape())
                  {
-                     m_pImpl->nHoriRelation = pHandler->relation();
-+                    m_pImpl->bPageToggle = pHandler->GetPageToggle();
-                     m_pImpl->nHoriOrient = pHandler->orientation();
-                     m_pImpl->nLeftPosition = pHandler->position();
-
---
+-                    basegfx::B2DTuple aScale;
+-                    basegfx::B2DTuple aTranslate;
+-                    double fRotate = 0;
+-                    double fShearX = 0;
+-                    maTransform.decompose(aScale, aTranslate, fRotate, 
fShearX);
+                     aRetval = createEmbeddedShadowPrimitive(aRetval, 
getSdrSTAttribute().getShadow(),
+-                                                            
aTranslate.getX(), aTranslate.getY());
++                                                            maTransform);
+                 }
+             }
+ 
+diff --git a/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx 
b/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx
+index d6822bfd1519..42c0bb60ecc9 100644
+--- a/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx
++++ b/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx
+@@ -44,6 +44,7 @@
+ #include <drawinglayer/attribute/sdrlineattribute.hxx>
+ #include <drawinglayer/attribute/sdrlinestartendattribute.hxx>
+ #include <drawinglayer/attribute/sdrshadowattribute.hxx>
++#include <sal/log.hxx>
+ 
+ 
+ using namespace com::sun::star;
+@@ -482,8 +483,7 @@ namespace drawinglayer
+         Primitive2DContainer createEmbeddedShadowPrimitive(
+             const Primitive2DContainer& rContent,
+             const attribute::SdrShadowAttribute& rShadow,
+-            sal_Int32 nGraphicTranslateX,
+-            sal_Int32 nGraphicTranslateY)
++            const basegfx::B2DHomMatrix& rObjectMatrix)
+         {
+             if(!rContent.empty())
+             {
+@@ -493,10 +493,15 @@ namespace drawinglayer
+                 {
+                     if(rShadow.getSize().getX() != 100000)
+                     {
++                        basegfx::B2DTuple aScale;
++                        basegfx::B2DTuple aTranslate;
++                        double fRotate = 0;
++                        double fShearX = 0;
++                        rObjectMatrix.decompose(aScale, aTranslate, fRotate, 
fShearX);
+                         // Scale the shadow
+-                        aShadowOffset.translate(-nGraphicTranslateX, 
-nGraphicTranslateY);
++                        aShadowOffset.translate(-aTranslate.getX(), 
-aTranslate.getY());
+                         aShadowOffset.scale(rShadow.getSize().getX() * 
0.00001, rShadow.getSize().getY() * 0.00001);
+-                        aShadowOffset.translate(nGraphicTranslateX, 
nGraphicTranslateY);
++                        aShadowOffset.translate(aTranslate.getX(), 
aTranslate.getY());
+                     }
+ 
+                     aShadowOffset.translate(rShadow.getOffset().getX(), 
rShadow.getOffset().getY());
+diff --git a/svx/source/sdr/primitive2d/sdrgrafprimitive2d.cxx 
b/svx/source/sdr/primitive2d/sdrgrafprimitive2d.cxx
+index 676b26183b09..be25a1278e64 100644
+--- a/svx/source/sdr/primitive2d/sdrgrafprimitive2d.cxx
++++ b/svx/source/sdr/primitive2d/sdrgrafprimitive2d.cxx
+@@ -35,7 +35,6 @@ namespace drawinglayer
+         void SdrGrafPrimitive2D::create2DDecomposition(Primitive2DContainer& 
rContainer, const geometry::ViewInformation2D& /*aViewInformation*/) const
+         {
+             Primitive2DContainer  aRetval;
+-            basegfx::B2DTuple aTranslateGrf;
+ 
+             // create unit outline polygon
+             const basegfx::B2DPolygon& 
aUnitOutline(basegfx::utils::createUnitPolygon());
+@@ -62,10 +61,6 @@ namespace drawinglayer
+                         getTransform(),
+                         getGraphicObject(),
+                         getGraphicAttr()));
+-                double fRotate = 0;
+-                double fShearX = 0;
+-                basegfx::B2DTuple aScaleGrf;
+-                getTransform().decompose(aScaleGrf, aTranslateGrf, fRotate, 
fShearX);
+                 aRetval.push_back(xGraphicContentPrimitive);
+             }
+ 
+@@ -127,8 +122,7 @@ namespace drawinglayer
+                 aRetval = createEmbeddedShadowPrimitive(
+                     aRetval,
+                     getSdrLFSTAttribute().getShadow(),
+-                    aTranslateGrf.getX(),
+-                    aTranslateGrf.getY());
++                    getTransform());
+             }
+ 
+             rContainer.insert(rContainer.end(), aRetval.begin(), 
aRetval.end());
+-- 
 2.26.1
 

++++++ bsc1160687-1.diff -> bsc1165849-3.diff ++++++
--- /work/SRC/openSUSE:Factory/libreoffice/bsc1160687-1.diff    2020-05-14 
23:22:40.480703419 +0200
+++ /work/SRC/openSUSE:Factory/.libreoffice.new.3606/bsc1165849-3.diff  
2020-06-03 20:31:00.960898825 +0200
@@ -1,90 +1,173 @@
-From fda60625c9e8bbc0259c790e7da76e608a012451 Mon Sep 17 00:00:00 2001
+From 74f3a7b9161ede870fbe2642158601ea3eaa073e Mon Sep 17 00:00:00 2001
 From: Miklos Vajna <vmik...@collabora.com>
-Date: Mon, 27 Apr 2020 10:54:27 +0200
-Subject: [PATCH] DOCX import: handle <wp:positionH
- relativeFrom="insideMargin">
+Date: Wed, 20 Nov 2019 10:18:37 +0100
+Subject: [PATCH] drawinglayer: handle more primitives in the xml dump
 
-This is the same as page, but it is from-left on odd pages and
-from-right on even pages, i.e. our "mirror on even pages" mode.
+In preparation of writing a test for semi-transparent shape text.
 
-(cherry picked from commit fccbb557add457db16e0556c3f0172cafc2cf981)
+Change-Id: I2dac94a6cd9da48de9a5e407ceab78fb8be933d7
+Reviewed-on: https://gerrit.libreoffice.org/83264
+Reviewed-by: Miklos Vajna <vmik...@collabora.com>
+Tested-by: Jenkins
+(cherry picked from commit b6d794e14e65697fbf47a5b425d9d264e26e0161)
+
+tdf#129916 svx: fix origin of scaled shadow
+
+We assumed that the top left corner is the origin for scaling, but that
+is not necessarily the case. The intention is that the shadow direction
+can be determined from its x and y offset, and the origin is the
+opposite corner of the shape.
+
+(cherry picked from commit e21d522dddce2590ed435890ae8d5fe39658a71a)
 
 Conflicts:
-       writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx
+       svx/CppunitTest_svx_unit.mk
 
-Change-Id: I018e0ac165a3d802f64cfc314d5c5f58da3cb580
-Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93003
-Tested-by: Jenkins
-Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>
+Change-Id: I6759302767d20739b6e2be79d379740dd06f70f5
 ---
+ .../source/tools/primitive2dxmldump.cxx       |  83 ++++++++++++++-
+ svx/qa/unit/sdr.cxx                           |  96 ++++++++++++++++++
+ .../sdr/primitive2d/sdrdecompositiontools.cxx |  14 ++-
+ 4 files changed, 189 insertions(+), 4 deletions(-)
+ create mode 100644 svx/qa/unit/data/shadow-scale-origin.pptx
+ create mode 100644 svx/qa/unit/sdr.cxx
+
+diff --git a/drawinglayer/source/tools/primitive2dxmldump.cxx 
b/drawinglayer/source/tools/primitive2dxmldump.cxx
+index 65170ae096f2..64117de878bd 100644
+--- a/drawinglayer/source/tools/primitive2dxmldump.cxx
++++ b/drawinglayer/source/tools/primitive2dxmldump.cxx
+@@ -34,6 +34,7 @@
+
+ #include <basegfx/polygon/b2dpolypolygontools.hxx>
+ #include <basegfx/polygon/b2dpolygontools.hxx>
++#include <svx/sdr/primitive2d/svx_primitivetypes2d.hxx>
+
+ using namespace drawinglayer::primitive2d;
+
+@@ -155,7 +156,7 @@ void Primitive2dXmlDump::decomposeAndWrite(
+         if (!pBasePrimitive)
+             continue;
+         sal_uInt32 nId = pBasePrimitive->getPrimitive2DID();
+-        if (maFilter[nId])
++        if (nId < maFilter.size() && maFilter[nId])
+             continue;
+
+         OUString sCurrentElementTag = 
drawinglayer::primitive2d::idToString(nId);
+@@ -336,9 +337,87 @@ void Primitive2dXmlDump::decomposeAndWrite(
+
+             break;
+
++            case PRIMITIVE2D_ID_SDRRECTANGLEPRIMITIVE2D:
++            {
++                // SdrRectanglePrimitive2D is private to us.
++                rWriter.startElement("sdrrectangle");
++                drawinglayer::primitive2d::Primitive2DContainer 
aPrimitiveContainer;
++                pBasePrimitive->get2DDecomposition(aPrimitiveContainer,
++                                                   
drawinglayer::geometry::ViewInformation2D());
++                decomposeAndWrite(aPrimitiveContainer, rWriter);
++                rWriter.endElement();
++                break;
++            }
++
++            case PRIMITIVE2D_ID_SDRBLOCKTEXTPRIMITIVE2D:
++            {
++                // SdrBlockTextPrimitive2D is private to us.
++                rWriter.startElement("sdrblocktext");
++                drawinglayer::primitive2d::Primitive2DContainer 
aPrimitiveContainer;
++                pBasePrimitive->get2DDecomposition(aPrimitiveContainer,
++                                                   
drawinglayer::geometry::ViewInformation2D());
++                decomposeAndWrite(aPrimitiveContainer, rWriter);
++                rWriter.endElement();
++                break;
++            }
++
++            case PRIMITIVE2D_ID_TEXTHIERARCHYBLOCKPRIMITIVE2D:
++            {
++                // TextHierarchyBlockPrimitive2D.
++                rWriter.startElement("texthierarchyblock");
++                drawinglayer::primitive2d::Primitive2DContainer 
aPrimitiveContainer;
++                pBasePrimitive->get2DDecomposition(aPrimitiveContainer,
++                                                   
drawinglayer::geometry::ViewInformation2D());
++                decomposeAndWrite(aPrimitiveContainer, rWriter);
++                rWriter.endElement();
++                break;
++            }
++
++            case PRIMITIVE2D_ID_TEXTHIERARCHYPARAGRAPHPRIMITIVE2D:
++            {
++                // TextHierarchyParagraphPrimitive2D.
++                rWriter.startElement("texthierarchyparagraph");
++                drawinglayer::primitive2d::Primitive2DContainer 
aPrimitiveContainer;
++                pBasePrimitive->get2DDecomposition(aPrimitiveContainer,
++                                                   
drawinglayer::geometry::ViewInformation2D());
++                decomposeAndWrite(aPrimitiveContainer, rWriter);
++                rWriter.endElement();
++                break;
++            }
++
++            case PRIMITIVE2D_ID_TEXTHIERARCHYLINEPRIMITIVE2D:
++            {
++                // TextHierarchyLinePrimitive2D.
++                rWriter.startElement("texthierarchyline");
++                drawinglayer::primitive2d::Primitive2DContainer 
aPrimitiveContainer;
++                pBasePrimitive->get2DDecomposition(aPrimitiveContainer,
++                                                   
drawinglayer::geometry::ViewInformation2D());
++                decomposeAndWrite(aPrimitiveContainer, rWriter);
++                rWriter.endElement();
++                break;
++            }
++
++            case PRIMITIVE2D_ID_SHADOWPRIMITIVE2D:
++            {
++                // ShadowPrimitive2D.
++                rWriter.startElement("shadow");
++                drawinglayer::primitive2d::Primitive2DContainer 
aPrimitiveContainer;
++                pBasePrimitive->get2DDecomposition(aPrimitiveContainer,
++                                                   
drawinglayer::geometry::ViewInformation2D());
++                decomposeAndWrite(aPrimitiveContainer, rWriter);
++                rWriter.endElement();
++                break;
++            }
++
+             default:
+             {
+-                rWriter.element(OUStringToOString(sCurrentElementTag, 
RTL_TEXTENCODING_UTF8));
++                rWriter.startElement("unhandled");
++                rWriter.attribute("id", OUStringToOString(sCurrentElementTag, 
RTL_TEXTENCODING_UTF8));
++                drawinglayer::primitive2d::Primitive2DContainer 
aPrimitiveContainer;
++                pBasePrimitive->get2DDecomposition(aPrimitiveContainer,
++                                                   
drawinglayer::geometry::ViewInformation2D());
++                decomposeAndWrite(aPrimitiveContainer, rWriter);
++                rWriter.endElement();
+             }
+             break;
+         }
+diff --git a/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx 
b/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx
+index 42c0bb60ecc9..48575d3b4917 100644
+--- a/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx
++++ b/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx
+@@ -499,9 +499,19 @@ namespace drawinglayer
+                         double fShearX = 0;
+                         rObjectMatrix.decompose(aScale, aTranslate, fRotate, 
fShearX);
+                         // Scale the shadow
+-                        aShadowOffset.translate(-aTranslate.getX(), 
-aTranslate.getY());
++                        double nTranslateX = aTranslate.getX();
++                        double nTranslateY = aTranslate.getY();
++
++                        // The origin for scaling is the top left corner by 
default. A negative
++                        // shadow offset changes the origin.
++                        if (rShadow.getOffset().getX() < 0)
++                            nTranslateX += aScale.getX();
++                        if (rShadow.getOffset().getY() < 0)
++                            nTranslateY += aScale.getY();
++
++                        aShadowOffset.translate(-nTranslateX, -nTranslateY);
+                         aShadowOffset.scale(rShadow.getSize().getX() * 
0.00001, rShadow.getSize().getY() * 0.00001);
+-                        aShadowOffset.translate(aTranslate.getX(), 
aTranslate.getY());
++                        aShadowOffset.translate(nTranslateX, nTranslateY);
+                     }
 
-diff --git a/writerfilter/source/dmapper/GraphicHelpers.cxx 
b/writerfilter/source/dmapper/GraphicHelpers.cxx
-index 3339156ae3b2..9168ad51eebd 100644
---- a/writerfilter/source/dmapper/GraphicHelpers.cxx
-+++ b/writerfilter/source/dmapper/GraphicHelpers.cxx
-@@ -102,6 +102,11 @@ void PositionHandler::lcl_attribute( Id aName, Value& 
rVal )
-                         m_nRelation =  text::RelOrientation::PAGE_FRAME;
-                         break;
-
-+                    case 
NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromH_insideMargin:
-+                        m_nRelation = text::RelOrientation::PAGE_FRAME;
-+                        m_bPageToggle = true;
-+                        break;
-+
-                     case 
NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromH_column:
-                         m_nRelation = text::RelOrientation::FRAME;
-                         break;
-diff --git a/writerfilter/source/dmapper/GraphicHelpers.hxx 
b/writerfilter/source/dmapper/GraphicHelpers.hxx
-index dbfe9ddd9f13..d28f2fb50bf7 100644
---- a/writerfilter/source/dmapper/GraphicHelpers.hxx
-+++ b/writerfilter/source/dmapper/GraphicHelpers.hxx
-@@ -37,6 +37,7 @@ public:
-     sal_Int16 orientation() const;
-     sal_Int16 relation() const { return m_nRelation;}
-     sal_Int32 position() const { return m_nPosition;}
-+    bool GetPageToggle() const { return m_bPageToggle; }
-  private:
-     virtual void lcl_attribute( Id aName, Value& rVal ) override;
-     virtual void lcl_sprm( Sprm& rSprm ) override;
-@@ -45,6 +46,7 @@ public:
-     sal_Int32 m_nPosition;
-     std::pair<OUString, OUString>& m_rPositionOffsets;
-     std::pair<OUString, OUString>& m_rAligns;
-+    bool m_bPageToggle = false;
- };
-
- class WrapHandler: public LoggedProperties
-diff --git a/writerfilter/source/dmapper/GraphicImport.cxx 
b/writerfilter/source/dmapper/GraphicImport.cxx
-index 97c807752f60..a2c19383c95d 100644
---- a/writerfilter/source/dmapper/GraphicImport.cxx
-+++ b/writerfilter/source/dmapper/GraphicImport.cxx
-@@ -193,6 +193,7 @@ public:
-
-     sal_Int16 nHoriOrient;
-     sal_Int16 nHoriRelation;
-+    bool bPageToggle = false;
-     sal_Int16 nVertOrient;
-     sal_Int16 nVertRelation;
-     text::WrapTextMode nWrap;
-@@ -343,8 +344,8 @@ public:
-                                                        
uno::makeAny(nLeftPosition));
-         xGraphicObjectProperties->setPropertyValue(getPropertyName( 
PROP_HORI_ORIENT_RELATION ),
-                 uno::makeAny(nHoriRelation));
--        xGraphicObjectProperties->setPropertyValue(getPropertyName( 
PROP_PAGE_TOGGLE ),
--                uno::makeAny(false));
-+        
xGraphicObjectProperties->setPropertyValue(getPropertyName(PROP_PAGE_TOGGLE),
-+                                                   uno::makeAny(bPageToggle));
-         if (!bRelativeOnly)
-             xGraphicObjectProperties->setPropertyValue(getPropertyName( 
PROP_VERT_ORIENT_POSITION),
-                                                        
uno::makeAny(nTopPosition));
-@@ -1089,6 +1090,7 @@ void GraphicImport::lcl_sprm(Sprm& rSprm)
-                 if( !m_pImpl->bUseSimplePos )
-                 {
-                     m_pImpl->nHoriRelation = pHandler->relation();
-+                    m_pImpl->bPageToggle = pHandler->GetPageToggle();
-                     m_pImpl->nHoriOrient = pHandler->orientation();
-                     m_pImpl->nLeftPosition = pHandler->position();
-
+                     aShadowOffset.translate(rShadow.getOffset().getX(), 
rShadow.getOffset().getY());
 --
 2.26.1
 

++++++ libreoffice-6.4.3.2.tar.xz -> libreoffice-6.4.4.2.tar.xz ++++++
/work/SRC/openSUSE:Factory/libreoffice/libreoffice-6.4.3.2.tar.xz 
/work/SRC/openSUSE:Factory/.libreoffice.new.3606/libreoffice-6.4.4.2.tar.xz 
differ: char 27, line 1

++++++ libreoffice-help-6.4.3.2.tar.xz -> libreoffice-help-6.4.4.2.tar.xz ++++++
/work/SRC/openSUSE:Factory/libreoffice/libreoffice-help-6.4.3.2.tar.xz 
/work/SRC/openSUSE:Factory/.libreoffice.new.3606/libreoffice-help-6.4.4.2.tar.xz
 differ: char 27, line 1

++++++ libreoffice-translations-6.4.3.2.tar.xz -> 
libreoffice-translations-6.4.4.2.tar.xz ++++++
/work/SRC/openSUSE:Factory/libreoffice/libreoffice-translations-6.4.3.2.tar.xz 
/work/SRC/openSUSE:Factory/.libreoffice.new.3606/libreoffice-translations-6.4.4.2.tar.xz
 differ: char 26, line 1




Reply via email to