basic/source/uno/namecont.cxx                        |   27 ++++++++-
 compilerplugins/clang/cow_wrapper.cxx                |    2 
 cppuhelper/inc/interfacecontainer4.hxx               |    4 -
 cui/source/dialogs/cuicharmap.cxx                    |    1 
 include/comphelper/interfacecontainer3.hxx           |    8 ++
 include/comphelper/interfacecontainer4.hxx           |    6 +-
 include/vcl/print.hxx                                |    1 
 sc/inc/typedstrdata.hxx                              |   10 +++
 sc/qa/uitest/autofilter/autofilterBugs.py            |   24 ++++++++
 sc/qa/unit/data/xlsx/tdf159581_optimalRowHeight.xlsx |binary
 sc/qa/unit/subsequent_filters_test2.cxx              |   11 +++
 sc/source/core/data/dociter.cxx                      |    2 
 sc/source/core/data/documen3.cxx                     |    2 
 sc/source/core/data/validat.cxx                      |    3 +
 sc/source/core/tool/typedstrdata.cxx                 |   54 +++++++++++++++++--
 sc/source/ui/app/inputhdl.cxx                        |    3 -
 svgio/qa/cppunit/SvgImportTest.cxx                   |   21 ++++++-
 svgio/qa/cppunit/data/tdf159594.svg                  |    7 ++
 svgio/source/svgreader/svgsymbolnode.cxx             |    8 +-
 svtools/source/dialogs/PlaceEditDialog.cxx           |    2 
 sw/CppunitTest_sw_a11y.mk                            |    1 
 sw/inc/IDocumentMarkAccess.hxx                       |    7 ++
 sw/inc/unoprnms.hxx                                  |    1 
 sw/qa/extras/accessibility/dialogs.cxx               |    2 
 sw/source/core/doc/docbm.cxx                         |   10 +++
 sw/source/core/frmedt/fetab.cxx                      |    4 -
 sw/source/core/inc/MarkManager.hxx                   |    1 
 sw/source/core/table/swnewtable.cxx                  |    9 ++-
 sw/source/core/text/porrst.cxx                       |   12 ++++
 sw/source/core/undo/undel.cxx                        |   27 ++++++---
 sw/source/core/unocore/unomap1.cxx                   |    1 
 sw/source/core/unocore/unostyle.cxx                  |   28 ++++++---
 sw/source/filter/writer/writer.cxx                   |    6 +-
 test/CppunitTest_test_a11y.mk                        |    1 
 vcl/inc/osx/salprn.h                                 |    2 
 vcl/inc/salprn.hxx                                   |    3 +
 vcl/inc/unx/genprn.h                                 |    2 
 vcl/inc/win/salprn.h                                 |    3 +
 vcl/osx/salprn.cxx                                   |    5 +
 vcl/source/gdi/print.cxx                             |    8 ++
 vcl/source/treelist/svimpbox.cxx                     |    2 
 vcl/unx/generic/print/genprnpsp.cxx                  |    5 +
 vcl/win/gdi/salprn.cxx                               |   19 ++++++
 writerfilter/source/dmapper/DomainMapper.cxx         |   17 +++++
 writerfilter/source/dmapper/DomainMapper_Impl.cxx    |    8 ++
 writerfilter/source/dmapper/DomainMapper_Impl.hxx    |   22 +++++++
 writerfilter/source/dmapper/PropertyIds.cxx          |    1 
 writerfilter/source/dmapper/PropertyIds.hxx          |    1 
 writerfilter/source/dmapper/PropertyMap.cxx          |   24 ++++++++
 writerfilter/source/dmapper/PropertyMap.hxx          |    7 ++
 writerfilter/source/ooxml/model.xml                  |    4 +
 writerfilter/source/rtftok/rtfdispatchvalue.cxx      |   12 ++++
 writerfilter/source/rtftok/rtfdocumentimpl.cxx       |   10 ++-
 53 files changed, 408 insertions(+), 53 deletions(-)

New commits:
commit 88055e657afb960d2b30476b134b3ff1dc502b96
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Fri Feb 9 10:55:18 2024 +0200
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Fri Feb 9 20:09:42 2024 +0100

    tdf#159641 TreeView repaint problem with PgUp in kf5/gen
    
    regression from
        commit be53f32655973c7a18824d5145eed992be788d2f
        Author: Noel Grandin <noel.gran...@collabora.co.uk>
        Date:   Thu Mar 12 13:55:55 2020 +0200
        rename vcl::Window::Update to PaintImmediately
    
    Change-Id: I74fc87e984e1f085d2351cbae033e51920608e3d
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163154
    Reviewed-by: Michael Weghorn <m.wegh...@posteo.de>
    Tested-by: Jenkins
    (cherry picked from commit 30fb8cde7579fb5da15c1d8da9611198f2f5ce78)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163149
    Reviewed-by: Christian Lohmaier <lohmaier+libreoff...@googlemail.com>

diff --git a/vcl/source/treelist/svimpbox.cxx b/vcl/source/treelist/svimpbox.cxx
index 0deea8f69820..66c697e8afd8 100644
--- a/vcl/source/treelist/svimpbox.cxx
+++ b/vcl/source/treelist/svimpbox.cxx
@@ -387,6 +387,7 @@ void SvImpLBox::PageDown( sal_uInt16 nDelta )
     ShowCursor( false );
 
     m_nFlags &= ~LBoxFlags::Filling;
+    m_pView->PaintImmediately();
     m_pStartEntry = pNext;
 
     if( nRealDelta >= m_nVisibleCount )
@@ -424,6 +425,7 @@ void SvImpLBox::PageUp( sal_uInt16 nDelta )
     m_nFlags &= ~LBoxFlags::Filling;
     ShowCursor( false );
 
