configure.ac                                      |    4 +-
 external/skia/Library_skia.mk                     |    5 ++
 pyuno/source/module/pyuno.cxx                     |    3 +
 pyuno/source/module/pyuno_callable.cxx            |    3 +
 pyuno/source/module/pyuno_iterator.cxx            |    6 +++
 pyuno/source/module/pyuno_runtime.cxx             |    3 +
 pyuno/source/module/pyuno_struct.cxx              |    3 +
 sc/source/ui/miscdlgs/solveroptions.cxx           |    2 -
 sd/source/core/drawdoc2.cxx                       |    6 ++-
 sd/source/core/sdpage.cxx                         |    3 +
 sw/source/core/layout/tabfrm.cxx                  |    2 -
 sw/source/filter/ww8/wrtw8nds.cxx                 |   41 +++++++++++-----------
 vcl/qa/cppunit/pdfexport/data/tdf142133.docx      |binary
 vcl/qa/cppunit/pdfexport/pdfexport.cxx            |   35 ++++++++++++++++++
 vcl/qt5/QtInstance.cxx                            |    5 ++
 vcl/win/window/salframe.cxx                       |    2 -
 writerfilter/source/dmapper/DomainMapper_Impl.cxx |   23 +++++++-----
 writerfilter/source/dmapper/DomainMapper_Impl.hxx |    3 +
 18 files changed, 115 insertions(+), 34 deletions(-)

New commits:
commit ae2fa89cf241942e5a80e4f3b08182bcdab138da
Author:     Rafael Lima <rafael.palma.l...@gmail.com>
AuthorDate: Wed Mar 13 23:30:17 2024 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Sun Mar 17 20:42:33 2024 +0100

    tdf#160122 Increase height of the Solver Options dialog
    
    Currently the Solver Options dialog (Tools - Solver and then click the 
Options button) has a height of 6 rows, which is good for the Linear and Swarm 
non-linear solvers, since they have 4-5 options.
    
    However, the SCO and DEPS engines have 12 and 19 options, respectively, so 
it is very unconfortable to view and scroll through these options with such a 
small dialog.
    
    This patch raises the height of the dialog to 12, so that scrolling is 
minimized, making it more confortable to navigate through the solver options.
    
    Change-Id: I51c1c6880613818dd91c6bb8494775c863e8b406
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164749
    Tested-by: Jenkins
    Reviewed-by: Heiko Tietze <heiko.tie...@documentfoundation.org>
    Reviewed-by: Adolfo Jayme Barrientos <fit...@ubuntu.com>
    (cherry picked from commit 58f565cb2dcf6e7b7eb2eb269776993516a29bf0)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164875

