desktop/source/deployment/gui/dp_gui_service.cxx   |    2 
 desktop/source/deployment/gui/dp_gui_theextmgr.cxx |    6 
 desktop/source/deployment/gui/dp_gui_theextmgr.hxx |    2 
 download.lst                                       |   16 +-
 emfio/qa/cppunit/emf/EmfImportTest.cxx             |   12 +
 external/freetype/ubsan.patch                      |    4 
 hwpfilter/source/hwpreader.cxx                     |    7 -
 odk/Package_examples.mk                            |    8 -
 odk/Package_odk_headers.mk                         |   14 --
 solenv/bin/modules/installer/scriptitems.pm        |    2 
 sw/inc/AnnotationWin.hxx                           |    1 
 sw/source/uibase/docvw/AnnotationWin2.cxx          |   13 ++
 vcl/inc/win/salinst.h                              |    1 
 vcl/osx/salinst.cxx                                |   34 +++++
 vcl/source/gdi/TypeSerializer.cxx                  |   15 ++
 vcl/win/app/salinst.cxx                            |  128 +++------------------
 xmloff/source/style/xmlnumi.cxx                    |    9 -
 17 files changed, 134 insertions(+), 140 deletions(-)

New commits:
commit f5fd29560dbbacb1a7a39a2264e5dde6226d396e
Author:     Xisco Fauli <[email protected]>
AuthorDate: Sat Mar 7 12:33:42 2026 +0100
Commit:     Andras Timar <[email protected]>
CommitDate: Mon Mar 9 15:51:15 2026 +0100

    sqlite: upgrade to 3.52.0
    
    Downloaded from https://www.sqlite.org/2026/sqlite-amalgamation-3520000.zip
    
    Change-Id: Idf46e338a1c6d767ed6b15bc9cd464a0645072f1
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/201169
    Reviewed-by: Xisco Fauli <[email protected]>
    Tested-by: Jenkins
    (cherry picked from commit 60ce5b271321c054cb7346792c57af47c8cd8faa)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/201206
    Reviewed-by: Adolfo Jayme Barrientos <[email protected]>

diff --git a/download.lst b/download.lst
index 1337878d293e..1caf9801de44 100644
--- a/download.lst
+++ b/download.lst
@@ -730,8 +730,8 @@ SKIA_TARBALL := 
skia-m142-f4ed99d2443962782cf5f8b4dd27179f131e7cbe.tar.xz
 # three static lines
 # so that git cherry-pick
 # will not run into conflicts
-SQLITE3_SHA256SUM := 
6e2a845a493026bdbad0618b2b5a0cf48584faab47384480ed9f592d912f23ec
-SQLITE3_TARBALL := sqlite-amalgamation-3510200.zip
+SQLITE3_SHA256SUM := 
45d0fea15971dd1300e5b509f48ca134621e10d9297713b64618fbca21b325fa
+SQLITE3_TARBALL := sqlite-amalgamation-3520000.zip
 # three static lines
 # so that git cherry-pick
 # will not run into conflicts
commit 6d96da3a1d3c4bf5a8529c2bc76ce4d6cc97f197
Author:     Patrick Luby <[email protected]>
AuthorDate: Wed Mar 4 11:56:25 2026 -0500
Commit:     Andras Timar <[email protected]>
CommitDate: Mon Mar 9 15:51:15 2026 +0100

    tdf#170740 only repost the same left mouse up event once
    
    Dragging a window's titlebar with the Option key pressed
    may trigger live resizing. Unlike normal live resizing,
    live resizing while Option-dragging a window needs
    left mouse up events to be dispatched to end live
    resizing. So if we keep reposting the same left mouse up
    event, LibreOffice will go into an infinite loop waiting
    for live resizing to end.
    
    Reposting last mouse up events is still needed to
    prevent tdf#155092 during normal live resizing so allow
    last mouse up events to be reposted but only once.
    
    The purpose of reposting is to skip native event
    dispatching during this pass and only let native timers
    run. This lets pending LibreOffice resizing and
    repainting timers run before the left mouse up event is
    dispatched.
    
    Change-Id: Ide2ec9988a8258cd1acf9852a61cfc4d4c1abdef
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/200957
    Reviewed-by: Dan Williams <[email protected]>
    Tested-by: Jenkins
    Reviewed-by: Patrick Luby <[email protected]>
    (cherry picked from commit 7575bbe54a6afec3b289985593977579835cce3f)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/201195
    Reviewed-by: Adolfo Jayme Barrientos <[email protected]>

diff --git a/vcl/osx/salinst.cxx b/vcl/osx/salinst.cxx
index 375f8361b2e2..6cd78291ca40 100644
--- a/vcl/osx/salinst.cxx
+++ b/vcl/osx/salinst.cxx
@@ -586,8 +586,40 @@ bool AquaSalInstance::DoYield(bool bWait, bool 
bHandleAllCurrentEvents)
                 // the front of the event queue so no more events will be
                 // dispatched until live resizing ends. Surprisingly, live
                 // resizing appears to end in the next mouse down event.
-                if ( ImplGetSVData()->mpWinData->mbIsLiveResize && [pEvent 
type] == NSEventTypeLeftMouseUp )
+                bool bRepostEvent = false;
+                if ( ImplGetSVData()->mpWinData->mbIsLiveResize )
+                    bRepostEvent = ( [pEvent type] == NSEventTypeLeftMouseUp );
+
+                // tdf#170740 only repost the same left mouse up event once
+                // Dragging a window's titlebar with the Option key pressed
+                // may trigger live resizing. Unlike normal live resizing,
+                // live resizing while Option-dragging a window needs
+                // left mouse up events to be dispatched to end live
+                // resizing. So if we keep reposting the same left mouse up
+                // event, LibreOffice will go into an infinite loop waiting
+                // for live resizing to end.
+                // Reposting last mouse up events is still needed to
+                // prevent tdf#155092 during normal live resizing so allow
+                // last mouse up events to be reposted but only once.
+                // The purpose of reposting is to skip native event
+                // dispatching during this pass and only let native timers
+                // run. This lets pending LibreOffice resizing and
+                // repainting timers run before the left mouse up event is
+                // dispatched.
+                static NSEvent *pLastRepostedEvent = nil;
+                if ( pLastRepostedEvent )
                 {
+                    [pLastRepostedEvent release];
+                    pLastRepostedEvent = nil;
+                }
+                // Only repost event if pLastRepostedEvent was already nil.
+                // Reposting an event while waiting to dispatch a previously
+                // reposted event can cause incorrect ordering of native events
+                // in the native queue. So, to be safe, resume normal event
+                // dispatching.
+                else if ( bRepostEvent )
+                {
+                    pLastRepostedEvent = [pEvent retain];
                     [NSApp postEvent: pEvent atStart: YES];
                     return false;
                 }
