connectivity/source/parse/sqlnode.cxx                          |   23 
 cui/source/dialogs/querydialog.cxx                             |    2 
 cui/source/factory/dlgfact.cxx                                 |    2 
 cui/source/inc/querydialog.hxx                                 |    4 
 cui/source/options/appearance.cxx                              |    2 
 cui/uiconfig/ui/querydialog.ui                                 |    7 
 drawinglayer/source/processor2d/cairopixelprocessor2d.cxx      |   43 
 editeng/source/uno/unoipset.cxx                                |    2 
 editeng/source/uno/unotext.cxx                                 |    6 
 external/cairo/ExternalPackage_cairo.mk                        |    2 
 external/cairo/UnpackedTarball_cairo.mk                        |    1 
 external/cairo/cairo/libcairo-bundled-soname.patch.0           |   12 
 helpcontent2                                                   |    2 
 include/editeng/unoipset.hxx                                   |    2 
 include/editeng/unotext.hxx                                    |    2 
 include/sfx2/strings.hrc                                       |    6 
 include/svl/itemprop.hxx                                       |   18 
 include/vcl/abstdlg.hxx                                        |    2 
 include/vcl/accessibility/vclxaccessiblecomponent.hxx          |    1 
 include/vcl/accessiblefactory.hxx                              |    1 
 include/vcl/accessibletableprovider.hxx                        |   29 
 include/vcl/toolkit/svtabbx.hxx                                |    3 
 linguistic/source/lngopt.cxx                                   |    2 
 reportdesign/source/ui/misc/UITools.cxx                        |    6 
 sax/source/tools/CachedOutputStream.hxx                        |   11 
 sc/inc/optuno.hxx                                              |    4 
 sc/inc/styleuno.hxx                                            |   10 
 sc/qa/uitest/calc_tests4/saveToCSV.py                          |    2 
 sc/qa/uitest/calc_tests7/save_readonly_with_password.py        |    2 
 sc/qa/uitest/calc_tests8/tdf147086.py                          |    2 
 sc/qa/uitest/calc_tests9/tdf144996.py                          |    2 
 sc/source/ui/unoobj/optuno.cxx                                 |    4 
 sc/source/ui/unoobj/styleuno.cxx                               |   10 
 sc/source/ui/view/cellsh2.cxx                                  |  203 -
 sc/source/ui/view/viewfunc.cxx                                 |    3 
 sd/inc/stlsheet.hxx                                            |    2 
 sd/qa/uitest/impress_tests/save_readonly_with_password.py      |    2 
 sd/qa/unit/uiimpress.cxx                                       |   36 
 sd/source/core/stlsheet.cxx                                    |    2 
 sd/source/ui/unoidl/unopage.cxx                                |    3 
 sd/source/ui/unoidl/unopback.cxx                               |    5 
 sd/source/ui/unoidl/unopback.hxx                               |    2 
 sfx2/Library_sfx.mk                                            |    1 
 sfx2/UIConfig_sfx.mk                                           |    1 
 sfx2/qa/unit/data/sfx2-dialogs-test.txt                        |    1 
 sfx2/source/dialog/alienwarn.cxx                               |   89 
 sfx2/source/doc/guisaveas.cxx                                  |   29 
 sfx2/source/inc/alienwarn.hxx                                  |   40 
 sfx2/uiconfig/ui/alienwarndialog.ui                            |   85 
 static/CustomTarget_emscripten_fs_image.mk                     |    1 
 svl/source/items/itemprop.cxx                                  |   26 
 svx/source/unodraw/unoshape.cxx                                |    6 
 sw/inc/swurl.hxx                                               |    5 
 sw/inc/unocrsrhelper.hxx                                       |    6 
 sw/qa/extras/layout/data/table-in-section-split-loop.fodt      |  161 
 sw/qa/extras/layout/layout.cxx                                 |   21 
 sw/qa/extras/unowriter/data/hyperlink.fodt                     |    9 
 sw/qa/extras/unowriter/unowriter.cxx                           |  105 
 sw/qa/uitest/writer_tests/trackedChanges.py                    |    2 
 sw/qa/uitest/writer_tests3/save_readonly_with_password.py      |    2 
 sw/qa/uitest/writer_tests7/tdf90401.py                         |    2 
 sw/source/core/access/acchyperlink.cxx                         |    8 
 sw/source/core/access/accnotexthyperlink.cxx                   |   23 
 sw/source/core/access/accpara.cxx                              |    6 
 sw/source/core/docnode/node2lay.cxx                            |    7 
 sw/source/core/inc/layouter.hxx                                |    1 
 sw/source/core/layout/layact.cxx                               |   24 
 sw/source/core/layout/layouter.cxx                             |   14 
 sw/source/core/layout/wsfrm.cxx                                |   24 
 sw/source/core/unocore/unocrsrhelper.cxx                       |    3 
 sw/source/core/unocore/unofield.cxx                            |    2 
 sw/source/core/unocore/unoobj.cxx                              |    6 
 sw/source/core/unocore/unostyle.cxx                            |    5 
 sw/source/filter/ww8/docxattributeoutput.cxx                   |    7 
 sw/source/filter/ww8/docxexport.cxx                            |   15 
 sw/source/uibase/wrtsh/wrtsh2.cxx                              |   37 
 vcl/inc/WidgetDrawInterface.hxx                                |    5 
 vcl/inc/accessibility/AccessibleBrowseBox.hxx                  |   11 
 vcl/inc/accessibility/AccessibleBrowseBoxBase.hxx              |    6 
 vcl/inc/accessibility/AccessibleBrowseBoxCheckBoxCell.hxx      |   79 
 vcl/inc/accessibility/AccessibleBrowseBoxHeaderBar.hxx         |    8 
 vcl/inc/accessibility/AccessibleBrowseBoxHeaderCell.hxx        |   66 
 vcl/inc/accessibility/AccessibleBrowseBoxTable.hxx             |    7 
 vcl/inc/accessibility/AccessibleBrowseBoxTableBase.hxx         |    7 
 vcl/inc/accessibility/AccessibleBrowseBoxTableCell.hxx         |  177 -
 vcl/inc/accessibility/AccessibleIconView.hxx                   |    3 
 vcl/inc/accessibility/IComboListBoxHelper.hxx                  |   58 
 vcl/inc/accessibility/accessiblebrowseboxcell.hxx              |   84 
 vcl/inc/accessibility/accessibleeditbrowseboxcell.hxx          |  198 -
 vcl/inc/accessibility/accessibleiconchoicectrl.hxx             |  105 
 vcl/inc/accessibility/accessibleiconchoicectrlentry.hxx        |  233 -
 vcl/inc/accessibility/accessiblelistbox.hxx                    |  122 
 vcl/inc/accessibility/accessiblelistboxentry.hxx               |  277 -
 vcl/inc/accessibility/accessibletablistbox.hxx                 |   35 
 vcl/inc/accessibility/accessibletablistboxtable.hxx            |    8 
 vcl/inc/accessibility/listboxhelper.hxx                        |    2 
 vcl/inc/accessibility/textwindowaccessibility.hxx              |   47 
 vcl/inc/accessibility/vclxaccessiblelist.hxx                   |   11 
 vcl/inc/ios/iosinst.hxx                                        |    3 
 vcl/source/accessibility/AccessibleBrowseBox.cxx               |   12 
 vcl/source/accessibility/AccessibleBrowseBoxBase.cxx           |    7 
 vcl/source/accessibility/AccessibleBrowseBoxCheckBoxCell.cxx   |  211 -
 vcl/source/accessibility/AccessibleBrowseBoxHeaderBar.cxx      |    7 
 vcl/source/accessibility/AccessibleBrowseBoxHeaderCell.cxx     |   11 
 vcl/source/accessibility/AccessibleBrowseBoxTable.cxx          |    7 
 vcl/source/accessibility/AccessibleBrowseBoxTableBase.cxx      |    7 
 vcl/source/accessibility/AccessibleBrowseBoxTableCell.cxx      |  490 +-
 vcl/source/accessibility/AccessibleIconView.cxx                |    3 
 vcl/source/accessibility/IComboListBoxHelper.cxx               |    3 
 vcl/source/accessibility/acc_factory.cxx                       |    1 
 vcl/source/accessibility/accessiblebrowseboxcell.cxx           |   73 
 vcl/source/accessibility/accessibleeditbrowseboxcell.cxx       |  337 +-
 vcl/source/accessibility/accessibleiconchoicectrl.cxx          |  391 +-
 vcl/source/accessibility/accessibleiconchoicectrlentry.cxx     |  890 ++---
 vcl/source/accessibility/accessiblelistbox.cxx                 |  713 ++--
 vcl/source/accessibility/accessiblelistboxentry.cxx            | 1653 
++++------
 vcl/source/accessibility/accessibletablistbox.cxx              |  116 
 vcl/source/accessibility/accessibletablistboxtable.cxx         |  460 +-
 vcl/source/accessibility/textwindowaccessibility.cxx           |  215 -
 vcl/source/accessibility/vclxaccessiblecomponent.cxx           |   40 
 vcl/source/accessibility/vclxaccessiblelistitem.cxx            |   20 
 vcl/source/control/ivctrl.cxx                                  |    3 
 vcl/source/treelist/svtabbx.cxx                                |   24 
 vcl/source/treelist/treelist.cxx                               |    8 
 xmlsecurity/source/xmlsec/mscrypt/xmlsignature_mscryptimpl.cxx |    1 
 125 files changed, 4158 insertions(+), 4356 deletions(-)

New commits:
commit c45b278542f41a61c223c13f74e910badb3a8851
Author:     Mike Kaganski <[email protected]>
AuthorDate: Thu Jan 30 11:25:37 2025 +0500
Commit:     Mike Kaganski <[email protected]>
CommitDate: Thu Jan 30 10:28:23 2025 +0100

    Avoid some dynamic_casts
    
    ... where we already know that the object we are passing is SwWrtShell
    
    Change-Id: Idfcbc05fa013860df8bb711fa4e565f929c978f5
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180926
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <[email protected]>

diff --git a/sw/inc/swurl.hxx b/sw/inc/swurl.hxx
index 87375f30c8b7..6051a6da32df 100644
--- a/sw/inc/swurl.hxx
+++ b/sw/inc/swurl.hxx
@@ -23,6 +23,7 @@
 #include <o3tl/typed_flags_set.hxx>
 
 class SwViewShell;