diff --git a/sc/source/ui/miscdlgs/solveroptions.cxx 
b/sc/source/ui/miscdlgs/solveroptions.cxx
index 3d5b2b47c178..81f5c8b7b4ce 100644
--- a/sc/source/ui/miscdlgs/solveroptions.cxx
+++ b/sc/source/ui/miscdlgs/solveroptions.cxx
@@ -69,7 +69,7 @@ ScSolverOptionsDialog::ScSolverOptionsDialog(weld::Window* 
pParent,
     , m_xBtnEdit(m_xBuilder->weld_button("edit"))
 {
     
m_xLbSettings->set_size_request(m_xLbSettings->get_approximate_digit_width() * 
32,
-                                    m_xLbSettings->get_height_rows(6));
+                                    m_xLbSettings->get_height_rows(12));
 
     m_xLbSettings->enable_toggle_buttons(weld::ColumnToggleType::Check);
 
commit 4756c7e6632f41ae48648f13ac463e6413f3315d
Author:     Patrick Luby <guibmac...@gmail.com>
AuthorDate: Sat Mar 16 14:46:29 2024 -0400
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Sun Mar 17 20:42:33 2024 +0100

    tdf#160036 Enable SKSL when using Skia/Raster
    
    Starting with the upgrade of Skia from m111 to m116, SKSL is disabled
    by default for Skia/Raster so define SK_RASTER_PIPELINE_OPS_ALL to
    enable it.
    
    Change-Id: Ibd10efa0540f1e87123c341b529c8e3931e1a8fb
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164933
    Tested-by: Jenkins
    Reviewed-by: Patrick Luby <guibomac...@gmail.com>
    (cherry picked from commit 22dbaf45fb378107ad7daa0d7894939d6e0c7ee3)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164876
    Reviewed-by: Adolfo Jayme Barrientos <fit...@ubuntu.com>

diff --git a/external/skia/Library_skia.mk b/external/skia/Library_skia.mk
index c2163d299327..55af14cd2daf 100644
--- a/external/skia/Library_skia.mk
+++ b/external/skia/Library_skia.mk
@@ -23,6 +23,7 @@ $(eval $(call gb_Library_add_defs,skia,\
     -DSK_USER_CONFIG_HEADER="<$(BUILDDIR)/config_host/config_skia.h>" \
     $(if $(filter INTEL,$(CPUNAME)),$(if $(filter 
WNT,$(OS)),-DSK_CPU_SSE_LEVEL=SK_CPU_SSE_LEVEL_SSE1,-DSK_CPU_SSE_LEVEL=0)) \
     $(if $(filter X86_64,$(CPUNAME)),-DSK_CPU_SSE_LEVEL=SK_CPU_SSE_LEVEL_SSE2) 
\
+    -DSK_ENABLE_SKSL_IN_RASTER_PIPELINE \
 ))
 
 # SK_DEBUG controls runtime checks and is controlled by config_skia.h and 
depends on DBG_UTIL.
@@ -565,6 +566,8 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/sksl/analysis/SkSLReturnsInputAlpha \
     UnpackedTarball/skia/src/sksl/analysis/SkSLSymbolTableStackBuilder \
     UnpackedTarball/skia/src/sksl/analysis/SkSLSwitchCaseContainsExit \
+    UnpackedTarball/skia/src/sksl/analysis/SkSLGetLoopControlFlowInfo \
+    UnpackedTarball/skia/src/sksl/analysis/SkSLIsDynamicallyUniformExpression \
     UnpackedTarball/skia/src/sksl/codegen/SkSLGLSLCodeGenerator \
     UnpackedTarball/skia/src/sksl/codegen/SkSLMetalCodeGenerator \
     UnpackedTarball/skia/src/sksl/codegen/SkSLPipelineStageCodeGenerator \
@@ -572,6 +575,8 @@ $(eval $(call 
gb_Library_add_generated_exception_objects,skia,\
     UnpackedTarball/skia/src/sksl/codegen/SkSLSPIRVtoHLSL \
     UnpackedTarball/skia/src/sksl/codegen/SkSLVMCodeGenerator \
     UnpackedTarball/skia/src/sksl/codegen/SkSLWGSLCodeGenerator \
+    UnpackedTarball/skia/src/sksl/codegen/SkSLRasterPipelineBuilder \
+    UnpackedTarball/skia/src/sksl/codegen/SkSLRasterPipelineCodeGenerator \
     UnpackedTarball/skia/src/sksl/transform/SkSLAddConstToVarModifiers \
     UnpackedTarball/skia/src/sksl/transform/SkSLEliminateDeadFunctions \
     UnpackedTarball/skia/src/sksl/transform/SkSLEliminateDeadGlobalVariables \
commit 4fa5c7400572f46ac88007a7d712a36e7bf53277
Author:     Miklos Vajna <vmik...@collabora.com>
AuthorDate: Wed Mar 13 14:07:50 2024 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Sun Mar 17 20:42:33 2024 +0100

    sw: fix fieldmark crash in MSWordExportBase::OutputTextNode()
    
    Crashreport signature:
    
    program/libmswordlo.so
          MSWordExportBase::OutputTextNode(SwTextNode&)
                  sw/source/filter/ww8/wrtw8nds.cxx:2547
    program/libmswordlo.so
          MSWordExportBase::WriteText()
                  sw/source/filter/ww8/wrtww8.cxx:2936
    program/libmswordlo.so
          DocxExport::WriteMainText()
                  
/opt/rh/devtoolset-10/root/usr/include/c++/10/bits/stl_tree.h:1261
    program/libmswordlo.so
          DocxExport::ExportDocument_Impl()
                  sw/source/filter/ww8/docxexport.cxx:541
    
    Keep the assert, because ideally it should not happen that we have no
    fieldmark at CH_TXT_ATR_FIELDEND, but crashing in non-debug builds goes
    a bit too far.
    
    Change-Id: I428f46821771802a0ea2beaaf86463487e561aff
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164844
    Tested-by: Jenkins
    Reviewed-by: Miklos Vajna <vmik...@collabora.com>
    (cherry picked from commit 27a41c7e4ec0e82e2ed0ca2577574f5295a16057)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164825
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>

diff --git a/sw/source/filter/ww8/wrtw8nds.cxx 
b/sw/source/filter/ww8/wrtw8nds.cxx
index 68437c9529b3..e33e8708f453 100644
--- a/sw/source/filter/ww8/wrtw8nds.cxx
+++ b/sw/source/filter/ww8/wrtw8nds.cxx
@@ -2658,33 +2658,36 @@ void MSWordExportBase::OutputTextNode( SwTextNode& 
rNode )
 
                     assert(pFieldmark);
 
-                    if (pFieldmark->GetFieldname() == ODF_FORMDATE)
+                    if (pFieldmark)
                     {
-                        if(GetExportFormat() == 
MSWordExportBase::ExportFormat::DOCX) // supported by DOCX only
+                        if (pFieldmark->GetFieldname() == ODF_FORMDATE)
                         {
-                            OutputField( nullptr, ww::eFORMDATE, OUString(), 
FieldFlags::Close );
+                            if(GetExportFormat() == 
MSWordExportBase::ExportFormat::DOCX) // supported by DOCX only
+                            {
+                                OutputField( nullptr, ww::eFORMDATE, 
OUString(), FieldFlags::Close );
+                            }
                         }
-                    }
-                    else
-                    {
-                        ww::eField eFieldId = lcl_getFieldId( pFieldmark );
-                        if (pFieldmark->GetFieldname() == ODF_UNHANDLED)
+                        else
                         {
-                            IFieldmark::parameter_map_t::const_iterator it = 
pFieldmark->GetParameters()->find( ODF_ID_PARAM );
-                            if ( it != pFieldmark->GetParameters()->end() )
+                            ww::eField eFieldId = lcl_getFieldId( pFieldmark );
+                            if (pFieldmark->GetFieldname() == ODF_UNHANDLED)
                             {
-                                OUString sFieldId;
-                                it->second >>= sFieldId;
-                                eFieldId = 
static_cast<ww::eField>(sFieldId.toInt32());
+                                IFieldmark::parameter_map_t::const_iterator it 
= pFieldmark->GetParameters()->find( ODF_ID_PARAM );
+                                if ( it != pFieldmark->GetParameters()->end() )
+                                {
+                                    OUString sFieldId;
+                                    it->second >>= sFieldId;
+                                    eFieldId = 
static_cast<ww::eField>(sFieldId.toInt32());
+                                }
                             }
-                        }
 
-                        OutputField( nullptr, eFieldId, OUString(), 
FieldFlags::Close );
+                            OutputField( nullptr, eFieldId, OUString(), 
FieldFlags::Close );
 
-                        if (pFieldmark->GetFieldname() == ODF_FORMTEXT
-                             && GetExportFormat() != 
MSWordExportBase::ExportFormat::DOCX )
-                        {
-                            AppendBookmark( pFieldmark->GetName() );
+                            if (pFieldmark->GetFieldname() == ODF_FORMTEXT
+                                    && GetExportFormat() != 
MSWordExportBase::ExportFormat::DOCX )
+                            {
+                                AppendBookmark( pFieldmark->GetName() );
+                            }
                         }
                     }
                 }
commit 34e29a5c3bfe852c74db8c2949c4cd419c8e50d2
Author:     Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Fri Mar 15 05:06:37 2024 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Sun Mar 17 20:42:33 2024 +0100

    Re-enable Alt key handling
    
    Regression after commit 772da0f1aa6891a0b31d45d99a5978c65ed24e34
    (tdf#156443, tdf#159079, tdf#158112: support Windows Alt codes
    >=256, 2024-01-10). In master, it was later fixed in commit
    a2dd71feb75d93adf0f0daac899e7476f961ec34 (tdf#54169: implement
    auto-accelerator feature on Windows, 2024-02-10).
    
    This is a selective fix for 24.2.
    
    Change-Id: Ic203b78de561ca9afaf589e242ff95c0481ffc15
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164824
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <m.wegh...@posteo.de>

diff --git a/vcl/win/window/salframe.cxx b/vcl/win/window/salframe.cxx
index 1eed596e6c3d..bd93ad6bf432 100644
--- a/vcl/win/window/salframe.cxx
+++ b/vcl/win/window/salframe.cxx
@@ -3589,7 +3589,7 @@ static bool HandleAltNumPadCode(HWND hWnd, UINT nMsg, 
WPARAM wParam, LPARAM lPar
                 if (!(keyFlags & KF_REPEAT))
                     state.clear();
                 state.started = true;
-                return true;
+                return false; // This must be processed further - e.g., to 
show accelerators
             }
 
             if (!state.started)
commit d7ba3bf5b3f1584d7eb132397c928d734097825d
Author:     Hossein <hoss...@libreoffice.org>
AuthorDate: Tue Mar 12 16:32:09 2024 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Sun Mar 17 20:42:33 2024 +0100

    tdf#160162 Fix hyperlink update in Draw
    
    Changing the links to keep them up-to-date was previously done only when
    the name "Slide" was used for the pages, just like Impress, as Draw and
    Impress share code. Now, the term "Page" is used instead of "Slide"
    since 942d1d2ea59bf4605f2c464a6b29c967fa9f8de8 in Draw. This change,
    fixes the above issue by also using the correct string consntant.
    
    The patch is tested for Draw and Impress to make sure both are working
    correctly now.
    
    Change-Id: I55b4f56bd499d05f87f475d4c6cb3423247bf8d7
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164716
    Tested-by: Jenkins
    Reviewed-by: Stéphane Guillou <stephane.guil...@libreoffice.org>
    Reviewed-by: Hossein <hoss...@libreoffice.org>
    Signed-off-by: Xisco Fauli <xiscofa...@libreoffice.org>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164760
    Reviewed-by: Adolfo Jayme Barrientos <fit...@ubuntu.com>

diff --git a/sd/source/core/drawdoc2.cxx b/sd/source/core/drawdoc2.cxx
index de82a8b95306..8f7c9f3328e6 100644
--- a/sd/source/core/drawdoc2.cxx
+++ b/sd/source/core/drawdoc2.cxx
@@ -324,7 +324,11 @@ void SdDrawDocument::UpdatePageRelativeURLs(SdPage const * 
pPage, sal_uInt16 nPo
 
                 if (!aURL.isEmpty() && (aURL[0] == 35))
                 {
-                    OUString aHashSlide = "#" + SdResId(STR_PAGE);
+                    OUString aHashSlide;
+                    if (meDocType == DocumentType::Draw)
+                        aHashSlide = "#" + SdResId(STR_PAGE_NAME);
+                    else
+                        aHashSlide = "#" + SdResId(STR_PAGE);
 
                     if (aURL.startsWith(aHashSlide))
                     {
diff --git a/sd/source/core/sdpage.cxx b/sd/source/core/sdpage.cxx
index 02609a7083fa..10b4f34b761f 100644
--- a/sd/source/core/sdpage.cxx
+++ b/sd/source/core/sdpage.cxx
@@ -2512,9 +2512,10 @@ const OUString& SdPage::GetName() const
             // default name for handout pages
             sal_uInt16  nNum = (GetPageNum() + 1) / 2;
 
-            aCreatedPageName = SdResId(STR_PAGE) + " ";
             if 
(static_cast<SdDrawDocument&>(getSdrModelFromSdrPage()).GetDocumentType() == 
DocumentType::Draw )
                  aCreatedPageName = SdResId(STR_PAGE_NAME) + " ";
+            else
+                aCreatedPageName = SdResId(STR_PAGE) + " ";
 
             if( getSdrModelFromSdrPage().GetPageNumType() == 
css::style::NumberingType::NUMBER_NONE )
             {
commit a651e2093cf11f60ebace04c4aaf028d7299e6e3
Author:     Justin Luth <jl...@mail.com>
AuthorDate: Wed Mar 13 08:38:40 2024 -0400
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Sun Mar 17 20:42:33 2024 +0100

    allow build with python 3.12.0: initialize new tp_watched
    
    This fixes the build failure after I updated Ubuntu 24.04 (alpha),
    which upgraded python 3.11.7 to python 3.12.0, causing the error:
    
    libreoffice/pyuno/source/module/pyuno_callable.cxx:249:1:
    error: missing initializer for member ‘_typeobject::tp_watched’
    [-Werror=missing-field-initializers]
    ...
    
    I gleaned this information from a July 2023 commit for
    https://github.com/xbmc/xbmc/issues/23503
    
    tp_watched was added in upstream commit python/cpython@82ccbf6
    
https://github.com/python/cpython/commit/82ccbf69a842db25d8117f1c41b47aa5b4ed96ab
    
    This change first appeared in Python v3.12.0a1
    
    Change-Id: If82ff1eb47d66d2669d90d6e00e0feff3c55b5ca
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164775
    Tested-by: Jenkins
    Reviewed-by: Justin Luth <jl...@mail.com>
    Reviewed-by: Stephan Bergmann <stephan.bergm...@allotropia.de>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164785

diff --git a/pyuno/source/module/pyuno.cxx b/pyuno/source/module/pyuno.cxx
index bd4904d5f729..a589c72ba3bf 100644
--- a/pyuno/source/module/pyuno.cxx
+++ b/pyuno/source/module/pyuno.cxx
@@ -1667,6 +1667,9 @@ static PyTypeObject PyUNOType =
 #pragma clang diagnostic pop
 #endif
 #endif
+#if PY_VERSION_HEX >= 0x030C00A1
+    , 0 // tp_watched
+#endif
 #endif
 #endif
 };
diff --git a/pyuno/source/module/pyuno_callable.cxx 
b/pyuno/source/module/pyuno_callable.cxx
index f22de316b7de..8f19fc8eb654 100644
--- a/pyuno/source/module/pyuno_callable.cxx
+++ b/pyuno/source/module/pyuno_callable.cxx
@@ -244,6 +244,9 @@ static PyTypeObject PyUNO_callable_Type =
 #pragma clang diagnostic pop
 #endif
 #endif
+#if PY_VERSION_HEX >= 0x030C00A1
+    , 0 // tp_watched
+#endif
 #endif
 #endif
 };
diff --git a/pyuno/source/module/pyuno_iterator.cxx 
b/pyuno/source/module/pyuno_iterator.cxx
index 134f318a1017..2fc70a32fcff 100644
--- a/pyuno/source/module/pyuno_iterator.cxx
+++ b/pyuno/source/module/pyuno_iterator.cxx
@@ -177,6 +177,9 @@ static PyTypeObject PyUNO_iterator_Type =
 #pragma clang diagnostic pop
 #endif
 #endif
+#if PY_VERSION_HEX >= 0x030C00A1
+    , 0 // tp_watched
+#endif
 #endif
 #endif
 };
@@ -323,6 +326,9 @@ static PyTypeObject PyUNO_list_iterator_Type =
 #pragma clang diagnostic pop
 #endif
 #endif
+#if PY_VERSION_HEX >= 0x030C00A1
+    , 0 // tp_watched
+#endif
 #endif
 #endif
 };
diff --git a/pyuno/source/module/pyuno_runtime.cxx 
b/pyuno/source/module/pyuno_runtime.cxx
index cb95e5a46dc1..91e971fdd582 100644
--- a/pyuno/source/module/pyuno_runtime.cxx
+++ b/pyuno/source/module/pyuno_runtime.cxx
@@ -139,6 +139,9 @@ static PyTypeObject RuntimeImpl_Type =
 #pragma clang diagnostic pop
 #endif
 #endif
+#if PY_VERSION_HEX >= 0x030C00A1
+    , 0 // tp_watched
+#endif
 #endif
 #endif
 };
diff --git a/pyuno/source/module/pyuno_struct.cxx 
b/pyuno/source/module/pyuno_struct.cxx
index c8fd7e987905..364f2776011a 100644
--- a/pyuno/source/module/pyuno_struct.cxx
+++ b/pyuno/source/module/pyuno_struct.cxx
@@ -354,6 +354,9 @@ static PyTypeObject PyUNOStructType =
 #pragma clang diagnostic pop
 #endif
 #endif
+#if PY_VERSION_HEX >= 0x030C00A1
+    , 0 // tp_watched
+#endif
 #endif
 #endif
 };