commit f32a01530e36908d1cbbdc950d426a402d3eaf5b
Author:     Xisco Fauli <[email protected]>
AuthorDate: Fri Mar 6 16:28:24 2026 +0100
Commit:     Andras Timar <[email protected]>
CommitDate: Mon Mar 9 15:51:15 2026 +0100

    CppunitTest_emfio_emf: fix build on Windows
    
    Change-Id: Iffc791557eea3e38b02262f81c26c5dece6c343b
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/201137
    Tested-by: Jenkins
    Reviewed-by: Christian Lohmaier <[email protected]>

diff --git a/emfio/qa/cppunit/emf/EmfImportTest.cxx 
b/emfio/qa/cppunit/emf/EmfImportTest.cxx
index 46a5b2fa8281..3d630ae4229c 100644
--- a/emfio/qa/cppunit/emf/EmfImportTest.cxx
+++ b/emfio/qa/cppunit/emf/EmfImportTest.cxx
@@ -1388,12 +1388,20 @@ CPPUNIT_TEST_FIXTURE(Test, 
testExtTextOutScaleGM_COMPATIBLE)
 
     assertXPath(pDocument, aXPathPrefix + "textsimpleportion[3]", "text", 
u"24");
     assertXPath(pDocument, aXPathPrefix + "textsimpleportion[3]", "fontcolor", 
u"#000000");
+#ifndef _WIN32 //FIXME
     assertXPath(pDocument, aXPathPrefix + "textsimpleportion[3]", "width", 
u"201");
+#else
+    assertXPath(pDocument, aXPathPrefix + "textsimpleportion[3]", "width", 
u"199");
+#endif
     assertXPath(pDocument, aXPathPrefix + "textsimpleportion[3]", "height", 
u"317");
 
     assertXPath(pDocument, aXPathPrefix + "textsimpleportion[4]", "text", 
u"25");
     assertXPath(pDocument, aXPathPrefix + "textsimpleportion[4]", "fontcolor", 
u"#000000");
+#ifndef _WIN32 //FIXME
     assertXPath(pDocument, aXPathPrefix + "textsimpleportion[4]", "width", 
u"268");
+#else
+    assertXPath(pDocument, aXPathPrefix + "textsimpleportion[4]", "width", 
u"267");
+#endif
     assertXPath(pDocument, aXPathPrefix + "textsimpleportion[4]", "height", 
u"317");
 
     assertXPath(pDocument, aXPathPrefix + "polygonstroke", 9);
@@ -1749,7 +1757,11 @@ CPPUNIT_TEST_FIXTURE(Test, testCreatePen)
 
     assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion", 69);
     assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[1]", 
"height", u"374");
+#ifndef _WIN32 // FIXME
     assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[1]", 
"width", u"310");
+#else
+    assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[1]", 
"width", u"308");
+#endif
     assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[1]", "x", 
u"28124");
     assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[1]", "y", 
u"16581");
     assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[1]", "text", 
u"0.0");
commit 91bcfe5e645ee72117f4c234f9945d09d23315c7
Author:     Xisco Fauli <[email protected]>
AuthorDate: Thu Mar 5 11:05:26 2026 +0100
Commit:     Andras Timar <[email protected]>
CommitDate: Mon Mar 9 15:50:59 2026 +0100

    poppler: upgrade to 26.03.0
    
    Downloaded from https://poppler.freedesktop.org/poppler-26.03.0.tar.xz
    
    Change-Id: Ibd2a34f0d5729b759eab28d8e4c7bd7fd7f7d52a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/201014
    Reviewed-by: Xisco Fauli <[email protected]>
    Tested-by: Jenkins
    (cherry picked from commit 107bdebf8194ffdebed8a292cde548bcf53468ab)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/201022
    Reviewed-by: Christian Lohmaier <[email protected]>

diff --git a/download.lst b/download.lst
index 1f8e47dbe1a4..1337878d293e 100644
--- a/download.lst
+++ b/download.lst
@@ -667,8 +667,8 @@ LIBTIFF_TARBALL := tiff-4.7.1.tar.xz
 # three static lines
 # so that git cherry-pick
 # will not run into conflicts
-POPPLER_SHA256SUM := 
dded8621f7b2f695c91063aab1558691c8418374cd583501e89ed39487e7ab77
-POPPLER_TARBALL := poppler-26.02.0.tar.xz
+POPPLER_SHA256SUM := 
8b3c5e2a9f2ab4c3ec5029f28af1b433c6b71f0d1e7b3997aa561cf1c0ca4ebe
+POPPLER_TARBALL := poppler-26.03.0.tar.xz
 POPPLER_DATA_SHA256SUM := 
c835b640a40ce357e1b83666aabd95edffa24ddddd49b8daff63adb851cdab74
 POPPLER_DATA_TARBALL := poppler-data-0.4.12.tar.gz
 # three static lines
