RepositoryExternal.mk                                      |    1 
 bin/lo-all-static-libs                                     |    1 
 download.lst                                               |    4 
 external/libwebp/Makefile.vc.patch                         |   28 +-
 i18npool/CppunitTest_i18npool_transliteration.mk           |   30 +++
 i18npool/Module_i18npool.mk                                |    1 
 i18npool/qa/cppunit/transliteration.cxx                    |  126 +++++++++++++
 i18npool/source/transliteration/transliterationImpl.cxx    |   60 ++++--
 include/editeng/unoprnms.hxx                               |    1 
 include/svx/svddef.hxx                                     |    3 
 include/svx/unoshprp.hxx                                   |    1 
 include/svx/xoutbmp.hxx                                    |    3 
 include/xmloff/xmltoken.hxx                                |    2 
 include/xmloff/xmltypes.hxx                                |    1 
 oox/inc/drawingml/textbodyproperties.hxx                   |    2 
 oox/source/drawingml/shape.cxx                             |    5 
 oox/source/drawingml/textbodypropertiescontext.cxx         |   14 +
 oox/source/export/drawingml.cxx                            |    5 
 oox/source/token/properties.txt                            |    1 
 sd/qa/unit/data/odp/style-overflow-behavior-clip.fodp      |   18 +
 sd/qa/unit/import-tests2.cxx                               |   23 ++
 svx/qa/unit/data/clip-vertical-overflow.pptx               |binary
 svx/qa/unit/svdraw.cxx                                     |   44 ++++
 svx/source/svdraw/svdattr.cxx                              |    1 
 svx/source/svdraw/svdotextdecomposition.cxx                |   14 -
 svx/source/xoutdev/_xoutbmp.cxx                            |   12 +
 sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx   |    7 
 sw/qa/extras/htmlexport/data/reqif-transparent-tif-img.odt |binary
 sw/qa/extras/htmlexport/htmlexport.cxx                     |   23 ++
 sw/qa/extras/odfimport/data/incorrectsum.odt               |binary
 sw/qa/extras/odfimport/odfimport.cxx                       |   13 +
 sw/qa/extras/ooxmlexport/data/tdf150542.docx               |binary
 sw/qa/extras/ooxmlexport/ooxmlexport16.cxx                 |   21 ++
 sw/qa/extras/ooxmlimport/ooxmlimport2.cxx                  |   31 +--
 sw/qa/uitest/navigator/tdf154521.py                        |   10 -
 sw/qa/uitest/navigator/tdf154545.py                        |   98 ++++++++++
 sw/source/core/crsr/contentcontrolbutton.cxx               |    2 
 sw/source/filter/basflt/shellio.cxx                        |    2 
 sw/source/filter/html/htmlflywriter.cxx                    |   31 +--
 sw/source/uibase/inc/conttree.hxx                          |    1 
 sw/source/uibase/utlui/content.cxx                         |   30 ++-
 vcl/qt5/QtFrame.cxx                                        |    9 
 writerfilter/source/dmapper/DomainMapper_Impl.cxx          |   76 +++++--
 writerfilter/source/dmapper/SettingsTable.cxx              |   58 +++++
 writerfilter/source/ooxml/model.xml                        |    3 
 xmloff/inc/xmlprop.hxx                                     |    1 
 xmloff/source/core/xmltoken.cxx                            |    2 
 xmloff/source/draw/sdpropls.cxx                            |    1 
 xmloff/source/style/prhdlfac.cxx                           |    5 
 xmloff/source/token/tokens.txt                             |    2 
 50 files changed, 711 insertions(+), 116 deletions(-)

New commits:
commit 8122f919d09dd1b318ecd45a0b8f98d2b086c307
Author:     Caolán McNamara <caol...@redhat.com>
AuthorDate: Mon Apr 3 12:21:58 2023 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Thu Apr 27 23:18:17 2023 +0200

    move to libwebp 1.3.0 release
    
    Change-Id: I88205be86e15d9878040958b96dc30043d9eb0b6
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149959
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caol...@redhat.com>
    Signed-off-by: Xisco Fauli <xiscofa...@libreoffice.org>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150010

diff --git a/download.lst b/download.lst
index bb8ac7c04d8e..8e7bf0398d13 100644
--- a/download.lst
+++ b/download.lst
@@ -393,8 +393,8 @@ LIBTOMMATH_TARBALL := ltm-1.0.zip
 # three static lines
 # so that git cherry-pick
 # will not run into conflicts
-LIBWEBP_SHA256SUM := 
17fd427d210702a595f08ec619afa2cd3bd323f838ad109666482eac8fff65f0
-LIBWEBP_TARBALL := libwebp-1.3.0-rc1.tar.gz
+LIBWEBP_SHA256SUM := 
64ac4614db292ae8c5aa26de0295bf1623dbb3985054cb656c55e67431def17c
+LIBWEBP_TARBALL := libwebp-1.3.0.tar.gz
 # three static lines
 # so that git cherry-pick
 # will not run into conflicts
commit 6d8dcf30ba82253e0fbc92df1cc61476afce3084
Author:     Caolán McNamara <caol...@redhat.com>
AuthorDate: Thu Dec 29 20:36:07 2022 +0000
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Thu Apr 27 23:18:17 2023 +0200

    Related: ofz Use-of-uninitialized-value
    
    Change-Id: I2f6e726f713836295603bf7112371aa4aff2c7c0
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/144868
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caol...@redhat.com>
    Signed-off-by: Xisco Fauli <xiscofa...@libreoffice.org>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150011