commit b823dd69de4146fe8641e90d9c0de98e62079fd5
Author:     Michael Weghorn <m.wegh...@posteo.de>
AuthorDate: Wed Mar 13 12:27:12 2024 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Sun Mar 17 20:42:33 2024 +0100

    tdf#159915 qt: Force Qt::HighDpiScaleFactorRoundingPolicy::Round
    
    For now, force `Qt::HighDpiScaleFactorRoundingPolicy::Round`
    for the HighDPI-scale factor rounding policy [1], which is the default
    for Qt 5, while Qt 6 defaults to 
`Qt::HighDpiScaleFactorRoundingPolicy::PassThrough`
    (see [2]), which resulted in broken rendering (e.g. "Help" -> "About"
    dialog not showing the whole content) when fractional display scaling like 
150 %
    is configured in the KDE Plasma display settings (in contrast to manually 
setting the
    `QT_SCALE_FACTOR=1.5` env variable to apply scaling, which was working
    fine).
    
    Quoting from [3]:
    
    > The two principal options are whether fractional scale factors should be
    > rounded to an integer or not. Keeping the scale factor as-is will make
    > the user interface size match the OS setting exactly, but may cause
    > painting errors, for example with the Windows style.
    
    Manually setting the env variable `QT_SCALE_FACTOR_ROUNDING_POLICY="Round"`
    has the same effect (and can be used with LO versions not yet
    containing this fix).
    
    (There might be a way to adjust the way that scaling happens
    to make other policies work, but for now, just hard-code to
    the policy that is known to work.)
    
    [1] https://doc.qt.io/qt-6/qt.html#HighDpiScaleFactorRoundingPolicy-enum
    [2] https://doc.qt.io/qt-6/highdpi.html#environment-variable-reference
    [3] 