commit ede3684b3d085a86286e1a968b7339168fe6b838
Author:     Hossein <[email protected]>
AuthorDate: Sat Feb 21 23:05:14 2026 +0100
Commit:     Andras Timar <[email protected]>
CommitDate: Mon Mar 9 15:50:59 2026 +0100

    tdf#170954 Ship LibreOfficeKit headers / examples on macOS
    
    This reverts commit 20ee295dd11fcad8ba72439e6ad28f61ed740958, such that
    LibreOfficeKit headers and examples are usable on macOS again.
    
    After 5d4a689293d47c7671315452f6b90a185fe809c0 and
    857a760f317ad6540a6f03169ef8dda97d2c1de7 among other related patches,
    LibreOfficeKit became usable on macOS. The build issues are fixed in
    d6773eccb382c0c6b9d78f406c96230c5f40f44c.
    
    Change-Id: Ifaac9c3652bf4b4f53b41997015f00b9083628a8
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/199965
    Tested-by: Jenkins
    Reviewed-by: Hossein <[email protected]>
    (cherry picked from commit 2a72ad755d75741a71eff8e75803072c871956f2)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/200251
    Reviewed-by: Christian Lohmaier <[email protected]>

diff --git a/odk/Package_examples.mk b/odk/Package_examples.mk
index f0b4eff160a6..cbc0f0b19f33 100644
--- a/odk/Package_examples.mk
+++ b/odk/Package_examples.mk
@@ -435,11 +435,9 @@ $(eval $(call 
gb_Package_add_files_with_dir,odk_examples,$(SDKDIRNAME)/examples,
     cpp/Convertor/Convertor.cxx \
     cpp/Convertor/Makefile \
     cpp/Convertor/test.odt \
-    $(if $(filter-out $(OS),MACOSX), \
-        cpp/lokconvert/lokconvert.cxx \
-        cpp/lokconvert/Makefile \
-        cpp/lokconvert/test.odt \
-    ) \
+    cpp/lokconvert/lokconvert.cxx \
+    cpp/lokconvert/Makefile \
+    cpp/lokconvert/test.odt \
     cpp/Draw/Draw.cxx \
     cpp/Draw/Makefile \
     cpp/DocumentLoader/DocumentLoader.cxx \
diff --git a/odk/Package_odk_headers.mk b/odk/Package_odk_headers.mk
index e9af36c0fe25..c103c23d4b27 100644
--- a/odk/Package_odk_headers.mk
+++ b/odk/Package_odk_headers.mk
@@ -184,14 +184,12 @@ $(eval $(call 
gb_Package_add_files_with_dir,odk_headers,$(SDKDIRNAME)/include,\
        uno/mapping.hxx \
        uno/sequence2.h \
        uno/threadpool.h \
-       $(if $(filter-out $(OS),MACOSX), \
-               $(if $(ENABLE_GTK3),LibreOfficeKit/LibreOfficeKitGtk.h) \
-                       LibreOfficeKit/LibreOfficeKit.hxx \
-                       LibreOfficeKit/LibreOfficeKitEnums.h \
-                       LibreOfficeKit/LibreOfficeKit.h \
-                       LibreOfficeKit/LibreOfficeKitInit.h \
-                       LibreOfficeKit/LibreOfficeKitTypes.h \
-       ) \
+       $(if $(ENABLE_GTK3),LibreOfficeKit/LibreOfficeKitGtk.h) \
+       LibreOfficeKit/LibreOfficeKit.hxx \
+       LibreOfficeKit/LibreOfficeKitEnums.h \
+       LibreOfficeKit/LibreOfficeKit.h \
+       LibreOfficeKit/LibreOfficeKitInit.h \
+       LibreOfficeKit/LibreOfficeKitTypes.h \
 ))
 
 # vim: set noet sw=4 ts=4:
commit 1d9e4b2942db76e5946bdd0c70911e1aaeb98964
Author:     Caolán McNamara <[email protected]>
AuthorDate: Sun Mar 1 20:56:13 2026 +0000
Commit:     Andras Timar <[email protected]>
CommitDate: Mon Mar 9 15:50:59 2026 +0100

    ofz#421997573 Timeout
    
    clip nNumDisplayLevels import like export does in
    SvxXMLNumRuleExport::exportLevelStyle
    
    Change-Id: I1ddc49a9c70155b9ac6f218cc9d453c36302302f
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/200732
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <[email protected]>
    (cherry picked from commit ba2fb4af99f05a8a8a48d8fbc51bd232a91d634e)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/201056
    Reviewed-by: Xisco Fauli <[email protected]>

diff --git a/xmloff/source/style/xmlnumi.cxx b/xmloff/source/style/xmlnumi.cxx
index 8019855f6b16..487af94ab5d8 100644
--- a/xmloff/source/style/xmlnumi.cxx
+++ b/xmloff/source/style/xmlnumi.cxx
@@ -61,6 +61,7 @@
 #include <xmloff/maptype.hxx>
 
 #include <xmloff/xmlnumi.hxx>
+#include <algorithm>
 #include <optional>
 
 using namespace ::com::sun::star;
@@ -407,12 +408,14 @@ Sequence<beans::PropertyValue> 
SvxXMLListLevelStyleContext_Impl::GetProperties()
         // Generate list format string, based on this
         sListFormat = std::make_optional(sPrefix);
 
-        for (int i = 1; i <= nNumDisplayLevels; i++)
+        // Can't display more levels than exist
+        sal_Int32 nDisplayLevels = std::min<sal_Int32>(nNumDisplayLevels, 
nLevel + 1);
+        for (int i = 1; i <= nDisplayLevels; i++)
         {
             *sListFormat += "%";
-            *sListFormat += OUString::number(nLevel - nNumDisplayLevels + i + 
1);
+            *sListFormat += OUString::number(nLevel - nDisplayLevels + i + 1);
             *sListFormat += "%";
-            if (i != nNumDisplayLevels)
+            if (i != nDisplayLevels)
                 *sListFormat += ".";     // Default separator for older ODT
         }
 
commit 70e0677b0f6c89afd686f0d8ec95c2a02acc8cbe
Author:     Caolán McNamara <[email protected]>
AuthorDate: Sun Mar 1 15:26:55 2026 +0000
Commit:     Andras Timar <[email protected]>
CommitDate: Mon Mar 9 15:50:59 2026 +0100

    ofz#473156285 Integer-overflow
    
    FWIW oox/source/drawingml/fillproperties.cxx is also clamping
    nOffsetX/nOffsetY to max 100. nBorder > 100% doesn't seem to make sense
    and the various GtkAdjustments for the ui limit those to 100% too.
    
    Change-Id: I9efb765af549ac13bdbd9c50a313f0d902059522
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/200713
    Tested-by: Caolán McNamara <[email protected]>
    Reviewed-by: Caolán McNamara <[email protected]>
    (cherry picked from commit ac03040f68d91f6a185596108a8f055e74b99042)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/201057
    Tested-by: Jenkins
    Reviewed-by: Xisco Fauli <[email protected]>

diff --git a/vcl/source/gdi/TypeSerializer.cxx 
b/vcl/source/gdi/TypeSerializer.cxx
index 0edf74bba537..adab7c48f9fb 100644
--- a/vcl/source/gdi/TypeSerializer.cxx
+++ b/vcl/source/gdi/TypeSerializer.cxx
@@ -67,8 +67,23 @@ void TypeSerializer::readGradient(Gradient& rGradient)
         nAngle = 0;
     }
     rGradient.SetAngle(Degree10(nAngle));
+    if (nBorder > 100)
+    {
+        SAL_WARN("vcl", "border out of range " << nBorder);
+        nBorder = 100;
+    }
     rGradient.SetBorder(nBorder);
+    if (nOffsetX > 100)
+    {
+        SAL_WARN("vcl", "offset x out of range " << nOffsetX);
+        nOffsetX = 100;
+    }
     rGradient.SetOfsX(nOffsetX);
+    if (nOffsetY > 100)
+    {
+        SAL_WARN("vcl", "offset y out of range " << nOffsetY);
+        nOffsetY = 100;
+    }
     rGradient.SetOfsY(nOffsetY);
     rGradient.SetStartIntensity(nIntensityStart);
     rGradient.SetEndIntensity(nIntensityEnd);
commit b78c462de7733daffafbae0f3e5df21632ce8fbe
Author:     Xisco Fauli <[email protected]>
AuthorDate: Thu Feb 26 16:40:16 2026 +0100
Commit:     Andras Timar <[email protected]>
CommitDate: Mon Mar 9 15:50:59 2026 +0100

    postgresql: upgrade to 15.17
    
    Downloaded from 
https://ftp.postgresql.org/pub/source/v15.17/postgresql-15.17.tar.bz2
    
    Change-Id: I78152063d79af71864576d341405d7bd076ccd9f
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/200453
    Tested-by: Jenkins
    Reviewed-by: Christian Lohmaier <[email protected]>

diff --git a/download.lst b/download.lst
index fe9415ee4e87..1f8e47dbe1a4 100644
--- a/download.lst
+++ b/download.lst
@@ -674,8 +674,8 @@ POPPLER_DATA_TARBALL := poppler-data-0.4.12.tar.gz
 # three static lines
 # so that git cherry-pick
 # will not run into conflicts
-POSTGRESQL_SHA256SUM := 
695ee29a77be1f5010e10f3667696f29871587f7aa311eadc1f809bea287cf48
-POSTGRESQL_TARBALL := postgresql-15.16.tar.bz2
+POSTGRESQL_SHA256SUM := 
ae14f24c14727e0b2ded1c5553031666099bd1054db3ef44bfa6e2bd6d554a56
+POSTGRESQL_TARBALL := postgresql-15.17.tar.bz2
 # three static lines
 # so that git cherry-pick
 # will not run into conflicts
commit 5b90a8b952af2511b562ced5d7e68b28c07017ea
Author:     Christian Lohmaier <[email protected]>
AuthorDate: Thu Mar 5 15:06:35 2026 +0100
Commit:     Andras Timar <[email protected]>
CommitDate: Mon Mar 9 15:50:59 2026 +0100

    tdf#169032 fix wrong/missing buildid hash in windows MSI packages
    
    while the ini files that are put into instdir are created by
    instsetoo_native/CustomTarget_setup.mk and work just fine in
    wsl-as-helper build environment, the files for installation sets are
    actually created by scp2 and the perl installer code.
    It fails to get the git hash/the command exits with error, so instead of
    doing a separate cd command with fancy redirections use git directly
    with the path argument.
    
    Change-Id: I9ced68c5ed9056e8fb140f7bcf1f07691c60115b
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/201049
    Reviewed-by: Christian Lohmaier <[email protected]>
    Reviewed-by: Xisco Fauli <[email protected]>
    Tested-by: Jenkins
    (cherry picked from commit 14b2feffbc243e9b38e16ca35c6aaea3f9b28d1a)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/201061

diff --git a/solenv/bin/modules/installer/scriptitems.pm 
b/solenv/bin/modules/installer/scriptitems.pm
index 35139fd785e5..555c44c2af2f 100644
--- a/solenv/bin/modules/installer/scriptitems.pm
+++ b/solenv/bin/modules/installer/scriptitems.pm
@@ -615,7 +615,7 @@ sub replace_setup_variables
 
     if ( $localbuild =~ /^\s*(\w+?)(\d+)\s*$/ ) { $localbuild = $2; }   # 
using "680" instead of "src680"
 
-    my $buildidstring = `cd $ENV{'SRCDIR'} 2>&1 >/dev/null && git log -n 1 
--pretty=format:"%H"`;
+    my $buildidstring = `git -C $ENV{'SRCDIR'} log -n 1 --pretty=format:"%H"`;
     if ($? || !$buildidstring) {
         $buildidstring = $localbuild . "(Build:" . 
$installer::globals::buildid . ")";
     }
commit 13dc6797111640f59220eea9a093d78ecb06fe66
Author:     Caolán McNamara <[email protected]>
AuthorDate: Sun Mar 1 19:48:00 2026 +0000
Commit:     Andras Timar <[email protected]>
CommitDate: Mon Mar 9 15:50:59 2026 +0100

    ofz#481418344 Timeout
    
    Change-Id: I12d5cc145e3d2cf156d2b1d30b50d9d9d25a25e2
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/200730
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <[email protected]>
    (cherry picked from commit 5bd6ce333a1e21c68858120d22cac7e25d591f8b)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/201055
    Reviewed-by: Xisco Fauli <[email protected]>

diff --git a/hwpfilter/source/hwpreader.cxx b/hwpfilter/source/hwpreader.cxx
index 121183d4e7a2..568e07101c75 100644
--- a/hwpfilter/source/hwpreader.cxx
+++ b/hwpfilter/source/hwpreader.cxx
@@ -1485,6 +1485,11 @@ void HwpReader::makePageStyle()
          pmCount = 512;
      }
 