diff --git a/RepositoryExternal.mk b/RepositoryExternal.mk
index 3b8d10d31933..c4e9f4dac874 100644
--- a/RepositoryExternal.mk
+++ b/RepositoryExternal.mk
@@ -2701,6 +2701,7 @@ $(call gb_LinkTarget_add_libs,$(1),\
 else
 $(call gb_LinkTarget_add_libs,$(1),\
        -L$(call gb_UnpackedTarball_get_dir,libwebp)/src/.libs -lwebp \
+       -L$(call gb_UnpackedTarball_get_dir,libwebp)/sharpyuv/.libs -lsharpyuv \
 )
 endif
 $(call gb_LinkTarget_use_external_project,$(1),libwebp)
diff --git a/bin/lo-all-static-libs b/bin/lo-all-static-libs
index af4ff25f348b..3db8d803d07a 100755
--- a/bin/lo-all-static-libs
+++ b/bin/lo-all-static-libs
@@ -125,6 +125,7 @@ echo $INSTDIR/$LIBO_LIB_FOLDER/lib*.a \
      $WORKDIR/UnpackedTarball/libvisio/src/lib/.libs/*.a \
      $WORKDIR/UnpackedTarball/libtiff/libtiff/.libs/*.a \
      $WORKDIR/UnpackedTarball/libwebp/src/.libs/*.a \
+     $WORKDIR/UnpackedTarball/libwebp/sharpyuv/.libs/*.a \
      $WORKDIR/UnpackedTarball/libwp?/src/lib/.libs/*.a \
      $WORKDIR/UnpackedTarball/raptor/src/.libs/*.a \
      $WORKDIR/UnpackedTarball/rasqal/src/.libs/*.a \
diff --git a/download.lst b/download.lst
index abc8f39f132b..bb8ac7c04d8e 100644
--- a/download.lst
+++ b/download.lst
@@ -393,8 +393,8 @@ LIBTOMMATH_TARBALL := ltm-1.0.zip
 # three static lines
 # so that git cherry-pick
 # will not run into conflicts
-LIBWEBP_SHA256SUM := 
7bf5a8a28cc69bcfa8cb214f2c3095703c6b73ac5fba4d5480c205331d9494df
-LIBWEBP_TARBALL := libwebp-1.2.4.tar.gz
+LIBWEBP_SHA256SUM := 
17fd427d210702a595f08ec619afa2cd3bd323f838ad109666482eac8fff65f0
+LIBWEBP_TARBALL := libwebp-1.3.0-rc1.tar.gz
 # three static lines
 # so that git cherry-pick
 # will not run into conflicts
diff --git a/external/libwebp/Makefile.vc.patch 
b/external/libwebp/Makefile.vc.patch
index f13c12410e46..41c899921a1c 100644
--- a/external/libwebp/Makefile.vc.patch
+++ b/external/libwebp/Makefile.vc.patch
@@ -1,7 +1,7 @@
 --- Makefile.vc.sav    2021-07-30 00:55:37.000000000 +0200
 +++ Makefile.vc        2022-01-25 17:35:30.206117700 +0100
-@@ -7,11 +7,11 @@
- LIBWEBPDEMUX_BASENAME = libwebpdemux
+@@ -8,11 +8,11 @@
+ LIBSHARPYUV_BASENAME = libsharpyuv
  
  !IFNDEF ARCH
 -!IF ! [ cl 2>&1 | find "x86" > NUL ]
@@ -15,7 +15,7 @@
  ARCH = ARM
  !ELSE
  !ERROR Unable to auto-detect toolchain architecture! \
-@@ -27,8 +27,8 @@
+@@ -28,8 +28,8 @@
  ## Nothing more to do below this line!
  
  NOLOGO     = /nologo
@@ -35,7 +35,7 @@
  DIROBJ = $(DIRBASE)\obj
  DIRLIB = $(DIRBASE)\lib
  DIRINC = $(DIRBASE)\include
-@@ -86,10 +86,10 @@
+@@ -87,10 +87,10 @@
  
  # Target configuration
  !IF "$(CFG)" == "release-static"
@@ -48,9 +48,9 @@
  RTLIB          = $(RTLIBD)
  STATICLIBBUILD = TRUE
  LIBWEBPDECODER_BASENAME = $(LIBWEBPDECODER_BASENAME)_debug
-@@ -97,11 +97,11 @@
- LIBWEBPMUX_BASENAME = $(LIBWEBPMUX_BASENAME)_debug
+@@ -99,11 +99,11 @@
  LIBWEBPDEMUX_BASENAME = $(LIBWEBPDEMUX_BASENAME)_debug
+ LIBSHARPYUV_BASENAME = $(LIBSHARPYUV_BASENAME)_debug
  !ELSE IF "$(CFG)" == "release-dynamic"
 -CC        = $(CCNODBG)
 +CC_        = $(CCNODBG)
@@ -62,7 +62,7 @@
  RC        = $(RCDEBUG)
  RTLIB     = $(RTLIBD)
  DLLBUILD  = TRUE
-@@ -112,7 +112,7 @@
+@@ -115,7 +115,7 @@
  !ENDIF
  
  !IF "$(STATICLIBBUILD)" == "TRUE"
@@ -71,25 +71,25 @@
  CFGSET = TRUE
  LIBWEBPDECODER = $(DIRLIB)\$(LIBWEBPDECODER_BASENAME).lib
  LIBWEBP = $(DIRLIB)\$(LIBWEBP_BASENAME).lib
-@@ -120,7 +120,7 @@
+@@ -123,7 +123,7 @@
  LIBWEBPDEMUX = $(DIRLIB)\$(LIBWEBPDEMUX_BASENAME).lib
+ LIBSHARPYUV = $(DIRLIB)\$(LIBSHARPYUV_BASENAME).lib
  !ELSE IF "$(DLLBUILD)" == "TRUE"
- DLLINC = webp_dll.h
--CC     = $(CC) /I$(DIROBJ) /FI$(DLLINC) $(RTLIB) /DWEBP_DLL
-+CC_     = $(CC_) /I$(DIROBJ) /FI$(DLLINC) $(RTLIB) /DWEBP_DLL
+-CC     = $(CC) /I$(DIROBJ) $(RTLIB) /DWEBP_DLL
++CC_     = $(CC_) /I$(DIROBJ) $(RTLIB) /DWEBP_DLL
  LIBWEBPDECODER = $(DIRLIB)\$(LIBWEBPDECODER_BASENAME)_dll.lib
  LIBWEBP = $(DIRLIB)\$(LIBWEBP_BASENAME)_dll.lib
  LIBWEBPMUX = $(DIRLIB)\$(LIBWEBPMUX_BASENAME)_dll.lib
-@@ -421,7 +421,7 @@
-     $(DIROBJ)\$(DLLINC)
+@@ -434,7 +434,7 @@
  
+ !IF "$(DLLBUILD)" == "TRUE"
  {$(DIROBJ)}.c{$(DIROBJ)}.obj:
 -      $(CC) $(CFLAGS) /Fd$(LIBWEBP_PDBNAME) /Fo$@  $<
 +      $(CC_) $(CFLAGS) /Fd$(LIBWEBP_PDBNAME) /Fo$@  $<
  
  {src}.rc{$(DIROBJ)}.res:
        $(RC) /fo$@ $<
-@@ -469,41 +469,41 @@
+@@ -467,41 +467,41 @@
  # File-specific flag builds. Note batch rules take precedence over wildcards,
  # so for now name each file individually.
  $(DIROBJ)\examples\anim_diff.obj: examples\anim_diff.c
commit 590da8e3cee8d5749cef792d681c85f3f2ed1462
Author:     Stephan Bergmann <sberg...@redhat.com>
AuthorDate: Tue Apr 4 11:16:00 2023 +0200
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Thu Apr 27 23:18:16 2023 +0200

    tdf#151971: Fix used implementation names of transliteration services
    
    ...after 04af4e4f55f3ef319a78edd4d0109e2e7eba90b6 "[API CHANGE] Fix all bad
    UNOIDL identifiers across offapi" had changed the spelling (character case) 
of
    some of the css.i18n.TransliterationModules[New] enum values involved here, 
so
    that the TmItem1 macro generated broken TMList::implName values now.  
(Which in
    turn caused TransliterationImpl::loadBody to throw "unsatisfied query for
    interface of type com.sun.star.i18n.XExtendedTransliteration!"
    css::uno::RuntimeExceptions, which remained uncaught.)
    
    Also add a test verifying that loading all those transliteration services no
    longer fails throwing exceptions.  Which lead to two open TODOs:  For one, 
the
    value of maxCascade in i18npool/inc/transliterationImpl.hxx might come from 
a
    time when there were fewer TransliterationModules[New] enum values and 
might no
    longer be appropriate.  This would need some further investigation.  But for
    another, there are two transliteration services that cannot currently be
    instantiated.  That looks like a regression that should be fixed in a 
follow-up
    commit.
    
    Change-Id: Icfca3e841360d4b471013e2c96d6868a75a21a1c
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150018
    Tested-by: Jenkins
    Reviewed-by: Stephan Bergmann <sberg...@redhat.com>
    (cherry picked from commit 8e0ea143180c723bb429f6dbdd9ed370c220862b)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149981
    Reviewed-by: Caolán McNamara <caol...@redhat.com>

diff --git a/i18npool/CppunitTest_i18npool_transliteration.mk 
b/i18npool/CppunitTest_i18npool_transliteration.mk
new file mode 100644
index 000000000000..37dddcda0ae2
--- /dev/null
+++ b/i18npool/CppunitTest_i18npool_transliteration.mk
@@ -0,0 +1,30 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t; fill-column: 
100 -*-
+#
+# 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/.
+#
+
+$(eval $(call gb_CppunitTest_CppunitTest,i18npool_transliteration))
+
+$(eval $(call gb_CppunitTest_add_exception_objects,i18npool_transliteration, \
+    i18npool/qa/cppunit/transliteration \
+))
+
+$(eval $(call gb_CppunitTest_use_components,i18npool_transliteration, \
+    i18npool/util/i18npool \
+))\
+
+$(eval $(call gb_CppunitTest_use_libraries,i18npool_transliteration, \
+    cppu \
+    cppuhelper \
+    sal \
+))
+
+$(eval $(call gb_CppunitTest_use_sdk_api,i18npool_transliteration))
+
+$(eval $(call gb_CppunitTest_use_ure,i18npool_transliteration))
+
+# vim: set noet sw=4 ts=4:
diff --git a/i18npool/Module_i18npool.mk b/i18npool/Module_i18npool.mk
index e66a08a648ab..1797db8c3869 100644
--- a/i18npool/Module_i18npool.mk
+++ b/i18npool/Module_i18npool.mk
@@ -45,6 +45,7 @@ $(eval $(call gb_Module_add_check_targets,i18npool,\
        CppunitTest_i18npool_textsearch \
        CppunitTest_i18npool_calendar \
        CppunitTest_i18npool_defaultnumberingprovider \
+       CppunitTest_i18npool_transliteration \
 ))
 
 # vim: set noet sw=4 ts=4:
diff --git a/i18npool/qa/cppunit/transliteration.cxx 
b/i18npool/qa/cppunit/transliteration.cxx
new file mode 100644
index 000000000000..77d82aa60eec
--- /dev/null
+++ b/i18npool/qa/cppunit/transliteration.cxx
@@ -0,0 +1,126 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; 
fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/config.h>
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+#include <com/sun/star/i18n/Transliteration.hpp>
+#include <com/sun/star/i18n/TransliterationModulesNew.hpp>
+#include <cppuhelper/bootstrap.hxx>
+
+namespace
+{
+class Transliteration : public CppUnit::TestFixture
+{
+public:
+    void testLoadModuleNew()
+    {
+        auto const trans
+            = 
css::i18n::Transliteration::create(cppu::defaultBootstrap_InitialComponentContext());
+        // Verify that loading succeeds without throwing an exception, for 
each possible
+        // TransliterationModulesNew value (TODO: there is an upper limit of 
maxCascade 27 in
+        // i18npool/inc/transliterationImpl.hxx for the length of the passed
+        // TransliterationModulesNew value, so pass each one individually 
rather than all 65 at
+        // once):
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_UPPERCASE_LOWERCASE }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_LOWERCASE_UPPERCASE }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_HALFWIDTH_FULLWIDTH }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_FULLWIDTH_HALFWIDTH }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_KATAKANA_HIRAGANA }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_HIRAGANA_KATAKANA }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IGNORE_CASE }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IGNORE_KANA }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IGNORE_WIDTH }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreTraditionalKanji_ja_JP },
+                             {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreTraditionalKana_ja_JP },
+                             {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreMinusSign_ja_JP }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreIterationMark_ja_JP },
+                             {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreSeparator_ja_JP }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreZiZu_ja_JP }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreBaFa_ja_JP }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreTiJi_ja_JP }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreHyuByu_ja_JP }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreSeZe_ja_JP }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreIandEfollowedByYa_ja_JP },
+                             {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreKiKuFollowedBySa_ja_JP },
+                             {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreSize_ja_JP }, {});
+        trans->loadModuleNew(
+            { 
css::i18n::TransliterationModulesNew_IgnoreProlongedSoundMark_ja_JP }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreMiddleDot_ja_JP }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_IgnoreSpace_ja_JP }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_SmallToLarge_ja_JP }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_LargeToSmall_ja_JP }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToTextLower_zh_CN }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToTextUpper_zh_CN }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToTextLower_zh_TW }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToTextUpper_zh_TW }, {});
+#if 0 //TODO: currently broken
+        
trans->loadModuleNew({css::i18n::TransliterationModulesNew_NumToTextFormalHangul_ko},
 {});
+#endif
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToTextFormalLower_ko }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToTextFormalUpper_ko }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToTextInformalHangul_ko },
+                             {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToTextInformalLower_ko },
+                             {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToTextInformalUpper_ko },
+                             {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToCharLower_zh_CN }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToCharUpper_zh_CN }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToCharLower_zh_TW }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToCharUpper_zh_TW }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToCharHangul_ko }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToCharLower_ko }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToCharUpper_ko }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToCharFullwidth }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_NumToCharKanjiShort_ja_JP },
+                             {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_TextToNumLower_zh_CN }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_TextToNumUpper_zh_CN }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_TextToNumLower_zh_TW }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_TextToNumUpper_zh_TW }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_TextToNumFormalHangul_ko }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_TextToNumFormalLower_ko }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_TextToNumFormalUpper_ko }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_TextToNumInformalHangul_ko },
+                             {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_TextToNumInformalLower_ko },
+                             {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_TextToNumInformalUpper_ko },
+                             {});
+#if 0 //TODO: currently broken
+        
trans->loadModuleNew({css::i18n::TransliterationModulesNew_CharToNumLower_zh_CN},
 {});
+#endif
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_CharToNumUpper_zh_CN }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_CharToNumLower_zh_TW }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_CharToNumUpper_zh_TW }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_CharToNumHangul_ko }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_CharToNumLower_ko }, {});
+        trans->loadModuleNew({ 
css::i18n::TransliterationModulesNew_CharToNumUpper_ko }, {});
+    }
+
+    CPPUNIT_TEST_SUITE(Transliteration);
+    CPPUNIT_TEST(testLoadModuleNew);
+    CPPUNIT_TEST_SUITE_END();
+};
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Transliteration);
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s 
cinkeys+=0=break: */
diff --git a/i18npool/source/transliteration/transliterationImpl.cxx 
b/i18npool/source/transliteration/transliterationImpl.cxx
index dc9e5a234e5b..914a401031f1 100644
--- a/i18npool/source/transliteration/transliterationImpl.cxx
+++ b/i18npool/source/transliteration/transliterationImpl.cxx
@@ -65,22 +65,44 @@ TMList const TMlist[] = {                //      Modules    
  ModulesNew
 // No enum define for this trans. application has to use impl name to load it
 //  TmItem1 (IGNORE_CASE_SIMPLE),                       // (1<<11      1024) 
(66)
 
-  TmItem1 (IgnoreTraditionalKanji_ja_JP),       // 3. (1<<12      4096) (10)
-  TmItem1 (IgnoreTraditionalKana_ja_JP),        // 4. (1<<13      8192) (11)
-  TmItem1 (IgnoreMinusSign_ja_JP),              // 5. (1<<13     16384) (12)
-  TmItem1 (IgnoreIterationMark_ja_JP),          // 6. (1<<14     32768) (13)
-  TmItem1 (IgnoreSeparator_ja_JP),              // 7. (1<<15     65536) (14)
-  TmItem1 (IgnoreSize_ja_JP),                   // 15. (1<<23  16777216) (22)
-  TmItem1 (IgnoreMiddleDot_ja_JP),              // 17. (1<<25  67108864) (24)
-  TmItem1 (IgnoreSpace_ja_JP),                  // 18. (1<<26 134217728) (25)
-  TmItem1 (IgnoreZiZu_ja_JP),                   // 8. (1<<16    131072) (15)
-  TmItem1 (IgnoreBaFa_ja_JP),                   // 9. (1<<17    262144) (16)
-  TmItem1 (IgnoreTiJi_ja_JP),                   // 10. (1<<18    524288) (17)
-  TmItem1 (IgnoreHyuByu_ja_JP),                 // 11. (1<<19   1048576) (18)
-  TmItem1 (IgnoreSeZe_ja_JP),                   // 12. (1<<20   2097152) (19)
-  TmItem1 (IgnoreIandEfollowedByYa_ja_JP),      // 13. (1<<21   4194304) (20)
-  TmItem1 (IgnoreKiKuFollowedBySa_ja_JP),       // 14. (1<<22   8388608) (21)
-  TmItem1 (IgnoreProlongedSoundMark_ja_JP),     // 16. (1<<24  33554432) (23)
+  {TransliterationModules_IgnoreTraditionalKanji_ja_JP,
+   TransliterationModulesNew_IgnoreTraditionalKanji_ja_JP, 
"ignoreTraditionalKanji_ja_JP"},
+                                                // 3. (1<<12      4096) (10)
+  {TransliterationModules_IgnoreTraditionalKana_ja_JP,
+   TransliterationModulesNew_IgnoreTraditionalKana_ja_JP, 
"ignoreTraditionalKana_ja_JP"},
+                                                // 4. (1<<13      8192) (11)
+  {TransliterationModules_IgnoreMinusSign_ja_JP, 
TransliterationModulesNew_IgnoreMinusSign_ja_JP,
+   "ignoreMinusSign_ja_JP"},                    // 5. (1<<13     16384) (12)
+  {TransliterationModules_IgnoreIterationMark_ja_JP,
+   TransliterationModulesNew_IgnoreIterationMark_ja_JP, 
"ignoreIterationMark_ja_JP"},
+                                                // 6. (1<<14     32768) (13)
+  {TransliterationModules_IgnoreSeparator_ja_JP, 
TransliterationModulesNew_IgnoreSeparator_ja_JP,
+   "ignoreSeparator_ja_JP"},                    // 7. (1<<15     65536) (14)
+  {TransliterationModules_IgnoreSize_ja_JP, 
TransliterationModulesNew_IgnoreSize_ja_JP,
+   "ignoreSize_ja_JP"},                         // 15. (1<<23  16777216) (22)
+  {TransliterationModules_IgnoreMiddleDot_ja_JP, 
TransliterationModulesNew_IgnoreMiddleDot_ja_JP,
+   "ignoreMiddleDot_ja_JP"},                    // 17. (1<<25  67108864) (24)
+  {TransliterationModules_IgnoreSpace_ja_JP, 
TransliterationModulesNew_IgnoreSpace_ja_JP,
+   "ignoreSpace_ja_JP"},                        // 18. (1<<26 134217728) (25)
+  {TransliterationModules_IgnoreZiZu_ja_JP, 
TransliterationModulesNew_IgnoreZiZu_ja_JP,
+   "ignoreZiZu_ja_JP"},                         // 8. (1<<16    131072) (15)
+  {TransliterationModules_IgnoreBaFa_ja_JP, 
TransliterationModulesNew_IgnoreBaFa_ja_JP,
+   "ignoreBaFa_ja_JP"},                         // 9. (1<<17    262144) (16)
+  {TransliterationModules_IgnoreTiJi_ja_JP, 
TransliterationModulesNew_IgnoreTiJi_ja_JP,
+   "ignoreTiJi_ja_JP"},                         // 10. (1<<18    524288) (17)
+  {TransliterationModules_IgnoreHyuByu_ja_JP, 
TransliterationModulesNew_IgnoreHyuByu_ja_JP,
+   "ignoreHyuByu_ja_JP"},                       // 11. (1<<19   1048576) (18)
+  {TransliterationModules_IgnoreSeZe_ja_JP, 
TransliterationModulesNew_IgnoreSeZe_ja_JP,
+   "ignoreSeZe_ja_JP"},                         // 12. (1<<20   2097152) (19)
+  {TransliterationModules_IgnoreIandEfollowedByYa_ja_JP,
+   TransliterationModulesNew_IgnoreIandEfollowedByYa_ja_JP, 
"ignoreIandEfollowedByYa_ja_JP"},
+                                                // 13. (1<<21   4194304) (20)
+  {TransliterationModules_IgnoreKiKuFollowedBySa_ja_JP,
+   TransliterationModulesNew_IgnoreKiKuFollowedBySa_ja_JP, 
"ignoreKiKuFollowedBySa_ja_JP"},
+                                                // 14. (1<<22   8388608) (21)
+  {TransliterationModules_IgnoreProlongedSoundMark_ja_JP,
+   TransliterationModulesNew_IgnoreProlongedSoundMark_ja_JP, 
"ignoreProlongedSoundMark_ja_JP"},
+                                                // 16. (1<<24  33554432) (23)
 
   TmItem1 (UPPERCASE_LOWERCASE),        // 19. (1) (1)
   TmItem1 (LOWERCASE_UPPERCASE),        // 20. (2) (2)
@@ -89,8 +111,10 @@ TMList const TMlist[] = {                //      Modules    
  ModulesNew
   TmItem1 (KATAKANA_HIRAGANA),          // 23. (5) (5)
   TmItem1 (HIRAGANA_KATAKANA),          // 24. (6) (6)
 
-  TmItem1 (SmallToLarge_ja_JP),         // 25. (1<<27 268435456) (26)
-  TmItem1 (LargeToSmall_ja_JP),         // 26. (1<<28 536870912) (27)
+  {TransliterationModules_SmallToLarge_ja_JP, 
TransliterationModulesNew_SmallToLarge_ja_JP,
+   "smallToLarge_ja_JP"},               // 25. (1<<27 268435456) (26)
+  {TransliterationModules_LargeToSmall_ja_JP, 
TransliterationModulesNew_LargeToSmall_ja_JP,
+   "largeToSmall_ja_JP"},               // 26. (1<<28 536870912) (27)
   TmItem2 (NumToTextLower_zh_CN),       // 27. () (28)
   TmItem2 (NumToTextUpper_zh_CN),       // 28. () (29)
   TmItem2 (NumToTextLower_zh_TW),       // 29. () (30)
commit 06ca51c4820538fe684b7801d2b5f968487eecb6
Author:     Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Fri Mar 24 11:01:56 2023 +0300
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Thu Apr 27 23:18:16 2023 +0200

    tdf#154360: use TOC(N) styles in DOCX as the source of ToC tab stop position
    
    Change-Id: Iab8001f8be8a8af437e8898079d55ff57dd6fa3b
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149494
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149548
    Reviewed-by: Miklos Vajna <vmik...@collabora.com>

diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx 
b/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx
index 1a77b778c930..f6ff2b3bb551 100644
--- a/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx
+++ b/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx
@@ -1049,39 +1049,46 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf154319)
     CPPUNIT_ASSERT_EQUAL(sal_Int32(11), xLevelFormats->getCount());
 
     const auto checkPropVal = [](const auto& expected, const 
css::beans::PropertyValues& entry,
-                                 const OUString& name) {
+                                 const OUString& name, sal_Int32 level) {
         auto it
             = std::find_if(entry.begin(), entry.end(),
                            [&name](const css::beans::PropertyValue& p) { 
return p.Name == name; });
-        OString msg = "Property: " + name.toUtf8();
+        OString msg = "Property: " + name.toUtf8() + ", level: " + 
OString::number(level);
         CPPUNIT_ASSERT_MESSAGE(msg.getStr(), it != entry.end());
         CPPUNIT_ASSERT_EQUAL_MESSAGE(msg.getStr(), css::uno::Any(expected), 
it->Value);
     };
 
+    // tdf#154360: check tab stops between the number and the entry text
+    constexpr sal_Int32 levelTabStops[]
+        = { 776, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270 };
+
     //start with level 1, 0 is the header level
     for (sal_Int32 nLevel = 1; nLevel < xLevelFormats->getCount(); ++nLevel)
     {
         css::uno::Sequence<css::beans::PropertyValues> aLevel;
         xLevelFormats->getByIndex(nLevel) >>= aLevel;
 
-        CPPUNIT_ASSERT_EQUAL(sal_Int32(8), aLevel.getLength());
+        CPPUNIT_ASSERT_EQUAL(sal_Int32(9), aLevel.getLength());
+
+        checkPropVal(OUString("TokenHyperlinkStart"), aLevel[0], "TokenType", 
nLevel);
 
-        checkPropVal(OUString("TokenHyperlinkStart"), aLevel[0], "TokenType");
+        checkPropVal(OUString("TokenEntryNumber"), aLevel[1], "TokenType", 
nLevel);
 
-        checkPropVal(OUString("TokenEntryNumber"), aLevel[1], "TokenType");
+        checkPropVal(OUString("TokenTabStop"), aLevel[2], "TokenType", nLevel);
+        checkPropVal(levelTabStops[nLevel - 1], aLevel[2], "TabStopPosition", 
nLevel);
 
-        checkPropVal(OUString("TokenEntryText"), aLevel[2], "TokenType");
+        checkPropVal(OUString("TokenEntryText"), aLevel[3], "TokenType", 
nLevel);
 
-        checkPropVal(OUString("TokenTabStop"), aLevel[3], "TokenType");
+        checkPropVal(OUString("TokenTabStop"), aLevel[4], "TokenType", nLevel);
 
-        checkPropVal(OUString("TokenChapterInfo"), aLevel[4], "TokenType");
+        checkPropVal(OUString("TokenChapterInfo"), aLevel[5], "TokenType", 
nLevel);
 
-        checkPropVal(OUString("TokenText"), aLevel[5], "TokenType");
-        checkPropVal(OUString("\""), aLevel[5], "Text");
+        checkPropVal(OUString("TokenText"), aLevel[6], "TokenType", nLevel);
+        checkPropVal(OUString("\""), aLevel[6], "Text", nLevel);
 
-        checkPropVal(OUString("TokenPageNumber"), aLevel[6], "TokenType");
+        checkPropVal(OUString("TokenPageNumber"), aLevel[7], "TokenType", 
nLevel);
 
-        checkPropVal(OUString("TokenHyperlinkEnd"), aLevel[7], "TokenType");
+        checkPropVal(OUString("TokenHyperlinkEnd"), aLevel[8], "TokenType", 
nLevel);
     }
 }
 
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx 
b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 9e6ce49ec750..bb8ac11129b3 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -6044,35 +6044,34 @@ void DomainMapper_Impl::handleAuthor
 }
 
 static uno::Sequence< beans::PropertyValues > lcl_createTOXLevelHyperlinks( 
bool bHyperlinks, const OUString& sChapterNoSeparator,
-                                   const uno::Sequence< beans::PropertyValues 
>& aLevel )
+                                   const uno::Sequence< beans::PropertyValues 
>& aLevel, const uno::Sequence<style::TabStop>& tabs)
 {
     //create a copy of the level and add new entries
 
     std::vector<css::beans::PropertyValues> aNewLevel;
-    aNewLevel.reserve(aLevel.getLength() + 4); // at most 4 added items
+    aNewLevel.reserve(aLevel.getLength() + 5); // at most 5 added items
 
     static constexpr OUStringLiteral tokType(u"TokenType");
     static constexpr OUStringLiteral tokHStart(u"TokenHyperlinkStart");
     static constexpr OUStringLiteral tokHEnd(u"TokenHyperlinkEnd");
     static constexpr OUStringLiteral tokPNum(u"TokenPageNumber");
+    static constexpr OUStringLiteral tokENum(u"TokenEntryNumber");
 
     if (bHyperlinks)
         aNewLevel.push_back({ comphelper::makePropertyValue(tokType, 
tokHStart) });
 
     for (const auto& item : aLevel)
     {
-        if (bHyperlinks
-            && std::any_of(item.begin(), item.end(),
-                           [](const css::beans::PropertyValue& p) {
-                               return p.Name == tokType
-                                      && (p.Value == tokHStart || p.Value == 
tokHEnd);
-                           }))
+        OUString tokenType;
+        if (auto it = std::find_if(item.begin(), item.end(),
+                                   [](const auto& p) { return p.Name == 
tokType; });
+            it != item.end())
+            it->Value >>= tokenType;
+
+        if (bHyperlinks && (tokenType == tokHStart || tokenType == tokHEnd))
             continue; // We add hyperlink ourselves, so just skip existing 
hyperlink start / end
 
-        if (!sChapterNoSeparator.isEmpty()
-            && std::any_of(item.begin(), item.end(),
-                           [](const css::beans::PropertyValue& p)
-                           { return p.Name == tokType && p.Value == tokPNum; 
}))
+        if (!sChapterNoSeparator.isEmpty() && tokenType == tokPNum)
         {
             // This is an existing page number token; insert the chapter and 
separator before it
             aNewLevel.push_back(
@@ -6083,6 +6082,14 @@ static uno::Sequence< beans::PropertyValues > 
lcl_createTOXLevelHyperlinks( bool
         }
 
         aNewLevel.push_back(item);
+
+        if (tabs.hasElements() && tokenType == tokENum)
+        {
+            // There is a fixed tab stop position needed in the level after 
the numbering
+            aNewLevel.push_back(
+                { comphelper::makePropertyValue(tokType, 
OUString("TokenTabStop")),
+                  comphelper::makePropertyValue("TabStopPosition", 
tabs[0].Position) });
+        }
     }
 
     if (bHyperlinks)
@@ -6440,22 +6447,39 @@ void DomainMapper_Impl::handleToc
             
xTOC->setPropertyValue(getPropertyName(PROP_CREATE_FROM_LEVEL_PARAGRAPH_STYLES),
 uno::Any( true ));
 
         }
-        if(bHyperlinks  || !sChapterNoSeparator.isEmpty())
+
+        uno::Reference<container::XNameContainer> xStyles;
+        if (uno::Reference<style::XStyleFamiliesSupplier> xStylesSupplier{ 
GetTextDocument(),
+                                                                           
uno::UNO_QUERY })
         {
-            uno::Reference< container::XIndexReplace> xLevelFormats;
-            xTOC->getPropertyValue(getPropertyName(PROP_LEVEL_FORMAT)) >>= 
xLevelFormats;
-            sal_Int32 nLevelCount = xLevelFormats->getCount();
-                            //start with level 1, 0 is the header level
-            for( sal_Int32 nLevel = 1; nLevel < nLevelCount; ++nLevel)
-            {
-                uno::Sequence< beans::PropertyValues > aLevel;
-                xLevelFormats->getByIndex( nLevel ) >>= aLevel;
+            auto xStyleFamilies = xStylesSupplier->getStyleFamilies();
+            xStyleFamilies->getByName(getPropertyName(PROP_PARAGRAPH_STYLES)) 
>>= xStyles;
+        }
+
+        uno::Reference< container::XIndexReplace> xLevelFormats;
+        xTOC->getPropertyValue(getPropertyName(PROP_LEVEL_FORMAT)) >>= 
xLevelFormats;
+        sal_Int32 nLevelCount = xLevelFormats->getCount();
+                        //start with level 1, 0 is the header level
+        for( sal_Int32 nLevel = 1; nLevel < nLevelCount; ++nLevel)
+        {
+            uno::Sequence< beans::PropertyValues > aLevel;
+            xLevelFormats->getByIndex( nLevel ) >>= aLevel;
 
-                uno::Sequence< beans::PropertyValues > aNewLevel = 
lcl_createTOXLevelHyperlinks(
-                                                    bHyperlinks, 
sChapterNoSeparator,
-                                                    aLevel );
-                xLevelFormats->replaceByIndex( nLevel, uno::Any( aNewLevel ) );
+            // Get the tab stops coming from the styles; store to the level 
definitions
+            uno::Sequence<style::TabStop> tabStops;
+            if (xStyles)
+            {
+                OUString style;
+                xTOC->getPropertyValue("ParaStyleLevel" + 
OUString::number(nLevel)) >>= style;
+                uno::Reference<beans::XPropertySet> xStyle;
+                if (xStyles->getByName(style) >>= xStyle)
+                    xStyle->getPropertyValue("ParaTabStops") >>= tabStops;
             }
+
+            uno::Sequence< beans::PropertyValues > aNewLevel = 
lcl_createTOXLevelHyperlinks(
+                                                bHyperlinks, 
sChapterNoSeparator,
+                                                aLevel, tabStops);
+            xLevelFormats->replaceByIndex( nLevel, uno::Any( aNewLevel ) );
         }
     }
     else if (bTableOfFigures && xTOC.is())
@@ -6479,7 +6503,7 @@ void DomainMapper_Impl::handleToc
 
             uno::Sequence< beans::PropertyValues > aNewLevel = 
lcl_createTOXLevelHyperlinks(
                                                 bHyperlinks, 
sChapterNoSeparator,
-                                                aLevel );
+                                                aLevel, {});
             xLevelFormats->replaceByIndex( 1, uno::Any( aNewLevel ) );
         }
     }