+    m_pView->PaintImmediately();
     m_pStartEntry = pPrev;
     if( nRealDelta >= m_nVisibleCount )
     {
commit 8ab61d432cd3232de9e1b4312ef09f4730892987
Author:     Michael Stahl <michael.st...@allotropia.de>
AuthorDate: Wed Feb 7 13:04:14 2024 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Fri Feb 9 20:09:41 2024 +0100

    tdf#158586 writerfilter: RTF import: fix assert on ooo113308-1.rtf
    
      warn:legacy.osl:::writerfilter/source/dmapper/DomainMapper_Impl.cxx:1278: 
section stack already empty
      DomainMapper_Impl.cxx:9817: void 
writerfilter::dmapper::DomainMapper_Impl::substream(): Assertion 
`m_aContextStack.size() == contextSize' failed.
    
    Before substream(), there is one CONTEXT_SECTION, after there is an
    additional CONTEXT_PARAGRPAH.
    
    The first OSL_ENSURE is because RTFDocumentImpl::tableBreak() calls
    endParagraphGroup() but in the substream, startParagraphGroup() hadn't
    been called; fixing this also makes the assert failure go away.
    
    This worked previously because sectBreak() called endParagraphGroup()
    after reading the header substreams, but it seems dubious that a
    paragraph group started in the body should be used in the substream.
    
    (regression from commit 57abad5cf990111fd7de011809d4421dc0550193)
    
    Change-Id: I98864bca03b59099c17080c0a7582de2b77d41e1
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163096
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>
    (cherry picked from commit 6446d3e12440be39e6b55f8749038061a1b240da)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163137
    Reviewed-by: Christian Lohmaier <lohmaier+libreoff...@googlemail.com>

diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx 
b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index 48124554481d..e82674930b45 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -653,6 +653,7 @@ void RTFDocumentImpl::runBreak()
 
 void RTFDocumentImpl::tableBreak()
 {
+    checkFirstRun(); // ooo113308-1.rtf has a header at offset 151084 that 
doesn't startParagraphGroup() without this
     runBreak();
     Mapper().endParagraphGroup();
     Mapper().startParagraphGroup();
commit 460b950968bf6a3f6e7c79997eadb3344be13ac1
Author:     Caolán McNamara <caolan.mcnam...@collabora.com>
AuthorDate: Mon Jan 15 20:02:01 2024 +0000
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Fri Feb 9 20:09:41 2024 +0100

    crashtesting: still seeing occasional impl_notifyEvent_nothrow failures
    
    e.g.:
    
     #0  0x00007f5a3a5d45fc in 
comphelper::OInterfaceContainerHelper3<com::sun::star::document::XDocumentEventListener>::NotifySingleListener<com::sun::star::document::DocumentEvent>::operator()(com::sun::star::uno::Reference<com::sun::star::document::XDocumentEventListener>
 const&) const (this=this@entry=0x7f5a38ffd680, listener=empty uno::Reference) 
at include/comphelper/interfacecontainer3.hxx:253
     #1  0x00007f5a3a5d9427 in 
comphelper::OInterfaceContainerHelper3<com::sun::star::document::XDocumentEventListener>::forEach<comphelper::OInterfaceContainerHelper3<com::sun::star::document::XDocumentEventListener>::NotifySingleListener<com::sun::star::document::DocumentEvent>
 
>(comphelper::OInterfaceContainerHelper3<com::sun::star::document::XDocumentEventListener>::NotifySingleListener<com::sun::star::document::DocumentEvent>
 const&) (this=this@entry=0x7f5a3035ea08, func=...) at 
include/comphelper/interfacecontainer3.hxx:275
             xListener = empty uno::Reference
             iter = {rCont = @0x7f5a3035ea08, maData = {m_pimpl = 
0x7f5a30132260}, nRemain = 1}
     #2  0x00007f5a3a5d950e in 
comphelper::OInterfaceContainerHelper3<com::sun::star::document::XDocumentEventListener>::notifyEach<com::sun::star::document::DocumentEvent>(void
 
(com::sun::star::document::XDocumentEventListener::*)(com::sun::star::document::DocumentEvent
 const&), com::sun::star::document::DocumentEvent const&) 
(this=this@entry=0x7f5a3035ea08, NotificationMethod=<optimized out>, Event=...) 
at include/comphelper/interfacecontainer3.hxx:290
     #3  0x00007f5a3a5d39f9 in 
dbaccess::DocumentEventNotifier_Impl::impl_notifyEvent_nothrow(com::sun::star::document::DocumentEvent
 const&) (this=this@entry=0x7f5a3035e9c0, _rEvent=...) at 
dbaccess/source/core/dataaccess/documenteventnotifier.cxx:200
             __func__ = "impl_notifyEvent_nothrow"
     #4  0x00007f5a3a5d3b83 in 
dbaccess::DocumentEventNotifier_Impl::processEvent(comphelper::AnyEvent const&) 
(this=this@entry=0x7f5a3035e9c0, _rEvent=...) at 
dbaccess/source/core/dataaccess/documenteventnotifier.cxx:233
             rEventHolder = <optimized out>
     #5  0x00007f5a57cd95ba in comphelper::AsyncEventNotifierBase::execute() 
(this=this@entry=0x7f5a3010f670) at 
comphelper/source/misc/asyncnotification.cxx:139
    
    so lets guard the OInterfaceIteratorHelper3 ctor.
    
    might as well use empty() to return early then, and align
    the OInterfaceIteratorHelper4 case with that.
    
    Change-Id: I138841840e032e6524792fb75168ccabc666b34c
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162127
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolan.mcnam...@collabora.com>
    (cherry picked from commit dd8dad09097225726cbcd878d95d5bd0aacdf042)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163101
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>

diff --git a/include/comphelper/interfacecontainer3.hxx 
b/include/comphelper/interfacecontainer3.hxx
index 05a82212c064..be140d32289f 100644
--- a/include/comphelper/interfacecontainer3.hxx
+++ b/include/comphelper/interfacecontainer3.hxx
@@ -266,7 +266,11 @@ template <class T>
 template <typename FuncT>
 inline void OInterfaceContainerHelper3<T>::forEach(FuncT const& func)
 {
+    osl::ClearableMutexGuard aGuard(mrMutex);
+    if (std::as_const(maData)->empty())
+        return;
     OInterfaceIteratorHelper3<T> iter(*this);
+    aGuard.clear();
     while (iter.hasMoreElements())
     {
         auto xListener = iter.next();
diff --git a/include/comphelper/interfacecontainer4.hxx 
b/include/comphelper/interfacecontainer4.hxx
index a8b2bdc85505..e4a41e30675d 100644
--- a/include/comphelper/interfacecontainer4.hxx
+++ b/include/comphelper/interfacecontainer4.hxx
@@ -288,7 +288,7 @@ inline void 
OInterfaceContainerHelper4<T>::forEach(std::unique_lock<std::mutex>&
                                                    FuncT const& func) const
 {
     assert(rGuard.owns_lock());
-    if (std::as_const(maData)->size() == 0)
+    if (std::as_const(maData)->empty())
     {
         return;
     }
commit 627fece9522c8463c268582363cf147027009ff9
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Wed Feb 7 14:52:05 2024 +0200
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Fri Feb 9 20:09:41 2024 +0100

    tdf#158279 TOC links lost when converting .doc to HTML
    
    regression from
        commit 8ce36e943f0e50970925b2dd77729ef6036b4a49
        Author: Noel Grandin <noel.gran...@collabora.co.uk>
        Date:   Sun May 26 15:15:41 2019 +0200
        move some searching inside IDocumentMarkAccess
    
    where I called the wrong method from inside Writer::FindPos_Bkmk
    
    The code was then removed in
        commit 7bad1516c5f2a85b5bae3f49261ac2494cbb7162
        Author: Noel Grandin <noel.gran...@collabora.co.uk>
        Date:   Wed Jul 17 05:41:08 2019 +0200
        loplugin:unusedmethods
    
    Change-Id: I3f1e14a1e3ae2dd134738363e6b2679d2a2f418a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163095
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>
    (cherry picked from commit 0a32def8b519461b35b1e249d71ae9961b04400a)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163029
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>

diff --git a/sw/inc/IDocumentMarkAccess.hxx b/sw/inc/IDocumentMarkAccess.hxx
index d63b58f606c4..bc8f2e1c03d6 100644
--- a/sw/inc/IDocumentMarkAccess.hxx
+++ b/sw/inc/IDocumentMarkAccess.hxx
@@ -279,6 +279,13 @@ class IDocumentMarkAccess
         */
         virtual const_iterator_t findMark(const OUString& rMark) const =0;
 
+        /** Find the first Mark that does not start before.
+
+            @returns
+            an iterator pointing to the mark, or pointing to getAllMarksEnd() 
if nothing was found.
+        */
+        virtual const_iterator_t findFirstMarkNotStartsBefore(const 
SwPosition& rPos) const =0;
+
         // interface IBookmarks (BOOKMARK, CROSSREF_NUMITEM_BOOKMARK, 
CROSSREF_HEADING_BOOKMARK )
 
         /** check if the selection would delete a BOOKMARK */
diff --git a/sw/source/core/doc/docbm.cxx b/sw/source/core/doc/docbm.cxx
index 00681135b468..730da32625d4 100644
--- a/sw/source/core/doc/docbm.cxx
+++ b/sw/source/core/doc/docbm.cxx
@@ -1410,6 +1410,16 @@ namespace sw::mark
         return IDocumentMarkAccess::iterator(ret);
     }
 
+    // find the first Mark that does not start before
+    IDocumentMarkAccess::const_iterator_t 
MarkManager::findFirstMarkNotStartsBefore(const SwPosition& rPos) const
+    {
+        return std::lower_bound(
+                m_vAllMarks.begin(),
+                m_vAllMarks.end(),
+                rPos,
+                CompareIMarkStartsBefore());
+    }
+
     IDocumentMarkAccess::const_iterator_t MarkManager::getAllMarksBegin() const
         { return m_vAllMarks.begin(); }
 
diff --git a/sw/source/core/inc/MarkManager.hxx 
b/sw/source/core/inc/MarkManager.hxx
index ef0e79d74c11..dd7eb9f6f18b 100644
--- a/sw/source/core/inc/MarkManager.hxx
+++ b/sw/source/core/inc/MarkManager.hxx
@@ -81,6 +81,7 @@ namespace sw::mark {
             virtual const_iterator_t getAllMarksEnd() const override;
             virtual sal_Int32 getAllMarksCount() const override;
             virtual const_iterator_t findMark(const OUString& rName) const 
override;
+            virtual const_iterator_t findFirstMarkNotStartsBefore(const 
SwPosition& rPos) const override;
 
             // bookmarks
             virtual bool isBookmarkDeleted(SwPaM const& rPaM, bool isReplace) 
const override;
diff --git a/sw/source/filter/writer/writer.cxx 
b/sw/source/filter/writer/writer.cxx
index 1671f27e0b4a..f59531764e2d 100644
--- a/sw/source/filter/writer/writer.cxx
+++ b/sw/source/filter/writer/writer.cxx
@@ -160,9 +160,9 @@ bool Writer::CopyNextPam( SwPaM ** ppPam )
 sal_Int32 Writer::FindPos_Bkmk(const SwPosition& rPos) const
 {
     const IDocumentMarkAccess* const pMarkAccess = 
m_pDoc->getIDocumentMarkAccess();
-    const IDocumentMarkAccess::const_iterator_t ppBkmk = 
pMarkAccess->findFirstBookmarkStartsAfter(rPos);
-    if(ppBkmk != pMarkAccess->getBookmarksEnd())
-        return ppBkmk - pMarkAccess->getBookmarksBegin();
+    const IDocumentMarkAccess::const_iterator_t ppBkmk = 
pMarkAccess->findFirstMarkNotStartsBefore(rPos);
+    if(ppBkmk != pMarkAccess->getAllMarksEnd())
+        return ppBkmk - pMarkAccess->getAllMarksBegin();
     return -1;
 }
 
commit 8e10eabd8f71df9bf81791b0968c043573bfd767
Author:     Oliver Specht <oliver.spe...@cib.de>
AuthorDate: Wed Jan 31 16:41:34 2024 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Fri Feb 9 20:09:41 2024 +0100

    tdf#159478 read field comment in default encoding
    
    If a symbol font is applied inside a field the command string
    was wrongly converted as symbol text. This is fixed by using a
    default RTL_TEXTENCODING_MS_1252 encoding.
    
    Change-Id: I11326ef3c79d6d74c720a2b4ac4987ee6716d912
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162844
    Tested-by: Jenkins
    Tested-by: Gabor Kelemen <gabor.kelemen.ext...@allotropia.de>
    Reviewed-by: Thorsten Behrens <thorsten.behr...@allotropia.de>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163120

diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx 
b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index 2c851b95a2fb..48124554481d 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -3805,9 +3805,11 @@ void RTFDocumentImpl::checkUnicode(bool bUnicode, bool 
bHex)
     if (bHex && !m_aHexBuffer.isEmpty())
     {
         rtl_TextEncoding nEncoding = m_aStates.top().getCurrentEncoding();
-        if ((m_aStates.top().getDestination() == Destination::FONTENTRY
-             || m_aStates.top().getDestination() == 
Destination::FIELDINSTRUCTION)
-            && m_aStates.top().getCurrentEncoding() == RTL_TEXTENCODING_SYMBOL)
+        if (nEncoding == RTL_TEXTENCODING_SYMBOL
+            && (m_aStates.top().getDestination() == Destination::FONTENTRY
+                || (m_aStates.size() > 1
+                    && m_aStates[m_aStates.size() - 2].getDestination()
+                           == Destination::FIELDINSTRUCTION)))
             nEncoding = RTL_TEXTENCODING_MS_1252;
         OUString aString = OStringToOUString(m_aHexBuffer, nEncoding);
         m_aHexBuffer.setLength(0);
commit 8d2f5359f5beed983e940f4f134dd837b416c6f2
Author:     Oliver Specht <oliver.spe...@cib.de>
AuthorDate: Mon Feb 5 14:26:48 2024 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Fri Feb 9 20:09:41 2024 +0100

    tdf#159572 select font according to recent settings
    
    selection of a recently inserted special character applies the
    stored font to make sure the character is not inserted wit a
    font that doesn't contain the symbol
    
    Change-Id: Id61bfac3a2ff22dbdae8a5b83f000d3f0c3e992b
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163004
    Tested-by: Jenkins
    Tested-by: Gabor Kelemen <gabor.kelemen.ext...@allotropia.de>
    Reviewed-by: Gabor Kelemen <gabor.kelemen.ext...@allotropia.de>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163128
    Reviewed-by: Thorsten Behrens <thorsten.behr...@allotropia.de>

diff --git a/cui/source/dialogs/cuicharmap.cxx 
b/cui/source/dialogs/cuicharmap.cxx
index 03d1e8c90b53..0d0b809b0e7f 100644
--- a/cui/source/dialogs/cuicharmap.cxx
+++ b/cui/source/dialogs/cuicharmap.cxx
@@ -523,6 +523,7 @@ IMPL_LINK(SvxCharacterMap, CharClickHdl, SvxCharView*, 
rView, void)
 {
     rView->GrabFocus();
 
+    SetCharFont(rView->GetFont());
     m_aShowChar.SetText( rView->GetText() );
     m_aShowChar.SetFont(rView->GetFont());
     m_aShowChar.Invalidate();
commit 461142ba2f4dd5527ca97b5a3b89c62e8f6a72fd
Author:     Oliver Specht <oliver.spe...@cib.de>
AuthorDate: Mon Feb 5 09:41:05 2024 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Fri Feb 9 20:09:41 2024 +0100

    tdf#159560 paragraph break should be shown as pilcrow sign
    
    When non-printing characters are switched on at the end of the paragraph
    a pilcrow sign is shown. This is displayed using the font at the end of
    the character. If a symbol font is used that would result in a random symbol
    instead of the pilcrow sign (0x00b6). This is fixed here.
    
    Change-Id: I0d4ae9f439d2e34ca774d4e2cb188e94290808a8
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162983
    Tested-by: Jenkins
    Reviewed-by: Gabor Kelemen <gabor.kelemen.ext...@allotropia.de>
    Tested-by: Gabor Kelemen <gabor.kelemen.ext...@allotropia.de>
    (cherry picked from commit 297b47a7e0c191be22f90ab799b4b8bb8bdbaf59)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163142
    Reviewed-by: Thorsten Behrens <thorsten.behr...@allotropia.de>

diff --git a/sw/source/core/text/porrst.cxx b/sw/source/core/text/porrst.cxx
index 029adca75336..a4a0d3c713d3 100644
--- a/sw/source/core/text/porrst.cxx
+++ b/sw/source/core/text/porrst.cxx
@@ -22,6 +22,7 @@
 #include <editeng/escapementitem.hxx>
 #include <editeng/lrspitem.hxx>
 #include <editeng/pgrditem.hxx>
+#include <editeng/fontitem.hxx>
 #include <vcl/svapp.hxx>
 #include <comphelper/scopeguard.hxx>
 
@@ -47,6 +48,7 @@
 #include <IDocumentRedlineAccess.hxx>
 #include <IDocumentSettingAccess.hxx>
 #include <IDocumentDeviceAccess.hxx>
+#include <IDocumentLayoutAccess.hxx>
 
 #include <crsrsh.hxx>
 #include <swtypes.hxx>
@@ -74,6 +76,16 @@ void SwTmpEndPortion::Paint( const SwTextPaintInfo &rInf ) 
const
 
     SwFont aFont(*pOldFnt);
 
+    const SwDoc& rDoc = rInf.GetTextFrame()->GetDoc();
+    if (aFont.IsSymbol(rDoc.getIDocumentLayoutAccess().GetCurrentViewShell()))
+    {
+        const SvxFontItem& rFontItem = rDoc.GetDefault(RES_CHRATR_FONT);
+        aFont.SetName( rFontItem.GetFamilyName(), SwFontScript::Latin );
+        aFont.SetStyleName( rFontItem.GetStyleName(), SwFontScript::Latin );
+        aFont.SetFamily( rFontItem.GetFamily(), SwFontScript::Latin );
+        aFont.SetPitch( rFontItem.GetPitch(), SwFontScript::Latin );
+        aFont.SetCharSet( rFontItem.GetCharSet(), SwFontScript::Latin );
+    }
     // Paint strikeout/underline based on redline color and settings
     // (with an extra pilcrow in the background, because there is
     // no SetStrikeoutColor(), also SetUnderColor() doesn't work()).
commit d6ff51a16600af97522a9afae4fe463118653c71
Author:     Oliver Specht <oliver.spe...@cib.de>
AuthorDate: Wed Jan 24 14:14:20 2024 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Fri Feb 9 20:09:40 2024 +0100

    tdf#43848 fix selection in table with split/merged cells
    
    extends the selection of table cells to reach a more
    rectangular selection area
    Additionally tdf#155670 is taken care of by not showing the
    row selection cursor if row selection is not supported
    
    Change-Id: If31aa1030c91d81bc889d8aaa668e96c5328f03f
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162508
    Tested-by: Jenkins
    Reviewed-by: Thorsten Behrens <thorsten.behr...@allotropia.de>
    (cherry picked from commit aacf6f0e6059a3b24451da2782e0a0a420e89679)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163143

diff --git a/sw/source/core/frmedt/fetab.cxx b/sw/source/core/frmedt/fetab.cxx
index 79f5eb6b5e58..33b9c9327b6d 100644
--- a/sw/source/core/frmedt/fetab.cxx
+++ b/sw/source/core/frmedt/fetab.cxx
@@ -2116,8 +2116,8 @@ SwTab SwFEShell::WhichMouseTabCol( const Point &rPt ) 
const
     {
         while( pFrame && pFrame->Lower() && pFrame->Lower()->IsRowFrame() )
             pFrame = static_cast<const SwCellFrame*>(static_cast<const 
SwLayoutFrame*>(pFrame->Lower())->Lower());
-        if( pFrame && pFrame->GetTabBox()->GetSttNd() &&
-            pFrame->GetTabBox()->GetSttNd()->IsInProtectSect() )
+        if( pFrame && ((pFrame->GetTabBox()->GetSttNd() &&
+            pFrame->GetTabBox()->GetSttNd()->IsInProtectSect()) || 
(pFrame->GetTabBox()->getRowSpan() < 0)))
             pFrame = nullptr;
     }
 
diff --git a/sw/source/core/table/swnewtable.cxx 
b/sw/source/core/table/swnewtable.cxx
index 3cc2e3670711..785ef79d3b4d 100644
--- a/sw/source/core/table/swnewtable.cxx
+++ b/sw/source/core/table/swnewtable.cxx
@@ -1739,7 +1739,11 @@ void SwTable::CreateSelection( const SwNode* pStartNd, 
const SwNode* pEndNd,
                     rBoxes.insert( pBox );
                 if( nFound )
                 {
-                    nBottom = nRow;
+                    //if box is hiding cells bottom needs to be moved
+                    if (pBox->getRowSpan() > 1)
+                        nBottom = std::max(nBottom, size_t(nRow + 
pBox->getRowSpan() - 1));
+                    else
+                        nBottom = std::max(nRow, nBottom);
                     lcl_CheckMinMax( nLowerMin, nLowerMax, *pLine, nCol, true 
);
                     ++nFound;
                     break;
@@ -1747,6 +1751,9 @@ void SwTable::CreateSelection( const SwNode* pStartNd, 
const SwNode* pEndNd,
                 else
                 {
                     nTop = nRow;
+                    //if box is hiding cells bottom needs to be moved
+                    if (pBox->getRowSpan() > 1)
+                        nBottom = nRow + pBox->getRowSpan() - 1;
                     lcl_CheckMinMax( nUpperMin, nUpperMax, *pLine, nCol, true 
);
                     ++nFound;
                      // If start and end node are identical, we're nearly 
done...
commit 51c748f36a0598ebc5d64323af5693e80815e483
Author:     Julien Nabet <serval2...@yahoo.fr>
AuthorDate: Tue Feb 6 21:42:06 2024 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Fri Feb 9 20:09:40 2024 +0100

    tdf#159595: Data validation without error check allows to enter wrong data
    
    Change-Id: If5660f462a07ca571e05a44abcb0e378b6de613e
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163064
    Tested-by: Jenkins
    Reviewed-by: Julien Nabet <serval2...@yahoo.fr>
    (cherry picked from commit 9925937bb6b9be70befb8886ccc5665eff4ef227)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163020
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>

diff --git a/sc/source/core/data/validat.cxx b/sc/source/core/data/validat.cxx
index a46b09986b3d..5a569ef94487 100644
--- a/sc/source/core/data/validat.cxx
+++ b/sc/source/core/data/validat.cxx
@@ -381,6 +381,9 @@ bool ScValidationData::DoError(weld::Window* pParent, const 
OUString& rInput,
     if ( eErrorStyle == SC_VALERR_MACRO )
         return DoMacro(rPos, rInput, nullptr, pParent);
 
+    if (!bShowError)
+        return true;
+
     //  Output error message
 
     OUString aTitle = aErrorTitle;
diff --git a/sc/source/ui/app/inputhdl.cxx b/sc/source/ui/app/inputhdl.cxx
index c85d57774e00..9b45a88b1d31 100644
--- a/sc/source/ui/app/inputhdl.cxx
+++ b/sc/source/ui/app/inputhdl.cxx
@@ -3159,7 +3159,7 @@ void ScInputHandler::EnterHandler( ScEnterMode 
nBlockMode, bool bBeforeSavingInL
     {
         ScDocument& rDoc = pActiveViewSh->GetViewData().GetDocument();
         const ScValidationData* pData = rDoc.GetValidationEntry( nValidation );
-        if (pData && pData->HasErrMsg())
+        if (pData)
         {
             // #i67990# don't use pLastPattern in EnterHandler
             const ScPatternAttr* pPattern = rDoc.GetPattern( aCursorPos.Col(), 
aCursorPos.Row(), aCursorPos.Tab() );
@@ -3200,6 +3200,7 @@ void ScInputHandler::EnterHandler( ScEnterMode 
nBlockMode, bool bBeforeSavingInL
 
                 if (pData->DoError(pActiveViewSh->GetFrameWeld(), aString, 
aCursorPos))
                     bForget = true;                 // Do not take over input
+
             }
         }
     }
commit 96af55c34c0ce90c05886d5a546adfff80e3725e
Author:     Oliver Specht <oliver.spe...@cib.de>
AuthorDate: Thu Jan 18 08:48:10 2024 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Fri Feb 9 20:09:40 2024 +0100

    tdf#159254 import paper bin/paper source from rtf/docx files
    
    Imports infsxn and insxn from RTF and
    w:paperSrc from docx files and applies paper tray to the page style
    if the printer supports the imported tray value.
    Works only on Windows.
    
    Change-Id: Ie1170c58f7114f0dbf6bdd2721d4e077886cbe16
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162236
    Tested-by: Jenkins
    Tested-by: Gabor Kelemen <gabor.kelemen.ext...@allotropia.de>
    Reviewed-by: Thorsten Behrens <thorsten.behr...@allotropia.de>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163119

diff --git a/include/vcl/print.hxx b/include/vcl/print.hxx
index d6ce7728f9a6..e23cf8d0af1b 100644
--- a/include/vcl/print.hxx
+++ b/include/vcl/print.hxx
@@ -227,6 +227,7 @@ public:
 
     bool                        SetPaperBin( sal_uInt16 nPaperBin );
     sal_uInt16                  GetPaperBin() const;
+    sal_uInt16                  GetPaperBinBySourceIndex(sal_uInt16 
nPaperSource) const;
     void                        SetPaper( Paper ePaper );
     bool                        SetPaperSizeUser( const Size& rSize );
     /** @return The paper format of the printer's current "jobsetup". Note 
that if PAPER_USER the actual size can be anything. */
diff --git a/sw/inc/unoprnms.hxx b/sw/inc/unoprnms.hxx
index 2c98a87dba5a..fdbc3c8f36eb 100644
--- a/sw/inc/unoprnms.hxx
+++ b/sw/inc/unoprnms.hxx
@@ -205,6 +205,7 @@ inline constexpr OUString UNO_NAME_POSITION_PROTECTED = 
u"PositionProtected"_ust
 inline constexpr OUString UNO_NAME_ALTERNATIVE_TEXT = u"AlternativeText"_ustr;
 inline constexpr OUString UNO_NAME_PRIMARY_KEY = u"PrimaryKey"_ustr;
 inline constexpr OUString UNO_NAME_PRINTER_PAPER_TRAY = 
u"PrinterPaperTray"_ustr;
+inline constexpr OUString UNO_NAME_PRINTER_PAPER_TRAY_INDEX = 
u"PrinterPaperTrayIndex"_ustr;
 inline constexpr OUString UNO_NAME_RELATIVE_WIDTH = u"RelativeWidth"_ustr;
 inline constexpr OUString UNO_NAME_RELATIVE_WIDTH_RELATION = 
u"RelativeWidthRelation"_ustr;
 inline constexpr OUString UNO_NAME_RELATIVE_HEIGHT = u"RelativeHeight"_ustr;
diff --git a/sw/source/core/unocore/unomap1.cxx 
b/sw/source/core/unocore/unomap1.cxx
index ee4422a22e9d..12db464a874b 100644
--- a/sw/source/core/unocore/unomap1.cxx
+++ b/sw/source/core/unocore/unomap1.cxx
@@ -537,6 +537,7 @@ std::span<const SfxItemPropertyMapEntry> 
SwUnoPropertyMapProvider::GetPageStyleP
         { UNO_NAME_NUMBERING_TYPE, SID_ATTR_PAGE,             
cppu::UnoType<sal_Int16>::get(),           PROPERTY_NONE , MID_PAGE_NUMTYPE     
  },
         { UNO_NAME_PAGE_STYLE_LAYOUT, SID_ATTR_PAGE,          
cppu::UnoType<css::style::PageStyleLayout>::get(),    PROPERTY_NONE 
,MID_PAGE_LAYOUT     },
         { UNO_NAME_PRINTER_PAPER_TRAY, RES_PAPER_BIN,             
cppu::UnoType<OUString>::get(),            PROPERTY_NONE , 0 },
+        { UNO_NAME_PRINTER_PAPER_TRAY_INDEX, RES_PAPER_BIN,       
cppu::UnoType<sal_Int32>::get(),            PROPERTY_NONE , 0 },
 //                  { UNO_NAME_REGISTER_MODE_ACTIVE, SID_SWREGISTER_MODE,     
cppu::UnoType<bool>::get(),             PROPERTY_NONE , 0 },
         { UNO_NAME_REGISTER_PARAGRAPH_STYLE, SID_SWREGISTER_COLLECTION,   
cppu::UnoType<OUString>::get(),        PROPERTY_NONE , 0 },
         { UNO_NAME_SIZE, SID_ATTR_PAGE_SIZE,  
cppu::UnoType<css::awt::Size>::get(),             PROPERTY_NONE,   
MID_SIZE_SIZE|CONVERT_TWIPS},
diff --git a/sw/source/core/unocore/unostyle.cxx 
b/sw/source/core/unocore/unostyle.cxx
index 94219281b562..665c1d2c6ac5 100644
--- a/sw/source/core/unocore/unostyle.cxx
+++ b/sw/source/core/unocore/unostyle.cxx
@@ -1669,27 +1669,37 @@ void 
SwXStyle::SetPropertyValue<OWN_ATTR_FILLBMP_MODE>(const SfxItemPropertyMapE
 template<>
 void SwXStyle::SetPropertyValue<sal_uInt16(RES_PAPER_BIN)>(const 
SfxItemPropertyMapEntry& rEntry, const SfxItemPropertySet& rPropSet, const 
uno::Any& rValue, SwStyleBase_Impl& o_rStyleBase)
 {
-    if(!rValue.has<OUString>())
+    if (!rValue.has<OUString>() && !rValue.has<sal_Int32>())
         throw lang::IllegalArgumentException();
     SfxPrinter* pPrinter = m_pDoc->getIDocumentDeviceAccess().getPrinter(true);
-    OUString sValue(rValue.get<OUString>());
     using printeridx_t = decltype(pPrinter->GetPaperBinCount());
     printeridx_t nBin = std::numeric_limits<printeridx_t>::max();
-    if(sValue == "[From printer settings]")
-        nBin = std::numeric_limits<printeridx_t>::max()-1;
-    else if(pPrinter)
+    if(rValue.has<OUString>())
     {
-        for(sal_uInt16 i=0, nEnd = pPrinter->GetPaperBinCount(); i < nEnd; ++i)
+        OUString sValue(rValue.get<OUString>());
+        if(sValue == "[From printer settings]")
+            nBin = std::numeric_limits<printeridx_t>::max()-1;
+        else if(pPrinter)
         {
-            if (sValue == pPrinter->GetPaperBinName(i))
+            for(printeridx_t i=0, nEnd = pPrinter->GetPaperBinCount(); i < 
nEnd; ++i)
             {
-                nBin = i;
-                break;
+                if (sValue == pPrinter->GetPaperBinName(i))
+                {
+                    nBin = i;
+                    break;
+                }
             }
         }
     }
+    else if (rValue.has<sal_Int32>() && pPrinter)
+    {
+        sal_Int32 nValue (rValue.get<sal_Int32>());
+        nBin = pPrinter->GetPaperBinBySourceIndex(nValue);
+    }
+
     if(nBin == std::numeric_limits<printeridx_t>::max())
         throw lang::IllegalArgumentException();
+
     SfxItemSet& rStyleSet = o_rStyleBase.GetItemSet();
     SfxItemSet aSet(*rStyleSet.GetPool(), rEntry.nWID, rEntry.nWID);
     aSet.SetParent(&rStyleSet);
diff --git a/vcl/inc/osx/salprn.h b/vcl/inc/osx/salprn.h
index 7bfd41787e99..9c26e171db23 100644
--- a/vcl/inc/osx/salprn.h
+++ b/vcl/inc/osx/salprn.h
@@ -82,6 +82,8 @@ class AquaSalInfoPrinter : public SalInfoPrinter
     virtual sal_uInt32          GetCapabilities( const ImplJobSetup* 
i_pSetupData, PrinterCapType i_nType ) override;
     virtual sal_uInt16          GetPaperBinCount( const ImplJobSetup* 
i_pSetupData ) override;
     virtual OUString            GetPaperBinName( const ImplJobSetup* 
i_pSetupData, sal_uInt16 i_nPaperBin ) override;
+    virtual sal_uInt16          GetPaperBinBySourceIndex(const ImplJobSetup* 
pSetupData,
+                                                             sal_uInt16 
nPaperSource) override;
     virtual void                InitPaperFormats( const ImplJobSetup* 
i_pSetupData ) override;
     virtual int                 GetLandscapeAngle( const ImplJobSetup* 
i_pSetupData ) override;
 
diff --git a/vcl/inc/salprn.hxx b/vcl/inc/salprn.hxx
index 97a0fe13aab2..ae0b313dab05 100644
--- a/vcl/inc/salprn.hxx
+++ b/vcl/inc/salprn.hxx
@@ -82,6 +82,9 @@ public:
     virtual sal_uInt32              GetCapabilities( const ImplJobSetup* 
pSetupData, PrinterCapType nType ) = 0;
     virtual sal_uInt16              GetPaperBinCount( const ImplJobSetup* 
pSetupData ) = 0;
     virtual OUString                GetPaperBinName( const ImplJobSetup* 
pSetupData, sal_uInt16 nPaperBin ) = 0;
+    virtual sal_uInt16              GetPaperBinBySourceIndex(const 
ImplJobSetup* pSetupData,
+                                                             sal_uInt16 
nPaperSource) = 0;
+
     // fills m_aPaperFormats and sets m_bPapersInit to true
     virtual void                    InitPaperFormats( const ImplJobSetup* 
pSetupData ) = 0;
     // returns angle that a landscape page will be turned counterclockwise wrt 
to portrait
diff --git a/vcl/inc/unx/genprn.h b/vcl/inc/unx/genprn.h
index d030c461439a..abe84b71ca21 100644
--- a/vcl/inc/unx/genprn.h
+++ b/vcl/inc/unx/genprn.h
@@ -45,6 +45,8 @@ public:
     virtual sal_uInt32              GetCapabilities( const ImplJobSetup* 
pSetupData, PrinterCapType nType ) override;
     virtual sal_uInt16              GetPaperBinCount( const ImplJobSetup* 
pSetupData ) override;
     virtual OUString                GetPaperBinName( const ImplJobSetup* 
pSetupData, sal_uInt16 nPaperBin ) override;
+    virtual sal_uInt16              GetPaperBinBySourceIndex(const 
ImplJobSetup* pSetupData,
+                                                             sal_uInt16 
nPaperSource) override;
     virtual void                    InitPaperFormats( const ImplJobSetup* 
pSetupData ) override;
     virtual int                     GetLandscapeAngle( const ImplJobSetup* 
pSetupData ) override;
 };
diff --git a/vcl/inc/win/salprn.h b/vcl/inc/win/salprn.h
index e1bbb665e29d..b0ec1697c3a5 100644
--- a/vcl/inc/win/salprn.h
+++ b/vcl/inc/win/salprn.h
@@ -69,6 +69,9 @@ public:
     virtual sal_uInt32              GetCapabilities( const ImplJobSetup* 
pSetupData, PrinterCapType nType ) override;
     virtual sal_uInt16              GetPaperBinCount( const ImplJobSetup* 
pSetupData ) override;
     virtual OUString                GetPaperBinName( const ImplJobSetup* 
pSetupData, sal_uInt16 nPaperBin ) override;
+    virtual sal_uInt16              GetPaperBinBySourceIndex(const 
ImplJobSetup* pSetupData,
+                                                             sal_uInt16 
nPaperSource) override;
+
     virtual void                    InitPaperFormats( const ImplJobSetup* 
pSetupData ) override;
     virtual int                     GetLandscapeAngle( const ImplJobSetup* 
pSetupData ) override;
 };
diff --git a/vcl/osx/salprn.cxx b/vcl/osx/salprn.cxx
index 9f9c8c08f3db..3de45d9e8005 100644
--- a/vcl/osx/salprn.cxx
+++ b/vcl/osx/salprn.cxx
@@ -265,6 +265,11 @@ OUString AquaSalInfoPrinter::GetPaperBinName( const 
ImplJobSetup*, sal_uInt16 )
     return OUString();
 }
 
+sal_uInt16 AquaSalInfoPrinter::GetPaperBinBySourceIndex( const ImplJobSetup*, 
sal_uInt16 )
+{
+    return 0xffff;
+}
+
 sal_uInt32 AquaSalInfoPrinter::GetCapabilities( const ImplJobSetup*, 
PrinterCapType i_nType )
 {
     switch( i_nType )
diff --git a/vcl/source/gdi/print.cxx b/vcl/source/gdi/print.cxx
index eff94a9211ea..401d38118c38 100644
--- a/vcl/source/gdi/print.cxx
+++ b/vcl/source/gdi/print.cxx
@@ -1479,6 +1479,14 @@ OUString Printer::GetPaperBinName( sal_uInt16 nPaperBin 
) const
         return OUString();
 }
 
+sal_uInt16 Printer::GetPaperBinBySourceIndex(sal_uInt16 nPaperSource) const
+{
+    if ( IsDisplayPrinter() )
+        return 0;
+
+    return mpInfoPrinter->GetPaperBinBySourceIndex( 
&maJobSetup.ImplGetConstData(), nPaperSource );
+}
+
 void Printer::SetCopyCount( sal_uInt16 nCopy, bool bCollate )
 {
     mnCopyCount = nCopy;
diff --git a/vcl/unx/generic/print/genprnpsp.cxx 
b/vcl/unx/generic/print/genprnpsp.cxx
index 33990decad1c..ce5a45624dfc 100644
--- a/vcl/unx/generic/print/genprnpsp.cxx
+++ b/vcl/unx/generic/print/genprnpsp.cxx
@@ -638,6 +638,11 @@ OUString PspSalInfoPrinter::GetPaperBinName( const 
ImplJobSetup* pJobSetup, sal_
     return OUString();
 }
 
+sal_uInt16 PspSalInfoPrinter::GetPaperBinBySourceIndex( const ImplJobSetup*, 
sal_uInt16 )
+{
+    return 0xffff;
+}
+
 sal_uInt32 PspSalInfoPrinter::GetCapabilities( const ImplJobSetup* pJobSetup, 
PrinterCapType nType )
 {
     switch( nType )
diff --git a/vcl/win/gdi/salprn.cxx b/vcl/win/gdi/salprn.cxx
index 3302efa2d986..065b06019635 100644
--- a/vcl/win/gdi/salprn.cxx
+++ b/vcl/win/gdi/salprn.cxx
@@ -1196,6 +1196,25 @@ OUString WinSalInfoPrinter::GetPaperBinName( const 
ImplJobSetup* pSetupData, sal
     return aPaperBinName;
 }
 
+sal_uInt16 WinSalInfoPrinter::GetPaperBinBySourceIndex( const ImplJobSetup* 
pSetupData, sal_uInt16 nPaperSource )
+{
+    DWORD nBins = ImplDeviceCaps( this, DC_BINNAMES, nullptr, pSetupData );
+    if (nBins != GDI_ERROR)
+    {
+        auto pBuffer = std::make_unique<sal_uInt16[]>(nBins);
+        DWORD nBins = ImplDeviceCaps( this, DC_BINS, 
reinterpret_cast<BYTE*>(pBuffer.get()), pSetupData );
+        if (nBins != GDI_ERROR)
+        {
+            for (DWORD nBin = 0; nBin < nBins; ++nBin)
+            {
+                if (nPaperSource == *(pBuffer.get() + nBin))
+                    return nBin;
+            }
+        }
+    }
+    return 0xffff;
+}
+
 sal_uInt32 WinSalInfoPrinter::GetCapabilities( const ImplJobSetup* pSetupData, 
PrinterCapType nType )
 {
     DWORD nRet;
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx 
b/writerfilter/source/dmapper/DomainMapper.cxx
index b9093998a4d1..7e4eeda7d3d9 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -705,6 +705,12 @@ void DomainMapper::lcl_attribute(Id nName, Value & val)
         case NS_ooxml::LN_CT_PageMar_gutter:
             m_pImpl->SetPageMarginTwip( PAGE_MAR_GUTTER, nIntValue );
         break;
+        case NS_ooxml::LN_CT_PaperSource_first:
+            m_pImpl->SetPaperSource(PAPER_SOURCE_FIRST, nIntValue);
+        break;
+        case NS_ooxml::LN_CT_PaperSource_other:
+            m_pImpl->SetPaperSource(PAPER_SOURCE_OTHER, nIntValue);
+        break;
         case NS_ooxml::LN_CT_Language_val: //90314
         case NS_ooxml::LN_CT_Language_eastAsia: //90315
         case NS_ooxml::LN_CT_Language_bidi: //90316
@@ -2495,7 +2501,16 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, const 
PropertyMapPtr& rContext )
             pSectionContext->SetGutterMargin(rPageMar.gutter);
         }
         break;
-
+    case NS_ooxml::LN_EG_SectPrContents_paperSrc:
+        m_pImpl->InitPaperSource();
+        resolveSprmProps(*this, rSprm);
+        OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+        if(pSectionContext)
+        {
+            const PaperSource& rPaperSource = m_pImpl->GetPaperSource();
+            pSectionContext->SetPaperSource( rPaperSource.first, 
rPaperSource.other );
+        }
+    break;
     case NS_ooxml::LN_EG_SectPrContents_cols:
     {
         writerfilter::Reference<Properties>::Pointer_t pProperties = 
rSprm.getProps();
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx 
b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 4780df543d2c..4ee9f58f3e4c 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -9314,6 +9314,14 @@ void DomainMapper_Impl::SetPageMarginTwip( 
PageMarElement eElement, sal_Int32 nV
     }
 }
 
+void DomainMapper_Impl::SetPaperSource(PaperSourceElement eElement, sal_Int32 
nValue)
+{
+    if(eElement == PAPER_SOURCE_FIRST)
+        m_aPaperSource.first = nValue;
+    else
+        m_aPaperSource.other = nValue;
+}
+
 
 PageMar::PageMar()
     : top(ConversionHelper::convertTwipToMM100( sal_Int32(1440)))
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx 
b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
index 708855e41fb6..082eda8fc5c9 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
@@ -103,6 +103,23 @@ enum PageMarElement
     PAGE_MAR_GUTTER
 };
 
+struct PaperSource
+{
+    sal_Int32 first;
+    sal_Int32 other;
+    public:
+        PaperSource() :
+            first(0),
+            other(0)
+            {}
+};
+
+enum PaperSourceElement
+{
+    PAPER_SOURCE_FIRST,
+    PAPER_SOURCE_OTHER,
+};
+
 /// property stack element
 enum ContextType
 {
@@ -537,6 +554,7 @@ private:
     OUString                                                                   
     m_sCurrentPermEdGrp;
 
     PageMar                                                                    
    m_aPageMargins;
+    PaperSource                                                                
     m_aPaperSource;
     SymbolData                                                                 
     m_aSymbolData;
 
     // TableManagers are stacked: one for each stream to avoid any confusion
@@ -1029,6 +1047,10 @@ public:
     void SetPageMarginTwip( PageMarElement eElement, sal_Int32 nValue );
     const PageMar& GetPageMargins() const {return m_aPageMargins;}
 
+    void InitPaperSource() { m_aPaperSource = PaperSource(); }
+    void SetPaperSource( PaperSourceElement eElement, sal_Int32 nValue );
+    const PaperSource& GetPaperSource() {return m_aPaperSource;}
+
     const LineNumberSettings& GetLineNumberSettings() const { return 
m_aLineNumberSettings;}
     void SetLineNumberSettings(const LineNumberSettings& rSet) { 
m_aLineNumberSettings = rSet;}
 
diff --git a/writerfilter/source/dmapper/PropertyIds.cxx 
b/writerfilter/source/dmapper/PropertyIds.cxx
index 01cf1203d3cb..b8b4efc06222 100644
--- a/writerfilter/source/dmapper/PropertyIds.cxx
+++ b/writerfilter/source/dmapper/PropertyIds.cxx
@@ -383,6 +383,7 @@ namespace
         { PROP_CURSOR_NOT_IGNORE_TABLES_IN_HF, u"CursorNotIgnoreTables"},
         { PROP_PARA_CONNECT_BORDERS, u"ParaIsConnectBorder"},
         { PROP_DECORATIVE, u"Decorative"},
+        { PROP_PAPER_TRAY, u"PrinterPaperTray"},
     });
 } // end anonymous ns
 
diff --git a/writerfilter/source/dmapper/PropertyIds.hxx 
b/writerfilter/source/dmapper/PropertyIds.hxx
index 83d05d81c815..b39fcd24fa49 100644
--- a/writerfilter/source/dmapper/PropertyIds.hxx
+++ b/writerfilter/source/dmapper/PropertyIds.hxx
@@ -262,6 +262,7 @@ enum PropertyIds
         ,PROP_PARA_TOP_MARGIN
         ,PROP_PARA_VERT_ALIGNMENT
         ,PROP_PARA_WIDOWS
+        ,PROP_PAPER_TRAY
         ,PROP_PARENT_NUMBERING
         ,PROP_POSITION_AND_SPACE_MODE
         ,PROP_POSITION_PROTECTED
diff --git a/writerfilter/source/dmapper/PropertyMap.cxx 
b/writerfilter/source/dmapper/PropertyMap.cxx
index ec055c532c4d..9c3e031e40b0 100644
--- a/writerfilter/source/dmapper/PropertyMap.cxx
+++ b/writerfilter/source/dmapper/PropertyMap.cxx
@@ -429,6 +429,8 @@ SectionPropertyMap::SectionPropertyMap( bool 
bIsFirstSection )
     , m_nLnc(NS_ooxml::LN_Value_ST_LineNumberRestart_newPage)
     , m_ndxaLnn( 0 )
     , m_nLnnMin( 0 )
+    , m_nPaperSourceFirst( 0 )
+    , m_nPaperSourceOther( 0 )
     , m_bDynamicHeightTop( true )
     , m_bDynamicHeightBottom( true )
 {
@@ -581,6 +583,27 @@ void SectionPropertyMap::SetBorder( BorderPosition ePos, 
sal_Int32 nLineDistance
     m_bBorderShadows[ePos]   = bShadow;
 }
 
+void SectionPropertyMap::ApplyPaperSource(DomainMapper_Impl& rDM_Impl)
+{
+    uno::Reference<beans::XPropertySet> xFirst;
+    // todo: negative spacing (from ww8par6.cxx)
+    if (!m_sPageStyleName.isEmpty())
+    {
+        xFirst = GetPageStyle(rDM_Impl);
+        if ( xFirst.is() )
+            try
+            {
+                //TODO: which of the two tray values needs to be set? 
first/other - the interfaces requires the name of the tray!
+                xFirst->setPropertyValue(getPropertyName(PROP_PAPER_TRAY),
+                                         uno::Any(m_nPaperSourceFirst));
+            }
+            catch (const uno::Exception&)
+            {
+                TOOLS_WARN_EXCEPTION("writerfilter", "Paper source not found");
+            }
+    }
+}
+
 void SectionPropertyMap::ApplyBorderToPageStyles( DomainMapper_Impl& rDM_Impl,
                                                   BorderApply 
/*eBorderApply*/, BorderOffsetFrom eOffsetFrom )
 {
@@ -1757,6 +1780,7 @@ void SectionPropertyMap::CloseSectionGroup( 
DomainMapper_Impl& rDM_Impl )
             ApplyProperties_(xPageStyle);
 
         ApplyBorderToPageStyles( rDM_Impl, m_eBorderApply, m_eBorderOffsetFrom 
);
+        ApplyPaperSource(rDM_Impl);
 
         try
         {
diff --git a/writerfilter/source/dmapper/PropertyMap.hxx 
b/writerfilter/source/dmapper/PropertyMap.hxx
index 192a4ac64a78..711ef47195a0 100644
--- a/writerfilter/source/dmapper/PropertyMap.hxx
+++ b/writerfilter/source/dmapper/PropertyMap.hxx
@@ -295,6 +295,9 @@ private:
     sal_Int32                                       m_ndxaLnn;
     sal_Int32                                       m_nLnnMin;
 
+    sal_Int32                                       m_nPaperSourceFirst;
+    sal_Int32                                       m_nPaperSourceOther;
+
     bool                                            m_bDynamicHeightTop;
     bool                                            m_bDynamicHeightBottom;
 
@@ -409,12 +412,14 @@ public:
     void SetdxaLnn( sal_Int32 nValue ) { m_ndxaLnn = nValue; }
     void SetLnnMin( sal_Int32 nValue ) { m_nLnnMin = nValue; }
 
+    void SetPaperSource(sal_Int32 first, sal_Int32 other) { 
m_nPaperSourceFirst = first; m_nPaperSourceOther = other;}
+
     void addRelativeWidthShape( css::uno::Reference<css::drawing::XShape> 
xShape ) { m_xRelativeWidthShapes.push_back( xShape ); }
 
     // determine which style gets the borders
     void ApplyBorderToPageStyles( DomainMapper_Impl &rDM_Impl,
                                   BorderApply eBorderApply, BorderOffsetFrom 
eOffsetFrom );
-
+    void ApplyPaperSource(DomainMapper_Impl& rDM_Impl);
     void CloseSectionGroup( DomainMapper_Impl& rDM_Impl );
     // Handling of margins, header and footer for any kind of sections breaks.
     void HandleMarginsHeaderFooter(DomainMapper_Impl& rDM_Impl);
diff --git a/writerfilter/source/ooxml/model.xml 
b/writerfilter/source/ooxml/model.xml
index fd99a745e623..2c174743f990 100644
--- a/writerfilter/source/ooxml/model.xml
+++ b/writerfilter/source/ooxml/model.xml
@@ -17964,6 +17964,10 @@
       <attribute name="footer" tokenid="ooxml:CT_PageMar_footer"/>
       <attribute name="gutter" tokenid="ooxml:CT_PageMar_gutter"/>
     </resource>
+    <resource name="CT_PaperSource" resource="Properties">
+      <attribute name="first" tokenid="ooxml:CT_PaperSource_first"/>
+      <attribute name="other" tokenid="ooxml:CT_PaperSource_other"/>
+    </resource>
     <resource name="ST_PageBorderZOrder" resource="List">
       <value tokenid="ooxml:Value_doc_ST_PageBorderZOrder_front">front</value>
       <value tokenid="ooxml:Value_doc_ST_PageBorderZOrder_back">back</value>
diff --git a/writerfilter/source/rtftok/rtfdispatchvalue.cxx 
b/writerfilter/source/rtftok/rtfdispatchvalue.cxx
index 69157a97829f..f699b0ed39d1 100644
--- a/writerfilter/source/rtftok/rtfdispatchvalue.cxx
+++ b/writerfilter/source/rtftok/rtfdispatchvalue.cxx
@@ -1342,6 +1342,18 @@ RTFError RTFDocumentImpl::dispatchValue(RTFKeyword 
nKeyword, int nParam)
                                NS_ooxml::LN_EG_SectPrContents_pgSz, 
NS_ooxml::LN_CT_PageSz_w,
                                pIntValue);
             break;
+        case RTFKeyword::BINFSXN:
+            putNestedAttribute(m_aStates.top().getSectionSprms(),
+                               NS_ooxml::LN_EG_SectPrContents_paperSrc,
+                               NS_ooxml::LN_CT_PaperSource_first, pIntValue);
+            break;
+        case RTFKeyword::BINSXN:
+        {
+            putNestedAttribute(m_aStates.top().getSectionSprms(),
+                               NS_ooxml::LN_EG_SectPrContents_paperSrc,
+                               NS_ooxml::LN_CT_PaperSource_other, pIntValue);
+        }
+        break;
         case RTFKeyword::MARGL:
             putNestedAttribute(m_aDefaultState.getSectionSprms(),
                                NS_ooxml::LN_EG_SectPrContents_pgMar, 
NS_ooxml::LN_CT_PageMar_left,
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx 
b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index 7b6254ee0d0c..2c851b95a2fb 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -2133,6 +2133,8 @@ RTFError RTFDocumentImpl::pushState()
         case Destination::FIELDRESULT:
         case Destination::SHAPETEXT:
         case Destination::FORMFIELD:
+            //TODO: if this is pushed then the font encoding is used which 
results in a broken command string
+            // if it is not pushed to NORMAL then it is not restored in time.
         case Destination::FIELDINSTRUCTION:
         case Destination::PICT:
             m_aStates.top().setDestination(Destination::NORMAL);
@@ -3803,7 +3805,8 @@ void RTFDocumentImpl::checkUnicode(bool bUnicode, bool 
bHex)
     if (bHex && !m_aHexBuffer.isEmpty())
     {
         rtl_TextEncoding nEncoding = m_aStates.top().getCurrentEncoding();
-        if (m_aStates.top().getDestination() == Destination::FONTENTRY
+        if ((m_aStates.top().getDestination() == Destination::FONTENTRY
+             || m_aStates.top().getDestination() == 
Destination::FIELDINSTRUCTION)
             && m_aStates.top().getCurrentEncoding() == RTL_TEXTENCODING_SYMBOL)
             nEncoding = RTL_TEXTENCODING_MS_1252;
         OUString aString = OStringToOUString(m_aHexBuffer, nEncoding);
commit 7fc0e5b7f6d28aa9a4e6e7b6f836440b33a0ba89
Author:     Xisco Fauli <xiscofa...@libreoffice.org>
AuthorDate: Tue Feb 6 12:50:59 2024 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Fri Feb 9 20:09:40 2024 +0100

    tdf#159601, tdf#159594: reuse target for symbols' children
    
    Regression from e7186b49a9a0b24ddc3b1c5384b5d9facb03518c
    "tdf#158445: support viewBox in symbol elements"
    
    Change-Id: Ie2198c47149def17fa3cb612046b61bf32e873bf
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163046
    Tested-by: Jenkins
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>
    (cherry picked from commit 8b7dbf40a06bc900562887889c17606ae5ef0587)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163015
    Tested-by: Xisco Fauli <xiscofa...@libreoffice.org>

diff --git a/svgio/qa/cppunit/SvgImportTest.cxx 
b/svgio/qa/cppunit/SvgImportTest.cxx
index 51c66e52452a..9eb8b37d70ca 100644
--- a/svgio/qa/cppunit/SvgImportTest.cxx
+++ b/svgio/qa/cppunit/SvgImportTest.cxx
@@ -1621,9 +1621,24 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf158445)
 
     CPPUNIT_ASSERT (pDocument);
 
-    assertXPath(pDocument, 
"/primitive2D/transform/transform/transform/transform/polypolygoncolor"_ostr, 
"color"_ostr, "#000000");
-    assertXPath(pDocument, 
"/primitive2D/transform/transform/transform/transform/polypolygoncolor/polypolygon"_ostr,
 "height"_ostr, "8.052");
-    assertXPath(pDocument, 
"/primitive2D/transform/transform/transform/transform/polypolygoncolor/polypolygon"_ostr,
 "width"_ostr, "5.328");
+    assertXPath(pDocument, 
"/primitive2D/transform/mask/transform/transform/transform/polypolygoncolor"_ostr,
 "color"_ostr, "#000000");
+    assertXPath(pDocument, 
"/primitive2D/transform/mask/transform/transform/transform/polypolygoncolor/polypolygon"_ostr,
 "height"_ostr, "8.052");
+    assertXPath(pDocument, 
"/primitive2D/transform/mask/transform/transform/transform/polypolygoncolor/polypolygon"_ostr,
 "width"_ostr, "5.328");
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testTdf159594)
+{
+    Primitive2DSequence aSequence = 
parseSvg(u"/svgio/qa/cppunit/data/tdf159594.svg");
+    CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength()));
+
+    drawinglayer::Primitive2dXmlDump dumper;
+    xmlDocUniquePtr pDocument = 
dumper.dumpAndParse(Primitive2DContainer(aSequence));
+
+    CPPUNIT_ASSERT (pDocument);
+
+    assertXPath(pDocument, 
"/primitive2D/transform/transform/polypolygoncolor"_ostr, "color"_ostr, 
"#000000");
+    assertXPath(pDocument, 
"/primitive2D/transform/transform/polypolygoncolor/polypolygon"_ostr, 
"height"_ostr, "11.671875");
+    assertXPath(pDocument, 
"/primitive2D/transform/transform/polypolygoncolor/polypolygon"_ostr, 
"width"_ostr, "7.5");
 }
 
 CPPUNIT_TEST_FIXTURE(Test, testTdf97663)
diff --git a/svgio/qa/cppunit/data/tdf159594.svg 
b/svgio/qa/cppunit/data/tdf159594.svg
new file mode 100644
index 000000000000..c2b470ec0fdc
--- /dev/null
+++ b/svgio/qa/cppunit/data/tdf159594.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg"; 
xmlns:xlink="http://www.w3.org/1999/xlink"; viewBox="0 0 100 100" version="1.1">
+<symbol overflow="visible" id="glyph">
+<path style="stroke:none;" d="M 1.3125 -11.671875 L 8.8125 -11.671875 L 8.8125 
-11 L 4.578125 0 L 2.9375 0 L 6.921875 -10.34375 L 1.3125 -10.34375 Z M 1.3125 
-11.671875 "/>
+</symbol>
+<use xlink:href="#glyph" x="40" y="30"/>
+</svg>
diff --git a/svgio/source/svgreader/svgsymbolnode.cxx 
b/svgio/source/svgreader/svgsymbolnode.cxx
index f86dd27bb3a0..2f226b841e82 100644
--- a/svgio/source/svgreader/svgsymbolnode.cxx
+++ b/svgio/source/svgreader/svgsymbolnode.cxx
@@ -126,12 +126,10 @@ namespace svgio::svgreader
 
         void 
SvgSymbolNode::decomposeSvgNode(drawinglayer::primitive2d::Primitive2DContainer&
 rTarget, bool bReferenced) const
         {
-            drawinglayer::primitive2d::Primitive2DContainer aNewTarget;
-
             // decompose children
-            SvgNode::decomposeSvgNode(aNewTarget, bReferenced);
+            SvgNode::decomposeSvgNode(rTarget, bReferenced);
 
-            if(aNewTarget.empty())
+            if (rTarget.empty())
                 return;
 
             if(getViewBox())
@@ -157,7 +155,7 @@ namespace svgio::svgreader
                 const drawinglayer::primitive2d::Primitive2DReference xRef(
                     new drawinglayer::primitive2d::TransformPrimitive2D(
                         aEmbeddingTransform,
-                        std::move(aNewTarget)));
+                        
drawinglayer::primitive2d::Primitive2DContainer(rTarget)));
 
                 rTarget.push_back(xRef);
             }
commit 177e7968711c330a5b66826e6338bc9a605eeac9
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Tue Jan 16 11:02:46 2024 +0200
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Fri Feb 9 20:09:40 2024 +0100

    improve loplugin:cow_wrapper
    
    some stuff was hiding inside templates
    
    Change-Id: I89fd1a926dd6bf96e35a74e5028165acae51c60c
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162159
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163100
    Reviewed-by: Caolán McNamara <caolan.mcnam...@collabora.com>

diff --git a/compilerplugins/clang/cow_wrapper.cxx 
b/compilerplugins/clang/cow_wrapper.cxx
index c98f70cbeb87..073a4fa9fb89 100644
--- a/compilerplugins/clang/cow_wrapper.cxx
+++ b/compilerplugins/clang/cow_wrapper.cxx
@@ -34,6 +34,8 @@ public:
     {
     }
 
+    bool shouldVisitTemplateInstantiations() const { return true; }
+
     virtual bool preRun() override { return true; }
 
     virtual void run() override
diff --git a/cppuhelper/inc/interfacecontainer4.hxx 
b/cppuhelper/inc/interfacecontainer4.hxx
index 5111ae7e5170..bbc082cfd76e 100644
--- a/cppuhelper/inc/interfacecontainer4.hxx
+++ b/cppuhelper/inc/interfacecontainer4.hxx
@@ -358,7 +358,7 @@ 
OInterfaceContainerHelper4<ListenerT>::addInterface(std::unique_lock<std::mutex>
     (void)rGuard;
     assert(rListener.is());
     maData->push_back(rListener);
-    return maData->size();
+    return std::as_const(maData)->size();
 }
 
 template <class ListenerT>
@@ -382,7 +382,7 @@ sal_Int32 
OInterfaceContainerHelper4<ListenerT>::removeInterface(
     if (it != maData->end())
         maData->erase(it);
 
-    return maData->size();
+    return std::as_const(maData)->size();
 }
 
 template <class ListenerT>
diff --git a/include/comphelper/interfacecontainer3.hxx 
b/include/comphelper/interfacecontainer3.hxx
index 02f96658dcd2..05a82212c064 100644
--- a/include/comphelper/interfacecontainer3.hxx
+++ b/include/comphelper/interfacecontainer3.hxx
@@ -314,7 +314,7 @@ OInterfaceContainerHelper3<ListenerT>::addInterface(const 
css::uno::Reference<Li
     osl::MutexGuard aGuard(mrMutex);
 
     maData->push_back(rListener);
-    return maData->size();
+    return std::as_const(maData)->size();
 }
 
 template <class ListenerT>
@@ -337,7 +337,7 @@ sal_Int32 
OInterfaceContainerHelper3<ListenerT>::removeInterface(
     if (it != maData->end())
         maData->erase(it);
 
-    return maData->size();
+    return std::as_const(maData)->size();
 }
 
 template <class ListenerT>
diff --git a/include/comphelper/interfacecontainer4.hxx 
b/include/comphelper/interfacecontainer4.hxx
index 1362ee1df741..a8b2bdc85505 100644
--- a/include/comphelper/interfacecontainer4.hxx
+++ b/include/comphelper/interfacecontainer4.hxx
@@ -353,7 +353,7 @@ 
OInterfaceContainerHelper4<ListenerT>::addInterface(std::unique_lock<std::mutex>
     (void)rGuard;
     assert(rListener.is());
     maData->push_back(rListener);
-    return maData->size();
+    return std::as_const(maData)->size();
 }
 
 template <class ListenerT>
@@ -377,7 +377,7 @@ sal_Int32 
OInterfaceContainerHelper4<ListenerT>::removeInterface(
     if (it != maData->end())
         maData->erase(it);
 
-    return maData->size();
+    return std::as_const(maData)->size();
 }
 
 template <class ListenerT>
commit 30df4b8e48fa757cc0d90112743b58d6202a066b
Author:     Xisco Fauli <xiscofa...@libreoffice.org>
AuthorDate: Thu Feb 8 14:33:28 2024 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Fri Feb 9 20:09:40 2024 +0100

    CppunitTest_sw_a11y: disable test on Win ( 24.2 only )
    
    This test fails in tb88-win when compiling libreoffice-24-2
    branch but not with master branch, so disabling it just in the
    affected branch. Why it fails in one branch and not in
    the other is a mistery
    
    Change-Id: Iec37ffe5f90689012f4fc3041075cbe0b6dbd002
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163118
    Tested-by: Jenkins
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>

diff --git a/sw/qa/extras/accessibility/dialogs.cxx 
b/sw/qa/extras/accessibility/dialogs.cxx
index a14eed6bdba3..091e6729c9f8 100644
--- a/sw/qa/extras/accessibility/dialogs.cxx
+++ b/sw/qa/extras/accessibility/dialogs.cxx
@@ -176,6 +176,7 @@ CPPUNIT_TEST_FIXTURE(test::SwAccessibleTestBase, 
BasicTestFontworkDialog)
         collectText());
 }
 
+#if !defined(_WIN32)
 CPPUNIT_TEST_FIXTURE(test::SwAccessibleTestBase, BasicTestFrameDialog)
 {
     load(u"private:factory/swriter"_ustr);
@@ -193,6 +194,7 @@ CPPUNIT_TEST_FIXTURE(test::SwAccessibleTestBase, 
BasicTestFrameDialog)
         rtl::OUString("<PARAGRAPH/><TEXT_FRAME 
name=\"Frame1\"><PARAGRAPH/></TEXT_FRAME>"),
         collectText());
 }
+#endif //defined(_WIN32)
 
 #endif //defined(MACOSX)
 
commit 03dc4d4450e3113c56978c87dbd2726bc8ff7c69
Author:     Xisco Fauli <xiscofa...@libreoffice.org>
AuthorDate: Thu Feb 8 11:54:52 2024 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Fri Feb 9 20:09:39 2024 +0100

    tdf#159637: fix position of 'Windows Share' entry
    
    Started to happen after
    
    commit b91daea3c1a38883c06cdd63c6eababe1df9e61d
    Author: Michael Stahl <michael.st...@allotropia.de>
    Date:   Tue Nov 7 13:20:21 2023 +0100
    
        tdf#146386 fpicker,svtools: remove FTP from Remote Files dialog
    
    Change-Id: I6ae78f96c1a1271de8cb2f0f114b92c3c213a068
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163115
    Tested-by: Caolán McNamara <caolan.mcnam...@collabora.com>
    Reviewed-by: Caolán McNamara <caolan.mcnam...@collabora.com>
    (cherry picked from commit a381e87d16496d9fee98d9ff49fa2a38cc5c8fb2)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163140
    Tested-by: Jenkins
    Tested-by: Xisco Fauli <xiscofa...@libreoffice.org>
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>

diff --git a/svtools/source/dialogs/PlaceEditDialog.cxx 
b/svtools/source/dialogs/PlaceEditDialog.cxx
index 7d0c7717e2f1..a51486e408a8 100644
--- a/svtools/source/dialogs/PlaceEditDialog.cxx
+++ b/svtools/source/dialogs/PlaceEditDialog.cxx
@@ -222,7 +222,7 @@ void PlaceEditDialog::InitDetails( )
 #if defined(_WIN32)
     // nPos is the position of first item that is pre-defined in 
svtools/uiconfig/ui/placeedit.ui,
     // after other CMIS types were inserted
-    m_xLBServerType->remove(nPos + 3);
+    m_xLBServerType->remove(nPos + 2);
 #else
     // Create Windows Share control
     std::shared_ptr<DetailsContainer> 
xSmbDetails(std::make_shared<SmbDetailsContainer>(this));
commit 78279d7fff2c2080a87d4da04ab2e948fc26d950
Author:     Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Wed Jan 31 00:44:19 2024 +0600
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Fri Feb 9 20:09:39 2024 +0100

    tdf#159458: make sure to update unexpanded URL when renaming library
    
    1. If passed new source URL is expanded (i.e., trying to expand it in
    SfxLibraryContainer::checkStorageURL didn't change it), previously
    aUnexpandedStorageURL was unchanged. It should be cleared - then it
    will be set automatically to the URL to lib info file.
    
    2. Try to create the "variable" path (starting with "$(USER)/basic/")
    because this avoids absolute paths to the libraries, which make it
    harder to move the profile.
    
    Change-Id: Ie83ea9a32cfddf37727d238547663aeb72487ee3
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162777
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>
    (cherry picked from commit 907d4107896234b2e7ebfd42f40cee3bd5b1d01e)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162728
    Reviewed-by: Christian Lohmaier <lohmaier+libreoff...@googlemail.com>

diff --git a/basic/source/uno/namecont.cxx b/basic/source/uno/namecont.cxx
index beeee133b064..eb04dd2ee767 100644
--- a/basic/source/uno/namecont.cxx
+++ b/basic/source/uno/namecont.cxx
@@ -537,7 +537,9 @@ void SAL_CALL SfxLibraryContainer::storeLibraries(  )
     }
 }
 
-static void checkAndCopyFileImpl( const INetURLObject& rSourceFolderInetObj,
+namespace
+{
+void checkAndCopyFileImpl( const INetURLObject& rSourceFolderInetObj,
                                   const INetURLObject& rTargetFolderInetObj,
                                   std::u16string_view rCheckFileName,
                                   std::u16string_view rCheckExtension,
@@ -559,12 +561,14 @@ static void checkAndCopyFileImpl( const INetURLObject& 
rSourceFolderInetObj,
     }
 }
 
-static void createVariableURL( OUString& rStr, std::u16string_view rLibName,
+constexpr OUString sUserBasicVariablePrefix = u"$(USER)/basic/"_ustr;
+
+void createVariableURL( OUString& rStr, std::u16string_view rLibName,
                                std::u16string_view rInfoFileName, bool bUser )
 {
     if( bUser )
     {
-        rStr = "$(USER)/basic/";
+        rStr = sUserBasicVariablePrefix;
     }
     else
     {
@@ -572,6 +576,7 @@ static void createVariableURL( OUString& rStr, 
std::u16string_view rLibName,
     }
     rStr += OUString::Concat(rLibName) + "/" + rInfoFileName + ".xlb/";
 }
+}
 
 void SfxLibraryContainer::init( const OUString& rInitialDocumentURL, const 
uno::Reference< embed::XStorage >& rxInitialStorage )
 {
@@ -1261,6 +1266,11 @@ void SfxLibraryContainer::checkStorageURL( const 
OUString& aSourceURL,
     {
         aUnexpandedStorageURL = aSourceURL;
     }
+    else
+    {
+        aUnexpandedStorageURL.clear();
+    }
+
     INetURLObject aInetObj( aExpandedSourceURL );
     OUString aExtension = aInetObj.getExtension();
     if( aExtension == "xlb" )
@@ -2515,9 +2525,18 @@ void SAL_CALL SfxLibraryContainer::renameLibrary( const 
OUString& Name, const OU
                                  INetURLObject::EncodeMechanism::All );
         OUString aDestDirPath = aDestInetObj.GetMainURL( 
INetURLObject::DecodeMechanism::NONE );
 
+        OUString aDestDirUnexpandedPath = aDestDirPath;
+        if 
(pImplLib->maUnexpandedStorageURL.startsWith(sUserBasicVariablePrefix))
+        {
+            // try to re-create the variable URL: helps moving the profile
+            OUString aUserBasicURL = expand_url(sUserBasicVariablePrefix);
+            if (OUString aRest; aDestDirPath.startsWith(aUserBasicURL, &aRest))
+                aDestDirUnexpandedPath = sUserBasicVariablePrefix + aRest;
+        }
+
         // Store new URL
         OUString aLibInfoFileURL = pImplLib->maLibInfoFileURL;
-        checkStorageURL( aDestDirPath, pImplLib->maLibInfoFileURL, 
pImplLib->maStorageURL,
+        checkStorageURL(aDestDirUnexpandedPath, pImplLib->maLibInfoFileURL, 
pImplLib->maStorageURL,
                          pImplLib->maUnexpandedStorageURL );
 
         try
commit a124ea36a73f35f1ff145332b2dec2b99149cee0
Author:     Andreas Heinisch <andreas.heini...@yahoo.de>
AuthorDate: Tue Nov 28 18:24:52 2023 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Fri Feb 9 20:09:39 2024 +0100

    tdf#158326 - Auto Filter: separate sorting and removing of duplicates
    
    Change-Id: Ide74895508af280f4b0c129689d852635e62dbff
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/160052
    Tested-by: Jenkins
    Reviewed-by: Andreas Heinisch <andreas.heini...@yahoo.de>
    (cherry picked from commit 6d0fddb697fd619d11da3469f4dd72782334f3bb)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162891
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>

diff --git a/sc/inc/typedstrdata.hxx b/sc/inc/typedstrdata.hxx
index b4a9bc5d37c6..b6bed2dfc249 100644
--- a/sc/inc/typedstrdata.hxx
+++ b/sc/inc/typedstrdata.hxx
@@ -54,11 +54,21 @@ public:
         bool operator() (const ScTypedStrData& left, const ScTypedStrData& 
right) const;
     };
 
+    struct LessSortCaseSensitive
+    {
+        bool operator() (const ScTypedStrData& left, const ScTypedStrData& 
right) const;
+    };
+
     struct LessCaseInsensitive
     {
         bool operator() (const ScTypedStrData& left, const ScTypedStrData& 
right) const;
     };
 
+    struct LessSortCaseInsensitive
+    {
+        bool operator() (const ScTypedStrData& left, const ScTypedStrData& 
right) const;
+    };
+
     struct EqualCaseSensitive
     {
         bool operator() (const ScTypedStrData& left, const ScTypedStrData& 
right) const;
diff --git a/sc/qa/uitest/autofilter/autofilterBugs.py 
b/sc/qa/uitest/autofilter/autofilterBugs.py
index 6fa029985fcc..849351861d7f 100644
--- a/sc/qa/uitest/autofilter/autofilterBugs.py
+++ b/sc/qa/uitest/autofilter/autofilterBugs.py
@@ -73,6 +73,30 @@ class autofilter(UITestCase):
             
self.assertEqual(get_state_as_dict(xTreeList.getChild("4"))["Text"], "vröude")
             
self.assertEqual(get_state_as_dict(xTreeList.getChild("5"))["Text"], "vröudᵉ")
 
+   def test_tdf158326(self):
+        with self.ui_test.create_doc_in_start_center("calc"):
+            calcDoc = self.xUITest.getTopFocusWindow()
+            xGridWindow = calcDoc.getChild("grid_window")
+            enter_text_to_cell(xGridWindow, "A1", "vröude")
+            enter_text_to_cell(xGridWindow, "A2", "vröudᵉ")
+            enter_text_to_cell(xGridWindow, "A3", "vröude")
+            enter_text_to_cell(xGridWindow, "A4", "vröudᵉ")
+            enter_text_to_cell(xGridWindow, "A5", "vröude")
+            enter_text_to_cell(xGridWindow, "A6", "vröudᵉ")
+            xGridWindow.executeAction("SELECT", mkPropertyValues({"RANGE": 
"A1:A6"}))
+
+            with 
self.ui_test.execute_dialog_through_command(".uno:DataFilterAutoFilter", 
close_button="no"):
+                pass
+
+            xGridWindow.executeAction("LAUNCH", 
mkPropertyValues({"AUTOFILTER": "", "COL": "0", "ROW": "0"}))
+            xFloatWindow = self.xUITest.getFloatWindow()
+            xTreeList = xFloatWindow.getChild("check_list_box")
+
+            # Without the fix in place, there would be 5 items since they will 
not be removed
+            self.assertEqual(2, len(xTreeList.getChildren()))
+            
self.assertEqual(get_state_as_dict(xTreeList.getChild("0"))["Text"], "vröude")
+            
self.assertEqual(get_state_as_dict(xTreeList.getChild("1"))["Text"], "vröudᵉ")
+
    def test_tdf94055(self):
         with self.ui_test.create_doc_in_start_center("calc") as document:
             calcDoc = self.xUITest.getTopFocusWindow()
diff --git a/sc/source/core/data/documen3.cxx b/sc/source/core/data/documen3.cxx
index b42a8d36b582..8ae4ff6c4e87 100644
--- a/sc/source/core/data/documen3.cxx
+++ b/sc/source/core/data/documen3.cxx
@@ -89,6 +89,7 @@ void sortAndRemoveDuplicates(std::vector<ScTypedStrData>& 
rStrings, bool bCaseSe
         std::vector<ScTypedStrData>::iterator it =
             std::unique(rStrings.begin(), rStrings.end(), 
ScTypedStrData::EqualCaseSensitive());
         rStrings.erase(it, rStrings.end());
+        std::stable_sort(rStrings.begin(), rStrings.end(), 
ScTypedStrData::LessSortCaseSensitive());
     }
     else
     {
@@ -96,6 +97,7 @@ void sortAndRemoveDuplicates(std::vector<ScTypedStrData>& 
rStrings, bool bCaseSe
         std::vector<ScTypedStrData>::iterator it =
             std::unique(rStrings.begin(), rStrings.end(), 
ScTypedStrData::EqualCaseInsensitive());
         rStrings.erase(it, rStrings.end());
+        std::stable_sort(rStrings.begin(), rStrings.end(), 
ScTypedStrData::LessSortCaseInsensitive());
     }
     if (std::any_of(rStrings.begin(), rStrings.end(),
         [](ScTypedStrData& rString) { return rString.IsHiddenByFilter(); })) {
diff --git a/sc/source/core/tool/typedstrdata.cxx 
b/sc/source/core/tool/typedstrdata.cxx
index e00c1bc18d91..4e3f862ae3a4 100644
--- a/sc/source/core/tool/typedstrdata.cxx
+++ b/sc/source/core/tool/typedstrdata.cxx
@@ -34,8 +34,31 @@ bool ScTypedStrData::LessCaseSensitive::operator() (const 
ScTypedStrData& left,
     if (left.mbIsDate != right.mbIsDate)
         return left.mbIsDate < right.mbIsDate;
 
-    sal_Int32 nEqual = ScGlobal::GetCaseCollator().compareString(
-        left.maStrValue, right.maStrValue);
+    sal_Int32 nEqual
+        = ScGlobal::GetCaseTransliteration().compareString(left.maStrValue, 
right.maStrValue);
+
+    if (!nEqual)
+        return left.mbIsHiddenByFilter < right.mbIsHiddenByFilter;
+
+    return nEqual < 0;
+}
+
+bool ScTypedStrData::LessSortCaseSensitive::operator() (const ScTypedStrData& 
left, const ScTypedStrData& right) const
+{
+    if (left.meStrType != right.meStrType)
+        return left.meStrType < right.meStrType;
+
+    if (left.meStrType == Value)
+    {
+        if (left.mfValue == right.mfValue)
+            return left.mbIsHiddenByFilter < right.mbIsHiddenByFilter;
+        return left.mfValue < right.mfValue;
+    }
+
+    if (left.mbIsDate != right.mbIsDate)
+        return left.mbIsDate < right.mbIsDate;
+
+    sal_Int32 nEqual = 
ScGlobal::GetCaseCollator().compareString(left.maStrValue, right.maStrValue);
 
     if (!nEqual)
         return left.mbIsHiddenByFilter < right.mbIsHiddenByFilter;
@@ -58,8 +81,31 @@ bool ScTypedStrData::LessCaseInsensitive::operator() (const 
ScTypedStrData& left
     if (left.mbIsDate != right.mbIsDate)
         return left.mbIsDate < right.mbIsDate;
 
-    sal_Int32 nEqual = ScGlobal::GetCollator().compareString(
-        left.maStrValue, right.maStrValue);
+    sal_Int32 nEqual
+        = ScGlobal::GetTransliteration().compareString(left.maStrValue, 
right.maStrValue);
+
+    if (!nEqual)
+        return left.mbIsHiddenByFilter < right.mbIsHiddenByFilter;
+
+    return nEqual < 0;
+}
+
+bool ScTypedStrData::LessSortCaseInsensitive::operator() (const 
ScTypedStrData& left, const ScTypedStrData& right) const
+{
+    if (left.meStrType != right.meStrType)
+        return left.meStrType < right.meStrType;
+
+    if (left.meStrType == Value)
+    {
+        if (left.mfValue == right.mfValue)
+            return left.mbIsHiddenByFilter < right.mbIsHiddenByFilter;
+        return left.mfValue < right.mfValue;
+    }
+
+    if (left.mbIsDate != right.mbIsDate)
+        return left.mbIsDate < right.mbIsDate;
+
+    sal_Int32 nEqual = 
ScGlobal::GetCaseCollator().compareString(left.maStrValue, right.maStrValue);
 
     if (!nEqual)
         return left.mbIsHiddenByFilter < right.mbIsHiddenByFilter;
commit 1596153d44bfe688ba3c92d91ed84288156045ff
Author:     Patrick Luby <plub...@libreoffice.org>
AuthorDate: Sat Jan 13 19:40:37 2024 -0500
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Fri Feb 9 20:09:39 2024 +0100

    tdf#158740 fix crash by checking the end node's index
    
    I don't know why m_nEndNode is larger than the size of the node
    array, but adjusting m_nEndNode to the last element in the node
    array stops the crashing.
    
    Change-Id: I425589457c6729b6689a7046f063154a2496e811
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162035
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>
    (cherry picked from commit 9bfd8e69385930d8f558c767f7b29149324d1b70)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162211
    Reviewed-by: Patrick Luby <guibomac...@gmail.com>
    Reviewed-by: Christian Lohmaier <lohmaier+libreoff...@googlemail.com>

diff --git a/sw/source/core/undo/undel.cxx b/sw/source/core/undo/undel.cxx
index 4c199c8ac321..7661b5951740 100644
--- a/sw/source/core/undo/undel.cxx
+++ b/sw/source/core/undo/undel.cxx
@@ -1152,14 +1152,25 @@ void SwUndoDelete::UndoImpl(::sw::UndoRedoContext & 
rContext)
         SwNode& start(*rDoc.GetNodes()[m_nSttNode +
             ((m_bDelFullPara || !rDoc.GetNodes()[m_nSttNode]->IsTextNode() || 
pInsNd)
                  ? 0 : 1)]);
-        // don't include end node in the range: it may have been merged already
-        // by the start node, or it may be merged by one of the moved nodes,
-        // but if it isn't merged, its current frame(s) should be good...
-        SwNode& end(*rDoc.GetNodes()[ m_bDelFullPara
-            ? delFullParaEndNode
-            // tdf#147310 SwDoc::DeleteRowCol() may delete whole table - end 
must be node following table!
-            : (m_nEndNode + (rDoc.GetNodes()[m_nSttNode]->IsTableNode() && 
rDoc.GetNodes()[m_nEndNode]->IsEndNode() ? 1 : 0))]);
-        ::MakeFrames(&rDoc, start, end);
+        // tdf#158740 fix crash by checking the end node's index
+        // I don't know why m_nEndNode is larger than the size of the node
+        // array, but adjusting m_nEndNode to the last element in the node
+        // array stops the crashing.
+        SwNodeOffset nCount(rDoc.GetNodes().Count());
+        if (nCount > SwNodeOffset(0))
+        {
+            if (m_nEndNode > nCount - 1)
+                m_nEndNode = nCount - 1;
+
+            // don't include end node in the range: it may have been merged 
already
+            // by the start node, or it may be merged by one of the moved 
nodes,
+            // but if it isn't merged, its current frame(s) should be good...
+            SwNode& end(*rDoc.GetNodes()[ m_bDelFullPara
+                ? delFullParaEndNode
+                // tdf#147310 SwDoc::DeleteRowCol() may delete whole table - 
end must be node following table!
+                : (m_nEndNode + (rDoc.GetNodes()[m_nSttNode]->IsTableNode() && 
rDoc.GetNodes()[m_nEndNode]->IsEndNode() ? 1 : 0))]);
+            ::MakeFrames(&rDoc, start, end);
+        }
     }
 
     if (pMovedNode)
commit bfb66aba44f7420d7a21fa674dca8fbaf0a1fa44
Author:     Xisco Fauli <xiscofa...@libreoffice.org>
AuthorDate: Thu Feb 8 10:00:47 2024 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Fri Feb 9 20:09:39 2024 +0100

    missing dependency in CppunitTest_sw_a11y
    
    Similar to 41c9b2a81e9eb795aaecc8c52a8e7bce0a5a3c07
    "missing dependency in CppunitTest_test_a11y"
    
    Change-Id: I4dc9d0a5c59dc95e68fd489b3e672ef6ed14355a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163112
    Tested-by: Jenkins
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>

diff --git a/sw/CppunitTest_sw_a11y.mk b/sw/CppunitTest_sw_a11y.mk
index a0d76a20d53a..f67f4cf89e01 100644
--- a/sw/CppunitTest_sw_a11y.mk
+++ b/sw/CppunitTest_sw_a11y.mk
@@ -17,6 +17,7 @@ $(eval $(call gb_CppunitTest_add_exception_objects,sw_a11y, \
 ))
 
 $(eval $(call gb_CppunitTest_use_libraries,sw_a11y, \
+       acc \
        sal \
        cppu \
        subsequenttest \
commit b33e6e41b108af1f1ddfe0529cfc56e51a1ffe31
Author:     Justin Luth <justin.l...@collabora.com>
AuthorDate: Tue Feb 6 21:08:36 2024 -0500
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Fri Feb 9 20:09:38 2024 +0100

    tdf#159581 sc: fix multi-sheet ScDocRowHeightUpdater
    
    Apparently it was caching the first sheet's
    row height, and applying it to every other sheet.
    
    AFAICS, the only time this ever ran against multiple sheets
    was during import time, so that is why it wasn't easily noticed
    before 24.2 when XLSX started using it on import.
    
    make CppunitTest_sc_subsequent_filters_test2 \
        CPPUNIT_TEST_NAME=testTdf159581_optimalRowHeight
    
    Change-Id: Ic4e4dd335fa48d02acbc85cfad35feb8eca7597b
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163066
    Tested-by: Jenkins
    Reviewed-by: Justin Luth <jl...@mail.com>
    (cherry picked from commit 9778d499df3d081314295ae099463870146b7a9c)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163027

diff --git a/sc/qa/unit/data/xlsx/tdf159581_optimalRowHeight.xlsx 
b/sc/qa/unit/data/xlsx/tdf159581_optimalRowHeight.xlsx
new file mode 100644
index 000000000000..8df77208045f
Binary files /dev/null and 
b/sc/qa/unit/data/xlsx/tdf159581_optimalRowHeight.xlsx differ
diff --git a/sc/qa/unit/subsequent_filters_test2.cxx 
b/sc/qa/unit/subsequent_filters_test2.cxx
index dd63f0b8a973..2b8ff43962bb 100644
--- a/sc/qa/unit/subsequent_filters_test2.cxx
+++ b/sc/qa/unit/subsequent_filters_test2.cxx
@@ -159,6 +159,17 @@ CPPUNIT_TEST_FIXTURE(ScFiltersTest2, 
testTdf123026_optimalRowHeight)
     CPPUNIT_ASSERT_GREATER(2000, nHeight);
 }
 
+CPPUNIT_TEST_FIXTURE(ScFiltersTest2, testTdf159581_optimalRowHeight)
+{
+    createScDoc("xlsx/tdf159581_optimalRowHeight.xlsx");
+    SCTAB nTab = 1;
+    SCROW nRow = 0; // row 1
+    int nHeight = convertTwipToMm100(getScDoc()->GetRowHeight(nRow, nTab, 
false));
+
+    // Without the fix, this was 2027. It should be 450.
+    CPPUNIT_ASSERT_LESS(500, nHeight);
+}
+
 CPPUNIT_TEST_FIXTURE(ScFiltersTest2, testCustomNumFormatHybridCellODS)
 {
     createScDoc("ods/custom-numfmt-hybrid-cell.ods");
diff --git a/sc/source/core/data/dociter.cxx b/sc/source/core/data/dociter.cxx
index b1fca78c86be..1fe1f5344d0a 100644
--- a/sc/source/core/data/dociter.cxx
+++ b/sc/source/core/data/dociter.cxx
@@ -1683,13 +1683,13 @@ void ScDocRowHeightUpdater::updateAll(const bool 
bOnlyUsedRows)
     ScProgress aProgress(mrDoc.GetDocumentShell(), 
ScResId(STR_PROGRESS_HEIGHTING), nCellCount, true);
 
     Fraction aZoom(1, 1);
-    sc::RowHeightContext aCxt(mrDoc.MaxRow(), mfPPTX, mfPPTY, aZoom, aZoom, 
mpOutDev);
     sal_uInt64 nProgressStart = 0;
     for (SCTAB nTab = 0; nTab < mrDoc.GetTableCount(); ++nTab)
     {
         if (!ValidTab(nTab) || !mrDoc.maTabs[nTab])
             continue;
 
+        sc::RowHeightContext aCxt(mrDoc.MaxRow(), mfPPTX, mfPPTY, aZoom, 
aZoom, mpOutDev);
         SCCOL nEndCol = 0;
         SCROW nEndRow = mrDoc.MaxRow();
         if (!bOnlyUsedRows || mrDoc.GetPrintArea(nTab, nEndCol, nEndRow))
commit 6a54587839a5635a60e4ed34036936e5810d923c
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Wed Feb 7 13:00:38 2024 +0200
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Fri Feb 9 20:09:38 2024 +0100

    missing dependency in CppunitTest_test_a11y
    
    found while doing other builds - if the build ordering is very unlucky,
    acc is not built when this runs, the dynamic load fails in the
    accessibility factory fails, and we fall back to using the
    DummyAccessibilityFactory instead of the real one and the test will
    crash.
    
    Change-Id: Ic16fdbe17d50c6be26b5627a4f515c91e1f7f609
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163091
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>
    (cherry picked from commit 41c9b2a81e9eb795aaecc8c52a8e7bce0a5a3c07)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163026

diff --git a/test/CppunitTest_test_a11y.mk b/test/CppunitTest_test_a11y.mk
index 22d1c8bc5576..212e9059785b 100644
--- a/test/CppunitTest_test_a11y.mk
+++ b/test/CppunitTest_test_a11y.mk
@@ -14,6 +14,7 @@ $(eval $(call gb_CppunitTest_add_exception_objects,test_a11y, 
\
 ))
 
 $(eval $(call gb_CppunitTest_use_libraries,test_a11y, \
+       acc \
        sal \
        cppu \
        subsequenttest \

Reply via email to