+     OUString sBackInfoEncoded;
+     // Do this once, so if we need it we don't end up with many duplicate 
strings of the background image
+     if (hwpinfo.back_info.isset && hwpinfo.back_info.type == 2 && 
hwpinfo.back_info.size > 0)
+         sBackInfoEncoded = base64_encode_string(reinterpret_cast<unsigned 
char*>(hwpinfo.back_info.data.data()), hwpinfo.back_info.size);
+
      for( int i = 0 ; i < pmCount ; i++ ){
          mxList->addAttribute(u"style:name"_ustr, sXML_CDATA, "pm" + 
OUString::number(i + 1));
          startEl(u"style:page-master"_ustr);
@@ -1679,7 +1684,7 @@ void HwpReader::makePageStyle()
              if( hwpinfo.back_info.type == 2 ){
                  startEl(u"office:binary-data"_ustr);
                  mxList->clear();
-                 chars(base64_encode_string(reinterpret_cast<unsigned 
char*>(hwpinfo.back_info.data.data()), hwpinfo.back_info.size));
+                 chars(sBackInfoEncoded);
                  endEl(u"office:binary-data"_ustr);
              }
              endEl(u"style:background-image"_ustr);
commit e71fd07ea7d3691defbb8564795a711e9cedeee5
Author:     Mike Kaganski <[email protected]>
AuthorDate: Thu Mar 5 09:29:41 2026 +0100
Commit:     Andras Timar <[email protected]>
CommitDate: Mon Mar 9 15:50:58 2026 +0100

    tdf#170205: drop NoYieldLock mode
    
    Added in commit 4baec725e0dc0713f0d47003e9b10bc3b62f56ff (WIN run
    main thread redirects ignoring SolarMutex, 2017-09-26), it tried to
    handle SendMessage calls without releasing SolarMutex in the calling
    code. The idea seemed to be, that the calling thread keeps holding
    SolarMutex while waiting for the main thread, and main thread has
    this mode that turns all calls to acquire/release/test solar mutex
    to noop (which was safe, since the thread holding the mutex is known
    to be blocked).
    
    Unfortunately, that doesn't work. The many hangs discovered since
    then (e.g., commit 1e2e51607a163021ef1fb1fb0d217266bd448173 - Try
    to use CoWaitForMultipleHandles magic to handle COM message loop,
    2025-01-10) required to unlock solar mutex when calling SendMessage
    (implemented in commit 23afeaedf4d4a03943338fc39ae41f5c423e5997 -
    tdf#168431: Release solar mutex when sending window message to main
    thread, 2025-09-09). It made it possibe, that SolarMutex::doRelease
    called from non-main thread got false from IsCurrentThread, because
    the NoYieldLock mode was active, and SalYieldMutex::IsCurrentThread
    only checked that current thread is main; that caused abort().
    
    This change removes this special mode. The intention is, that every
    call to SendMessage must release solar mutex, and allow main thread
    to lock it. Hope this is a reasonable approach.
    
    Change-Id: I838be4d366b24727cd93610d9cacfbe14992923e
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/201007
    Reviewed-by: Noel Grandin <[email protected]>
    Reviewed-by: Mike Kaganski <[email protected]>
    Tested-by: Jenkins
    Signed-off-by: Xisco Fauli <[email protected]>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/201016

diff --git a/vcl/inc/win/salinst.h b/vcl/inc/win/salinst.h
index 398efdc1888d..6fc7833fcef8 100644
--- a/vcl/inc/win/salinst.h
+++ b/vcl/inc/win/salinst.h
@@ -37,7 +37,6 @@ public:
     HWND                mhComWnd;
 
     osl::Condition      maWaitingYieldCond;
-    unsigned            m_nNoYieldLock;
 
 public:
     WinSalInstance();
diff --git a/vcl/win/app/salinst.cxx b/vcl/win/app/salinst.cxx
index c7e4f1106ef8..93d57c4c8cef 100644
--- a/vcl/win/app/salinst.cxx
+++ b/vcl/win/app/salinst.cxx
@@ -84,9 +84,6 @@ protected:
 
 public:
     explicit SalYieldMutex();
-
-    virtual bool              IsCurrentThread() const override;
-    virtual bool              tryToAcquire() override;
 };
 
 SalYieldMutex::SalYieldMutex()