https://doc.qt.io/qt-6/qguiapplication.html#setHighDpiScaleFactorRoundingPolicy
    
    Change-Id: I8eb6911d4dd5faf00912b8f15a58e0bdace1995a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164768
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <m.wegh...@posteo.de>
    (cherry picked from commit 07688e864c913e005dcae366cf10702404a73d80)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164744
    Reviewed-by: Adolfo Jayme Barrientos <fit...@ubuntu.com>

diff --git a/vcl/qt5/QtInstance.cxx b/vcl/qt5/QtInstance.cxx
index 4880c1bdec55..f87cdef9348e 100644
--- a/vcl/qt5/QtInstance.cxx
+++ b/vcl/qt5/QtInstance.cxx
@@ -708,6 +708,11 @@ std::unique_ptr<QApplication> 
QtInstance::CreateQApplication(int& nArgc, char**
     // for scaled icons in the native menus
     QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
 #endif
+    // force Qt::HighDpiScaleFactorRoundingPolicy::Round, which is the Qt 5 
default
+    // policy and prevents incorrect rendering with the Qt 6 default policy
+    // Qt::HighDpiScaleFactorRoundingPolicy::PassThrough (tdf#159915)
+    QGuiApplication::setHighDpiScaleFactorRoundingPolicy(
+        Qt::HighDpiScaleFactorRoundingPolicy::Round);
 
     FreeableCStr session_manager;
     if (getenv("SESSION_MANAGER") != nullptr)
commit 4f85b4dd6d065ffea6a473edccf17eeb49d087fa
Author:     Michael Stahl <michael.st...@allotropia.de>
AuthorDate: Tue Mar 12 16:21:57 2024 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Sun Mar 17 20:42:32 2024 +0100

    tdf#157241 sw: layout: inconsistent conditions in lcl_RecalcSplitLine()
    
    A mistake, when checking before the condition is "if (pTab == &rTab)"
    but when checking after it is "if (pTab)" - the latter is correct as the
    former is checked *inside* the block, after resolving to top-level table.
    
    This caused erroneously setting rIsFootnoteGrowth = true in
    SwTabFrame::MakeAll() of tab 939 in the bugdoc, when in fact the footnote
    container shrunk from 5 to 2 footnotes.
    
    (regression from commit c303981cfd95ce1c3881366023d5495ae2edce97)
    
    Change-Id: Ib4cad9fef0e500ebe7a3636c2371a4108b32fb5f
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164717
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>
    (cherry picked from commit 7d3b439de357c8e97c0a73f6f63e67ec980e432d)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164733
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>

diff --git a/sw/source/core/layout/tabfrm.cxx b/sw/source/core/layout/tabfrm.cxx
index 43b633934156..fe3a5232356e 100644
--- a/sw/source/core/layout/tabfrm.cxx
+++ b/sw/source/core/layout/tabfrm.cxx
@@ -667,7 +667,7 @@ static bool lcl_RecalcSplitLine( SwRowFrame& rLastLine, 
SwRowFrame& rFollowLine,
             {
                 SwContentFrame const*const pAnchor = pFootnote->GetRef();
                 SwTabFrame const* pTab = pAnchor->FindTabFrame();
-                if (pTab == &rTab)
+                if (pTab)
                 {
                     while (pTab->GetUpper()->IsInTab())
                     {
commit b3f1534acb17a5f6d78eadb44f2a3c43f694995f
Author:     Fridrich Strba <fridrich_st...@opensuse.org>
AuthorDate: Tue Mar 12 11:34:52 2024 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Sun Mar 17 20:42:32 2024 +0100

    Fix build with autoconf 2.72
    
    This commit http://git.savannah.gnu.org/gitweb/
    ?p=autoconf.git;a=commitdiff;
    h=cf09f48841b66fe76f606dd6018bb3a93242a7c9
    changed the internal cache variable name and its content
    
    The effects show later in message like
    /tmp/ccyB6wS6.ltrans9.ltrans.o: in function 
`comphelper::DocPasswordHelper::decryptGpgSession(com::sun::star::uno::Sequence<com::sun::star::uno::Sequence<com::sun::star::beans::NamedValue>
 > const&)':
    
/home/abuild/rpmbuild/BUILD/libreoffice-24.2.1.2/comphelper/source/misc/docpasswordhelper.cxx:705:(.text+0x4fb7):
 undefined reference to `GpgME::Data::seek(long, int)'
    /usr/bin/ld.bfd: 
/home/abuild/rpmbuild/BUILD/libreoffice-24.2.1.2/comphelper/source/misc/docpasswordhelper.cxx:716:(.text+0x5402):
 undefined reference to `GpgME::Data::seek(long, int)'
    /usr/bin/ld.bfd: /tmp/ccyB6wS6.ltrans13.ltrans.o: in function 
`comphelper::OStorageHelper::CreateGpgPackageEncryptionData()':
    
/home/abuild/rpmbuild/BUILD/libreoffice-24.2.1.2/comphelper/source/misc/storagehelper.cxx:507:(.text+0x64e3):
 undefined reference to `GpgME::Data::seek(long, int)'
    /usr/bin/ld.bfd: 
/home/abuild/rpmbuild/BUILD/libreoffice-24.2.1.2/comphelper/source/misc/storagehelper.cxx:520:(.text+0x6583):
 undefined reference to `GpgME::Data::seek(long, int)'
    collect2: error: ld returned 1 exit status
    
    Where the type 'off_t' at the time of inclusion of the header and
    at the time of compilation of the library differ.
    
    Change-Id: Ie0486dbc869e84f5fb2688473334cfe464abd570
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164704
    Tested-by: Jenkins
    Reviewed-by: Stephan Bergmann <stephan.bergm...@allotropia.de>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164715

diff --git a/configure.ac b/configure.ac
index 7ba76360416d..01cb022ea1d4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -7198,7 +7198,9 @@ if test "$_os" != "WINNT"; then
 
     dnl Check for large file support
     AC_SYS_LARGEFILE
-    if test -n "$ac_cv_sys_file_offset_bits" -a "$ac_cv_sys_file_offset_bits" 
!= "no"; then
+    if test -n "$ac_cv_sys_largefile_opts"  -a "$ac_cv_sys_largefile_opts" != 
"none needed" -a "$ac_cv_sys_largefile_opts" != "support not detected"; then
+        LFS_CFLAGS="$ac_cv_sys_largefile_opts"
+    elif test -n "$ac_cv_sys_file_offset_bits" -a 
"$ac_cv_sys_file_offset_bits" != "no"; then
         LFS_CFLAGS="-D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
     fi
     if test -n "$ac_cv_sys_large_files" -a "$ac_cv_sys_large_files" != "no"; 
then
commit 8876b616b89b59448b1acc4a738a3e6524ad80cf
Author:     Xisco Fauli <xiscofa...@libreoffice.org>
AuthorDate: Fri Mar 8 14:23:08 2024 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Sun Mar 17 20:42:32 2024 +0100

    tdf#142133: partially revert 576611895e5
    
    if 'Internet Link' character style doens't exist then
    apply the hyperlink style
    This also reverts 023285158bde72dcd73b965ce205cf8550e7a5e2
    "tdf#128504 save DOCX as ODT: don't color not highlighted hyperlinks"
    which is no longer necessary
    
    Change-Id: Id100af5fddb10745af9d56c0ba75cb2366ecbe55
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164576
    Tested-by: Jenkins
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>
    (cherry picked from commit 03ca7031f3bf4c2a3e841b18c8f9e00004046098)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164509
    Reviewed-by: Stéphane Guillou <stephane.guil...@libreoffice.org>

diff --git a/vcl/qa/cppunit/pdfexport/data/tdf142133.docx 
b/vcl/qa/cppunit/pdfexport/data/tdf142133.docx
new file mode 100644
index 000000000000..fa1e155b873e
Binary files /dev/null and b/vcl/qa/cppunit/pdfexport/data/tdf142133.docx differ
diff --git a/vcl/qa/cppunit/pdfexport/pdfexport.cxx 
b/vcl/qa/cppunit/pdfexport/pdfexport.cxx
index d362a3855303..e9a8530c3cce 100644
--- a/vcl/qa/cppunit/pdfexport/pdfexport.cxx
+++ b/vcl/qa/cppunit/pdfexport/pdfexport.cxx
@@ -2740,6 +2740,41 @@ CPPUNIT_TEST_FIXTURE(PdfExportTest, testTdf157816Link)
     CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(4), 
pAnnots->GetElements().size());
 }
 
+CPPUNIT_TEST_FIXTURE(PdfExportTest, testTdf142133)
+{
+    vcl::filter::PDFDocument aDocument;
+    load(u"tdf142133.docx", aDocument);
+
+    // The document has one page.
+    std::vector<vcl::filter::PDFObjectElement*> aPages = aDocument.GetPages();
+    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), aPages.size());
+
+    auto pAnnots = 
dynamic_cast<vcl::filter::PDFArrayElement*>(aPages[0]->Lookup("Annots"_ostr));
+    CPPUNIT_ASSERT(pAnnots);
+
+    // There should be one annotation
+    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), 
pAnnots->GetElements().size());
+    auto pAnnotReference
+        = 
dynamic_cast<vcl::filter::PDFReferenceElement*>(pAnnots->GetElements()[0]);
+    CPPUNIT_ASSERT(pAnnotReference);
+    vcl::filter::PDFObjectElement* pAnnot = pAnnotReference->LookupObject();
+    CPPUNIT_ASSERT(pAnnot);
+    // We're expecting something like /Type /Annot /A << /Type /Action /S /URI 
/URI (path)
+    CPPUNIT_ASSERT_EQUAL(
+        "Annot"_ostr,
+        
static_cast<vcl::filter::PDFNameElement*>(pAnnot->Lookup("Type"_ostr))->GetValue());
+    CPPUNIT_ASSERT_EQUAL(
+        "Link"_ostr,
+        
static_cast<vcl::filter::PDFNameElement*>(pAnnot->Lookup("Subtype"_ostr))->GetValue());
+    auto pAction = 
dynamic_cast<vcl::filter::PDFDictionaryElement*>(pAnnot->Lookup("A"_ostr));
+    CPPUNIT_ASSERT(pAction);
+    auto pURIElem
+        = 
dynamic_cast<vcl::filter::PDFLiteralStringElement*>(pAction->LookupElement("URI"_ostr));
+    CPPUNIT_ASSERT(pURIElem);
+    // Check it matches
+    CPPUNIT_ASSERT_EQUAL("https://google.com/"_ostr, pURIElem->GetValue());
+}
+
 CPPUNIT_TEST_FIXTURE(PdfExportTest, testTdf142806)
 {
     aMediaDescriptor["FilterName"] <<= OUString("writer_pdf_Export");
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx 
b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 05f3fae6751f..2b9091452dde 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -3314,6 +3314,15 @@ void 
DomainMapper_Impl::MergeAtContentImageRedlineWithNext(const css::uno::Refer
             }
             else
             {
+                if (IsOpenField() && GetTopFieldContext()->GetFieldId() == 
FIELD_HYPERLINK)
+                {
+                    // It is content of hyperlink field. We need to create and 
remember
+                    // character style for later applying to hyperlink
+                    PropertyValueVector_t aProps = 
comphelper::sequenceToContainer< PropertyValueVector_t 
>(GetTopContext()->GetPropertyValues());
+                    OUString sHyperlinkStyleName = 
GetStyleSheetTable()->getOrCreateCharStyle(aProps, /*bAlwaysCreate=*/false);
+                    
GetTopFieldContext()->SetHyperlinkStyle(sHyperlinkStyleName);
+                }
+
 #if !defined(MACOSX) // TODO: check layout differences and support all 
platforms, if needed
                 sal_Int32 nPos = 0;
                 OUString sFontName;
@@ -8793,25 +8802,21 @@ void DomainMapper_Impl::PopFieldContext()
                                     
xCrsrProperties->setPropertyValue("VisitedCharStyleName",uno::Any(sDisplayName));
                                     
xCrsrProperties->setPropertyValue("UnvisitedCharStyleName",uno::Any(sDisplayName));
                                 }
-                                else
+                                else if 
(!pContext->GetHyperlinkStyle().isEmpty())
                                 {
                                     uno::Any aAny = 
xCrsrProperties->getPropertyValue("CharStyleName");
                                     OUString charStyle;
                                     if (css::uno::fromAny(aAny, &charStyle))
                                     {
-                                        if (charStyle.isEmpty())
-                                        {
-                                            
xCrsrProperties->setPropertyValue("VisitedCharStyleName", 
uno::Any(OUString("Default Style")));
-                                            
xCrsrProperties->setPropertyValue("UnvisitedCharStyleName", 
uno::Any(OUString("Default Style")));
-                                        }
-                                        else if 
(charStyle.equalsIgnoreAsciiCase("Internet Link"))
+                                        if (!charStyle.isEmpty() && 
charStyle.equalsIgnoreAsciiCase("Internet Link"))
                                         {
                                             
xCrsrProperties->setPropertyValue("CharStyleName", uno::Any(OUString("Default 
Style")));
                                         }
                                         else
                                         {
-                                            
xCrsrProperties->setPropertyValue("VisitedCharStyleName", aAny);
-                                            
xCrsrProperties->setPropertyValue("UnvisitedCharStyleName", aAny);
+                                            
xCrsrProperties->setPropertyValue("VisitedCharStyleName", 
uno::Any(pContext->GetHyperlinkStyle()));
+                                            
xCrsrProperties->setPropertyValue("UnvisitedCharStyleName", 
uno::Any(pContext->GetHyperlinkStyle()));
+
                                         }
                                     }
                                 }
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx 
b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
index 38f78ab395fc..23fdc4d79b11 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
@@ -249,6 +249,7 @@ class FieldContext : public virtual SvRefBase
     OUString m_sHyperlinkURL;
     /// A frame for the hyperlink when one exists.
     OUString m_sHyperlinkTarget;
+    OUString m_sHyperlinkStyle;
 
     FFDataHandler::Pointer_t m_pFFDataHandler;
     FormControlHelper::Pointer_t m_pFormControlHelper;
@@ -300,6 +301,8 @@ public:
     const OUString& GetHyperlinkURL() const { return m_sHyperlinkURL; }
     void SetHyperlinkTarget(const OUString& rTarget) { m_sHyperlinkTarget = 
rTarget; }
     const OUString& GetHyperlinkTarget() const { return m_sHyperlinkTarget; }
+    void  SetHyperlinkStyle(const OUString& rStyle) { m_sHyperlinkStyle = 
rStyle; }
+    const OUString& GetHyperlinkStyle() const { return m_sHyperlinkStyle; }
 
     void setFFDataHandler(FFDataHandler::Pointer_t pFFDataHandler) { 
m_pFFDataHandler = pFFDataHandler; }
     const FFDataHandler::Pointer_t& getFFDataHandler() const { return 
m_pFFDataHandler; }

Reply via email to