commit 74241bb153b1a002e523a84767fda70ce73f395b
Author:     Vasily Melenchuk <vasily.melenc...@cib.de>
AuthorDate: Tue Mar 28 13:15:09 2023 +0300
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Thu Apr 27 23:18:16 2023 +0200

    tdf#150542: DOCX import: support for document varibles
    
    Writer does insert document variables only if they are in
    document body as DOCVARIABLE fields. But ones given in
    settings.xml (w:docVars/w:docVar) were ignored.
    
    Moreover variables in settings should have priority and
    overwrite ones in fields. Word by default does show only
    field results, but refreshing field values will override
    values with ones from settings.
    
    Change-Id: I7103c90eef59ab18f8a25e616dcf8a8b1c6dcb08
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149646
    Tested-by: Jenkins
    Reviewed-by: Thorsten Behrens <thorsten.behr...@allotropia.de>
    (cherry picked from commit 992d86b1b67a6bd28bbf5e63b2d2406881f476b7)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149889

diff --git a/sw/qa/extras/ooxmlexport/data/tdf150542.docx 
b/sw/qa/extras/ooxmlexport/data/tdf150542.docx
new file mode 100644
index 000000000000..3f115fa69370
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf150542.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx 
b/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx
index 0394c03495a6..6d501548ad25 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport16.cxx
@@ -994,6 +994,27 @@ CPPUNIT_TEST_FIXTURE(Test, Test_ShadowDirection)
                 "rotWithShape", "0");
 }
 