@@ -114,8 +111,6 @@ void SalYieldMutex::doAcquire( sal_uInt32 nLockCount )
     WinSalInstance* pInst = GetSalData()->mpInstance;
     if ( pInst && pInst->IsMainThread() )
     {
-        if ( pInst->m_nNoYieldLock )
-            return;
         // tdf#96887 If this is the main thread, then we must wait for two 
things:
         // - the yield mutex being unlocked
         // - SendMessage() being triggered
@@ -151,10 +146,6 @@ void SalYieldMutex::doAcquire( sal_uInt32 nLockCount )
 
 sal_uInt32 SalYieldMutex::doRelease( const bool bUnlockAll )
 {
-    WinSalInstance* pInst = GetSalData()->mpInstance;
-    if ( pInst && pInst->m_nNoYieldLock && pInst->IsMainThread() )
-        return 1;
-
     sal_uInt32 nCount = comphelper::SolarMutex::doRelease( bUnlockAll );
     // wake up ImplSalYieldMutexAcquireWithWait() after release
     if ( 0 == m_nCount )
@@ -162,20 +153,6 @@ sal_uInt32 SalYieldMutex::doRelease( const bool bUnlockAll 
)
     return nCount;
 }
 
-bool SalYieldMutex::tryToAcquire()
-{
-    WinSalInstance* pInst = GetSalData()->mpInstance;
-    if ( pInst )
-    {
-        if ( pInst->m_nNoYieldLock && pInst->IsMainThread() )
-            return true;
-        else
-            return comphelper::SolarMutex::tryToAcquire();
-    }
-    else
-        return false;
-}
-
 void ImplSalYieldMutexAcquireWithWait( sal_uInt32 nCount )
 {
     WinSalInstance* pInst = GetSalData()->mpInstance;
@@ -199,14 +176,6 @@ void ImplSalYieldMutexRelease()
     }
 }
 