+class SwWrtShell;
 
 enum class LoadUrlFlags {
     NONE    = 0x00,
@@ -32,7 +33,9 @@ namespace o3tl {
     template<> struct typed_flags<LoadUrlFlags> : is_typed_flags<LoadUrlFlags, 
0x01> {};
 }
 
-void LoadURL( SwViewShell& rSh, const OUString& rName,
+bool LoadURL( SwWrtShell& rSh, const OUString& rName,
+              LoadUrlFlags nFilter, const OUString& rTargetFrameName );
+bool LoadURL( SwViewShell* rSh, const OUString& rName,
               LoadUrlFlags nFilter, const OUString& rTargetFrameName );
 
 #endif
diff --git a/sw/source/core/access/acchyperlink.cxx 
b/sw/source/core/access/acchyperlink.cxx
index dcfb9399e2b1..db06b0830ea9 100644
--- a/sw/source/core/access/acchyperlink.cxx
+++ b/sw/source/core/access/acchyperlink.cxx
@@ -82,13 +82,11 @@ sal_Bool SAL_CALL 
SwAccessibleHyperlink::doAccessibleAction( sal_Int32 nIndex )
     if(nIndex != 0)
         throw lang::IndexOutOfBoundsException();
     SwFormatINetFormat const*const pINetFormat = GetTextAttr();
-    if (pINetFormat && !pINetFormat->GetValue().isEmpty())
+    if (pINetFormat)
     {
-        SwViewShell *pVSh = m_xParagraph->GetShell();
-        if (pVSh)
+        if (LoadURL(m_xParagraph->GetShell(), pINetFormat->GetValue(), 
LoadUrlFlags::NONE,
+                    pINetFormat->GetTargetFrame()))
         {
-            LoadURL(*pVSh, pINetFormat->GetValue(), LoadUrlFlags::NONE,
-                     pINetFormat->GetTargetFrame());
             const SwTextINetFormat *const pTextAttr = 
pINetFormat->GetTextINetFormat();
             if (pTextAttr)
             {
diff --git a/sw/source/core/access/accnotexthyperlink.cxx 
b/sw/source/core/access/accnotexthyperlink.cxx
index 36ded739007e..df4afc4b9c3d 100644
--- a/sw/source/core/access/accnotexthyperlink.cxx
+++ b/sw/source/core/access/accnotexthyperlink.cxx
@@ -77,26 +77,13 @@ sal_Bool SAL_CALL 
SwAccessibleNoTextHyperlink::doAccessibleAction( sal_Int32 nIn
     if( pMap != nullptr )
     {
         IMapObject* pMapObj = pMap->GetIMapObject(nIndex);
-        if (!pMapObj->GetURL().isEmpty())
-        {
-            SwViewShell *pVSh = mxFrame->GetShell();
-            if( pVSh )
-            {
-                LoadURL( *pVSh, pMapObj->GetURL(), LoadUrlFlags::NONE,
-                         pMapObj->GetTarget() );
-                bRet = true;
-            }
-        }
+        bRet = LoadURL(mxFrame->GetShell(), pMapObj->GetURL(), 
LoadUrlFlags::NONE,
+                       pMapObj->GetTarget());
     }
-    else if (!aURL.GetURL().isEmpty())
+    else
     {
-        SwViewShell *pVSh = mxFrame->GetShell();
-        if( pVSh )
-        {
-            LoadURL( *pVSh, aURL.GetURL(), LoadUrlFlags::NONE,
-                     aURL.GetTargetFrameName() );
-            bRet = true;
-        }
+        bRet = LoadURL(mxFrame->GetShell(), aURL.GetURL(), LoadUrlFlags::NONE,
+                       aURL.GetTargetFrameName());
     }
 
     return bRet;
diff --git a/sw/source/uibase/wrtsh/wrtsh2.cxx 
b/sw/source/uibase/wrtsh/wrtsh2.cxx
index 12f04b8d3f8b..1824a81239da 100644
--- a/sw/source/uibase/wrtsh/wrtsh2.cxx
+++ b/sw/source/uibase/wrtsh/wrtsh2.cxx
@@ -558,22 +558,22 @@ bool SwWrtShell::ClickToINetGrf( const Point& rDocPt, 
LoadUrlFlags nFilter )
     return bRet;
 }
 
-static void LoadURL(SwView& rView, const OUString& rURL, LoadUrlFlags nFilter,
+static bool LoadURL(SfxViewShell& rView, const OUString& rURL, LoadUrlFlags 
nFilter,
                     const OUString& rTargetFrameName)
 {
-    SwDocShell* pDShell = rView.GetDocShell();
-    OSL_ENSURE( pDShell, "No DocShell?!");
     SfxViewFrame& rViewFrame = rView.GetViewFrame();
+    SfxObjectShell* pDShell = rViewFrame.GetObjectShell();
+    OSL_ENSURE( pDShell, "No DocShell?!");
 
     if (!SfxObjectShell::AllowedLinkProtocolFromDocument(rURL, pDShell, 
rViewFrame.GetFrameWeld()))
-        return;
+        return false;
 
     // We are doing tiledRendering, let the client handles the URL loading,
     // unless we are jumping to a TOC mark.
     if (comphelper::LibreOfficeKit::isActive() && !rURL.startsWith("#"))
     {
         rView.libreOfficeKitViewCallback(LOK_CALLBACK_HYPERLINK_CLICKED, 
rURL.toUtf8());
-        return;
+        return true;
     }
 
     OUString sTargetFrame(rTargetFrameName);
@@ -612,18 +612,26 @@ static void LoadURL(SwView& rView, const OUString& rURL, 
LoadUrlFlags nFilter,
             };
     rViewFrame.GetDispatcher()->GetBindings()->Execute(
         SID_OPENDOC, aArr, SfxCallMode::ASYNCHRON | SfxCallMode::RECORD);
+    return true;
 }
 
-void LoadURL( SwViewShell& rVSh, const OUString& rURL, LoadUrlFlags nFilter,
+bool LoadURL( SwWrtShell& rVSh, const OUString& rURL, LoadUrlFlags nFilter,
               const OUString& rTargetFrameName )
 {
     OSL_ENSURE( !rURL.isEmpty(), "what should be loaded here?" );
     if( rURL.isEmpty() )
-        return ;
+        return false;
+
+    return ::LoadURL(rVSh.GetView(), rURL, nFilter, rTargetFrameName);
+}
 
+bool LoadURL( SwViewShell* pVSh, const OUString& rURL, LoadUrlFlags nFilter,
+              const OUString& rTargetFrameName )
+{
     // The shell could be 0 also!!!!!
-    if (auto pSh = dynamic_cast<SwWrtShell*>(&rVSh))
-        ::LoadURL(pSh->GetView(), rURL, nFilter, rTargetFrameName);
+    if (auto pSh = dynamic_cast<SwWrtShell*>(pVSh))
+        return ::LoadURL(*pSh, rURL, nFilter, rTargetFrameName);
+    return false;
 }
 
 void SwWrtShell::NavigatorPaste(const NaviContentBookmark& rBkmk)
commit daaaed50c10eb790b9035d4ca7181a19e1c246a9
Author:     Michael Weghorn <[email protected]>
AuthorDate: Wed Jan 29 22:38:30 2025 +0100
Commit:     Michael Weghorn <[email protected]>
CommitDate: Thu Jan 30 10:06:41 2025 +0100

    vcl: Drop SvListView::Impl::ActionClear detour
    
    Change-Id: Id113b64bce226790b9329ba2848a759a8c50c9f8
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180924
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <[email protected]>

diff --git a/vcl/source/treelist/treelist.cxx b/vcl/source/treelist/treelist.cxx
index 4edb9332b488..ffd8c8185be6 100644
--- a/vcl/source/treelist/treelist.cxx
+++ b/vcl/source/treelist/treelist.cxx
@@ -55,7 +55,6 @@ struct SvListView::Impl
     void ActionInserted(SvTreeListEntry* pEntry);
     void ActionInsertedTree(SvTreeListEntry* pEntry);
     void ActionRemoving(SvTreeListEntry* pEntry);
-    void ActionClear();
 };
 
 
@@ -1244,11 +1243,6 @@ void SvListView::Impl::ActionRemoving( SvTreeListEntry* 
pEntry )
     }
 }
 
-void SvListView::Impl::ActionClear()
-{
-    m_rThis.Clear();
-}
-
 void SvListView::ModelNotification( SvListAction nActionId, SvTreeListEntry* 
pEntry1,
                         SvTreeListEntry* /*pEntry2*/, sal_uInt32 /*nPos*/ )
 {
@@ -1279,7 +1273,7 @@ void SvListView::ModelNotification( SvListAction 
nActionId, SvTreeListEntry* pEn
             ModelHasMoved( pEntry1 );
             break;
         case SvListAction::CLEARING:
-            m_pImpl->ActionClear();
+            Clear();
             ModelHasCleared(); // sic! for compatibility reasons!
             break;
         case SvListAction::CLEARED:
commit b73e1530906696bf6eac0857d20b43be5d47f1bd
Author:     Caolán McNamara <[email protected]>
AuthorDate: Wed Jan 29 17:36:37 2025 +0000
Commit:     Caolán McNamara <[email protected]>
CommitDate: Thu Jan 30 09:53:32 2025 +0100

    avoid uno_type_sequence_construct cost
    
    Change-Id: I5ef2d5d0b88fdffa1e425ffb182586a897858fde
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180915
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <[email protected]>

diff --git a/sax/source/tools/CachedOutputStream.hxx 
b/sax/source/tools/CachedOutputStream.hxx
index c66231140fbb..873ed51fe06a 100644
--- a/sax/source/tools/CachedOutputStream.hxx
+++ b/sax/source/tools/CachedOutputStream.hxx
@@ -11,6 +11,7 @@
 #define INCLUDED_SAX_SOURCE_TOOLS_CACHEDOUTPUTSTREAM_HXX
 
 #include <sal/types.h>
+#include <rtl/byteseq.hxx>
 
 #include <com/sun/star/io/XOutputStream.hpp>
 #include <com/sun/star/uno/Sequence.hxx>
@@ -34,7 +35,7 @@ class CachedOutputStream
 
     /// ForMerge structure is used for sorting elements in Writer
     std::shared_ptr< ForMergeBase > mpForMerge;
-    const css::uno::Sequence<sal_Int8> mpCache;
+    const rtl::ByteSequence maCache;
     /// Output stream, usually writing data into files.
     css::uno::Reference< css::io::XOutputStream > mxOutputStream;
     uno_Sequence *pSeq;
@@ -42,8 +43,8 @@ class CachedOutputStream
     bool mbWriteToOutStream;
 
 public:
-    CachedOutputStream() : mpCache(mnMaximumSize)
-                         , pSeq(mpCache.get())
+    CachedOutputStream() : maCache(mnMaximumSize, rtl::BYTESEQ_NODEFAULT)
+                         , pSeq(maCache.get())
                          , mnCacheWrittenSize(0)
                          , mbWriteToOutStream(true)
     {}
@@ -103,9 +104,9 @@ public:
         // resize the Sequence to written size
         pSeq->nElements = mnCacheWrittenSize;
         if (mbWriteToOutStream)
-            mxOutputStream->writeBytes( mpCache );
+            mxOutputStream->writeBytes( css::uno::toUnoSequence(maCache) );
         else
-            mpForMerge->append( mpCache );
+            mpForMerge->append( css::uno::toUnoSequence(maCache) );
         // and next time write to the beginning
         mnCacheWrittenSize = 0;
     }
commit 7f4901ded76fa3f3dffaef2d8f68d5c4803d98a2
Author:     Heiko Tietze <[email protected]>
AuthorDate: Fri Jan 24 15:29:10 2025 +0100
Commit:     Heiko Tietze <[email protected]>
CommitDate: Thu Jan 30 09:52:31 2025 +0100

    More appealing design for alientformat warn dialog
    
    Change-Id: I575f24e6b8f9dd08bd8797343a86ac25b49f19b2
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180713
    Reviewed-by: Heiko Tietze <[email protected]>
    Tested-by: Jenkins

diff --git a/cui/source/dialogs/querydialog.cxx 
b/cui/source/dialogs/querydialog.cxx
index ee7dc109707b..2571e92fde2c 100644
--- a/cui/source/dialogs/querydialog.cxx
+++ b/cui/source/dialogs/querydialog.cxx
@@ -28,6 +28,8 @@ QueryDialog::QueryDialog(weld::Window* pParent, const 
OUString& sTitle, const OU
     , m_pQuestion(m_xBuilder->weld_label(u"lbQuestion"_ustr))
     , m_pImage(m_xBuilder->weld_image(u"imQuery"_ustr))
     , m_pCheckBox(m_xBuilder->weld_check_button(u"cbDontShowAgain"_ustr))
+    , m_pYes(m_xBuilder->weld_button(u"btnYes"_ustr))
+    , m_pNo(m_xBuilder->weld_button(u"btnNo"_ustr))
 {
     m_pTitle->set_label(sTitle);
     m_pText->set_label(sText);
diff --git a/cui/source/factory/dlgfact.cxx b/cui/source/factory/dlgfact.cxx
index f9927251748e..34d735b8beb0 100644
--- a/cui/source/factory/dlgfact.cxx
+++ b/cui/source/factory/dlgfact.cxx
@@ -1617,6 +1617,8 @@ class AbstractQueryDialog_Impl final
 public:
     using AbstractDialogImpl_BASE::AbstractDialogImpl_BASE;
     bool ShowAgain() const override { return m_pDlg->ShowAgain(); }
+    void SetYesLabel(const OUString& sLabel) override { 
m_pDlg->SetYesLabel(sLabel); }
+    void SetNoLabel(const OUString& sLabel) override { 
m_pDlg->SetNoLabel(sLabel); }
 };
 }
 
diff --git a/cui/source/inc/querydialog.hxx b/cui/source/inc/querydialog.hxx
index 0db70d8f6146..3b6629c50b09 100644
--- a/cui/source/inc/querydialog.hxx
+++ b/cui/source/inc/querydialog.hxx
@@ -28,11 +28,15 @@ private:
     std::unique_ptr<weld::Label> m_pQuestion;
     std::unique_ptr<weld::Image> m_pImage;
     std::unique_ptr<weld::CheckButton> m_pCheckBox;
+    std::unique_ptr<weld::Button> m_pYes;
+    std::unique_ptr<weld::Button> m_pNo;
 
 public:
     QueryDialog(weld::Window* pParent, const OUString& sTitle, const OUString& 
sText,
                 const OUString& sQuestion, bool bShowAgain = true);
     bool ShowAgain() const { return m_pCheckBox->get_active(); }
+    void SetYesLabel(const OUString& sLabel) { m_pYes->set_label(sLabel); }
+    void SetNoLabel(const OUString& sLabel) { m_pNo->set_label(sLabel); }
 };
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cui/uiconfig/ui/querydialog.ui b/cui/uiconfig/ui/querydialog.ui
index 4c40e9b53990..e80c3a6f3219 100644
--- a/cui/uiconfig/ui/querydialog.ui
+++ b/cui/uiconfig/ui/querydialog.ui
@@ -65,6 +65,7 @@
               <object class="GtkLabel" id="lbTitle">
                 <property name="visible">True</property>
                 <property name="can-focus">False</property>
+                <property name="hexpand">True</property>
                 <property name="xalign">0</property>
                 <attributes>
                   <attribute name="weight" value="bold"/>
@@ -85,10 +86,10 @@
               <object class="GtkLabel" id="lbText">
                 <property name="visible">True</property>
                 <property name="can-focus">False</property>
-                <property name="hexpand">False</property>
+                <property name="hexpand">True</property>
                 <property name="wrap">True</property>
                 <property name="wrap-mode">word-char</property>
-                <property name="max-width-chars">40</property>
+                <property name="max-width-chars">50</property>
                 <property name="xalign">0</property>
                 <child internal-child="accessible">
                   <object class="AtkObject" id="lbText-atkobject">
@@ -106,7 +107,9 @@
                 <property name="visible">True</property>
                 <property name="can-focus">False</property>
                 <property name="valign">start</property>
+                <property name="hexpand">True</property>
                 <property name="wrap">True</property>
+                <property name="max-width-chars">50</property>
                 <property name="xalign">0</property>
                 <child internal-child="accessible">
                   <object class="AtkObject" id="lbQuestion-atkobject">
diff --git a/include/sfx2/strings.hrc b/include/sfx2/strings.hrc
index dac3a61d6bb9..186d24646a5e 100644
--- a/include/sfx2/strings.hrc
+++ b/include/sfx2/strings.hrc
@@ -47,6 +47,12 @@
 #define STR_HIDDENINFO_NOTES                    NC_("STR_HIDDENINFO_NOTES", 
"Notes")
 #define STR_HIDDENINFO_DOCVERSIONS              
NC_("STR_HIDDENINFO_DOCVERSIONS", "Document versions")
 #define STR_NEW_FILENAME_SAVE                   NC_("STR_NEW_FILENAME_SAVE", 
"If you do not want to overwrite the original document, you should save your 
work under a new filename.")
+#define STR_QUERY_ALIENFORMAT_TTITLE            
NC_("STR_QUERY_ALIENFORMAT_TITLE", "Non-standard file format")
+#define STR_QUERY_ALIENFORMAT_TEXT              
NC_("STR_QUERY_ALIENFORMAT_TEXT", "This document may contain formatting or 
content that cannot be saved in the currently selected file format “%FORMATNAME 
(*.%EXTENSION)”.")
+#define STR_QUERY_ALIENFORMAT_QUESTION          
NC_("STR_QUERY_ALIENFORMAT_QUESTION", "Use the default ODF file format 
(*.%EXTENSION) to be sure that the document is saved correctly.")
+#define STR_QUERY_ALIENFORMAT_YES               
NC_("STR_QUERY_ALIENFORMAT_YES", "Use %FORMATNAME Format")
+#define STR_QUERY_ALIENFORMAT_NO                
NC_("STR_QUERY_ALIENFORMAT_No", "Use %DEFAULTEXTENSION Format")
+
 // Used in the title of a shared document.
 #define STR_SHARED                              NC_("STR_SHARED", " (shared)")
 #define STR_XMLSEC_ODF12_EXPECTED               
NC_("STR_XMLSEC_ODF12_EXPECTED", "The document format version is set to ODF 1.1 
(OpenOffice.org 2.x) in Tools-Options-Load/Save-General. Signing documents 
requires ODF 1.2 (OpenOffice.org 3.x).")
diff --git a/include/vcl/abstdlg.hxx b/include/vcl/abstdlg.hxx
index 659babc6aab6..a333a2252be6 100644
--- a/include/vcl/abstdlg.hxx
+++ b/include/vcl/abstdlg.hxx
@@ -163,6 +163,8 @@ protected:
     virtual ~AbstractQueryDialog() override = default;
 public:
     virtual bool ShowAgain() const = 0;
+    virtual void SetYesLabel(const OUString& sLabel) = 0;
+    virtual void SetNoLabel(const OUString& sLabel) = 0;
 };
 
 class VCL_DLLPUBLIC VclAbstractDialogFactory
diff --git a/sc/qa/uitest/calc_tests4/saveToCSV.py 
b/sc/qa/uitest/calc_tests4/saveToCSV.py
index 09949b7d71e8..efd1329ccc43 100644
--- a/sc/qa/uitest/calc_tests4/saveToCSV.py
+++ b/sc/qa/uitest/calc_tests4/saveToCSV.py
@@ -46,7 +46,7 @@ class saveToCSV(UITestCase):
 
                     with self.ui_test.execute_dialog_through_action(xOpen, 
"CLICK", close_button="") as xWarnDialog:
                         # CSV confirmation dialog is displayed
-                        xSave = xWarnDialog.getChild("save")
+                        xSave = xWarnDialog.getChild("btnYes")
 
                         with self.ui_test.execute_dialog_through_action(xSave, 
"CLICK") as xCsvDialog:
                             xFormulas = xCsvDialog.getChild("formulas")
diff --git a/sc/qa/uitest/calc_tests7/save_readonly_with_password.py 
b/sc/qa/uitest/calc_tests7/save_readonly_with_password.py
index c7d2f829e32c..13064432bc8f 100644
--- a/sc/qa/uitest/calc_tests7/save_readonly_with_password.py
+++ b/sc/qa/uitest/calc_tests7/save_readonly_with_password.py
@@ -44,7 +44,7 @@ class save_readonly_with_password(UITestCase):
 
                         xOk = xPasswordDialog.getChild("ok")
                         # XLSX confirmation dialog is displayed
-                        with self.ui_test.execute_dialog_through_action(xOk, 
"CLICK", close_button="save"):
+                        with self.ui_test.execute_dialog_through_action(xOk, 
"CLICK", close_button="btnYes"):
                             pass
 
             with self.ui_test.load_file(systemPathToFileUrl(xFilePath), 
[PropertyValue(Name="Silent", Value=True)]) as document:
diff --git a/sc/qa/uitest/calc_tests8/tdf147086.py 
b/sc/qa/uitest/calc_tests8/tdf147086.py
index 1be3d6adb276..85c7eb42e408 100755
--- a/sc/qa/uitest/calc_tests8/tdf147086.py
+++ b/sc/qa/uitest/calc_tests8/tdf147086.py
@@ -42,7 +42,7 @@ class tdf147086(UITestCase):
 
                         xOk = xPasswordDialog.getChild("ok")
                         # XLSX confirmation dialog is displayed
-                        with self.ui_test.execute_dialog_through_action(xOk, 
"CLICK", close_button="save"):
+                        with self.ui_test.execute_dialog_through_action(xOk, 
"CLICK", close_button="btnYes"):
                             pass
 
             with self.ui_test.load_file(systemPathToFileUrl(xFilePath), 
[PropertyValue(Name="Silent", Value=True)]) as document:
diff --git a/sc/qa/uitest/calc_tests9/tdf144996.py 
b/sc/qa/uitest/calc_tests9/tdf144996.py
index fcfb366feb8a..b40a9bb4df49 100644
--- a/sc/qa/uitest/calc_tests9/tdf144996.py
+++ b/sc/qa/uitest/calc_tests9/tdf144996.py
@@ -30,7 +30,7 @@ class tdf144996(UITestCase):
 
             self.assertFalse(document.isReadonly())
 
-            with self.ui_test.execute_dialog_through_command(".uno:Save", 
close_button="save"):
+            with self.ui_test.execute_dialog_through_command(".uno:Save", 
close_button="btnYes"):
                 # Confirm file format popup
                 pass
 
diff --git a/sd/qa/uitest/impress_tests/save_readonly_with_password.py 
b/sd/qa/uitest/impress_tests/save_readonly_with_password.py
index 485dedde10f4..a2b9f2b9eb9e 100644
--- a/sd/qa/uitest/impress_tests/save_readonly_with_password.py
+++ b/sd/qa/uitest/impress_tests/save_readonly_with_password.py
@@ -48,7 +48,7 @@ class save_readonly_with_password(UITestCase):
 
                         xOk = xPasswordDialog.getChild("ok")
                         # PPTX confirmation dialog is displayed
-                        with self.ui_test.execute_dialog_through_action(xOk, 
"CLICK", close_button="save"):
+                        with self.ui_test.execute_dialog_through_action(xOk, 
"CLICK", close_button="btnYes"):
                             pass
 
             with self.ui_test.load_file(systemPathToFileUrl(xFilePath)) as 
document:
diff --git a/sfx2/Library_sfx.mk b/sfx2/Library_sfx.mk
index db88eaa72b40..a55494e38f00 100644
--- a/sfx2/Library_sfx.mk
+++ b/sfx2/Library_sfx.mk
@@ -172,7 +172,6 @@ $(eval $(call gb_Library_add_exception_objects,sfx,\
     sfx2/source/devtools/DocumentModelTreeHandler \
     sfx2/source/devtools/ObjectInspectorTreeHandler \
     sfx2/source/devtools/ObjectInspectorWidgets \
-    sfx2/source/dialog/alienwarn \
     sfx2/source/dialog/basedlgs \
     sfx2/source/dialog/checkin \
     sfx2/source/dialog/dialoghelper \
diff --git a/sfx2/UIConfig_sfx.mk b/sfx2/UIConfig_sfx.mk
index 21410bc709c0..0f0492a4527d 100644
--- a/sfx2/UIConfig_sfx.mk
+++ b/sfx2/UIConfig_sfx.mk
@@ -10,7 +10,6 @@
 $(eval $(call gb_UIConfig_UIConfig,sfx))
 
 $(eval $(call gb_UIConfig_add_uifiles,sfx,\
-       sfx2/uiconfig/ui/alienwarndialog \
        sfx2/uiconfig/ui/addtargetdialog \
        sfx2/uiconfig/ui/autoredactdialog \
        sfx2/uiconfig/ui/bookmarkdialog \
diff --git a/sfx2/qa/unit/data/sfx2-dialogs-test.txt 
b/sfx2/qa/unit/data/sfx2-dialogs-test.txt
index 18dcbacf6a00..71908657e067 100644
--- a/sfx2/qa/unit/data/sfx2-dialogs-test.txt
+++ b/sfx2/qa/unit/data/sfx2-dialogs-test.txt
@@ -62,7 +62,6 @@ sfx/ui/loadtemplatedialog.ui
 sfx/ui/templatedlg.ui
 sfx/ui/printeroptionsdialog.ui
 sfx/ui/searchdialog.ui
-sfx/ui/alienwarndialog.ui
 sfx/ui/errorfindemaildialog.ui
 sfx/ui/querysavedialog.ui
 sfx/ui/floatingrecord.ui
diff --git a/sfx2/source/dialog/alienwarn.cxx b/sfx2/source/dialog/alienwarn.cxx
deleted file mode 100644
index 3e9be6970de8..000000000000
--- a/sfx2/source/dialog/alienwarn.cxx
+++ /dev/null
@@ -1,89 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <alienwarn.hxx>
-#include <officecfg/Office/Common.hxx>
-
-SfxAlienWarningDialog::SfxAlienWarningDialog(weld::Window* pParent,
-                                             std::u16string_view _rFormatName,
-                                             std::u16string_view _rExtension,
-                                             const OUString& 
_rDefaultExtension,
-                                             bool rDefaultIsAlien)
-    : MessageDialogController(pParent, u"sfx/ui/alienwarndialog.ui"_ustr, 
u"AlienWarnDialog"_ustr,
-                              u"ask"_ustr)
-    , m_xKeepCurrentBtn(m_xBuilder->weld_button(u"save"_ustr))
-    , m_xUseDefaultFormatBtn(m_xBuilder->weld_button(u"cancel"_ustr))
-    , m_xWarningOnBox(m_xBuilder->weld_check_button(u"ask"_ustr))
-{
-    OUString aExtension = u"ODF"_ustr;
-
-    // replace formatname and extension (text)
-    OUString sInfoText = m_xDialog->get_primary_text();
-    sInfoText = sInfoText.replaceAll("%FORMATNAME", _rFormatName);
-    sInfoText = sInfoText.replaceAll("%EXTENSION", _rExtension);
-    m_xDialog->set_primary_text(sInfoText);
-
-    // replace formatname (button)
-    sInfoText = m_xKeepCurrentBtn->get_label();
-    sInfoText = sInfoText.replaceAll("%FORMATNAME", _rFormatName);
-    m_xKeepCurrentBtn->set_label(sInfoText);
-
-    // hide ODF explanation if default format is alien
-    // and set the proper extension in the button
-    if (rDefaultIsAlien)
-    {
-        m_xDialog->set_secondary_text(OUString());
-        aExtension = _rDefaultExtension.toAsciiUpperCase();
-    }
-    else
-    {
-        // replace extension (secondary-text)
-        sInfoText = m_xDialog->get_secondary_text();
-        sInfoText = sInfoText.replaceAll("%EXTENSION", _rDefaultExtension);
-        m_xDialog->set_secondary_text(sInfoText);
-    }
-
-    // replace defaultextension (button)
-    sInfoText = m_xUseDefaultFormatBtn->get_label();
-    sInfoText = sInfoText.replaceAll("%DEFAULTEXTENSION", aExtension);
-    m_xUseDefaultFormatBtn->set_label(sInfoText);
-
-    // load value of "warning on" checkbox from save options
-    
m_xWarningOnBox->set_active(officecfg::Office::Common::Save::Document::WarnAlienFormat::get());
-}
-
-SfxAlienWarningDialog::~SfxAlienWarningDialog()
-{
-    try
-    {
-        // save value of "warning off" checkbox, if necessary
-        bool bChecked = m_xWarningOnBox->get_active();
-        if (officecfg::Office::Common::Save::Document::WarnAlienFormat::get() 
!= bChecked)
-        {
-            auto xChanges = comphelper::ConfigurationChanges::create();
-            
officecfg::Office::Common::Save::Document::WarnAlienFormat::set(bChecked, 
xChanges);
-            xChanges->commit();
-        }
-    }
-    catch (...)
-    {
-    }
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/doc/guisaveas.cxx b/sfx2/source/doc/guisaveas.cxx
index 7e6be3b5ebab..2ddaff5955bb 100644
--- a/sfx2/source/doc/guisaveas.cxx
+++ b/sfx2/source/doc/guisaveas.cxx
@@ -89,7 +89,6 @@
 #include <sfx2/sfxuno.hxx>
 #include <sfx2/viewsh.hxx>
 #include <sfx2/bindings.hxx>
-#include <alienwarn.hxx>
 
 #include <memory>
 #include <string_view>
@@ -103,6 +102,8 @@
 #include <osl/file.hxx>
 #include <svl/cryptosign.hxx>
 
+#include <vcl/abstdlg.hxx>
+
 #ifdef _WIN32
 #include <Shlobj.h>
 #ifdef GetTempPath
@@ -2100,9 +2101,31 @@ bool SfxStoringHelper::WarnUnacceptableFormat( const 
uno::Reference< frame::XMod
         return true;
 
     weld::Window* pWin = SfxStoringHelper::GetModelWindow(xModel);
-    SfxAlienWarningDialog aDlg(pWin, aOldUIName,aExtension, aDefExtension, 
bDefIsAlien);
 
-    return aDlg.run() == RET_OK;
+    OUString sInfoText = SfxResId(STR_QUERY_ALIENFORMAT_TEXT);
+    sInfoText = sInfoText.replaceAll("%FORMATNAME", aOldUIName);
+    sInfoText = sInfoText.replaceAll("%EXTENSION", aExtension);
+
+    OUString sExtension = u"ODF"_ustr;
+    OUString sQuestion = "";
+    if (bDefIsAlien) {
+        sExtension = aDefExtension.toAsciiUpperCase();
+    }
+    else
+    {
+        sQuestion = SfxResId(STR_QUERY_ALIENFORMAT_QUESTION);
+        sQuestion = sQuestion.replaceAll("%EXTENSION", aDefExtension);
+    }
+
+    VclAbstractDialogFactory* pFact = VclAbstractDialogFactory::Create();
+    auto pDlg = pFact->CreateQueryDialog(pWin, 
SfxResId(STR_QUERY_ALIENFORMAT_TTITLE), sInfoText, sQuestion, false);
+    
pDlg->SetYesLabel(SfxResId(STR_QUERY_ALIENFORMAT_YES).replaceAll("%FORMATNAME", 
aOldUIName)); // "Use %FORMATNAME Format"
+    
pDlg->SetNoLabel(SfxResId(STR_QUERY_ALIENFORMAT_NO).replaceAll("%DEFAULTEXTENSION",
 sExtension)); // "Use %DEFAULTEXTENSION _Format"
+
+    sal_Int32 nResult = pDlg->Execute();
+    pDlg->disposeOnce();
+
+    return nResult == RET_YES;
 }
 
 uno::Reference<awt::XWindow> SfxStoringHelper::GetModelXWindow(const 
uno::Reference<frame::XModel>& xModel)
diff --git a/sfx2/source/inc/alienwarn.hxx b/sfx2/source/inc/alienwarn.hxx
deleted file mode 100644
index 29fab4f53892..000000000000
--- a/sfx2/source/inc/alienwarn.hxx
+++ /dev/null
@@ -1,40 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#ifndef INCLUDED_SFX2_SOURCE_INC_ALIENWARN_HXX
-#define INCLUDED_SFX2_SOURCE_INC_ALIENWARN_HXX
-
-#include <vcl/weld.hxx>
-
-class SfxAlienWarningDialog final : public weld::MessageDialogController
-{
-private:
-    std::unique_ptr<weld::Button> m_xKeepCurrentBtn;
-    std::unique_ptr<weld::Button> m_xUseDefaultFormatBtn;
-    std::unique_ptr<weld::CheckButton> m_xWarningOnBox;
-
-public:
-    SfxAlienWarningDialog(weld::Window* pParent, std::u16string_view 
_rFormatName,
-                          std::u16string_view _rExtension, const OUString& 
_rDefaultExtension,
-                          bool rDefaultIsAlien);
-    virtual ~SfxAlienWarningDialog() override;
-};
-
-#endif // INCLUDED_SFX2_SOURCE_INC_ALIENWARN_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/uiconfig/ui/alienwarndialog.ui 
b/sfx2/uiconfig/ui/alienwarndialog.ui
deleted file mode 100644
index c0c913977b00..000000000000
--- a/sfx2/uiconfig/ui/alienwarndialog.ui
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.40.0 -->
-<interface domain="sfx">
-  <requires lib="gtk+" version="3.20"/>
-  <object class="GtkMessageDialog" id="AlienWarnDialog">
-    <property name="can-focus">False</property>
-    <property name="title" translatable="yes" 
context="alienwarndialog|AlienWarnDialog">Confirm File Format</property>
-    <property name="resizable">False</property>
-    <property name="modal">True</property>
-    <property name="type-hint">dialog</property>
-    <property name="skip-taskbar-hint">True</property>
-    <property name="message-type">question</property>
-    <property name="text" translatable="yes" 
context="alienwarndialog|AlienWarnDialog">This document may contain formatting 
or content that cannot be saved in the currently selected file format 
“%FORMATNAME (*.%EXTENSION)”.</property>
-    <property name="secondary-text" translatable="yes" 
context="alienwarndialog|AlienWarnDialog">Use the default ODF file format 
(*.%EXTENSION) to be sure that the document is saved correctly.</property>
-    <child internal-child="vbox">
-      <object class="GtkBox" id="messagedialog-vbox">
-        <property name="can-focus">False</property>
-        <property name="orientation">vertical</property>
-        <property name="spacing">12</property>
-        <child internal-child="action_area">
-          <object class="GtkButtonBox" id="messagedialog-action_area">
-            <property name="can-focus">False</property>
-            <child>
-              <object class="GtkButton" id="cancel">
-                <property name="label" translatable="yes" 
context="alienwarndialog|cancel">Use %DEFAULTEXTENSION _Format</property>
-                <property name="visible">True</property>
-                <property name="can-focus">True</property>
-                <property name="receives-default">True</property>
-                <property name="use-underline">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">True</property>
-                <property name="position">0</property>
-                <property name="non-homogeneous">True</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="save">
-                <property name="label" translatable="yes" 
context="alienwarndialog|save">_Use %FORMATNAME Format</property>
-                <property name="visible">True</property>
-                <property name="can-focus">True</property>
-                <property name="can-default">True</property>
-                <property name="has-default">True</property>
-                <property name="receives-default">True</property>
-                <property name="use-underline">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">True</property>
-                <property name="position">1</property>
-                <property name="non-homogeneous">True</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="pack-type">end</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkCheckButton" id="ask">
-            <property name="label" translatable="yes" 
context="alienwarndialog|ask">_Ask when not saving in ODF or default 
format</property>
-            <property name="visible">True</property>
-            <property name="can-focus">True</property>
-            <property name="receives-default">False</property>
-            <property name="use-underline">True</property>
-            <property name="draw-indicator">True</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">2</property>
-          </packing>
-        </child>
-      </object>
-    </child>
-    <action-widgets>
-      <action-widget response="-6">cancel</action-widget>
-      <action-widget response="-5">save</action-widget>
-    </action-widgets>
-  </object>
-</interface>
diff --git a/static/CustomTarget_emscripten_fs_image.mk 
b/static/CustomTarget_emscripten_fs_image.mk
index 145157a96669..90b76cd1f4ae 100644
--- a/static/CustomTarget_emscripten_fs_image.mk
+++ b/static/CustomTarget_emscripten_fs_image.mk
@@ -1101,7 +1101,6 @@ endif # !ENABLE_WASM_STRIP_CALC
 
 gb_emscripten_fs_image_files += \
     
$(INSTROOT)/$(LIBO_SHARE_FOLDER)/config/soffice.cfg/sfx/ui/addtargetdialog.ui \
-    
$(INSTROOT)/$(LIBO_SHARE_FOLDER)/config/soffice.cfg/sfx/ui/alienwarndialog.ui \
     
$(INSTROOT)/$(LIBO_SHARE_FOLDER)/config/soffice.cfg/sfx/ui/autoredactdialog.ui \
     
$(INSTROOT)/$(LIBO_SHARE_FOLDER)/config/soffice.cfg/sfx/ui/bookmarkdialog.ui \
     $(INSTROOT)/$(LIBO_SHARE_FOLDER)/config/soffice.cfg/sfx/ui/bookmarkmenu.ui 
\
diff --git a/sw/qa/uitest/writer_tests/trackedChanges.py 
b/sw/qa/uitest/writer_tests/trackedChanges.py
index a256889a8a8b..1e21a3a703ff 100644
--- a/sw/qa/uitest/writer_tests/trackedChanges.py
+++ b/sw/qa/uitest/writer_tests/trackedChanges.py
@@ -393,7 +393,7 @@ class trackedchanges(UITestCase):
 
                         xOpen = xDialog.getChild("open")
                         # DOC confirmation dialog is displayed
-                        with self.ui_test.execute_dialog_through_action(xOpen, 
"CLICK", close_button="save"):
+                        with self.ui_test.execute_dialog_through_action(xOpen, 
"CLICK", close_button="btnYes"):
                             pass
 
                 with self.ui_test.load_file(systemPathToFileUrl(xFilePath)) as 
document:
diff --git a/sw/qa/uitest/writer_tests3/save_readonly_with_password.py 
b/sw/qa/uitest/writer_tests3/save_readonly_with_password.py
index f14b74046d0f..546d05357010 100644
--- a/sw/qa/uitest/writer_tests3/save_readonly_with_password.py
+++ b/sw/qa/uitest/writer_tests3/save_readonly_with_password.py
@@ -44,7 +44,7 @@ class save_readonly_with_password(UITestCase):
 
                         xOk = xPasswordDialog.getChild("ok")
                         # DOCX confirmation dialog is displayed
-                        with self.ui_test.execute_dialog_through_action(xOk, 
"CLICK", close_button="save"):
+                        with self.ui_test.execute_dialog_through_action(xOk, 
"CLICK", close_button="btnYes"):
                             pass
 
             with self.ui_test.load_file(systemPathToFileUrl(xFilePath)) as 
document:
diff --git a/sw/qa/uitest/writer_tests7/tdf90401.py 
b/sw/qa/uitest/writer_tests7/tdf90401.py
index 6c29269a5880..f5f3661453b3 100644
--- a/sw/qa/uitest/writer_tests7/tdf90401.py
+++ b/sw/qa/uitest/writer_tests7/tdf90401.py
@@ -108,7 +108,7 @@ class tdf90401(UITestCase):
 
                         xOpen = xDialog.getChild("open")
                         # DOCX confirmation dialog is displayed
-                        with self.ui_test.execute_dialog_through_action(xOpen, 
"CLICK", close_button="save"):
+                        with self.ui_test.execute_dialog_through_action(xOpen, 
"CLICK", close_button="btnYes"):
                             pass
 
                 with self.ui_test.load_file(systemPathToFileUrl(xFilePath)) as 
writer_doc2:
commit 7a9e303d0ffad7b83beccfe1918f962d2de04a37
Author:     Michael Weghorn <[email protected]>
AuthorDate: Wed Jan 29 17:17:44 2025 +0100
Commit:     Michael Weghorn <[email protected]>
CommitDate: Wed Jan 29 22:33:43 2025 +0100

    icon choice ctrl a11y: Don't announce selection change on focus (II)
    
        Change-Id: I013da234b78f872b1b286769acdf38a66d58801b
        Author: Michael Weghorn <[email protected]>
        Date:   Wed Jan 29 16:45:23 2025 +0100
    
            icon choice ctrl a11y: Don't announce selection change on focus
    
    had implemented not "inventing" a selection change event
    in the a11y implementation, AccessibleIconChoiceCtrl,
    when the icon choice control receives focus.
    
    However, the SvtIconChoiceCtrl itself was also sending
    a VclEventId::ListboxSelect event that gets processed
    by the AccessibleIconChoiceCtrl, which again resulted
    in an a11y selection changed event getting emitted
    (`object:selection-changed` for AT-SPI2).
    
    No longer send that event to not notify of a fake
    selection change. (From all I can see,
    AccessibleIconChoiceCtrl is the only consumer
    of that event.)
    
    Actual changes in the selected entry are still
    announced fine (see SvxIconChoiceCtrl_Impl::EntrySelected).
    
    With the qt6 VCL plugin on Linux and the Orca screen
    reader, this makes Orca now announce "List with 4 items"
    before it announces the currently selected item
    when focus moves to the icon choice control
    ("vertical tabbar") in the "Insert" -> "Hyperlink"
    dialog in Writer. (Previously, only the accessible
    name of the selected item was announced, but not
    the list it is contained in.)
    
    Change-Id: I0a49a034f37fb4fb3a7ea6953c2e545fec184f84
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180913
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <[email protected]>

diff --git a/vcl/source/control/ivctrl.cxx b/vcl/source/control/ivctrl.cxx
index acea1506df3a..533b8026ef91 100644
--- a/vcl/source/control/ivctrl.cxx
+++ b/vcl/source/control/ivctrl.cxx
@@ -158,9 +158,6 @@ void SvtIconChoiceCtrl::GetFocus()
 {
     _pImpl->GetFocus();
     Control::GetFocus();
-    SvxIconChoiceCtrlEntry* pSelectedEntry = GetSelectedEntry();
-    if ( pSelectedEntry )
-        _pImpl->CallEventListeners( VclEventId::ListboxSelect, pSelectedEntry 
);
 }
 
 void SvtIconChoiceCtrl::LoseFocus()
commit 88522bbe48cc1173cac32a40de1524b8492da15b
Author:     Michael Weghorn <[email protected]>
AuthorDate: Wed Jan 29 16:59:27 2025 +0100
Commit:     Michael Weghorn <[email protected]>
CommitDate: Wed Jan 29 22:33:36 2025 +0100

    icon choice ctrl a11y: Separate selection from active descendant change
    
    When receiving a VclEventId::ListboxSelect event,
    always send an a11y event to notify about the changed
    selection if an entry is selected, regardless of whether
    or not the icon choice control has focus.
    
    Make only the ACTIVE_DESCENDANT_CHANGED event
    conditional on focus, as that is the event that
    notifies about the child that newly receives focus.
    
    Change-Id: Ibea29092ff33be69fde098777b13a9fa96b19c8e
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180912
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <[email protected]>

diff --git a/vcl/source/accessibility/accessibleiconchoicectrl.cxx 
b/vcl/source/accessibility/accessibleiconchoicectrl.cxx
index f9f55cd92c3e..356685825d1b 100644
--- a/vcl/source/accessibility/accessibleiconchoicectrl.cxx
+++ b/vcl/source/accessibility/accessibleiconchoicectrl.cxx
@@ -52,7 +52,7 @@ void AccessibleIconChoiceCtrl::ProcessWindowEvent( const 
VclWindowEvent& rVclWin
     {
         case VclEventId::ListboxSelect :
         {
-            if ( getCtrl() && getCtrl()->HasFocus() )
+            if (getCtrl())
             {
                 SvxIconChoiceCtrlEntry* pEntry = static_cast< 
SvxIconChoiceCtrlEntry* >( rVclWindowEvent.GetData() );
                 if ( pEntry )
@@ -61,10 +61,10 @@ void AccessibleIconChoiceCtrl::ProcessWindowEvent( const 
VclWindowEvent& rVclWin
                     Reference< XAccessible > xChild = new 
AccessibleIconChoiceCtrlEntry( *getCtrl(), nPos, this );
                     uno::Any aOldValue, aNewValue;
                     aNewValue <<= xChild;
-                    NotifyAccessibleEvent( 
AccessibleEventId::ACTIVE_DESCENDANT_CHANGED, aOldValue, aNewValue );
+                    if (getCtrl()->HasFocus())
+                        NotifyAccessibleEvent( 
AccessibleEventId::ACTIVE_DESCENDANT_CHANGED, aOldValue, aNewValue );
 
                     NotifyAccessibleEvent( 
AccessibleEventId::SELECTION_CHANGED, aOldValue, aNewValue );
-
                 }
             }
             break;
commit 155e1013734aee83124aee16f745784a55f17f93
Author:     Michael Weghorn <[email protected]>
AuthorDate: Wed Jan 29 16:45:23 2025 +0100
Commit:     Michael Weghorn <[email protected]>
CommitDate: Wed Jan 29 22:33:28 2025 +0100

    icon choice ctrl a11y: Don't announce selection change on focus
    
    When processing a VclEventId::WindowGetFocus event,
    only send and event to notify that the active
    descendant (= child that has focus) of the icon choice control
    has changed, but don't announce a selection change event.
    The latter is handled in VclEventId::ListboxSelect instead.
    (And when receiving focus, the selected entry generally remains
    the same, i.e. the selection does not change.)
    
    Also, don't try to extract the selected entry
    from the data sent in the focus event.
    
    This code gets triggered for the "Insert" -> "Hyperlink"
    dialog in Writer.
    
    Change-Id: I013da234b78f872b1b286769acdf38a66d58801b
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180911
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <[email protected]>

diff --git a/vcl/source/accessibility/accessibleiconchoicectrl.cxx 
b/vcl/source/accessibility/accessibleiconchoicectrl.cxx
index 75136454b257..f9f55cd92c3e 100644
--- a/vcl/source/accessibility/accessibleiconchoicectrl.cxx
+++ b/vcl/source/accessibility/accessibleiconchoicectrl.cxx
@@ -74,11 +74,7 @@ void AccessibleIconChoiceCtrl::ProcessWindowEvent( const 
VclWindowEvent& rVclWin
             VclPtr<SvtIconChoiceCtrl> pCtrl = getCtrl();
             if ( pCtrl && pCtrl->HasFocus() )
             {
-                SvxIconChoiceCtrlEntry* pEntry = static_cast< 
SvxIconChoiceCtrlEntry* >( rVclWindowEvent.GetData() );
-                if ( pEntry == nullptr )
-                {
-                    pEntry = getCtrl()->GetSelectedEntry();
-                }
+                SvxIconChoiceCtrlEntry* pEntry = getCtrl()->GetSelectedEntry();
                 if ( pEntry )
                 {
                     sal_Int32 nPos = pCtrl->GetEntryListPos( pEntry );
@@ -86,7 +82,6 @@ void AccessibleIconChoiceCtrl::ProcessWindowEvent( const 
VclWindowEvent& rVclWin
                     uno::Any aOldValue, aNewValue;
                     aNewValue <<= xChild;
                     NotifyAccessibleEvent( 
AccessibleEventId::ACTIVE_DESCENDANT_CHANGED, aOldValue, aNewValue );
-                    NotifyAccessibleEvent( 
AccessibleEventId::SELECTION_CHANGED, aOldValue, aNewValue );
                 }
             }
             break;
commit c53f88f1d247e9538a8ab63e8bda539945332bcb
Author:     Michael Weghorn <[email protected]>
AuthorDate: Wed Jan 29 16:30:37 2025 +0100
Commit:     Michael Weghorn <[email protected]>
CommitDate: Wed Jan 29 22:33:22 2025 +0100

    icon choice ctrl a11y: Drop commented code + outdated comment
    
    The `NotifyAccessibleEvent` call that the comment refers to
    was commented and replaced by different handling in
    
        commit efb23f29983f87104a684e7fab00b84fc59d131d
        Author: Steve Yin <[email protected]>
        Date:   Mon Nov 25 15:24:55 2013 +0000
    
            Integrate branch of IAccessible2
    
    Therefore, drop them.
    
    Change-Id: I18f6d80958e369b8a9ef3bce76a03531c3e79057
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180910
    Reviewed-by: Michael Weghorn <[email protected]>
    Tested-by: Jenkins

diff --git a/vcl/source/accessibility/accessibleiconchoicectrl.cxx 
b/vcl/source/accessibility/accessibleiconchoicectrl.cxx
index 7289b48868ba..75136454b257 100644
--- a/vcl/source/accessibility/accessibleiconchoicectrl.cxx
+++ b/vcl/source/accessibility/accessibleiconchoicectrl.cxx
@@ -52,12 +52,6 @@ void AccessibleIconChoiceCtrl::ProcessWindowEvent( const 
VclWindowEvent& rVclWin
     {
         case VclEventId::ListboxSelect :
         {
-            // First send an event that tells the listeners of a
-            // modified selection.  The active descendant event is
-            // send after that so that the receiving AT has time to
-            // read the text or name of the active child.
-//                  NotifyAccessibleEvent( 
AccessibleEventId::SELECTION_CHANGED, Any(), Any() );
-
             if ( getCtrl() && getCtrl()->HasFocus() )
             {
                 SvxIconChoiceCtrlEntry* pEntry = static_cast< 
SvxIconChoiceCtrlEntry* >( rVclWindowEvent.GetData() );
commit 94636bc76489f27087eb4a5433693082631f3334
Author:     Mike Kaganski <[email protected]>
AuthorDate: Wed Jan 29 23:28:28 2025 +0500
Commit:     Mike Kaganski <[email protected]>
CommitDate: Wed Jan 29 21:19:55 2025 +0100

    tdf#130672: handle Rule::factor explicitly
    
    When representing a signed number, the rule may consist of two subnodes:
    a punctuation bearing "+" or "-", and then the following digits (see
    'factor:' in connectivity/source/parse/sqlbison.y). After punctuation
    was added to the string buffer, the following number is passed to
    parseLeaf, where it checks if the buffer is not empty, and then adds
    a space between the preceding sign and the digits.
    
    This change handles the 'factor' rule explicitly.
    
    Change-Id: I0c929418ad88c5bf653a4e820f45b7d627b07da7
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180917
    Reviewed-by: Mike Kaganski <[email protected]>
    Tested-by: Jenkins

diff --git a/connectivity/source/parse/sqlnode.cxx 
b/connectivity/source/parse/sqlnode.cxx
index 95d6e88c2215..1192183fc636 100644
--- a/connectivity/source/parse/sqlnode.cxx
+++ b/connectivity/source/parse/sqlnode.cxx
@@ -497,10 +497,31 @@ void 
OSQLParseNode::impl_parseNodeToString_throw(OUStringBuffer& rString, const
         }
         bHandled = true;
         break;
+
+    case factor:
+        bSimple = false;
+        if (nCount == 2 && m_aChildren[0] && m_aChildren[1]
+            && (SQL_ISPUNCTUATION(m_aChildren[0], "-") || 
SQL_ISPUNCTUATION(m_aChildren[0], "+"))
+            && (m_aChildren[1]->getNodeType() == SQLNodeType::IntNum
+                || m_aChildren[1]->getNodeType() == SQLNodeType::ApproxNum))
+        {
+            // A signed number ("+" or "-" plus either IntNum or ApproxNum)
+            // The default processing would first add the sign, then process 
the number, which
+            // would see that rString is not empty already, and insert a space 
between the sign
+            // and the digits. Avoid that unneeded space.
+            OUStringBuffer aFactorPara;
+            m_aChildren[1]->impl_parseNodeToString_throw(aFactorPara, rParam, 
bSimple);
+            // Insert a space before the signed number, similar to parseLeaf 
for IntNum / ApproxNum
+            if (!rString.isEmpty())
+                rString.append(" ");
+            rString.append(m_aChildren[0]->getTokenValue() + aFactorPara);
+            bHandled = true;
+        }
+        break;
+
     case odbc_call_spec:
     case subquery:
     case term:
-    case factor:
     case window_function:
     case cast_spec:
     case num_value_exp:
commit b5967157b37904219865fd847b20938b3ccfbd72
Author:     Michael Stahl <[email protected]>
AuthorDate: Wed Jan 29 17:36:41 2025 +0100
Commit:     Michael Stahl <[email protected]>
CommitDate: Wed Jan 29 19:43:42 2025 +0100

    tdf#156348 sw: fix crash on converting text to table with SwSetExpField
    
    The problem is that the table node only gets a SwFrameFormat assigned at
    the end of the operation after all the nodes have been split etc., and
    moving a field into a newly split node calls
    sw::FindNeighbourFrameForNode() which needs to handle table node without
    SwFrameFormat now when going backwards (not when going forwards because
    the table node is always before the nodes in the table).
    
    (regression from commit 9dc6e2c9062725ef1f9d7e321cae5f4dbe8ca749)
    
    Change-Id: Ia0c1f7d7b14f525aa8de4a2b6492c39b59f31052
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180914
    Reviewed-by: Michael Stahl <[email protected]>
    Tested-by: Jenkins

diff --git a/sw/source/core/docnode/node2lay.cxx 
b/sw/source/core/docnode/node2lay.cxx
index 6f96fd50e854..73d64a72ec44 100644
--- a/sw/source/core/docnode/node2lay.cxx
+++ b/sw/source/core/docnode/node2lay.cxx
@@ -115,7 +115,12 @@ static SwNode* GoPreviousWithFrame(SwNodeIndex *pIdx, 
SwFlowFrame const**const p
             // frame as the caller's one
             pFound = SwIterator<SwFrame, SwContentNode, 
sw::IteratorMode::UnwrapMulti>(*static_cast<SwContentNode*>(pNd)).First();
         else if ( pNd->IsTableNode() )
-            pFound = 
SwIterator<SwFrame,SwFormat>(*static_cast<SwTableNode*>(pNd)->GetTable().GetFrameFormat()).First();
+        {
+            if (SwFrameFormat *const 
pFormat{static_cast<SwTableNode*>(pNd)->GetTable().GetFrameFormat()})
+            {
+                pFound = SwIterator<SwFrame,SwFormat>(*pFormat).First();
+            }
+        }
         else if( pNd->IsStartNode() && !pNd->IsSectionNode() )
         {
             pNd = nullptr;
commit 0e9785ef0a3f0c350f8e719d2062f1c7beb801ad
Author:     Mike Kaganski <[email protected]>
AuthorDate: Wed Jan 29 20:43:58 2025 +0500
Commit:     Mike Kaganski <[email protected]>
CommitDate: Wed Jan 29 18:39:54 2025 +0100

    tdf#164885: use SfxBindings::Execute instead of SfxDispatcher::ExecuteList
    
    Commit 502f7958d99e3aa27f4c1c1f33f4827055459da8 (pass a frame to use as
    parent for any dialog that may need to appear, 2023-11-16) switched to
    SfxDispatcher::ExecuteList, in order to pass there frame to be used as
    parent for dialogs.
    
    Later, in commit d7b33b1be8fee684e906f170f4001735c095056e (use SID_DOCFRAME
    for dialog parents if there is no SID_FILLFRAME, 2023-11-23), the fix
    was changed, and passing the frame got not needed.
    
    Since the change to SfxDispatcher::ExecuteList caused the regression
    (likely because SfxDispatcher unexpectedly uses a bit different method
    to find the slot server), and the original reason for the change is no
    more actual, let's revert to the older method.
    
    Change-Id: I6b126bf336dcf8cd3f49a3ce9682f3adc3bc208f
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180909
    Reviewed-by: Mike Kaganski <[email protected]>
    Tested-by: Jenkins

diff --git a/sw/qa/extras/unowriter/data/hyperlink.fodt 
b/sw/qa/extras/unowriter/data/hyperlink.fodt
new file mode 100644
index 000000000000..d3d73c750d15
--- /dev/null
+++ b/sw/qa/extras/unowriter/data/hyperlink.fodt
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<office:document 
xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" 
xmlns:xlink="http://www.w3.org/1999/xlink"; 
xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" 
office:version="1.4" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:body>
+  <office:text>
+   <text:p>A <text:a xlink:type="simple" 
xlink:href="https://www.libreoffice.org/"; text:style-name="Internet_20_link" 
text:visited-style-name="Visited_20_Internet_20_Link">hyperlink</text:a> 
here.</text:p>
+  </office:text>
+ </office:body>
+</office:document>
\ No newline at end of file
diff --git a/sw/qa/extras/unowriter/unowriter.cxx 
b/sw/qa/extras/unowriter/unowriter.cxx
index 51bd211a0a87..abcda606ec69 100644
--- a/sw/qa/extras/unowriter/unowriter.cxx
+++ b/sw/qa/extras/unowriter/unowriter.cxx
@@ -12,6 +12,9 @@
 #include <com/sun/star/awt/FontSlant.hpp>
 #include <com/sun/star/datatransfer/XTransferableSupplier.hpp>
 #include <com/sun/star/datatransfer/XTransferableTextSupplier.hpp>
+#include <com/sun/star/frame/XDispatch.hpp>
+#include <com/sun/star/frame/XDispatchProviderInterception.hpp>
+#include <com/sun/star/frame/XDispatchProviderInterceptor.hpp>
 #include <com/sun/star/table/XCellRange.hpp>
 #include <com/sun/star/text/TextContentAnchorType.hpp>
 #include <com/sun/star/text/AutoTextContainer.hpp>
@@ -43,6 +46,7 @@
 #include <comphelper/sequenceashashmap.hxx>
 #include <comphelper/processfactory.hxx>
 #include <comphelper/propertysequence.hxx>
+#include <comphelper/compbase.hxx>
 
 #include <wrtsh.hxx>
 #include <ndtxt.hxx>
@@ -1411,6 +1415,107 @@ CPPUNIT_TEST_FIXTURE(SwUnoWriter, testTdf162480)
     CPPUNIT_ASSERT_EQUAL(xCellText, xAnchorRange->getText());
 }
 
+CPPUNIT_TEST_FIXTURE(SwUnoWriter, testTdf164885)
+{
+    class LocalDispatch : public 
comphelper::WeakImplHelper<css::frame::XDispatch>
+    {
+    public:
+        LocalDispatch() = default;
+
+        void SAL_CALL dispatch(const css::util::URL& URL,
+                               const 
css::uno::Sequence<css::beans::PropertyValue>&) override
+        {
+            sLastCommand = URL.Complete;
+        }
+        void SAL_CALL addStatusListener(const 
css::uno::Reference<css::frame::XStatusListener>&,
+                                        const css::util::URL&) override
+        {
+            // empty
+        }
+        void SAL_CALL removeStatusListener(const 
css::uno::Reference<css::frame::XStatusListener>&,
+                                           const css::util::URL&) override
+        {
+            // empty
+        }
+
+        OUString sLastCommand;
+    };
+
+    class LocalInterceptor
+        : public 
comphelper::WeakImplHelper<css::frame::XDispatchProviderInterceptor>
+    {
+    public:
+        LocalInterceptor() = default;
+
+        // XDispatchProvider
+        css::uno::Reference<css::frame::XDispatch>
+            SAL_CALL queryDispatch(const css::util::URL& URL, const OUString& 
TargetFrameName,
+                                   sal_Int32 SearchFlags) override
+        {
+            if (URL.Complete == ".uno:Open")
+                return pDispatch;
+            if (m_slave)
+                return m_slave->queryDispatch(URL, TargetFrameName, 
SearchFlags);
+            return {};
+        }
+        css::uno::Sequence<css::uno::Reference<css::frame::XDispatch>> SAL_CALL
+        queryDispatches(const 
css::uno::Sequence<css::frame::DispatchDescriptor>&) override
+        {
+            return {};
+        }
+
+        // XDispatchProviderInterceptor
+        css::uno::Reference<css::frame::XDispatchProvider>
+            SAL_CALL getSlaveDispatchProvider() override
+        {
+            return m_slave;
+        }
+        void SAL_CALL setSlaveDispatchProvider(
+            const css::uno::Reference<css::frame::XDispatchProvider>& val) 
override
+        {
+            m_slave = val;
+        }
+        css::uno::Reference<css::frame::XDispatchProvider>
+            SAL_CALL getMasterDispatchProvider() override
+        {
+            return m_master;
+        }
+        void SAL_CALL setMasterDispatchProvider(
+            const css::uno::Reference<css::frame::XDispatchProvider>& val) 
override
+        {
+            m_master = val;
+        }
+
+        rtl::Reference<LocalDispatch> pDispatch{ new LocalDispatch };
+
+    private:
+        css::uno::Reference<css::frame::XDispatchProvider> m_master;
+        css::uno::Reference<css::frame::XDispatchProvider> m_slave;
+    };
+
+    // Given a document with a hyperlink
+    createSwDoc("hyperlink.fodt");
+    auto 
controller(mxComponent.queryThrow<frame::XModel>()->getCurrentController());
+    auto 
xProvider(controller->getFrame().queryThrow<css::frame::XDispatchProviderInterception>());
+
+    rtl::Reference<LocalInterceptor> interceptor(new LocalInterceptor);
+    xProvider->registerDispatchProviderInterceptor(interceptor);
+
+    auto xCursor = 
controller.queryThrow<text::XTextViewCursorSupplier>()->getViewCursor();
+    xCursor->goRight(5, false); // put cursor inside the hyperlink
+
+    // Initiale "open hyperlink"
+    dispatchCommand(mxComponent, u".uno:OpenHyperlinkOnCursor"_ustr, {});
+
+    xProvider->releaseDispatchProviderInterceptor(interceptor);
+
+    // Without the fix, this failed with
+    // - Expected: .uno:Open
+    // - Actual  :
+    // because the interception didn't happen
+    CPPUNIT_ASSERT_EQUAL(u".uno:Open"_ustr, 
interceptor->pDispatch->sLastCommand);
+}
+
 } // end of anonymous namespace
 CPPUNIT_PLUGIN_IMPLEMENT();
 
diff --git a/sw/source/uibase/wrtsh/wrtsh2.cxx 
b/sw/source/uibase/wrtsh/wrtsh2.cxx
index c7f8e2eb6182..12f04b8d3f8b 100644
--- a/sw/source/uibase/wrtsh/wrtsh2.cxx
+++ b/sw/source/uibase/wrtsh/wrtsh2.cxx
@@ -602,15 +602,16 @@ static void LoadURL(SwView& rView, const OUString& rURL, 
LoadUrlFlags nFilter,
     if ((nFilter & LoadUrlFlags::NewView) && 
!comphelper::LibreOfficeKit::isActive())
         aTargetFrameName.SetValue( u"_blank"_ustr );
 
-    rViewFrame.GetDispatcher()->ExecuteList(SID_OPENDOC,
-            SfxCallMode::ASYNCHRON|SfxCallMode::RECORD,
-            {
+    const SfxPoolItem* aArr[] = {
                 &aName,
                 &aNewView, /*&aSilent,*/
                 &aReferer,
                 &aView, &aTargetFrameName,
-                &aBrowse
-            });
+                &aBrowse,
+                nullptr
+            };
+    rViewFrame.GetDispatcher()->GetBindings()->Execute(
+        SID_OPENDOC, aArr, SfxCallMode::ASYNCHRON | SfxCallMode::RECORD);
 }
 
 void LoadURL( SwViewShell& rVSh, const OUString& rURL, LoadUrlFlags nFilter,
commit a8aa8d76dba4a32b1d082a87a188c3f0b1f666b4
Author:     Noel Grandin <[email protected]>
AuthorDate: Wed Jan 29 15:26:07 2025 +0200
Commit:     Noel Grandin <[email protected]>
CommitDate: Wed Jan 29 16:04:50 2025 +0100

    tdf#164900 table text in different columns no longer lined up
    
    Revert "tdf#161846 use unordered_map in SfxItemPropertyMap"
    
    This reverts commit c39978f41dccbeb2e973c919a67d9b1d974f8f3c.
    
    Change-Id: I26cadb32b426fd3b48179b67c677213a78b4999c
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180903
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <[email protected]>

diff --git a/editeng/source/uno/unoipset.cxx b/editeng/source/uno/unoipset.cxx
index 43cb71aa0a86..60d73b7653fb 100644
--- a/editeng/source/uno/unoipset.cxx
+++ b/editeng/source/uno/unoipset.cxx
@@ -209,7 +209,7 @@ void SvxItemPropertySet::setPropertyValue( const 
SfxItemPropertyMapEntry* pMap,
 }
 
 
-const SfxItemPropertyMapEntry* SvxItemPropertySet::getPropertyMapEntry(const 
OUString& rName) const
+const SfxItemPropertyMapEntry* 
SvxItemPropertySet::getPropertyMapEntry(std::u16string_view rName) const
 {
     return m_aPropertyMap.getByName( rName );
  }
diff --git a/editeng/source/uno/unotext.cxx b/editeng/source/uno/unotext.cxx
index c80399609572..4b64daeefa7a 100644
--- a/editeng/source/uno/unotext.cxx
+++ b/editeng/source/uno/unotext.cxx
@@ -1058,7 +1058,7 @@ beans::PropertyState 
SvxUnoTextRangeBase::_getPropertyState(const SfxItemPropert
     throw beans::UnknownPropertyException();
 }
 
-beans::PropertyState SvxUnoTextRangeBase::_getPropertyState(const OUString& 
PropertyName, sal_Int32 nPara /* = -1 */)
+beans::PropertyState 
SvxUnoTextRangeBase::_getPropertyState(std::u16string_view PropertyName, 
sal_Int32 nPara /* = -1 */)
 {
     SolarMutexGuard aGuard;
 
@@ -1364,9 +1364,9 @@ void SAL_CALL 
SvxUnoTextRangeBase::setAllPropertiesToDefault()
 
     if( pForwarder )
     {
-        for (auto const & rPair : 
mpPropSet->getPropertyMap().getPropertyEntries())
+        for (const SfxItemPropertyMapEntry* entry : 
mpPropSet->getPropertyMap().getPropertyEntries())
         {
-            _setPropertyToDefault( pForwarder, rPair.second, -1 );
+            _setPropertyToDefault( pForwarder, entry, -1 );
         }
     }
 }
diff --git a/include/editeng/unoipset.hxx b/include/editeng/unoipset.hxx
index 9c7f88985d47..f0fb2883cbbb 100644
--- a/include/editeng/unoipset.hxx
+++ b/include/editeng/unoipset.hxx
@@ -51,7 +51,7 @@ public:
 
     rtl::Reference< SfxItemPropertySetInfo > const & getPropertySetInfo() 
const;
     const SfxItemPropertyMap& getPropertyMap() const { return m_aPropertyMap;}
-    const SfxItemPropertyMapEntry* getPropertyMapEntry(const OUString& rName) 
const;
+    const SfxItemPropertyMapEntry* getPropertyMapEntry(std::u16string_view 
rName) const;
 };
 
 struct SvxIDPropertyCombine
diff --git a/include/editeng/unotext.hxx b/include/editeng/unotext.hxx
index 8605e36219f0..20ace0ae976b 100644
--- a/include/editeng/unotext.hxx
+++ b/include/editeng/unotext.hxx
@@ -290,7 +290,7 @@ protected:
     SAL_DLLPRIVATE css::beans::PropertyState _getPropertyState( const 
SfxItemPropertyMapEntry* pMap, sal_Int32 nPara = -1 );
     /// @throws css::beans::UnknownPropertyException
     /// @throws css::uno::RuntimeException
-    SAL_DLLPRIVATE css::beans::PropertyState _getPropertyState( const 
OUString& PropertyName, sal_Int32 nPara = -1 );
+    SAL_DLLPRIVATE css::beans::PropertyState _getPropertyState( 
std::u16string_view PropertyName, sal_Int32 nPara = -1 );
     /// @throws css::beans::UnknownPropertyException
     /// @throws css::uno::RuntimeException
     SAL_DLLPRIVATE css::uno::Sequence< css::beans::PropertyState > 
_getPropertyStates( const css::uno::Sequence< OUString >& aPropertyName, 
sal_Int32 nPara = -1  );
diff --git a/include/svl/itemprop.hxx b/include/svl/itemprop.hxx
index ff12f4060551..af48da4ed696 100644
--- a/include/svl/itemprop.hxx
+++ b/include/svl/itemprop.hxx
@@ -70,23 +70,29 @@ struct SfxItemPropertyMapEntry
         }
 };
 
+struct SfxItemPropertyMapCompare
+{
+    bool operator() ( const SfxItemPropertyMapEntry * lhs, const 
SfxItemPropertyMapEntry * rhs ) const
+    {
+        return lhs->aName < rhs->aName;
+    }
+};
 class SVL_DLLPUBLIC SfxItemPropertyMap
 {
+    o3tl::sorted_vector< const SfxItemPropertyMapEntry*, 
SfxItemPropertyMapCompare > m_aMap;
+    mutable css::uno::Sequence< css::beans::Property > m_aPropSeq;
 public:
     SfxItemPropertyMap( std::span<const SfxItemPropertyMapEntry> pEntries );
     SfxItemPropertyMap( const SfxItemPropertyMap& rSource );
     ~SfxItemPropertyMap();
 
-    const SfxItemPropertyMapEntry* getByName( const OUString & rName ) const;
+    const SfxItemPropertyMapEntry* getByName( std::u16string_view rName ) 
const;
     css::uno::Sequence< css::beans::Property > const & getProperties() const;
     /// @throws css::beans::UnknownPropertyException
     css::beans::Property getPropertyByName( const OUString & rName ) const;
-    bool hasPropertyByName( const OUString & rName ) const;
+    bool hasPropertyByName( std::u16string_view rName ) const;
 
-    const std::unordered_map< OUString, const SfxItemPropertyMapEntry* >& 
getPropertyEntries() const { return m_aMap; }
-private:
-    std::unordered_map< OUString, const SfxItemPropertyMapEntry* > m_aMap;
-    mutable css::uno::Sequence< css::beans::Property > m_aPropSeq;
+    const o3tl::sorted_vector< const SfxItemPropertyMapEntry*, 
SfxItemPropertyMapCompare >& getPropertyEntries() const { return m_aMap; }
 };
 
 class SfxItemPropertySetInfo;
diff --git a/linguistic/source/lngopt.cxx b/linguistic/source/lngopt.cxx
index 6cee920595ab..6f70aae74724 100644
--- a/linguistic/source/lngopt.cxx
+++ b/linguistic/source/lngopt.cxx
@@ -308,7 +308,7 @@ Sequence< PropertyValue > SAL_CALL
 
     std::vector<PropertyValue> aProps;
     aProps.reserve(aPropertyMap.getPropertyEntries().size());
-    for(auto const & [aName, pEntry] : aPropertyMap.getPropertyEntries())
+    for(auto pEntry : aPropertyMap.getPropertyEntries())
         aProps.push_back(PropertyValue(pEntry->aName, pEntry->nWID,
                                  aConfig.GetProperty(pEntry->nWID),
                                  css::beans::PropertyState_DIRECT_VALUE));
diff --git a/reportdesign/source/ui/misc/UITools.cxx 
b/reportdesign/source/ui/misc/UITools.cxx
index ba51cb2ccc6a..d63a50e3ddb7 100644
--- a/reportdesign/source/ui/misc/UITools.cxx
+++ b/reportdesign/source/ui/misc/UITools.cxx
@@ -280,9 +280,8 @@ namespace
         uno::Reference< beans::XPropertySetInfo> xInfo = 
_xShape->getPropertySetInfo();
         SvxUnoPropertyMapProvider aMap;
         const SfxItemPropertyMap& rPropertyMap = 
aMap.GetPropertySet(SVXMAP_CUSTOMSHAPE, 
SdrObject::GetGlobalDrawObjectItemPool())->getPropertyMap();
-        for (const auto & rPair : rPropertyMap.getPropertyEntries())
+        for (const auto pProp : rPropertyMap.getPropertyEntries())
         {
-            const SfxItemPropertyMapEntry* pProp = rPair.second;
             if ( xInfo->hasPropertyByName(pProp->aName) )
             {
                 const SfxPoolItem* pItem = _rItemSet.GetItem(pProp->nWID);
@@ -301,9 +300,8 @@ namespace
         const uno::Reference< beans::XPropertySetInfo> xInfo = 
_xShape->getPropertySetInfo();
         SvxUnoPropertyMapProvider aMap;
         const SfxItemPropertyMap& rPropertyMap = 
aMap.GetPropertySet(SVXMAP_CUSTOMSHAPE, 
SdrObject::GetGlobalDrawObjectItemPool())->getPropertyMap();
-        for (const auto & rPair : rPropertyMap.getPropertyEntries())
+        for (const auto pProp : rPropertyMap.getPropertyEntries())
         {
-            const SfxItemPropertyMapEntry* pProp = rPair.second;
             const SfxPoolItem* pItem = nullptr;
             if ( SfxItemState::SET == _rItemSet.GetItemState(pProp->nWID, 
true, &pItem) && xInfo->hasPropertyByName(pProp->aName) )
             {
diff --git a/sc/inc/optuno.hxx b/sc/inc/optuno.hxx
index 6e28c6dad6cb..27b0c3d6dc56 100644
--- a/sc/inc/optuno.hxx
+++ b/sc/inc/optuno.hxx
@@ -40,12 +40,12 @@ class ScDocOptionsHelper
 public:
     static bool setPropertyValue( ScDocOptions& rOptions,
                                     const SfxItemPropertyMap& rPropMap,
-                                    const OUString& rPropertyName,
+                                    std::u16string_view aPropertyName,
                                     const css::uno::Any& aValue );
     static css::uno::Any getPropertyValue(
                                     const ScDocOptions& rOptions,
                                     const SfxItemPropertyMap& rPropMap,
-                                    const OUString& rPropertyName );
+                                    std::u16string_view PropertyName );
 };
 
 //  empty doc object to supply only doc options
diff --git a/sc/inc/styleuno.hxx b/sc/inc/styleuno.hxx
index 550e712fe9fa..f524cf8bc615 100644
--- a/sc/inc/styleuno.hxx
+++ b/sc/inc/styleuno.hxx
@@ -169,21 +169,21 @@ private:
     OUString                aStyleName;
     SfxStyleSheetBase*      pStyle_cached;
 
-    const SfxItemSet*       GetStyleItemSet_Impl( const OUString& rPropName, 
const SfxItemPropertyMapEntry*& rpEntry );
+    const SfxItemSet*       GetStyleItemSet_Impl( std::u16string_view 
rPropName, const SfxItemPropertyMapEntry*& rpEntry );
     /// @throws css::beans::UnknownPropertyException
     /// @throws css::uno::RuntimeException
-    css::beans::PropertyState getPropertyState_Impl( const OUString& 
PropertyName );
+    css::beans::PropertyState getPropertyState_Impl( std::u16string_view 
PropertyName );
     /// @throws css::beans::UnknownPropertyException
     /// @throws css::lang::WrappedTargetException
     /// @throws css::uno::RuntimeException
-    css::uno::Any           getPropertyDefault_Impl( const OUString& 
aPropertyName );
+    css::uno::Any           getPropertyDefault_Impl( std::u16string_view 
aPropertyName );
     /// @throws css::beans::UnknownPropertyException
     /// @throws css::lang::WrappedTargetException
     /// @throws css::uno::RuntimeException
-    css::uno::Any           getPropertyValue_Impl( const OUString& 
aPropertyName );
+    css::uno::Any           getPropertyValue_Impl( std::u16string_view 
aPropertyName );
     /// @throws css::lang::IllegalArgumentException
     /// @throws css::uno::RuntimeException
-    void                    setPropertyValue_Impl( const OUString& 
rPropertyName,
+    void                    setPropertyValue_Impl( std::u16string_view 
rPropertyName,
                                                  const 
SfxItemPropertyMapEntry* pEntry,
                                                  const css::uno::Any* pValue );
 
diff --git a/sc/source/ui/unoobj/optuno.cxx b/sc/source/ui/unoobj/optuno.cxx
index 3d475f74ef8c..ce885684a254 100644
--- a/sc/source/ui/unoobj/optuno.cxx
+++ b/sc/source/ui/unoobj/optuno.cxx
@@ -30,7 +30,7 @@ using namespace com::sun::star;
 
 bool ScDocOptionsHelper::setPropertyValue( ScDocOptions& rOptions,
                 const SfxItemPropertyMap& rPropMap,
-                const OUString& aPropertyName, const uno::Any& aValue )
+                std::u16string_view aPropertyName, const uno::Any& aValue )
 {
     //! use map (with new identifiers)
 
@@ -103,7 +103,7 @@ bool ScDocOptionsHelper::setPropertyValue( ScDocOptions& 
rOptions,
 uno::Any ScDocOptionsHelper::getPropertyValue(
                 const ScDocOptions& rOptions,
                 const SfxItemPropertyMap& rPropMap,
-                const OUString& aPropertyName )
+                std::u16string_view aPropertyName )
 {
     uno::Any aRet;
     const SfxItemPropertyMapEntry* pEntry = rPropMap.getByName( aPropertyName 
);
diff --git a/sc/source/ui/unoobj/styleuno.cxx b/sc/source/ui/unoobj/styleuno.cxx
index 659a271a05e0..417fded19368 100644
--- a/sc/source/ui/unoobj/styleuno.cxx
+++ b/sc/source/ui/unoobj/styleuno.cxx
@@ -1161,7 +1161,7 @@ uno::Reference<container::XIndexReplace> 
ScStyleObj::CreateEmptyNumberingRules()
 
 // beans::XPropertyState
 
-const SfxItemSet* ScStyleObj::GetStyleItemSet_Impl( const OUString& rPropName,
+const SfxItemSet* ScStyleObj::GetStyleItemSet_Impl( std::u16string_view 
rPropName,
                                                     const 
SfxItemPropertyMapEntry*& rpResultEntry )
 {
     SfxStyleSheetBase* pStyle = GetStyle_Impl( true );
@@ -1195,7 +1195,7 @@ const SfxItemSet* ScStyleObj::GetStyleItemSet_Impl( const 
OUString& rPropName,
     return nullptr;
 }
 
-beans::PropertyState ScStyleObj::getPropertyState_Impl( const OUString& 
aPropertyName )
+beans::PropertyState ScStyleObj::getPropertyState_Impl( std::u16string_view 
aPropertyName )
 {
     beans::PropertyState eRet = beans::PropertyState_DIRECT_VALUE;
 
@@ -1279,7 +1279,7 @@ void SAL_CALL ScStyleObj::setPropertyToDefault( const 
OUString& aPropertyName )
     setPropertyValue_Impl( aPropertyName, pEntry, nullptr );
 }
 
-uno::Any ScStyleObj::getPropertyDefault_Impl( const OUString& aPropertyName )
+uno::Any ScStyleObj::getPropertyDefault_Impl( std::u16string_view 
aPropertyName )
 {
     uno::Any aAny;
 
@@ -1531,7 +1531,7 @@ void SAL_CALL ScStyleObj::setPropertyValue( const 
OUString& aPropertyName, const
     setPropertyValue_Impl( aPropertyName, pEntry, &aValue );
 }
 
-void ScStyleObj::setPropertyValue_Impl( const OUString& rPropertyName, const 
SfxItemPropertyMapEntry* pEntry, const uno::Any* pValue )
+void ScStyleObj::setPropertyValue_Impl( std::u16string_view rPropertyName, 
const SfxItemPropertyMapEntry* pEntry, const uno::Any* pValue )
 {
     SfxStyleSheetBase* pStyle = GetStyle_Impl( true );
     if ( !(pStyle && pEntry) )
@@ -1872,7 +1872,7 @@ void ScStyleObj::setPropertyValue_Impl( const OUString& 
rPropertyName, const Sfx
         
static_cast<SfxStyleSheet*>(GetStyle_Impl())->Broadcast(SfxHint(SfxHintId::DataChanged));
 }
 
-uno::Any ScStyleObj::getPropertyValue_Impl( const OUString& aPropertyName )
+uno::Any ScStyleObj::getPropertyValue_Impl( std::u16string_view aPropertyName )
 {
     uno::Any aAny;
     SfxStyleSheetBase* pStyle = GetStyle_Impl( true );
diff --git a/sc/source/ui/view/viewfunc.cxx b/sc/source/ui/view/viewfunc.cxx
index fff197680f86..1d766741cd99 100644
--- a/sc/source/ui/view/viewfunc.cxx
+++ b/sc/source/ui/view/viewfunc.cxx
@@ -1485,9 +1485,8 @@ void ScViewFunc::ApplySelectionPattern( const 
ScPatternAttr& rAttr, bool bCursor
             const SfxPoolItem* pItem = nullptr;
             if ( rNewSet.GetItemState( nWhich, true, &pItem ) == 
SfxItemState::SET && pItem )
             {
-                for ( const auto & rPair : rMap.getPropertyEntries())
+                for ( const auto pEntry : rMap.getPropertyEntries())
                 {
-                    const SfxItemPropertyMapEntry* pEntry = rPair.second;
                     if ( pEntry->nWID == nWhich )
                     {
                         css::uno::Any aVal;
diff --git a/sd/inc/stlsheet.hxx b/sd/inc/stlsheet.hxx
index f11500b620f7..89646915f24b 100644
--- a/sd/inc/stlsheet.hxx
+++ b/sd/inc/stlsheet.hxx
@@ -138,7 +138,7 @@ public:
 
 private:
     /// @throws css::uno::RuntimeException
-    static const SfxItemPropertyMapEntry* getPropertyMapEntry( const OUString& 
rPropertyName );
+    static const SfxItemPropertyMapEntry* getPropertyMapEntry( 
std::u16string_view rPropertyName );
 
     void setPropertyValue_Impl(const OUString& aPropertyName, const 
css::uno::Any& aValue);
     css::uno::Any getPropertyValue_Impl(const OUString& PropertyName);
diff --git a/sd/source/core/stlsheet.cxx b/sd/source/core/stlsheet.cxx
index c4b5dfe92046..ea944df631b0 100644
--- a/sd/source/core/stlsheet.cxx
+++ b/sd/source/core/stlsheet.cxx
@@ -1492,7 +1492,7 @@ Any SAL_CALL SdStyleSheet::getPropertyDefault( const 
OUString& aPropertyName )
 }
 
 /** this is used because our property map is not sorted yet */
-const SfxItemPropertyMapEntry* SdStyleSheet::getPropertyMapEntry( const 
OUString& rPropertyName )
+const SfxItemPropertyMapEntry* SdStyleSheet::getPropertyMapEntry( 
std::u16string_view rPropertyName )
 {
     return GetStylePropertySet().getPropertyMapEntry(rPropertyName);
 }
diff --git a/sd/source/ui/unoidl/unopage.cxx b/sd/source/ui/unoidl/unopage.cxx
index 64ae86dbe4ae..8279858b20df 100644
--- a/sd/source/ui/unoidl/unopage.cxx
+++ b/sd/source/ui/unoidl/unopage.cxx
@@ -2831,9 +2831,8 @@ void SdMasterPage::setBackground( const Any& rValue )
             Reference< beans::XPropertySetInfo >  xSetInfo( 
xInputSet->getPropertySetInfo(), UNO_SET_THROW );
             Reference< beans::XPropertyState > xSetStates( xInputSet, 
UNO_QUERY );
 
-            for( const auto & rPair : 
ImplGetPageBackgroundPropertySet()->getPropertyMap().getPropertyEntries() )
+            for( const auto pProp : 
ImplGetPageBackgroundPropertySet()->getPropertyMap().getPropertyEntries() )
             {
-                const SfxItemPropertyMapEntry* pProp = rPair.second;
                 const OUString& rPropName = pProp->aName;
                 if( xSetInfo->hasPropertyByName( rPropName ) )
                 {
diff --git a/sd/source/ui/unoidl/unopback.cxx b/sd/source/ui/unoidl/unopback.cxx
index c4fc95421dc4..769582e82347 100644
--- a/sd/source/ui/unoidl/unopback.cxx
+++ b/sd/source/ui/unoidl/unopback.cxx
@@ -97,9 +97,8 @@ void SdUnoPageBackground::fillItemSet( SdDrawDocument* pDoc, 
SfxItemSet& rSet )
 
         if( maUsrAnys.AreThereOwnUsrAnys() )
         {
-            for( const auto & rPair : 
mpPropSet->getPropertyMap().getPropertyEntries() )
+            for( const auto pProp : 
mpPropSet->getPropertyMap().getPropertyEntries() )
             {
-                const SfxItemPropertyMapEntry* pProp = rPair.second;
                 uno::Any* pAny = maUsrAnys.GetUsrAnyForID( *pProp );
                 if( pAny )
                 {
@@ -399,7 +398,7 @@ uno::Any SAL_CALL SdUnoPageBackground::getPropertyDefault( 
const OUString& aProp
 }
 
 /** this is used because our property map is not sorted yet */
-const SfxItemPropertyMapEntry* SdUnoPageBackground::getPropertyMapEntry( const 
OUString& rPropertyName ) const noexcept
+const SfxItemPropertyMapEntry* SdUnoPageBackground::getPropertyMapEntry( 
std::u16string_view rPropertyName ) const noexcept
 {
     return mpPropSet->getPropertyMap().getByName(rPropertyName);
 }
diff --git a/sd/source/ui/unoidl/unopback.hxx b/sd/source/ui/unoidl/unopback.hxx
index 59b4b73bba67..c2834d9298ee 100644
--- a/sd/source/ui/unoidl/unopback.hxx
+++ b/sd/source/ui/unoidl/unopback.hxx
@@ -51,7 +51,7 @@ class SdUnoPageBackground final : public 
::cppu::WeakImplHelper<
     std::unique_ptr<SfxItemSet> mpSet;
     SdrModel*           mpDoc;
 
-    const SfxItemPropertyMapEntry* getPropertyMapEntry( const OUString& 
rPropertyName ) const noexcept;
+    const SfxItemPropertyMapEntry* getPropertyMapEntry( std::u16string_view 
rPropertyName ) const noexcept;
 public:
     SdUnoPageBackground( SdDrawDocument* pDoc = nullptr, const SfxItemSet* 
pSet = nullptr);
     virtual ~SdUnoPageBackground() noexcept override;
diff --git a/svl/source/items/itemprop.cxx b/svl/source/items/itemprop.cxx
index 329f84df722e..128bc190c390 100644
--- a/svl/source/items/itemprop.cxx
+++ b/svl/source/items/itemprop.cxx
@@ -41,7 +41,7 @@ SfxItemPropertyMap::SfxItemPropertyMap( std::span<const 
SfxItemPropertyMapEntry>
     for (const auto & pEntry : pEntries)
     {
         assert(!pEntry.aName.isEmpty() && "empty name? might be something left 
an empty entry at the end of this array");
-        m_aMap.insert( { pEntry.aName, &pEntry } );
+        m_aMap.insert( &pEntry );
     }
 }
 
@@ -51,12 +51,23 @@ SfxItemPropertyMap::~SfxItemPropertyMap()
 {
 }
 
-const SfxItemPropertyMapEntry* SfxItemPropertyMap::getByName( const OUString & 
rName ) const
+const SfxItemPropertyMapEntry* SfxItemPropertyMap::getByName( 
std::u16string_view rName ) const
 {
-    auto it = m_aMap.find(rName);
-    if (it == m_aMap.end())
+    struct Compare
+    {
+        bool operator() ( const SfxItemPropertyMapEntry* lhs, 
std::u16string_view rhs ) const
+        {
+            return lhs->aName < rhs;
+        }
+        bool operator() ( std::u16string_view lhs, const 
SfxItemPropertyMapEntry* rhs ) const
+        {
+            return lhs < rhs->aName;
+        }
+    };
+    auto it = std::lower_bound(m_aMap.begin(), m_aMap.end(), rName, Compare());
+    if (it == m_aMap.end() || Compare()(rName, *it))
         return nullptr;
-    return it->second;
+    return *it;
 }
 
 uno::Sequence<beans::Property> const & SfxItemPropertyMap::getProperties() 
const
@@ -66,9 +77,8 @@ uno::Sequence<beans::Property> const & 
SfxItemPropertyMap::getProperties() const
         m_aPropSeq.realloc( m_aMap.size() );
         beans::Property* pPropArray = m_aPropSeq.getArray();
         sal_uInt32 n = 0;
-        for( const auto & rPair : m_aMap )
+        for( const SfxItemPropertyMapEntry* pEntry : m_aMap )
         {
-            const SfxItemPropertyMapEntry* pEntry = rPair.second;
             pPropArray[n].Name = pEntry->aName;
             pPropArray[n].Handle = pEntry->nWID;
             pPropArray[n].Type = pEntry->aType;
@@ -94,7 +104,7 @@ beans::Property SfxItemPropertyMap::getPropertyByName( const 
OUString& rName ) c
     return aProp;
 }
 
-bool SfxItemPropertyMap::hasPropertyByName( const OUString & rName ) const
+bool SfxItemPropertyMap::hasPropertyByName( std::u16string_view rName ) const
 {
     return getByName(rName) != nullptr;
 }
diff --git a/svx/source/unodraw/unoshape.cxx b/svx/source/unodraw/unoshape.cxx
index 9ae9b9d69e09..abe48784d1e1 100644
--- a/svx/source/unodraw/unoshape.cxx
+++ b/svx/source/unodraw/unoshape.cxx
@@ -523,9 +523,8 @@ static void 
SvxItemPropertySet_ObtainSettingsFromPropertySet(const SvxItemProper
 
     const SfxItemPropertyMap& rSrc = rPropSet.getPropertyMap();
 
-    for(const auto & rPair : rSrc.getPropertyEntries())
+    for(const SfxItemPropertyMapEntry* pSrcProp : rSrc.getPropertyEntries())
     {
-        const SfxItemPropertyMapEntry* pSrcProp = rPair.second;
         const sal_uInt16 nWID = pSrcProp->nWID;
         if(SfxItemPool::IsWhich(nWID)
                 && (nWID < OWN_ATTR_VALUE_START || nWID > OWN_ATTR_VALUE_END)
@@ -533,9 +532,8 @@ static void 
SvxItemPropertySet_ObtainSettingsFromPropertySet(const SvxItemProper
             rSet.Put(rSet.GetPool()->GetUserOrPoolDefaultItem(nWID));
     }
 
-    for(const auto & rPair : rSrc.getPropertyEntries())
+    for(const SfxItemPropertyMapEntry* pSrcProp : rSrc.getPropertyEntries())
     {
-        const SfxItemPropertyMapEntry* pSrcProp = rPair.second;
         if(pSrcProp->nWID)
         {
             uno::Any* pUsrAny = rAnys.GetUsrAnyForID(*pSrcProp);
diff --git a/sw/inc/unocrsrhelper.hxx b/sw/inc/unocrsrhelper.hxx
index e9fea3d32c9c..5ec7d6636536 100644
--- a/sw/inc/unocrsrhelper.hxx
+++ b/sw/inc/unocrsrhelper.hxx
@@ -184,7 +184,7 @@ namespace SwUnoCursorHelper
     css::uno::Any  GetPropertyValue(
             SwPaM& rPaM,
             const SfxItemPropertySet & rPropSet,
-            const OUString& rPropertyName);
+            std::u16string_view rPropertyName);
     /// @throws css::beans::UnknownPropertyException
     /// @throws css::uno::RuntimeException
     css::uno::Sequence< css::beans::PropertyState > GetPropertyStates(
@@ -205,14 +205,14 @@ namespace SwUnoCursorHelper
     void SetPropertyToDefault(
             SwPaM & rPaM,
             const SfxItemPropertySet & rPropSet,
-            const OUString& rPropertyName);
+            std::u16string_view rPropertyName);
     /// @throws css::beans::UnknownPropertyException
     /// @throws css::lang::WrappedTargetException
     /// @throws css::uno::RuntimeException
     css::uno::Any  GetPropertyDefault(
             SwPaM const & rPaM,
             const SfxItemPropertySet & rPropSet,
-            const OUString& rPropertyName);
+            std::u16string_view rPropertyName);
 
     bool SetPageDesc(
             const css::uno::Any& rValue,
diff --git a/sw/source/core/access/accpara.cxx 
b/sw/source/core/access/accpara.cxx
index 48e2ff5eac98..36c7fff36ac4 100644
--- a/sw/source/core/access/accpara.cxx
+++ b/sw/source/core/access/accpara.cxx
@@ -1419,9 +1419,8 @@ void SwAccessibleParagraph::_getDefaultAttributesImpl(
     {
         const SfxItemPropertyMap& rPropMap =
                     aSwMapProvider.GetPropertySet( PROPERTY_MAP_TEXT_CURSOR 
)->getPropertyMap();
-        for ( const auto & rPair : rPropMap.getPropertyEntries() )
+        for ( const auto pEntry : rPropMap.getPropertyEntries() )
         {
-            const SfxItemPropertyMapEntry* pEntry = rPair.second;
             const SfxPoolItem* pItem = pSet->GetItem( pEntry->nWID );
             if ( pItem )
             {
@@ -1609,9 +1608,8 @@ void SwAccessibleParagraph::_getRunAttributesImpl(
 
             const SfxItemPropertyMap& rPropMap =
                     aSwMapProvider.GetPropertySet( PROPERTY_MAP_TEXT_CURSOR 
)->getPropertyMap();
-            for ( const auto & rPair : rPropMap.getPropertyEntries() )
+            for ( const auto pEntry : rPropMap.getPropertyEntries() )
             {
-                const SfxItemPropertyMapEntry* pEntry = rPair.second;
                 const SfxPoolItem* pItem( nullptr );
                 // #i82637# - Found character attributes, whose value equals 
the value of
                 // the corresponding default character attributes, are 
excluded.
diff --git a/sw/source/core/unocore/unocrsrhelper.cxx 
b/sw/source/core/unocore/unocrsrhelper.cxx
index 10d391b5ee99..55cd70f2d92f 100644
--- a/sw/source/core/unocore/unocrsrhelper.cxx
+++ b/sw/source/core/unocore/unocrsrhelper.cxx
@@ -304,9 +304,8 @@ static uno::Any GetParaListAutoFormat(SwTextNode const& 
rNode)
     SfxItemPropertyMap const& rMap(rPropSet.getPropertyMap());
     std::vector<beans::NamedValue> props;
     // have to iterate the map, not the item set?
-    for (auto const & rPair : rMap.getPropertyEntries())
+    for (auto const pEntry : rMap.getPropertyEntries())
     {
-        const SfxItemPropertyMapEntry* pEntry = rPair.second;
         if (SfxItemPropertySet::getPropertyState(*pEntry, *pSet) == 
PropertyState_DIRECT_VALUE)
         {
             Any value;
diff --git a/sw/source/core/unocore/unofield.cxx 
b/sw/source/core/unocore/unofield.cxx
index 235f96d792c2..047da46c30d3 100644
--- a/sw/source/core/unocore/unofield.cxx
+++ b/sw/source/core/unocore/unofield.cxx
@@ -309,7 +309,7 @@ static sal_Int32 lcl_PropName2TokenPos(std::u16string_view 
rPropertyName)
     return SAL_MAX_INT32;
 }
 
-static sal_uInt16 GetFieldTypeMId( const OUString& rProperty, const 
SwFieldType& rTyp )
+static sal_uInt16 GetFieldTypeMId( std::u16string_view rProperty, const 
SwFieldType& rTyp )
 {
     sal_uInt16 nId = lcl_GetPropMapIdForFieldType( rTyp.Which() );
     const SfxItemPropertySet* pSet = aSwMapProvider.GetPropertySet( nId );
diff --git a/sw/source/core/unocore/unoobj.cxx 
b/sw/source/core/unocore/unoobj.cxx
index ba1efe36124b..5047a2ddab86 100644
--- a/sw/source/core/unocore/unoobj.cxx
+++ b/sw/source/core/unocore/unoobj.cxx
@@ -1871,7 +1871,7 @@ SwXTextCursor::setString(const OUString& aString)
 
 uno::Any SwUnoCursorHelper::GetPropertyValue(
     SwPaM& rPaM, const SfxItemPropertySet& rPropSet,
-    const OUString& rPropertyName)
+    std::u16string_view rPropertyName)
 {
     uno::Any aAny;
     SfxItemPropertyMapEntry const*const pEntry =
@@ -2163,7 +2163,7 @@ lcl_SelectParaAndReset( SwPaM &rPaM, SwDoc & rDoc,
 
 void SwUnoCursorHelper::SetPropertyToDefault(
     SwPaM& rPaM, const SfxItemPropertySet& rPropSet,
-    const OUString& rPropertyName)
+    std::u16string_view rPropertyName)
 {
     SwDoc& rDoc = rPaM.GetDoc();
     SfxItemPropertyMapEntry const*const pEntry =
@@ -2201,7 +2201,7 @@ void SwUnoCursorHelper::SetPropertyToDefault(
 
 uno::Any SwUnoCursorHelper::GetPropertyDefault(
     SwPaM const & rPaM, const SfxItemPropertySet& rPropSet,
-    const OUString& rPropertyName)
+    std::u16string_view rPropertyName)
 {
     SfxItemPropertyMapEntry const*const pEntry =
         rPropSet.getPropertyMap().getByName(rPropertyName);
diff --git a/sw/source/core/unocore/unostyle.cxx 
b/sw/source/core/unocore/unostyle.cxx
index 791b5ef41050..1870c0b80d4a 100644
--- a/sw/source/core/unocore/unostyle.cxx
+++ b/sw/source/core/unocore/unostyle.cxx
@@ -527,7 +527,7 @@ public:
         : mrMap(rMap)
     { }
 
-    bool AllowsKey(const OUString& rName)
+    bool AllowsKey(std::u16string_view rName)
     {
         return mrMap.hasPropertyByName(rName);
     }
@@ -4397,9 +4397,8 @@ uno::Sequence< beans::PropertyValue > 
SwXAutoStyle::getProperties()
 
         // TODO: Optimize - and fix! the old iteration filled each WhichId
         // only once but there are more properties than WhichIds
-        for( const auto & rPair : rMap.getPropertyEntries() )
+        for( const auto pEntry : rMap.getPropertyEntries() )
         {
-            const SfxItemPropertyMapEntry* pEntry = rPair.second;
             if ( pEntry->nWID == nWID )
             {
                 beans::PropertyValue aPropertyValue;
commit f747378c4d5c3b2af0dc6ed2dc8cdbd2c4bf09c9
Author:     Michael Stahl <[email protected]>
AuthorDate: Tue Jan 28 18:10:55 2025 +0100
Commit:     Michael Stahl <[email protected]>
CommitDate: Wed Jan 29 16:02:26 2025 +0100

    sw: layout: fix loop with table at the end of a section
    
    There is a table alone in a section, and there are 2 rows in the table,
    with the 2nd row split across page 1 and page 2.
    
    Due to space for another line of text being available, the table frame
    first does RemoveFollowFlowLine() etc and grows much higher than the
    section frame upper.
    
    Then in SwTabFrame::Join(), the section frame on page 2 is destroyed via
    SwSectionFrame::DelEmpty() so the section frame on page 1 doesn't have a
    follow.
    
    Then a SwTabFrame::Split() happens, and lcl_ShrinkCellsAndAllContent()
    ends up shrinking the section frame to 0 height (because there is no
    follow currently seen by SwSectionFrame::ToMaximize()), which is wrong
    as there is a 1st row in the table, so the table is still height 3712.
    
    If the table is directly in the body, then this works because the body
    frame doesn't shrink or grow.
    
    Then when the text frame in the 2nd row is formatted, it can't grow
    because SetRestrictTableGrowth(true) was called as a follow flow line
    exists, and in SwTabFrame::GrowFrame() nReal is -2777 due to the
    SwTabFrame being higher than the upper; the result is that the text
    frame is the same height/split at the same line as before
    SwTabFrame::MakeAll().
    
    Then the whole thing happens again until eventually
    warn:sw.layout:875613:875613:sw/source/core/layout/layouter.cxx:194: 
Looping Louie: Stage 1!
    
    Try to detect situation of too high table in section and propagate
    Shrink only until the section is the same height as the table.
    
    Change-Id: If4b6db8b03d93a3227ad223203f2b0c3f73d3cc8
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180857
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <[email protected]>

diff --git a/sw/qa/extras/layout/data/table-in-section-split-loop.fodt 
b/sw/qa/extras/layout/data/table-in-section-split-loop.fodt
new file mode 100644
index 000000000000..c56254aba03a
--- /dev/null
+++ b/sw/qa/extras/layout/data/table-in-section-split-loop.fodt
@@ -0,0 +1,161 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<office:document xmlns:css3t="http://www.w3.org/TR/css3-text/"; 
xmlns:grddl="http://www.w3.org/2003/g/data-view#"; 
xmlns:xhtml="http://www.w3.org/1999/xhtml"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
xmlns:xforms="http://www.w3.org/2002/xforms"; 
xmlns:dom="http://www.w3.org/2001/xml-events"; 
xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" 
xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" 
xmlns:math="http://www.w3.org/1998/Math/MathML"; 
xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" 
xmlns:ooo="http://openoffice.org/2004/office"; 
xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" 
xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" 
xmlns:ooow="http://openoffice.org/2004/writer"; 
xmlns:xlink="http://www.w3.org/1999/xlink"; 
xmlns:drawooo="http://openoffice.org/2010/draw"; 
xmlns:oooc="http://openoffice.org/2004/calc"; 
xmlns:dc="http://purl.org/dc/elements/1.1/"; xmlns:c
 alcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" 
xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" 
xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" 
xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" 
xmlns:tableooo="http://openoffice.org/2009/table"; 
xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" 
xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" 
xmlns:rpt="http://openoffice.org/2005/report"; 
xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0"
 xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" 
xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" 
xmlns:officeooo="http://openoffice.org/2009/office"; 
xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" 
xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" 
xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" 
xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:
 meta:1.0" 
xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0"
 office:version="1.4" office:mimetype="application/vnd.oasis.opendocument.text">
+ 
<office:meta><meta:initial-creator>gcc</meta:initial-creator><meta:creation-date>2025-01-28T13:52:39.048482856</meta:creation-date><dc:date>2025-01-28T14:44:09.682881525</dc:date><dc:creator>gcc</dc:creator><meta:editing-duration>PT12M50S</meta:editing-duration><meta:editing-cycles>7</meta:editing-cycles><meta:generator>LibreOfficeDev/25.8.0.0.alpha0$Linux_X86_64
 
LibreOffice_project/4b681ded88231674d8b7c133dd211f3c024a7118</meta:generator><meta:document-statistic
 meta:table-count="1" meta:image-count="0" meta:object-count="0" 
meta:page-count="2" meta:paragraph-count="2" meta:word-count="157" 
meta:character-count="834" 
meta:non-whitespace-character-count="663"/></office:meta>
+ <office:font-face-decls>
+  <style:font-face style:name="Liberation Serif" svg:font-family="'Liberation 
Serif'" style:font-family-generic="roman" style:font-pitch="variable"/>
+  <style:font-face style:name="Lucida Sans1" svg:font-family="'Lucida Sans'" 
style:font-family-generic="system" style:font-pitch="variable"/>
+  <style:font-face style:name="Noto Serif CJK SC" svg:font-family="'Noto Serif 
CJK SC'" style:font-family-generic="system" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+  <style:default-style style:family="graphic">
+   <style:graphic-properties svg:stroke-color="#3465a4" 
draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" 
draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" 
draw:start-line-spacing-vertical="0.283cm" 
draw:end-line-spacing-horizontal="0.283cm" 
draw:end-line-spacing-vertical="0.283cm" style:writing-mode="lr-tb" 
style:flow-with-text="false"/>
+   <style:paragraph-properties style:text-autospace="ideograph-alpha" 
style:line-break="strict" loext:tab-stop-distance="0cm" 
style:font-independent-line-spacing="false">
+    <style:tab-stops/>
+   </style:paragraph-properties>
+   <style:text-properties style:use-window-font-color="true" 
loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" 
fo:language="de" fo:country="DE" style:letter-kerning="true" 
style:font-name-asian="Noto Serif CJK SC" style:font-size-asian="10.5pt" 
style:language-asian="zh" style:country-asian="CN" 
style:font-name-complex="Lucida Sans1" style:font-size-complex="12pt" 
style:language-complex="hi" style:country-complex="IN"/>
+  </style:default-style>
+  <style:default-style style:family="paragraph">
+   <style:paragraph-properties fo:orphans="2" fo:widows="2" 
fo:hyphenation-ladder-count="no-limit" fo:hyphenation-keep="auto" 
loext:hyphenation-keep-type="column" style:text-autospace="ideograph-alpha" 
style:punctuation-wrap="hanging" style:line-break="strict" 
style:tab-stop-distance="1.251cm" style:writing-mode="page"/>
+   <style:text-properties style:use-window-font-color="true" 
loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" 
fo:language="de" fo:country="DE" style:letter-kerning="true" 
style:font-name-asian="Noto Serif CJK SC" style:font-size-asian="10.5pt" 
style:language-asian="zh" style:country-asian="CN" 
style:font-name-complex="Lucida Sans1" style:font-size-complex="12pt" 
style:language-complex="hi" style:country-complex="IN" fo:hyphenate="false" 
fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" 
loext:hyphenation-no-caps="false" loext:hyphenation-no-last-word="false" 
loext:hyphenation-word-char-count="5" loext:hyphenation-zone="no-limit"/>
+  </style:default-style>
+  <style:default-style style:family="table">
+   <style:table-properties table:border-model="collapsing"/>
+  </style:default-style>
+  <style:default-style style:family="table-row">
+   <style:table-row-properties fo:keep-together="auto"/>
+  </style:default-style>
+  <style:style style:name="Standard" style:family="paragraph" 
style:class="text"/>
+  <style:style style:name="Table_20_Contents" style:display-name="Table 
Contents" style:family="paragraph" style:parent-style-name="Standard" 
style:class="extra">
+   <style:paragraph-properties fo:orphans="0" fo:widows="0" 
text:number-lines="false" text:line-number="0"/>
+  </style:style>
+  <text:outline-style style:name="Outline">
+   <text:outline-level-style text:level="1" loext:num-list-format="%1%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="2" loext:num-list-format="%2%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="3" loext:num-list-format="%3%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="4" loext:num-list-format="%4%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="5" loext:num-list-format="%5%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="6" loext:num-list-format="%6%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="7" loext:num-list-format="%7%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="8" loext:num-list-format="%8%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
-e 
... etc. - the rest is truncated

Reply via email to