+CPPUNIT_TEST_FIXTURE(Test, testTdf150542)
+{
+    loadAndSave("tdf150542.docx");
+
+    xmlDocUniquePtr pSettingsDoc = parseExport("word/settings.xml");
+    // Ensure that all docvars from input are written back and with correct 
values.
+    // Order of document variables is not checked. So this can fail at some 
time if order is changed.
+    assertXPath(pSettingsDoc,
+                "/w:settings/w:docVars/w:docVar[1]", "name", 
u"LocalChars\u00C1\u0072\u0076\u00ED\u007A\u0074\u0075\u0072\u006F\u0054\u00FC\u006B\u00F6\u0072\u0066\u00FA\u0072\u00F3\u0067\u00E9\u0070");
+    assertXPath(pSettingsDoc,
+                "/w:settings/w:docVars/w:docVar[1]", "val", u"Correct value 
(\u00E1\u0072\u0076\u00ED\u007A\u0074\u0075\u0072\u006F\u0020\u0074\u00FC\u006B\u00F6\u0072\u0066\u00FA\u0072\u00F3\u0067\u00E9\u0070)");
+    assertXPath(pSettingsDoc,
+                "/w:settings/w:docVars/w:docVar[2]", "name", "DocVar1");
+    assertXPath(pSettingsDoc,
+                "/w:settings/w:docVars/w:docVar[2]", "val", "DocVar1 Value");
+    assertXPath(pSettingsDoc,
+                "/w:settings/w:docVars/w:docVar[3]", "name", "DocVar3");
+    assertXPath(pSettingsDoc,
+                "/w:settings/w:docVars/w:docVar[3]", "val", "DocVar3 Value");
+}
+
 CPPUNIT_TEST_FIXTURE(Test, testTdf139549)
 {
     loadAndSave("tdf139549.docx");
diff --git a/writerfilter/source/dmapper/SettingsTable.cxx 
b/writerfilter/source/dmapper/SettingsTable.cxx
index 45dc67b9f43b..d24dae617c01 100644
--- a/writerfilter/source/dmapper/SettingsTable.cxx
+++ b/writerfilter/source/dmapper/SettingsTable.cxx
@@ -26,6 +26,8 @@
 
 #include <rtl/ustring.hxx>
 #include <sfx2/zoomitem.hxx>
+#include <com/sun/star/text/XDependentTextField.hpp>
+#include <com/sun/star/text/XTextFieldsSupplier.hpp>
 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
 #include <com/sun/star/beans/XPropertySet.hpp>
 #include <com/sun/star/beans/XPropertyState.hpp>
@@ -95,6 +97,7 @@ struct SettingsTable_Impl
     bool                m_bNoLeading = false;
     OUString            m_sDecimalSymbol;
     OUString            m_sListSeparator;
+    std::vector<std::pair<OUString, OUString>> m_aDocVars;
 
     uno::Sequence<beans::PropertyValue> m_pThemeFontLangProps;
 
@@ -136,7 +139,6 @@ struct SettingsTable_Impl
     , m_pThemeFontLangProps(3)
     , m_pCurrentCompatSetting(3)
     {}
-
 };
 
 SettingsTable::SettingsTable(const DomainMapper& rDomainMapper)
@@ -187,6 +189,12 @@ void SettingsTable::lcl_attribute(Id nName, Value & val)
     case NS_ooxml::LN_CT_View_val:
         m_pImpl->m_nView = nIntValue;
         break;
+    case NS_ooxml::LN_CT_DocVar_name:
+        m_pImpl->m_aDocVars.back().first = sStringValue;
+        break;
+    case NS_ooxml::LN_CT_DocVar_val:
+        m_pImpl->m_aDocVars.back().second = sStringValue;
+        break;
     case NS_ooxml::LN_CT_CompatSetting_name:
         m_pImpl->m_pCurrentCompatSetting.getArray()[0]
             = comphelper::makePropertyValue("name", sStringValue);
@@ -342,6 +350,25 @@ void SettingsTable::lcl_sprm(Sprm& rSprm)
         }
     }
     break;
+    case NS_ooxml::LN_CT_Settings_docVars:
+    {
+        writerfilter::Reference<Properties>::Pointer_t pProperties = 
rSprm.getProps();
+        if (pProperties)
+        {
+            pProperties->resolve(*this);
+        }
+    }
+    break;
+    case NS_ooxml::LN_CT_DocVar:
+    {
+        writerfilter::Reference<Properties>::Pointer_t pProperties = 
rSprm.getProps();
+        if (pProperties)
+        {
+            m_pImpl->m_aDocVars.push_back(std::make_pair(OUString(), 
OUString()));
+            pProperties->resolve(*this);
+        }
+    }
+    break;
     case NS_ooxml::LN_CT_Compat_noColumnBalance:
         m_pImpl->m_bNoColumnBalance = nIntValue;
         break;
@@ -572,6 +599,35 @@ void 
SettingsTable::ApplyProperties(uno::Reference<text::XTextDocument> const& x
         }
     }
 
+    // Create or overwrite DocVars based on found in settings
+    if (m_pImpl->m_aDocVars.size())
+    {
+        uno::Reference< text::XTextFieldsSupplier > xFieldsSupplier(xDoc, 
uno::UNO_QUERY_THROW);
+        uno::Reference< container::XNameAccess > xFieldMasterAccess = 
xFieldsSupplier->getTextFieldMasters();
+        for (const auto& docVar : m_pImpl->m_aDocVars)
+        {
+            uno::Reference< beans::XPropertySet > xMaster;
+            OUString sFieldMasterService("com.sun.star.text.FieldMaster.User." 
+ docVar.first);
+
+            // Find or create Field Master
+            if (xFieldMasterAccess->hasByName(sFieldMasterService))
+            {
+                
xMaster.set(xFieldMasterAccess->getByName(sFieldMasterService), 
uno::UNO_QUERY_THROW);
+            }
+            else
+            {
+                
xMaster.set(xTextFactory->createInstance("com.sun.star.text.FieldMaster.User"), 
uno::UNO_QUERY_THROW);
+                xMaster->setPropertyValue(getPropertyName(PROP_NAME), 
uno::Any(docVar.first));
+                uno::Reference<text::XDependentTextField> xField(
+                    
xTextFactory->createInstance("com.sun.star.text.TextField.User"),
+                    uno::UNO_QUERY);
+                xField->attachTextFieldMaster(xMaster);
+            }
+
+            xMaster->setPropertyValue(getPropertyName(PROP_CONTENT), 
uno::Any(docVar.second));
+        }
+    }
+
     // Auto hyphenation: turns on hyphenation by default, 
<w:suppressAutoHyphens/> may still disable it at a paragraph level.
     // Situation is similar for RTF_WIDOWCTRL, which turns on widow / orphan 
control by default.
     if (!(m_pImpl->m_bAutoHyphenation || m_pImpl->m_bNoHyphenateCaps || 
m_pImpl->m_bWidowControl))
diff --git a/writerfilter/source/ooxml/model.xml 
b/writerfilter/source/ooxml/model.xml
index c8c27ea14794..8082c433e89b 100644
--- a/writerfilter/source/ooxml/model.xml
+++ b/writerfilter/source/ooxml/model.xml
@@ -18823,6 +18823,9 @@
       <attribute name="uri" tokenid="ooxml:CT_CompatSetting_uri"/>
       <attribute name="val" tokenid="ooxml:CT_CompatSetting_val"/>
     </resource>
+    <resource name="CT_DocVars" resource="Properties">
+      <element name="docVar" tokenid="ooxml:CT_DocVar"/>
+    </resource>
     <resource name="CT_DocVar" resource="Properties">
       <attribute name="name" tokenid="ooxml:CT_DocVar_name"/>
       <attribute name="val" tokenid="ooxml:CT_DocVar_val"/>
commit aa6c86479de05616fed2e80082cfe777859174f7
Author:     Caolán McNamara <caol...@redhat.com>
AuthorDate: Mon Apr 3 17:08:42 2023 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Thu Apr 27 23:18:16 2023 +0200

    tdf#152257 popup already launched, don't relaunch
    
    Change-Id: I2503803b756fed179f6aa62cee2c549b6bc7c3c8
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149974
    Reviewed-by: Adolfo Jayme Barrientos <fit...@ubuntu.com>
    Tested-by: Jenkins

diff --git a/sw/source/core/crsr/contentcontrolbutton.cxx 
b/sw/source/core/crsr/contentcontrolbutton.cxx
index 908d5f1bff01..0d805cb492c3 100644
--- a/sw/source/core/crsr/contentcontrolbutton.cxx
+++ b/sw/source/core/crsr/contentcontrolbutton.cxx
@@ -88,6 +88,8 @@ void SwContentControlButton::MouseButtonDown(const 
MouseEvent&) { StartPopup();
 
 void SwContentControlButton::StartPopup()
 {
+    if (m_xPopup) // tdf#152257 already launched, don't relaunch
+        return;
     LaunchPopup();
     Invalidate();
 }
commit 4007e70143a277451424c6d56f771fb26a90d665
Author:     Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Thu Mar 30 09:24:26 2023 +0300
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Thu Apr 27 23:18:16 2023 +0200

    sw reqif-xhtml export: fix export of transparent TIF
    
    Since commit 22b50f1937de67e4ad9e692d6964aa5b8d33af7a (use libtiff for
    tiff import, 2022-05-21), transparent TIFs are imported correctly.
    As the result, reqif export started to output the transparent TIF
    images as GIFs, because XOutFlags::UseGifIfSensible handles case of
    transparency, and XOutFlags::UseNativeIfPossible didn't handle TIF.
    Additionally, the resulting mediatype was reported incorrectly:
    
      <reqif-xhtml:object data="[...].gif" type="image/tiff" ... >
    
    1. Handle TIFs in XOutBitmap::WriteGraphic when 
XOutFlags::UseNativeIfPossible
       is specified.
    2. Return the corrected mediatype from XOutBitmap::WriteGraphic,
       to inform the caller about the possible change.
    3. Remove the XOutFlags::UseGifIfSensible flag when doing the
       reqif export, to avoid the format change at all.
    
    Change-Id: I99f7cfb8d12ef66d372700ec810bd8b269868ffd
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149744
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149758
    Tested-by: Mike Kaganski <mike.kagan...@collabora.com>
    (cherry picked from commit a222008d5452c2ace6779b38d06539d085bd3a66)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149755
    Reviewed-by: Caolán McNamara <caol...@redhat.com>

diff --git a/include/svx/xoutbmp.hxx b/include/svx/xoutbmp.hxx
index 43a666d06277..d2137f670c8a 100644
--- a/include/svx/xoutbmp.hxx
+++ b/include/svx/xoutbmp.hxx
@@ -59,7 +59,8 @@ public:
     static ErrCode      WriteGraphic( const Graphic& rGraphic, OUString& 
rFileName,
                                       const OUString& rFilterName, const 
XOutFlags nFlags,
                                       const Size* pMtfSize_100TH_MM = nullptr,
-                                      const css::uno::Sequence< 
css::beans::PropertyValue >* pFilterData = nullptr);
+                                      const css::uno::Sequence< 
css::beans::PropertyValue >* pFilterData = nullptr,
+                                      OUString* pMediaType = nullptr );
     static bool GraphicToBase64(const Graphic& rGraphic, OUString& rOUString,
                                 bool bAddPrefix = true,
                                 ConvertDataFormat aTargetFormat = 
ConvertDataFormat::Unknown);
diff --git a/svx/source/xoutdev/_xoutbmp.cxx b/svx/source/xoutdev/_xoutbmp.cxx
index df57f48ce555..149295d22b09 100644
--- a/svx/source/xoutdev/_xoutbmp.cxx
+++ b/svx/source/xoutdev/_xoutbmp.cxx
@@ -30,10 +30,13 @@
 #include <vcl/cvtgrf.hxx>
 #include <memory>
 
+#include <com/sun/star/beans/XPropertySet.hpp>
+
 constexpr OUStringLiteral FORMAT_BMP = u"bmp";
 constexpr OUStringLiteral FORMAT_GIF = u"gif";
 constexpr OUStringLiteral FORMAT_JPG = u"jpg";
 constexpr OUStringLiteral FORMAT_PNG = u"png";
+constexpr OUStringLiteral FORMAT_TIF = u"tif";
 constexpr OUStringLiteral FORMAT_WEBP = u"webp";
 
 using namespace com::sun::star;
