configure.ac                                      |    2 
 distro-configs/CODAWindows.conf                   |   71 ++++++++++------
 distro-configs/CPLinuxQtFlatpak.conf              |   11 +-
 distro-configs/CPMacOS-LOKit.conf                 |   85 ++++++++++++--------
 include/oox/export/chartexport.hxx                |    7 -
 oox/source/drawingml/shape.cxx                    |    3 
 oox/source/export/chartexport.cxx                 |   24 ++---
 oox/source/export/drawingml.cxx                   |   26 ++++--
 oox/source/export/shapes.cxx                      |   21 +++++
 sc/source/filter/excel/xestyle.cxx                |    2 
 sc/source/filter/excel/xistyle.cxx                |    4 
 sd/source/filter/eppt/pptx-animations-nodectx.cxx |   37 +++++---
 sd/source/filter/eppt/pptx-animations-nodectx.hxx |    8 +
 sd/source/filter/eppt/pptx-animations.cxx         |   29 +++++-
 sw/CppunitTest_sw_core_doc.mk                     |    1 
 sw/qa/core/doc/data/bad-heading-indent.docx       |binary
 sw/qa/core/doc/number.cxx                         |   51 ++++++++++++
 sw/qa/uitest/data/reject-all-overlap.docx         |binary
 sw/qa/uitest/writer_tests/trackedChanges.py       |   17 ++++
 sw/source/core/doc/number.cxx                     |    3 
 sw/source/filter/ww8/docxattributeoutput.cxx      |   92 +++++++++++-----------
 sw/source/ui/fldui/fldedt.cxx                     |    4 
 sw/source/ui/misc/outline.cxx                     |    8 +
 sw/source/uibase/misc/redlndlg.cxx                |   22 -----
 24 files changed, 347 insertions(+), 181 deletions(-)

New commits:
commit 2f57ca9a4ca0f521ca49019ef838b044677b8544
Author:     Aron Budea <[email protected]>
AuthorDate: Sat Dec 20 03:15:22 2025 +1100
Commit:     Andras Timar <[email protected]>
CommitDate: Sat Dec 20 11:01:22 2025 +0100

    Table styles: Typo in exported XML makes file invalid
    
    Affected eg. forum-mso-de-130905.xlsx
    
    Since fc38794991dc85de1821c527b3e4cdfc71026a75.
    
    Change-Id: I267644a6eb6567416ed26592ce4d164352820d26
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195926
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Reviewed-by: Aron Budea <[email protected]>

diff --git a/sc/source/filter/excel/xestyle.cxx 
b/sc/source/filter/excel/xestyle.cxx
index ce5ffc32f97b..9a0706d6f7bf 100644
--- a/sc/source/filter/excel/xestyle.cxx
+++ b/sc/source/filter/excel/xestyle.cxx
@@ -3361,7 +3361,7 @@ XclExpXmlTableStyle::XclExpXmlTableStyle(const 
XclExpRoot& rRoot, const ScTableS
     }
 }
 
-const std::map<ScTableStyleElement, const char*> aTableStyleElementToOOXML = { 
{ScTableStyleElement::WholeTable, "wholeTable"}, 
{ScTableStyleElement::FirstColumnStripe, "firstColumnStripe"}, 
{ScTableStyleElement::SecondColumnStripe, "secondColumnStripe"}, 
{ScTableStyleElement::FirstRowStripe, "firstRowStripe"}, 
{ScTableStyleElement::SecondRowStripe, "secondRowStripe"}, 
{ScTableStyleElement::LastColumn, "lastColumn"}, 
{ScTableStyleElement::FirstColumn, "firstColumn"}, 
{ScTableStyleElement::HeaderRow, "headerRow"}, {ScTableStyleElement::TotalRow, 
"totalRow"}, {ScTableStyleElement::FirstHeaderCell, "firstHeaderCell"}, 
{ScTableStyleElement::LastHeaderCell, "LastHeaderCell"} };
+const std::map<ScTableStyleElement, const char*> aTableStyleElementToOOXML = { 
{ScTableStyleElement::WholeTable, "wholeTable"}, 
{ScTableStyleElement::FirstColumnStripe, "firstColumnStripe"}, 
{ScTableStyleElement::SecondColumnStripe, "secondColumnStripe"}, 
{ScTableStyleElement::FirstRowStripe, "firstRowStripe"}, 
{ScTableStyleElement::SecondRowStripe, "secondRowStripe"}, 
{ScTableStyleElement::LastColumn, "lastColumn"}, 
{ScTableStyleElement::FirstColumn, "firstColumn"}, 
{ScTableStyleElement::HeaderRow, "headerRow"}, {ScTableStyleElement::TotalRow, 
"totalRow"}, {ScTableStyleElement::FirstHeaderCell, "firstHeaderCell"}, 
{ScTableStyleElement::LastHeaderCell, "lastHeaderCell"} };
 
 void XclExpXmlTableStyle::SaveXml( XclExpXmlStream& rStrm )
 {
commit 3dc8e43c4cdbe191f19593778ff0e4313cf57f49
Author:     Karthik Godha <[email protected]>
AuthorDate: Thu Dec 18 14:36:03 2025 +0530
Commit:     Andras Timar <[email protected]>
CommitDate: Sat Dec 20 11:01:22 2025 +0100

    Sanitize font size read from XLS
    
    This is related to commit 28273e586b398e2ce181c4ce9e740949fad11876
    
    Change-Id: I182c27b6a9f796bf949246a2038c318dec755c33
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195831
    Reviewed-by: Michael Stahl <[email protected]>
    Tested-by: Jenkins CollaboraOffice <[email protected]>

diff --git a/sc/source/filter/excel/xistyle.cxx 
b/sc/source/filter/excel/xistyle.cxx
index c079c7ac9562..b42bfeed12a3 100644
--- a/sc/source/filter/excel/xistyle.cxx
+++ b/sc/source/filter/excel/xistyle.cxx
@@ -272,6 +272,10 @@ void XclImpFont::ReadFont( XclImpStream& rStrm )
             DBG_ERROR_BIFF();
             return;
     }
+
+    constexpr sal_uInt16 MIN_FONT_HEIGHT_1_20th_PT = 20;
+    maData.mnHeight = std::max(maData.mnHeight, MIN_FONT_HEIGHT_1_20th_PT);
+
     GuessScriptType();
     SetAllUsedFlags( true );
 }
commit 484eb0ce09ffecea0d39a2b094ec15c9d41d7d93
Author:     Karthik Godha <[email protected]>
AuthorDate: Thu Dec 18 16:45:21 2025 +0530
Commit:     Andras Timar <[email protected]>
CommitDate: Sat Dec 20 11:01:22 2025 +0100

    tdf#170035:PPTX->PPTX invalid values in guide-list
    
    During PPTX export internal equation names are exported as guide values
    in guide-list.
    
    Change-Id: I179b47b57057fabf76e85b1c1d4aa62e0e3154d2
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195837
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Reviewed-by: Michael Stahl <[email protected]>

diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx
index a3fd38496787..77e7f25a4944 100644
--- a/oox/source/export/drawingml.cxx
+++ b/oox/source/export/drawingml.cxx
@@ -4914,6 +4914,10 @@ void prepareTextArea(const EnhancedCustomShape2d& 
rEnhancedCustomShape2d,
 
 OUString GetFormula(const OUString& sEquation, const OUString& sReplace, const 
OUString& sNewStr)
 {
+    // 'logheight' and `logwidth` are only used for calculating shape's 
rectangle
+    if (sEquation == "logheight" || sEquation == "logwidth")
+        return OUString();
+
     OUString sFormula = sEquation;
     size_t nPos = sFormula.indexOf(sReplace);
     if (nPos != std::string::npos)
@@ -4944,18 +4948,24 @@ void prepareGluePoints(std::vector<Guide>& rGuideList,
             {
                 Guide aGuideX;
                 aGuideX.sName = "GluePoint"_ostr + OString::number(nIndex) + 
"X";
-                aGuideX.sFormula
-                    = (bIsOOXML && nIdx1 >= 0 && nIdx1 < 
aEquations.getLength())
-                          ? GetFormula(aEquations[nIdx1], "*logwidth/", " w 
").toUtf8()
-                          : "*/ " + OString::number(nIdx1) + " w " + 
OString::number(nWidth);
+
+                if (bIsOOXML && nIdx1 >= 0 && nIdx1 < aEquations.getLength())
+                    aGuideX.sFormula = GetFormula(aEquations[nIdx1], 
"*logwidth/", " w ").toUtf8();
+                if (aGuideX.sFormula.isEmpty())
+                    aGuideX.sFormula
+                        = "*/ " + OString::number(nIdx1) + " w " + 
OString::number(nWidth);
+
                 rGuideList.push_back(aGuideX);
 
                 Guide aGuideY;
                 aGuideY.sName = "GluePoint"_ostr + OString::number(nIndex) + 
"Y";
-                aGuideY.sFormula
-                    = (bIsOOXML && nIdx2 >= 0 && nIdx2 < 
aEquations.getLength())
-                          ? GetFormula(aEquations[nIdx2], "*logheight/", " h 
").toUtf8()
-                          : "*/ " + OString::number(nIdx2) + " h " + 
OString::number(nHeight);
+
+                if (bIsOOXML && nIdx2 >= 0 && nIdx2 < aEquations.getLength())
+                    aGuideY.sFormula = GetFormula(aEquations[nIdx2], 
"*logheight/", " h ").toUtf8();
+                if (aGuideY.sFormula.isEmpty())
+                    aGuideY.sFormula
+                        = "*/ " + OString::number(nIdx2) + " h " + 
OString::number(nHeight);
+
                 rGuideList.push_back(aGuideY);
             }
 
commit bcd1aae10b473fdfed869bd83a08f91fb95d28d5
Author:     Karthik Godha <[email protected]>
AuthorDate: Wed Dec 17 10:33:56 2025 +0530
Commit:     Andras Timar <[email protected]>
CommitDate: Sat Dec 20 11:01:22 2025 +0100

    ODP -> PPTX export empty attrName element
    
    In OOXML export attrNameLst must contain at least one attrName element.
    Export of attrName is skipped if it's empty, this results in invalid
    schema. (ISO-IEC-29500 19.5.8)
    
    bug-file: ooo72169-1.odp
    
    Change-Id: I8ebf2b9752fc9e90c21339d7d9dd3507e2518fc9
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195758
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Reviewed-by: Michael Stahl <[email protected]>

diff --git a/sd/source/filter/eppt/pptx-animations.cxx 
b/sd/source/filter/eppt/pptx-animations.cxx
index edb068dbc942..ad623fd15f40 100644
--- a/sd/source/filter/eppt/pptx-animations.cxx
+++ b/sd/source/filter/eppt/pptx-animations.cxx
@@ -299,16 +299,12 @@ void WriteAnimationAttributeName(const FSHelperPtr& pFS, 
const OUString& rAttrib
             attrConv++;
         }
 
+        pFS->startElementNS(XML_p, XML_attrName);
         if (pAttribute)
-        {
-            pFS->startElementNS(XML_p, XML_attrName);
             pFS->writeEscaped(pAttribute);
-            pFS->endElementNS(XML_p, XML_attrName);
-        }
         else
-        {
             SAL_WARN("sd.eppt", "unhandled animation attribute name: " << 
rAttributeName);
-        }
+        pFS->endElementNS(XML_p, XML_attrName);
     }
 
     pFS->endElementNS(XML_p, XML_attrNameLst);
commit 0f0acc1b960b204253adc20a194a52fcba68bedc
Author:     Karthik Godha <[email protected]>
AuthorDate: Mon Dec 15 16:56:58 2025 +0530
Commit:     Andras Timar <[email protected]>
CommitDate: Sat Dec 20 11:01:22 2025 +0100

    tdf#169980: Fix ODP->PPTX export of stock chart
    
    In OOXML chart export in `c:stockChart` there are multiple `c:ser`
    elements with the same `c:idx` value.
    
    Change-Id: Id5c5983118214013a3610ae937b9893c479a0ea0
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195657
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Reviewed-by: Michael Stahl <[email protected]>

diff --git a/include/oox/export/chartexport.hxx 
b/include/oox/export/chartexport.hxx
index b4be727e5365..a4821b467434 100644
--- a/include/oox/export/chartexport.hxx
+++ b/include/oox/export/chartexport.hxx
@@ -227,10 +227,9 @@ private:
 
     void exportVaryColors(const css::uno::Reference<css::chart2::XChartType>& 
xChartType);
     void exportCandleStickSeries(
-        const css::uno::Sequence<
-            css::uno::Reference<
-                css::chart2::XDataSeries > > & aSeriesSeq,
-        bool& rPrimaryAxes );
+        const 
css::uno::Sequence<css::uno::Reference<css::chart2::XDataSeries>>& aSeriesSeq,
+        bool& rPrimaryAxes, sal_uInt32& nIdx);
+
     void exportSeriesText(
         const css::uno::Reference< css::chart2::data::XDataSequence >& 
xValueSeq, bool bIsChartex );
     void exportSeriesCategory(
diff --git a/oox/source/export/chartexport.cxx 
b/oox/source/export/chartexport.cxx
index 7111b6d3f0fd..4f72421f14e1 100644
--- a/oox/source/export/chartexport.cxx
+++ b/oox/source/export/chartexport.cxx
@@ -3240,13 +3240,15 @@ void ChartExport::exportStockChart( const Reference< 
chart2::XChartType >& xChar
         // Use a dummy data series to output needed basic chart-related XML 
even in case of empty charts
         aSplitDataSeries.push_back({});
     }
+
+    sal_uInt32 nIdx = 0;
     for (const auto& splitDataSeries : aSplitDataSeries)
     {
         pFS->startElement(FSNS(XML_c, XML_stockChart));
 
         bool bPrimaryAxes = true;
         if (splitDataSeries.hasElements())
-            exportCandleStickSeries(splitDataSeries, bPrimaryAxes);
+            exportCandleStickSeries(splitDataSeries, bPrimaryAxes, nIdx);
 
         // export stock properties
         Reference< css::chart::XStatisticDisplay > 
xStockPropProvider(mxDiagram, uno::UNO_QUERY);
@@ -3648,8 +3650,7 @@ void ChartExport::exportSeries_chartex( const 
Reference<chart2::XChartType>& xCh
 }
 
 void ChartExport::exportCandleStickSeries(
-    const Sequence< Reference< chart2::XDataSeries > > & aSeriesSeq,
-    bool& rPrimaryAxes)
+    const Sequence<Reference<chart2::XDataSeries>>& aSeriesSeq, bool& 
rPrimaryAxes, sal_uInt32& nIdx)
 {
     for( const Reference< chart2::XDataSeries >& xSeries : aSeriesSeq )
     {
@@ -3664,12 +3665,13 @@ void ChartExport::exportCandleStickSeries(
             Sequence< Reference< chart2::data::XLabeledDataSequence > > 
aSeqCnt(
                 xSource->getDataSequences());
 
-            const char* sSeries[] = 
{"values-first","values-max","values-min","values-last",nullptr};
+            const char* sSeries[] = 
{"values-first","values-max","values-min","values-last"};
 
-            for( sal_Int32 idx = 0; sSeries[idx] != nullptr ; idx++ )
+            for (const char* series : sSeries)
             {
-                Reference< chart2::data::XLabeledDataSequence > xLabeledSeq( 
lcl_getDataSequenceByRole( aSeqCnt, OUString::createFromAscii(sSeries[idx]) ) );
-                if( xLabeledSeq.is())
+                Reference<chart2::data::XLabeledDataSequence> xLabeledSeq(
+                    lcl_getDataSequenceByRole(aSeqCnt, 
OUString::createFromAscii(series)));
+                if (xLabeledSeq.is())
                 {
                     Reference< chart2::data::XDataSequence > xLabelSeq( 
xLabeledSeq->getLabel());
                     Reference< chart2::data::XDataSequence > xValueSeq( 
xLabeledSeq->getValues());
@@ -3677,12 +3679,8 @@ void ChartExport::exportCandleStickSeries(
                         FSHelperPtr pFS = GetFS();
                         pFS->startElement(FSNS(XML_c, XML_ser));
 
-                        // TODO: idx and order
-                        // idx attribute should start from 1 and not from 0.
-                        pFS->singleElement( FSNS( XML_c, XML_idx ),
-                                XML_val, OString::number(idx+1) );
-                        pFS->singleElement( FSNS( XML_c, XML_order ),
-                                XML_val, OString::number(idx+1) );
+                        pFS->singleElement(FSNS(XML_c, XML_idx), XML_val, 
OString::number(++nIdx));
+                        pFS->singleElement(FSNS(XML_c, XML_order), XML_val, 
OString::number(nIdx));
 
                         // export label
                         if( xLabelSeq.is() )
commit b8a4b06b2e3fabfd9997401885a29115a6000612
Author:     Karthik Godha <[email protected]>
AuthorDate: Mon Dec 15 09:35:58 2025 +0530
Commit:     Andras Timar <[email protected]>
CommitDate: Sat Dec 20 11:01:21 2025 +0100

    tdf#169979: ODP->PPTX export missing p:pic element
    
    OLE objects when exported to PPTX should contain p:pic element in the
    XML. OLEs without graphic content don't export p:pic element, though
    this is a valid schema, PowerPoint doesn't accept this.
    
    Now empty p:pic element is exported for empty graphics
    
    Change-Id: Iac6fb988aa20e1bc9ae938d2a02dfc7b8dfae0c1
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195623
    Reviewed-by: Michael Stahl <[email protected]>
    Tested-by: Jenkins CollaboraOffice <[email protected]>

diff --git a/oox/source/export/shapes.cxx b/oox/source/export/shapes.cxx
index 7f3b5493f146..f5c244b2dcb0 100644
--- a/oox/source/export/shapes.cxx
+++ b/oox/source/export/shapes.cxx
@@ -2799,6 +2799,25 @@ void ShapeExport::WriteMathShape(Reference<XShape> 
const& xShape)
     mpFS->endElementNS(XML_mc, XML_AlternateContent);
 }
 
+static void WriteEmptyGraphic(FSHelperPtr const& pFS, sal_Int32 nGraphicId)
+{
+    pFS->startElementNS(XML_p, XML_pic);
+    pFS->startElementNS(XML_p, XML_nvPicPr);
+    pFS->startElementNS(XML_p, XML_cNvPr, XML_id, 
OUString::number(nGraphicId), XML_name, "",
+                        XML_descr, "");
+    pFS->endElementNS(XML_p, XML_cNvPr);
+    pFS->startElementNS(XML_p, XML_cNvPicPr);
+    pFS->endElementNS(XML_p, XML_cNvPicPr);
+    pFS->startElementNS(XML_p, XML_nvPr);
+    pFS->endElementNS(XML_p, XML_nvPr);
+    pFS->endElementNS(XML_p, XML_nvPicPr);
+    pFS->startElementNS(XML_p, XML_blipFill);
+    pFS->endElementNS(XML_p, XML_blipFill);
+    pFS->startElementNS(XML_p, XML_spPr);
+    pFS->endElementNS(XML_p, XML_spPr);
+    pFS->endElementNS(XML_p, XML_pic);
+}
+
 ShapeExport& ShapeExport::WriteOLE2Shape( const Reference< XShape >& xShape )
 {
     Reference< XPropertySet > xPropSet( xShape, UNO_QUERY );
@@ -3016,6 +3035,8 @@ ShapeExport& ShapeExport::WriteOLE2Shape( const 
Reference< XShape >& xShape )
         const Graphic* pGraphic = pOle2Obj->GetGraphic();
         if (pGraphic)
             WriteGraphicObjectShapePart(xShape, pGraphic);
+        else // Required for MSO
+            WriteEmptyGraphic(mpFS, GetNewShapeID(xShape));
     }
 
     mpFS->endElementNS( mnXmlNamespace, XML_oleObj );
commit 97e3b5699935eba677fb1367ee54bb112adaa522
Author:     Noel Grandin <[email protected]>
AuthorDate: Wed Dec 10 18:16:30 2025 +0200
Commit:     Andras Timar <[email protected]>
CommitDate: Sat Dec 20 11:01:11 2025 +0100

    officeotron: elements under w:pPr element in wrong order
    
    re-use existing logic to make this output in spec-compliant order
    
    Change-Id: I5de88629295ee3eac1852fe67eedea4f1be7c087
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195394
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <[email protected]>
    (cherry picked from commit 2b6e7bf5c0e9166fb10082267136ed6b899c7582)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195759
    Tested-by: Jenkins CollaboraOffice <[email protected]>

diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx 
b/sw/source/filter/ww8/docxattributeoutput.cxx
index b1ea0ffc1dd1..801d7bd09048 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -1476,56 +1476,56 @@ void DocxAttributeOutput::StartParagraphProperties()
     }
 }
 
+// Write the elements in the spec order
+const sal_Int32 aParagraphPropertiesOrder[] =
+{
+    FSNS( XML_w, XML_pStyle ),
+    FSNS( XML_w, XML_keepNext ),
+    FSNS( XML_w, XML_keepLines ),
+    FSNS( XML_w, XML_pageBreakBefore ),
+    FSNS( XML_w, XML_framePr ),
+    FSNS( XML_w, XML_widowControl ),
+    FSNS( XML_w, XML_numPr ),
+    FSNS( XML_w, XML_suppressLineNumbers ),
+    FSNS( XML_w, XML_pBdr ),
+    FSNS( XML_w, XML_shd ),
+    FSNS( XML_w, XML_tabs ),
+    FSNS( XML_w, XML_suppressAutoHyphens ),
+    FSNS( XML_w, XML_kinsoku ),
+    FSNS( XML_w, XML_wordWrap ),
+    FSNS( XML_w, XML_overflowPunct ),
+    FSNS( XML_w, XML_topLinePunct ),
+    FSNS( XML_w, XML_autoSpaceDE ),
+    FSNS( XML_w, XML_autoSpaceDN ),
+    FSNS( XML_w, XML_bidi ),
+    FSNS( XML_w, XML_adjustRightInd ),
+    FSNS( XML_w, XML_snapToGrid ),
+    FSNS( XML_w, XML_spacing ),
+    FSNS( XML_w, XML_ind ),
+    FSNS( XML_w, XML_contextualSpacing ),
+    FSNS( XML_w, XML_mirrorIndents ),
+    FSNS( XML_w, XML_suppressOverlap ),
+    FSNS( XML_w, XML_jc ),
+    FSNS( XML_w, XML_textDirection ),
+    FSNS( XML_w, XML_textAlignment ),
+    FSNS( XML_w, XML_textboxTightWrap ),
+    FSNS( XML_w, XML_outlineLvl ),
+    FSNS( XML_w, XML_divId ),
+    FSNS( XML_w, XML_cnfStyle ),
+    FSNS( XML_w, XML_rPr ),
+    FSNS( XML_w, XML_sectPr ),
+    FSNS( XML_w, XML_pPrChange )
+};
+
 void DocxAttributeOutput::InitCollectedParagraphProperties()
 {
     m_pLRSpaceAttrList.clear();
     m_pParagraphSpacingAttrList.clear();
 
-    // Write the elements in the spec order
-    static const sal_Int32 aOrder[] =
-    {
-        FSNS( XML_w, XML_pStyle ),
-        FSNS( XML_w, XML_keepNext ),
-        FSNS( XML_w, XML_keepLines ),
-        FSNS( XML_w, XML_pageBreakBefore ),
-        FSNS( XML_w, XML_framePr ),
-        FSNS( XML_w, XML_widowControl ),
-        FSNS( XML_w, XML_numPr ),
-        FSNS( XML_w, XML_suppressLineNumbers ),
-        FSNS( XML_w, XML_pBdr ),
-        FSNS( XML_w, XML_shd ),
-        FSNS( XML_w, XML_tabs ),
-        FSNS( XML_w, XML_suppressAutoHyphens ),
-        FSNS( XML_w, XML_kinsoku ),
-        FSNS( XML_w, XML_wordWrap ),
-        FSNS( XML_w, XML_overflowPunct ),
-        FSNS( XML_w, XML_topLinePunct ),
-        FSNS( XML_w, XML_autoSpaceDE ),
-        FSNS( XML_w, XML_autoSpaceDN ),
-        FSNS( XML_w, XML_bidi ),
-        FSNS( XML_w, XML_adjustRightInd ),
-        FSNS( XML_w, XML_snapToGrid ),
-        FSNS( XML_w, XML_spacing ),
-        FSNS( XML_w, XML_ind ),
-        FSNS( XML_w, XML_contextualSpacing ),
-        FSNS( XML_w, XML_mirrorIndents ),
-        FSNS( XML_w, XML_suppressOverlap ),
-        FSNS( XML_w, XML_jc ),
-        FSNS( XML_w, XML_textDirection ),
-        FSNS( XML_w, XML_textAlignment ),
-        FSNS( XML_w, XML_textboxTightWrap ),
-        FSNS( XML_w, XML_outlineLvl ),
-        FSNS( XML_w, XML_divId ),
-        FSNS( XML_w, XML_cnfStyle ),
-        FSNS( XML_w, XML_rPr ),
-        FSNS( XML_w, XML_sectPr ),
-        FSNS( XML_w, XML_pPrChange )
-    };
-
     // postpone the output so that we can later [in EndParagraphProperties()]
     // prepend the properties before the run
     // coverity[overrun-buffer-arg : FALSE] - coverity has difficulty with 
css::uno::Sequence
-    m_pSerializer->mark(Tag_InitCollectedParagraphProperties, 
comphelper::containerToSequence(aOrder));
+    m_pSerializer->mark(Tag_InitCollectedParagraphProperties, 
comphelper::containerToSequence(aParagraphPropertiesOrder));
 }
 
 void DocxAttributeOutput::WriteCollectedParagraphProperties()
@@ -4306,10 +4306,10 @@ void DocxAttributeOutput::Redline( const SwRedlineData* 
pRedlineData)
                 const OUString & sParaStyleName = 
pFormattingChanges->GetFormatName();
                 if (pChangesSet || !sParaStyleName.isEmpty())
                 {
-                    m_pSerializer->mark(Tag_Redline_2);
-
                     m_pSerializer->startElementNS(XML_w, XML_pPr);
 
+                    m_pSerializer->mark(Tag_Redline_2, 
comphelper::containerToSequence(aParagraphPropertiesOrder));
+
                     if (!sParaStyleName.isEmpty())
                     {
                         OString sStyleName;
@@ -4346,9 +4346,9 @@ void DocxAttributeOutput::Redline( const SwRedlineData* 
pRedlineData)
                     m_pLRSpaceAttrList = std::move(pLRSpaceAttrList_Original);
                     m_pParagraphSpacingAttrList = 
std::move(pParagraphSpacingAttrList_Original);
 
-                    m_pSerializer->endElementNS( XML_w, XML_pPr );
+                    m_pSerializer->mergeTopMarks(Tag_Redline_2);
 
-                    m_pSerializer->mergeTopMarks(Tag_Redline_2, 
sax_fastparser::MergeMarks::PREPEND);
+                    m_pSerializer->endElementNS( XML_w, XML_pPr );
                 }
             }
         }
commit ccf643f892a481b986a56b3f1c57789e6068885c
Author:     Miklos Vajna <[email protected]>
AuthorDate: Tue Dec 16 14:39:18 2025 +0100
Commit:     Andras Timar <[email protected]>
CommitDate: Sat Dec 20 11:01:11 2025 +0100

    sw: fix crash in SwFieldEditDlg's AddressHdl
    
    gdb in the core dump gives:
            #0  0x000073b5e9fd6bb9 in SwFieldType::Which (this=<optimized out>) 
at sw/inc/fldbas.hxx:276
            #1  SwField::GetTypeId (this=0x0) at 
sw/source/core/fields/fldbas.cxx:267
            #2  0x000073b5e911faa4 in SwFieldEditDlg::AddressHdl 
(this=0x4a057e70) at sw/source/ui/fldui/fldedt.cxx:296
            #3  0x000073b5f85de37c in std::function<void ()>::operator()() 
const (this=0x7fffed028930) at 
/opt/rh/devtoolset-12/root/usr/include/c++/12/bits/std_function.h:587
            #4  Control::ImplCallEventListenersAndHandler(VclEventId, 
std::function<void ()> const&) (this=<optimized out>, 
nEvent=nEvent@entry=VclEventId::ButtonClick, callHandler=...)
                at vcl/source/control/ctrl.cxx:311
            #5  0x000073b5f85c16c8 in Button::Click (this=<optimized out>) at 
vcl/source/control/button.cxx:130
    
    and
    
            #2  0x000073b5e911faa4 in SwFieldEditDlg::AddressHdl 
(this=0x4a057e70) at sw/source/ui/fldui/fldedt.cxx:296
            warning: Source file is more recent than executable.
            296         if (pCurField->GetTypeId() == 
SwFieldTypesEnum::DocumentInfo)
            (gdb) print pCurField
            $2 = (SwField *) 0x0
    
    return early in case we don't have a valid pointer for the current field
    anymore.
    
    Change-Id: Ibc614cc825a0b14cd4f79060d35f6635eb0cdd55
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195716
    Tested-by: Caolán McNamara <[email protected]>
    Reviewed-by: Caolán McNamara <[email protected]>
    Tested-by: Jenkins CollaboraOffice <[email protected]>

diff --git a/sw/source/ui/fldui/fldedt.cxx b/sw/source/ui/fldui/fldedt.cxx
index 7de2e44135e7..60dcf41b43a6 100644
--- a/sw/source/ui/fldui/fldedt.cxx
+++ b/sw/source/ui/fldui/fldedt.cxx
@@ -292,6 +292,10 @@ IMPL_LINK_NOARG(SwFieldEditDlg, AddressHdl, weld::Button&, 
void)
     SwFieldPage* pTabPage = static_cast<SwFieldPage*>(GetTabPage());
     SwFieldMgr& rMgr = pTabPage->GetFieldMgr();
     SwField *pCurField = rMgr.GetCurField();
+    if (!pCurField)
+    {
+        return;
+    }
 
     if (pCurField->GetTypeId() == SwFieldTypesEnum::DocumentInfo)
         comphelper::dispatchCommand(u".uno:SetDocumentProperties"_ustr, {});
commit b22c9309f00dd9955a355411094c9b2265b92a5b
Author:     Miklos Vajna <[email protected]>
AuthorDate: Tue Dec 16 08:34:26 2025 +0100
Commit:     Andras Timar <[email protected]>
CommitDate: Sat Dec 20 11:01:11 2025 +0100

    tdf#168737 sw interdependent redlines, reject all: fix ignored format 
redlines
    
    The bugdoc has two redlines: a format and a delete redline. Pressing
    "reject all" in the manage changes dialog doesn't reject the format
    redline.
    
    Seems this happens because of code added in commit
    9c4eef7d809ad7d283860c7b47b0f561aa240906 (tdf#52391 reject/clear
    formatting of format-only changes, 2019-01-29), which argued that
    rejection of format redlines isn't really implemented, so better if a
    "mass reject all" doesn't reject them, unless only format redlines are
    found in the document.  But in the meantime I worked on improving
    support for rejecting format redlines, most recently commit
    47cb60bc534104852a219426e3beb4c714b6cf07 (tdf#167761 sw format redline,
    char props: implement ODF import, 2025-08-18) added ODF import/export of
    these old direct character properties, so it now makes less sense to
    filter out format redlines while rejecting all of them.  Also, the
    matching toolbar button didn't ignore such format redlines.
    
    Fix the problem by simplifying SwRedlineAcceptDlg::CallAcceptReject():
    unless the redline data for the iterator says this item is disabled,
    always add it to the list of redlines, similar to what the "reject the
    selected redline(s)" case did already.
    
    Note that the original 2019 commit was less confusing, as it did change
    the label of the reject all button, but that was removed in commit
    2e1a38ceb6866248ec30f6fe58cd3adc1b910eec (tdf#146893 Rework Manage
    Changes dialog, 2022-01-24).
    
    Change-Id: I69e7247d068cea2a25cd46ad2d5b41fccfa54919
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195693
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Tested-by: Caolán McNamara <[email protected]>
    Reviewed-by: Caolán McNamara <[email protected]>

diff --git a/sw/qa/uitest/data/reject-all-overlap.docx 
b/sw/qa/uitest/data/reject-all-overlap.docx
new file mode 100644
index 000000000000..6263df4e0f6f
Binary files /dev/null and b/sw/qa/uitest/data/reject-all-overlap.docx differ
diff --git a/sw/qa/uitest/writer_tests/trackedChanges.py 
b/sw/qa/uitest/writer_tests/trackedChanges.py
index 32ba68964ac6..7c1e0431d1ae 100644
--- a/sw/qa/uitest/writer_tests/trackedChanges.py
+++ b/sw/qa/uitest/writer_tests/trackedChanges.py
@@ -625,6 +625,23 @@ class trackedchanges(UITestCase):
             # i.e. a change was not accepted.
             self.assertEqual(document.Redlines.Count, 0)
 
+    def test_reject_all_deletes_all_redlines(self):
+        # Given a document with overlapping changes:
+        with 
self.ui_test.load_file(get_url_for_data_file("reject-all-overlap.docx")) as 
document:
+            xWriterDoc = self.xUITest.getTopFocusWindow()
+            xWriterEdit = xWriterDoc.getChild("writer_edit")
+
+            # When rejecting all changes using the manage changes dialog:
+            with 
self.ui_test.execute_modeless_dialog_through_command(".uno:AcceptTrackedChanges",
 close_button="close") as xTrackDlg:
+                xAccBtn = xTrackDlg.getChild("rejectall")
+                xAccBtn.executeAction("CLICK", tuple())
+
+            # Then make sure all changes are rejected:
+            # Without the accompanying fix in place, this failed with:
+            # AssertionError: 1 != 0
+            # i.e. a change was not rejected.
+            self.assertEqual(document.Redlines.Count, 0)
+
     def test_tdf155847_multiple_tracked_columns_crash(self):
         with 
self.ui_test.load_file(get_url_for_data_file("TC-table-del-add.docx")) as 
document:
 
diff --git a/sw/source/uibase/misc/redlndlg.cxx 
b/sw/source/uibase/misc/redlndlg.cxx
index 5050d4f1e8c0..15c74d445d04 100644
--- a/sw/source/uibase/misc/redlndlg.cxx
+++ b/sw/source/uibase/misc/redlndlg.cxx
@@ -1108,7 +1108,7 @@ void SwRedlineAcceptDlg::CallAcceptReject( bool bSelect, 
bool bAccept )
 
     weld::TreeView& rTreeView = m_pTable->GetWidget();
 
-    auto lambda = [this, pSh, bSelect, bAccept, &rTreeView, &nPos, 
&aRedlines](weld::TreeIter& rEntry) {
+    auto lambda = [bSelect, &rTreeView, &nPos, &aRedlines](weld::TreeIter& 
rEntry) {
         if (!rTreeView.get_iter_depth(rEntry))
         {
             if (bSelect && nPos == -1)
@@ -1116,25 +1116,7 @@ void SwRedlineAcceptDlg::CallAcceptReject( bool bSelect, 
bool bAccept )
 
             RedlinData *pData = 
weld::fromId<RedlinData*>(rTreeView.get_id(rEntry));
 
-            bool bIsNotFormatted = true;
-
-            // first remove only changes with insertion/deletion, if they exist
-            // (format-only changes haven't had real rejection yet, only an
-            // approximation: clear direct formatting, so try to warn
-            // with the extended button label "Reject All/Clear formatting")
-            if ( !bSelect && !bAccept && !m_bOnlyFormatedRedlines )
-            {
-                SwRedlineTable::size_type nPosition = GetRedlinePos(rEntry);
-                if (nPosition != SwRedlineTable::npos)
-                {
-                    const SwRangeRedline& rRedln = pSh->GetRedline(nPosition);
-
-                    if (RedlineType::Format == rRedln.GetType())
-                        bIsNotFormatted = false;
-                }
-            }
-
-            if (!pData->bDisabled && bIsNotFormatted)
+            if (!pData->bDisabled)
                 aRedlines.emplace_back(rTreeView.make_iterator(&rEntry));
         }
         return false;
commit bb75d7677bfd7a5bdcfa568f5b4e6ad9c6f7d966
Author:     Miklos Vajna <[email protected]>
AuthorDate: Mon Dec 15 08:44:05 2025 +0100
Commit:     Andras Timar <[email protected]>
CommitDate: Sat Dec 20 11:01:11 2025 +0100

    tdf#169949 sw num rule defaults: let numbering type none imply follow by 
none
    
    Load the document, press Ctrl-1 to set a heading 1 paragraph style, an
    unexpected leading tab shows up before the paragraph text.
    
    This went wrong with commit a7d9837a8aa6d1233f4c21e4db5d32428a3ffc58
    (tdf#148360: sw: do not ignore list label followed by, 2022-08-02),
    previously "followed by" was ignored by the layout if the numbering
    portion before the separator was empty. This is needed to correctly lay
    out DOCX files.
    
    Fix the problem by changing the default Outline numbering rule in
    Writer: the numbering type is set to "none", so also set the "label
    followed by" property to "nothing". Note that this doesn't affect DOCX
    files which already have heading styles configured, nor documents where
    the DocumentSettingId::NO_NUMBERING_SHOW_FOLLOWBY compatibility option
    is off.
    
    There was one handy side-effect of having "followed by" as "tab": once
    the UI was used to change the numbering type from "none" to e.g. Arabic,
    the user didn't have to explicitly ask for the tab separator, which is
    usually wanted. Continue supporting this scenario by checking for the
    "number type none + followed by nothing" scenario: if the number type
    changes to something else, then also change "followed by" to the old
    "tab" default.
    
    Change-Id: I60905623e6c4b6ded56a1a089ae0fb3af3b2bd3a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195627
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Reviewed-by: Caolán McNamara <[email protected]>

diff --git a/sw/CppunitTest_sw_core_doc.mk b/sw/CppunitTest_sw_core_doc.mk
index 9e12126c1c7a..6c0aec27e9aa 100644
--- a/sw/CppunitTest_sw_core_doc.mk
+++ b/sw/CppunitTest_sw_core_doc.mk
@@ -15,6 +15,7 @@ $(eval $(call 
gb_CppunitTest_use_common_precompiled_header,sw_core_doc))
 
 $(eval $(call gb_CppunitTest_add_exception_objects,sw_core_doc, \
     sw/qa/core/doc/doc \
+    sw/qa/core/doc/number \
     sw/qa/core/doc/DocumentRedlineManager \
 ))
 
diff --git a/sw/qa/core/doc/data/bad-heading-indent.docx 
b/sw/qa/core/doc/data/bad-heading-indent.docx
new file mode 100644
index 000000000000..65ec57ab12c4
Binary files /dev/null and b/sw/qa/core/doc/data/bad-heading-indent.docx differ
diff --git a/sw/qa/core/doc/number.cxx b/sw/qa/core/doc/number.cxx
new file mode 100644
index 000000000000..7396b1c262a0
--- /dev/null
+++ b/sw/qa/core/doc/number.cxx
@@ -0,0 +1,51 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+
+#include <comphelper/propertyvalue.hxx>
+
+namespace
+{
+/// Covers sw/source/core/doc/number.cxx fixes.
+class Test : public SwModelTestBase
+{
+public:
+    Test()
+        : SwModelTestBase(u"/sw/qa/core/doc/data/"_ustr)
+    {
+    }
+};
+
+CPPUNIT_TEST_FIXTURE(Test, testBadHeadingIndent)
+{
+    // Given a DOCX file with a single paragraph, no heading styles present:
+    createSwDoc("bad-heading-indent.docx");
+
+    // When marking that paragraph heading 1:
+    uno::Sequence<beans::PropertyValue> aPropertyValues = {
+        comphelper::makePropertyValue(u"Style"_ustr, uno::Any(u"Heading 
1"_ustr)),
+        comphelper::makePropertyValue(u"FamilyName"_ustr, 
uno::Any(u"ParagraphStyles"_ustr)),
+    };
+    dispatchCommand(mxComponent, u".uno:StyleApply"_ustr, aPropertyValues);
+
+    // Then make sure that doesn't result in unexpected indent:
+    xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+    int nTabCount
+        = getXPathContent(pXmlDoc, 
"count(//SwLineLayout/child::*[@type='PortionType::TabLeft'])")
+              .toInt32();
+    // Without the accompanying fix in place, this test would have failed with:
+    // - Expected: 0
+    // - Actual  : 1
+    // i.e. an unexpected tab portion was inserted before the paragraph text.
+    CPPUNIT_ASSERT_EQUAL(0, nTabCount);
+}
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/core/doc/number.cxx b/sw/source/core/doc/number.cxx
index d76214d050c3..bdb0d60924e4 100644
--- a/sw/source/core/doc/number.cxx
+++ b/sw/source/core/doc/number.cxx
@@ -479,6 +479,9 @@ SwNumRule::SwNumRule( OUString aNm,
         {
             pFormat = new SwNumFormat;
             pFormat->SetNumberingType(SVX_NUM_NUMBER_NONE);
+            // SVX_NUM_NUMBER_NONE with the default SvxNumberFormat::LISTTAB 
would lead to an
+            // unexpected leading tab for the 
DocumentSettingId::NO_NUMBERING_SHOW_FOLLOWBY case.
+            pFormat->SetLabelFollowedBy(SvxNumberFormat::NOTHING);
             pFormat->SetIncludeUpperLevels( MAXLEVEL );
             pFormat->SetStart( 1 );
             pFormat->SetPositionAndSpaceMode( SvxNumberFormat::LABEL_ALIGNMENT 
);
diff --git a/sw/source/ui/misc/outline.cxx b/sw/source/ui/misc/outline.cxx
index c3a92f33131d..c141b1796f3a 100644
--- a/sw/source/ui/misc/outline.cxx
+++ b/sw/source/ui/misc/outline.cxx
@@ -622,7 +622,15 @@ IMPL_LINK_NOARG(SwOutlineSettingsTabPage, NumberSelect, 
weld::ComboBox&, void)
         if(m_nActLevel & nMask)
         {
             SwNumFormat aNumFormat(m_pNumRule->Get(i));
+            SvxNumType nOldNumberType = aNumFormat.GetNumberingType();
             aNumFormat.SetNumberingType(nNumberType);
+            if (nOldNumberType == SVX_NUM_NUMBER_NONE && nNumberType != 
SVX_NUM_NUMBER_NONE
+                && aNumFormat.GetLabelFollowedBy() == SvxNumberFormat::NOTHING)
+            {
+                // Transitioning from "no" numbering, also set the followed by 
setting to the
+                // default from "empty".
+                aNumFormat.SetLabelFollowedBy(SvxNumberFormat::LISTTAB);
+            }
             // ensure that HasListFormat
             aNumFormat.SetListFormat(aNumFormat.GetPrefix(), 
aNumFormat.GetSuffix(), i);
             m_pNumRule->Set(i, aNumFormat);
commit 18cba6d062a7a5da53ca10954542f3aab60b41da
Author:     Andras Timar <[email protected]>
AuthorDate: Mon Dec 15 16:29:15 2025 +0100
Commit:     Andras Timar <[email protected]>
CommitDate: Sat Dec 20 11:01:11 2025 +0100

    [cp] unification of Collabora Office app configs
    
    Change-Id: I9576a5d64588d983598e99bf276400bcacb175b2
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195676
    Reviewed-by: Miklos Vajna <[email protected]>
    Tested-by: Jenkins CollaboraOffice <[email protected]>

diff --git a/distro-configs/CODAWindows.conf b/distro-configs/CODAWindows.conf
index 83ccaf9524f0..82f864365b6e 100644
--- a/distro-configs/CODAWindows.conf
+++ b/distro-configs/CODAWindows.conf
@@ -1,48 +1,64 @@
-# Collabora Online Desktop app for Windows
+# Config for Collabora Office app for Windows
 
 # Build environment
---with-visual-studio=2022
 --enable-python=fully-internal
---without-lxml
---without-export-validation
 --disable-ccache
 --disable-pch
---without-doxygen
---without-java
+--enable-mergelibs
+--enable-release-build
 --enable-symbols
+--with-visual-studio=2022
+--with-buildconfig-recorded
+--without-lxml
 
-# Branding (unused, but...)
+# Branding
 --disable-community-flavor
 --with-branding=icon-themes/galaxy/brand_cp
+--with-vendor=Collabora
 
-# Features
---disable-breakpad
---disable-firebird-sdbc
---disable-online-update
---without-helppack-integration
+# MPLv2 subset
+--disable-gpgmepp
+--disable-lotuswordpro
+--disable-lpsolve
+--disable-mariadb-sdbc
+--disable-poppler
+--disable-postgresql-sdbc
+--with-theme=colibre colibre_svg
+
+# No Java
+--without-java
+--without-junit
+--disable-ext-nlpsolver
+--disable-ext-wiki-publisher
+--disable-report-builder
+--disable-scripting-beanshell
+--disable-scripting-javascript
+
+# LOKit – tiled rendering
 --disable-avmedia
---disable-odk
+--disable-opengl
 --disable-skia
---disable-cli
---with-myspell-dicts
+--enable-cairo-rgba
 --enable-headless
---enable-mergelibs
+
+# Misc features
+--disable-breakpad
+--disable-cli
+--disable-firebird-sdbc
+--disable-librelogo
+--disable-odk
+--disable-online-update
 --disable-opencl
---disable-opengl
+--disable-sal-log
+--disable-sdremote
+--disable-sdremote-bluetooth
+--with-lang=ar ca cs cy da de el en-US en-GB es eu fi fr ga gl he hr hu hy id 
is it ja kk ko nl pl pt pt-BR ro ru sk sl sq sv tr uk zh-CN zh-TW
+--with-myspell-dicts
 --without-galleries
---disable-librelogo
+--without-help
 --without-templates
 
 # Sensible font bundling settings for desktop
 --with-fonts
 --with-docrepair-fonts
 --disable-noto-font
-
-# MPLv2 subset
---with-theme=colibre
---disable-mariadb-sdbc
---disable-postgresql-sdbc
---disable-lotuswordpro
---disable-lpsolve
---disable-poppler
---disable-gpgmepp
diff --git a/distro-configs/CPLinuxQtFlatpak.conf 
b/distro-configs/CPLinuxQtFlatpak.conf
index 44edd889e5f2..1bc1d11ee3c7 100644
--- a/distro-configs/CPLinuxQtFlatpak.conf
+++ b/distro-configs/CPLinuxQtFlatpak.conf
@@ -6,7 +6,7 @@
 --enable-release-build
 --enable-symbols
 --with-linker-hash-style=both
---without-buildconfig-recorded
+--with-buildconfig-recorded
 --without-lxml
 
 # Branding
@@ -34,6 +34,7 @@
 --disable-scripting-javascript
 
 # LOKit – tiled rendering
+--disable-avmedia
 --disable-dbus
 --disable-dconf
 --disable-gio
@@ -41,10 +42,14 @@
 --disable-gtk3
 --disable-gui
 --disable-kf5
+--disable-opengl
 --disable-qt5
 --disable-randr
+--disable-skia
+--enable-cairo-rgba
 
 # Misc features
+--disable-breakpad
 --disable-epm
 --disable-evolution2
 --disable-firebird-sdbc
@@ -55,8 +60,8 @@
 --disable-sdremote
 --disable-sdremote-bluetooth
 --enable-extension-integration
---with-galleries=no
 --with-lang=ar ca cs cy da de el en-US en-GB es eu fi fr ga gl he hr hu hy id 
is it ja kk ko nl pl pt pt-BR ro ru sk sl sq sv tr uk zh-CN zh-TW
+--without-galleries
 --without-help
 --without-templates
 
@@ -88,7 +93,6 @@
 --with-system-zlib
 
 # org.kde.Platform has cairo, but we use a patched one
---enable-cairo-rgba
 --without-system-cairo
 
 # 3rd party libs that org.kde.Platform does not have
diff --git a/distro-configs/CPMacOS-LOKit.conf 
b/distro-configs/CPMacOS-LOKit.conf
index 36845ebf565d..66e3c709abc0 100644
--- a/distro-configs/CPMacOS-LOKit.conf
+++ b/distro-configs/CPMacOS-LOKit.conf
@@ -1,44 +1,64 @@
-INCLUDE:CPLinux-LOKit
+# Config for Collabora Office app for macOS
 
-# LOKit needs to be able to run in the sandbox
---enable-macosx-sandbox
-
-# disable Linux stuff that we don't need
---disable-epm
+# Build environment
 --disable-python
---without-package-format
---enable-gui
---without-system-dicts
+--enable-macosx-sandbox
+--enable-mergelibs
+--enable-release-build
+--with-buildconfig-recorded
+--without-lxml
 
-# Sensible font bundling settings for desktop
---with-fonts
---with-docrepair-fonts
---disable-noto-font
+# Branding
+--disable-community-flavor
+--with-branding=icon-themes/galaxy/brand_cp
+--with-vendor=Collabora
 
-# from LibreOfficeiOS (copied only, to avoid the --host setting)
---disable-breakpad
---disable-firebird-sdbc
---disable-online-update
+# MPLv2 subset
+--enable-mpl-subset
+--disable-gpgmepp
+--disable-lotuswordpro
+--disable-lpsolve
+--disable-mariadb-sdbc
+--disable-poppler
+--disable-postgresql-sdbc
+--with-theme=colibre colibre_svg
 
---without-export-validation
---without-helppack-integration
+# No Java
 --without-java
 --without-junit
+--disable-ext-nlpsolver
+--disable-ext-wiki-publisher
+--disable-report-builder
+--disable-scripting-beanshell
+--disable-scripting-javascript
 
---with-theme=colibre
-
---with-build-platform-configure-options=--with-system-jpeg=no
-
---disable-avahi
+# LOKit – tiled rendering
 --disable-avmedia
---disable-compiler-plugins
---disable-cups
---disable-dconf
---disable-kf5
+--disable-opengl
+--disable-skia
+--enable-cairo-rgba
+--enable-headless
+--without-system-fontconfig
+--without-system-freetype
+
+# Misc features
+--disable-breakpad
+--disable-cli
+--disable-firebird-sdbc
+--disable-librelogo
 --disable-odk
+--disable-online-update
 --disable-openssl
---disable-poppler
---disable-python
---disable-skia
+--disable-sal-log
+--disable-sdremote
+--disable-sdremote-bluetooth
+--with-lang=ar ca cs cy da de el en-US en-GB es eu fi fr ga gl he hr hu hy id 
is it ja kk ko nl pl pt pt-BR ro ru sk sl sq sv tr uk zh-CN zh-TW
+--with-myspell-dicts
+--without-galleries
+--without-help
+--without-templates
 
---enable-headless
+# Sensible font bundling settings for desktop
+--with-fonts
+--with-docrepair-fonts
+--disable-noto-font
commit 5431d8953a179a16a7aece03aae8ec807f15c320
Author:     Andras Timar <[email protected]>
AuthorDate: Mon Dec 15 14:47:38 2025 +0100
Commit:     Andras Timar <[email protected]>
CommitDate: Sat Dec 20 11:01:11 2025 +0100

    [cp] Build Collabora Office apps without templates
    
    These templates are not used, therefore it is unnecessary to
    ship them.
    
    Change-Id: Ic0fc3007d5b214978eba4e575209f90af7b5bd9b
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195668
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Reviewed-by: Miklos Vajna <[email protected]>

diff --git a/distro-configs/CODAWindows.conf b/distro-configs/CODAWindows.conf
index 1dfe3d4337fa..83ccaf9524f0 100644
--- a/distro-configs/CODAWindows.conf
+++ b/distro-configs/CODAWindows.conf
@@ -31,6 +31,7 @@
 --disable-opengl
 --without-galleries
 --disable-librelogo
+--without-templates
 
 # Sensible font bundling settings for desktop
 --with-fonts
diff --git a/distro-configs/CPLinuxQtFlatpak.conf 
b/distro-configs/CPLinuxQtFlatpak.conf
index 427c606830cd..44edd889e5f2 100644
--- a/distro-configs/CPLinuxQtFlatpak.conf
+++ b/distro-configs/CPLinuxQtFlatpak.conf
@@ -58,6 +58,7 @@
 --with-galleries=no
 --with-lang=ar ca cs cy da de el en-US en-GB es eu fi fr ga gl he hr hu hy id 
is it ja kk ko nl pl pt pt-BR ro ru sk sl sq sv tr uk zh-CN zh-TW
 --without-help
+--without-templates
 
 # Sensible font bundling settings for desktop
 --with-fonts
diff --git a/distro-configs/CPMacOS-LOKit.conf 
b/distro-configs/CPMacOS-LOKit.conf
index bea3292fab29..36845ebf565d 100644
--- a/distro-configs/CPMacOS-LOKit.conf
+++ b/distro-configs/CPMacOS-LOKit.conf
@@ -9,7 +9,6 @@ INCLUDE:CPLinux-LOKit
 --without-package-format
 --enable-gui
 --without-system-dicts
---with-templates
 
 # Sensible font bundling settings for desktop
 --with-fonts
commit 47f7ea333c47467e74f5228002be48200bc64441
Author:     Andras Timar <[email protected]>
AuthorDate: Mon Dec 15 18:53:11 2025 +0100
Commit:     Andras Timar <[email protected]>
CommitDate: Sat Dec 20 11:01:11 2025 +0100

    typo 'ENBALE', but we don't use them anyway
    
    Change-Id: Icec2cafd8fc55817cc131c3f963bcb8cda81c872
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195681
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Reviewed-by: Michael Stahl <[email protected]>

diff --git a/configure.ac b/configure.ac
index d88f4af0d4fc..17fb7895cc48 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1271,8 +1271,6 @@ if test "$using_freetype_fontconfig" = yes; then
         # We build them, don't do any pkg-config checks
         test_fontconfig=no
         test_freetype=no
-        ENBALE_FONTCONFIG=TRUE
-        ENBALE_FREETYPE=TRUE
         BUILD_TYPE="$BUILD_TYPE FONTCONFIG FREETYPE"
     fi
 else
commit ade08b1e91b8ab6cb55defaf05678c100abd91d9
Author:     Karthik Godha <[email protected]>
AuthorDate: Wed Dec 10 21:39:49 2025 +0530
Commit:     Andras Timar <[email protected]>
CommitDate: Sat Dec 20 11:01:11 2025 +0100

    tdf#169924: ODP -> PPTX export invalid animations
    
    When exporting animations in a slide, animations attached to
    shapes which are not in the slide are also being exported.
    
    Change-Id: I2dbc5cd5755ce6656a9fc2efa453c5837ffeaa6a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195391
    Reviewed-by: Michael Stahl <[email protected]>
    Tested-by: Jenkins CollaboraOffice <[email protected]>

diff --git a/sd/source/filter/eppt/pptx-animations-nodectx.cxx 
b/sd/source/filter/eppt/pptx-animations-nodectx.cxx
index af843d661b69..1fc049b6e42f 100644
--- a/sd/source/filter/eppt/pptx-animations-nodectx.cxx
+++ b/sd/source/filter/eppt/pptx-animations-nodectx.cxx
@@ -83,10 +83,12 @@ bool initCondList(const Any& rAny, std::vector<Cond>& 
rList, bool bIsMainSeqChil
 }
 }
 
-NodeContext::NodeContext(const Reference<XAnimationNode>& xNode, 
PowerPointExport& rExport,
-                         bool bMainSeqChild, bool bIsIterateChild)
+NodeContext::NodeContext(const Reference<XAnimationNode>& xNode,
+                         const std::unordered_set<sal_Int32>& rSlideShapeIDs,
+                         PowerPointExport& rExport, bool bMainSeqChild, bool 
bIsIterateChild)
     : mxNode(xNode)
     , mbValid(true)
+    , mrSlideShapeIDs(rSlideShapeIDs)
     , mrPowerPointExport(rExport)
     , mbOnSubTnLst(false)
     , mnEffectNodeType(-1)
@@ -111,7 +113,7 @@ bool NodeContext::isValidTarget(const Any& rTarget)
     Reference<XShape> xShape;
 
     if ((rTarget >>= xShape) && 
drawingml::ShapeExport::IsShapeTypeKnown(xShape)
-        && (mrPowerPointExport.GetShapeID(xShape) != -1))
+        && (mrSlideShapeIDs.find(mrPowerPointExport.GetShapeID(xShape)) != 
mrSlideShapeIDs.end()))
         return true;
 
     ParagraphTarget aParagraphTarget;
@@ -211,8 +213,9 @@ bool NodeContext::initChildNodes()
                 Reference<XAnimationNode> 
xChildNode(xEnumeration->nextElement(), UNO_QUERY);
                 if (xChildNode.is())
                 {
-                    auto pChildContext = std::make_unique<NodeContext>(
-                        xChildNode, mrPowerPointExport, bIsMainSeq, 
bIsIterateChild);
+                    auto pChildContext = 
std::make_unique<NodeContext>(xChildNode, mrSlideShapeIDs,
+                                                                       
mrPowerPointExport,
+                                                                       
bIsMainSeq, bIsIterateChild);
                     if (pChildContext->isValid())
                         bValid = true;
                     maChildNodes.push_back(std::move(pChildContext));
diff --git a/sd/source/filter/eppt/pptx-animations-nodectx.hxx 
b/sd/source/filter/eppt/pptx-animations-nodectx.hxx
index 1830845ea5da..865c23715b60 100644
--- a/sd/source/filter/eppt/pptx-animations-nodectx.hxx
+++ b/sd/source/filter/eppt/pptx-animations-nodectx.hxx
@@ -10,6 +10,7 @@
 
 #include <com/sun/star/uno/Reference.hxx>
 #include <com/sun/star/animations/XAnimationNode.hpp>
+#include <unordered_set>
 #include <vector>
 #include "epptooxml.hxx"
 #include "pptx-animations-cond.hxx"
@@ -30,6 +31,7 @@ class NodeContext
     // if the node has valid target or contains at least one valid target.
     bool mbValid;
     // Required to check if the associated shape is present in export or not
+    const std::unordered_set<sal_Int32>& mrSlideShapeIDs;
     PowerPointExport& mrPowerPointExport;
 
     // if the node should be on SubTnLst or ChildTnLst
@@ -55,7 +57,8 @@ class NodeContext
 
 public:
     NodeContext(const css::uno::Reference<css::animations::XAnimationNode>& 
xNode,
-                PowerPointExport& rExport, bool bMainSeqChild, bool 
bIsIterateChild);
+                const std::unordered_set<sal_Int32>& rSlideShapeIDs, 
PowerPointExport& rExport,
+                bool bMainSeqChild, bool bIsIterateChild);
     const css::uno::Reference<css::animations::XAnimationNode>& getNode() 
const { return mxNode; }
     sal_Int16 getEffectNodeType() const { return mnEffectNodeType; }
     sal_Int16 getEffectPresetClass() const { return mnEffectPresetClass; }
diff --git a/sd/source/filter/eppt/pptx-animations.cxx 
b/sd/source/filter/eppt/pptx-animations.cxx
index bbae2b29682c..edb068dbc942 100644
--- a/sd/source/filter/eppt/pptx-animations.cxx
+++ b/sd/source/filter/eppt/pptx-animations.cxx
@@ -25,6 +25,7 @@
 #include <sal/log.hxx>
 #include <rtl/math.hxx>
 #include <comphelper/sequenceashashmap.hxx>
+#include <unordered_set>
 
 #include <com/sun/star/animations/AnimationAdditiveMode.hpp>
 #include <com/sun/star/animations/AnimationCalcMode.hpp>
@@ -53,6 +54,7 @@
 #include <com/sun/star/presentation/TextAnimationType.hpp>
 #include <com/sun/star/text/XSimpleText.hpp>
 #include <com/sun/star/drawing/XShape.hpp>
+#include <com/sun/star/drawing/XShapes.hpp>
 #include <com/sun/star/beans/XPropertySet.hpp>
 #include <oox/export/utils.hxx>
 #include <oox/ppt/pptfilterhelpers.hxx>
@@ -76,6 +78,7 @@ using namespace oox;
 using ::com::sun::star::beans::NamedValue;
 using ::com::sun::star::drawing::XDrawPage;
 using ::com::sun::star::drawing::XShape;
+using ::com::sun::star::drawing::XShapes;
 using ::com::sun::star::text::XSimpleText;
 using ::sax_fastparser::FSHelperPtr;
 
@@ -1244,7 +1247,23 @@ void PPTXAnimationExport::WriteAnimations(const 
Reference<XDrawPage>& rXDrawPage
     if (!(xEnumeration.is() && xEnumeration->hasMoreElements()))
         return;
 
-    auto pNodeContext = std::make_unique<NodeContext>(xNode, 
mrPowerPointExport, false, false);
+    Reference<XShapes> xShapes = rXDrawPage;
+    sal_uInt32 nShapes = xShapes->getCount();
+    std::unordered_set<sal_Int32> aSlideShapeIDs;
+    if (xShapes.is())
+    {
+        for (sal_uInt32 i = 0; i < nShapes; i++)
+        {
+            Reference<XShape> xShape;
+            xShapes->getByIndex(i) >>= xShape;
+            sal_Int32 nId = mrPowerPointExport.GetShapeID(xShape);
+            if (nId != -1)
+                aSlideShapeIDs.insert(nId);
+        }
+    }
+
+    auto pNodeContext
+        = std::make_unique<NodeContext>(xNode, aSlideShapeIDs, 
mrPowerPointExport, false, false);
     if (pNodeContext->isValid())
     {
         mpFS->startElementNS(XML_p, XML_timing);
commit e8eadb250be26c263ca466f689f13e9a39fce58f
Author:     Karthik Godha <[email protected]>
AuthorDate: Tue Dec 9 20:05:53 2025 +0530
Commit:     Andras Timar <[email protected]>
CommitDate: Sat Dec 20 11:01:11 2025 +0100

    tdf#169911: ODP -> PPTX export invalid animations
    
    Empty/invalid OLE objects are skipped PPTX export, but animations
    attached to these OLE objects are exported.
    
    Add the slide itself as target for these animations
    
    Change-Id: I1e594d607cc37f58c0e56357f8f8d42d9139bec8
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195306
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Reviewed-by: Michael Stahl <[email protected]>

diff --git a/sd/source/filter/eppt/pptx-animations-nodectx.cxx 
b/sd/source/filter/eppt/pptx-animations-nodectx.cxx
index 07c8bd618f78..af843d661b69 100644
--- a/sd/source/filter/eppt/pptx-animations-nodectx.cxx
+++ b/sd/source/filter/eppt/pptx-animations-nodectx.cxx
@@ -40,18 +40,6 @@ namespace oox::core
 {
 namespace
 {
-bool isValidTarget(const Any& rTarget)
-{
-    Reference<XShape> xShape;
-
-    if ((rTarget >>= xShape) && 
drawingml::ShapeExport::IsShapeTypeKnown(xShape))
-        return true;
-
-    ParagraphTarget aParagraphTarget;
-
-    return (rTarget >>= aParagraphTarget) && aParagraphTarget.Shape.is();
-}
-
 bool IsAudioURL(std::u16string_view rURL)
 {
     return o3tl::endsWithIgnoreAsciiCase(rURL, ".wav")
@@ -95,10 +83,11 @@ bool initCondList(const Any& rAny, std::vector<Cond>& 
rList, bool bIsMainSeqChil
 }
 }
 
-NodeContext::NodeContext(const Reference<XAnimationNode>& xNode, bool 
bMainSeqChild,
-                         bool bIsIterateChild)
+NodeContext::NodeContext(const Reference<XAnimationNode>& xNode, 
PowerPointExport& rExport,
+                         bool bMainSeqChild, bool bIsIterateChild)
     : mxNode(xNode)
     , mbValid(true)
+    , mrPowerPointExport(rExport)
     , mbOnSubTnLst(false)
     , mnEffectNodeType(-1)
     , mnEffectPresetClass(css::presentation::EffectPresetClass::CUSTOM)
@@ -117,6 +106,19 @@ NodeContext::NodeContext(const Reference<XAnimationNode>& 
xNode, bool bMainSeqCh
     initCondList(getNodeForCondition()->getEnd(), maEndCondList, 
bMainSeqChild);
 }
 
+bool NodeContext::isValidTarget(const Any& rTarget)
+{
+    Reference<XShape> xShape;
+
+    if ((rTarget >>= xShape) && 
drawingml::ShapeExport::IsShapeTypeKnown(xShape)
+        && (mrPowerPointExport.GetShapeID(xShape) != -1))
+        return true;
+
+    ParagraphTarget aParagraphTarget;
+
+    return (rTarget >>= aParagraphTarget) && aParagraphTarget.Shape.is();
+}
+
 void NodeContext::initUserData()
 {
     assert(mxNode.is());
@@ -209,8 +211,8 @@ bool NodeContext::initChildNodes()
                 Reference<XAnimationNode> 
xChildNode(xEnumeration->nextElement(), UNO_QUERY);
                 if (xChildNode.is())
                 {
-                    auto pChildContext
-                        = std::make_unique<NodeContext>(xChildNode, 
bIsMainSeq, bIsIterateChild);
+                    auto pChildContext = std::make_unique<NodeContext>(
+                        xChildNode, mrPowerPointExport, bIsMainSeq, 
bIsIterateChild);
                     if (pChildContext->isValid())
                         bValid = true;
                     maChildNodes.push_back(std::move(pChildContext));
diff --git a/sd/source/filter/eppt/pptx-animations-nodectx.hxx 
b/sd/source/filter/eppt/pptx-animations-nodectx.hxx
index c25991a85a23..1830845ea5da 100644
--- a/sd/source/filter/eppt/pptx-animations-nodectx.hxx
+++ b/sd/source/filter/eppt/pptx-animations-nodectx.hxx
@@ -11,6 +11,7 @@
 #include <com/sun/star/uno/Reference.hxx>
 #include <com/sun/star/animations/XAnimationNode.hpp>
 #include <vector>
+#include "epptooxml.hxx"
 #include "pptx-animations-cond.hxx"
 
 namespace oox::core
@@ -28,6 +29,8 @@ class NodeContext
     std::vector<Cond> maEndCondList;
     // if the node has valid target or contains at least one valid target.
     bool mbValid;
+    // Required to check if the associated shape is present in export or not
+    PowerPointExport& mrPowerPointExport;
 
     // if the node should be on SubTnLst or ChildTnLst
     bool mbOnSubTnLst;
@@ -38,6 +41,8 @@ class NodeContext
     OUString msEffectPresetId;
     OUString msEffectPresetSubType;
 
+    bool isValidTarget(const css::uno::Any& rTarget);
+
     /// constructor helper for initializing user data.
     void initUserData();
 
@@ -50,7 +55,7 @@ class NodeContext
 
 public:
     NodeContext(const css::uno::Reference<css::animations::XAnimationNode>& 
xNode,
-                bool bMainSeqChild, bool bIsIterateChild);
+                PowerPointExport& rExport, bool bMainSeqChild, bool 
bIsIterateChild);
     const css::uno::Reference<css::animations::XAnimationNode>& getNode() 
const { return mxNode; }
     sal_Int16 getEffectNodeType() const { return mnEffectNodeType; }
     sal_Int16 getEffectPresetClass() const { return mnEffectPresetClass; }
diff --git a/sd/source/filter/eppt/pptx-animations.cxx 
b/sd/source/filter/eppt/pptx-animations.cxx
index 43f28433465b..bbae2b29682c 100644
--- a/sd/source/filter/eppt/pptx-animations.cxx
+++ b/sd/source/filter/eppt/pptx-animations.cxx
@@ -1244,7 +1244,7 @@ void PPTXAnimationExport::WriteAnimations(const 
Reference<XDrawPage>& rXDrawPage
     if (!(xEnumeration.is() && xEnumeration->hasMoreElements()))
         return;
 
-    auto pNodeContext = std::make_unique<NodeContext>(xNode, false, false);
+    auto pNodeContext = std::make_unique<NodeContext>(xNode, 
mrPowerPointExport, false, false);
     if (pNodeContext->isValid())
     {
         mpFS->startElementNS(XML_p, XML_timing);
commit a814af6e7d5caef59612a8ac230eb90c0ed410c1
Author:     Gülşah Köse <[email protected]>
AuthorDate: Fri Dec 12 16:32:33 2025 +0300
Commit:     Andras Timar <[email protected]>
CommitDate: Sat Dec 20 11:01:11 2025 +0100

    tdf#169456 Fix the placeholder of master slide style issue
    
    In some cases we see the object in the slide has no fill syle directly but 
parent object
    in master slide can has fill style.
    
    We should apply the style to object in this case.
    
    Signed-off-by: Gülşah Köse <[email protected]>
    Change-Id: I0b061cfde4ac2067c84383764770f155564531a3
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195368
    Reviewed-by: Caolán McNamara <[email protected]>
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Tested-by: Caolán McNamara <[email protected]>

diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx
index afc9f603dfe6..59f86ec73732 100644
--- a/oox/source/drawingml/shape.cxx
+++ b/oox/source/drawingml/shape.cxx
@@ -1642,7 +1642,8 @@ Reference< XShape > const & Shape::createAndInsert(
         }
 
         FillProperties aFillProperties = getActualFillProperties(pTheme, 
&rShapeOrParentShapeFillProps);
-        if (getFillProperties().moFillType.has_value() && 
getFillProperties().moFillType.value() == XML_grpFill)
+        if ((getFillProperties().moFillType.has_value() && 
getFillProperties().moFillType.value() == XML_grpFill) ||
+            aFillProperties.maFillColor.isPlaceHolder() )
             getFillProperties().assignUsed(aFillProperties);
         if(!bIsCroppedGraphic && !bIs3DGraphic)
             aFillProperties.pushToPropMap(aShapeProps, rGraphicHelper, 
mnRotation, nFillPhClr,

Reply via email to