-bool SalYieldMutex::IsCurrentThread() const
-{
-    if ( !GetSalData()->mpInstance->m_nNoYieldLock )
-        return SolarMutex::IsCurrentThread();
-    else
-        return GetSalData()->mpInstance->IsMainThread();
-}
-
 void SalData::initKeyCodeMap()
 {
     auto initKey = [this](wchar_t ch, sal_uInt16 key)
@@ -399,7 +368,6 @@ WinSalInstance::WinSalInstance()
     : SalInstance(std::make_unique<SalYieldMutex>())
     , mhInst( nullptr )
     , mhComWnd( nullptr )
-    , m_nNoYieldLock( 0 )
 {
     ImplSVData* pSVData = ImplGetSVData();
     pSVData->maAppData.mxToolkitName = OUString("win");
@@ -440,12 +408,6 @@ bool ImplSalYield(const bool bWait, const bool 
bHandleAllCurrentEvents)
     // used to abort further message processing on tick count wraps
     static sal_uInt32 nLastTicks = 0;
 
-    // we should never yield in m_nNoYieldLock mode!
-    const bool bNoYieldLock = (GetSalData()->mpInstance->m_nNoYieldLock > 0);
-    assert(!bNoYieldLock);
-    if (bNoYieldLock)
-        return false;
-
     MSG aMsg;
     bool bWasMsg = false, bWasTimeoutMsg = false;
     WinSalTimer* pTimer = 
static_cast<WinSalTimer*>(ImplGetSVData()->maSchedCtx.mpSalTimer);
@@ -542,26 +504,6 @@ bool WinSalInstance::DoYield(bool bWait, bool 
bHandleAllCurrentEvents)
     return bDidWork;
 }
 
-namespace
-{
-struct NoYieldLockGuard
-{
-    NoYieldLockGuard()
-        : counter(InSendMessage() ? GetSalData()->mpInstance->m_nNoYieldLock : 
dummy())
-    {
-        ++counter;
-    }
-    ~NoYieldLockGuard() { --counter; }
-    static decltype(WinSalInstance::m_nNoYieldLock)& dummy()
-    {
-        DBG_TESTSOLARMUTEX(); // called when !InSendMessage()
-        static decltype(WinSalInstance::m_nNoYieldLock) n = 0;
-        return n;
-    }
-    decltype(WinSalInstance::m_nNoYieldLock)& counter;
-};
-}
-
 LRESULT CALLBACK SalComWndProc( HWND, UINT nMsg, WPARAM wParam, LPARAM lParam, 
bool& rDef )
 {
     LRESULT nRet = 0;
@@ -602,33 +544,21 @@ LRESULT CALLBACK SalComWndProc( HWND, UINT nMsg, WPARAM 
wParam, LPARAM lParam, b
             pTimer->ImplStop();
             break;
 
-        case (SAL_MSG_CREATEFRAME):
-            {
-                NoYieldLockGuard g;
-                nRet = reinterpret_cast<LRESULT>(
-                    ImplSalCreateFrame(GetSalData()->mpInstance, 
reinterpret_cast<HWND>(lParam),
-                                       
static_cast<SalFrameStyleFlags>(wParam)));
-            }
+        case SAL_MSG_CREATEFRAME:
+            nRet = reinterpret_cast<LRESULT>(
+                ImplSalCreateFrame(GetSalData()->mpInstance, 
reinterpret_cast<HWND>(lParam),
+                                   static_cast<SalFrameStyleFlags>(wParam)));
             break;
-        case (SAL_MSG_RECREATEHWND):
-            {
-                NoYieldLockGuard g;
-                nRet = reinterpret_cast<LRESULT>(ImplSalReCreateHWND(
-                    reinterpret_cast<HWND>(wParam), 
reinterpret_cast<HWND>(lParam), false));
-            }
+        case SAL_MSG_RECREATEHWND:
+            nRet = reinterpret_cast<LRESULT>(ImplSalReCreateHWND(
+                reinterpret_cast<HWND>(wParam), 
reinterpret_cast<HWND>(lParam), false));
             break;
-        case (SAL_MSG_RECREATECHILDHWND):
-            {
-                NoYieldLockGuard g;
-                nRet = reinterpret_cast<LRESULT>(ImplSalReCreateHWND(
-                    reinterpret_cast<HWND>(wParam), 
reinterpret_cast<HWND>(lParam), true));
-            }
+        case SAL_MSG_RECREATECHILDHWND:
+            nRet = reinterpret_cast<LRESULT>(ImplSalReCreateHWND(
+                reinterpret_cast<HWND>(wParam), 
reinterpret_cast<HWND>(lParam), true));
             break;
-        case (SAL_MSG_DESTROYFRAME):
-            {
-                NoYieldLockGuard g;
-                delete reinterpret_cast<SalFrame*>(lParam);
-            }
+        case SAL_MSG_DESTROYFRAME:
+            delete reinterpret_cast<SalFrame*>(lParam);
             break;
 
         case SAL_MSG_DESTROYHWND:
@@ -643,31 +573,19 @@ LRESULT CALLBACK SalComWndProc( HWND, UINT nMsg, WPARAM 
wParam, LPARAM lParam, b
             }
             break;
 
-        case (SAL_MSG_CREATEOBJECT):
-            {
-                NoYieldLockGuard g;
-                nRet = reinterpret_cast<LRESULT>(ImplSalCreateObject(
-                    GetSalData()->mpInstance, 
reinterpret_cast<WinSalFrame*>(lParam)));
-            }
+        case SAL_MSG_CREATEOBJECT:
+            nRet = reinterpret_cast<LRESULT>(ImplSalCreateObject(
+                GetSalData()->mpInstance, 
reinterpret_cast<WinSalFrame*>(lParam)));
             break;
-        case (SAL_MSG_DESTROYOBJECT):
-            {
-                NoYieldLockGuard g;
-                delete reinterpret_cast<SalObject*>(lParam);
-            }
+        case SAL_MSG_DESTROYOBJECT:
+            delete reinterpret_cast<SalObject*>(lParam);
             break;
-        case (SAL_MSG_GETCACHEDDC):
-            {
-                NoYieldLockGuard g;
-                nRet = reinterpret_cast<LRESULT>(
-                    GetDCEx(reinterpret_cast<HWND>(wParam), nullptr, 
0x00000002L));
-            }
+        case SAL_MSG_GETCACHEDDC:
+            nRet = reinterpret_cast<LRESULT>(
+                GetDCEx(reinterpret_cast<HWND>(wParam), nullptr, 0x00000002L));
             break;
-        case (SAL_MSG_RELEASEDC):
-            {
-                NoYieldLockGuard g;
-                ReleaseDC(reinterpret_cast<HWND>(wParam), 
reinterpret_cast<HDC>(lParam));
-            }
+        case SAL_MSG_RELEASEDC:
+            ReleaseDC(reinterpret_cast<HWND>(wParam), 
reinterpret_cast<HDC>(lParam));
             break;
 
         case SAL_MSG_TIMER_CALLBACK:
@@ -766,7 +684,7 @@ bool WinSalInstance::AnyInput( VclInputFlags nType )
 LRESULT WinSalInstance::SendWndMessage_impl(HWND hWnd, UINT Msg, WPARAM 
wParam, LPARAM lParam) const
 {
     std::optional<SolarMutexReleaser> oReleaser;
-    if (!IsMainThread())
+    if (GetCurrentThreadId() != GetWindowThreadProcessId(hWnd, nullptr))
         oReleaser.emplace();
     return SendMessageW(hWnd, Msg, wParam, lParam);
 }
commit eb68482f251a018dc4d54959801d5177a7082f72
Author:     Michael Weghorn <[email protected]>
AuthorDate: Mon Feb 23 18:27:53 2026 +0100
Commit:     Andras Timar <[email protected]>
CommitDate: Mon Mar 9 15:50:58 2026 +0100

    tdf#170805 extension mgr: Use more specific weld::Dialog
    
    Return and use the more specific weld::Dialog
    subclass in TheExtensionManager::getDialog
    instead of just weld::Window.
    
    Change-Id: I931864f8117af87386761f0838b4f3970d9d8c62
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/200150
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <[email protected]>
    (cherry picked from commit f379e1c62b6303189d1223d2b6233cf3bf1072d0)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/200270
    Reviewed-by: Adolfo Jayme Barrientos <[email protected]>

diff --git a/desktop/source/deployment/gui/dp_gui_service.cxx 
b/desktop/source/deployment/gui/dp_gui_service.cxx
index 2045e4e52c4d..1a9c1f90b7ca 100644
--- a/desktop/source/deployment/gui/dp_gui_service.cxx
+++ b/desktop/source/deployment/gui/dp_gui_service.cxx
@@ -182,7 +182,7 @@ void ServiceImpl::setDialogTitle( OUString const & title )
     if ( dp_gui::TheExtensionManager::s_ExtMgr.is() )
     {
         const SolarMutexGuard guard;
-        if (weld::Window* pDialog = 
dp_gui::TheExtensionManager::s_ExtMgr->getDialog())
+        if (weld::Dialog* pDialog = 
dp_gui::TheExtensionManager::s_ExtMgr->getDialog())
             pDialog->set_title(title);
     }
 }
diff --git a/desktop/source/deployment/gui/dp_gui_theextmgr.cxx 
b/desktop/source/deployment/gui/dp_gui_theextmgr.cxx
index 04d1e08077db..c2f0b5c354ad 100644
--- a/desktop/source/deployment/gui/dp_gui_theextmgr.cxx
+++ b/desktop/source/deployment/gui/dp_gui_theextmgr.cxx
@@ -148,7 +148,7 @@ void TheExtensionManager::SetText( const OUString &rTitle )
 {
     const SolarMutexGuard guard;
 
-    if (weld::Window* pDialog = getDialog())
+    if (weld::Dialog* pDialog = getDialog())
         pDialog->set_title( rTitle );
 }
 
@@ -157,7 +157,7 @@ void TheExtensionManager::ToTop()
 {
     const SolarMutexGuard guard;
 
-    if (weld::Window* pDialog = getDialog())
+    if (weld::Dialog* pDialog = getDialog())
         pDialog->present();
 }
 
@@ -196,7 +196,7 @@ sal_Int16 TheExtensionManager::execute()
 
 bool TheExtensionManager::isVisible()
 {
-    weld::Window* pDialog = getDialog();
+    weld::Dialog* pDialog = getDialog();
     return pDialog && pDialog->get_visible();
 }
 
diff --git a/desktop/source/deployment/gui/dp_gui_theextmgr.hxx 
b/desktop/source/deployment/gui/dp_gui_theextmgr.hxx
index dbfe0b76ff3f..0a2cb5813f49 100644
--- a/desktop/source/deployment/gui/dp_gui_theextmgr.hxx
+++ b/desktop/source/deployment/gui/dp_gui_theextmgr.hxx
@@ -68,7 +68,7 @@ public:
     bool isModified() const { return m_bModified; }
     void clearModified() { m_bModified = false; }
 
-    weld::Window* getDialog()
+    weld::Dialog* getDialog()
     {
         if (m_xExtMgrDialog)
             return m_xExtMgrDialog->getDialog();
commit 629d8a21cc99b5e974eefe2e23f322ccb11f2552
Author:     Xisco Fauli <[email protected]>
AuthorDate: Mon Mar 2 10:20:07 2026 +0100
Commit:     Andras Timar <[email protected]>
CommitDate: Mon Mar 9 15:50:58 2026 +0100

    freetype: upgrade to 2.14.2
    
    Downloaded from 
https://download.savannah.gnu.org/releases/freetype/freetype-2.14.2.tar.xz
    
    Change-Id: I5f1896b71497be9b730c0725e23c48d3d1c893dd
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/200776
    Tested-by: Jenkins
    Reviewed-by: Xisco Fauli <[email protected]>
    (cherry picked from commit c9da599daf8ffdb198d364925649ed7729df7c89)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/200817
    Reviewed-by: Adolfo Jayme Barrientos <[email protected]>

diff --git a/download.lst b/download.lst
index 053bc568a47b..fe9415ee4e87 100644
--- a/download.lst
+++ b/download.lst
@@ -370,8 +370,8 @@ FREEHAND_TARBALL := libfreehand-0.1.2.tar.xz
 # three static lines
 # so that git cherry-pick
 # will not run into conflicts
-FREETYPE_SHA256SUM := 
32427e8c471ac095853212a37aef816c60b42052d4d9e48230bab3bdf2936ccc
-FREETYPE_TARBALL := freetype-2.14.1.tar.xz
+FREETYPE_SHA256SUM := 
4b62dcab4c920a1a860369933221814362e699e26f55792516d671e6ff55b5e1
+FREETYPE_TARBALL := freetype-2.14.2.tar.xz
 # three static lines
 # so that git cherry-pick
 # will not run into conflicts
diff --git a/external/freetype/ubsan.patch b/external/freetype/ubsan.patch
index f7099f110eec..10c527e9db85 100644
--- a/external/freetype/ubsan.patch
+++ b/external/freetype/ubsan.patch
@@ -1,11 +1,11 @@
 --- src/autofit/aflatin.c
 +++ src/autofit/aflatin.c
-@@ -3705,11 +3705,13 @@
+@@ -3711,11 +3711,13 @@
          /* We also check that the y minimum of the 'other' contour */
          /* is below the high contour to avoid potential false hits */
          /* with contours enclosed in the high one.                 */
 +        if (max_y != FT_LONG_MIN) {
-         distance = high_min_y - max_y;
+         distance = SUB_LONG( high_min_y, max_y );
          if ( distance < 64           &&
               distance < min_distance &&
               min_y < high_min_y      )
commit 2e8e6dae8342ae25fdb9639b54ecb3f3218ee1d5
Author:     Caolán McNamara <[email protected]>
AuthorDate: Tue Mar 3 11:58:45 2026 +0000
Commit:     Andras Timar <[email protected]>
CommitDate: Mon Mar 9 15:50:58 2026 +0100

    tdf#170645 During a save the comment can lose focus
    
    During the save the ui is set disabled/insensitive, and the gtk
    widget in the comment will lose focus, and not automatically regain
    it when enabled/sensitive. So manually restore it when enabled and
    it should still have focus.
    
    Change-Id: Icf08d6695cb1d6883636747bb3d70e18f64fb75c
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/200884
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <[email protected]>
    (cherry picked from commit 56f2abbf3f107d849305df507818f00e6f6086df)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/200926
    Reviewed-by: Adolfo Jayme Barrientos <[email protected]>

diff --git a/sw/inc/AnnotationWin.hxx b/sw/inc/AnnotationWin.hxx
index 622cb88f7396..ad6c03e10d75 100644
--- a/sw/inc/AnnotationWin.hxx
+++ b/sw/inc/AnnotationWin.hxx
@@ -212,6 +212,7 @@ class SAL_DLLPUBLIC_RTTI SwAnnotationWin final : public 
InterimItemWindow
 
         virtual void    LoseFocus() override;
         virtual void    GetFocus() override;
+        virtual void    StateChanged(StateChangedType nStateChange) override;
 
         virtual void Paint(vcl::RenderContext& rRenderContext, const 
tools::Rectangle& rRect) override;
         void        SetSizePixel( const Size& rNewSize ) override;
diff --git a/sw/source/uibase/docvw/AnnotationWin2.cxx 
b/sw/source/uibase/docvw/AnnotationWin2.cxx
index f665c6e9f22a..d10f89b4c05c 100644
--- a/sw/source/uibase/docvw/AnnotationWin2.cxx
+++ b/sw/source/uibase/docvw/AnnotationWin2.cxx
@@ -970,6 +970,19 @@ void SwAnnotationWin::Paint(vcl::RenderContext& 
rRenderContext, const tools::Rec
     }
 }
 
+// tdf#170645 During a save the UI is disabled/insensitive so in GTK the
+// widget with focus will lose it, so restore that when enabled/sensitive
+void SwAnnotationWin::StateChanged(StateChangedType nStateChange)
+{
+    InterimItemWindow::StateChanged(nStateChange);
+    if (nStateChange == StateChangedType::Enable && IsEnabled()
+        && mrMgr.GetActiveSidebarWin() == this
+        && mxSidebarTextControl && !mxSidebarTextControl->HasFocus())
+    {
+        mxSidebarTextControl->GrabFocus();
+    }
+}
+
 void SwAnnotationWin::ShowNote()
 {
     SetPosAndSize();

Reply via email to