@@ -104,7 +107,8 @@ Graphic XOutBitmap::MirrorGraphic( const Graphic& rGraphic, 
const BmpMirrorFlags
 ErrCode XOutBitmap::WriteGraphic( const Graphic& rGraphic, OUString& rFileName,
                                  const OUString& rFilterName, const XOutFlags 
nFlags,
                                  const Size* pMtfSize_100TH_MM,
-                                 const css::uno::Sequence< 
css::beans::PropertyValue >* pFilterData )
+                                 const css::uno::Sequence< 
css::beans::PropertyValue >* pFilterData,
+                                 OUString* pMediaType )
 {
     if( rGraphic.GetType() == GraphicType::NONE )
         return ERRCODE_NONE;
@@ -182,6 +186,7 @@ ErrCode XOutBitmap::WriteGraphic( const Graphic& rGraphic, 
OUString& rFileName,
 
             case GfxLinkType::NativeJpg: aExt = FORMAT_JPG; break;
             case GfxLinkType::NativePng: aExt = FORMAT_PNG; break;
+            case GfxLinkType::NativeTif: aExt = FORMAT_TIF; break;
             case GfxLinkType::NativeWebp: aExt = FORMAT_WEBP; break;
 
             default:
@@ -196,6 +201,9 @@ ErrCode XOutBitmap::WriteGraphic( const Graphic& rGraphic, 
OUString& rFileName,
             if( !(nFlags & XOutFlags::DontAddExtension) )
                 aURL.setExtension( aExt );
             rFileName = aURL.GetMainURL( INetURLObject::DecodeMechanism::NONE 
);
+            if (pMediaType)
+                if (uno::Reference<beans::XPropertySet> xGraphic{ 
rGraphic.GetXGraphic(), uno::UNO_QUERY })
+                    xGraphic->getPropertyValue("MimeType") >>= *pMediaType;
 
             SfxMedium   
aMedium(aURL.GetMainURL(INetURLObject::DecodeMechanism::NONE), 
StreamMode::WRITE | StreamMode::SHARE_DENYNONE | StreamMode::TRUNC);
             SvStream*   pOStm = aMedium.GetOutStream();
@@ -307,6 +315,8 @@ ErrCode XOutBitmap::WriteGraphic( const Graphic& rGraphic, 
OUString& rFileName,
             if( !(nFlags & XOutFlags::DontAddExtension) )
                 aURL.setExtension( aExt );
             rFileName = aURL.GetMainURL( INetURLObject::DecodeMechanism::NONE 
);
+            if (pMediaType)
+                *pMediaType = rFilter.GetExportFormatMediaType(nFilter);
             nErr = ExportGraphic( aGraphic, aURL, rFilter, nFilter, 
pFilterData );
         }
     }
diff --git a/sw/qa/extras/htmlexport/data/reqif-transparent-tif-img.odt 
b/sw/qa/extras/htmlexport/data/reqif-transparent-tif-img.odt
new file mode 100644
index 000000000000..278cf9ebc832
Binary files /dev/null and 
b/sw/qa/extras/htmlexport/data/reqif-transparent-tif-img.odt differ
diff --git a/sw/qa/extras/htmlexport/htmlexport.cxx 
b/sw/qa/extras/htmlexport/htmlexport.cxx
index 689e0aa48ea0..f5482ec34b5f 100644
--- a/sw/qa/extras/htmlexport/htmlexport.cxx
+++ b/sw/qa/extras/htmlexport/htmlexport.cxx
@@ -2464,6 +2464,29 @@ CPPUNIT_TEST_FIXTURE(HtmlExportTest, testTdf153923)
     assertXPath(pDoc, "/html/body//dd");
 }
 
+CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testReqIfTransparentTifImg)
+{
+    // reqIf export must keep the TIF encoding of the image
+    createSwDoc("reqif-transparent-tif-img.odt");
+    ExportToReqif();
+
+    SvMemoryStream aStream;
+    WrapReqifFromTempFile(aStream);
+    xmlDocUniquePtr pXmlDoc = parseXmlStream(&aStream);
+    assertXPath(pXmlDoc, "//reqif-xhtml:p/reqif-xhtml:object[1]", "type", 
"image/tiff");
+    OUString imageName = getXPath(pXmlDoc, 
"//reqif-xhtml:p/reqif-xhtml:object[1]", "data");
+    // Without the accompanying fix in place, this test would have failed,
+    // ending with .gif, because XOutFlags::UseGifIfSensible flag combined
+    // with the transparent image would result in GIF export
+    CPPUNIT_ASSERT(imageName.endsWith(".tif"));
+
+    INetURLObject aURL(maTempFile.GetURL());
+    aURL.setName(imageName);
+    GraphicDescriptor aDescriptor(aURL);
+    aDescriptor.Detect();
+    CPPUNIT_ASSERT_EQUAL(GraphicFileFormat::TIF, aDescriptor.GetFileFormat());
+}
+
 CPPUNIT_PLUGIN_IMPLEMENT();
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/filter/html/htmlflywriter.cxx 
b/sw/source/filter/html/htmlflywriter.cxx
index 2cf3c6894ec1..d00fd94e33ee 100644
--- a/sw/source/filter/html/htmlflywriter.cxx
+++ b/sw/source/filter/html/htmlflywriter.cxx
@@ -1967,18 +1967,21 @@ static Writer& OutHTML_FrameFormatGrfNode( Writer& 
rWrt, const SwFrameFormat& rF
             Size aMM100Size = o3tl::convert( rSize.GetSize(),
                             o3tl::Length::twip, o3tl::Length::mm100 );
 
-            OUString aFilterName("");
+            OUString aFilterName;
 
-            if (rHTMLWrt.mbReqIF && !bWritePNGFallback)
+            if (rHTMLWrt.mbReqIF)
             {
-                // Writing image without fallback PNG in ReqIF mode: force PNG
-                // output.
-                // But don't force it when writing the original format and 
we'll write PNG inside
-                // that.
-                aFilterName = "PNG";
-                nFlags &= ~XOutFlags::UseNativeIfPossible;
+                // In ReqIF mode, do not try to write GIF for other image types
                 nFlags &= ~XOutFlags::UseGifIfSensible;
-                aMimeType = "image/png";
+                if (!bWritePNGFallback)
+                {
+                    // Writing image without fallback PNG in ReqIF mode: force 
PNG
+                    // output.
+                    // But don't force it when writing the original format and 
we'll write PNG inside
+                    // that.
+                    aFilterName = "PNG";
+                    nFlags &= ~XOutFlags::UseNativeIfPossible;
+                }
             }
 
             const Graphic& rGraphic = pGrfNd->GetGrf();
@@ -1987,6 +1990,8 @@ static Writer& OutHTML_FrameFormatGrfNode( Writer& rWrt, 
const SwFrameFormat& rF
             if (!rGraphic.isAvailable())
                 const_cast<Graphic&>(rGraphic).makeAvailable();
 
+            OUString aMimeTypeOverride;
+
             if (rHTMLWrt.mbReqIF && bWritePNGFallback)
             {
                 // ReqIF: force native data if possible.
@@ -1998,7 +2003,7 @@ static Writer& OutHTML_FrameFormatGrfNode( Writer& rWrt, 
const SwFrameFormat& rF
                 else if (rGraphic.GetGfxLink().IsEMF())
                 {
                     aFilterName = "emf";
-                    aMimeType = "image/x-emf"; // avoid image/x-wmf
+                    aMimeTypeOverride = "image/x-emf"; // avoid image/x-wmf
                 }
                 else if (pVectorGraphicData && pVectorGraphicData->getType() 
== VectorGraphicDataType::Wmf)
                 {
@@ -2007,12 +2012,12 @@ static Writer& OutHTML_FrameFormatGrfNode( Writer& 
rWrt, const SwFrameFormat& rF
                 else if (rGraphic.GetGfxLink().GetType() == 
GfxLinkType::NativeTif)
                 {
                     aFilterName = "tif";
-                    aMimeType = "image/tiff"; // avoid image/x-vclgraphic
+                    aMimeTypeOverride = "image/tiff"; // avoid 
image/x-vclgraphic
                 }
             }
 
             ErrCode nErr = XOutBitmap::WriteGraphic( rGraphic, aGraphicURL,
-                    aFilterName, nFlags, &aMM100Size );
+                    aFilterName, nFlags, &aMM100Size, nullptr, &aMimeType );
             if( nErr )
             {
                 rHTMLWrt.m_nWarn = WARN_SWG_POOR_LOAD;
@@ -2021,6 +2026,8 @@ static Writer& OutHTML_FrameFormatGrfNode( Writer& rWrt, 
const SwFrameFormat& rF
             aGraphicURL = URIHelper::SmartRel2Abs(
                 INetURLObject(rWrt.GetBaseURL()), aGraphicURL,
                 URIHelper::GetMaybeFileHdl() );
+            if (!aMimeTypeOverride.isEmpty())
+                aMimeType = aMimeTypeOverride;
         }
         else
         {
commit 4658f4233d65007a53aa351f4123ad278a5ac91b
Author:     Michael Weghorn <m.wegh...@posteo.de>
AuthorDate: Sat Apr 1 20:08:13 2023 +0300
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Thu Apr 27 23:18:16 2023 +0200

    tdf#152979 qt: Re-add workaround for X11 modality change w/ hide/show
    
    Essentially add back the workaround originally added in
    
        commit e770bacc85a0eec96de77068d61b03f374b3cdec
        Date:   Sun Jun 2 21:01:33 2019 +0000
    
            Qt5 workaround modal change after show bug
    
    but then dropped again in
    
        commit 2dc6bdd1d5789ace0500cad90f5d2eb930888bb9
        Date:   Wed Jun 5 17:39:45 2019 +0000
    
            tdf#125692 SalObject always holds a SystemChildWindow
    
    , since it turns out that it is still needed for other
    use cases than the original one from tdf#125692, as the freeze
    of the basic IDE dialog dialog preview described in tdf#152979.
    
    The
    
        qt.qpa.xcb: internal error:  void 
QXcbWindow::setNetWmStateOnUnmappedWindow() called on mapped window
    
    issue mentioned there is apparently also worked around in
    upstream Qt tests, s. this qtbase commit [1]:
    
        commit 3714e51436eebb64873c58dc36cf89ef8f139f09
        Author: Volker Hilsheimer <volker.hilshei...@qt.io>
        Date:   Mon Sep 20 13:44:26 2021 +0200
    
            QWidgetWindow: Stabilize test on Xcb
    
            Showing, hiding, and showing a window can result in the Xcb QPA 
plugin
            warning about
    
            qt.qpa.xcb: internal error:  void 
QXcbWindow::setNetWmStateOnUnmappedWindow()
            called on mapped window
    
            The point of the test is to verify that we get a paint event on a 
window
            that is shown again after having been hidden, not to verify that 
async
            windowing systems can handle a show/hide/show sequence. So wait for 
the
            window being exposed before we hide it.
    
            Pick-to: 6.2 5.15
            Change-Id: If91a9926613645e78e332dacff34bd57e4034b6f
            Reviewed-by: Tor Arne Vestbø <tor.arne.ves...@qt.io>
    
    Decrease the sleep from the original 250 ms to 100 ms,
    since tdf#152979 comment 14 mentions that this is enough.
    
    [1] 
https://code.qt.io/cgit/qt/qtbase.git/commit/?id=3714e51436eebb64873c58dc36cf89ef8f139f09
    
    Change-Id: I57ed520d0df85b7a3bcf47c2f9314754649482ee
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149912
    Tested-by: Jenkins
    Reviewed-by: Rafael Lima <rafael.palma.l...@gmail.com>
    (cherry picked from commit 574a5519e23e8ed50c54fb27587afb1b5b5c13c5)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149883
    Reviewed-by: Caolán McNamara <caol...@redhat.com>

diff --git a/vcl/qt5/QtFrame.cxx b/vcl/qt5/QtFrame.cxx
index 5517584b72d7..e580ea5df206 100644
--- a/vcl/qt5/QtFrame.cxx
+++ b/vcl/qt5/QtFrame.cxx
@@ -621,7 +621,16 @@ void QtFrame::SetModal(bool bModal)
 
         // modality change is only effective if the window is hidden
         if (bWasVisible)
+        {
             pChild->hide();
+            if (QGuiApplication::platformName() == "xcb")
+            {
+                SAL_WARN("vcl.qt", "SetModal called after Show - apply delay");
+                // tdf#152979 give QXcbConnection some time to avoid
+                // "qt.qpa.xcb: internal error:  void 
QXcbWindow::setNetWmStateOnUnmappedWindow() called on mapped window"
+                QThread::msleep(100);
+            }
+        }
 
         pChild->setWindowModality(bModal ? Qt::WindowModal : Qt::NonModal);
 
commit fe65df16c2fa60dd7c9bb82d8ddeffaaf7ec1133
Author:     László Németh <nem...@numbertext.org>
AuthorDate: Sat Apr 1 21:40:49 2023 +0200
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Thu Apr 27 23:18:15 2023 +0200

    tdf#154545 sw Navigator: select & track nested bookmarks
    
    After selecting a nested bookmark in the Navigator with
    double click or Enter, the selected item changed to the
    item of the main bookmark in the tree list. This jumping
    was very annoying especially with multiple nested bookmarks
    inside the same bookmark.
    
    Navigator didn't track nested bookmarks, i.e. it always
    showed the main bookmark instead of the actual nested one
    under the text cursor.
    
    Change-Id: Ic3f1e8321454d4ad892708e76c001da6eca30cf9
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149915
    Tested-by: Jenkins
    Reviewed-by: László Németh <nem...@numbertext.org>
    (cherry picked from commit c4a58634753a84b09f20f7271d6525a6656522d3)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149887

diff --git a/sw/qa/uitest/navigator/tdf154521.py 
b/sw/qa/uitest/navigator/tdf154521.py
index 0dca50379fab..ac3c21de3c56 100644
--- a/sw/qa/uitest/navigator/tdf154521.py
+++ b/sw/qa/uitest/navigator/tdf154521.py
@@ -38,12 +38,6 @@ class tdf154521(UITestCase):
         global selectionChangedResult
         with self.ui_test.create_doc_in_start_center("writer") as xDoc:
 
-            # type "foo", and create a bookmark on it
-
-            self.xUITest.executeCommand(".uno:Escape")
-
-            # click on the bookmark name in the Navigator
-
             xWriterDoc = self.xUITest.getTopFocusWindow()
             xWriterEdit = xWriterDoc.getChild("writer_edit")
 
@@ -54,6 +48,10 @@ class tdf154521(UITestCase):
             xToolBar = xNavigatorPanel.getChild("content5")
             xToolBar.executeAction("CLICK", mkPropertyValues({"POS": "0"})) # 
'root' button
 
+            # type "foo", and create a bookmark on it
+
+            self.xUITest.executeCommand(".uno:Escape")
+
             xDoc.Text.insertString(xDoc.Text.getStart(), "foo", False)
             self.xUITest.executeCommand(".uno:SelectAll")
 
diff --git a/sw/qa/uitest/navigator/tdf154545.py 
b/sw/qa/uitest/navigator/tdf154545.py
new file mode 100644
index 000000000000..718f6894a588
--- /dev/null
+++ b/sw/qa/uitest/navigator/tdf154545.py
@@ -0,0 +1,98 @@
+# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-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/.
+#
+
+from uitest.framework import UITestCase
+from libreoffice.uno.propertyvalue import mkPropertyValues
+from uitest.uihelper.common import get_state_as_dict
+import unohelper
+
+class tdf154545(UITestCase):
+
+    def test_tdf154545(self):
+        global selectionChangedResult
+        with self.ui_test.create_doc_in_start_center("writer") as xDoc:
+
+            # click on the bookmark name in the Navigator
+
+            xWriterDoc = self.xUITest.getTopFocusWindow()
+            xWriterEdit = xWriterDoc.getChild("writer_edit")
+
+            self.xUITest.executeCommand(".uno:Sidebar")
+            xWriterEdit.executeAction("SIDEBAR", mkPropertyValues({"PANEL": 
"SwNavigatorPanel"}))
+
+            xNavigatorPanel = xWriterEdit.getChild("NavigatorPanel")
+            xToolBar = xNavigatorPanel.getChild("content5")
+            xToolBar.executeAction("CLICK", mkPropertyValues({"POS": "0"})) # 
'root' button
+
+            # type "foo", and create a bookmark on it
+
+            xDoc.Text.insertString(xDoc.Text.getStart(), "foo", False)
+            self.xUITest.executeCommand(".uno:SelectAll")
+
+            with 
self.ui_test.execute_dialog_through_command(".uno:InsertBookmark", 
close_button="insert"):
+                pass
+
+            # check selected bookmark in Navigator
+
+            xWriterEdit.executeAction("FOCUS", tuple())
+
+            xContentTree = xNavigatorPanel.getChild("contenttree")
+
+            self.ui_test.wait_until_property_is_updated(xContentTree, 
"SelectEntryText", "Bookmark 1")
+            
self.assertEqual(get_state_as_dict(xContentTree)["SelectEntryText"], "Bookmark 
1")
+            
self.assertEqual(get_state_as_dict(xContentTree)["SelectionCount"], "1")
+
+            self.xUITest.executeCommand(".uno:Escape")
+
+            # create a nested bookmark on the last "o"
+
+            cursor = xDoc.getCurrentController().getViewCursor()
+            cursor.goLeft(1, True)
+
+            with 
self.ui_test.execute_dialog_through_command(".uno:InsertBookmark", 
close_button="insert"):
+                pass
+
+            self.xUITest.executeCommand(".uno:Escape")
+
+            # check selected nested bookmark in Navigator
+
+            # This never occured: Navigator didn't track nested bookmarks
+            self.ui_test.wait_until_property_is_updated(xContentTree, 
"SelectEntryText", "Bookmark 2")
+            # This was Bookmark 1
+            
self.assertEqual(get_state_as_dict(xContentTree)["SelectEntryText"], "Bookmark 
2")
+            
self.assertEqual(get_state_as_dict(xContentTree)["SelectionCount"], "1")
+
+            # Select nested bookmark in Navigator
+
+            xContentTree.executeAction("TYPE", mkPropertyValues({"KEYCODE": 
"RETURN"}))
+
+            # This jumped to Bookmark 1 after selection
+            self.ui_test.wait_until_property_is_updated(xContentTree, 
"SelectEntryText", "Bookmark 2")
+            # This was Bookmark 1
+            
self.assertEqual(get_state_as_dict(xContentTree)["SelectEntryText"], "Bookmark 
2")
+            
self.assertEqual(get_state_as_dict(xContentTree)["SelectionCount"], "1")
+
+            # Try the same selection with Bookmark 1
+            xContentTree.executeAction("TYPE", mkPropertyValues({"KEYCODE": 
"UP"}))
+            self.ui_test.wait_until_property_is_updated(xContentTree, 
"SelectEntryText", "Bookmark 1")
+            
self.assertEqual(get_state_as_dict(xContentTree)["SelectEntryText"], "Bookmark 
1")
+            
self.assertEqual(get_state_as_dict(xContentTree)["SelectionCount"], "1")
+            xContentTree.executeAction("TYPE", mkPropertyValues({"KEYCODE": 
"RETURN"}))
+            self.ui_test.wait_until_property_is_updated(xContentTree, 
"SelectEntryText", "Bookmark 1")
+            
self.assertEqual(get_state_as_dict(xContentTree)["SelectEntryText"], "Bookmark 
1")
+            
self.assertEqual(get_state_as_dict(xContentTree)["SelectionCount"], "1")
+
+            # go to the previous item
+            xContentTree.executeAction("TYPE", mkPropertyValues({"KEYCODE": 
"UP"}))
+            self.ui_test.wait_until_property_is_updated(xContentTree, 
"SelectEntryText", "Bookmarks")
+            
self.assertEqual(get_state_as_dict(xContentTree)["SelectEntryText"], 
"Bookmarks")
+
+            self.xUITest.executeCommand(".uno:Sidebar")
+
+# vim: set shiftwidth=4 softtabstop=4 expandtab:
diff --git a/sw/source/uibase/inc/conttree.hxx 
b/sw/source/uibase/inc/conttree.hxx
index b4f352bb6950..ec0dbc7c84e8 100644
--- a/sw/source/uibase/inc/conttree.hxx
+++ b/sw/source/uibase/inc/conttree.hxx
@@ -100,6 +100,7 @@ class SwContentTree final : public SfxListener
     o3tl::enumarray<ContentTypeId,std::unique_ptr<SwContentType>>  
m_aHiddenContentArr;
     OUString            m_aContextStrings[CONTEXT_COUNT + 1];
     OUString            m_sInvisible;
+    OUString            m_sSelectedItem;  // last selected item (only 
bookmarks yet)
 
     SwWrtShell*         m_pHiddenShell;   // dropped Doc
     SwWrtShell*         m_pActiveShell;   // the active or a const. open view
diff --git a/sw/source/uibase/utlui/content.cxx 
b/sw/source/uibase/utlui/content.cxx
index 355f0acab87b..c54ec983d157 100644
--- a/sw/source/uibase/utlui/content.cxx
+++ b/sw/source/uibase/utlui/content.cxx
@@ -3890,6 +3890,7 @@ void SwContentTree::UpdateTracking()
             if (pCursor && ppBookmark != pMarkAccess->getBookmarksEnd() &&
                     !(m_bIsRoot && m_nRootType != ContentTypeId::BOOKMARK))
             {
+                OUString sBookmarkName;
                 SwPosition* pCursorPoint = pCursor->GetPoint();
                 while (ppBookmark != pMarkAccess->getBookmarksEnd())
                 {
@@ -3897,13 +3898,32 @@ void SwContentTree::UpdateTracking()
                             *pCursorPoint >= (*ppBookmark)->GetMarkStart() &&
                             *pCursorPoint <= (*ppBookmark)->GetMarkEnd())
                     {
-                        lcl_SelectByContentTypeAndName(this, *m_xTreeView,
-                                                       
SwResId(STR_CONTENT_TYPE_BOOKMARK),
-                                                       
(*ppBookmark)->GetName());
-                        return;
+                        sBookmarkName = (*ppBookmark)->GetName();
+                        // keep previously selected bookmark instead
+                        // of selecting a different bookmark inside of it
+                        if (sBookmarkName == m_sSelectedItem)
+                            break;
+                    }
+                    else if (!sBookmarkName.isEmpty() &&
+                        *pCursorPoint < (*ppBookmark)->GetMarkStart())
+                    {
+                        // don't search a different bookmark inside the
+                        // previous one, if the starting position of the next 
bookmarks
+                        // is after the cursor position (assuming that the
+                        // bookmark iterator jumps inside the same text by 
positions)
+                        break;
                     }
                     ++ppBookmark;
                 }
+
+                if (!sBookmarkName.isEmpty())
+                {
+                    // select the bookmark
+                    lcl_SelectByContentTypeAndName(this, *m_xTreeView,
+                                                       
SwResId(STR_CONTENT_TYPE_BOOKMARK),
+                                                       sBookmarkName);
+                    return;
+                }
             }
         }
         // references
@@ -5315,6 +5335,7 @@ void SwContentTree::CopyOutlineSelections()
 void SwContentTree::GotoContent(const SwContent* pCnt)
 {
     m_nLastGotoContentWasOutlinePos = SwOutlineNodes::npos;
+    m_sSelectedItem = "";
     lcl_AssureStdModeAtShell(m_pActiveShell);
     switch(m_nLastSelType = pCnt->GetParent()->GetType())
     {
@@ -5349,6 +5370,7 @@ void SwContentTree::GotoContent(const SwContent* pCnt)
             m_pActiveShell->StartAction();
             m_pActiveShell->GotoMark(pCnt->GetName());
             m_pActiveShell->EndAction();
+            m_sSelectedItem = pCnt->GetName();
         }
         break;
         case ContentTypeId::REGION    :
commit b483caf8a8b441ef10ffa4a0b4f7293daadb1d0e
Author:     Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de>
AuthorDate: Mon Mar 6 17:00:10 2023 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Thu Apr 27 23:17:48 2023 +0200

    Always update fields when loading document
    
    to make sure that table formulas are re-evaluated after loading.
    
    When a document has a wrong sum saved (which seems to happen sometimes),
    this sum is used until user clicks into the table or otherwise
    refreshes the formula.
    
    Change-Id: I5cc3f983524b395089c17aa35d8641847a388bad
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/148355
    Tested-by: Jenkins
    Reviewed-by: Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de>
    (cherry picked from commit c132a1abd57c109331191c3b3fbd14e1c5e46631)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/148957
    Reviewed-by: Miklos Vajna <vmik...@collabora.com>

diff --git a/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx 
b/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx
index e412c8249a65..8f95aa43e8b9 100644
--- a/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx
+++ b/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx
@@ -273,12 +273,7 @@ CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, 
testOnlineNodeSplitAppend)
 
     Scheduler::ProcessEventsToIdle();
 
-    CPPUNIT_ASSERT_EQUAL(sal_Int32(0),
-                         
pDoc->getOnlineAccessibilityCheck()->getNumberOfAccessibilityIssues());
-    // Trigger a11y checker
-    pWrtShell->Down(/*bSelect*/ false, /*nCount*/ 0);
-
-    // Check we have 1 a11y issue
+    // Check we have 2 a11y issue
     CPPUNIT_ASSERT_EQUAL(sal_Int32(2),
                          
pDoc->getOnlineAccessibilityCheck()->getNumberOfAccessibilityIssues());
     auto aIssues = scanAccessibilityIssuesOnNodes(pDoc);
diff --git a/sw/qa/extras/odfimport/data/incorrectsum.odt 
b/sw/qa/extras/odfimport/data/incorrectsum.odt
new file mode 100644
index 000000000000..0e1e99b0d699
Binary files /dev/null and b/sw/qa/extras/odfimport/data/incorrectsum.odt differ
diff --git a/sw/qa/extras/odfimport/odfimport.cxx 
b/sw/qa/extras/odfimport/odfimport.cxx
index 6c8e5ec8230f..4e87edc309dc 100644
--- a/sw/qa/extras/odfimport/odfimport.cxx
+++ b/sw/qa/extras/odfimport/odfimport.cxx
@@ -44,6 +44,7 @@
 
 #include <comphelper/propertysequence.hxx>
 #include <editeng/boxitem.hxx>
+#include <vcl/scheduler.hxx>
 
 #include <IDocumentSettingAccess.hxx>
 #include <wrtsh.hxx>
@@ -587,6 +588,18 @@ CPPUNIT_TEST_FIXTURE(Test, testFdo56272)
     CPPUNIT_ASSERT_EQUAL(sal_Int32(422), xShape->getPosition().Y); // Was -2371
 }
 
+CPPUNIT_TEST_FIXTURE(Test, testIncorrectSum)
+{
+    createSwDoc("incorrectsum.odt");
+    Scheduler::ProcessEventsToIdle();
+    uno::Reference<text::XTextTablesSupplier> xTablesSupplier(mxComponent, 
uno::UNO_QUERY);
+    uno::Reference<container::XIndexAccess> 
xTables(xTablesSupplier->getTextTables( ), uno::UNO_QUERY);
+    uno::Reference<text::XTextTable> xTextTable(xTables->getByIndex(0), 
uno::UNO_QUERY);
+    uno::Reference<text::XTextRange> xCell(xTextTable->getCellByName("C3"), 
uno::UNO_QUERY);
+    // Use indexOf instead of exact match since the result contains an Euro 
sign which OUString doesn't like
+    CPPUNIT_ASSERT_EQUAL(sal_Int32(0), xCell->getString().indexOf("1,278"));
+}
+
 CPPUNIT_TEST_FIXTURE(Test, testTdf128737)
 {
     createSwDoc("tdf128737.odt");
diff --git a/sw/source/filter/basflt/shellio.cxx 
b/sw/source/filter/basflt/shellio.cxx
index 3157943dcceb..c4bdc52c7590 100644
--- a/sw/source/filter/basflt/shellio.cxx
+++ b/sw/source/filter/basflt/shellio.cxx
@@ -383,7 +383,7 @@ ErrCode SwReader::Read( const Reader& rOptions )
         // not insert: set the redline mode read from settings.xml
         eOld = ePostReadRedlineFlags & ~RedlineFlags::Ignore;
 
-        mxDoc->getIDocumentFieldsAccess().SetFieldsDirty(false, nullptr, 
SwNodeOffset(0));
+        mxDoc->getIDocumentFieldsAccess().SetFieldsDirty(true, nullptr, 
SwNodeOffset(0));
     }
 
     mxDoc->getIDocumentRedlineAccess().SetRedlineFlags_intern( eOld );
commit 925525d65466ae7be23d3d600bc379781b8905a5
Author:     Sarper Akdemir <sarper.akde...@collabora.com>
AuthorDate: Fri Apr 7 13:32:49 2023 +0300
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Thu Apr 27 23:16:45 2023 +0200

    xmloff: ODF import/export for style:overflow-behavior "clip"
    
    Adds initial support for style:overflow-behavior
    
    According to OpenDocument-v1.3-part3 style:overflow-behavior can take
    values of:
    - "clip"
    - "auto-create-new-frame"
    
    This patch doesn't properly implement support "auto-create-new-frame",
    only "clip".
    
    If "clip" is set, TextClipVerticalOverflow is set to true, causing the
    vertical overflowing text to be clipped.
    
    "auto-create-new-frame" is treated the same as omitting the
    style:overflow-behavior attribute, setting TextClipVerticalOverflow to
    false.
    
    Change-Id: Iea298f41fbf0cf18dc07f41788ba0b665515db8b
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150122
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>

diff --git a/include/xmloff/xmltoken.hxx b/include/xmloff/xmltoken.hxx
index af0939a8568a..84c3b2c5d3e9 100644
--- a/include/xmloff/xmltoken.hxx
+++ b/include/xmloff/xmltoken.hxx
@@ -287,6 +287,7 @@ namespace xmloff::token {
         XML_AUTHOR_NAME,
         XML_AUTO,
         XML_AUTO_COMPLETE,
+        XML_AUTO_CREATE_NEW_FRAME,
         XML_AUTO_GROW_HEIGHT,
         XML_AUTO_GROW_WIDTH,
         XML_AUTO_RELOAD,
@@ -1455,6 +1456,7 @@ namespace xmloff::token {
         XML_OUTLINE_STYLE,
         XML_OUTSET,
         XML_OUTSIDE,
+        XML_OVERFLOW_BEHAVIOR,
         XML_OVERLAP,
         XML_OVERLAY,
         XML_P,
diff --git a/include/xmloff/xmltypes.hxx b/include/xmloff/xmltypes.hxx
index 13e7c3fcc6c0..4dbf2081db1b 100644
--- a/include/xmloff/xmltypes.hxx
+++ b/include/xmloff/xmltypes.hxx
@@ -277,6 +277,7 @@
 #define XML_TYPE_TEXT_OVERLINE_COLOR    (XML_TEXT_TYPES_START + 112)
 #define XML_TYPE_TEXT_OVERLINE_HASCOLOR (XML_TEXT_TYPES_START + 113)
 #define XML_TYPE_BOOL_FALSE             (XML_TEXT_TYPES_START + 114)
+#define XML_TYPE_TEXT_OVERFLOW_BEHAVIOR (XML_TEXT_TYPES_START + 115)
 
 #define XML_TYPE_CHAR_SCRIPT            (XML_TEXT_TYPES_START + 116)
 #define XML_TYPE_CHAR_RFC_LANGUAGE_TAG  (XML_TEXT_TYPES_START + 117)
diff --git a/sd/qa/unit/data/odp/style-overflow-behavior-clip.fodp 
b/sd/qa/unit/data/odp/style-overflow-behavior-clip.fodp
new file mode 100644
index 000000000000..29baf838f724
--- /dev/null
+++ b/sd/qa/unit/data/odp/style-overflow-behavior-clip.fodp
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<office:document xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" 
xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" 
xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0"
 xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" 
xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" 
xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" 
office:version="1.3" 
office:mimetype="application/vnd.oasis.opendocument.presentation">
+ <office:automatic-styles>
+  <style:style style:name="gr1" style:family="graphic">
+   <style:graphic-properties style:overflow-behavior="clip"/>
+  </style:style>
+ </office:automatic-styles>
+ <office:body>
+  <office:presentation>
+   <draw:page>
+    <draw:rect draw:style-name="gr1" svg:width="25cm" svg:height="1cm" 
svg:x="1cm" svg:y="1cm">
+      <text:p>First line that is not clipped.</text:p>
+      <text:p>Second line that is clipped - but still shows up when 
editing</text:p>
+    </draw:rect>
+   </draw:page>
+  </office:presentation>
+ </office:body>
+</office:document>
diff --git a/sd/qa/unit/import-tests2.cxx b/sd/qa/unit/import-tests2.cxx
index 4467c5f81381..874d5a5cb436 100644
--- a/sd/qa/unit/import-tests2.cxx
+++ b/sd/qa/unit/import-tests2.cxx
@@ -146,6 +146,7 @@ public:
     void testTdf151547TransparentWhiteText();
     void testTdf149961AutofitIndentation();
     void testTdf149588TransparentSolidFill();
+    void testOverflowBehaviorClip();
 
     CPPUNIT_TEST_SUITE(SdImportTest2);
 
@@ -225,6 +226,7 @@ public:
     CPPUNIT_TEST(testTdf151547TransparentWhiteText);
     CPPUNIT_TEST(testTdf149961AutofitIndentation);
     CPPUNIT_TEST(testTdf149588TransparentSolidFill);
+    CPPUNIT_TEST(testOverflowBehaviorClip);
 
     CPPUNIT_TEST_SUITE_END();
 };
@@ -2029,8 +2031,27 @@ void SdImportTest2::testTdf149588TransparentSolidFill()
     CPPUNIT_ASSERT_EQUAL(Color(ColorTransparency, 0xCC636363), nCharColor);
 }
 
-CPPUNIT_TEST_SUITE_REGISTRATION(SdImportTest2);
+void SdImportTest2::testOverflowBehaviorClip()
+{
+    createSdImpressDoc("odp/style-overflow-behavior-clip.fodp");
+    {
+        uno::Reference<beans::XPropertySet> xPropSet(getShapeFromPage(0, 0));
+        // Without the accompanying fix in place, this test would have failed 
with:
+        // - Expected: 1
+        // - Actual  : 0
+        CPPUNIT_ASSERT_EQUAL(true,
+                             
xPropSet->getPropertyValue("TextClipVerticalOverflow").get<bool>());
+    }
 
+    saveAndReload("impress8");
+    {
+        uno::Reference<beans::XPropertySet> xPropSet(getShapeFromPage(0, 0));
+        CPPUNIT_ASSERT_EQUAL(true,
+                             
xPropSet->getPropertyValue("TextClipVerticalOverflow").get<bool>());
+    }
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(SdImportTest2);
 CPPUNIT_PLUGIN_IMPLEMENT();
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/xmloff/inc/xmlprop.hxx b/xmloff/inc/xmlprop.hxx
index 3b2cd86816bc..b93bf926e569 100644
--- a/xmloff/inc/xmlprop.hxx
+++ b/xmloff/inc/xmlprop.hxx
@@ -611,6 +611,7 @@ inline constexpr OUStringLiteral PROP_TextAutoGrowWidth = 
u"TextAutoGrowWidth";
 inline constexpr OUStringLiteral PROP_TextBreak = u"TextBreak";
 inline constexpr OUStringLiteral PROP_TextCanOverlap = u"TextCanOverlap";
 inline constexpr OUStringLiteral PROP_TextChainNextName = u"TextChainNextName";
+inline constexpr OUStringLiteral PROP_TextClipVerticalOverflow = 
u"TextClipVerticalOverflow";
 inline constexpr OUStringLiteral PROP_TextColor = u"TextColor";
 inline constexpr OUStringLiteral PROP_TextColumns = u"TextColumns";
 inline constexpr OUStringLiteral PROP_TextContourFrame = u"TextContourFrame";
diff --git a/xmloff/source/core/xmltoken.cxx b/xmloff/source/core/xmltoken.cxx
index ebfaaef97dee..75dc00177665 100644
--- a/xmloff/source/core/xmltoken.cxx
+++ b/xmloff/source/core/xmltoken.cxx
@@ -299,6 +299,7 @@ namespace xmloff::token {
         TOKEN( "author-name",                     XML_AUTHOR_NAME ),
         TOKEN( "auto",                            XML_AUTO ),
         TOKEN( "auto-complete",                   XML_AUTO_COMPLETE ),
+        TOKEN( "auto-create-new-frame",           XML_AUTO_CREATE_NEW_FRAME ),
         TOKEN( "auto-grow-height",                XML_AUTO_GROW_HEIGHT ),
         TOKEN( "auto-grow-width",                 XML_AUTO_GROW_WIDTH ),
         TOKEN( "auto-reload",                     XML_AUTO_RELOAD ),
@@ -1468,6 +1469,7 @@ namespace xmloff::token {
         TOKEN( "outline-style",                   XML_OUTLINE_STYLE ),
         TOKEN( "outset",                          XML_OUTSET ),
         TOKEN( "outside",                         XML_OUTSIDE ),
+        TOKEN( "overflow-behavior",               XML_OVERFLOW_BEHAVIOR ),
         TOKEN( "overlap",                         XML_OVERLAP ),
         TOKEN( "overlay",                         XML_OVERLAY ),
         TOKEN( "p",                               XML_P ),
diff --git a/xmloff/source/draw/sdpropls.cxx b/xmloff/source/draw/sdpropls.cxx
index 278e0c2bc179..6d0553173c7a 100644
--- a/xmloff/source/draw/sdpropls.cxx
+++ b/xmloff/source/draw/sdpropls.cxx
@@ -150,6 +150,7 @@ const XMLPropertyMapEntry aXMLSDProperties[] =
     GMAP( PROP_NumberingRules,                 XML_NAMESPACE_TEXT, 
XML_LIST_STYLE_NAME,        XML_TYPE_STRING, CTF_SD_NUMBERINGRULES_NAME ),
     GMAP( PROP_TextWordWrap,                   XML_NAMESPACE_FO,   
XML_WRAP_OPTION,            XML_TYPE_WRAP_OPTION, 0 ),
     GMAP( PROP_TextChainNextName,              XML_NAMESPACE_DRAW,   
XML_CHAIN_NEXT_NAME,      XML_TYPE_STRING, 0 ),
+    GMAP( PROP_TextClipVerticalOverflow,       XML_NAMESPACE_STYLE, 
XML_OVERFLOW_BEHAVIOR,     XML_TYPE_TEXT_OVERFLOW_BEHAVIOR, 0 ),
 
     GMAP( PROP_TextColumns,                    XML_NAMESPACE_STYLE, 
XML_COLUMNS, XML_TYPE_TEXT_COLUMNS|MID_FLAG_ELEMENT_ITEM, CTF_TEXTCOLUMNS ),
 
diff --git a/xmloff/source/style/prhdlfac.cxx b/xmloff/source/style/prhdlfac.cxx
index 3b8cbe371000..5ff7172834e4 100644
--- a/xmloff/source/style/prhdlfac.cxx
+++ b/xmloff/source/style/prhdlfac.cxx
@@ -469,6 +469,11 @@ std::unique_ptr<XMLPropertyHandler> 
XMLPropertyHandlerFactory::CreatePropertyHan
         case XML_TYPE_TEXT_VERTICAL_POS:
             pPropHdl.reset(new XMLConstantsPropertyHandler( pXML_VertPos_Enum, 
XML_TOKEN_INVALID ));
         break;
+        case XML_TYPE_TEXT_OVERFLOW_BEHAVIOR:
+            // auto-create-new-frame isn't properly implemented yet. It just 
means don't clip.
+            pPropHdl.reset(new XMLNamedBoolPropertyHdl(GetXMLToken(XML_CLIP),
+                                                       
GetXMLToken(XML_AUTO_CREATE_NEW_FRAME)));
+            break;
 
     }
 
diff --git a/xmloff/source/token/tokens.txt b/xmloff/source/token/tokens.txt
index f4b46572e748..1657466dfe80 100644
--- a/xmloff/source/token/tokens.txt
+++ b/xmloff/source/token/tokens.txt
@@ -204,6 +204,7 @@ author-initials
 author-name
 auto
 auto-complete
+auto-create-new-frame
 auto-grow-height
 auto-grow-width
 auto-reload
@@ -1368,6 +1369,7 @@ outline-level-style
 outline-style
 outset
 outside
+overflow-behavior
 overlap
 overlay
 p
commit bd87b6a1b784c26d39a36ff54336c9caf08aec7c
Author:     Sarper Akdemir <sarper.akde...@collabora.com>
AuthorDate: Thu Apr 6 13:01:02 2023 +0300
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Thu Apr 27 23:16:45 2023 +0200

    pptx import/export: consider TextClipVerticalOverflow for vertOverflow
    
    Also adds a unit test that tests TextClipVerticalOverflow on
    4 different scenarios.
    
    Change-Id: I6232935765641c796046d90fe2207d67ae4b3eb5
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150107
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>

diff --git a/oox/inc/drawingml/textbodyproperties.hxx 
b/oox/inc/drawingml/textbodyproperties.hxx
index 1daa5d592a30..d935f940638d 100644
--- a/oox/inc/drawingml/textbodyproperties.hxx
+++ b/oox/inc/drawingml/textbodyproperties.hxx
@@ -51,7 +51,7 @@ struct TextBodyProperties
     /// Normal autofit: font scale (default: 100%).
     sal_Int32 mnFontScale = 100000;
     OUString msHorzOverflow;
-    OUString msVertOverflow;
+    std::optional< sal_Int32 > moVertOverflow{};
 
     std::array<std::optional<sal_Int32>, 4> maTextDistanceValues;
 
diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx
index a057a8a93f3d..113c55a1770a 100644
--- a/oox/source/drawingml/shape.cxx
+++ b/oox/source/drawingml/shape.cxx
@@ -1910,9 +1910,8 @@ Reference< XShape > const & Shape::createAndInsert(
                 auto sHorzOverflow = 
getTextBody()->getTextProperties().msHorzOverflow;
                 if (!sHorzOverflow.isEmpty())
                     putPropertyToGrabBag("horzOverflow", 
uno::Any(getTextBody()->getTextProperties().msHorzOverflow));
-                auto nVertOverflow = 
getTextBody()->getTextProperties().msVertOverflow;
-                if (!nVertOverflow.isEmpty())
-                    putPropertyToGrabBag("vertOverflow", 
uno::Any(getTextBody()->getTextProperties().msVertOverflow));
+                if (XML_ellipsis == 
getTextBody()->getTextProperties().moVertOverflow)
+                    putPropertyToGrabBag("vertOverflow", 
uno::Any(OUString{"ellipsis"}));
             }
 
             // Note that the script 
oox/source/drawingml/customshapes/generatePresetsData.pl looks
diff --git a/oox/source/drawingml/textbodypropertiescontext.cxx 
b/oox/source/drawingml/textbodypropertiescontext.cxx
index 47ef04797c93..46576c069c8e 100644
--- a/oox/source/drawingml/textbodypropertiescontext.cxx
+++ b/oox/source/drawingml/textbodypropertiescontext.cxx
@@ -83,7 +83,19 @@ TextBodyPropertiesContext::TextBodyPropertiesContext( 
ContextHandler2Helper cons
   // ST_TextHorzOverflowType
     mrTextBodyProp.msHorzOverflow = 
rAttribs.getStringDefaulted(XML_horzOverflow);
     // ST_TextVertOverflowType
-    mrTextBodyProp.msVertOverflow = 
rAttribs.getStringDefaulted(XML_vertOverflow);
+    if( rAttribs.hasAttribute(XML_vertOverflow) )
+    {
+        mrTextBodyProp.moVertOverflow = rAttribs.getToken(XML_vertOverflow);
+        switch( mrTextBodyProp.moVertOverflow.value_or(XML_overflow) )
+        {
+            case XML_ellipsis:
+            case XML_clip:
+                
mrTextBodyProp.maPropertyMap.setProperty(PROP_TextClipVerticalOverflow, true);
+                break;
+            default:
+                break;
+        }
+    }
 
     // ST_TextColumnCount
     if (const sal_Int32 nColumns = rAttribs.getInteger(XML_numCol, 0); 
nColumns > 0)
diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx
index 33db1d0f3c0e..664d589d34fd 100644
--- a/oox/source/export/drawingml.cxx
+++ b/oox/source/export/drawingml.cxx
@@ -3866,6 +3866,11 @@ void DrawingML::WriteText(const Reference<XInterface>& 
rXIface, bool bBodyPr, bo
             }
         }
 
+        if (!sVertOverflow && GetProperty(rXPropSet, 
"TextClipVerticalOverflow") && mAny.get<bool>())
+        {
+            sVertOverflow = "clip";
+        }
+
         mpFS->startElementNS( (nXmlNamespace ? nXmlNamespace : XML_a), 
XML_bodyPr,
                                XML_numCol, 
sax_fastparser::UseIf(OString::number(nCols), nCols > 0),
                                XML_spcCol, 
sax_fastparser::UseIf(OString::number(oox::drawingml::convertHmmToEmu(nColSpacing)),
 nCols > 0 && nColSpacing >= 0),
diff --git a/oox/source/token/properties.txt b/oox/source/token/properties.txt
index edf799c2c8df..fd2c3a0c6497 100644
--- a/oox/source/token/properties.txt
+++ b/oox/source/token/properties.txt
@@ -547,6 +547,7 @@ TextAutoGrowHeight
 TextBox
 TextBreak
 TextCameraZRotateAngle
+TextClipVerticalOverflow
 TextColor
 TextColumns
 TextContourFrame
diff --git a/svx/qa/unit/data/clip-vertical-overflow.pptx 
b/svx/qa/unit/data/clip-vertical-overflow.pptx
new file mode 100644
index 000000000000..703f92e54b30
Binary files /dev/null and b/svx/qa/unit/data/clip-vertical-overflow.pptx differ
diff --git a/svx/qa/unit/svdraw.cxx b/svx/qa/unit/svdraw.cxx
index 7bf1ceb9d4a1..7dbd96b04f67 100644
--- a/svx/qa/unit/svdraw.cxx
+++ b/svx/qa/unit/svdraw.cxx
@@ -549,6 +549,50 @@ CPPUNIT_TEST_FIXTURE(SvdrawTest, testPageViewDrawLayerClip)
     // i.e. the 2nd page had a line shape from the first page's footer.
     CPPUNIT_ASSERT_EQUAL(2, pPage2->getObjectCount());
 }
+
+CPPUNIT_TEST_FIXTURE(SvdrawTest, testClipVerticalTextOverflow)
+{
+    // File contains a slide with 4 rectangle shapes with text inside
+    // each have <a:bodyPr vertOverflow="clip">
+    // 1-) Text overflowing the rectangle
+    // 2-) Text not overflowing the rectangle
+    // 3-) (Vertical text) Text overflowing the rectangle
+    // 4-) (Vertical text) Text not overflowing the rectangle
+    loadFromURL(u"clip-vertical-overflow.pptx");
+
+    SdrPage* pSdrPage = getFirstDrawPageWithAssert();
+    xmlDocUniquePtr pDocument = 
lcl_dumpAndParseFirstObjectWithAssert(pSdrPage);
+
+    // Test vertically overflowing text
+    // Without the accompanying fix in place, this test would have failed with:
+    // equality assertion failed
+    // - Expected: 6
+    // - Actual  : 13
+    // - In <>, XPath contents of child does not match
+    // i.e. the vertically overflowing text wasn't clipped & overflowing text
+    // was drawn anyways.
+    assertXPathContent(pDocument, 
"count((//sdrblocktext)[4]//textsimpleportion)", "6");
+
+    // make sure text is aligned correctly after the overflowing text is 
clipped
+    assertXPath(pDocument, "((//sdrblocktext)[4]//textsimpleportion)[1]", "y", 
"3749");
+    assertXPath(pDocument, "((//sdrblocktext)[4]//textsimpleportion)[6]", "y", 
"7559");
+
+    // make sure the text that isn't overflowing is still aligned properly
+    assertXPathContent(pDocument, 
"count((//sdrblocktext)[5]//textsimpleportion)", "3");
+    assertXPath(pDocument, "((//sdrblocktext)[5]//textsimpleportion)[1]", "y", 
"5073");
+    assertXPath(pDocument, "((//sdrblocktext)[5]//textsimpleportion)[3]", "y", 
"6597");
+
+    // Test vertically overflowing text, with vertical text direction
+    assertXPathContent(pDocument, 
"count((//sdrblocktext)[6]//textsimpleportion)", "12");
+    // make sure text is aligned correctly after the overflowing text is 
clipped
+    assertXPath(pDocument, "((//sdrblocktext)[6]//textsimpleportion)[1]", "x", 
"13093");
+    assertXPath(pDocument, "((//sdrblocktext)[6]//textsimpleportion)[12]", 
"x", "4711");
+
+    // make sure the text that isn't overflowing is still aligned properly
+    assertXPathContent(pDocument, 
"count((//sdrblocktext)[7]//textsimpleportion)", "3");
+    assertXPath(pDocument, "((//sdrblocktext)[7]//textsimpleportion)[1]", "x", 
"25417");
+    assertXPath(pDocument, "((//sdrblocktext)[7]//textsimpleportion)[3]", "x", 
"23893");
+}
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 41e846d674e1e4609cb45b8fd8dedc9f82780043
Author:     Sarper Akdemir <sarper.akde...@collabora.com>
AuthorDate: Thu Apr 6 13:00:53 2023 +0300
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Thu Apr 27 23:16:45 2023 +0200

    editeng, svx: introduce ability to clip vertical text overflow
    
    Introduces editeng text property TextClipVerticalOverflow.
    
    Which when set causes vertical text that is overflown out of a
    frame/shape truncated. (Only when text isn't being edited)
    
    This is implemented as two steps:
    (if text overflows)
      1 - Vertical adjust is forced to top.
        (Forcing vert adjust to top isn't the desired behavior normally,
        but good enough for a first cut I'd say.)
           -> The desired behavior would be after the overflown text is
           truncated, doing a vertical adjust (of center/bottom/top) on
           that piece of text.
    
      2 - ClipRange is set to the height of the frame/shape.
    
    This appears to work with different text directions too (vertical
    etc.).
    
    Change-Id: I697715a7d28bde94a6650609b16505ffab92173f
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150106
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>
    (cherry picked from commit 1934698260222f6727ac43118933094fa84dcdea)

diff --git a/include/editeng/unoprnms.hxx b/include/editeng/unoprnms.hxx
index a321e54e5a73..1ca19c3f5121 100644
--- a/include/editeng/unoprnms.hxx
+++ b/include/editeng/unoprnms.hxx
@@ -124,6 +124,7 @@ inline constexpr OUStringLiteral UNO_NAME_TEXT_WRITINGMODE 
= u"TextWritingMode";
 inline constexpr OUStringLiteral UNO_NAME_TEXT_FONTINDEPENDENTLINESPACING = 
u"FontIndependentLineSpacing";
 inline constexpr OUStringLiteral UNO_NAME_TEXT_WORDWRAP = u"TextWordWrap";
 inline constexpr OUStringLiteral UNO_NAME_TEXT_CHAINNEXTNAME = 
u"TextChainNextName";
+inline constexpr OUStringLiteral UNO_NAME_TEXT_CLIPVERTOVERFLOW = 
u"TextClipVerticalOverflow";
 
 inline constexpr OUStringLiteral UNO_NAME_MEASUREKIND = u"MeasureKind";
 inline constexpr OUStringLiteral UNO_NAME_MEASURETEXTHPOS = 
u"MeasureTextHorizontalPosition";
diff --git a/include/svx/svddef.hxx b/include/svx/svddef.hxx
index 059c461721b4..85a72e5b713d 100644
--- a/include/svx/svddef.hxx
+++ b/include/svx/svddef.hxx
@@ -232,7 +232,8 @@ constexpr TypedWhichId<SvXMLAttrContainerItem>     
SDRATTR_XMLATTRIBUTES
 constexpr TypedWhichId<SdrTextFixedCellHeightItem> 
SDRATTR_TEXT_USEFIXEDCELLHEIGHT (SDRATTR_MISC_FIRST +23);     /*   1121 */ /*   
1121 */ /*   1104 */             /* Pool V2 */
 constexpr TypedWhichId<SdrOnOffItem>               SDRATTR_TEXT_WORDWRAP       
    (SDRATTR_MISC_FIRST +24);     /*   1122 */ /*   1122 */ /*   1105 */        
     /* Pool V2 */
 constexpr TypedWhichId<SfxStringItem>              SDRATTR_TEXT_CHAINNEXTNAME  
    (SDRATTR_MISC_FIRST +25);     /*   1123 */ /*   1123 */ /*   1106 */        
     /* Pool V2 */
-constexpr sal_uInt16                               SDRATTR_MISC_LAST           
    (SDRATTR_TEXT_CHAINNEXTNAME); /* 1125   */ /* 1125   */ /* 1108   */ /* 
Pool V1: 1056 */
+constexpr TypedWhichId<SdrOnOffItem>               
SDRATTR_TEXT_CLIPVERTOVERFLOW   (SDRATTR_MISC_FIRST +26);
+constexpr sal_uInt16                               SDRATTR_MISC_LAST           
    (SDRATTR_TEXT_CLIPVERTOVERFLOW); /* 1126   */ /* 1125   */ /* 1108   */ /* 
Pool V1: 1056 */
 
 constexpr sal_uInt16                              SDRATTR_EDGE_FIRST         
(SDRATTR_MISC_LAST + 1);    /* 1127   */ /* Pool V4 */
 constexpr TypedWhichId<SdrEdgeKindItem>           SDRATTR_EDGEKIND           
(SDRATTR_EDGE_FIRST + 0);   /*   1127 */ /* Pool V4 */
diff --git a/include/svx/unoshprp.hxx b/include/svx/unoshprp.hxx
index 70be33007013..6ffbf58585a7 100644
--- a/include/svx/unoshprp.hxx
+++ b/include/svx/unoshprp.hxx
@@ -327,6 +327,7 @@
     { UNO_NAME_TEXT_VERTADJUST,       SDRATTR_TEXT_VERTADJUST,        
cppu::UnoType<css::drawing::TextVerticalAdjust>::get(),    0,      0},\
     { UNO_NAME_TEXT_WORDWRAP,         SDRATTR_TEXT_WORDWRAP,          
cppu::UnoType<bool>::get(),        0,      0}, \
     { UNO_NAME_TEXT_CHAINNEXTNAME,    SDRATTR_TEXT_CHAINNEXTNAME,     
::cppu::UnoType<OUString>::get(),        0,      0}, \
+    { UNO_NAME_TEXT_CLIPVERTOVERFLOW, SDRATTR_TEXT_CLIPVERTOVERFLOW,  
cppu::UnoType<bool>::get(),              0,      0}, \
     { u"TextColumns",                     OWN_ATTR_TEXTCOLUMNS,           
cppu::UnoType<css::text::XTextColumns>::get(), 0, 0 }, \
     SVX_UNOEDIT_CHAR_PROPERTIES, \
     SVX_UNOEDIT_PARA_PROPERTIES,
diff --git a/svx/source/svdraw/svdattr.cxx b/svx/source/svdraw/svdattr.cxx
index 86794dc92bfe..107bd9dbcfcf 100644
--- a/svx/source/svdraw/svdattr.cxx
+++ b/svx/source/svdraw/svdattr.cxx
@@ -171,6 +171,7 @@ SdrItemPool::SdrItemPool(
     rPoolDefaults[SDRATTR_TEXT_CHAINNEXTNAME    -SDRATTR_START]=new 
SfxStringItem(SDRATTR_TEXT_CHAINNEXTNAME, "");
     rPoolDefaults[SDRATTR_TEXT_USEFIXEDCELLHEIGHT -SDRATTR_START]=new 
SdrTextFixedCellHeightItem;
     rPoolDefaults[SDRATTR_TEXT_WORDWRAP         -SDRATTR_START]=new 
SdrOnOffItem(SDRATTR_TEXT_WORDWRAP, true);
+    rPoolDefaults[SDRATTR_TEXT_CLIPVERTOVERFLOW-SDRATTR_START]=new 
SdrOnOffItem(SDRATTR_TEXT_CLIPVERTOVERFLOW, false);
     rPoolDefaults[SDRATTR_EDGEKIND         -SDRATTR_START]=new SdrEdgeKindItem;
     rPoolDefaults[SDRATTR_EDGENODE1HORZDIST-SDRATTR_START]=new 
SdrEdgeNode1HorzDistItem(nDefEdgeDist);
     rPoolDefaults[SDRATTR_EDGENODE1VERTDIST-SDRATTR_START]=new 
SdrEdgeNode1VertDistItem(nDefEdgeDist);
diff --git a/svx/source/svdraw/svdotextdecomposition.cxx 
b/svx/source/svdraw/svdotextdecomposition.cxx
index ad6edb104e01..4f1dad3d39ff 100644
--- a/svx/source/svdraw/svdotextdecomposition.cxx
+++ b/svx/source/svdraw/svdotextdecomposition.cxx
@@ -1103,19 +1103,21 @@ void SdrTextObj::impDecomposeBlockTextPrimitive(
         }
     }
 
+    const double fFreeVerticalSpace(aAnchorTextRange.getHeight() - 
aOutlinerScale.getY());
+    bool bClipVerticalTextOverflow = fFreeVerticalSpace < 0
+                                     && 
GetObjectItemSet().Get(SDRATTR_TEXT_CLIPVERTOVERFLOW).GetValue();
     // correct vertical translation using the now known text size
-    if(SDRTEXTVERTADJUST_CENTER == eVAdj || SDRTEXTVERTADJUST_BOTTOM == eVAdj)
+    if((SDRTEXTVERTADJUST_CENTER == eVAdj || SDRTEXTVERTADJUST_BOTTOM == eVAdj)
+       && !bClipVerticalTextOverflow)
     {
-        const double fFree(aAnchorTextRange.getHeight() - 
aOutlinerScale.getY());
-
         if(SDRTEXTVERTADJUST_CENTER == eVAdj)
         {
-            aAdjustTranslate.setY(fFree / 2.0);
+            aAdjustTranslate.setY(fFreeVerticalSpace / 2.0);
         }
 
         if(SDRTEXTVERTADJUST_BOTTOM == eVAdj)
         {
-            aAdjustTranslate.setY(fFree);
+            aAdjustTranslate.setY(fFreeVerticalSpace);
         }
     }
 
@@ -1159,6 +1161,8 @@ void SdrTextObj::impDecomposeBlockTextPrimitive(
 
     // create ClipRange (if needed)
     basegfx::B2DRange aClipRange;
+    if(bClipVerticalTextOverflow)
+        aClipRange = {0, 0, std::numeric_limits<double>::max(), 
aAnchorTextRange.getHeight()};
 
     // now break up text primitives.
     impTextBreakupHandler aConverter(rOutliner);

Reply via email to