summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Repository.mk4
-rw-r--r--RepositoryExternal.mk7
-rw-r--r--avmedia/source/gstreamer/gstframegrabber.cxx14
-rwxr-xr-xbin/symstore.sh2
-rw-r--r--brand/cib/Image.svg78
-rw-r--r--brand/cib/banner.svg86
-rw-r--r--brand/cib/flat_logo.svg504
-rw-r--r--brand/cib/intro-highres.pngbin18421 -> 17064 bytes
-rw-r--r--brand/cib/intro-highres.svg264
-rw-r--r--brand/cib/intro.pngbin13854 -> 10827 bytes
-rw-r--r--brand/cib/intro.svg255
-rw-r--r--brand/cib/logo.pngbin4714 -> 731 bytes
-rw-r--r--brand/cib/logo.svg105
-rw-r--r--canvas/source/directx/dx_bitmapcanvashelper.cxx4
-rw-r--r--canvas/source/directx/dx_canvascustomsprite.cxx2
-rw-r--r--canvas/source/directx/dx_canvashelper.cxx4
-rw-r--r--canvas/source/directx/dx_canvashelper.hxx2
-rw-r--r--canvas/source/directx/dx_spritehelper.cxx6
-rw-r--r--chart2/source/view/inc/PlottingPositionHelper.hxx4
-rw-r--r--comphelper/source/misc/docpasswordhelper.cxx4
-rw-r--r--comphelper/source/misc/hash.cxx6
-rw-r--r--compilerplugins/clang/test/unusedfields.cxx1
-rw-r--r--configmgr/source/data.hxx2
-rw-r--r--configure.ac16
-rw-r--r--connectivity/source/drivers/hsqldb/HDriver.cxx31
-rw-r--r--connectivity/source/inc/java/tools.hxx4
-rw-r--r--cui/inc/strings.hrc1
-rw-r--r--cui/source/dialogs/SpellDialog.cxx2
-rw-r--r--cui/source/dialogs/tipofthedaydlg.cxx17
-rw-r--r--cui/source/options/optaboutconfig.cxx44
-rw-r--r--cui/source/options/optaboutconfig.hxx2
-rw-r--r--cui/source/options/optjava.cxx21
-rw-r--r--cui/source/options/optsave.cxx12
-rw-r--r--cui/source/options/optsave.hxx1
-rw-r--r--cui/uiconfig/ui/optsavepage.ui15
-rw-r--r--dbaccess/source/core/dataaccess/ModelImpl.cxx3
-rw-r--r--dbaccess/source/ui/dlg/odbcconfig.cxx8
-rw-r--r--desktop/qa/desktop_lib/test_desktop_lib.cxx6
-rw-r--r--desktop/source/app/cmdlineargs.cxx10
-rw-r--r--desktop/source/migration/migration.cxx107
-rw-r--r--desktop/source/minidump/minidump.cxx6
-rw-r--r--desktop/win32/source/loader.cxx41
-rw-r--r--download.lst850
-rw-r--r--drawinglayer/source/tools/primitive2dxmldump.cxx2
-rw-r--r--dtrans/Library_dnd.mk61
-rw-r--r--dtrans/Library_dtrans.mk38
-rw-r--r--dtrans/Library_ftransl.mk53
-rw-r--r--dtrans/Library_sysdtrans.mk53
-rw-r--r--dtrans/Module_dtrans.mk10
-rw-r--r--dtrans/README4
-rw-r--r--dtrans/StaticLibrary_dtobj.mk44
-rw-r--r--dtrans/source/generic/dtrans.cxx74
-rw-r--r--dtrans/source/win32/clipb/APNDataObject.hxx72
-rw-r--r--dtrans/source/win32/clipb/WinClipbImpl.cxx210
-rw-r--r--dtrans/source/win32/clipb/WinClipbImpl.hxx106
-rw-r--r--dtrans/source/win32/clipb/WinClipboard.cxx239
-rw-r--r--dtrans/source/win32/clipb/wcbentry.cxx82
-rw-r--r--dtrans/source/win32/dnd/dndentry.cxx88
-rw-r--r--dtrans/source/win32/ftransl/ftranslentry.cxx79
-rw-r--r--dtrans/util/dnd.component28
-rw-r--r--dtrans/util/ftransl.component25
-rw-r--r--dtrans/util/sysdtrans.component25
-rw-r--r--editeng/inc/editattr.hxx3
-rw-r--r--editeng/qa/unit/core-test.cxx2
-rw-r--r--editeng/source/accessibility/AccessibleEditableTextPara.cxx3
-rw-r--r--editeng/source/editeng/editattr.cxx9
-rw-r--r--editeng/source/editeng/editeng.cxx2
-rw-r--r--editeng/source/editeng/impedit2.cxx5
-rw-r--r--editeng/source/outliner/outleeng.cxx4
-rw-r--r--editeng/source/outliner/outleeng.hxx2
-rw-r--r--editeng/source/outliner/outliner.cxx7
-rw-r--r--editeng/source/uno/unoedprx.cxx4
-rw-r--r--editeng/source/uno/unofored.cxx4
-rw-r--r--editeng/source/uno/unoforou.cxx4
-rw-r--r--editeng/source/uno/unotext.cxx5
-rw-r--r--embeddedobj/source/commonembedding/embedobj.cxx60
-rw-r--r--embeddedobj/source/commonembedding/persistence.cxx25
-rw-r--r--embeddedobj/source/commonembedding/specialobject.cxx9
-rw-r--r--embeddedobj/source/inc/commonembobj.hxx3
-rw-r--r--embeddedobj/source/inc/specialobject.hxx7
-rw-r--r--external/breakpad/UnpackedTarball_breakpad.mk1
-rw-r--r--external/breakpad/include.patch10
-rw-r--r--external/ct2n/include.patch.010
-rw-r--r--external/curl/2b0994c29a721c91c57.patch48
-rw-r--r--external/curl/CVE-2023-38545_7.87.0.patch134
-rw-r--r--external/curl/ExternalProject_curl.mk2
-rw-r--r--external/curl/UnpackedTarball_curl.mk2
-rw-r--r--external/curl/clang-cl.patch.02
-rw-r--r--external/curl/curl-7.26.0_win-proxy.patch13
-rw-r--r--external/curl/curl-msvc-disable-protocols.patch.14
-rw-r--r--external/curl/curl-msvc-zlib.patch.12
-rw-r--r--external/curl/curl-msvc.patch.14
-rw-r--r--external/curl/curl-nss.patch.111
-rw-r--r--external/curl/zlib.patch.012
-rw-r--r--external/expat/0001-Fix-compiler-warnings.patch47
-rw-r--r--external/expat/UnpackedTarball_expat.mk3
-rw-r--r--external/expat/expat-winapi.patch13
-rw-r--r--external/harfbuzz/62e803b36173fd096d7ad460dd1d1db9be542593.patch.129
-rw-r--r--external/harfbuzz/UnpackedTarball_harfbuzz.mk1
-rw-r--r--external/hsqldb/UnpackedTarball_hsqldb.mk1
-rw-r--r--external/hsqldb/patches/disable-dump-script.patch14
-rw-r--r--external/libffi/ExternalPackage_libffi.mk20
-rw-r--r--external/libffi/ExternalProject_libffi.mk29
-rw-r--r--external/libffi/Module_libffi.mk1
-rw-r--r--external/liblangtag/UnpackedTarball_liblangtag.mk2
-rw-r--r--external/liblangtag/Wformat-overflow.patch17
-rw-r--r--external/liblangtag/langtag-valencia.patch.029
-rw-r--r--external/libnumbertext/EmptyString.patch113
-rw-r--r--external/libnumbertext/UnpackedTarball_libnumbertext.mk1
-rw-r--r--external/liborcus/UnpackedTarball_liborcus.mk1
-rw-r--r--external/liborcus/include.patch.021
-rw-r--r--external/liborcus/overrun.patch.063
-rw-r--r--external/libtommath/README2
-rw-r--r--external/libtommath/UnpackedTarball_libtommath.mk2
-rw-r--r--external/libtommath/clang-cl.patch16
-rw-r--r--external/libtommath/libtommath-msvc.patch12
-rw-r--r--external/libxml2/ExternalPackage_libxml2.mk2
-rw-r--r--external/libxml2/ExternalProject_libxml2.mk4
-rw-r--r--external/libxml2/UnpackedTarball_libxml2.mk6
-rw-r--r--external/libxml2/libxml2-XMLCALL-redefine.patch.011
-rw-r--r--external/libxml2/libxml2-android.patch6
-rw-r--r--external/libxml2/libxml2-config.patch.143
-rw-r--r--external/libxml2/libxml2-global-symbols.patch14
-rw-r--r--external/libxml2/libxml2-icu-sym.patch.02
-rw-r--r--external/libxml2/libxml2-icu.patch.02
-rw-r--r--external/libxml2/xml2-config.in28
-rw-r--r--external/libxslt/ExternalPackage_libxslt.mk2
-rw-r--r--external/libxslt/README2
-rw-r--r--external/nss/README26
-rw-r--r--external/nss/UnpackedTarball_nss.mk2
-rw-r--r--external/nss/asan.patch.12
-rw-r--r--external/nss/clang-cl.patch.012
-rw-r--r--external/nss/macos-dlopen.patch.02
-rw-r--r--external/nss/nss-android.patch.17
-rw-r--r--external/nss/nss-bz1646594.patch.12
-rw-r--r--external/nss/nss-restore-manual-pre-dependencies.patch.12
-rw-r--r--external/nss/nss-win32-make.patch.14
-rw-r--r--external/nss/nss.aix.patch10
-rw-r--r--external/nss/nss.bzmozilla1238154.patch2
-rw-r--r--external/nss/nss.cygwin64.in32bit.patch2
-rw-r--r--external/nss/nss.nowerror.patch2
-rw-r--r--external/nss/nss.patch16
-rw-r--r--external/nss/nss.utf8bom.patch.14
-rw-r--r--external/nss/nss.vs2015.patch2
-rw-r--r--external/nss/nss.vs2015.pdb.patch2
-rw-r--r--external/nss/nss.windows.patch6
-rw-r--r--external/nss/nss_macosx.patch17
-rw-r--r--external/nss/ubsan.patch.02
-rw-r--r--external/openssl/ExternalPackage_openssl.mk12
-rw-r--r--external/openssl/ExternalProject_openssl.mk15
-rw-r--r--external/openssl/UnpackedTarball_openssl.mk12
-rw-r--r--external/openssl/ccb0a11145ee72b042d10593a64eaf9e8a55ec12.patch.156
-rw-r--r--external/openssl/openssl-1.0.1h-win64.patch.147
-rw-r--r--external/openssl/openssl-1.0.2k-cve-2020-1971.patch.1578
-rw-r--r--external/openssl/openssl-3650-masm.patch.135
-rw-r--r--external/openssl/openssl-fixbuild.patch.123
-rw-r--r--external/openssl/openssl-no-multilib.patch.038
-rw-r--r--external/openssl/openssllnx.patch23
-rw-r--r--external/openssl/opensslsol.patch20
-rw-r--r--external/openssl/opensslwnt.patch167
-rw-r--r--external/openssl/opensslwnt_safeseh.patch23
-rw-r--r--external/pdfium/Library_pdfium.mk84
-rw-r--r--external/pdfium/README2
-rw-r--r--external/pdfium/UnpackedTarball_pdfium.mk19
-rw-r--r--external/pdfium/build.patch.1229
-rw-r--r--external/pdfium/c++20-comparison.patch12
-rw-r--r--external/pdfium/configs/build_config.h132
-rw-r--r--external/pdfium/inc/pch/precompiled_pdfium.hxx58
-rw-r--r--external/pdfium/include.patch11
-rw-r--r--external/pdfium/msvc2017.patch.115
-rw-r--r--external/poppler/README2
-rw-r--r--external/poppler/StaticLibrary_poppler.mk57
-rw-r--r--external/poppler/UnpackedTarball_poppler.mk4
-rw-r--r--external/poppler/disable-freetype.patch.141
-rw-r--r--external/poppler/disable-nss-and-gpgmepp.patch.176
-rw-r--r--external/poppler/gcc7-EntityInfo.patch.155
-rw-r--r--external/poppler/gcc7-GfxFont.patch.194
-rw-r--r--external/poppler/poppler-config.patch.151
-rw-r--r--external/postgresql/ExternalProject_postgresql.mk2
-rw-r--r--external/postgresql/postgres-msvc-build.patch.16
-rw-r--r--external/python3/ExternalPackage_python3.mk278
-rw-r--r--external/python3/ExternalProject_python3.mk28
-rw-r--r--external/python3/UnpackedTarball_python3.mk1
-rw-r--r--external/python3/i100492-freebsd.patch.16
-rw-r--r--external/python3/internal-zlib.patch.022
-rw-r--r--external/python3/python-3.3.0-clang.patch.113
-rw-r--r--external/python3/python-3.3.0-darwin.patch.122
-rw-r--r--external/python3/python-3.3.3-disable-obmalloc.patch.04
-rw-r--r--external/python3/python-3.3.3-elf-rpath.patch.112
-rw-r--r--external/python3/python-3.5.4-msvc-disable.patch.18
-rw-r--r--external/python3/python-3.5.tweak.strip.soabi.patch2
-rw-r--r--external/python3/python-3.7.6-msvc-ssl.patch.127
-rw-r--r--external/python3/ubsan.patch.023
-rw-r--r--external/redland/UnpackedTarball_raptor.mk1
-rw-r--r--external/redland/raptor/raptor-libxml2-11.patch.115
-rw-r--r--filter/source/xsltfilter/LibXSLTTransformer.cxx6
-rw-r--r--filter/source/xsltfilter/LibXSLTTransformer.hxx2
-rw-r--r--forms/source/xforms/propertysetbase.hxx1
-rw-r--r--formula/source/core/api/token.cxx21
-rw-r--r--fpicker/source/office/contentenumeration.hxx4
-rw-r--r--framework/qa/cppunit/dispatchtest.cxx3
-rw-r--r--framework/source/helper/titlebarupdate.cxx2
-rw-r--r--framework/source/uielement/menubarmanager.cxx6
-rw-r--r--helpcompiler/source/HelpCompiler.cxx10
-rw-r--r--helpcompiler/source/HelpLinker.cxx4
m---------helpcontent20
-rw-r--r--i18npool/source/calendar/calendar_gregorian.cxx2
-rw-r--r--i18npool/source/characterclassification/cclass_unicode_parser.cxx10
-rwxr-xr-xicon-themes/breeze/sfx2/res/logo.pngbin4714 -> 5381 bytes
-rw-r--r--icon-themes/cib/sfx2/res/logo.pngbin4714 -> 731 bytes
-rw-r--r--icon-themes/colibre/sfx2/res/logo.pngbin4714 -> 5381 bytes
-rwxr-xr-xicon-themes/elementary/sfx2/res/logo.pngbin4714 -> 5381 bytes
-rw-r--r--icon-themes/karasa_jaga/sfx2/res/logo.pngbin4714 -> 5381 bytes
-rwxr-xr-xicon-themes/sifr/sfx2/res/logo.pngbin4714 -> 5381 bytes
-rw-r--r--icon-themes/tango/sfx2/res/logo.pngbin4714 -> 5381 bytes
-rw-r--r--include/comphelper/hash.hxx1
-rw-r--r--include/default.rc2
-rw-r--r--include/editeng/editeng.hxx3
-rw-r--r--include/editeng/outliner.hxx6
-rw-r--r--include/editeng/unoedprx.hxx3
-rw-r--r--include/editeng/unoedsrc.hxx3
-rw-r--r--include/editeng/unofored.hxx2
-rw-r--r--include/editeng/unoforou.hxx2
-rw-r--r--include/editeng/unotext.hxx2
-rw-r--r--include/filter/msfilter/mscodec.hxx1
-rw-r--r--include/jvmfwk/framework.hxx11
-rw-r--r--include/oox/crypto/AgileEngine.hxx1
-rw-r--r--include/oox/crypto/CryptTools.hxx1
-rw-r--r--include/rtl/bootstrap.h14
-rw-r--r--include/sal/types.h6
-rw-r--r--include/sfx2/basedlgs.hxx5
-rw-r--r--include/sfx2/childwin.hxx1
-rw-r--r--include/sfx2/docmacromode.hxx4
-rw-r--r--include/sfx2/infobar.hxx2
-rw-r--r--include/sfx2/objsh.hxx8
-rw-r--r--include/sfx2/sidebar/SidebarPanelBase.hxx4
-rw-r--r--include/sfx2/strings.hrc1
-rw-r--r--include/sfx2/viewsh.hxx1
-rw-r--r--include/svx/ClassificationEditView.hxx2
-rw-r--r--include/svx/svdomeas.hxx2
-rw-r--r--include/svx/svdoole2.hxx17
-rw-r--r--include/svx/svdotext.hxx2
-rw-r--r--include/svx/svdoutl.hxx2
-rw-r--r--include/svx/unoshape.hxx8
-rw-r--r--include/tools/urlobj.hxx5
-rw-r--r--include/vcl/BitmapBuffer.hxx4
-rw-r--r--include/vcl/filter/PngImageReader.hxx4
-rw-r--r--include/vcl/font/Feature.hxx1
-rw-r--r--include/vcl/svtabbx.hxx1
-rw-r--r--include/vcl/transfer.hxx4
-rw-r--r--include/vcl/treelistbox.hxx2
-rw-r--r--include/vcl/weld.hxx5
-rw-r--r--include/vcl/window.hxx3
-rw-r--r--include/xmloff/xmltoken.hxx2
-rw-r--r--instsetoo_native/inc_common/windows/msi_templates/Binary/Banner.bmpbin115906 -> 119082 bytes
-rw-r--r--instsetoo_native/inc_common/windows/msi_templates/Binary/Image.bmpbin202314 -> 206778 bytes
-rw-r--r--instsetoo_native/inc_ooohelppack/windows/msi_templates/Property.idt6
-rw-r--r--instsetoo_native/util/openoffice.lst.in72
-rw-r--r--jvmfwk/source/framework.cxx53
-rw-r--r--librelogo/source/LibreLogo/LibreLogo.py34
-rw-r--r--offapi/com/sun/star/view/PrintOptions.idl8
-rw-r--r--officecfg/files.mk1
-rw-r--r--officecfg/registry/data/org/openoffice/Setup.xcu11
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Common.xcs37
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/UI/Infobar.xcs53
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Writer.xcs33
-rw-r--r--oox/qa/unit/CryptoTest.cxx62
-rw-r--r--oox/source/crypto/AgileEngine.cxx33
-rw-r--r--oox/source/crypto/CryptTools.cxx6
-rw-r--r--oox/source/ole/vbacontrol.cxx6
-rw-r--r--postprocess/CustomTarget_registry.mk1
-rw-r--r--postprocess/Rdb_services.mk5
-rw-r--r--pyuno/source/loader/pythonloader.py4
-rw-r--r--reportdesign/source/core/sdr/ReportDrawPage.cxx2
-rw-r--r--sal/Library_sal.mk1
-rw-r--r--sal/osl/all/log.cxx45
-rw-r--r--sal/rtl/bootstrap.cxx130
-rw-r--r--sax/source/fastparser/fastparser.cxx2
-rw-r--r--sc/inc/document.hxx5
-rw-r--r--sc/inc/drwlayer.hxx1
-rw-r--r--sc/inc/editutil.hxx6
-rw-r--r--sc/qa/extras/scpdfexport.cxx16
-rw-r--r--sc/qa/extras/testdocuments/forcepoint97.xlsxbin0 -> 21127 bytes
-rw-r--r--sc/qa/uitest/calc_tests7/tdf150044.py85
-rw-r--r--sc/qa/unit/data/contentCSV/fdo48621_broken_quotes_exported.csv8
-rw-r--r--sc/qa/unit/data/xlsx/forcepoint107.xlsxbin0 -> 398436 bytes
-rw-r--r--sc/qa/unit/filters-test.cxx9
-rw-r--r--sc/source/core/data/colorscale.cxx6
-rw-r--r--sc/source/core/data/dociter.cxx2
-rw-r--r--sc/source/core/data/documen2.cxx1
-rw-r--r--sc/source/core/data/document.cxx4
-rw-r--r--sc/source/core/data/documentimport.cxx8
-rw-r--r--sc/source/core/data/dpobject.cxx11
-rw-r--r--sc/source/core/data/dptabres.cxx12
-rw-r--r--sc/source/core/data/drwlayer.cxx36
-rw-r--r--sc/source/core/data/formulacell.cxx6
-rw-r--r--sc/source/core/data/global.cxx7
-rw-r--r--sc/source/core/data/table2.cxx15
-rw-r--r--sc/source/core/data/table5.cxx38
-rw-r--r--sc/source/core/inc/interpre.hxx12
-rw-r--r--sc/source/core/tool/compiler.cxx10
-rw-r--r--sc/source/core/tool/editutil.cxx13
-rw-r--r--sc/source/core/tool/interpr1.cxx4
-rw-r--r--sc/source/core/tool/interpr3.cxx4
-rw-r--r--sc/source/core/tool/interpr4.cxx10
-rw-r--r--sc/source/core/tool/interpr7.cxx4
-rw-r--r--sc/source/filter/excel/xepivotxml.cxx2
-rw-r--r--sc/source/filter/html/htmlpars.cxx52
-rw-r--r--sc/source/filter/oox/workbookhelper.cxx2
-rw-r--r--sc/source/filter/orcus/filterdetect.cxx8
-rw-r--r--sc/source/filter/xml/XMLCalculationSettingsContext.cxx14
-rw-r--r--sc/source/filter/xml/XMLExportDataPilot.cxx2
-rw-r--r--sc/source/filter/xml/XMLExportDatabaseRanges.cxx2
-rw-r--r--sc/source/filter/xml/xmlexprt.cxx28
-rw-r--r--sc/source/filter/xml/xmlfilti.cxx4
-rw-r--r--sc/source/ui/dbgui/scuiasciiopt.cxx39
-rw-r--r--sc/source/ui/dbgui/validate.cxx14
-rw-r--r--sc/source/ui/docshell/docfunc.cxx2
-rw-r--r--sc/source/ui/docshell/docsh.cxx8
-rw-r--r--sc/source/ui/docshell/documentlinkmgr.cxx9
-rw-r--r--sc/source/ui/docshell/impex.cxx155
-rw-r--r--sc/source/ui/drawfunc/drtxtob.cxx3
-rw-r--r--sc/source/ui/inc/impex.hxx18
-rw-r--r--sc/source/ui/inc/scuiasciiopt.hxx2
-rw-r--r--sc/source/ui/inc/validate.hxx8
-rw-r--r--sc/source/ui/pagedlg/scuitphfedit.cxx11
-rw-r--r--sc/source/ui/unoobj/chart2uno.cxx3
-rw-r--r--sc/source/ui/unoobj/fielduno.cxx8
-rw-r--r--sc/source/ui/view/editsh.cxx3
-rw-r--r--sc/source/ui/view/formatsh.cxx2
-rw-r--r--sc/source/ui/view/output.cxx5
-rw-r--r--sc/source/ui/view/output2.cxx7
-rw-r--r--sc/source/ui/view/select.cxx3
-rw-r--r--sc/source/ui/view/tabview3.cxx1
-rw-r--r--sc/source/ui/view/viewdata.cxx34
-rw-r--r--scp2/inc/macros.inc2
-rw-r--r--scp2/source/base/folderitem_base.scp2
-rw-r--r--scp2/source/base/registryitem_base.scp2
-rw-r--r--scp2/source/calc/folderitem_calc.scp2
-rw-r--r--scp2/source/calc/registryitem_calc.scp8
-rw-r--r--scp2/source/draw/folderitem_draw.scp2
-rw-r--r--scp2/source/draw/registryitem_draw.scp8
-rw-r--r--scp2/source/impress/folderitem_impress.scp2
-rw-r--r--scp2/source/impress/registryitem_impress.scp8
-rw-r--r--scp2/source/math/folderitem_math.scp2
-rw-r--r--scp2/source/math/registryitem_math.scp4
-rw-r--r--scp2/source/ooo/folderitem_ooo.scp6
-rw-r--r--scp2/source/ooo/folderitem_ooo.ulf2
-rw-r--r--scp2/source/writer/folderitem_writer.scp2
-rw-r--r--scp2/source/writer/registryitem_writer.scp14
-rw-r--r--scripting/source/pyprov/mailmerge.py10
-rw-r--r--scripting/source/pyprov/pythonscript.py8
-rw-r--r--sd/qa/uitest/impress_tests/data/tdf153161_FlushToSave.odpbin0 -> 37209 bytes
-rw-r--r--sd/qa/uitest/impress_tests/tdf153161.py41
-rw-r--r--sd/qa/unit/tiledrendering/tiledrendering.cxx8
-rw-r--r--sd/source/filter/xml/sdxmlwrp.cxx2
-rw-r--r--sd/source/ui/app/sdmod1.cxx29
-rw-r--r--sd/source/ui/remotecontrol/Receiver.cxx21
-rw-r--r--sdext/Executable_xpdfimport.mk4
-rw-r--r--sdext/source/pdfimport/wrapper/wrapper.cxx52
-rw-r--r--sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.cxx57
-rw-r--r--sdext/source/pdfimport/xpdfwrapper/wrapper_gpl.cxx10
-rw-r--r--setup_native/source/packinfo/packinfo_brand.txt56
-rw-r--r--setup_native/source/packinfo/packinfo_extensions.txt30
-rw-r--r--setup_native/source/packinfo/packinfo_office.txt311
-rw-r--r--setup_native/source/packinfo/packinfo_office_help.txt7
-rw-r--r--setup_native/source/packinfo/packinfo_office_lang.txt44
-rw-r--r--setup_native/source/packinfo/packinfo_sdkoo.txt6
-rw-r--r--setup_native/source/packinfo/packinfo_ure.txt16
-rw-r--r--sfx2/source/appl/appserv.cxx8
-rw-r--r--sfx2/source/appl/childwin.cxx19
-rw-r--r--sfx2/source/appl/macroloader.cxx9
-rw-r--r--sfx2/source/appl/workwin.cxx6
-rw-r--r--sfx2/source/dialog/basedlgs.cxx8
-rw-r--r--sfx2/source/dialog/infobar.cxx20
-rw-r--r--sfx2/source/doc/docfile.cxx55
-rw-r--r--sfx2/source/doc/docmacromode.cxx8
-rw-r--r--sfx2/source/doc/iframe.cxx77
-rw-r--r--sfx2/source/doc/objembed.cxx9
-rw-r--r--sfx2/source/doc/objmisc.cxx53
-rw-r--r--sfx2/source/doc/objxtor.cxx9
-rw-r--r--sfx2/source/doc/printhelper.cxx9
-rw-r--r--sfx2/source/inc/eventsupplier.hxx1
-rw-r--r--sfx2/source/inc/macroloader.hxx2
-rw-r--r--sfx2/source/inc/objshimp.hxx3
-rw-r--r--sfx2/source/view/viewfrm.cxx10
-rw-r--r--sfx2/source/view/viewprn.cxx12
-rw-r--r--sfx2/source/view/viewsh.cxx9
-rw-r--r--shell/source/backends/kf5be/kf5backend.cxx2
-rw-r--r--shell/source/win32/simplemail/senddoc.cxx38
-rw-r--r--shell/source/win32/simplemail/smplmailclient.cxx12
-rw-r--r--shell/source/win32/simplemail/smplmailclient.hxx2
-rw-r--r--solenv/clang-format/blacklist136
-rw-r--r--solenv/flatpak-manifest.in7
-rw-r--r--solenv/gbuild/partial_build.mk2
-rw-r--r--sot/source/unoolestorage/xolesimplestorage.hxx2
-rw-r--r--starmath/CppunitTest_starmath_qa_cppunit.mk8
-rw-r--r--starmath/inc/token.hxx2
-rw-r--r--starmath/qa/cppunit/test_cursor.cxx1
-rw-r--r--starmath/qa/cppunit/test_node.cxx1
-rw-r--r--starmath/qa/cppunit/test_nodetotextvisitors.cxx1
-rw-r--r--starmath/qa/extras/mmlexport-test.cxx3
-rw-r--r--starmath/source/accessibility.cxx4
-rw-r--r--starmath/source/accessibility.hxx2
-rw-r--r--svx/source/accessibility/AccessibleEmptyEditSource.cxx2
-rw-r--r--svx/source/dialog/ClassificationEditView.cxx3
-rw-r--r--svx/source/dialog/SafeModeDialog.cxx2
-rw-r--r--svx/source/dialog/crashreportdlg.cxx40
-rw-r--r--svx/source/dialog/fntctrl.cxx2
-rw-r--r--svx/source/dialog/weldeditview.cxx9
-rw-r--r--svx/source/sdr/contact/viewobjectcontact.cxx36
-rw-r--r--svx/source/svdraw/svdedxv.cxx7
-rw-r--r--svx/source/svdraw/svdomeas.cxx6
-rw-r--r--svx/source/svdraw/svdoole2.cxx698
-rw-r--r--svx/source/svdraw/svdotxfl.cxx3
-rw-r--r--svx/source/svdraw/svdoutl.cxx7
-rw-r--r--svx/source/svdraw/svdpdf.cxx4
-rw-r--r--svx/source/unodraw/shapeimpl.hxx12
-rw-r--r--svx/source/unodraw/unomod.cxx6
-rw-r--r--svx/source/unodraw/unopage.cxx14
-rw-r--r--svx/source/unodraw/unoshap4.cxx61
-rw-r--r--sw/CppunitTest_sw_core_attr.mk74
-rw-r--r--sw/CppunitTest_sw_core_edit.mk74
-rw-r--r--sw/CppunitTest_sw_core_text.mk2
-rw-r--r--sw/Module_sw.mk2
-rw-r--r--sw/UIConfig_swriter.mk1
-rw-r--r--sw/inc/IDocumentContentOperations.hxx11
-rw-r--r--sw/inc/IDocumentMarkAccess.hxx5
-rw-r--r--sw/inc/cmdid.h2
-rw-r--r--sw/inc/crsrsh.hxx37
-rw-r--r--sw/inc/doc.hxx9
-rw-r--r--sw/inc/editsh.hxx18
-rw-r--r--sw/inc/index.hxx17
-rw-r--r--sw/inc/ndarr.hxx15
-rw-r--r--sw/inc/ndole.hxx19
-rw-r--r--sw/inc/ndtxt.hxx5
-rw-r--r--sw/inc/node.hxx2
-rw-r--r--sw/inc/pam.hxx4
-rw-r--r--sw/inc/swabstdlg.hxx2
-rw-r--r--sw/inc/swcrsr.hxx2
-rw-r--r--sw/inc/undobj.hxx12
-rw-r--r--sw/inc/unobaseclass.hxx19
-rw-r--r--sw/inc/unosett.hxx5
-rw-r--r--sw/inc/unotextcursor.hxx4
-rw-r--r--sw/inc/unotextrange.hxx2
-rw-r--r--sw/inc/viewopt.hxx10
-rw-r--r--sw/qa/core/attr/attr.cxx86
-rw-r--r--sw/qa/core/attr/data/attr-set.docxbin0 -> 11582 bytes
-rw-r--r--sw/qa/core/data/rtf/pass/forcepoint110.rtfbin0 -> 7776 bytes
-rw-r--r--sw/qa/core/edit/data/redline-hidden.fodt32
-rw-r--r--sw/qa/core/edit/edit.cxx57
-rw-r--r--sw/qa/core/text/text.cxx51
-rw-r--r--sw/qa/core/uwriter.cxx2
-rw-r--r--sw/qa/extras/htmlexport/htmlexport.cxx16
-rw-r--r--sw/qa/extras/layout/data/largeTopMarginAndHiddenFirstSection.fodt15
-rw-r--r--sw/qa/extras/layout/data/pageBreakInHiddenSection.fodt90
-rw-r--r--sw/qa/extras/layout/data/s4_min2.fodt360
-rw-r--r--sw/qa/extras/layout/data/table-0-height-rows.fodt611
-rw-r--r--sw/qa/extras/layout/data/three_sections.fodt18
-rw-r--r--sw/qa/extras/layout/layout.cxx135
-rw-r--r--sw/qa/extras/odfexport/data/tdf137199.docxbin0 -> 13281 bytes
-rw-r--r--sw/qa/extras/odfexport/data/tdf151100.docxbin0 -> 17741 bytes
-rw-r--r--sw/qa/extras/odfexport/odfexport.cxx26
-rw-r--r--sw/qa/extras/odfimport/data/forcepoint108.fodt67
-rw-r--r--sw/qa/extras/odfimport/data/incorrectsum.odtbin0 -> 17356 bytes
-rw-r--r--sw/qa/extras/odfimport/odfimport.cxx28
-rw-r--r--sw/qa/extras/ooxmlexport/data/tdf155690.docxbin0 -> 17677 bytes
-rw-r--r--sw/qa/extras/ooxmlexport/ooxmlexport13.cxx51
-rw-r--r--sw/qa/extras/ooxmlexport/ooxmlexport5.cxx4
-rw-r--r--sw/qa/extras/ooxmlexport/ooxmlexport8.cxx2
-rw-r--r--sw/qa/extras/uiwriter/data/FrameInHiddenSection.fodt20
-rw-r--r--sw/qa/extras/uiwriter/data/demo91.fodt156
-rw-r--r--sw/qa/extras/uiwriter/data/hiddenSectionsAroundPageBreak.fodt21
-rw-r--r--sw/qa/extras/uiwriter/data/pagebreak-source.fodt131
-rw-r--r--sw/qa/extras/uiwriter/data/pagebreak-target.fodt137
-rw-r--r--sw/qa/extras/uiwriter/data/table-at-end-of-cell.fodt219
-rw-r--r--sw/qa/extras/uiwriter/data/tdf114973.fodt144
-rw-r--r--sw/qa/extras/uiwriter/data/tdf125154.odtbin0 -> 10210 bytes
-rw-r--r--sw/qa/extras/uiwriter/data/tdf133982.docxbin0 -> 11705 bytes
-rw-r--r--sw/qa/extras/uiwriter/data/tdf134021.docxbin0 -> 23096 bytes
-rw-r--r--sw/qa/extras/uiwriter/data/tdf139843.odtbin0 -> 38984 bytes
-rw-r--r--sw/qa/extras/uiwriter/data/tdf148868.odtbin0 -> 11112 bytes
-rw-r--r--sw/qa/extras/uiwriter/data2/tdf135061.odtbin0 -> 10767 bytes
-rw-r--r--sw/qa/extras/uiwriter/data2/tdf136452.fodt80
-rw-r--r--sw/qa/extras/uiwriter/data2/tdf141175.odtbin0 -> 9574 bytes
-rw-r--r--sw/qa/extras/uiwriter/data2/try2.fodt66
-rw-r--r--sw/qa/extras/uiwriter/uiwriter.cxx765
-rw-r--r--sw/qa/extras/uiwriter/uiwriter2.cxx702
-rw-r--r--sw/qa/extras/unowriter/data/tdf134252_onlytable_protected.fodt87
-rw-r--r--sw/qa/extras/unowriter/unowriter.cxx95
-rw-r--r--sw/qa/extras/ww8export/data/tdf138302_restartNumbering.odtbin0 -> 14081 bytes
-rw-r--r--sw/qa/extras/ww8export/ww8export3.cxx6
-rw-r--r--sw/qa/inc/swmodeltestbase.hxx8
-rw-r--r--sw/qa/python/check_xmodifiable2.py9
-rw-r--r--sw/qa/uitest/data/tdf39721.fodt42
-rw-r--r--sw/qa/uitest/writer_tests2/bookmark.py39
-rw-r--r--sw/qa/uitest/writer_tests7/tdf130199.py62
-rw-r--r--sw/qa/uitest/writer_tests7/tdf145093.py34
-rw-r--r--sw/qa/unit/data/sw-dialogs-test.txt1
-rw-r--r--sw/sdi/_textsh.sdi6
-rw-r--r--sw/sdi/swriter.sdi18
-rw-r--r--sw/source/core/attr/swatrset.cxx3
-rw-r--r--sw/source/core/bastyp/calc.cxx2
-rw-r--r--sw/source/core/bastyp/index.cxx5
-rw-r--r--sw/source/core/crsr/callnk.cxx42
-rw-r--r--sw/source/core/crsr/crbm.cxx15
-rw-r--r--sw/source/core/crsr/crsrsh.cxx409
-rw-r--r--sw/source/core/crsr/crstrvl.cxx41
-rw-r--r--sw/source/core/crsr/pam.cxx52
-rw-r--r--sw/source/core/crsr/swcrsr.cxx38
-rw-r--r--sw/source/core/doc/DocumentContentOperationsManager.cxx216
-rw-r--r--sw/source/core/doc/DocumentRedlineManager.cxx8
-rw-r--r--sw/source/core/doc/docbm.cxx17
-rw-r--r--sw/source/core/doc/doccorr.cxx7
-rw-r--r--sw/source/core/doc/docedt.cxx15
-rw-r--r--sw/source/core/doc/doclay.cxx11
-rw-r--r--sw/source/core/doc/docnew.cxx27
-rw-r--r--sw/source/core/doc/textboxhelper.cxx3
-rw-r--r--sw/source/core/docnode/ndsect.cxx6
-rw-r--r--sw/source/core/docnode/ndtbl.cxx343
-rw-r--r--sw/source/core/docnode/node.cxx6
-rw-r--r--sw/source/core/docnode/nodes.cxx231
-rw-r--r--sw/source/core/docnode/section.cxx7
-rw-r--r--sw/source/core/edit/acorrect.cxx5
-rw-r--r--sw/source/core/edit/autofmt.cxx29
-rw-r--r--sw/source/core/edit/edatmisc.cxx2
-rw-r--r--sw/source/core/edit/eddel.cxx65
-rw-r--r--sw/source/core/edit/edfcol.cxx3
-rw-r--r--sw/source/core/edit/edglbldc.cxx2
-rw-r--r--sw/source/core/edit/edglss.cxx19
-rw-r--r--sw/source/core/edit/editsh.cxx6
-rw-r--r--sw/source/core/edit/edlingu.cxx19
-rw-r--r--sw/source/core/edit/edws.cxx6
-rw-r--r--sw/source/core/fields/reffld.cxx4
-rw-r--r--sw/source/core/frmedt/fecopy.cxx37
-rw-r--r--sw/source/core/frmedt/feshview.cxx7
-rw-r--r--sw/source/core/frmedt/fetab.cxx5
-rw-r--r--sw/source/core/inc/DocumentContentOperationsManager.hxx9
-rw-r--r--sw/source/core/inc/MarkManager.hxx4
-rw-r--r--sw/source/core/inc/UndoDelete.hxx3
-rw-r--r--sw/source/core/inc/UndoRedline.hxx8
-rw-r--r--sw/source/core/inc/UndoTable.hxx10
-rw-r--r--sw/source/core/inc/frame.hxx2
-rw-r--r--sw/source/core/inc/layfrm.hxx1
-rw-r--r--sw/source/core/inc/mvsave.hxx8
-rw-r--r--sw/source/core/inc/rootfrm.hxx2
-rw-r--r--sw/source/core/inc/sectfrm.hxx4
-rw-r--r--sw/source/core/inc/txtfrm.hxx2
-rw-r--r--sw/source/core/layout/atrfrm.cxx2
-rw-r--r--sw/source/core/layout/calcmove.cxx13
-rw-r--r--sw/source/core/layout/findfrm.cxx8
-rw-r--r--sw/source/core/layout/flowfrm.cxx120
-rw-r--r--sw/source/core/layout/frmtool.cxx113
-rw-r--r--sw/source/core/layout/ftnfrm.cxx10
-rw-r--r--sw/source/core/layout/layhelp.hxx3
-rw-r--r--sw/source/core/layout/newfrm.cxx5
-rw-r--r--sw/source/core/layout/pagechg.cxx9
-rw-r--r--sw/source/core/layout/sectfrm.cxx117
-rw-r--r--sw/source/core/layout/tabfrm.cxx127
-rw-r--r--sw/source/core/layout/trvlfrm.cxx25
-rw-r--r--sw/source/core/layout/wsfrm.cxx12
-rw-r--r--sw/source/core/ole/ndole.cxx227
-rw-r--r--sw/source/core/text/frmcrsr.cxx2
-rwxr-xr-xsw/source/core/text/frmform.cxx18
-rw-r--r--sw/source/core/text/porfld.cxx3
-rw-r--r--sw/source/core/text/porfld.hxx2
-rw-r--r--sw/source/core/text/porlay.cxx2
-rw-r--r--sw/source/core/text/pormulti.cxx13
-rw-r--r--sw/source/core/text/txtfrm.cxx17
-rw-r--r--sw/source/core/text/widorp.cxx2
-rw-r--r--sw/source/core/text/xmldump.cxx9
-rw-r--r--sw/source/core/txtnode/ndtxt.cxx118
-rw-r--r--sw/source/core/txtnode/thints.cxx4
-rw-r--r--sw/source/core/txtnode/txtedt.cxx6
-rw-r--r--sw/source/core/undo/rolbck.cxx39
-rw-r--r--sw/source/core/undo/undel.cxx51
-rw-r--r--sw/source/core/undo/undobj.cxx57
-rw-r--r--sw/source/core/undo/unins.cxx11
-rw-r--r--sw/source/core/undo/unredln.cxx38
-rw-r--r--sw/source/core/undo/untbl.cxx24
-rw-r--r--sw/source/core/undo/untblk.cxx14
-rw-r--r--sw/source/core/unocore/unobkm.cxx2
-rw-r--r--sw/source/core/unocore/unoframe.cxx9
-rw-r--r--sw/source/core/unocore/unoobj.cxx10
-rw-r--r--sw/source/core/unocore/unoobj2.cxx23
-rw-r--r--sw/source/core/unocore/unosett.cxx20
-rw-r--r--sw/source/core/unocore/unotbl.cxx2
-rw-r--r--sw/source/core/unocore/unotext.cxx49
-rw-r--r--sw/source/filter/basflt/shellio.cxx8
-rw-r--r--sw/source/filter/html/htmlplug.cxx7
-rw-r--r--sw/source/filter/html/htmltab.cxx2
-rw-r--r--sw/source/filter/ww8/wrtw8num.cxx11
-rw-r--r--sw/source/filter/ww8/wrtww8.hxx1
-rw-r--r--sw/source/filter/ww8/ww8atr.cxx7
-rw-r--r--sw/source/filter/xml/XMLRedlineImportHelper.cxx80
-rw-r--r--sw/source/filter/xml/xmlexp.hxx5
-rw-r--r--sw/source/filter/xml/xmlfmte.cxx12
-rw-r--r--sw/source/filter/xml/xmliteme.cxx2
-rw-r--r--sw/source/filter/xml/xmltble.cxx149
-rw-r--r--sw/source/filter/xml/xmltexte.hxx12
-rw-r--r--sw/source/filter/xml/xmltexti.cxx9
-rw-r--r--sw/source/ui/config/optpage.cxx1
-rw-r--r--sw/source/ui/dialog/swdlgfact.cxx4
-rw-r--r--sw/source/ui/dialog/swdlgfact.hxx2
-rw-r--r--sw/source/ui/fldui/fldtdlg.cxx13
-rw-r--r--sw/source/ui/index/swuiidxmrk.cxx3
-rw-r--r--sw/source/ui/misc/bookmark.cxx123
-rw-r--r--sw/source/uibase/config/StoredChapterNumbering.cxx2
-rw-r--r--sw/source/uibase/config/cfgitems.cxx6
-rw-r--r--sw/source/uibase/config/usrpref.cxx21
-rw-r--r--sw/source/uibase/config/viewopt.cxx23
-rw-r--r--sw/source/uibase/dochdl/swdtflvr.cxx2
-rw-r--r--sw/source/uibase/docvw/OverlayRanges.hxx1
-rw-r--r--sw/source/uibase/docvw/ShadowOverlayObject.hxx4
-rw-r--r--sw/source/uibase/docvw/SidebarTxtControl.cxx4
-rw-r--r--sw/source/uibase/docvw/edtwin.cxx37
-rw-r--r--sw/source/uibase/frmdlg/frmmgr.cxx4
-rw-r--r--sw/source/uibase/inc/bookmark.hxx17
-rw-r--r--sw/source/uibase/inc/cfgitems.hxx1
-rw-r--r--sw/source/uibase/inc/fldtdlg.hxx2
-rw-r--r--sw/source/uibase/inc/optpage.hxx2
-rw-r--r--sw/source/uibase/inc/wrtsh.hxx6
-rw-r--r--sw/source/uibase/lingu/hhcwrp.cxx4
-rw-r--r--sw/source/uibase/ribbar/inputwin.cxx4
-rw-r--r--sw/source/uibase/ribbar/workctrl.cxx5
-rw-r--r--sw/source/uibase/shells/drwtxtex.cxx8
-rw-r--r--sw/source/uibase/shells/tabsh.cxx2
-rw-r--r--sw/source/uibase/shells/textfld.cxx2
-rw-r--r--sw/source/uibase/shells/textsh1.cxx18
-rw-r--r--sw/source/uibase/uitest/uiobject.cxx25
-rw-r--r--sw/source/uibase/uiview/view.cxx4
-rw-r--r--sw/source/uibase/uiview/viewmdi.cxx13
-rw-r--r--sw/source/uibase/uiview/viewport.cxx5
-rw-r--r--sw/source/uibase/utlui/content.cxx16
-rw-r--r--sw/source/uibase/wrtsh/delete.cxx41
-rw-r--r--sw/source/uibase/wrtsh/move.cxx46
-rw-r--r--sw/source/uibase/wrtsh/select.cxx42
-rw-r--r--sw/source/uibase/wrtsh/wrtsh1.cxx69
-rw-r--r--sw/source/uibase/wrtsh/wrtsh2.cxx42
-rw-r--r--sw/uiconfig/sglobal/popupmenu/table.xml2
-rw-r--r--sw/uiconfig/sweb/popupmenu/table.xml2
-rw-r--r--sw/uiconfig/swform/popupmenu/table.xml2
-rw-r--r--sw/uiconfig/swriter/popupmenu/table.xml2
-rw-r--r--sw/uiconfig/swriter/ui/insertbookmark.ui20
-rw-r--r--sw/uiconfig/swriter/ui/warnhiddensectiondialog.ui35
-rw-r--r--sw/uiconfig/swxform/popupmenu/table.xml2
-rw-r--r--sysui/desktop/debian/control4
-rw-r--r--sysui/desktop/freedesktop/freedesktop-menus.spec5
-rw-r--r--sysui/desktop/icons/empty-document.icobin45733 -> 4546 bytes
-rw-r--r--sysui/desktop/icons/empty-template.icobin45733 -> 4546 bytes
-rw-r--r--sysui/desktop/icons/hicolor/1024x1024/apps/main.pngbin19491 -> 51860 bytes
-rw-r--r--sysui/desktop/icons/hicolor/1024x1024/apps/main.svg98
-rw-r--r--sysui/desktop/icons/hicolor/1024x1024/apps/startcenter.pngbin19491 -> 51860 bytes
-rw-r--r--sysui/desktop/icons/hicolor/1024x1024/apps/startcenter.svg98
-rw-r--r--sysui/desktop/icons/hicolor/1024x1024/mimetypes/oasis-empty.pngbin19662 -> 51860 bytes
-rw-r--r--sysui/desktop/icons/hicolor/1024x1024/mimetypes/oasis-empty.svg11
-rw-r--r--sysui/desktop/icons/hicolor/128x128/apps/main.pngbin2092 -> 3539 bytes
-rw-r--r--sysui/desktop/icons/hicolor/128x128/apps/main.svg98
-rw-r--r--sysui/desktop/icons/hicolor/128x128/apps/startcenter.pngbin2092 -> 3539 bytes
-rw-r--r--sysui/desktop/icons/hicolor/128x128/apps/startcenter.svg98
-rw-r--r--sysui/desktop/icons/hicolor/128x128/mimetypes/oasis-empty.pngbin2434 -> 3539 bytes
-rw-r--r--sysui/desktop/icons/hicolor/128x128/mimetypes/oasis-empty.svg11
-rw-r--r--sysui/desktop/icons/hicolor/16x16/apps/main.pngbin385 -> 841 bytes
-rw-r--r--sysui/desktop/icons/hicolor/16x16/apps/main.svg98
-rw-r--r--sysui/desktop/icons/hicolor/16x16/apps/startcenter.pngbin385 -> 841 bytes
-rw-r--r--sysui/desktop/icons/hicolor/16x16/apps/startcenter.svg98
-rw-r--r--sysui/desktop/icons/hicolor/16x16/mimetypes/oasis-empty.pngbin398 -> 841 bytes
-rw-r--r--sysui/desktop/icons/hicolor/16x16/mimetypes/oasis-empty.svg11
-rw-r--r--sysui/desktop/icons/hicolor/22x22/apps/main.pngbin503 -> 987 bytes
-rw-r--r--sysui/desktop/icons/hicolor/22x22/apps/main.svg98
-rw-r--r--sysui/desktop/icons/hicolor/22x22/apps/startcenter.pngbin503 -> 987 bytes
-rw-r--r--sysui/desktop/icons/hicolor/22x22/apps/startcenter.svg98
-rw-r--r--sysui/desktop/icons/hicolor/22x22/mimetypes/oasis-empty.pngbin430 -> 987 bytes
-rw-r--r--sysui/desktop/icons/hicolor/22x22/mimetypes/oasis-empty.svg11
-rw-r--r--sysui/desktop/icons/hicolor/24x24/apps/main.pngbin533 -> 1040 bytes
-rw-r--r--sysui/desktop/icons/hicolor/24x24/apps/main.svg98
-rw-r--r--sysui/desktop/icons/hicolor/24x24/apps/startcenter.pngbin533 -> 1040 bytes
-rw-r--r--sysui/desktop/icons/hicolor/24x24/apps/startcenter.svg98
-rw-r--r--sysui/desktop/icons/hicolor/24x24/mimetypes/oasis-empty.pngbin455 -> 1040 bytes
-rw-r--r--sysui/desktop/icons/hicolor/24x24/mimetypes/oasis-empty.svg11
-rw-r--r--sysui/desktop/icons/hicolor/256x256/apps/main.pngbin4172 -> 2913 bytes
-rw-r--r--sysui/desktop/icons/hicolor/256x256/apps/main.svg98
-rw-r--r--sysui/desktop/icons/hicolor/256x256/apps/startcenter.pngbin4172 -> 2913 bytes
-rw-r--r--sysui/desktop/icons/hicolor/256x256/apps/startcenter.svg98
-rw-r--r--sysui/desktop/icons/hicolor/256x256/mimetypes/oasis-empty.pngbin3894 -> 2913 bytes
-rw-r--r--sysui/desktop/icons/hicolor/256x256/mimetypes/oasis-empty.svg11
-rw-r--r--sysui/desktop/icons/hicolor/32x32/apps/main.pngbin649 -> 1147 bytes
-rw-r--r--sysui/desktop/icons/hicolor/32x32/apps/main.svg98
-rw-r--r--sysui/desktop/icons/hicolor/32x32/apps/startcenter.pngbin649 -> 1147 bytes
-rw-r--r--sysui/desktop/icons/hicolor/32x32/apps/startcenter.svg98
-rw-r--r--sysui/desktop/icons/hicolor/32x32/mimetypes/oasis-empty.pngbin642 -> 1147 bytes
-rw-r--r--sysui/desktop/icons/hicolor/32x32/mimetypes/oasis-empty.svg11
-rw-r--r--sysui/desktop/icons/hicolor/48x48/apps/main.pngbin912 -> 1419 bytes
-rw-r--r--sysui/desktop/icons/hicolor/48x48/apps/main.svg98
-rw-r--r--sysui/desktop/icons/hicolor/48x48/apps/startcenter.pngbin912 -> 1419 bytes
-rw-r--r--sysui/desktop/icons/hicolor/48x48/apps/startcenter.svg98
-rw-r--r--sysui/desktop/icons/hicolor/48x48/mimetypes/oasis-empty.pngbin928 -> 1419 bytes
-rw-r--r--sysui/desktop/icons/hicolor/48x48/mimetypes/oasis-empty.svg11
-rw-r--r--sysui/desktop/icons/hicolor/512x512/apps/main.pngbin8799 -> 18371 bytes
-rw-r--r--sysui/desktop/icons/hicolor/512x512/apps/main.svg98
-rw-r--r--sysui/desktop/icons/hicolor/512x512/apps/startcenter.pngbin8799 -> 18371 bytes
-rw-r--r--sysui/desktop/icons/hicolor/512x512/apps/startcenter.svg98
-rw-r--r--sysui/desktop/icons/hicolor/512x512/mimetypes/oasis-empty.pngbin7931 -> 18371 bytes
-rw-r--r--sysui/desktop/icons/hicolor/512x512/mimetypes/oasis-empty.svg11
-rw-r--r--sysui/desktop/icons/hicolor/64x64/apps/main.pngbin1148 -> 1574 bytes
-rw-r--r--sysui/desktop/icons/hicolor/64x64/apps/main.svg98
-rw-r--r--sysui/desktop/icons/hicolor/64x64/apps/startcenter.pngbin1148 -> 1574 bytes
-rw-r--r--sysui/desktop/icons/hicolor/64x64/apps/startcenter.svg98
-rw-r--r--sysui/desktop/icons/hicolor/64x64/mimetypes/oasis-empty.pngbin1108 -> 1574 bytes
-rw-r--r--sysui/desktop/icons/hicolor/64x64/mimetypes/oasis-empty.svg11
-rw-r--r--sysui/desktop/icons/hicolor/scalable/apps/main.pngbin2092 -> 4966 bytes
-rw-r--r--sysui/desktop/icons/hicolor/scalable/apps/main.svg84
-rw-r--r--sysui/desktop/icons/hicolor/scalable/apps/startcenter.svg418
-rw-r--r--sysui/desktop/icons/locolor/16x16/apps/main.pngbin385 -> 841 bytes
-rw-r--r--sysui/desktop/icons/locolor/16x16/apps/main.svg11
-rw-r--r--sysui/desktop/icons/locolor/16x16/apps/startcenter.pngbin385 -> 841 bytes
-rw-r--r--sysui/desktop/icons/locolor/16x16/apps/startcenter.svg11
-rw-r--r--sysui/desktop/icons/locolor/16x16/mimetypes/oasis-empty.pngbin349 -> 841 bytes
-rw-r--r--sysui/desktop/icons/locolor/16x16/mimetypes/oasis-empty.svg11
-rw-r--r--sysui/desktop/icons/locolor/32x32/apps/main.pngbin649 -> 1147 bytes
-rw-r--r--sysui/desktop/icons/locolor/32x32/apps/main.svg17
-rw-r--r--sysui/desktop/icons/locolor/32x32/apps/startcenter.pngbin649 -> 1147 bytes
-rw-r--r--sysui/desktop/icons/locolor/32x32/apps/startcenter.svg17
-rw-r--r--sysui/desktop/icons/locolor/32x32/mimetypes/oasis-empty.pngbin386 -> 1147 bytes
-rw-r--r--sysui/desktop/icons/locolor/32x32/mimetypes/oasis-empty.svg17
-rw-r--r--sysui/desktop/icons/oasis-empty-document.icobin45733 -> 4546 bytes
-rw-r--r--sysui/desktop/icons/oasis-empty-template.icobin45733 -> 4546 bytes
-rw-r--r--sysui/desktop/icons/open.icobin45733 -> 4546 bytes
-rw-r--r--sysui/desktop/icons/soffice.icobin45775 -> 4546 bytes
-rw-r--r--sysui/desktop/menus/startcenter.desktop2
-rwxr-xr-xsysui/desktop/share/create_tree.sh8
-rw-r--r--sysui/desktop/share/launcher_comment.ulf2
-rw-r--r--sysui/productlist.mk6
-rw-r--r--test/source/xmltesttools.cxx2
-rw-r--r--tools/source/fsys/fileutil.cxx7
-rw-r--r--tools/source/fsys/urlobj.cxx9
m---------translations0
-rw-r--r--ucb/CppunitTest_ucb_webdav_core.mk14
-rw-r--r--ucb/Library_ucpdav1.mk19
-rw-r--r--ucb/qa/complex/ucb/UCB.java7
-rw-r--r--ucb/source/ucp/ftp/ftpcontent.cxx15
-rw-r--r--ucb/source/ucp/webdav-curl/CurlSession.cxx238
-rw-r--r--ucb/source/ucp/webdav-curl/CurlSession.hxx4
-rw-r--r--ucb/source/ucp/webdav-curl/ImportCookies.cxx249
-rw-r--r--unotools/source/i18n/resmgr.cxx5
-rw-r--r--unoxml/qa/unit/domtest.cxx8
-rw-r--r--unoxml/source/dom/attr.cxx1
-rw-r--r--unoxml/source/dom/document.cxx1
-rw-r--r--unoxml/source/dom/documentbuilder.cxx1
-rw-r--r--unoxml/source/dom/entity.cxx1
-rw-r--r--unoxml/source/xpath/xpathapi.cxx7
-rw-r--r--unoxml/source/xpath/xpathobject.cxx2
-rw-r--r--vcl/Library_vclplug_win.mk34
-rw-r--r--vcl/inc/brdwin.hxx2
-rw-r--r--vcl/inc/salframe.hxx2
-rw-r--r--vcl/inc/win/salframe.h1
-rw-r--r--vcl/source/app/salvtables.cxx13
-rw-r--r--vcl/source/outdev/text.cxx2
-rw-r--r--vcl/source/toolkit/group.cxx6
-rw-r--r--vcl/source/treelist/svtabbx.cxx25
-rw-r--r--vcl/source/treelist/treelistbox.cxx7
-rw-r--r--vcl/source/treelist/uiobject.cxx13
-rw-r--r--vcl/source/window/brdwin.cxx15
-rw-r--r--vcl/source/window/dlgctrl.cxx2
-rw-r--r--vcl/source/window/layout.cxx2
-rw-r--r--vcl/source/window/window.cxx4
-rw-r--r--vcl/source/window/window2.cxx6
-rw-r--r--vcl/unx/generic/printer/cupsmgr.cxx45
-rw-r--r--vcl/unx/gtk3/gtk3gtkinst.cxx151
-rw-r--r--vcl/vclplug_win.component (renamed from dtrans/source/generic/dtrans.component)26
-rw-r--r--vcl/win/app/salinst.cxx2
-rw-r--r--vcl/win/dtrans/APNDataObject.cxx (renamed from dtrans/source/win32/dtobj/APNDataObject.cxx)0
-rw-r--r--vcl/win/dtrans/APNDataObject.hxx (renamed from dtrans/source/win32/dtobj/APNDataObject.hxx)5
-rw-r--r--vcl/win/dtrans/DOTransferable.cxx (renamed from dtrans/source/win32/dtobj/DOTransferable.cxx)114
-rw-r--r--vcl/win/dtrans/DOTransferable.hxx (renamed from dtrans/source/win32/dtobj/DOTransferable.hxx)19
-rw-r--r--vcl/win/dtrans/DTransHelper.cxx (renamed from dtrans/source/win32/dtobj/DTransHelper.cxx)0
-rw-r--r--vcl/win/dtrans/DTransHelper.hxx (renamed from dtrans/source/win32/dtobj/DTransHelper.hxx)2
-rw-r--r--vcl/win/dtrans/DataFmtTransl.cxx (renamed from dtrans/source/win32/dtobj/DataFmtTransl.cxx)8
-rw-r--r--vcl/win/dtrans/DataFmtTransl.hxx (renamed from dtrans/source/win32/dtobj/DataFmtTransl.hxx)2
-rw-r--r--vcl/win/dtrans/DtObjFactory.cxx (renamed from dtrans/source/win32/dtobj/DtObjFactory.cxx)3
-rw-r--r--vcl/win/dtrans/DtObjFactory.hxx (renamed from dtrans/source/inc/DtObjFactory.hxx)0
-rw-r--r--vcl/win/dtrans/Fetc.cxx (renamed from dtrans/source/win32/dtobj/Fetc.cxx)2
-rw-r--r--vcl/win/dtrans/Fetc.hxx (renamed from dtrans/source/win32/dtobj/Fetc.hxx)0
-rw-r--r--vcl/win/dtrans/FetcList.cxx (renamed from dtrans/source/win32/dtobj/FetcList.cxx)9
-rw-r--r--vcl/win/dtrans/FetcList.hxx (renamed from dtrans/source/win32/dtobj/FetcList.hxx)0
-rw-r--r--vcl/win/dtrans/FmtFilter.cxx (renamed from dtrans/source/win32/dtobj/FmtFilter.cxx)0
-rw-r--r--vcl/win/dtrans/FmtFilter.hxx (renamed from dtrans/source/win32/dtobj/FmtFilter.hxx)0
-rw-r--r--vcl/win/dtrans/ImplHelper.cxx (renamed from dtrans/source/win32/misc/ImplHelper.cxx)0
-rw-r--r--vcl/win/dtrans/ImplHelper.hxx (renamed from dtrans/source/win32/misc/ImplHelper.hxx)0
-rw-r--r--vcl/win/dtrans/MimeAttrib.hxx (renamed from dtrans/source/win32/dtobj/MimeAttrib.hxx)0
-rw-r--r--vcl/win/dtrans/MtaOleClipb.cxx (renamed from dtrans/source/win32/clipb/MtaOleClipb.cxx)15
-rw-r--r--vcl/win/dtrans/MtaOleClipb.hxx (renamed from dtrans/source/win32/clipb/MtaOleClipb.hxx)0
-rw-r--r--vcl/win/dtrans/TxtCnvtHlp.cxx (renamed from dtrans/source/win32/dtobj/TxtCnvtHlp.cxx)3
-rw-r--r--vcl/win/dtrans/TxtCnvtHlp.hxx (renamed from dtrans/source/win32/dtobj/TxtCnvtHlp.hxx)0
-rw-r--r--vcl/win/dtrans/WinClip.hxx (renamed from dtrans/source/inc/WinClip.hxx)0
-rw-r--r--vcl/win/dtrans/WinClipboard.cxx364
-rw-r--r--vcl/win/dtrans/WinClipboard.hxx (renamed from dtrans/source/win32/clipb/WinClipboard.hxx)96
-rw-r--r--vcl/win/dtrans/XNotifyingDataObject.cxx (renamed from dtrans/source/win32/dtobj/XNotifyingDataObject.cxx)9
-rw-r--r--vcl/win/dtrans/XNotifyingDataObject.hxx (renamed from dtrans/source/win32/dtobj/XNotifyingDataObject.hxx)11
-rw-r--r--vcl/win/dtrans/XTDataObject.cxx (renamed from dtrans/source/win32/dtobj/XTDataObject.cxx)8
-rw-r--r--vcl/win/dtrans/XTDataObject.hxx (renamed from dtrans/source/win32/dtobj/XTDataObject.hxx)0
-rw-r--r--vcl/win/dtrans/clipboardmanager.cxx (renamed from dtrans/source/generic/clipboardmanager.cxx)97
-rw-r--r--vcl/win/dtrans/clipboardmanager.hxx (renamed from dtrans/source/generic/clipboardmanager.hxx)6
-rw-r--r--vcl/win/dtrans/ftransl.cxx (renamed from dtrans/source/win32/ftransl/ftransl.cxx)31
-rw-r--r--vcl/win/dtrans/ftransl.hxx (renamed from dtrans/source/win32/ftransl/ftransl.hxx)2
-rw-r--r--vcl/win/dtrans/generic_clipboard.cxx (renamed from dtrans/source/generic/generic_clipboard.cxx)18
-rw-r--r--vcl/win/dtrans/generic_clipboard.hxx (renamed from dtrans/source/generic/generic_clipboard.hxx)6
-rw-r--r--vcl/win/dtrans/globals.cxx (renamed from dtrans/source/win32/dnd/globals.cxx)0
-rw-r--r--vcl/win/dtrans/globals.hxx (renamed from dtrans/source/win32/dnd/globals.hxx)6
-rw-r--r--vcl/win/dtrans/idroptarget.cxx (renamed from dtrans/source/win32/dnd/idroptarget.cxx)0
-rw-r--r--vcl/win/dtrans/idroptarget.hxx (renamed from dtrans/source/win32/dnd/idroptarget.hxx)0
-rw-r--r--vcl/win/dtrans/source.cxx (renamed from dtrans/source/win32/dnd/source.cxx)14
-rw-r--r--vcl/win/dtrans/source.hxx (renamed from dtrans/source/win32/dnd/source.hxx)0
-rw-r--r--vcl/win/dtrans/sourcecontext.cxx (renamed from dtrans/source/win32/dnd/sourcecontext.cxx)0
-rw-r--r--vcl/win/dtrans/sourcecontext.hxx (renamed from dtrans/source/win32/dnd/sourcecontext.hxx)0
-rw-r--r--vcl/win/dtrans/target.cxx (renamed from dtrans/source/win32/dnd/target.cxx)16
-rw-r--r--vcl/win/dtrans/target.hxx (renamed from dtrans/source/win32/dnd/target.hxx)0
-rw-r--r--vcl/win/dtrans/targetdragcontext.cxx (renamed from dtrans/source/win32/dnd/targetdragcontext.cxx)0
-rw-r--r--vcl/win/dtrans/targetdragcontext.hxx (renamed from dtrans/source/win32/dnd/targetdragcontext.hxx)0
-rw-r--r--vcl/win/dtrans/targetdropcontext.cxx (renamed from dtrans/source/win32/dnd/targetdropcontext.cxx)0
-rw-r--r--vcl/win/dtrans/targetdropcontext.hxx (renamed from dtrans/source/win32/dnd/targetdropcontext.hxx)0
-rw-r--r--vcl/win/gdi/gdiimpl.cxx6
-rw-r--r--vcl/win/gdi/salbmp.cxx2
-rw-r--r--vcl/win/window/salframe.cxx139
-rw-r--r--vcl/workben/dtrans/makefile.mk (renamed from dtrans/source/test/makefile.mk)0
-rw-r--r--vcl/workben/dtrans/test_dtrans.cxx (renamed from dtrans/source/test/test_dtrans.cxx)0
-rw-r--r--vcl/workben/win/dnd/atlwindow.cxx (renamed from dtrans/test/win32/dnd/atlwindow.cxx)0
-rw-r--r--vcl/workben/win/dnd/atlwindow.hxx (renamed from dtrans/test/win32/dnd/atlwindow.hxx)0
-rw-r--r--vcl/workben/win/dnd/dndTest.cxx (renamed from dtrans/test/win32/dnd/dndTest.cxx)0
-rw-r--r--vcl/workben/win/dnd/makefile.mk (renamed from dtrans/test/win32/dnd/makefile.mk)0
-rw-r--r--vcl/workben/win/dnd/sourcelistener.cxx (renamed from dtrans/test/win32/dnd/sourcelistener.cxx)0
-rw-r--r--vcl/workben/win/dnd/sourcelistener.hxx (renamed from dtrans/test/win32/dnd/sourcelistener.hxx)0
-rw-r--r--vcl/workben/win/dnd/targetlistener.cxx (renamed from dtrans/test/win32/dnd/targetlistener.cxx)0
-rw-r--r--vcl/workben/win/dnd/targetlistener.hxx (renamed from dtrans/test/win32/dnd/targetlistener.hxx)0
-rw-r--r--vcl/workben/win/dnd/transferable.cxx (renamed from dtrans/test/win32/dnd/transferable.cxx)0
-rw-r--r--vcl/workben/win/dnd/transferable.hxx (renamed from dtrans/test/win32/dnd/transferable.hxx)0
-rw-r--r--vcl/workben/win/dtrans/XTDo.cxx (renamed from dtrans/source/win32/workbench/XTDo.cxx)0
-rw-r--r--vcl/workben/win/dtrans/XTDo.hxx (renamed from dtrans/source/win32/workbench/XTDo.hxx)0
-rw-r--r--vcl/workben/win/dtrans/makefile.mk (renamed from dtrans/source/win32/workbench/makefile.mk)0
-rw-r--r--vcl/workben/win/dtrans/test_wincb.cxx (renamed from dtrans/source/win32/workbench/test_wincb.cxx)0
-rw-r--r--vcl/workben/win/dtrans/testmarshal.cxx (renamed from dtrans/source/win32/workbench/testmarshal.cxx)0
-rw-r--r--winaccessibility/inc/AccEventListener.hxx2
-rw-r--r--winaccessibility/inc/AccObject.hxx4
-rw-r--r--winaccessibility/inc/AccObjectWinManager.hxx9
-rw-r--r--winaccessibility/source/service/AccEventListener.cxx9
-rw-r--r--winaccessibility/source/service/AccObject.cxx11
-rw-r--r--winaccessibility/source/service/AccObjectWinManager.cxx165
-rw-r--r--winaccessibility/source/service/msaaservice_impl.cxx2
-rw-r--r--wizards/source/access2base/DoCmd.xba2
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx86
-rw-r--r--writerfilter/source/dmapper/GraphicImport.cxx11
-rw-r--r--xmloff/qa/unit/uxmloff.cxx62
-rw-r--r--xmloff/source/core/xmlimp.cxx68
-rw-r--r--xmloff/source/core/xmltoken.cxx2
-rw-r--r--xmloff/source/draw/eventimp.cxx3
-rw-r--r--xmloff/source/draw/sdpropls.cxx2
-rw-r--r--xmloff/source/draw/shapeexport.cxx15
-rw-r--r--xmloff/source/draw/ximpshap.cxx37
-rw-r--r--xmloff/source/draw/ximpshap.hxx2
-rw-r--r--xmloff/source/meta/xmlmetai.cxx4
-rw-r--r--xmloff/source/style/PageMasterStyleMap.cxx6
-rw-r--r--xmloff/source/style/xmlnume.cxx19
-rw-r--r--xmloff/source/table/XMLTableExport.cxx2
-rw-r--r--xmlsecurity/inc/xmlsec-wrapper.h1
-rw-r--r--xmlsecurity/inc/xmlsec/saxhelper.hxx1
-rw-r--r--xmlsecurity/source/gpg/SecurityEnvironment.hxx3
-rw-r--r--xmlsecurity/source/helper/ooxmlsecparser.hxx1
-rw-r--r--xmlsecurity/source/helper/xsecparser.hxx1
-rw-r--r--xmlsecurity/source/xmlsec/saxhelper.cxx3
869 files changed, 15452 insertions, 9820 deletions
diff --git a/Repository.mk b/Repository.mk
index 6d468833eaf6..8175a7ceb8f5 100644
--- a/Repository.mk
+++ b/Repository.mk
@@ -619,7 +619,6 @@ $(eval $(call gb_Helper_register_libraries_for_install,PLAINLIBS_OOO,ooo, \
sdbc2 \
sofficeapp \
srtrs1 \
- $(if $(filter $(OS),WNT),sysdtrans) \
textconv_dict \
ucb1 \
ucbhelper \
@@ -638,10 +637,7 @@ $(eval $(call gb_Helper_register_libraries_for_install,PLAINLIBS_OOO,ooo, \
macabdrv1 \
) \
$(if $(filter WNT,$(OS)), \
- dnd \
- dtrans \
fps \
- ftransl \
inprocserv \
UAccCOM \
winaccessibility \
diff --git a/RepositoryExternal.mk b/RepositoryExternal.mk
index c3f29650b6bd..031c002ccd72 100644
--- a/RepositoryExternal.mk
+++ b/RepositoryExternal.mk
@@ -1570,13 +1570,14 @@ define gb_LinkTarget__use_openssl
$(call gb_LinkTarget_use_package,$(1),openssl)
ifeq ($(OS),WNT)
$(call gb_LinkTarget_add_libs,$(1),\
- $(call gb_UnpackedTarball_get_dir,openssl)/out32dll/ssleay32.lib \
- $(call gb_UnpackedTarball_get_dir,openssl)/out32dll/libeay32.lib \
+ $(call gb_UnpackedTarball_get_dir,openssl)/libcrypto.lib \
+ $(call gb_UnpackedTarball_get_dir,openssl)/libssl.lib \
)
else
$(call gb_LinkTarget_add_libs,$(1),\
$(call gb_UnpackedTarball_get_dir,openssl)/libssl.a \
$(call gb_UnpackedTarball_get_dir,openssl)/libcrypto.a \
+ $(if $(filter $(OS),LINUX),-pthread) \
)
$(call gb_LinkTarget_use_external_project,$(1),openssl)
ifeq ($(OS),SOLARIS)
@@ -3178,7 +3179,7 @@ $(call gb_LinkTarget_add_libs,$(1),\
else
$(call gb_LinkTarget_add_libs,$(1),\
-L$(call gb_UnpackedTarball_get_dir,python3) \
- -lpython$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m \
+ -lpython$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR) \
)
endif
diff --git a/avmedia/source/gstreamer/gstframegrabber.cxx b/avmedia/source/gstreamer/gstframegrabber.cxx
index bc183d563332..0135a78ed597 100644
--- a/avmedia/source/gstreamer/gstframegrabber.cxx
+++ b/avmedia/source/gstreamer/gstframegrabber.cxx
@@ -51,11 +51,9 @@ void FrameGrabber::disposePipeline()
FrameGrabber::FrameGrabber( const OUString &rURL ) :
FrameGrabber_BASE()
{
- gchar *pPipelineStr;
- pPipelineStr = g_strdup_printf(
- "uridecodebin uri=%s ! videoconvert ! videoscale ! appsink "
- "name=sink caps=\"video/x-raw,format=RGB,pixel-aspect-ratio=1/1\"",
- OUStringToOString( rURL, RTL_TEXTENCODING_UTF8 ).getStr() );
+ const char pPipelineStr[] =
+ "uridecodebin name=source ! videoconvert ! videoscale ! appsink "
+ "name=sink caps=\"video/x-raw,format=RGB,pixel-aspect-ratio=1/1\"";
GError *pError = nullptr;
mpPipeline = gst_parse_launch( pPipelineStr, &pError );
@@ -66,6 +64,12 @@ FrameGrabber::FrameGrabber( const OUString &rURL ) :
}
if( mpPipeline ) {
+
+ if (GstElement *pUriDecode = gst_bin_get_by_name(GST_BIN(mpPipeline), "source"))
+ g_object_set(pUriDecode, "uri", OUStringToOString(rURL, RTL_TEXTENCODING_UTF8).getStr(), nullptr);
+ else
+ g_warning("Missing 'source' element in gstreamer pipeline");
+
// pre-roll
switch( gst_element_set_state( mpPipeline, GST_STATE_PAUSED ) ) {
case GST_STATE_CHANGE_FAILURE:
diff --git a/bin/symstore.sh b/bin/symstore.sh
index 09ea3576bfe4..7b782a2078d7 100755
--- a/bin/symstore.sh
+++ b/bin/symstore.sh
@@ -16,6 +16,8 @@ BLACK_LIST="python.exe"
#
# Same format as for BLACK_LIST above
MOREPDBS_OKLIST="libcurl.dll
+libcrypto-1_1.dll
+libssl-1_1.dll
freebl3.dll
libeay32.dll
nspr4.dll
diff --git a/brand/cib/Image.svg b/brand/cib/Image.svg
index 369941585b61..b956bf05571f 100644
--- a/brand/cib/Image.svg
+++ b/brand/cib/Image.svg
@@ -2,30 +2,30 @@
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
x="0px"
y="0px"
viewBox="0 0 162 312"
xml:space="preserve"
id="svg3336"
- inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+ inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
sodipodi:docname="Image.svg"
width="162"
height="312"
inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\instsetoo_native\inc_common\windows\msi_templates\Binary\ImageBanner.bmp.png"
inkscape:export-xdpi="96"
- inkscape:export-ydpi="96"><metadata
+ inkscape:export-ydpi="96"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata
id="metadata3474"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
id="defs3472"><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath4978"><rect
@@ -61,22 +61,24 @@
guidetolerance="10"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
- inkscape:window-width="2880"
- inkscape:window-height="1721"
+ inkscape:window-width="1920"
+ inkscape:window-height="1011"
id="namedview3470"
showgrid="false"
inkscape:zoom="2.02"
- inkscape:cx="263.66575"
- inkscape:cy="147.35983"
- inkscape:window-x="2869"
- inkscape:window-y="-11"
+ inkscape:cx="180.44554"
+ inkscape:cy="147.52475"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="doXigate_Arbeitsunterlagen"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
- inkscape:showpageshadow="false" />
+ inkscape:showpageshadow="false"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1" />
<style
type="text/css"
id="style3338">
@@ -292,15 +294,31 @@
class="cls-1"
x="-12.205721"
y="-40.636944"
- style="fill:#961e29;stroke-width:2.30338931" /><g
- id="g1001"><path
- d="m 23.59,4.5 a 0.7,0.7 0 0 0 -0.643,0.409 0.68,0.68 0 0 0 0.149,0.74 l 5.814,5.833 a 0.7,0.7 0 0 0 0.74,0.151 0.688,0.688 0 0 0 0.425,-0.617 V 5.172 A 0.7,0.7 0 0 0 29.393,4.5 Z"
- class="cls-2"
- id="path6084"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" /><path
- d="M 7.6,4.5 A 0.689,0.689 0 0 0 6.921,5.19 V 31.81 A 0.688,0.688 0 0 0 7.6,32.5 l 15.3,-0.008 c 2.249,0.008 7.18,-4.832 7.18,-7.278 V 14.668 a 0.691,0.691 0 0 0 -0.2,-0.49 L 20.452,4.711 A 0.689,0.689 0 0 0 19.963,4.5 Z m 0.689,1.379 h 11.385 l 9.026,9.067 c 0,0 0,9.218 0,9.809 0,1.835 -4.229,6.366 -6.45,6.366 H 8.293 Z"
- class="cls-2"
- id="path6088"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" /></g></g></svg> \ No newline at end of file
+ style="fill:#ffffff;stroke-width:2.30338931;fill-opacity:1" /><g
+ id="g25"
+ transform="matrix(1.3734481,0,0,1.3734481,2.7428059,-8.3812465)"><path
+ d="m 21.65,17.96 c -0.31,-0.32 -0.83,-0.32 -1.14,0 L 12.1,26.37 8.57,22.85 6.65,24.77 12.1,30.22 23.01,19.31 21.66,17.95 Z"
+ style="fill:#e11e19"
+ id="path15" /><path
+ d="m 15.74,28.28 -2.33,1.97 h 1.45 c 2.67,0 4.84,-2.17 4.84,-4.84 v -0.44 l -2.22,1.9 c -0.37,0.67 -0.99,1.18 -1.74,1.41 z"
+ style="fill:#e11e19"
+ id="path17" /><polygon
+ points="4.92,28.42 4.92,10.25 17.86,10.25 17.86,18.13 19.69,16.56 19.69,8.41 3.08,8.41 3.08,30.26 9.62,30.26 8.07,28.42 "
+ style="fill:#e11e19"
+ id="polygon19" /><rect
+ x="7.2600002"
+ y="11.82"
+ width="7.8899999"
+ height="2.24"
+ rx="1.05"
+ ry="1.05"
+ style="fill:#e11e19"
+ id="rect21" /><rect
+ x="7.3699999"
+ y="17.120001"
+ width="7.8899999"
+ height="2.1300001"
+ rx="1"
+ ry="1"
+ style="fill:#e11e19"
+ id="rect23" /></g></g></svg>
diff --git a/brand/cib/banner.svg b/brand/cib/banner.svg
index 9b03d38ea183..6024e93533ee 100644
--- a/brand/cib/banner.svg
+++ b/brand/cib/banner.svg
@@ -2,30 +2,30 @@
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
x="0px"
y="0px"
viewBox="0 0 499 58"
xml:space="preserve"
id="svg3336"
- inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+ inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
sodipodi:docname="banner.svg"
width="499"
height="58"
inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\brand\cib\intro-highres.png"
inkscape:export-xdpi="96"
- inkscape:export-ydpi="96"><metadata
+ inkscape:export-ydpi="96"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata
id="metadata3474"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
id="defs3472"><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath4978"><rect
@@ -62,21 +62,23 @@
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:window-width="1920"
- inkscape:window-height="1000"
+ inkscape:window-height="1011"
id="namedview3470"
showgrid="false"
- inkscape:zoom="2.16"
- inkscape:cx="263.66575"
- inkscape:cy="108.40609"
- inkscape:window-x="-11"
- inkscape:window-y="-11"
+ inkscape:zoom="5.2987922"
+ inkscape:cx="408.20623"
+ inkscape:cy="66.052788"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg3336"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
- inkscape:showpageshadow="false" />
+ inkscape:showpageshadow="false"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1" />
<style
type="text/css"
id="style3338">
@@ -283,24 +285,30 @@
</g>
<g
- data-name="doXigate Arbeitsunterlagen"
- id="doXigate_Arbeitsunterlagen"
- transform="matrix(1.5675676,0,0,1.5675676,441,-6e-7)"><rect
- id="rect997"
- height="37"
- width="37"
- class="cls-1"
- x="0"
- y="0"
- style="fill:#961e29" /><g
- id="g1001"><path
- d="m 23.59,4.5 a 0.7,0.7 0 0 0 -0.643,0.409 0.68,0.68 0 0 0 0.149,0.74 l 5.814,5.833 a 0.7,0.7 0 0 0 0.74,0.151 0.688,0.688 0 0 0 0.425,-0.617 V 5.172 A 0.7,0.7 0 0 0 29.393,4.5 Z"
- class="cls-2"
- id="path6084"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" /><path
- d="M 7.6,4.5 A 0.689,0.689 0 0 0 6.921,5.19 V 31.81 A 0.688,0.688 0 0 0 7.6,32.5 l 15.3,-0.008 c 2.249,0.008 7.18,-4.832 7.18,-7.278 V 14.668 a 0.691,0.691 0 0 0 -0.2,-0.49 L 20.452,4.711 A 0.689,0.689 0 0 0 19.963,4.5 Z m 0.689,1.379 h 11.385 l 9.026,9.067 c 0,0 0,9.218 0,9.809 0,1.835 -4.229,6.366 -6.45,6.366 H 8.293 Z"
- class="cls-2"
- id="path6088"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" /></g></g></svg> \ No newline at end of file
+ id="g25"
+ transform="matrix(2.5725516,0,0,2.5725516,438.56872,-20.558642)"><path
+ d="m 21.65,17.96 c -0.31,-0.32 -0.83,-0.32 -1.14,0 L 12.1,26.37 8.57,22.85 6.65,24.77 12.1,30.22 23.01,19.31 21.66,17.95 Z"
+ style="fill:#e11e19"
+ id="path15" /><path
+ d="m 15.74,28.28 -2.33,1.97 h 1.45 c 2.67,0 4.84,-2.17 4.84,-4.84 v -0.44 l -2.22,1.9 c -0.37,0.67 -0.99,1.18 -1.74,1.41 z"
+ style="fill:#e11e19"
+ id="path17" /><polygon
+ points="8.07,28.42 4.92,28.42 4.92,10.25 17.86,10.25 17.86,18.13 19.69,16.56 19.69,8.41 3.08,8.41 3.08,30.26 9.62,30.26 "
+ style="fill:#e11e19"
+ id="polygon19" /><rect
+ x="7.2600002"
+ y="11.82"
+ width="7.8899999"
+ height="2.24"
+ rx="1.05"
+ ry="1.05"
+ style="fill:#e11e19"
+ id="rect21" /><rect
+ x="7.3699999"
+ y="17.120001"
+ width="7.8899999"
+ height="2.1300001"
+ rx="1"
+ ry="1"
+ style="fill:#e11e19"
+ id="rect23" /></g></svg>
diff --git a/brand/cib/flat_logo.svg b/brand/cib/flat_logo.svg
index b9f52ca5d5d1..2ee6c3366d9e 100644
--- a/brand/cib/flat_logo.svg
+++ b/brand/cib/flat_logo.svg
@@ -1,417 +1,87 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- version="1.1"
- x="0px"
- y="0px"
- viewBox="0 0 491.5 85.5"
- xml:space="preserve"
- id="svg3336"
- inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
- sodipodi:docname="flat_logo.svg"
- width="491.5"
- height="85.5"><metadata
- id="metadata3474"><rdf:RDF><cc:Work
- rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
- id="defs3472"><clipPath
- clipPathUnits="userSpaceOnUse"
- id="clipPath4978"><rect
- style="fill:#5fa243;fill-opacity:1"
- id="rect4980"
- width="113.625"
- height="79.875"
- x="72.875"
- y="50.125" /></clipPath><style
- id="style1078">
- .cls-1 {
- fill: #961e29;
- }
-
- .cls-2 {
- fill: #fff;
- }
- </style><style
- id="style943">
- .cls-1 {
- fill: #961e29;
- }
-
- .cls-2 {
- fill: #fff;
- }
- </style></defs><sodipodi:namedview
- pagecolor="#eff1f4"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="0"
- inkscape:pageshadow="2"
- inkscape:window-width="2880"
- inkscape:window-height="1721"
- id="namedview3470"
- showgrid="false"
- inkscape:zoom="2.8284271"
- inkscape:cx="226.99865"
- inkscape:cy="120.32247"
- inkscape:window-x="2869"
- inkscape:window-y="-11"
- inkscape:window-maximized="1"
- inkscape:current-layer="svg3336"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:showpageshadow="false" />
-<style
- type="text/css"
- id="style3338">
- .st0{display:none;}
- .st1{display:inline;}
- .st2{fill:#5FA243;}
- .st3{fill:#FFFFFF;}
- .st4{fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;}
- .st5{fill:#C12521;}
- .st6{clip-path:url(#SVGID_2_);fill:#FFFFFF;}
- .st7{display:inline;fill:#5FA243;}
- .st8{display:inline;fill:#C12521;}
- .st9{display:inline;fill:#FFFFFF;}
- .st10{clip-path:url(#SVGID_4_);fill:#FFFFFF;}
- .st11{font-family:'CIBUnit';}
- .st12{font-size:17px;}
-</style>
-<g
- id="alte_version"
- class="st0"
- style="display:none"
- transform="translate(-52.877201,-98.441053)">
- <g
- class="st1"
- id="g3341"
- style="display:inline">
- <polygon
- class="st2"
- points="262,-250 262,-64 0,-64 0,-249.9 "
- id="polygon3343"
- style="fill:#5fa243" />
- </g>
- <g
- id="Libre_2_"
- class="st1"
- style="display:inline">
- <polyline
- class="st3"
- points="73.7,-207.5 73.7,-182.8 89.6,-182.8 89.6,-186.5 78.6,-186.5 78.6,-207.5 73.7,-207.5 "
- id="polyline3346"
- style="fill:#ffffff" />
- <path
- class="st3"
- d="m 92.6,-182.8 h 4.9 v -17.8 h -4.9 v 17.8 m 2.4,-19.3 c 1.5,0 2.8,-1.2 2.8,-2.8 0,-1.5 -1.3,-2.8 -2.8,-2.8 -1.6,0 -2.8,1.3 -2.8,2.8 0,1.6 1.3,2.8 2.8,2.8"
- id="path3348"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" />
- <path
- class="st3"
- d="m 105.9,-198.5 v 0 L 105.8,-209 H 101 v 26.2 h 4.8 l 0.1,-2.1 h 0.1 c 1.5,1.7 3,2.4 5.6,2.4 4.7,0 7.8,-4.3 7.8,-9.6 0,-5.1 -2.8,-8.9 -7.6,-8.9 -2.7,0.1 -4.2,0.9 -5.9,2.5 m 0,6.4 c 0,-3.1 1.4,-5.1 4,-5.1 2.9,0 4.4,2.1 4.4,5.5 0,3.4 -1.4,5.5 -4.3,5.5 -2.5,0 -4.1,-2 -4.1,-5.1 v -0.8"
- id="path3350"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" />
- <path
- class="st3"
- d="m 132.4,-200.9 c -2.3,0.1 -4.5,1.6 -5.6,3.5 h -0.1 l -0.1,-3.2 h -4.8 v 17.8 h 4.9 v -6.7 c 0,-3.6 0.7,-4.8 1.8,-5.7 1,-0.7 2.1,-1 3.7,-1.1 l 0.2,-4.6"
- id="path3352"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" />
- <path
- class="st3"
- d="m 150.3,-192.7 c 0,-4.4 -2.7,-8.2 -7.3,-8.2 -5.6,0 -9.2,3.9 -9.2,9.7 0,5.7 3.7,8.8 9.2,8.8 2.6,0 4.4,-0.4 6.1,-1.2 l -0.5,-3.6 c -1.6,0.7 -3.2,1.1 -5,1.1 -2.9,0 -4.8,-1.3 -5,-4.1 h 11.5 c 0.1,-0.7 0.2,-1.7 0.2,-2.5 m -7.9,-4.5 c 2.1,0 3.1,1.7 3.2,3.5 h -6.9 c 0.4,-2 1.8,-3.5 3.7,-3.5"
- id="path3354"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" />
- <path
- class="st3"
- d="m 165,-207.8 c -6.5,0 -11.9,4.8 -11.9,12.7 0,7.9 5.4,12.7 11.9,12.7 6.5,0 11.9,-4.8 11.9,-12.7 0.1,-8 -5.3,-12.7 -11.9,-12.7 m 0,2.4 c 4.9,0 8.6,3.6 8.6,10.2 0,6.6 -3.7,10.2 -8.6,10.2 -4.9,0 -8.6,-3.6 -8.6,-10.2 0.1,-6.5 3.8,-10.2 8.6,-10.2"
- id="path3356"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" />
- <path
- class="st3"
- d="m 181.6,-201.5 v 1.1 h -2.9 v 2.3 h 2.9 v 15.3 h 3 v -15.3 h 4.5 v -2.3 h -4.5 v -1.6 c 0,-3.2 1.3,-5 3.8,-5 1.1,0 1.9,0.2 2.5,0.4 l 0.3,-2.3 c -0.7,-0.3 -1.9,-0.5 -2.9,-0.5 -4.2,0 -6.7,2.8 -6.7,7.9"
- id="path3358"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" />
- <path
- class="st3"
- d="m 191.7,-201.5 v 1.1 h -2.9 v 2.3 h 2.9 v 15.3 h 3 v -15.3 h 4.5 v -2.3 h -4.5 v -1.6 c 0,-3.2 1.3,-5 3.8,-5 1.1,0 1.9,0.2 2.5,0.4 l 0.3,-2.3 c -0.7,-0.3 -1.9,-0.5 -2.9,-0.5 -4.2,0 -6.7,2.8 -6.7,7.9"
- id="path3360"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" />
- <path
- class="st3"
- d="m 202.8,-182.8 h 3 v -17.6 h -3 v 17.6 m 1.5,-20.2 c 1.1,0 1.9,-0.8 1.9,-1.9 0,-1.1 -0.8,-1.9 -1.9,-1.9 -1.1,0 -1.9,0.8 -1.9,1.9 0.1,1.1 0.9,1.9 1.9,1.9"
- id="path3362"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" />
- <path
- class="st3"
- d="m 212.2,-191.7 c 0,-4.4 2.7,-6.8 6.1,-6.8 1.8,0 3.4,0.4 4.7,1.1 l 0.3,-2.3 c -1.1,-0.5 -2.8,-1.1 -4.8,-1.1 -5.4,0 -9.5,3.3 -9.5,9.5 0,5.8 3.7,8.9 8.6,8.9 2.2,0 3.7,-0.3 5.5,-1 l -0.3,-2.3 c -1.5,0.7 -3.2,1 -4.7,1 -3.5,0 -5.9,-2.3 -5.9,-7"
- id="path3364"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" />
- <path
- class="st3"
- d="m 240.5,-190.9 c 0.1,-0.7 0.1,-1.2 0.1,-1.8 0,-4.5 -2.4,-8.1 -6.9,-8.1 -4.9,0 -8.5,4.1 -8.5,9.5 0,6 3.6,8.9 8.5,8.9 2.2,0 3.8,-0.3 5.5,-1 l -0.3,-2.3 c -1.3,0.7 -3.3,1 -4.8,1 -3.5,0 -5.8,-2.2 -5.9,-6.2 h 12.3 m -7,-7.5 c 2.7,0 4.1,2.2 4.1,5.1 h -9.2 c 0.5,-3.1 2.2,-5.1 5.1,-5.1"
- id="path3366"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" />
- <path
- class="st4"
- d="m 47.3,-224.2 c -0.4,0 -0.8,0.2 -1,0.6 -0.2,0.4 -0.1,0.8 0.2,1.1 l 8.7,8.8 c 0.3,0.3 0.7,0.4 1.1,0.2 0.4,-0.2 0.6,-0.5 0.6,-0.9 v -8.8 c 0,-0.5 -0.5,-1 -1,-1 z m 0,0"
- id="path3368"
- inkscape:connector-curvature="0"
- style="clip-rule:evenodd;fill:#ffffff;fill-rule:evenodd" />
- <path
- class="st4"
- d="m 23.4,-224.2 c -0.5,0 -1,0.5 -1,1 v 39.9 c 0,0.5 0.5,1 1,1 H 56 c 0.5,0 1,-0.5 1,-1 V -209 c 0,-0.3 -0.1,-0.5 -0.3,-0.7 l -14.1,-14.2 c -0.2,-0.2 -0.5,-0.3 -0.7,-0.3 z m 1,2.1 h 17.1 l 13.5,13.6 v 24.3 H 24.4 Z m 0,0"
- id="path3370"
- inkscape:connector-curvature="0"
- style="clip-rule:evenodd;fill:#ffffff;fill-rule:evenodd" />
- </g>
- <g
- class="st1"
- id="g3372"
- style="display:inline">
- <path
- class="st5"
- d="M 0,-103.5 0.1,-64 H 262 v -112 c -82,46.9 -180.2,-13.4 -262,72.5 z"
- id="path3374"
- inkscape:connector-curvature="0"
- style="fill:#c12521" />
- </g>
- <g
- class="st1"
- id="g3376"
- style="display:inline">
- <path
- class="st3"
- d="m 313.7,-253 c 0,0 -0.3,1.4 -1,4.1 -0.6,2.7 -1.7,6.6 -3.2,11.5 -1.6,4.9 -3.6,10.8 -6.6,17.4 -3,6.6 -6.9,13.8 -12.1,21 -0.7,0.9 -1.3,1.8 -2,2.7 -0.7,0.9 -1.5,1.8 -2.2,2.7 -0.4,0.4 -0.7,0.9 -1.1,1.4 -0.4,0.4 -0.8,0.9 -1.2,1.3 -0.8,0.9 -1.6,1.8 -2.4,2.6 -0.8,0.9 -1.7,1.7 -2.6,2.6 -0.4,0.4 -0.9,0.9 -1.3,1.3 -0.4,0.4 -0.9,0.8 -1.4,1.2 -0.9,0.8 -1.9,1.6 -2.9,2.5 -1,0.8 -2,1.5 -3,2.3 -4.1,3 -8.6,5.9 -13.4,8.3 -4.8,2.4 -9.9,4.6 -15.2,6.3 -10.6,3.5 -22,5.7 -33.5,7 -11.6,1.4 -23.3,1.8 -35.1,2.1 -11.7,0.2 -23.4,0.5 -35,0.7 -11.5,0.3 -22.8,0.9 -33.7,2.1 -10.9,1.1 -21.3,3 -31,5.4 -9.7,2.5 -18.6,5.6 -26.6,9.2 -8,3.6 -14.9,7.6 -20.8,11.6 -1.5,0.9 -2.9,2 -4.2,3 -0.7,0.5 -1.3,1 -2,1.4 -0.6,0.5 -1.2,1 -1.8,1.5 -1.2,0.9 -2.4,1.8 -3.5,2.7 -1.1,0.9 -2.1,1.8 -3.1,2.6 -2,1.6 -3.6,3.2 -5.1,4.6 -1.5,1.3 -2.7,2.5 -3.6,3.5 -2,1.9 -3,3 -3,3 0,0 1,-1.1 2.8,-3.2 0.9,-1 2,-2.3 3.4,-3.7 1.4,-1.4 3,-3.1 4.9,-4.8 3.7,-3.6 8.5,-7.6 14.4,-11.7 5.8,-4.2 12.8,-8.4 20.8,-12.1 8,-3.8 17,-7.1 26.8,-9.8 9.8,-2.6 20.3,-4.6 31.3,-6 11,-1.4 22.3,-2.1 33.9,-2.6 11.6,-0.5 23.3,-0.7 35,-1.1 11.7,-0.4 23.4,-1 34.7,-2.3 11.4,-1.3 22.4,-3.5 32.7,-6.8 10.2,-3.5 19.6,-8.2 27.6,-14 1,-0.7 2,-1.5 2.9,-2.2 0.9,-0.8 1.9,-1.6 2.8,-2.3 0.9,-0.8 1.8,-1.6 2.7,-2.4 0.9,-0.8 1.7,-1.6 2.6,-2.4 0.8,-0.8 1.6,-1.7 2.4,-2.5 0.4,-0.4 0.8,-0.8 1.2,-1.2 0.4,-0.4 0.7,-0.9 1.1,-1.3 0.7,-0.9 1.5,-1.7 2.2,-2.5 0.7,-0.8 1.4,-1.7 2,-2.6 5.3,-6.8 9.4,-13.8 12.6,-20 3.3,-6.3 5.6,-12 7.5,-16.8 0.9,-2.4 1.7,-4.5 2.4,-6.4 0.4,-0.9 0.6,-1.8 0.9,-2.6 0.3,-0.8 0.5,-1.5 0.7,-2.2 0.8,-2.7 1.3,-4.1 1.3,-4.1 z"
- id="path3378"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" />
- </g>
- <g
- class="st1"
- id="g3380"
- style="display:inline">
- <path
- class="st3"
- d="m 185.1,-89.2 c 0,1.9 -2.3,4 -4.2,4 -1.2,0 -3.4,0 -3.4,0 v -33.6 h 7.6 z"
- id="path3382"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" />
- <g
- id="g3384">
- <defs
- id="defs3386">
- <rect
- id="SVGID_1_"
- x="147.60001"
- y="-126.7"
- width="92.699997"
- height="42" />
- </defs>
- <clipPath
- id="SVGID_2_">
- <use
- xlink:href="#SVGID_1_"
- style="overflow:visible"
- id="use3390"
- x="0"
- y="0"
- width="100%"
- height="100%" />
- </clipPath>
- <path
- class="st6"
- d="m 207.1,-108.8 c 0,-1.3 -0.3,-2.3 -0.9,-2.8 -0.6,-0.5 -1.7,-0.8 -3.1,-0.8 H 197 v 7.3 h 6.3 c 1.3,0 2.3,-0.3 2.9,-0.9 0.6,-0.5 0.9,-1.5 0.9,-2.8 z m 0.8,13.3 c 0,-1.4 -0.3,-2.4 -1,-3.1 -0.7,-0.6 -1.8,-0.9 -3.5,-0.9 h -6.5 v 8.1 h 6.7 c 0,0 2.6,-0.3 3.3,-0.9 0.7,-0.5 1,-1.6 1,-3.2 z m -14.3,-23.3 c 0.8,0 9.7,0 9.7,0 3.7,0 6.4,0.8 8.2,2.3 1.8,1.5 2.7,3.6 2.7,6.3 0,1.9 -0.4,3.4 -1.2,4.6 -0.8,1.2 -1.9,2.1 -3.2,2.6 v 0.1 c 3.8,1 5.7,3.7 5.7,7.9 0,1.5 -0.2,2.9 -0.7,4.1 -0.5,1.2 -1.2,2.2 -2.1,3.1 -1,0.9 -2.2,1.5 -3.7,1.9 -1.5,0.4 -3.3,0.7 -5.4,0.7 h -13.8 c 0,0 0,-29.6 0,-29.6 -0.1,-1.5 2.2,-4 3.8,-4 z"
- id="path3392"
- clip-path="url(#SVGID_2_)"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" />
- <path
- class="st6"
- d="m 167.1,-112.3 c -9.3,-1.4 -11.6,1.8 -11.6,10.3 0,8.2 2.3,11.3 12.4,10.3 3.2,-0.3 3.9,0.7 4.5,5.6 -1.1,0.6 -5.9,1.4 -9.3,1.3 -5.1,-0.2 -9.3,-1.4 -11.7,-4.3 -2.5,-2.8 -3.7,-7.2 -3.7,-13.2 0,-12 5.4,-17 15.9,-17 5.1,0 8.6,1.5 8.6,1.5 -1,5.6 -1.9,6 -5.1,5.5 z"
- id="path3394"
- clip-path="url(#SVGID_2_)"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" />
- </g>
- <path
- class="st3"
- d="m 234.5,-99.5 c 2.5,0 6.2,-4 6.2,-6.1 0,0 0,-21 0,-21 h -19.3 v 27.2 h 13.1 z"
- id="path3396"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" />
- </g>
- <text
- transform="translate(20.9652,-84.5756)"
- class="st9 st11 st12"
- id="text3398"
- style="font-size:17px;line-height:0%;font-family:CIBUnit;display:inline;fill:#ffffff">powered by</text>
-
-
-
-
-
-
-</g>
-
-<g
- data-name="doXigate Arbeitsunterlagen"
- id="doXigate_Arbeitsunterlagen"
- transform="matrix(2.1647413,0,0,2.1647413,66.690227,2.702286)"><g
- id="g995"><path
- id="path949"
- d="M 53.008,20.047 H 43 V 3.242 h 3.785 v 13.735 h 6.223 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path951"
- d="m 56.781,6.148 a 2.163,2.163 0 0 1 -1.535,-0.556 1.8,1.8 0 0 1 -0.6,-1.365 1.733,1.733 0 0 1 0.6,-1.36 2.508,2.508 0 0 1 3.076,0 1.737,1.737 0 0 1 0.592,1.36 1.783,1.783 0 0 1 -0.592,1.382 2.2,2.2 0 0 1 -1.541,0.539 z m 1.828,13.9 h -3.7 v -12 h 3.7 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path953"
- d="M 65.477,18.652 H 65.43 v 1.395 h -3.7 V 2.281 h 3.7 v 7.571 h 0.047 a 4.392,4.392 0 0 1 3.9,-2.1 4.28,4.28 0 0 1 3.574,1.594 6.87,6.87 0 0 1 1.254,4.359 7.437,7.437 0 0 1 -1.465,4.816 4.771,4.771 0 0 1 -3.914,1.817 3.78,3.78 0 0 1 -3.349,-1.686 z M 65.371,13.59 v 1.23 a 2.81,2.81 0 0 0 0.668,1.922 2.173,2.173 0 0 0 1.711,0.762 2.269,2.269 0 0 0 1.963,-0.979 4.722,4.722 0 0 0 0.7,-2.771 3.763,3.763 0 0 0 -0.638,-2.326 2.156,2.156 0 0 0 -1.823,-0.838 2.352,2.352 0 0 0 -1.845,0.832 3.157,3.157 0 0 0 -0.736,2.168 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path955"
- d="m 84.438,11.387 a 3.217,3.217 0 0 0 -1.559,-0.364 2.245,2.245 0 0 0 -1.887,0.885 3.861,3.861 0 0 0 -0.679,2.408 v 5.731 h -3.7 v -12 h 3.7 v 2.226 h 0.046 a 3.2,3.2 0 0 1 3.164,-2.437 2.384,2.384 0 0 1 0.915,0.141 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path957"
- d="M 96.848,15.1 H 89.02 q 0.188,2.613 3.293,2.613 a 6.428,6.428 0 0 0 3.48,-0.938 v 2.672 a 9.139,9.139 0 0 1 -4.324,0.891 6.087,6.087 0 0 1 -4.512,-1.611 6.092,6.092 0 0 1 -1.6,-4.495 6.422,6.422 0 0 1 1.729,-4.732 5.778,5.778 0 0 1 4.266,-1.746 5.24,5.24 0 0 1 4.06,1.559 6,6 0 0 1 1.436,4.23 z m -3.434,-2.274 q 0,-2.578 -2.086,-2.578 A 1.992,1.992 0 0 0 89.787,10.986 3.361,3.361 0 0 0 89,12.828 Z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path959"
- d="m 106.516,20.34 a 7.819,7.819 0 0 1 -5.883,-2.35 8.433,8.433 0 0 1 -2.274,-6.123 9.04,9.04 0 0 1 2.309,-6.445 7.991,7.991 0 0 1 6.117,-2.461 7.63,7.63 0 0 1 5.815,2.355 8.688,8.688 0 0 1 2.22,6.211 8.894,8.894 0 0 1 -2.3,6.387 7.907,7.907 0 0 1 -6.004,2.426 z M 106.68,6.219 a 3.81,3.81 0 0 0 -3.164,1.494 6.224,6.224 0 0 0 -1.172,3.955 6.111,6.111 0 0 0 1.172,3.949 4.044,4.044 0 0 0 6.175,0.041 6.045,6.045 0 0 0 1.149,-3.92 6.555,6.555 0 0 0 -1.113,-4.066 3.63,3.63 0 0 0 -3.047,-1.453 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path961"
- d="m 125.078,5.117 a 3.746,3.746 0 0 0 -1.371,-0.281 q -1.78,0 -1.781,1.934 v 1.277 h 2.742 v 2.73 h -2.742 v 9.27 h -3.692 v -9.27 h -2.015 v -2.73 h 2.015 V 6.559 a 4.322,4.322 0 0 1 1.336,-3.3 5.1,5.1 0 0 1 3.63,-1.259 6.389,6.389 0 0 1 1.875,0.234 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path963"
- d="m 134.277,5.117 a 3.746,3.746 0 0 0 -1.371,-0.281 q -1.781,0 -1.781,1.934 v 1.277 h 2.742 v 2.73 h -2.742 v 9.27 h -3.691 v -9.27 h -2.016 v -2.73 h 2.016 V 6.559 a 4.319,4.319 0 0 1 1.336,-3.3 5.092,5.092 0 0 1 3.63,-1.259 6.389,6.389 0 0 1 1.875,0.234 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path965"
- d="m 137.523,6.148 a 2.163,2.163 0 0 1 -1.535,-0.556 1.794,1.794 0 0 1 -0.6,-1.365 1.732,1.732 0 0 1 0.6,-1.36 2.509,2.509 0 0 1 3.077,0 1.74,1.74 0 0 1 0.591,1.36 1.786,1.786 0 0 1 -0.591,1.382 2.2,2.2 0 0 1 -1.542,0.539 z m 1.829,13.9 h -3.7 v -12 h 3.7 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path967"
- d="m 151.563,19.613 a 7.316,7.316 0 0 1 -3.622,0.727 6.124,6.124 0 0 1 -4.476,-1.676 5.785,5.785 0 0 1 -1.711,-4.324 6.373,6.373 0 0 1 1.834,-4.822 6.775,6.775 0 0 1 4.9,-1.764 6.3,6.3 0 0 1 3.071,0.562 v 3.141 a 4.224,4.224 0 0 0 -2.59,-0.867 3.41,3.41 0 0 0 -2.526,0.932 3.475,3.475 0 0 0 -0.931,2.572 3.424,3.424 0 0 0 0.89,2.5 3.275,3.275 0 0 0 2.449,0.908 4.891,4.891 0 0 0 2.708,-0.867 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path969"
- d="m 164.77,15.1 h -7.829 q 0.188,2.613 3.293,2.613 a 6.429,6.429 0 0 0 3.481,-0.938 v 2.672 a 9.142,9.142 0 0 1 -4.324,0.891 6.087,6.087 0 0 1 -4.512,-1.611 6.092,6.092 0 0 1 -1.606,-4.495 6.422,6.422 0 0 1 1.735,-4.732 5.777,5.777 0 0 1 4.265,-1.746 5.242,5.242 0 0 1 4.061,1.559 6,6 0 0 1 1.436,4.23 z m -3.434,-2.274 q 0,-2.578 -2.086,-2.578 a 1.992,1.992 0 0 0 -1.541,0.738 3.354,3.354 0 0 0 -0.791,1.84 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path971"
- d="m 44.62,32.412 v 3.555 H 43 v -9.8 h 2.974 a 3.938,3.938 0 0 1 2.618,0.786 2.743,2.743 0 0 1 0.93,2.215 3.061,3.061 0 0 1 -0.971,2.338 3.689,3.689 0 0 1 -2.625,0.909 z m 0,-4.908 v 3.582 h 1.053 a 2.333,2.333 0 0 0 1.593,-0.485 1.737,1.737 0 0 0 0.547,-1.368 q 0,-1.73 -2.01,-1.729 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path973"
- d="M 56.272,36.131 A 4.41,4.41 0 0 1 52.878,34.757 5.046,5.046 0 0 1 51.6,31.182 5.348,5.348 0 0 1 52.9,27.408 4.568,4.568 0 0 1 56.43,26 a 4.31,4.31 0 0 1 3.325,1.367 5.06,5.06 0 0 1 1.262,3.575 5.364,5.364 0 0 1 -1.292,3.794 4.481,4.481 0 0 1 -3.453,1.395 z m 0.076,-8.7 a 2.727,2.727 0 0 0 -2.191,1.005 3.973,3.973 0 0 0 -0.844,2.645 4.013,4.013 0 0 0 0.82,2.632 2.647,2.647 0 0 0 2.146,1 2.77,2.77 0 0 0 2.222,-0.95 3.967,3.967 0 0 0 0.814,-2.659 4.146,4.146 0 0 0 -0.791,-2.714 2.667,2.667 0 0 0 -2.176,-0.961 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path975"
- d="m 76.025,26.164 -2.686,9.8 H 71.5 L 69.634,29.11 A 4.77,4.77 0 0 1 69.49,28.153 h -0.027 a 4.639,4.639 0 0 1 -0.164,0.944 l -1.873,6.87 h -1.88 l -2.741,-9.8 h 1.784 l 1.777,7.178 a 5.2,5.2 0 0 1 0.137,0.943 h 0.034 a 5.373,5.373 0 0 1 0.192,-0.943 l 2.009,-7.178 h 1.675 l 1.859,7.233 a 5.635,5.635 0 0 1 0.144,0.875 h 0.027 a 5.445,5.445 0 0 1 0.158,-0.9 l 1.743,-7.2 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path977"
- d="m 83.94,35.967 h -5.5 v -9.8 h 5.285 v 1.381 h -3.661 v 2.772 h 3.37 v 1.374 h -3.37 v 2.9 h 3.876 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path979"
- d="m 94.307,35.967 h -1.9 l -1.565,-2.625 a 5.813,5.813 0 0 0 -0.414,-0.619 2.488,2.488 0 0 0 -0.41,-0.42 1.349,1.349 0 0 0 -0.454,-0.239 1.9,1.9 0 0 0 -0.554,-0.076 h -0.656 v 3.979 h -1.622 v -9.8 h 3.227 a 4.678,4.678 0 0 1 1.271,0.164 2.962,2.962 0 0 1 1.012,0.5 2.3,2.3 0 0 1 0.673,0.826 2.608,2.608 0 0 1 0.243,1.16 2.883,2.883 0 0 1 -0.153,0.954 2.492,2.492 0 0 1 -0.438,0.771 2.661,2.661 0 0 1 -0.683,0.578 3.4,3.4 0 0 1 -0.9,0.369 v 0.028 a 2.489,2.489 0 0 1 0.465,0.332 c 0.132,0.12 0.258,0.244 0.376,0.372 a 4.53,4.53 0 0 1 0.352,0.434 c 0.117,0.162 0.245,0.35 0.387,0.564 z m -5.954,-8.484 v 3.186 h 1.353 a 2,2 0 0 0 0.693,-0.116 1.587,1.587 0 0 0 0.551,-0.335 1.52,1.52 0 0 0 0.363,-0.533 1.843,1.843 0 0 0 0.129,-0.7 A 1.4,1.4 0 0 0 91,27.88 1.856,1.856 0 0 0 89.722,27.48 Z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path981"
- d="m 102,35.967 h -5.5 v -9.8 h 5.284 v 1.381 h -3.659 v 2.772 h 3.37 v 1.374 h -3.37 v 2.9 H 102 Z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path983"
- d="m 104.794,35.967 v -9.8 h 2.83 q 5.421,0 5.421,4.778 a 4.711,4.711 0 0 1 -1.5,3.648 5.741,5.741 0 0 1 -4.033,1.377 z m 1.62,-8.422 v 7.048 h 1.3 a 3.636,3.636 0 0 0 2.67,-0.944 3.583,3.583 0 0 0 0.953,-2.666 q 0,-3.438 -3.562,-3.438 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path985"
- d="m 120.785,35.967 v -9.8 h 3.115 a 3.665,3.665 0 0 1 2.251,0.622 1.932,1.932 0 0 1 0.832,1.62 2.32,2.32 0 0 1 -0.472,1.45 2.548,2.548 0 0 1 -1.306,0.875 v 0.027 a 2.552,2.552 0 0 1 1.616,0.748 2.275,2.275 0 0 1 0.606,1.644 2.47,2.47 0 0 1 -0.991,2.038 3.93,3.93 0 0 1 -2.5,0.779 z m 1.62,-8.5 v 2.789 h 1.053 a 2.028,2.028 0 0 0 1.33,-0.4 1.392,1.392 0 0 0 0.482,-1.131 q 0,-1.259 -1.682,-1.258 z m 0,4.1 v 3.1 h 1.388 a 2.119,2.119 0 0 0 1.4,-0.42 1.441,1.441 0 0 0 0.5,-1.159 q 0,-1.525 -2.112,-1.524 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path987"
- d="m 136.717,26.164 -3.217,6.241 v 3.562 h -1.627 V 32.44 l -3.131,-6.276 h 1.858 l 1.927,4.2 q 0.034,0.075 0.2,0.568 h 0.021 a 3.839,3.839 0 0 1 0.226,-0.568 l 2.016,-4.2 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path989"
- d="m 150.752,35.557 a 5.938,5.938 0 0 1 -2.755,0.574 4.5,4.5 0 0 1 -3.418,-1.347 4.909,4.909 0 0 1 -1.285,-3.534 5.15,5.15 0 0 1 1.445,-3.8 4.951,4.951 0 0 1 3.655,-1.45 6,6 0 0 1 2.358,0.4 v 1.614 a 4.208,4.208 0 0 0 -2.187,-0.588 3.442,3.442 0 0 0 -2.582,1.018 3.744,3.744 0 0 0 -0.983,2.724 3.567,3.567 0 0 0 0.923,2.58 3.209,3.209 0 0 0 2.427,0.961 4.348,4.348 0 0 0 2.406,-0.656 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path991"
- d="m 155.329,35.967 h -1.675 v -9.8 h 1.675 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path993"
- d="m 158.793,35.967 v -9.8 h 3.11 a 3.667,3.667 0 0 1 2.252,0.622 1.931,1.931 0 0 1 0.831,1.62 2.32,2.32 0 0 1 -0.471,1.45 2.548,2.548 0 0 1 -1.306,0.875 v 0.027 a 2.552,2.552 0 0 1 1.616,0.748 2.279,2.279 0 0 1 0.606,1.644 2.47,2.47 0 0 1 -0.991,2.038 3.932,3.932 0 0 1 -2.5,0.779 z m 1.62,-8.5 v 2.789 h 1.053 a 2.028,2.028 0 0 0 1.33,-0.4 1.392,1.392 0 0 0 0.481,-1.131 q 0,-1.259 -1.681,-1.258 z m 0,4.1 v 3.1 h 1.387 a 2.119,2.119 0 0 0 1.405,-0.42 1.441,1.441 0 0 0 0.5,-1.159 q 0,-1.525 -2.112,-1.524 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /></g><rect
- id="rect997"
- height="37"
- width="37"
- class="cls-1"
- x="0"
- y="0"
- style="fill:#961e29" /><g
- id="g1001"><path
- d="m 23.59,4.5 a 0.7,0.7 0 0 0 -0.643,0.409 0.68,0.68 0 0 0 0.149,0.74 l 5.814,5.833 a 0.7,0.7 0 0 0 0.74,0.151 0.688,0.688 0 0 0 0.425,-0.617 V 5.172 A 0.7,0.7 0 0 0 29.393,4.5 Z"
- class="cls-2"
- id="path6084"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" /><path
- d="M 7.6,4.5 A 0.689,0.689 0 0 0 6.921,5.19 V 31.81 A 0.688,0.688 0 0 0 7.6,32.5 l 15.3,-0.008 c 2.249,0.008 7.18,-4.832 7.18,-7.278 V 14.668 a 0.691,0.691 0 0 0 -0.2,-0.49 L 20.452,4.711 A 0.689,0.689 0 0 0 19.963,4.5 Z m 0.689,1.379 h 11.385 l 9.026,9.067 c 0,0 0,9.218 0,9.809 0,1.835 -4.229,6.366 -6.45,6.366 H 8.293 Z"
- class="cls-2"
- id="path6088"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" /></g></g></svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.2" width="46.5mm" height="10.3mm" viewBox="0 0 4650 1030" preserveAspectRatio="xMidYMid" fill-rule="evenodd" stroke-width="28.222" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" xmlns:ooo="http://xml.openoffice.org/svg/export" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:presentation="http://sun.com/xmlns/staroffice/presentation" xmlns:smil="http://www.w3.org/2001/SMIL20/" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" xml:space="preserve">
+ <defs class="ClipPathGroup">
+ <clipPath id="presentation_clip_path" clipPathUnits="userSpaceOnUse">
+ <rect x="0" y="0" width="4650" height="1030"/>
+ </clipPath>
+ <clipPath id="presentation_clip_path_shrink" clipPathUnits="userSpaceOnUse">
+ <rect x="4" y="1" width="4641" height="1028"/>
+ </clipPath>
+ </defs>
+ <defs class="TextShapeIndex">
+ <g ooo:slide="id1" ooo:id-list="id3"/>
+ </defs>
+ <defs class="EmbeddedBulletChars">
+ <g id="bullet-char-template-57356" transform="scale(0.00048828125,-0.00048828125)">
+ <path d="M 580,1141 L 1163,571 580,0 -4,571 580,1141 Z"/>
+ </g>
+ <g id="bullet-char-template-57354" transform="scale(0.00048828125,-0.00048828125)">
+ <path d="M 8,1128 L 1137,1128 1137,0 8,0 8,1128 Z"/>
+ </g>
+ <g id="bullet-char-template-10146" transform="scale(0.00048828125,-0.00048828125)">
+ <path d="M 174,0 L 602,739 174,1481 1456,739 174,0 Z M 1358,739 L 309,1346 659,739 1358,739 Z"/>
+ </g>
+ <g id="bullet-char-template-10132" transform="scale(0.00048828125,-0.00048828125)">
+ <path d="M 2015,739 L 1276,0 717,0 1260,543 174,543 174,936 1260,936 717,1481 1274,1481 2015,739 Z"/>
+ </g>
+ <g id="bullet-char-template-10007" transform="scale(0.00048828125,-0.00048828125)">
+ <path d="M 0,-2 C -7,14 -16,27 -25,37 L 356,567 C 262,823 215,952 215,954 215,979 228,992 255,992 264,992 276,990 289,987 310,991 331,999 354,1012 L 381,999 492,748 772,1049 836,1024 860,1049 C 881,1039 901,1025 922,1006 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 C 774,196 753,168 711,139 L 727,119 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 C 142,-110 111,-127 72,-127 30,-127 9,-110 8,-76 1,-67 -2,-52 -2,-32 -2,-23 -1,-13 0,-2 Z"/>
+ </g>
+ <g id="bullet-char-template-10004" transform="scale(0.00048828125,-0.00048828125)">
+ <path d="M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 41,549 55,616 82,672 116,743 169,778 240,778 293,778 328,747 346,684 L 369,508 C 377,444 397,411 428,410 L 1163,1116 C 1174,1127 1196,1133 1229,1133 1271,1133 1292,1118 1292,1087 L 1292,965 C 1292,929 1282,901 1262,881 L 442,47 C 390,-6 338,-33 285,-33 Z"/>
+ </g>
+ <g id="bullet-char-template-9679" transform="scale(0.00048828125,-0.00048828125)">
+ <path d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z"/>
+ </g>
+ <g id="bullet-char-template-8226" transform="scale(0.00048828125,-0.00048828125)">
+ <path d="M 346,457 C 273,457 209,483 155,535 101,586 74,649 74,723 74,796 101,859 155,911 209,963 273,989 346,989 419,989 480,963 531,910 582,859 608,796 608,723 608,648 583,586 532,535 482,483 420,457 346,457 Z"/>
+ </g>
+ <g id="bullet-char-template-8211" transform="scale(0.00048828125,-0.00048828125)">
+ <path d="M -4,459 L 1135,459 1135,606 -4,606 -4,459 Z"/>
+ </g>
+ <g id="bullet-char-template-61548" transform="scale(0.00048828125,-0.00048828125)">
+ <path d="M 173,740 C 173,903 231,1043 346,1159 462,1274 601,1332 765,1332 928,1332 1067,1274 1183,1159 1299,1043 1357,903 1357,740 1357,577 1299,437 1183,322 1067,206 928,148 765,148 601,148 462,206 346,322 231,437 173,577 173,740 Z"/>
+ </g>
+ </defs>
+ <g>
+ <g id="id2" class="Master_Slide">
+ <g id="bg-id2" class="Background"/>
+ <g id="bo-id2" class="BackgroundObjects"/>
+ </g>
+ </g>
+ <g class="SlideGroup">
+ <g>
+ <g id="container-id1">
+ <g id="id1" class="Slide" clip-path="url(#presentation_clip_path)">
+ <g class="Page">
+ <defs class="SlideBackground">
+ <g id="bg-id1" class="Background">
+ <path fill="rgb(255,255,255)" stroke="none" d="M 2325,1029 L 0,1029 0,0 4649,0 4649,1029 2325,1029 Z"/>
+ </g>
+ </defs>
+ <g class="Graphic">
+ <g id="id3">
+ <rect class="BoundingBox" stroke="none" fill="none" x="0" y="0" width="4654" height="1032"/>
+ <path fill="rgb(33,41,52)" stroke="none" d="M 1275,778 C 1236,798 1187,809 1129,809 1053,809 993,785 947,736 902,687 879,624 879,545 879,460 904,391 956,339 1007,287 1071,260 1150,260 1200,260 1242,268 1275,282 L 1275,349 C 1237,328 1195,317 1149,317 1088,317 1039,337 1001,378 963,419 944,473 944,541 944,609 962,657 997,696 1033,734 1079,753 1136,753 1190,753 1236,741 1275,718 L 1275,778 1275,778 Z"/>
+ <path fill="rgb(33,41,52)" stroke="none" d="M 1464,800 L 1402,800 1402,269 1464,269 1464,800 1464,800 Z"/>
+ <path fill="rgb(33,41,52)" stroke="none" d="M 1623,800 L 1623,269 1774,269 C 1820,269 1856,280 1883,303 1910,325 1924,355 1924,391 1924,421 1916,447 1899,469 1883,491 1861,507 1832,517 L 1832,518 C 1868,522 1896,536 1918,559 1939,581 1950,611 1950,648 1950,693 1934,730 1901,758 1869,786 1827,800 1778,800 L 1623,800 1623,800 Z M 1685,325 L 1685,497 1749,497 C 1783,497 1810,489 1829,472 1849,456 1859,432 1859,403 1859,351 1825,325 1757,325 L 1685,325 1685,325 Z M 1685,553 L 1685,744 1770,744 C 1806,744 1834,735 1854,718 1875,701 1885,677 1885,647 1885,584 1842,553 1757,553 L 1685,553 1685,553 Z"/>
+ <path fill="rgb(225,30,25)" stroke="none" d="M 586,488 C 578,480 564,480 556,488 L 333,710 240,617 189,668 333,812 622,524 586,488 586,488 Z"/>
+ <path fill="rgb(225,30,25)" stroke="none" d="M 368,813 L 406,813 C 477,813 534,756 534,685 L 534,673 476,724 C 466,741 449,755 430,761 L 368,813 Z"/>
+ <path fill="rgb(225,30,25)" stroke="none" d="M 143,765 L 143,284 486,284 486,493 534,451 534,236 95,236 95,813 268,813 227,765 143,765 143,765 Z"/>
+ <path fill="rgb(225,30,25)" stroke="none" d="M 310,385 L 386,385 C 402,385 414,372 414,357 L 414,353 C 414,338 402,326 386,326 L 233,326 C 218,326 205,338 205,353 L 205,357 C 205,372 218,385 233,385 L 310,385 Z"/>
+ <path fill="rgb(225,30,25)" stroke="none" d="M 313,522 L 390,522 C 405,522 417,510 417,496 L 417,492 C 417,478 405,466 390,466 L 235,466 C 220,466 208,478 208,492 L 208,496 C 208,510 220,522 235,522 L 313,522 Z"/>
+ <path fill="rgb(33,41,52)" stroke="none" d="M 2464,811 C 2389,811 2328,786 2283,736 2238,687 2215,622 2215,543 2215,457 2238,389 2284,338 2331,288 2393,262 2473,262 2546,262 2605,287 2650,336 2695,386 2717,450 2717,530 2717,616 2694,685 2649,735 2603,785 2541,811 2464,811 L 2464,811 Z M 2468,318 C 2413,318 2367,338 2332,379 2298,419 2280,472 2280,537 2280,602 2297,655 2331,695 2365,735 2409,754 2464,754 2522,754 2568,735 2602,697 2635,659 2652,606 2652,538 2652,470 2636,414 2603,375 2571,337 2526,318 2468,318 L 2468,318 Z"/>
+ <path fill="rgb(33,41,52)" stroke="none" d="M 2979,284 C 2937,284 2915,311 2915,364 L 2915,423 3004,423 3004,475 2915,475 2915,802 2855,802 2855,475 2790,475 2790,423 2855,423 2855,361 C 2855,322 2867,290 2890,267 2913,244 2941,233 2976,233 2994,233 3009,235 3020,239 L 3020,294 C 3008,287 2994,284 2979,284 Z"/>
+ <path fill="rgb(33,41,52)" stroke="none" d="M 3236,284 C 3193,284 3172,311 3172,364 L 3172,423 3261,423 3261,475 3172,475 3172,802 3112,802 3112,475 3047,475 3047,423 3112,423 3112,361 C 3112,322 3123,290 3146,267 3169,244 3198,233 3232,233 3251,233 3265,235 3276,239 L 3276,294 C 3264,287 3251,284 3236,284 Z"/>
+ <path fill="rgb(33,41,52)" stroke="none" d="M 3376,326 C 3365,326 3356,323 3349,315 3341,308 3337,299 3337,287 3337,276 3341,266 3349,259 3356,251 3365,248 3376,248 3387,248 3397,251 3405,259 3412,266 3416,276 3416,287 3416,299 3412,307 3405,315 3397,323 3387,326 3376,326 L 3376,326 Z M 3406,802 L 3345,802 3345,423 3406,423 3406,802 3406,802 Z"/>
+ <path fill="rgb(33,41,52)" stroke="none" d="M 3806,784 C 3777,802 3742,811 3703,811 3649,811 3605,793 3572,758 3538,722 3522,677 3522,621 3522,559 3540,508 3576,471 3611,433 3659,414 3719,414 3752,414 3782,420 3807,432 L 3807,494 C 3779,475 3749,465 3717,465 3678,465 3646,479 3621,507 3596,534 3584,571 3584,616 3584,661 3595,696 3619,721 3642,747 3673,760 3713,760 3746,760 3777,749 3806,727 L 3806,784 3806,784 Z"/>
+ <path fill="rgb(33,41,52)" stroke="none" d="M 4222,627 L 3954,627 C 3955,670 3967,702 3988,725 4010,748 4040,760 4078,760 4121,760 4160,745 4196,717 L 4196,774 C 4162,799 4118,811 4063,811 4009,811 3968,793 3937,759 3907,725 3891,676 3891,614 3891,555 3908,507 3941,470 3975,432 4016,414 4066,414 4116,414 4154,430 4181,462 4208,494 4222,538 4222,595 L 4222,627 4222,627 Z M 4160,576 C 4160,541 4151,513 4134,494 4118,475 4095,465 4065,465 4035,465 4012,475 3992,495 3972,516 3960,543 3955,576 L 4160,576 4160,576 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg> \ No newline at end of file
diff --git a/brand/cib/intro-highres.png b/brand/cib/intro-highres.png
index 04471d8170a9..17560c7fe464 100644
--- a/brand/cib/intro-highres.png
+++ b/brand/cib/intro-highres.png
Binary files differ
diff --git a/brand/cib/intro-highres.svg b/brand/cib/intro-highres.svg
index 67e0159ce769..b3258b6c4c7e 100644
--- a/brand/cib/intro-highres.svg
+++ b/brand/cib/intro-highres.svg
@@ -2,30 +2,30 @@
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
x="0px"
y="0px"
viewBox="0 0 773 394"
xml:space="preserve"
id="svg3336"
- inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+ inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
sodipodi:docname="intro-highres.svg"
width="773"
height="394"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\brand\cib\intro.png"
+ inkscape:export-filename="intro-highres.png"
inkscape:export-xdpi="96"
- inkscape:export-ydpi="96"><metadata
+ inkscape:export-ydpi="96"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata
id="metadata3474"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
id="defs3472"><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath4978"><rect
@@ -52,7 +52,14 @@
.cls-2 {
fill: #fff;
}
- </style></defs><sodipodi:namedview
+ </style><clipPath
+ id="b"><rect
+ x="0.13"
+ y="-0.15000001"
+ width="174"
+ height="38"
+ style="fill:none"
+ id="rect2" /></clipPath></defs><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
@@ -62,21 +69,23 @@
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:window-width="1920"
- inkscape:window-height="1000"
+ inkscape:window-height="1011"
id="namedview3470"
showgrid="false"
- inkscape:zoom="1"
- inkscape:cx="264.75405"
- inkscape:cy="108.40609"
- inkscape:window-x="-11"
- inkscape:window-y="-11"
+ inkscape:zoom="0.94451843"
+ inkscape:cx="93.698542"
+ inkscape:cy="265.74389"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg3336"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
- inkscape:showpageshadow="false" />
+ inkscape:showpageshadow="false"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1" />
<style
type="text/css"
id="style3338">
@@ -98,14 +107,14 @@
id="alte_version"
class="st0"
style="display:none"
- transform="translate(-52.877201,210.05895)">
+ transform="translate(-52.890201,77.058947)">
<g
class="st1"
id="g3341"
style="display:inline">
<polygon
class="st2"
- points="262,-250 262,-64 0,-64 0,-249.9 "
+ points="0,-64 0,-249.9 262,-250 262,-64 "
id="polygon3343"
style="fill:#5fa243" />
</g>
@@ -282,152 +291,65 @@
</g>
<g
- data-name="doXigate Arbeitsunterlagen"
- id="doXigate_Arbeitsunterlagen"
- transform="matrix(2.7510816,0,0,2.7510816,158.94022,146.10499)"><g
- id="g995"><path
- id="path949"
- d="M 53.008,20.047 H 43 V 3.242 h 3.785 v 13.735 h 6.223 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path951"
- d="m 56.781,6.148 a 2.163,2.163 0 0 1 -1.535,-0.556 1.8,1.8 0 0 1 -0.6,-1.365 1.733,1.733 0 0 1 0.6,-1.36 2.508,2.508 0 0 1 3.076,0 1.737,1.737 0 0 1 0.592,1.36 1.783,1.783 0 0 1 -0.592,1.382 2.2,2.2 0 0 1 -1.541,0.539 z m 1.828,13.9 h -3.7 v -12 h 3.7 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path953"
- d="M 65.477,18.652 H 65.43 v 1.395 h -3.7 V 2.281 h 3.7 v 7.571 h 0.047 a 4.392,4.392 0 0 1 3.9,-2.1 4.28,4.28 0 0 1 3.574,1.594 6.87,6.87 0 0 1 1.254,4.359 7.437,7.437 0 0 1 -1.465,4.816 4.771,4.771 0 0 1 -3.914,1.817 3.78,3.78 0 0 1 -3.349,-1.686 z M 65.371,13.59 v 1.23 a 2.81,2.81 0 0 0 0.668,1.922 2.173,2.173 0 0 0 1.711,0.762 2.269,2.269 0 0 0 1.963,-0.979 4.722,4.722 0 0 0 0.7,-2.771 3.763,3.763 0 0 0 -0.638,-2.326 2.156,2.156 0 0 0 -1.823,-0.838 2.352,2.352 0 0 0 -1.845,0.832 3.157,3.157 0 0 0 -0.736,2.168 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path955"
- d="m 84.438,11.387 a 3.217,3.217 0 0 0 -1.559,-0.364 2.245,2.245 0 0 0 -1.887,0.885 3.861,3.861 0 0 0 -0.679,2.408 v 5.731 h -3.7 v -12 h 3.7 v 2.226 h 0.046 a 3.2,3.2 0 0 1 3.164,-2.437 2.384,2.384 0 0 1 0.915,0.141 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path957"
- d="M 96.848,15.1 H 89.02 q 0.188,2.613 3.293,2.613 a 6.428,6.428 0 0 0 3.48,-0.938 v 2.672 a 9.139,9.139 0 0 1 -4.324,0.891 6.087,6.087 0 0 1 -4.512,-1.611 6.092,6.092 0 0 1 -1.6,-4.495 6.422,6.422 0 0 1 1.729,-4.732 5.778,5.778 0 0 1 4.266,-1.746 5.24,5.24 0 0 1 4.06,1.559 6,6 0 0 1 1.436,4.23 z m -3.434,-2.274 q 0,-2.578 -2.086,-2.578 A 1.992,1.992 0 0 0 89.787,10.986 3.361,3.361 0 0 0 89,12.828 Z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path959"
- d="m 106.516,20.34 a 7.819,7.819 0 0 1 -5.883,-2.35 8.433,8.433 0 0 1 -2.274,-6.123 9.04,9.04 0 0 1 2.309,-6.445 7.991,7.991 0 0 1 6.117,-2.461 7.63,7.63 0 0 1 5.815,2.355 8.688,8.688 0 0 1 2.22,6.211 8.894,8.894 0 0 1 -2.3,6.387 7.907,7.907 0 0 1 -6.004,2.426 z M 106.68,6.219 a 3.81,3.81 0 0 0 -3.164,1.494 6.224,6.224 0 0 0 -1.172,3.955 6.111,6.111 0 0 0 1.172,3.949 4.044,4.044 0 0 0 6.175,0.041 6.045,6.045 0 0 0 1.149,-3.92 6.555,6.555 0 0 0 -1.113,-4.066 3.63,3.63 0 0 0 -3.047,-1.453 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path961"
- d="m 125.078,5.117 a 3.746,3.746 0 0 0 -1.371,-0.281 q -1.78,0 -1.781,1.934 v 1.277 h 2.742 v 2.73 h -2.742 v 9.27 h -3.692 v -9.27 h -2.015 v -2.73 h 2.015 V 6.559 a 4.322,4.322 0 0 1 1.336,-3.3 5.1,5.1 0 0 1 3.63,-1.259 6.389,6.389 0 0 1 1.875,0.234 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path963"
- d="m 134.277,5.117 a 3.746,3.746 0 0 0 -1.371,-0.281 q -1.781,0 -1.781,1.934 v 1.277 h 2.742 v 2.73 h -2.742 v 9.27 h -3.691 v -9.27 h -2.016 v -2.73 h 2.016 V 6.559 a 4.319,4.319 0 0 1 1.336,-3.3 5.092,5.092 0 0 1 3.63,-1.259 6.389,6.389 0 0 1 1.875,0.234 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path965"
- d="m 137.523,6.148 a 2.163,2.163 0 0 1 -1.535,-0.556 1.794,1.794 0 0 1 -0.6,-1.365 1.732,1.732 0 0 1 0.6,-1.36 2.509,2.509 0 0 1 3.077,0 1.74,1.74 0 0 1 0.591,1.36 1.786,1.786 0 0 1 -0.591,1.382 2.2,2.2 0 0 1 -1.542,0.539 z m 1.829,13.9 h -3.7 v -12 h 3.7 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path967"
- d="m 151.563,19.613 a 7.316,7.316 0 0 1 -3.622,0.727 6.124,6.124 0 0 1 -4.476,-1.676 5.785,5.785 0 0 1 -1.711,-4.324 6.373,6.373 0 0 1 1.834,-4.822 6.775,6.775 0 0 1 4.9,-1.764 6.3,6.3 0 0 1 3.071,0.562 v 3.141 a 4.224,4.224 0 0 0 -2.59,-0.867 3.41,3.41 0 0 0 -2.526,0.932 3.475,3.475 0 0 0 -0.931,2.572 3.424,3.424 0 0 0 0.89,2.5 3.275,3.275 0 0 0 2.449,0.908 4.891,4.891 0 0 0 2.708,-0.867 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path969"
- d="m 164.77,15.1 h -7.829 q 0.188,2.613 3.293,2.613 a 6.429,6.429 0 0 0 3.481,-0.938 v 2.672 a 9.142,9.142 0 0 1 -4.324,0.891 6.087,6.087 0 0 1 -4.512,-1.611 6.092,6.092 0 0 1 -1.606,-4.495 6.422,6.422 0 0 1 1.735,-4.732 5.777,5.777 0 0 1 4.265,-1.746 5.242,5.242 0 0 1 4.061,1.559 6,6 0 0 1 1.436,4.23 z m -3.434,-2.274 q 0,-2.578 -2.086,-2.578 a 1.992,1.992 0 0 0 -1.541,0.738 3.354,3.354 0 0 0 -0.791,1.84 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path971"
- d="m 44.62,32.412 v 3.555 H 43 v -9.8 h 2.974 a 3.938,3.938 0 0 1 2.618,0.786 2.743,2.743 0 0 1 0.93,2.215 3.061,3.061 0 0 1 -0.971,2.338 3.689,3.689 0 0 1 -2.625,0.909 z m 0,-4.908 v 3.582 h 1.053 a 2.333,2.333 0 0 0 1.593,-0.485 1.737,1.737 0 0 0 0.547,-1.368 q 0,-1.73 -2.01,-1.729 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path973"
- d="M 56.272,36.131 A 4.41,4.41 0 0 1 52.878,34.757 5.046,5.046 0 0 1 51.6,31.182 5.348,5.348 0 0 1 52.9,27.408 4.568,4.568 0 0 1 56.43,26 a 4.31,4.31 0 0 1 3.325,1.367 5.06,5.06 0 0 1 1.262,3.575 5.364,5.364 0 0 1 -1.292,3.794 4.481,4.481 0 0 1 -3.453,1.395 z m 0.076,-8.7 a 2.727,2.727 0 0 0 -2.191,1.005 3.973,3.973 0 0 0 -0.844,2.645 4.013,4.013 0 0 0 0.82,2.632 2.647,2.647 0 0 0 2.146,1 2.77,2.77 0 0 0 2.222,-0.95 3.967,3.967 0 0 0 0.814,-2.659 4.146,4.146 0 0 0 -0.791,-2.714 2.667,2.667 0 0 0 -2.176,-0.961 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path975"
- d="m 76.025,26.164 -2.686,9.8 H 71.5 L 69.634,29.11 A 4.77,4.77 0 0 1 69.49,28.153 h -0.027 a 4.639,4.639 0 0 1 -0.164,0.944 l -1.873,6.87 h -1.88 l -2.741,-9.8 h 1.784 l 1.777,7.178 a 5.2,5.2 0 0 1 0.137,0.943 h 0.034 a 5.373,5.373 0 0 1 0.192,-0.943 l 2.009,-7.178 h 1.675 l 1.859,7.233 a 5.635,5.635 0 0 1 0.144,0.875 h 0.027 a 5.445,5.445 0 0 1 0.158,-0.9 l 1.743,-7.2 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path977"
- d="m 83.94,35.967 h -5.5 v -9.8 h 5.285 v 1.381 h -3.661 v 2.772 h 3.37 v 1.374 h -3.37 v 2.9 h 3.876 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path979"
- d="m 94.307,35.967 h -1.9 l -1.565,-2.625 a 5.813,5.813 0 0 0 -0.414,-0.619 2.488,2.488 0 0 0 -0.41,-0.42 1.349,1.349 0 0 0 -0.454,-0.239 1.9,1.9 0 0 0 -0.554,-0.076 h -0.656 v 3.979 h -1.622 v -9.8 h 3.227 a 4.678,4.678 0 0 1 1.271,0.164 2.962,2.962 0 0 1 1.012,0.5 2.3,2.3 0 0 1 0.673,0.826 2.608,2.608 0 0 1 0.243,1.16 2.883,2.883 0 0 1 -0.153,0.954 2.492,2.492 0 0 1 -0.438,0.771 2.661,2.661 0 0 1 -0.683,0.578 3.4,3.4 0 0 1 -0.9,0.369 v 0.028 a 2.489,2.489 0 0 1 0.465,0.332 c 0.132,0.12 0.258,0.244 0.376,0.372 a 4.53,4.53 0 0 1 0.352,0.434 c 0.117,0.162 0.245,0.35 0.387,0.564 z m -5.954,-8.484 v 3.186 h 1.353 a 2,2 0 0 0 0.693,-0.116 1.587,1.587 0 0 0 0.551,-0.335 1.52,1.52 0 0 0 0.363,-0.533 1.843,1.843 0 0 0 0.129,-0.7 A 1.4,1.4 0 0 0 91,27.88 1.856,1.856 0 0 0 89.722,27.48 Z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path981"
- d="m 102,35.967 h -5.5 v -9.8 h 5.284 v 1.381 h -3.659 v 2.772 h 3.37 v 1.374 h -3.37 v 2.9 H 102 Z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path983"
- d="m 104.794,35.967 v -9.8 h 2.83 q 5.421,0 5.421,4.778 a 4.711,4.711 0 0 1 -1.5,3.648 5.741,5.741 0 0 1 -4.033,1.377 z m 1.62,-8.422 v 7.048 h 1.3 a 3.636,3.636 0 0 0 2.67,-0.944 3.583,3.583 0 0 0 0.953,-2.666 q 0,-3.438 -3.562,-3.438 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path985"
- d="m 120.785,35.967 v -9.8 h 3.115 a 3.665,3.665 0 0 1 2.251,0.622 1.932,1.932 0 0 1 0.832,1.62 2.32,2.32 0 0 1 -0.472,1.45 2.548,2.548 0 0 1 -1.306,0.875 v 0.027 a 2.552,2.552 0 0 1 1.616,0.748 2.275,2.275 0 0 1 0.606,1.644 2.47,2.47 0 0 1 -0.991,2.038 3.93,3.93 0 0 1 -2.5,0.779 z m 1.62,-8.5 v 2.789 h 1.053 a 2.028,2.028 0 0 0 1.33,-0.4 1.392,1.392 0 0 0 0.482,-1.131 q 0,-1.259 -1.682,-1.258 z m 0,4.1 v 3.1 h 1.388 a 2.119,2.119 0 0 0 1.4,-0.42 1.441,1.441 0 0 0 0.5,-1.159 q 0,-1.525 -2.112,-1.524 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path987"
- d="m 136.717,26.164 -3.217,6.241 v 3.562 h -1.627 V 32.44 l -3.131,-6.276 h 1.858 l 1.927,4.2 q 0.034,0.075 0.2,0.568 h 0.021 a 3.839,3.839 0 0 1 0.226,-0.568 l 2.016,-4.2 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path989"
- d="m 150.752,35.557 a 5.938,5.938 0 0 1 -2.755,0.574 4.5,4.5 0 0 1 -3.418,-1.347 4.909,4.909 0 0 1 -1.285,-3.534 5.15,5.15 0 0 1 1.445,-3.8 4.951,4.951 0 0 1 3.655,-1.45 6,6 0 0 1 2.358,0.4 v 1.614 a 4.208,4.208 0 0 0 -2.187,-0.588 3.442,3.442 0 0 0 -2.582,1.018 3.744,3.744 0 0 0 -0.983,2.724 3.567,3.567 0 0 0 0.923,2.58 3.209,3.209 0 0 0 2.427,0.961 4.348,4.348 0 0 0 2.406,-0.656 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path991"
- d="m 155.329,35.967 h -1.675 v -9.8 h 1.675 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path993"
- d="m 158.793,35.967 v -9.8 h 3.11 a 3.667,3.667 0 0 1 2.252,0.622 1.931,1.931 0 0 1 0.831,1.62 2.32,2.32 0 0 1 -0.471,1.45 2.548,2.548 0 0 1 -1.306,0.875 v 0.027 a 2.552,2.552 0 0 1 1.616,0.748 2.279,2.279 0 0 1 0.606,1.644 2.47,2.47 0 0 1 -0.991,2.038 3.932,3.932 0 0 1 -2.5,0.779 z m 1.62,-8.5 v 2.789 h 1.053 a 2.028,2.028 0 0 0 1.33,-0.4 1.392,1.392 0 0 0 0.481,-1.131 q 0,-1.259 -1.681,-1.258 z m 0,4.1 v 3.1 h 1.387 a 2.119,2.119 0 0 0 1.405,-0.42 1.441,1.441 0 0 0 0.5,-1.159 q 0,-1.525 -2.112,-1.524 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /></g><rect
- id="rect997"
- height="37"
- width="37"
- class="cls-1"
- x="0"
- y="0"
- style="fill:#961e29" /><g
- id="g1001"><path
- d="m 23.59,4.5 a 0.7,0.7 0 0 0 -0.643,0.409 0.68,0.68 0 0 0 0.149,0.74 l 5.814,5.833 a 0.7,0.7 0 0 0 0.74,0.151 0.688,0.688 0 0 0 0.425,-0.617 V 5.172 A 0.7,0.7 0 0 0 29.393,4.5 Z"
- class="cls-2"
- id="path6084"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" /><path
- d="M 7.6,4.5 A 0.689,0.689 0 0 0 6.921,5.19 V 31.81 A 0.688,0.688 0 0 0 7.6,32.5 l 15.3,-0.008 c 2.249,0.008 7.18,-4.832 7.18,-7.278 V 14.668 a 0.691,0.691 0 0 0 -0.2,-0.49 L 20.452,4.711 A 0.689,0.689 0 0 0 19.963,4.5 Z m 0.689,1.379 h 11.385 l 9.026,9.067 c 0,0 0,9.218 0,9.809 0,1.835 -4.229,6.366 -6.45,6.366 H 8.293 Z"
- class="cls-2"
- id="path6088"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" /></g></g><rect
- style="fill:#961e29;fill-opacity:1;stroke:none;stroke-width:1.03947806;stroke-opacity:1"
- id="rect880"
- width="773"
- height="60"
- x="0.013000467"
- y="0" /><rect
- style="fill:#961e29;fill-opacity:1;stroke:none;stroke-width:1.03947806;stroke-opacity:1"
- id="rect880-0"
- width="773"
- height="60"
- x="0.013000488"
- y="334" /></svg> \ No newline at end of file
+ clip-path="url(#b)"
+ id="g43"
+ transform="matrix(3.8917487,0,0,3.8834687,68.064995,121.97128)"
+ inkscape:export-filename="intro-highres.png"
+ inkscape:export-xdpi="144.92"
+ inkscape:export-ydpi="144.92"><g
+ id="g41"><g
+ id="g13"><path
+ d="m 47.7,28.92 c -1.48,0.78 -3.33,1.18 -5.54,1.18 -2.86,0 -5.14,-0.92 -6.86,-2.76 -1.72,-1.84 -2.58,-4.25 -2.58,-7.24 0,-3.21 0.97,-5.8 2.9,-7.78 1.93,-1.98 4.38,-2.97 7.35,-2.97 1.9,0 3.48,0.28 4.73,0.83 v 2.51 c -1.44,-0.8 -3.02,-1.2 -4.76,-1.2 -2.3,0 -4.17,0.77 -5.61,2.31 -1.44,1.54 -2.15,3.6 -2.15,6.17 0,2.57 0.67,4.39 2.01,5.84 1.34,1.45 3.1,2.18 5.27,2.18 2.02,0 3.76,-0.45 5.24,-1.34 v 2.28 z"
+ style="fill:#212934"
+ id="path7" /><path
+ d="M 54.86,29.76 H 52.51 V 9.69 h 2.35 z"
+ style="fill:#212934"
+ id="path9" /><path
+ d="M 60.85,29.76 V 9.69 h 5.71 c 1.74,0 3.11,0.42 4.13,1.27 1.02,0.85 1.53,1.96 1.53,3.32 0,1.14 -0.31,2.13 -0.92,2.97 -0.62,0.84 -1.46,1.44 -2.55,1.79 v 0.06 c 1.35,0.16 2.44,0.67 3.25,1.53 0.81,0.86 1.22,1.99 1.22,3.37 0,1.72 -0.62,3.11 -1.85,4.17 -1.23,1.06 -2.79,1.6 -4.66,1.6 H 60.86 Z M 63.2,11.81 v 6.48 h 2.41 c 1.29,0 2.3,-0.31 3.04,-0.93 0.74,-0.62 1.11,-1.5 1.11,-2.62 0,-1.95 -1.28,-2.93 -3.85,-2.93 h -2.7 z m 0,8.6 v 7.22 h 3.19 c 1.38,0 2.45,-0.33 3.21,-0.98 0.76,-0.65 1.14,-1.55 1.14,-2.69 0,-2.37 -1.61,-3.56 -4.84,-3.56 h -2.7 z"
+ style="fill:#212934"
+ id="path11" /></g><g
+ id="g25"><path
+ d="m 21.65,17.96 c -0.31,-0.32 -0.83,-0.32 -1.14,0 L 12.1,26.37 8.57,22.85 6.65,24.77 12.1,30.22 23.01,19.31 21.66,17.95 Z"
+ style="fill:#e11e19"
+ id="path15" /><path
+ d="m 15.74,28.28 -2.33,1.97 h 1.45 c 2.67,0 4.84,-2.17 4.84,-4.84 v -0.44 l -2.22,1.9 c -0.37,0.67 -0.99,1.18 -1.74,1.41 z"
+ style="fill:#e11e19"
+ id="path17" /><polygon
+ points="19.69,8.41 3.08,8.41 3.08,30.26 9.62,30.26 8.07,28.42 4.92,28.42 4.92,10.25 17.86,10.25 17.86,18.13 19.69,16.56 "
+ style="fill:#e11e19"
+ id="polygon19" /><rect
+ x="7.2600002"
+ y="11.82"
+ width="7.8899999"
+ height="2.24"
+ rx="1.05"
+ ry="1.05"
+ style="fill:#e11e19"
+ id="rect21" /><rect
+ x="7.3699999"
+ y="17.120001"
+ width="7.8899999"
+ height="2.1300001"
+ rx="1"
+ ry="1"
+ style="fill:#e11e19"
+ id="rect23" /></g><g
+ id="g39"><path
+ d="m 92.64,30.16 c -2.85,0 -5.13,-0.94 -6.84,-2.81 -1.71,-1.87 -2.57,-4.32 -2.57,-7.32 0,-3.23 0.87,-5.81 2.62,-7.73 1.75,-1.92 4.12,-2.88 7.13,-2.88 2.77,0 5,0.93 6.7,2.8 1.69,1.87 2.54,4.31 2.54,7.32 0,3.28 -0.87,5.87 -2.6,7.77 -1.74,1.9 -4.06,2.86 -6.97,2.86 z m 0.17,-18.62 c -2.11,0 -3.82,0.76 -5.14,2.28 -1.32,1.52 -1.97,3.52 -1.97,5.99 0,2.47 0.64,4.46 1.92,5.97 1.28,1.51 2.96,2.26 5.02,2.26 2.2,0 3.94,-0.72 5.21,-2.16 1.27,-1.44 1.9,-3.45 1.9,-6.03 0,-2.58 -0.62,-4.7 -1.85,-6.15 -1.23,-1.45 -2.93,-2.17 -5.1,-2.17 z"
+ style="fill:#212934"
+ id="path27" /><path
+ d="m 113.65,10.62 c -0.45,-0.25 -0.96,-0.38 -1.53,-0.38 -1.61,0 -2.41,1.01 -2.41,3.04 v 2.21 h 3.36 v 1.96 h -3.36 v 12.38 h -2.28 V 17.45 h -2.45 v -1.96 h 2.45 v -2.32 c 0,-1.5 0.43,-2.69 1.3,-3.56 0.87,-0.87 1.95,-1.31 3.25,-1.31 0.7,0 1.25,0.08 1.67,0.25 z"
+ style="fill:#212934"
+ id="path29" /><path
+ d="m 123.35,10.62 c -0.45,-0.25 -0.96,-0.38 -1.53,-0.38 -1.61,0 -2.41,1.01 -2.41,3.04 v 2.21 h 3.36 v 1.96 h -3.36 v 12.38 h -2.28 V 17.45 h -2.45 v -1.96 h 2.45 v -2.32 c 0,-1.5 0.43,-2.69 1.3,-3.56 0.87,-0.87 1.95,-1.31 3.25,-1.31 0.7,0 1.25,0.08 1.67,0.25 z"
+ style="fill:#212934"
+ id="path31" /><path
+ d="m 127.13,11.85 c -0.41,0 -0.76,-0.14 -1.05,-0.42 -0.29,-0.28 -0.43,-0.63 -0.43,-1.06 0,-0.43 0.14,-0.79 0.43,-1.07 0.29,-0.29 0.64,-0.43 1.05,-0.43 0.41,0 0.78,0.14 1.07,0.43 0.29,0.28 0.44,0.64 0.44,1.07 0,0.43 -0.15,0.76 -0.44,1.05 -0.29,0.29 -0.65,0.43 -1.07,0.43 z m 1.12,17.98 h -2.3 V 15.49 h 2.3 z"
+ style="fill:#212934"
+ id="path33" /><path
+ d="m 143.38,29.17 c -1.1,0.66 -2.41,0.99 -3.92,0.99 -2.04,0 -3.69,-0.67 -4.95,-2 -1.25,-1.33 -1.88,-3.05 -1.88,-5.17 0,-2.36 0.68,-4.26 2.03,-5.69 1.35,-1.43 3.16,-2.15 5.42,-2.15 1.26,0 2.37,0.23 3.33,0.7 v 2.35 c -1.06,-0.75 -2.2,-1.12 -3.42,-1.12 -1.47,0 -2.67,0.53 -3.61,1.58 -0.94,1.05 -1.41,2.43 -1.41,4.14 0,1.71 0.44,3.01 1.32,3.98 0.88,0.97 2.07,1.46 3.55,1.46 1.25,0 2.43,-0.42 3.53,-1.25 v 2.18 z"
+ style="fill:#212934"
+ id="path35" /><path
+ d="m 159.09,23.23 h -10.12 c 0.04,1.6 0.47,2.83 1.29,3.7 0.82,0.87 1.95,1.3 3.39,1.3 1.62,0 3.1,-0.53 4.45,-1.6 v 2.16 c -1.26,0.92 -2.93,1.37 -5,1.37 -2.07,0 -3.62,-0.65 -4.77,-1.95 -1.15,-1.3 -1.74,-3.13 -1.74,-5.5 0,-2.23 0.63,-4.05 1.9,-5.45 1.26,-1.41 2.83,-2.11 4.71,-2.11 1.88,0 3.33,0.61 4.35,1.82 1.03,1.21 1.54,2.9 1.54,5.05 v 1.2 z m -2.35,-1.95 c 0,-1.33 -0.33,-2.36 -0.96,-3.09 -0.63,-0.73 -1.5,-1.11 -2.62,-1.11 -1.12,0 -2,0.39 -2.76,1.16 -0.76,0.78 -1.22,1.79 -1.4,3.04 z"
+ style="fill:#212934"
+ id="path37" /></g></g></g></svg>
diff --git a/brand/cib/intro.png b/brand/cib/intro.png
index 2300158f88cb..508ca511aa1f 100644
--- a/brand/cib/intro.png
+++ b/brand/cib/intro.png
Binary files differ
diff --git a/brand/cib/intro.svg b/brand/cib/intro.svg
index 3bf766aff886..505140a844c7 100644
--- a/brand/cib/intro.svg
+++ b/brand/cib/intro.svg
@@ -2,30 +2,30 @@
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
x="0px"
y="0px"
viewBox="0 0 511 261"
xml:space="preserve"
id="svg3336"
- inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
+ inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
sodipodi:docname="intro.svg"
width="511"
height="261"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\brand\cib\intro.png"
+ inkscape:export-filename="intro.png"
inkscape:export-xdpi="96"
- inkscape:export-ydpi="96"><metadata
+ inkscape:export-ydpi="96"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata
id="metadata3474"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
id="defs3472"><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath4978"><rect
@@ -52,7 +52,14 @@
.cls-2 {
fill: #fff;
}
- </style></defs><sodipodi:namedview
+ </style><clipPath
+ id="b"><rect
+ x="0.13"
+ y="-0.15000001"
+ width="174"
+ height="38"
+ style="fill:none"
+ id="rect2" /></clipPath></defs><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
@@ -62,21 +69,23 @@
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:window-width="1920"
- inkscape:window-height="1000"
+ inkscape:window-height="1011"
id="namedview3470"
showgrid="false"
inkscape:zoom="2.02"
- inkscape:cx="264.75405"
- inkscape:cy="108.40609"
- inkscape:window-x="-11"
- inkscape:window-y="-11"
+ inkscape:cx="181.93069"
+ inkscape:cy="108.91089"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg3336"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
- inkscape:showpageshadow="false" />
+ inkscape:showpageshadow="false"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1" />
<style
type="text/css"
id="style3338">
@@ -282,152 +291,62 @@
</g>
<g
- data-name="doXigate Arbeitsunterlagen"
- id="doXigate_Arbeitsunterlagen"
- transform="matrix(2.1647413,0,0,2.1647413,76.440227,90.452286)"><g
- id="g995"><path
- id="path949"
- d="M 53.008,20.047 H 43 V 3.242 h 3.785 v 13.735 h 6.223 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path951"
- d="m 56.781,6.148 a 2.163,2.163 0 0 1 -1.535,-0.556 1.8,1.8 0 0 1 -0.6,-1.365 1.733,1.733 0 0 1 0.6,-1.36 2.508,2.508 0 0 1 3.076,0 1.737,1.737 0 0 1 0.592,1.36 1.783,1.783 0 0 1 -0.592,1.382 2.2,2.2 0 0 1 -1.541,0.539 z m 1.828,13.9 h -3.7 v -12 h 3.7 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path953"
- d="M 65.477,18.652 H 65.43 v 1.395 h -3.7 V 2.281 h 3.7 v 7.571 h 0.047 a 4.392,4.392 0 0 1 3.9,-2.1 4.28,4.28 0 0 1 3.574,1.594 6.87,6.87 0 0 1 1.254,4.359 7.437,7.437 0 0 1 -1.465,4.816 4.771,4.771 0 0 1 -3.914,1.817 3.78,3.78 0 0 1 -3.349,-1.686 z M 65.371,13.59 v 1.23 a 2.81,2.81 0 0 0 0.668,1.922 2.173,2.173 0 0 0 1.711,0.762 2.269,2.269 0 0 0 1.963,-0.979 4.722,4.722 0 0 0 0.7,-2.771 3.763,3.763 0 0 0 -0.638,-2.326 2.156,2.156 0 0 0 -1.823,-0.838 2.352,2.352 0 0 0 -1.845,0.832 3.157,3.157 0 0 0 -0.736,2.168 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path955"
- d="m 84.438,11.387 a 3.217,3.217 0 0 0 -1.559,-0.364 2.245,2.245 0 0 0 -1.887,0.885 3.861,3.861 0 0 0 -0.679,2.408 v 5.731 h -3.7 v -12 h 3.7 v 2.226 h 0.046 a 3.2,3.2 0 0 1 3.164,-2.437 2.384,2.384 0 0 1 0.915,0.141 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path957"
- d="M 96.848,15.1 H 89.02 q 0.188,2.613 3.293,2.613 a 6.428,6.428 0 0 0 3.48,-0.938 v 2.672 a 9.139,9.139 0 0 1 -4.324,0.891 6.087,6.087 0 0 1 -4.512,-1.611 6.092,6.092 0 0 1 -1.6,-4.495 6.422,6.422 0 0 1 1.729,-4.732 5.778,5.778 0 0 1 4.266,-1.746 5.24,5.24 0 0 1 4.06,1.559 6,6 0 0 1 1.436,4.23 z m -3.434,-2.274 q 0,-2.578 -2.086,-2.578 A 1.992,1.992 0 0 0 89.787,10.986 3.361,3.361 0 0 0 89,12.828 Z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path959"
- d="m 106.516,20.34 a 7.819,7.819 0 0 1 -5.883,-2.35 8.433,8.433 0 0 1 -2.274,-6.123 9.04,9.04 0 0 1 2.309,-6.445 7.991,7.991 0 0 1 6.117,-2.461 7.63,7.63 0 0 1 5.815,2.355 8.688,8.688 0 0 1 2.22,6.211 8.894,8.894 0 0 1 -2.3,6.387 7.907,7.907 0 0 1 -6.004,2.426 z M 106.68,6.219 a 3.81,3.81 0 0 0 -3.164,1.494 6.224,6.224 0 0 0 -1.172,3.955 6.111,6.111 0 0 0 1.172,3.949 4.044,4.044 0 0 0 6.175,0.041 6.045,6.045 0 0 0 1.149,-3.92 6.555,6.555 0 0 0 -1.113,-4.066 3.63,3.63 0 0 0 -3.047,-1.453 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path961"
- d="m 125.078,5.117 a 3.746,3.746 0 0 0 -1.371,-0.281 q -1.78,0 -1.781,1.934 v 1.277 h 2.742 v 2.73 h -2.742 v 9.27 h -3.692 v -9.27 h -2.015 v -2.73 h 2.015 V 6.559 a 4.322,4.322 0 0 1 1.336,-3.3 5.1,5.1 0 0 1 3.63,-1.259 6.389,6.389 0 0 1 1.875,0.234 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path963"
- d="m 134.277,5.117 a 3.746,3.746 0 0 0 -1.371,-0.281 q -1.781,0 -1.781,1.934 v 1.277 h 2.742 v 2.73 h -2.742 v 9.27 h -3.691 v -9.27 h -2.016 v -2.73 h 2.016 V 6.559 a 4.319,4.319 0 0 1 1.336,-3.3 5.092,5.092 0 0 1 3.63,-1.259 6.389,6.389 0 0 1 1.875,0.234 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path965"
- d="m 137.523,6.148 a 2.163,2.163 0 0 1 -1.535,-0.556 1.794,1.794 0 0 1 -0.6,-1.365 1.732,1.732 0 0 1 0.6,-1.36 2.509,2.509 0 0 1 3.077,0 1.74,1.74 0 0 1 0.591,1.36 1.786,1.786 0 0 1 -0.591,1.382 2.2,2.2 0 0 1 -1.542,0.539 z m 1.829,13.9 h -3.7 v -12 h 3.7 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path967"
- d="m 151.563,19.613 a 7.316,7.316 0 0 1 -3.622,0.727 6.124,6.124 0 0 1 -4.476,-1.676 5.785,5.785 0 0 1 -1.711,-4.324 6.373,6.373 0 0 1 1.834,-4.822 6.775,6.775 0 0 1 4.9,-1.764 6.3,6.3 0 0 1 3.071,0.562 v 3.141 a 4.224,4.224 0 0 0 -2.59,-0.867 3.41,3.41 0 0 0 -2.526,0.932 3.475,3.475 0 0 0 -0.931,2.572 3.424,3.424 0 0 0 0.89,2.5 3.275,3.275 0 0 0 2.449,0.908 4.891,4.891 0 0 0 2.708,-0.867 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path969"
- d="m 164.77,15.1 h -7.829 q 0.188,2.613 3.293,2.613 a 6.429,6.429 0 0 0 3.481,-0.938 v 2.672 a 9.142,9.142 0 0 1 -4.324,0.891 6.087,6.087 0 0 1 -4.512,-1.611 6.092,6.092 0 0 1 -1.606,-4.495 6.422,6.422 0 0 1 1.735,-4.732 5.777,5.777 0 0 1 4.265,-1.746 5.242,5.242 0 0 1 4.061,1.559 6,6 0 0 1 1.436,4.23 z m -3.434,-2.274 q 0,-2.578 -2.086,-2.578 a 1.992,1.992 0 0 0 -1.541,0.738 3.354,3.354 0 0 0 -0.791,1.84 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path971"
- d="m 44.62,32.412 v 3.555 H 43 v -9.8 h 2.974 a 3.938,3.938 0 0 1 2.618,0.786 2.743,2.743 0 0 1 0.93,2.215 3.061,3.061 0 0 1 -0.971,2.338 3.689,3.689 0 0 1 -2.625,0.909 z m 0,-4.908 v 3.582 h 1.053 a 2.333,2.333 0 0 0 1.593,-0.485 1.737,1.737 0 0 0 0.547,-1.368 q 0,-1.73 -2.01,-1.729 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path973"
- d="M 56.272,36.131 A 4.41,4.41 0 0 1 52.878,34.757 5.046,5.046 0 0 1 51.6,31.182 5.348,5.348 0 0 1 52.9,27.408 4.568,4.568 0 0 1 56.43,26 a 4.31,4.31 0 0 1 3.325,1.367 5.06,5.06 0 0 1 1.262,3.575 5.364,5.364 0 0 1 -1.292,3.794 4.481,4.481 0 0 1 -3.453,1.395 z m 0.076,-8.7 a 2.727,2.727 0 0 0 -2.191,1.005 3.973,3.973 0 0 0 -0.844,2.645 4.013,4.013 0 0 0 0.82,2.632 2.647,2.647 0 0 0 2.146,1 2.77,2.77 0 0 0 2.222,-0.95 3.967,3.967 0 0 0 0.814,-2.659 4.146,4.146 0 0 0 -0.791,-2.714 2.667,2.667 0 0 0 -2.176,-0.961 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path975"
- d="m 76.025,26.164 -2.686,9.8 H 71.5 L 69.634,29.11 A 4.77,4.77 0 0 1 69.49,28.153 h -0.027 a 4.639,4.639 0 0 1 -0.164,0.944 l -1.873,6.87 h -1.88 l -2.741,-9.8 h 1.784 l 1.777,7.178 a 5.2,5.2 0 0 1 0.137,0.943 h 0.034 a 5.373,5.373 0 0 1 0.192,-0.943 l 2.009,-7.178 h 1.675 l 1.859,7.233 a 5.635,5.635 0 0 1 0.144,0.875 h 0.027 a 5.445,5.445 0 0 1 0.158,-0.9 l 1.743,-7.2 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path977"
- d="m 83.94,35.967 h -5.5 v -9.8 h 5.285 v 1.381 h -3.661 v 2.772 h 3.37 v 1.374 h -3.37 v 2.9 h 3.876 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path979"
- d="m 94.307,35.967 h -1.9 l -1.565,-2.625 a 5.813,5.813 0 0 0 -0.414,-0.619 2.488,2.488 0 0 0 -0.41,-0.42 1.349,1.349 0 0 0 -0.454,-0.239 1.9,1.9 0 0 0 -0.554,-0.076 h -0.656 v 3.979 h -1.622 v -9.8 h 3.227 a 4.678,4.678 0 0 1 1.271,0.164 2.962,2.962 0 0 1 1.012,0.5 2.3,2.3 0 0 1 0.673,0.826 2.608,2.608 0 0 1 0.243,1.16 2.883,2.883 0 0 1 -0.153,0.954 2.492,2.492 0 0 1 -0.438,0.771 2.661,2.661 0 0 1 -0.683,0.578 3.4,3.4 0 0 1 -0.9,0.369 v 0.028 a 2.489,2.489 0 0 1 0.465,0.332 c 0.132,0.12 0.258,0.244 0.376,0.372 a 4.53,4.53 0 0 1 0.352,0.434 c 0.117,0.162 0.245,0.35 0.387,0.564 z m -5.954,-8.484 v 3.186 h 1.353 a 2,2 0 0 0 0.693,-0.116 1.587,1.587 0 0 0 0.551,-0.335 1.52,1.52 0 0 0 0.363,-0.533 1.843,1.843 0 0 0 0.129,-0.7 A 1.4,1.4 0 0 0 91,27.88 1.856,1.856 0 0 0 89.722,27.48 Z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path981"
- d="m 102,35.967 h -5.5 v -9.8 h 5.284 v 1.381 h -3.659 v 2.772 h 3.37 v 1.374 h -3.37 v 2.9 H 102 Z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path983"
- d="m 104.794,35.967 v -9.8 h 2.83 q 5.421,0 5.421,4.778 a 4.711,4.711 0 0 1 -1.5,3.648 5.741,5.741 0 0 1 -4.033,1.377 z m 1.62,-8.422 v 7.048 h 1.3 a 3.636,3.636 0 0 0 2.67,-0.944 3.583,3.583 0 0 0 0.953,-2.666 q 0,-3.438 -3.562,-3.438 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path985"
- d="m 120.785,35.967 v -9.8 h 3.115 a 3.665,3.665 0 0 1 2.251,0.622 1.932,1.932 0 0 1 0.832,1.62 2.32,2.32 0 0 1 -0.472,1.45 2.548,2.548 0 0 1 -1.306,0.875 v 0.027 a 2.552,2.552 0 0 1 1.616,0.748 2.275,2.275 0 0 1 0.606,1.644 2.47,2.47 0 0 1 -0.991,2.038 3.93,3.93 0 0 1 -2.5,0.779 z m 1.62,-8.5 v 2.789 h 1.053 a 2.028,2.028 0 0 0 1.33,-0.4 1.392,1.392 0 0 0 0.482,-1.131 q 0,-1.259 -1.682,-1.258 z m 0,4.1 v 3.1 h 1.388 a 2.119,2.119 0 0 0 1.4,-0.42 1.441,1.441 0 0 0 0.5,-1.159 q 0,-1.525 -2.112,-1.524 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path987"
- d="m 136.717,26.164 -3.217,6.241 v 3.562 h -1.627 V 32.44 l -3.131,-6.276 h 1.858 l 1.927,4.2 q 0.034,0.075 0.2,0.568 h 0.021 a 3.839,3.839 0 0 1 0.226,-0.568 l 2.016,-4.2 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path989"
- d="m 150.752,35.557 a 5.938,5.938 0 0 1 -2.755,0.574 4.5,4.5 0 0 1 -3.418,-1.347 4.909,4.909 0 0 1 -1.285,-3.534 5.15,5.15 0 0 1 1.445,-3.8 4.951,4.951 0 0 1 3.655,-1.45 6,6 0 0 1 2.358,0.4 v 1.614 a 4.208,4.208 0 0 0 -2.187,-0.588 3.442,3.442 0 0 0 -2.582,1.018 3.744,3.744 0 0 0 -0.983,2.724 3.567,3.567 0 0 0 0.923,2.58 3.209,3.209 0 0 0 2.427,0.961 4.348,4.348 0 0 0 2.406,-0.656 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path991"
- d="m 155.329,35.967 h -1.675 v -9.8 h 1.675 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path993"
- d="m 158.793,35.967 v -9.8 h 3.11 a 3.667,3.667 0 0 1 2.252,0.622 1.931,1.931 0 0 1 0.831,1.62 2.32,2.32 0 0 1 -0.471,1.45 2.548,2.548 0 0 1 -1.306,0.875 v 0.027 a 2.552,2.552 0 0 1 1.616,0.748 2.279,2.279 0 0 1 0.606,1.644 2.47,2.47 0 0 1 -0.991,2.038 3.932,3.932 0 0 1 -2.5,0.779 z m 1.62,-8.5 v 2.789 h 1.053 a 2.028,2.028 0 0 0 1.33,-0.4 1.392,1.392 0 0 0 0.481,-1.131 q 0,-1.259 -1.681,-1.258 z m 0,4.1 v 3.1 h 1.387 a 2.119,2.119 0 0 0 1.405,-0.42 1.441,1.441 0 0 0 0.5,-1.159 q 0,-1.525 -2.112,-1.524 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /></g><rect
- id="rect997"
- height="37"
- width="37"
- class="cls-1"
- x="0"
- y="0"
- style="fill:#961e29" /><g
- id="g1001"><path
- d="m 23.59,4.5 a 0.7,0.7 0 0 0 -0.643,0.409 0.68,0.68 0 0 0 0.149,0.74 l 5.814,5.833 a 0.7,0.7 0 0 0 0.74,0.151 0.688,0.688 0 0 0 0.425,-0.617 V 5.172 A 0.7,0.7 0 0 0 29.393,4.5 Z"
- class="cls-2"
- id="path6084"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" /><path
- d="M 7.6,4.5 A 0.689,0.689 0 0 0 6.921,5.19 V 31.81 A 0.688,0.688 0 0 0 7.6,32.5 l 15.3,-0.008 c 2.249,0.008 7.18,-4.832 7.18,-7.278 V 14.668 a 0.691,0.691 0 0 0 -0.2,-0.49 L 20.452,4.711 A 0.689,0.689 0 0 0 19.963,4.5 Z m 0.689,1.379 h 11.385 l 9.026,9.067 c 0,0 0,9.218 0,9.809 0,1.835 -4.229,6.366 -6.45,6.366 H 8.293 Z"
- class="cls-2"
- id="path6088"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" /></g></g><rect
- style="fill:#961e29;fill-opacity:1;stroke:none;stroke-width:0.73190653;stroke-opacity:1"
- id="rect880"
- width="510.974"
- height="45"
- x="0.013000467"
- y="0" /><rect
- style="fill:#961e29;fill-opacity:1;stroke:none;stroke-width:0.73190647;stroke-opacity:1"
- id="rect880-0"
- width="510.974"
- height="45"
- x="0.013000488"
- y="216" /></svg> \ No newline at end of file
+ clip-path="url(#b)"
+ id="g43"
+ transform="matrix(2.5725516,0,0,2.5725516,42.906241,80.798237)"><g
+ id="g41"><g
+ id="g13"><path
+ d="m 47.7,28.92 c -1.48,0.78 -3.33,1.18 -5.54,1.18 -2.86,0 -5.14,-0.92 -6.86,-2.76 -1.72,-1.84 -2.58,-4.25 -2.58,-7.24 0,-3.21 0.97,-5.8 2.9,-7.78 1.93,-1.98 4.38,-2.97 7.35,-2.97 1.9,0 3.48,0.28 4.73,0.83 v 2.51 c -1.44,-0.8 -3.02,-1.2 -4.76,-1.2 -2.3,0 -4.17,0.77 -5.61,2.31 -1.44,1.54 -2.15,3.6 -2.15,6.17 0,2.57 0.67,4.39 2.01,5.84 1.34,1.45 3.1,2.18 5.27,2.18 2.02,0 3.76,-0.45 5.24,-1.34 v 2.28 z"
+ style="fill:#212934"
+ id="path7" /><path
+ d="M 54.86,29.76 H 52.51 V 9.69 h 2.35 z"
+ style="fill:#212934"
+ id="path9" /><path
+ d="M 60.85,29.76 V 9.69 h 5.71 c 1.74,0 3.11,0.42 4.13,1.27 1.02,0.85 1.53,1.96 1.53,3.32 0,1.14 -0.31,2.13 -0.92,2.97 -0.62,0.84 -1.46,1.44 -2.55,1.79 v 0.06 c 1.35,0.16 2.44,0.67 3.25,1.53 0.81,0.86 1.22,1.99 1.22,3.37 0,1.72 -0.62,3.11 -1.85,4.17 -1.23,1.06 -2.79,1.6 -4.66,1.6 H 60.86 Z M 63.2,11.81 v 6.48 h 2.41 c 1.29,0 2.3,-0.31 3.04,-0.93 0.74,-0.62 1.11,-1.5 1.11,-2.62 0,-1.95 -1.28,-2.93 -3.85,-2.93 h -2.7 z m 0,8.6 v 7.22 h 3.19 c 1.38,0 2.45,-0.33 3.21,-0.98 0.76,-0.65 1.14,-1.55 1.14,-2.69 0,-2.37 -1.61,-3.56 -4.84,-3.56 h -2.7 z"
+ style="fill:#212934"
+ id="path11" /></g><g
+ id="g25"><path
+ d="m 21.65,17.96 c -0.31,-0.32 -0.83,-0.32 -1.14,0 L 12.1,26.37 8.57,22.85 6.65,24.77 12.1,30.22 23.01,19.31 21.66,17.95 Z"
+ style="fill:#e11e19"
+ id="path15" /><path
+ d="m 15.74,28.28 -2.33,1.97 h 1.45 c 2.67,0 4.84,-2.17 4.84,-4.84 v -0.44 l -2.22,1.9 c -0.37,0.67 -0.99,1.18 -1.74,1.41 z"
+ style="fill:#e11e19"
+ id="path17" /><polygon
+ points="9.62,30.26 8.07,28.42 4.92,28.42 4.92,10.25 17.86,10.25 17.86,18.13 19.69,16.56 19.69,8.41 3.08,8.41 3.08,30.26 "
+ style="fill:#e11e19"
+ id="polygon19" /><rect
+ x="7.2600002"
+ y="11.82"
+ width="7.8899999"
+ height="2.24"
+ rx="1.05"
+ ry="1.05"
+ style="fill:#e11e19"
+ id="rect21" /><rect
+ x="7.3699999"
+ y="17.120001"
+ width="7.8899999"
+ height="2.1300001"
+ rx="1"
+ ry="1"
+ style="fill:#e11e19"
+ id="rect23" /></g><g
+ id="g39"><path
+ d="m 92.64,30.16 c -2.85,0 -5.13,-0.94 -6.84,-2.81 -1.71,-1.87 -2.57,-4.32 -2.57,-7.32 0,-3.23 0.87,-5.81 2.62,-7.73 1.75,-1.92 4.12,-2.88 7.13,-2.88 2.77,0 5,0.93 6.7,2.8 1.69,1.87 2.54,4.31 2.54,7.32 0,3.28 -0.87,5.87 -2.6,7.77 -1.74,1.9 -4.06,2.86 -6.97,2.86 z m 0.17,-18.62 c -2.11,0 -3.82,0.76 -5.14,2.28 -1.32,1.52 -1.97,3.52 -1.97,5.99 0,2.47 0.64,4.46 1.92,5.97 1.28,1.51 2.96,2.26 5.02,2.26 2.2,0 3.94,-0.72 5.21,-2.16 1.27,-1.44 1.9,-3.45 1.9,-6.03 0,-2.58 -0.62,-4.7 -1.85,-6.15 -1.23,-1.45 -2.93,-2.17 -5.1,-2.17 z"
+ style="fill:#212934"
+ id="path27" /><path
+ d="m 113.65,10.62 c -0.45,-0.25 -0.96,-0.38 -1.53,-0.38 -1.61,0 -2.41,1.01 -2.41,3.04 v 2.21 h 3.36 v 1.96 h -3.36 v 12.38 h -2.28 V 17.45 h -2.45 v -1.96 h 2.45 v -2.32 c 0,-1.5 0.43,-2.69 1.3,-3.56 0.87,-0.87 1.95,-1.31 3.25,-1.31 0.7,0 1.25,0.08 1.67,0.25 z"
+ style="fill:#212934"
+ id="path29" /><path
+ d="m 123.35,10.62 c -0.45,-0.25 -0.96,-0.38 -1.53,-0.38 -1.61,0 -2.41,1.01 -2.41,3.04 v 2.21 h 3.36 v 1.96 h -3.36 v 12.38 h -2.28 V 17.45 h -2.45 v -1.96 h 2.45 v -2.32 c 0,-1.5 0.43,-2.69 1.3,-3.56 0.87,-0.87 1.95,-1.31 3.25,-1.31 0.7,0 1.25,0.08 1.67,0.25 z"
+ style="fill:#212934"
+ id="path31" /><path
+ d="m 127.13,11.85 c -0.41,0 -0.76,-0.14 -1.05,-0.42 -0.29,-0.28 -0.43,-0.63 -0.43,-1.06 0,-0.43 0.14,-0.79 0.43,-1.07 0.29,-0.29 0.64,-0.43 1.05,-0.43 0.41,0 0.78,0.14 1.07,0.43 0.29,0.28 0.44,0.64 0.44,1.07 0,0.43 -0.15,0.76 -0.44,1.05 -0.29,0.29 -0.65,0.43 -1.07,0.43 z m 1.12,17.98 h -2.3 V 15.49 h 2.3 z"
+ style="fill:#212934"
+ id="path33" /><path
+ d="m 143.38,29.17 c -1.1,0.66 -2.41,0.99 -3.92,0.99 -2.04,0 -3.69,-0.67 -4.95,-2 -1.25,-1.33 -1.88,-3.05 -1.88,-5.17 0,-2.36 0.68,-4.26 2.03,-5.69 1.35,-1.43 3.16,-2.15 5.42,-2.15 1.26,0 2.37,0.23 3.33,0.7 v 2.35 c -1.06,-0.75 -2.2,-1.12 -3.42,-1.12 -1.47,0 -2.67,0.53 -3.61,1.58 -0.94,1.05 -1.41,2.43 -1.41,4.14 0,1.71 0.44,3.01 1.32,3.98 0.88,0.97 2.07,1.46 3.55,1.46 1.25,0 2.43,-0.42 3.53,-1.25 v 2.18 z"
+ style="fill:#212934"
+ id="path35" /><path
+ d="m 159.09,23.23 h -10.12 c 0.04,1.6 0.47,2.83 1.29,3.7 0.82,0.87 1.95,1.3 3.39,1.3 1.62,0 3.1,-0.53 4.45,-1.6 v 2.16 c -1.26,0.92 -2.93,1.37 -5,1.37 -2.07,0 -3.62,-0.65 -4.77,-1.95 -1.15,-1.3 -1.74,-3.13 -1.74,-5.5 0,-2.23 0.63,-4.05 1.9,-5.45 1.26,-1.41 2.83,-2.11 4.71,-2.11 1.88,0 3.33,0.61 4.35,1.82 1.03,1.21 1.54,2.9 1.54,5.05 v 1.2 z m -2.35,-1.95 c 0,-1.33 -0.33,-2.36 -0.96,-3.09 -0.63,-0.73 -1.5,-1.11 -2.62,-1.11 -1.12,0 -2,0.39 -2.76,1.16 -0.76,0.78 -1.22,1.79 -1.4,3.04 z"
+ style="fill:#212934"
+ id="path37" /></g></g></g></svg>
diff --git a/brand/cib/logo.png b/brand/cib/logo.png
index ace737a89fd9..4ae4a19b1ccb 100644
--- a/brand/cib/logo.png
+++ b/brand/cib/logo.png
Binary files differ
diff --git a/brand/cib/logo.svg b/brand/cib/logo.svg
index 4e0efdbc9249..7cfdad3fd177 100644
--- a/brand/cib/logo.svg
+++ b/brand/cib/logo.svg
@@ -1,104 +1 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- height="300"
- preserveAspectRatio="xMidYMid"
- viewBox="0 0 7937.5004 7937.5005"
- width="300"
- version="1.1"
- id="svg1868"
- sodipodi:docname="logo.svg"
- inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
- style="fill-rule:evenodd;stroke-width:28.22200012;stroke-linejoin:round"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\icon-themes\cib\sfx2\res\logo.png"
- inkscape:export-xdpi="96"
- inkscape:export-ydpi="96">
- <metadata
- id="metadata1874">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <defs
- id="defs1872">
- <style
- id="style838">
- .cls-1 {
- fill: #961e29;
- }
-
- .cls-2 {
- fill: #fff;
- }
- </style>
- </defs>
- <sodipodi:namedview
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="0"
- inkscape:pageshadow="2"
- inkscape:window-width="2520"
- inkscape:window-height="1031"
- id="namedview1870"
- showgrid="false"
- inkscape:zoom="1.6857142"
- inkscape:cx="59.607026"
- inkscape:cy="150.4356"
- inkscape:window-x="2869"
- inkscape:window-y="50"
- inkscape:window-maximized="1"
- inkscape:current-layer="g6082"
- units="px" />
- <g
- data-name="Ebene 4"
- id="Ebene_4"
- transform="matrix(99.215593,0,0,99.215593,82.797858,562.35777)">
- <g
- id="g6082">
- <g
- data-name="Ebene 4"
- id="Ebene_4-3"
- transform="matrix(1.0090412,0,0,1.0090412,1.832226,-3.0012875)">
- <rect
- id="rect844"
- height="74"
- width="74"
- class="cls-1"
- x="0"
- y="0"
- style="fill:#961e29" />
- <g
- id="g848">
- <path
- d="m 47.181,9 a 1.4,1.4 0 0 0 -1.288,0.817 1.365,1.365 0 0 0 0.3,1.481 L 57.82,22.964 a 1.407,1.407 0 0 0 1.48,0.3 1.376,1.376 0 0 0 0.85,-1.234 V 10.345 A 1.4,1.4 0 0 0 58.787,9 Z"
- class="cls-2"
- id="path6084"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" />
- <path
- d="M 15.207,9 A 1.377,1.377 0 0 0 13.85,10.38 V 63.621 A 1.377,1.377 0 0 0 15.207,65 L 45.791,64.984 C 50.291,65 60.15,55.319 60.15,50.428 c 0,-8.285 0,-21.092 0,-21.092 a 1.382,1.382 0 0 0 -0.4,-0.98 L 40.9,9.423 A 1.374,1.374 0 0 0 39.926,9 Z m 1.38,2.759 h 22.76 l 18.044,18.133 c 0,0 -0.011,18.437 -0.011,19.619 0,3.668 -8.458,12.73 -12.9,12.73 H 16.587 Z"
- class="cls-2"
- id="path6088"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" />
- </g>
- </g>
- </g>
- </g>
-</svg>
+<?xml version="1.0" encoding="UTF-8"?><svg id="Logos_Material" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32"><defs><style>.cls-1{fill:#e11e19;}.cls-2{clip-path:url(#clippath);}.cls-3{fill:none;}</style><clipPath id="clippath"><rect class="cls-3" x="206.65" y="209.85" width="174" height="38"/></clipPath></defs><g class="cls-2"><g><path class="cls-1" d="M27.39,14.82c-.36-.36-.94-.36-1.3,0l-9.55,9.55-4.01-3.99-2.18,2.18,6.19,6.19,12.38-12.38-1.53-1.54Z"/><path class="cls-1" d="M20.68,26.54l-2.65,2.24h1.64c3.03,0,5.5-2.47,5.5-5.5v-.5l-2.52,2.16c-.42,.76-1.13,1.34-1.97,1.6Z"/><polygon class="cls-1" points="8.4 26.69 8.4 6.07 23.08 6.07 23.08 15.02 25.17 13.23 25.17 3.98 6.32 3.98 6.32 28.77 13.74 28.77 11.98 26.69 8.4 26.69"/><rect class="cls-1" x="11.05" y="7.86" width="8.95" height="2.54" rx="1.19" ry="1.19"/><rect class="cls-1" x="11.19" y="13.87" width="8.95" height="2.42" rx="1.14" ry="1.14"/></g></g><g><path class="cls-1" d="M26.82,14.24c-.36-.36-.94-.36-1.3,0l-9.55,9.55-4.01-3.99-2.18,2.18,6.19,6.19,12.38-12.38-1.53-1.54Z"/><path class="cls-1" d="M20.11,25.96l-2.65,2.24h1.64c3.03,0,5.5-2.47,5.5-5.5v-.5l-2.52,2.16c-.42,.76-1.13,1.34-1.97,1.6Z"/><polygon class="cls-1" points="7.83 26.11 7.83 5.49 22.51 5.49 22.51 14.44 24.6 12.65 24.6 3.4 5.75 3.4 5.75 28.2 13.17 28.2 11.41 26.11 7.83 26.11"/><rect class="cls-1" x="10.48" y="7.28" width="8.95" height="2.54" rx="1.19" ry="1.19"/><rect class="cls-1" x="10.62" y="13.29" width="8.95" height="2.42" rx="1.14" ry="1.14"/></g></svg> \ No newline at end of file
diff --git a/canvas/source/directx/dx_bitmapcanvashelper.cxx b/canvas/source/directx/dx_bitmapcanvashelper.cxx
index b6d08fbbf8df..9733853f5958 100644
--- a/canvas/source/directx/dx_bitmapcanvashelper.cxx
+++ b/canvas/source/directx/dx_bitmapcanvashelper.cxx
@@ -60,7 +60,7 @@ namespace dxcanvas
{
ENSURE_OR_THROW( rTarget,
"BitmapCanvasHelper::setTarget(): Invalid target" );
- ENSURE_OR_THROW( !mpTarget.get(),
+ ENSURE_OR_THROW( !mpTarget,
"BitmapCanvasHelper::setTarget(): target set, old target would be overwritten" );
mpTarget = rTarget;
@@ -72,7 +72,7 @@ namespace dxcanvas
{
ENSURE_OR_THROW( rTarget,
"BitmapCanvasHelper::setTarget(): invalid target" );
- ENSURE_OR_THROW( !mpTarget.get(),
+ ENSURE_OR_THROW( !mpTarget,
"BitmapCanvasHelper::setTarget(): target set, old target would be overwritten" );
mpTarget = rTarget;
diff --git a/canvas/source/directx/dx_canvascustomsprite.cxx b/canvas/source/directx/dx_canvascustomsprite.cxx
index ad18d765ae2b..883ebe431739 100644
--- a/canvas/source/directx/dx_canvascustomsprite.cxx
+++ b/canvas/source/directx/dx_canvascustomsprite.cxx
@@ -43,7 +43,7 @@ namespace dxcanvas
mpSpriteCanvas( rRefDevice ),
mpSurface()
{
- ENSURE_OR_THROW( rRefDevice.get(),
+ ENSURE_OR_THROW( rRefDevice,
"CanvasCustomSprite::CanvasCustomSprite(): Invalid sprite canvas" );
mpSurface.reset(
diff --git a/canvas/source/directx/dx_canvashelper.cxx b/canvas/source/directx/dx_canvashelper.cxx
index 927f838244ab..de4969c6dd48 100644
--- a/canvas/source/directx/dx_canvashelper.cxx
+++ b/canvas/source/directx/dx_canvashelper.cxx
@@ -124,7 +124,7 @@ namespace dxcanvas
{
ENSURE_OR_THROW( rTarget,
"CanvasHelper::setTarget(): Invalid target" );
- ENSURE_OR_THROW( !mpGraphicsProvider.get(),
+ ENSURE_OR_THROW( !mpGraphicsProvider,
"CanvasHelper::setTarget(): target set, old target would be overwritten" );
mpGraphicsProvider = rTarget;
@@ -135,7 +135,7 @@ namespace dxcanvas
{
ENSURE_OR_THROW( rTarget,
"CanvasHelper::setTarget(): invalid target" );
- ENSURE_OR_THROW( !mpGraphicsProvider.get(),
+ ENSURE_OR_THROW( !mpGraphicsProvider,
"CanvasHelper::setTarget(): target set, old target would be overwritten" );
mpGraphicsProvider = rTarget;
diff --git a/canvas/source/directx/dx_canvashelper.hxx b/canvas/source/directx/dx_canvashelper.hxx
index 483033fd7c49..12c939e2e9ac 100644
--- a/canvas/source/directx/dx_canvashelper.hxx
+++ b/canvas/source/directx/dx_canvashelper.hxx
@@ -236,7 +236,7 @@ namespace dxcanvas
/// Provides the Gdiplus::Graphics to render into
GraphicsProviderSharedPtr mpGraphicsProvider;
- bool needOutput() const { return mpGraphicsProvider.get() != nullptr; };
+ bool needOutput() const { return bool(mpGraphicsProvider); };
// returns transparency of color
void setupGraphicsState( GraphicsSharedPtr const & rGraphics,
diff --git a/canvas/source/directx/dx_spritehelper.cxx b/canvas/source/directx/dx_spritehelper.cxx
index af4f340a5437..8f436283387c 100644
--- a/canvas/source/directx/dx_spritehelper.cxx
+++ b/canvas/source/directx/dx_spritehelper.cxx
@@ -55,7 +55,7 @@ namespace dxcanvas
const DXSurfaceBitmapSharedPtr& rBitmap,
bool bShowSpriteBounds )
{
- ENSURE_OR_THROW( rSpriteCanvas.get() &&
+ ENSURE_OR_THROW( rSpriteCanvas &&
rRenderModule &&
rBitmap,
"SpriteHelper::init(): Invalid device, sprite canvas or surface" );
@@ -87,7 +87,7 @@ namespace dxcanvas
bool SpriteHelper::needRedraw() const
{
if( !mpBitmap ||
- !mpSpriteCanvas.get() )
+ !mpSpriteCanvas )
{
return false; // we're disposed, no redraw necessary
}
@@ -104,7 +104,7 @@ namespace dxcanvas
void SpriteHelper::redraw( bool& io_bSurfaceDirty ) const
{
if( !mpBitmap ||
- !mpSpriteCanvas.get() )
+ !mpSpriteCanvas )
{
return; // we're disposed
}
diff --git a/chart2/source/view/inc/PlottingPositionHelper.hxx b/chart2/source/view/inc/PlottingPositionHelper.hxx
index 74fc37cdea80..3343196e7e45 100644
--- a/chart2/source/view/inc/PlottingPositionHelper.hxx
+++ b/chart2/source/view/inc/PlottingPositionHelper.hxx
@@ -19,6 +19,10 @@
#ifndef INCLUDED_CHART2_SOURCE_VIEW_INC_PLOTTINGPOSITIONHELPER_HXX
#define INCLUDED_CHART2_SOURCE_VIEW_INC_PLOTTINGPOSITIONHELPER_HXX
+#include <sal/config.h>
+
+#include <memory>
+
#include <chartview/ExplicitScaleValues.hxx>
#include <basegfx/range/b2drectangle.hxx>
diff --git a/comphelper/source/misc/docpasswordhelper.cxx b/comphelper/source/misc/docpasswordhelper.cxx
index dfc408690027..946737994ab7 100644
--- a/comphelper/source/misc/docpasswordhelper.cxx
+++ b/comphelper/source/misc/docpasswordhelper.cxx
@@ -268,7 +268,9 @@ std::vector<unsigned char> DocPasswordHelper::GetOoxHashAsVector(
eType = comphelper::HashType::SHA512;
else if (rAlgorithmName == "SHA-256" || rAlgorithmName == "SHA256")
eType = comphelper::HashType::SHA256;
- else if (rAlgorithmName == "SHA-1" || rAlgorithmName == "SHA1") // "SHA1" might be in the wild
+ else if (rAlgorithmName == u"SHA-384" || rAlgorithmName == u"SHA384")
+ eType = comphelper::HashType::SHA384;
+ else if (rAlgorithmName == u"SHA-1" || rAlgorithmName == u"SHA1") // "SHA1" might be in the wild
eType = comphelper::HashType::SHA1;
else if (rAlgorithmName == "MD5")
eType = comphelper::HashType::MD5;
diff --git a/comphelper/source/misc/hash.cxx b/comphelper/source/misc/hash.cxx
index 3db0b3e56616..ca5467904c22 100644
--- a/comphelper/source/misc/hash.cxx
+++ b/comphelper/source/misc/hash.cxx
@@ -39,6 +39,8 @@ struct HashImpl
return HASH_AlgSHA1;
case HashType::SHA256:
return HASH_AlgSHA256;
+ case HashType::SHA384:
+ return HASH_AlgSHA384;
case HashType::SHA512:
return HASH_AlgSHA512;
}
@@ -58,6 +60,8 @@ struct HashImpl
return EVP_sha1();
case HashType::SHA256:
return EVP_sha256();
+ case HashType::SHA384:
+ return EVP_sha384();
case HashType::SHA512:
return EVP_sha512();
}
@@ -138,6 +142,8 @@ size_t Hash::getLength() const
return 20;
case HashType::SHA256:
return 32;
+ case HashType::SHA384:
+ return 48;
case HashType::SHA512:
return 64;
}
diff --git a/compilerplugins/clang/test/unusedfields.cxx b/compilerplugins/clang/test/unusedfields.cxx
index 2ec4ab815414..205e1a605203 100644
--- a/compilerplugins/clang/test/unusedfields.cxx
+++ b/compilerplugins/clang/test/unusedfields.cxx
@@ -11,6 +11,7 @@
// expected-no-diagnostics
#else
+#include <memory>
#include <vector>
#include <ostream>
#include <com/sun/star/uno/Any.hxx>
diff --git a/configmgr/source/data.hxx b/configmgr/source/data.hxx
index 315fe7b9bf47..3e4bbd73ff36 100644
--- a/configmgr/source/data.hxx
+++ b/configmgr/source/data.hxx
@@ -69,7 +69,7 @@ struct Data {
rtl::Reference< Node > resolvePathRepresentation(
OUString const & pathRepresentation,
- OUString * canonicRepresenation, std::vector<OUString> * path, int * finalizedLayer)
+ OUString * canonicRepresentation, std::vector<OUString> * path, int * finalizedLayer)
const;
rtl::Reference< Node > getTemplate(
diff --git a/configure.ac b/configure.ac
index 5243821494e3..4b7de8d43669 100644
--- a/configure.ac
+++ b/configure.ac
@@ -9,7 +9,7 @@ dnl in order to create a configure script.
# several non-alphanumeric characters, those are split off and used only for the
# ABOUTBOXPRODUCTVERSIONSUFFIX in openoffice.lst. Why that is necessary, no idea.
-AC_INIT([LibreOffice powered by CIB],[6.4.0.9],[],[],[https://www.cib.de/libreoffice-poweredbycib/])
+AC_INIT([CIB Office],[6.4.0.24],[],[],[https://www.cib.de/office/])
dnl libnumbertext needs autoconf 2.68, but that can pick up autoconf268 just fine if it is installed
dnl whereas aclocal (as run by autogen.sh) insists on using autoconf and fails hard
@@ -5353,6 +5353,10 @@ fi
if test "$with_system_hsqldb" = "yes"; then
perl_use_string="$perl_use_string ; use Archive::Zip"
fi
+if test "$with_system_openssl" != "yes"; then
+ # OpenSSL needs that to build
+ perl_use_string="$perl_use_string ; use FindBin"
+fi
if $PERL -e "$perl_use_string">/dev/null 2>&1; then
AC_MSG_RESULT([all modules found])
else
@@ -7748,7 +7752,7 @@ if test "$with_export_validation" != "no"; then
ODFVALIDATOR="$BUILDDIR/bin/odfvalidator.sh"
# and fetch name of odfvalidator jar name from download.lst
- ODFVALIDATOR_JAR=`$SED -n -e "s/export *ODFVALIDATOR_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
+ ODFVALIDATOR_JAR=`$SED -n -e "s/^ODFVALIDATOR_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
AC_SUBST(ODFVALIDATOR_JAR)
if test -z "$ODFVALIDATOR_JAR"; then
@@ -7775,7 +7779,7 @@ if test "$with_export_validation" != "no"; then
OFFICEOTRON="$BUILDDIR/bin/officeotron.sh"
# and fetch name of officeotron jar name from download.lst
- OFFICEOTRON_JAR=`$SED -n -e "s/export *OFFICEOTRON_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
+ OFFICEOTRON_JAR=`$SED -n -e "s/^OFFICEOTRON_JAR *:= *\(.*\) */\1/p" $SRC_ROOT/download.lst`
AC_SUBST(OFFICEOTRON_JAR)
if test -z "$OFFICEOTRON_JAR"; then
@@ -8791,14 +8795,14 @@ int main(int argc, char **argv) {
internal)
SYSTEM_PYTHON=
PYTHON_VERSION_MAJOR=3
- PYTHON_VERSION_MINOR=7
- PYTHON_VERSION=${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}.10
+ PYTHON_VERSION_MINOR=8
+ PYTHON_VERSION=${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}.19
if ! grep -q -i python.*${PYTHON_VERSION} ${SRC_ROOT}/download.lst; then
AC_MSG_ERROR([PYTHON_VERSION ${PYTHON_VERSION} but no matching file in download.lst])
fi
AC_DEFINE_UNQUOTED([PYTHON_VERSION_STRING], [L"${PYTHON_VERSION}"])
BUILD_TYPE="$BUILD_TYPE PYTHON"
- if test "$OS" = LINUX; then
+ if test "$OS" = LINUX -o "$OS" = WNT ; then
BUILD_TYPE="$BUILD_TYPE LIBFFI"
fi
# Embedded Python dies without Home set
diff --git a/connectivity/source/drivers/hsqldb/HDriver.cxx b/connectivity/source/drivers/hsqldb/HDriver.cxx
index de76ecbba29d..95c610843efa 100644
--- a/connectivity/source/drivers/hsqldb/HDriver.cxx
+++ b/connectivity/source/drivers/hsqldb/HDriver.cxx
@@ -300,6 +300,37 @@ namespace connectivity
} // if ( xStream.is() )
::comphelper::disposeComponent(xStream);
}
+
+ // disallow any database/script files that contain a "SCRIPT[.*]" entry (this is belt and braces
+ // in that bundled hsqldb 1.8.0 is patched to also reject them)
+ //
+ // hsqldb 2.6.0 release notes have: added system role SCRIPT_OPS for export / import of database structure and data
+ // which seems to provide a builtin way to do this with contemporary hsqldb
+ const OUString sScript( "script" );
+ if (!bIsNewDatabase && xStorage->isStreamElement(sScript))
+ {
+ Reference<XStream > xStream = xStorage->openStreamElement(sScript, ElementModes::READ);
+ if (xStream.is())
+ {
+ std::unique_ptr<SvStream> pStream(::utl::UcbStreamHelper::CreateStream(xStream));
+ if (pStream)
+ {
+ OString sLine;
+ while (pStream->ReadLine(sLine))
+ {
+ OString sText = sLine.trim();
+ if (sText.startsWithIgnoreAsciiCase("SCRIPT"))
+ {
+ ::connectivity::SharedResources aResources;
+ sMessage = aResources.getResourceString(STR_COULD_NOT_LOAD_FILE).replaceFirst("$filename$", sSystemPath);
+ break;
+ }
+ }
+ }
+ } // if ( xStream.is() )
+ ::comphelper::disposeComponent(xStream);
+ }
+
}
catch(Exception&)
{
diff --git a/connectivity/source/inc/java/tools.hxx b/connectivity/source/inc/java/tools.hxx
index e3763cd655a0..f8e694063374 100644
--- a/connectivity/source/inc/java/tools.hxx
+++ b/connectivity/source/inc/java/tools.hxx
@@ -20,6 +20,10 @@
#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_TOOLS_HXX
#define INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_TOOLS_HXX
+#include <sal/config.h>
+
+#include <memory>
+
#include <com/sun/star/beans/PropertyValue.hpp>
#include <com/sun/star/uno/Sequence.h>
diff --git a/cui/inc/strings.hrc b/cui/inc/strings.hrc
index 4051cbb4e444..9a224a3bb9a0 100644
--- a/cui/inc/strings.hrc
+++ b/cui/inc/strings.hrc
@@ -380,6 +380,7 @@
#define RID_SVXSTR_REGISTERED_DATABASES NC_("RID_SVXSTR_REGISTERED_DATABASES", "Registered Databases")
#define RID_SVXSTR_CANNOTCONVERTURL_ERR NC_("RID_SVXSTR_CANNOTCONVERTURL_ERR", "The URL <%1> cannot be converted to a filesystem path.")
+#define RID_CUISTR_OPT_READONLY NC_("RID_CUISTR_OPT_READONLY", "This property is locked for editing.")
#define RID_SVXSTR_ABOUT_VERSION NC_("aboutdialog|textbuffer1", "Version: %ABOUTBOXPRODUCTVERSION%ABOUTBOXPRODUCTVERSIONSUFFIX")
#define RID_SVXSTR_ABOUT_COPYRIGHT NC_("aboutdialog|copyright", "Copyright © 2000–2021 LibreOffice contributors.")
diff --git a/cui/source/dialogs/SpellDialog.cxx b/cui/source/dialogs/SpellDialog.cxx
index 204a0b308a2e..58558b660c6e 100644
--- a/cui/source/dialogs/SpellDialog.cxx
+++ b/cui/source/dialogs/SpellDialog.cxx
@@ -1973,7 +1973,7 @@ svx::SpellPortions SentenceEditWindow_Impl::CreateSpellPortions() const
aPortion2.sText = aLeftOverText.makeStringAndClear();
aRet.push_back( aPortion2 );
}
- else
+ else if (!aLeftOverText.isEmpty() && !aRet.empty())
{ // we just need to append the left-over text to the last portion (which had no errors)
aRet[ aRet.size() - 1 ].sText += aLeftOverText;
}
diff --git a/cui/source/dialogs/tipofthedaydlg.cxx b/cui/source/dialogs/tipofthedaydlg.cxx
index 25722420ddfc..e3fc7e31e1a4 100644
--- a/cui/source/dialogs/tipofthedaydlg.cxx
+++ b/cui/source/dialogs/tipofthedaydlg.cxx
@@ -72,8 +72,21 @@ static bool file_exists(const OUString& fileName)
void TipOfTheDayDialog::UpdateTip()
{
- if ((nCurrentTip + 1 > nNumberOfTips) || (nCurrentTip < 0))
- nCurrentTip = 0;
+ for (;;)
+ {
+ if ((nCurrentTip + 1 > nNumberOfTips) || (nCurrentTip < 0))
+ nCurrentTip = 0;
+ if (std::get<1>(TIPOFTHEDAY_STRINGARRAY[nCurrentTip])
+ == "svx/ui/safemodedialog/SafeModeDialog"
+ && !officecfg::Office::Common::Misc::OfferSafeMode::get())
+ {
+ ++nCurrentTip;
+ }
+ else
+ {
+ break;
+ }
+ }
m_xDialog->set_title(CuiResId(STR_TITLE) + ": " + OUString::number(nCurrentTip + 1) + "/"
+ OUString::number(nNumberOfTips));
diff --git a/cui/source/options/optaboutconfig.cxx b/cui/source/options/optaboutconfig.cxx
index 217b0bc5308f..b0687a7a797e 100644
--- a/cui/source/options/optaboutconfig.cxx
+++ b/cui/source/options/optaboutconfig.cxx
@@ -14,6 +14,10 @@
#include <com/sun/star/configuration/theDefaultProvider.hpp>
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <com/sun/star/beans/NamedValue.hpp>
+#include <com/sun/star/beans/PropertyAttribute.hpp>
+#include <com/sun/star/beans/UnknownPropertyException.hpp>
+#include <com/sun/star/beans/XPropertySetInfo.hpp>
+#include <com/sun/star/configuration/ReadWriteAccess.hpp>
#include <com/sun/star/container/XNameAccess.hpp>
#include <com/sun/star/container/XNameReplace.hpp>
#include <com/sun/star/container/XHierarchicalName.hpp>
@@ -22,10 +26,14 @@
#include <com/sun/star/util/SearchAlgorithms2.hpp>
#include <unotools/textsearch.hxx>
#include <vcl/event.hxx>
+#include <vcl/svapp.hxx>
#include <sal/log.hxx>
#include <tools/diagnose_ex.h>
#include <tools/debug.hxx>
+#include <dialmgr.hxx>
+#include <strings.hrc>
+
#include <memory>
#include <vector>
#include <iostream>
@@ -54,18 +62,21 @@ struct Prop_Impl
struct UserData
{
bool bIsPropertyPath;
+ bool bIsReadOnly;
OUString sPropertyPath;
int aLineage;
Reference<XNameAccess> aXNameAccess;
- explicit UserData( OUString const & rPropertyPath )
+ explicit UserData( OUString const & rPropertyPath, bool isReadOnly )
: bIsPropertyPath( true )
+ , bIsReadOnly( isReadOnly )
, sPropertyPath(rPropertyPath)
, aLineage(0)
{}
explicit UserData( Reference<XNameAccess> const & rXNameAccess, int rIndex )
: bIsPropertyPath( false )
+ , bIsReadOnly( false )
, aLineage(rIndex)
, aXNameAccess( rXNameAccess )
{}
@@ -200,9 +211,9 @@ CuiAboutConfigTabPage::~CuiAboutConfigTabPage()
void CuiAboutConfigTabPage::InsertEntry(const OUString& rPropertyPath, const OUString& rProp, const OUString& rStatus,
const OUString& rType, const OUString& rValue, const weld::TreeIter* pParentEntry,
- bool bInsertToPrefBox)
+ bool bInsertToPrefBox, bool bIsReadOnly)
{
- m_vectorUserData.push_back(std::make_unique<UserData>(rPropertyPath));
+ m_vectorUserData.push_back(std::make_unique<UserData>(rPropertyPath, bIsReadOnly));
if (bInsertToPrefBox)
{
OUString sId(OUString::number(reinterpret_cast<sal_Int64>(m_vectorUserData.back().get())));
@@ -308,6 +319,22 @@ void CuiAboutConfigTabPage::FillItems(const Reference< XNameAccess >& xNameAcces
}
);
+ css::uno::Reference<css::configuration::XReadWriteAccess> m_xReadWriteAccess;
+ m_xReadWriteAccess = css::configuration::ReadWriteAccess::create(
+ ::comphelper::getProcessComponentContext(), "*");
+ beans::Property aProperty;
+ bool bReadOnly = false;
+ try
+ {
+ aProperty = m_xReadWriteAccess->getPropertyByHierarchicalName(sPath + "/"
+ + sPropertyName);
+ bReadOnly = (aProperty.Attributes & beans::PropertyAttribute::READONLY) != 0;
+ }
+ catch (css::beans::UnknownPropertyException)
+ {
+ SAL_WARN("cui.options", "unknown property: " << sPath + "/" + sPropertyName);
+ }
+
OUString sType = aNode.getValueTypeName();
OUStringBuffer sValue;
@@ -469,7 +496,7 @@ void CuiAboutConfigTabPage::FillItems(const Reference< XNameAccess >& xNameAcces
for(int j = 1; j < lineage; ++j)
index = sPath.indexOf("/", index + 1);
- InsertEntry(sPath, sPath.copy(index+1), seqItems[i], sType, sValue.makeStringAndClear(), pParentEntry, !bLoadAll);
+ InsertEntry(sPath, sPath.copy(index+1), seqItems[i], sType, sValue.makeStringAndClear(), pParentEntry, !bLoadAll, bReadOnly);
}
}
}
@@ -573,6 +600,15 @@ IMPL_LINK_NOARG( CuiAboutConfigTabPage, StandardHdl_Impl, weld::Button&, void )
return;
UserData *pUserData = reinterpret_cast<UserData*>(m_xPrefBox->get_id(*m_xScratchIter).toInt64());
+ if (pUserData && pUserData->bIsReadOnly)
+ {
+ std::unique_ptr<weld::MessageDialog> xMessageBox(
+ Application::CreateMessageDialog(m_xDialog.get(), VclMessageType::Info, VclButtonsType::Ok,
+ CuiResId(RID_CUISTR_OPT_READONLY)));
+ xMessageBox->run();
+ return;
+ }
+
if (pUserData && pUserData->bIsPropertyPath)
{
//if selection is a node
diff --git a/cui/source/options/optaboutconfig.hxx b/cui/source/options/optaboutconfig.hxx
index b7781859eb4b..ab1cdcfb6ee6 100644
--- a/cui/source/options/optaboutconfig.hxx
+++ b/cui/source/options/optaboutconfig.hxx
@@ -67,7 +67,7 @@ public:
explicit CuiAboutConfigTabPage(weld::Window* pParent);
virtual ~CuiAboutConfigTabPage() override;
void InsertEntry(const OUString &rPropertyPath, const OUString& rProp, const OUString& rStatus, const OUString& rType, const OUString& rValue,
- const weld::TreeIter* pParentEntry, bool bInsertToPrefBox);
+ const weld::TreeIter* pParentEntry, bool bInsertToPrefBox, bool bIsReadOnly);
void Reset();
void FillItems(const css::uno::Reference<css::container::XNameAccess>& xNameAccess,
const weld::TreeIter* pParentEntry = nullptr, int lineage = 0, bool bLoadAll = false);
diff --git a/cui/source/options/optjava.cxx b/cui/source/options/optjava.cxx
index 36540800bb62..02bfc89f7c0a 100644
--- a/cui/source/options/optjava.cxx
+++ b/cui/source/options/optjava.cxx
@@ -34,6 +34,7 @@
#include <officecfg/Office/Common.hxx>
#include <osl/file.hxx>
#include <svtools/miscopt.hxx>
+#include <rtl/bootstrap.hxx>
#include <strings.hrc>
#include <vcl/svapp.hxx>
@@ -933,21 +934,29 @@ void SvxJavaClassPathDlg::SetClassPath( const OUString& _rPath )
if ( m_sOldPath.isEmpty() )
m_sOldPath = _rPath;
m_xPathList->clear();
+#if HAVE_FEATURE_JAVA
if (!_rPath.isEmpty())
{
- sal_Int32 nIdx = 0;
- do
+ std::vector paths = jfw_convertUserPathList(_rPath);
+ for (auto const& path : paths)
{
- OUString sToken = _rPath.getToken( 0, CLASSPATH_DELIMITER, nIdx );
OUString sURL;
- osl::FileBase::getFileURLFromSystemPath(sToken, sURL); // best effort
+ if (path.startsWith("$"))
+ {
+ sURL = path;
+ rtl::Bootstrap::expandMacros(sURL);
+ }
+ else
+ {
+ osl::FileBase::getFileURLFromSystemPath(path, sURL);
+ }
INetURLObject aURL( sURL );
- m_xPathList->append("", sToken, SvFileInformationManager::GetImageId(aURL));
+ m_xPathList->append("", path, SvFileInformationManager::GetImageId(aURL));
}
- while (nIdx>=0);
// select first entry
m_xPathList->select(0);
}
+#endif
SelectHdl_Impl(*m_xPathList);
}
diff --git a/cui/source/options/optsave.cxx b/cui/source/options/optsave.cxx
index 72f736ce406b..2ce16aa16de8 100644
--- a/cui/source/options/optsave.cxx
+++ b/cui/source/options/optsave.cxx
@@ -29,6 +29,7 @@
#include <com/sun/star/container/XContainerQuery.hpp>
#include <com/sun/star/container/XEnumeration.hpp>
#include <com/sun/star/beans/PropertyValue.hpp>
+#include <officecfg/Office/Common.hxx>
#include <sfx2/sfxsids.hrc>
#include <sfx2/docfilt.hxx>
#include <unotools/optionsdlg.hxx>
@@ -69,6 +70,7 @@ SvxSaveTabPage_Impl::SvxSaveTabPage_Impl() : bInitialized( false )
SvxSaveTabPage::SvxSaveTabPage(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet& rCoreSet)
: SfxTabPage( pPage, pController, "cui/ui/optsavepage.ui", "OptSavePage", &rCoreSet )
, pImpl(new SvxSaveTabPage_Impl)
+ , m_xLoadViewPosAnyUserCB(m_xBuilder->weld_check_button("load_anyuser"))
, m_xLoadUserSettingsCB(m_xBuilder->weld_check_button("load_settings"))
, m_xLoadDocPrinterCB(m_xBuilder->weld_check_button("load_docprinter"))
, m_xDocInfoCB(m_xBuilder->weld_check_button("docinfo"))
@@ -215,6 +217,13 @@ bool SvxSaveTabPage::FillItemSet( SfxItemSet* rSet )
{
bool bModified = false;
SvtSaveOptions aSaveOpt;
+ if (m_xLoadViewPosAnyUserCB->get_state_changed_from_saved())
+ {
+ std::shared_ptr<comphelper::ConfigurationChanges> pBatch(
+ comphelper::ConfigurationChanges::create());
+ officecfg::Office::Common::Load::ViewPositionForAnyUser::set(m_xLoadViewPosAnyUserCB->get_active(), pBatch);
+ pBatch->commit();
+ }
if(m_xLoadUserSettingsCB->get_state_changed_from_saved())
{
aSaveOpt.SetLoadUserSettings(m_xLoadUserSettingsCB->get_active());
@@ -353,6 +362,9 @@ static bool isODFFormat( const OUString& sFilter )
void SvxSaveTabPage::Reset( const SfxItemSet* )
{
SvtSaveOptions aSaveOpt;
+ m_xLoadViewPosAnyUserCB->set_active(officecfg::Office::Common::Load::ViewPositionForAnyUser::get());
+ m_xLoadViewPosAnyUserCB->save_state();
+ m_xLoadViewPosAnyUserCB->set_sensitive(!officecfg::Office::Common::Load::ViewPositionForAnyUser::isReadOnly());
m_xLoadUserSettingsCB->set_active(aSaveOpt.IsLoadUserSettings());
m_xLoadUserSettingsCB->save_state();
m_xLoadUserSettingsCB->set_sensitive(!aSaveOpt.IsReadOnly(SvtSaveOptions::EOption::UseUserData));
diff --git a/cui/source/options/optsave.hxx b/cui/source/options/optsave.hxx
index 4314bdda1ddf..f412054ae600 100644
--- a/cui/source/options/optsave.hxx
+++ b/cui/source/options/optsave.hxx
@@ -45,6 +45,7 @@ class SvxSaveTabPage : public SfxTabPage
private:
std::unique_ptr<SvxSaveTabPage_Impl> pImpl;
+ std::unique_ptr<weld::CheckButton> m_xLoadViewPosAnyUserCB;
std::unique_ptr<weld::CheckButton> m_xLoadUserSettingsCB;
std::unique_ptr<weld::CheckButton> m_xLoadDocPrinterCB;
std::unique_ptr<weld::CheckButton> m_xDocInfoCB;
diff --git a/cui/uiconfig/ui/optsavepage.ui b/cui/uiconfig/ui/optsavepage.ui
index e9a090d45091..c95efcfc68cc 100644
--- a/cui/uiconfig/ui/optsavepage.ui
+++ b/cui/uiconfig/ui/optsavepage.ui
@@ -61,6 +61,21 @@
<property name="top_attach">0</property>
</packing>
</child>
+ <child>
+ <object class="GtkCheckButton" id="load_anyuser">
+ <property name="label" translatable="yes" context="optsavepage|load_anyuser">Load view position with the document even if it was saved by a different user</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">2</property>
+ </packing>
+ </child>
</object>
</child>
</object>
diff --git a/dbaccess/source/core/dataaccess/ModelImpl.cxx b/dbaccess/source/core/dataaccess/ModelImpl.cxx
index 9681254b8262..625422812960 100644
--- a/dbaccess/source/core/dataaccess/ModelImpl.cxx
+++ b/dbaccess/source/core/dataaccess/ModelImpl.cxx
@@ -1142,7 +1142,8 @@ bool ODatabaseModelImpl::checkMacrosOnLoading()
{
Reference< XInteractionHandler > xInteraction;
xInteraction = m_aMediaDescriptor.getOrDefault( "InteractionHandler", xInteraction );
- return m_aMacroMode.checkMacrosOnLoading( xInteraction );
+ const bool bHasMacros = m_aMacroMode.hasMacros();
+ return m_aMacroMode.checkMacrosOnLoading(xInteraction, false /*HasValidContentSignature*/, bHasMacros);
}
void ODatabaseModelImpl::resetMacroExecutionMode()
diff --git a/dbaccess/source/ui/dlg/odbcconfig.cxx b/dbaccess/source/ui/dlg/odbcconfig.cxx
index f4e831439591..40507b818c2f 100644
--- a/dbaccess/source/ui/dlg/odbcconfig.cxx
+++ b/dbaccess/source/ui/dlg/odbcconfig.cxx
@@ -280,7 +280,7 @@ OOdbcManagement::OOdbcManagement(const Link<void*,void>& rAsyncFinishCallback)
OOdbcManagement::~OOdbcManagement()
{
// wait for our thread to be finished
- if ( m_pProcessWait.get() )
+ if ( m_pProcessWait )
m_pProcessWait->join();
}
@@ -306,19 +306,19 @@ bool OOdbcManagement::manageDataSources_async()
void OOdbcManagement::disableCallback()
{
- if (m_pProcessWait.get())
+ if (m_pProcessWait)
m_pProcessWait->disableCallback();
}
void OOdbcManagement::receivedCallback()
{
- if (m_pProcessWait.get())
+ if (m_pProcessWait)
m_pProcessWait->receivedCallback();
}
bool OOdbcManagement::isRunning() const
{
- return ( m_pProcessWait.get() && m_pProcessWait->isRunning() );
+ return ( m_pProcessWait && m_pProcessWait->isRunning() );
}
#endif // HAVE_ODBC_ADMINISTRATION
diff --git a/desktop/qa/desktop_lib/test_desktop_lib.cxx b/desktop/qa/desktop_lib/test_desktop_lib.cxx
index 1bb185dd5b9e..f32fb09d9270 100644
--- a/desktop/qa/desktop_lib/test_desktop_lib.cxx
+++ b/desktop/qa/desktop_lib/test_desktop_lib.cxx
@@ -2396,7 +2396,8 @@ void DesktopLOKTest::testInsertCertificate_PEM_ODT()
}
int nState = pDocument->m_pDocumentClass->getSignatureState(pDocument);
- CPPUNIT_ASSERT_EQUAL(int(1), nState);
+ // OK or NOTVALIDATED (signature is OK, but certificate could not be validated)
+ CPPUNIT_ASSERT(nState == 1 || nState == 4);
}
void DesktopLOKTest::testInsertCertificate_PEM_DOCX()
@@ -2454,7 +2455,8 @@ void DesktopLOKTest::testInsertCertificate_PEM_DOCX()
}
int nState = pDocument->m_pDocumentClass->getSignatureState(pDocument);
- CPPUNIT_ASSERT_EQUAL(int(5), nState);
+ // PARTIAL_OK or NOTVALIDATED_PARTIAL_OK
+ CPPUNIT_ASSERT(nState == 5 || nState == 6);
}
void DesktopLOKTest::testSignDocument_PEM_PDF()
diff --git a/desktop/source/app/cmdlineargs.cxx b/desktop/source/app/cmdlineargs.cxx
index 381147cd534e..846714158e25 100644
--- a/desktop/source/app/cmdlineargs.cxx
+++ b/desktop/source/app/cmdlineargs.cxx
@@ -29,6 +29,7 @@
#include <tools/stream.hxx>
#include <vcl/svapp.hxx>
#include <rtl/uri.hxx>
+#include <tools/urlobj.hxx>
#include <rtl/ustring.hxx>
#include <rtl/process.h>
#include <comphelper/lok.hxx>
@@ -169,7 +170,14 @@ CommandLineEvent CheckOfficeURI(/* in,out */ OUString& arg, CommandLineEvent cur
}
if (nURIlen < 0)
nURIlen = rest2.getLength();
- arg = rest2.copy(0, nURIlen);
+ auto const uri = rest2.copy(0, nURIlen);
+ if (INetURLObject(uri).GetProtocol() == INetProtocol::Macro) {
+ // Let the "Open" machinery process the full command URI (leading to failure, by intention,
+ // as the "Open" machinery does not know about those command URI schemes):
+ curEvt = CommandLineEvent::Open;
+ } else {
+ arg = uri;
+ }
return curEvt;
}
diff --git a/desktop/source/migration/migration.cxx b/desktop/source/migration/migration.cxx
index be21788c40d1..05baeddbb4c3 100644
--- a/desktop/source/migration/migration.cxx
+++ b/desktop/source/migration/migration.cxx
@@ -38,6 +38,7 @@
#include <i18nlangtag/lang.h>
#include <tools/diagnose_ex.h>
#include <tools/urlobj.hxx>
+#include <officecfg/Office/UI.hxx>
#include <osl/file.hxx>
#include <osl/security.hxx>
#include <unotools/configmgr.hxx>
@@ -45,6 +46,7 @@
#include <com/sun/star/configuration/Update.hpp>
#include <com/sun/star/configuration/theDefaultProvider.hpp>
#include <com/sun/star/lang/XInitialization.hpp>
+#include <com/sun/star/container/XNameContainer.hpp>
#include <com/sun/star/task/XJob.hpp>
#include <com/sun/star/beans/NamedValue.hpp>
#include <com/sun/star/beans/XPropertySet.hpp>
@@ -666,6 +668,55 @@ bool getComponent(OUString const & path, OUString * component)
return true;
}
+void renameMigratedSetElementTo(
+ css::uno::Reference<css::container::XNameContainer> const & set, OUString const & currentName,
+ OUString const & migratedName)
+{
+ // To avoid unexpected data loss, the code is careful to only rename from currentName to
+ // migratedName in the expected case where the currentName element exists and the migratedName
+ // element doesn't exist:
+ auto const hasCurrent = set->hasByName(currentName);
+ auto const hasMigrated = set->hasByName(migratedName);
+ if (hasCurrent && !hasMigrated) {
+ auto const elem = set->getByName(currentName);
+ set->removeByName(currentName);
+ set->insertByName(migratedName, elem);
+ } else {
+ SAL_INFO_IF(!hasCurrent, "desktop.migration", "unexpectedly missing " << currentName);
+ SAL_INFO_IF(hasMigrated, "desktop.migration", "unexpectedly present " << migratedName);
+ }
+}
+
+void renameMigratedSetElementBack(
+ css::uno::Reference<css::container::XNameContainer> const & set, OUString const & currentName,
+ OUString const & migratedName)
+{
+ // To avoid unexpected data loss, the code is careful to ensure that in the end a currentName
+ // element exists, creating it from a template if the migratedName element had unexpectedly gone
+ // missing:
+ auto const hasMigrated = set->hasByName(migratedName);
+ css::uno::Any elem;
+ if (hasMigrated) {
+ elem = set->getByName(migratedName);
+ set->removeByName(migratedName);
+ } else {
+ SAL_INFO("desktop.migration", "unexpected loss of " << migratedName);
+ elem <<= css::uno::Reference<css::lang::XSingleServiceFactory>(
+ set, css::uno::UNO_QUERY_THROW)->createInstance();
+ }
+ if (set->hasByName(currentName)) {
+ SAL_INFO("desktop.migration", "unexpected reappearance of " << currentName);
+ if (hasMigrated) {
+ SAL_INFO(
+ "desktop.migration",
+ "reappeared " << currentName << " overwritten with " << migratedName);
+ set->replaceByName(currentName, elem);
+ }
+ } else {
+ set->insertByName(currentName, elem);
+ }
+}
+
}
void MigrationImpl::copyConfig()
@@ -696,6 +747,30 @@ void MigrationImpl::copyConfig()
regFile.close();
}
+ // If the to-be-migrated data contains modifications of
+ // /org.openoffice.Office.UI/ColorScheme/ColorSchemes set elements named after the migrated
+ // product name, those modifications must instead be made to the corresponding set elements
+ // named after the current product name. However, if the current configuration data does not
+ // contain those old-named set elements at all, their modification data would silently be
+ // ignored by css.configuration.XUpdate::insertModificationXcuFile. So temporarily rename any
+ // new-named set elements to their old-named counterparts here, and rename them back again down
+ // below after importing the migrated data:
+ OUString sProductName = utl::ConfigManager::getProductName();
+ OUString sProductNameDark = sProductName + " Dark";
+ OUString sMigratedProductName = m_aInfo.productname;
+ // remove version number from the end of product name if there’s one
+ if (isdigit(sMigratedProductName[sMigratedProductName.getLength() - 1]))
+ sMigratedProductName = (sMigratedProductName.copy(0, m_aInfo.productname.getLength() - 1)).trim();
+ OUString sMigratedProductNameDark = sMigratedProductName + " Dark";
+ auto const tempRename = sMigratedProductName != sProductName;
+ if (tempRename) {
+ auto const batch = comphelper::ConfigurationChanges::create();
+ auto const schemes = officecfg::Office::UI::ColorScheme::ColorSchemes::get(batch);
+ renameMigratedSetElementTo(schemes, sProductName, sMigratedProductName);
+ renameMigratedSetElementTo(schemes, sProductNameDark, sMigratedProductNameDark);
+ batch->commit();
+ }
+
for (auto const& comp : comps)
{
if (!comp.second.includedPaths.empty()) {
@@ -728,12 +803,44 @@ void MigrationImpl::copyConfig()
regFilePath,
comphelper::containerToSequence(comp.second.includedPaths),
comphelper::containerToSequence(comp.second.excludedPaths));
+
} else {
SAL_INFO( "desktop.migration", "configuration migration component " << comp.first << " ignored (only excludes, no includes)" );
}
next:
;
}
+ if (tempRename) {
+ auto const batch = comphelper::ConfigurationChanges::create();
+ auto const schemes = officecfg::Office::UI::ColorScheme::ColorSchemes::get(batch);
+ renameMigratedSetElementBack(schemes, sProductName, sMigratedProductName);
+ renameMigratedSetElementBack(schemes, sProductNameDark, sMigratedProductNameDark);
+ batch->commit();
+ }
+ // checking the migrated (product name related) color scheme name, and replace it to the current version scheme name
+ try
+ {
+ OUString sMigratedColorScheme;
+ uno::Reference<XPropertySet> aPropertySet(
+ getConfigAccess("org.openoffice.Office.UI/ColorScheme", true), uno::UNO_QUERY_THROW);
+ if (aPropertySet->getPropertyValue("CurrentColorScheme") >>= sMigratedColorScheme)
+ {
+ if (sMigratedColorScheme.equals(sMigratedProductName))
+ {
+ aPropertySet->setPropertyValue("CurrentColorScheme",
+ uno::Any(sProductName));
+ uno::Reference<XChangesBatch>(aPropertySet, uno::UNO_QUERY_THROW)->commitChanges();
+ }
+ else if (sMigratedColorScheme.equals(sMigratedProductNameDark))
+ {
+ aPropertySet->setPropertyValue("CurrentColorScheme",
+ uno::Any(sProductNameDark));
+ uno::Reference<XChangesBatch>(aPropertySet, uno::UNO_QUERY_THROW)->commitChanges();
+ }
+ }
+ } catch (const Exception&) {
+ // fail silently...
+ }
}
uno::Reference< XNameAccess > MigrationImpl::getConfigAccess(const sal_Char* pPath, bool bUpdate)
diff --git a/desktop/source/minidump/minidump.cxx b/desktop/source/minidump/minidump.cxx
index 8b96d2ff37f1..e1f3eb4c5a94 100644
--- a/desktop/source/minidump/minidump.cxx
+++ b/desktop/source/minidump/minidump.cxx
@@ -184,7 +184,13 @@ static bool uploadContent(std::map<std::string, std::string>& parameters, std::s
response = response_body;
if( CURLE_OK != cc )
+ {
+ if (response.empty())
+ {
+ response = curl_easy_strerror(cc);
+ }
return false;
+ }
return true;
}
diff --git a/desktop/win32/source/loader.cxx b/desktop/win32/source/loader.cxx
index 40cef9e3fd4f..e42420391b4b 100644
--- a/desktop/win32/source/loader.cxx
+++ b/desktop/win32/source/loader.cxx
@@ -164,11 +164,13 @@ int officeloader_impl(bool bAllowConsole)
}
std::vector<std::wstring> aEscapedArgs;
- // read limit values from bootstrap.ini
+ // read limit values from fundamental.override.ini
unsigned int nMaxMemoryInMB = 0;
bool bExcludeChildProcesses = true;
+ bool fallbackForMaxMemoryInMB = true;
+ bool fallbackForExcludeChildProcesses = true;
- const WCHAR* szIniFile = L"\\bootstrap.ini";
+ const WCHAR* szIniFile = L"\\fundamental.override.ini";
const size_t nDirLen = wcslen(szIniDirectory);
if (wcslen(szIniFile) + nDirLen < MAX_PATH)
{
@@ -181,14 +183,45 @@ int officeloader_impl(bool bAllowConsole)
boost::property_tree::ptree pt;
std::ifstream aFile(szBootstrapIni);
boost::property_tree::ini_parser::read_ini(aFile, pt);
- nMaxMemoryInMB = pt.get("Win32.LimitMaximumMemoryInMB", nMaxMemoryInMB);
- bExcludeChildProcesses = pt.get("Win32.ExcludeChildProcessesFromLimit", bExcludeChildProcesses);
+ nMaxMemoryInMB = pt.get("Bootstrap.LimitMaximumMemoryInMB", nMaxMemoryInMB);
+ fallbackForMaxMemoryInMB = !pt.get_child_optional("Bootstrap.LimitMaximumMemoryInMB");
+ bExcludeChildProcesses = pt.get("Bootstrap.ExcludeChildProcessesFromLimit", bExcludeChildProcesses);
+ fallbackForExcludeChildProcesses
+ = !pt.get_child_optional("Bootstrap.ExcludeChildProcessesFromLimit");
}
catch (...)
{
nMaxMemoryInMB = 0;
}
}
+ // For backwards compatibility, for now also try to read the values from bootstrap.ini if
+ // fundamental.override.ini does not provide them:
+ if (fallbackForMaxMemoryInMB || fallbackForExcludeChildProcesses) {
+ const WCHAR* szFallbackIniFile = L"\\bootstrap.ini";
+ const size_t nFallbackDirLen = wcslen(szIniDirectory);
+ if (wcslen(szFallbackIniFile) + nFallbackDirLen < MAX_PATH)
+ {
+ WCHAR szBootstrapIni[MAX_PATH];
+ wcscpy(szBootstrapIni, szIniDirectory);
+ wcscpy(&szBootstrapIni[nFallbackDirLen], szFallbackIniFile);
+
+ try
+ {
+ boost::property_tree::ptree pt;
+ std::ifstream aFile(szBootstrapIni);
+ boost::property_tree::ini_parser::read_ini(aFile, pt);
+ if (fallbackForMaxMemoryInMB) {
+ nMaxMemoryInMB = pt.get("Win32.LimitMaximumMemoryInMB", nMaxMemoryInMB);
+ }
+ if (fallbackForExcludeChildProcesses) {
+ bExcludeChildProcesses = pt.get("Win32.ExcludeChildProcessesFromLimit", bExcludeChildProcesses);
+ }
+ }
+ catch (...)
+ {
+ }
+ }
+ }
// create a Windows JobObject with a memory limit
HANDLE hJobObject = nullptr;
diff --git a/download.lst b/download.lst
index 09168e9bde06..4353d04acf67 100644
--- a/download.lst
+++ b/download.lst
@@ -1,261 +1,597 @@
-export ABW_SHA256SUM := e763a9dc21c3d2667402d66e202e3f8ef4db51b34b79ef41f56cacb86dcd6eed
-export ABW_TARBALL := libabw-0.1.3.tar.xz
-export APR_SHA256SUM := 1af06e1720a58851d90694a984af18355b65bb0d047be03ec7d659c746d6dbdb
-export APR_TARBALL := apr-1.5.2.tar.gz
-export APR_UTIL_SHA256SUM := 976a12a59bc286d634a21d7be0841cc74289ea9077aa1af46be19d1a6e844c19
-export APR_UTIL_TARBALL := apr-util-1.5.4.tar.gz
-export BOOST_SHA256SUM := 8f32d4617390d1c2d16f26a27ab60d97807b35440d45891fa340fc2648b04406
-export BOOST_TARBALL := boost_1_69_0.tar.bz2
-export BREAKPAD_SHA256SUM := 7060149be16a8789b0ccf596bdeaf63115f03f520acb508f72a14686fb311cb9
-export BREAKPAD_TARBALL := breakpad.zip
-export BSH_SHA256SUM := 9e93c73e23aff644b17dfff656444474c14150e7f3b38b19635e622235e01c96
-export BSH_TARBALL := beeca87be45ec87d241ddd0e1bad80c1-bsh-2.0b6-src.zip
-export BZIP2_SHA256SUM := ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269
-export BZIP2_TARBALL := bzip2-1.0.8.tar.gz
-export CAIRO_SHA256SUM := 5e7b29b3f113ef870d1e3ecf8adf21f923396401604bda16d44be45e66052331
-export CAIRO_VERSION_MICRO := 0
-export CAIRO_TARBALL := cairo-1.16.$(CAIRO_VERSION_MICRO).tar.xz
-export CDR_SHA256SUM := 6ace5c499a8be34ad871e825442ce388614ae2d8675c4381756a7319429e3a48
-export CDR_TARBALL := libcdr-0.1.5.tar.xz
-export CLUCENE_SHA256SUM := ddfdc433dd8ad31b5c5819cc4404a8d2127472a3b720d3e744e8c51d79732eab
-export CLUCENE_TARBALL := 48d647fbd8ef8889e5a7f422c1bfda94-clucene-core-2.3.3.4.tar.gz
-export LIBCMIS_SHA256SUM := d7b18d9602190e10d437f8a964a32e983afd57e2db316a07d87477a79f5000a2
-export LIBCMIS_TARBALL := libcmis-0.5.2.tar.xz
-export COINMP_SHA256SUM := 86c798780b9e1f5921fe4efe651a93cb420623b45aa1fdff57af8c37f116113f
-export COINMP_TARBALL := CoinMP-1.7.6.tgz
-export CPPUNIT_SHA256SUM := 3d569869d27b48860210c758c4f313082103a5e58219a7669b52bfd29d674780
-export CPPUNIT_TARBALL := cppunit-1.14.0.tar.gz
-export CT2N_SHA256SUM := 71b238efd2734be9800af07566daea8d6685aeed28db5eb5fa0e6453f4d85de3
-export CT2N_TARBALL := 1f467e5bb703f12cbbb09d5cf67ecf4a-converttexttonumber-1-5-0.oxt
-export CURL_SHA256SUM := 2cb9c2356e7263a1272fd1435ef7cdebf2cd21400ec287b068396deb705c22c4
-export CURL_TARBALL := curl-7.83.1.tar.xz
-export EBOOK_SHA256SUM := 7e8d8ff34f27831aca3bc6f9cc532c2f90d2057c778963b884ff3d1e34dfe1f9
-export EBOOK_TARBALL := libe-book-0.1.3.tar.xz
-export EPOXY_SHA256SUM := 002958c5528321edd53440235d3c44e71b5b1e09b9177e8daf677450b6c4433d
-export EPOXY_TARBALL := libepoxy-1.5.3.tar.xz
-export EPM_SHA256SUM := b3fc4c5445de6c9a801504a3ea3efb2d4ea9d5a622c9427e716736e7713ddb91
-export EPM_TARBALL := 3ade8cfe7e59ca8e65052644fed9fca4-epm-3.7.tar.gz
-export EPUBGEN_SHA256SUM := 03e084b994cbeffc8c3dd13303b2cb805f44d8f2c3b79f7690d7e3fc7f6215ad
-export EPUBGEN_TARBALL := libepubgen-0.1.1.tar.xz
-export ETONYEK_SHA256SUM := e61677e8799ce6e55b25afc11aa5339113f6a49cff031f336e32fa58635b1a4a
-export ETONYEK_VERSION_MICRO := 9
-export ETONYEK_TARBALL := libetonyek-0.1.$(ETONYEK_VERSION_MICRO).tar.xz
-export EXPAT_SHA256SUM := de55794b7a9bc214852fdc075beaaecd854efe1361597e6268ee87946951289b
-export EXPAT_TARBALL := expat-2.4.6.tar.xz
-export FIREBIRD_SHA256SUM := 6994be3555e23226630c587444be19d309b25b0fcf1f87df3b4e3f88943e5860
-export FIREBIRD_TARBALL := Firebird-3.0.0.32483-0.tar.bz2
-export FONTCONFIG_SHA256SUM := cf0c30807d08f6a28ab46c61b8dbd55c97d2f292cf88f3a07d3384687f31f017
-export FONTCONFIG_TARBALL := fontconfig-2.12.6.tar.bz2
-export FONT_CALADEA_SHA256SUM := c48d1c2fd613c9c06c959c34da7b8388059e2408d2bb19845dc3ed35f76e4d09
-export FONT_CALADEA_TARBALL := 368f114c078f94214a308a74c7e991bc-crosextrafonts-20130214.tar.gz
-export FONT_CARLITO_SHA256SUM := 4bd12b6cbc321c1cf16da76e2c585c925ce956a08067ae6f6c64eff6ccfdaf5a
-export FONT_CARLITO_TARBALL := c74b7223abe75949b4af367942d96c7a-crosextrafonts-carlito-20130920.tar.gz
-export FONT_DEJAVU_SHA256SUM := 7576310b219e04159d35ff61dd4a4ec4cdba4f35c00e002a136f00e96a908b0a
-export FONT_DEJAVU_TARBALL := 33e1e61fab06a547851ed308b4ffef42-dejavu-fonts-ttf-2.37.zip
-export FONT_GENTIUM_SHA256SUM := 2f1a2c5491d7305dffd3520c6375d2f3e14931ee35c6d8ae1e8f098bf1a7b3cc
-export FONT_GENTIUM_TARBALL := 1725634df4bb3dcb1b2c91a6175f8789-GentiumBasic_1102.zip
-export FONT_LIBERATION_NARROW_SHA256SUM := 8879d89b5ff7b506c9fc28efc31a5c0b954bbe9333e66e5283d27d20a8519ea3
-export FONT_LIBERATION_NARROW_TARBALL := liberation-narrow-fonts-ttf-1.07.6.tar.gz
-export FONT_LIBERATION_SHA256SUM := c40e95fc5e0ecb73d4be565ae2afc1114e2bc7dc5253e00ee92d8fd6cc4adf45
-export FONT_LIBERATION_TARBALL := liberation-fonts-ttf-2.00.4.tar.gz
-export FONT_LINLIBERTINEG_SHA256SUM := 54adcb2bc8cac0927a647fbd9362f45eff48130ce6e2379dc3867643019e08c5
-export FONT_LINLIBERTINEG_TARBALL := e7a384790b13c29113e22e596ade9687-LinLibertineG-20120116.zip
-export FONT_SOURCECODE_SHA256SUM := 09466dce87653333f189acd8358c60c6736dcd95f042dee0b644bdcf65b6ae2f
-export FONT_SOURCECODE_TARBALL := 907d6e99f241876695c19ff3db0b8923-source-code-pro-2.030R-ro-1.050R-it.tar.gz
-export FONT_SOURCESANS_SHA256SUM := e7bc9a1fec787a529e49f5a26b93dcdcf41506449dfc70f92cdef6d17eb6fb61
-export FONT_SOURCESANS_TARBALL := edc4d741888bc0d38e32dbaa17149596-source-sans-pro-2.010R-ro-1.065R-it.tar.gz
-export FONT_SOURCESERIF_SHA256SUM := 826a2b784d5cdb4c2bbc7830eb62871528360a61a52689c102a101623f1928e3
-export FONT_SOURCESERIF_TARBALL := source-serif-pro-3.000R.tar.gz
-export FONT_EMOJIONE_COLOR_SHA256SUM := d1a08f7c10589f22740231017694af0a7a270760c8dec33d8d1c038e2be0a0c7
-export FONT_EMOJIONE_COLOR_TARBALL := EmojiOneColor-SVGinOT-1.3.tar.gz
-export FONT_NOTO_SHA256SUM := 29acc15a4c4d6b51201ba5d60f303dfbc2e5acbfdb70413c9ae1ed34fa259994
-export FONT_NOTO_TARBALL := noto-fonts-20171024.tar.gz
-export FONT_CULMUS_SHA256SUM := dcf112cfcccb76328dcfc095f4d7c7f4d2f7e48d0eed5e78b100d1d77ce2ed1b
-export FONT_CULMUS_TARBALL := culmus-0.131.tar.gz
-export FONT_LIBRE_HEBREW_SHA256SUM := f596257c1db706ce35795b18d7f66a4db99d427725f20e9384914b534142579a
-export FONT_LIBRE_HEBREW_TARBALL := libre-hebrew-1.0.tar.gz
-export FONT_ALEF_SHA256SUM := b98b67602a2c8880a1770f0b9e37c190f29a7e2ade5616784f0b89fbdb75bf52
-export FONT_ALEF_TARBALL := alef-1.001.tar.gz
-export FONT_AMIRI_SHA256SUM := 1fbfccced6348b5db2c1c21d5b319cd488e14d055702fa817a0f6cb83d882166
-export FONT_AMIRI_TARBALL := Amiri-0.111.zip
-export FONT_KACST_SHA256SUM := dca00f5e655f2f217a766faa73a81f542c5c204aa3a47017c3c2be0b31d00a56
-export FONT_KACST_TARBALL := ttf-kacst_2.01+mry.tar.gz
-export FONT_REEM_SHA256SUM := f60c6508d209ce4236d2d7324256c2ffddd480be7e3d6023770b93dc391a605f
-export FONT_REEM_TARBALL := ReemKufi-0.7.zip
-export FONT_SCHEHERAZADE_SHA256SUM := 251c8817ceb87d9b661ce1d5b49e732a0116add10abc046be4b8ba5196e149b5
-export FONT_SCHEHERAZADE_TARBALL := Scheherazade-2.100.zip
-export FREEHAND_SHA256SUM := 0e422d1564a6dbf22a9af598535425271e583514c0f7ba7d9091676420de34ac
-export FREEHAND_TARBALL := libfreehand-0.1.2.tar.xz
-export FREETYPE_SHA256SUM := db8d87ea720ea9d5edc5388fc7a0497bb11ba9fe972245e0f7f4c7e8b1e1e84d
-export FREETYPE_TARBALL := freetype-2.9.1.tar.bz2
-export GLM_SHA256SUM := d0312c360efe04dd048b3311fe375ff36f1993b4c2e3cb58c81062990532904a
-export GLM_TARBALL := bae83fa5dc7f081768daace6e199adc3-glm-0.9.4.6-libreoffice.zip
-export GPGME_SHA256SUM := 1b29fedb8bfad775e70eafac5b0590621683b2d9869db994568e6401f4034ceb
-export GPGME_TARBALL := gpgme-1.9.0.tar.bz2
-export GRAPHITE_SHA256SUM := b8e892d8627c41888ff121e921455b9e2d26836978f2359173d19825da62b8fc
-export GRAPHITE_TARBALL := graphite2-minimal-1.3.14.tgz
-export HARFBUZZ_SHA256SUM := 9cf7d117548265f95ca884e2f4c9fafaf4e17d45a67b11107147b79eed76c966
-export HARFBUZZ_TARBALL := harfbuzz-2.6.0.tar.xz
-export HSQLDB_SHA256SUM := d30b13f4ba2e3b6a2d4f020c0dee0a9fb9fc6fbcc2d561f36b78da4bf3802370
-export HSQLDB_TARBALL := 17410483b5b5f267aa18b7e00b65e6e0-hsqldb_1_8_0.zip
-export HUNSPELL_SHA256SUM := 57be4e03ae9dd62c3471f667a0d81a14513e314d4d92081292b90435944ff951
-export HUNSPELL_TARBALL := hunspell-1.7.0.tar.gz
-export HYPHEN_SHA256SUM := 304636d4eccd81a14b6914d07b84c79ebb815288c76fe027b9ebff6ff24d5705
-export HYPHEN_TARBALL := 5ade6ae2a99bc1e9e57031ca88d36dad-hyphen-2.8.8.tar.gz
-export ICU_SHA256SUM := 53e37466b3d6d6d01ead029e3567d873a43a5d1c668ed2278e253b683136d948
-export ICU_TARBALL := icu4c-65_1-src.tgz
-export ICU_DATA_SHA256SUM := 06359a7c4ad125ba11d3ac30617cd4b932f1214f611db96573032726574896b6
-export ICU_DATA_TARBALL := icu4c-65_1-data.zip
-export JFREEREPORT_FLOW_ENGINE_SHA256SUM := 233f66e8d25c5dd971716d4200203a612a407649686ef3b52075d04b4c9df0dd
-export JFREEREPORT_FLOW_ENGINE_TARBALL := ba2930200c9f019c2d93a8c88c651a0f-flow-engine-0.9.4.zip
-export JFREEREPORT_FLUTE_SHA256SUM := 1b5b24f7bc543c0362b667692f78db8bab4ed6dafc6172f104d0bd3757d8a133
-export JFREEREPORT_FLUTE_TARBALL := d8bd5eed178db6e2b18eeed243f85aa8-flute-1.1.6.zip
-export JFREEREPORT_LIBBASE_SHA256SUM := 75c80359c9ce343c20aab8a36a45cb3b9ee7c61cf92c13ae45399d854423a9ba
-export JFREEREPORT_LIBBASE_TARBALL := eeb2c7ddf0d302fba4bfc6e97eac9624-libbase-1.1.6.zip
-export JFREEREPORT_LIBFONTS_SHA256SUM := e0531091787c0f16c83965fdcbc49162c059d7f0c64669e7f119699321549743
-export JFREEREPORT_LIBFONTS_TARBALL := 3bdf40c0d199af31923e900d082ca2dd-libfonts-1.1.6.zip
-export JFREEREPORT_LIBFORMULA_SHA256SUM := 5826d1551bf599b85742545f6e01a0079b93c1b2c8434bf409eddb3a29e4726b
-export JFREEREPORT_LIBFORMULA_TARBALL := 3404ab6b1792ae5f16bbd603bd1e1d03-libformula-1.1.7.zip
-export JFREEREPORT_LIBLAYOUT_SHA256SUM := e1fb87f3f7b980d33414473279615c4644027e013012d156efa538bc2b031772
-export JFREEREPORT_LIBLAYOUT_TARBALL := db60e4fde8dd6d6807523deb71ee34dc-liblayout-0.2.10.zip
-export JFREEREPORT_LIBLOADER_SHA256SUM := 3d853b19b1d94a6efa69e7af90f7f2b09ecf302913bee3da796c15ecfebcfac8
-export JFREEREPORT_LIBLOADER_TARBALL := 97b2d4dba862397f446b217e2b623e71-libloader-1.1.6.zip
-export JFREEREPORT_LIBREPOSITORY_SHA256SUM := abe2c57ac12ba45d83563b02e240fa95d973376de2f720aab8fe11f2e621c095
-export JFREEREPORT_LIBREPOSITORY_TARBALL := 8ce2fcd72becf06c41f7201d15373ed9-librepository-1.1.6.zip
-export JFREEREPORT_LIBSERIALIZER_SHA256SUM := 05640a1f6805b2b2d7e2cb9c50db9a5cb084e3c52ab1a71ce015239b4a1d4343
-export JFREEREPORT_LIBSERIALIZER_TARBALL := f94d9870737518e3b597f9265f4e9803-libserializer-1.1.6.zip
-export JFREEREPORT_LIBXML_SHA256SUM := 7d2797fe9f79a77009721e3f14fa4a1dec17a6d706bdc93f85f1f01d124fab66
-export JFREEREPORT_LIBXML_TARBALL := ace6ab49184e329db254e454a010f56d-libxml-1.1.7.zip
-export JFREEREPORT_SAC_SHA256SUM := 085f2112c51fa8c1783fac12fbd452650596415121348393bb51f0f7e85a9045
-export JFREEREPORT_SAC_TARBALL := 39bb3fcea1514f1369fcfc87542390fd-sacjava-1.3.zip
-export LIBJPEG_TURBO_SHA256SUM := b24890e2bb46e12e72a79f7e965f409f4e16466d00e1dd15d93d73ee6b592523
-export LIBJPEG_TURBO_TARBALL := libjpeg-turbo-1.5.3.tar.gz
-export LANGTAGREG_SHA256SUM := fb1ee0dabfd956a445fbe9f351e86a52767808558f20f4256e67fbbb3768e9da
-export LANGTAGREG_TARBALL := language-subtag-registry-2020-04-01.tar.bz2
-export LANGUAGETOOL_SHA256SUM := 48c87e41636783bba438b65fd895821e369ed139e1465fac654323ad93c5a82d
-export LANGUAGETOOL_TARBALL := b63e6340a02ff1cacfeadb2c42286161-JLanguageTool-1.7.0.tar.bz2
-export LCMS2_SHA256SUM := 48c6fdf98396fa245ed86e622028caf49b96fa22f3e5734f853f806fbc8e7d20
-export LCMS2_TARBALL := lcms2-2.9.tar.gz
-export LIBASSUAN_SHA256SUM := 47f96c37b4f2aac289f0bc1bacfa8bd8b4b209a488d3d15e2229cb6cc9b26449
-export LIBASSUAN_TARBALL := libassuan-2.5.1.tar.bz2
-export LIBATOMIC_OPS_SHA256SUM := 1d6a279edf81767e74d2ad2c9fce09459bc65f12c6525a40b0cb3e53c089f665
-export LIBATOMIC_OPS_TARBALL := libatomic_ops-7.6.8.tar.gz
-export LIBEOT_SHA256SUM := cf5091fa8e7dcdbe667335eb90a2cfdd0a3fe8f8c7c8d1ece44d9d055736a06a
-export LIBEOT_TARBALL := libeot-0.01.tar.bz2
-export LIBEXTTEXTCAT_SHA256SUM := 13fdbc9d4c489a4d0519e51933a1aa21fe3fb9eb7da191b87f7a63e82797dac8
-export LIBEXTTEXTCAT_TARBALL := libexttextcat-3.4.5.tar.xz
-export LIBFFI_SHA256SUM := 72fba7922703ddfa7a028d513ac15a85c8d54c8d67f55fa5a4802885dc652056
-export LIBFFI_TARBALL := libffi-3.3.tar.gz
-export LIBGPGERROR_SHA256SUM := 4f93aac6fecb7da2b92871bb9ee33032be6a87b174f54abf8ddf0911a22d29d2
-export LIBGPGERROR_TARBALL := libgpg-error-1.27.tar.bz2
-export LIBLANGTAG_SHA256SUM := d6242790324f1432fb0a6fae71b6851f520b2c5a87675497cf8ea14c2924d52e
-export LIBLANGTAG_TARBALL := liblangtag-0.6.2.tar.bz2
-export LIBNUMBERTEXT_SHA256SUM := e1c9086b4cecb6b25f180316f30740dfabe6a4dbaf70dddc34276fc839e4f4f7
-export LIBNUMBERTEXT_TARBALL := libnumbertext-1.0.5.tar.xz
-export LIBTOMMATH_SHA256SUM := 083daa92d8ee6f4af96a6143b12d7fc8fe1a547e14f862304f7281f8f7347483
-export LIBTOMMATH_TARBALL := ltm-1.0.zip
-export XMLSEC_SHA256SUM := 13eec4811ea30e3f0e16a734d1dbf7f9d246a71d540b48d143a07b489f6222d4
-export XMLSEC_TARBALL := xmlsec1-1.2.28.tar.gz
-export LIBXML_SHA256SUM := 60d74a257d1ccec0475e749cba2f21559e48139efba6ff28224357c7c798dfee
-export LIBXML_VERSION_MICRO := 14
-export LIBXML_TARBALL := libxml2-2.9.$(LIBXML_VERSION_MICRO).tar.xz
-export LIBXSLT_SHA256SUM := 8247f33e9a872c6ac859aa45018bc4c4d00b97e2feac9eebc10c93ce1f34dd79
-export LIBXSLT_VERSION_MICRO := 35
-export LIBXSLT_TARBALL := libxslt-1.1.$(LIBXSLT_VERSION_MICRO).tar.xz
-export LPSOLVE_SHA256SUM := 171816288f14215c69e730f7a4f1c325739873e21f946ff83884b350574e6695
-export LPSOLVE_TARBALL := 26b3e95ddf3d9c077c480ea45874b3b8-lp_solve_5.5.tar.gz
-export LXML_SHA256SUM := 940caef1ec7c78e0c34b0f6b94fe42d0f2022915ffc78643d28538a5cfd0f40e
-export LXML_TARBALL := lxml-4.1.1.tgz
-export MARIADB_CONNECTOR_C_SHA256SUM := 431434d3926f4bcce2e5c97240609983f60d7ff50df5a72083934759bb863f7b
-export MARIADB_CONNECTOR_C_TARBALL := mariadb-connector-c-3.1.8-src.tar.gz
-export MDDS_SHA256SUM := 144d6debd7be32726f332eac14ef9f17e2d3cf89cb3250eb31a7127e0789680d
-export MDDS_TARBALL := mdds-1.5.0.tar.bz2
-export MDNSRESPONDER_SHA256SUM := e777b4d7dbf5eb1552cb80090ad1ede319067ab6e45e3990d68aabf6e8b3f5a0
-export MDNSRESPONDER_TARBALL := mDNSResponder-878.200.35.tar.gz
-export MSPUB_SHA256SUM := ef36c1a1aabb2ba3b0bedaaafe717bf4480be2ba8de6f3894be5fd3702b013ba
-export MSPUB_TARBALL := libmspub-0.1.4.tar.xz
-export MWAW_SHA256SUM := 0c639edba5297bde5575193bf5b5f2f469956beaff5c0206d91ce9df6bde1868
-export MWAW_VERSION_MICRO := 16
-export MWAW_TARBALL := libmwaw-0.3.$(MWAW_VERSION_MICRO).tar.xz
-export MYTHES_SHA256SUM := 1e81f395d8c851c3e4e75b568e20fa2fa549354e75ab397f9de4b0e0790a305f
-export MYTHES_TARBALL := a8c2c5b8f09e7ede322d5c602ff6a4b6-mythes-1.2.4.tar.gz
-export NEON_SHA256SUM := db0bd8cdec329b48f53a6f00199c92d5ba40b0f015b153718d1b15d3d967fbca
-export NEON_TARBALL := neon-0.30.2.tar.gz
-export NSS_SHA256SUM := 5369ed274a19f480ec94e1faef04da63e3cbac1a82e15bb1751e58b2f274b835
-export NSS_TARBALL := nss-3.79-with-nspr-4.34.tar.gz
-export ODFGEN_SHA256SUM := 55200027fd46623b9bdddd38d275e7452d1b0ff8aeddcad6f9ae6dc25f610625
-export ODFGEN_VERSION_MICRO := 8
-export ODFGEN_TARBALL := libodfgen-0.1.$(ODFGEN_VERSION_MICRO).tar.xz
-export ODFVALIDATOR_SHA256SUM := 984f2a479df79e27e7b01a5815ac53ae64e07746b882262d8a64566494515504
-export ODFVALIDATOR_JAR := odfvalidator-1.2.0-incubating-SNAPSHOT-jar-with-dependencies-971c54fd38a968f5860014b44301872706f9e540.jar
-export OFFICEOTRON_SHA256SUM := f2443f27561af52324eee03a1892d9f569adc8db9e7bca55614898bc2a13a770
-export OFFICEOTRON_JAR := 8249374c274932a21846fa7629c2aa9b-officeotron-0.7.4-master.jar
-export OPENLDAP_SHA256SUM := 99f37d6747d88206c470067eda624d5e48c1011e943ec0ab217bae8712e22f34
-export OPENLDAP_TARBALL := openldap-2.4.59.tgz
-export OPENSSL_SHA256SUM := 14cb464efe7ac6b54799b34456bd69558a749a4931ecfd9cf9f71d7881cac7bc
-export OPENSSL_TARBALL := openssl-1.0.2t.tar.gz
-export ORCUS_SHA256SUM := 0dd26f3f2e611c51df9ee02d6dbf08887989eaa417b73f6877cd0d94df795fc2
-export ORCUS_TARBALL := liborcus-0.15.3.tar.gz
-export OWNCLOUD_ANDROID_LIB_SHA256SUM := b18b3e3ef7fae6a79b62f2bb43cc47a5346b6330f6a383dc4be34439aca5e9fb
-export OWNCLOUD_ANDROID_LIB_TARBALL := owncloud-android-library-0.9.4-no-binary-deps.tar.gz
-export PAGEMAKER_SHA256SUM := 66adacd705a7d19895e08eac46d1e851332adf2e736c566bef1164e7a442519d
-export PAGEMAKER_TARBALL := libpagemaker-0.0.4.tar.xz
-export PDFIUM_SHA256SUM := eb98a77eaaab9e9e8de541cfd18b9438dd3c538bd5ef163820353179727f5dc9
-export PDFIUM_TARBALL := pdfium-4643.tar.bz2
-export PIXMAN_SHA256SUM := 21b6b249b51c6800dc9553b65106e1e37d0e25df942c90531d4c3997aa20a88e
-export PIXMAN_TARBALL := e80ebae4da01e77f68744319f01d52a3-pixman-0.34.0.tar.gz
-export LIBPNG_SHA256SUM := 505e70834d35383537b6491e7ae8641f1a4bed1876dbfe361201fc80868d88ca
-export LIBPNG_TARBALL := libpng-1.6.37.tar.xz
-export POPPLER_SHA256SUM := 31b76b5cac0a48612fdd154c02d9eca01fd38fb8eaa77c1196840ecdeb53a584
-export POPPLER_TARBALL := poppler-21.11.0.tar.xz
-export POSTGRESQL_SHA256SUM := 9b81067a55edbaabc418aacef457dd8477642827499560b00615a6ea6c13f6b3
-export POSTGRESQL_TARBALL := postgresql-13.5.tar.bz2
-export PYTHON_SHA256SUM := f8d82e7572c86ec9d55c8627aae5040124fd2203af400c383c821b980306ee6b
-export PYTHON_TARBALL := Python-3.7.10.tar.xz
-export QRCODEGEN_SHA256SUM := fcdf9fd69fde07ae4dca2351d84271a9de8093002f733b77c70f52f1630f6e4a
-export QRCODEGEN_TARBALL := QR-Code-generator-1.4.0.tar.gz
-export QXP_SHA256SUM := e137b6b110120a52c98edd02ebdc4095ee08d0d5295a94316a981750095a945c
-export QXP_TARBALL := libqxp-0.0.2.tar.xz
-export RAPTOR_SHA256SUM := ada7f0ba54787b33485d090d3d2680533520cd4426d2f7fb4782dd4a6a1480ed
-export RAPTOR_TARBALL := a39f6c07ddb20d7dd2ff1f95fa21e2cd-raptor2-2.0.15.tar.gz
-export RASQAL_SHA256SUM := 6924c9ac6570bd241a9669f83b467c728a322470bf34f4b2da4f69492ccfd97c
-export RASQAL_TARBALL := 1f5def51ca0026cd192958ef07228b52-rasqal-0.9.33.tar.gz
-export REDLAND_SHA256SUM := de1847f7b59021c16bdc72abb4d8e2d9187cd6124d69156f3326dd34ee043681
-export REDLAND_TARBALL := e5be03eda13ef68aabab6e42aa67715e-redland-1.0.17.tar.gz
-export REVENGE_SHA256SUM := c51601cd08320b75702812c64aae0653409164da7825fd0f451ac2c5dbe77cbf
-export REVENGE_VERSION_MICRO := 4
-export REVENGE_TARBALL := librevenge-0.0.$(REVENGE_VERSION_MICRO).tar.bz2
-export RHINO_SHA256SUM := 1fb458d6aab06932693cc8a9b6e4e70944ee1ff052fa63606e3131df34e21753
-export RHINO_TARBALL := 798b2ffdc8bcfe7bca2cf92b62caf685-rhino1_5R5.zip
-export SERF_SHA256SUM := 6988d394b62c3494635b6f0760bc3079f9a0cd380baf0f6b075af1eb9fa5e700
-export SERF_TARBALL := serf-1.2.1.tar.bz2
-export STAROFFICE_SHA256SUM := 6b00e1ed8194e6072be4441025d1b888e39365727ed5b23e0e8c92c4009d1ec4
-export STAROFFICE_VERSION_MICRO := 6
-export STAROFFICE_TARBALL := libstaroffice-0.0.$(STAROFFICE_VERSION_MICRO).tar.xz
-export SWING_SHA256SUM := 64585ac36a81291a58269ec5347e7e3e2e8596dbacb9221015c208191333c6e1
-export SWING_TARBALL := 35c94d2df8893241173de1d16b6034c0-swingExSrc.zip
-export TWAIN_DSM_SHA256SUM := 82c818be771f242388457aa8c807e4b52aa84dc22b21c6c56184a6b4cbb085e6
-export TWAIN_DSM_TARBALL := twaindsm_2.4.1.orig.tar.gz
-export UCPP_SHA256SUM := 983941d31ee8d366085cadf28db75eb1f5cb03ba1e5853b98f12f7f51c63b776
-export UCPP_TARBALL := 0168229624cfac409e766913506961a8-ucpp-1.3.2.tar.gz
-export VISIO_SHA256SUM := 8faf8df870cb27b09a787a1959d6c646faa44d0d8ab151883df408b7166bea4c
-export VISIO_TARBALL := libvisio-0.1.7.tar.xz
-export WPD_SHA256SUM := 2465b0b662fdc5d4e3bebcdc9a79027713fb629ca2bff04a3c9251fdec42dd09
-export WPD_VERSION_MICRO := 3
-export WPD_TARBALL := libwpd-0.10.$(WPD_VERSION_MICRO).tar.xz
-export WPG_SHA256SUM := 99b3f7f8832385748582ab8130fbb9e5607bd5179bebf9751ac1d51a53099d1c
-export WPG_VERSION_MICRO := 3
-export WPG_TARBALL := libwpg-0.3.$(WPG_VERSION_MICRO).tar.xz
-export WPS_SHA256SUM := 1421e034286a9f96d3168a1c54ea570ee7aa008ca07b89de005ad5ce49fb29ca
-export WPS_VERSION_MICRO := 10
-export WPS_TARBALL := libwps-0.4.$(WPS_VERSION_MICRO).tar.xz
-export XSLTML_SHA256SUM := 75823776fb51a9c526af904f1503a7afaaab900fba83eda64f8a41073724c870
-export XSLTML_TARBALL := a7983f859eafb2677d7ff386a023bc40-xsltml_2.1.2.zip
-export ZLIB_SHA256SUM := 7db46b8d7726232a621befaab4a1c870f00a90805511c0e0090441dac57def18
-export ZLIB_TARBALL := zlib-1.2.12.tar.xz
-export ZMF_SHA256SUM := 27051a30cb057fdb5d5de65a1f165c7153dc76e27fe62251cbb86639eb2caf22
-export ZMF_TARBALL := libzmf-0.0.2.tar.xz
+ABW_SHA256SUM := e763a9dc21c3d2667402d66e202e3f8ef4db51b34b79ef41f56cacb86dcd6eed
+ABW_TARBALL := libabw-0.1.3.tar.xz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+APR_SHA256SUM := 1af06e1720a58851d90694a984af18355b65bb0d047be03ec7d659c746d6dbdb
+APR_TARBALL := apr-1.5.2.tar.gz
+APR_UTIL_SHA256SUM := 976a12a59bc286d634a21d7be0841cc74289ea9077aa1af46be19d1a6e844c19
+APR_UTIL_TARBALL := apr-util-1.5.4.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+BOOST_SHA256SUM := 8f32d4617390d1c2d16f26a27ab60d97807b35440d45891fa340fc2648b04406
+BOOST_TARBALL := boost_1_69_0.tar.bz2
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+BREAKPAD_SHA256SUM := 7060149be16a8789b0ccf596bdeaf63115f03f520acb508f72a14686fb311cb9
+BREAKPAD_TARBALL := breakpad.zip
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+BSH_SHA256SUM := 9e93c73e23aff644b17dfff656444474c14150e7f3b38b19635e622235e01c96
+BSH_TARBALL := beeca87be45ec87d241ddd0e1bad80c1-bsh-2.0b6-src.zip
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+BZIP2_SHA256SUM := ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269
+BZIP2_TARBALL := bzip2-1.0.8.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+CAIRO_SHA256SUM := 5e7b29b3f113ef870d1e3ecf8adf21f923396401604bda16d44be45e66052331
+CAIRO_VERSION_MICRO := 0
+CAIRO_TARBALL := cairo-1.16.$(CAIRO_VERSION_MICRO).tar.xz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+CDR_SHA256SUM := 6ace5c499a8be34ad871e825442ce388614ae2d8675c4381756a7319429e3a48
+CDR_TARBALL := libcdr-0.1.5.tar.xz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+CLUCENE_SHA256SUM := ddfdc433dd8ad31b5c5819cc4404a8d2127472a3b720d3e744e8c51d79732eab
+CLUCENE_TARBALL := 48d647fbd8ef8889e5a7f422c1bfda94-clucene-core-2.3.3.4.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+LIBCMIS_SHA256SUM := d7b18d9602190e10d437f8a964a32e983afd57e2db316a07d87477a79f5000a2
+LIBCMIS_TARBALL := libcmis-0.5.2.tar.xz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+COINMP_SHA256SUM := 86c798780b9e1f5921fe4efe651a93cb420623b45aa1fdff57af8c37f116113f
+COINMP_TARBALL := CoinMP-1.7.6.tgz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+CPPUNIT_SHA256SUM := 3d569869d27b48860210c758c4f313082103a5e58219a7669b52bfd29d674780
+CPPUNIT_TARBALL := cppunit-1.14.0.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+CT2N_SHA256SUM := 71b238efd2734be9800af07566daea8d6685aeed28db5eb5fa0e6453f4d85de3
+CT2N_TARBALL := 1f467e5bb703f12cbbb09d5cf67ecf4a-converttexttonumber-1-5-0.oxt
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+CURL_SHA256SUM := 0a381cd82f4d00a9a334438b8ca239afea5bfefcfa9a1025f2bf118e79e0b5f0
+CURL_TARBALL := curl-8.0.1.tar.xz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+EBOOK_SHA256SUM := 7e8d8ff34f27831aca3bc6f9cc532c2f90d2057c778963b884ff3d1e34dfe1f9
+EBOOK_TARBALL := libe-book-0.1.3.tar.xz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+EPOXY_SHA256SUM := 002958c5528321edd53440235d3c44e71b5b1e09b9177e8daf677450b6c4433d
+EPOXY_TARBALL := libepoxy-1.5.3.tar.xz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+EPM_SHA256SUM := b3fc4c5445de6c9a801504a3ea3efb2d4ea9d5a622c9427e716736e7713ddb91
+EPM_TARBALL := 3ade8cfe7e59ca8e65052644fed9fca4-epm-3.7.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+EPUBGEN_SHA256SUM := 03e084b994cbeffc8c3dd13303b2cb805f44d8f2c3b79f7690d7e3fc7f6215ad
+EPUBGEN_TARBALL := libepubgen-0.1.1.tar.xz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+ETONYEK_SHA256SUM := e61677e8799ce6e55b25afc11aa5339113f6a49cff031f336e32fa58635b1a4a
+ETONYEK_VERSION_MICRO := 9
+ETONYEK_TARBALL := libetonyek-0.1.$(ETONYEK_VERSION_MICRO).tar.xz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+EXPAT_SHA256SUM := cb5f5a8ea211e1cabd59be0a933a52e3c02cc326e86a4d387d8d218e7ee47a3e
+EXPAT_TARBALL := expat-2.6.0.tar.xz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+FIREBIRD_SHA256SUM := 6994be3555e23226630c587444be19d309b25b0fcf1f87df3b4e3f88943e5860
+FIREBIRD_TARBALL := Firebird-3.0.0.32483-0.tar.bz2
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+FONTCONFIG_SHA256SUM := cf0c30807d08f6a28ab46c61b8dbd55c97d2f292cf88f3a07d3384687f31f017
+FONTCONFIG_TARBALL := fontconfig-2.12.6.tar.bz2
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+FONT_CALADEA_SHA256SUM := c48d1c2fd613c9c06c959c34da7b8388059e2408d2bb19845dc3ed35f76e4d09
+FONT_CALADEA_TARBALL := 368f114c078f94214a308a74c7e991bc-crosextrafonts-20130214.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+FONT_CARLITO_SHA256SUM := 4bd12b6cbc321c1cf16da76e2c585c925ce956a08067ae6f6c64eff6ccfdaf5a
+FONT_CARLITO_TARBALL := c74b7223abe75949b4af367942d96c7a-crosextrafonts-carlito-20130920.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+FONT_DEJAVU_SHA256SUM := 7576310b219e04159d35ff61dd4a4ec4cdba4f35c00e002a136f00e96a908b0a
+FONT_DEJAVU_TARBALL := 33e1e61fab06a547851ed308b4ffef42-dejavu-fonts-ttf-2.37.zip
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+FONT_GENTIUM_SHA256SUM := 2f1a2c5491d7305dffd3520c6375d2f3e14931ee35c6d8ae1e8f098bf1a7b3cc
+FONT_GENTIUM_TARBALL := 1725634df4bb3dcb1b2c91a6175f8789-GentiumBasic_1102.zip
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+FONT_LIBERATION_NARROW_SHA256SUM := 8879d89b5ff7b506c9fc28efc31a5c0b954bbe9333e66e5283d27d20a8519ea3
+FONT_LIBERATION_NARROW_TARBALL := liberation-narrow-fonts-ttf-1.07.6.tar.gz
+FONT_LIBERATION_SHA256SUM := c40e95fc5e0ecb73d4be565ae2afc1114e2bc7dc5253e00ee92d8fd6cc4adf45
+FONT_LIBERATION_TARBALL := liberation-fonts-ttf-2.00.4.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+FONT_LINLIBERTINEG_SHA256SUM := 54adcb2bc8cac0927a647fbd9362f45eff48130ce6e2379dc3867643019e08c5
+FONT_LINLIBERTINEG_TARBALL := e7a384790b13c29113e22e596ade9687-LinLibertineG-20120116.zip
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+FONT_SOURCECODE_SHA256SUM := 09466dce87653333f189acd8358c60c6736dcd95f042dee0b644bdcf65b6ae2f
+FONT_SOURCECODE_TARBALL := 907d6e99f241876695c19ff3db0b8923-source-code-pro-2.030R-ro-1.050R-it.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+FONT_SOURCESANS_SHA256SUM := e7bc9a1fec787a529e49f5a26b93dcdcf41506449dfc70f92cdef6d17eb6fb61
+FONT_SOURCESANS_TARBALL := edc4d741888bc0d38e32dbaa17149596-source-sans-pro-2.010R-ro-1.065R-it.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+FONT_SOURCESERIF_SHA256SUM := 826a2b784d5cdb4c2bbc7830eb62871528360a61a52689c102a101623f1928e3
+FONT_SOURCESERIF_TARBALL := source-serif-pro-3.000R.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+FONT_EMOJIONE_COLOR_SHA256SUM := d1a08f7c10589f22740231017694af0a7a270760c8dec33d8d1c038e2be0a0c7
+FONT_EMOJIONE_COLOR_TARBALL := EmojiOneColor-SVGinOT-1.3.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+FONT_NOTO_SHA256SUM := 29acc15a4c4d6b51201ba5d60f303dfbc2e5acbfdb70413c9ae1ed34fa259994
+FONT_NOTO_TARBALL := noto-fonts-20171024.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+FONT_CULMUS_SHA256SUM := dcf112cfcccb76328dcfc095f4d7c7f4d2f7e48d0eed5e78b100d1d77ce2ed1b
+FONT_CULMUS_TARBALL := culmus-0.131.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+FONT_LIBRE_HEBREW_SHA256SUM := f596257c1db706ce35795b18d7f66a4db99d427725f20e9384914b534142579a
+FONT_LIBRE_HEBREW_TARBALL := libre-hebrew-1.0.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+FONT_ALEF_SHA256SUM := b98b67602a2c8880a1770f0b9e37c190f29a7e2ade5616784f0b89fbdb75bf52
+FONT_ALEF_TARBALL := alef-1.001.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+FONT_AMIRI_SHA256SUM := 1fbfccced6348b5db2c1c21d5b319cd488e14d055702fa817a0f6cb83d882166
+FONT_AMIRI_TARBALL := Amiri-0.111.zip
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+FONT_KACST_SHA256SUM := dca00f5e655f2f217a766faa73a81f542c5c204aa3a47017c3c2be0b31d00a56
+FONT_KACST_TARBALL := ttf-kacst_2.01+mry.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+FONT_REEM_SHA256SUM := f60c6508d209ce4236d2d7324256c2ffddd480be7e3d6023770b93dc391a605f
+FONT_REEM_TARBALL := ReemKufi-0.7.zip
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+FONT_SCHEHERAZADE_SHA256SUM := 251c8817ceb87d9b661ce1d5b49e732a0116add10abc046be4b8ba5196e149b5
+FONT_SCHEHERAZADE_TARBALL := Scheherazade-2.100.zip
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+FREEHAND_SHA256SUM := 0e422d1564a6dbf22a9af598535425271e583514c0f7ba7d9091676420de34ac
+FREEHAND_TARBALL := libfreehand-0.1.2.tar.xz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+FREETYPE_SHA256SUM := db8d87ea720ea9d5edc5388fc7a0497bb11ba9fe972245e0f7f4c7e8b1e1e84d
+FREETYPE_TARBALL := freetype-2.9.1.tar.bz2
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+GLM_SHA256SUM := d0312c360efe04dd048b3311fe375ff36f1993b4c2e3cb58c81062990532904a
+GLM_TARBALL := bae83fa5dc7f081768daace6e199adc3-glm-0.9.4.6-libreoffice.zip
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+GPGME_SHA256SUM := 1b29fedb8bfad775e70eafac5b0590621683b2d9869db994568e6401f4034ceb
+GPGME_TARBALL := gpgme-1.9.0.tar.bz2
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+GRAPHITE_SHA256SUM := b8e892d8627c41888ff121e921455b9e2d26836978f2359173d19825da62b8fc
+GRAPHITE_TARBALL := graphite2-minimal-1.3.14.tgz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+HARFBUZZ_SHA256SUM := 9cf7d117548265f95ca884e2f4c9fafaf4e17d45a67b11107147b79eed76c966
+HARFBUZZ_TARBALL := harfbuzz-2.6.0.tar.xz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+HSQLDB_SHA256SUM := d30b13f4ba2e3b6a2d4f020c0dee0a9fb9fc6fbcc2d561f36b78da4bf3802370
+HSQLDB_TARBALL := 17410483b5b5f267aa18b7e00b65e6e0-hsqldb_1_8_0.zip
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+HUNSPELL_SHA256SUM := 57be4e03ae9dd62c3471f667a0d81a14513e314d4d92081292b90435944ff951
+HUNSPELL_TARBALL := hunspell-1.7.0.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+HYPHEN_SHA256SUM := 304636d4eccd81a14b6914d07b84c79ebb815288c76fe027b9ebff6ff24d5705
+HYPHEN_TARBALL := 5ade6ae2a99bc1e9e57031ca88d36dad-hyphen-2.8.8.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+ICU_SHA256SUM := 53e37466b3d6d6d01ead029e3567d873a43a5d1c668ed2278e253b683136d948
+ICU_TARBALL := icu4c-65_1-src.tgz
+ICU_DATA_SHA256SUM := 06359a7c4ad125ba11d3ac30617cd4b932f1214f611db96573032726574896b6
+ICU_DATA_TARBALL := icu4c-65_1-data.zip
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+JFREEREPORT_FLOW_ENGINE_SHA256SUM := 233f66e8d25c5dd971716d4200203a612a407649686ef3b52075d04b4c9df0dd
+JFREEREPORT_FLOW_ENGINE_TARBALL := ba2930200c9f019c2d93a8c88c651a0f-flow-engine-0.9.4.zip
+JFREEREPORT_FLUTE_SHA256SUM := 1b5b24f7bc543c0362b667692f78db8bab4ed6dafc6172f104d0bd3757d8a133
+JFREEREPORT_FLUTE_TARBALL := d8bd5eed178db6e2b18eeed243f85aa8-flute-1.1.6.zip
+JFREEREPORT_LIBBASE_SHA256SUM := 75c80359c9ce343c20aab8a36a45cb3b9ee7c61cf92c13ae45399d854423a9ba
+JFREEREPORT_LIBBASE_TARBALL := eeb2c7ddf0d302fba4bfc6e97eac9624-libbase-1.1.6.zip
+JFREEREPORT_LIBFONTS_SHA256SUM := e0531091787c0f16c83965fdcbc49162c059d7f0c64669e7f119699321549743
+JFREEREPORT_LIBFONTS_TARBALL := 3bdf40c0d199af31923e900d082ca2dd-libfonts-1.1.6.zip
+JFREEREPORT_LIBFORMULA_SHA256SUM := 5826d1551bf599b85742545f6e01a0079b93c1b2c8434bf409eddb3a29e4726b
+JFREEREPORT_LIBFORMULA_TARBALL := 3404ab6b1792ae5f16bbd603bd1e1d03-libformula-1.1.7.zip
+JFREEREPORT_LIBLAYOUT_SHA256SUM := e1fb87f3f7b980d33414473279615c4644027e013012d156efa538bc2b031772
+JFREEREPORT_LIBLAYOUT_TARBALL := db60e4fde8dd6d6807523deb71ee34dc-liblayout-0.2.10.zip
+JFREEREPORT_LIBLOADER_SHA256SUM := 3d853b19b1d94a6efa69e7af90f7f2b09ecf302913bee3da796c15ecfebcfac8
+JFREEREPORT_LIBLOADER_TARBALL := 97b2d4dba862397f446b217e2b623e71-libloader-1.1.6.zip
+JFREEREPORT_LIBREPOSITORY_SHA256SUM := abe2c57ac12ba45d83563b02e240fa95d973376de2f720aab8fe11f2e621c095
+JFREEREPORT_LIBREPOSITORY_TARBALL := 8ce2fcd72becf06c41f7201d15373ed9-librepository-1.1.6.zip
+JFREEREPORT_LIBSERIALIZER_SHA256SUM := 05640a1f6805b2b2d7e2cb9c50db9a5cb084e3c52ab1a71ce015239b4a1d4343
+JFREEREPORT_LIBSERIALIZER_TARBALL := f94d9870737518e3b597f9265f4e9803-libserializer-1.1.6.zip
+JFREEREPORT_LIBXML_SHA256SUM := 7d2797fe9f79a77009721e3f14fa4a1dec17a6d706bdc93f85f1f01d124fab66
+JFREEREPORT_LIBXML_TARBALL := ace6ab49184e329db254e454a010f56d-libxml-1.1.7.zip
+JFREEREPORT_SAC_SHA256SUM := 085f2112c51fa8c1783fac12fbd452650596415121348393bb51f0f7e85a9045
+JFREEREPORT_SAC_TARBALL := 39bb3fcea1514f1369fcfc87542390fd-sacjava-1.3.zip
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+LIBJPEG_TURBO_SHA256SUM := b24890e2bb46e12e72a79f7e965f409f4e16466d00e1dd15d93d73ee6b592523
+LIBJPEG_TURBO_TARBALL := libjpeg-turbo-1.5.3.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+LANGTAGREG_SHA256SUM := fb1ee0dabfd956a445fbe9f351e86a52767808558f20f4256e67fbbb3768e9da
+LANGTAGREG_TARBALL := language-subtag-registry-2020-04-01.tar.bz2
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+LANGUAGETOOL_SHA256SUM := 48c87e41636783bba438b65fd895821e369ed139e1465fac654323ad93c5a82d
+LANGUAGETOOL_TARBALL := b63e6340a02ff1cacfeadb2c42286161-JLanguageTool-1.7.0.tar.bz2
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+LCMS2_SHA256SUM := 48c6fdf98396fa245ed86e622028caf49b96fa22f3e5734f853f806fbc8e7d20
+LCMS2_TARBALL := lcms2-2.9.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+LIBASSUAN_SHA256SUM := 47f96c37b4f2aac289f0bc1bacfa8bd8b4b209a488d3d15e2229cb6cc9b26449
+LIBASSUAN_TARBALL := libassuan-2.5.1.tar.bz2
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+LIBATOMIC_OPS_SHA256SUM := 1d6a279edf81767e74d2ad2c9fce09459bc65f12c6525a40b0cb3e53c089f665
+LIBATOMIC_OPS_TARBALL := libatomic_ops-7.6.8.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+LIBEOT_SHA256SUM := cf5091fa8e7dcdbe667335eb90a2cfdd0a3fe8f8c7c8d1ece44d9d055736a06a
+LIBEOT_TARBALL := libeot-0.01.tar.bz2
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+LIBEXTTEXTCAT_SHA256SUM := 13fdbc9d4c489a4d0519e51933a1aa21fe3fb9eb7da191b87f7a63e82797dac8
+LIBEXTTEXTCAT_TARBALL := libexttextcat-3.4.5.tar.xz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+LIBFFI_SHA256SUM := 72fba7922703ddfa7a028d513ac15a85c8d54c8d67f55fa5a4802885dc652056
+LIBFFI_TARBALL := libffi-3.3.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+LIBGPGERROR_SHA256SUM := 4f93aac6fecb7da2b92871bb9ee33032be6a87b174f54abf8ddf0911a22d29d2
+LIBGPGERROR_TARBALL := libgpg-error-1.27.tar.bz2
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+LIBLANGTAG_SHA256SUM := 5ed6bcd4ae3f3c05c912e62f216cd1a44123846147f729a49fb5668da51e030e
+LIBLANGTAG_TARBALL := liblangtag-0.6.7.tar.bz2
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+LIBNUMBERTEXT_SHA256SUM := e1c9086b4cecb6b25f180316f30740dfabe6a4dbaf70dddc34276fc839e4f4f7
+LIBNUMBERTEXT_TARBALL := libnumbertext-1.0.5.tar.xz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+LIBTOMMATH_SHA256SUM := 986025d7b374276fee2e30e99f3649e4ac0db8a02257a37ee10eae72abed0d1f
+LIBTOMMATH_TARBALL := ltm-1.2.1.tar.xz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+XMLSEC_SHA256SUM := 13eec4811ea30e3f0e16a734d1dbf7f9d246a71d540b48d143a07b489f6222d4
+XMLSEC_TARBALL := xmlsec1-1.2.28.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+LIBXML_SHA256SUM := a972796696afd38073e0f59c283c3a2f5a560b5268b4babc391b286166526b21
+LIBXML_VERSION_MICRO := 5
+LIBXML_TARBALL := libxml2-2.12.$(LIBXML_VERSION_MICRO).tar.xz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+LIBXSLT_SHA256SUM := 2a20ad621148339b0759c4d4e96719362dee64c9a096dbba625ba053846349f0
+LIBXSLT_VERSION_MICRO := 39
+LIBXSLT_TARBALL := libxslt-1.1.$(LIBXSLT_VERSION_MICRO).tar.xz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+LPSOLVE_SHA256SUM := 171816288f14215c69e730f7a4f1c325739873e21f946ff83884b350574e6695
+LPSOLVE_TARBALL := 26b3e95ddf3d9c077c480ea45874b3b8-lp_solve_5.5.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+LXML_SHA256SUM := 940caef1ec7c78e0c34b0f6b94fe42d0f2022915ffc78643d28538a5cfd0f40e
+LXML_TARBALL := lxml-4.1.1.tgz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+MARIADB_CONNECTOR_C_SHA256SUM := 431434d3926f4bcce2e5c97240609983f60d7ff50df5a72083934759bb863f7b
+MARIADB_CONNECTOR_C_TARBALL := mariadb-connector-c-3.1.8-src.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+MDDS_SHA256SUM := 144d6debd7be32726f332eac14ef9f17e2d3cf89cb3250eb31a7127e0789680d
+MDDS_TARBALL := mdds-1.5.0.tar.bz2
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+MDNSRESPONDER_SHA256SUM := e777b4d7dbf5eb1552cb80090ad1ede319067ab6e45e3990d68aabf6e8b3f5a0
+MDNSRESPONDER_TARBALL := mDNSResponder-878.200.35.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+MSPUB_SHA256SUM := ef36c1a1aabb2ba3b0bedaaafe717bf4480be2ba8de6f3894be5fd3702b013ba
+MSPUB_TARBALL := libmspub-0.1.4.tar.xz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+MWAW_SHA256SUM := 0c639edba5297bde5575193bf5b5f2f469956beaff5c0206d91ce9df6bde1868
+MWAW_VERSION_MICRO := 16
+MWAW_TARBALL := libmwaw-0.3.$(MWAW_VERSION_MICRO).tar.xz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+MYTHES_SHA256SUM := 1e81f395d8c851c3e4e75b568e20fa2fa549354e75ab397f9de4b0e0790a305f
+MYTHES_TARBALL := a8c2c5b8f09e7ede322d5c602ff6a4b6-mythes-1.2.4.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+NEON_SHA256SUM := db0bd8cdec329b48f53a6f00199c92d5ba40b0f015b153718d1b15d3d967fbca
+NEON_TARBALL := neon-0.30.2.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+NSS_SHA256SUM := 59bb55a59b02e4004fc26ad0aa1a13fe8d73c6c90c447dd2f2efb73fb81083ed
+NSS_TARBALL := nss-3.98-with-nspr-4.35.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+ODFGEN_SHA256SUM := 55200027fd46623b9bdddd38d275e7452d1b0ff8aeddcad6f9ae6dc25f610625
+ODFGEN_VERSION_MICRO := 8
+ODFGEN_TARBALL := libodfgen-0.1.$(ODFGEN_VERSION_MICRO).tar.xz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+ODFVALIDATOR_SHA256SUM := 984f2a479df79e27e7b01a5815ac53ae64e07746b882262d8a64566494515504
+ODFVALIDATOR_JAR := odfvalidator-1.2.0-incubating-SNAPSHOT-jar-with-dependencies-971c54fd38a968f5860014b44301872706f9e540.jar
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+OFFICEOTRON_SHA256SUM := f2443f27561af52324eee03a1892d9f569adc8db9e7bca55614898bc2a13a770
+OFFICEOTRON_JAR := 8249374c274932a21846fa7629c2aa9b-officeotron-0.7.4-master.jar
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+OPENLDAP_SHA256SUM := 99f37d6747d88206c470067eda624d5e48c1011e943ec0ab217bae8712e22f34
+OPENLDAP_TARBALL := openldap-2.4.59.tgz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+OPENSSL_SHA256SUM := 8dee9b24bdb1dcbf0c3d1e9b02fb8f6bf22165e807f45adeb7c9677536859d3b
+OPENSSL_TARBALL := openssl-1.1.1t.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+ORCUS_SHA256SUM := 0dd26f3f2e611c51df9ee02d6dbf08887989eaa417b73f6877cd0d94df795fc2
+ORCUS_TARBALL := liborcus-0.15.3.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+OWNCLOUD_ANDROID_LIB_SHA256SUM := b18b3e3ef7fae6a79b62f2bb43cc47a5346b6330f6a383dc4be34439aca5e9fb
+OWNCLOUD_ANDROID_LIB_TARBALL := owncloud-android-library-0.9.4-no-binary-deps.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+PAGEMAKER_SHA256SUM := 66adacd705a7d19895e08eac46d1e851332adf2e736c566bef1164e7a442519d
+PAGEMAKER_TARBALL := libpagemaker-0.0.4.tar.xz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+PDFIUM_SHA256SUM := b1052ff24e9ffb11af017c444bb0f6ad508d64c9a0fb88cacb0e8210245dde06
+PDFIUM_TARBALL := pdfium-5778.tar.bz2
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+PIXMAN_SHA256SUM := 21b6b249b51c6800dc9553b65106e1e37d0e25df942c90531d4c3997aa20a88e
+PIXMAN_TARBALL := e80ebae4da01e77f68744319f01d52a3-pixman-0.34.0.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+LIBPNG_SHA256SUM := 505e70834d35383537b6491e7ae8641f1a4bed1876dbfe361201fc80868d88ca
+LIBPNG_TARBALL := libpng-1.6.37.tar.xz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+POPPLER_SHA256SUM := 80d1d44dd8bdf4ac1a47d56c5065075eb9991790974b1ed7d14b972acde88e55
+POPPLER_TARBALL := poppler-23.09.0.tar.xz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+POSTGRESQL_SHA256SUM := 5bbcf5a56d85c44f3a8b058fb46862ff49cbc91834d07e295d02e6de3c216df2
+POSTGRESQL_TARBALL := postgresql-13.10.tar.bz2
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+PYTHON_SHA256SUM := d2807ac69f69b84fd46a0b93bbd02a4fa48d3e70f4b2835ff0f72a2885040076
+PYTHON_TARBALL := Python-3.8.19.tar.xz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+QRCODEGEN_SHA256SUM := fcdf9fd69fde07ae4dca2351d84271a9de8093002f733b77c70f52f1630f6e4a
+QRCODEGEN_TARBALL := QR-Code-generator-1.4.0.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+QXP_SHA256SUM := e137b6b110120a52c98edd02ebdc4095ee08d0d5295a94316a981750095a945c
+QXP_TARBALL := libqxp-0.0.2.tar.xz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+RAPTOR_SHA256SUM := ada7f0ba54787b33485d090d3d2680533520cd4426d2f7fb4782dd4a6a1480ed
+RAPTOR_TARBALL := a39f6c07ddb20d7dd2ff1f95fa21e2cd-raptor2-2.0.15.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+RASQAL_SHA256SUM := 6924c9ac6570bd241a9669f83b467c728a322470bf34f4b2da4f69492ccfd97c
+RASQAL_TARBALL := 1f5def51ca0026cd192958ef07228b52-rasqal-0.9.33.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+REDLAND_SHA256SUM := de1847f7b59021c16bdc72abb4d8e2d9187cd6124d69156f3326dd34ee043681
+REDLAND_TARBALL := e5be03eda13ef68aabab6e42aa67715e-redland-1.0.17.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+REVENGE_SHA256SUM := c51601cd08320b75702812c64aae0653409164da7825fd0f451ac2c5dbe77cbf
+REVENGE_VERSION_MICRO := 4
+REVENGE_TARBALL := librevenge-0.0.$(REVENGE_VERSION_MICRO).tar.bz2
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+RHINO_SHA256SUM := 1fb458d6aab06932693cc8a9b6e4e70944ee1ff052fa63606e3131df34e21753
+RHINO_TARBALL := 798b2ffdc8bcfe7bca2cf92b62caf685-rhino1_5R5.zip
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+SERF_SHA256SUM := 6988d394b62c3494635b6f0760bc3079f9a0cd380baf0f6b075af1eb9fa5e700
+SERF_TARBALL := serf-1.2.1.tar.bz2
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+STAROFFICE_SHA256SUM := 6b00e1ed8194e6072be4441025d1b888e39365727ed5b23e0e8c92c4009d1ec4
+STAROFFICE_VERSION_MICRO := 6
+STAROFFICE_TARBALL := libstaroffice-0.0.$(STAROFFICE_VERSION_MICRO).tar.xz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+SWING_SHA256SUM := 64585ac36a81291a58269ec5347e7e3e2e8596dbacb9221015c208191333c6e1
+SWING_TARBALL := 35c94d2df8893241173de1d16b6034c0-swingExSrc.zip
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+TWAIN_DSM_SHA256SUM := 82c818be771f242388457aa8c807e4b52aa84dc22b21c6c56184a6b4cbb085e6
+TWAIN_DSM_TARBALL := twaindsm_2.4.1.orig.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+UCPP_SHA256SUM := 983941d31ee8d366085cadf28db75eb1f5cb03ba1e5853b98f12f7f51c63b776
+UCPP_TARBALL := 0168229624cfac409e766913506961a8-ucpp-1.3.2.tar.gz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+VISIO_SHA256SUM := 8faf8df870cb27b09a787a1959d6c646faa44d0d8ab151883df408b7166bea4c
+VISIO_TARBALL := libvisio-0.1.7.tar.xz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+WPD_SHA256SUM := 2465b0b662fdc5d4e3bebcdc9a79027713fb629ca2bff04a3c9251fdec42dd09
+WPD_VERSION_MICRO := 3
+WPD_TARBALL := libwpd-0.10.$(WPD_VERSION_MICRO).tar.xz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+WPG_SHA256SUM := 99b3f7f8832385748582ab8130fbb9e5607bd5179bebf9751ac1d51a53099d1c
+WPG_VERSION_MICRO := 3
+WPG_TARBALL := libwpg-0.3.$(WPG_VERSION_MICRO).tar.xz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+WPS_SHA256SUM := 1421e034286a9f96d3168a1c54ea570ee7aa008ca07b89de005ad5ce49fb29ca
+WPS_VERSION_MICRO := 10
+WPS_TARBALL := libwps-0.4.$(WPS_VERSION_MICRO).tar.xz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+XSLTML_SHA256SUM := 75823776fb51a9c526af904f1503a7afaaab900fba83eda64f8a41073724c870
+XSLTML_TARBALL := a7983f859eafb2677d7ff386a023bc40-xsltml_2.1.2.zip
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+ZLIB_SHA256SUM := d14c38e313afc35a9a8760dadf26042f51ea0f5d154b0630a31da0540107fb98
+ZLIB_TARBALL := zlib-1.2.13.tar.xz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
+ZMF_SHA256SUM := 27051a30cb057fdb5d5de65a1f165c7153dc76e27fe62251cbb86639eb2caf22
+ZMF_TARBALL := libzmf-0.0.2.tar.xz
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
NUMBERTEXT_EXTENSION_SHA256SUM := 1568ed1d2feb8210bb5de61d69574a165cded536cfa17c6953c9064076469de2
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
UNOWINREG_SHA256SUM := eafde646a7dbe46d20c291685b0beac2382174d78d66ee990e229a1bf6e6cec6
+# three static lines
+# so that git cherry-pick
+# will not run into conflicts
OPENSYMBOL_SHA256SUM := 884ed41809687c3e168fc7c19b16585149ff058eca79acbf3ee784f6630704cc
diff --git a/drawinglayer/source/tools/primitive2dxmldump.cxx b/drawinglayer/source/tools/primitive2dxmldump.cxx
index 65170ae096f2..4c12c32ae079 100644
--- a/drawinglayer/source/tools/primitive2dxmldump.cxx
+++ b/drawinglayer/source/tools/primitive2dxmldump.cxx
@@ -16,6 +16,8 @@
#include <tools/XmlWriter.hxx>
#include <memory>
+#include <libxml/parser.h>
+#include <sal/log.hxx>
#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
#include <drawinglayer/primitive2d/transformprimitive2d.hxx>
diff --git a/dtrans/Library_dnd.mk b/dtrans/Library_dnd.mk
deleted file mode 100644
index 8eecd53db50c..000000000000
--- a/dtrans/Library_dnd.mk
+++ /dev/null
@@ -1,61 +0,0 @@
-# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
-#
-# This file is part of the LibreOffice project.
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-# This file incorporates work covered by the following license notice:
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed
-# with this work for additional information regarding copyright
-# ownership. The ASF licenses this file to you under the Apache
-# License, Version 2.0 (the "License"); you may not use this file
-# except in compliance with the License. You may obtain a copy of
-# the License at http://www.apache.org/licenses/LICENSE-2.0 .
-#
-
-$(eval $(call gb_Library_Library,dnd))
-
-$(eval $(call gb_Library_set_componentfile,dnd,dtrans/util/dnd))
-
-$(eval $(call gb_Library_use_externals,dnd, \
- boost_headers \
-))
-
-$(eval $(call gb_Library_use_sdk_api,dnd))
-
-$(eval $(call gb_Library_use_libraries,dnd,\
- comphelper \
- cppu \
- cppuhelper \
- sal \
-))
-
-$(eval $(call gb_Library_use_system_win32_libs,dnd,\
- advapi32 \
- gdi32 \
- ole32 \
- oleaut32 \
- shell32 \
- uuid \
-))
-
-$(eval $(call gb_Library_use_static_libraries,dnd,\
- dtobj \
-))
-
-$(eval $(call gb_Library_add_exception_objects,dnd,\
- dtrans/source/win32/dnd/dndentry \
- dtrans/source/win32/dnd/globals \
- dtrans/source/win32/dnd/idroptarget \
- dtrans/source/win32/dnd/sourcecontext \
- dtrans/source/win32/dnd/source \
- dtrans/source/win32/dnd/target \
- dtrans/source/win32/dnd/targetdragcontext \
- dtrans/source/win32/dnd/targetdropcontext \
-))
-
-# vim: set noet sw=4 ts=4:
diff --git a/dtrans/Library_dtrans.mk b/dtrans/Library_dtrans.mk
deleted file mode 100644
index a4f3413fc4f6..000000000000
--- a/dtrans/Library_dtrans.mk
+++ /dev/null
@@ -1,38 +0,0 @@
-# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
-#
-# This file is part of the LibreOffice project.
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-# This file incorporates work covered by the following license notice:
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed
-# with this work for additional information regarding copyright
-# ownership. The ASF licenses this file to you under the Apache
-# License, Version 2.0 (the "License"); you may not use this file
-# except in compliance with the License. You may obtain a copy of
-# the License at http://www.apache.org/licenses/LICENSE-2.0 .
-#
-
-$(eval $(call gb_Library_Library,dtrans))
-
-$(eval $(call gb_Library_set_componentfile,dtrans,dtrans/source/generic/dtrans))
-
-$(eval $(call gb_Library_use_sdk_api,dtrans))
-
-$(eval $(call gb_Library_use_libraries,dtrans,\
- cppu \
- cppuhelper \
- sal \
-))
-
-$(eval $(call gb_Library_add_exception_objects,dtrans,\
- dtrans/source/generic/clipboardmanager \
- dtrans/source/generic/dtrans \
- dtrans/source/generic/generic_clipboard \
-))
-
-# vim: set noet sw=4 ts=4:
diff --git a/dtrans/Library_ftransl.mk b/dtrans/Library_ftransl.mk
deleted file mode 100644
index 5a16ee83c419..000000000000
--- a/dtrans/Library_ftransl.mk
+++ /dev/null
@@ -1,53 +0,0 @@
-# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
-#
-# This file is part of the LibreOffice project.
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-# This file incorporates work covered by the following license notice:
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed
-# with this work for additional information regarding copyright
-# ownership. The ASF licenses this file to you under the Apache
-# License, Version 2.0 (the "License"); you may not use this file
-# except in compliance with the License. You may obtain a copy of
-# the License at http://www.apache.org/licenses/LICENSE-2.0 .
-#
-
-$(eval $(call gb_Library_Library,ftransl))
-
-$(eval $(call gb_Library_set_componentfile,ftransl,dtrans/util/ftransl))
-
-$(eval $(call gb_Library_use_sdk_api,ftransl))
-
-$(eval $(call gb_Library_use_libraries,ftransl,\
- comphelper \
- cppu \
- cppuhelper \
- sal \
-))
-
-$(eval $(call gb_Library_use_system_win32_libs,ftransl,\
- advapi32 \
- gdi32 \
- ole32 \
-))
-
-$(eval $(call gb_Library_use_static_libraries,ftransl,\
- dtobj \
-))
-
-$(eval $(call gb_Library_add_exception_objects,ftransl,\
- dtrans/source/win32/ftransl/ftransl \
- dtrans/source/win32/ftransl/ftranslentry \
-))
-
-$(eval $(call gb_Library_set_include,ftransl,\
- -I$(SRCDIR)/dtrans/source/inc \
- $$(INCLUDE) \
-))
-
-# vim: set noet sw=4 ts=4:
diff --git a/dtrans/Library_sysdtrans.mk b/dtrans/Library_sysdtrans.mk
deleted file mode 100644
index ba8b5601f699..000000000000
--- a/dtrans/Library_sysdtrans.mk
+++ /dev/null
@@ -1,53 +0,0 @@
-# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
-#
-# This file is part of the LibreOffice project.
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-# This file incorporates work covered by the following license notice:
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed
-# with this work for additional information regarding copyright
-# ownership. The ASF licenses this file to you under the Apache
-# License, Version 2.0 (the "License"); you may not use this file
-# except in compliance with the License. You may obtain a copy of
-# the License at http://www.apache.org/licenses/LICENSE-2.0 .
-#
-
-$(eval $(call gb_Library_Library,sysdtrans))
-
-$(eval $(call gb_Library_set_componentfile,sysdtrans,dtrans/util/sysdtrans))
-
-$(eval $(call gb_Library_use_sdk_api,sysdtrans))
-
-$(eval $(call gb_Library_use_libraries,sysdtrans,\
- comphelper \
- cppu \
- cppuhelper \
- sal \
-))
-
-$(eval $(call gb_Library_use_system_win32_libs,sysdtrans,\
- advapi32 \
- gdi32 \
- ole32 \
- oleaut32 \
- shell32 \
- uuid \
-))
-
-$(eval $(call gb_Library_use_static_libraries,sysdtrans,\
- dtobj \
-))
-
-$(eval $(call gb_Library_add_exception_objects,sysdtrans,\
- dtrans/source/win32/clipb/WinClipbImpl \
- dtrans/source/win32/clipb/WinClipboard \
- dtrans/source/win32/clipb/wcbentry \
- dtrans/source/win32/clipb/MtaOleClipb \
-))
-
-# vim: set noet sw=4 ts=4:
diff --git a/dtrans/Module_dtrans.mk b/dtrans/Module_dtrans.mk
index 2ddc6f48a925..f583c41e88bb 100644
--- a/dtrans/Module_dtrans.mk
+++ b/dtrans/Module_dtrans.mk
@@ -23,14 +23,4 @@ $(eval $(call gb_Module_add_targets,dtrans,\
Library_mcnttype \
))
-ifeq ($(OS),WNT)
-$(eval $(call gb_Module_add_targets,dtrans,\
- Library_dnd \
- Library_dtrans \
- Library_ftransl \
- Library_sysdtrans \
- StaticLibrary_dtobj \
-))
-endif
-
# vim: set noet sw=4 ts=4:
diff --git a/dtrans/README b/dtrans/README
index 23555bce65aa..73aca8b6e496 100644
--- a/dtrans/README
+++ b/dtrans/README
@@ -1 +1,3 @@
-Clipboard abstraction - data transfer.
+Used to be a module for data transfer, but just contained Windows code.
+Now it just contains the MimeContentTypeFactory, which probably should move to
+vcl too, since it's just used there.
diff --git a/dtrans/StaticLibrary_dtobj.mk b/dtrans/StaticLibrary_dtobj.mk
deleted file mode 100644
index 04ed1c53249f..000000000000
--- a/dtrans/StaticLibrary_dtobj.mk
+++ /dev/null
@@ -1,44 +0,0 @@
-# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
-#
-# This file is part of the LibreOffice project.
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-# This file incorporates work covered by the following license notice:
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed
-# with this work for additional information regarding copyright
-# ownership. The ASF licenses this file to you under the Apache
-# License, Version 2.0 (the "License"); you may not use this file
-# except in compliance with the License. You may obtain a copy of
-# the License at http://www.apache.org/licenses/LICENSE-2.0 .
-#
-
-$(eval $(call gb_StaticLibrary_StaticLibrary,dtobj))
-
-$(eval $(call gb_StaticLibrary_use_sdk_api,dtobj))
-
-$(eval $(call gb_StaticLibrary_add_exception_objects,dtobj,\
- dtrans/source/win32/dtobj/APNDataObject \
- dtrans/source/win32/dtobj/DataFmtTransl \
- dtrans/source/win32/dtobj/DOTransferable \
- dtrans/source/win32/dtobj/DtObjFactory \
- dtrans/source/win32/dtobj/DTransHelper \
- dtrans/source/win32/dtobj/Fetc \
- dtrans/source/win32/dtobj/FetcList \
- dtrans/source/win32/dtobj/FmtFilter \
- dtrans/source/win32/dtobj/TxtCnvtHlp \
- dtrans/source/win32/dtobj/XNotifyingDataObject \
- dtrans/source/win32/dtobj/XTDataObject \
- dtrans/source/win32/misc/ImplHelper \
-))
-
-$(eval $(call gb_StaticLibrary_set_include,dtobj,\
- -I$(SRCDIR)/dtrans/source/inc \
- $$(INCLUDE) \
-))
-
-# vim: set noet sw=4 ts=4:
diff --git a/dtrans/source/generic/dtrans.cxx b/dtrans/source/generic/dtrans.cxx
deleted file mode 100644
index 14cdecd817f4..000000000000
--- a/dtrans/source/generic/dtrans.cxx
+++ /dev/null
@@ -1,74 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <cppuhelper/factory.hxx>
-#include <com/sun/star/lang/XSingleServiceFactory.hpp>
-#include "clipboardmanager.hxx"
-#include "generic_clipboard.hxx"
-
-using namespace com::sun::star::lang;
-using namespace com::sun::star::registry;
-using namespace com::sun::star::uno;
-using namespace cppu;
-
-extern "C"
-{
-
-SAL_DLLPUBLIC_EXPORT void * dtrans_component_getFactory(
- const sal_Char * pImplName,
- void * pServiceManager,
- void * /*pRegistryKey*/
-)
-{
- void * pRet = nullptr;
-
- if (pServiceManager)
- {
- Reference< XSingleServiceFactory > xFactory;
-
- if (rtl_str_compare( pImplName, CLIPBOARDMANAGER_IMPLEMENTATION_NAME ) == 0)
- {
- xFactory = createOneInstanceFactory(
- static_cast< XMultiServiceFactory * >( pServiceManager ),
- OUString::createFromAscii( pImplName ),
- ClipboardManager_createInstance,
- ClipboardManager_getSupportedServiceNames() );
- }
- else if (rtl_str_compare( pImplName, GENERIC_CLIPBOARD_IMPLEMENTATION_NAME ) == 0)
- {
- xFactory = createSingleFactory(
- static_cast< XMultiServiceFactory * >( pServiceManager ),
- OUString::createFromAscii( pImplName ),
- GenericClipboard_createInstance,
- GenericClipboard_getSupportedServiceNames() );
- }
-
- if (xFactory.is())
- {
- xFactory->acquire();
- pRet = xFactory.get();
- }
- }
-
- return pRet;
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/dtrans/source/win32/clipb/APNDataObject.hxx b/dtrans/source/win32/clipb/APNDataObject.hxx
deleted file mode 100644
index c48d14117ef7..000000000000
--- a/dtrans/source/win32/clipb/APNDataObject.hxx
+++ /dev/null
@@ -1,72 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#ifndef INCLUDED_DTRANS_SOURCE_WIN32_CLIPB_APNDATAOBJECT_HXX
-#define INCLUDED_DTRANS_SOURCE_WIN32_CLIPB_APNDATAOBJECT_HXX
-
-/*
- an APartment Neutral dataobject wrapper; this wrapper of an IDataObject
- pointer can be used from any apartment without RPC_E_WRONG_THREAD
- which normally occurs if an apartment tries to use an interface
- pointer of another apartment; we use containment to hold the original
- DataObject
-*/
-class CAPNDataObject : public IDataObject
-{
-public:
- CAPNDataObject( IDataObjectPtr rIDataObject );
- ~CAPNDataObject( );
-
- //IUnknown interface methods
-
- STDMETHODIMP QueryInterface(REFIID iid, LPVOID* ppvObject);
- STDMETHODIMP_( ULONG ) AddRef( );
- STDMETHODIMP_( ULONG ) Release( );
-
- // IDataObject interface methods
-
- STDMETHODIMP GetData( LPFORMATETC pFormatetc, LPSTGMEDIUM pmedium );
- STDMETHODIMP GetDataHere( LPFORMATETC pFormatetc, LPSTGMEDIUM pmedium );
- STDMETHODIMP QueryGetData( LPFORMATETC pFormatetc );
- STDMETHODIMP GetCanonicalFormatEtc( LPFORMATETC pFormatectIn, LPFORMATETC pFormatetcOut );
- STDMETHODIMP SetData( LPFORMATETC pFormatetc, LPSTGMEDIUM pmedium, BOOL fRelease );
- STDMETHODIMP EnumFormatEtc( DWORD dwDirection, IEnumFORMATETC** ppenumFormatetc );
- STDMETHODIMP DAdvise( LPFORMATETC pFormatetc, DWORD advf, LPADVISESINK pAdvSink, DWORD* pdwConnection );
- STDMETHODIMP DUnadvise( DWORD dwConnection );
- STDMETHODIMP EnumDAdvise( LPENUMSTATDATA* ppenumAdvise );
-
- operator IDataObject*( );
-
-private:
- HRESULT MarshalIDataObjectIntoCurrentApartment( IDataObject** ppIDataObj );
-
-private:
- IDataObjectPtr m_rIDataObjectOrg;
- HGLOBAL m_hGlobal;
- LONG m_nRefCnt;
-
-// prevent copy and assignment
-private:
- CAPNDataObject( const CAPNDataObject& theOther );
- CAPNDataObject& operator=( const CAPNDataObject& theOther );
-};
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/dtrans/source/win32/clipb/WinClipbImpl.cxx b/dtrans/source/win32/clipb/WinClipbImpl.cxx
deleted file mode 100644
index 8d59be7ca430..000000000000
--- a/dtrans/source/win32/clipb/WinClipbImpl.cxx
+++ /dev/null
@@ -1,210 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <osl/diagnose.h>
-#include "WinClipbImpl.hxx"
-
-#include <systools/win32/comtools.hxx>
-#include "../../inc/DtObjFactory.hxx"
-#include "../dtobj/APNDataObject.hxx"
-#include "../dtobj/DOTransferable.hxx"
-#include "WinClipboard.hxx"
-#include <com/sun/star/datatransfer/clipboard/RenderingCapabilities.hpp>
-#include "../dtobj/XNotifyingDataObject.hxx"
-
-#if !defined WIN32_LEAN_AND_MEAN
-# define WIN32_LEAN_AND_MEAN
-#endif
-#include <windows.h>
-#include <ole2.h>
-#include <objidl.h>
-
-using namespace osl;
-using namespace std;
-using namespace cppu;
-
-using namespace com::sun::star::uno;
-using namespace com::sun::star::datatransfer;
-using namespace com::sun::star::datatransfer::clipboard;
-using namespace com::sun::star::datatransfer::clipboard::RenderingCapabilities;
-
-// definition of static members
-CWinClipbImpl* CWinClipbImpl::s_pCWinClipbImpl = nullptr;
-osl::Mutex CWinClipbImpl::s_aMutex;
-
-CWinClipbImpl::CWinClipbImpl( const OUString& aClipboardName, CWinClipboard* theWinClipboard ) :
- m_itsName( aClipboardName ),
- m_pWinClipboard( theWinClipboard ),
- m_pCurrentClipContent( nullptr )
-{
- OSL_ASSERT( nullptr != m_pWinClipboard );
-
- // necessary to reassociate from
- // the static callback function
- s_pCWinClipbImpl = this;
- registerClipboardViewer( );
-}
-
-CWinClipbImpl::~CWinClipbImpl( )
-{
- {
- MutexGuard aGuard(s_aMutex);
- s_pCWinClipbImpl = nullptr;
- }
-
- unregisterClipboardViewer( );
-}
-
-Reference< XTransferable > CWinClipbImpl::getContents( )
-{
- // use the shortcut or create a transferable from
- // system clipboard
- {
- MutexGuard aGuard(m_ClipContentMutex);
-
- if (nullptr != m_pCurrentClipContent)
- {
- return m_pCurrentClipContent->m_XTransferable;
- }
-
- // Content cached?
- if (m_foreignContent.is())
- return m_foreignContent;
-
- // release the mutex, so that the variable may be
- // changed by other threads
- }
-
- Reference< XTransferable > rClipContent;
-
- // get the current dataobject from clipboard
- IDataObjectPtr pIDataObject;
- HRESULT hr = m_MtaOleClipboard.getClipboard( &pIDataObject );
-
- if ( SUCCEEDED( hr ) )
- {
- // create an apartment neutral dataobject and initialize it with a
- // com smart pointer to the IDataObject from clipboard
- IDataObjectPtr pIDo( new CAPNDataObject( pIDataObject ) );
-
- // remember pIDo destroys itself due to the smart pointer
- rClipContent = CDOTransferable::create( m_pWinClipboard->m_xContext, pIDo );
-
- MutexGuard aGuard(m_ClipContentMutex);
- m_foreignContent = rClipContent;
- }
-
- return rClipContent;
-}
-
-void CWinClipbImpl::setContents(
- const Reference< XTransferable >& xTransferable,
- const Reference< XClipboardOwner >& xClipboardOwner )
-{
- IDataObjectPtr pIDataObj;
-
- if ( xTransferable.is( ) )
- {
- {
- MutexGuard aGuard(m_ClipContentMutex);
-
- m_foreignContent.clear();
-
- m_pCurrentClipContent
- = new CXNotifyingDataObject(CDTransObjFactory::createDataObjFromTransferable(
- m_pWinClipboard->m_xContext, xTransferable),
- xTransferable, xClipboardOwner, this);
- }
-
- pIDataObj = IDataObjectPtr( m_pCurrentClipContent );
- }
-
- m_MtaOleClipboard.setClipboard(pIDataObj.get());
-}
-
-OUString CWinClipbImpl::getName( )
-{
- return m_itsName;
-}
-
-sal_Int8 CWinClipbImpl::getRenderingCapabilities( )
-{
- return ( Delayed | Persistant );
-}
-
-void CWinClipbImpl::flushClipboard( )
-{
- // actually it should be ClearableMutexGuard aGuard( m_ClipContentMutex );
- // but it does not work since FlushClipboard does a callback and frees DataObject
- // which results in a deadlock in onReleaseDataObject.
- // FlushClipboard had to be synchron in order to prevent shutdown until all
- // clipboard-formats are rendered.
- // The request is needed to prevent flushing if we are not clipboard owner (it is
- // not known what happens if we flush but aren't clipboard owner).
- // It may be possible to move the request to the clipboard STA thread by saving the
- // DataObject and call OleIsCurrentClipboard before flushing.
-
- if ( nullptr != m_pCurrentClipContent )
- m_MtaOleClipboard.flushClipboard( );
-}
-
-void CWinClipbImpl::registerClipboardViewer( )
-{
- m_MtaOleClipboard.registerClipViewer( CWinClipbImpl::onClipboardContentChanged );
-}
-
-void CWinClipbImpl::unregisterClipboardViewer( )
-{
- m_MtaOleClipboard.registerClipViewer( nullptr );
-}
-
-void CWinClipbImpl::dispose()
-{
- OSL_ENSURE( !m_pCurrentClipContent, "Clipboard was not flushed before shutdown!" );
-}
-
-void WINAPI CWinClipbImpl::onClipboardContentChanged()
-{
- MutexGuard aGuard( s_aMutex );
-
- // reassociation to instance through static member
- if ( nullptr != s_pCWinClipbImpl )
- {
- s_pCWinClipbImpl->m_foreignContent.clear();
- s_pCWinClipbImpl->m_pWinClipboard->notifyAllClipboardListener( );
- }
-}
-
-void CWinClipbImpl::onReleaseDataObject( CXNotifyingDataObject* theCaller )
-{
- OSL_ASSERT( nullptr != theCaller );
-
- if ( theCaller )
- theCaller->lostOwnership( );
-
- // if the current caller is the one we currently
- // hold, then set it to NULL because an external
- // source must be the clipboardowner now
- MutexGuard aGuard( m_ClipContentMutex );
-
- if ( m_pCurrentClipContent == theCaller )
- m_pCurrentClipContent = nullptr;
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/dtrans/source/win32/clipb/WinClipbImpl.hxx b/dtrans/source/win32/clipb/WinClipbImpl.hxx
deleted file mode 100644
index cd5878e6b794..000000000000
--- a/dtrans/source/win32/clipb/WinClipbImpl.hxx
+++ /dev/null
@@ -1,106 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#ifndef INCLUDED_DTRANS_SOURCE_WIN32_CLIPB_WINCLIPBIMPL_HXX
-#define INCLUDED_DTRANS_SOURCE_WIN32_CLIPB_WINCLIPBIMPL_HXX
-
-#include <sal/types.h>
-#include <rtl/ustring.hxx>
-#include <com/sun/star/datatransfer/XTransferable.hpp>
-#include <com/sun/star/datatransfer/clipboard/XClipboardListener.hpp>
-#include <com/sun/star/datatransfer/clipboard/XClipboardOwner.hpp>
-#include "MtaOleClipb.hxx"
-
-#if !defined WIN32_LEAN_AND_MEAN
-# define WIN32_LEAN_AND_MEAN
-#endif
-#include <windows.h>
-
-class CWinClipboard;
-class CXNotifyingDataObject;
-
-// impl class to avoid deadlocks between XTDataObject
-// and the clipboard implementation
-
-class CWinClipbImpl
-{
-public:
- ~CWinClipbImpl( );
-
-protected:
- CWinClipbImpl( const OUString& aClipboardName, CWinClipboard* theWinClipboard );
-
- /// @throws css::uno::RuntimeException
- css::uno::Reference< css::datatransfer::XTransferable > getContents( );
-
- /// @throws css::uno::RuntimeException
- void setContents(
- const css::uno::Reference< css::datatransfer::XTransferable >& xTransferable,
- const css::uno::Reference< css::datatransfer::clipboard::XClipboardOwner >& xClipboardOwner );
-
- /// @throws css::uno::RuntimeException
- OUString getName( );
-
- // XClipboardEx
-
- /// @throws css::uno::RuntimeException
- static sal_Int8 getRenderingCapabilities( );
-
- // XFlushableClipboard
-
- /// @throws css::uno::RuntimeException
- void flushClipboard( );
-
- // XComponent
-
- /// @throws css::uno::RuntimeException
- void dispose( );
-
- // member functions
-
- void registerClipboardViewer( );
- void unregisterClipboardViewer( );
-
- static void WINAPI onClipboardContentChanged();
-
-private:
- void onReleaseDataObject( CXNotifyingDataObject* theCaller );
-
-private:
- OUString m_itsName;
- CMtaOleClipboard m_MtaOleClipboard;
- CWinClipboard* m_pWinClipboard;
- CXNotifyingDataObject* m_pCurrentClipContent;
- com::sun::star::uno::Reference< com::sun::star::datatransfer::XTransferable > m_foreignContent;
- osl::Mutex m_ClipContentMutex;
-
- static osl::Mutex s_aMutex;
- static CWinClipbImpl* s_pCWinClipbImpl;
-
-private:
- CWinClipbImpl( const CWinClipbImpl& );
- CWinClipbImpl& operator=( const CWinClipbImpl& );
-
- friend class CWinClipboard;
- friend class CXNotifyingDataObject;
-};
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/dtrans/source/win32/clipb/WinClipboard.cxx b/dtrans/source/win32/clipb/WinClipboard.cxx
deleted file mode 100644
index 919065a9f2fc..000000000000
--- a/dtrans/source/win32/clipb/WinClipboard.cxx
+++ /dev/null
@@ -1,239 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <osl/diagnose.h>
-#include "WinClipboard.hxx"
-#include <com/sun/star/datatransfer/clipboard/ClipboardEvent.hpp>
-#include <com/sun/star/lang/DisposedException.hpp>
-#include <com/sun/star/lang/IllegalArgumentException.hpp>
-#include <cppuhelper/supportsservice.hxx>
-#include "WinClipbImpl.hxx"
-
-using namespace osl;
-using namespace std;
-using namespace cppu;
-
-using namespace com::sun::star::uno;
-using namespace com::sun::star::datatransfer;
-using namespace com::sun::star::datatransfer::clipboard;
-using namespace com::sun::star::lang;
-
-#define WINCLIPBOARD_IMPL_NAME "com.sun.star.datatransfer.clipboard.ClipboardW32"
-
-namespace
-{
- Sequence< OUString > WinClipboard_getSupportedServiceNames()
- {
- Sequence< OUString > aRet { "com.sun.star.datatransfer.clipboard.SystemClipboard" };
- return aRet;
- }
-}
-
-/*XEventListener,*/
-CWinClipboard::CWinClipboard( const Reference< XComponentContext >& rxContext, const OUString& aClipboardName ) :
- WeakComponentImplHelper< XSystemClipboard, XFlushableClipboard, XServiceInfo >( m_aCbListenerMutex ),
- m_xContext( rxContext )
-{
- m_pImpl.reset( new CWinClipbImpl( aClipboardName, this ) );
-}
-
-// XClipboard
-
-// to avoid unnecessary traffic we check first if there is a clipboard
-// content which was set via setContent, in this case we don't need
-// to query the content from the clipboard, create a new wrapper object
-// and so on, we simply return the original XTransferable instead of our
-// DOTransferable
-
-Reference< XTransferable > SAL_CALL CWinClipboard::getContents( )
-{
- MutexGuard aGuard( m_aMutex );
-
- if ( rBHelper.bDisposed )
- throw DisposedException("object is already disposed",
- static_cast< XClipboardEx* >( this ) );
-
- if ( nullptr != m_pImpl.get( ) )
- return m_pImpl->getContents( );
-
- return Reference< XTransferable >( );
-}
-
-void SAL_CALL CWinClipboard::setContents( const Reference< XTransferable >& xTransferable,
- const Reference< XClipboardOwner >& xClipboardOwner )
-{
- MutexGuard aGuard( m_aMutex );
-
- if ( rBHelper.bDisposed )
- throw DisposedException("object is already disposed",
- static_cast< XClipboardEx* >( this ) );
-
- if ( nullptr != m_pImpl.get( ) )
- m_pImpl->setContents( xTransferable, xClipboardOwner );
-}
-
-OUString SAL_CALL CWinClipboard::getName( )
-{
- if ( rBHelper.bDisposed )
- throw DisposedException("object is already disposed",
- static_cast< XClipboardEx* >( this ) );
-
- if ( nullptr != m_pImpl.get( ) )
- return m_pImpl->getName( );
-
- return OUString();
-}
-
-// XFlushableClipboard
-
-void SAL_CALL CWinClipboard::flushClipboard( )
-{
- MutexGuard aGuard( m_aMutex );
-
- if ( rBHelper.bDisposed )
- throw DisposedException("object is already disposed",
- static_cast< XClipboardEx* >( this ) );
-
- if ( nullptr != m_pImpl.get( ) )
- m_pImpl->flushClipboard( );
-}
-
-// XClipboardEx
-
-sal_Int8 SAL_CALL CWinClipboard::getRenderingCapabilities( )
-{
- if ( rBHelper.bDisposed )
- throw DisposedException("object is already disposed",
- static_cast< XClipboardEx* >( this ) );
-
- if ( nullptr != m_pImpl.get( ) )
- return CWinClipbImpl::getRenderingCapabilities( );
-
- return 0;
-}
-
-// XClipboardNotifier
-
-void SAL_CALL CWinClipboard::addClipboardListener( const Reference< XClipboardListener >& listener )
-{
- if ( rBHelper.bDisposed )
- throw DisposedException("object is already disposed",
- static_cast< XClipboardEx* >( this ) );
-
- // check input parameter
- if ( !listener.is( ) )
- throw IllegalArgumentException("empty reference",
- static_cast< XClipboardEx* >( this ),
- 1 );
-
- rBHelper.aLC.addInterface( cppu::UnoType<decltype(listener)>::get(), listener );
-}
-
-void SAL_CALL CWinClipboard::removeClipboardListener( const Reference< XClipboardListener >& listener )
-{
- if ( rBHelper.bDisposed )
- throw DisposedException("object is already disposed",
- static_cast< XClipboardEx* >( this ) );
-
- // check input parameter
- if ( !listener.is( ) )
- throw IllegalArgumentException("empty reference",
- static_cast< XClipboardEx* >( this ),
- 1 );
-
- rBHelper.aLC.removeInterface( cppu::UnoType<decltype(listener)>::get(), listener );
-}
-
-void CWinClipboard::notifyAllClipboardListener( )
-{
- if ( !rBHelper.bDisposed )
- {
- ClearableMutexGuard aGuard( rBHelper.rMutex );
- if ( !rBHelper.bDisposed )
- {
- aGuard.clear( );
-
- OInterfaceContainerHelper* pICHelper = rBHelper.aLC.getContainer(
- cppu::UnoType<XClipboardListener>::get());
-
- if ( pICHelper )
- {
- try
- {
- OInterfaceIteratorHelper iter(*pICHelper);
- Reference<XTransferable> rXTransf(m_pImpl->getContents());
- ClipboardEvent aClipbEvent(static_cast<XClipboard*>(this), rXTransf);
-
- while(iter.hasMoreElements())
- {
- try
- {
- Reference<XClipboardListener> xCBListener(iter.next(), UNO_QUERY);
- if (xCBListener.is())
- xCBListener->changedContents(aClipbEvent);
- }
- catch(RuntimeException&)
- {
- OSL_FAIL( "RuntimeException caught" );
- }
- }
- }
- catch(const css::lang::DisposedException&)
- {
- OSL_FAIL("Service Manager disposed");
-
- // no further clipboard changed notifications
- m_pImpl->unregisterClipboardViewer();
- }
-
- } // end if
- } // end if
- } // end if
-}
-
-// overwritten base class method which will be
-// called by the base class dispose method
-
-void SAL_CALL CWinClipboard::disposing()
-{
- // do my own stuff
- m_pImpl->dispose( );
-
- // force destruction of the impl class
- m_pImpl.reset();
-}
-
-// XServiceInfo
-
-OUString SAL_CALL CWinClipboard::getImplementationName( )
-{
- return WINCLIPBOARD_IMPL_NAME;
-}
-
-sal_Bool SAL_CALL CWinClipboard::supportsService( const OUString& ServiceName )
-{
- return cppu::supportsService(this, ServiceName);
-}
-
-Sequence< OUString > SAL_CALL CWinClipboard::getSupportedServiceNames( )
-{
- return WinClipboard_getSupportedServiceNames();
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/dtrans/source/win32/clipb/wcbentry.cxx b/dtrans/source/win32/clipb/wcbentry.cxx
deleted file mode 100644
index f0580e70e20e..000000000000
--- a/dtrans/source/win32/clipb/wcbentry.cxx
+++ /dev/null
@@ -1,82 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <cppuhelper/factory.hxx>
-#include <comphelper/processfactory.hxx>
-#include <com/sun/star/container/XSet.hpp>
-#include <com/sun/star/lang/XSingleServiceFactory.hpp>
-#include "WinClipboard.hxx"
-
-#define WINCLIPBOARD_SERVICE_NAME "com.sun.star.datatransfer.clipboard.SystemClipboard"
-
-#define WINCLIPBOARD_IMPL_NAME "com.sun.star.datatransfer.clipboard.ClipboardW32"
-
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::registry;
-using namespace ::cppu;
-using namespace ::com::sun::star::lang;
-using namespace ::com::sun::star::datatransfer::clipboard;
-
-namespace
-{
-
- // functions to create a new Clipboard instance; is needed by factory helper implementation
- // @param rServiceManager - service manager, useful if the component needs other uno services
- // so we should give it to every UNO-Implementation component
-
- Reference< XInterface > createInstance( const Reference< XMultiServiceFactory >& rServiceManager )
- {
- return static_cast<XClipboard*>(
- new CWinClipboard(comphelper::getComponentContext(rServiceManager), ""));
- }
-}
-
-extern "C"
-{
-
-// component_getFactory
-// returns a factory to create XFilePicker-Services
-
-SAL_DLLPUBLIC_EXPORT void* sysdtrans_component_getFactory( const sal_Char* pImplName, void* pSrvManager, void* /*pRegistryKey*/ )
-{
- void* pRet = nullptr;
-
- if ( pSrvManager && ( 0 == rtl_str_compare( pImplName, WINCLIPBOARD_IMPL_NAME ) ) )
- {
- Sequence< OUString > aSNS { WINCLIPBOARD_SERVICE_NAME };
-
- //OUString( FPS_IMPL_NAME )
- Reference< XSingleServiceFactory > xFactory ( createOneInstanceFactory(
- static_cast< XMultiServiceFactory* > ( pSrvManager ),
- OUString::createFromAscii( pImplName ),
- createInstance,
- aSNS ) );
- if ( xFactory.is() )
- {
- xFactory->acquire();
- pRet = xFactory.get();
- }
- }
-
- return pRet;
-}
-
-} // extern "C"
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/dtrans/source/win32/dnd/dndentry.cxx b/dtrans/source/win32/dnd/dndentry.cxx
deleted file mode 100644
index 58ec08f45858..000000000000
--- a/dtrans/source/win32/dnd/dndentry.cxx
+++ /dev/null
@@ -1,88 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <cppuhelper/factory.hxx>
-#include <comphelper/processfactory.hxx>
-#include <com/sun/star/container/XSet.hpp>
-#include <com/sun/star/lang/XSingleServiceFactory.hpp>
-
-#include "source.hxx"
-#include "target.hxx"
-
-using namespace ::com::sun::star::uno ;
-using namespace ::com::sun::star::registry ;
-using namespace ::cppu ;
-using namespace ::com::sun::star::lang;
-
-static Reference< XInterface > createDragSource( const Reference< XMultiServiceFactory >& rServiceManager )
-{
- DragSource* pSource= new DragSource( comphelper::getComponentContext(rServiceManager) );
- return Reference<XInterface>( static_cast<XInitialization*>(pSource), UNO_QUERY);
-}
-
-static Reference< XInterface > createDropTarget( const Reference< XMultiServiceFactory >& rServiceManager )
-{
- DropTarget* pTarget= new DropTarget( comphelper::getComponentContext(rServiceManager) );
- return Reference<XInterface>( static_cast<XInitialization*>(pTarget), UNO_QUERY);
-}
-
-extern "C"
-{
-
-SAL_DLLPUBLIC_EXPORT void*
-dnd_component_getFactory( const sal_Char* pImplName, void* pSrvManager, void* /*pRegistryKey*/ )
-{
- void* pRet = nullptr;
- Reference< XSingleServiceFactory > xFactory;
-
- if ( pSrvManager && ( 0 == rtl_str_compare( pImplName, DNDSOURCE_IMPL_NAME ) ) )
- {
- Sequence< OUString > aSNS { DNDSOURCE_SERVICE_NAME };
-
- xFactory= createSingleFactory(
- static_cast< XMultiServiceFactory* > ( pSrvManager ),
- OUString::createFromAscii( pImplName ),
- createDragSource,
- aSNS);
-
- }
- else if( pSrvManager && ( 0 == rtl_str_compare( pImplName, DNDTARGET_IMPL_NAME ) ) )
- {
- Sequence< OUString > aSNS { DNDTARGET_SERVICE_NAME };
-
- xFactory= createSingleFactory(
- static_cast< XMultiServiceFactory* > ( pSrvManager ),
- OUString::createFromAscii( pImplName ),
- createDropTarget,
- aSNS);
-
- }
-
- if ( xFactory.is() )
- {
- xFactory->acquire();
- pRet = xFactory.get();
- }
-
- return pRet;
-}
-
-} // extern "C"
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/dtrans/source/win32/ftransl/ftranslentry.cxx b/dtrans/source/win32/ftransl/ftranslentry.cxx
deleted file mode 100644
index cdcfda46b10c..000000000000
--- a/dtrans/source/win32/ftransl/ftranslentry.cxx
+++ /dev/null
@@ -1,79 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <cppuhelper/factory.hxx>
-#include <comphelper/processfactory.hxx>
-#include <com/sun/star/container/XSet.hpp>
-#include <com/sun/star/lang/XSingleServiceFactory.hpp>
-
-#include <com/sun/star/datatransfer/XDataFormatTranslator.hpp>
-#include "ftransl.hxx"
-
-#define SERVICE_NAME "com.sun.star.datatransfer.DataFormatTranslator"
-
-#define IMPL_NAME "com.sun.star.datatransfer.DataFormatTranslator"
-
-using namespace ::cppu;
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::registry;
-using namespace ::com::sun::star::lang;
-using namespace ::com::sun::star::datatransfer;
-
-namespace
-{
-
- // functions to create a new Clipboard instance; is needed by factory helper implementation
- // @param rServiceManager - service manager, useful if the component needs other uno services
- // so we should give it to every UNO-Implementation component
-
- Reference< XInterface > createInstance( const Reference< XMultiServiceFactory >& rServiceManager )
- {
- return Reference< XInterface >( static_cast< XDataFormatTranslator* >( new CDataFormatTranslatorUNO( comphelper::getComponentContext(rServiceManager) ) ) );
- }
-}
-
-extern "C"
-{
-
-SAL_DLLPUBLIC_EXPORT void* ftransl_component_getFactory( const sal_Char* pImplName, void* pSrvManager, void* /*pRegistryKey*/ )
-{
- void* pRet = nullptr;
-
- if ( pSrvManager && ( 0 == rtl_str_compare( pImplName, IMPL_NAME ) ) )
- {
- Sequence< OUString > aSNS { SERVICE_NAME };
-
- Reference< XSingleServiceFactory > xFactory ( createOneInstanceFactory(
- static_cast< XMultiServiceFactory* > ( pSrvManager ),
- OUString::createFromAscii( pImplName ),
- createInstance,
- aSNS ) );
- if ( xFactory.is() )
- {
- xFactory->acquire();
- pRet = xFactory.get();
- }
- }
-
- return pRet;
-}
-
-} // extern "C"
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/dtrans/util/dnd.component b/dtrans/util/dnd.component
deleted file mode 100644
index 2fdc916c514a..000000000000
--- a/dtrans/util/dnd.component
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- -->
-
-<component loader="com.sun.star.loader.SharedLibrary" environment="@CPPU_ENV@"
- prefix="dnd" xmlns="http://openoffice.org/2010/uno-components">
- <implementation name="com.sun.star.comp.datatransfer.dnd.OleDragSource_V1">
- <service name="com.sun.star.datatransfer.dnd.OleDragSource"/>
- </implementation>
- <implementation name="com.sun.star.comp.datatransfer.dnd.OleDropTarget_V1">
- <service name="com.sun.star.datatransfer.dnd.OleDropTarget"/>
- </implementation>
-</component>
diff --git a/dtrans/util/ftransl.component b/dtrans/util/ftransl.component
deleted file mode 100644
index b1fe4b006460..000000000000
--- a/dtrans/util/ftransl.component
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- -->
-
-<component loader="com.sun.star.loader.SharedLibrary" environment="@CPPU_ENV@"
- prefix="ftransl" xmlns="http://openoffice.org/2010/uno-components">
- <implementation name="com.sun.star.datatransfer.DataFormatTranslator">
- <service name="com.sun.star.datatransfer.DataFormatTranslator"/>
- </implementation>
-</component>
diff --git a/dtrans/util/sysdtrans.component b/dtrans/util/sysdtrans.component
deleted file mode 100644
index 6551a964684b..000000000000
--- a/dtrans/util/sysdtrans.component
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- -->
-
-<component loader="com.sun.star.loader.SharedLibrary" environment="@CPPU_ENV@"
- prefix="sysdtrans" xmlns="http://openoffice.org/2010/uno-components">
- <implementation name="com.sun.star.datatransfer.clipboard.ClipboardW32">
- <service name="com.sun.star.datatransfer.clipboard.SystemClipboard"/>
- </implementation>
-</component>
diff --git a/editeng/inc/editattr.hxx b/editeng/inc/editattr.hxx
index 2b74427f6619..ac38200c4b11 100644
--- a/editeng/inc/editattr.hxx
+++ b/editeng/inc/editattr.hxx
@@ -25,6 +25,7 @@
#include <boost/optional.hpp>
#include <tools/color.hxx>
#include <tools/debug.hxx>
+#include <tools/fontenum.hxx>
class SvxFont;
class SvxFontItem;
@@ -366,6 +367,7 @@ class EditCharAttribField: public EditCharAttrib
OUString aFieldValue;
boost::optional<Color> mxTxtColor;
boost::optional<Color> mxFldColor;
+ boost::optional<FontLineStyle> mxFldLineStyle;
EditCharAttribField& operator = ( const EditCharAttribField& rAttr ) = delete;
@@ -381,6 +383,7 @@ public:
virtual void SetFont( SvxFont& rFont, OutputDevice* pOutDev ) override;
boost::optional<Color>& GetTextColor() { return mxTxtColor; }
boost::optional<Color>& GetFieldColor() { return mxFldColor; }
+ boost::optional<FontLineStyle>& GetFldLineStyle() { return mxFldLineStyle; }
const OUString& GetFieldValue() const { return aFieldValue;}
void SetFieldValue(const OUString& rVal);
diff --git a/editeng/qa/unit/core-test.cxx b/editeng/qa/unit/core-test.cxx
index e832dffd39d6..1e1ffca916bf 100644
--- a/editeng/qa/unit/core-test.cxx
+++ b/editeng/qa/unit/core-test.cxx
@@ -813,7 +813,7 @@ class UrlEditEngine : public EditEngine
public:
explicit UrlEditEngine(SfxItemPool *pPool) : EditEngine(pPool) {}
- virtual OUString CalcFieldValue( const SvxFieldItem&, sal_Int32, sal_Int32, boost::optional<Color>&, boost::optional<Color>& ) override
+ virtual OUString CalcFieldValue( const SvxFieldItem&, sal_Int32, sal_Int32, boost::optional<Color>&, boost::optional<Color>&, boost::optional<FontLineStyle>& ) override
{
return "jim@bob.com"; // a sophisticated view of value:
}
diff --git a/editeng/source/accessibility/AccessibleEditableTextPara.cxx b/editeng/source/accessibility/AccessibleEditableTextPara.cxx
index c68c79ebea8f..c87071b97324 100644
--- a/editeng/source/accessibility/AccessibleEditableTextPara.cxx
+++ b/editeng/source/accessibility/AccessibleEditableTextPara.cxx
@@ -1527,8 +1527,7 @@ namespace accessibility
// NumberingLevel
if (rRes.Name == "NumberingLevel")
{
- const SvxNumBulletItem& rNumBullet = rCacheTF.GetParaAttribs(GetParagraphIndex()).Get(EE_PARA_NUMBULLET);
- if(rNumBullet.GetNumRule()->GetLevelCount()==0)
+ if(rCacheTF.GetParaAttribs(GetParagraphIndex()).Get(EE_PARA_NUMBULLET).GetNumRule()->GetLevelCount()==0)
{
rRes.Value <<= sal_Int16(-1);
rRes.Handle = -1;
diff --git a/editeng/source/editeng/editattr.cxx b/editeng/source/editeng/editattr.cxx
index 41b6a0db9bcd..0e8e71b1a6c4 100644
--- a/editeng/source/editeng/editattr.cxx
+++ b/editeng/source/editeng/editattr.cxx
@@ -352,6 +352,8 @@ void EditCharAttribField::SetFont( SvxFont& rFont, OutputDevice* )
}
if ( mxTxtColor )
rFont.SetColor( *mxTxtColor );
+ if ( mxFldLineStyle )
+ rFont.SetUnderline( *mxFldLineStyle );
}
@@ -365,6 +367,7 @@ void EditCharAttribField::Reset()
aFieldValue.clear();
mxTxtColor.reset();
mxFldColor.reset();
+ mxFldLineStyle.reset();
}
EditCharAttribField::EditCharAttribField( const EditCharAttribField& rAttr )
@@ -374,6 +377,7 @@ EditCharAttribField::EditCharAttribField( const EditCharAttribField& rAttr )
// Use this constructor only for temporary Objects, Item is not pooled.
mxTxtColor = rAttr.mxTxtColor;
mxFldColor = rAttr.mxFldColor;
+ mxFldLineStyle = rAttr.mxFldLineStyle;
}
EditCharAttribField::~EditCharAttribField()
@@ -396,6 +400,11 @@ bool EditCharAttribField::operator == ( const EditCharAttribField& rAttr ) const
if ( ( mxFldColor && rAttr.mxFldColor ) && ( *mxFldColor != *rAttr.mxFldColor ) )
return false;
+ if ( ( mxFldLineStyle && !rAttr.mxFldLineStyle ) || ( !mxFldLineStyle && rAttr.mxFldLineStyle ) )
+ return false;
+ if ( ( mxFldLineStyle && rAttr.mxFldLineStyle ) && ( *mxFldLineStyle != *rAttr.mxFldLineStyle ) )
+ return false;
+
return true;
}
diff --git a/editeng/source/editeng/editeng.cxx b/editeng/source/editeng/editeng.cxx
index 2b600871c27d..ed88a647d3dc 100644
--- a/editeng/source/editeng/editeng.cxx
+++ b/editeng/source/editeng/editeng.cxx
@@ -2562,7 +2562,7 @@ tools::Rectangle EditEngine::GetBulletArea( sal_Int32 )
return tools::Rectangle( Point(), Point() );
}
-OUString EditEngine::CalcFieldValue( const SvxFieldItem&, sal_Int32, sal_Int32, boost::optional<Color>&, boost::optional<Color>& )
+OUString EditEngine::CalcFieldValue( const SvxFieldItem&, sal_Int32, sal_Int32, boost::optional<Color>&, boost::optional<Color>&, boost::optional<FontLineStyle>& )
{
return OUString(' ');
}
diff --git a/editeng/source/editeng/impedit2.cxx b/editeng/source/editeng/impedit2.cxx
index dc1730a72a94..e5592c58a128 100644
--- a/editeng/source/editeng/impedit2.cxx
+++ b/editeng/source/editeng/impedit2.cxx
@@ -47,6 +47,7 @@
#include <editeng/frmdiritem.hxx>
#include <editeng/fontitem.hxx>
#include <editeng/justifyitem.hxx>
+#include <editeng/udlnitem.hxx>
#include <com/sun/star/i18n/CharacterIteratorMode.hpp>
#include <com/sun/star/i18n/WordType.hpp>
@@ -2998,7 +2999,7 @@ bool ImpEditEngine::UpdateFields()
if (!aStatus.MarkNonUrlFields() && !aStatus.MarkUrlFields())
; // nothing marked
else if (aStatus.MarkNonUrlFields() && aStatus.MarkUrlFields())
- rField.GetFieldColor() = GetColorConfig().GetColorValue( svtools::WRITERFIELDSHADINGS ).nColor;
+ rField.GetFieldColor() = GetColorConfig().GetColorValue(svtools::WRITERFIELDSHADINGS).nColor;
else
{
bool bURL = false;
@@ -3014,7 +3015,7 @@ bool ImpEditEngine::UpdateFields()
const OUString aFldValue =
GetEditEnginePtr()->CalcFieldValue(
static_cast<const SvxFieldItem&>(*rField.GetItem()),
- nPara, rField.GetStart(), rField.GetTextColor(), rField.GetFieldColor());
+ nPara, rField.GetStart(), rField.GetTextColor(), rField.GetFieldColor(), rField.GetFldLineStyle() );
rField.SetFieldValue(aFldValue);
if (rField != *pCurrent)
diff --git a/editeng/source/outliner/outleeng.cxx b/editeng/source/outliner/outleeng.cxx
index eb9881e89efd..44ad1827a266 100644
--- a/editeng/source/outliner/outleeng.cxx
+++ b/editeng/source/outliner/outleeng.cxx
@@ -169,9 +169,9 @@ void OutlinerEditEng::DrawingTab( const Point& rStartPos, long nWidth, const OUS
bEndOfLine, bEndOfParagraph, rOverlineColor, rTextLineColor );
}
-OUString OutlinerEditEng::CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rpTxtColor, boost::optional<Color>& rpFldColor )
+OUString OutlinerEditEng::CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rpTxtColor, boost::optional<Color>& rpFldColor, boost::optional<FontLineStyle>& rpFldLineStyle )
{
- return pOwner->CalcFieldValue( rField, nPara, nPos, rpTxtColor, rpFldColor );
+ return pOwner->CalcFieldValue( rField, nPara, nPos, rpTxtColor, rpFldColor, rpFldLineStyle );
}
void OutlinerEditEng::SetParaAttribs( sal_Int32 nPara, const SfxItemSet& rSet )
diff --git a/editeng/source/outliner/outleeng.hxx b/editeng/source/outliner/outleeng.hxx
index 5110d8be28ef..299953dc0a87 100644
--- a/editeng/source/outliner/outleeng.hxx
+++ b/editeng/source/outliner/outleeng.hxx
@@ -71,7 +71,7 @@ public:
// for text conversion
virtual bool ConvertNextDocument() override;
- virtual OUString CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rTxtColor, boost::optional<Color>& rFldColor ) override;
+ virtual OUString CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rTxtColor, boost::optional<Color>& rFldColor, boost::optional<FontLineStyle>& rFldLineStyle ) override;
virtual tools::Rectangle GetBulletArea( sal_Int32 nPara ) override;
diff --git a/editeng/source/outliner/outliner.cxx b/editeng/source/outliner/outliner.cxx
index 16a3833eeea2..89c031690b91 100644
--- a/editeng/source/outliner/outliner.cxx
+++ b/editeng/source/outliner/outliner.cxx
@@ -648,7 +648,7 @@ void Outliner::AddText( const OutlinerParaObject& rPObj, bool bAppend )
pEditEngine->SetUpdateMode( bUpdate );
}
-OUString Outliner::CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rpTxtColor, boost::optional<Color>& rpFldColor )
+OUString Outliner::CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rpTxtColor, boost::optional<Color>& rpFldColor, boost::optional<FontLineStyle>& rpFldLineStyle )
{
if ( !aCalcFieldValueHdl.IsSet() )
return OUString( ' ' );
@@ -664,6 +664,11 @@ OUString Outliner::CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara,
rpTxtColor = *aFldInfo.GetTextColor();
}
+ if ( aFldInfo.GetFontLineStyle() )
+ {
+ rpFldLineStyle = *aFldInfo.GetFontLineStyle();
+ }
+
if (aFldInfo.GetFieldColor())
rpFldColor = *aFldInfo.GetFieldColor();
else
diff --git a/editeng/source/uno/unoedprx.cxx b/editeng/source/uno/unoedprx.cxx
index 915fe7193eaa..d62f380dd6f0 100644
--- a/editeng/source/uno/unoedprx.cxx
+++ b/editeng/source/uno/unoedprx.cxx
@@ -615,11 +615,11 @@ SfxItemPool* SvxAccessibleTextAdapter::GetPool() const
return mpTextForwarder->GetPool();
}
-OUString SvxAccessibleTextAdapter::CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rpTxtColor, boost::optional<Color>& rpFldColor )
+OUString SvxAccessibleTextAdapter::CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rpTxtColor, boost::optional<Color>& rpFldColor, boost::optional<FontLineStyle>& rpFldLineStyle )
{
assert(mpTextForwarder && "SvxAccessibleTextAdapter: no forwarder");
- return mpTextForwarder->CalcFieldValue( rField, nPara, nPos, rpTxtColor, rpFldColor );
+ return mpTextForwarder->CalcFieldValue( rField, nPara, nPos, rpTxtColor, rpFldColor, rpFldLineStyle );
}
void SvxAccessibleTextAdapter::FieldClicked( const SvxFieldItem& rField )
diff --git a/editeng/source/uno/unofored.cxx b/editeng/source/uno/unofored.cxx
index 73a49039fa3d..f368ff454f4b 100644
--- a/editeng/source/uno/unofored.cxx
+++ b/editeng/source/uno/unofored.cxx
@@ -153,9 +153,9 @@ bool SvxEditEngineForwarder::IsValid() const
return rEditEngine.GetUpdateMode();
}
-OUString SvxEditEngineForwarder::CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rpTxtColor, boost::optional<Color>& rpFldColor )
+OUString SvxEditEngineForwarder::CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rpTxtColor, boost::optional<Color>& rpFldColor, boost::optional<FontLineStyle>& rpFldLineStyle )
{
- return rEditEngine.CalcFieldValue( rField, nPara, nPos, rpTxtColor, rpFldColor );
+ return rEditEngine.CalcFieldValue( rField, nPara, nPos, rpTxtColor, rpFldColor, rpFldLineStyle );
}
void SvxEditEngineForwarder::FieldClicked( const SvxFieldItem& rField )
diff --git a/editeng/source/uno/unoforou.cxx b/editeng/source/uno/unoforou.cxx
index b9abddf04455..0738b4eec461 100644
--- a/editeng/source/uno/unoforou.cxx
+++ b/editeng/source/uno/unoforou.cxx
@@ -220,9 +220,9 @@ void SvxOutlinerForwarder::QuickSetAttribs( const SfxItemSet& rSet, const ESelec
rOutliner.QuickSetAttribs( rSet, rSel );
}
-OUString SvxOutlinerForwarder::CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rpTxtColor, boost::optional<Color>& rpFldColor )
+OUString SvxOutlinerForwarder::CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rpTxtColor, boost::optional<Color>& rpFldColor, boost::optional<FontLineStyle>& rpFldLineStyle )
{
- return rOutliner.CalcFieldValue( rField, nPara, nPos, rpTxtColor, rpFldColor );
+ return rOutliner.CalcFieldValue( rField, nPara, nPos, rpTxtColor, rpFldColor, rpFldLineStyle );
}
void SvxOutlinerForwarder::FieldClicked( const SvxFieldItem& /*rField*/ )
diff --git a/editeng/source/uno/unotext.cxx b/editeng/source/uno/unotext.cxx
index 4796732b2c74..3a5f5510f57a 100644
--- a/editeng/source/uno/unotext.cxx
+++ b/editeng/source/uno/unotext.cxx
@@ -635,9 +635,10 @@ void SvxUnoTextRangeBase::getPropertyValue( const SfxItemPropertySimpleEntry* pM
// get presentation string for field
boost::optional<Color> pTColor;
boost::optional<Color> pFColor;
+ boost::optional<FontLineStyle> pFldLineStyle;
SvxTextForwarder* pForwarder = mpEditSource->GetTextForwarder();
- OUString aPresentation( pForwarder->CalcFieldValue( SvxFieldItem(*pData, EE_FEATURE_FIELD), maSelection.nStartPara, maSelection.nStartPos, pTColor, pFColor ) );
+ OUString aPresentation( pForwarder->CalcFieldValue( SvxFieldItem(*pData, EE_FEATURE_FIELD), maSelection.nStartPara, maSelection.nStartPos, pTColor, pFColor, pFldLineStyle ) );
uno::Reference< text::XTextField > xField( new SvxUnoTextField( xAnchor, aPresentation, pData ) );
rAny <<= xField;
@@ -2358,7 +2359,7 @@ void SvxDummyTextSource::QuickInsertLineBreak( const ESelection& )
{
};
-OUString SvxDummyTextSource::CalcFieldValue( const SvxFieldItem&, sal_Int32, sal_Int32, boost::optional<Color>&, boost::optional<Color>& )
+OUString SvxDummyTextSource::CalcFieldValue( const SvxFieldItem&, sal_Int32, sal_Int32, boost::optional<Color>&, boost::optional<Color>&, boost::optional<FontLineStyle>& )
{
return OUString();
}
diff --git a/embeddedobj/source/commonembedding/embedobj.cxx b/embeddedobj/source/commonembedding/embedobj.cxx
index e6e5bec2a316..b402dff22042 100644
--- a/embeddedobj/source/commonembedding/embedobj.cxx
+++ b/embeddedobj/source/commonembedding/embedobj.cxx
@@ -155,6 +155,37 @@ void OCommonEmbeddedObject::StateChangeNotification_Impl( bool bBeforeChange, sa
}
}
+void OCommonEmbeddedObject::SetInplaceActiveState()
+{
+ if ( !m_xClientSite.is() )
+ throw embed::WrongStateException( "client site not set, yet", *this );
+
+ uno::Reference< embed::XInplaceClient > xInplaceClient( m_xClientSite, uno::UNO_QUERY );
+ if ( !xInplaceClient.is() || !xInplaceClient->canInplaceActivate() )
+ throw embed::WrongStateException(); //TODO: can't activate inplace
+ xInplaceClient->activatingInplace();
+
+ uno::Reference< embed::XWindowSupplier > xClientWindowSupplier( xInplaceClient, uno::UNO_QUERY_THROW );
+
+ m_xClientWindow = xClientWindowSupplier->getWindow();
+ m_aOwnRectangle = xInplaceClient->getPlacement();
+ m_aClipRectangle = xInplaceClient->getClipRectangle();
+ awt::Rectangle aRectangleToShow = GetRectangleInterception( m_aOwnRectangle, m_aClipRectangle );
+
+ // create own window based on the client window
+ // place and resize the window according to the rectangles
+ uno::Reference< awt::XWindowPeer > xClientWindowPeer( m_xClientWindow, uno::UNO_QUERY_THROW );
+
+ // dispatch provider may not be provided
+ uno::Reference< frame::XDispatchProvider > xContainerDP = xInplaceClient->getInplaceDispatchProvider();
+ bool bOk = m_xDocHolder->ShowInplace( xClientWindowPeer, aRectangleToShow, xContainerDP );
+ m_nObjectState = embed::EmbedStates::INPLACE_ACTIVE;
+ if ( !bOk )
+ {
+ SwitchStateTo_Impl( embed::EmbedStates::RUNNING );
+ throw embed::WrongStateException(); //TODO: can't activate inplace
+ }
+}
void OCommonEmbeddedObject::SwitchStateTo_Impl( sal_Int32 nNextState )
{
@@ -228,34 +259,7 @@ void OCommonEmbeddedObject::SwitchStateTo_Impl( sal_Int32 nNextState )
{
if ( nNextState == embed::EmbedStates::INPLACE_ACTIVE )
{
- if ( !m_xClientSite.is() )
- throw embed::WrongStateException( "client site not set, yet", *this );
-
- uno::Reference< embed::XInplaceClient > xInplaceClient( m_xClientSite, uno::UNO_QUERY );
- if ( !xInplaceClient.is() || !xInplaceClient->canInplaceActivate() )
- throw embed::WrongStateException(); //TODO: can't activate inplace
- xInplaceClient->activatingInplace();
-
- uno::Reference< embed::XWindowSupplier > xClientWindowSupplier( xInplaceClient, uno::UNO_QUERY_THROW );
-
- m_xClientWindow = xClientWindowSupplier->getWindow();
- m_aOwnRectangle = xInplaceClient->getPlacement();
- m_aClipRectangle = xInplaceClient->getClipRectangle();
- awt::Rectangle aRectangleToShow = GetRectangleInterception( m_aOwnRectangle, m_aClipRectangle );
-
- // create own window based on the client window
- // place and resize the window according to the rectangles
- uno::Reference< awt::XWindowPeer > xClientWindowPeer( m_xClientWindow, uno::UNO_QUERY_THROW );
-
- // dispatch provider may not be provided
- uno::Reference< frame::XDispatchProvider > xContainerDP = xInplaceClient->getInplaceDispatchProvider();
- bool bOk = m_xDocHolder->ShowInplace( xClientWindowPeer, aRectangleToShow, xContainerDP );
- m_nObjectState = nNextState;
- if ( !bOk )
- {
- SwitchStateTo_Impl( embed::EmbedStates::RUNNING );
- throw embed::WrongStateException(); //TODO: can't activate inplace
- }
+ SetInplaceActiveState();
}
else if ( nNextState == embed::EmbedStates::ACTIVE )
{
diff --git a/embeddedobj/source/commonembedding/persistence.cxx b/embeddedobj/source/commonembedding/persistence.cxx
index f162dfef5f31..f5444e16481a 100644
--- a/embeddedobj/source/commonembedding/persistence.cxx
+++ b/embeddedobj/source/commonembedding/persistence.cxx
@@ -51,10 +51,11 @@
#include <comphelper/storagehelper.hxx>
#include <comphelper/mimeconfighelper.hxx>
#include <comphelper/namedvaluecollection.hxx>
+#include <unotools/configmgr.hxx>
+#include <unotools/securityoptions.hxx>
#include <tools/diagnose_ex.h>
#include <sal/log.hxx>
-#include <unotools/configmgr.hxx>
#include "persistence.hxx"
using namespace ::com::sun::star;
@@ -75,7 +76,7 @@ uno::Sequence< beans::PropertyValue > GetValuableArgs_Impl( const uno::Sequence<
|| aMedDescr[nInd].Name == "StartPresentation" || aMedDescr[nInd].Name == "RepairPackage"
|| aMedDescr[nInd].Name == "StatusIndicator" || aMedDescr[nInd].Name == "ViewData"
|| aMedDescr[nInd].Name == "ViewId" || aMedDescr[nInd].Name == "MacroExecutionMode"
- || aMedDescr[nInd].Name == "UpdateDocMode"
+ || aMedDescr[nInd].Name == "UpdateDocMode" || aMedDescr[nInd].Name == "Referer"
|| (aMedDescr[nInd].Name == "DocumentBaseURL" && bCanUseDocumentBaseURL) )
{
aResult.realloc( ++nResLen );
@@ -359,20 +360,15 @@ uno::Reference< util::XCloseable > OCommonEmbeddedObject::InitNewDocument_Impl()
return xDocument;
}
-
uno::Reference< util::XCloseable > OCommonEmbeddedObject::LoadLink_Impl()
{
- uno::Reference< util::XCloseable > xDocument( CreateDocument( m_xContext, GetDocumentServiceName(),
- m_bEmbeddedScriptSupport, m_bDocumentRecoverySupport ) );
-
- uno::Reference< frame::XLoadable > xLoadable( xDocument, uno::UNO_QUERY_THROW );
-
sal_Int32 nLen = 2;
uno::Sequence< beans::PropertyValue > aArgs( nLen );
aArgs[0].Name = "URL";
aArgs[0].Value <<= m_aLinkURL;
aArgs[1].Name = "FilterName";
aArgs[1].Value <<= m_aLinkFilterName;
+
if ( m_bLinkHasPassword )
{
aArgs.realloc( ++nLen );
@@ -383,10 +379,22 @@ uno::Reference< util::XCloseable > OCommonEmbeddedObject::LoadLink_Impl()
aArgs.realloc( m_aDocMediaDescriptor.getLength() + nLen );
for ( sal_Int32 nInd = 0; nInd < m_aDocMediaDescriptor.getLength(); nInd++ )
{
+ // return early if this document is not trusted to open links
+ if (m_aDocMediaDescriptor[nInd].Name == "Referer")
+ {
+ OUString referer;
+ m_aDocMediaDescriptor[nInd].Value >>= referer;
+ if (SvtSecurityOptions().isUntrustedReferer(referer))
+ return nullptr;
+ }
aArgs[nInd+nLen].Name = m_aDocMediaDescriptor[nInd].Name;
aArgs[nInd+nLen].Value = m_aDocMediaDescriptor[nInd].Value;
}
+ uno::Reference< util::XCloseable > xDocument( CreateDocument( m_xContext, GetDocumentServiceName(),
+ m_bEmbeddedScriptSupport, m_bDocumentRecoverySupport ) );
+ uno::Reference< frame::XLoadable > xLoadable( xDocument, uno::UNO_QUERY_THROW );
+
try
{
// the document is not really an embedded one, it is a link
@@ -428,7 +436,6 @@ uno::Reference< util::XCloseable > OCommonEmbeddedObject::LoadLink_Impl()
}
-
OUString OCommonEmbeddedObject::GetFilterName( sal_Int32 nVersion ) const
{
OUString aFilterName = GetPresetFilterName();
diff --git a/embeddedobj/source/commonembedding/specialobject.cxx b/embeddedobj/source/commonembedding/specialobject.cxx
index 683fe0aab3f2..c17a39accf2c 100644
--- a/embeddedobj/source/commonembedding/specialobject.cxx
+++ b/embeddedobj/source/commonembedding/specialobject.cxx
@@ -47,6 +47,7 @@ uno::Any SAL_CALL OSpecialEmbeddedObject::queryInterface( const uno::Type& rType
uno::Any aReturn = ::cppu::queryInterface( rType,
static_cast< embed::XEmbeddedObject* >( this ),
static_cast< embed::XInplaceObject* >( this ),
+ static_cast< embed::XCommonEmbedPersist* >( static_cast< embed::XEmbedPersist* >( this ) ),
static_cast< embed::XVisualObject* >( this ),
static_cast< embed::XClassifiedObject* >( this ),
static_cast< embed::XComponentSupplier* >( this ),
@@ -160,4 +161,12 @@ void SAL_CALL OSpecialEmbeddedObject::doVerb( sal_Int32 nVerbID )
OCommonEmbeddedObject::doVerb( nVerbID );
}
+void SAL_CALL OSpecialEmbeddedObject::reload(
+ const uno::Sequence< beans::PropertyValue >&,
+ const uno::Sequence< beans::PropertyValue >&)
+{
+ // Allow IFrames to reload their content
+ SetInplaceActiveState();
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/embeddedobj/source/inc/commonembobj.hxx b/embeddedobj/source/inc/commonembobj.hxx
index b2c9acd9ec1e..73282a00deac 100644
--- a/embeddedobj/source/inc/commonembobj.hxx
+++ b/embeddedobj/source/inc/commonembobj.hxx
@@ -226,6 +226,9 @@ private:
const css::uno::Sequence< css::beans::PropertyValue >& lArguments,
const css::uno::Sequence< css::beans::PropertyValue >& lObjArgs );
+protected:
+ void SetInplaceActiveState();
+
public:
OCommonEmbeddedObject(
const css::uno::Reference< css::uno::XComponentContext >& rxContext,
diff --git a/embeddedobj/source/inc/specialobject.hxx b/embeddedobj/source/inc/specialobject.hxx
index 32ad61a7a582..4c4bc70db377 100644
--- a/embeddedobj/source/inc/specialobject.hxx
+++ b/embeddedobj/source/inc/specialobject.hxx
@@ -48,6 +48,13 @@ public:
virtual void SAL_CALL changeState( sal_Int32 nNewState ) override;
virtual void SAL_CALL doVerb( sal_Int32 nVerbID ) override;
+
+// XCommonEmbedPersist
+
+ virtual void SAL_CALL reload(
+ const css::uno::Sequence< css::beans::PropertyValue >& lArguments,
+ const css::uno::Sequence< css::beans::PropertyValue >& lObjArgs ) override;
+
};
#endif
diff --git a/external/breakpad/UnpackedTarball_breakpad.mk b/external/breakpad/UnpackedTarball_breakpad.mk
index af6f68053328..d69c83c936ce 100644
--- a/external/breakpad/UnpackedTarball_breakpad.mk
+++ b/external/breakpad/UnpackedTarball_breakpad.mk
@@ -26,6 +26,7 @@ $(eval $(call gb_UnpackedTarball_add_patches,breakpad,\
external/breakpad/0001-Fix-double-declaration-of-tgkill-when-using-Android-.patch.1 \
external/breakpad/c++20-allocator.patch \
external/breakpad/SIGSTKSZ.patch \
+ external/breakpad/include.patch \
))
ifeq ($(COM_IS_CLANG),TRUE)
diff --git a/external/breakpad/include.patch b/external/breakpad/include.patch
new file mode 100644
index 000000000000..e90ae9c11744
--- /dev/null
+++ b/external/breakpad/include.patch
@@ -0,0 +1,10 @@
+--- src/client/linux/handler/minidump_descriptor.h
++++ src/client/linux/handler/minidump_descriptor.h
+@@ -31,6 +31,7 @@
+ #define CLIENT_LINUX_HANDLER_MINIDUMP_DESCRIPTOR_H_
+
+ #include <assert.h>
++#include <stdint.h>
+ #include <sys/types.h>
+
+ #include <string>
diff --git a/external/ct2n/include.patch.0 b/external/ct2n/include.patch.0
new file mode 100644
index 000000000000..8852b533311d
--- /dev/null
+++ b/external/ct2n/include.patch.0
@@ -0,0 +1,10 @@
+--- core/src/textcodec/JPTextEncoder.cpp
++++ core/src/textcodec/JPTextEncoder.cpp
+@@ -36,6 +36,7 @@
+ // and the grateful thanks of the Qt team.
+
+ #include "JPTextEncoder.h"
++#include <stdint.h>
+
+ /*
+ * This data is derived from Unicode 1.1,
diff --git a/external/curl/2b0994c29a721c91c57.patch b/external/curl/2b0994c29a721c91c57.patch
new file mode 100644
index 000000000000..0bcc24c06aa5
--- /dev/null
+++ b/external/curl/2b0994c29a721c91c57.patch
@@ -0,0 +1,48 @@
+From 2b0994c29a721c91c572cff7808c572a24d251eb Mon Sep 17 00:00:00 2001
+From: Daniel Stenberg <daniel@haxx.se>
+Date: Thu, 23 Nov 2023 08:15:47 +0100
+Subject: [PATCH] cookie: lowercase the domain names before PSL checks
+
+Reported-by: Harry Sintonen
+
+Closes #12387
+---
+ lib/cookie.c | 24 ++++++++++++++++--------
+ 1 file changed, 16 insertions(+), 8 deletions(-)
+
+diff --git a/lib/cookie.c b/lib/cookie.c
+index 568cf537ad1b1..9095cea3e97f2 100644
+--- a/lib/cookie.c
++++ b/lib/cookie.c
+@@ -1027,15 +1027,23 @@ Curl_cookie_add(struct Curl_easy *data,
+ * dereference it.
+ */
+ if(data && (domain && co->domain && !Curl_host_is_ipnum(co->domain))) {
+- const psl_ctx_t *psl = Curl_psl_use(data);
+- int acceptable;
+-
+- if(psl) {
+- acceptable = psl_is_cookie_domain_acceptable(psl, domain, co->domain);
+- Curl_psl_release(data);
++ bool acceptable = FALSE;
++ char lcase[256];
++ char lcookie[256];
++ size_t dlen = strlen(domain);
++ size_t clen = strlen(co->domain);
++ if((dlen < sizeof(lcase)) && (clen < sizeof(lcookie))) {
++ const psl_ctx_t *psl = Curl_psl_use(data);
++ if(psl) {
++ /* the PSL check requires lowercase domain name and pattern */
++ Curl_strntolower(lcase, domain, dlen + 1);
++ Curl_strntolower(lcookie, co->domain, clen + 1);
++ acceptable = psl_is_cookie_domain_acceptable(psl, lcase, lcookie);
++ Curl_psl_release(data);
++ }
++ else
++ acceptable = !bad_domain(domain, strlen(domain));
+ }
+- else
+- acceptable = !bad_domain(domain, strlen(domain));
+
+ if(!acceptable) {
+ infof(data, "cookie '%s' dropped, domain '%s' must not "
diff --git a/external/curl/CVE-2023-38545_7.87.0.patch b/external/curl/CVE-2023-38545_7.87.0.patch
new file mode 100644
index 000000000000..c15c273ea41e
--- /dev/null
+++ b/external/curl/CVE-2023-38545_7.87.0.patch
@@ -0,0 +1,134 @@
+From 92fd36dd54de9ac845549944692eb33c5aee7343 Mon Sep 17 00:00:00 2001
+From: Jay Satiro <raysatiro@yahoo.com>
+Date: Mon, 9 Oct 2023 17:15:44 -0400
+Subject: [PATCH] socks: return error if hostname too long for remote resolve
+
+Prior to this change the state machine attempted to change the remote
+resolve to a local resolve if the hostname was longer than 255
+characters. Unfortunately that did not work as intended and caused a
+security issue.
+
+This patch applies to curl versions 7.87.0 - 8.1.2. Other versions
+that are affected take a different patch. Refer to the CVE advisory
+for more information.
+
+Bug: https://curl.se/docs/CVE-2023-38545.html
+---
+ lib/socks.c | 8 +++----
+ tests/data/Makefile.inc | 2 +-
+ tests/data/test728 | 64 +++++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 69 insertions(+), 5 deletions(-)
+ create mode 100644 tests/data/test728
+
+diff --git a/lib/socks.c b/lib/socks.c
+index d491e08..e7da5b4 100644
+--- a/lib/socks.c
++++ b/lib/socks.c
+@@ -539,9 +539,9 @@ static CURLproxycode do_SOCKS5(struct Curl_cfilter *cf,
+
+ /* RFC1928 chapter 5 specifies max 255 chars for domain name in packet */
+ if(!socks5_resolve_local && hostname_len > 255) {
+- infof(data, "SOCKS5: server resolving disabled for hostnames of "
+- "length > 255 [actual len=%zu]", hostname_len);
+- socks5_resolve_local = TRUE;
++ failf(data, "SOCKS5: the destination hostname is too long to be "
++ "resolved remotely by the proxy.");
++ return CURLPX_LONG_HOSTNAME;
+ }
+
+ if(auth & ~(CURLAUTH_BASIC | CURLAUTH_GSSAPI))
+@@ -882,7 +882,7 @@ static CURLproxycode do_SOCKS5(struct Curl_cfilter *cf,
+ }
+ else {
+ socksreq[len++] = 3;
+- socksreq[len++] = (char) hostname_len; /* one byte address length */
++ socksreq[len++] = (unsigned char) hostname_len; /* one byte length */
+ memcpy(&socksreq[len], sx->hostname, hostname_len); /* w/o NULL */
+ len += hostname_len;
+ }
+diff --git a/tests/data/Makefile.inc b/tests/data/Makefile.inc
+index 3e0221a..64b11de 100644
+--- a/tests/data/Makefile.inc
++++ b/tests/data/Makefile.inc
+@@ -99,7 +99,7 @@ test679 test680 test681 test682 test683 test684 test685 \
+ \
+ test700 test701 test702 test703 test704 test705 test706 test707 test708 \
+ test709 test710 test711 test712 test713 test714 test715 test716 test717 \
+-test718 test719 test720 test721 \
++test718 test719 test720 test721 test728 \
+ \
+ test800 test801 test802 test803 test804 test805 test806 test807 test808 \
+ test809 test810 test811 test812 test813 test814 test815 test816 test817 \
+diff --git a/tests/data/test728 b/tests/data/test728
+new file mode 100644
+index 0000000..05bcf28
+--- /dev/null
++++ b/tests/data/test728
+@@ -0,0 +1,64 @@
++<testcase>
++<info>
++<keywords>
++HTTP
++HTTP GET
++SOCKS5
++SOCKS5h
++followlocation
++</keywords>
++</info>
++
++#
++# Server-side
++<reply>
++# The hostname in this redirect is 256 characters and too long (> 255) for
++# SOCKS5 remote resolve. curl must return error CURLE_PROXY in this case.
++<data>
++HTTP/1.1 301 Moved Permanently
++Location: http://AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/
++Content-Length: 0
++Connection: close
++
++</data>
++</reply>
++
++#
++# Client-side
++<client>
++<features>
++proxy
++</features>
++<server>
++http
++socks5
++</server>
++ <name>
++SOCKS5h with HTTP redirect to hostname too long
++ </name>
++ <command>
++--no-progress-meter --location --proxy socks5h://%HOSTIP:%SOCKSPORT http://%HOSTIP:%HTTPPORT/%TESTNUMBER
++</command>
++</client>
++
++#
++# Verify data after the test has been "shot"
++<verify>
++<protocol crlf="yes">
++GET /%TESTNUMBER HTTP/1.1
++Host: %HOSTIP:%HTTPPORT
++User-Agent: curl/%VERSION
++Accept: */*
++
++</protocol>
++<errorcode>
++97
++</errorcode>
++# the error message is verified because error code CURLE_PROXY (97) may be
++# returned for any number of reasons and we need to make sure it is
++# specifically for the reason below so that we know the check is working.
++<stderr mode="text">
++curl: (97) SOCKS5: the destination hostname is too long to be resolved remotely by the proxy.
++</stderr>
++</verify>
++</testcase>
+--
+2.7.4
+
diff --git a/external/curl/ExternalProject_curl.mk b/external/curl/ExternalProject_curl.mk
index b4ab0b88e55d..43bb1cad0b93 100644
--- a/external/curl/ExternalProject_curl.mk
+++ b/external/curl/ExternalProject_curl.mk
@@ -43,7 +43,7 @@ $(call gb_ExternalProject_get_state_target,curl,build):
$(if $(filter iOS MACOSX,$(OS)),\
--with-secure-transport,\
$(if $(ENABLE_NSS),--with-nss$(if $(SYSTEM_NSS),,="$(call gb_UnpackedTarball_get_dir,nss)/dist/out") --with-nss-deprecated,--without-nss)) \
- --without-ssl --without-gnutls --without-polarssl --without-cyassl --without-axtls --without-mbedtls \
+ --without-openssl --without-gnutls --without-polarssl --without-cyassl --without-axtls --without-mbedtls \
--enable-ftp --enable-http --enable-ipv6 \
--without-libidn2 --without-libpsl --without-librtmp \
--without-libssh2 --without-metalink --without-nghttp2 \
diff --git a/external/curl/UnpackedTarball_curl.mk b/external/curl/UnpackedTarball_curl.mk
index 76c8cc34de38..258332bf3ba5 100644
--- a/external/curl/UnpackedTarball_curl.mk
+++ b/external/curl/UnpackedTarball_curl.mk
@@ -23,6 +23,8 @@ $(eval $(call gb_UnpackedTarball_add_patches,curl,\
external/curl/curl-msvc-disable-protocols.patch.1 \
external/curl/curl-7.26.0_win-proxy.patch \
external/curl/zlib.patch.0 \
+ external/curl/CVE-2023-38545_7.87.0.patch \
+ external/curl/2b0994c29a721c91c57.patch \
))
ifeq ($(SYSTEM_NSS),)
diff --git a/external/curl/clang-cl.patch.0 b/external/curl/clang-cl.patch.0
index 2fbb10c2a9aa..5dfb19d5ba59 100644
--- a/external/curl/clang-cl.patch.0
+++ b/external/curl/clang-cl.patch.0
@@ -1,6 +1,6 @@
--- winbuild/MakefileBuild.vc
+++ winbuild/MakefileBuild.vc
-@@ -60,7 +60,7 @@
+@@ -52,7 +52,7 @@
!ELSE
CC_NODEBUG = $(CC) /O2 /DNDEBUG
CC_DEBUG = $(CC) /Od /D_DEBUG /RTC1 /Z7 /LDd
diff --git a/external/curl/curl-7.26.0_win-proxy.patch b/external/curl/curl-7.26.0_win-proxy.patch
index 1c5469a35479..62016a70e8a0 100644
--- a/external/curl/curl-7.26.0_win-proxy.patch
+++ b/external/curl/curl-7.26.0_win-proxy.patch
@@ -12,18 +12,18 @@
--- curl-7.26.0/lib/url.c
+++ misc/build/curl-7.26.0/lib/url.c
@@ -78,6 +78,10 @@
- bool curl_win32_idn_to_ascii(const char *in, char **out);
- #endif /* USE_LIBIDN2 */
+
+ #include <limits.h>
+#ifdef _WIN32
+#include <WinHttp.h>
+#endif
+
+ #include "doh.h"
#include "urldata.h"
#include "netrc.h"
-
@@ -4586,6 +4590,21 @@
- }
+ #ifndef CURL_DISABLE_PROXY
#ifndef CURL_DISABLE_HTTP
+#ifdef _WIN32
@@ -44,7 +44,7 @@
/****************************************************************
* Detect what (if any) proxy to use. Remember that this selects a host
* name and is not limited to HTTP proxies only.
-@@ -4613,6 +4633,66 @@
+@@ -4613,6 +4633,67 @@
* For compatibility, the all-uppercase versions of these variables are
* checked if the lowercase versions don't exist.
*/
@@ -58,6 +58,7 @@
+ char *ieProxy;
+ char *ieNoProxy;
+ char *pos;
++ bool spacesp;
+
+ ieProxy = wstrToCstr(ieProxyConfig->lpszProxy);
+ ieNoProxy = wstrToCstr(ieProxyConfig->lpszProxyBypass);
@@ -72,7 +73,7 @@
+ }
+ }
+
-+ if(!check_noproxy(conn->host.name, no_proxy)) {
++ if(!Curl_check_noproxy(conn->host.name, no_proxy, &spacesp)) {
+ /* Look for the http proxy setting */
+ char *tok;
+ char *saveptr;
diff --git a/external/curl/curl-msvc-disable-protocols.patch.1 b/external/curl/curl-msvc-disable-protocols.patch.1
index a6d06c69b004..71ff0c01a028 100644
--- a/external/curl/curl-msvc-disable-protocols.patch.1
+++ b/external/curl/curl-msvc-disable-protocols.patch.1
@@ -2,7 +2,7 @@ disable protocols nobody needs in MSVC build
--- curl/lib/config-win32.h.orig 2017-08-09 16:43:29.464000000 +0200
+++ curl/lib/config-win32.h 2017-08-09 16:47:38.549200000 +0200
-@@ -733,4 +733,20 @@
+@@ -654,4 +654,20 @@
# define ENABLE_IPV6 1
#endif
@@ -25,7 +25,7 @@ disable protocols nobody needs in MSVC build
#endif /* HEADER_CURL_CONFIG_WIN32_H */
--- curl/winbuild/MakefileBuild.vc.orig 2017-10-23 23:41:21.393200000 +0200
+++ curl/winbuild/MakefileBuild.vc 2017-10-23 23:34:16.028000000 +0200
-@@ -431,7 +431,7 @@
+@@ -562,7 +562,7 @@
EXE_OBJS = $(CURL_OBJS) $(CURL_DIROBJ)\curl.res
diff --git a/external/curl/curl-msvc-zlib.patch.1 b/external/curl/curl-msvc-zlib.patch.1
index 654303c21874..a9ee0013d50b 100644
--- a/external/curl/curl-msvc-zlib.patch.1
+++ b/external/curl/curl-msvc-zlib.patch.1
@@ -2,7 +2,7 @@ find internal zlib in nmake buildsystem
--- curl/winbuild/MakefileBuild.vc.orig2 2021-10-27 20:44:48.685237000 +0200
+++ curl/winbuild/MakefileBuild.vc 2021-10-27 20:47:23.792407400 +0200
-@@ -222,8 +222,9 @@
+@@ -244,8 +244,9 @@
ZLIB_LIB_DIR = $(ZLIB_PATH)\lib
ZLIB_LFLAGS = $(ZLIB_LFLAGS) "/LIBPATH:$(ZLIB_LIB_DIR)"
!ELSE
diff --git a/external/curl/curl-msvc.patch.1 b/external/curl/curl-msvc.patch.1
index a5b79a8e9c49..54ad026ec8c7 100644
--- a/external/curl/curl-msvc.patch.1
+++ b/external/curl/curl-msvc.patch.1
@@ -2,7 +2,7 @@ MSVC: using SOLARINC
--- curl/winbuild/MakefileBuild.vc.orig 2017-10-23 16:36:07.713550851 +0200
+++ curl/winbuild/MakefileBuild.vc 2017-10-23 16:38:19.301547594 +0200
-@@ -60,7 +60,7 @@
+@@ -52,7 +52,7 @@
!ELSE
CC_NODEBUG = $(CC) /O2 /DNDEBUG
CC_DEBUG = $(CC) /Od /D_DEBUG /RTC1 /Z7 /LDd
@@ -11,7 +11,7 @@ MSVC: using SOLARINC
!ENDIF
LFLAGS = /nologo /machine:$(MACHINE)
-@@ -300,11 +300,11 @@
+@@ -426,11 +426,11 @@
# CURL_XX macros are for the curl.exe command
!IF "$(DEBUG)"=="yes"
diff --git a/external/curl/curl-nss.patch.1 b/external/curl/curl-nss.patch.1
index d4dad7eba77e..2e8766b3d45f 100644
--- a/external/curl/curl-nss.patch.1
+++ b/external/curl/curl-nss.patch.1
@@ -1,12 +1,17 @@
diff -ur curl.org/configure curl/configure
---- curl.org/configure 2016-03-13 15:14:07.177000076 +0100
-+++ curl/configure 2016-03-13 15:16:44.132000076 +0100
-@@ -28216,7 +28216,7 @@
+--- curl.orig/configure 2023-02-20 16:11:55.000000000 +0900
++++ curl/configure 2023-02-23 15:40:58.617432471 +0900
+@@ -28675,7 +28675,12 @@
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Using hard-wired libraries and compilation flags for NSS." >&5
printf "%s\n" "$as_me: WARNING: Using hard-wired libraries and compilation flags for NSS." >&2;}
addld="-L$OPT_NSS/lib"
- addlib="-lssl3 -lsmime3 -lnss3 -lplds4 -lplc4 -lnspr4"
+ addlib="-lssl3 -lsmime3 -lnss3 -lplds4 -lplc4 -lnspr4 -lnssutil3"
++ case $host_os in
++ *android*)
++ addlib="${addlib} -llog"
++ ;;
++ esac
addcflags="-I$OPT_NSS/include"
version="unknown"
nssprefix=$OPT_NSS
diff --git a/external/curl/zlib.patch.0 b/external/curl/zlib.patch.0
index e0f579f8675a..b4442ba262d1 100644
--- a/external/curl/zlib.patch.0
+++ b/external/curl/zlib.patch.0
@@ -1,6 +1,6 @@
--- configure
+++ configure
-@@ -22699,7 +22699,6 @@
+@@ -23035,7 +23035,6 @@
clean_CPPFLAGS=$CPPFLAGS
clean_LDFLAGS=$LDFLAGS
clean_LIBS=$LIBS
@@ -8,7 +8,7 @@
# Check whether --with-zlib was given.
if test ${with_zlib+y}
-@@ -22709,6 +22708,7 @@
+@@ -23045,6 +23044,7 @@
if test "$OPT_ZLIB" = "no" ; then
@@ -16,7 +16,7 @@
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: zlib disabled" >&5
printf "%s\n" "$as_me: WARNING: zlib disabled" >&2;}
else
-@@ -22716,6 +22716,21 @@
+@@ -23052,6 +23052,21 @@
OPT_ZLIB=""
fi
@@ -38,7 +38,7 @@
if test -z "$OPT_ZLIB" ; then
if test -n "$PKG_CONFIG"; then
-@@ -23011,6 +23026,7 @@
+@@ -23344,6 +23359,7 @@
printf "%s\n" "$as_me: found both libz and libz.h header" >&6;}
curl_zlib_msg="enabled"
fi
@@ -48,7 +48,7 @@
if test x"$AMFIXLIB" = x1; then
--- configure.ac
+++ configure.ac
-@@ -880,19 +880,30 @@
+@@ -1243,19 +1243,30 @@
clean_CPPFLAGS=$CPPFLAGS
clean_LDFLAGS=$LDFLAGS
clean_LIBS=$LIBS
@@ -80,7 +80,7 @@
if test -z "$OPT_ZLIB" ; then
CURL_CHECK_PKGCONFIG(zlib)
-@@ -975,6 +986,7 @@
+@@ -1336,6 +1347,7 @@
AC_MSG_NOTICE([found both libz and libz.h header])
curl_zlib_msg="enabled"
fi
diff --git a/external/expat/0001-Fix-compiler-warnings.patch b/external/expat/0001-Fix-compiler-warnings.patch
new file mode 100644
index 000000000000..adec5ed0d9be
--- /dev/null
+++ b/external/expat/0001-Fix-compiler-warnings.patch
@@ -0,0 +1,47 @@
+From 3f60a47cb5716bb810789a12ef6024c1dc448164 Mon Sep 17 00:00:00 2001
+From: Taichi Haradaguchi <20001722@ymail.ne.jp>
+Date: Fri, 9 Feb 2024 19:28:35 +0900
+Subject: [PATCH] Fix compiler warnings
+
+> In file included from ./../lib/internal.h:149,
+> from codepage.c:38:
+> ./../lib/expat.h:1045:5: warning: "XML_GE" is not defined, evaluates to 0 [-Wundef]
+> 1045 | #if XML_GE == 1
+> | ^~~~~~
+> ./../lib/internal.h:158:5: warning: "XML_GE" is not defined, evaluates to 0 [-Wundef]
+> 158 | #if XML_GE == 1
+> | ^~~~~~
+---
+ expat/lib/expat.h | 2 +-
+ expat/lib/internal.h | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/expat/lib/expat.h b/expat/lib/expat.h
+index 95464b0d..79bbfb61 100644
+--- a/expat/lib/expat.h
++++ b/expat/lib/expat.h
+@@ -1042,7 +1042,7 @@ typedef struct {
+ XMLPARSEAPI(const XML_Feature *)
+ XML_GetFeatureList(void);
+
+-#if XML_GE == 1
++#if defined(XML_GE) && XML_GE == 1
+ /* Added in Expat 2.4.0 for XML_DTD defined and
+ * added in Expat 2.6.0 for XML_GE == 1. */
+ XMLPARSEAPI(XML_Bool)
+diff --git a/expat/lib/internal.h b/expat/lib/internal.h
+index cce71e4c..208c6b67 100644
+--- a/expat/lib/internal.h
++++ b/expat/lib/internal.h
+@@ -155,7 +155,7 @@ extern "C" {
+ void _INTERNAL_trim_to_complete_utf8_characters(const char *from,
+ const char **fromLimRef);
+
+-#if XML_GE == 1
++#if defined(XML_GE) && XML_GE == 1
+ unsigned long long testingAccountingGetCountBytesDirect(XML_Parser parser);
+ unsigned long long testingAccountingGetCountBytesIndirect(XML_Parser parser);
+ const char *unsignedCharToPrintable(unsigned char c);
+--
+2.43.1
+
diff --git a/external/expat/UnpackedTarball_expat.mk b/external/expat/UnpackedTarball_expat.mk
index 5d4f41f6d147..465105f2ca8c 100644
--- a/external/expat/UnpackedTarball_expat.mk
+++ b/external/expat/UnpackedTarball_expat.mk
@@ -13,7 +13,10 @@ $(eval $(call gb_UnpackedTarball_set_tarball,expat,$(EXPAT_TARBALL)))
$(eval $(call gb_UnpackedTarball_update_autoconf_configs,expat,conftools))
+# * external/expat/0001-Fix-compiler-warnings.patch was sent to upstream as
+# <https://github.com/libexpat/libexpat/pull/819> "Fix compiler warnings":
$(eval $(call gb_UnpackedTarball_add_patches,expat,\
+ external/expat/0001-Fix-compiler-warnings.patch \
external/expat/expat-winapi.patch \
))
diff --git a/external/expat/expat-winapi.patch b/external/expat/expat-winapi.patch
index 7eae7d5d6139..fed65644a732 100644
--- a/external/expat/expat-winapi.patch
+++ b/external/expat/expat-winapi.patch
@@ -1,6 +1,6 @@
---- misc/expat-2.1.0/lib/expat_external.h 2009-11-16 08:53:17.375000000 +0000
-+++ misc/build/expat-2.1.0/lib/expat_external.h 2009-11-16 08:53:34.703125000 +0000
-@@ -81,10 +81,6 @@
+--- misc/expat-2.5.0/lib/expat_external.h 2022-10-25 01:32:54.000000000 +0900
++++ misc/build/expat-2.5.0/lib/expat_external.h 2022-10-30 23:09:47.339459134 +0900
+@@ -88,10 +88,6 @@
# ifndef XML_BUILDING_EXPAT
/* using Expat from an application */
@@ -11,12 +11,13 @@
# endif
#endif /* not defined XML_STATIC */
---- misc/expat-2.1.0/lib/xmlparse.c 2021-05-23 16:56:25.000000000 +0100
-+++ misc/build/expat-2.1.0/lib/xmlparse.c 2021-05-25 12:42:11.997173600 +0100
-@@ -64,6 +64,8 @@
+--- misc/expat-2.5.0/lib/xmlparse.c 2022-10-26 00:09:08.000000000 +0900
++++ misc/build/expat-2.5.0/lib/xmlparse.c 2022-10-30 23:09:01.843006341 +0900
+@@ -67,6 +67,9 @@
#endif
#ifdef _WIN32
++# undef HAVE_ARC4RANDOM_BUF
+# undef HAVE_GETRANDOM
+# undef HAVE_SYSCALL_GETRANDOM
/* force stdlib to define rand_s() */
diff --git a/external/harfbuzz/62e803b36173fd096d7ad460dd1d1db9be542593.patch.1 b/external/harfbuzz/62e803b36173fd096d7ad460dd1d1db9be542593.patch.1
new file mode 100644
index 000000000000..2aef204a26e1
--- /dev/null
+++ b/external/harfbuzz/62e803b36173fd096d7ad460dd1d1db9be542593.patch.1
@@ -0,0 +1,29 @@
+From 62e803b36173fd096d7ad460dd1d1db9be542593 Mon Sep 17 00:00:00 2001
+From: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed, 1 Jun 2022 07:38:21 -0600
+Subject: [PATCH] [sbix] Limit glyph extents
+
+Fixes https://github.com/harfbuzz/harfbuzz/issues/3557
+---
+ src/hb-ot-color-sbix-table.hh | 6 ++++++
+ test/fuzzing/fonts/sbix-extents.ttf | Bin 0 -> 582 bytes
+ 2 files changed, 6 insertions(+)
+ create mode 100644 test/fuzzing/fonts/sbix-extents.ttf
+
+diff --git a/src/hb-ot-color-sbix-table.hh b/src/hb-ot-color-sbix-table.hh
+index 9741ebd450..6efae43cda 100644
+--- a/src/hb-ot-color-sbix-table.hh
++++ b/src/hb-ot-color-sbix-table.hh
+@@ -298,6 +298,12 @@ struct sbix
+
+ const PNGHeader &png = *blob->as<PNGHeader>();
+
++ if (png.IHDR.height >= 65536 || png.IHDR.width >= 65536)
++ {
++ hb_blob_destroy (blob);
++ return false;
++ }
++
+ extents->x_bearing = x_offset;
+ extents->y_bearing = png.IHDR.height + y_offset;
+ extents->width = png.IHDR.width;
diff --git a/external/harfbuzz/UnpackedTarball_harfbuzz.mk b/external/harfbuzz/UnpackedTarball_harfbuzz.mk
index adec72ed0d57..9957f89e1b5c 100644
--- a/external/harfbuzz/UnpackedTarball_harfbuzz.mk
+++ b/external/harfbuzz/UnpackedTarball_harfbuzz.mk
@@ -20,6 +20,7 @@ $(eval $(call gb_UnpackedTarball_set_patchlevel,harfbuzz,0))
$(eval $(call gb_UnpackedTarball_add_patches,harfbuzz, \
external/harfbuzz/ubsan.patch \
external/harfbuzz/icu-65-api-macros-with-semicolon.patch.1 \
+ external/harfbuzz/62e803b36173fd096d7ad460dd1d1db9be542593.patch.1 \
))
# vim: set noet sw=4 ts=4:
diff --git a/external/hsqldb/UnpackedTarball_hsqldb.mk b/external/hsqldb/UnpackedTarball_hsqldb.mk
index cbba770f19a0..ed262cccf4ca 100644
--- a/external/hsqldb/UnpackedTarball_hsqldb.mk
+++ b/external/hsqldb/UnpackedTarball_hsqldb.mk
@@ -29,6 +29,7 @@ $(eval $(call gb_UnpackedTarball_add_patches,hsqldb,\
external/hsqldb/patches/jdbc-4.1.patch \
external/hsqldb/patches/multipleResultSets.patch \
) \
+ external/hsqldb/patches/disable-dump-script.patch \
))
# vim: set noet sw=4 ts=4:
diff --git a/external/hsqldb/patches/disable-dump-script.patch b/external/hsqldb/patches/disable-dump-script.patch
new file mode 100644
index 000000000000..401dd38abc9a
--- /dev/null
+++ b/external/hsqldb/patches/disable-dump-script.patch
@@ -0,0 +1,14 @@
+--- a/hsqldb/src/org/hsqldb/DatabaseCommandInterpreter.java 2023-02-13 11:08:11.297243034 +0000
++++ b/hsqldb/src/org/hsqldb/DatabaseCommandInterpreter.java 2023-02-13 13:49:17.973089433 +0000
+@@ -403,6 +403,11 @@
+ throw Trace.error(Trace.INVALID_IDENTIFIER);
+ }
+
++ // added condition to avoid execution of spurious command in .script or .log file
++ if (session.isProcessingScript() || session.isProcessingLog()) {
++ return new Result(ResultConstants.UPDATECOUNT);
++ }
++
+ dsw = new ScriptWriterText(database, token, true, true, true);
+
+ dsw.writeAll();
diff --git a/external/libffi/ExternalPackage_libffi.mk b/external/libffi/ExternalPackage_libffi.mk
new file mode 100644
index 000000000000..61b0a1ca460c
--- /dev/null
+++ b/external/libffi/ExternalPackage_libffi.mk
@@ -0,0 +1,20 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# 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_ExternalPackage_ExternalPackage,libffi,libffi))
+
+$(eval $(call gb_ExternalPackage_use_external_project,libffi,libffi))
+
+ifeq ($(COM),MSC)
+$(eval $(call gb_ExternalPackage_add_files,libffi,$(LIBO_LIB_FOLDER)/python-core-$(PYTHON_VERSION)/lib, \
+ $(HOST_PLATFORM)/.libs/libffi-7.dll \
+))
+endif
+
+# vim: set noet sw=4 ts=4:
diff --git a/external/libffi/ExternalProject_libffi.mk b/external/libffi/ExternalProject_libffi.mk
index bdf8fe61eb76..0ff625ea3e20 100644
--- a/external/libffi/ExternalProject_libffi.mk
+++ b/external/libffi/ExternalProject_libffi.mk
@@ -14,17 +14,34 @@ $(eval $(call gb_ExternalProject_register_targets,libffi,\
))
# set prefix so that it ends up in libffi.pc so that pkg-config in python3 works
+# For a static Windows build, change CPPFLAGS to include -D_LIB and --disable-static
+# Also remove the ExternalPackage in that case
+
+libffi_WIN_PLATFORM := $(strip \
+ $(if $(filter INTEL,$(CPUNAME)),32) \
+ $(if $(filter X86_64,$(CPUNAME)),64) \
+ $(if $(filter ARM64,$(CPUNAME)),arm64) \
+ )
$(call gb_ExternalProject_get_state_target,libffi,build):
$(call gb_ExternalProject_run,build,\
+ export LIB="$(ILIB)" && \
./configure \
--enable-option-checking=fatal \
- $(if $(CROSS_COMPILING),--build=$(BUILD_PLATFORM) --host=$(HOST_PLATFORM)) \
- --enable-static \
- --disable-shared \
- --with-pic \
- --enable-portable-binary \
- CC="$(CC) $(if $(filter LINUX,$(OS)),-fvisibility=hidden)" \
+ --build=$(BUILD_PLATFORM) --host=$(HOST_PLATFORM) \
+ $(if $(filter LINUX,$(OS)), \
+ --disable-shared \
+ CC="$(CC) -fvisibility=hidden" \
+ --with-pic \
+ --enable-portable-binary) \
+ $(if $(filter WNT,$(OS)), \
+ --disable-static \
+ CC="$(call gb_UnpackedTarball_get_dir,libffi)/msvcc.sh -m$(libffi_WIN_PLATFORM)" \
+ CXX="$(call gb_UnpackedTarball_get_dir,libffi)/msvcc.sh -m$(libffi_WIN_PLATFORM)" \
+ LD='link' \
+ CPP='cl -nologo -EP' \
+ CXXCPP='cl -nologo -EP' \
+ CPPFLAGS="-DFFI_BUILDING_DLL $(SOLARINC)") \
--prefix=$(call gb_UnpackedTarball_get_dir,libffi)/$(HOST_PLATFORM) \
--disable-docs \
&& $(MAKE) \
diff --git a/external/libffi/Module_libffi.mk b/external/libffi/Module_libffi.mk
index 739fd4197000..ace75480abe3 100644
--- a/external/libffi/Module_libffi.mk
+++ b/external/libffi/Module_libffi.mk
@@ -12,6 +12,7 @@ $(eval $(call gb_Module_Module,libffi))
$(eval $(call gb_Module_add_targets,libffi,\
UnpackedTarball_libffi \
ExternalProject_libffi \
+ ExternalPackage_libffi \
))
# vim: set noet sw=4 ts=4:
diff --git a/external/liblangtag/UnpackedTarball_liblangtag.mk b/external/liblangtag/UnpackedTarball_liblangtag.mk
index 66b8051782d0..16b9ea999f71 100644
--- a/external/liblangtag/UnpackedTarball_liblangtag.mk
+++ b/external/liblangtag/UnpackedTarball_liblangtag.mk
@@ -30,8 +30,6 @@ endif
$(eval $(call gb_UnpackedTarball_add_patches,liblangtag, \
$(if $(SYSTEM_LIBXML),,external/liblangtag/langtag-libtool-rpath.patch.0) \
external/liblangtag/clang-cl.patch.0 \
- external/liblangtag/langtag-valencia.patch.0 \
- external/liblangtag/Wformat-overflow.patch \
))
# vim: set noet sw=4 ts=4:
diff --git a/external/liblangtag/Wformat-overflow.patch b/external/liblangtag/Wformat-overflow.patch
deleted file mode 100644
index f2d017e4b395..000000000000
--- a/external/liblangtag/Wformat-overflow.patch
+++ /dev/null
@@ -1,17 +0,0 @@
---- liblangtag/lt-script-db.c
-+++ liblangtag/lt-script-db.c
-@@ -134,8 +134,12 @@
- cnode = cnode->next;
- }
- if (!subtag) {
-- lt_warning("No subtag node: description = '%s'",
-- desc);
-+ if (!desc) {
-+ lt_warning("No subtag nor description node");
-+ } else {
-+ lt_warning("No subtag node: description = '%s'",
-+ desc);
-+ }
- goto bail1;
- }
- if (!desc) {
diff --git a/external/liblangtag/langtag-valencia.patch.0 b/external/liblangtag/langtag-valencia.patch.0
deleted file mode 100644
index dc28043042e4..000000000000
--- a/external/liblangtag/langtag-valencia.patch.0
+++ /dev/null
@@ -1,29 +0,0 @@
---- liblangtag/lt-tag.c
-+++ liblangtag/lt-tag.c
-@@ -2009,11 +2009,23 @@
- if (ctag->region)
- lt_string_append_printf(string, "_%s",
- lt_region_get_tag(ctag->region));
-- if (ctag->script) {
-+ if (ctag->script)
- mod = lt_script_convert_to_modifier(ctag->script);
-- if (mod)
-- lt_string_append_printf(string, "@%s", mod);
-+ if (!mod && ctag->variants)
-+ {
-+ lt_list_t* l;
-+ for (l = ctag->variants; l != NULL; l = lt_list_next(l)) {
-+ lt_variant_t *variant = lt_list_value(l);
-+ const char *s = lt_variant_get_tag(variant);
-+ if (lt_strcmp0(s, "valencia") == 0) {
-+ mod = "valencia";
-+ break;
-+ }
-+ }
- }
-+ if (mod)
-+ lt_string_append_printf(string, "@%s", mod);
-+
- lt_tag_unref(ctag);
-
- bail:
diff --git a/external/libnumbertext/EmptyString.patch1 b/external/libnumbertext/EmptyString.patch1
new file mode 100644
index 000000000000..d6570117da09
--- /dev/null
+++ b/external/libnumbertext/EmptyString.patch1
@@ -0,0 +1,13 @@
+--- a/src/Soros.cxx 2022-06-27 09:36:46.486075920 +0100
++++ b/src/Soros.cxx 2022-06-27 09:37:52.594072196 +0100
+@@ -98,8 +98,8 @@
+ s = regex_replace(s, quoteEnd, L"");
+ s = translate(s, c.substr(1), m.substr(1), L"");
+ replace(s, slash, L"\\\\"); // -> \\, ", ;, #
+- begins.push_back(s[0] == L'^');
+- ends.push_back(s[s.length()-1] == L'$');
++ begins.push_back(!s.empty() && s[0] == L'^');
++ ends.push_back(!s.empty() && s[s.length()-1] == L'$');
+ s = L"^" + regex_replace(s, wregex(L"^\\^"), L"");
+ s = regex_replace(s, wregex(L"\\$$"), L"") + L"$";
+ try
diff --git a/external/libnumbertext/UnpackedTarball_libnumbertext.mk b/external/libnumbertext/UnpackedTarball_libnumbertext.mk
index 67b147393e31..5667b138bbb0 100644
--- a/external/libnumbertext/UnpackedTarball_libnumbertext.mk
+++ b/external/libnumbertext/UnpackedTarball_libnumbertext.mk
@@ -19,6 +19,7 @@ $(eval $(call gb_UnpackedTarball_set_patchlevel,libnumbertext,1))
# <https://github.com/Numbertext/libnumbertext/pull/43>:
$(eval $(call gb_UnpackedTarball_add_patches,libnumbertext, \
external/libnumbertext/0001-Don-t-depend-on-en_US.UTF-8-locale.patch \
+ external/libnumbertext/EmptyString.patch1 \
))
# vim: set noet sw=4 ts=4:
diff --git a/external/liborcus/UnpackedTarball_liborcus.mk b/external/liborcus/UnpackedTarball_liborcus.mk
index cf792f125f71..a6c36095f3ab 100644
--- a/external/liborcus/UnpackedTarball_liborcus.mk
+++ b/external/liborcus/UnpackedTarball_liborcus.mk
@@ -37,6 +37,7 @@ $(eval $(call gb_UnpackedTarball_add_patches,liborcus,\
external/liborcus/forcepoint-84.patch.1 \
external/liborcus/forcepoint-87.patch.1 \
external/liborcus/forcepoint-95.patch.1 \
+ external/liborcus/overrun.patch.0 \
))
ifeq ($(OS),WNT)
diff --git a/external/liborcus/include.patch.0 b/external/liborcus/include.patch.0
index 9555dd534b3e..3bed5aebf865 100644
--- a/external/liborcus/include.patch.0
+++ b/external/liborcus/include.patch.0
@@ -1,3 +1,24 @@
+--- include/orcus/base64.hpp
++++ include/orcus/base64.hpp
+@@ -9,6 +9,7 @@
+ #define __ORCUS_BASE64_HPP__
+
+ #include "env.hpp"
++#include <stdint.h>
+ #include <vector>
+ #include <string>
+
+--- include/orcus/types.hpp
++++ include/orcus/types.hpp
+@@ -16,6 +16,7 @@
+ #pragma GCC diagnostic ignored "-Wshadow"
+ #endif
+
++#include <stdint.h>
+ #include <cstdlib>
+ #include <vector>
+ #include <string>
+
--- src/liborcus/orcus_xlsx.cpp
+++ src/liborcus/orcus_xlsx.cpp
@@ -32,6 +32,7 @@
diff --git a/external/liborcus/overrun.patch.0 b/external/liborcus/overrun.patch.0
new file mode 100644
index 000000000000..8b5bc5366da1
--- /dev/null
+++ b/external/liborcus/overrun.patch.0
@@ -0,0 +1,63 @@
+--- src/parser/sax_token_parser.cpp
++++ src/parser/sax_token_parser.cpp
+@@ -10,6 +10,7 @@
+
+ #include <mdds/sorted_string_map.hpp>
+ #include <cctype>
++#include <limits>
+
+ namespace orcus {
+
+@@ -329,6 +330,28 @@
+ m_elem.raw_name = elem.name;
+ }
+
++static uint8_t readUint8(char const * begin, char const * end, char const ** endptr) {
++ unsigned n = 0;
++ char const * p = begin;
++ for (; p != end; ++p) {
++ char const c = *p;
++ if (c < '0' || c > '9') {
++ break;
++ }
++ n = 10 * n + (c - '0');
++ if (n > std::numeric_limits<uint8_t>::max()) {
++ *endptr = nullptr;
++ return 0;
++ }
++ }
++ if (p == begin) {
++ *endptr = nullptr;
++ return 0;
++ }
++ *endptr = p;
++ return n;
++}
++
+ void sax_token_handler_wrapper_base::attribute(const pstring& name, const pstring& val)
+ {
+ decl_attr_type dat = decl_attr::get().find(name.data(), name.size());
+@@ -340,18 +362,18 @@
+ const char* p = val.data();
+ const char* p_end = p + val.size();
+
+- char* endptr = nullptr;
+- long v = std::strtol(p, &endptr, 10);
++ const char* endptr = nullptr;
++ uint8_t v = readUint8(p, p_end, &endptr);
+
+- if (!endptr || endptr >= p_end || *endptr != '.')
++ if (!endptr || endptr == p_end || *endptr != '.')
+ break;
+
+ m_declaration.version_major = v;
+ p = endptr + 1;
+
+- v = std::strtol(p, &endptr, 10);
++ v = readUint8(p, p_end, &endptr);
+
+- if (!endptr || endptr > p_end)
++ if (!endptr)
+ break;
+
+ m_declaration.version_minor = v;
diff --git a/external/libtommath/README b/external/libtommath/README
index 0da3128c5404..41f91970a71b 100644
--- a/external/libtommath/README
+++ b/external/libtommath/README
@@ -3,4 +3,4 @@ integer library written entirely in C.
Used by embedded firebird (external/firebird).
-http://www.libtom.org/LibTomMath/
+From [https://www.libtom.net/LibTomMath/].
diff --git a/external/libtommath/UnpackedTarball_libtommath.mk b/external/libtommath/UnpackedTarball_libtommath.mk
index bb0b9e352930..8961a46162c5 100644
--- a/external/libtommath/UnpackedTarball_libtommath.mk
+++ b/external/libtommath/UnpackedTarball_libtommath.mk
@@ -14,8 +14,6 @@ $(eval $(call gb_UnpackedTarball_set_tarball,libtommath,$(LIBTOMMATH_TARBALL)))
$(eval $(call gb_UnpackedTarball_set_patchlevel,libtommath,0))
$(eval $(call gb_UnpackedTarball_add_patches,libtommath,\
- external/libtommath/libtommath-msvc.patch \
- external/libtommath/clang-cl.patch \
))
# vim: set noet sw=4 ts=4:
diff --git a/external/libtommath/clang-cl.patch b/external/libtommath/clang-cl.patch
deleted file mode 100644
index 1cc92d380c62..000000000000
--- a/external/libtommath/clang-cl.patch
+++ /dev/null
@@ -1,16 +0,0 @@
---- tommath.h
-+++ tommath.h
-@@ -15,6 +15,13 @@
- #ifndef BN_H_
- #define BN_H_
-
-+// Work around clang-cl issue when mp_word is a typedef for unsigned __int128, see
-+// <https://bugs.llvm.org/show_bug.cgi?id=25305> "Clang-cl generates a call to an undefined symbol
-+// _udivti3":
-+#if defined _WIN32 && defined __clang__
-+#define MP_8BIT
-+#endif
-+
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdint.h>
diff --git a/external/libtommath/libtommath-msvc.patch b/external/libtommath/libtommath-msvc.patch
deleted file mode 100644
index 07884871aac9..000000000000
--- a/external/libtommath/libtommath-msvc.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- makefile.msvc 2016-02-05 23:25:32.000000000 +0100
-+++ makefile.msvc 2016-07-21 11:34:20.618390100 +0200
-@@ -38,3 +38,9 @@
-
- library: $(OBJECTS)
- lib /out:tommath.lib $(OBJECTS)
-+
-+.cc.obj:
-+ $(CC) /nologo $(CFLAGS) /c $<
-+
-+.c.obj:
-+ $(CC) /nologo $(CFLAGS) /c $<
diff --git a/external/libxml2/ExternalPackage_libxml2.mk b/external/libxml2/ExternalPackage_libxml2.mk
index d38eb68df0cb..799044575f9a 100644
--- a/external/libxml2/ExternalPackage_libxml2.mk
+++ b/external/libxml2/ExternalPackage_libxml2.mk
@@ -21,7 +21,7 @@ else # COM=MSC
$(eval $(call gb_ExternalPackage_add_file,libxml2,$(LIBO_URE_LIB_FOLDER)/libxml2.dll,win32/bin.msvc/libxml2.dll))
endif
else # OS!=WNT
-$(eval $(call gb_ExternalPackage_add_file,libxml2,$(LIBO_URE_LIB_FOLDER)/libxml2.so.2,.libs/libxml2.so.2.9.$(LIBXML_VERSION_MICRO)))
+$(eval $(call gb_ExternalPackage_add_file,libxml2,$(LIBO_URE_LIB_FOLDER)/libxml2.so.2,.libs/libxml2.so.2.12.$(LIBXML_VERSION_MICRO)))
endif
endif # DISABLE_DYNLOADING
diff --git a/external/libxml2/ExternalProject_libxml2.mk b/external/libxml2/ExternalProject_libxml2.mk
index 0d8559dfb04f..5a044e3098dd 100644
--- a/external/libxml2/ExternalProject_libxml2.mk
+++ b/external/libxml2/ExternalProject_libxml2.mk
@@ -21,7 +21,7 @@ $(eval $(call gb_ExternalProject_use_nmake,libxml2,build))
$(call gb_ExternalProject_get_state_target,libxml2,build):
$(call gb_ExternalProject_run,build,\
cscript /e:javascript configure.js \
- iconv=no icu=yes sax1=yes $(if $(MSVC_USE_DEBUG_RUNTIME),run_debug=yes cruntime=/MDd) \
+ iconv=no icu=yes sax1=yes $(if $(MSVC_USE_DEBUG_RUNTIME),cruntime=/MDd) \
$(if $(filter TRUE,$(ENABLE_DBGUTIL)),debug=yes) \
&& nmake \
,win32)
@@ -36,7 +36,7 @@ $(call gb_ExternalProject_get_state_target,libxml2,build):
LDFLAGS="$(if $(SYSBASE),-L$(SYSBASE)/usr/lib)" \
CFLAGS="$(if $(SYSBASE),-I$(SYSBASE)/usr/include) $(if $(debug),-g)" \
$(if $(filter TRUE,$(DISABLE_DYNLOADING)),--disable-shared,--disable-static) \
- && $(MAKE) \
+ && $(MAKE) libxml2.la xmllint \
)
endif
diff --git a/external/libxml2/UnpackedTarball_libxml2.mk b/external/libxml2/UnpackedTarball_libxml2.mk
index 83df02849cb3..489fb007572b 100644
--- a/external/libxml2/UnpackedTarball_libxml2.mk
+++ b/external/libxml2/UnpackedTarball_libxml2.mk
@@ -14,13 +14,15 @@ $(eval $(call gb_UnpackedTarball_set_tarball,libxml2,$(LIBXML_TARBALL),,libxml2)
$(eval $(call gb_UnpackedTarball_update_autoconf_configs,libxml2))
$(eval $(call gb_UnpackedTarball_add_patches,libxml2,\
- external/libxml2/libxml2-config.patch.1 \
- external/libxml2/libxml2-global-symbols.patch \
+ $(if $(filter SOLARIS,$(OS)),external/libxml2/libxml2-global-symbols.patch) \
external/libxml2/libxml2-vc10.patch \
+ external/libxml2/libxml2-XMLCALL-redefine.patch.0 \
$(if $(filter ANDROID,$(OS)),external/libxml2/libxml2-android.patch) \
$(if $(gb_Module_CURRENTMODULE_SYMBOLS_ENABLED), \
external/libxml2/libxml2-icu-sym.patch.0, \
external/libxml2/libxml2-icu.patch.0) \
))
+$(eval $(call gb_UnpackedTarball_add_file,libxml2,xml2-config.in,external/libxml2/xml2-config.in))
+
# vim: set noet sw=4 ts=4:
diff --git a/external/libxml2/libxml2-XMLCALL-redefine.patch.0 b/external/libxml2/libxml2-XMLCALL-redefine.patch.0
new file mode 100644
index 000000000000..d9ca23be7ce4
--- /dev/null
+++ b/external/libxml2/libxml2-XMLCALL-redefine.patch.0
@@ -0,0 +1,11 @@
+--- include/libxml/xmlexports.h 2023-05-24 12:48:46.179570708 +0100
++++ include/libxml/xmlexports.h 2023-05-24 12:48:56.563577488 +0100
+@@ -38,8 +38,6 @@
+
+ /** DOC_DISABLE */
+ /* Compatibility */
+-#define XMLCALL
+-#define XMLCDECL
+ #if !defined(LIBXML_DLL_IMPORT)
+ #define LIBXML_DLL_IMPORT XMLPUBVAR
+ #endif
diff --git a/external/libxml2/libxml2-android.patch b/external/libxml2/libxml2-android.patch
index 42af83274026..acf9b17e02db 100644
--- a/external/libxml2/libxml2-android.patch
+++ b/external/libxml2/libxml2-android.patch
@@ -2,9 +2,9 @@
+++ misc/build/libxml2-2.7.6/Makefile.in
@@ -1635,7 +1635,7 @@
$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
- check: $(BUILT_SOURCES)
- $(MAKE) $(AM_MAKEFLAGS) check-recursive
--all-am: Makefile $(PROGRAMS) $(LTLIBRARIES) $(SCRIPTS) $(MANS) $(DATA) \
+ $(MAKE) $(AM_MAKEFLAGS) check-local
+ check: check-recursive
+-all-am: Makefile $(PROGRAMS) $(LTLIBRARIES) $(SCRIPTS) $(DATA) \
+all-am: Makefile $(LTLIBRARIES) \
config.h
install-binPROGRAMS: install-libLTLIBRARIES
diff --git a/external/libxml2/libxml2-config.patch.1 b/external/libxml2/libxml2-config.patch.1
deleted file mode 100644
index 5a2ef1485e92..000000000000
--- a/external/libxml2/libxml2-config.patch.1
+++ /dev/null
@@ -1,43 +0,0 @@
-Hack the xml2-config to return paths into WORKDIR.
-
---- a/xml2-config.in 2009-12-17 11:45:20.000000000 +0000
-+++ b/xml2-config.in 2009-12-17 11:45:36.000000000 +0000
-@@ -1,9 +1,14 @@
- #! /bin/sh
-
--prefix=@prefix@
--exec_prefix=@exec_prefix@
--includedir=@includedir@
--libdir=@libdir@
-+#prefix=@prefix@
-+#exec_prefix=@exec_prefix@
-+#includedir=@includedir@
-+#libdir=@libdir@
-+
-+prefix=${WORKDIR}/UnpackedTarball/libxml2
-+exec_prefix=${WORKDIR}/UnpackedTarball/libxml2
-+includedir=${WORKDIR}/UnpackedTarball/libxml2/include
-+libdir=${WORKDIR}/UnpackedTarball/libxml2/.libs
- cflags=
- libs=
-
-@@ -67,7 +72,8 @@
- ;;
-
- --cflags)
-- cflags="@XML_INCLUDEDIR@ @XML_CFLAGS@"
-+ #cflags="@XML_INCLUDEDIR@ @XML_CFLAGS@"
-+ cflags="-I${includedir}"
- ;;
-
- --libtool-libs)
-@@ -91,7 +96,8 @@
- libs="@XML_LIBDIR@ $libs"
- fi
-
-- libs="$libs @WIN32_EXTRA_LIBADD@"
-+ #libs="$libs @WIN32_EXTRA_LIBADD@"
-+ libs="-L${libdir} -lxml2 -lm"
- ;;
-
- *)
diff --git a/external/libxml2/libxml2-global-symbols.patch b/external/libxml2/libxml2-global-symbols.patch
index cfec9c530281..32146da4b3d7 100644
--- a/external/libxml2/libxml2-global-symbols.patch
+++ b/external/libxml2/libxml2-global-symbols.patch
@@ -13,10 +13,22 @@
} LIBXML2_2.6.28;
LIBXML2_2.6.32 {
-@@ -2231,3 +2231,43 @@
+@@ -2231,3 +2231,55 @@
xmlPopOutputCallbacks;
} LIBXML2_2.9.8;
++LIBXML2_2.11.4 {
++ global:
++ xmlMemSize;
++ xmlNewSAXParserCtxt;
++} LIBXML2_2.9.11;
++
++LIBXML2_2.12.3 {
++ global:
++ xmlCtxtSetMaxAmplification;
++ xmlTextReaderSetMaxAmplification;
++} LIBXML2_2.11.4;
++
+# HACK: export global variable accessor functions (globals.h)
+LIBXML2_GLOBAL_VARIABLES {
+ global:
diff --git a/external/libxml2/libxml2-icu-sym.patch.0 b/external/libxml2/libxml2-icu-sym.patch.0
index aac9d09ef13e..07676228da19 100644
--- a/external/libxml2/libxml2-icu-sym.patch.0
+++ b/external/libxml2/libxml2-icu-sym.patch.0
@@ -25,7 +25,7 @@ diff -up win32/Makefile.msvc.dt win32/Makefile.msvc
!if "$(STATIC)" == "1"
LIBS = $(LIBS) advapi32.lib sicuuc.lib sicuin.lib sicudt.lib
!else
-+!if "$(WITH_RUN_DEBUG)" == "1"
++!if "$(DEBUG)" == "1"
+LIBS = $(LIBS) icuind.lib icuucd.lib icudtd.lib
+!else
LIBS = $(LIBS) icuuc.lib icuin.lib icudt.lib
diff --git a/external/libxml2/libxml2-icu.patch.0 b/external/libxml2/libxml2-icu.patch.0
index b390b03d8787..84197763f878 100644
--- a/external/libxml2/libxml2-icu.patch.0
+++ b/external/libxml2/libxml2-icu.patch.0
@@ -23,7 +23,7 @@ diff -up win32/Makefile.msvc.dt win32/Makefile.msvc
!if "$(STATIC)" == "1"
LIBS = $(LIBS) advapi32.lib sicuuc.lib sicuin.lib sicudt.lib
!else
-+!if "$(WITH_RUN_DEBUG)" == "1"
++!if "$(DEBUG)" == "1"
+LIBS = $(LIBS) icuind.lib icuucd.lib icudtd.lib
+!else
LIBS = $(LIBS) icuuc.lib icuin.lib icudt.lib
diff --git a/external/libxml2/xml2-config.in b/external/libxml2/xml2-config.in
new file mode 100644
index 000000000000..164508e47e67
--- /dev/null
+++ b/external/libxml2/xml2-config.in
@@ -0,0 +1,28 @@
+#! /bin/sh
+
+while test $# -gt 0; do
+ case "$1" in
+ -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+ *) optarg= ;;
+ esac
+
+ case "$1" in
+ --version)
+ echo @VERSION@
+ exit 0
+ ;;
+ --cflags)
+ cflags="$LIBXML_CFLAGS"
+ ;;
+ --libs)
+ libs="$LIBXML_LIBS"
+ ;;
+ esac
+ shift
+done
+
+if test -n "$cflags$libs"; then
+ echo $cflags $libs
+fi
+
+exit 0
diff --git a/external/libxslt/ExternalPackage_libxslt.mk b/external/libxslt/ExternalPackage_libxslt.mk
index c22a2e1b5dad..c1a8ee1217f1 100644
--- a/external/libxslt/ExternalPackage_libxslt.mk
+++ b/external/libxslt/ExternalPackage_libxslt.mk
@@ -25,7 +25,7 @@ $(eval $(call gb_ExternalPackage_add_file,libxslt,$(LIBO_LIB_FOLDER)/libexslt.dl
endif
else # OS!=WNT
$(eval $(call gb_ExternalPackage_add_file,libxslt,$(LIBO_LIB_FOLDER)/libxslt.so.1,libxslt/.libs/libxslt.so.1.1.$(LIBXSLT_VERSION_MICRO)))
-$(eval $(call gb_ExternalPackage_add_file,libxslt,$(LIBO_LIB_FOLDER)/libexslt.so.0,libexslt/.libs/libexslt.so.0.8.20))
+$(eval $(call gb_ExternalPackage_add_file,libxslt,$(LIBO_LIB_FOLDER)/libexslt.so.0,libexslt/.libs/libexslt.so.0.8.21))
endif
endif # DISABLE_DYNLOADING
diff --git a/external/libxslt/README b/external/libxslt/README
index dd69a9d732c3..2eb71661b903 100644
--- a/external/libxslt/README
+++ b/external/libxslt/README
@@ -1 +1 @@
-Gnome xslt library written in C, from [http://xmlsoft.org/xslt/]
+libxslt is an XSLT processor based on libxml2, from [https://gitlab.gnome.org/GNOME/libxslt/]
diff --git a/external/nss/README b/external/nss/README
index 6997cea6ca06..09931f64ea20 100644
--- a/external/nss/README
+++ b/external/nss/README
@@ -1,5 +1,16 @@
Contains the Network Security Services (NSS) libraries from Mozilla
+== ESR versions ==
+
+Upstream releases both regular and "ESR" versions, the latter go into Firefox
+ESR and Thunderbird.
+
+There is a new ESR version about once a year, and a ESR version gets micro
+updates only when there are security issues to fix, and it's not always obvious
+from the release notes of a regular release if there are security issues that
+are relevant to LibreOffice, hence it's probably best to bundle only the ESR
+versions and upgrade for every micro release (as recommended by upstream).
+
== Fips 140 and signed libraries ==
Fips 140 mode is not supported. That is, the *.chk files containing the
@@ -20,18 +31,3 @@ With all supported macOS SDK we use
NSS_USE_SYSTEM_SQLITE=1
to build using the system sqlite.
-== system NSS on Linux ==
-
-Note that different Linux distributions use different SONAMEs for the
-NSS libraries, so it is not possible to use --with-system-nss and build
-a portable generic LO installation set, despite NSS upstream apparently
-maintaining ABI compatibility.
-
-Debian Squeeze:
-0x000000000000000e (SONAME) Library soname: [libnss3.so.1d]
-Fedora 20:
-0x000000000000000e (SONAME) Library soname: [libnss3.so]
-
-For the record, the LSB specified SONAME is libnss3.so
-http://refspecs.linuxfoundation.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/libnss3.html
-
diff --git a/external/nss/UnpackedTarball_nss.mk b/external/nss/UnpackedTarball_nss.mk
index 017dc8def922..af289a2226fd 100644
--- a/external/nss/UnpackedTarball_nss.mk
+++ b/external/nss/UnpackedTarball_nss.mk
@@ -22,7 +22,7 @@ $(eval $(call gb_UnpackedTarball_add_patches,nss,\
external/nss/nss.vs2015.patch \
external/nss/nss.vs2015.pdb.patch \
external/nss/nss.bzmozilla1238154.patch \
- external/nss/nss-bz1646594.patch.1 \
+ external/nss/nss-bz1646594.patch.1 \
external/nss/macos-dlopen.patch.0 \
external/nss/nss-restore-manual-pre-dependencies.patch.1 \
$(if $(filter ANDROID,$(OS)), \
diff --git a/external/nss/asan.patch.1 b/external/nss/asan.patch.1
index ce584a34a3b5..ccabd446ebac 100644
--- a/external/nss/asan.patch.1
+++ b/external/nss/asan.patch.1
@@ -1,7 +1,7 @@
diff -ur nss.org/nss/coreconf/Linux.mk nss/nss/coreconf/Linux.mk
--- nss.org/nss/coreconf/Linux.mk 2014-05-06 04:36:01.817838877 +0200
+++ nss/nss/coreconf/Linux.mk 2014-05-06 04:37:25.387835456 +0200
-@@ -146,7 +146,7 @@
+@@ -157,7 +157,7 @@
# we don't use -z defs there.
# Also, -z defs conflicts with Address Sanitizer, which emits relocations
# against the libsanitizer runtime built into the main executable.
diff --git a/external/nss/clang-cl.patch.0 b/external/nss/clang-cl.patch.0
index 1d615c2397d8..04e21e7003d0 100644
--- a/external/nss/clang-cl.patch.0
+++ b/external/nss/clang-cl.patch.0
@@ -14,7 +14,7 @@
#pragma intrinsic(_InterlockedExchange)
--- nspr/pr/include/prbit.h
+++ nspr/pr/include/prbit.h
-@@ -14,7 +14,7 @@
+@@ -15,7 +15,7 @@
*/
#if defined(_WIN32) && (_MSC_VER >= 1300) && \
(defined(_M_IX86) || defined(_M_X64) || defined(_M_ARM) || \
@@ -23,7 +23,7 @@
# include <intrin.h>
# pragma intrinsic(_BitScanForward,_BitScanReverse)
__forceinline static int __prBitScanForward32(unsigned int val)
-@@ -32,7 +32,7 @@
+@@ -33,7 +33,7 @@
# define pr_bitscan_ctz32(val) __prBitScanForward32(val)
# define pr_bitscan_clz32(val) __prBitScanReverse32(val)
# define PR_HAVE_BUILTIN_BITSCAN32
@@ -32,7 +32,7 @@
(defined(__i386__) || defined(__x86_64__) || defined(__arm__) || \
defined(__aarch64__))
# define pr_bitscan_ctz32(val) __builtin_ctz(val)
-@@ -136,7 +136,7 @@
+@@ -138,7 +138,7 @@
*/
#if defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_AMD64) || \
@@ -63,7 +63,7 @@
#define CERTDB_VALID_PEER CERTDB_TERMINAL_RECORD
--- nss/lib/util/pkcs11n.h
+++ nss/lib/util/pkcs11n.h
-@@ -426,7 +426,7 @@
+@@ -563,7 +563,7 @@
/* keep the old value for compatibility reasons*/
#define CKT_NSS_MUST_VERIFY ((__CKT_NSS_MUST_VERIFY)(CKT_NSS + 4))
#else
@@ -80,7 +80,7 @@
# in the outer pkcs11t.h:
--- nss/lib/util/pkcs11t.h
+++ nss/lib/util/pkcs11t.h
-@@ -72,7 +72,14 @@
+@@ -78,7 +78,14 @@
#define CK_INVALID_HANDLE 0
/* pack */
@@ -95,7 +95,7 @@
typedef struct CK_VERSION {
CK_BYTE major; /* integer portion of version number */
-@@ -1795,6 +1802,13 @@
+@@ -2586,6 +2593,13 @@
#include "pkcs11n.h"
/* undo packing */
diff --git a/external/nss/macos-dlopen.patch.0 b/external/nss/macos-dlopen.patch.0
index 1889b8df7cd3..e8abc8f59c69 100644
--- a/external/nss/macos-dlopen.patch.0
+++ b/external/nss/macos-dlopen.patch.0
@@ -1,6 +1,6 @@
--- nspr/pr/src/linking/prlink.c
+++ nspr/pr/src/linking/prlink.c
-@@ -799,7 +799,7 @@
+@@ -555,7 +555,7 @@
* The reason is that DARWIN's dlopen ignores the provided path
* and checks for the plain filename in DYLD_LIBRARY_PATH,
* which could load an unexpected version of a library. */
diff --git a/external/nss/nss-android.patch.1 b/external/nss/nss-android.patch.1
index 9677caebbcec..cbf7f5402f3f 100644
--- a/external/nss/nss-android.patch.1
+++ b/external/nss/nss-android.patch.1
@@ -1,7 +1,7 @@
diff -ur nss.org/nspr/build/autoconf/config.sub nss/nspr/build/autoconf/config.sub
--- nss.org/nspr/build/autoconf/config.sub 2017-09-07 15:29:45.031246453 +0200
+++ nss/nspr/build/autoconf/config.sub 2017-09-07 15:32:13.087235423 +0200
-@@ -111,6 +111,10 @@
+@@ -110,6 +110,11 @@
exit 1;;
esac
@@ -15,7 +15,7 @@ diff -ur nss.org/nspr/build/autoconf/config.sub nss/nspr/build/autoconf/config.s
diff -ur nss.org/nspr/configure nss/nspr/configure
--- nss.org/nspr/configure 2017-09-07 15:29:45.018246359 +0200
+++ nss/nspr/configure 2017-09-07 15:31:47.604075663 +0200
-@@ -2737,18 +2739,15 @@
+@@ -2728,18 +2728,15 @@
esac
AS="$android_toolchain"/bin/"$android_tool_prefix"-as
@@ -40,7 +40,8 @@ diff -ur nss.org/nspr/configure nss/nspr/configure
diff -ur nss.org/nss/Makefile nss/nss/Makefile
--- nss.org/nss/Makefile 2017-09-07 15:29:44.933245745 +0200
+++ nss/nss/Makefile 2017-09-07 15:32:04.347181076 +0200
-@@ -62,6 +62,6 @@
+@@ -65,7 +65,7 @@
+
ifeq ($(OS_TARGET),Android)
NSPR_CONFIGURE_OPTS += --with-android-ndk=$(ANDROID_NDK) \
- --target=$(ANDROID_PREFIX) \
diff --git a/external/nss/nss-bz1646594.patch.1 b/external/nss/nss-bz1646594.patch.1
index e6c75922a7dc..cffb9f5fe61d 100644
--- a/external/nss/nss-bz1646594.patch.1
+++ b/external/nss/nss-bz1646594.patch.1
@@ -2,7 +2,7 @@ regression from https://bugzilla.mozilla.org/show_bug.cgi?id=1646594
--- nss/nss/coreconf/arch.mk.orig2 2020-08-18 14:33:21.295252404 +0200
+++ nss/nss/coreconf/arch.mk 2020-08-18 14:33:46.360320806 +0200
-@@ -116,8 +116,10 @@
+@@ -94,8 +94,10 @@
OS_RELEASE := $(word 1,$(OS_RELEASE)).$(word 2,$(OS_RELEASE))
endif
KERNEL = Linux
diff --git a/external/nss/nss-restore-manual-pre-dependencies.patch.1 b/external/nss/nss-restore-manual-pre-dependencies.patch.1
index 06691b1ec957..ea034f0dc80f 100644
--- a/external/nss/nss-restore-manual-pre-dependencies.patch.1
+++ b/external/nss/nss-restore-manual-pre-dependencies.patch.1
@@ -68,7 +68,7 @@ summary: Bug 1637083 Replace pre-dependency with shell hack r=rrelyea
ck.h \
--- b/nss/manifest.mn Wed May 13 19:00:40 2020 +0000
+++ a/nss/manifest.mn Tue May 12 21:33:43 2020 +0000
-@@ -23,6 +23,12 @@
+@@ -24,6 +24,12 @@
# no real way to encode these in any sensible way
$(MAKE) -C coreconf/nsinstall program
$(MAKE) export
diff --git a/external/nss/nss-win32-make.patch.1 b/external/nss/nss-win32-make.patch.1
index 7ba3df451ee6..6a3201a082a1 100644
--- a/external/nss/nss-win32-make.patch.1
+++ b/external/nss/nss-win32-make.patch.1
@@ -1,6 +1,6 @@
--- nss/nss/coreconf/rules.mk.orig2 2014-06-03 15:30:01.667200000 +0200
+++ nss/nss/coreconf/rules.mk 2014-06-03 15:30:14.537200000 +0200
-@@ -259,7 +259,7 @@
+@@ -174,7 +174,7 @@
$(LIBRARY): $(OBJS) | $$(@D)/d
rm -f $@
ifeq (,$(filter-out _WIN%,$(NS_USE_GCC)_$(OS_TARGET)))
@@ -9,7 +9,7 @@
else
$(AR) cr $@ $(OBJS)
endif
-@@ -297,7 +297,7 @@
+@@ -214,7 +214,7 @@
ifdef NS_USE_GCC
$(LINK_DLL) $(OBJS) $(SUB_SHLOBJS) $(EXTRA_LIBS) $(EXTRA_SHARED_LIBS) $(OS_LIBS) $(LD_LIBS) $(RES)
else
diff --git a/external/nss/nss.aix.patch b/external/nss/nss.aix.patch
index 4b0c6bfb3261..10572f94717a 100644
--- a/external/nss/nss.aix.patch
+++ b/external/nss/nss.aix.patch
@@ -1,7 +1,7 @@
diff -ru a/nspr/configure b/nspr/configure
--- a/a/nspr/configure 2014-09-29 16:47:42.984012225 +0100
+++ b/b/nspr/configure 2014-09-29 16:50:33.907375937 +0100
-@@ -6369,7 +6369,6 @@
+@@ -6325,7 +6325,6 @@
AIX_LINK_OPTS='-brtl -bnso -berok'
;;
esac
@@ -12,7 +12,7 @@ diff -ru a/nspr/configure b/nspr/configure
diff -ru a/nspr/configure.in b/nspr/configure.in
--- a/a/nspr/configure.in 2014-09-29 16:46:35.257394860 +0100
+++ b/b/nspr/configure.in 2014-09-29 16:50:33.908375942 +0100
-@@ -1229,7 +1229,8 @@
+@@ -1180,7 +1180,8 @@
AC_DEFINE(XP_UNIX)
AC_DEFINE(AIX)
AC_DEFINE(SYSV)
@@ -22,7 +22,7 @@ diff -ru a/nspr/configure.in b/nspr/configure.in
AC_CHECK_HEADER(sys/atomic_op.h, AC_DEFINE(AIX_HAVE_ATOMIC_OP_H))
case "${target_os}" in
aix3.2*)
-@@ -1269,10 +1270,9 @@
+@@ -1220,10 +1221,9 @@
AC_DEFINE(HAVE_SOCKLEN_T)
AC_DEFINE(HAVE_FCNTL_FILE_LOCKING)
USE_IPV6=1
@@ -48,7 +48,7 @@ diff -ru a/nspr/pr/src/Makefile.in b/nspr/pr/src/Makefile.in
diff -ru a/nss/cmd/platlibs.mk b/nss/cmd/platlibs.mk
--- a/a/nss/cmd/platlibs.mk 2014-09-29 16:47:42.987012253 +0100
+++ b/b/nss/cmd/platlibs.mk 2014-09-29 16:50:33.910375955 +0100
-@@ -134,7 +134,7 @@
+@@ -171,7 +171,7 @@
$(NULL)
ifeq ($(OS_ARCH), AIX)
@@ -57,7 +57,7 @@ diff -ru a/nss/cmd/platlibs.mk b/nss/cmd/platlibs.mk
endif
# $(PROGRAM) has NO explicit dependencies on $(EXTRA_SHARED_LIBS)
-@@ -180,7 +180,7 @@
+@@ -217,7 +217,7 @@
$(NULL)
ifeq ($(OS_ARCH), AIX)
diff --git a/external/nss/nss.bzmozilla1238154.patch b/external/nss/nss.bzmozilla1238154.patch
index 468ff810b9ca..425f38257892 100644
--- a/external/nss/nss.bzmozilla1238154.patch
+++ b/external/nss/nss.bzmozilla1238154.patch
@@ -1,7 +1,7 @@
diff -ru a/nspr/configure b/nspr/configure
--- a/a/nspr/configure 2019-01-26 12:23:06.589389910 +0100
+++ b/b/nspr/configure 2019-01-26 12:26:56.566222293 +0100
-@@ -7127,7 +7127,7 @@
+@@ -6883,7 +6883,7 @@
# Determine compiler version
diff --git a/external/nss/nss.cygwin64.in32bit.patch b/external/nss/nss.cygwin64.in32bit.patch
index b00761a0e85b..bce0f1d09403 100644
--- a/external/nss/nss.cygwin64.in32bit.patch
+++ b/external/nss/nss.cygwin64.in32bit.patch
@@ -3,7 +3,7 @@ on Cygwin 64bit and in 32bit mode
diff -ru nss.orig/nss/Makefile nss/nss/Makefile
--- a/nss.orig/nss/Makefile 2016-02-26 01:00:52.146713100 +0100
+++ b/nss/nss/Makefile 2016-02-26 01:02:05.303560100 +0100
-@@ -59,6 +59,8 @@
+@@ -63,6 +63,8 @@
# Translate coreconf build options to NSPR configure options.
#
diff --git a/external/nss/nss.nowerror.patch b/external/nss/nss.nowerror.patch
index ff81a9b33539..bdf7a33a874c 100644
--- a/external/nss/nss.nowerror.patch
+++ b/external/nss/nss.nowerror.patch
@@ -1,7 +1,7 @@
diff -ur nss.org/nss/coreconf/WIN32.mk nss/nss/coreconf/WIN32.mk
--- a/nss.org/nss/coreconf/WIN32.mk 2016-04-13 11:33:09.322294523 +0200
+++ b/nss/nss/coreconf/WIN32.mk 2016-04-13 11:33:27.744323969 +0200
-@@ -127,7 +127,7 @@
+@@ -121,7 +121,7 @@
-D_CRT_NONSTDC_NO_WARNINGS
OS_DLLFLAGS += -nologo -DLL -SUBSYSTEM:WINDOWS
ifndef NSS_ENABLE_WERROR
diff --git a/external/nss/nss.patch b/external/nss/nss.patch
index 66fbe37dc5ed..cc9eeed1b009 100644
--- a/external/nss/nss.patch
+++ b/external/nss/nss.patch
@@ -1,6 +1,6 @@
--- a/a/nspr/configure 2017-08-29 23:44:13.686045013 +0530
+++ b/b/nspr/configure 2017-08-29 23:46:53.774768655 +0530
-@@ -7034,7 +7034,7 @@
+@@ -6794,7 +6794,7 @@
PR_MD_CSRCS=linux.c
MKSHLIB='$(CC) $(DSO_LDOPTS) -o $@'
DSO_CFLAGS=-fPIC
@@ -11,7 +11,7 @@
# combo is not yet good at debugging inlined
--- a/nss.orig/nspr/pr/src/misc/prnetdb.c 2017-08-29 23:44:13.690045031 +0530
+++ b/nss/nspr/pr/src/misc/prnetdb.c 2017-08-29 23:47:03.810814019 +0530
-@@ -438,7 +438,7 @@
+@@ -441,7 +441,7 @@
char *buf = *bufp;
PRIntn buflen = *buflenp;
@@ -51,7 +51,7 @@
--- a/nss.org/nss/coreconf/arch.mk 2017-08-29 23:44:13.646044832 +0530
+++ b/nss/nss/coreconf/arch.mk 2017-08-29 23:45:51.494487134 +0530
-@@ -305,11 +305,17 @@
+@@ -284,11 +284,17 @@
OBJDIR_NAME_COMPILER = $(COMPILER_TAG)
endif
OBJDIR_NAME_BASE = $(OS_TARGET)$(OS_RELEASE)$(CPU_TAG)$(OBJDIR_NAME_COMPILER)$(LIBC_TAG)$(IMPL_STRATEGY)$(OBJDIR_TAG)
@@ -83,7 +83,7 @@
# The default implementation strategy for FreeBSD is pthreads.
--- a/nss.org/nss/coreconf/Linux.mk 2017-08-29 23:44:13.642044814 +0530
+++ b/nss/nss/coreconf/Linux.mk 2017-08-29 23:47:26.318915759 +0530
-@@ -147,7 +147,7 @@
+@@ -158,7 +158,7 @@
# Also, -z defs conflicts with Address Sanitizer, which emits relocations
# against the libsanitizer runtime built into the main executable.
ZDEFS_FLAG = -Wl,-z,defs
@@ -92,7 +92,7 @@
LDFLAGS += $(ARCHFLAG) -z noexecstack
# On Maemo, we need to use the -rpath-link flag for even the standard system
-@@ -177,8 +177,13 @@
+@@ -188,8 +188,13 @@
endif
endif
@@ -108,7 +108,7 @@
# dependencies in the same directory where it resides.
--- a/nss.org/nss/coreconf/rules.mk 2017-08-29 23:44:13.646044832 +0530
+++ b/nss/nss/coreconf/rules.mk 2017-08-29 23:47:37.442966042 +0530
-@@ -261,7 +261,7 @@
+@@ -176,7 +176,7 @@
ifeq (,$(filter-out _WIN%,$(NS_USE_GCC)_$(OS_TARGET)))
$(AR) $(subst /,\\,$(OBJS))
else
@@ -119,7 +119,7 @@
--- a/nss.org/nss/coreconf/SunOS5.mk 2017-08-29 23:44:13.646044832 +0530
+++ b/nss/nss/coreconf/SunOS5.mk 2017-08-29 23:45:00.902258445 +0530
-@@ -48,8 +48,11 @@
+@@ -46,8 +46,11 @@
# OPTIMIZER += -mno-omit-leaf-frame-pointer -fno-omit-frame-pointer
endif
else
@@ -135,7 +135,7 @@
ifndef BUILD_OPT
--- a/nss.org/nss/coreconf/Werror.mk 2017-08-29 23:44:13.646044832 +0530
+++ b/nss/nss/coreconf/Werror.mk 2017-08-29 23:44:23.994091608 +0530
-@@ -94,7 +94,8 @@
+@@ -96,7 +96,8 @@
endif #ndef NSS_ENABLE_WERROR
ifeq ($(NSS_ENABLE_WERROR),1)
diff --git a/external/nss/nss.utf8bom.patch.1 b/external/nss/nss.utf8bom.patch.1
index e8c56abefcde..f474adf6f932 100644
--- a/external/nss/nss.utf8bom.patch.1
+++ b/external/nss/nss.utf8bom.patch.1
@@ -1,7 +1,7 @@
diff -ur nss.org/nss/lib/ckfw/builtins/certdata.perl nss/nss/lib/ckfw/builtins/certdata.perl
--- nss.org/nss/lib/ckfw/builtins/certdata.perl 2016-03-31 18:26:07.890190900 +0800
+++ nss/nss/lib/ckfw/builtins/certdata.perl 2016-03-31 19:16:16.727269600 +0800
-@@ -110,6 +110,9 @@
+@@ -122,6 +122,9 @@
sub doprint {
my $i;
@@ -11,7 +11,7 @@ diff -ur nss.org/nss/lib/ckfw/builtins/certdata.perl nss/nss/lib/ckfw/builtins/c
print <<EOD
/* THIS IS A GENERATED FILE */
/* This Source Code Form is subject to the terms of the Mozilla Public
-@@ -119,6 +122,7 @@
+@@ -131,6 +134,7 @@
#ifndef BUILTINS_H
#include "builtins.h"
#endif /* BUILTINS_H */
diff --git a/external/nss/nss.vs2015.patch b/external/nss/nss.vs2015.patch
index de4f8762fd5b..73cff7c833fb 100644
--- a/external/nss/nss.vs2015.patch
+++ b/external/nss/nss.vs2015.patch
@@ -1,7 +1,7 @@
diff -ru nss.org/nss/coreconf/WIN32.mk nss/nss/coreconf/WIN32.mk
--- a/nss.org/nss/coreconf/WIN32.mk 2016-02-12 15:36:18.000000000 +0100
+++ b/nss/nss/coreconf/WIN32.mk 2016-02-26 00:42:43.170809600 +0100
-@@ -199,7 +199,7 @@
+@@ -192,7 +192,7 @@
# Disable C4244: conversion from 'type1' to 'type2', possible loss of data
# Disable C4018: 'expression' : signed/unsigned mismatch
# Disable C4312: 'type cast': conversion from 'type1' to 'type2' of greater size
diff --git a/external/nss/nss.vs2015.pdb.patch b/external/nss/nss.vs2015.pdb.patch
index c66940132cdd..3b498f976ac6 100644
--- a/external/nss/nss.vs2015.pdb.patch
+++ b/external/nss/nss.vs2015.pdb.patch
@@ -1,7 +1,7 @@
diff -ru nss.orig/nss/coreconf/WIN32.mk nss/nss/coreconf/WIN32.mk
--- a/nss.orig/nss/coreconf/WIN32.mk 2016-03-04 08:30:16.306639400 +0100
+++ b/nss/nss/coreconf/WIN32.mk 2016-03-04 08:31:17.987233200 +0100
-@@ -169,15 +169,15 @@
+@@ -163,15 +163,15 @@
DLLFLAGS += -OUT:$@
ifdef MOZ_DEBUG_SYMBOLS
ifdef MOZ_DEBUG_FLAGS
diff --git a/external/nss/nss.windows.patch b/external/nss/nss.windows.patch
index 901846e7bc1f..27a44045802e 100644
--- a/external/nss/nss.windows.patch
+++ b/external/nss/nss.windows.patch
@@ -1,6 +1,6 @@
--- a/a/nspr/config/rules.mk 2008-12-03 00:24:39.000000000 +0100
+++ b/b/nspr/config/rules.mk 2009-11-27 13:36:22.662753328 +0100
-@@ -415,7 +415,7 @@
+@@ -423,7 +423,7 @@
ifdef NEED_ABSOLUTE_PATH
# The quotes allow absolute paths to contain spaces.
@@ -11,7 +11,7 @@
$(OBJDIR)/%.$(OBJ_SUFFIX): %.cpp
--- a/a/nss/coreconf/rules.mk 2008-12-03 00:24:39.000000000 +0100
+++ b/b/nss/coreconf/rules.mk 2009-11-27 13:36:22.662753328 +0100
-@@ -386,7 +386,7 @@
+@@ -280,7 +280,7 @@
endif
# The quotes allow absolute paths to contain spaces.
@@ -22,7 +22,7 @@
ifdef USE_NT_C_SYNTAX
--- a/a/nspr/pr/include/md/_win95.h
+++ b/b/nspr/pr/include/md/_win95.h
-@@ -312,7 +312,7 @@
+@@ -317,7 +317,7 @@
#define _MD_ATOMIC_ADD(ptr,val) (InterlockedExchangeAdd((PLONG)ptr, (LONG)val) + val)
#define _MD_ATOMIC_DECREMENT(x) InterlockedDecrement((PLONG)x)
#endif /* x86 */
diff --git a/external/nss/nss_macosx.patch b/external/nss/nss_macosx.patch
index 3144fa687761..72277a425242 100644
--- a/external/nss/nss_macosx.patch
+++ b/external/nss/nss_macosx.patch
@@ -1,7 +1,7 @@
diff -ru a/nspr/configure b/nspr/configure
--- a/a/nspr/configure 2014-09-29 16:50:33.907375937 +0100
+++ b/b/nspr/configure 2014-09-29 16:51:59.213931947 +0100
-@@ -6577,7 +6579,7 @@
+@@ -6483,7 +6486,7 @@
DSO_CFLAGS=-fPIC
@@ -13,7 +13,7 @@ diff -ru a/nspr/configure b/nspr/configure
diff -ru a/nss/coreconf/Darwin.mk b/nss/coreconf/Darwin.mk
--- a/a/nss/coreconf/Darwin.mk 2014-09-29 16:50:22.992304799 +0100
+++ b/b/nss/coreconf/Darwin.mk 2014-09-29 16:51:59.214931953 +0100
-@@ -20,13 +24,17 @@
+@@ -20,13 +20,17 @@
ifeq (,$(filter-out i%86,$(CPU_ARCH)))
ifdef USE_64
@@ -31,7 +31,14 @@ diff -ru a/nss/coreconf/Darwin.mk b/nss/coreconf/Darwin.mk
override CPU_ARCH = x86
endif
else
-@@ -40,12 +48,16 @@
+@@ -33,19 +37,20 @@
+ ifeq (arm,$(CPU_ARCH))
+ # Nothing set for arm currently.
+ else
+-OS_REL_CFLAGS = -Dppc
+-CC += -arch ppc
+-CCC += -arch ppc
+ endif
endif
ifneq (,$(MACOS_SDK_DIR))
@@ -49,7 +56,7 @@ diff -ru a/nss/coreconf/Darwin.mk b/nss/coreconf/Darwin.mk
# GCC <= 3
DARWIN_SDK_FRAMEWORKS = -F$(MACOS_SDK_DIR)/System/Library/Frameworks
ifneq (,$(shell find $(MACOS_SDK_DIR)/Library/Frameworks -maxdepth 0))
-@@ -108,7 +120,7 @@
+@@ -108,7 +113,7 @@
# May override this with different compatibility and current version numbers.
DARWIN_DYLIB_VERSIONS = -compatibility_version 1 -current_version 1
# May override this with -bundle to create a loadable module.
@@ -61,7 +68,7 @@ diff -ru a/nss/coreconf/Darwin.mk b/nss/coreconf/Darwin.mk
diff -ru a/nss/Makefile b/nss/Makefile
--- a/a/nss/Makefile 2014-09-29 16:50:22.990304789 +0100
+++ b/b/nss/Makefile 2014-09-29 16:51:59.207931908 +0100
-@@ -72,6 +72,9 @@
+@@ -82,6 +82,9 @@
ifeq ($(OS_TARGET),WIN95)
NSPR_CONFIGURE_OPTS += --enable-win32-target=WIN95
endif
diff --git a/external/nss/ubsan.patch.0 b/external/nss/ubsan.patch.0
index 059a9f3b2c0a..72be8aa6600a 100644
--- a/external/nss/ubsan.patch.0
+++ b/external/nss/ubsan.patch.0
@@ -18,7 +18,7 @@
count * sizeof(lgdbSlotData);
data->data = (unsigned char *)PORT_ZAlloc(dataLen);
-@@ -327,7 +327,7 @@
+@@ -329,7 +329,7 @@
}
if ((encoded->major == LGDB_DB_EXT1_VERSION_MAJOR) &&
(encoded->minor >= LGDB_DB_EXT1_VERSION_MINOR)) {
diff --git a/external/openssl/ExternalPackage_openssl.mk b/external/openssl/ExternalPackage_openssl.mk
index 695c7b7119b6..d0c0dbaab975 100644
--- a/external/openssl/ExternalPackage_openssl.mk
+++ b/external/openssl/ExternalPackage_openssl.mk
@@ -13,9 +13,17 @@ $(eval $(call gb_ExternalPackage_use_external_project,openssl,openssl))
ifeq ($(COM),MSC)
$(eval $(call gb_ExternalPackage_add_files,openssl,$(LIBO_LIB_FOLDER),\
- out32dll/ssleay32.dll \
- out32dll/libeay32.dll \
+ libcrypto-1_1.dll \
+ libssl-1_1.dll \
))
+ifneq ($(DISABLE_PYTHON),TRUE)
+ifneq ($(SYSTEM_PYTHON),TRUE)
+$(eval $(call gb_ExternalPackage_add_files,openssl,$(LIBO_LIB_FOLDER)/python-core-$(PYTHON_VERSION)/lib, \
+ libcrypto-1_1.dll \
+ libssl-1_1.dll \
+))
+endif
+endif
endif
# vim: set noet sw=4 ts=4:
diff --git a/external/openssl/ExternalProject_openssl.mk b/external/openssl/ExternalProject_openssl.mk
index 5f5fb42c5eef..eccf8438958a 100644
--- a/external/openssl/ExternalProject_openssl.mk
+++ b/external/openssl/ExternalProject_openssl.mk
@@ -42,7 +42,9 @@ OPENSSL_PLATFORM := \
ios-armv7\
,\
$(if $(filter WNT,$(OS)),\
- $(if $(filter INTEL,$(CPUNAME)),VC-WIN32,VC-WIN64A)\
+ $(if $(filter INTEL,$(CPUNAME)),VC-WIN32)\
+ $(if $(filter X86_64,$(CPUNAME)),VC-WIN64A)\
+ $(if $(filter ARM64,$(CPUNAME)),VC-WIN64-ARM)\
,\
$(if $(filter MACOSX,$(OS)),\
$(if $(filter POWERPC,$(CPUNAME)),darwin-ppc-cc)\
@@ -59,11 +61,9 @@ $(eval $(call gb_ExternalProject_use_nmake,openssl,build))
$(call gb_ExternalProject_get_state_target,openssl,build):
$(call gb_ExternalProject_run,build,\
- export PERL="$(shell cygpath -w $(PERL))" \
- && $(PERL) Configure $(OPENSSL_PLATFORM) no-idea \
- && cmd /c "ms\do_ms.bat $(PERL) $(OPENSSL_PLATFORM)" \
- && nmake -f "ms\ntdll.mak" \
- && mv inc32/* include/ \
+ CONFIGURE_INSIST=1 $(PERL) Configure $(OPENSSL_PLATFORM) no-tests no-multilib \
+ && export PERL="$(shell cygpath -w $(PERL))" \
+ && nmake -f makefile \
)
else
@@ -75,8 +75,7 @@ $(call gb_ExternalProject_get_state_target,openssl,build):
$(if $(filter WNT,$(OS)), \
$(PERL) Configure, \
./config)) \
- $(OPENSSL_PLATFORM) no-dso no-shared \
- $(if $(filter-out WNT,$(OS)),no-idea) \
+ $(OPENSSL_PLATFORM) no-dso no-shared no-tests no-multilib threads \
$(if $(filter-out ANDROID iOS WNT,$(OS)), \
$(if $(SYSBASE),-I$(SYSBASE)/usr/include -L$(SYSBASE)/usr/lib)) \
$(if $(filter MACOSX,$(OS)),--prefix=/@.__________________________________________________OOO) \
diff --git a/external/openssl/UnpackedTarball_openssl.mk b/external/openssl/UnpackedTarball_openssl.mk
index e7fca1116545..6f00cf7f7e44 100644
--- a/external/openssl/UnpackedTarball_openssl.mk
+++ b/external/openssl/UnpackedTarball_openssl.mk
@@ -12,17 +12,7 @@ $(eval $(call gb_UnpackedTarball_UnpackedTarball,openssl))
$(eval $(call gb_UnpackedTarball_set_tarball,openssl,$(OPENSSL_TARBALL),,openssl))
$(eval $(call gb_UnpackedTarball_add_patches,openssl,\
- external/openssl/openssllnx.patch \
- external/openssl/opensslwnt.patch \
- $(if $(filter INTEL,$(CPUNAME)),external/openssl/opensslwnt_safeseh.patch) \
- external/openssl/openssl-1.0.1h-win64.patch.1 \
- external/openssl/opensslsol.patch \
- external/openssl/opensslios.patch \
- external/openssl/opensslosxppc.patch \
- external/openssl/openssl-3650-masm.patch.1 \
- external/openssl/openssl-fixbuild.patch.1 \
- external/openssl/openssl-1.0.2k-cve-2020-1971.patch.1 \
- external/openssl/ccb0a11145ee72b042d10593a64eaf9e8a55ec12.patch.1 \
+ external/openssl/openssl-no-multilib.patch.0 \
))
# vim: set noet sw=4 ts=4:
diff --git a/external/openssl/ccb0a11145ee72b042d10593a64eaf9e8a55ec12.patch.1 b/external/openssl/ccb0a11145ee72b042d10593a64eaf9e8a55ec12.patch.1
deleted file mode 100644
index cf809750ecfb..000000000000
--- a/external/openssl/ccb0a11145ee72b042d10593a64eaf9e8a55ec12.patch.1
+++ /dev/null
@@ -1,56 +0,0 @@
-From ccb0a11145ee72b042d10593a64eaf9e8a55ec12 Mon Sep 17 00:00:00 2001
-From: Matt Caswell <matt@openssl.org>
-Date: Tue, 17 Aug 2021 14:41:48 +0100
-Subject: [PATCH] Fix a read buffer overrun in X509_CERT_AUX_print()
-
-This is a backport of commit c5dc9ab965f to 1.0.2. That commit fixed
-the same bug but in master/1.1.1 it is in the function X509_aux_print().
-The original commit had the following description:
-
-Fix a read buffer overrun in X509_aux_print().
-
-The ASN1_STRING_get0_data(3) manual explitely cautions the reader
-that the data is not necessarily NUL-terminated, and the function
-X509_alias_set1(3) does not sanitize the data passed into it in any
-way either, so we must assume the return value from X509_alias_get0(3)
-is merely a byte array and not necessarily a string in the sense
-of the C language.
-
-I found this bug while writing manual pages for X509_print_ex(3)
-and related functions. Theo Buehler <tb@openbsd.org> checked my
-patch to fix the same bug in LibreSSL, see
-
-http://cvsweb.openbsd.org/src/lib/libcrypto/asn1/t_x509a.c#rev1.9
-
-As an aside, note that the function still produces incomplete and
-misleading results when the data contains a NUL byte in the middle
-and that error handling is consistently absent throughout, even
-though the function provides an "int" return value obviously intended
-to be 1 for success and 0 for failure, and even though this function
-is called by another function that also wants to return 1 for success
-and 0 for failure and even does so in many of its code paths, though
-not in others. But let's stay focussed. Many things would be nice
-to have in the wide wild world, but a buffer overflow must not be
-allowed to remain in our backyard.
-
-CVE-2021-3712
-
-Reviewed-by: Paul Dale <pauli@openssl.org>
----
- crypto/asn1/t_x509a.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/crypto/asn1/t_x509a.c b/crypto/asn1/t_x509a.c
-index d1b897a469fd..b1bc9d0cd28b 100644
---- a/crypto/asn1/t_x509a.c
-+++ b/crypto/asn1/t_x509a.c
-@@ -104,7 +104,8 @@ int X509_CERT_AUX_print(BIO *out, X509_CERT_AUX *aux, int indent)
- } else
- BIO_printf(out, "%*sNo Rejected Uses.\n", indent, "");
- if (aux->alias)
-- BIO_printf(out, "%*sAlias: %s\n", indent, "", aux->alias->data);
-+ BIO_printf(out, "%*sAlias: %.*s\n", indent, "", aux->alias->length,
-+ aux->alias->data);
- if (aux->keyid) {
- BIO_printf(out, "%*sKey Id: ", indent, "");
- for (i = 0; i < aux->keyid->length; i++)
diff --git a/external/openssl/openssl-1.0.1h-win64.patch.1 b/external/openssl/openssl-1.0.1h-win64.patch.1
deleted file mode 100644
index aea914633ebb..000000000000
--- a/external/openssl/openssl-1.0.1h-win64.patch.1
+++ /dev/null
@@ -1,47 +0,0 @@
-diff --git a/ms/do_win64a.bat b/ms/do_win64a.bat
-index 8768dc6..6772390 100755
---- a/ms/do_win64a.bat
-+++ b/ms/do_win64a.bat
-@@ -1,19 +1,19 @@
--perl util\mkfiles.pl >MINFO
-+perl util/mkfiles.pl >MINFO
-
- cmd /c "nasm -f win64 -v" >NUL 2>&1
- if %errorlevel% neq 0 goto ml64
-
--perl ms\uplink-x86_64.pl nasm > ms\uptable.asm
--nasm -f win64 -o ms\uptable.obj ms\uptable.asm
-+perl ms/uplink-x86_64.pl nasm > ms/uptable.asm
-+nasm -f win64 -o ms/uptable.obj ms/uptable.asm
- goto proceed
-
- :ml64
--perl ms\uplink-x86_64.pl masm > ms\uptable.asm
--ml64 -c -Foms\uptable.obj ms\uptable.asm
-+perl ms/uplink-x86_64.pl masm > ms/uptable.asm
-+ml64 -c -Foms/uptable.obj ms/uptable.asm
-
- :proceed
--perl util\mk1mf.pl VC-WIN64A >ms\nt.mak
--perl util\mk1mf.pl dll VC-WIN64A >ms\ntdll.mak
-+perl util/mk1mf.pl VC-WIN64A >ms/nt.mak
-+perl util/mk1mf.pl dll VC-WIN64A >ms/ntdll.mak
-
--perl util\mkdef.pl 32 libeay > ms\libeay32.def
--perl util\mkdef.pl 32 ssleay > ms\ssleay32.def
-+perl util/mkdef.pl 32 libeay > ms/libeay32.def
-+perl util/mkdef.pl 32 ssleay > ms/ssleay32.def
-diff --git a/util/mk1mf.pl b/util/mk1mf.pl
-index 72fa089..d98def1 100755
---- a/util/mk1mf.pl
-+++ b/util/mk1mf.pl
-@@ -233,6 +233,9 @@ else
- $cflags.=' -DTERMIO';
- }
-
-+# force unix style path separator
-+${o} = "/";
-+
- $fipsdir =~ s/\//${o}/g;
-
- $out_dir=(defined($VARS{'OUT'}))?$VARS{'OUT'}:$out_def.($debug?".dbg":"");
diff --git a/external/openssl/openssl-1.0.2k-cve-2020-1971.patch.1 b/external/openssl/openssl-1.0.2k-cve-2020-1971.patch.1
deleted file mode 100644
index 313f9cd870d7..000000000000
--- a/external/openssl/openssl-1.0.2k-cve-2020-1971.patch.1
+++ /dev/null
@@ -1,578 +0,0 @@
-diff -up openssl-1.0.2k/crypto/asn1/asn1_err.c.null-dereference openssl-1.0.2k/crypto/asn1/asn1_err.c
---- openssl-1.0.2k/crypto/asn1/asn1_err.c.null-dereference 2020-12-04 10:08:08.506247597 +0100
-+++ openssl-1.0.2k/crypto/asn1/asn1_err.c 2020-12-04 10:12:31.901956486 +0100
-@@ -1,6 +1,6 @@
- /* crypto/asn1/asn1_err.c */
- /* ====================================================================
-- * Copyright (c) 1999-2018 The OpenSSL Project. All rights reserved.
-+ * Copyright (c) 1999-2020 The OpenSSL Project. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
-@@ -103,6 +103,7 @@ static ERR_STRING_DATA ASN1_str_functs[]
- {ERR_FUNC(ASN1_F_ASN1_ITEM_DUP), "ASN1_item_dup"},
- {ERR_FUNC(ASN1_F_ASN1_ITEM_EX_COMBINE_NEW), "ASN1_ITEM_EX_COMBINE_NEW"},
- {ERR_FUNC(ASN1_F_ASN1_ITEM_EX_D2I), "ASN1_ITEM_EX_D2I"},
-+ {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_ITEM_EX_I2D, 0), "ASN1_item_ex_i2d"},
- {ERR_FUNC(ASN1_F_ASN1_ITEM_I2D_BIO), "ASN1_item_i2d_bio"},
- {ERR_FUNC(ASN1_F_ASN1_ITEM_I2D_FP), "ASN1_item_i2d_fp"},
- {ERR_FUNC(ASN1_F_ASN1_ITEM_PACK), "ASN1_item_pack"},
-@@ -202,6 +203,7 @@ static ERR_STRING_DATA ASN1_str_reasons[
- {ERR_REASON(ASN1_R_AUX_ERROR), "aux error"},
- {ERR_REASON(ASN1_R_BAD_CLASS), "bad class"},
- {ERR_REASON(ASN1_R_BAD_OBJECT_HEADER), "bad object header"},
-+ {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_BAD_TEMPLATE), "bad template"},
- {ERR_REASON(ASN1_R_BAD_PASSWORD_READ), "bad password read"},
- {ERR_REASON(ASN1_R_BAD_TAG), "bad tag"},
- {ERR_REASON(ASN1_R_BMPSTRING_IS_WRONG_LENGTH),
-diff -up openssl-1.0.2k/crypto/asn1/asn1.h.null-dereference openssl-1.0.2k/crypto/asn1/asn1.h
---- openssl-1.0.2k/crypto/asn1/asn1.h.null-dereference 2020-12-04 11:00:06.896637900 +0100
-+++ openssl-1.0.2k/crypto/asn1/asn1.h 2020-12-04 11:04:47.079562987 +0100
-@@ -1202,6 +1202,7 @@ void ERR_load_ASN1_strings(void);
- # define ASN1_F_ASN1_ITEM_DUP 191
- # define ASN1_F_ASN1_ITEM_EX_COMBINE_NEW 121
- # define ASN1_F_ASN1_ITEM_EX_D2I 120
-+# define ASN1_F_ASN1_ITEM_EX_I2D 231
- # define ASN1_F_ASN1_ITEM_I2D_BIO 192
- # define ASN1_F_ASN1_ITEM_I2D_FP 193
- # define ASN1_F_ASN1_ITEM_PACK 198
-@@ -1298,6 +1299,7 @@ void ERR_load_ASN1_strings(void);
- # define ASN1_R_AUX_ERROR 100
- # define ASN1_R_BAD_CLASS 101
- # define ASN1_R_BAD_OBJECT_HEADER 102
-+# define ASN1_R_BAD_TEMPLATE 230
- # define ASN1_R_BAD_PASSWORD_READ 103
- # define ASN1_R_BAD_TAG 104
- # define ASN1_R_BMPSTRING_IS_WRONG_LENGTH 214
-diff -up openssl-1.0.2k/crypto/asn1/tasn_dec.c.null-dereference openssl-1.0.2k/crypto/asn1/tasn_dec.c
---- openssl-1.0.2k/crypto/asn1/tasn_dec.c.null-dereference 2020-12-04 10:12:42.036057323 +0100
-+++ openssl-1.0.2k/crypto/asn1/tasn_dec.c 2020-12-04 10:17:45.685035333 +0100
-@@ -223,6 +223,15 @@ static int asn1_item_ex_d2i(ASN1_VALUE *
- break;
-
- case ASN1_ITYPE_MSTRING:
-+ /*
-+ * It never makes sense for multi-strings to have implicit tagging, so
-+ * if tag != -1, then this looks like an error in the template.
-+ */
-+ if (tag != -1) {
-+ ASN1err(ASN1_F_ASN1_ITEM_EX_D2I, ASN1_R_BAD_TEMPLATE);
-+ goto err;
-+ }
-+
- p = *in;
- /* Just read in tag and class */
- ret = asn1_check_tlen(NULL, &otag, &oclass, NULL, NULL,
-@@ -240,6 +249,7 @@ static int asn1_item_ex_d2i(ASN1_VALUE *
- ASN1err(ASN1_F_ASN1_ITEM_EX_D2I, ASN1_R_MSTRING_NOT_UNIVERSAL);
- goto err;
- }
-+
- /* Check tag matches bit map */
- if (!(ASN1_tag2bit(otag) & it->utype)) {
- /* If OPTIONAL, assume this is OK */
-@@ -316,6 +326,15 @@ static int asn1_item_ex_d2i(ASN1_VALUE *
- goto err;
-
- case ASN1_ITYPE_CHOICE:
-+ /*
-+ * It never makes sense for CHOICE types to have implicit tagging, so
-+ * if tag != -1, then this looks like an error in the template.
-+ */
-+ if (tag != -1) {
-+ ASN1err(ASN1_F_ASN1_ITEM_EX_D2I, ASN1_R_BAD_TEMPLATE);
-+ goto err;
-+ }
-+
- if (asn1_cb && !asn1_cb(ASN1_OP_D2I_PRE, pval, it, NULL))
- goto auxerr;
- if (*pval) {
-diff -up openssl-1.0.2k/crypto/asn1/tasn_enc.c.null-dereference openssl-1.0.2k/crypto/asn1/tasn_enc.c
---- openssl-1.0.2k/crypto/asn1/tasn_enc.c.null-dereference 2020-12-04 10:18:30.261472002 +0100
-+++ openssl-1.0.2k/crypto/asn1/tasn_enc.c 2020-12-04 10:21:14.310078987 +0100
-@@ -151,9 +151,25 @@ int ASN1_item_ex_i2d(ASN1_VALUE **pval,
- break;
-
- case ASN1_ITYPE_MSTRING:
-+ /*
-+ * It never makes sense for multi-strings to have implicit tagging, so
-+ * if tag != -1, then this looks like an error in the template.
-+ */
-+ if (tag != -1) {
-+ ASN1err(ASN1_F_ASN1_ITEM_EX_I2D, ASN1_R_BAD_TEMPLATE);
-+ return -1;
-+ }
- return asn1_i2d_ex_primitive(pval, out, it, -1, aclass);
-
- case ASN1_ITYPE_CHOICE:
-+ /*
-+ * It never makes sense for CHOICE types to have implicit tagging, so
-+ * if tag != -1, then this looks like an error in the template.
-+ */
-+ if (tag != -1) {
-+ ASN1err(ASN1_F_ASN1_ITEM_EX_I2D, ASN1_R_BAD_TEMPLATE);
-+ return -1;
-+ }
- if (asn1_cb && !asn1_cb(ASN1_OP_I2D_PRE, pval, it, NULL))
- return 0;
- i = asn1_get_choice_selector(pval, it);
-diff -up openssl-1.0.2k/crypto/x509v3/v3_genn.c.null-dereference openssl-1.0.2k/crypto/x509v3/v3_genn.c
---- openssl-1.0.2k/crypto/x509v3/v3_genn.c.null-dereference 2020-12-04 10:28:02.374237945 +0100
-+++ openssl-1.0.2k/crypto/x509v3/v3_genn.c 2020-12-04 10:36:51.156138263 +0100
-@@ -72,8 +72,9 @@ ASN1_SEQUENCE(OTHERNAME) = {
- IMPLEMENT_ASN1_FUNCTIONS(OTHERNAME)
-
- ASN1_SEQUENCE(EDIPARTYNAME) = {
-- ASN1_IMP_OPT(EDIPARTYNAME, nameAssigner, DIRECTORYSTRING, 0),
-- ASN1_IMP_OPT(EDIPARTYNAME, partyName, DIRECTORYSTRING, 1)
-+ /* DirectoryString is a CHOICE type so use explicit tagging */
-+ ASN1_EXP_OPT(EDIPARTYNAME, nameAssigner, DIRECTORYSTRING, 0),
-+ ASN1_EXP(EDIPARTYNAME, partyName, DIRECTORYSTRING, 1)
- } ASN1_SEQUENCE_END(EDIPARTYNAME)
-
- IMPLEMENT_ASN1_FUNCTIONS(EDIPARTYNAME)
-@@ -107,6 +108,37 @@ GENERAL_NAME *GENERAL_NAME_dup(GENERAL_N
- (char *)a);
- }
-
-+static int edipartyname_cmp(const EDIPARTYNAME *a, const EDIPARTYNAME *b)
-+{
-+ int res;
-+
-+ if (a == NULL || b == NULL) {
-+ /*
-+ * Shouldn't be possible in a valid GENERAL_NAME, but we handle it
-+ * anyway. OTHERNAME_cmp treats NULL != NULL so we do the same here
-+ */
-+ return -1;
-+ }
-+ if (a->nameAssigner == NULL && b->nameAssigner != NULL)
-+ return -1;
-+ if (a->nameAssigner != NULL && b->nameAssigner == NULL)
-+ return 1;
-+ /* If we get here then both have nameAssigner set, or both unset */
-+ if (a->nameAssigner != NULL) {
-+ res = ASN1_STRING_cmp(a->nameAssigner, b->nameAssigner);
-+ if (res != 0)
-+ return res;
-+ }
-+ /*
-+ * partyName is required, so these should never be NULL. We treat it in
-+ * the same way as the a == NULL || b == NULL case above
-+ */
-+ if (a->partyName == NULL || b->partyName == NULL)
-+ return -1;
-+
-+ return ASN1_STRING_cmp(a->partyName, b->partyName);
-+}
-+
- /* Returns 0 if they are equal, != 0 otherwise. */
- int GENERAL_NAME_cmp(GENERAL_NAME *a, GENERAL_NAME *b)
- {
-@@ -116,8 +148,11 @@ int GENERAL_NAME_cmp(GENERAL_NAME *a, GE
- return -1;
- switch (a->type) {
- case GEN_X400:
-+ result = ASN1_TYPE_cmp(a->d.x400Address, b->d.x400Address);
-+ break;
-+
- case GEN_EDIPARTY:
-- result = ASN1_TYPE_cmp(a->d.other, b->d.other);
-+ result = edipartyname_cmp(a->d.ediPartyName, b->d.ediPartyName);
- break;
-
- case GEN_OTHERNAME:
-@@ -164,8 +199,11 @@ void GENERAL_NAME_set0_value(GENERAL_NAM
- {
- switch (type) {
- case GEN_X400:
-+ a->d.x400Address = value;
-+ break;
-+
- case GEN_EDIPARTY:
-- a->d.other = value;
-+ a->d.ediPartyName = value;
- break;
-
- case GEN_OTHERNAME:
-@@ -199,8 +237,10 @@ void *GENERAL_NAME_get0_value(GENERAL_NA
- *ptype = a->type;
- switch (a->type) {
- case GEN_X400:
-+ return a->d.x400Address;
-+
- case GEN_EDIPARTY:
-- return a->d.other;
-+ return a->d.ediPartyName;
-
- case GEN_OTHERNAME:
- return a->d.otherName;
-diff -up openssl-1.0.2k/crypto/x509v3/v3nametest.c.null-dereference openssl-1.0.2k/crypto/x509v3/v3nametest.c
---- openssl-1.0.2k/crypto/x509v3/v3nametest.c.null-dereference 2020-12-04 10:28:02.374237945 +0100
-+++ openssl-1.0.2k/crypto/x509v3/v3nametest.c 2020-12-04 10:36:51.156138263 +0100
-@@ -321,6 +321,356 @@ static void run_cert(X509 *crt, const ch
- }
- }
-
-+struct gennamedata {
-+ const unsigned char der[22];
-+ size_t derlen;
-+} gennames[] = {
-+ {
-+ /*
-+ * [0] {
-+ * OBJECT_IDENTIFIER { 1.2.840.113554.4.1.72585.2.1 }
-+ * [0] {
-+ * SEQUENCE {}
-+ * }
-+ * }
-+ */
-+ {
-+ 0xa0, 0x13, 0x06, 0x0d, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04,
-+ 0x01, 0x84, 0xb7, 0x09, 0x02, 0x01, 0xa0, 0x02, 0x30, 0x00
-+ },
-+ 21
-+ }, {
-+ /*
-+ * [0] {
-+ * OBJECT_IDENTIFIER { 1.2.840.113554.4.1.72585.2.1 }
-+ * [0] {
-+ * [APPLICATION 0] {}
-+ * }
-+ * }
-+ */
-+ {
-+ 0xa0, 0x13, 0x06, 0x0d, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04,
-+ 0x01, 0x84, 0xb7, 0x09, 0x02, 0x01, 0xa0, 0x02, 0x60, 0x00
-+ },
-+ 21
-+ }, {
-+ /*
-+ * [0] {
-+ * OBJECT_IDENTIFIER { 1.2.840.113554.4.1.72585.2.1 }
-+ * [0] {
-+ * UTF8String { "a" }
-+ * }
-+ * }
-+ */
-+ {
-+ 0xa0, 0x14, 0x06, 0x0d, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04,
-+ 0x01, 0x84, 0xb7, 0x09, 0x02, 0x01, 0xa0, 0x03, 0x0c, 0x01, 0x61
-+ },
-+ 22
-+ }, {
-+ /*
-+ * [0] {
-+ * OBJECT_IDENTIFIER { 1.2.840.113554.4.1.72585.2.2 }
-+ * [0] {
-+ * UTF8String { "a" }
-+ * }
-+ * }
-+ */
-+ {
-+ 0xa0, 0x14, 0x06, 0x0d, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04,
-+ 0x01, 0x84, 0xb7, 0x09, 0x02, 0x02, 0xa0, 0x03, 0x0c, 0x01, 0x61
-+ },
-+ 22
-+ }, {
-+ /*
-+ * [0] {
-+ * OBJECT_IDENTIFIER { 1.2.840.113554.4.1.72585.2.1 }
-+ * [0] {
-+ * UTF8String { "b" }
-+ * }
-+ * }
-+ */
-+ {
-+ 0xa0, 0x14, 0x06, 0x0d, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04,
-+ 0x01, 0x84, 0xb7, 0x09, 0x02, 0x01, 0xa0, 0x03, 0x0c, 0x01, 0x62
-+ },
-+ 22
-+ }, {
-+ /*
-+ * [0] {
-+ * OBJECT_IDENTIFIER { 1.2.840.113554.4.1.72585.2.1 }
-+ * [0] {
-+ * BOOLEAN { TRUE }
-+ * }
-+ * }
-+ */
-+ {
-+ 0xa0, 0x14, 0x06, 0x0d, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04,
-+ 0x01, 0x84, 0xb7, 0x09, 0x02, 0x01, 0xa0, 0x03, 0x01, 0x01, 0xff
-+ },
-+ 22
-+ }, {
-+ /*
-+ * [0] {
-+ * OBJECT_IDENTIFIER { 1.2.840.113554.4.1.72585.2.1 }
-+ * [0] {
-+ * BOOLEAN { FALSE }
-+ * }
-+ * }
-+ */
-+ {
-+ 0xa0, 0x14, 0x06, 0x0d, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04,
-+ 0x01, 0x84, 0xb7, 0x09, 0x02, 0x01, 0xa0, 0x03, 0x01, 0x01, 0x00
-+ },
-+ 22
-+ }, {
-+ /* [1 PRIMITIVE] { "a" } */
-+ {
-+ 0x81, 0x01, 0x61
-+ },
-+ 3
-+ }, {
-+ /* [1 PRIMITIVE] { "b" } */
-+ {
-+ 0x81, 0x01, 0x62
-+ },
-+ 3
-+ }, {
-+ /* [2 PRIMITIVE] { "a" } */
-+ {
-+ 0x82, 0x01, 0x61
-+ },
-+ 3
-+ }, {
-+ /* [2 PRIMITIVE] { "b" } */
-+ {
-+ 0x82, 0x01, 0x62
-+ },
-+ 3
-+ }, {
-+ /*
-+ * [4] {
-+ * SEQUENCE {
-+ * SET {
-+ * SEQUENCE {
-+ * # commonName
-+ * OBJECT_IDENTIFIER { 2.5.4.3 }
-+ * UTF8String { "a" }
-+ * }
-+ * }
-+ * }
-+ * }
-+ */
-+ {
-+ 0xa4, 0x0e, 0x30, 0x0c, 0x31, 0x0a, 0x30, 0x08, 0x06, 0x03, 0x55,
-+ 0x04, 0x03, 0x0c, 0x01, 0x61
-+ },
-+ 16
-+ }, {
-+ /*
-+ * [4] {
-+ * SEQUENCE {
-+ * SET {
-+ * SEQUENCE {
-+ * # commonName
-+ * OBJECT_IDENTIFIER { 2.5.4.3 }
-+ * UTF8String { "b" }
-+ * }
-+ * }
-+ * }
-+ * }
-+ */
-+ {
-+ 0xa4, 0x0e, 0x30, 0x0c, 0x31, 0x0a, 0x30, 0x08, 0x06, 0x03, 0x55,
-+ 0x04, 0x03, 0x0c, 0x01, 0x62
-+ },
-+ 16
-+ }, {
-+ /*
-+ * [5] {
-+ * [1] {
-+ * UTF8String { "a" }
-+ * }
-+ * }
-+ */
-+ {
-+ 0xa5, 0x05, 0xa1, 0x03, 0x0c, 0x01, 0x61
-+ },
-+ 7
-+ }, {
-+ /*
-+ * [5] {
-+ * [1] {
-+ * UTF8String { "b" }
-+ * }
-+ * }
-+ */
-+ {
-+ 0xa5, 0x05, 0xa1, 0x03, 0x0c, 0x01, 0x62
-+ },
-+ 7
-+ }, {
-+ /*
-+ * [5] {
-+ * [0] {
-+ * UTF8String {}
-+ * }
-+ * [1] {
-+ * UTF8String { "a" }
-+ * }
-+ * }
-+ */
-+ {
-+ 0xa5, 0x09, 0xa0, 0x02, 0x0c, 0x00, 0xa1, 0x03, 0x0c, 0x01, 0x61
-+ },
-+ 11
-+ }, {
-+ /*
-+ * [5] {
-+ * [0] {
-+ * UTF8String { "a" }
-+ * }
-+ * [1] {
-+ * UTF8String { "a" }
-+ * }
-+ * }
-+ */
-+ {
-+ 0xa5, 0x0a, 0xa0, 0x03, 0x0c, 0x01, 0x61, 0xa1, 0x03, 0x0c, 0x01,
-+ 0x61
-+ },
-+ 12
-+ }, {
-+ /*
-+ * [5] {
-+ * [0] {
-+ * UTF8String { "b" }
-+ * }
-+ * [1] {
-+ * UTF8String { "a" }
-+ * }
-+ * }
-+ */
-+ {
-+ 0xa5, 0x0a, 0xa0, 0x03, 0x0c, 0x01, 0x62, 0xa1, 0x03, 0x0c, 0x01,
-+ 0x61
-+ },
-+ 12
-+ }, {
-+ /* [6 PRIMITIVE] { "a" } */
-+ {
-+ 0x86, 0x01, 0x61
-+ },
-+ 3
-+ }, {
-+ /* [6 PRIMITIVE] { "b" } */
-+ {
-+ 0x86, 0x01, 0x62
-+ },
-+ 3
-+ }, {
-+ /* [7 PRIMITIVE] { `11111111` } */
-+ {
-+ 0x87, 0x04, 0x11, 0x11, 0x11, 0x11
-+ },
-+ 6
-+ }, {
-+ /* [7 PRIMITIVE] { `22222222`} */
-+ {
-+ 0x87, 0x04, 0x22, 0x22, 0x22, 0x22
-+ },
-+ 6
-+ }, {
-+ /* [7 PRIMITIVE] { `11111111111111111111111111111111` } */
-+ {
-+ 0x87, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
-+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11
-+ },
-+ 18
-+ }, {
-+ /* [7 PRIMITIVE] { `22222222222222222222222222222222` } */
-+ {
-+ 0x87, 0x10, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
-+ 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22
-+ },
-+ 18
-+ }, {
-+ /* [8 PRIMITIVE] { 1.2.840.113554.4.1.72585.2.1 } */
-+ {
-+ 0x88, 0x0d, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04, 0x01, 0x84,
-+ 0xb7, 0x09, 0x02, 0x01
-+ },
-+ 15
-+ }, {
-+ /* [8 PRIMITIVE] { 1.2.840.113554.4.1.72585.2.2 } */
-+ {
-+ 0x88, 0x0d, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04, 0x01, 0x84,
-+ 0xb7, 0x09, 0x02, 0x02
-+ },
-+ 15
-+ }
-+};
-+
-+#define OSSL_NELEM(x) (sizeof(x)/sizeof((x)[0]))
-+
-+static int test_GENERAL_NAME_cmp(void)
-+{
-+ size_t i, j;
-+ GENERAL_NAME **namesa = OPENSSL_malloc(sizeof(*namesa)
-+ * OSSL_NELEM(gennames));
-+ GENERAL_NAME **namesb = OPENSSL_malloc(sizeof(*namesb)
-+ * OSSL_NELEM(gennames));
-+ int testresult = 0;
-+
-+ if (namesa == NULL || namesb == NULL)
-+ goto end;
-+
-+ for (i = 0; i < OSSL_NELEM(gennames); i++) {
-+ const unsigned char *derp = gennames[i].der;
-+
-+ /*
-+ * We create two versions of each GENERAL_NAME so that we ensure when
-+ * we compare them they are always different pointers.
-+ */
-+ namesa[i] = d2i_GENERAL_NAME(NULL, &derp, gennames[i].derlen);
-+ derp = gennames[i].der;
-+ namesb[i] = d2i_GENERAL_NAME(NULL, &derp, gennames[i].derlen);
-+ if (namesa[i] == NULL || namesb[i] == NULL)
-+ goto end;
-+ }
-+
-+ /* Every name should be equal to itself and not equal to any others. */
-+ for (i = 0; i < OSSL_NELEM(gennames); i++) {
-+ for (j = 0; j < OSSL_NELEM(gennames); j++) {
-+ if (i == j) {
-+ if (GENERAL_NAME_cmp(namesa[i], namesb[j]) != 0)
-+ goto end;
-+ } else {
-+ if (GENERAL_NAME_cmp(namesa[i], namesb[j]) == 0)
-+ goto end;
-+ }
-+ }
-+ }
-+ testresult = 1;
-+
-+ end:
-+ for (i = 0; i < OSSL_NELEM(gennames); i++) {
-+ if (namesa != NULL)
-+ GENERAL_NAME_free(namesa[i]);
-+ if (namesb != NULL)
-+ GENERAL_NAME_free(namesb[i]);
-+ }
-+ OPENSSL_free(namesa);
-+ OPENSSL_free(namesb);
-+
-+ if (!testresult)
-+ fprintf(stderr, "test of GENERAL_NAME_cmp failed\n");
-+
-+ return testresult;
-+}
-+
-+
-+
- int main(void)
- {
- const struct set_name_fn *pfn = name_fns;
-@@ -342,5 +692,8 @@ int main(void)
- }
- ++pfn;
- }
-+
-+ errors += !test_GENERAL_NAME_cmp();
-+
- return errors > 0 ? 1 : 0;
- }
diff --git a/external/openssl/openssl-3650-masm.patch.1 b/external/openssl/openssl-3650-masm.patch.1
deleted file mode 100644
index 97f1eb6446c3..000000000000
--- a/external/openssl/openssl-3650-masm.patch.1
+++ /dev/null
@@ -1,35 +0,0 @@
-diff --git a/crypto/perlasm/x86masm.pl b/crypto/perlasm/x86masm.pl
-index 1741342..917d0f8 100644
---- a/crypto/perlasm/x86masm.pl
-+++ b/crypto/perlasm/x86masm.pl
-@@ -18,10 +18,10 @@ sub ::generic
-
- if ($opcode =~ /lea/ && @arg[1] =~ s/.*PTR\s+(\(.*\))$/OFFSET $1/) # no []
- { $opcode="mov"; }
-- elsif ($opcode !~ /movq/)
-+ elsif ($opcode !~ /mov[dq]$/)
- { # fix xmm references
-- $arg[0] =~ s/\b[A-Z]+WORD\s+PTR/XMMWORD PTR/i if ($arg[1]=~/\bxmm[0-7]\b/i);
-- $arg[1] =~ s/\b[A-Z]+WORD\s+PTR/XMMWORD PTR/i if ($arg[0]=~/\bxmm[0-7]\b/i);
-+ $arg[0] =~ s/\b[A-Z]+WORD\s+PTR/XMMWORD PTR/i if ($arg[-1]=~/\bxmm[0-7]\b/i);
-+ $arg[-1] =~ s/\b[A-Z]+WORD\s+PTR/XMMWORD PTR/i if ($arg[0]=~/\bxmm[0-7]\b/i);
- }
-
- &::emit($opcode,@arg);
-@@ -160,13 +160,13 @@ sub ::public_label
- { push(@out,"PUBLIC\t".&::LABEL($_[0],$nmdecor.$_[0])."\n"); }
-
- sub ::data_byte
--{ push(@out,("DB\t").join(',',@_)."\n"); }
-+{ push(@out,("DB\t").join(',',splice(@_,0,16))."\n") while(@_); }
-
- sub ::data_short
--{ push(@out,("DW\t").join(',',@_)."\n"); }
-+{ push(@out,("DW\t").join(',',splice(@_,0,8))."\n") while(@_); }
-
- sub ::data_word
--{ push(@out,("DD\t").join(',',@_)."\n"); }
-+{ push(@out,("DD\t").join(',',splice(@_,0,4))."\n") while(@_); }
-
- sub ::align
- { push(@out,"ALIGN\t$_[0]\n"); }
diff --git a/external/openssl/openssl-fixbuild.patch.1 b/external/openssl/openssl-fixbuild.patch.1
deleted file mode 100644
index 5a986e87214b..000000000000
--- a/external/openssl/openssl-fixbuild.patch.1
+++ /dev/null
@@ -1,23 +0,0 @@
---- a/crypto/evp/Makefile
-+++ b/crypto/evp/Makefile
-@@ -289,7 +289,7 @@
- e_idea.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
- e_idea.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
- e_idea.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
--e_idea.o: ../../include/openssl/evp.h ../../include/openssl/idea.h
-+e_idea.o: ../../include/openssl/evp.h ../idea/idea.h
- e_idea.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
- e_idea.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
- e_idea.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
---- a/util/mklink.pl
-+++ b/util/mklink.pl
-@@ -50,8 +50,7 @@
- my $to = join('/', @to_path);
-
- my $file;
--$symlink_exists=eval {symlink("",""); 1};
--if ($^O eq "msys") { $symlink_exists=0 };
-+$symlink_exists=0;
- foreach $file (@files) {
- my $err = "";
- if ($symlink_exists) {
diff --git a/external/openssl/openssl-no-multilib.patch.0 b/external/openssl/openssl-no-multilib.patch.0
new file mode 100644
index 000000000000..07c45318ac25
--- /dev/null
+++ b/external/openssl/openssl-no-multilib.patch.0
@@ -0,0 +1,38 @@
+--- Configure.orig 2020-04-21 14:22:39.000000000 +0200
++++ Configure 2020-07-07 17:25:19.256297500 +0200
+@@ -24,7 +24,7 @@
+ my $orig_death_handler = $SIG{__DIE__};
+ $SIG{__DIE__} = \&death_handler;
+
+-my $usage="Usage: Configure [no-<cipher> ...] [enable-<cipher> ...] [-Dxxx] [-lxxx] [-Lxxx] [-fxxx] [-Kxxx] [no-hw-xxx|no-hw] [[no-]threads] [[no-]shared] [[no-]zlib|zlib-dynamic] [no-asm] [no-egd] [sctp] [386] [--prefix=DIR] [--openssldir=OPENSSLDIR] [--with-xxx[=vvv]] [--config=FILE] os/compiler[:flags]\n";
++my $usage="Usage: Configure [no-<cipher> ...] [enable-<cipher> ...] [-Dxxx] [-lxxx] [-Lxxx] [-fxxx] [-Kxxx] [no-hw-xxx|no-hw] [[no-]threads] [[no-]shared] [[no-]zlib|zlib-dynamic] [no-asm] [no-egd] [no-multilib] [sctp] [386] [--prefix=DIR] [--openssldir=OPENSSLDIR] [--with-xxx[=vvv]] [--config=FILE] os/compiler[:flags]\n";
+
+ # Options:
+ #
+@@ -59,6 +59,7 @@
+ # If disabled, it also disables shared and dynamic-engine.
+ # no-asm do not use assembler
+ # no-egd do not compile support for the entropy-gathering daemon APIs
++# no-multilib exclude multilib identifier from library name
+ # [no-]zlib [don't] compile support for zlib compression.
+ # zlib-dynamic Like "zlib", but the zlib library is expected to be a shared
+ # library and will be loaded in run-time by the OpenSSL library.
+@@ -383,6 +384,7 @@
+ "mdc2",
+ "msan",
+ "multiblock",
++ "multilib",
+ "nextprotoneg",
+ "pinshared",
+ "ocb",
+@@ -1754,6 +1756,10 @@
+ if (-f catfile($srcdir, "test", $_, "build.info"));
+ }
+
++ if ($disabled{"multilib"}) {
++ $target{"multilib"} = "";
++ }
++
+ $config{build_infos} = [ ];
+
+ my %ordinals = ();
diff --git a/external/openssl/openssllnx.patch b/external/openssl/openssllnx.patch
deleted file mode 100644
index 224df8f87b2e..000000000000
--- a/external/openssl/openssllnx.patch
+++ /dev/null
@@ -1,23 +0,0 @@
---- build/openssl-0.9.8v/Configure-old 2010-04-17 13:51:42.000000000 +0200
-+++ build/openssl-0.9.8v/Configure 2010-04-17 13:52:03.000000000 +0200
-@@ -388,6 +388,9 @@
-
- "bsdi-elf-gcc", "gcc:-DPERL5 -DL_ENDIAN -fomit-frame-pointer -O3 -march=i486 -Wall::(unknown)::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-
-+"debian-kfreebsd-amd64","gcc:-m64 -DL_ENDIAN -DTERMIOS -O3 -Wa,--noexecstack -Wall -DMD32_REG_T=int::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK BF_PTR2 DES_INT DES_UNROLL:${x86_64_asm}:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+"debian-kfreebsd-i386","gcc:-DL_ENDIAN -DTERMIOS -O3 -Wa,--noexecstack -g -march=i486 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-+
- "nextstep", "cc:-O -Wall:<libc.h>:(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:::",
- "nextstep3.3", "cc:-O3 -Wall:<libc.h>:(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:::",
-
---- build/openssl-0.9.8v/Makefile.org 2010-01-27 17:06:36.000000000 +0100
-+++ build/openssl-0.9.8v/Makefile.org 2010-09-20 09:24:00.000000000 +0100
-@@ -206,7 +206,7 @@
- # same language for uniform treatment.
- BUILDENV= LC_ALL=C PLATFORM='$(PLATFORM)' PROCESSOR='$(PROCESSOR)'\
- CC='$(CC)' CFLAG='$(CFLAG)' \
-- AS='$(CC)' ASFLAG='$(CFLAG) -c' \
-+ AS='$(CC)' ASFLAG='$(CFLAG) -c -Wa,--noexecstack' \
- AR='$(AR)' NM='$(NM)' RANLIB='$(RANLIB)' \
- RC='$(RC)' \
- CROSS_COMPILE='$(CROSS_COMPILE)' \
diff --git a/external/openssl/opensslsol.patch b/external/openssl/opensslsol.patch
deleted file mode 100644
index 6122b67c930e..000000000000
--- a/external/openssl/opensslsol.patch
+++ /dev/null
@@ -1,20 +0,0 @@
---- misc/openssl-0.9.8v/Makefile.shared Wed Sep 17 17:56:40 2008
-+++ build/openssl-0.9.8v/Makefile.shared Fri Mar 26 16:04:41 2010
-@@ -95,7 +95,7 @@
- LDCMD="$${LDCMD:-$(CC)}"; LDFLAGS="$${LDFLAGS:-$(CFLAGS)}"; \
- LIBPATH=`for x in $$LIBDEPS; do echo $$x; done | sed -e 's/^ *-L//;t' -e d | uniq`; \
- LIBPATH=`echo $$LIBPATH | sed -e 's/ /:/g'`; \
-- LD_LIBRARY_PATH=$$LIBPATH:$$LD_LIBRARY_PATH \
-+ LD_LIBRARY_PATH=$$LD_LIBRARY_PATH \
- $${LDCMD} $${LDFLAGS} -o $${APPNAME:=$(APPNAME)} $(OBJECTS) $${LIBDEPS} )
-
- LINK_SO= \
-@@ -105,7 +105,7 @@
- SHAREDFLAGS="$${SHAREDFLAGS:-$(CFLAGS) $(SHARED_LDFLAGS)}"; \
- LIBPATH=`for x in $$LIBDEPS; do echo $$x; done | sed -e 's/^ *-L//;t' -e d | uniq`; \
- LIBPATH=`echo $$LIBPATH | sed -e 's/ /:/g'`; \
-- LD_LIBRARY_PATH=$$LIBPATH:$$LD_LIBRARY_PATH \
-+ LD_LIBRARY_PATH=$$LD_LIBRARY_PATH \
- $${SHAREDCMD} $${SHAREDFLAGS} \
- -o $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX \
- $$ALLSYMSFLAGS $$SHOBJECTS $$NOALLSYMSFLAGS $$LIBDEPS \
diff --git a/external/openssl/opensslwnt.patch b/external/openssl/opensslwnt.patch
deleted file mode 100644
index e22bea6f077b..000000000000
--- a/external/openssl/opensslwnt.patch
+++ /dev/null
@@ -1,167 +0,0 @@
-diff -ru openssl.orig/crypto/x509v3/v3_pci.c openssl/crypto/x509v3/v3_pci.c
---- a/openssl.orig/crypto/x509v3/v3_pci.c 2016-03-01 14:35:05.000000000 +0100
-+++ b/openssl/crypto/x509v3/v3_pci.c 2016-03-03 20:27:42.195914432 +0100
-@@ -3,7 +3,7 @@
- * Contributed to the OpenSSL Project 2004 by Richard Levitte
- * (richard@levitte.org)
- */
--/* Copyright (c) 2004 Kungliga Tekniska Högskolan
-+/* Copyright (c) 2004 Kungliga Tekniska Hoegskolan
- * (Royal Institute of Technology, Stockholm, Sweden).
- * All rights reserved.
- *
-diff -ru openssl.orig/crypto/x509v3/v3_pcia.c openssl/crypto/x509v3/v3_pcia.c
---- a/openssl.orig/crypto/x509v3/v3_pcia.c 2016-03-01 14:35:05.000000000 +0100
-+++ b/openssl/crypto/x509v3/v3_pcia.c 2016-03-03 20:27:56.495913984 +0100
-@@ -3,7 +3,7 @@
- * Contributed to the OpenSSL Project 2004 by Richard Levitte
- * (richard@levitte.org)
- */
--/* Copyright (c) 2004 Kungliga Tekniska Högskolan
-+/* Copyright (c) 2004 Kungliga Tekniska Hoegskolan
- * (Royal Institute of Technology, Stockholm, Sweden).
- * All rights reserved.
- *
-diff -ru openssl.orig/ms/do_ms.bat openssl/ms/do_ms.bat
---- a/openssl.orig/ms/do_ms.bat 2015-01-15 15:43:14.000000000 +0100
-+++ b/openssl/ms/do_ms.bat 2016-03-03 20:31:09.355907935 +0100
-@@ -1,11 +1,11 @@
-
--perl util\mkfiles.pl >MINFO
--perl util\mk1mf.pl no-asm VC-WIN32 >ms\nt.mak
--perl util\mk1mf.pl dll no-asm VC-WIN32 >ms\ntdll.mak
--if x%OSVERSION% == x goto skipce
--perl util\mk1mf.pl no-asm VC-CE >ms\ce.mak
--perl util\mk1mf.pl dll no-asm VC-CE >ms\cedll.mak
--:skipce
-+%1 util\mkfiles.pl >MINFO
-+if %2 == VC-WIN32 goto not64a
-+perl ms\uplink.pl win64a > ms\uptable.asm
-+ml64 -c -Foms\uptable.obj ms\uptable.asm
-+:not64a
-+%1 util\mk1mf.pl no-asm %2 >ms\nt.mak
-+%1 util\mk1mf.pl dll no-asm %2 >ms\ntdll.mak
-
--perl util\mkdef.pl 32 libeay > ms\libeay32.def
--perl util\mkdef.pl 32 ssleay > ms\ssleay32.def
-+%1 util\mkdef.pl 32 libeay > ms\libeay32.def
-+%1 util\mkdef.pl 32 ssleay > ms\ssleay32.def
-diff -ru openssl.orig/util/mk1mf.pl openssl/util/mk1mf.pl
---- a/openssl.orig/util/mk1mf.pl 2016-03-03 20:22:21.043924505 +0100
-+++ b/openssl/util/mk1mf.pl 2016-03-03 20:34:45.015901171 +0100
-@@ -163,7 +163,7 @@
- $inc_def="outinc";
- $tmp_def="tmp";
-
--$perl="perl" unless defined $perl;
-+$perl="$ENV{PERL}" unless defined $perl;
- $mkdir="-mkdir" unless defined $mkdir;
-
- ($ssl,$crypto)=("ssl","crypto");
-@@ -347,6 +347,11 @@
- s/\s*$//; # was chop, didn't work in mixture of perls for Windows...
-
- ($key,$val)=/^([^=]+)=(.*)/;
-+
-+ # On some Windows machines, $val has linefeeds at the end, which confuses
-+ # subsequent code in this file. So we strip all whitespace at the end.
-+ $val =~ s/\s+$//;
-+
- if ($key eq "RELATIVE_DIRECTORY")
- {
- if ($lib ne "")
-@@ -473,7 +478,7 @@
- # Set your compiler options
- PLATFORM=$platform
- CC=$bin_dir${cc}
--CFLAG=$cflags
-+CFLAG=$cflags \$(SOLARINC)
- APP_CFLAG=$app_cflag
- LIB_CFLAG=$lib_cflag
- SHLIB_CFLAG=$shl_cflag
-@@ -488,7 +493,7 @@
-
- LINK_CMD=$link
- LFLAGS=$lflags
--RSC=$rsc
-+RSC=$rsc \$(SOLARINC)
-
- # The output directory for everything interesting
- OUT_D=$out_dir
-@@ -669,7 +674,7 @@
- printf OUT <<EOF;
- #ifdef $platform_cpp_symbol
- /* auto-generated/updated by util/mk1mf.pl for crypto/cversion.c */
-- #define CFLAGS "compiler: $cc $cflags"
-+ #define CFLAGS "compiler: $cflags"
- #define PLATFORM "$platform"
- EOF
- printf OUT " #define DATE \"%s\"\n", scalar gmtime();
-diff -ru openssl.orig/util/pl/VC-32.pl openssl/util/pl/VC-32.pl
---- a/openssl.orig/util/pl/VC-32.pl 2016-03-01 14:35:53.000000000 +0100
-+++ b/openssl/util/pl/VC-32.pl 2016-03-03 21:15:14.083824986 +0100
-@@ -30,7 +30,7 @@
- my $ff = "";
-
- # C compiler stuff
--$cc='cl';
-+$cc=$ENV{'CC'};
- if ($FLAVOR =~ /WIN64/)
- {
- # Note that we currently don't have /WX on Win64! There is a lot of
-@@ -114,7 +114,7 @@
- }
-
- $cc=($ENV{CC} or "cl");
-- $base_cflags=' /W3 /WX /GF /Gy /nologo -DUNICODE -D_UNICODE -DOPENSSL_SYSNAME_WINCE -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32 -DNO_CHMOD -DOPENSSL_SMALL_FOOTPRINT';
-+ $base_cflags=' -W3 -GF -Gy -nologo -DUNICODE -D_UNICODE -DOPENSSL_SYSNAME_WINCE -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32 -DNO_CHMOD -DOPENSSL_SMALL_FOOTPRINT';
- $base_cflags.=" $wcecdefs";
- $base_cflags.=' -I$(WCECOMPAT)/include' if (defined($ENV{'WCECOMPAT'}));
- $base_cflags.=' -I$(PORTSDK_LIBPATH)/../../include' if (defined($ENV{'PORTSDK_LIBPATH'}));
-@@ -123,20 +123,21 @@
- } else {
- $base_cflags.=' /MC';
- }
-- $opt_cflags=' /O1i'; # optimize for space, but with intrinsics...
-- $dbg_cflags=' /Od -DDEBUG -D_DEBUG';
-+ $opt_cflags=' -O1i'; # optimize for space, but with intrinsics...
-+ $dbg_cflags=' -Od -DDEBUG -D_DEBUG';
-+
- $lflags="/nologo /opt:ref $wcelflag";
- }
- else # Win32
- {
- $base_cflags= " $mf_cflag";
-- my $f = $shlib || $fips ?' /MD':' /MT';
-+ my $f = $shlib || $fips ? (($ENV{MSVC_USE_DEBUG_RUNTIME} eq "TRUE") ? ' -MDd' : ' -MD' ):' -MT';
- $ff = "/fixed";
-- $opt_cflags=$f.' /Ox /O2 /Ob2';
-- $dbg_cflags=$f.'d /Od -DDEBUG -D_DEBUG';
-+ $opt_cflags=$f.' -Ox -O2 -Ob2';
-+ $dbg_cflags=$f.'d -Od -DDEBUG -D_DEBUG';
- $lflags="/nologo /subsystem:console /opt:ref";
- }
--$lib_cflag='/Zl' if (!$shlib); # remove /DEFAULTLIBs from static lib
-+$lib_cflag='-Zl' if (!$shlib); # remove /DEFAULTLIBs from static lib
- $mlflags='';
-
- $out_def ="out32"; $out_def.="dll" if ($shlib);
-@@ -161,7 +162,7 @@
-
- $obj='.obj';
- $asm_suffix='.asm';
--$ofile="/Fo";
-+$ofile="-Fo.\\";
-
- # EXE linking stuff
- $link="link";
-diff -ru openssl.orig/ms/uplink.c openssl/ms/uplink.c
---- a/openssl.orig/ms/uplink.c 2015-03-19 15:02:02.000000000 +0100
-+++ b/openssl/ms/uplink.c 2016-03-03 20:39:19.403892565 +0100
-@@ -1,5 +1,6 @@
- #if (defined(_WIN64) || defined(_WIN32_WCE)) && !defined(UNICODE)
- # define UNICODE
-+# define _CRT_NON_CONFORMING_SWPRINTFS
- #endif
- #if defined(UNICODE) && !defined(_UNICODE)
- # define _UNICODE
diff --git a/external/openssl/opensslwnt_safeseh.patch b/external/openssl/opensslwnt_safeseh.patch
deleted file mode 100644
index f2eafab5b9ed..000000000000
--- a/external/openssl/opensslwnt_safeseh.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-use /safeseh in 32-bit MSVC builds; this is not required for 64-bit
-
-diff -ru openssl.orig/util/mk1mf.pl openssl/util/mk1mf.pl
---- a/openssl.orig/util/mk1mf.pl 2016-03-03 20:22:21.043924505 +0100
-+++ b/openssl/util/mk1mf.pl 2016-03-03 20:34:45.015901171 +0100
-@@ -488,7 +493,7 @@
- SRC_D=$src_dir
-
- LINK_CMD=$link
--LFLAGS=$lflags
-+LFLAGS=$lflags /SAFESEH
- RSC=$rsc \$(SOLARINC)
-
- # The output directory for everything interesting
-@@ -511,7 +516,7 @@
- MKDIR=$mkdir
- MKLIB=$bin_dir$mklib
- MLFLAGS=$mlflags
--ASM=$bin_dir$asm
-+ASM=$bin_dir$asm /safeseh
-
- # FIPS validated module and support file locations
-
diff --git a/external/pdfium/Library_pdfium.mk b/external/pdfium/Library_pdfium.mk
index 07282fc3d157..136ebd7bf7e5 100644
--- a/external/pdfium/Library_pdfium.mk
+++ b/external/pdfium/Library_pdfium.mk
@@ -19,6 +19,7 @@ $(eval $(call gb_Library_set_include,pdfium,\
-I$(call gb_UnpackedTarball_get_dir,pdfium) \
-I$(call gb_UnpackedTarball_get_dir,pdfium)/third_party \
-I$(call gb_UnpackedTarball_get_dir,pdfium)/third_party/agg23 \
+ -I$(call gb_UnpackedTarball_get_dir,pdfium)/third_party/abseil-cpp \
$$(INCLUDE) \
))
@@ -39,14 +40,11 @@ $(eval $(call gb_Library_set_generated_cxx_suffix,pdfium,cpp))
# pdfium
$(eval $(call gb_Library_add_generated_exception_objects,pdfium,\
UnpackedTarball/pdfium/fpdfsdk/cpdfsdk_annot \
- UnpackedTarball/pdfium/fpdfsdk/cpdfsdk_annothandlermgr \
UnpackedTarball/pdfium/fpdfsdk/cpdfsdk_annotiteration \
UnpackedTarball/pdfium/fpdfsdk/cpdfsdk_baannot \
- UnpackedTarball/pdfium/fpdfsdk/cpdfsdk_baannothandler \
UnpackedTarball/pdfium/fpdfsdk/cpdfsdk_formfillenvironment \
UnpackedTarball/pdfium/fpdfsdk/cpdfsdk_pageview \
UnpackedTarball/pdfium/fpdfsdk/cpdfsdk_widget \
- UnpackedTarball/pdfium/fpdfsdk/cpdfsdk_widgethandler \
UnpackedTarball/pdfium/fpdfsdk/fpdf_dataavail \
UnpackedTarball/pdfium/fpdfsdk/fpdf_ext \
UnpackedTarball/pdfium/fpdfsdk/fpdf_flatten \
@@ -55,7 +53,6 @@ $(eval $(call gb_Library_add_generated_exception_objects,pdfium,\
UnpackedTarball/pdfium/fpdfsdk/fpdf_structtree \
UnpackedTarball/pdfium/fpdfsdk/fpdf_sysfontinfo \
UnpackedTarball/pdfium/fpdfsdk/fpdf_transformpage \
- UnpackedTarball/pdfium/fpdfsdk/cpdfsdk_actionhandler \
UnpackedTarball/pdfium/fpdfsdk/cpdfsdk_annotiterator \
UnpackedTarball/pdfium/fpdfsdk/cpdfsdk_customaccess \
UnpackedTarball/pdfium/fpdfsdk/cpdfsdk_filewriteadapter \
@@ -82,6 +79,7 @@ $(eval $(call gb_Library_add_generated_exception_objects,pdfium,\
UnpackedTarball/pdfium/constants/page_object \
UnpackedTarball/pdfium/constants/stream_dict_common \
UnpackedTarball/pdfium/constants/transparency \
+ UnpackedTarball/pdfium/constants/font_encodings \
))
# fdrm
@@ -239,10 +237,9 @@ $(eval $(call gb_Library_add_generated_exception_objects,pdfium,\
UnpackedTarball/pdfium/core/fpdfapi/render/charposlist \
UnpackedTarball/pdfium/core/fpdfapi/render/cpdf_devicebuffer \
UnpackedTarball/pdfium/core/fpdfapi/render/cpdf_docrenderdata \
- UnpackedTarball/pdfium/core/fpdfapi/render/cpdf_imagecacheentry \
- UnpackedTarball/pdfium/core/fpdfapi/render/cpdf_imageloader \
+ UnpackedTarball/pdfium/core/fpdfapi/page/cpdf_imageloader \
UnpackedTarball/pdfium/core/fpdfapi/render/cpdf_imagerenderer \
- UnpackedTarball/pdfium/core/fpdfapi/render/cpdf_pagerendercache \
+ UnpackedTarball/pdfium/core/fpdfapi/page/cpdf_pageimagecache \
UnpackedTarball/pdfium/core/fpdfapi/render/cpdf_progressiverenderer \
UnpackedTarball/pdfium/core/fpdfapi/render/cpdf_rendercontext \
UnpackedTarball/pdfium/core/fpdfapi/render/cpdf_renderoptions \
@@ -260,7 +257,6 @@ $(eval $(call gb_Library_add_generated_exception_objects,pdfium,\
UnpackedTarball/pdfium/core/fpdfapi/font/cfx_stockfontarray \
UnpackedTarball/pdfium/core/fpdfapi/font/cpdf_cid2unicodemap \
UnpackedTarball/pdfium/core/fpdfapi/font/cpdf_cmap \
- UnpackedTarball/pdfium/core/fpdfapi/font/cpdf_cmapmanager \
UnpackedTarball/pdfium/core/fpdfapi/font/cpdf_cmapparser \
UnpackedTarball/pdfium/core/fpdfapi/font/cpdf_fontglobals \
UnpackedTarball/pdfium/core/fpdfapi/font/cpdf_tounicodemap \
@@ -289,6 +285,8 @@ $(eval $(call gb_Library_add_generated_exception_objects,pdfium,\
UnpackedTarball/pdfium/core/fpdfapi/page/cpdf_transferfuncdib \
UnpackedTarball/pdfium/core/fpdfapi/page/cpdf_transferfunc \
UnpackedTarball/pdfium/core/fpdfapi/page/cpdf_basedcs \
+ UnpackedTarball/pdfium/core/fpdfapi/page/cpdf_indexedcs \
+ UnpackedTarball/pdfium/core/fpdfapi/parser/object_tree_traversal_util \
))
# fpdfdoc
@@ -408,10 +406,8 @@ $(eval $(call gb_Library_add_generated_exception_objects,pdfium,\
UnpackedTarball/pdfium/core/fxcrt/css/cfx_cssoutputtextbuf \
UnpackedTarball/pdfium/core/fxcrt/cfx_datetime \
UnpackedTarball/pdfium/core/fxcrt/bytestring \
- UnpackedTarball/pdfium/core/fxcrt/cfx_binarybuf \
UnpackedTarball/pdfium/core/fxcrt/cfx_bitstream \
UnpackedTarball/pdfium/core/fxcrt/cfx_utf8decoder \
- UnpackedTarball/pdfium/core/fxcrt/cfx_widetextbuf \
UnpackedTarball/pdfium/core/fxcrt/fx_random \
UnpackedTarball/pdfium/core/fxcrt/fx_string \
UnpackedTarball/pdfium/core/fxcrt/widestring \
@@ -419,9 +415,14 @@ $(eval $(call gb_Library_add_generated_exception_objects,pdfium,\
UnpackedTarball/pdfium/core/fxcrt/fx_codepage \
UnpackedTarball/pdfium/core/fxcrt/fx_number \
UnpackedTarball/pdfium/core/fxcrt/cfx_utf8encoder \
- UnpackedTarball/pdfium/core/fxcrt/cfx_readonlymemorystream \
UnpackedTarball/pdfium/core/fxcrt/observed_ptr \
UnpackedTarball/pdfium/core/fxcrt/string_data_template \
+ UnpackedTarball/pdfium/core/fxcrt/binary_buffer \
+ UnpackedTarball/pdfium/core/fxcrt/cfx_read_only_span_stream \
+ UnpackedTarball/pdfium/core/fxcrt/cfx_read_only_string_stream \
+ UnpackedTarball/pdfium/core/fxcrt/cfx_read_only_vector_stream \
+ UnpackedTarball/pdfium/core/fxcrt/fx_memory_malloc \
+ UnpackedTarball/pdfium/core/fxcrt/widetext_buffer \
))
# fxge
@@ -479,6 +480,8 @@ $(eval $(call gb_Library_add_generated_exception_objects,pdfium,\
UnpackedTarball/pdfium/core/fxge/dib/cfx_cmyk_to_srgb \
UnpackedTarball/pdfium/core/fxge/text_char_pos \
UnpackedTarball/pdfium/core/fxge/cfx_face \
+ UnpackedTarball/pdfium/core/fxge/cfx_defaultrenderdevice \
+ UnpackedTarball/pdfium/core/fxge/calculate_pitch \
))
# javascript, build with pdf_enable_v8 disabled.
@@ -524,47 +527,44 @@ $(eval $(call gb_Library_add_generated_exception_objects,pdfium,\
UnpackedTarball/pdfium/third_party/agg23/agg_vcgen_stroke \
))
+# third_party/abseil-cpp
+$(eval $(call gb_Library_add_generated_exception_objects,pdfium,\
+ UnpackedTarball/pdfium/third_party/abseil-cpp/absl/types/bad_optional_access \
+ UnpackedTarball/pdfium/third_party/abseil-cpp/absl/types/bad_variant_access \
+))
+
# third_party/fx_libopenjpeg
$(eval $(call gb_Library_add_generated_cobjects,pdfium,\
- UnpackedTarball/pdfium/third_party/libopenjpeg20/bio \
- UnpackedTarball/pdfium/third_party/libopenjpeg20/cio \
- UnpackedTarball/pdfium/third_party/libopenjpeg20/dwt \
- UnpackedTarball/pdfium/third_party/libopenjpeg20/event \
- UnpackedTarball/pdfium/third_party/libopenjpeg20/function_list \
- UnpackedTarball/pdfium/third_party/libopenjpeg20/image \
- UnpackedTarball/pdfium/third_party/libopenjpeg20/invert \
- UnpackedTarball/pdfium/third_party/libopenjpeg20/j2k \
- UnpackedTarball/pdfium/third_party/libopenjpeg20/jp2 \
- UnpackedTarball/pdfium/third_party/libopenjpeg20/mct \
- UnpackedTarball/pdfium/third_party/libopenjpeg20/mqc \
- UnpackedTarball/pdfium/third_party/libopenjpeg20/openjpeg \
- UnpackedTarball/pdfium/third_party/libopenjpeg20/opj_clock \
- UnpackedTarball/pdfium/third_party/libopenjpeg20/pi \
- UnpackedTarball/pdfium/third_party/libopenjpeg20/thread \
- UnpackedTarball/pdfium/third_party/libopenjpeg20/t1 \
- UnpackedTarball/pdfium/third_party/libopenjpeg20/t2 \
- UnpackedTarball/pdfium/third_party/libopenjpeg20/tcd \
- UnpackedTarball/pdfium/third_party/libopenjpeg20/tgt \
- UnpackedTarball/pdfium/third_party/libopenjpeg20/sparse_array \
+ UnpackedTarball/pdfium/third_party/libopenjpeg/bio \
+ UnpackedTarball/pdfium/third_party/libopenjpeg/cio \
+ UnpackedTarball/pdfium/third_party/libopenjpeg/dwt \
+ UnpackedTarball/pdfium/third_party/libopenjpeg/event \
+ UnpackedTarball/pdfium/third_party/libopenjpeg/function_list \
+ UnpackedTarball/pdfium/third_party/libopenjpeg/image \
+ UnpackedTarball/pdfium/third_party/libopenjpeg/invert \
+ UnpackedTarball/pdfium/third_party/libopenjpeg/j2k \
+ UnpackedTarball/pdfium/third_party/libopenjpeg/jp2 \
+ UnpackedTarball/pdfium/third_party/libopenjpeg/mct \
+ UnpackedTarball/pdfium/third_party/libopenjpeg/mqc \
+ UnpackedTarball/pdfium/third_party/libopenjpeg/openjpeg \
+ UnpackedTarball/pdfium/third_party/libopenjpeg/opj_clock \
+ UnpackedTarball/pdfium/third_party/libopenjpeg/pi \
+ UnpackedTarball/pdfium/third_party/libopenjpeg/thread \
+ UnpackedTarball/pdfium/third_party/libopenjpeg/t1 \
+ UnpackedTarball/pdfium/third_party/libopenjpeg/t2 \
+ UnpackedTarball/pdfium/third_party/libopenjpeg/tcd \
+ UnpackedTarball/pdfium/third_party/libopenjpeg/tgt \
+ UnpackedTarball/pdfium/third_party/libopenjpeg/sparse_array \
+ UnpackedTarball/pdfium/third_party/libopenjpeg/ht_dec \
))
$(eval $(call gb_Library_add_generated_exception_objects,pdfium,\
- UnpackedTarball/pdfium/third_party/libopenjpeg20/opj_malloc \
+ UnpackedTarball/pdfium/third_party/libopenjpeg/opj_malloc \
))
# pdfium_base
$(eval $(call gb_Library_add_generated_exception_objects,pdfium,\
- UnpackedTarball/pdfium/third_party/base/allocator/partition_allocator/address_space_randomization \
- UnpackedTarball/pdfium/third_party/base/allocator/partition_allocator/page_allocator \
- UnpackedTarball/pdfium/third_party/base/allocator/partition_allocator/spin_lock \
- UnpackedTarball/pdfium/third_party/base/allocator/partition_allocator/partition_alloc \
UnpackedTarball/pdfium/third_party/base/debug/alias \
- UnpackedTarball/pdfium/third_party/base/allocator/partition_allocator/oom_callback \
- UnpackedTarball/pdfium/third_party/base/allocator/partition_allocator/partition_bucket \
- UnpackedTarball/pdfium/third_party/base/allocator/partition_allocator/partition_oom \
- UnpackedTarball/pdfium/third_party/base/allocator/partition_allocator/partition_page \
- UnpackedTarball/pdfium/third_party/base/allocator/partition_allocator/partition_root_base \
- UnpackedTarball/pdfium/third_party/base/allocator/partition_allocator/random \
UnpackedTarball/pdfium/third_party/base/memory/aligned_memory \
))
diff --git a/external/pdfium/README b/external/pdfium/README
index 0a146d2e74de..2be9e8f11b26 100644
--- a/external/pdfium/README
+++ b/external/pdfium/README
@@ -12,4 +12,6 @@ git checkout --track origin/chromium/$version
gclient sync
git archive --prefix=pdfium/ --format=tar origin/chromium/${version} > pdfium-${version}.tar
(cd ..; tar --append --file pdfium/pdfium-${version}.tar pdfium/third_party/freetype/src/include/ pdfium/third_party/freetype/src/src/)
+(cd ..; tar --append --file pdfium/pdfium-${version}.tar pdfium/third_party/abseil-cpp/absl/)
+(cd ..; tar --append --file pdfium/pdfium-${version}.tar pdfium/build/build_config.h pdfium/build/buildflag.h)
bzip2 pdfium-${version}.tar
diff --git a/external/pdfium/UnpackedTarball_pdfium.mk b/external/pdfium/UnpackedTarball_pdfium.mk
index f4643376cee0..07004e8de71d 100644
--- a/external/pdfium/UnpackedTarball_pdfium.mk
+++ b/external/pdfium/UnpackedTarball_pdfium.mk
@@ -11,6 +11,7 @@ pdfium_patches :=
pdfium_patches += ubsan.patch
# Fixes build on our baseline.
pdfium_patches += build.patch.1
+pdfium_patches += msvc2017.patch.1
# Avoids Windows 8 build dependency.
pdfium_patches += windows7.patch.1
pdfium_patches += c++20-comparison.patch
@@ -25,29 +26,17 @@ $(eval $(call gb_UnpackedTarball_add_patches,pdfium,\
$(foreach patch,$(pdfium_patches),external/pdfium/$(patch)) \
))
-# Upstream build system generates this, but it's not really a generated file.
-# Stripped down version from <https://dxr.mozilla.org/mozilla-central/source/ipc/chromium/src/build/build_config.h>.
-$(eval $(call gb_UnpackedTarball_add_file,pdfium,build/build_config.h,external/pdfium/configs/build_config.h))
-
$(eval $(call gb_UnpackedTarball_set_post_action,pdfium,\
mv third_party/bigint/BigInteger.cc third_party/bigint/BigInteger.cpp && \
mv third_party/bigint/BigIntegerUtils.cc third_party/bigint/BigIntegerUtils.cpp && \
mv third_party/bigint/BigUnsigned.cc third_party/bigint/BigUnsigned.cpp && \
mv third_party/bigint/BigUnsignedInABase.cc third_party/bigint/BigUnsignedInABase.cpp && \
- mv third_party/base/allocator/partition_allocator/address_space_randomization.cc third_party/base/allocator/partition_allocator/address_space_randomization.cpp && \
- mv third_party/base/allocator/partition_allocator/page_allocator.cc third_party/base/allocator/partition_allocator/page_allocator.cpp && \
- mv third_party/base/allocator/partition_allocator/partition_alloc.cc third_party/base/allocator/partition_allocator/partition_alloc.cpp && \
- mv third_party/base/allocator/partition_allocator/spin_lock.cc third_party/base/allocator/partition_allocator/spin_lock.cpp && \
mv third_party/base/debug/alias.cc third_party/base/debug/alias.cpp && \
- mv third_party/base/allocator/partition_allocator/oom_callback.cc third_party/base/allocator/partition_allocator/oom_callback.cpp && \
- mv third_party/base/allocator/partition_allocator/partition_bucket.cc third_party/base/allocator/partition_allocator/partition_bucket.cpp && \
- mv third_party/base/allocator/partition_allocator/partition_oom.cc third_party/base/allocator/partition_allocator/partition_oom.cpp && \
- mv third_party/base/allocator/partition_allocator/partition_page.cc third_party/base/allocator/partition_allocator/partition_page.cpp && \
- mv third_party/base/allocator/partition_allocator/partition_root_base.cc third_party/base/allocator/partition_allocator/partition_root_base.cpp && \
- mv third_party/base/allocator/partition_allocator/random.cc third_party/base/allocator/partition_allocator/random.cpp && \
mv third_party/base/memory/aligned_memory.cc third_party/base/memory/aligned_memory.cpp && \
mv third_party/base/win/win_util.cc third_party/base/win/win_util.cpp && \
- mv third_party/libopenjpeg20/opj_malloc.cc third_party/libopenjpeg20/opj_malloc.cpp \
+ mv third_party/libopenjpeg/opj_malloc.cc third_party/libopenjpeg/opj_malloc.cpp && \
+ mv third_party/abseil-cpp/absl/types/bad_optional_access.cc third_party/abseil-cpp/absl/types/bad_optional_access.cpp && \
+ mv third_party/abseil-cpp/absl/types/bad_variant_access.cc third_party/abseil-cpp/absl/types/bad_variant_access.cpp \
))
# vim: set noet sw=4 ts=4:
diff --git a/external/pdfium/build.patch.1 b/external/pdfium/build.patch.1
index 60283ac63c74..909149d1d3ad 100644
--- a/external/pdfium/build.patch.1
+++ b/external/pdfium/build.patch.1
@@ -1,8 +1,66 @@
+-*- Mode: diff -*-
+diff --git a/core/fpdfapi/font/cpdf_cidfont.cpp b/core/fpdfapi/font/cpdf_cidfont.cpp
+index f5a51b24e..8b308d0a6 100644
+--- a/core/fpdfapi/font/cpdf_cidfont.cpp
++++ b/core/fpdfapi/font/cpdf_cidfont.cpp
+@@ -755,7 +755,7 @@ int CPDF_CIDFont::GlyphFromCharCode(uint32_t charcode, bool* pVertGlyph) {
+ uint32_t maccode = CharCodeFromUnicodeForFreetypeEncoding(
+ FT_ENCODING_APPLE_ROMAN, name_unicode);
+ index = maccode ? FT_Get_Char_Index(face, maccode)
+- : FT_Get_Name_Index(face, name);
++ : FT_Get_Name_Index(face, const_cast<char*>(name));
+ }
+ if (index == 0 || index == 0xffff)
+ return charcode ? static_cast<int>(charcode) : -1;
+diff --git a/core/fpdfapi/font/cpdf_truetypefont.cpp b/core/fpdfapi/font/cpdf_truetypefont.cpp
+index 0a59b54eb..a96e11759 100644
+--- a/core/fpdfapi/font/cpdf_truetypefont.cpp
++++ b/core/fpdfapi/font/cpdf_truetypefont.cpp
+@@ -91,7 +91,7 @@ void CPDF_TrueTypeFont::LoadGlyphMap() {
+ FT_ENCODING_APPLE_ROMAN,
+ m_Encoding.UnicodeFromCharCode(charcode));
+ if (!maccode) {
+- m_GlyphIndex[charcode] = FT_Get_Name_Index(face, name);
++ m_GlyphIndex[charcode] = FT_Get_Name_Index(face, const_cast<char*>(name));
+ } else {
+ m_GlyphIndex[charcode] = FT_Get_Char_Index(face, maccode);
+ }
+@@ -105,7 +105,7 @@ void CPDF_TrueTypeFont::LoadGlyphMap() {
+ m_GlyphIndex[charcode] = FT_Get_Char_Index(face, 32);
+ continue;
+ }
+- m_GlyphIndex[charcode] = FT_Get_Name_Index(face, name);
++ m_GlyphIndex[charcode] = FT_Get_Name_Index(face, const_cast<char*>(name));
+ if (m_GlyphIndex[charcode] != 0 || !bToUnicode)
+ continue;
+
+diff --git a/core/fpdfapi/font/cpdf_type1font.cpp b/core/fpdfapi/font/cpdf_type1font.cpp
+index 55510e7d7..2f13f00b8 100644
+--- a/core/fpdfapi/font/cpdf_type1font.cpp
++++ b/core/fpdfapi/font/cpdf_type1font.cpp
+@@ -263,7 +263,7 @@ void CPDF_Type1Font::LoadGlyphMap() {
+ static_cast<uint32_t>(charcode));
+ if (name) {
+ m_Encoding.SetUnicode(charcode, UnicodeFromAdobeName(name));
+- m_GlyphIndex[charcode] = FT_Get_Name_Index(m_Font.GetFaceRec(), name);
++ m_GlyphIndex[charcode] = FT_Get_Name_Index(m_Font.GetFaceRec(), const_cast<char*>(name));
+ } else {
+ m_GlyphIndex[charcode] = FT_Get_Char_Index(
+ m_Font.GetFaceRec(), static_cast<uint32_t>(charcode));
+@@ -294,7 +294,7 @@ void CPDF_Type1Font::LoadGlyphMap() {
+ continue;
+
+ m_Encoding.SetUnicode(charcode, UnicodeFromAdobeName(name));
+- m_GlyphIndex[charcode] = FT_Get_Name_Index(m_Font.GetFaceRec(), name);
++ m_GlyphIndex[charcode] = FT_Get_Name_Index(m_Font.GetFaceRec(), const_cast<char*>(name));
+ if (m_GlyphIndex[charcode] != 0)
+ continue;
+
diff --git a/core/fpdfdoc/cpdf_metadata.cpp b/core/fpdfdoc/cpdf_metadata.cpp
-index 323de4ffc..f11a0b0ad 100644
+index 228a0c137..bf512beb3 100644
--- a/core/fpdfdoc/cpdf_metadata.cpp
+++ b/core/fpdfdoc/cpdf_metadata.cpp
-@@ -74,7 +74,7 @@ std::vector<UnsupportedFeature> CPDF_Metadata::CheckForSharedForm() const {
+@@ -77,7 +77,7 @@ std::vector<UnsupportedFeature> CPDF_Metadata::CheckForSharedForm() const {
CFX_XMLParser parser(stream);
std::unique_ptr<CFX_XMLDocument> doc = parser.Parse();
if (!doc)
@@ -11,32 +69,6 @@ index 323de4ffc..f11a0b0ad 100644
std::vector<UnsupportedFeature> unsupported;
CheckForSharedFormInternal(doc->GetRoot(), &unsupported);
-diff --git a/third_party/base/span.h b/third_party/base/span.h
-index 0fb627ba8..f71c362e2 100644
---- a/third_party/base/span.h
-+++ b/third_party/base/span.h
-@@ -214,7 +214,7 @@ class span {
- // Conversions from spans of compatible types: this allows a span<T> to be
- // seamlessly used as a span<const T>, but not the other way around.
- template <typename U, typename = internal::EnableIfLegalSpanConversion<U, T>>
-- constexpr span(const span<U>& other) : span(other.data(), other.size()) {}
-+ span(const span<U>& other) : span(other.data(), other.size()) {}
- span& operator=(const span& other) noexcept = default;
- ~span() noexcept {
- if (!size_) {
-diff --git a/third_party/base/span.h b/third_party/base/span.h
-index 0fb627ba8..dda1fc8bc 100644
---- a/third_party/base/span.h
-+++ b/third_party/base/span.h
-@@ -204,7 +204,7 @@ class span {
- // size()|.
- template <typename Container,
- typename = internal::EnableIfSpanCompatibleContainer<Container, T>>
-- constexpr span(Container& container)
-+ span(Container& container)
- : span(container.data(), container.size()) {}
- template <
- typename Container,
--- a/core/fxge/dib/cfx_cmyk_to_srgb.cpp 2020-09-10 17:32:37.165872018 +0200
+++ b/core/fxge/dib/cfx_cmyk_to_srgb.cpp 2020-09-10 17:33:15.870395738 +0200
@@ -1740,10 +1740,12 @@
@@ -53,80 +85,93 @@ index 0fb627ba8..dda1fc8bc 100644
uint8_t r;
uint8_t g;
diff --git a/core/fxcodec/jpx/cjpx_decoder.cpp b/core/fxcodec/jpx/cjpx_decoder.cpp
-index c66985a7f..817f81dfa 100644
+index 9391d61ab..490ce2230 100644
--- a/core/fxcodec/jpx/cjpx_decoder.cpp
+++ b/core/fxcodec/jpx/cjpx_decoder.cpp
-@@ -71,7 +71,7 @@ Optional<OpjImageRgbData> alloc_rgb(size_t size) {
+@@ -75,7 +75,7 @@ absl::optional<OpjImageRgbData> alloc_rgb(size_t size) {
if (!data.b)
- return pdfium::nullopt;
+ return absl::nullopt;
- return data;
+ return std::move(data);
}
void sycc_to_rgb(int offset,
-diff --git a/core/fdrm/fx_crypt_aes.cpp b/core/fdrm/fx_crypt_aes.cpp
-index f2170220b..ede18f581 100644
---- a/core/fdrm/fx_crypt_aes.cpp
-+++ b/core/fdrm/fx_crypt_aes.cpp
-@@ -437,7 +437,7 @@ const unsigned int D3[256] = {
- (block[0] ^= *keysched++, block[1] ^= *keysched++, block[2] ^= *keysched++, \
- block[3] ^= *keysched++)
- #define MOVEWORD(i) (block[i] = newstate[i])
--#define MAKEWORD(i) \
-+#define FMAKEWORD(i) \
- (newstate[i] = (E0[(block[i] >> 24) & 0xFF] ^ \
- E1[(block[(i + C1) % Nb] >> 16) & 0xFF] ^ \
- E2[(block[(i + C2) % Nb] >> 8) & 0xFF] ^ \
-@@ -458,10 +458,10 @@ void aes_encrypt_nb_4(CRYPT_aes_context* ctx, unsigned int* block) {
- unsigned int newstate[4];
- for (i = 0; i < ctx->Nr - 1; i++) {
- ADD_ROUND_KEY_4();
-- MAKEWORD(0);
-- MAKEWORD(1);
-- MAKEWORD(2);
-- MAKEWORD(3);
-+ FMAKEWORD(0);
-+ FMAKEWORD(1);
-+ FMAKEWORD(2);
-+ FMAKEWORD(3);
- MOVEWORD(0);
- MOVEWORD(1);
- MOVEWORD(2);
-@@ -478,10 +478,10 @@ void aes_encrypt_nb_4(CRYPT_aes_context* ctx, unsigned int* block) {
- MOVEWORD(3);
- ADD_ROUND_KEY_4();
+diff --git a/core/fxge/cfx_font.cpp b/core/fxge/cfx_font.cpp
+index a2a44df39..d6cedee46 100644
+--- a/core/fxge/cfx_font.cpp
++++ b/core/fxge/cfx_font.cpp
+@@ -48,25 +48,9 @@ struct OUTLINE_PARAMS {
+ // TODO(crbug.com/pdfium/1400): When FT_Done_MM_Var() is more likely to be
+ // available to all users in the future, remove FreeMMVar() and use
+ // FT_Done_MM_Var() directly.
+-//
+-// Use weak symbols to check if FT_Done_MM_Var() is available at runtime.
+-#if !BUILDFLAG(IS_WIN)
+-extern "C" __attribute__((weak)) decltype(FT_Done_MM_Var) FT_Done_MM_Var;
+-#endif
+
+ void FreeMMVar(FXFT_FaceRec* rec, FXFT_MM_VarPtr variation_desc) {
+-#if BUILDFLAG(IS_WIN)
+- // Assume `use_system_freetype` GN var is never set on Windows.
+- constexpr bool has_ft_done_mm_var_func = true;
+-#else
+- static const bool has_ft_done_mm_var_func = !!FT_Done_MM_Var;
+-#endif
+- if (has_ft_done_mm_var_func) {
+- FT_Done_MM_Var(CFX_GEModule::Get()->GetFontMgr()->GetFTLibrary(),
+- variation_desc);
+- } else {
+ FXFT_Free(rec, variation_desc);
+- }
}
--#undef MAKEWORD
-+#undef FMAKEWORD
- #undef LASTWORD
--#define MAKEWORD(i) \
-+#define FMAKEWORD(i) \
- (newstate[i] = (D0[(block[i] >> 24) & 0xFF] ^ \
- D1[(block[(i + C1) % Nb] >> 16) & 0xFF] ^ \
- D2[(block[(i + C2) % Nb] >> 8) & 0xFF] ^ \
-@@ -502,10 +502,10 @@ void aes_decrypt_nb_4(CRYPT_aes_context* ctx, unsigned int* block) {
- unsigned int newstate[4];
- for (i = 0; i < ctx->Nr - 1; i++) {
- ADD_ROUND_KEY_4();
-- MAKEWORD(0);
-- MAKEWORD(1);
-- MAKEWORD(2);
-- MAKEWORD(3);
-+ FMAKEWORD(0);
-+ FMAKEWORD(1);
-+ FMAKEWORD(2);
-+ FMAKEWORD(3);
- MOVEWORD(0);
- MOVEWORD(1);
- MOVEWORD(2);
-@@ -522,7 +522,7 @@ void aes_decrypt_nb_4(CRYPT_aes_context* ctx, unsigned int* block) {
- MOVEWORD(3);
- ADD_ROUND_KEY_4();
+ FX_RECT FXRectFromFTPos(FT_Pos left, FT_Pos top, FT_Pos right, FT_Pos bottom) {
+diff --git a/third_party/base/numerics/safe_conversions_impl.h b/third_party/base/numerics/safe_conversions_impl.h
+index 44c921a14..0152a89b7 100644
+--- a/third_party/base/numerics/safe_conversions_impl.h
++++ b/third_party/base/numerics/safe_conversions_impl.h
+@@ -89,7 +89,7 @@ constexpr typename std::make_unsigned<T>::type SafeUnsignedAbs(T value) {
+
+ // TODO(jschuh): Switch to std::is_constant_evaluated() once C++20 is supported.
+ // Alternately, the usage could be restructured for "consteval if" in C++23.
+-#define IsConstantEvaluated() (__builtin_is_constant_evaluated())
++#define IsConstantEvaluated() (false)
+
+ // TODO(jschuh): Debug builds don't reliably propagate constants, so we restrict
+ // some accelerated runtime paths to release builds until this can be forced
+diff --git a/third_party/base/span.h b/third_party/base/span.h
+index ed2a3c8de..87493861c 100644
+--- a/third_party/base/span.h
++++ b/third_party/base/span.h
+@@ -211,7 +211,7 @@ class TRIVIAL_ABI GSL_POINTER span {
+ #else
+ template <typename Container,
+ typename = internal::EnableIfSpanCompatibleContainer<Container, T>>
+- constexpr span(Container& container)
++ span(Container& container)
+ : span(container.data(), container.size()) {}
+ #endif
+
+@@ -225,7 +225,7 @@ class TRIVIAL_ABI GSL_POINTER span {
+ // Conversions from spans of compatible types: this allows a span<T> to be
+ // seamlessly used as a span<const T>, but not the other way around.
+ template <typename U, typename = internal::EnableIfLegalSpanConversion<U, T>>
+- constexpr span(const span<U>& other) : span(other.data(), other.size()) {}
++ span(const span<U>& other) : span(other.data(), other.size()) {}
+ span& operator=(const span& other) noexcept {
+ if (this != &other) {
+ ReleaseEmptySpan();
+diff --git a/third_party/libopenjpeg/openjpeg.c b/third_party/libopenjpeg/openjpeg.c
+index 29d3ee528..d5c7a1bc9 100644
+--- a/third_party/libopenjpeg/openjpeg.c
++++ b/third_party/libopenjpeg/openjpeg.c
+@@ -433,7 +433,7 @@ OPJ_BOOL OPJ_CALLCONV opj_setup_decoder(opj_codec_t *p_codec,
+ return OPJ_FALSE;
}
--#undef MAKEWORD
-+#undef FMAKEWORD
- #undef LASTWORD
- void aes_setup(CRYPT_aes_context* ctx, const unsigned char* key, int keylen) {
+-OPJ_API OPJ_BOOL OPJ_CALLCONV opj_decoder_set_strict_mode(opj_codec_t *p_codec,
++OPJ_BOOL OPJ_CALLCONV opj_decoder_set_strict_mode(opj_codec_t *p_codec,
+ OPJ_BOOL strict)
+ {
+ if (p_codec) {
diff --git a/external/pdfium/c++20-comparison.patch b/external/pdfium/c++20-comparison.patch
index 025f9ba010db..d26fe66ad8b7 100644
--- a/external/pdfium/c++20-comparison.patch
+++ b/external/pdfium/c++20-comparison.patch
@@ -1,13 +1,13 @@
--- core/fxcrt/fx_memory_wrappers.h
+++ core/fxcrt/fx_memory_wrappers.h
-@@ -70,8 +70,8 @@
+@@ -70,8 +70,8 @@ struct FxPartitionAllocAllocator {
}
// There's no state, so they are all the same,
-- bool operator==(const FxAllocAllocator& that) { return true; }
-- bool operator!=(const FxAllocAllocator& that) { return false; }
-+ bool operator==(const FxAllocAllocator& that) const { return true; }
-+ bool operator!=(const FxAllocAllocator& that) const { return false; }
+- bool operator==(const FxPartitionAllocAllocator& that) { return true; }
+- bool operator!=(const FxPartitionAllocAllocator& that) { return false; }
++ bool operator==(const FxPartitionAllocAllocator& that) const { return true; }
++ bool operator!=(const FxPartitionAllocAllocator& that) const { return false; }
};
- #endif // CORE_FXCRT_FX_MEMORY_WRAPPERS_H_
+ // Used to put backing store for std::vector<> and such into the
diff --git a/external/pdfium/configs/build_config.h b/external/pdfium/configs/build_config.h
deleted file mode 100644
index ec93c278767c..000000000000
--- a/external/pdfium/configs/build_config.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// This file adds defines about the platform we're currently building on.
-// Operating System:
-// OS_WIN / OS_APPLE / OS_LINUX / OS_POSIX (MACOSX or LINUX)
-// Compiler:
-// COMPILER_MSVC / COMPILER_GCC
-// Processor:
-// ARCH_CPU_X86 / ARCH_CPU_X86_64 / ARCH_CPU_X86_FAMILY (X86 or X86_64)
-// ARCH_CPU_32_BITS / ARCH_CPU_64_BITS
-
-#ifndef BUILD_BUILD_CONFIG_H_
-#define BUILD_BUILD_CONFIG_H_
-
-// A set of macros to use for platform detection.
-#if defined(ANDROID)
-#define OS_ANDROID 1
-#define OS_LINUX 1
-#elif defined(__APPLE__)
-#define OS_APPLE 1
-#elif defined(__linux__)
-#define OS_LINUX 1
-#elif defined(__DragonFly__)
-#define OS_DRAGONFLY 1
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
-#define OS_FREEBSD 1
-#elif defined(__NetBSD__)
-#define OS_NETBSD 1
-#elif defined(__OpenBSD__)
-#define OS_OPENBSD 1
-#elif defined(__sun__)
-#define OS_SOLARIS 1
-#elif defined(_WIN32)
-#define OS_WIN 1
-#else
-#error Please add support for your platform in build/build_config.h
-#endif
-
-// For access to standard BSD features, use OS_BSD instead of a
-// more specific macro.
-#if defined(OS_DRAGONFLY) || defined(OS_FREEBSD) || defined(OS_NETBSD) || defined(OS_OPENBSD)
-#define OS_BSD 1
-#endif
-
-// For access to standard POSIX features, use OS_POSIX instead of a more
-// specific macro.
-#if defined(OS_APPLE) || defined(OS_LINUX) || defined(OS_BSD) || defined(OS_SOLARIS)
-#define OS_POSIX 1
-#endif
-
-// Compiler detection.
-#if defined(__GNUC__)
-#define COMPILER_GCC 1
-#elif defined(_MSC_VER)
-#define COMPILER_MSVC 1
-#else
-#error Please add support for your compiler in build/build_config.h
-#endif
-
-// Processor architecture detection. For more info on what's defined, see:
-// http://msdn.microsoft.com/en-us/library/b0084kay.aspx
-// http://www.agner.org/optimize/calling_conventions.pdf
-// or with gcc, run: "echo | gcc -E -dM -"
-#if defined(_M_X64) || defined(__x86_64__)
-#define ARCH_CPU_X86_FAMILY 1
-#define ARCH_CPU_X86_64 1
-#define ARCH_CPU_64_BITS 1
-#elif defined(_M_IX86) || defined(__i386__)
-#define ARCH_CPU_X86_FAMILY 1
-#define ARCH_CPU_X86 1
-#define ARCH_CPU_32_BITS 1
-#elif defined(__ARMEL__)
-#define ARCH_CPU_ARM_FAMILY 1
-#define ARCH_CPU_ARMEL 1
-#define ARCH_CPU_32_BITS 1
-#define WCHAR_T_IS_UNSIGNED 1
-#elif defined(__powerpc64__)
-#define ARCH_CPU_PPC64 1
-#define ARCH_CPU_64_BITS 1
-#elif defined(__ppc__) || defined(__powerpc__)
-#define ARCH_CPU_PPC 1
-#define ARCH_CPU_32_BITS 1
-#elif defined(__sparc__) && defined(__arch64__)
-#define ARCH_CPU_SPARC 1
-#define ARCH_CPU_64_BITS 1
-#elif defined(__sparc__)
-#define ARCH_CPU_SPARC 1
-#define ARCH_CPU_32_BITS 1
-#elif defined(__mips64) && defined(__LP64__)
-#define ARCH_CPU_MIPS 1
-#define ARCH_CPU_64_BITS 1
-#elif defined(__mips__)
-#define ARCH_CPU_MIPS 1
-#define ARCH_CPU_32_BITS 1
-#elif defined(__hppa__)
-#define ARCH_CPU_HPPA 1
-#define ARCH_CPU_32_BITS 1
-#elif defined(__ia64__)
-#define ARCH_CPU_IA64 1
-#define ARCH_CPU_64_BITS 1
-#elif defined(__s390x__)
-#define ARCH_CPU_S390X 1
-#define ARCH_CPU_64_BITS 1
-#elif defined(__s390__)
-#define ARCH_CPU_S390 1
-#define ARCH_CPU_32_BITS 1
-#elif defined(__sh__)
-#define ARCH_CPU_SH 1
-#define ARCH_CPU_32_BITS 1
-#elif defined(__alpha__)
-#define ARCH_CPU_ALPHA 1
-#define ARCH_CPU_64_BITS 1
-#elif defined(__aarch64__)
-#define ARCH_CPU_ARM_FAMILY 1
-#define ARCH_CPU_ARM64 1
-#define ARCH_CPU_64_BITS 1
-#else
-#error Please add support for your architecture in build/build_config.h
-#endif
-
-// Type detection for wchar_t.
-#if defined(OS_WIN)
-#define WCHAR_T_IS_UTF16
-#else
-#define WCHAR_T_IS_UTF32
-#endif
-
-#endif // BUILD_BUILD_CONFIG_H_
diff --git a/external/pdfium/inc/pch/precompiled_pdfium.hxx b/external/pdfium/inc/pch/precompiled_pdfium.hxx
index 357c37d6a81e..6258e8036360 100644
--- a/external/pdfium/inc/pch/precompiled_pdfium.hxx
+++ b/external/pdfium/inc/pch/precompiled_pdfium.hxx
@@ -13,7 +13,7 @@
manual changes will be rewritten by the next run of update_pch.sh (which presumably
also fixes all possible problems, so it's usually better to use it).
- Generated on 2020-05-06 11:57:12 using:
+ Generated on 2022-11-08 17:05:53 using:
./bin/update_pch external/pdfium pdfium --cutoff=1 --exclude:system --include:module --include:local
If after updating build fails, use the following command to locate conflicting headers:
@@ -31,7 +31,6 @@
#include <agg_vcgen_stroke.h>
#include <algorithm>
#include <array>
-#include <atomic>
#include <cassert>
#include <cfloat>
#include <climits>
@@ -45,6 +44,7 @@
#include <map>
#include <math.h>
#include <memory>
+#include <new>
#include <numeric>
#include <ostream>
#include <set>
@@ -53,6 +53,7 @@
#include <stack>
#include <stdarg.h>
#include <stddef.h>
+#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <string>
@@ -72,6 +73,7 @@
#include <constants/annotation_flags.h>
#include <constants/appearance.h>
#include <constants/ascii.h>
+#include <constants/font_encodings.h>
#include <constants/form_fields.h>
#include <constants/form_flags.h>
#include <constants/page_object.h>
@@ -93,7 +95,6 @@
#include <core/fpdfapi/font/cpdf_cid2unicodemap.h>
#include <core/fpdfapi/font/cpdf_cidfont.h>
#include <core/fpdfapi/font/cpdf_cmap.h>
-#include <core/fpdfapi/font/cpdf_cmapmanager.h>
#include <core/fpdfapi/font/cpdf_cmapparser.h>
#include <core/fpdfapi/font/cpdf_font.h>
#include <core/fpdfapi/font/cpdf_fontencoding.h>
@@ -125,10 +126,13 @@
#include <core/fpdfapi/page/cpdf_graphicstates.h>
#include <core/fpdfapi/page/cpdf_iccprofile.h>
#include <core/fpdfapi/page/cpdf_image.h>
+#include <core/fpdfapi/page/cpdf_imageloader.h>
#include <core/fpdfapi/page/cpdf_imageobject.h>
+#include <core/fpdfapi/page/cpdf_indexedcs.h>
#include <core/fpdfapi/page/cpdf_meshstream.h>
#include <core/fpdfapi/page/cpdf_occontext.h>
#include <core/fpdfapi/page/cpdf_page.h>
+#include <core/fpdfapi/page/cpdf_pageimagecache.h>
#include <core/fpdfapi/page/cpdf_pagemodule.h>
#include <core/fpdfapi/page/cpdf_pageobject.h>
#include <core/fpdfapi/page/cpdf_pageobjectholder.h>
@@ -186,10 +190,7 @@
#include <core/fpdfapi/render/charposlist.h>
#include <core/fpdfapi/render/cpdf_devicebuffer.h>
#include <core/fpdfapi/render/cpdf_docrenderdata.h>
-#include <core/fpdfapi/render/cpdf_imagecacheentry.h>
-#include <core/fpdfapi/render/cpdf_imageloader.h>
#include <core/fpdfapi/render/cpdf_imagerenderer.h>
-#include <core/fpdfapi/render/cpdf_pagerendercache.h>
#include <core/fpdfapi/render/cpdf_pagerendercontext.h>
#include <core/fpdfapi/render/cpdf_progressiverenderer.h>
#include <core/fpdfapi/render/cpdf_rendercontext.h>
@@ -270,19 +271,20 @@
#include <core/fxcodec/jpx/cjpx_decoder.h>
#include <core/fxcodec/jpx/jpx_decode_utils.h>
#include <core/fxcodec/scanlinedecoder.h>
+#include <core/fxcrt/autonuller.h>
#include <core/fxcrt/autorestorer.h>
+#include <core/fxcrt/binary_buffer.h>
#include <core/fxcrt/bytestring.h>
-#include <core/fxcrt/cfx_binarybuf.h>
#include <core/fxcrt/cfx_bitstream.h>
#include <core/fxcrt/cfx_datetime.h>
-#include <core/fxcrt/cfx_fixedbufgrow.h>
#include <core/fxcrt/cfx_memorystream.h>
-#include <core/fxcrt/cfx_readonlymemorystream.h>
+#include <core/fxcrt/cfx_read_only_span_stream.h>
+#include <core/fxcrt/cfx_read_only_string_stream.h>
+#include <core/fxcrt/cfx_read_only_vector_stream.h>
#include <core/fxcrt/cfx_seekablestreamproxy.h>
#include <core/fxcrt/cfx_timer.h>
#include <core/fxcrt/cfx_utf8decoder.h>
#include <core/fxcrt/cfx_utf8encoder.h>
-#include <core/fxcrt/cfx_widetextbuf.h>
#include <core/fxcrt/css/cfx_css.h>
#include <core/fxcrt/css/cfx_csscolorvalue.h>
#include <core/fxcrt/css/cfx_csscomputedstyle.h>
@@ -304,7 +306,12 @@
#include <core/fxcrt/css/cfx_cssvalue.h>
#include <core/fxcrt/css/cfx_cssvaluelist.h>
#include <core/fxcrt/css/cfx_cssvaluelistparser.h>
+#include <core/fxcrt/data_vector.h>
#include <core/fxcrt/fileaccess_iface.h>
+#include <core/fxcrt/fixed_try_alloc_zeroed_data_vector.h>
+#include <core/fxcrt/fixed_uninit_data_vector.h>
+#include <core/fxcrt/fixed_zeroed_data_vector.h>
+#include <core/fxcrt/fx_2d_size.h>
#include <core/fxcrt/fx_bidi.h>
#include <core/fxcrt/fx_codepage.h>
#include <core/fxcrt/fx_coordinates.h>
@@ -317,6 +324,7 @@
#include <core/fxcrt/fx_safe_types.h>
#include <core/fxcrt/fx_stream.h>
#include <core/fxcrt/fx_string.h>
+#include <core/fxcrt/fx_string_wrappers.h>
#include <core/fxcrt/fx_system.h>
#include <core/fxcrt/fx_unicode.h>
#include <core/fxcrt/maybe_owned.h>
@@ -324,12 +332,14 @@
#include <core/fxcrt/pauseindicator_iface.h>
#include <core/fxcrt/retain_ptr.h>
#include <core/fxcrt/scoped_set_insertion.h>
+#include <core/fxcrt/small_buffer.h>
#include <core/fxcrt/span_util.h>
#include <core/fxcrt/stl_util.h>
#include <core/fxcrt/string_data_template.h>
#include <core/fxcrt/string_pool_template.h>
#include <core/fxcrt/unowned_ptr.h>
#include <core/fxcrt/widestring.h>
+#include <core/fxcrt/widetext_buffer.h>
#include <core/fxcrt/xml/cfx_xmlchardata.h>
#include <core/fxcrt/xml/cfx_xmldocument.h>
#include <core/fxcrt/xml/cfx_xmlelement.h>
@@ -338,6 +348,7 @@
#include <core/fxcrt/xml/cfx_xmlparser.h>
#include <core/fxcrt/xml/cfx_xmltext.h>
#include <core/fxge/agg/fx_agg_driver.h>
+#include <core/fxge/calculate_pitch.h>
#include <core/fxge/cfx_cliprgn.h>
#include <core/fxge/cfx_color.h>
#include <core/fxge/cfx_defaultrenderdevice.h>
@@ -373,22 +384,18 @@
#include <core/fxge/dib/fx_dib.h>
#include <core/fxge/dib/scanlinecomposer_iface.h>
#include <core/fxge/fontdata/chromefontdata/chromefontdata.h>
+#include <core/fxge/freetype/fx_freetype.h>
#include <core/fxge/fx_font.h>
-#include <core/fxge/fx_freetype.h>
-#include <core/fxge/render_defines.h>
#include <core/fxge/renderdevicedriver_iface.h>
#include <core/fxge/scoped_font_transform.h>
#include <core/fxge/systemfontinfo_iface.h>
#include <core/fxge/text_char_pos.h>
#include <core/fxge/text_glyph_pos.h>
-#include <fpdfsdk/cpdfsdk_actionhandler.h>
#include <fpdfsdk/cpdfsdk_annot.h>
-#include <fpdfsdk/cpdfsdk_annothandlermgr.h>
#include <fpdfsdk/cpdfsdk_annotiteration.h>
#include <fpdfsdk/cpdfsdk_annotiterator.h>
#include <fpdfsdk/cpdfsdk_appstream.h>
#include <fpdfsdk/cpdfsdk_baannot.h>
-#include <fpdfsdk/cpdfsdk_baannothandler.h>
#include <fpdfsdk/cpdfsdk_customaccess.h>
#include <fpdfsdk/cpdfsdk_filewriteadapter.h>
#include <fpdfsdk/cpdfsdk_formfillenvironment.h>
@@ -398,7 +405,6 @@
#include <fpdfsdk/cpdfsdk_pauseadapter.h>
#include <fpdfsdk/cpdfsdk_renderpage.h>
#include <fpdfsdk/cpdfsdk_widget.h>
-#include <fpdfsdk/cpdfsdk_widgethandler.h>
#include <fpdfsdk/formfiller/cffl_button.h>
#include <fpdfsdk/formfiller/cffl_checkbox.h>
#include <fpdfsdk/formfiller/cffl_combobox.h>
@@ -411,7 +417,6 @@
#include <fpdfsdk/formfiller/cffl_radiobutton.h>
#include <fpdfsdk/formfiller/cffl_textfield.h>
#include <fpdfsdk/formfiller/cffl_textobject.h>
-#include <fpdfsdk/ipdfsdk_annothandler.h>
#include <fpdfsdk/pwl/cpwl_button.h>
#include <fpdfsdk/pwl/cpwl_caret.h>
#include <fpdfsdk/pwl/cpwl_cbbutton.h>
@@ -426,7 +431,6 @@
#include <fpdfsdk/pwl/cpwl_special_button.h>
#include <fpdfsdk/pwl/cpwl_wnd.h>
#include <fpdfsdk/pwl/ipwl_fillernotify.h>
-#include <fpdfsdk/pwl/ipwl_systemhandler.h>
#include <fxjs/cjs_event_context_stub.h>
#include <fxjs/cjs_runtimestub.h>
#include <fxjs/ijs_event_context.h>
@@ -450,6 +454,7 @@
#include <public/fpdf_text.h>
#include <public/fpdf_transformpage.h>
#include <public/fpdfview.h>
+#include <third_party/abseil-cpp/absl/types/optional.h>
#include <third_party/agg23/agg_clip_liang_barsky.h>
#include <third_party/agg23/agg_conv_dash.h>
#include <third_party/agg23/agg_conv_stroke.h>
@@ -459,22 +464,6 @@
#include <third_party/agg23/agg_rasterizer_scanline_aa.h>
#include <third_party/agg23/agg_renderer_scanline.h>
#include <third_party/agg23/agg_scanline_u.h>
-#include <third_party/base/allocator/partition_allocator/address_space_randomization.h>
-#include <third_party/base/allocator/partition_allocator/oom.h>
-#include <third_party/base/allocator/partition_allocator/oom_callback.h>
-#include <third_party/base/allocator/partition_allocator/page_allocator.h>
-#include <third_party/base/allocator/partition_allocator/page_allocator_internal.h>
-#include <third_party/base/allocator/partition_allocator/partition_alloc.h>
-#include <third_party/base/allocator/partition_allocator/partition_alloc_check.h>
-#include <third_party/base/allocator/partition_allocator/partition_alloc_constants.h>
-#include <third_party/base/allocator/partition_allocator/partition_bucket.h>
-#include <third_party/base/allocator/partition_allocator/partition_direct_map_extent.h>
-#include <third_party/base/allocator/partition_allocator/partition_oom.h>
-#include <third_party/base/allocator/partition_allocator/partition_page.h>
-#include <third_party/base/allocator/partition_allocator/partition_root_base.h>
-#include <third_party/base/allocator/partition_allocator/random.h>
-#include <third_party/base/allocator/partition_allocator/spin_lock.h>
-#include <third_party/base/bits.h>
#include <third_party/base/check.h>
#include <third_party/base/check_op.h>
#include <third_party/base/compiler_specific.h>
@@ -487,7 +476,6 @@
#include <third_party/base/notreached.h>
#include <third_party/base/numerics/safe_conversions.h>
#include <third_party/base/numerics/safe_math.h>
-#include <third_party/base/optional.h>
#include <third_party/base/ptr_util.h>
#include <third_party/base/span.h>
#include <third_party/skia_shared/SkFloatToDecimal.h>
diff --git a/external/pdfium/include.patch b/external/pdfium/include.patch
new file mode 100644
index 000000000000..75c0e3b9272a
--- /dev/null
+++ b/external/pdfium/include.patch
@@ -0,0 +1,11 @@
+--- constants/annotation_flags.h
++++ constants/annotation_flags.h
+@@ -5,6 +5,8 @@
+ #ifndef CONSTANTS_ANNOTATION_FLAGS_H_
+ #define CONSTANTS_ANNOTATION_FLAGS_H_
+
++#include <stdint.h>
++
+ namespace pdfium {
+ namespace annotation_flags {
+
diff --git a/external/pdfium/msvc2017.patch.1 b/external/pdfium/msvc2017.patch.1
new file mode 100644
index 000000000000..d19279bd3ca7
--- /dev/null
+++ b/external/pdfium/msvc2017.patch.1
@@ -0,0 +1,15 @@
+--- pdfium/third_party/abseil-cpp/absl/base/policy_checks.h.orig 2023-06-26 19:10:40.362247395 +0200
++++ pdfium/third_party/abseil-cpp/absl/base/policy_checks.h 2023-06-26 19:10:55.204269825 +0200
+@@ -46,9 +46,9 @@
+
+ // We support Visual Studio 2019 (MSVC++ 16.0) and later.
+ // This minimum will go up.
+-#if defined(_MSC_VER) && _MSC_VER < 1920 && !defined(__clang__)
+-#error "This package requires Visual Studio 2019 (MSVC++ 16.0) or higher."
+-#endif
++//#if defined(_MSC_VER) && _MSC_VER < 1920 && !defined(__clang__)
++//#error "This package requires Visual Studio 2019 (MSVC++ 16.0) or higher."
++//#endif
+
+ // We support GCC 7 and later.
+ // This minimum will go up.
diff --git a/external/poppler/README b/external/poppler/README
index 35a640264618..08d3612c3542 100644
--- a/external/poppler/README
+++ b/external/poppler/README
@@ -1 +1 @@
-From [http://poppler.freedesktop.org/]. Not modified. PDF rendering library based on the xpdf-3.0 code base.
+From [https://poppler.freedesktop.org/]. Not modified. PDF rendering library based on the xpdf-3.0 code base.
diff --git a/external/poppler/StaticLibrary_poppler.mk b/external/poppler/StaticLibrary_poppler.mk
index bcb66b49299a..62877a0f0059 100644
--- a/external/poppler/StaticLibrary_poppler.mk
+++ b/external/poppler/StaticLibrary_poppler.mk
@@ -11,7 +11,10 @@ $(eval $(call gb_StaticLibrary_StaticLibrary,poppler))
$(eval $(call gb_StaticLibrary_use_unpacked,poppler,poppler))
-$(eval $(call gb_StaticLibrary_use_external,poppler,libjpeg))
+$(eval $(call gb_StaticLibrary_use_externals,poppler,\
+ libjpeg \
+ zlib \
+))
$(eval $(call gb_StaticLibrary_set_warnings_disabled,poppler))
@@ -53,24 +56,26 @@ $(eval $(call gb_StaticLibrary_add_generated_cobjects,poppler,\
))
$(eval $(call gb_StaticLibrary_add_generated_exception_objects,poppler,\
+ UnpackedTarball/poppler/goo/gbase64 \
+ UnpackedTarball/poppler/goo/gbasename \
UnpackedTarball/poppler/goo/gfile \
- UnpackedTarball/poppler/goo/GooTimer \
+ UnpackedTarball/poppler/goo/glibc \
+ UnpackedTarball/poppler/goo/glibc_strtok_r \
+ UnpackedTarball/poppler/goo/grandom \
+ UnpackedTarball/poppler/goo/gstrtod \
UnpackedTarball/poppler/goo/GooString \
+ UnpackedTarball/poppler/goo/GooTimer \
+ UnpackedTarball/poppler/goo/ImgWriter \
+ UnpackedTarball/poppler/goo/JpegWriter \
UnpackedTarball/poppler/goo/NetPBMWriter \
UnpackedTarball/poppler/goo/PNGWriter \
UnpackedTarball/poppler/goo/TiffWriter \
- UnpackedTarball/poppler/goo/JpegWriter \
- UnpackedTarball/poppler/goo/ImgWriter \
- UnpackedTarball/poppler/goo/gstrtod \
- UnpackedTarball/poppler/goo/grandom \
- UnpackedTarball/poppler/goo/glibc \
- UnpackedTarball/poppler/goo/glibc_strtok_r \
UnpackedTarball/poppler/fofi/FoFiBase \
UnpackedTarball/poppler/fofi/FoFiEncodings \
+ UnpackedTarball/poppler/fofi/FoFiIdentifier \
UnpackedTarball/poppler/fofi/FoFiTrueType \
UnpackedTarball/poppler/fofi/FoFiType1 \
UnpackedTarball/poppler/fofi/FoFiType1C \
- UnpackedTarball/poppler/fofi/FoFiIdentifier \
UnpackedTarball/poppler/poppler/Annot \
UnpackedTarball/poppler/poppler/AnnotStampImageHelper \
UnpackedTarball/poppler/poppler/Array \
@@ -80,63 +85,65 @@ $(eval $(call gb_StaticLibrary_add_generated_exception_objects,poppler,\
UnpackedTarball/poppler/poppler/CertificateInfo \
UnpackedTarball/poppler/poppler/CharCodeToUnicode \
UnpackedTarball/poppler/poppler/CMap \
+ UnpackedTarball/poppler/poppler/DCTStream \
UnpackedTarball/poppler/poppler/DateInfo \
UnpackedTarball/poppler/poppler/Decrypt \
UnpackedTarball/poppler/poppler/Dict \
UnpackedTarball/poppler/poppler/Error \
+ UnpackedTarball/poppler/poppler/FDPDFDocBuilder \
+ UnpackedTarball/poppler/poppler/FILECacheLoader \
UnpackedTarball/poppler/poppler/FileSpec \
+ UnpackedTarball/poppler/poppler/FlateEncoder \
UnpackedTarball/poppler/poppler/FontEncodingTables \
- UnpackedTarball/poppler/poppler/Form \
UnpackedTarball/poppler/poppler/FontInfo \
+ UnpackedTarball/poppler/poppler/Form \
UnpackedTarball/poppler/poppler/Function \
UnpackedTarball/poppler/poppler/Gfx \
UnpackedTarball/poppler/poppler/GfxFont \
UnpackedTarball/poppler/poppler/GfxState \
UnpackedTarball/poppler/poppler/GlobalParams \
UnpackedTarball/poppler/poppler/Hints \
+ UnpackedTarball/poppler/poppler/ImageEmbeddingUtils \
UnpackedTarball/poppler/poppler/JArithmeticDecoder \
UnpackedTarball/poppler/poppler/JBIG2Stream \
UnpackedTarball/poppler/poppler/JSInfo \
UnpackedTarball/poppler/poppler/Lexer \
- UnpackedTarball/poppler/poppler/Link \
UnpackedTarball/poppler/poppler/Linearization \
+ UnpackedTarball/poppler/poppler/Link \
UnpackedTarball/poppler/poppler/LocalPDFDocBuilder \
UnpackedTarball/poppler/poppler/MarkedContentOutputDev \
+ UnpackedTarball/poppler/poppler/Movie \
UnpackedTarball/poppler/poppler/NameToCharCode \
UnpackedTarball/poppler/poppler/Object \
UnpackedTarball/poppler/poppler/OptionalContent \
UnpackedTarball/poppler/poppler/Outline \
UnpackedTarball/poppler/poppler/OutputDev \
UnpackedTarball/poppler/poppler/Page \
+ UnpackedTarball/poppler/poppler/PageLabelInfo \
UnpackedTarball/poppler/poppler/PageTransition \
UnpackedTarball/poppler/poppler/Parser \
UnpackedTarball/poppler/poppler/PDFDoc \
UnpackedTarball/poppler/poppler/PDFDocBuilder \
UnpackedTarball/poppler/poppler/PDFDocEncoding \
UnpackedTarball/poppler/poppler/PDFDocFactory \
- UnpackedTarball/poppler/poppler/ProfileData \
UnpackedTarball/poppler/poppler/PreScanOutputDev \
+ UnpackedTarball/poppler/poppler/ProfileData \
+ UnpackedTarball/poppler/poppler/PSOutputDev \
UnpackedTarball/poppler/poppler/PSTokenizer \
+ UnpackedTarball/poppler/poppler/Rendition \
+ UnpackedTarball/poppler/poppler/SecurityHandler \
UnpackedTarball/poppler/poppler/SignatureInfo \
+ UnpackedTarball/poppler/poppler/Sound \
UnpackedTarball/poppler/poppler/Stream \
- UnpackedTarball/poppler/poppler/StructTreeRoot \
UnpackedTarball/poppler/poppler/StructElement \
+ UnpackedTarball/poppler/poppler/StructTreeRoot \
+ UnpackedTarball/poppler/poppler/TextOutputDev \
+ UnpackedTarball/poppler/poppler/UTF \
UnpackedTarball/poppler/poppler/UnicodeMap \
UnpackedTarball/poppler/poppler/UnicodeMapFuncs \
UnpackedTarball/poppler/poppler/UnicodeTypeTable \
- UnpackedTarball/poppler/poppler/UTF \
- UnpackedTarball/poppler/poppler/XRef \
- UnpackedTarball/poppler/poppler/PSOutputDev \
- UnpackedTarball/poppler/poppler/TextOutputDev \
- UnpackedTarball/poppler/poppler/PageLabelInfo \
- UnpackedTarball/poppler/poppler/SecurityHandler \
- UnpackedTarball/poppler/poppler/StdinCachedFile \
- UnpackedTarball/poppler/poppler/StdinPDFDocBuilder \
- UnpackedTarball/poppler/poppler/Sound \
UnpackedTarball/poppler/poppler/ViewerPreferences \
- UnpackedTarball/poppler/poppler/Movie \
- UnpackedTarball/poppler/poppler/Rendition \
- UnpackedTarball/poppler/poppler/DCTStream \
+ UnpackedTarball/poppler/poppler/XRef \
UnpackedTarball/poppler/splash/SplashBitmap \
))
diff --git a/external/poppler/UnpackedTarball_poppler.mk b/external/poppler/UnpackedTarball_poppler.mk
index 68fd06d9403b..cc4f67754a03 100644
--- a/external/poppler/UnpackedTarball_poppler.mk
+++ b/external/poppler/UnpackedTarball_poppler.mk
@@ -12,6 +12,10 @@ $(eval $(call gb_UnpackedTarball_UnpackedTarball,poppler))
$(eval $(call gb_UnpackedTarball_set_tarball,poppler,$(POPPLER_TARBALL),,poppler))
$(eval $(call gb_UnpackedTarball_add_patches,poppler,\
+ external/poppler/disable-freetype.patch.1 \
+ external/poppler/disable-nss-and-gpgmepp.patch.1 \
+ external/poppler/gcc7-EntityInfo.patch.1 \
+ external/poppler/gcc7-GfxFont.patch.1 \
external/poppler/poppler-config.patch.1 \
))
diff --git a/external/poppler/disable-freetype.patch.1 b/external/poppler/disable-freetype.patch.1
new file mode 100644
index 000000000000..3c4d1d0f7a8a
--- /dev/null
+++ b/external/poppler/disable-freetype.patch.1
@@ -0,0 +1,41 @@
+disable freetype dependent code
+
+--- poppler/poppler/Form.cc.orig 2023-06-05 19:29:14.000000000 +0900
++++ poppler/poppler/Form.cc 2023-06-14 18:50:22.232312300 +0900
+@@ -48,7 +48,7 @@
+ #include <cstdlib>
+ #include <cstring>
+ #include <cctype>
+-#include "goo/ft_utils.h"
++//#include "goo/ft_utils.h"
+ #include "goo/gmem.h"
+ #include "goo/gfile.h"
+ #include "goo/GooString.h"
+@@ -78,8 +78,8 @@
+ #include "fofi/FoFiTrueType.h"
+ #include "fofi/FoFiIdentifier.h"
+
+-#include <ft2build.h>
+-#include FT_FREETYPE_H
++//#include <ft2build.h>
++//#include FT_FREETYPE_H
+ #include <unordered_set>
+
+ // helper for using std::visit to get a dependent false for static_asserts
+@@ -2760,6 +2760,8 @@
+
+ Form::AddFontResult Form::addFontToDefaultResources(const std::string &filepath, int faceIndex, const std::string &fontFamily, const std::string &fontStyle, bool forceName)
+ {
++ return {};
++#if 0
+ if (!GooString::endsWith(filepath, ".ttf") && !GooString::endsWith(filepath, ".ttc") && !GooString::endsWith(filepath, ".otf")) {
+ error(errIO, -1, "We only support embedding ttf/ttc/otf fonts for now. The font file for {0:s} {1:s} was {2:s}", fontFamily.c_str(), fontStyle.c_str(), filepath.c_str());
+ return {};
+@@ -2994,6 +2996,7 @@
+ }
+
+ return { dictFontName, fontDictRef };
++#endif
+ }
+
+ std::string Form::getFallbackFontForChar(Unicode uChar, const GfxFont &fontToEmulate) const
diff --git a/external/poppler/disable-nss-and-gpgmepp.patch.1 b/external/poppler/disable-nss-and-gpgmepp.patch.1
new file mode 100644
index 000000000000..01b442f53a1c
--- /dev/null
+++ b/external/poppler/disable-nss-and-gpgmepp.patch.1
@@ -0,0 +1,76 @@
+disable NSS/GPGMEPP dependent code.
+
+--- poppler/poppler/Form.cc.orig 2023-06-05 19:29:14.000000000 +0900
++++ poppler/poppler/Form.cc 2023-06-17 16:51:27.873431500 +0900
+@@ -64,7 +64,7 @@
+ #include "Form.h"
+ #include "PDFDoc.h"
+ #include "DateInfo.h"
+-#include "CryptoSignBackend.h"
++/*#include "CryptoSignBackend.h"*/
+ #include "SignatureInfo.h"
+ #include "CertificateInfo.h"
+ #include "XRef.h"
+@@ -577,7 +577,7 @@
+ {
+ return static_cast<FormFieldSignature *>(field)->validateSignature(doVerifyCert, forceRevalidation, validationTime, ocspRevocationCheck, enableAIA);
+ }
+-
++#if 0
+ // update hash with the specified range of data from the file
+ static bool hashFileRange(FILE *f, CryptoSign::SigningInterface *handler, Goffset start, Goffset end)
+ {
+@@ -607,10 +607,12 @@
+ delete[] buf;
+ return true;
+ }
++#endif
+
+ bool FormWidgetSignature::signDocument(const std::string &saveFilename, const std::string &certNickname, const std::string &password, const GooString *reason, const GooString *location, const std::optional<GooString> &ownerPassword,
+ const std::optional<GooString> &userPassword)
+ {
++#if 0
+ auto backend = CryptoSign::Factory::createActive();
+ if (!backend) {
+ return false;
+@@ -698,6 +700,8 @@
+ fclose(file);
+
+ return true;
++#endif
++ return false;
+ }
+
+ bool FormWidgetSignature::signDocumentWithAppearance(const std::string &saveFilename, const std::string &certNickname, const std::string &password, const GooString *reason, const GooString *location,
+@@ -2316,6 +2320,7 @@
+
+ void FormFieldSignature::hashSignedDataBlock(CryptoSign::VerificationInterface *handler, Goffset block_len)
+ {
++#if 0
+ if (!handler) {
+ return;
+ }
+@@ -2335,6 +2340,7 @@
+ i += BLOCK_SIZE;
+ }
+ }
++#endif
+ }
+
+ FormSignatureType FormWidgetSignature::signatureType() const
+@@ -2349,6 +2355,7 @@
+
+ SignatureInfo *FormFieldSignature::validateSignature(bool doVerifyCert, bool forceRevalidation, time_t validationTime, bool ocspRevocationCheck, bool enableAIA)
+ {
++#if 0
+ auto backend = CryptoSign::Factory::createActive();
+ if (!backend) {
+ return signature_info;
+@@ -2425,6 +2432,7 @@
+ const CertificateValidationStatus cert_val_state = signature_handler->validateCertificate(std::chrono::system_clock::from_time_t(validationTime), ocspRevocationCheck, enableAIA);
+ signature_info->setCertificateValStatus(cert_val_state);
+
++#endif
+ return signature_info;
+ }
+
diff --git a/external/poppler/gcc7-EntityInfo.patch.1 b/external/poppler/gcc7-EntityInfo.patch.1
new file mode 100644
index 000000000000..1dd7c83ad475
--- /dev/null
+++ b/external/poppler/gcc7-EntityInfo.patch.1
@@ -0,0 +1,55 @@
+gcc 7.3.1 says:
+
+workdir/UnpackedTarball/poppler/poppler/CertificateInfo.cc:42:34: error: function ‘X509CertificateInfo::EntityInfo& X509CertificateInfo::EntityInfo::operator=(X509CertificateInfo::EntityInfo&&)’ defaulted on its redeclaration with an exception-specification that differs from the implicit exception-specification ‘’
+
+workdir/UnpackedTarball/poppler/poppler/CertificateInfo.cc: In member function ‘void X509CertificateInfo::setPublicKeyInfo(X509CertificateInfo::PublicKeyInfo&&)’:
+workdir/UnpackedTarball/poppler/poppler/CertificateInfo.cc:106:39: error: use of deleted function ‘X509CertificateInfo::PublicKeyInfo& X509CertificateInfo::PublicKeyInfo::operator=(X509CertificateInfo::PublicKeyInfo&&)’
+ public_key_info = std::move(pkInfo);
+ ^
+In file included from workdir/UnpackedTarball/poppler/poppler/CertificateInfo.cc:15:0:
+workdir/UnpackedTarball/poppler/poppler/CertificateInfo.h:58:24: note: ‘X509CertificateInfo::PublicKeyInfo& X509CertificateInfo::PublicKeyInfo::operator=(X509CertificateInfo::PublicKeyInfo&&) noexcept’ is implicitly deleted because its exception-specification does not match the implicit exception-specification ‘’
+ PublicKeyInfo &operator=(PublicKeyInfo &&) noexcept = default;
+ ^~~~~~~~
+
+--- poppler/poppler/CertificateInfo.h.orig 2023-06-05 19:29:14.000000000 +0900
++++ poppler/poppler/CertificateInfo.h 2023-06-19 18:10:55.760031700 +0900
+@@ -55,7 +55,7 @@
+ PublicKeyInfo() = default;
+
+ PublicKeyInfo(PublicKeyInfo &&) noexcept = default;
+- PublicKeyInfo &operator=(PublicKeyInfo &&) noexcept = default;
++ PublicKeyInfo &operator=(PublicKeyInfo &&) /*noexcept*/ = default;
+
+ PublicKeyInfo(const PublicKeyInfo &) = delete;
+ PublicKeyInfo &operator=(const PublicKeyInfo &) = delete;
+@@ -71,7 +71,7 @@
+ ~EntityInfo() = default;
+
+ EntityInfo(EntityInfo &&) noexcept = default;
+- EntityInfo &operator=(EntityInfo &&) noexcept = default;
++ EntityInfo &operator=(EntityInfo &&) /*noexcept*/ = default;
+
+ EntityInfo(const EntityInfo &) = delete;
+ EntityInfo &operator=(const EntityInfo &) = delete;
+--- poppler/poppler/GfxFont.cc.orig 2022-09-14 20:24:32.569607333 +0200
++++ poppler/poppler/GfxFont.cc 2022-09-14 20:24:52.323596186 +0200
+@@ -180,7 +180,7 @@
+
+ GfxFontLoc::GfxFontLoc(GfxFontLoc &&other) noexcept = default;
+
+-GfxFontLoc &GfxFontLoc::operator=(GfxFontLoc &&other) noexcept = default;
++GfxFontLoc &GfxFontLoc::operator=(GfxFontLoc &&other) /*noexcept*/ = default;
+
+ void GfxFontLoc::setPath(GooString *pathA)
+ {
+--- poppler/poppler/GfxFont.h.orig 2022-09-14 20:24:30.784608340 +0200
++++ poppler/poppler/GfxFont.h 2022-09-14 20:25:08.850586861 +0200
+@@ -124,7 +124,7 @@
+ GfxFontLoc(const GfxFontLoc &) = delete;
+ GfxFontLoc(GfxFontLoc &&) noexcept;
+ GfxFontLoc &operator=(const GfxFontLoc &) = delete;
+- GfxFontLoc &operator=(GfxFontLoc &&other) noexcept;
++ GfxFontLoc &operator=(GfxFontLoc &&other) /*noexcept*/;
+
+ // Set the 'path' string from a GooString on the heap.
+ // Ownership of the object is taken.
diff --git a/external/poppler/gcc7-GfxFont.patch.1 b/external/poppler/gcc7-GfxFont.patch.1
new file mode 100644
index 000000000000..a240b1b8bad2
--- /dev/null
+++ b/external/poppler/gcc7-GfxFont.patch.1
@@ -0,0 +1,94 @@
+Revert of upstream: https://gitlab.freedesktop.org/poppler/poppler/-/commit/d5ea5a24124badf2b32a7d08dd2c06a4a40f93fb
+
+gcc 7.5.0 says:
+
+workdir/UnpackedTarball/poppler/poppler/GfxFont.cc: In member function ‘std::optional<GfxFontLoc> GfxFont::locateFont(XRef*, PSOutputDev*)’:
+/home/taichi/libo-core/workdir/UnpackedTarball/poppler/poppler/GfxFont.cc:660:24: error: could not convert ‘fontLoc’ from ‘GfxFontLoc’ to ‘std::optional<GfxFontLoc>’
+ return fontLoc;
+ ^~~~~~~
+workdir/UnpackedTarball/poppler/poppler/GfxFont.cc:671:16: error: could not convert ‘fontLoc’ from ‘GfxFontLoc’ to ‘std::optional<GfxFontLoc>’
+ return fontLoc;
+ ^~~~~~~
+workdir/UnpackedTarball/poppler/poppler/GfxFont.cc:680:16: error: could not convert ‘fontLoc’ from ‘GfxFontLoc’ to ‘std::optional<GfxFontLoc>’
+ return fontLoc;
+ ^~~~~~~
+libo-core/workdir/UnpackedTarball/poppler/poppler/GfxFont.cc:711:24: error: could not convert ‘fontLoc’ from ‘GfxFontLoc’ to ‘std::optional<GfxFontLoc>’
+ return fontLoc;
+ ^~~~~~~
+workdir/UnpackedTarball/poppler/poppler/GfxFont.cc:723:20: error: could not convert ‘fontLoc’ from ‘GfxFontLoc’ to ‘std::optional<GfxFontLoc>’
+ return fontLoc;
+ ^~~~~~~
+workdir/UnpackedTarball/poppler/poppler/GfxFont.cc:752:20: error: could not convert ‘fontLoc’ from ‘GfxFontLoc’ to ‘std::optional<GfxFontLoc>’
+ return fontLoc;
+ ^~~~~~~
+workdir/UnpackedTarball/poppler/poppler/GfxFont.cc: In static member function ‘static std::optional<GfxFontLoc> GfxFont::getExternalFont(GooString*, bool)’:
+workdir/UnpackedTarball/poppler/poppler/GfxFont.cc:814:12: error: could not convert ‘fontLoc’ from ‘GfxFontLoc’ to ‘std::optional<GfxFontLoc>’
+ return fontLoc;
+
+diff --git a/poppler/GfxFont.cc b/poppler/GfxFont.cc
+index cc2ce038..b0d0d610 100644
+--- a/poppler/GfxFont.cc
++++ b/poppler/GfxFont.cc
+@@ -657,7 +657,7 @@ std::optional<GfxFontLoc> GfxFont::locateFont(XRef *xref, PSOutputDev *ps)
+ fontLoc.locType = gfxFontLocEmbedded;
+ fontLoc.fontType = type;
+ fontLoc.embFontID = embFontID;
+- return fontLoc;
++ return std::move(fontLoc); // std::move only required to please g++-7
+ }
+ }
+ }
+@@ -668,7 +668,7 @@ std::optional<GfxFontLoc> GfxFont::locateFont(XRef *xref, PSOutputDev *ps)
+ fontLoc.locType = gfxFontLocResident;
+ fontLoc.fontType = fontType1;
+ fontLoc.path = *name;
+- return fontLoc;
++ return std::move(fontLoc); // std::move only required to please g++-7
+ }
+
+ //----- PS resident Base-14 font
+@@ -677,7 +677,7 @@ std::optional<GfxFontLoc> GfxFont::locateFont(XRef *xref, PSOutputDev *ps)
+ fontLoc.locType = gfxFontLocResident;
+ fontLoc.fontType = fontType1;
+ fontLoc.path = ((Gfx8BitFont *)this)->base14->base14Name;
+- return fontLoc;
++ return std::move(fontLoc); // std::move only required to please g++-7
+ }
+
+ //----- external font file (fontFile, fontDir)
+@@ -708,7 +708,7 @@ std::optional<GfxFontLoc> GfxFont::locateFont(XRef *xref, PSOutputDev *ps)
+ fontLoc.fontType = fontCIDType2;
+ fontLoc.setPath(path);
+ fontLoc.fontNum = fontNum;
+- return fontLoc;
++ return std::move(fontLoc); // std::move only required to please g++-7
+ }
+ } else {
+ GfxFontLoc fontLoc;
+@@ -720,7 +720,7 @@ std::optional<GfxFontLoc> GfxFont::locateFont(XRef *xref, PSOutputDev *ps)
+ fontLoc.fontType = fontType1;
+ fontLoc.fontNum = fontNum;
+ }
+- return fontLoc;
++ return std::move(fontLoc); // std::move only required to please g++-7
+ }
+ delete path;
+ }
+@@ -749,7 +749,7 @@ std::optional<GfxFontLoc> GfxFont::locateFont(XRef *xref, PSOutputDev *ps)
+ fontLoc.fontType = fontType1;
+ fontLoc.path = substName;
+ fontLoc.substIdx = substIdx;
+- return fontLoc;
++ return std::move(fontLoc); // std::move only required to please g++-7
+ } else {
+ path = globalParams->findFontFile(substName);
+ if (path) {
+@@ -811,7 +811,7 @@ std::optional<GfxFontLoc> GfxFont::getExternalFont(GooString *path, bool cid)
+ fontLoc.locType = gfxFontLocExternal;
+ fontLoc.fontType = fontType;
+ fontLoc.setPath(path);
+- return fontLoc;
++ return std::move(fontLoc); // std::move only required to please g++-7
+ }
+
+ std::optional<std::vector<unsigned char>> GfxFont::readEmbFontFile(XRef *xref)
diff --git a/external/poppler/poppler-config.patch.1 b/external/poppler/poppler-config.patch.1
index 2a24d4510197..8f71e987b2b9 100644
--- a/external/poppler/poppler-config.patch.1
+++ b/external/poppler/poppler-config.patch.1
@@ -2,7 +2,7 @@
note: to get the 3rd one, use -DENABLE_CPP=on
-mkdir build && cd build && cmake .. -DENABLE_DCTDECODER=libjpeg -DHAVE_CAIRO=off -DENABLE_LIBOPENJPEG=none -DENABLE_CMS=none -DENABLE_LIBCURL=off -DENABLE_ZLIB=off -DENABLE_ZLIB_UNCOMPRESS=off -DENABLE_NSS3=off -DENABLE_LIBPNG=off -DENABLE_LIBTIFF=off -DENABLE_SPLASH=off -DENABLE_UTILS=off -DENABLE_CPP=off -DENABLE_GLIB=off -DENABLE_GOBJECT_INTROSPECTION=off -DENABLE_GTK_DOC=off -DENABLE_QT5=off
+mkdir build && cd build && cmake .. -DENABLE_DCTDECODER=libjpeg -DHAVE_CAIRO=off -DENABLE_LIBOPENJPEG=none -DENABLE_CMS=none -DENABLE_LIBCURL=off -DENABLE_ZLIB_UNCOMPRESS=off -DENABLE_GPGME=off -DENABLE_NSS3=off -DENABLE_LIBPNG=off -DENABLE_LIBTIFF=off -DENABLE_SPLASH=off -DENABLE_UTILS=off -DENABLE_CPP=off -DENABLE_GLIB=off -DENABLE_GOBJECT_INTROSPECTION=off -DENABLE_GTK_DOC=off -DENABLE_QT5=off -DENABLE_QT6=off
manually disabled these because cmake failed to do it:
HAVE_CAIRO
@@ -16,7 +16,7 @@ new file mode 100644
index 0fbd336a..451213f8 100644
--- /dev/null
+++ b/config.h
-@@ -0,0 +1,223 @@
+@@ -0,0 +1,229 @@
+/* config.h. Generated from config.h.cmake by cmake. */
+
+/* Build against libcurl. */
@@ -37,15 +37,21 @@ index 0fbd336a..451213f8 100644
+/* Do not hardcode the library location */
+/* #undef ENABLE_RELOCATABLE */
+
-+/* Build against zlib. */
-+/* #undef ENABLE_ZLIB */
-+
+/* Use zlib instead of builtin zlib decoder to uncompress flate streams. */
+/* #undef ENABLE_ZLIB_UNCOMPRESS */
+
+/* Build against libnss3 for digital signature validation */
+/* #define ENABLE_NSS3 1 */
+
++/* Build against libgpgme for digital signature validation */
++/* #undef ENABLE_GPGME */
++
++/* Signatures enabled */
++/* #define ENABLE_SIGNATURES 1 */
++
++/* Default signature backend */
++/* #define DEFAULT_SIGNATURE_BACKEND "NSS" */
++
+/* Use cairo for rendering. */
+/* #define HAVE_CAIRO 1 */
+
@@ -105,9 +111,6 @@ index 0fbd336a..451213f8 100644
+#define HAVE_TIMEGM 1
+#endif
+
-+/* Define if you have the iconv() function and it works. */
-+/* #undef HAVE_ICONV */
-+
+/* Define to 1 if you have the `z' library (-lz). */
+/* #undef HAVE_LIBZ */
+
@@ -176,7 +179,7 @@ index 0fbd336a..451213f8 100644
+#define PACKAGE_NAME "poppler"
+
+/* Define to the full name and version of this package. */
-+#define PACKAGE_STRING "poppler 21.11.0"
++#define PACKAGE_STRING "poppler 23.09.0"
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME "poppler"
@@ -185,7 +188,7 @@ index 0fbd336a..451213f8 100644
+#define PACKAGE_URL ""
+
+/* Define to the version of this package. */
-+#define PACKAGE_VERSION "21.11.0"
++#define PACKAGE_VERSION "23.09.0"
+
+/* Poppler data dir */
+#define POPPLER_DATADIR "/usr/local/share/poppler"
@@ -203,12 +206,15 @@ index 0fbd336a..451213f8 100644
+/* #undef USE_FLOAT */
+
+/* Version number of package */
-+#define VERSION "21.11.0"
++#define VERSION "23.09.0"
+
+#if defined(__APPLE__)
+#elif defined (_WIN32)
+/* Use win32 font configuration backend */
+#define WITH_FONTCONFIGURATION_WIN32 1
++#elif defined (__ANDROID__)
++/* Use android font configuration backend */
++#define WITH_FONTCONFIGURATION_ANDROID 1
+#else
+/* Use fontconfig font configuration backend */
+#define WITH_FONTCONFIGURATION_FONTCONFIG 1
@@ -229,7 +235,7 @@ index 0fbd336a..451213f8 100644
+#define popen _popen
+#define pclose _pclose
+#define strncasecmp _strnicmp
-+// error C4005: "strcasecmp": macro redefinition #define strcasecmp _stricmp
++#define strcasecmp _stricmp
+#endif
+
+/* Number of bits in a file offset, on hosts where this is settable. */
@@ -245,12 +251,12 @@ new file mode 100644
index 0fbd336a..451213f8 100644
--- /dev/null
+++ b/poppler/poppler-config.h
-@@ -0,0 +1,161 @@
+@@ -0,0 +1,156 @@
+//================================================= -*- mode: c++ -*- ====
+//
+// poppler-config.h
+//
-+// Copyright 1996-2011 Glyph & Cog, LLC
++// Copyright 1996-2011, 2022 Glyph & Cog, LLC
+//
+//========================================================================
+
@@ -284,7 +290,7 @@ index 0fbd336a..451213f8 100644
+
+/* Defines the poppler version. */
+#ifndef POPPLER_VERSION
-+#define POPPLER_VERSION "21.11.0"
++#define POPPLER_VERSION "23.09.0"
+#endif
+
+/* Use single precision arithmetic in the Splash backend */
@@ -322,11 +328,6 @@ index 0fbd336a..451213f8 100644
+/* #define ENABLE_LIBPNG 1 */
+#endif
+
-+/* Use zlib instead of builtin zlib decoder. */
-+#ifndef ENABLE_ZLIB
-+/* #undef ENABLE_ZLIB */
-+#endif
-+
+/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
+ */
+#ifndef HAVE_DIRENT_H
@@ -376,8 +377,8 @@ index 0fbd336a..451213f8 100644
+//------------------------------------------------------------------------
+
+// copyright notice
-+#define popplerCopyright "Copyright 2005-2021 The Poppler Developers - http://poppler.freedesktop.org"
-+#define xpdfCopyright "Copyright 1996-2011 Glyph & Cog, LLC"
++#define popplerCopyright "Copyright 2005-2023 The Poppler Developers - http://poppler.freedesktop.org"
++#define xpdfCopyright "Copyright 1996-2011, 2022 Glyph & Cog, LLC"
+
+//------------------------------------------------------------------------
+// Win32 stuff
@@ -436,9 +437,9 @@ index 0fbd336a..451213f8 100644
+
+#include "poppler-global.h"
+
-+#define POPPLER_VERSION "21.11.0"
-+#define POPPLER_VERSION_MAJOR 21
-+#define POPPLER_VERSION_MINOR 11
++#define POPPLER_VERSION "23.09.0"
++#define POPPLER_VERSION_MAJOR 23
++#define POPPLER_VERSION_MINOR 9
+#define POPPLER_VERSION_MICRO 0
+
+namespace poppler
diff --git a/external/postgresql/ExternalProject_postgresql.mk b/external/postgresql/ExternalProject_postgresql.mk
index 9df01cae9ef3..377f02c0174c 100644
--- a/external/postgresql/ExternalProject_postgresql.mk
+++ b/external/postgresql/ExternalProject_postgresql.mk
@@ -43,7 +43,7 @@ endif
ifeq ($(DISABLE_OPENSSL),)
ifeq ($(SYSTEM_OPENSSL),)
postgresql_CPPFLAGS += -I$(call gb_UnpackedTarball_get_dir,openssl)/include
-postgresql_LDFLAGS += -L$(call gb_UnpackedTarball_get_dir,openssl)/
+postgresql_LDFLAGS += -L$(call gb_UnpackedTarball_get_dir,openssl)/ $(if $(filter $(OS),LINUX),-pthread)
endif
endif
diff --git a/external/postgresql/postgres-msvc-build.patch.1 b/external/postgresql/postgres-msvc-build.patch.1
index 4ccd82aa28fb..c217a755918b 100644
--- a/external/postgresql/postgres-msvc-build.patch.1
+++ b/external/postgresql/postgres-msvc-build.patch.1
@@ -80,7 +80,7 @@ Also Cygwin perl has $Config{osname} different from MSWin32, and why even check
# Quote the .exe name in case it has spaces
my $opensslcmd =
- qq("$self->{options}->{openssl}\\bin\\openssl.exe" version 2>&1);
-+ qq("$self->{options}->{openssl}\\out32dll\\openssl.exe" version 2>&1);
++ qq("$self->{options}->{openssl}\\apps\\openssl.exe" version 2>&1);
+ print "$opensslcmd";
my $sslout = `$opensslcmd`;
@@ -101,10 +101,10 @@ Also Cygwin perl has $Config{osname} different from MSWin32, and why even check
# parameter.
$proj->AddLibrary(
- $self->{options}->{openssl} . '\lib\ssleay32.lib', 0);
-+ $self->{options}->{openssl} . '\out32dll\ssleay32.lib', 0);
++ $self->{options}->{openssl} . '\ssleay32.lib', 0);
$proj->AddLibrary(
- $self->{options}->{openssl} . '\lib\libeay32.lib', 0);
-+ $self->{options}->{openssl} . '\out32dll\libeay32.lib', 0);
++ $self->{options}->{openssl} . '\libeay32.lib', 0);
}
}
}
diff --git a/external/python3/ExternalPackage_python3.mk b/external/python3/ExternalPackage_python3.mk
index 4dfc3b196f82..833fe24f7bb3 100644
--- a/external/python3/ExternalPackage_python3.mk
+++ b/external/python3/ExternalPackage_python3.mk
@@ -25,17 +25,14 @@ endif
$(eval $(call gb_ExternalPackage_add_files,python3,$(LIBO_BIN_FOLDER)/python-core-$(PYTHON_VERSION)/lib,\
PCbuild/$(python_arch_subdir)_asyncio$(if $(MSVC_USE_DEBUG_RUNTIME),_d).pyd \
PCbuild/$(python_arch_subdir)_ctypes$(if $(MSVC_USE_DEBUG_RUNTIME),_d).pyd \
- PCbuild/$(python_arch_subdir)_ctypes_test$(if $(MSVC_USE_DEBUG_RUNTIME),_d).pyd \
PCbuild/$(python_arch_subdir)_decimal$(if $(MSVC_USE_DEBUG_RUNTIME),_d).pyd \
PCbuild/$(python_arch_subdir)_elementtree$(if $(MSVC_USE_DEBUG_RUNTIME),_d).pyd \
PCbuild/$(python_arch_subdir)_msi$(if $(MSVC_USE_DEBUG_RUNTIME),_d).pyd \
PCbuild/$(python_arch_subdir)_multiprocessing$(if $(MSVC_USE_DEBUG_RUNTIME),_d).pyd \
+ PCbuild/$(python_arch_subdir)_overlapped$(if $(MSVC_USE_DEBUG_RUNTIME),_d).pyd \
PCbuild/$(python_arch_subdir)_queue$(if $(MSVC_USE_DEBUG_RUNTIME),_d).pyd \
PCbuild/$(python_arch_subdir)_socket$(if $(MSVC_USE_DEBUG_RUNTIME),_d).pyd \
PCbuild/$(python_arch_subdir)_ssl$(if $(MSVC_USE_DEBUG_RUNTIME),_d).pyd \
- PCbuild/$(python_arch_subdir)_testbuffer$(if $(MSVC_USE_DEBUG_RUNTIME),_d).pyd \
- PCbuild/$(python_arch_subdir)_testcapi$(if $(MSVC_USE_DEBUG_RUNTIME),_d).pyd \
- PCbuild/$(python_arch_subdir)_testconsole$(if $(MSVC_USE_DEBUG_RUNTIME),_d).pyd \
PCbuild/$(python_arch_subdir)pyexpat$(if $(MSVC_USE_DEBUG_RUNTIME),_d).pyd \
PCbuild/$(python_arch_subdir)select$(if $(MSVC_USE_DEBUG_RUNTIME),_d).pyd \
PCbuild/$(python_arch_subdir)unicodedata$(if $(MSVC_USE_DEBUG_RUNTIME),_d).pyd \
@@ -44,8 +41,8 @@ $(eval $(call gb_ExternalPackage_add_files,python3,$(LIBO_BIN_FOLDER)/python-cor
else
$(eval $(call gb_ExternalPackage_add_file,python3,$(LIBO_BIN_FOLDER)/python.bin,python))
$(eval $(call gb_ExternalPackage_add_file,python3,$(LIBO_BIN_FOLDER)/libpython$(PYTHON_VERSION_MAJOR).so,libpython$(PYTHON_VERSION_MAJOR).so))
-$(eval $(call gb_ExternalPackage_add_file,python3,$(LIBO_BIN_FOLDER)/libpython$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so.1.0,libpython$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so))
-$(eval $(call gb_ExternalPackage_add_file,python3,$(LIBO_BIN_FOLDER)/libpython$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so.1.0-gdb.py,Tools/gdb/libpython.py))
+$(eval $(call gb_ExternalPackage_add_file,python3,$(LIBO_BIN_FOLDER)/libpython$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so.1.0,libpython$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so))
+$(eval $(call gb_ExternalPackage_add_file,python3,$(LIBO_BIN_FOLDER)/libpython$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so.1.0-gdb.py,Tools/gdb/libpython.py))
# Unfortunately the python build system does not allow to explicitly enable or
# disable these, it just tries to build them and then prints which did not
@@ -56,70 +53,68 @@ $(eval $(call gb_ExternalPackage_add_file,python3,$(LIBO_BIN_FOLDER)/libpython$(
ifneq ($(OS),AIX)
$(eval $(call gb_ExternalPackage_add_files,python3,$(LIBO_BIN_FOLDER)/python-core-$(PYTHON_VERSION)/lib/lib-dynload,\
- LO_lib/array.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_asyncio.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/audioop.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/binascii.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_bisect.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_blake2.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/cmath.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_codecs_cn.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_codecs_hk.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_codecs_iso2022.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_codecs_jp.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_codecs_kr.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_codecs_tw.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_contextvars.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_crypt.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_csv.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_ctypes.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_ctypes_test.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_datetime.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_decimal.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_elementtree.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/fcntl.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/grp.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
+ LO_lib/array.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/_asyncio.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/audioop.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/binascii.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/_bisect.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/_blake2.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/cmath.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/_codecs_cn.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/_codecs_hk.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/_codecs_iso2022.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/_codecs_jp.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/_codecs_kr.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/_codecs_tw.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/_contextvars.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/_crypt.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/_csv.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/_ctypes.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/_datetime.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/_decimal.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/_elementtree.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/fcntl.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/grp.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
$(if $(DISABLE_OPENSSL),, \
- LO_lib/_hashlib.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
+ LO_lib/_hashlib.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
) \
- LO_lib/_heapq.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_json.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_lsprof.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/math.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_md5.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/mmap.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_multibytecodec.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_multiprocessing.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_opcode.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/ossaudiodev.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/parser.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_pickle.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_posixsubprocess.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/pyexpat.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_queue.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_random.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/resource.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/select.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_sha1.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_sha256.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_sha3.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_sha512.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_socket.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/spwd.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
+ LO_lib/_heapq.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/_json.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/_lsprof.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/math.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/_md5.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/mmap.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/_multibytecodec.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/_multiprocessing.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/_opcode.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/ossaudiodev.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/parser.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/_pickle.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/_posixshmem.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/_posixsubprocess.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/pyexpat.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/_queue.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/_random.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/resource.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/select.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/_sha1.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/_sha256.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/_sha3.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/_sha512.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/_socket.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/spwd.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
$(if $(DISABLE_OPENSSL),, \
- LO_lib/_ssl.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
+ LO_lib/_ssl.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
) \
- LO_lib/_struct.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/syslog.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/termios.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_testbuffer.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_testcapi.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_testimportmultiple.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_testmultiphase.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/unicodedata.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/xxlimited.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/_xxtestfuzz.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
- LO_lib/zlib.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m.so \
+ LO_lib/_statistics.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/_struct.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/syslog.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/termios.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/unicodedata.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/xxlimited.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/_xxsubinterpreters.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/_xxtestfuzz.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
+ LO_lib/zlib.cpython-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR).so \
))
endif
endif
@@ -140,7 +135,7 @@ endif
# put -pc in its linux platform triplets, so filter that...
ifneq ($(OS),WNT)
$(eval $(call gb_ExternalPackage_add_files,python3,$(LIBO_BIN_FOLDER)/python-core-$(PYTHON_VERSION)/lib,\
- LO_lib/_sysconfigdata_m_$(python3_MACHDEP)_$(subst i686,i386,$(subst -pc,,$(HOST_PLATFORM))).py \
+ LO_lib/_sysconfigdata__$(python3_MACHDEP)_$(subst i686,i386,$(subst -pc,,$(HOST_PLATFORM))).py \
))
endif
@@ -150,6 +145,10 @@ endif
# idlelib, tkinter, turtledemo - need Tk to build the C module
# test - probably unnecessary? was explicitly removed #i116738#
# venv - why would we need virtual environments
+#
+# These lists are now sorted with "LC_COLLATE=C sort", by using
+# find Lib/ -name "*.py" | sort | sed -e 's/^/\t/' -e 's/$/ \\/'
+#
$(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/python-core-$(PYTHON_VERSION)/lib,\
LICENSE \
@@ -162,6 +161,7 @@ $(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/p
Lib/_dummy_thread.py \
Lib/_markupbase.py \
Lib/_osx_support.py \
+ Lib/_py_abc.py \
Lib/_pydecimal.py \
Lib/_pyio.py \
Lib/_sitebuiltins.py \
@@ -180,6 +180,7 @@ $(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/p
Lib/binhex.py \
Lib/bisect.py \
Lib/bz2.py \
+ Lib/cProfile.py \
Lib/calendar.py \
Lib/cgi.py \
Lib/cgitb.py \
@@ -195,7 +196,6 @@ $(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/p
Lib/contextvars.py \
Lib/copy.py \
Lib/copyreg.py \
- Lib/cProfile.py \
Lib/crypt.py \
Lib/csv.py \
Lib/dataclasses.py \
@@ -232,7 +232,6 @@ $(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/p
Lib/linecache.py \
Lib/locale.py \
Lib/lzma.py \
- Lib/macpath.py \
Lib/mailbox.py \
Lib/mailcap.py \
Lib/mimetypes.py \
@@ -260,21 +259,20 @@ $(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/p
Lib/profile.py \
Lib/pstats.py \
Lib/pty.py \
- Lib/pyclbr.py \
- Lib/_py_abc.py \
Lib/py_compile.py \
+ Lib/pyclbr.py \
Lib/pydoc.py \
Lib/queue.py \
Lib/quopri.py \
Lib/random.py \
- Lib/reprlib.py \
Lib/re.py \
+ Lib/reprlib.py \
Lib/rlcompleter.py \
Lib/runpy.py \
Lib/sched.py \
Lib/secrets.py \
- Lib/shelve.py \
Lib/selectors.py \
+ Lib/shelve.py \
Lib/shlex.py \
Lib/shutil.py \
Lib/signal.py \
@@ -288,10 +286,10 @@ $(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/p
Lib/sre_constants.py \
Lib/sre_parse.py \
Lib/ssl.py \
- Lib/statistics.py \
Lib/stat.py \
- Lib/stringprep.py \
+ Lib/statistics.py \
Lib/string.py \
+ Lib/stringprep.py \
Lib/struct.py \
Lib/subprocess.py \
Lib/sunau.py \
@@ -306,10 +304,11 @@ $(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/p
Lib/this.py \
Lib/threading.py \
Lib/timeit.py \
- Lib/tokenize.py \
Lib/token.py \
- Lib/traceback.py \
+ Lib/tokenize.py \
Lib/trace.py \
+ Lib/traceback.py \
+ Lib/tracemalloc.py \
Lib/tty.py \
Lib/turtle.py \
Lib/types.py \
@@ -321,14 +320,41 @@ $(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/p
Lib/weakref.py \
Lib/webbrowser.py \
Lib/xdrlib.py \
+ Lib/zipapp.py \
Lib/zipfile.py \
+ Lib/zipimport.py \
))
$(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/python-core-$(PYTHON_VERSION)/lib/asyncio,\
+ Lib/asyncio/__init__.py \
+ Lib/asyncio/__main__.py \
+ Lib/asyncio/base_events.py \
Lib/asyncio/base_futures.py \
+ Lib/asyncio/base_subprocess.py \
Lib/asyncio/base_tasks.py \
+ Lib/asyncio/constants.py \
+ Lib/asyncio/coroutines.py \
+ Lib/asyncio/events.py \
+ Lib/asyncio/exceptions.py \
Lib/asyncio/format_helpers.py \
+ Lib/asyncio/futures.py \
+ Lib/asyncio/locks.py \
+ Lib/asyncio/log.py \
+ Lib/asyncio/proactor_events.py \
+ Lib/asyncio/protocols.py \
+ Lib/asyncio/queues.py \
Lib/asyncio/runners.py \
+ Lib/asyncio/selector_events.py \
+ Lib/asyncio/sslproto.py \
+ Lib/asyncio/staggered.py \
+ Lib/asyncio/streams.py \
+ Lib/asyncio/subprocess.py \
+ Lib/asyncio/tasks.py \
+ Lib/asyncio/transports.py \
+ Lib/asyncio/trsock.py \
+ Lib/asyncio/unix_events.py \
+ Lib/asyncio/windows_events.py \
+ Lib/asyncio/windows_utils.py \
))
$(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/python-core-$(PYTHON_VERSION)/lib/collections,\
@@ -383,8 +409,8 @@ $(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/p
Lib/distutils/errors.py \
Lib/distutils/extension.py \
Lib/distutils/fancy_getopt.py \
- Lib/distutils/filelist.py \
Lib/distutils/file_util.py \
+ Lib/distutils/filelist.py \
Lib/distutils/log.py \
Lib/distutils/msvc9compiler.py \
Lib/distutils/msvccompiler.py \
@@ -393,44 +419,44 @@ $(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/p
Lib/distutils/text_file.py \
Lib/distutils/unixccompiler.py \
Lib/distutils/util.py \
- Lib/distutils/versionpredicate.py \
Lib/distutils/version.py \
+ Lib/distutils/versionpredicate.py \
))
$(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/python-core-$(PYTHON_VERSION)/lib/distutils/command,\
Lib/distutils/command/__init__.py \
+ Lib/distutils/command/bdist.py \
Lib/distutils/command/bdist_dumb.py \
Lib/distutils/command/bdist_msi.py \
- Lib/distutils/command/bdist.py \
Lib/distutils/command/bdist_rpm.py \
Lib/distutils/command/bdist_wininst.py \
+ Lib/distutils/command/build.py \
Lib/distutils/command/build_clib.py \
Lib/distutils/command/build_ext.py \
- Lib/distutils/command/build.py \
Lib/distutils/command/build_py.py \
Lib/distutils/command/build_scripts.py \
Lib/distutils/command/check.py \
Lib/distutils/command/clean.py \
Lib/distutils/command/command_template \
Lib/distutils/command/config.py \
+ Lib/distutils/command/install.py \
Lib/distutils/command/install_data.py \
Lib/distutils/command/install_egg_info.py \
Lib/distutils/command/install_headers.py \
Lib/distutils/command/install_lib.py \
- Lib/distutils/command/install.py \
Lib/distutils/command/install_scripts.py \
Lib/distutils/command/register.py \
Lib/distutils/command/sdist.py \
Lib/distutils/command/upload.py \
- Lib/distutils/command/wininst-10.0-amd64.exe \
Lib/distutils/command/wininst-10.0.exe \
- Lib/distutils/command/wininst-14.0-amd64.exe \
+ Lib/distutils/command/wininst-10.0-amd64.exe \
Lib/distutils/command/wininst-14.0.exe \
+ Lib/distutils/command/wininst-14.0-amd64.exe \
Lib/distutils/command/wininst-6.0.exe \
Lib/distutils/command/wininst-7.1.exe \
Lib/distutils/command/wininst-8.0.exe \
- Lib/distutils/command/wininst-9.0-amd64.exe \
Lib/distutils/command/wininst-9.0.exe \
+ Lib/distutils/command/wininst-9.0-amd64.exe \
))
$(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/python-core-$(PYTHON_VERSION)/lib/email,\
@@ -474,8 +500,8 @@ $(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/p
Lib/encodings/aliases.py \
Lib/encodings/ascii.py \
Lib/encodings/base64_codec.py \
- Lib/encodings/big5hkscs.py \
Lib/encodings/big5.py \
+ Lib/encodings/big5hkscs.py \
Lib/encodings/bz2_codec.py \
Lib/encodings/charmap.py \
Lib/encodings/cp037.py \
@@ -492,10 +518,10 @@ $(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/p
Lib/encodings/cp1256.py \
Lib/encodings/cp1257.py \
Lib/encodings/cp1258.py \
+ Lib/encodings/cp273.py \
Lib/encodings/cp424.py \
Lib/encodings/cp437.py \
Lib/encodings/cp500.py \
- Lib/encodings/cp65001.py \
Lib/encodings/cp720.py \
Lib/encodings/cp737.py \
Lib/encodings/cp775.py \
@@ -529,20 +555,20 @@ $(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/p
Lib/encodings/hp_roman8.py \
Lib/encodings/hz.py \
Lib/encodings/idna.py \
+ Lib/encodings/iso2022_jp.py \
Lib/encodings/iso2022_jp_1.py \
- Lib/encodings/iso2022_jp_2004.py \
Lib/encodings/iso2022_jp_2.py \
+ Lib/encodings/iso2022_jp_2004.py \
Lib/encodings/iso2022_jp_3.py \
Lib/encodings/iso2022_jp_ext.py \
- Lib/encodings/iso2022_jp.py \
Lib/encodings/iso2022_kr.py \
+ Lib/encodings/iso8859_1.py \
Lib/encodings/iso8859_10.py \
Lib/encodings/iso8859_11.py \
Lib/encodings/iso8859_13.py \
Lib/encodings/iso8859_14.py \
Lib/encodings/iso8859_15.py \
Lib/encodings/iso8859_16.py \
- Lib/encodings/iso8859_1.py \
Lib/encodings/iso8859_2.py \
Lib/encodings/iso8859_3.py \
Lib/encodings/iso8859_4.py \
@@ -565,8 +591,8 @@ $(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/p
Lib/encodings/mac_greek.py \
Lib/encodings/mac_iceland.py \
Lib/encodings/mac_latin2.py \
- Lib/encodings/mac_romanian.py \
Lib/encodings/mac_roman.py \
+ Lib/encodings/mac_romanian.py \
Lib/encodings/mac_turkish.py \
Lib/encodings/mbcs.py \
Lib/encodings/oem.py \
@@ -576,19 +602,18 @@ $(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/p
Lib/encodings/quopri_codec.py \
Lib/encodings/raw_unicode_escape.py \
Lib/encodings/rot_13.py \
- Lib/encodings/shift_jis_2004.py \
Lib/encodings/shift_jis.py \
+ Lib/encodings/shift_jis_2004.py \
Lib/encodings/shift_jisx0213.py \
Lib/encodings/tis_620.py \
Lib/encodings/undefined.py \
Lib/encodings/unicode_escape.py \
- Lib/encodings/unicode_internal.py \
+ Lib/encodings/utf_16.py \
Lib/encodings/utf_16_be.py \
Lib/encodings/utf_16_le.py \
- Lib/encodings/utf_16.py \
+ Lib/encodings/utf_32.py \
Lib/encodings/utf_32_be.py \
Lib/encodings/utf_32_le.py \
- Lib/encodings/utf_32.py \
Lib/encodings/utf_7.py \
Lib/encodings/utf_8.py \
Lib/encodings/utf_8_sig.py \
@@ -616,6 +641,7 @@ $(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/p
Lib/importlib/_bootstrap_external.py \
Lib/importlib/abc.py \
Lib/importlib/machinery.py \
+ Lib/importlib/metadata.py \
Lib/importlib/resources.py \
Lib/importlib/util.py \
))
@@ -652,8 +678,8 @@ $(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/p
Lib/lib2to3/fixes/fix_buffer.py \
Lib/lib2to3/fixes/fix_dict.py \
Lib/lib2to3/fixes/fix_except.py \
- Lib/lib2to3/fixes/fix_execfile.py \
Lib/lib2to3/fixes/fix_exec.py \
+ Lib/lib2to3/fixes/fix_execfile.py \
Lib/lib2to3/fixes/fix_exitfunc.py \
Lib/lib2to3/fixes/fix_filter.py \
Lib/lib2to3/fixes/fix_funcattrs.py \
@@ -662,13 +688,13 @@ $(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/p
Lib/lib2to3/fixes/fix_has_key.py \
Lib/lib2to3/fixes/fix_idioms.py \
Lib/lib2to3/fixes/fix_import.py \
- Lib/lib2to3/fixes/fix_imports2.py \
Lib/lib2to3/fixes/fix_imports.py \
+ Lib/lib2to3/fixes/fix_imports2.py \
Lib/lib2to3/fixes/fix_input.py \
Lib/lib2to3/fixes/fix_intern.py \
Lib/lib2to3/fixes/fix_isinstance.py \
- Lib/lib2to3/fixes/fix_itertools_imports.py \
Lib/lib2to3/fixes/fix_itertools.py \
+ Lib/lib2to3/fixes/fix_itertools_imports.py \
Lib/lib2to3/fixes/fix_long.py \
Lib/lib2to3/fixes/fix_map.py \
Lib/lib2to3/fixes/fix_metaclass.py \
@@ -708,8 +734,8 @@ $(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/p
Lib/lib2to3/pgen2/literals.py \
Lib/lib2to3/pgen2/parse.py \
Lib/lib2to3/pgen2/pgen.py \
- Lib/lib2to3/pgen2/tokenize.py \
Lib/lib2to3/pgen2/token.py \
+ Lib/lib2to3/pgen2/tokenize.py \
))
$(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/python-core-$(PYTHON_VERSION)/lib/logging,\
@@ -718,13 +744,25 @@ $(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/p
Lib/logging/handlers.py \
))
+ifeq (WNT,$(OS))
+$(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/python-core-$(PYTHON_VERSION)/lib/msilib,\
+ Lib/msilib/__init__.py \
+ Lib/msilib/schema.py \
+ Lib/msilib/sequence.py \
+ Lib/msilib/text.py \
+))
+endif
+
$(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/python-core-$(PYTHON_VERSION)/lib/multiprocessing,\
Lib/multiprocessing/__init__.py \
Lib/multiprocessing/connection.py \
Lib/multiprocessing/context.py \
+ Lib/multiprocessing/dummy/__init__.py \
+ Lib/multiprocessing/dummy/connection.py \
Lib/multiprocessing/forkserver.py \
Lib/multiprocessing/heap.py \
Lib/multiprocessing/managers.py \
+ Lib/multiprocessing/pool.py \
Lib/multiprocessing/popen_fork.py \
Lib/multiprocessing/popen_forkserver.py \
Lib/multiprocessing/popen_spawn_posix.py \
@@ -733,7 +771,8 @@ $(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/p
Lib/multiprocessing/queues.py \
Lib/multiprocessing/reduction.py \
Lib/multiprocessing/resource_sharer.py \
- Lib/multiprocessing/semaphore_tracker.py \
+ Lib/multiprocessing/resource_tracker.py \
+ Lib/multiprocessing/shared_memory.py \
Lib/multiprocessing/sharedctypes.py \
Lib/multiprocessing/spawn.py \
Lib/multiprocessing/synchronize.py \
@@ -754,6 +793,7 @@ $(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/p
$(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/python-core-$(PYTHON_VERSION)/lib/unittest,\
Lib/unittest/__init__.py \
Lib/unittest/__main__.py \
+ Lib/unittest/async_case.py \
Lib/unittest/case.py \
Lib/unittest/loader.py \
Lib/unittest/main.py \
@@ -765,40 +805,6 @@ $(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/p
Lib/unittest/util.py \
))
-$(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/python-core-$(PYTHON_VERSION)/lib/unittest/test,\
- Lib/unittest/test/__init__.py \
- Lib/unittest/test/__main__.py \
- Lib/unittest/test/_test_warnings.py \
- Lib/unittest/test/dummy.py \
- Lib/unittest/test/support.py \
- Lib/unittest/test/test_assertions.py \
- Lib/unittest/test/test_break.py \
- Lib/unittest/test/test_case.py \
- Lib/unittest/test/test_discovery.py \
- Lib/unittest/test/test_functiontestcase.py \
- Lib/unittest/test/test_loader.py \
- Lib/unittest/test/test_program.py \
- Lib/unittest/test/test_result.py \
- Lib/unittest/test/test_runner.py \
- Lib/unittest/test/test_setups.py \
- Lib/unittest/test/test_skipping.py \
- Lib/unittest/test/test_suite.py \
-))
-
-$(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/python-core-$(PYTHON_VERSION)/lib/unittest/test/testmock,\
- Lib/unittest/test/testmock/__init__.py \
- Lib/unittest/test/testmock/__main__.py \
- Lib/unittest/test/testmock/support.py \
- Lib/unittest/test/testmock/testcallable.py \
- Lib/unittest/test/testmock/testhelpers.py \
- Lib/unittest/test/testmock/testmagicmethods.py \
- Lib/unittest/test/testmock/testmock.py \
- Lib/unittest/test/testmock/testpatch.py \
- Lib/unittest/test/testmock/testsealable.py \
- Lib/unittest/test/testmock/testsentinel.py \
- Lib/unittest/test/testmock/testwith.py \
-))
-
$(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/python-core-$(PYTHON_VERSION)/lib/urllib,\
Lib/urllib/__init__.py \
Lib/urllib/error.py \
@@ -823,21 +829,21 @@ $(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/p
$(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/python-core-$(PYTHON_VERSION)/lib/xml/dom,\
Lib/xml/dom/__init__.py \
- Lib/xml/dom/NodeFilter.py \
Lib/xml/dom/domreg.py \
Lib/xml/dom/expatbuilder.py \
Lib/xml/dom/minicompat.py \
Lib/xml/dom/minidom.py \
+ Lib/xml/dom/NodeFilter.py \
Lib/xml/dom/pulldom.py \
Lib/xml/dom/xmlbuilder.py \
))
$(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/python-core-$(PYTHON_VERSION)/lib/xml/etree,\
Lib/xml/etree/__init__.py \
+ Lib/xml/etree/cElementTree.py \
Lib/xml/etree/ElementInclude.py \
Lib/xml/etree/ElementPath.py \
Lib/xml/etree/ElementTree.py \
- Lib/xml/etree/cElementTree.py \
))
$(eval $(call gb_ExternalPackage_add_unpacked_files,python3,$(LIBO_BIN_FOLDER)/python-core-$(PYTHON_VERSION)/lib/xml/parsers,\
diff --git a/external/python3/ExternalProject_python3.mk b/external/python3/ExternalProject_python3.mk
index 6c958431cd97..1ff06a2382ed 100644
--- a/external/python3/ExternalProject_python3.mk
+++ b/external/python3/ExternalProject_python3.mk
@@ -11,7 +11,7 @@ $(eval $(call gb_ExternalProject_ExternalProject,python3))
$(eval $(call gb_ExternalProject_use_externals,python3,\
expat \
- $(if $(filter LINUX,$(OS)),libffi) \
+ $(if $(filter WNT LINUX,$(OS)),libffi) \
openssl \
zlib \
))
@@ -30,16 +30,24 @@ ifeq ($(OS),WNT)
# TODO: using Debug configuration and related mangling of pyconfig.h
+python3_WIN_PLATFORM_MSBUILD := $(strip \
+ $(if $(filter INTEL,$(CPUNAME)),Win32) \
+ $(if $(filter X86_64,$(CPUNAME)),x64) \
+ $(if $(filter ARM64,$(CPUNAME)),arm64) \
+ )
+
# at least for MSVC 2008 it is necessary to clear MAKEFLAGS because
# nmake is invoked
$(call gb_ExternalProject_get_state_target,python3,build) :
$(call gb_ExternalProject_run,build,\
MAKEFLAGS= MSBuild.exe pcbuild.sln /t:Build \
/p:Configuration=$(if $(MSVC_USE_DEBUG_RUNTIME),Debug,Release) \
- /p:Platform=$(if $(filter INTEL,$(CPUNAME)),Win32,x64) \
+ /p:Platform=$(python3_WIN_PLATFORM_MSBUILD) \
/p:opensslIncludeDir=$(call gb_UnpackedTarball_get_dir,openssl)/include \
- /p:opensslOutDir=$(call gb_UnpackedTarball_get_dir,openssl)/out32dll \
+ /p:opensslOutDir=$(call gb_UnpackedTarball_get_dir,openssl) \
/p:zlibDir=$(call gb_UnpackedTarball_get_dir,zlib) \
+ /p:libffiOutDir=$(call gb_UnpackedTarball_get_dir,libffi)/$(HOST_PLATFORM)/.libs \
+ /p:libffiIncludeDir=$(call gb_UnpackedTarball_get_dir,libffi)/$(HOST_PLATFORM)/include \
/maxcpucount \
$(if $(filter 150,$(VCVER)),/p:PlatformToolset=v141 /p:VisualStudioVersion=15.0 /ToolsVersion:15.0) \
$(if $(filter 160,$(VCVER)),/p:PlatformToolset=v142 /p:VisualStudioVersion=16.0 /ToolsVersion:Current) \
@@ -128,14 +136,14 @@ python3_fw_prefix=$(call gb_UnpackedTarball_get_dir,python3)/python-inst/@______
$(call gb_ExternalProject_get_state_target,python3,fixscripts) : $(call gb_ExternalProject_get_state_target,python3,build)
$(call gb_Output_announce,python3 - remove reference to installroot from scripts,build,CUS,5)
$(COMMAND_ECHO)for file in \
- $(python3_fw_prefix)/Versions/$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/bin/2to3 \
$(python3_fw_prefix)/Versions/$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/bin/2to3-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR) \
+ $(python3_fw_prefix)/Versions/$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/bin/easy_install-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR) \
$(python3_fw_prefix)/Versions/$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/bin/idle$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR) \
+ $(python3_fw_prefix)/Versions/$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/bin/pip$(PYTHON_VERSION_MAJOR) \
+ $(python3_fw_prefix)/Versions/$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/bin/pip$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR) \
$(python3_fw_prefix)/Versions/$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/bin/pydoc$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR) \
$(python3_fw_prefix)/Versions/$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/bin/python$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)-config \
- $(python3_fw_prefix)/Versions/$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/bin/python$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m-config \
- $(python3_fw_prefix)/Versions/$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/bin/pyvenv-$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR) ; do \
- { rm "$$file" && $(gb_AWK) '\
+ ; do { rm "$$file" && $(gb_AWK) '\
BEGIN {print "#!/bin/bash\n\
origpath=$$(pwd)\n\
bindir=$$(cd $$(dirname \"$$0\") ; pwd)\n\
@@ -157,16 +165,14 @@ $(call gb_ExternalProject_get_state_target,python3,fixinstallnames) : $(call gb_
@loader_path/../../../LibreOfficePython $$file ; done
touch $@
-# also delete binaries that are symlinked in scp2
$(call gb_ExternalProject_get_state_target,python3,executables) : $(call gb_ExternalProject_get_state_target,python3,build)
cd $(python3_fw_prefix)/Versions/$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/bin ; \
- for file in python$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR) \
- python$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)m ; do \
$(INSTALL_NAME_TOOL) -change \
$(python3_fw_prefix)/Versions/$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/LibreOfficePython \
- @executable_path/../LibreOfficePython $$file ; done
+ @executable_path/../LibreOfficePython python$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)
touch $@
+# also delete binaries that are symlinked in scp2
$(call gb_ExternalProject_get_state_target,python3,removeunnecessarystuff) : $(call gb_ExternalProject_get_state_target,python3,build)
$(call gb_Output_announce,python3 - remove the stuff we don't need to ship,build,CUS,5)
rm -rf $(python3_fw_prefix)/Versions/$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/lib/python$(PYTHON_VERSION_MAJOR).$(PYTHON_VERSION_MINOR)/test
diff --git a/external/python3/UnpackedTarball_python3.mk b/external/python3/UnpackedTarball_python3.mk
index d04868b93a44..94950537386c 100644
--- a/external/python3/UnpackedTarball_python3.mk
+++ b/external/python3/UnpackedTarball_python3.mk
@@ -20,7 +20,6 @@ $(eval $(call gb_UnpackedTarball_add_patches,python3,\
external/python3/python-3.3.0-darwin.patch.1 \
external/python3/python-3.7.6-msvc-ssl.patch.1 \
external/python3/python-3.5.4-msvc-disable.patch.1 \
- external/python3/python-3.3.0-clang.patch.1 \
external/python3/ubsan.patch.0 \
external/python3/python-3.5.tweak.strip.soabi.patch \
external/python3/darwin.patch.0 \
diff --git a/external/python3/i100492-freebsd.patch.1 b/external/python3/i100492-freebsd.patch.1
index 074e5fc489f8..b2ca1ee7117f 100644
--- a/external/python3/i100492-freebsd.patch.1
+++ b/external/python3/i100492-freebsd.patch.1
@@ -2,7 +2,7 @@ FreeBSD porting fixes, patch by maho@openoffice.org
--- Python-3.3.0/Python/thread_pthread.h 2012-11-28 09:00:41.097955124 +0000
+++ Python-3.3.0/Python/thread_pthread.h 2012-11-28 09:01:13.018329351 +0000
-@@ -186,6 +189,9 @@
+@@ -238,6 +238,9 @@
{
pthread_t th;
int status;
@@ -12,7 +12,7 @@ FreeBSD porting fixes, patch by maho@openoffice.org
#if defined(THREAD_STACK_SIZE) || defined(PTHREAD_SYSTEM_SCHED_SUPPORTED)
pthread_attr_t attrs;
#endif
-@@ -214,6 +220,10 @@
+@@ -277,6 +280,10 @@
callback->func = func;
callback->arg = arg;
@@ -23,7 +23,7 @@ FreeBSD porting fixes, patch by maho@openoffice.org
status = pthread_create(&th,
#if defined(THREAD_STACK_SIZE) || defined(PTHREAD_SYSTEM_SCHED_SUPPORTED)
&attrs,
-@@ -225,6 +234,9 @@
+@@ -285,6 +292,9 @@
#endif
pythread_wrapper, callback);
diff --git a/external/python3/internal-zlib.patch.0 b/external/python3/internal-zlib.patch.0
index abe2630bd2e7..27bb737db0c7 100644
--- a/external/python3/internal-zlib.patch.0
+++ b/external/python3/internal-zlib.patch.0
@@ -19,32 +19,32 @@
--- setup.py
+++ setup.py
-@@ -1362,7 +1362,7 @@
+@@ -1483,7 +1483,7 @@
#
# You can upgrade zlib to version 1.1.4 yourself by going to
# http://www.gzip.org/zlib/
-- zlib_inc = find_file('zlib.h', [], inc_dirs)
+- zlib_inc = find_file('zlib.h', [], self.inc_dirs)
+ zlib_inc = [os.environ.get('ZLIB_INCDIR')]
have_zlib = False
if zlib_inc is not None:
zlib_h = zlib_inc[0] + '/zlib.h'
-@@ -1379,13 +1379,13 @@
+@@ -1500,13 +1500,13 @@
version = line.split()[2]
break
if version >= version_req:
-- if (self.compiler.find_library_file(lib_dirs, 'z')):
-+ if (self.compiler.find_library_file(lib_dirs, 'zlib')):
- if host_platform == "darwin":
+- if (self.compiler.find_library_file(self.lib_dirs, 'z')):
++ if (self.compiler.find_library_file(self.lib_dirs, 'zlib')):
+ if MACOS:
zlib_extra_link_args = ('-Wl,-search_paths_first',)
else:
zlib_extra_link_args = ()
- exts.append( Extension('zlib', ['zlibmodule.c'],
-- libraries = ['z'],
-+ libraries = ['zlib'],
- extra_link_args = zlib_extra_link_args))
+ self.add(Extension('zlib', ['zlibmodule.c'],
+- libraries=['z'],
++ libraries=['zlib'],
+ extra_link_args=zlib_extra_link_args))
have_zlib = True
else:
-@@ -1399,7 +1399,7 @@
+@@ -1520,7 +1520,7 @@
# crc32 if we have it. Otherwise binascii uses its own.
if have_zlib:
extra_compile_args = ['-DUSE_ZLIB_CRC32']
diff --git a/external/python3/python-3.3.0-clang.patch.1 b/external/python3/python-3.3.0-clang.patch.1
deleted file mode 100644
index 9001110fbed4..000000000000
--- a/external/python3/python-3.3.0-clang.patch.1
+++ /dev/null
@@ -1,13 +0,0 @@
--*- Mode: diff -*-
-
---- python3/setup.py
-+++ python3/setup.py
-@@ -436,7 +436,7 @@
- if ret >> 8 == 0:
- with open(tmpfile) as fp:
- for line in fp.readlines():
-- if line.startswith("gcc version"):
-+ if line.startswith("gcc version") or line.startswith("clang -cc1 version"):
- is_gcc = True
- elif line.startswith("#include <...>"):
- in_incdirs = True
diff --git a/external/python3/python-3.3.0-darwin.patch.1 b/external/python3/python-3.3.0-darwin.patch.1
index 10a696aa6e93..d262d55cd5b3 100644
--- a/external/python3/python-3.3.0-darwin.patch.1
+++ b/external/python3/python-3.3.0-darwin.patch.1
@@ -5,7 +5,7 @@ LO needs to build both against MacOSX SDK and not produce universal binaries.
diff -ru python3.orig/configure python3/configure
--- python3.orig/configure 2015-07-26 17:36:11.808497783 +0200
+++ python3/configure 2015-07-26 17:38:49.016508337 +0200
-@@ -6794,7 +6794,20 @@
+@@ -7385,7 +7385,20 @@
then
case "$UNIVERSAL_ARCHS" in
32-bit)
@@ -30,7 +30,7 @@ diff -ru python3.orig/configure python3/configure
diff -ru python3.orig/Mac/Makefile.in python3/Mac/Makefile.in
--- python3.orig/Mac/Makefile.in 2015-07-05 18:50:07.000000000 +0200
+++ python3/Mac/Makefile.in 2015-07-26 17:40:14.860514100 +0200
-@@ -43,7 +43,7 @@
+@@ -44,7 +44,7 @@
INSTALL_SCRIPT= @INSTALL_SCRIPT@
INSTALL_DATA=@INSTALL_DATA@
LN=@LN@
@@ -49,7 +49,7 @@ diff -ru python3.orig/Mac/Resources/app/Info.plist.in python3/Mac/Resources/app/
- <string>Python</string>
+ <string>LibreOfficePython</string>
<key>CFBundleGetInfoString</key>
- <string>%version%, (c) 2001-2020 Python Software Foundation.</string>
+ <string>%version%, (c) 2001-2023 Python Software Foundation.</string>
<key>CFBundleHelpBookFolder</key>
diff -ru python3.orig/Mac/Resources/framework/Info.plist.in python3/Mac/Resources/framework/Info.plist.in
--- python3.orig/Mac/Resources/framework/Info.plist.in 2015-07-05 18:50:07.000000000 +0200
@@ -63,19 +63,3 @@ diff -ru python3.orig/Mac/Resources/framework/Info.plist.in python3/Mac/Resource
<key>CFBundleGetInfoString</key>
<string>Python Runtime and Library</string>
<key>CFBundleIdentifier</key>
-diff -ru python3.orig/setup.py python3/setup.py
---- python3.orig/setup.py 2015-07-26 17:36:11.804497783 +0200
-+++ python3/setup.py 2015-07-26 17:39:48.599512337 +0200
-@@ -468,11 +468,11 @@
- # Ensure that /usr/local is always used, but the local build
- # directories (i.e. '.' and 'Include') must be first. See issue
- # 10520.
-- if not cross_compiling:
-+ if not cross_compiling and host_platform != 'darwin':
- add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
- add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
- # only change this for cross builds for 3.3, issues on Mageia
-- if cross_compiling:
-+ if cross_compiling or host_platform == 'darwin':
- self.add_gcc_paths()
- self.add_multiarch_paths()
diff --git a/external/python3/python-3.3.3-disable-obmalloc.patch.0 b/external/python3/python-3.3.3-disable-obmalloc.patch.0
index 0963a5f1bb1d..c4a1dea61ecf 100644
--- a/external/python3/python-3.3.3-disable-obmalloc.patch.0
+++ b/external/python3/python-3.3.3-disable-obmalloc.patch.0
@@ -1,6 +1,6 @@
--- Objects/obmalloc.c
+++ Objects/obmalloc.c
-@@ -413,8 +413,8 @@
+@@ -712,8 +712,8 @@
#ifdef WITH_PYMALLOC
@@ -10,7 +10,7 @@
/* If we're using GCC, use __builtin_expect() to reduce overhead of
the valgrind checks */
-@@ -1181,7 +1181,7 @@
+@@ -1430,7 +1430,7 @@
#ifdef WITH_VALGRIND
if (UNLIKELY(running_on_valgrind == -1)) {
diff --git a/external/python3/python-3.3.3-elf-rpath.patch.1 b/external/python3/python-3.3.3-elf-rpath.patch.1
index 0dfa16c8c247..a408858f5917 100644
--- a/external/python3/python-3.3.3-elf-rpath.patch.1
+++ b/external/python3/python-3.3.3-elf-rpath.patch.1
@@ -5,18 +5,16 @@ set RPATH (only to be used on ELF platforms)
diff -ru python3.orig/Makefile.pre.in python3/Makefile.pre.in
--- python3.orig/Makefile.pre.in 2015-07-26 20:29:07.126194320 +0200
+++ python3/Makefile.pre.in 2015-07-26 20:37:21.814227530 +0200
-@@ -550,7 +550,7 @@
+@@ -566,7 +566,7 @@
# Build the interpreter
$(BUILDPYTHON): Programs/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY)
-- $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST)
-+ $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST) -Wl,-rpath,\$$ORIGIN
+- $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS)
++ $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) -Wl,-rpath,\$$ORIGIN
platform: $(BUILDPYTHON) pybuilddir.txt
$(RUNSHARED) $(PYTHON_FOR_BUILD) -c 'import sys ; from sysconfig import get_platform ; print("%s-%d.%d" % (get_platform(), *sys.version_info[:2]))' >platform
---- python3.orig/Makefile.pre.in 2015-07-05 18:50:07.000000000 +0200
-+++ python3/Makefile.pre.in 2015-07-26 17:34:00.386488960 +0200
-@@ -607,7 +607,7 @@
+@@ -628,7 +628,7 @@
fi
libpython3.so: libpython$(LDVERSION).so
@@ -24,4 +22,4 @@ diff -ru python3.orig/Makefile.pre.in python3/Makefile.pre.in
+ $(BLDSHARED) $(NO_AS_NEEDED) -o $@ -Wl,-h$@ $^ -Wl,-rpath,\$$ORIGIN
libpython$(LDVERSION).dylib: $(LIBRARY_OBJS)
- $(CC) -dynamiclib -Wl,-single_module $(PY_CORE_LDFLAGS) -undefined dynamic_lookup -Wl,-install_name,$(prefix)/lib/libpython$(LDVERSION).dylib -Wl,-compatibility_version,$(VERSION) -Wl,-current_version,$(VERSION) -o $@ $(LIBRARY_OBJS) $(SHLIBS) $(LIBC) $(LIBM) $(LDLAST); \
+ $(CC) -dynamiclib -Wl,-single_module $(PY_CORE_LDFLAGS) -undefined dynamic_lookup -Wl,-install_name,$(prefix)/lib/libpython$(LDVERSION).dylib -Wl,-compatibility_version,$(VERSION) -Wl,-current_version,$(VERSION) -o $@ $(LIBRARY_OBJS) $(DTRACE_OBJS) $(SHLIBS) $(LIBC) $(LIBM); \
diff --git a/external/python3/python-3.5.4-msvc-disable.patch.1 b/external/python3/python-3.5.4-msvc-disable.patch.1
index 416ab2c7b15b..d5b4e3f6264b 100644
--- a/external/python3/python-3.5.4-msvc-disable.patch.1
+++ b/external/python3/python-3.5.4-msvc-disable.patch.1
@@ -3,7 +3,7 @@ Disable some stuff LO does not need, especially stuff with external dependencies
diff -ru python3.orig/PCbuild/pcbuild.sln python3/PCbuild/pcbuild.sln
--- python3.orig/PCbuild/pcbuild.sln 2017-08-10 00:04:44.359879894 +0200
+++ python3/PCbuild/pcbuild.sln 2017-08-10 00:13:51.179873748 +0200
-@@ -12,8 +12,6 @@
+@@ -15,8 +15,6 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pythoncore", "pythoncore.vcxproj", "{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}"
EndProject
@@ -12,7 +12,7 @@ diff -ru python3.orig/PCbuild/pcbuild.sln python3/PCbuild/pcbuild.sln
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "winsound", "winsound.vcxproj", "{28B5D777-DDF2-4B6B-B34F-31D938813856}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_decimal", "_decimal.vcxproj", "{0E9791DB-593A-465F-98BC-681011311617}"
-@@ -28,32 +26,18 @@
+@@ -31,34 +29,20 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_socket", "_socket.vcxproj", "{86937F53-C189-40EF-8CE8-8759D8E7D480}"
EndProject
@@ -22,6 +22,8 @@ diff -ru python3.orig/PCbuild/pcbuild.sln python3/PCbuild/pcbuild.sln
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_testcapi", "_testcapi.vcxproj", "{6901D91C-6E48-4BB7-9FEC-700C8131DF1D}"
EndProject
+ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_testinternalcapi", "_testinternalcapi.vcxproj", "{900342D7-516A-4469-B1AD-59A66E49A25F}"
+ EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_testimportmultiple", "_testimportmultiple.vcxproj", "{36D0C52C-DF4E-45D0-8BC7-E294C3ABC781}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_tkinter", "_tkinter.vcxproj", "{4946ECAC-2E69-4BF8-A90A-F5136F5094DF}"
@@ -45,7 +47,7 @@ diff -ru python3.orig/PCbuild/pcbuild.sln python3/PCbuild/pcbuild.sln
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_multiprocessing", "_multiprocessing.vcxproj", "{9E48B300-37D1-11DD-8C41-005056C00008}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "python3dll", "python3dll.vcxproj", "{885D4898-D08D-4091-9C40-C700CFE3FC5A}"
-@@ -75,8 +75,6 @@
+@@ -93,8 +77,6 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_queue", "_queue.vcxproj", "{78D80A15-BD8C-44E2-B49E-1F05B0A0A687}"
EndProject
diff --git a/external/python3/python-3.5.tweak.strip.soabi.patch b/external/python3/python-3.5.tweak.strip.soabi.patch
index 48ac7f82f8be..4c2bb2bb9a29 100644
--- a/external/python3/python-3.5.tweak.strip.soabi.patch
+++ b/external/python3/python-3.5.tweak.strip.soabi.patch
@@ -1,7 +1,7 @@
diff -ru python3.orig/configure python3/configure
--- misc/python3.orig/configure 2015-07-26 21:14:31.127377193 +0200
+++ misc/python3/configure 2015-07-26 21:21:34.975405648 +0200
-@@ -14388,7 +14388,7 @@
+@@ -15229,7 +15229,7 @@
$as_echo "$ABIFLAGS" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking SOABI" >&5
$as_echo_n "checking SOABI... " >&6; }
diff --git a/external/python3/python-3.7.6-msvc-ssl.patch.1 b/external/python3/python-3.7.6-msvc-ssl.patch.1
index e8e94f674c1f..17cc440f2204 100644
--- a/external/python3/python-3.7.6-msvc-ssl.patch.1
+++ b/external/python3/python-3.7.6-msvc-ssl.patch.1
@@ -2,7 +2,7 @@ No use for applink.c OPENSSL_Applink, everything is compiled with the same MSVC
--- python3/PCbuild/_ssl.vcxproj.orig2 2019-12-23 15:54:19.254298900 +0100
+++ python3/PCbuild/_ssl.vcxproj 2019-12-23 15:54:24.693251200 +0100
-@@ -67,9 +67,6 @@
+@@ -99,9 +99,6 @@
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\Modules\_ssl.c" />
@@ -14,27 +14,12 @@ No use for applink.c OPENSSL_Applink, everything is compiled with the same MSVC
<ResourceCompile Include="..\PC\python_nt.rc" />
--- python3/PCbuild/openssl.props.orig 2019-12-23 16:20:34.588135900 +0100
+++ python3/PCbuild/openssl.props 2019-12-23 16:20:51.074001300 +0100
-@@ -6,7 +6,7 @@
- </ClCompile>
- <Link>
- <AdditionalLibraryDirectories>$(opensslOutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-- <AdditionalDependencies>ws2_32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
-+ <AdditionalDependencies>ws2_32.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- </Link>
+@@ -6,8 +6,6 @@
</ItemDefinitionGroup>
<PropertyGroup>
-@@ -15,10 +15,10 @@
- <_DLLSuffix Condition="$(Platform) == 'ARM64'">$(_DLLSuffix)-arm64</_DLLSuffix>
+ <_DLLSuffix>-1_1</_DLLSuffix>
+- <_DLLSuffix Condition="$(Platform) == 'ARM'">$(_DLLSuffix)-arm</_DLLSuffix>
+- <_DLLSuffix Condition="$(Platform) == 'ARM64'">$(_DLLSuffix)-arm64</_DLLSuffix>
</PropertyGroup>
<ItemGroup>
-- <_SSLDLL Include="$(opensslOutDir)\libcrypto$(_DLLSuffix).dll" />
-- <_SSLDLL Include="$(opensslOutDir)\libcrypto$(_DLLSuffix).pdb" />
-- <_SSLDLL Include="$(opensslOutDir)\libssl$(_DLLSuffix).dll" />
-- <_SSLDLL Include="$(opensslOutDir)\libssl$(_DLLSuffix).pdb" />
-+ <_SSLDLL Include="$(opensslOutDir)\libeay32.dll" />
-+ <_SSLDLL Include="$(opensslOutDir)\libeay32.pdb" />
-+ <_SSLDLL Include="$(opensslOutDir)\ssleay32.dll" />
-+ <_SSLDLL Include="$(opensslOutDir)\ssleay32.pdb" />
- </ItemGroup>
- <Target Name="_CopySSLDLL" Inputs="@(_SSLDLL)" Outputs="@(_SSLDLL->'$(OutDir)%(Filename)%(Extension)')" AfterTargets="Build">
- <Copy SourceFiles="@(_SSLDLL)" DestinationFolder="$(OutDir)" />
+ <_SSLDLL Include="$(opensslOutDir)\libcrypto$(_DLLSuffix).dll" />
diff --git a/external/python3/ubsan.patch.0 b/external/python3/ubsan.patch.0
index 938acc1f1725..d44fbe055c86 100644
--- a/external/python3/ubsan.patch.0
+++ b/external/python3/ubsan.patch.0
@@ -18,3 +18,26 @@
/* Set the carry bit if the function uses any sse registers.
This is clc or stc, together with the first byte of the jmp. */
+--- Modules/posixmodule.c
++++ Modules/posixmodule.c
+@@ -13998,6 +13998,9 @@
+ };
+
+ static int
++#if defined __clang__
++__attribute__((no_sanitize("shift-base"))) // MFD_HUGE_16GB in /usr/include/linux/memfd.h
++#endif
+ all_ins(PyObject *m)
+ {
+ #ifdef F_OK
+--- Objects/listobject.c
++++ Objects/listobject.c
+@@ -554,7 +554,7 @@
+ dest[i] = v;
+ }
+ src = b->ob_item;
+- dest = np->ob_item + Py_SIZE(a);
++ dest = Py_SIZE(a) == 0 ? np->ob_item : np->ob_item + Py_SIZE(a);
+ for (i = 0; i < Py_SIZE(b); i++) {
+ PyObject *v = src[i];
+ Py_INCREF(v);
diff --git a/external/redland/UnpackedTarball_raptor.mk b/external/redland/UnpackedTarball_raptor.mk
index fbdc8b6f5510..92bc586a3e60 100644
--- a/external/redland/UnpackedTarball_raptor.mk
+++ b/external/redland/UnpackedTarball_raptor.mk
@@ -30,6 +30,7 @@ $(eval $(call gb_UnpackedTarball_add_patches,raptor,\
external/redland/raptor/0001-Calcualte-max-nspace-declarations-correctly-for-XML-.patch.1 \
external/redland/raptor/0001-CVE-2020-25713-raptor2-malformed-input-file-can-lead.patch.1 \
external/redland/raptor/libtool.patch \
+ external/redland/raptor/raptor-libxml2-11.patch.1 \
))
# vim: set noet sw=4 ts=4:
diff --git a/external/redland/raptor/raptor-libxml2-11.patch.1 b/external/redland/raptor/raptor-libxml2-11.patch.1
new file mode 100644
index 000000000000..9bed29e50d0b
--- /dev/null
+++ b/external/redland/raptor/raptor-libxml2-11.patch.1
@@ -0,0 +1,15 @@
+--- raptor/src/raptor_libxml.c 2023-05-24 09:55:21.589275008 +0100
++++ raptor/src/raptor_libxml.c 2023-05-24 09:56:41.100324810 +0100
+@@ -246,9 +246,11 @@
+
+ ret->owner = 1;
+
+-#if LIBXML_VERSION >= 20627
++#if LIBXML_VERSION >= 20627 && LIBXML_VERSION < 21100
+ /* Checked field was released in 2.6.27 on 2006-10-25
+ * http://git.gnome.org/browse/libxml2/commit/?id=a37a6ad91a61d168ecc4b29263def3363fff4da6
++ * and removed with
++ * https://gitlab.gnome.org/GNOME/libxml2/-/commit/ce76ebfd1312459951d555ad9d87fb9a89eede55
+ *
+ */
+
diff --git a/filter/source/xsltfilter/LibXSLTTransformer.cxx b/filter/source/xsltfilter/LibXSLTTransformer.cxx
index 42980eeeaff7..d9fd966dcbd4 100644
--- a/filter/source/xsltfilter/LibXSLTTransformer.cxx
+++ b/filter/source/xsltfilter/LibXSLTTransformer.cxx
@@ -320,7 +320,7 @@ namespace XSLT
}
else
{
- xmlErrorPtr lastErr = xmlGetLastError();
+ const xmlError* lastErr = xmlGetLastError();
OUString msg;
if (lastErr)
msg = OStringToOUString(lastErr->message, RTL_TEXTENCODING_UTF8);
@@ -477,7 +477,11 @@ namespace XSLT
{ // backward compatibility for old clients using createInstance
params = args;
}
+
+SAL_WNODEPRECATED_DECLARATIONS_PUSH
xmlSubstituteEntitiesDefault(0);
+SAL_WNODEPRECATED_DECLARATIONS_POP
+
m_parameters.clear();
for (int i = 0; i < params.getLength(); i++)
{
diff --git a/filter/source/xsltfilter/LibXSLTTransformer.hxx b/filter/source/xsltfilter/LibXSLTTransformer.hxx
index d646d5dbfc43..1de16c81e60c 100644
--- a/filter/source/xsltfilter/LibXSLTTransformer.hxx
+++ b/filter/source/xsltfilter/LibXSLTTransformer.hxx
@@ -68,7 +68,7 @@ namespace XSLT
static const sal_Int32 OUTPUT_BUFFER_SIZE;
static const sal_Int32 INPUT_BUFFER_SIZE;
- LibXSLTTransformer* m_transformer;
+ rtl::Reference<LibXSLTTransformer> m_transformer;
Sequence<sal_Int8> m_readBuf;
Sequence<sal_Int8> m_writeBuf;
diff --git a/forms/source/xforms/propertysetbase.hxx b/forms/source/xforms/propertysetbase.hxx
index d46901e0a39c..7111495843bf 100644
--- a/forms/source/xforms/propertysetbase.hxx
+++ b/forms/source/xforms/propertysetbase.hxx
@@ -31,6 +31,7 @@
#include <com/sun/star/beans/PropertyAttribute.hpp>
#include <map>
+#include <memory>
namespace com { namespace sun { namespace star { namespace uno {
class Any;
diff --git a/formula/source/core/api/token.cxx b/formula/source/core/api/token.cxx
index 17594207234f..b57280827bae 100644
--- a/formula/source/core/api/token.cxx
+++ b/formula/source/core/api/token.cxx
@@ -95,17 +95,14 @@ sal_uInt8 FormulaToken::GetParamCount() const
return 0; // parameters and specials
// ocIf... jump commands not for FAP, have cByte then
//2do: bool parameter whether FAP or not?
- else if ( GetByte() )
+ else if (GetByte())
return GetByte(); // all functions, also ocExternal and ocMacro
- else if (SC_OPCODE_START_BIN_OP <= eOp && eOp < SC_OPCODE_STOP_BIN_OP)
- return 2; // binary
- else if ((SC_OPCODE_START_UN_OP <= eOp && eOp < SC_OPCODE_STOP_UN_OP)
- || eOp == ocPercentSign)
- return 1; // unary
+ else if (SC_OPCODE_START_BIN_OP <= eOp && eOp < SC_OPCODE_STOP_BIN_OP && eOp != ocAnd && eOp != ocOr)
+ return 2; // binary operators, compiler checked; OR and AND legacy but are functions
+ else if ((SC_OPCODE_START_UN_OP <= eOp && eOp < SC_OPCODE_STOP_UN_OP) || eOp == ocPercentSign)
+ return 1; // unary operators, compiler checked
else if (SC_OPCODE_START_NO_PAR <= eOp && eOp < SC_OPCODE_STOP_NO_PAR)
return 0; // no parameter
- else if (SC_OPCODE_START_1_PAR <= eOp && eOp < SC_OPCODE_STOP_1_PAR)
- return 1; // one parameter
else if (FormulaCompiler::IsOpCodeJumpCommand( eOp ))
return 1; // only the condition counts as parameter
else
@@ -1193,8 +1190,12 @@ bool FormulaMissingContext::AddMissingExternal( FormulaTokenArray *pNewArr ) con
const OUString &rName = mpFunc->GetExternal();
- // initial (fast) check:
- sal_Unicode nLastChar = rName[ rName.getLength() - 1];
+ // initial (fast) checks:
+ sal_Int32 nLength = rName.getLength();
+ if (!nLength)
+ return false;
+
+ sal_Unicode nLastChar = rName[ nLength - 1];
if ( nLastChar != 't' && nLastChar != 'm' )
return false;
diff --git a/fpicker/source/office/contentenumeration.hxx b/fpicker/source/office/contentenumeration.hxx
index 0f6e37277376..d568f9b07f8c 100644
--- a/fpicker/source/office/contentenumeration.hxx
+++ b/fpicker/source/office/contentenumeration.hxx
@@ -20,6 +20,10 @@
#ifndef INCLUDED_SVTOOLS_SOURCE_CONTNR_CONTENTENUMERATION_HXX
#define INCLUDED_SVTOOLS_SOURCE_CONTNR_CONTENTENUMERATION_HXX
+#include <sal/config.h>
+
+#include <memory>
+
#include <com/sun/star/ucb/XCommandEnvironment.hpp>
#include <salhelper/thread.hxx>
#include <ucbhelper/content.hxx>
diff --git a/framework/qa/cppunit/dispatchtest.cxx b/framework/qa/cppunit/dispatchtest.cxx
index 7903715e4113..68d68f63f872 100644
--- a/framework/qa/cppunit/dispatchtest.cxx
+++ b/framework/qa/cppunit/dispatchtest.cxx
@@ -184,10 +184,9 @@ CPPUNIT_TEST_FIXTURE(DispatchTest, testInterception)
xRegistration->registerDispatchProviderInterceptor(uno::Reference<frame::XDispatchProviderInterceptor>(pInterceptor.get()));
dispatchCommand(mxComponent, ".uno:Bold", {});
- CPPUNIT_ASSERT_EQUAL(1, pInterceptor->getExpected());
+ CPPUNIT_ASSERT_GREATER(0, pInterceptor->getExpected());
CPPUNIT_ASSERT_EQUAL(0, pInterceptor->getUnexpected());
dispatchCommand(mxComponent, ".uno:Italic", {});
- CPPUNIT_ASSERT_EQUAL(1, pInterceptor->getExpected());
// This was 1: MyInterceptor::queryDispatch() was called for .uno:Italic.
CPPUNIT_ASSERT_EQUAL(0, pInterceptor->getUnexpected());
}
diff --git a/framework/source/helper/titlebarupdate.cxx b/framework/source/helper/titlebarupdate.cxx
index 9536485f66d5..b9d699fa3bd8 100644
--- a/framework/source/helper/titlebarupdate.cxx
+++ b/framework/source/helper/titlebarupdate.cxx
@@ -148,7 +148,7 @@ void TitleBarUpdate::impl_updateApplicationID(const css::uno::Reference< css::fr
sDesktopName = "Startcenter";
#if defined(_WIN32)
// We use a hardcoded product name matching the registry keys so applications can be associated with file types
- sApplicationID = "TheDocumentFoundation.LibreOffice." + sDesktopName;
+ sApplicationID = "CIB.CIBOffice." + sDesktopName;
#else
sApplicationID = utl::ConfigManager::getProductName().toAsciiLowerCase() + "-" + sDesktopName.toAsciiLowerCase();
#endif
diff --git a/framework/source/uielement/menubarmanager.cxx b/framework/source/uielement/menubarmanager.cxx
index f7a41c75f9e3..68df9ce6586d 100644
--- a/framework/source/uielement/menubarmanager.cxx
+++ b/framework/source/uielement/menubarmanager.cxx
@@ -54,6 +54,7 @@
#include <comphelper/processfactory.hxx>
#include <comphelper/propertyvalue.hxx>
+#include <officecfg/Office/Common.hxx>
#include <svtools/menuoptions.hxx>
#include <svtools/javainteractionhandler.hxx>
#include <uno/current_context.hxx>
@@ -1455,6 +1456,11 @@ void MenuBarManager::FillMenu(
{
continue;
}
+ if (aCommandURL == ".uno:SafeMode"
+ && !officecfg::Office::Common::Misc::OfferSafeMode::get())
+ {
+ continue;
+ }
if ( nType == css::ui::ItemType::DEFAULT )
{
diff --git a/helpcompiler/source/HelpCompiler.cxx b/helpcompiler/source/HelpCompiler.cxx
index 70159a2c65fd..9cd0425c2e05 100644
--- a/helpcompiler/source/HelpCompiler.cxx
+++ b/helpcompiler/source/HelpCompiler.cxx
@@ -44,7 +44,9 @@ HelpCompiler::HelpCompiler(StreamTable &in_streamTable, const fs::path &in_input
src(in_src), zipdir(in_zipdir), module(in_module), lang(in_lang), resCompactStylesheet(in_resCompactStylesheet),
resEmbStylesheet(in_resEmbStylesheet), bExtensionMode( in_bExtensionMode )
{
+SAL_WNODEPRECATED_DECLARATIONS_PUSH
xmlKeepBlanksDefaultValue = 0;
+SAL_WNODEPRECATED_DECLARATIONS_POP
char* os = getenv("OS");
if (os)
{
@@ -135,9 +137,15 @@ xmlDocPtr HelpCompiler::getSourceDocument(const fs::path &filePath)
if (!cur)
{
static std::string fsroot('\'' + src.toUTF8() + '\'');
-
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable:4996)
+#endif
xmlSubstituteEntitiesDefault(1);
xmlLoadExtDtdDefaultValue = 1;
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
cur = xsltParseStylesheetFile(reinterpret_cast<const xmlChar *>(resEmbStylesheet.native_file_string().c_str()));
int nbparams = 0;
diff --git a/helpcompiler/source/HelpLinker.cxx b/helpcompiler/source/HelpLinker.cxx
index 44444902eb71..c2893390e639 100644
--- a/helpcompiler/source/HelpLinker.cxx
+++ b/helpcompiler/source/HelpLinker.cxx
@@ -807,7 +807,11 @@ static const HelpProcessingException* GpXMLParsingException = nullptr;
extern "C" {
+#if LIBXML_VERSION >= 21200
+static void StructuredXMLErrorFunction(SAL_UNUSED_PARAMETER void *, const xmlError* error)
+#else
static void StructuredXMLErrorFunction(SAL_UNUSED_PARAMETER void *, xmlErrorPtr error)
+#endif
{
std::string aErrorMsg = error->message;
std::string aXMLParsingFile;
diff --git a/helpcontent2 b/helpcontent2
-Subproject 5995b61e8d08489f44e0473f8d0d21e189a0b3d
+Subproject 92adb81e1e5ed153aac049648aec0a0a87a8768
diff --git a/i18npool/source/calendar/calendar_gregorian.cxx b/i18npool/source/calendar/calendar_gregorian.cxx
index f3dc6ede1f66..1dacd8868265 100644
--- a/i18npool/source/calendar/calendar_gregorian.cxx
+++ b/i18npool/source/calendar/calendar_gregorian.cxx
@@ -347,7 +347,7 @@ Calendar_gregorian::setLocalDateTime( double fTimeInDays )
"Calendar_gregorian::setLocalDateTime: " << std::fixed << fM << " rounded to " << fR);
int32_t nZoneOffset, nDSTOffset;
UErrorCode status = U_ZERO_ERROR;
- body->getTimeZone().getOffset( fR, TRUE, nZoneOffset, nDSTOffset, status );
+ body->getTimeZone().getOffset( fR, true, nZoneOffset, nDSTOffset, status );
if ( !U_SUCCESS(status) ) throw ERROR;
status = U_ZERO_ERROR;
body->setTime( fR - (nZoneOffset + nDSTOffset), status );
diff --git a/i18npool/source/characterclassification/cclass_unicode_parser.cxx b/i18npool/source/characterclassification/cclass_unicode_parser.cxx
index 05ac79ce624c..4287cd2e57fc 100644
--- a/i18npool/source/characterclassification/cclass_unicode_parser.cxx
+++ b/i18npool/source/characterclassification/cclass_unicode_parser.cxx
@@ -827,8 +827,16 @@ void cclass_Unicode::parseText( ParseResult& r, const OUString& rText, sal_Int32
{
if (current == cGroupSep)
{
- if (getFlags(nextChar) & ParserFlags::VALUE_DIGIT)
+ // accept only if it is followed by 3 digits
+ sal_Int32 tempIndex(index);
+ sal_uInt32 const nextChar2((tempIndex < rText.getLength()) ? rText.iterateCodePoints(&tempIndex) : 0);
+ sal_uInt32 const nextChar3((tempIndex < rText.getLength()) ? rText.iterateCodePoints(&tempIndex) : 0);
+ if (getFlags(nextChar) & ParserFlags::VALUE_DIGIT
+ && getFlags(nextChar2) & ParserFlags::VALUE_DIGIT
+ && getFlags(nextChar3) & ParserFlags::VALUE_DIGIT)
+ {
nParseTokensType |= KParseTokens::GROUP_SEPARATOR_IN_NUMBER;
+ }
else
{
// Trailing group separator character is not a
diff --git a/icon-themes/breeze/sfx2/res/logo.png b/icon-themes/breeze/sfx2/res/logo.png
index ace737a89fd9..e2cd4aaa3aea 100755
--- a/icon-themes/breeze/sfx2/res/logo.png
+++ b/icon-themes/breeze/sfx2/res/logo.png
Binary files differ
diff --git a/icon-themes/cib/sfx2/res/logo.png b/icon-themes/cib/sfx2/res/logo.png
index ace737a89fd9..4ae4a19b1ccb 100644
--- a/icon-themes/cib/sfx2/res/logo.png
+++ b/icon-themes/cib/sfx2/res/logo.png
Binary files differ
diff --git a/icon-themes/colibre/sfx2/res/logo.png b/icon-themes/colibre/sfx2/res/logo.png
index ace737a89fd9..e2cd4aaa3aea 100644
--- a/icon-themes/colibre/sfx2/res/logo.png
+++ b/icon-themes/colibre/sfx2/res/logo.png
Binary files differ
diff --git a/icon-themes/elementary/sfx2/res/logo.png b/icon-themes/elementary/sfx2/res/logo.png
index ace737a89fd9..e2cd4aaa3aea 100755
--- a/icon-themes/elementary/sfx2/res/logo.png
+++ b/icon-themes/elementary/sfx2/res/logo.png
Binary files differ
diff --git a/icon-themes/karasa_jaga/sfx2/res/logo.png b/icon-themes/karasa_jaga/sfx2/res/logo.png
index ace737a89fd9..e2cd4aaa3aea 100644
--- a/icon-themes/karasa_jaga/sfx2/res/logo.png
+++ b/icon-themes/karasa_jaga/sfx2/res/logo.png
Binary files differ
diff --git a/icon-themes/sifr/sfx2/res/logo.png b/icon-themes/sifr/sfx2/res/logo.png
index ace737a89fd9..e2cd4aaa3aea 100755
--- a/icon-themes/sifr/sfx2/res/logo.png
+++ b/icon-themes/sifr/sfx2/res/logo.png
Binary files differ
diff --git a/icon-themes/tango/sfx2/res/logo.png b/icon-themes/tango/sfx2/res/logo.png
index ace737a89fd9..e2cd4aaa3aea 100644
--- a/icon-themes/tango/sfx2/res/logo.png
+++ b/icon-themes/tango/sfx2/res/logo.png
Binary files differ
diff --git a/include/comphelper/hash.hxx b/include/comphelper/hash.hxx
index 52ad5e5cdf1e..ae16d5ddd57f 100644
--- a/include/comphelper/hash.hxx
+++ b/include/comphelper/hash.hxx
@@ -26,6 +26,7 @@ enum class HashType
MD5,
SHA1,
SHA256,
+ SHA384,
SHA512
};
diff --git a/include/default.rc b/include/default.rc
index 5474d55c4c0a..40bcb28d2b57 100644
--- a/include/default.rc
+++ b/include/default.rc
@@ -45,7 +45,7 @@ VS_VERSION_INFO VERSIONINFO
{
// International StringTable
VALUE "CompanyName", PPS(RES_APP_VENDOR) "\0"
- VALUE "ProductName", "LibreOffice\0"
+ VALUE "ProductName", "CIB Office\0"
VALUE "ProductVersion", PPS(VER_LEVEL) "\0"
VALUE "FileVersion", PPS(VER_LEVEL) "\0"
VALUE "OriginalFilename", PPS(ORG_NAME) "\0"
diff --git a/include/editeng/editeng.hxx b/include/editeng/editeng.hxx
index 1f77ce661020..5b19976453f5 100644
--- a/include/editeng/editeng.hxx
+++ b/include/editeng/editeng.hxx
@@ -34,6 +34,7 @@
#include <i18nlangtag/lang.h>
#include <tools/lineend.hxx>
+#include <tools/fontenum.hxx>
#include <editeng/eedata.hxx>
#include <o3tl/typed_flags_set.hxx>
@@ -501,7 +502,7 @@ public:
virtual OUString GetUndoComment( sal_uInt16 nUndoId ) const;
virtual bool SpellNextDocument();
virtual void FieldClicked( const SvxFieldItem& rField );
- virtual OUString CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rTxtColor, boost::optional<Color>& rFldColor );
+ virtual OUString CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rTxtColor, boost::optional<Color>& rFldColor, boost::optional<FontLineStyle>& rFldLineStyle );
// override this if access to bullet information needs to be provided
virtual const SvxNumberFormat * GetNumberFormat( sal_Int32 nPara ) const;
diff --git a/include/editeng/outliner.hxx b/include/editeng/outliner.hxx
index acb484943bf7..0a00c079fc38 100644
--- a/include/editeng/outliner.hxx
+++ b/include/editeng/outliner.hxx
@@ -485,6 +485,7 @@ private:
boost::optional<Color> mxTxtColor;
boost::optional<Color> mxFldColor;
+ boost::optional<FontLineStyle> mxFldLineStyle;
OUString aRepresentation;
@@ -514,6 +515,9 @@ public:
boost::optional<Color> const & GetFieldColor() const { return mxFldColor; }
void SetFieldColor( boost::optional<Color> xCol ) { mxFldColor = xCol; }
+ boost::optional<FontLineStyle> const& GetFontLineStyle() const { return mxFldLineStyle; }
+ void SetFontLineStyle( boost::optional<FontLineStyle> xLineStyle ) { mxFldLineStyle = xLineStyle; }
+
sal_Int32 GetPara() const { return nPara; }
sal_Int32 GetPos() const { return nPos; }
@@ -878,7 +882,7 @@ public:
bool UpdateFields();
void RemoveFields( const std::function<bool ( const SvxFieldData* )>& isFieldData = [] (const SvxFieldData* ){return true;} );
- virtual OUString CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rTxtColor, boost::optional<Color>& rFldColor );
+ virtual OUString CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rTxtColor, boost::optional<Color>& rFldColor, boost::optional<FontLineStyle>& rFldLineStyle );
void SetSpeller( css::uno::Reference< css::linguistic2::XSpellChecker1 > const &xSpeller );
css::uno::Reference< css::linguistic2::XSpellChecker1 > const &
diff --git a/include/editeng/unoedprx.hxx b/include/editeng/unoedprx.hxx
index 132cbbf96c66..03a26f66a583 100644
--- a/include/editeng/unoedprx.hxx
+++ b/include/editeng/unoedprx.hxx
@@ -22,6 +22,7 @@
#include <memory>
#include <svl/SfxBroadcaster.hxx>
+#include <tools/fontenum.hxx>
#include <editeng/unoedsrc.hxx>
#include <editeng/editdata.hxx>
@@ -54,7 +55,7 @@ public:
virtual SfxItemPool* GetPool() const override;
- virtual OUString CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rpTxtColor, boost::optional<Color>& rpFldColor ) override;
+ virtual OUString CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rpTxtColor, boost::optional<Color>& rpFldColor, boost::optional<FontLineStyle>& rpFldLineStyle ) override;
virtual void FieldClicked( const SvxFieldItem& rField ) override;
virtual bool IsValid() const override;
diff --git a/include/editeng/unoedsrc.hxx b/include/editeng/unoedsrc.hxx
index e9f3ee0dd093..3c038189a728 100644
--- a/include/editeng/unoedsrc.hxx
+++ b/include/editeng/unoedsrc.hxx
@@ -23,6 +23,7 @@
#include <i18nlangtag/lang.h>
#include <rtl/ustring.hxx>
#include <tools/gen.hxx>
+#include <tools/fontenum.hxx>
#include <vcl/mapmod.hxx>
#include <svl/poolitem.hxx>
#include <editeng/editengdllapi.h>
@@ -159,7 +160,7 @@ public:
virtual void QuickSetAttribs( const SfxItemSet& rSet, const ESelection& rSel ) = 0;
virtual void QuickInsertLineBreak( const ESelection& rSel ) = 0;
- virtual OUString CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rpTxtColor, boost::optional<Color>& rpFldColor ) = 0;
+ virtual OUString CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rpTxtColor, boost::optional<Color>& rpFldColor, boost::optional<FontLineStyle>& rpFldLineStyle ) = 0;
virtual void FieldClicked( const SvxFieldItem& rField ) = 0;
virtual SfxItemPool* GetPool() const = 0;
diff --git a/include/editeng/unofored.hxx b/include/editeng/unofored.hxx
index 8222a3043bdb..72d0d65c6548 100644
--- a/include/editeng/unofored.hxx
+++ b/include/editeng/unofored.hxx
@@ -54,7 +54,7 @@ public:
virtual SfxItemPool* GetPool() const override;
- virtual OUString CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rpTxtColor, boost::optional<Color>& rpFldColor ) override;
+ virtual OUString CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rpTxtColor, boost::optional<Color>& rpFldColor, boost::optional<FontLineStyle>& rpFldLineStyle ) override;
virtual void FieldClicked( const SvxFieldItem& rField ) override;
virtual bool IsValid() const override;
diff --git a/include/editeng/unoforou.hxx b/include/editeng/unoforou.hxx
index f2d28a53e405..cb52c97f5e25 100644
--- a/include/editeng/unoforou.hxx
+++ b/include/editeng/unoforou.hxx
@@ -72,7 +72,7 @@ public:
virtual SfxItemPool* GetPool() const override;
- virtual OUString CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rpTxtColor, boost::optional<Color>& rpFldColor ) override;
+ virtual OUString CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rpTxtColor, boost::optional<Color>& rpFldColor, boost::optional<FontLineStyle>& rpFldLineStyle ) override;
virtual void FieldClicked( const SvxFieldItem& rField ) override;
virtual bool IsValid() const override;
diff --git a/include/editeng/unotext.hxx b/include/editeng/unotext.hxx
index aaf9cd18328f..39c6f4863ecb 100644
--- a/include/editeng/unotext.hxx
+++ b/include/editeng/unotext.hxx
@@ -189,7 +189,7 @@ public:
virtual void QuickSetAttribs( const SfxItemSet& rSet, const ESelection& rSel ) override;
virtual void QuickInsertLineBreak( const ESelection& rSel ) override;
- virtual OUString CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rpTxtColor, boost::optional<Color>& rpFldColor ) override;
+ virtual OUString CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rpTxtColor, boost::optional<Color>& rpFldColor, boost::optional<FontLineStyle>& rpFldLineStyle ) override;
virtual void FieldClicked( const SvxFieldItem& rField ) override;
virtual bool IsValid() const override;
diff --git a/include/filter/msfilter/mscodec.hxx b/include/filter/msfilter/mscodec.hxx
index 47067a38fe5e..9f0a858fb227 100644
--- a/include/filter/msfilter/mscodec.hxx
+++ b/include/filter/msfilter/mscodec.hxx
@@ -444,6 +444,7 @@ const sal_uInt32 SALT_LENGTH = 16;
const sal_uInt32 ENCRYPTED_VERIFIER_LENGTH = 16;
const sal_uInt32 SHA1_HASH_LENGTH = RTL_DIGEST_LENGTH_SHA1; // 20
const sal_uInt32 SHA256_HASH_LENGTH = 32;
+const sal_uInt32 SHA384_HASH_LENGTH = 48;
const sal_uInt32 SHA512_HASH_LENGTH = 64;
struct MSFILTER_DLLPUBLIC EncryptionStandardHeader
diff --git a/include/jvmfwk/framework.hxx b/include/jvmfwk/framework.hxx
index 3c7fe2981436..1726f8e47921 100644
--- a/include/jvmfwk/framework.hxx
+++ b/include/jvmfwk/framework.hxx
@@ -387,6 +387,17 @@ JVMFWK_DLLPUBLIC javaFrameworkError jfw_findAndSelectJRE(std::unique_ptr<JavaInf
JVMFWK_DLLPUBLIC javaFrameworkError jfw_findAllJREs(
std::vector<std::unique_ptr<JavaInfo>> *parInfo);
+/**
+ * Convert colon-separated userClassPath which might contain bootstrap variables
+ * (which also might contain colons) to a list of classPaths, keeping bootstrap variables intact.
+ *
+ * FIXME: Nested or multiple occurrences of ${...:...:...} are currently not supported.
+ *
+ * @param sUserPath colon-separated string of user classpaths
+ * @return list of user classpaths
+ */
+JVMFWK_DLLPUBLIC std::vector<OUString> jfw_convertUserPathList(OUString const& sUserPath);
+
/** determines if a path points to a Java installation.
<p>If the path belongs to a JRE installation then it returns the
diff --git a/include/oox/crypto/AgileEngine.hxx b/include/oox/crypto/AgileEngine.hxx
index 796f030b3bce..0a1721dc096b 100644
--- a/include/oox/crypto/AgileEngine.hxx
+++ b/include/oox/crypto/AgileEngine.hxx
@@ -71,6 +71,7 @@ struct OOX_DLLPUBLIC AgileEncryptionParameters
enum class AgileEncryptionPreset
{
AES_128_SHA1,
+ AES_128_SHA384,
AES_256_SHA512,
};
diff --git a/include/oox/crypto/CryptTools.hxx b/include/oox/crypto/CryptTools.hxx
index 5bd7119c548c..0ff8f1c28bed 100644
--- a/include/oox/crypto/CryptTools.hxx
+++ b/include/oox/crypto/CryptTools.hxx
@@ -49,6 +49,7 @@ enum class CryptoHashType
{
SHA1,
SHA256,
+ SHA384,
SHA512
};
diff --git a/include/rtl/bootstrap.h b/include/rtl/bootstrap.h
index 620a3a577944..93ece37ba95c 100644
--- a/include/rtl/bootstrap.h
+++ b/include/rtl/bootstrap.h
@@ -41,27 +41,29 @@ extern "C" {
the next level is tried. Every query starts at the first level again, so
that one setting may be taken from the 3rd and one from the 1st level.
- 1st level: explicitly set variables via rtl_bootstrap_set()
+ 1st level: a fundamental.override.ini next to the application
- 2nd level: command line arguments. A `-env:SETTINGNAME=value` is given on
+ 2nd level: explicitly set variables via rtl_bootstrap_set()
+
+ 3rd level: command line arguments. A `-env:SETTINGNAME=value` is given on
command line. This allows giving an application a certain setting, even
if an ini-file exists (especially useful for e.g. daemons that want to
start an executable with dynamical changing settings).
- 3rd level: environment variables. The application tries to get the
+ 4th level: environment variables. The application tries to get the
setting from the environment.
- 4th level: executable ini-file. Every application looks for an ini-file.
+ 5th level: executable ini-file. Every application looks for an ini-file.
The filename defaults to `/absolute/path/to/executable[rc|.ini]`
without .bin or .exe suffix. The ini-filename can be
set by the special command line parameter
`-env:INIFILENAME=/absolute/path/to/inifile` at runtime or it may
be set at compile time by an API-call.
- 5th level: URE_BOOTSTRAP ini-file. If the bootstrap variable URE_BOOTSTRAP
+ 6th level: URE_BOOTSTRAP ini-file. If the bootstrap variable URE_BOOTSTRAP
expands to the URL of an ini-file, that ini-file is searched.
- 6th level: default. An application can have some default settings decided
+ 7th level: default. An application can have some default settings decided
at compile time, which allow the application to run even with no
deployment settings.
diff --git a/include/sal/types.h b/include/sal/types.h
index 1a8ba255b4b7..2e8d5e8ad873 100644
--- a/include/sal/types.h
+++ b/include/sal/types.h
@@ -495,6 +495,12 @@ template< typename T1, typename T2 > inline T1 static_int_cast(T2 n) {
_Pragma(SAL_STRINGIFY_ARG(GCC diagnostic ignored "-Wdeprecated-declarations"))
#define SAL_WNODEPRECATED_DECLARATIONS_POP \
_Pragma(SAL_STRINGIFY_ARG(GCC diagnostic pop))
+#elif defined LIBO_INTERNAL_ONLY && defined _MSC_VER
+#define SAL_WNODEPRECATED_DECLARATIONS_PUSH \
+ __pragma(warning(push)) \
+ __pragma(warning(disable : 4996))
+#define SAL_WNODEPRECATED_DECLARATIONS_POP \
+ __pragma(warning(pop))
#else
# define SAL_WNODEPRECATED_DECLARATIONS_PUSH
# define SAL_WNODEPRECATED_DECLARATIONS_POP
diff --git a/include/sfx2/basedlgs.hxx b/include/sfx2/basedlgs.hxx
index fedaa598109c..42c7054eb4de 100644
--- a/include/sfx2/basedlgs.hxx
+++ b/include/sfx2/basedlgs.hxx
@@ -50,7 +50,8 @@ public:
// when the dialog has an associated SfxChildWin, typically for Modeless interaction
virtual void ChildWinDispose() {} // called from the associated SfxChildWin dtor
virtual void Close() {} // called by the SfxChildWin when the dialog is closed
- virtual void EndDialog(); // called by the SfxChildWin to close the dialog
+ virtual void EndDialog(int nResponse); // called by the SfxChildWin to close the dialog
+ virtual bool CloseOnHide() const { return true; } // called from ScValidationDlg
};
class SfxModelessDialog_Impl;
@@ -75,7 +76,7 @@ public:
void Initialize (SfxChildWinInfo const * pInfo);
bool IsClosing() const;
virtual void Close() override;
- virtual void EndDialog() override;
+ virtual void EndDialog(int nRespose) override;
virtual void Activate() override;
virtual void Deactivate() override;
virtual void ChildWinDispose() override;
diff --git a/include/sfx2/childwin.hxx b/include/sfx2/childwin.hxx
index f5e64fdfedf3..d3fb36947a83 100644
--- a/include/sfx2/childwin.hxx
+++ b/include/sfx2/childwin.hxx
@@ -211,6 +211,7 @@ public:
SAL_DLLPRIVATE void SetFactory_Impl( SfxChildWinFactory* );
};
+const int nCloseResponseToJustHide = -42;
//! The Macro of the future ...
#define SFX_DECL_CHILDWINDOWCONTEXT(Class) \
diff --git a/include/sfx2/docmacromode.hxx b/include/sfx2/docmacromode.hxx
index bd4f13fb016c..0cfca92db308 100644
--- a/include/sfx2/docmacromode.hxx
+++ b/include/sfx2/docmacromode.hxx
@@ -261,6 +261,8 @@ namespace sfx2
*/
static bool storageHasMacros( const css::uno::Reference< css::embed::XStorage >& _rxStorage );
+ bool hasMacros() const;
+
static bool containerHasBasicMacros( const css::uno::Reference< css::script::XLibraryContainer >& xContainter );
/** checks the macro execution mode while loading the document.
@@ -288,7 +290,7 @@ namespace sfx2
bool
checkMacrosOnLoading(
const css::uno::Reference< css::task::XInteractionHandler >& _rxInteraction,
- bool bHasValidContentSignature = false
+ bool bHasValidContentSignature, bool bHasMacros
);
private:
diff --git a/include/sfx2/infobar.hxx b/include/sfx2/infobar.hxx
index 80f4c0a0506c..405f1feffd42 100644
--- a/include/sfx2/infobar.hxx
+++ b/include/sfx2/infobar.hxx
@@ -117,7 +117,7 @@ class SfxInfoBarContainerWindow final : public vcl::Window
VclPtr<SfxInfoBarWindow> getInfoBar(const OUString& sId);
bool hasInfoBarWithID(const OUString& sId);
void removeInfoBar(VclPtr<SfxInfoBarWindow> const & pInfoBar);
-
+ static bool isInfobarEnabled(const OUString& sId);
virtual void Resize() override;
};
diff --git a/include/sfx2/objsh.hxx b/include/sfx2/objsh.hxx
index 2a56ebe88e07..10442bfb5148 100644
--- a/include/sfx2/objsh.hxx
+++ b/include/sfx2/objsh.hxx
@@ -202,6 +202,9 @@ private:
SAL_DLLPRIVATE bool SaveTo_Impl(SfxMedium &rMedium, const SfxItemSet* pSet );
+ // true if the document had macros (or similar) on load to trigger warning user
+ SAL_DLLPRIVATE bool GetHadCheckedMacrosOnLoad() const;
+
protected:
SfxObjectShell(SfxObjectCreateMode);
SfxObjectShell(SfxModelFlags); // see sfxmodelfactory.hxx
@@ -418,6 +421,9 @@ public:
void SetMacroCallsSeenWhileLoading();
bool GetMacroCallsSeenWhileLoading() const;
+ // true if this type of link, from a document, is allowed by the user to be passed to uno:OpenDoc
+ static bool AllowedLinkProtocolFromDocument(const OUString& rUrl, SfxObjectShell* pObjShell, weld::Window* pDialogParent);
+
const css::uno::Sequence< css::beans::PropertyValue >& GetModifyPasswordInfo() const;
bool SetModifyPasswordInfo( const css::uno::Sequence< css::beans::PropertyValue >& aInfo );
@@ -579,6 +585,8 @@ public:
const css::uno::Reference<css::embed::XStorage>& xTarget,
const css::uno::Sequence<OUString>& rExceptions = css::uno::Sequence<OUString>());
+ bool isEditDocLocked();
+
// The functions from SvPersist
void EnableSetModified( bool bEnable = true );
bool IsEnableSetModified() const;
diff --git a/include/sfx2/sidebar/SidebarPanelBase.hxx b/include/sfx2/sidebar/SidebarPanelBase.hxx
index f1cc0e26b93d..4f28b632f37e 100644
--- a/include/sfx2/sidebar/SidebarPanelBase.hxx
+++ b/include/sfx2/sidebar/SidebarPanelBase.hxx
@@ -19,6 +19,10 @@
#ifndef INCLUDED_SFX2_SIDEBAR_SIDEBARPANELBASE_HXX
#define INCLUDED_SFX2_SIDEBAR_SIDEBARPANELBASE_HXX
+#include <sal/config.h>
+
+#include <memory>
+
#include <sfx2/dllapi.h>
#include <cppuhelper/compbase.hxx>
diff --git a/include/sfx2/strings.hrc b/include/sfx2/strings.hrc
index 1db36e733c0c..29950ba68ca1 100644
--- a/include/sfx2/strings.hrc
+++ b/include/sfx2/strings.hrc
@@ -103,6 +103,7 @@
#define STR_GB NC_("STR_GB", "GB")
#define STR_QUERY_LASTVERSION NC_("STR_QUERY_LASTVERSION", "Cancel all changes?")
#define STR_NO_WEBBROWSER_FOUND NC_("STR_NO_WEBBROWSER_FOUND", "Opening \"$(ARG1)\" failed with error code $(ARG2) and message: \"$(ARG3)\"\nMaybe no web browser could be found on your system. In that case, please check your Desktop Preferences or install a web browser (for example, Firefox) in the default location requested during the browser installation.")
+#define STR_DANGEROUS_TO_OPEN NC_("STR_DANGEROUS_TO_OPEN", "It might be dangerous to open \"$(ARG1)\".\nDo you really want to open it?")
#define STR_NO_ABS_URI_REF NC_("STR_NO_ABS_URI_REF", "\"$(ARG1)\" is not an absolute URL that can be passed to an external application to open it.")
#define STR_GID_INTERN NC_("STR_GID_INTERN", "Internal")
#define STR_GID_APPLICATION NC_("STR_GID_APPLICATION", "Application")
diff --git a/include/sfx2/viewsh.hxx b/include/sfx2/viewsh.hxx
index d65fae656b16..a1a225aa1b28 100644
--- a/include/sfx2/viewsh.hxx
+++ b/include/sfx2/viewsh.hxx
@@ -292,7 +292,6 @@ public:
bool isExportLocked();
bool isPrintLocked();
bool isSaveLocked();
- bool isEditDocLocked();
SAL_DLLPRIVATE SfxInPlaceClient* GetUIActiveIPClient_Impl() const;
SAL_DLLPRIVATE void AddContextMenuInterceptor_Impl( const css::uno::Reference < css::ui::XContextMenuInterceptor >& xInterceptor );
diff --git a/include/svx/ClassificationEditView.hxx b/include/svx/ClassificationEditView.hxx
index 614b1d2b6a09..31ada88d3bd7 100644
--- a/include/svx/ClassificationEditView.hxx
+++ b/include/svx/ClassificationEditView.hxx
@@ -24,7 +24,7 @@ class ClassificationEditEngine final : public EditEngine
public:
ClassificationEditEngine(SfxItemPool* pItemPool);
- virtual OUString CalcFieldValue(const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rTxtColor, boost::optional<Color>& rFldColor) override;
+ virtual OUString CalcFieldValue(const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rTxtColor, boost::optional<Color>& rFldColor, boost::optional<FontLineStyle>& rFldLineStyle) override;
};
class SVX_DLLPUBLIC ClassificationEditView final : public WeldEditView
diff --git a/include/svx/svdomeas.hxx b/include/svx/svdomeas.hxx
index cce1df59819a..b287274e65fc 100644
--- a/include/svx/svdomeas.hxx
+++ b/include/svx/svdomeas.hxx
@@ -140,7 +140,7 @@ public:
virtual OutlinerParaObject* GetOutlinerParaObject() const override;
virtual bool CalcFieldValue(const SvxFieldItem& rField, sal_Int32 nPara, sal_uInt16 nPos,
- bool bEdit, boost::optional<Color>& rpTxtColor, boost::optional<Color>& rpFldColor, OUString& rRet) const override;
+ bool bEdit, boost::optional<Color>& rpTxtColor, boost::optional<Color>& rpFldColor, boost::optional<FontLineStyle>& rpFldLineStyle, OUString& rRet) const override;
// #i97878#
virtual bool TRGetBaseGeometry(basegfx::B2DHomMatrix& rMatrix, basegfx::B2DPolyPolygon& rPolyPolygon) const override;
diff --git a/include/svx/svdoole2.hxx b/include/svx/svdoole2.hxx
index b192a438bc19..085b6e04a3a3 100644
--- a/include/svx/svdoole2.hxx
+++ b/include/svx/svdoole2.hxx
@@ -42,6 +42,7 @@ namespace frame { class XModel; }
namespace svt { class EmbeddedObjectRef; }
class SdrOle2ObjImpl;
+class SvxOle2Shape;
class SVX_DLLPUBLIC SdrOle2Obj : public SdrRectObj
{
@@ -49,7 +50,7 @@ private:
std::unique_ptr<SdrOle2ObjImpl> mpImpl;
private:
- SVX_DLLPRIVATE void Connect_Impl();
+ SVX_DLLPRIVATE void Connect_Impl(SvxOle2Shape* pCreator = nullptr);
SVX_DLLPRIVATE void Disconnect_Impl();
SVX_DLLPRIVATE void AddListeners_Impl();
SVX_DLLPRIVATE void RemoveListeners_Impl();
@@ -105,7 +106,7 @@ public:
// OLE object has got a separate PersistName member now;
// !!! use ::SetPersistName( ... ) only, if you know what you do !!!
const OUString& GetPersistName() const;
- void SetPersistName( const OUString& rPersistName );
+ void SetPersistName( const OUString& rPersistName, SvxOle2Shape* pCreator = nullptr );
// One can add an application name to a SdrOle2Obj, which can be queried for
// later on (SD needs this for presentation objects).
@@ -153,7 +154,7 @@ public:
sal_Int64 nAspect );
static bool Unload( const css::uno::Reference< css::embed::XEmbeddedObject >& xObj, sal_Int64 nAspect );
bool Unload();
- void Connect();
+ void Connect(SvxOle2Shape* pCreator = nullptr);
void Disconnect();
void ObjectLoaded();
@@ -200,6 +201,16 @@ public:
void Connect() { GetRealObject(); }
};
+class SVX_DLLPUBLIC SdrIFrameLink final : public sfx2::SvBaseLink
+{
+ SdrOle2Obj* m_pObject;
+
+public:
+ explicit SdrIFrameLink(SdrOle2Obj* pObject);
+ virtual ::sfx2::SvBaseLink::UpdateResult DataChanged(
+ const OUString& rMimeType, const css::uno::Any & rValue ) override;
+};
+
#endif // INCLUDED_SVX_SVDOOLE2_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/svx/svdotext.hxx b/include/svx/svdotext.hxx
index 78e09d508199..9d365ce71e38 100644
--- a/include/svx/svdotext.hxx
+++ b/include/svx/svdotext.hxx
@@ -498,7 +498,7 @@ public:
virtual void NbcReformatText() override;
virtual bool CalcFieldValue(const SvxFieldItem& rField, sal_Int32 nPara, sal_uInt16 nPos,
- bool bEdit, boost::optional<Color>& rpTxtColor, boost::optional<Color>& rpFldColor, OUString& rRet) const;
+ bool bEdit, boost::optional<Color>& rpTxtColor, boost::optional<Color>& rpFldColor, boost::optional<FontLineStyle>& rpFldLineStyle, OUString& rRet) const;
virtual SdrObjectUniquePtr DoConvertToPolyObj(bool bBezier, bool bAddText) const override;
diff --git a/include/svx/svdoutl.hxx b/include/svx/svdoutl.hxx
index 7655dee739b7..adfe159a9814 100644
--- a/include/svx/svdoutl.hxx
+++ b/include/svx/svdoutl.hxx
@@ -43,7 +43,7 @@ public:
void setVisualizedPage(const SdrPage* pPage) { if(pPage != mpVisualizedPage) mpVisualizedPage = pPage; }
const SdrPage* getVisualizedPage() const { return mpVisualizedPage; }
- virtual OUString CalcFieldValue(const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rpTxtColor, boost::optional<Color>& rpFldColor) override;
+ virtual OUString CalcFieldValue(const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rpTxtColor, boost::optional<Color>& rpFldColor, boost::optional<FontLineStyle>& rpFldLineStyle) override;
bool hasEditViewCallbacks() const;
};
diff --git a/include/svx/unoshape.hxx b/include/svx/unoshape.hxx
index 0b48d1e433d6..4b5c78b26cfa 100644
--- a/include/svx/unoshape.hxx
+++ b/include/svx/unoshape.hxx
@@ -581,6 +581,8 @@ public:
// #i118485# changed parent to SvxShapeText to allow Text handling over UNO API
class SVX_DLLPUBLIC SvxOle2Shape : public SvxShapeText
{
+private:
+ OUString referer_;
protected:
// override these for special property handling in subcasses. Return true if property is handled
virtual bool setPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, const css::uno::Any& rValue ) override;
@@ -590,13 +592,15 @@ protected:
SvGlobalName GetClassName_Impl(OUString& rHexCLSID);
public:
- SvxOle2Shape(SdrObject* pObj);
- SvxOle2Shape(SdrObject* pObject, const SfxItemPropertyMapEntry* pPropertyMap, const SvxItemPropertySet* pPropertySet);
+ SvxOle2Shape(SdrObject* pObj, OUString referer);
+ SvxOle2Shape(SdrObject* pObject, OUString referer, const SfxItemPropertyMapEntry* pPropertyMap, const SvxItemPropertySet* pPropertySet);
virtual ~SvxOle2Shape() throw() override;
bool createObject( const SvGlobalName &aClassName );
void createLink( const OUString& aLinkURL );
+
+ virtual OUString GetAndClearInitialFrameURL();
};
diff --git a/include/tools/urlobj.hxx b/include/tools/urlobj.hxx
index 522dcca35fcd..67f241376537 100644
--- a/include/tools/urlobj.hxx
+++ b/include/tools/urlobj.hxx
@@ -920,6 +920,11 @@ public:
void changeScheme(INetProtocol eTargetScheme);
+ // INetProtocol::Macro, INetProtocol::Uno, INetProtocol::Slot,
+ // vnd.sun.star.script, etc. All the types of URLs which shouldn't
+ // be accepted from an outside controlled source
+ bool IsExoticProtocol() const;
+
private:
// General Structure:
diff --git a/include/vcl/BitmapBuffer.hxx b/include/vcl/BitmapBuffer.hxx
index 3686e5fcb508..d6f1c8232c0a 100644
--- a/include/vcl/BitmapBuffer.hxx
+++ b/include/vcl/BitmapBuffer.hxx
@@ -20,6 +20,10 @@
#ifndef INCLUDED_VCL_BITMAPBUFFER_HXX
#define INCLUDED_VCL_BITMAPBUFFER_HXX
+#include <sal/config.h>
+
+#include <memory>
+
#include <vcl/dllapi.h>
#include <vcl/BitmapPalette.hxx>
#include <vcl/ColorMask.hxx>
diff --git a/include/vcl/filter/PngImageReader.hxx b/include/vcl/filter/PngImageReader.hxx
index 97b2616883b2..4fe1bb74aa4b 100644
--- a/include/vcl/filter/PngImageReader.hxx
+++ b/include/vcl/filter/PngImageReader.hxx
@@ -11,6 +11,10 @@
#ifndef INCLUDED_VCL_FILTER_PNGIMAGEREADER_HXX
#define INCLUDED_VCL_FILTER_PNGIMAGEREADER_HXX
+#include <sal/config.h>
+
+#include <memory>
+
#include <vcl/dllapi.h>
#include <com/sun/star/uno/Reference.hxx>
diff --git a/include/vcl/font/Feature.hxx b/include/vcl/font/Feature.hxx
index b56ce19ba194..4b7b0b5af843 100644
--- a/include/vcl/font/Feature.hxx
+++ b/include/vcl/font/Feature.hxx
@@ -13,6 +13,7 @@
#include <vcl/dllapi.h>
#include <rtl/ustring.hxx>
#include <vector>
+#include <cstdint>
namespace vcl
{
diff --git a/include/vcl/svtabbx.hxx b/include/vcl/svtabbx.hxx
index fda6c2a28c35..209c506a0ea2 100644
--- a/include/vcl/svtabbx.hxx
+++ b/include/vcl/svtabbx.hxx
@@ -96,6 +96,7 @@ public:
sal_uLong GetEntryPos( const SvTreeListEntry* pEntry ) const;
void SetTabJustify( sal_uInt16 nTab, SvTabJustify );
+ void SetTabEditable( sal_uInt16 nTab, bool bEditable );
};
// class SvHeaderTabListBox ---------------------------------------------------
diff --git a/include/vcl/transfer.hxx b/include/vcl/transfer.hxx
index 75af922a007c..2b4c3ecc2b97 100644
--- a/include/vcl/transfer.hxx
+++ b/include/vcl/transfer.hxx
@@ -176,8 +176,7 @@ protected:
const css::uno::Reference< css::datatransfer::clipboard::XClipboard >&
getOwnClipboard() const { return mxClipboard; }
-private:
-
+public:
// XTransferable
virtual css::uno::Any SAL_CALL getTransferData( const css::datatransfer::DataFlavor& rFlavor ) override;
virtual css::uno::Sequence< css::datatransfer::DataFlavor > SAL_CALL getTransferDataFlavors() override;
@@ -188,6 +187,7 @@ private:
const css::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ) override;
virtual sal_Bool SAL_CALL isComplex() override;
+private:
// XEventListener
virtual void SAL_CALL disposing( const css::lang::EventObject& Source ) override;
diff --git a/include/vcl/treelistbox.hxx b/include/vcl/treelistbox.hxx
index 0f47b402dc91..e61a81a40797 100644
--- a/include/vcl/treelistbox.hxx
+++ b/include/vcl/treelistbox.hxx
@@ -380,6 +380,7 @@ public:
SvViewDataItem* GetViewDataItem(SvTreeListEntry const *, SvLBoxItem const *);
const SvViewDataItem* GetViewDataItem(const SvTreeListEntry*, const SvLBoxItem*) const;
+ VclPtr<Edit> GetEditWidget() const; // for UITest
bool IsInplaceEditingEnabled() const { return bool(nImpFlags & SvTreeListBoxFlags::EDT_ENABLED); }
bool IsEditingActive() const { return bool(nImpFlags & SvTreeListBoxFlags::IN_EDT); }
void EndEditing( bool bCancel = false );
@@ -757,6 +758,7 @@ public:
OUString const & GetSavedValue() const;
void StopEditing( bool bCancel );
void Hide();
+ VclPtr<Edit> GetEditWidget() const;
};
#endif
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index 5a9ee5a92f39..cc5e6b9d03a2 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -947,8 +947,8 @@ public:
virtual void set_sort_order(bool bAscending) = 0;
// TRUE ascending, FALSE, descending, INDET, neither (off)
- virtual void set_sort_indicator(TriState eState, int nColumn = -1) = 0;
- virtual TriState get_sort_indicator(int nColumn = -1) const = 0;
+ virtual void set_sort_indicator(TriState eState, int nColumn) = 0;
+ virtual TriState get_sort_indicator(int nColumn) const = 0;
virtual int get_sort_column() const = 0;
virtual void set_sort_column(int nColumn) = 0;
@@ -964,6 +964,7 @@ public:
virtual void columns_autosize() = 0;
virtual void set_column_fixed_widths(const std::vector<int>& rWidths) = 0;
+ virtual void set_column_editables(const std::vector<bool>& rEditables) = 0;
virtual int get_column_width(int nCol) const = 0;
virtual void set_centered_column(int nCol) = 0;
virtual OUString get_column_title(int nColumn) const = 0;
diff --git a/include/vcl/window.hxx b/include/vcl/window.hxx
index d23b34e397dd..1c55dea078b5 100644
--- a/include/vcl/window.hxx
+++ b/include/vcl/window.hxx
@@ -1215,6 +1215,9 @@ public:
/// Same as MouseMove(), but coordinates are in logic unit. used for LOK
virtual void LogicMouseMove(const MouseEvent&) {};
+
+ virtual void FlashWindow() const {};
+
/** @name Accessibility
*/
///@{
diff --git a/include/xmloff/xmltoken.hxx b/include/xmloff/xmltoken.hxx
index a0e52903060a..3e2227147de5 100644
--- a/include/xmloff/xmltoken.hxx
+++ b/include/xmloff/xmltoken.hxx
@@ -706,7 +706,7 @@ namespace xmloff { namespace token {
XML_EMBEDDED_VISIBLE_AREA,
XML_EMBOSSED,
XML_EMISSIVE_COLOR,
- XML_EMPTY,
+ XML_TOKEN_EMPTY,
XML_EMPTY_LINE_REFRESH,
XML_ENABLE_NUMBERING,
XML_ENABLED,
diff --git a/instsetoo_native/inc_common/windows/msi_templates/Binary/Banner.bmp b/instsetoo_native/inc_common/windows/msi_templates/Binary/Banner.bmp
index f734f3a2eeaf..8f9ce2d0ba44 100644
--- a/instsetoo_native/inc_common/windows/msi_templates/Binary/Banner.bmp
+++ b/instsetoo_native/inc_common/windows/msi_templates/Binary/Banner.bmp
Binary files differ
diff --git a/instsetoo_native/inc_common/windows/msi_templates/Binary/Image.bmp b/instsetoo_native/inc_common/windows/msi_templates/Binary/Image.bmp
index f1aa5699dff7..a6cf9c7a816c 100644
--- a/instsetoo_native/inc_common/windows/msi_templates/Binary/Image.bmp
+++ b/instsetoo_native/inc_common/windows/msi_templates/Binary/Image.bmp
Binary files differ
diff --git a/instsetoo_native/inc_ooohelppack/windows/msi_templates/Property.idt b/instsetoo_native/inc_ooohelppack/windows/msi_templates/Property.idt
index 6f92cc4a621e..3b3a2b351b07 100644
--- a/instsetoo_native/inc_ooohelppack/windows/msi_templates/Property.idt
+++ b/instsetoo_native/inc_ooohelppack/windows/msi_templates/Property.idt
@@ -8,9 +8,9 @@ ApplicationUsers AllUsers
ALLUSERS 1
ARPCOMMENTS ARPCOMMENTSTEMPLATE
ARPCONTACT CIB software GmbH
-ARPHELPLINK https://www.cib.de/libreoffice-poweredbycib
-ARPURLINFOABOUT https://www.cib.de/libreoffice-poweredbycib
-ARPURLUPDATEINFO https://www.cib.de/libreoffice-poweredbycib
+ARPHELPLINK https://www.cib.de/office
+ARPURLINFOABOUT https://www.cib.de/office
+ARPURLUPDATEINFO https://www.cib.de/office
DefaultUIFont Tahoma8
DialogCaption Windows Installer
DiskPrompt [1]
diff --git a/instsetoo_native/util/openoffice.lst.in b/instsetoo_native/util/openoffice.lst.in
index 4c8092e8b099..5c71e5fc84b9 100644
--- a/instsetoo_native/util/openoffice.lst.in
+++ b/instsetoo_native/util/openoffice.lst.in
@@ -8,21 +8,21 @@ Globals
UREPACKAGEVERSION @LIBO_VERSION_MAJOR@.@LIBO_VERSION_MINOR@.@LIBO_VERSION_MICRO@.@LIBO_VERSION_PATCH@@LIBO_VERSION_SUFFIX@
URELAYERVERSION 1
REFERENCEOOOMAJORMINOR 4.1
- WINDOWSBASISROOTNAME LibreOffice powered by CIB
- UNIXBASISROOTNAME libreofficepoweredbycib@LIBO_VERSION_MAJOR@.@LIBO_VERSION_MINOR@
+ WINDOWSBASISROOTNAME CIB Office
+ UNIXBASISROOTNAME ciboffice@LIBO_VERSION_MAJOR@.@LIBO_VERSION_MINOR@
HIDELICENSEDIALOG 1
PACKAGEPREFIX
- BASISPACKAGEPREFIX libreofficepoweredbycibbasis
- UREPACKAGEPREFIX libreofficepoweredbycib
+ BASISPACKAGEPREFIX cibofficebasis
+ UREPACKAGEPREFIX ciboffice
SOLSUREPACKAGEPREFIX libreoffice
- PROGRESSBARCOLOR 255,255,255
+ PROGRESSBARCOLOR 85,90,95
PROGRESSSIZE 460,6
PROGRESSSIZEHIGH 617,12
PROGRESSPOSITION 26,235
PROGRESSPOSITIONHIGH 46,212
- PROGRESSFRAMECOLOR 255,255,255
+ PROGRESSFRAMECOLOR 85,90,95
PROGRESSTEXTBASELINE 230
- PROGRESSTEXTCOLOR 255,255,255
+ PROGRESSTEXTCOLOR 85,90,95
NATIVEPROGRESS false
REGISTRYLAYERNAME Layers
SERVICEPACK 1
@@ -40,13 +40,13 @@ Globals
}
}
-LibreOfficePoweredByCIB
+CIBOffice
{
Settings
{
variables
{
- PRODUCTNAME LibreOffice powered by CIB
+ PRODUCTNAME CIB Office
PRODUCTVERSION @LIBO_VERSION_MAJOR@.@LIBO_VERSION_MINOR@
PRODUCTEXTENSION -@LIBO_VERSION_PATCH@
POSTVERSIONEXTENSION
@@ -70,7 +70,7 @@ LibreOfficePoweredByCIB
CHANGETARGETDIR 1
PATCHCODEFILE ooo_patchcodes.txt
STARTCENTER_ADDFEATURE_URL http://extensions.libreoffice.org/
- STARTCENTER_INFO_URL https://www.cib.de/libreoffice-poweredbycib
+ STARTCENTER_INFO_URL https://www.cib.de/office
STARTCENTER_TEMPLREP_URL http://templates.libreoffice.org/
DICT_REPO_URL http://extensions.libreoffice.org/dictionaries/
STARTCENTER_HIDE_EXTERNAL_LINKS 0
@@ -78,24 +78,24 @@ LibreOfficePoweredByCIB
active 1
compression 5
script setup_osl
- downloadname LibreOfficePoweredByCIB_{productversion}_{os}_install_{languages}
- langpackdownloadname LibreOfficePoweredByCIB_{productversion}_languagepack_{os}_install_{languages}
- helppackdownloadname LibreOfficePoweredByCIB_{productversion}_helppack_{os}_install_{languages}
+ downloadname CIBOffice_{productversion}_{os}_install_{languages}
+ langpackdownloadname CIBOffice_{productversion}_languagepack_{os}_install_{languages}
+ helppackdownloadname CIBOffice_{productversion}_helppack_{os}_install_{languages}
include {installscriptdir},{customtargetpath}/readlicense_oo/readme,{customtargetpath}/sysui/{pkgtype},{customtargetpath}/setup_native,{filelistpath}/PackageSet,{filelistpath}/GeneratedPackage,{filelistpath}/Package,{filelistpath}/ExtensionPackage,{filelistpath}/CustomTarget/helpcontent2/help3xsl/filelists,{extensionsdir},{licensepath},{packinfopath}
}
}
-LibreOfficePoweredByCIBDev
+CIBOfficeDev
{
Settings
{
variables
{
- PRODUCTNAME LibreOffice Powered By CIB Dev
+ PRODUCTNAME CIB Office Dev
PRODUCTVERSION @LIBO_VERSION_MAJOR@.@LIBO_VERSION_MINOR@
PRODUCTEXTENSION .@LIBO_VERSION_MICRO@.@LIBO_VERSION_PATCH@@LIBO_VERSION_SUFFIX@
- WINDOWSBASISROOTNAME LibreOfficeDev @LIBO_VERSION_MAJOR@
- UNIXBASISROOTNAME libreofficedev@LIBO_VERSION_MAJOR@.@LIBO_VERSION_MINOR@
+ WINDOWSBASISROOTNAME CIBOfficeDev @LIBO_VERSION_MAJOR@
+ UNIXBASISROOTNAME cibofficedev@LIBO_VERSION_MAJOR@.@LIBO_VERSION_MINOR@
POSTVERSIONEXTENSION
BUNDLEIDENTIFIER @MACOSX_BUNDLE_IDENTIFIER@
BRANDPACKAGEVERSION @LIBO_VERSION_MAJOR@.@LIBO_VERSION_MINOR@
@@ -104,9 +104,9 @@ LibreOfficePoweredByCIBDev
ABOUTBOXPRODUCTVERSIONSUFFIX @LIBO_VERSION_SUFFIX_SUFFIX@
BASEPRODUCTVERSION @LIBO_VERSION_MAJOR@.@LIBO_VERSION_MINOR@
DEVELOPMENTPRODUCT 1
- BASISPACKAGEPREFIX libreofficepoweredbycibdevbasis
- UREPACKAGEPREFIX libreofficepoweredbycibdev
- SOLSUREPACKAGEPREFIX libreofficepoweredbycibdev
+ BASISPACKAGEPREFIX cibofficedevbasis
+ UREPACKAGEPREFIX cibofficedev
+ SOLSUREPACKAGEPREFIX cibofficedev
REGISTRYLAYERNAME LayerDev
UPDATEURL https://update.libreoffice.org/check.php
ADD_INCLUDE_FILES cli_ure/version/version.txt,unoil/climaker/version.txt
@@ -123,28 +123,28 @@ LibreOfficePoweredByCIBDev
CODEFILENAME codes_ooodev.txt
LOCALUSERDIR $ORIGIN/..
STARTCENTER_ADDFEATURE_URL https://extensions.libreoffice.org/
- STARTCENTER_INFO_URL https://www.cib.de/libreoffice-poweredbycib
+ STARTCENTER_INFO_URL https://www.cib.de/office
STARTCENTER_TEMPLREP_URL https://templates.libreoffice.org/
DICT_REPO_URL https://extensions.libreoffice.org/dictionaries/
}
active 1
compression 5
script setup_osl
- downloadname LibreOfficePoweredByCIBDev_{productversion}_{os}_install_{languages}
- langpackdownloadname LibreOfficePoweredByCIBDev_{productversion}_languagepack_{os}_install_{languages}
- helppackdownloadname LibreOfficePoweredByCIBDev_{productversion}_helppack_{os}_install_{languages}
+ downloadname CIBOfficeDev_{productversion}_{os}_install_{languages}
+ langpackdownloadname CIBOfficeDev_{productversion}_languagepack_{os}_install_{languages}
+ helppackdownloadname CIBOfficeDev_{productversion}_helppack_{os}_install_{languages}
include {installscriptdir},{customtargetpath}/readlicense_oo/readme,{customtargetpath}/sysui/{pkgtype},{customtargetpath}/setup_native,{filelistpath}/PackageSet,{filelistpath}/GeneratedPackage,{filelistpath}/Package,{filelistpath}/ExtensionPackage,{filelistpath}/CustomTarget/helpcontent2/help3xsl/filelists,{extensionsdir},{licensepath},{packinfopath}
}
}
-LibreOfficePoweredByCIB_SDK
+CIBOffice_SDK
{
Settings
{
- downloadname LibreOfficePoweredByCIB-SDK_{packageversion}_{os}_install_{languages}
+ downloadname CIBOffice-SDK_{packageversion}_{os}_install_{languages}
variables
{
- PRODUCTNAME LibreOffice Powered By CIB
+ PRODUCTNAME CIB Office
PRODUCTVERSION @LIBO_VERSION_MAJOR@.@LIBO_VERSION_MINOR@
PRODUCTEXTENSION .@LIBO_VERSION_MICRO@.@LIBO_VERSION_PATCH@@LIBO_VERSION_SUFFIX@
POSTVERSIONEXTENSION SDK
@@ -164,7 +164,7 @@ LibreOfficePoweredByCIB_SDK
CHANGETARGETDIR 1
DONTUSESTARTMENUFOLDER 1
STARTCENTER_ADDFEATURE_URL https://extensions.libreoffice.org/
- STARTCENTER_INFO_URL https://www.cib.de/libreoffice-poweredbycib
+ STARTCENTER_INFO_URL https://www.cib.de/office
STARTCENTER_TEMPLREP_URL https://templates.libreoffice.org/
DICT_REPO_URL https://extensions.libreoffice.org/dictionaries/
}
@@ -175,26 +175,26 @@ LibreOfficePoweredByCIB_SDK
}
}
-LibreOfficePoweredByCIBDev_SDK
+CIBOfficeDev_SDK
{
Settings
{
- downloadname LibreOfficePoweredByCIBDev-SDK_{packageversion}_{os}_install_{languages}
+ downloadname CIBOfficeDev-SDK_{packageversion}_{os}_install_{languages}
variables
{
- PRODUCTNAME LibreOfficePoweredByCIBDev
+ PRODUCTNAME CIBOfficeDev
PRODUCTVERSION @LIBO_VERSION_MAJOR@.@LIBO_VERSION_MINOR@
PRODUCTEXTENSION .@LIBO_VERSION_MICRO@.@LIBO_VERSION_PATCH@@LIBO_VERSION_SUFFIX@
- WINDOWSBASISROOTNAME LibreOfficeDev @LIBO_VERSION_MAJOR@
- UNIXBASISROOTNAME libreofficedev@LIBO_VERSION_MAJOR@.@LIBO_VERSION_MINOR@
+ WINDOWSBASISROOTNAME CIBOfficeDev @LIBO_VERSION_MAJOR@
+ UNIXBASISROOTNAME cibofficedev@LIBO_VERSION_MAJOR@.@LIBO_VERSION_MINOR@
POSTVERSIONEXTENSION SDK
BUNDLEIDENTIFIER @MACOSX_BUNDLE_IDENTIFIER@.SDK
BRANDPACKAGEVERSION @LIBO_VERSION_MAJOR@.@LIBO_VERSION_MINOR@
PACKAGEVERSION @LIBO_VERSION_MAJOR@.@LIBO_VERSION_MINOR@.@LIBO_VERSION_MICRO@.@LIBO_VERSION_PATCH@@LIBO_VERSION_SUFFIX@
PACKAGEREVISION {buildid}
BASISPACKAGEPREFIX lodevbasis
- UREPACKAGEPREFIX libreofficedev
- SOLSUREPACKAGEPREFIX libreofficedev
+ UREPACKAGEPREFIX cibofficedev
+ SOLSUREPACKAGEPREFIX cibofficedev
REGISTRYLAYERNAME LayerDev
DEVELOPMENTPRODUCT 1
PACK_INSTALLED 1
@@ -209,7 +209,7 @@ LibreOfficePoweredByCIBDev_SDK
CHANGETARGETDIR 1
DONTUSESTARTMENUFOLDER 1
STARTCENTER_ADDFEATURE_URL https://extensions.libreoffice.org/
- STARTCENTER_INFO_URL https://www.cib.de/libreoffice-poweredbycib
+ STARTCENTER_INFO_URL https://www.cib.de/office
STARTCENTER_TEMPLREP_URL https://templates.libreoffice.org/
DICT_REPO_URL https://extensions.libreoffice.org/dictionaries/
}
diff --git a/jvmfwk/source/framework.cxx b/jvmfwk/source/framework.cxx
index 07916b867356..6c40ca1de3a8 100644
--- a/jvmfwk/source/framework.cxx
+++ b/jvmfwk/source/framework.cxx
@@ -23,6 +23,7 @@
#include <cassert>
#include <memory>
+#include <rtl/bootstrap.hxx>
#include <rtl/ref.hxx>
#include <rtl/ustring.hxx>
#include <osl/diagnose.h>
@@ -123,6 +124,40 @@ javaFrameworkError jfw_findAllJREs(std::vector<std::unique_ptr<JavaInfo>> *pparI
}
}
+std::vector<OUString> jfw_convertUserPathList(OUString const& sUserPath)
+{
+ std::vector<OUString> result;
+ sal_Int32 nIdx = 0;
+ do
+ {
+ sal_Int32 nextColon = sUserPath.indexOf(SAL_PATHSEPARATOR, nIdx);
+ OUString sToken(sUserPath.copy(nIdx, nextColon > 0 ? nextColon - nIdx
+ : sUserPath.getLength() - nIdx));
+
+ // Check if we are in bootstrap variable mode (class path starts with '$').
+ // Then the class path must be in URL format.
+ if (sToken.startsWith("$"))
+ {
+ // Detect open bootstrap variables - they might contain colons - we need to skip those.
+ sal_Int32 nBootstrapVarStart = sToken.indexOf("${");
+ if (nBootstrapVarStart >= 0)
+ {
+ sal_Int32 nBootstrapVarEnd = sToken.indexOf("}", nBootstrapVarStart);
+ if (nBootstrapVarEnd == -1)
+ {
+ // Current colon is part of bootstrap variable - skip it!
+ nextColon = sUserPath.indexOf(SAL_PATHSEPARATOR, nextColon + 1);
+ sToken = sUserPath.copy(nIdx, nextColon > 0 ? nextColon - nIdx
+ : sUserPath.getLength() - nIdx);
+ }
+ }
+ }
+ result.emplace_back(sToken);
+ nIdx = nextColon + 1;
+ } while (nIdx > 0);
+ return result;
+}
+
javaFrameworkError jfw_startVM(
JavaInfo const * pInfo, std::vector<OUString> const & arOptions,
JavaVM ** ppVM, JNIEnv ** ppEnv)
@@ -202,7 +237,23 @@ javaFrameworkError jfw_startVM(
return JFW_E_NEED_RESTART;
vmParams = settings.getVmParametersUtf8();
- sUserClassPath = jfw::makeClassPathOption(settings.getUserClassPath());
+ // Expand user classpath (might contain bootstrap vars)
+ OUString sUserPath(settings.getUserClassPath());
+ std::vector paths = jfw_convertUserPathList(sUserPath);
+ OUString sUserPathExpanded;
+ for (auto& path : paths)
+ {
+ if (!sUserPathExpanded.isEmpty())
+ sUserPathExpanded += OUStringChar(SAL_PATHSEPARATOR);
+ if (path.startsWith("$"))
+ {
+ OUString sURL = path;
+ rtl::Bootstrap::expandMacros(sURL);
+ osl::FileBase::getSystemPathFromFileURL(sURL, path);
+ }
+ sUserPathExpanded += path;
+ }
+ sUserClassPath = jfw::makeClassPathOption(sUserPathExpanded);
} // end mode FWK_MODE_OFFICE
else if (mode == jfw::JFW_MODE_DIRECT)
{
diff --git a/librelogo/source/LibreLogo/LibreLogo.py b/librelogo/source/LibreLogo/LibreLogo.py
index 2fa16ed81822..57ce696d288e 100644
--- a/librelogo/source/LibreLogo/LibreLogo.py
+++ b/librelogo/source/LibreLogo/LibreLogo.py
@@ -401,7 +401,7 @@ def __translate__(arg = None):
text = selection.getString()
# remove comments and strings
text = re.sub(r"[ ]*;[^\n]*", "", re.sub(r"['„“‘«»「][^\n'”“‘’«»」]*['”“‘’«»」]", "", re.sub(r"^[ \t]*[;#][^\n]*", "", text)))
- text = " ".join(set(re.findall("(?u)\w+", text)) - set(re.findall("(?u)\w*\d+\w*", text))).lower() # only words
+ text = " ".join(set(re.findall(r"(?u)\w+", text)) - set(re.findall(r"(?u)\w*\d+\w*", text))).lower() # only words
ctx = uno.getComponentContext()
guess = ctx.ServiceManager.createInstanceWithContext("com.sun.star.linguistic2.LanguageGuessing", ctx)
guess.disableLanguages(guess.getEnabledLanguages())
@@ -424,7 +424,7 @@ def __translate__(arg = None):
text = re.sub(r"^(([ \t]*[;#][^\n]*))", __encodecomment__, text)
text = re.sub("(?u)([%s])((?:[^\n%s]|\\\\[%s])*)(?<!\\\\)[%s]" % (lq, rq, rq, rq), __encodestring__, selection.getString())
- text = re.sub('(?u)(?<![0-9])(")(~?\w*)', __encodestring__, text)
+ text = re.sub(r'(?u)(?<![0-9])(")(~?\w*)', __encodestring__, text)
text = re.sub(r";(([^\n]*))", __encodecomment__, text)
# translate the program to the language of the document FIXME space/tab
@@ -433,12 +433,12 @@ def __translate__(arg = None):
in2 = __l12n__(_.lng)['IN'].split("|")[0].upper()
if in1[0] == '-' and in2[0] != '-': # "for x y-in" -> "for x in y"
exception += ['IN']
- text = re.sub(r"(?ui)\b((?:%s) +:?\w+) +([^\n]+)(?:%s) +(?=[[] |[[]\n)" % (lang['FOR'], in1), "\\1 %s \\2 " % in2, text)
- text = re.sub(r"(?ui)(:?\b\w+|[[][^[\n]*])\b(?:%s)\b" % in1, "%s \\1" % in2, text)
+ text = re.sub(r"(?ui)\b((?:%s) +:?\w+) +([^\n]+)(?:%s) +(?=[\[] |[\[]\n)" % (lang['FOR'], in1), "\\1 %s \\2 " % in2, text)
+ text = re.sub(r"(?ui)(:?\b\w+|[\[][^[\n]*])\b(?:%s)\b" % in1, "%s \\1" % in2, text)
elif in1[0] != '-' and in2[0] == '-': # "for x in y" -> "for x y-in"
exception += ['IN']
- text = re.sub(r"(?ui)(?<=\n)((?:%s)\b +:?\w+) +(?:%s) +([^\n]+?) +(?=[[] |[[]\n)" % (lang['FOR'], in1), "\\1 \\2%s " % in2, text)
- text = re.sub(r"(?ui)(?<!:)\b(?:%s) +(:?\b\w+|[[][^[\n]*])\b" % in1, "\\1%s" % in2, text)
+ text = re.sub(r"(?ui)(?<=\n)((?:%s)\b +:?\w+) +(?:%s) +([^\n]+?) +(?=[\[] |[\[]\n)" % (lang['FOR'], in1), "\\1 \\2%s " % in2, text)
+ text = re.sub(r"(?ui)(?<!:)\b(?:%s) +(:?\b\w+|[\[][^[\n]*])\b" % in1, "\\1%s" % in2, text)
for i in set(lang) - set(exception):
text = re.sub(r'(?ui)(?<!:)\b(%s)\b' % lang[i], __l12n__(_.lng)[i].split("|")[0].upper(), text)
text = re.sub(r"(?<=\d)[%s](?=\d)" % lang['DECIMAL'], __l12n__(_.lng)['DECIMAL'], text)
@@ -554,9 +554,9 @@ class LogoProgram(threading.Thread):
MessageBox(parent, __l12n__(_.lng)['ERR_ARGUMENTS'] % (__locname__('REPEAT'), 1, 0), caption, "errorbox")
else:
MessageBox(parent, __l12n__(_.lng)['ERR_NAME'] % \
- to_unicode(re.search("(?<=name ')[\w_]*(?=')", message).group(0)), caption, "errorbox")
+ to_unicode(re.search(r"(?<=name ')[\w_]*(?=')", message).group(0)), caption, "errorbox")
elif "TypeError" in message and "argument" in message and "given" in message:
- r = re.search("([\w_]*)[(][)][^\n]* (\w+) arguments? [(](\d+)", message) # XXX later: handle 'no arguments' + plural
+ r = re.search(r"([\w_]*)[(][)][^\n]* (\w+) arguments? [(](\d+)", message) # XXX later: handle 'no arguments' + plural
MessageBox(parent, __l12n__(_.lng)['ERR_ARGUMENTS'] % (__locname__(r.group(1)), r.group(2), r.group(3)), caption, "errorbox")
else:
origline = __compiled__.split("\n")[line-1]
@@ -1541,7 +1541,7 @@ def create_svg_animation(m):
def create_valid_svg_file(filename):
with open(filename, "r") as f:
s = f.read()
- s = re.sub('(?s)(<g\\sid="[^"]*)\(([^"]*)\)', '\\1\\2', s) # bad "(", ")" in xml:id
+ s = re.sub(r'(?s)(<g\sid="[^"]*)\(([^"]*)\)', '\\1\\2', s) # bad "(", ")" in xml:id
s = re.sub('(?s)<g\\sooo:[^>]*>', '', s) # remove non standard attributes
s = re.sub('(?s)<defs class="EmbeddedBulletChars">.*(?=<defs class="TextEmbeddedBitmaps")', '', s) # remove unused parts
s = re.sub('(?s)(<path stroke-width="[^"]*"[^<]*)stroke-width="[^"]*"', '\\1', s) # double stroke-width
@@ -1676,7 +1676,7 @@ def __loadlang__(lang, a):
[r"(?<!:)\b(?:%s)\b" % a['OUTPUT'], "\nreturn"],
[r"\n(if|while|return) [^\n]*", lambda r: re.sub("(?<![=!<>])=(?!=)", "==", r.group(0))], # = -> ==, XXX x = y = 1?
[r"(?<=\n)(for\b :?\w+) ([^\n]+)(?<=\w|]|}|\))(?=-|:)(?:%s)\b" % a['IN'], "\\1 in \\2"], # "for x y-in" -> "for x in y"
- [r"(:?\b\w+|[[][^[\n]*])\b(?:%s)\b" % a['IN'], "in \\1"], # "x y-in" -> "x in y"
+ [r"(:?\b\w+|[\[][^[\n]*])\b(?:%s)\b" % a['IN'], "in \\1"], # "x y-in" -> "x in y"
[r"(?<!:)\b(?:%s)\b" % a['IN'], "in"],
[r"(?<!:)\b(?:%s)\b[ \t]+(:?\w+)\b(?! in\b)" % a['FOR'], "\nfor \\1 in"],
[r"(?<=\n)__repeat__ :\n", "while True:\n"], # infinite loop
@@ -1755,7 +1755,7 @@ def __loadlang__(lang, a):
[r"(?<!:)\b(?:%s)\b ?\(" % a['RESUB'], "re.sub('(?u)'+"],
[r"(?<!:)\b(?:%s)\b ?\(" % a['REFINDALL'], "re.findall('(?u)'+"],
[r"(?<!:)\b(?:%s)\b" % a['ANY'], "u'any'"],
- [r"(?<!:)\b(?:%s) (\w+|[[][^\]]*])\b" % a['INPUT'], " Input(\\1)"],
+ [r"(?<!:)\b(?:%s) (\w+|[\[][^\]]*])\b" % a['INPUT'], " Input(\\1)"],
[r"(?<!:)\b(?:%s)\b" % a['PRINT'], "\nPrint"],
[r"(?<!:)\b(?:%s)\b" % a['TURNLEFT'], "\n)turnleft("],
[r"\b([0-9]+([,.][0-9]+)?)(%s)\b" % a['PT'], "\\1"],
@@ -1904,7 +1904,7 @@ def __compil__(s):
rq = '\'' + __l12n__(_.lng)['RIGHTSTRING'].replace("|", "")
__strings__ = []
s = re.sub("(?u)([%s])((?:[^\n%s]|\\\\[%s])*)(?<!\\\\)[%s]" % (lq, rq, rq, rq), __encodestring__, s)
- s = re.sub('(?u)(?<![0-9])(")(~?\w*)', __encodestring__, s)
+ s = re.sub(r'(?u)(?<![0-9])(")(~?\w*)', __encodestring__, s)
# remove extra spaces
s = chsp.sub(" ", s)
@@ -1918,7 +1918,7 @@ def __compil__(s):
# replace procedure names
s = re.sub(r"(?i)^[ ]*(%s)[ ]+" % __l12n__(_.lng)['TO'], "__def__ ", s)
s = re.sub(r"(?i)\n[ ]*(%s)[ ]+" % __l12n__(_.lng)['TO'], "\n__def__ ", s)
- subnames = re.findall(u"(?iu)(?<=__def__ )\w+", s)
+ subnames = re.findall(r"(?iu)(?<=__def__ )\w+", s)
globs = ""
functions = ["range", "__int__", "__float__", "Random", "Input", "__string__", "len", "round", "abs", "sin", "cos", "sqrt", "log10", "set", "list", "tuple", "re.sub", "re.search", "re.findall", "sorted", "min", "max"]
defaultfunc = ["Print"] # TODO handle all default procedures
@@ -1930,7 +1930,7 @@ def __compil__(s):
firstend = ends.split("|")[0]
s = re.sub(r"(?<!:)\b(?:%s)\b" % ends, firstend, s)
__l12n__(_.lng)["END"] = firstend
- functions += [ re.findall("(?u)\w+",i[0])[0] for i in re.findall(r"""(?iu)(?<=__def__ )([^\n]*)\n # beginning of a procedure
+ functions += [ re.findall(r"(?u)\w+",i[0])[0] for i in re.findall(r"""(?iu)(?<=__def__ )([^\n]*)\n # beginning of a procedure
(?:[^\n]*(?<!\b(%(END)s))\n)* # 0 or more lines (not END)
[^\n]*\b(?:%(OUTPUT)s)\b[^\n]*\n # line with OUTPUT (functions = procedures with OUTPUT)
(?:[^\n]*(?<!\b(?:%(END)s))\n)* # 0 or more lines (not END)
@@ -1939,7 +1939,7 @@ def __compil__(s):
# add line breaks before procedure calls
procedures = set(subnames) - set(functions)
if len(procedures) > 0:
- s = re.sub(r"(?<!__def__)(?<![-+=*/])(?<!%s)(?:^|[ \t]+)(" % ")(?<!".join(functions) + "|".join(procedures) + ")(?!\w)", r"\n\1", s)
+ s = re.sub(r"(?<!__def__)(?<![-+=*/])(?<!%s)(?:^|[ \t]+)(" % ")(?<!".join(functions) + "|".join(procedures) + r")(?!\w)", r"\n\1", s)
# substitute LibreLogo functions and specifiers with their Python equivalents
for i in __comp__[_.lng]:
@@ -1947,12 +1947,12 @@ def __compil__(s):
indent = 0 # Python indentation level
result = ""
- func = re.compile("(?iu)(def (\w+))(\(.*\):)")
+ func = re.compile(r"(?iu)(def (\w+))(\(.*\):)")
# compile to Python
subroutines = re.compile(r"(?iu)(?<!def )(?<![_\w])\b(%s)\b(?![\w(])" % "|".join(subnames + functions + defaultfunc))
operators = re.compile(r"(?iu)(%s)" % "(?:[ ]*([+*/<>]|//|==|<=|>=|<>|!=)[ ]*|[ ]*-[ ]+|(?<! )-[ ]*|[ ]*[*][*][ ]*)") # operators, eg. " - ", "-", "- "
- atoms = re.compile(r"(?iu)(%s)" % "[0-9]+([.,][0-9]+)?|:?\w+([.]\w)?")
+ atoms = re.compile(r"(?iu)(%s)" % r"[0-9]+([.,][0-9]+)?|:?\w+([.]\w)?")
# store argument numbers of all subroutines in dictionary "names"
names = {key: 1 for key in functions + defaultfunc}
diff --git a/offapi/com/sun/star/view/PrintOptions.idl b/offapi/com/sun/star/view/PrintOptions.idl
index 4ed8b23baaf0..4bef0fec5288 100644
--- a/offapi/com/sun/star/view/PrintOptions.idl
+++ b/offapi/com/sun/star/view/PrintOptions.idl
@@ -80,6 +80,14 @@ published service PrintOptions
/** advises the printer to create a single print job for each copy.
*/
[optional, property] boolean SinglePrintJobs;
+
+ /** The job name which is sent to the printer (can be seen in the Printer job queue).
+ *
+ * If omitted, the document title will be used as default.
+ *
+ * @since LibreOffice 7.5
+ */
+ [optional, property] boolean JobName;
};
diff --git a/officecfg/files.mk b/officecfg/files.mk
index 3d3a5079f622..9a4b688391a0 100644
--- a/officecfg/files.mk
+++ b/officecfg/files.mk
@@ -77,6 +77,7 @@ officecfg_XCSFILES := \
Office/UI/GenericCommands \
Office/UI/GlobalSettings \
Office/UI/ImpressWindowState \
+ Office/UI/Infobar \
Office/UI/MathCommands \
Office/UI/MathWindowState \
Office/UI/ReportCommands \
diff --git a/officecfg/registry/data/org/openoffice/Setup.xcu b/officecfg/registry/data/org/openoffice/Setup.xcu
index 0472de91f20e..2a958ddbcda9 100644
--- a/officecfg/registry/data/org/openoffice/Setup.xcu
+++ b/officecfg/registry/data/org/openoffice/Setup.xcu
@@ -781,7 +781,7 @@
<value>10</value>
</prop>
<prop oor:name="VersionIdentifiers">
- <value oor:separator=",">Libreoffice 3=libreoffice/3,Openoffice.org 3=openoffice.org/3,OpenOffice.org 2=openoffice.org2,StarOffice 8=staroffice8,StarSuite 8=starsuite8</value>
+ <value oor:separator=",">LibreOffice=libreoffice/4,LibreOffice powered by CIB=libreofficepoweredbycib/4,Libreoffice 3=libreoffice/3,Openoffice.org 3=openoffice.org/3,OpenOffice.org 2=openoffice.org2,StarOffice 8=staroffice8,StarSuite 8=starsuite8</value>
</prop>
<node oor:name="MigrationSteps">
<node oor:name="Datasources" oor:op="replace">
@@ -881,9 +881,13 @@
<it>/org.openoffice.Office.Common/Misc/DisableUICustomization</it>
<it>/org.openoffice.Office.Common/Misc/ExperimentalMode</it>
<it>/org.openoffice.Office.Common/Misc/FormControlPilotsEnabled</it>
+ <it>/org.openoffice.Office.Common/Misc/LastTipOfTheDayID</it>
+ <it>/org.openoffice.Office.Common/Misc/LastTipOfTheDayShown</it>
<it>/org.openoffice.Office.Common/Misc/MacroRecorderMode</it>
+ <it>/org.openoffice.Office.Common/Misc/PersonaSettings</it>
<it>/org.openoffice.Office.Common/Misc/PluginsEnabled</it>
<it>/org.openoffice.Office.Common/Misc/ShowLinkWarningDialog</it>
+ <it>/org.openoffice.Office.Common/Misc/ShowTipOfTheDay</it>
<it>/org.openoffice.Office.Common/Misc/SymbolSet</it>
<it>/org.openoffice.Office.Common/Misc/SymbolStyle</it>
<it>/org.openoffice.Office.Common/Misc/ToolboxStyle</it>
@@ -962,7 +966,10 @@
</node>
<node oor:name="Setup" oor:op="replace">
<prop oor:name="IncludedNodes">
- <value>/org.openoffice.Setup/Office/Factories</value>
+ <value>
+ <it>/org.openoffice.Setup/Office/Factories</it>
+ <it>/org.openoffice.Setup/L10N</it>
+ </value>
</prop>
</node>
<node oor:name="UI" oor:op="replace">
diff --git a/officecfg/registry/schema/org/openoffice/Office/Common.xcs b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
index f04172b3ef6d..18485882dd32 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Common.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
@@ -2503,6 +2503,14 @@
</info>
<value>true</value>
</prop>
+ <prop oor:name="ViewPositionForAnyUser" oor:type="xs:boolean" oor:nillable="false">
+ <info>
+ <desc>Determines if the view position of the document is loaded with
+ a document even if it was saved by a different user.
+ </desc>
+ </info>
+ <value>false</value>
+ </prop>
<prop oor:name="ShowOfficeUpdateDialog" oor:type="xs:boolean" oor:nillable="false">
<info>
<desc>Specifies whether the office update dialog should be shown in
@@ -5481,6 +5489,15 @@
</info>
<value>true</value>
</prop>
+ <prop oor:name="TempFileNextToLocalFile" oor:type="xs:boolean" oor:nillable="false">
+ <info>
+ <desc>Determines if temp files are placed next to the local file when a file is saved.
+ If this is false, the temp file will be placed in the default temp directory.
+ Placing the temp file next to the local file will increase performance, but it might lead
+ to permission issues such as described in this bug: https://bugs.documentfoundation.org/show_bug.cgi?id=158975</desc>
+ </info>
+ <value>true</value>
+ </prop>
<prop oor:name="UseDocumentOOoLockFile" oor:type="xs:boolean" oor:nillable="false">
<info>
<desc>Allows to specify whether the OOo document file locking
@@ -5555,6 +5572,20 @@
</info>
<value>true</value>
</prop>
+ <prop oor:name="CrashReportPreSendNotification" oor:type="xs:string" oor:nillable="false"
+ oor:localized="true">
+ <info>
+ <desc>An override for the text presented in the crash report dialog before sending the
+ report. Supports %PRODUCTNAME replacements.</desc>
+ </info>
+ </prop>
+ <prop oor:name="CrashReportPostSendNotification" oor:type="xs:string" oor:nillable="false"
+ oor:localized="true">
+ <info>
+ <desc>An override for the text presented in the crash report dialog after successfully
+ sending the report. Supports %CRASHID and %CrashDumpUrl% replacements.</desc>
+ </info>
+ </prop>
<prop oor:name="ShowTipOfTheDay" oor:type="xs:boolean" oor:nillable="false">
<!-- UIHints: Tools - Options - General -->
<info>
@@ -5796,6 +5827,12 @@
<desc>Number of saved searches in the Find and Replace dialog.</desc>
</info>
</prop>
+ <prop oor:name="OfferSafeMode" oor:type="xs:boolean" oor:nillable="false">
+ <info>
+ <desc>Offer Safe Mode to the user.</desc>
+ </info>
+ <value>true</value>
+ </prop>
</group>
<group oor:name="Forms">
<info>
diff --git a/officecfg/registry/schema/org/openoffice/Office/UI/Infobar.xcs b/officecfg/registry/schema/org/openoffice/Office/UI/Infobar.xcs
new file mode 100644
index 000000000000..af0434046770
--- /dev/null
+++ b/officecfg/registry/schema/org/openoffice/Office/UI/Infobar.xcs
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * 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/.
+ *
+-->
+<!DOCTYPE oor:component-schema SYSTEM "../../../../../component-schema.dtd">
+<oor:component-schema xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" oor:name="Infobar" oor:package="org.openoffice.Office.UI" xml:lang="en-US">
+ <info>
+ <desc>Infobar configuration.</desc>
+ </info>
+ <template></template>
+ <component>
+ <group oor:name="Enabled">
+ <info>
+ <desc>Which Infobars are enabled.</desc>
+ </info>
+ <prop oor:name="Readonly" oor:type="xs:boolean" oor:nillable="false">
+ <info>
+ <desc>Whether the Infobar shown in read-only docs is enabled</desc>
+ </info>
+ <value>true</value>
+ </prop>
+ <prop oor:name="Signature" oor:type="xs:boolean" oor:nillable="false">
+ <info>
+ <desc>Whether the Infobar showing the Digital Signature state is enabled</desc>
+ </info>
+ <value>true</value>
+ </prop>
+ <prop oor:name="Donate" oor:type="xs:boolean" oor:nillable="false">
+ <info>
+ <desc>Whether the Infobar showing the call for donations is enabled</desc>
+ </info>
+ <value>true</value>
+ </prop>
+ <prop oor:name="GetInvolved" oor:type="xs:boolean" oor:nillable="false">
+ <info>
+ <desc>Whether the Infobar showing the call to 'Get Involved' is enabled</desc>
+ </info>
+ <value>true</value>
+ </prop>
+ <prop oor:name="HyphenationMissing" oor:type="xs:boolean" oor:nillable="false">
+ <info>
+ <desc>Whether an Infobar is shown when Hyphenation Info is missing for a document</desc>
+ </info>
+ <value>true</value>
+ </prop>
+ </group>
+ </component>
+</oor:component-schema>
diff --git a/officecfg/registry/schema/org/openoffice/Office/Writer.xcs b/officecfg/registry/schema/org/openoffice/Office/Writer.xcs
index 470d9f81ba8e..88ac40f5057d 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Writer.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Writer.xcs
@@ -1071,6 +1071,39 @@
</info>
<value>true</value>
</prop>
+ <prop oor:name="ShowWarningHiddenSection" oor:type="xs:boolean" oor:nillable="false">
+ <!-- UIHints: Not accessible via user interface -->
+ <info>
+ <desc>Enables the writer to prevent the display of a warning dialog for hidden text (sections, etc) deletion.</desc>
+ <label>Show warning dialog for hidden text deletion</label>
+ </info>
+ <value>true</value>
+ </prop>
+ <prop oor:name="DefaultAnchor" oor:type="xs:int" oor:nillable="false">
+ <!-- UIHints: Tools - Options - Writer - View - Default Anchor -->
+ <info>
+ <desc>Specifies the anchor of newly inserted images.</desc>
+ <label>Default Anchor</label>
+ </info>
+ <constraints>
+ <enumeration oor:value="0">
+ <info>
+ <desc>FLY_TO_PARA</desc>
+ </info>
+ </enumeration>
+ <enumeration oor:value="1">
+ <info>
+ <desc>FLY_TO_CHAR</desc>
+ </info>
+ </enumeration>
+ <enumeration oor:value="2">
+ <info>
+ <desc>FLY_AS_CHAR</desc>
+ </info>
+ </enumeration>
+ </constraints>
+ <value>1</value>
+ </prop>
</group>
<group oor:name="NonprintingCharacter">
<info>
diff --git a/oox/qa/unit/CryptoTest.cxx b/oox/qa/unit/CryptoTest.cxx
index 47d567fab34b..38aad4dff4b8 100644
--- a/oox/qa/unit/CryptoTest.cxx
+++ b/oox/qa/unit/CryptoTest.cxx
@@ -83,6 +83,15 @@ void CryptoTest::testCryptoHash()
}
{
+ oox::core::CryptoHash aCryptoHash(aKey, oox::core::CryptoHashType::SHA384);
+ aCryptoHash.update(aContent);
+ std::vector<sal_uInt8> aHash = aCryptoHash.finalize();
+ CPPUNIT_ASSERT_EQUAL(std::string("d7f4727e2c0b39ae0f1e40cc96f60242d5b7801841cea6fc592c5d3e1"
+ "ae50700582a96cf35e1e554995fe4e03381c237"),
+ toString(aHash));
+ }
+
+ {
oox::core::CryptoHash aCryptoHash(aKey, oox::core::CryptoHashType::SHA512);
aCryptoHash.update(aContent);
std::vector<sal_uInt8> aHash = aCryptoHash.finalize();
@@ -184,6 +193,13 @@ void CryptoTest::testAgileEncryptionVerifier()
CPPUNIT_ASSERT_EQUAL(false, aEngine.decryptAndCheckVerifierHash("Wrong"));
CPPUNIT_ASSERT_EQUAL(true, aEngine.decryptAndCheckVerifierHash(aPassword));
+ aEngine.setupEncryptionParameters({ 100000, 16, 128, 48, 16, OUString("AES"),
+ OUString("ChainingModeCBC"), OUString("SHA384") });
+
+ CPPUNIT_ASSERT_EQUAL(true, aEngine.generateAndEncryptVerifierHash(aPassword));
+ CPPUNIT_ASSERT_EQUAL(false, aEngine.decryptAndCheckVerifierHash("Wrong"));
+ CPPUNIT_ASSERT_EQUAL(true, aEngine.decryptAndCheckVerifierHash(aPassword));
+
aEngine.setupEncryptionParameters({ 100000, 16, 256, 64, 16, OUString("AES"),
OUString("ChainingModeCBC"), OUString("SHA512") });
@@ -243,6 +259,52 @@ void CryptoTest::testAgileEncrpytionInfoWritingAndParsing()
}
}
+ { // Preset AES128 - SHA384
+ SvMemoryStream aEncryptionInfo;
+ {
+ oox::core::AgileEngine aEngine;
+
+ aEngine.setPreset(oox::core::AgileEncryptionPreset::AES_128_SHA384);
+ aEngine.setupEncryption(aPassword);
+ aKeyDataSalt = aEngine.getInfo().keyDataSalt;
+
+ oox::BinaryXOutputStream aBinaryEncryptionInfoOutputStream(
+ new utl::OSeekableOutputStreamWrapper(aEncryptionInfo), true);
+
+ aEngine.writeEncryptionInfo(aBinaryEncryptionInfoOutputStream);
+ aBinaryEncryptionInfoOutputStream.close();
+
+ CPPUNIT_ASSERT_EQUAL(sal_uInt64(1040), aEncryptionInfo.GetSize());
+ }
+
+ aEncryptionInfo.Seek(STREAM_SEEK_TO_BEGIN);
+
+ {
+ oox::core::AgileEngine aEngine;
+
+ uno::Reference<io::XInputStream> xInputStream(
+ new utl::OSeekableInputStreamWrapper(aEncryptionInfo));
+
+ xInputStream->skipBytes(4); // Encryption type -> Agile
+
+ CPPUNIT_ASSERT(aEngine.readEncryptionInfo(xInputStream));
+
+ oox::core::AgileEncryptionInfo& rInfo = aEngine.getInfo();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(100000), rInfo.spinCount);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(16), rInfo.saltSize);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(128), rInfo.keyBits);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(48), rInfo.hashSize);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(16), rInfo.blockSize);
+ CPPUNIT_ASSERT_EQUAL(OUString("AES"), rInfo.cipherAlgorithm);
+ CPPUNIT_ASSERT_EQUAL(OUString("ChainingModeCBC"), rInfo.cipherChaining);
+ CPPUNIT_ASSERT_EQUAL(OUString("SHA384"), rInfo.hashAlgorithm);
+ CPPUNIT_ASSERT_EQUAL(toString(aKeyDataSalt), toString(rInfo.keyDataSalt));
+
+ CPPUNIT_ASSERT_EQUAL(false, aEngine.decryptAndCheckVerifierHash("Wrong"));
+ CPPUNIT_ASSERT_EQUAL(true, aEngine.decryptAndCheckVerifierHash(aPassword));
+ }
+ }
+
{ // Preset AES256 - SHA512
SvMemoryStream aEncryptionInfo;
{
diff --git a/oox/source/crypto/AgileEngine.cxx b/oox/source/crypto/AgileEngine.cxx
index 7c2a0e9c93d2..81c03663cb37 100644
--- a/oox/source/crypto/AgileEngine.cxx
+++ b/oox/source/crypto/AgileEngine.cxx
@@ -201,7 +201,13 @@ bool hashCalc(std::vector<sal_uInt8>& output,
output = out;
return true;
}
- else if (sAlgorithm == "SHA512")
+ else if (sAlgorithm == u"SHA384")
+ {
+ std::vector<unsigned char> out = comphelper::Hash::calculateHash(input.data(), input.size(), comphelper::HashType::SHA384);
+ output = out;
+ return true;
+ }
+ else if (sAlgorithm == u"SHA512")
{
std::vector<unsigned char> out = comphelper::Hash::calculateHash(input.data(), input.size(), comphelper::HashType::SHA512);
output = out;
@@ -214,7 +220,10 @@ CryptoHashType cryptoHashTypeFromString(OUString const & sAlgorithm)
{
if (sAlgorithm == "SHA512")
return CryptoHashType::SHA512;
- return CryptoHashType::SHA1;
+ else if (sAlgorithm == u"SHA384")
+ return CryptoHashType::SHA384;
+ else
+ return CryptoHashType::SHA1;
}
} // namespace
@@ -370,6 +379,8 @@ bool AgileEngine::decryptHmacKey()
comphelper::HashType eType;
if (mInfo.hashAlgorithm == "SHA1")
eType = comphelper::HashType::SHA1;
+ else if (mInfo.hashAlgorithm == "SHA384")
+ eType = comphelper::HashType::SHA384;
else if (mInfo.hashAlgorithm == "SHA512")
eType = comphelper::HashType::SHA512;
else
@@ -396,6 +407,8 @@ bool AgileEngine::decryptHmacValue()
comphelper::HashType eType;
if (mInfo.hashAlgorithm == "SHA1")
eType = comphelper::HashType::SHA1;
+ else if (mInfo.hashAlgorithm == "SHA384")
+ eType = comphelper::HashType::SHA384;
else if (mInfo.hashAlgorithm == "SHA512")
eType = comphelper::HashType::SHA512;
else
@@ -534,6 +547,16 @@ bool AgileEngine::readEncryptionInfo(uno::Reference<io::XInputStream> & rxInputS
return true;
}
+ // AES 128 CBC with SHA384
+ if (mInfo.keyBits == 128 &&
+ mInfo.cipherAlgorithm == "AES" &&
+ mInfo.cipherChaining == "ChainingModeCBC" &&
+ mInfo.hashAlgorithm == "SHA384" &&
+ mInfo.hashSize == msfilter::SHA384_HASH_LENGTH)
+ {
+ return true;
+ }
+
// AES 256 CBC with SHA512
if (mInfo.keyBits == 256 &&
mInfo.cipherAlgorithm == "AES" &&
@@ -597,6 +620,8 @@ bool AgileEngine::encryptHmacKey()
comphelper::HashType eType;
if (mInfo.hashAlgorithm == "SHA1")
eType = comphelper::HashType::SHA1;
+ else if (mInfo.hashAlgorithm == "SHA384")
+ eType = comphelper::HashType::SHA384;
else if (mInfo.hashAlgorithm == "SHA512")
eType = comphelper::HashType::SHA512;
else
@@ -624,6 +649,8 @@ bool AgileEngine::encryptHmacValue()
comphelper::HashType eType;
if (mInfo.hashAlgorithm == "SHA1")
eType = comphelper::HashType::SHA1;
+ else if (mInfo.hashAlgorithm == "SHA384")
+ eType = comphelper::HashType::SHA384;
else if (mInfo.hashAlgorithm == "SHA512")
eType = comphelper::HashType::SHA512;
else
@@ -663,6 +690,8 @@ bool AgileEngine::setupEncryption(OUString const & rPassword)
{
if (meEncryptionPreset == AgileEncryptionPreset::AES_128_SHA1)
setupEncryptionParameters({ 100000, 16, 128, 20, 16, OUString("AES"), OUString("ChainingModeCBC"), OUString("SHA1") });
+ else if (meEncryptionPreset == AgileEncryptionPreset::AES_128_SHA384)
+ setupEncryptionParameters({ 100000, 16, 128, 48, 16, OUString("AES"), OUString("ChainingModeCBC"), OUString("SHA384") });
else
setupEncryptionParameters({ 100000, 16, 256, 64, 16, OUString("AES"), OUString("ChainingModeCBC"), OUString("SHA512") });
diff --git a/oox/source/crypto/CryptTools.cxx b/oox/source/crypto/CryptTools.cxx
index 6ca316b0a9b6..8c70c3eaf585 100644
--- a/oox/source/crypto/CryptTools.cxx
+++ b/oox/source/crypto/CryptTools.cxx
@@ -90,6 +90,8 @@ struct CryptoImpl
aEvpMd = EVP_sha1(); break;
case CryptoHashType::SHA256:
aEvpMd = EVP_sha256(); break;
+ case CryptoHashType::SHA384:
+ aEvpMd = EVP_sha384(); break;
case CryptoHashType::SHA512:
aEvpMd = EVP_sha512(); break;
}
@@ -284,6 +286,9 @@ struct CryptoImpl
case CryptoHashType::SHA256:
aMechanism = CKM_SHA256_HMAC;
break;
+ case CryptoHashType::SHA384:
+ aMechanism = CKM_SHA384_HMAC;
+ break;
case CryptoHashType::SHA512:
aMechanism = CKM_SHA512_HMAC;
break;
@@ -428,6 +433,7 @@ sal_Int32 getSizeForHashType(CryptoHashType eType)
{
case CryptoHashType::SHA1: return 20;
case CryptoHashType::SHA256: return 32;
+ case CryptoHashType::SHA384: return 48;
case CryptoHashType::SHA512: return 64;
}
return 0;
diff --git a/oox/source/ole/vbacontrol.cxx b/oox/source/ole/vbacontrol.cxx
index da61e818c149..cc4969e8251c 100644
--- a/oox/source/ole/vbacontrol.cxx
+++ b/oox/source/ole/vbacontrol.cxx
@@ -441,13 +441,17 @@ void VbaFormControl::importStorage( StorageBase& rStrg, const AxClassTable& rCla
if ( xPageSiteRef.get() )
idToPage[ xPageSiteRef->getId() ] = control;
}
- else
+ else if (elem->getControlType() == API_CONTROL_TABSTRIP)
{
AxTabStripModel* pTabStrip = static_cast<AxTabStripModel*>(elem.get());
sCaptions = pTabStrip->maItems;
pMultiPage->mnActiveTab = pTabStrip->mnListIndex;
pMultiPage->mnTabStyle = pTabStrip->mnTabStyle;
}
+ else
+ {
+ SAL_WARN("oox", "unexpected control type " << elem->getControlType());
+ }
}
// apply caption/titles to pages
diff --git a/postprocess/CustomTarget_registry.mk b/postprocess/CustomTarget_registry.mk
index 02d55ed3cd89..a81f05e89920 100644
--- a/postprocess/CustomTarget_registry.mk
+++ b/postprocess/CustomTarget_registry.mk
@@ -176,6 +176,7 @@ postprocess_FILES_main := \
$(postprocess_XCS)/Office/UI/GenericCategories.xcs \
$(postprocess_XCS)/Office/UI/GenericCommands.xcs \
$(postprocess_XCS)/Office/UI/GlobalSettings.xcs \
+ $(postprocess_XCS)/Office/UI/Infobar.xcs \
$(postprocess_XCS)/Office/UI/Sidebar.xcs \
$(postprocess_XCS)/Office/UI/StartModuleCommands.xcs \
$(postprocess_XCS)/Office/UI/StartModuleWindowState.xcs \
diff --git a/postprocess/Rdb_services.mk b/postprocess/Rdb_services.mk
index f8c5047de79f..9c0f8f553362 100644
--- a/postprocess/Rdb_services.mk
+++ b/postprocess/Rdb_services.mk
@@ -140,15 +140,12 @@ $(eval $(call gb_Rdb_add_components,services,\
) \
$(if $(filter WNT,$(OS)), \
avmedia/source/win/avmediawin \
- dtrans/source/generic/dtrans \
- dtrans/util/dnd \
- dtrans/util/ftransl \
- dtrans/util/sysdtrans \
fpicker/source/win32/fps \
shell/source/backends/wininetbe/wininetbe1 \
shell/source/win32/simplemail/smplmail \
shell/source/win32/syssh \
vcl/vcl.windows \
+ vcl/vclplug_win \
) \
$(if $(DISABLE_GUI), \
vcl/vcl.headless \
diff --git a/pyuno/source/loader/pythonloader.py b/pyuno/source/loader/pythonloader.py
index 268cb168fe3c..0ecbf5d848a6 100644
--- a/pyuno/source/loader/pythonloader.py
+++ b/pyuno/source/loader/pythonloader.py
@@ -19,7 +19,7 @@
import uno
import unohelper
import sys
-import imp
+import types
import os
from com.sun.star.uno import Exception,RuntimeException
from com.sun.star.loader import XImplementationLoader
@@ -82,7 +82,7 @@ class Loader( XImplementationLoader, XServiceInfo, unohelper.Base ):
# did we load the module already ?
mod = g_loadedComponents.get( url )
if not mod:
- mod = imp.new_module("uno_component")
+ mod = types.ModuleType("uno_component")
# check for pythonpath.zip beside .py files
checkForPythonPathBesideComponent( url[0:url.rfind('/')] )
diff --git a/reportdesign/source/core/sdr/ReportDrawPage.cxx b/reportdesign/source/core/sdr/ReportDrawPage.cxx
index 00027a557a7b..06a088296798 100644
--- a/reportdesign/source/core/sdr/ReportDrawPage.cxx
+++ b/reportdesign/source/core/sdr/ReportDrawPage.cxx
@@ -128,7 +128,7 @@ uno::Reference< drawing::XShape > OReportDrawPage::CreateShape( SdrObject *pObj
awt::Size aSz( aTmp.Width(), aTmp.Height() );
xObj->setVisualAreaSize( nAspect, aSz );
}
- SvxOle2Shape* pShape = new SvxOle2Shape( pObj );
+ SvxOle2Shape* pShape = new SvxOle2Shape( pObj, "" /*TODO?*/ );
xShape.set(*pShape,uno::UNO_QUERY);
pShape->setShapeKind(pObj->GetObjIdentifier());
}
diff --git a/sal/Library_sal.mk b/sal/Library_sal.mk
index e84ed0aaf1b5..53b35dc8342b 100644
--- a/sal/Library_sal.mk
+++ b/sal/Library_sal.mk
@@ -59,6 +59,7 @@ $(eval $(call gb_Library_add_libs,sal,\
$(if $(filter LINUX,$(OS)), \
-ldl \
-lrt \
+ -lstdc++fs \
) \
$(if $(filter SOLARIS,$(OS)), \
-lnsl \
diff --git a/sal/osl/all/log.cxx b/sal/osl/all/log.cxx
index 39ea42d7e130..3377d615a6ab 100644
--- a/sal/osl/all/log.cxx
+++ b/sal/osl/all/log.cxx
@@ -19,9 +19,13 @@
#include <stdio.h>
#include <string.h>
+#define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING
+#include <experimental/filesystem>
#include <fstream>
+#include <system_error>
#include <config_global.h>
+#include <o3tl/temporary.hxx>
#include <osl/thread.hxx>
#include <rtl/string.h>
#include <sal/detail/log.h>
@@ -116,7 +120,43 @@ char const* setEnvFromLoggingIniFile(const char* env, const char* key)
aKey = sLine.substr(0, n);
if (aKey != sWantedKey)
continue;
- _putenv_s(env, sLine.substr(n+1, sLine.length()).c_str());
+ std::string value(sLine, n+1, sLine.length());
+ for (std::size_t i = 0;;) {
+ i = value.find_first_of("\\$", i);
+ if (i == std::string::npos) {
+ break;
+ }
+ if (value[i] == '\\') {
+ if (i == value.size() - 1 || (value[i + 1] != '\\' && value[i + 1] != '$')) {
+ ++i;
+ continue;
+ }
+ value.erase(i, 1);
+ ++i;
+ } else {
+ if (i == value.size() - 1 || value[i + 1] != '{') {
+ ++i;
+ continue;
+ }
+ std::size_t i2 = value.find('}', i + 2);
+ if (i2 == std::string::npos) {
+ break;
+ }
+ std::string name(value, i + 2, i2 - (i + 2));
+ if (name.find('\0') != std::string::npos) {
+ i = i2 + 1;
+ continue;
+ }
+ char const * p = std::getenv(name.c_str());
+ if (p == nullptr) {
+ value.erase(i, i2 + 1 - i);
+ } else {
+ value.replace(i, i2 + 1 - i, p);
+ i += std::strlen(p);
+ }
+ }
+ }
+ _putenv_s(env, value.c_str());
sResult = std::getenv(env);
break;
}
@@ -165,6 +205,9 @@ std::ofstream * getLogFile() {
if (logFile)
{
+ std::experimental::filesystem::create_directories(
+ std::experimental::filesystem::path(logFile).remove_filename(),
+ o3tl::temporary(std::error_code()));
// stays until process exits
static std::ofstream file(logFile, std::ios::app | std::ios::out);
pResult = &file;
diff --git a/sal/rtl/bootstrap.cxx b/sal/rtl/bootstrap.cxx
index 7f5d4317636a..d22d61e6e671 100644
--- a/sal/rtl/bootstrap.cxx
+++ b/sal/rtl/bootstrap.cxx
@@ -209,34 +209,38 @@ static void getExecutableDirectory_Impl(rtl_uString ** ppDirURL)
rtl_uString_newFromStr_WithLength(ppDirURL,fileName.getStr(),nDirEnd);
}
-static OUString & getIniFileName_Impl()
-{
- static OUString aStaticName = []() {
- OUString fileName;
+static OUString getIniFileName(bool overriding) {
+ OUString fileName;
#if defined IOS
- // On iOS hardcode the inifile as "rc" in the .app
- // directory. Apps are self-contained anyway, there is no
- // possibility to have several "applications" in the same
- // installation location with different inifiles.
- const char *inifile = [[@"vnd.sun.star.pathname:" stringByAppendingString: [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent: @"rc"]] UTF8String];
- fileName = OUString(inifile, strlen(inifile), RTL_TEXTENCODING_UTF8);
- resolvePathnameUrl(&fileName);
+ // On iOS hardcode the inifile as "rc" in the .app
+ // directory. Apps are self-contained anyway, there is no
+ // possibility to have several "applications" in the same
+ // installation location with different inifiles.
+ const char *inifile = [[@"vnd.sun.star.pathname:" stringByAppendingString: [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent: (overriding ? @"fundamental.override.ini" : @"rc")]] UTF8String];
+ fileName = OUString(inifile, strlen(inifile), RTL_TEXTENCODING_UTF8);
+ resolvePathnameUrl(&fileName);
#elif defined ANDROID
- // Apps are self-contained on Android, too, can as well hardcode
- // it as "rc" in the "/assets" directory, i.e. inside the app's
- // .apk (zip) archive as the /assets/rc file.
- fileName = OUString("vnd.sun.star.pathname:/assets/rc");
- resolvePathnameUrl(&fileName);
+ // Apps are self-contained on Android, too, can as well hardcode
+ // it as "rc" in the "/assets" directory, i.e. inside the app's
+ // .apk (zip) archive as the /assets/rc file.
+ fileName = overriding
+ ? OUString("vnd.sun.star.pathname:/assets/fundamental.override.ini")
+ : OUString("vnd.sun.star.pathname:/assets/rc");
+ resolvePathnameUrl(&fileName);
#else
- if (getFromCommandLineArgs("INIFILENAME", &fileName))
- {
- resolvePathnameUrl(&fileName);
- }
- else
- {
- osl_getExecutableFile(&(fileName.pData));
+ if (!overriding && getFromCommandLineArgs("INIFILENAME", &fileName))
+ {
+ resolvePathnameUrl(&fileName);
+ }
+ else
+ {
+ osl_getExecutableFile(&(fileName.pData));
+ if (overriding) {
+ auto const i = fileName.lastIndexOf('/') + 1;
+ fileName = fileName.replaceAt(i, fileName.getLength() - i, u"fundamental.override.ini");
+ } else {
// get rid of a potential executable extension
OUString progExt = ".bin";
if (fileName.getLength() > progExt.getLength()
@@ -254,19 +258,31 @@ static OUString & getIniFileName_Impl()
// append config file suffix
fileName += SAL_CONFIGFILE("");
+ }
#ifdef MACOSX
- // We keep only executables in the MacOS folder, and all
- // rc files in LIBO_ETC_FOLDER (typically "Resources").
- sal_Int32 off = fileName.lastIndexOf( "/MacOS/" );
- if (off != -1)
- fileName = fileName.replaceAt(off + 1, strlen("MacOS"), LIBO_ETC_FOLDER);
+ // We keep only executables in the MacOS folder, and all
+ // rc files in LIBO_ETC_FOLDER (typically "Resources").
+ sal_Int32 off = fileName.lastIndexOf( "/MacOS/" );
+ if (off != -1)
+ fileName = fileName.replaceAt(off + 1, strlen("MacOS"), LIBO_ETC_FOLDER);
#endif
- }
+ }
#endif
- return fileName;
- }();
+ return fileName;
+}
+
+static OUString const & getOverrideIniFileName_Impl()
+{
+ static OUString aStaticName = getIniFileName(true);
+
+ return aStaticName;
+}
+
+static OUString & getIniFileName_Impl()
+{
+ static OUString aStaticName = getIniFileName(false);
return aStaticName;
}
@@ -284,6 +300,7 @@ static void EnsureNoFinalSlash (OUString & url)
struct Bootstrap_Impl
{
sal_Int32 _nRefCount;
+ Bootstrap_Impl * _override_base_ini;
Bootstrap_Impl * _base_ini;
NameValueVector _nameValueVector;
@@ -315,23 +332,47 @@ struct Bootstrap_Impl
Bootstrap_Impl::Bootstrap_Impl( OUString const & rIniName )
: _nRefCount( 0 ),
+ _override_base_ini( nullptr ),
_base_ini( nullptr ),
_iniName (rIniName)
{
- OUString base_ini(getIniFileName_Impl());
+ OUString override_base_ini(getOverrideIniFileName_Impl());
// normalize path
- FileStatus status( osl_FileStatus_Mask_FileURL );
- DirectoryItem dirItem;
- if (DirectoryItem::get(base_ini, dirItem) == DirectoryItem::E_None &&
- dirItem.getFileStatus(status) == DirectoryItem::E_None)
+ FileStatus override_status( osl_FileStatus_Mask_FileURL );
+ DirectoryItem override_dirItem;
+ bool skip_base_ini = false;
+ if (DirectoryItem::get(override_base_ini, override_dirItem) == DirectoryItem::E_None &&
+ override_dirItem.getFileStatus(override_status) == DirectoryItem::E_None)
{
- base_ini = status.getFileURL();
- if (rIniName != base_ini)
+ override_base_ini = override_status.getFileURL();
+ if (rIniName != override_base_ini)
{
- _base_ini = static_cast< Bootstrap_Impl * >(
- rtl_bootstrap_args_open(base_ini.pData));
+ _override_base_ini = static_cast< Bootstrap_Impl * >(
+ rtl_bootstrap_args_open(override_base_ini.pData));
+ }
+ else
+ {
+ skip_base_ini = true;
}
}
+
+ if (!skip_base_ini) {
+ OUString base_ini(getIniFileName_Impl());
+ // normalize path
+ FileStatus status( osl_FileStatus_Mask_FileURL );
+ DirectoryItem dirItem;
+ if (DirectoryItem::get(base_ini, dirItem) == DirectoryItem::E_None &&
+ dirItem.getFileStatus(status) == DirectoryItem::E_None)
+ {
+ base_ini = status.getFileURL();
+ if (rIniName != base_ini)
+ {
+ _base_ini = static_cast< Bootstrap_Impl * >(
+ rtl_bootstrap_args_open(base_ini.pData));
+ }
+ }
+ }
+
SAL_INFO("sal.bootstrap", "Bootstrap_Impl(): sFile=" << _iniName);
oslFileHandle handle;
if (!_iniName.isEmpty() &&
@@ -366,6 +407,8 @@ Bootstrap_Impl::~Bootstrap_Impl()
{
if (_base_ini)
rtl_bootstrap_args_close( _base_ini );
+ if (_override_base_ini)
+ rtl_bootstrap_args_close( _override_base_ini );
}
namespace {
@@ -423,6 +466,13 @@ bool Bootstrap_Impl::getValue(
if (override && getDirectValue(key, value, mode, requestStack))
return true;
+ if (_override_base_ini != nullptr
+ && _override_base_ini->getDirectValue(key, value, mode, requestStack))
+ {
+ SAL_INFO("sal.bootstrap", "getValue(" << key << ") from fundamental.override.ini");
+ return true;
+ }
+
if (key == "_OS")
{
rtl_uString_assign(
diff --git a/sax/source/fastparser/fastparser.cxx b/sax/source/fastparser/fastparser.cxx
index 9b35c1682be5..3c30d7384ab5 100644
--- a/sax/source/fastparser/fastparser.cxx
+++ b/sax/source/fastparser/fastparser.cxx
@@ -548,7 +548,7 @@ Event& Entity::getEvent( CallbackType aType )
OUString lclGetErrorMessage( xmlParserCtxtPtr ctxt, const OUString& sSystemId, sal_Int32 nLine )
{
const sal_Char* pMessage;
- xmlErrorPtr error = xmlCtxtGetLastError( ctxt );
+ const xmlError* error = xmlCtxtGetLastError( ctxt );
if( error && error->message )
pMessage = error->message;
else
diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
index 8091f7e2ffb9..4cc98b01096e 100644
--- a/sc/inc/document.hxx
+++ b/sc/inc/document.hxx
@@ -558,6 +558,8 @@ private:
bool mbFinalTrackFormulas : 1;
// This indicates if a ScDocShell::DoRecalc() or ScDocShell::DoHardRecalc() is in progress.
bool mbDocShellRecalc : 1;
+ // This indicates if a ScOutputData::LayoutStrings() is in progress.
+ bool mbLayoutStrings : 1;
size_t mnMutationGuardFlags;
@@ -2502,6 +2504,9 @@ public:
bool IsInDocShellRecalc() const { return mbDocShellRecalc; }
void SetDocShellRecalc(bool bSet) { mbDocShellRecalc = bSet; }
+ bool IsInLayoutStrings() const { return mbLayoutStrings; }
+ void SetLayoutStrings(bool bSet) { mbLayoutStrings = bSet; }
+
private:
/**
diff --git a/sc/inc/drwlayer.hxx b/sc/inc/drwlayer.hxx
index 3fa25a13f2ff..7327affb7a81 100644
--- a/sc/inc/drwlayer.hxx
+++ b/sc/inc/drwlayer.hxx
@@ -189,6 +189,7 @@ public:
std::vector<SdrObject*> GetObjectsAnchoredToRows(SCTAB nTab, SCROW nStartRow, SCROW nEndRow);
std::map<SCROW, std::vector<SdrObject*>> GetObjectsAnchoredToRange(SCTAB nTab, SCCOL nCol, SCROW nStartRow, SCROW nEndRow);
bool HasObjectsAnchoredInRange(const ScRange& rRange);
+ std::vector<SdrObject*> GetObjectsAnchoredToCols(SCTAB nTab, SCCOL nStartCol, SCCOL nEndCol);
void MoveObject(SdrObject* pObj, const ScAddress& rNewPosition);
// positions for detective lines
diff --git a/sc/inc/editutil.hxx b/sc/inc/editutil.hxx
index 86d579bd1016..3d842bcfc8db 100644
--- a/sc/inc/editutil.hxx
+++ b/sc/inc/editutil.hxx
@@ -74,7 +74,7 @@ public:
static std::unique_ptr<EditTextObject> Clone( const EditTextObject& rSrc, ScDocument& rDestDoc );
static OUString GetCellFieldValue(
- const SvxFieldData& rFieldData, const ScDocument* pDoc, boost::optional<Color>* ppTextColor );
+ const SvxFieldData& rFieldData, const ScDocument* pDoc, boost::optional<Color>* ppTextColor, boost::optional<FontLineStyle>* ppFldLineStyle );
public:
ScEditUtil( ScDocument* pDocument, SCCOL nX, SCROW nY, SCTAB nZ,
@@ -186,7 +186,7 @@ public:
void SetExecuteURL(bool bSet) { bExecuteURL = bSet; }
virtual void FieldClicked( const SvxFieldItem& rField ) override;
- virtual OUString CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rTxtColor, boost::optional<Color>& rFldColor ) override;
+ virtual OUString CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rTxtColor, boost::optional<Color>& rFldColor, boost::optional<FontLineStyle>& rFldLineStyle ) override;
};
// 1/100 mm
@@ -223,7 +223,7 @@ private:
public:
ScHeaderEditEngine( SfxItemPool* pEnginePool );
- virtual OUString CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rTxtColor, boost::optional<Color>& rFldColor ) override;
+ virtual OUString CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rTxtColor, boost::optional<Color>& rFldColor, boost::optional<FontLineStyle>& rFldLineStyle ) override;
void SetNumType(SvxNumType eNew) { aData.eNumType = eNew; }
void SetData(const ScHeaderFieldData& rNew) { aData = rNew; }
diff --git a/sc/qa/extras/scpdfexport.cxx b/sc/qa/extras/scpdfexport.cxx
index f6a7ea8bfbd0..ec789fe0fdeb 100644
--- a/sc/qa/extras/scpdfexport.cxx
+++ b/sc/qa/extras/scpdfexport.cxx
@@ -55,13 +55,17 @@ private:
public:
void testExportRange_Tdf120161();
void testExportFitToPage_Tdf103516();
+ void testForcepoint97();
CPPUNIT_TEST_SUITE(ScPDFExportTest);
CPPUNIT_TEST(testExportRange_Tdf120161);
CPPUNIT_TEST(testExportFitToPage_Tdf103516);
+ CPPUNIT_TEST(testForcepoint97);
CPPUNIT_TEST_SUITE_END();
};
+char const DATA_DIRECTORY[] = "/sc/qa/extras/testdocuments/";
+
void ScPDFExportTest::setUp()
{
test::BootstrapFixture::setUp();
@@ -358,6 +362,18 @@ void ScPDFExportTest::testExportFitToPage_Tdf103516()
}
}
+// just needs to not crash on export to pdf
+void ScPDFExportTest::testForcepoint97()
+{
+ mxComponent = loadFromDesktop(m_directories.getURLFromSrc(DATA_DIRECTORY) + "forcepoint97.xlsx",
+ "com.sun.star.sheet.SpreadsheetDocument");
+ uno::Reference<frame::XModel> xModel(mxComponent, uno::UNO_QUERY);
+
+ // A1:H81
+ ScRange range1(0, 0, 0, 7, 81, 0);
+ std::shared_ptr<utl::TempFile> pPDFFile = exportToPDF(xModel, range1);
+}
+
CPPUNIT_TEST_SUITE_REGISTRATION(ScPDFExportTest);
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sc/qa/extras/testdocuments/forcepoint97.xlsx b/sc/qa/extras/testdocuments/forcepoint97.xlsx
new file mode 100644
index 000000000000..152fbbc45a9f
--- /dev/null
+++ b/sc/qa/extras/testdocuments/forcepoint97.xlsx
Binary files differ
diff --git a/sc/qa/uitest/calc_tests7/tdf150044.py b/sc/qa/uitest/calc_tests7/tdf150044.py
new file mode 100644
index 000000000000..e3a400f617da
--- /dev/null
+++ b/sc/qa/uitest/calc_tests7/tdf150044.py
@@ -0,0 +1,85 @@
+# -*- 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 org.libreoffice.unotest import systemPathToFileUrl
+from tempfile import TemporaryDirectory
+import os.path
+
+class save_shared_readonly_with_password(UITestCase):
+
+ def test_save_to_shared_ods(self):
+
+ return # FIXME the test deadlocks after saving the file
+ with TemporaryDirectory() as tempdir:
+ xFilePath = os.path.join(tempdir, "shared_readonly_with_password_tmp.ods")
+
+ self.ui_test.create_doc_in_start_center("calc")
+
+ self.ui_test.execute_dialog_through_command(".uno:ShareDocument")
+ xShareDocumentDialog = self.xUITest.getTopFocusWindow()
+ xShareCheckButton = xShareDocumentDialog.getChild("share")
+ xShareCheckButton.executeAction("CLICK", tuple())
+ xOk = xShareDocumentDialog.getChild("ok")
+
+ # Save the document
+ self.ui_test.execute_dialog_through_action(xOk, "CLICK")
+ xSaveDialog = self.xUITest.getTopFocusWindow()
+ xFileName = xSaveDialog.getChild("file_name")
+ xFileName.executeAction("TYPE", mkPropertyValues({"KEYCODE":"CTRL+A"}))
+ xFileName.executeAction("TYPE", mkPropertyValues({"KEYCODE":"BACKSPACE"}))
+ xFileName.executeAction("TYPE", mkPropertyValues({"TEXT": xFilePath}))
+ xPasswordCheckButton = xSaveDialog.getChild("password")
+ xPasswordCheckButton.executeAction("CLICK", tuple())
+ xOpen = xSaveDialog.getChild("open")
+
+ self.ui_test.execute_dialog_through_action(xOpen, "CLICK")
+ xPasswordDialog = self.xUITest.getTopFocusWindow()
+ xReadonly = xPasswordDialog.getChild("readonly")
+ xReadonly.executeAction("CLICK", tuple())
+ xNewPassword = xPasswordDialog.getChild("newpassroEntry")
+ xNewPassword.executeAction("TYPE", mkPropertyValues({"TEXT": "password"}))
+ xConfirmPassword = xPasswordDialog.getChild("confirmropassEntry")
+ xConfirmPassword.executeAction("TYPE", mkPropertyValues({"TEXT": "password"}))
+
+ xOKButton = xPasswordDialog.getChild("ok")
+ xOKButton.executeAction("CLICK", tuple())
+
+ while True:
+ if not os.path.isfile(xFilePath):
+ time.sleep(DEFAULT_SLEEP)
+
+ self.ui_test.close_doc()
+
+ self.ui_test.execute_dialog_through_command(".uno:Open")
+ xOpenDialog = self.xUITest.getTopFocusWindow()
+ # Open document
+ xFileName = xOpenDialog.getChild("file_name")
+ xFileName.executeAction("TYPE", mkPropertyValues({"TEXT": xFilePath}))
+ xOpenBtn = xOpenDialog.getChild("open")
+ xOpenBtn.executeAction("CLICK", tuple())
+
+ xDialog = self.ui_test.wait_for_top_focus_window('SharedWarningDialog')
+ xOk = xDialog.getChild("ok")
+ xOk.executeAction("CLICK", tuple())
+
+ document = self.ui_test.get_component()
+ self.assertTrue(document.isReadonly())
+
+ self.ui_test.execute_dialog_through_command(".uno:EditDoc")
+ xDialog = self.xUITest.getTopFocusWindow()
+ # check that we have a password dialog for editing the shared document
+ xPassword = xDialog.getChild("newpassEntry")
+ xPassword.executeAction("TYPE", mkPropertyValues({"TEXT": "password"}))
+ xOKButton = xDialog.getChild("ok")
+ xOKButton.executeAction("CLICK", tuple())
+
+ self.assertFalse(document.isReadonly())
+
+# vim: set shiftwidth=4 softtabstop=4 expandtab:
diff --git a/sc/qa/unit/data/contentCSV/fdo48621_broken_quotes_exported.csv b/sc/qa/unit/data/contentCSV/fdo48621_broken_quotes_exported.csv
index dfc83c5f3ced..8e10063eefe5 100644
--- a/sc/qa/unit/data/contentCSV/fdo48621_broken_quotes_exported.csv
+++ b/sc/qa/unit/data/contentCSV/fdo48621_broken_quotes_exported.csv
@@ -53,8 +53,8 @@ No it doesn't,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
",<- needed to end test file here,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
i80385_test2.csv,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
-test,"a""b, ""a"," d""a""c ", m ,j ,d,"b""A""","D""E","f,1","a,b","de""b,a
-""abcdef"" test ""abc","def""g""h","def""gh""",,,,,,,,,,,,,,,,,,,,,,,
+test,"a""b, ""a"," d""a""c ", m ,j ,d,"b""A""","D""E","f,1","a,b","""de""b",a,,,,,,,,,,,,,,,,,,,,,,,,
+"abcdef"" test ""abc","def""g""h","def""gh""",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
"this is
a test","yes
it
@@ -78,8 +78,8 @@ No it doesn't,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
""a""b""",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
i80385_test4.csv,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
-test,"a""b, ""a"," d""a""c ", m ,j ,d,"b""A""","D""E","f,1","a,b","de""b,a
-""abcdef"" test ""abc","def""g""h","def""gh""",,,,,,,,,,,,,,,,,,,,,,,
+test,"a""b, ""a"," d""a""c ", m ,j ,d,"b""A""","D""E","f,1","a,b","""de""b",a,,,,,,,,,,,,,,,,,,,,,,,,
+"abcdef"" test ""abc","def""g""h","def""gh""",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
"this is
a test","yes
it
diff --git a/sc/qa/unit/data/xlsx/forcepoint107.xlsx b/sc/qa/unit/data/xlsx/forcepoint107.xlsx
new file mode 100644
index 000000000000..f5238dcb5c3e
--- /dev/null
+++ b/sc/qa/unit/data/xlsx/forcepoint107.xlsx
Binary files differ
diff --git a/sc/qa/unit/filters-test.cxx b/sc/qa/unit/filters-test.cxx
index 43c3483bb281..33887536e681 100644
--- a/sc/qa/unit/filters-test.cxx
+++ b/sc/qa/unit/filters-test.cxx
@@ -79,6 +79,7 @@ public:
void testSortWithSheetExternalReferencesODS_Impl( ScDocShellRef const & xDocShRef, SCROW nRow1, SCROW nRow2,
bool bCheckRelativeInSheet );
void testSortWithFormattingXLS();
+ void testForcepoint107();
CPPUNIT_TEST_SUITE(ScFiltersTest);
CPPUNIT_TEST(testCVEs);
@@ -104,6 +105,7 @@ public:
CPPUNIT_TEST(testSortWithSharedFormulasODS);
CPPUNIT_TEST(testSortWithSheetExternalReferencesODS);
CPPUNIT_TEST(testSortWithFormattingXLS);
+ CPPUNIT_TEST(testForcepoint107);
CPPUNIT_TEST_SUITE_END();
@@ -845,6 +847,13 @@ void ScFiltersTest::testSortWithFormattingXLS()
xDocSh->DoClose();
}
+// just needs to not crash on recalc
+void ScFiltersTest::testForcepoint107()
+{
+ ScDocShellRef xDocSh = loadDoc(u"forcepoint107.", FORMAT_XLSX, true);
+ xDocSh->DoHardRecalc();
+}
+
ScFiltersTest::ScFiltersTest()
: ScBootstrapFixture( "sc/qa/unit/data" )
, mbUpdateReferenceOnSort(false)
diff --git a/sc/source/core/data/colorscale.cxx b/sc/source/core/data/colorscale.cxx
index 64c0d990c147..674ee87f2edf 100644
--- a/sc/source/core/data/colorscale.cxx
+++ b/sc/source/core/data/colorscale.cxx
@@ -541,8 +541,10 @@ Color CalcColor( double nVal, double nVal1, const Color& rCol1, double nVal2, co
double GetPercentile( const std::vector<double>& rArray, double fPercentile )
{
size_t nSize = rArray.size();
- size_t nIndex = static_cast<size_t>(::rtl::math::approxFloor( fPercentile * (nSize-1)));
- double fDiff = fPercentile * (nSize-1) - ::rtl::math::approxFloor( fPercentile * (nSize-1));
+ double fFloor = ::rtl::math::approxFloor(fPercentile * (nSize-1));
+ SAL_WARN_IF(fFloor < 0, "sc", "negative percentile");
+ size_t nIndex = fFloor >= 0 ? static_cast<size_t>(fFloor) : 0;
+ double fDiff = fPercentile * (nSize-1) - fFloor;
std::vector<double>::const_iterator iter = rArray.begin() + nIndex;
if (fDiff == 0.0)
return *iter;
diff --git a/sc/source/core/data/dociter.cxx b/sc/source/core/data/dociter.cxx
index ed55445d0558..efbd720c249d 100644
--- a/sc/source/core/data/dociter.cxx
+++ b/sc/source/core/data/dociter.cxx
@@ -1460,6 +1460,8 @@ ScCountIfCellIterator::ScCountIfCellIterator(ScDocument* pDocument, const ScInte
mrContext( rContext ),
nTab( nTable)
{
+ maParam.nCol1 = pDoc->maTabs[nTable]->ClampToAllocatedColumns(maParam.nCol1);
+ maParam.nCol2 = pDoc->maTabs[nTable]->ClampToAllocatedColumns(maParam.nCol2);
nCol = maParam.nCol1;
nRow = maParam.nRow1;
}
diff --git a/sc/source/core/data/documen2.cxx b/sc/source/core/data/documen2.cxx
index 7271fdef0d43..dd76b6cc2dc3 100644
--- a/sc/source/core/data/documen2.cxx
+++ b/sc/source/core/data/documen2.cxx
@@ -166,6 +166,7 @@ ScDocument::ScDocument( ScDocumentMode eMode, SfxObjectShell* pDocShell ) :
mbTrackFormulasPending(false),
mbFinalTrackFormulas(false),
mbDocShellRecalc(false),
+ mbLayoutStrings(false),
mnMutationGuardFlags(0)
{
SetStorageGrammar( formula::FormulaGrammar::GRAM_STORAGE_DEFAULT);
diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx
index 725f6918411a..3f1a41f908a3 100644
--- a/sc/source/core/data/document.cxx
+++ b/sc/source/core/data/document.cxx
@@ -6756,6 +6756,8 @@ void ScDocument::GetNotesInRange( const ScRangeList& rRangeList, std::vector<sc:
const ScRange & rRange = rRangeList[i];
for( SCTAB nTab = rRange.aStart.Tab(); nTab <= rRange.aEnd.Tab(); ++nTab )
{
+ if (!maTabs[nTab])
+ continue;
maTabs[nTab]->GetNotesInRange( rRange, rNotes );
}
}
@@ -6773,6 +6775,8 @@ bool ScDocument::ContainsNotesInRange( const ScRangeList& rRangeList ) const
const ScRange & rRange = rRangeList[i];
for( SCTAB nTab = rRange.aStart.Tab(); nTab <= rRange.aEnd.Tab(); ++nTab )
{
+ if (!maTabs[nTab])
+ continue;
bool bContainsNote = maTabs[nTab]->ContainsNotesInRange( rRange );
if(bContainsNote)
return true;
diff --git a/sc/source/core/data/documentimport.cxx b/sc/source/core/data/documentimport.cxx
index 739a62d553ca..948784c7157e 100644
--- a/sc/source/core/data/documentimport.cxx
+++ b/sc/source/core/data/documentimport.cxx
@@ -380,6 +380,14 @@ void ScDocumentImport::setFormulaCell(const ScAddress& rPos, ScFormulaCell* pCel
mpImpl->mrDoc.CheckLinkFormulaNeedingCheck( *pCell->GetCode());
sc::CellStoreType& rCells = pTab->aCol[rPos.Col()].maCells;
+
+ sc::CellStoreType::position_type aPos = rCells.position(rPos.Row());
+ if (aPos.first != rCells.end() && aPos.first->type == sc::element_type_formula)
+ {
+ ScFormulaCell* p = sc::formula_block::at(*aPos.first->data, aPos.second);
+ sc::SharedFormulaUtil::unshareFormulaCell(aPos, *p);
+ }
+
pBlockPos->miCellPos =
rCells.set(pBlockPos->miCellPos, rPos.Row(), pCell);
}
diff --git a/sc/source/core/data/dpobject.cxx b/sc/source/core/data/dpobject.cxx
index 73762cc70c54..33f923d4a26e 100644
--- a/sc/source/core/data/dpobject.cxx
+++ b/sc/source/core/data/dpobject.cxx
@@ -1022,7 +1022,16 @@ bool ScDPObject::GetMembers( sal_Int32 nDim, sal_Int32 nHier, vector<ScDPLabelDa
for (sal_Int32 i = 0; i < nCount; ++i)
{
- Reference<container::XNamed> xMember(xMembersIA->getByIndex(i), UNO_QUERY);
+ Reference<container::XNamed> xMember;
+ try
+ {
+ xMember = Reference<container::XNamed>(xMembersIA->getByIndex(i), UNO_QUERY);
+ }
+ catch (const container::NoSuchElementException&)
+ {
+ TOOLS_WARN_EXCEPTION("sc", "ScNameToIndexAccess getByIndex failed");
+ }
+
ScDPLabelData::Member aMem;
if (xMember.is())
diff --git a/sc/source/core/data/dptabres.cxx b/sc/source/core/data/dptabres.cxx
index 67f742dece8b..f9b132c1ca4f 100644
--- a/sc/source/core/data/dptabres.cxx
+++ b/sc/source/core/data/dptabres.cxx
@@ -2762,7 +2762,10 @@ ScDPResultDimension::~ScDPResultDimension()
ScDPResultMember *ScDPResultDimension::FindMember( SCROW iData ) const
{
if( bIsDataLayout )
- return maMemberArray[0].get();
+ {
+ SAL_WARN_IF(maMemberArray.empty(), "sc.core", "MemberArray is empty");
+ return !maMemberArray.empty() ? maMemberArray[0].get() : nullptr;
+ }
MemberHash::const_iterator aRes = maMemberHash.find( iData );
if( aRes != maMemberHash.end()) {
@@ -2969,8 +2972,11 @@ void ScDPResultDimension::LateInitFrom(
long ScDPResultDimension::GetSize(long nMeasure) const
{
- long nTotal = 0;
long nMemberCount = maMemberArray.size();
+ if (!nMemberCount)
+ return 0;
+
+ long nTotal = 0;
if (bIsDataLayout)
{
OSL_ENSURE(nMeasure == SC_DPMEASURE_ALL || pResultData->GetMeasureCount() == 1,
@@ -3123,7 +3129,7 @@ void ScDPResultDimension::SortMembers( ScDPResultMember* pRefMember )
// handle children
// for data layout, call only once - sorting measure is always taken from settings
- long nLoopCount = bIsDataLayout ? 1 : nCount;
+ long nLoopCount = bIsDataLayout ? std::min<long>(1, nCount) : nCount;
for (long i=0; i<nLoopCount; i++)
{
ScDPResultMember* pMember = maMemberArray[i].get();
diff --git a/sc/source/core/data/drwlayer.cxx b/sc/source/core/data/drwlayer.cxx
index 515118d84c23..0bb4314309dc 100644
--- a/sc/source/core/data/drwlayer.cxx
+++ b/sc/source/core/data/drwlayer.cxx
@@ -795,13 +795,17 @@ void ScDrawLayer::RecalcPos( SdrObject* pObj, ScDrawObjData& rData, bool bNegati
position must not be done, if the cell containing the note has not
been moved yet in the document. The calling code now passes an
additional boolean stating if the cells are already moved. */
- if( bUpdateNoteCaptionPos )
+ /* tdf #152081 Do not change hidden objects. That would produce zero height
+ or width and loss of caption.*/
+ if (pObj->IsVisible() && bUpdateNoteCaptionPos)
+ {
/* When inside an undo action, there may be pending note captions
where cell note is already deleted (thus document cannot find
the note object anymore). The caption will be deleted later
with drawing undo. */
if( ScPostIt* pNote = pDoc->GetNote( rData.maStart ) )
pNote->UpdateCaptionPos( rData.maStart );
+ }
return;
}
@@ -2176,12 +2180,9 @@ ScDrawLayer::GetObjectsAnchoredToRows(SCTAB nTab, SCROW nStartRow, SCROW nEndRow
ScRange aRange( 0, nStartRow, nTab, MAXCOL, nEndRow, nTab);
while (pObject)
{
- if (!dynamic_cast<SdrCaptionObj*>(pObject)) // Caption objects are handled differently
- {
- ScDrawObjData* pObjData = GetObjData(pObject);
- if (pObjData && aRange.In(pObjData->maStart))
- aObjects.push_back(pObject);
- }
+ ScDrawObjData* pObjData = GetObjData(pObject);
+ if (pObjData && aRange.In(pObjData->maStart))
+ aObjects.push_back(pObject);
pObject = aIter.Next();
}
return aObjects;
@@ -2235,6 +2236,27 @@ bool ScDrawLayer::HasObjectsAnchoredInRange(const ScRange& rRange)
return false;
}
+std::vector<SdrObject*> ScDrawLayer::GetObjectsAnchoredToCols(SCTAB nTab, SCCOL nStartCol,
+ SCCOL nEndCol)
+{
+ SdrPage* pPage = GetPage(static_cast<sal_uInt16>(nTab));
+ if (!pPage || pPage->GetObjCount() < 1)
+ return std::vector<SdrObject*>();
+
+ std::vector<SdrObject*> aObjects;
+ SdrObjListIter aIter(pPage, SdrIterMode::Flat);
+ SdrObject* pObject = aIter.Next();
+ ScRange aRange(nStartCol, 0, nTab, nEndCol, MAXROW, nTab);
+ while (pObject)
+ {
+ ScDrawObjData* pObjData = GetObjData(pObject);
+ if (pObjData && aRange.In(pObjData->maStart))
+ aObjects.push_back(pObject);
+ pObject = aIter.Next();
+ }
+ return aObjects;
+}
+
void ScDrawLayer::MoveObject(SdrObject* pObject, const ScAddress& rNewPosition)
{
// Get anchor data
diff --git a/sc/source/core/data/formulacell.cxx b/sc/source/core/data/formulacell.cxx
index dff86ec3682e..656ad813093c 100644
--- a/sc/source/core/data/formulacell.cxx
+++ b/sc/source/core/data/formulacell.cxx
@@ -939,6 +939,9 @@ ScFormulaCell::~ScFormulaCell()
if (!mxGroup || !mxGroup->mpCode)
// Formula token is not shared.
delete pCode;
+
+ if (mxGroup && mxGroup->mpTopCell == this)
+ mxGroup->mpTopCell = nullptr;
}
ScFormulaCell* ScFormulaCell::Clone() const
@@ -2140,7 +2143,8 @@ void ScFormulaCell::InterpretTail( ScInterpreterContext& rContext, ScInterpretTa
// XXX if mbNeedsNumberFormat was set even if the current format
// was not General then we'd have to obtain the current format here
// and check at least the types.
- if (bSetFormat && (bForceNumberFormat || ((nFormatIndex % SV_COUNTRY_LANGUAGE_OFFSET) != 0)))
+ const bool bSetNumberFormat = bSetFormat && (bForceNumberFormat || ((nFormatIndex % SV_COUNTRY_LANGUAGE_OFFSET) != 0));
+ if (bSetNumberFormat && !pDocument->IsInLayoutStrings())
{
// set number format explicitly
if (!pDocument->IsThreadedGroupCalcInProgress())
diff --git a/sc/source/core/data/global.cxx b/sc/source/core/data/global.cxx
index 050fd823b4ee..3295a38a0243 100644
--- a/sc/source/core/data/global.cxx
+++ b/sc/source/core/data/global.cxx
@@ -37,6 +37,8 @@
#include <vcl/virdev.hxx>
#include <vcl/settings.hxx>
#include <vcl/svapp.hxx>
+#include <vcl/weld.hxx>
+#include <vcl/window.hxx>
#include <unotools/charclass.hxx>
#include <unotools/securityoptions.hxx>
#include <osl/diagnose.h>
@@ -789,7 +791,7 @@ void ScGlobal::OpenURL(const OUString& rURL, const OUString& rTarget, bool bIgno
OUString aUrlName( rURL );
SfxViewFrame* pFrame = nullptr;
- const SfxObjectShell* pObjShell = nullptr;
+ SfxObjectShell* pObjShell = nullptr;
OUString aReferName;
if ( pScActiveViewShell )
{
@@ -823,6 +825,9 @@ void ScGlobal::OpenURL(const OUString& rURL, const OUString& rTarget, bool bIgno
aUrlName = aNewUrlName;
}
+ if (!SfxObjectShell::AllowedLinkProtocolFromDocument(aUrlName, pObjShell, pFrame ? pFrame->GetWindow().GetFrameWeld() : nullptr))
+ return;
+
SfxStringItem aUrl( SID_FILE_NAME, aUrlName );
SfxStringItem aTarget( SID_TARGETNAME, rTarget );
if ( nScClickMouseModifier & KEY_SHIFT ) // control-click -> into new window
diff --git a/sc/source/core/data/table2.cxx b/sc/source/core/data/table2.cxx
index 2085e623f932..0af4861983cb 100644
--- a/sc/source/core/data/table2.cxx
+++ b/sc/source/core/data/table2.cxx
@@ -2059,15 +2059,12 @@ const ScPatternAttr* ScTable::GetMostUsedPattern( SCCOL nCol, SCROW nStartRow, S
bool ScTable::HasAttrib( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, HasAttrFlags nMask ) const
{
- if ( nCol1 >= aCol.size() )
- return false;
- if ( nCol2 >= aCol.size() )
- nCol2 = aCol.size() - 1; // Rows above range, doesn't contains flags
-
- bool bFound = false;
- for (SCCOL i=nCol1; i<=nCol2 && !bFound; i++)
- bFound |= aCol[i].HasAttrib( nRow1, nRow2, nMask );
- return bFound;
+ for(SCCOL nCol = nCol1; nCol <= nCol2 && nCol < aCol.size(); ++nCol )
+ if( aCol[nCol].HasAttrib( nRow1, nRow2, nMask ))
+ return true;
+ if( nCol2 >= aCol.size())
+ return aDefaultColAttrArray.HasAttrib( nRow1, nRow2, nMask );
+ return false;
}
bool ScTable::HasAttribSelection( const ScMarkData& rMark, HasAttrFlags nMask ) const
diff --git a/sc/source/core/data/table5.cxx b/sc/source/core/data/table5.cxx
index 9975d96212c5..bd810c6b370a 100644
--- a/sc/source/core/data/table5.cxx
+++ b/sc/source/core/data/table5.cxx
@@ -36,6 +36,7 @@
#include <printopt.hxx>
#include <bcaslot.hxx>
#include <compressedarray.hxx>
+#include <userdat.hxx>
#include <com/sun/star/sheet/TablePageBreakData.hpp>
@@ -583,13 +584,24 @@ bool ScTable::SetRowHidden(SCROW nStartRow, SCROW nEndRow, bool bHidden)
else
bChanged = mpHiddenRows->setFalse(nStartRow, nEndRow);
- std::vector<SdrObject*> aRowDrawObjects;
+ // Cell anchored objects might change visibility
ScDrawLayer* pDrawLayer = pDocument->GetDrawLayer();
if (pDrawLayer) {
+ std::vector<SdrObject*> aRowDrawObjects;
aRowDrawObjects = pDrawLayer->GetObjectsAnchoredToRows(GetTab(), nStartRow, nEndRow);
for (auto aObj : aRowDrawObjects)
{
- aObj->SetVisible(!bHidden);
+ ScDrawObjData* pData = ScDrawLayer::GetObjData(aObj);
+ if (pData)
+ {
+ if (bHidden)
+ aObj->SetVisible(false);
+ else if (!GetDoc().ColHidden(pData->maStart.Col(), pData->maStart.Tab()))
+ {
+ // Only change visibility if object is not hidden by a hidden col
+ aObj->SetVisible(true);
+ }
+ }
}
}
@@ -621,6 +633,28 @@ void ScTable::SetColHidden(SCCOL nStartCol, SCCOL nEndCol, bool bHidden)
else
bChanged = mpHiddenCols->setFalse(nStartCol, nEndCol);
+ // Cell anchored objects might change visibility
+ ScDrawLayer* pDrawLayer = pDocument->GetDrawLayer();
+ if (pDrawLayer)
+ {
+ std::vector<SdrObject*> aColDrawObjects;
+ aColDrawObjects = pDrawLayer->GetObjectsAnchoredToCols(GetTab(), nStartCol, nEndCol);
+ for (auto aObj : aColDrawObjects)
+ {
+ ScDrawObjData* pData = ScDrawLayer::GetObjData(aObj);
+ if (pData)
+ {
+ if (bHidden)
+ aObj->SetVisible(false);
+ else if (!GetDoc().RowHidden(pData->maStart.Row(), pData->maStart.Tab()))
+ {
+ // Only change visibility if object is not hidden by a hidden row
+ aObj->SetVisible(true);
+ }
+ }
+ }
+ }
+
if (bChanged)
SetStreamValid(false);
}
diff --git a/sc/source/core/inc/interpre.hxx b/sc/source/core/inc/interpre.hxx
index 3b902524d901..c7d4527dbf57 100644
--- a/sc/source/core/inc/interpre.hxx
+++ b/sc/source/core/inc/interpre.hxx
@@ -235,6 +235,7 @@ private:
inline bool MustHaveParamCount( short nAct, short nMust );
inline bool MustHaveParamCount( short nAct, short nMust, short nMax );
inline bool MustHaveParamCountMin( short nAct, short nMin );
+ inline bool MustHaveParamCountMinWithStackCheck( short nAct, short nMin );
void PushParameterExpected();
void PushIllegalParameter();
void PushIllegalArgument();
@@ -1086,6 +1087,17 @@ inline bool ScInterpreter::MustHaveParamCountMin( short nAct, short nMin )
return false;
}
+inline bool ScInterpreter::MustHaveParamCountMinWithStackCheck( short nAct, short nMin )
+{
+ assert(sp >= nAct);
+ if (sp < nAct)
+ {
+ PushParameterExpected();
+ return false;
+ }
+ return MustHaveParamCountMin( nAct, nMin);
+}
+
inline bool ScInterpreter::CheckStringPositionArgument( double & fVal )
{
if (!rtl::math::isFinite( fVal))
diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx
index 84a0d64e155b..125c1acd8e9d 100644
--- a/sc/source/core/tool/compiler.cxx
+++ b/sc/source/core/tool/compiler.cxx
@@ -4521,6 +4521,7 @@ std::unique_ptr<ScTokenArray> ScCompiler::CompileString( const OUString& rFormul
pFunctionStack[0].eOp = ocNone;
pFunctionStack[0].nSep = 0;
size_t nFunction = 0;
+ size_t nHighWatermark = 0;
short nBrackets = 0;
bool bInArray = false;
eLastOp = ocOpen;
@@ -4540,6 +4541,7 @@ std::unique_ptr<ScTokenArray> ScCompiler::CompileString( const OUString& rFormul
++nFunction;
pFunctionStack[ nFunction ].eOp = eLastOp;
pFunctionStack[ nFunction ].nSep = 0;
+ nHighWatermark = nFunction;
}
}
break;
@@ -4578,6 +4580,7 @@ std::unique_ptr<ScTokenArray> ScCompiler::CompileString( const OUString& rFormul
++nFunction;
pFunctionStack[ nFunction ].eOp = eOp;
pFunctionStack[ nFunction ].nSep = 0;
+ nHighWatermark = nFunction;
}
}
break;
@@ -4608,6 +4611,7 @@ std::unique_ptr<ScTokenArray> ScCompiler::CompileString( const OUString& rFormul
++nFunction;
pFunctionStack[ nFunction ].eOp = eOp;
pFunctionStack[ nFunction ].nSep = 0;
+ nHighWatermark = nFunction;
}
}
break;
@@ -4650,9 +4654,9 @@ std::unique_ptr<ScTokenArray> ScCompiler::CompileString( const OUString& rFormul
// Append a parameter for WEEKNUM, all 1.0
// Function is already closed, parameter count is nSep+1
size_t nFunc = nFunction + 1;
- if (eOp == ocClose &&
- (pFunctionStack[ nFunc ].eOp == ocWeek && // 2nd week start
- pFunctionStack[ nFunc ].nSep == 0))
+ if (eOp == ocClose && nFunc <= nHighWatermark &&
+ pFunctionStack[ nFunc ].nSep == 0 &&
+ pFunctionStack[ nFunc ].eOp == ocWeek) // 2nd week start
{
if ( !static_cast<ScTokenArray*>(pArr)->Add( new FormulaToken( svSep, ocSep)) ||
!static_cast<ScTokenArray*>(pArr)->Add( new FormulaDoubleToken( 1.0)))
diff --git a/sc/source/core/tool/editutil.cxx b/sc/source/core/tool/editutil.cxx
index 040456d49ac2..7b0ed36fc8ed 100644
--- a/sc/source/core/tool/editutil.cxx
+++ b/sc/source/core/tool/editutil.cxx
@@ -195,7 +195,7 @@ std::unique_ptr<EditTextObject> ScEditUtil::Clone( const EditTextObject& rObj, S
}
OUString ScEditUtil::GetCellFieldValue(
- const SvxFieldData& rFieldData, const ScDocument* pDoc, boost::optional<Color>* ppTextColor )
+ const SvxFieldData& rFieldData, const ScDocument* pDoc, boost::optional<Color>* ppTextColor, boost::optional<FontLineStyle>* ppFldLineStyle )
{
OUString aRet;
switch (rFieldData.GetClassId())
@@ -223,6 +223,9 @@ OUString ScEditUtil::GetCellFieldValue(
if (ppTextColor)
*ppTextColor = SC_MOD()->GetColorConfig().GetColorValue(eEntry).nColor;
+
+ if (ppFldLineStyle)
+ *ppFldLineStyle = FontLineStyle::LINESTYLE_SINGLE;
}
break;
case text::textfield::Type::EXTENDED_TIME:
@@ -796,7 +799,8 @@ ScHeaderEditEngine::ScHeaderEditEngine( SfxItemPool* pEnginePoolP )
OUString ScHeaderEditEngine::CalcFieldValue( const SvxFieldItem& rField,
sal_Int32 /* nPara */, sal_Int32 /* nPos */,
- boost::optional<Color>& /* rTxtColor */, boost::optional<Color>& /* rFldColor */ )
+ boost::optional<Color>& /* rTxtColor */, boost::optional<Color>& /* rFldColor */,
+ boost::optional<FontLineStyle>& /*rFldLineStyle*/ )
{
const SvxFieldData* pFieldData = rField.GetField();
if (!pFieldData)
@@ -860,14 +864,15 @@ ScFieldEditEngine::ScFieldEditEngine(
OUString ScFieldEditEngine::CalcFieldValue( const SvxFieldItem& rField,
sal_Int32 /* nPara */, sal_Int32 /* nPos */,
- boost::optional<Color>& rTxtColor, boost::optional<Color>& /* rFldColor */ )
+ boost::optional<Color>& rTxtColor, boost::optional<Color>& /* rFldColor */,
+ boost::optional<FontLineStyle>& rFldLineStyle )
{
const SvxFieldData* pFieldData = rField.GetField();
if (!pFieldData)
return " ";
- return ScEditUtil::GetCellFieldValue(*pFieldData, mpDoc, &rTxtColor);
+ return ScEditUtil::GetCellFieldValue(*pFieldData, mpDoc, &rTxtColor, &rFldLineStyle);
}
void ScFieldEditEngine::FieldClicked( const SvxFieldItem& rField )
diff --git a/sc/source/core/tool/interpr1.cxx b/sc/source/core/tool/interpr1.cxx
index 0f37b4f9f35e..f1f7a6827cf1 100644
--- a/sc/source/core/tool/interpr1.cxx
+++ b/sc/source/core/tool/interpr1.cxx
@@ -7524,7 +7524,7 @@ void ScInterpreter::ScVLookup()
void ScInterpreter::ScSubTotal()
{
sal_uInt8 nParamCount = GetByte();
- if ( MustHaveParamCountMin( nParamCount, 2 ) )
+ if ( MustHaveParamCountMinWithStackCheck( nParamCount, 2 ) )
{
// We must fish the 1st parameter deep from the stack! And push it on top.
const FormulaToken* p = pStack[ sp - nParamCount ];
@@ -7571,7 +7571,7 @@ void ScInterpreter::ScSubTotal()
void ScInterpreter::ScAggregate()
{
sal_uInt8 nParamCount = GetByte();
- if ( MustHaveParamCountMin( nParamCount, 3 ) )
+ if ( MustHaveParamCountMinWithStackCheck( nParamCount, 3 ) )
{
// fish the 1st parameter from the stack and push it on top.
const FormulaToken* p = pStack[ sp - nParamCount ];
diff --git a/sc/source/core/tool/interpr3.cxx b/sc/source/core/tool/interpr3.cxx
index f219beca9386..d442d4eee224 100644
--- a/sc/source/core/tool/interpr3.cxx
+++ b/sc/source/core/tool/interpr3.cxx
@@ -3474,7 +3474,7 @@ void ScInterpreter::ScPercentile( bool bInclusive )
GetNumberSequenceArray( 1, aArray, false );
if ( aArray.empty() || nGlobalError != FormulaError::NONE )
{
- SetError( FormulaError::NoValue );
+ PushNoValue();
return;
}
if ( bInclusive )
@@ -3497,7 +3497,7 @@ void ScInterpreter::ScQuartile( bool bInclusive )
GetNumberSequenceArray( 1, aArray, false );
if ( aArray.empty() || nGlobalError != FormulaError::NONE )
{
- SetError( FormulaError::NoValue );
+ PushNoValue();
return;
}
if ( bInclusive )
diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx
index eb3fb987c034..002c7de4c1da 100644
--- a/sc/source/core/tool/interpr4.cxx
+++ b/sc/source/core/tool/interpr4.cxx
@@ -4012,7 +4012,15 @@ StackVar ScInterpreter::Interpret()
else if (sp >= pCur->GetParamCount())
nStackBase = sp - pCur->GetParamCount();
else
- nStackBase = sp; // underflow?!?
+ {
+ SAL_WARN("sc.core", "Stack anomaly at " << aPos.Format(
+ ScRefFlags::VALID | ScRefFlags::FORCE_DOC | ScRefFlags::TAB_3D, pDok)
+ << " eOp: " << static_cast<int>(eOp)
+ << " params: " << static_cast<int>(pCur->GetParamCount())
+ << " nStackBase: " << nStackBase << " sp: " << sp);
+ nStackBase = sp;
+ assert(!"underflow");
+ }
}
switch( eOp )
diff --git a/sc/source/core/tool/interpr7.cxx b/sc/source/core/tool/interpr7.cxx
index 8b58519bcda2..2da332b2b14f 100644
--- a/sc/source/core/tool/interpr7.cxx
+++ b/sc/source/core/tool/interpr7.cxx
@@ -34,6 +34,7 @@
#include <cstring>
#include <memory>
+#include <libxml/parser.h>
using namespace com::sun::star;
@@ -222,6 +223,7 @@ void ScInterpreter::ScFilterXML()
case XPATH_STRING:
PushString(OUString::createFromAscii(reinterpret_cast<char*>(pXPathObj->stringval)));
break;
+#if LIBXML_VERSION < 21000 || defined(LIBXML_XPTR_LOCS_ENABLED)
case XPATH_POINT:
PushNoValue();
break;
@@ -231,13 +233,13 @@ void ScInterpreter::ScFilterXML()
case XPATH_LOCATIONSET:
PushNoValue();
break;
+#endif
case XPATH_USERS:
PushNoValue();
break;
case XPATH_XSLT_TREE:
PushNoValue();
break;
-
}
}
}
diff --git a/sc/source/filter/excel/xepivotxml.cxx b/sc/source/filter/excel/xepivotxml.cxx
index e5af3d924863..770e6fbbe717 100644
--- a/sc/source/filter/excel/xepivotxml.cxx
+++ b/sc/source/filter/excel/xepivotxml.cxx
@@ -1118,7 +1118,7 @@ void XclExpXmlPivotTables::SavePivotTableXml( XclExpXmlStream& rStrm, const ScDP
for (const auto& rDataField : aDataFields)
{
long nDimIdx = rDataField.mnPos;
- assert(aCachedDims[nDimIdx]); // the loop above should have screened for NULL's.
+ assert(nDimIdx == -2 || aCachedDims[nDimIdx]); // the loop above should have screened for NULL's, skip check for -2 "data field"
const ScDPSaveDimension& rDim = *rDataField.mpDim;
boost::optional<OUString> pName = rDim.GetLayoutName();
// tdf#124651: despite being optional in CT_DataField according to ECMA-376 Part 1,
diff --git a/sc/source/filter/html/htmlpars.cxx b/sc/source/filter/html/htmlpars.cxx
index ae46949e4b21..063408b18e31 100644
--- a/sc/source/filter/html/htmlpars.cxx
+++ b/sc/source/filter/html/htmlpars.cxx
@@ -731,19 +731,27 @@ void ScHTMLLayoutParser::SetWidths()
for ( size_t i = nFirstTableCell, nListSize = maList.size(); i < nListSize; ++i )
{
auto& pE = maList[ i ];
- if ( pE->nTab == nTable )
+ if (pE->nTab != nTable)
+ continue;
+ nCol = pE->nCol - nColCntStart;
+ OSL_ENSURE( nCol < nColsPerRow, "ScHTMLLayoutParser::SetWidths: column overflow" );
+ if (nCol >= nColsPerRow)
+ continue;
+ if (nCol < 0)
{
- nCol = pE->nCol - nColCntStart;
- OSL_ENSURE( nCol < nColsPerRow, "ScHTMLLayoutParser::SetWidths: column overflow" );
- if ( nCol < nColsPerRow )
- {
- pE->nOffset = pOffsets[nCol];
- nCol = nCol + pE->nColOverlap;
- if ( nCol > nColsPerRow )
- nCol = nColsPerRow;
- pE->nWidth = pOffsets[nCol] - pE->nOffset;
- }
+ SAL_WARN("sc", "negative offset: " << nCol);
+ continue;
+ }
+ pE->nOffset = pOffsets[nCol];
+ nCol = nCol + pE->nColOverlap;
+ if ( nCol > nColsPerRow )
+ nCol = nColsPerRow;
+ if (nCol < 0)
+ {
+ SAL_WARN("sc", "negative offset: " << nCol);
+ continue;
}
+ pE->nWidth = pOffsets[nCol] - pE->nOffset;
}
}
}
@@ -752,6 +760,16 @@ void ScHTMLLayoutParser::SetWidths()
sal_uInt16 nMax = static_cast<sal_uInt16>(pLocalColOffset->back());
if ( aPageSize.Width() < nMax )
aPageSize.setWidth( nMax );
+ if (nTableLevel == 0)
+ {
+ // Local table is very outer table, create missing offsets.
+ for (auto it = pLocalColOffset->begin(); it != pLocalColOffset->end(); ++it)
+ {
+ // Only exact offsets, do not use MakeColNoRef().
+ if (maColOffset.find(*it) == maColOffset.end())
+ maColOffset.insert(*it);
+ }
+ }
}
for ( size_t i = nFirstTableCell, nListSize = maList.size(); i < nListSize; ++i )
{
@@ -921,12 +939,20 @@ void ScHTMLLayoutParser::TableDataOn( HtmlImportInfo* pInfo )
{
case HtmlOptionId::COLSPAN:
{
- mxActEntry->nColOverlap = static_cast<SCCOL>(rOption.GetString().toInt32());
+ sal_Int32 nColOverlap = rOption.GetString().toInt32();
+ if (nColOverlap >= 0 && nColOverlap <= SCCOL_MAX)
+ mxActEntry->nColOverlap = static_cast<SCCOL>(nColOverlap);
+ else
+ SAL_WARN("sc", "ScHTMLLayoutParser::TableDataOn ignoring colspan: " << nColOverlap);
}
break;
case HtmlOptionId::ROWSPAN:
{
- mxActEntry->nRowOverlap = static_cast<SCROW>(rOption.GetString().toInt32());
+ sal_Int32 nRowOverlap = rOption.GetString().toInt32();
+ if (nRowOverlap >= 0)
+ mxActEntry->nRowOverlap = static_cast<SCROW>(nRowOverlap);
+ else
+ SAL_WARN("sc", "ScHTMLLayoutParser::TableDataOn ignoring rowspan: " << nRowOverlap);
}
break;
case HtmlOptionId::ALIGN:
diff --git a/sc/source/filter/oox/workbookhelper.cxx b/sc/source/filter/oox/workbookhelper.cxx
index dd74d30523bc..bf8ef340995a 100644
--- a/sc/source/filter/oox/workbookhelper.cxx
+++ b/sc/source/filter/oox/workbookhelper.cxx
@@ -548,7 +548,7 @@ void WorkbookGlobals::initialize()
aCalcConfig.SetStringRefSyntax( formula::FormulaGrammar::CONV_XL_A1 ) ;
mpDoc->SetCalcConfig(aCalcConfig);
}
- else if (aGenerator.startsWithIgnoreAsciiCase("LibreOffice"))
+ else if (aGenerator.startsWithIgnoreAsciiCase("LibreOffice") || aGenerator.startsWithIgnoreAsciiCase("Collabora") || aGenerator.startsWithIgnoreAsciiCase("CIB"))
{
mbGeneratorKnownGood = true;
}
diff --git a/sc/source/filter/orcus/filterdetect.cxx b/sc/source/filter/orcus/filterdetect.cxx
index 106248854b1d..c0a3f922de46 100644
--- a/sc/source/filter/orcus/filterdetect.cxx
+++ b/sc/source/filter/orcus/filterdetect.cxx
@@ -14,7 +14,7 @@
#include <unotools/mediadescriptor.hxx>
-#include <rtl/strbuf.hxx>
+#include <tools/stream.hxx>
#include <orcus/format_detection.hpp>
@@ -68,7 +68,7 @@ OUString OrcusFormatDetect::detect(css::uno::Sequence<css::beans::PropertyValue>
return OUString();
css::uno::Reference<css::io::XInputStream> xInputStream(aMediaDescriptor[utl::MediaDescriptor::PROP_INPUTSTREAM()], css::uno::UNO_QUERY );
- OStringBuffer aContent(xInputStream->available());
+ SvMemoryStream aContent(xInputStream->available());
static const sal_Int32 nBytes = 4096;
css::uno::Sequence<sal_Int8> aSeq(nBytes);
@@ -77,10 +77,10 @@ OUString OrcusFormatDetect::detect(css::uno::Sequence<css::beans::PropertyValue>
{
sal_Int32 nReadBytes = xInputStream->readBytes(aSeq, nBytes);
bEnd = (nReadBytes != nBytes);
- aContent.append(reinterpret_cast<const char*>(aSeq.getConstArray()), nReadBytes);
+ aContent.WriteBytes(aSeq.getConstArray(), nReadBytes);
}
- orcus::format_t eFormat = orcus::detect(reinterpret_cast<const unsigned char*>(aContent.getStr()), aContent.getLength());
+ orcus::format_t eFormat = orcus::detect(static_cast<const unsigned char*>(aContent.GetData()), aContent.GetSize());
switch (eFormat)
{
diff --git a/sc/source/filter/xml/XMLCalculationSettingsContext.cxx b/sc/source/filter/xml/XMLCalculationSettingsContext.cxx
index 90c59096e300..01257cf56a6f 100644
--- a/sc/source/filter/xml/XMLCalculationSettingsContext.cxx
+++ b/sc/source/filter/xml/XMLCalculationSettingsContext.cxx
@@ -151,12 +151,14 @@ ScXMLNullDateContext::ScXMLNullDateContext( ScXMLImport& rImport,
if (aIter != rAttrList->end())
{
util::DateTime aDateTime;
- ::sax::Converter::parseDateTime(aDateTime, aIter.toString());
- util::Date aDate;
- aDate.Day = aDateTime.Day;
- aDate.Month = aDateTime.Month;
- aDate.Year = aDateTime.Year;
- pCalcSet->SetNullDate(aDate);
+ if (::sax::Converter::parseDateTime(aDateTime, aIter.toString()))
+ {
+ util::Date aDate;
+ aDate.Day = aDateTime.Day;
+ aDate.Month = aDateTime.Month;
+ aDate.Year = aDateTime.Year;
+ pCalcSet->SetNullDate(aDate);
+ }
}
}
}
diff --git a/sc/source/filter/xml/XMLExportDataPilot.cxx b/sc/source/filter/xml/XMLExportDataPilot.cxx
index fa88b9bd1966..4133de40e9e3 100644
--- a/sc/source/filter/xml/XMLExportDataPilot.cxx
+++ b/sc/source/filter/xml/XMLExportDataPilot.cxx
@@ -127,7 +127,7 @@ void ScXMLExportDataPilot::WriteDPCondition(const ScQueryEntry& aQueryEntry, boo
if (aQueryEntry.IsQueryByEmpty())
{
- rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_OPERATOR, GetXMLToken(XML_EMPTY));
+ rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_OPERATOR, GetXMLToken(XML_TOKEN_EMPTY));
}
else if (aQueryEntry.IsQueryByNonEmpty())
{
diff --git a/sc/source/filter/xml/XMLExportDatabaseRanges.cxx b/sc/source/filter/xml/XMLExportDatabaseRanges.cxx
index 937ac271db26..7b1b2b5381a7 100644
--- a/sc/source/filter/xml/XMLExportDatabaseRanges.cxx
+++ b/sc/source/filter/xml/XMLExportDatabaseRanges.cxx
@@ -381,7 +381,7 @@ private:
case SC_EQUAL:
{
if (rEntry.IsQueryByEmpty())
- return GetXMLToken(XML_EMPTY);
+ return GetXMLToken(XML_TOKEN_EMPTY);
else if (rEntry.IsQueryByNonEmpty())
return GetXMLToken(XML_NOEMPTY);
diff --git a/sc/source/filter/xml/xmlexprt.cxx b/sc/source/filter/xml/xmlexprt.cxx
index 2d16318bac7e..5a93a64cda43 100644
--- a/sc/source/filter/xml/xmlexprt.cxx
+++ b/sc/source/filter/xml/xmlexprt.cxx
@@ -109,6 +109,7 @@
#include <rtl/ustring.hxx>
#include <tools/color.hxx>
+#include <tools/diagnose_ex.h>
#include <rtl/math.hxx>
#include <svl/zforlist.hxx>
#include <svx/unoshape.hxx>
@@ -3004,7 +3005,7 @@ void writeContent(
if (pField)
{
// Write a field item.
- OUString aFieldVal = ScEditUtil::GetCellFieldValue(*pField, rExport.GetDocument(), nullptr);
+ OUString aFieldVal = ScEditUtil::GetCellFieldValue(*pField, rExport.GetDocument(), nullptr, nullptr);
switch (pField->GetClassId())
{
case text::textfield::Type::URL:
@@ -3404,16 +3405,23 @@ void ScXMLExport::ExportShape(const uno::Reference < drawing::XShape >& xShape,
uno::Sequence< OUString > aRepresentations(
xReceiver->getUsedRangeRepresentations());
SvXMLAttributeList* pAttrList = nullptr;
- if(aRepresentations.hasElements())
+ try
{
- // add the ranges used by the chart to the shape
- // element to be able to start listening after
- // load (when the chart is not yet loaded)
- uno::Reference< chart2::data::XRangeXMLConversion > xRangeConverter( xChartDoc->getDataProvider(), uno::UNO_QUERY );
- sRanges = lcl_RangeSequenceToString( aRepresentations, xRangeConverter );
- pAttrList = new SvXMLAttributeList();
- pAttrList->AddAttribute(
- GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_DRAW, GetXMLToken(XML_NOTIFY_ON_UPDATE_OF_RANGES) ), sRanges );
+ if (aRepresentations.hasElements())
+ {
+ // add the ranges used by the chart to the shape
+ // element to be able to start listening after
+ // load (when the chart is not yet loaded)
+ uno::Reference< chart2::data::XRangeXMLConversion > xRangeConverter( xChartDoc->getDataProvider(), uno::UNO_QUERY );
+ sRanges = lcl_RangeSequenceToString( aRepresentations, xRangeConverter );
+ pAttrList = new SvXMLAttributeList();
+ pAttrList->AddAttribute(
+ GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_DRAW, GetXMLToken(XML_NOTIFY_ON_UPDATE_OF_RANGES) ), sRanges );
+ }
+ }
+ catch (const lang::IllegalArgumentException&)
+ {
+ TOOLS_WARN_EXCEPTION("sc", "Exception in lcl_RangeSequenceToString - invalid range?");
}
GetShapeExport()->exportShape(xShape, SEF_DEFAULT, pPoint, pAttrList);
}
diff --git a/sc/source/filter/xml/xmlfilti.cxx b/sc/source/filter/xml/xmlfilti.cxx
index 47fea817123c..a84f12cdd47e 100644
--- a/sc/source/filter/xml/xmlfilti.cxx
+++ b/sc/source/filter/xml/xmlfilti.cxx
@@ -380,7 +380,7 @@ void ScXMLConditionContext::GetOperator(
rEntry.eOp = SC_BOTPERC;
else if (IsXMLToken(aOpStr, XML_BOTTOM_VALUES))
rEntry.eOp = SC_BOTVAL;
- else if (IsXMLToken(aOpStr, XML_EMPTY))
+ else if (IsXMLToken(aOpStr, XML_TOKEN_EMPTY))
rEntry.SetQueryByEmpty();
else if (aOpStr == ">")
rEntry.eOp = SC_GREATER;
@@ -759,7 +759,7 @@ void SAL_CALL ScXMLDPConditionContext::endFastElement( sal_Int32 /*nElement*/ )
else
aFilterField.eConnect = SC_AND;
pFilterContext->SetIsCaseSensitive(bIsCaseSensitive);
- if (IsXMLToken(sOperator, XML_EMPTY))
+ if (IsXMLToken(sOperator, XML_TOKEN_EMPTY))
aFilterField.SetQueryByEmpty();
else if (IsXMLToken(sOperator, XML_NOEMPTY))
aFilterField.SetQueryByNonEmpty();
diff --git a/sc/source/ui/dbgui/scuiasciiopt.cxx b/sc/source/ui/dbgui/scuiasciiopt.cxx
index 75d915438f44..fa861a6bf4fd 100644
--- a/sc/source/ui/dbgui/scuiasciiopt.cxx
+++ b/sc/source/ui/dbgui/scuiasciiopt.cxx
@@ -40,6 +40,14 @@
//! TODO make dynamic
const SCSIZE ASCIIDLG_MAXROWS = MAXROWCOUNT;
+// Maximum number of source lines to concatenate while generating the preview
+// for one logical line. This may result in a wrong preview if the actual
+// number of embedded line feeds is greater, but a number too high would take
+// too much time (loop excessively if unlimited and large data) if none of the
+// selected separators are actually used in data but a field at start of line
+// is quoted.
+constexpr sal_uInt32 kMaxEmbeddedLinefeeds = 500;
+
using namespace com::sun::star::uno;
// Defines - CSV Import Preserve Options
@@ -285,7 +293,7 @@ ScImportAsciiDlg::ScImportAsciiDlg(weld::Window* pParent, const OUString& aDatNa
, mnRowPosCount(0)
, mcTextSep(ScAsciiOptions::cDefaultTextSep)
, meCall(eCall)
- , mbDetectSpaceSep(eCall != SC_TEXTTOCOLUMNS)
+ , mbDetectSep(eCall != SC_TEXTTOCOLUMNS)
, mxFtCharSet(m_xBuilder->weld_label("textcharset"))
, mxLbCharSet(new SvxTextEncodingBox(m_xBuilder->weld_combo_box("charset")))
, mxFtCustomLang(m_xBuilder->weld_label("textlanguage"))
@@ -555,7 +563,7 @@ bool ScImportAsciiDlg::GetLine( sal_uLong nLine, OUString &rText, sal_Unicode& r
break;
}
rText = ReadCsvLine(*mpDatStream, !bFixed, maFieldSeparators,
- mcTextSep, rcDetectSep);
+ mcTextSep, rcDetectSep, kMaxEmbeddedLinefeeds);
mnStreamPos = mpDatStream->Tell();
mpRowPosArray[++mnRowPosCount] = mnStreamPos;
} while (nLine >= mnRowPosCount && mpDatStream->good());
@@ -570,7 +578,7 @@ bool ScImportAsciiDlg::GetLine( sal_uLong nLine, OUString &rText, sal_Unicode& r
else
{
Seek( mpRowPosArray[nLine]);
- rText = ReadCsvLine(*mpDatStream, !bFixed, maFieldSeparators, mcTextSep, rcDetectSep);
+ rText = ReadCsvLine(*mpDatStream, !bFixed, maFieldSeparators, mcTextSep, rcDetectSep, kMaxEmbeddedLinefeeds);
mnStreamPos = mpDatStream->Tell();
}
@@ -769,7 +777,10 @@ IMPL_LINK_NOARG(ScImportAsciiDlg, UpdateTextHdl, ScCsvTableBox&, void)
// when the dialog wasn't already presented to the user.
// As a side effect this has the benefit that the check is only done on the
// first set of visible lines.
- sal_Unicode cDetectSep = (mbDetectSpaceSep && !mxRbFixed->get_active() && !mxCkbSpace->get_active() ? 0 : 0xffff);
+ mbDetectSep = (mbDetectSep && !mxRbFixed->get_active()
+ && (!mxCkbTab->get_active() || !mxCkbSemicolon->get_active()
+ || !mxCkbComma->get_active() || !mxCkbSpace->get_active()));
+ sal_Unicode cDetectSep = (mbDetectSep ? 0 : 0xffff);
sal_Int32 nBaseLine = mxTableBox->GetGrid().GetFirstVisLine();
sal_Int32 nRead = mxTableBox->GetGrid().GetVisLineCount();
@@ -789,16 +800,22 @@ IMPL_LINK_NOARG(ScImportAsciiDlg, UpdateTextHdl, ScCsvTableBox&, void)
for (; i < CSV_PREVIEW_LINES; i++)
maPreviewLine[i].clear();
- if (mbDetectSpaceSep)
+ if (mbDetectSep)
{
- mbDetectSpaceSep = false;
- if (cDetectSep == ' ')
+ mbDetectSep = false;
+ if (cDetectSep)
{
- // Expect space to be appended by now so all subsequent
+ // Expect separator to be appended by now so all subsequent
// GetLine()/ReadCsvLine() actually used it.
- assert(maFieldSeparators.endsWith(" "));
- // Preselect Space in UI.
- mxCkbSpace->set_active(true);
+ assert(maFieldSeparators.endsWith(OUStringChar(cDetectSep)));
+ // Preselect separator in UI.
+ switch (cDetectSep)
+ {
+ case '\t': mxCkbTab->set_active(true); break;
+ case ';': mxCkbSemicolon->set_active(true); break;
+ case ',': mxCkbComma->set_active(true); break;
+ case ' ': mxCkbSpace->set_active(true); break;
+ }
}
}
diff --git a/sc/source/ui/dbgui/validate.cxx b/sc/source/ui/dbgui/validate.cxx
index 41bc913db911..c9fbd5501a39 100644
--- a/sc/source/ui/dbgui/validate.cxx
+++ b/sc/source/ui/dbgui/validate.cxx
@@ -95,6 +95,20 @@ ScValidationDlg::ScValidationDlg(weld::Window* pParent, const SfxItemSet* pArgSe
AddTabPage("erroralert", ScTPValidationError::Create, nullptr);
}
+void ScValidationDlg::EndDialog(int nResponse)
+{
+ // tdf#155708 - do not close, just hide validation window if we click in another sheet
+ if (nResponse == nCloseResponseToJustHide && getDialog()->get_visible())
+ {
+ getDialog()->hide();
+ return;
+ }
+ // tdf#137215 ensure original modality of true is restored before dialog loop ends
+ if (m_bOwnRefHdlr)
+ RemoveRefDlg(true);
+ ScValidationDlgBase::EndDialog(nResponse);
+}
+
ScValidationDlg::~ScValidationDlg()
{
if (m_bOwnRefHdlr)
diff --git a/sc/source/ui/docshell/docfunc.cxx b/sc/source/ui/docshell/docfunc.cxx
index 2922d3ccc3b4..21b5986371f9 100644
--- a/sc/source/ui/docshell/docfunc.cxx
+++ b/sc/source/ui/docshell/docfunc.cxx
@@ -1366,7 +1366,7 @@ ScPostIt* ScDocFunc::ImportNote( const ScAddress& rPos, const OUString& rNoteTex
ScDocument& rDoc = rDocShell.GetDocument();
std::unique_ptr<ScPostIt> pOldNote = rDoc.ReleaseNote( rPos );
- assert(!pOldNote && "imported data has >1 notes on same cell?");
+ SAL_WARN_IF(pOldNote, "sc.ui", "imported data has >1 notes on same cell? at pos " << rPos);
// create new note
ScPostIt* pNewNote = nullptr;
diff --git a/sc/source/ui/docshell/docsh.cxx b/sc/source/ui/docshell/docsh.cxx
index bd7402231333..2203ca42725c 100644
--- a/sc/source/ui/docshell/docsh.cxx
+++ b/sc/source/ui/docshell/docsh.cxx
@@ -915,6 +915,14 @@ void ScDocShell::Notify( SfxBroadcaster&, const SfxHint& rHint )
aValues[1].Name = "Password";
aValues[1].Value <<= pPasswordItem->GetValue();
}
+ const SfxUnoAnyItem* pEncryptionItem = SfxItemSet::GetItem<SfxUnoAnyItem>(GetMedium()->GetItemSet(), SID_ENCRYPTIONDATA, false);
+ if (pEncryptionItem)
+ {
+ aValues.realloc(aValues.getLength() + 1);
+ auto pValues = aValues.getArray();
+ pValues[aValues.getLength() - 1].Name = "EncryptionData";
+ pValues[aValues.getLength() - 1].Value = pEncryptionItem->GetValue();
+ }
SC_MOD()->SetInSharedDocSaving( true );
xStor->storeToURL( GetSharedFileURL(), aValues );
diff --git a/sc/source/ui/docshell/documentlinkmgr.cxx b/sc/source/ui/docshell/documentlinkmgr.cxx
index cb3467c8bb69..8ea3c2cce5fb 100644
--- a/sc/source/ui/docshell/documentlinkmgr.cxx
+++ b/sc/source/ui/docshell/documentlinkmgr.cxx
@@ -142,7 +142,7 @@ bool DocumentLinkManager::hasDdeOrOleOrWebServiceLinks(bool bDde, bool bOle, boo
sfx2::SvBaseLink* pBase = rLink.get();
if (bDde && dynamic_cast<ScDdeLink*>(pBase))
return true;
- if (bOle && dynamic_cast<SdrEmbedObjectLink*>(pBase))
+ if (bOle && (dynamic_cast<SdrEmbedObjectLink*>(pBase) || dynamic_cast<SdrIFrameLink*>(pBase)))
return true;
if (bWebService && dynamic_cast<ScWebServiceLink*>(pBase))
return true;
@@ -173,6 +173,13 @@ bool DocumentLinkManager::updateDdeOrOleOrWebServiceLinks(weld::Window* pWin)
continue;
}
+ SdrIFrameLink* pIFrameLink = dynamic_cast<SdrIFrameLink*>(pBase);
+ if (pIFrameLink)
+ {
+ pIFrameLink->Update();
+ continue;
+ }
+
ScWebServiceLink* pWebserviceLink = dynamic_cast<ScWebServiceLink*>(pBase);
if (pWebserviceLink)
{
diff --git a/sc/source/ui/docshell/impex.cxx b/sc/source/ui/docshell/impex.cxx
index 8db98e388603..51e704b55a00 100644
--- a/sc/source/ui/docshell/impex.cxx
+++ b/sc/source/ui/docshell/impex.cxx
@@ -544,6 +544,11 @@ void ScImportExport::SetNoEndianSwap( SvStream& rStrm )
#endif
}
+static inline bool lcl_isFieldEnd( sal_Unicode c, const sal_Unicode* pSeps )
+{
+ return !c || ScGlobal::UnicodeStrChr( pSeps, c);
+}
+
enum QuoteType
{
FIELDSTART_QUOTE,
@@ -566,17 +571,40 @@ static QuoteType lcl_isFieldEndQuote( const sal_Unicode* p, const sal_Unicode* p
// Due to broken CSV generators that don't double embedded quotes check if
// a field separator immediately or with trailing spaces follows the quote,
// only then end the field, or at end of string.
- const sal_Unicode cBlank = ' ';
+ constexpr sal_Unicode cBlank = ' ';
if (p[1] == cBlank && ScGlobal::UnicodeStrChr( pSeps, cBlank))
return FIELDEND_QUOTE;
// Detect a possible blank separator if it's not already in the list (which
// was checked right above for p[1]==cBlank).
- if (p[1] == cBlank && !rcDetectSep && p[2] && p[2] != cBlank)
- rcDetectSep = cBlank;
+ const bool bBlankSep = (p[1] == cBlank && !rcDetectSep && p[2] && p[2] != cBlank);
while (p[1] == cBlank)
++p;
- if (!p[1] || ScGlobal::UnicodeStrChr( pSeps, p[1]))
+ if (lcl_isFieldEnd( p[1], pSeps))
return FIELDEND_QUOTE;
+ // Extended separator detection after a closing quote (with or without
+ // blanks). Note that nQuotes is incremented *after* the call so is not yet
+ // even here, and that with separator detection we reach here only if
+ // lcl_isEscapedOrFieldEndQuote() did not already detect FIRST_QUOTE or
+ // SECOND_QUOTE for an escaped embedded quote, thus nQuotes does not have
+ // to be checked.
+ if (!rcDetectSep)
+ {
+ constexpr sal_Unicode vSep[] = { ',', '\t', ';' };
+ for (const sal_Unicode c : vSep)
+ {
+ if (p[1] == c)
+ {
+ rcDetectSep = c;
+ return FIELDEND_QUOTE;
+ }
+ }
+ }
+ // Blank separator is least significant, after others.
+ if (bBlankSep)
+ {
+ rcDetectSep = cBlank;
+ return FIELDEND_QUOTE;
+ }
return DONTKNOW_QUOTE;
}
@@ -604,7 +632,7 @@ static QuoteType lcl_isFieldEndQuote( const sal_Unicode* p, const sal_Unicode* p
static QuoteType lcl_isEscapedOrFieldEndQuote( sal_Int32 nQuotes, const sal_Unicode* p,
const sal_Unicode* pSeps, sal_Unicode cStr, sal_Unicode& rcDetectSep )
{
- if ((nQuotes % 2) == 0)
+ if ((nQuotes & 1) == 0)
{
if (p[-1] == cStr)
return SECOND_QUOTE;
@@ -644,9 +672,26 @@ enum class DoubledQuoteMode
ESCAPE, // escaped quote, one is taken, one ignored
};
-static const sal_Unicode* lcl_ScanString( const sal_Unicode* p, OUString& rString,
+/** Scan for a quoted string.
+ Precondition: initial current position *p is a cStr quote.
+ For DoubledQuoteMode::ESCAPE, if after the closing quote there is a field
+ end (with or without trailing blanks and as determined by
+ lcl_isFieldEndQuote()), then the content is appended to rField with quotes
+ processed and removed. Else if no field end after the quoted string was
+ detected, nothing is appended and processing continues and is repeated
+ until the next quote. If no closing quote at a field end was found at all,
+ nothing is appended and the initial position is returned and caller has to
+ decide, usually just taking all as literal data.
+ For DoubledQuoteMode::KEEP_ALL, the string up to and including the closing
+ quote is appended to rField and the next position returned, regardless
+ whether there is a field separator following or not.
+ */
+static const sal_Unicode* lcl_ScanString( const sal_Unicode* p, OUString& rField,
const sal_Unicode* pSeps, sal_Unicode cStr, DoubledQuoteMode eMode, bool& rbOverflowCell )
{
+ OUString aString;
+ bool bClosingQuote = (eMode == DoubledQuoteMode::KEEP_ALL);
+ const sal_Unicode* const pStart = p;
if (eMode != DoubledQuoteMode::KEEP_ALL)
p++; //! jump over opening quote
bool bCont;
@@ -656,8 +701,19 @@ static const sal_Unicode* lcl_ScanString( const sal_Unicode* p, OUString& rStrin
const sal_Unicode* p0 = p;
for( ;; )
{
- if( !*p )
- break;
+ if (!*p)
+ {
+ // Encountering end of data after an opening quote is not a
+ // quoted string, ReadCsvLine() concatenated lines with '\n'
+ // for a properly quoted embedded linefeed.
+ if (eMode == DoubledQuoteMode::KEEP_ALL)
+ // Caller would append that data anyway, so we can do it
+ // already here.
+ break;
+
+ return pStart;
+ }
+
if( *p == cStr )
{
if ( *++p != cStr )
@@ -667,7 +723,10 @@ static const sal_Unicode* lcl_ScanString( const sal_Unicode* p, OUString& rStrin
{
sal_Unicode cDetectSep = 0xffff; // No separator detection here.
if (lcl_isFieldEndQuote( p-1, pSeps, cDetectSep) == FIELDEND_QUOTE)
+ {
+ bClosingQuote = true;
break;
+ }
else
continue;
}
@@ -693,10 +752,17 @@ static const sal_Unicode* lcl_ScanString( const sal_Unicode* p, OUString& rStrin
}
if ( p0 < p )
{
- if (!lcl_appendLineData( rString, p0, ((eMode != DoubledQuoteMode::KEEP_ALL && (*p || *(p-1) == cStr)) ? p-1 : p)))
+ if (!lcl_appendLineData( aString, p0, ((eMode != DoubledQuoteMode::KEEP_ALL && (*p || *(p-1) == cStr)) ? p-1 : p)))
rbOverflowCell = true;
}
} while ( bCont );
+
+ if (!bClosingQuote)
+ return pStart;
+
+ if (!aString.isEmpty())
+ rField += aString;
+
return p;
}
@@ -887,18 +953,16 @@ bool ScImportExport::Text2Doc( SvStream& rStrm )
{
aCell.clear();
const sal_Unicode* q = p;
- while (*p && *p != cSep)
+ if (*p == cStr)
{
- // Always look for a pairing quote and ignore separator in between.
- while (*p && *p == cStr)
- q = p = lcl_ScanString( p, aCell, pSeps, cStr, mode, bOverflowCell );
- // All until next separator or quote.
- while (*p && *p != cSep && *p != cStr)
- ++p;
- if (!lcl_appendLineData( aCell, q, p))
- bOverflowCell = true; // display warning on import
- q = p;
+ // Look for a pairing quote.
+ q = p = lcl_ScanString( p, aCell, pSeps, cStr, mode, bOverflowCell );
}
+ // All until next separator.
+ while (*p && *p != cSep)
+ ++p;
+ if (!lcl_appendLineData( aCell, q, p))
+ bOverflowCell = true; // display warning on import
if (*p)
++p;
if (ValidCol(nCol) && ValidRow(nRow) )
@@ -969,11 +1033,14 @@ static bool lcl_PutString(
return false;
}
- if ( nColFormat == SC_COL_TEXT )
+ // Resolves: tdf#114878 Add 'Evaluate formulas' option to CSV import and paste
+ // Only the optimization is backported from the tdf#114878 fix
+ const bool bForceFormulaText = (rStr[0] == '=');
+ if ( nColFormat == SC_COL_TEXT || bForceFormulaText )
{
double fDummy;
sal_uInt32 nIndex = 0;
- if (pFormatter->IsNumberFormat(rStr, nIndex, fDummy))
+ if (bForceFormulaText || pFormatter->IsNumberFormat(rStr, nIndex, fDummy))
{
// Set the format of this cell to Text.
sal_uInt32 nFormat = pFormatter->GetStandardFormat(SvNumFormatType::TEXT);
@@ -1558,7 +1625,7 @@ const sal_Unicode* ScImportExport::ScanNextFieldFromString( const sal_Unicode* p
rbIsQuoted = true;
const sal_Unicode* p1;
p1 = p = lcl_ScanString( p, rField, pSeps, cStr, DoubledQuoteMode::ESCAPE, rbOverflowCell );
- while ( *p && !ScGlobal::UnicodeStrChr( pSeps, *p ) )
+ while (!lcl_isFieldEnd( *p, pSeps))
p++;
// Append remaining unquoted and undelimited data (dirty, dirty) to
// this field.
@@ -1579,7 +1646,7 @@ const sal_Unicode* ScImportExport::ScanNextFieldFromString( const sal_Unicode* p
else // up to delimiter
{
const sal_Unicode* p0 = p;
- while ( *p && !ScGlobal::UnicodeStrChr( pSeps, *p ) )
+ while (!lcl_isFieldEnd( *p, pSeps))
p++;
const sal_Unicode* ptrim_i = p0;
const sal_Unicode* ptrim_f = p; // [ptrim_i,ptrim_f) is cell data after trimming
@@ -1597,7 +1664,7 @@ const sal_Unicode* ScImportExport::ScanNextFieldFromString( const sal_Unicode* p
}
if ( bMergeSeps ) // skip following delimiters
{
- while ( *p && ScGlobal::UnicodeStrChr( pSeps, *p ) )
+ while (!lcl_isFieldEnd( *p, pSeps))
p++;
}
return p;
@@ -2388,7 +2455,7 @@ ScImportStringStream::ScImportStringStream( const OUString& rStr )
}
OUString ReadCsvLine( SvStream &rStream, bool bEmbeddedLineBreak,
- OUString& rFieldSeparators, sal_Unicode cFieldQuote, sal_Unicode& rcDetectSep )
+ OUString& rFieldSeparators, sal_Unicode cFieldQuote, sal_Unicode& rcDetectSep, sal_uInt32 nMaxSourceLines )
{
enum RetryState
{
@@ -2413,6 +2480,10 @@ Label_RetryWithNewSep:
if (bEmbeddedLineBreak)
{
+ sal_Int32 nFirstLineLength = aStr.getLength();
+ sal_uInt64 nFirstLineStreamPos = rStream.Tell();
+ sal_uInt32 nLine = 0;
+
const sal_Unicode* pSeps = rFieldSeparators.getStr();
QuoteType eQuoteState = FIELDEND_QUOTE;
@@ -2436,6 +2507,8 @@ Label_RetryWithNewSep:
++nQuotes;
bFieldStart = false;
eQuoteState = FIELDSTART_QUOTE;
+ nFirstLineLength = aStr.getLength();
+ nFirstLineStreamPos = rStream.Tell();
}
// Do not detect a FIELDSTART_QUOTE if not in
// bFieldStart mode, in which case for unquoted content
@@ -2444,10 +2517,11 @@ Label_RetryWithNewSep:
{
eQuoteState = lcl_isEscapedOrFieldEndQuote( nQuotes, p, pSeps, cFieldQuote, rcDetectSep);
- if (eRetryState == RetryState::ALLOW && rcDetectSep == ' ')
+ if (eRetryState == RetryState::ALLOW && rcDetectSep)
{
eRetryState = RetryState::RETRY;
- rFieldSeparators += OUString(' ');
+ rFieldSeparators += OUStringChar(rcDetectSep);
+ pSeps = rFieldSeparators.getStr();
goto Label_RetryWithNewSep;
}
@@ -2475,6 +2549,8 @@ Label_RetryWithNewSep:
nQuotes = 1;
eQuoteState = FIELDSTART_QUOTE;
bFieldStart = false;
+ nFirstLineLength = aStr.getLength();
+ nFirstLineStreamPos = rStream.Tell();
}
else if (eQuoteState == FIELDEND_QUOTE)
{
@@ -2493,19 +2569,36 @@ Label_RetryWithNewSep:
++p;
}
- if (nQuotes % 2 == 0)
+ if ((nQuotes & 1) == 0)
// We still have a (theoretical?) problem here if due to
- // nArbitraryLineLengthLimit we split a string right between a
- // doubled quote pair.
+ // nArbitraryLineLengthLimit (or nMaxSourceLines below) we
+ // split a string right between a doubled quote pair.
+ break;
+ else if (eQuoteState == DONTKNOW_QUOTE)
+ // A single unescaped quote somewhere in a quote started
+ // field, most likely that was not meant to have embedded
+ // linefeeds either.
+ break;
+ else if (++nLine >= nMaxSourceLines && nMaxSourceLines > 0)
+ // Unconditionally increment nLine even if nMaxSourceLines==0
+ // so it can be observed in debugger.
break;
else
{
nLastOffset = aStr.getLength();
OUString aNext;
rStream.ReadUniOrByteStringLine(aNext, rStream.GetStreamCharSet(), nArbitraryLineLengthLimit);
- aStr += "\n" + aNext;
+ if (!rStream.eof())
+ aStr += "\n" + aNext;
}
}
+ if (nQuotes & 1)
+ {
+ // No closing quote at all. A single quote at field start => no
+ // embedded linefeeds for that field, take only first logical line.
+ aStr = aStr.copy( 0, nFirstLineLength);
+ rStream.Seek( nFirstLineStreamPos);
+ }
}
return aStr;
}
diff --git a/sc/source/ui/drawfunc/drtxtob.cxx b/sc/source/ui/drawfunc/drtxtob.cxx
index 2cdf432edc11..dd06436be6b9 100644
--- a/sc/source/ui/drawfunc/drtxtob.cxx
+++ b/sc/source/ui/drawfunc/drtxtob.cxx
@@ -205,7 +205,8 @@ void ScDrawTextObjectBar::Execute( SfxRequest &rReq )
case SID_CHARMAP:
{
- const SvxFontItem& rItem = pOutView->GetAttribs().Get(EE_CHAR_FONTINFO);
+ auto const attribs = pOutView->GetAttribs();
+ const SvxFontItem& rItem = attribs.Get(EE_CHAR_FONTINFO);
OUString aString;
std::shared_ptr<SvxFontItem> aNewItem(std::make_shared<SvxFontItem>(EE_CHAR_FONTINFO));
diff --git a/sc/source/ui/inc/impex.hxx b/sc/source/ui/inc/impex.hxx
index 91163c4c34e8..25f795743731 100644
--- a/sc/source/ui/inc/impex.hxx
+++ b/sc/source/ui/inc/impex.hxx
@@ -180,14 +180,25 @@ public:
The quote character used.
@param rcDetectSep
- If 0 then attempt to detect a possible space (blank) separator if
+ If 0 then attempt to detect a possible separator if
rFieldSeparators doesn't include it already. This can be necessary because
of the "accept broken misquoted CSV fields" feature that tries to ignore
trailing blanks after a quoted field and if no separator follows continues
to add content to the field assuming the single double quote was in error.
- If this blank separator is detected it is added to rFieldSeparators and the
+ It is also necessary if the only possible separator was not selected and
+ not included in rFieldSeparators and a line starts with a quoted field, in
+ which case appending lines is tried until end of file.
+ If a separator is detected it is added to rFieldSeparators and the
line is reread with the new separators
+ @param nMaxSourceLines
+ Maximum source lines to read and combine into one logical line for embedded
+ new line purpose. Should be limited for the preview dialog because only
+ non-matching separators selected otherwise would lead to trying to
+ concatenate lines until file end.
+ If 0 no limit other than the internal arbitrary resulting line length
+ limit.
+
check Stream::good() to detect IO problems during read
@ATTENTION
@@ -208,7 +219,8 @@ public:
*/
SC_DLLPUBLIC OUString ReadCsvLine( SvStream &rStream, bool bEmbeddedLineBreak,
- OUString& rFieldSeparators, sal_Unicode cFieldQuote, sal_Unicode& rcDetectSep );
+ OUString& rFieldSeparators, sal_Unicode cFieldQuote, sal_Unicode& rcDetectSep,
+ sal_uInt32 nMaxSourceLines = 0 );
#endif
diff --git a/sc/source/ui/inc/scuiasciiopt.hxx b/sc/source/ui/inc/scuiasciiopt.hxx
index 1b263931bc6f..472d1a498267 100644
--- a/sc/source/ui/inc/scuiasciiopt.hxx
+++ b/sc/source/ui/inc/scuiasciiopt.hxx
@@ -52,7 +52,7 @@ class ScImportAsciiDlg : public weld::GenericDialogController
rtl_TextEncoding meCharSet; /// Selected char set.
bool mbCharSetSystem; /// Is System char set selected?
ScImportAsciiCall const meCall; /// How the dialog is called (see asciiopt.hxx)
- bool mbDetectSpaceSep; /// Whether to detect a possible space separator.
+ bool mbDetectSep; /// Whether to detect a possible separator.
std::unique_ptr<weld::Label> mxFtCharSet;
std::unique_ptr<SvxTextEncodingBox> mxLbCharSet;
diff --git a/sc/source/ui/inc/validate.hxx b/sc/source/ui/inc/validate.hxx
index 2c562717f921..da10715a777d 100644
--- a/sc/source/ui/inc/validate.hxx
+++ b/sc/source/ui/inc/validate.hxx
@@ -154,6 +154,8 @@ class ScValidationDlg
bool m_bOwnRefHdlr:1;
bool m_bRefInputting:1;
+ const int nCloseResponseToJustHide = -42;
+
std::unique_ptr<weld::Container> m_xHBox;
bool EnterRefStatus();
@@ -176,7 +178,11 @@ public:
void SetModal(bool bModal) { m_xDialog->set_modal(bModal); }
- virtual void SetReference( const ScRange& rRef, ScDocument* pDoc ) override
+ virtual void EndDialog(int nResponse) override;
+
+ virtual bool CloseOnHide() const override { return false; }
+
+ virtual void SetReference( const ScRange& rRef, ScDocument* pDoc ) override
{
if ( m_pHandler && m_pSetReferenceHdl )
(m_pHandler->*m_pSetReferenceHdl)( rRef, pDoc );
diff --git a/sc/source/ui/pagedlg/scuitphfedit.cxx b/sc/source/ui/pagedlg/scuitphfedit.cxx
index b12592bcf29c..7baf45b22704 100644
--- a/sc/source/ui/pagedlg/scuitphfedit.cxx
+++ b/sc/source/ui/pagedlg/scuitphfedit.cxx
@@ -186,13 +186,14 @@ void ScHFEditPage::InitPreDefinedList()
boost::optional<Color> pTxtColour;
boost::optional<Color> pFldColour;
+ boost::optional<FontLineStyle> pFldLineStyle;
// Get the all field values at the outset.
- OUString aPageFieldValue(m_xWndLeft->GetEditEngine()->CalcFieldValue(SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD), 0,0, pTxtColour, pFldColour));
- OUString aSheetFieldValue(m_xWndLeft->GetEditEngine()->CalcFieldValue(SvxFieldItem(SvxTableField(), EE_FEATURE_FIELD), 0,0, pTxtColour, pFldColour));
- OUString aFileFieldValue(m_xWndLeft->GetEditEngine()->CalcFieldValue(SvxFieldItem(SvxFileField(), EE_FEATURE_FIELD), 0,0, pTxtColour, pFldColour));
- OUString aExtFileFieldValue(m_xWndLeft->GetEditEngine()->CalcFieldValue(SvxFieldItem(SvxExtFileField(), EE_FEATURE_FIELD), 0,0, pTxtColour, pFldColour));
- OUString aDateFieldValue(m_xWndLeft->GetEditEngine()->CalcFieldValue(SvxFieldItem(SvxDateField(), EE_FEATURE_FIELD), 0,0, pTxtColour, pFldColour));
+ OUString aPageFieldValue(m_xWndLeft->GetEditEngine()->CalcFieldValue(SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD), 0,0, pTxtColour, pFldColour, pFldLineStyle));
+ OUString aSheetFieldValue(m_xWndLeft->GetEditEngine()->CalcFieldValue(SvxFieldItem(SvxTableField(), EE_FEATURE_FIELD), 0,0, pTxtColour, pFldColour, pFldLineStyle));
+ OUString aFileFieldValue(m_xWndLeft->GetEditEngine()->CalcFieldValue(SvxFieldItem(SvxFileField(), EE_FEATURE_FIELD), 0,0, pTxtColour, pFldColour, pFldLineStyle));
+ OUString aExtFileFieldValue(m_xWndLeft->GetEditEngine()->CalcFieldValue(SvxFieldItem(SvxExtFileField(), EE_FEATURE_FIELD), 0,0, pTxtColour, pFldColour, pFldLineStyle));
+ OUString aDateFieldValue(m_xWndLeft->GetEditEngine()->CalcFieldValue(SvxFieldItem(SvxDateField(), EE_FEATURE_FIELD), 0,0, pTxtColour, pFldColour, pFldLineStyle));
m_xLbDefined->clear();
diff --git a/sc/source/ui/unoobj/chart2uno.cxx b/sc/source/ui/unoobj/chart2uno.cxx
index 8916ee2cf09d..1db8aa750063 100644
--- a/sc/source/ui/unoobj/chart2uno.cxx
+++ b/sc/source/ui/unoobj/chart2uno.cxx
@@ -2165,7 +2165,10 @@ OUString SAL_CALL ScChart2DataProvider::convertRangeToXML( const OUString& sRang
ScRefTokenHelper::compileRangeRepresentation(
aRefTokens, sRangeRepresentation, m_pDocument, cSep, m_pDocument->GetGrammar(), true);
if (aRefTokens.empty())
+ {
+ SAL_WARN("sc", "convertRangeToXML throw IllegalArgumentException from input of: " << sRangeRepresentation);
throw lang::IllegalArgumentException();
+ }
Tokens2RangeStringXML converter(m_pDocument);
converter = ::std::for_each(aRefTokens.begin(), aRefTokens.end(), converter);
diff --git a/sc/source/ui/unoobj/fielduno.cxx b/sc/source/ui/unoobj/fielduno.cxx
index 61948b461c4f..9b7939f3e979 100644
--- a/sc/source/ui/unoobj/fielduno.cxx
+++ b/sc/source/ui/unoobj/fielduno.cxx
@@ -175,7 +175,8 @@ public:
explicit ScUnoEditEngine(ScEditEngineDefaulter* pSource);
virtual OUString CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos,
- boost::optional<Color>& rTxtColor, boost::optional<Color>& rFldColor ) override;
+ boost::optional<Color>& rTxtColor, boost::optional<Color>& rFldColor,
+ boost::optional<FontLineStyle>& rFldLineStyle ) override;
sal_uInt16 CountFields();
SvxFieldData* FindByIndex(sal_uInt16 nIndex);
@@ -199,9 +200,10 @@ ScUnoEditEngine::ScUnoEditEngine(ScEditEngineDefaulter* pSource)
}
OUString ScUnoEditEngine::CalcFieldValue( const SvxFieldItem& rField,
- sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rTxtColor, boost::optional<Color>& rFldColor )
+ sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rTxtColor, boost::optional<Color>& rFldColor,
+ boost::optional<FontLineStyle>& rFldLineStyle )
{
- OUString aRet(EditEngine::CalcFieldValue( rField, nPara, nPos, rTxtColor, rFldColor ));
+ OUString aRet(EditEngine::CalcFieldValue( rField, nPara, nPos, rTxtColor, rFldColor, rFldLineStyle ));
if (eMode != SC_UNO_COLLECT_NONE)
{
const SvxFieldData* pFieldData = rField.GetField();
diff --git a/sc/source/ui/view/editsh.cxx b/sc/source/ui/view/editsh.cxx
index 61888c663ef4..413041e0d0e0 100644
--- a/sc/source/ui/view/editsh.cxx
+++ b/sc/source/ui/view/editsh.cxx
@@ -385,8 +385,9 @@ void ScEditShell::Execute( SfxRequest& rReq )
sal_uInt16 nFontWhich = ( nScript == SvtScriptType::ASIAN ) ? EE_CHAR_FONTINFO_CJK :
( ( nScript == SvtScriptType::COMPLEX ) ? EE_CHAR_FONTINFO_CTL :
EE_CHAR_FONTINFO );
+ auto const attribs = pTableView->GetAttribs();
const SvxFontItem& rItem = static_cast<const SvxFontItem&>(
- pTableView->GetAttribs().Get(nFontWhich));
+ attribs.Get(nFontWhich));
OUString aString;
std::shared_ptr<SvxFontItem> aNewItem(std::make_shared<SvxFontItem>(EE_CHAR_FONTINFO));
diff --git a/sc/source/ui/view/formatsh.cxx b/sc/source/ui/view/formatsh.cxx
index 3460d6e3d927..fc3983efce81 100644
--- a/sc/source/ui/view/formatsh.cxx
+++ b/sc/source/ui/view/formatsh.cxx
@@ -138,7 +138,7 @@ ScFormatShell::ScFormatShell(ScViewData* pData) :
SetPool( &pTabViewShell->GetPool() );
SfxUndoManager* pMgr = pViewData->GetSfxDocShell()->GetUndoManager();
SetUndoManager( pMgr );
- if ( !pViewData->GetDocument()->IsUndoEnabled() )
+ if (pMgr && !pViewData->GetDocument()->IsUndoEnabled())
{
pMgr->SetMaxUndoActionCount( 0 );
}
diff --git a/sc/source/ui/view/output.cxx b/sc/source/ui/view/output.cxx
index e14647bd7954..9864a104b6be 100644
--- a/sc/source/ui/view/output.cxx
+++ b/sc/source/ui/view/output.cxx
@@ -2313,11 +2313,10 @@ void ScOutputData::DrawNoteMarks(vcl::RenderContext& rRenderContext)
SCCOL nMergeX = nX;
SCROW nMergeY = nY;
mpDoc->ExtendOverlapped( nMergeX, nMergeY, nX, nY, nTab );
- // use origin's pCell for NotePtr test below
}
- if ( mpDoc->GetNote(nX, pRowInfo[nArrY].nRowNo, nTab) && ( bIsMerged ||
- ( !pInfo->bHOverlapped && !pInfo->bVOverlapped ) ) )
+ if (!mpDoc->ColHidden(nX, nTab) && mpDoc->GetNote(nX, pRowInfo[nArrY].nRowNo, nTab)
+ && (bIsMerged || (!pInfo->bHOverlapped && !pInfo->bVOverlapped)))
{
if (bFirst)
{
diff --git a/sc/source/ui/view/output2.cxx b/sc/source/ui/view/output2.cxx
index 41a9760cc450..1dd9bc063aac 100644
--- a/sc/source/ui/view/output2.cxx
+++ b/sc/source/ui/view/output2.cxx
@@ -70,6 +70,7 @@
#include <scopetools.hxx>
#include <com/sun/star/i18n/DirectionProperty.hpp>
+#include <comphelper/scopeguard.hxx>
#include <comphelper/string.hxx>
#include <memory>
@@ -1441,6 +1442,12 @@ void ScOutputData::DrawStrings( bool bPixelToLogic )
tools::Rectangle ScOutputData::LayoutStrings(bool bPixelToLogic, bool bPaint, const ScAddress &rAddress)
{
+ bool bOrigIsInLayoutStrings = mpDoc->IsInLayoutStrings();
+ mpDoc->SetLayoutStrings(true);
+ comphelper::ScopeGuard g([this, bOrigIsInLayoutStrings] {
+ mpDoc->SetLayoutStrings(bOrigIsInLayoutStrings);
+ });
+
OSL_ENSURE( mpDev == mpRefDevice ||
mpDev->GetMapMode().GetMapUnit() == mpRefDevice->GetMapMode().GetMapUnit(),
"LayoutStrings: different MapUnits ?!?!" );
diff --git a/sc/source/ui/view/select.cxx b/sc/source/ui/view/select.cxx
index 489ea67cfeda..60298fbf7155 100644
--- a/sc/source/ui/view/select.cxx
+++ b/sc/source/ui/view/select.cxx
@@ -268,6 +268,9 @@ void ScViewFunctionSet::SetAnchor( SCCOL nPosX, SCROW nPosY )
void ScViewFunctionSet::DestroyAnchor()
{
+ if (pViewData->IsAnyFillMode())
+ return;
+
bool bRefMode = SC_MOD()->IsFormulaMode();
if (bRefMode)
pViewData->GetView()->DoneRefMode( true );
diff --git a/sc/source/ui/view/tabview3.cxx b/sc/source/ui/view/tabview3.cxx
index f512e8dd9127..bc9504b79642 100644
--- a/sc/source/ui/view/tabview3.cxx
+++ b/sc/source/ui/view/tabview3.cxx
@@ -1853,6 +1853,7 @@ void ScTabView::SetTabNo( SCTAB nTab, bool bNew, bool bExtendSelection, bool bSa
// UpdateShow before SetCursor, so that UpdateAutoFillMark finds the correct
// window (is called from SetCursor)
UpdateShow();
+ aViewData.GetView()->TestHintWindow();
SfxBindings& rBindings = aViewData.GetBindings();
ScMarkData& rMark = aViewData.GetMarkData();
diff --git a/sc/source/ui/view/viewdata.cxx b/sc/source/ui/view/viewdata.cxx
index 0ea25ebce6de..9103af9811a8 100644
--- a/sc/source/ui/view/viewdata.cxx
+++ b/sc/source/ui/view/viewdata.cxx
@@ -1342,7 +1342,13 @@ SCCOL ScViewData::GetCurXForTab( SCTAB nTabIndex ) const
if (!ValidTab(nTabIndex) || (nTabIndex >= static_cast<SCTAB>(maTabData.size())))
return -1;
- return maTabData[nTabIndex]->nCurX;
+ ScViewDataTable* pTabData = maTabData[nTabIndex].get();
+ if (!pTabData)
+ {
+ SAL_WARN("sc.viewdata", "ScViewData::GetCurXForTab : hidden sheet = " << nTabIndex);
+ return -1;
+ }
+ return pTabData->nCurX;
}
SCROW ScViewData::GetCurYForTab( SCTAB nTabIndex ) const
@@ -1350,7 +1356,13 @@ SCROW ScViewData::GetCurYForTab( SCTAB nTabIndex ) const
if (!ValidTab(nTabIndex) || (nTabIndex >= static_cast<SCTAB>(maTabData.size())))
return -1;
- return maTabData[nTabIndex]->nCurY;
+ ScViewDataTable* pTabData = maTabData[nTabIndex].get();
+ if (!pTabData)
+ {
+ SAL_WARN("sc.viewdata", "ScViewData::GetCurYForTab : hidden sheet = " << nTabIndex);
+ return -1;
+ }
+ return pTabData->nCurY;
}
void ScViewData::SetCurXForTab( SCCOL nNewCurX, SCTAB nTabIndex )
@@ -1358,7 +1370,14 @@ void ScViewData::SetCurXForTab( SCCOL nNewCurX, SCTAB nTabIndex )
if (!ValidTab(nTabIndex) || (nTabIndex >= static_cast<SCTAB>(maTabData.size())))
return;
- maTabData[nTabIndex]->nCurX = nNewCurX;
+ ScViewDataTable* pTabData = maTabData[nTabIndex].get();
+ if (!pTabData)
+ {
+ SAL_WARN("sc.viewdata", "ScViewData::SetCurXForTab : hidden sheet = " << nTabIndex);
+ return;
+ }
+
+ pTabData->nCurX = nNewCurX;
}
void ScViewData::SetCurYForTab( SCCOL nNewCurY, SCTAB nTabIndex )
@@ -1366,7 +1385,14 @@ void ScViewData::SetCurYForTab( SCCOL nNewCurY, SCTAB nTabIndex )
if (!ValidTab(nTabIndex) || (nTabIndex >= static_cast<SCTAB>(maTabData.size())))
return;
- maTabData[nTabIndex]->nCurY = nNewCurY;
+ ScViewDataTable* pTabData = maTabData[nTabIndex].get();
+ if (!pTabData)
+ {
+ SAL_WARN("sc.viewdata", "ScViewData::SetCurYForTab : hidden sheet = " << nTabIndex);
+ return;
+ }
+
+ pTabData->nCurY = nNewCurY;
}
void ScViewData::SetMaxTiledCol( SCCOL nNewMaxCol )
diff --git a/scp2/inc/macros.inc b/scp2/inc/macros.inc
index e801253df1f0..2dded2763dde 100644
--- a/scp2/inc/macros.inc
+++ b/scp2/inc/macros.inc
@@ -286,7 +286,7 @@ End
ModuleID = modid; \
Subkey = STRING(CONCAT2(LibreOffice.,name)); \
Name = STRING(AppUserModelID); \
- Value = STRING(CONCAT2(TheDocumentFoundation.LibreOffice.,doc_type)); \
+ Value = STRING(CONCAT2(CIB.CIBOffice.,doc_type)); \
End
#define REGISTRY_ENTRY_ICON(name,modid,icon_id) \
diff --git a/scp2/source/base/folderitem_base.scp b/scp2/source/base/folderitem_base.scp
index 75e1d5d05b01..622353b92aad 100644
--- a/scp2/source/base/folderitem_base.scp
+++ b/scp2/source/base/folderitem_base.scp
@@ -35,6 +35,6 @@ End
FolderItemProperty gid_Fip_Sbase_AppID
ShortcutID = gid_Folderitem_Sbase;
Key = "System.AppUserModel.ID";
- Value = "TheDocumentFoundation.LibreOffice.Base";
+ Value = "CIB.CIBOffice.Base";
End
#endif
diff --git a/scp2/source/base/registryitem_base.scp b/scp2/source/base/registryitem_base.scp
index ee7932ccd451..adc31d6df10f 100644
--- a/scp2/source/base/registryitem_base.scp
+++ b/scp2/source/base/registryitem_base.scp
@@ -83,7 +83,7 @@ RegistryItem gid_Regitem_Openoffice_Databasedocument_1_AppUserModelID
ModuleID = gid_Module_Prg_Base_Bin;
Subkey = "LibreOffice.DatabaseDocument.1";
Name = "AppUserModelID";
- Value = "TheDocumentFoundation.LibreOffice.Base";
+ Value = "CIB.CIBOffice.Base";
End
RegistryItem gid_Regitem_Openoffice_Databasedocument_1_FriendlyTypeName
diff --git a/scp2/source/calc/folderitem_calc.scp b/scp2/source/calc/folderitem_calc.scp
index a41ade695864..098ca42d993a 100644
--- a/scp2/source/calc/folderitem_calc.scp
+++ b/scp2/source/calc/folderitem_calc.scp
@@ -35,6 +35,6 @@ End
FolderItemProperty gid_Fip_Scalc_AppID
ShortcutID = gid_Folderitem_Scalc;
Key = "System.AppUserModel.ID";
- Value = "TheDocumentFoundation.LibreOffice.Calc";
+ Value = "CIB.CIBOffice.Calc";
End
#endif
diff --git a/scp2/source/calc/registryitem_calc.scp b/scp2/source/calc/registryitem_calc.scp
index ca0fc58921cd..2ef401e2b0f2 100644
--- a/scp2/source/calc/registryitem_calc.scp
+++ b/scp2/source/calc/registryitem_calc.scp
@@ -282,7 +282,7 @@ RegistryItem gid_Regitem_Soffice_Starcalcdocument_6_AppUserModelID
ModuleID = gid_Module_Prg_Calc_Bin;
Subkey = "soffice.StarCalcDocument.6";
Name = "AppUserModelID";
- Value = "TheDocumentFoundation.LibreOffice.Calc";
+ Value = "CIB.CIBOffice.Calc";
End
RegistryItem gid_Regitem_Soffice_Starcalcdocument_6_FriendlyTypeName
@@ -395,7 +395,7 @@ RegistryItem gid_Regitem_Soffice_Starcalctemplate_6_AppUserModelID
ModuleID = gid_Module_Prg_Calc_Bin;
Subkey = "soffice.StarCalcTemplate.6";
Name = "AppUserModelID";
- Value = "TheDocumentFoundation.LibreOffice.Calc";
+ Value = "CIB.CIBOffice.Calc";
End
RegistryItem gid_Regitem_Soffice_Starcalctemplate_6_FriendlyTypeName
@@ -700,7 +700,7 @@ RegistryItem gid_Regitem_Openoffice_Calcdocument_1_AppUserModelID
ModuleID = gid_Module_Prg_Calc_Bin;
Subkey = "LibreOffice.CalcDocument.1";
Name = "AppUserModelID";
- Value = "TheDocumentFoundation.LibreOffice.Calc";
+ Value = "CIB.CIBOffice.Calc";
End
RegistryItem gid_Regitem_Openoffice_Calcdocument_1_FriendlyTypeName
@@ -918,7 +918,7 @@ RegistryItem gid_Regitem_Openoffice_Calctemplate_1_AppUserModelID
ModuleID = gid_Module_Prg_Calc_Bin;
Subkey = "LibreOffice.CalcTemplate.1";
Name = "AppUserModelID";
- Value = "TheDocumentFoundation.LibreOffice.Calc";
+ Value = "CIB.CIBOffice.Calc";
End
RegistryItem gid_Regitem_Openoffice_Calctemplate_1_FriendlyTypeName
diff --git a/scp2/source/draw/folderitem_draw.scp b/scp2/source/draw/folderitem_draw.scp
index 5dc8757e96f3..648e61b624a8 100644
--- a/scp2/source/draw/folderitem_draw.scp
+++ b/scp2/source/draw/folderitem_draw.scp
@@ -35,6 +35,6 @@ End
FolderItemProperty gid_Fip_Sdraw_AppID
ShortcutID = gid_Folderitem_Sdraw;
Key = "System.AppUserModel.ID";
- Value = "TheDocumentFoundation.LibreOffice.Draw";
+ Value = "CIB.CIBOffice.Draw";
End
#endif
diff --git a/scp2/source/draw/registryitem_draw.scp b/scp2/source/draw/registryitem_draw.scp
index 93cadcaa1ca5..5155f5c1583d 100644
--- a/scp2/source/draw/registryitem_draw.scp
+++ b/scp2/source/draw/registryitem_draw.scp
@@ -282,7 +282,7 @@ RegistryItem gid_Regitem_Soffice_Stardrawdocument_6_AppUserModelID
ModuleID = gid_Module_Prg_Draw_Bin;
Subkey = "soffice.StarDrawDocument.6";
Name = "AppUserModelID";
- Value = "TheDocumentFoundation.LibreOffice.Draw";
+ Value = "CIB.CIBOffice.Draw";
End
RegistryItem gid_Regitem_Soffice_Stardrawdocument_6_FriendlyTypeName
@@ -395,7 +395,7 @@ RegistryItem gid_Regitem_Soffice_Stardrawtemplate_6_AppUserModelID
ModuleID = gid_Module_Prg_Draw_Bin;
Subkey = "soffice.StarDrawTemplate.6";
Name = "AppUserModelID";
- Value = "TheDocumentFoundation.LibreOffice.Draw";
+ Value = "CIB.CIBOffice.Draw";
End
RegistryItem gid_Regitem_Soffice_Stardrawtemplate_6_FriendlyTypeName
@@ -699,7 +699,7 @@ RegistryItem gid_Regitem_Openoffice_Drawdocument_1_AppUserModelID
ModuleID = gid_Module_Prg_Draw_Bin;
Subkey = "LibreOffice.DrawDocument.1";
Name = "AppUserModelID";
- Value = "TheDocumentFoundation.LibreOffice.Draw";
+ Value = "CIB.CIBOffice.Draw";
End
RegistryItem gid_Regitem_Openoffice_Drawdocument_1_FriendlyTypeName
@@ -902,7 +902,7 @@ RegistryItem gid_Regitem_Openoffice_Drawtemplate_1_AppUserModelID
ModuleID = gid_Module_Prg_Draw_Bin;
Subkey = "LibreOffice.DrawTemplate.1";
Name = "AppUserModelID";
- Value = "TheDocumentFoundation.LibreOffice.Draw";
+ Value = "CIB.CIBOffice.Draw";
End
RegistryItem gid_Regitem_Openoffice_Drawtemplate_1_FriendlyTypeName
diff --git a/scp2/source/impress/folderitem_impress.scp b/scp2/source/impress/folderitem_impress.scp
index c35221b533b4..c92768cdc00c 100644
--- a/scp2/source/impress/folderitem_impress.scp
+++ b/scp2/source/impress/folderitem_impress.scp
@@ -35,6 +35,6 @@ End
FolderItemProperty gid_Fip_Simpress_AppID
ShortcutID = gid_Folderitem_Simpress;
Key = "System.AppUserModel.ID";
- Value = "TheDocumentFoundation.LibreOffice.Impress";
+ Value = "CIB.CIBOffice.Impress";
End
#endif
diff --git a/scp2/source/impress/registryitem_impress.scp b/scp2/source/impress/registryitem_impress.scp
index be9ba5fea5b9..defd97360007 100644
--- a/scp2/source/impress/registryitem_impress.scp
+++ b/scp2/source/impress/registryitem_impress.scp
@@ -282,7 +282,7 @@ RegistryItem gid_Regitem_Soffice_Starimpressdocument_6_AppUserModelID
ModuleID = gid_Module_Prg_Impress_Bin;
Subkey = "soffice.StarImpressDocument.6";
Name = "AppUserModelID";
- Value = "TheDocumentFoundation.LibreOffice.Impress";
+ Value = "CIB.CIBOffice.Impress";
End
RegistryItem gid_Regitem_Soffice_Starimpressdocument_6_FriendlyTypeName
@@ -409,7 +409,7 @@ RegistryItem gid_Regitem_Soffice_Starimpresstemplate_6_AppUserModelID
ModuleID = gid_Module_Prg_Impress_Bin;
Subkey = "soffice.StarImpressTemplate.6";
Name = "AppUserModelID";
- Value = "TheDocumentFoundation.LibreOffice.Impress";
+ Value = "CIB.CIBOffice.Impress";
End
RegistryItem gid_Regitem_Soffice_Starimpresstemplate_6_FriendlyTypeName
@@ -714,7 +714,7 @@ RegistryItem gid_Regitem_Openoffice_Impressdocument_1_AppUserModelID
ModuleID = gid_Module_Prg_Impress_Bin;
Subkey = "LibreOffice.ImpressDocument.1";
Name = "AppUserModelID";
- Value = "TheDocumentFoundation.LibreOffice.Impress";
+ Value = "CIB.CIBOffice.Impress";
End
RegistryItem gid_Regitem_Openoffice_Impressdocument_1_FriendlyTypeName
@@ -931,7 +931,7 @@ RegistryItem gid_Regitem_Openoffice_Impresstemplate_1_AppUserModelID
ModuleID = gid_Module_Prg_Impress_Bin;
Subkey = "LibreOffice.ImpressTemplate.1";
Name = "AppUserModelID";
- Value = "TheDocumentFoundation.LibreOffice.Impress";
+ Value = "CIB.CIBOffice.Impress";
End
RegistryItem gid_Regitem_Openoffice_Impresstemplate_1_FriendlyTypeName
diff --git a/scp2/source/math/folderitem_math.scp b/scp2/source/math/folderitem_math.scp
index 44ddc078e47b..1c5b4615b209 100644
--- a/scp2/source/math/folderitem_math.scp
+++ b/scp2/source/math/folderitem_math.scp
@@ -35,6 +35,6 @@ End
FolderItemProperty gid_Fip_Smath_AppID
ShortcutID = gid_Folderitem_Smath;
Key = "System.AppUserModel.ID";
- Value = "TheDocumentFoundation.LibreOffice.Math";
+ Value = "CIB.CIBOffice.Math";
End
#endif
diff --git a/scp2/source/math/registryitem_math.scp b/scp2/source/math/registryitem_math.scp
index bf59735883d9..063f348e63fe 100644
--- a/scp2/source/math/registryitem_math.scp
+++ b/scp2/source/math/registryitem_math.scp
@@ -281,7 +281,7 @@ RegistryItem gid_Regitem_Soffice_Starmathdocument_6_AppUserModelID
ModuleID = gid_Module_Prg_Math_Bin;
Subkey = "soffice.StarMathDocument.6";
Name = "AppUserModelID";
- Value = "TheDocumentFoundation.LibreOffice.Math";
+ Value = "CIB.CIBOffice.Math";
End
RegistryItem gid_Regitem_Soffice_Starmathdocument_6_FriendlyTypeName
@@ -557,7 +557,7 @@ RegistryItem gid_Regitem_Openoffice_Mathdocument_1_AppUserModelID
ModuleID = gid_Module_Prg_Math_Bin;
Subkey = "LibreOffice.MathDocument.1";
Name = "AppUserModelID";
- Value = "TheDocumentFoundation.LibreOffice.Math";
+ Value = "CIB.CIBOffice.Math";
End
RegistryItem gid_Regitem_Openoffice_Mathdocument_1_FriendlyTypeName
diff --git a/scp2/source/ooo/folderitem_ooo.scp b/scp2/source/ooo/folderitem_ooo.scp
index a9f68ffd3dea..e683fd7b37d2 100644
--- a/scp2/source/ooo/folderitem_ooo.scp
+++ b/scp2/source/ooo/folderitem_ooo.scp
@@ -38,7 +38,7 @@ End
FolderItemProperty gid_Fip_LibreOffice_AppID
ShortcutID = gid_Folderitem_LibreOffice;
Key = "System.AppUserModel.ID";
- Value = "TheDocumentFoundation.LibreOffice.Startcenter";
+ Value = "CIB.CIBOffice.Startcenter";
End
FolderItem gid_Folderitem_Soffice_Desktop
@@ -63,7 +63,7 @@ End
FolderItemProperty gid_Fip_Soffice_Desktop_AppID
ShortcutID = gid_Folderitem_Soffice_Desktop;
Key = "System.AppUserModel.ID";
- Value = "TheDocumentFoundation.LibreOffice.Startcenter";
+ Value = "CIB.CIBOffice.Startcenter";
End
FolderItem gid_Folderitem_LibreOffice_SafeMode
@@ -86,5 +86,5 @@ End
FolderItemProperty gid_Fip_LibreOffice_SafeMode
ShortcutID = gid_Folderitem_LibreOffice_SafeMode;
Key = "System.AppUserModel.ID";
- Value = "TheDocumentFoundation.LibreOffice.SafeMode";
+ Value = "CIB.CIBOffice.SafeMode";
End
diff --git a/scp2/source/ooo/folderitem_ooo.ulf b/scp2/source/ooo/folderitem_ooo.ulf
index 22f8a37f7981..b5b06cd82c6a 100644
--- a/scp2/source/ooo/folderitem_ooo.ulf
+++ b/scp2/source/ooo/folderitem_ooo.ulf
@@ -26,4 +26,4 @@ en-US = "Open Document"
en-US = "%PRODUCTNAME (Safe Mode)"
[STR_FI_TOOLTIP_SOFFICE]
-en-US = "LibreOffice, the office productivity suite provided by The Document Foundation. See https://www.documentfoundation.org"
+en-US = "CIB Office, the office productivity suite provided by CIB software GmbH."
diff --git a/scp2/source/writer/folderitem_writer.scp b/scp2/source/writer/folderitem_writer.scp
index 306fc888d230..16d6475d39dc 100644
--- a/scp2/source/writer/folderitem_writer.scp
+++ b/scp2/source/writer/folderitem_writer.scp
@@ -35,6 +35,6 @@ End
FolderItemProperty gid_Fip_Swriter_AppID
ShortcutID = gid_Folderitem_Swriter;
Key = "System.AppUserModel.ID";
- Value = "TheDocumentFoundation.LibreOffice.Writer";
+ Value = "CIB.CIBOffice.Writer";
End
#endif
diff --git a/scp2/source/writer/registryitem_writer.scp b/scp2/source/writer/registryitem_writer.scp
index 98859a881836..8150f5bd6572 100644
--- a/scp2/source/writer/registryitem_writer.scp
+++ b/scp2/source/writer/registryitem_writer.scp
@@ -282,7 +282,7 @@ RegistryItem gid_Regitem_Soffice_Starwriterdocument_6_AppUserModelID
ModuleID = gid_Module_Prg_Wrt_Bin;
Subkey = "soffice.StarWriterDocument.6";
Name = "AppUserModelID";
- Value = "TheDocumentFoundation.LibreOffice.Writer";
+ Value = "CIB.CIBOffice.Writer";
End
RegistryItem gid_Regitem_Soffice_Starwriterdocument_6_FriendlyTypeName
@@ -402,7 +402,7 @@ RegistryItem gid_Regitem_Soffice_Starwriterglobaldocument_6_AppUserModelID
ModuleID = gid_Module_Prg_Wrt_Bin;
Subkey = "soffice.StarWriterGlobalDocument.6";
Name = "AppUserModelID";
- Value = "TheDocumentFoundation.LibreOffice.Writer";
+ Value = "CIB.CIBOffice.Writer";
End
RegistryItem gid_Regitem_Soffice_Starwriterglobaldocument_6_FriendlyTypeName
@@ -488,7 +488,7 @@ RegistryItem gid_Regitem_Soffice_Starwritertemplate_6_AppUserModelID
ModuleID = gid_Module_Prg_Wrt_Bin;
Subkey = "soffice.StarWriterTemplate.6";
Name = "AppUserModelID";
- Value = "TheDocumentFoundation.LibreOffice.Writer";
+ Value = "CIB.CIBOffice.Writer";
End
RegistryItem gid_Regitem_Soffice_Starwritertemplate_6_FriendlyTypeName
@@ -847,7 +847,7 @@ RegistryItem gid_Regitem_Openoffice_Writerdocument_1_AppUserModelID
ModuleID = gid_Module_Prg_Wrt_Bin;
Subkey = "LibreOffice.WriterDocument.1";
Name = "AppUserModelID";
- Value = "TheDocumentFoundation.LibreOffice.Writer";
+ Value = "CIB.CIBOffice.Writer";
End
RegistryItem gid_Regitem_Openoffice_Writerdocument_1_FriendlyTypeName
@@ -1096,7 +1096,7 @@ RegistryItem gid_Regitem_Openoffice_Writertemplate_1_AppUserModelID
ModuleID = gid_Module_Prg_Wrt_Bin;
Subkey = "LibreOffice.WriterTemplate.1";
Name = "AppUserModelID";
- Value = "TheDocumentFoundation.LibreOffice.Writer";
+ Value = "CIB.CIBOffice.Writer";
End
RegistryItem gid_Regitem_Openoffice_Writertemplate_1_FriendlyTypeName
@@ -1246,7 +1246,7 @@ RegistryItem gid_Regitem_Openoffice_Writerglobaldocument_1_AppUserModelID
ModuleID = gid_Module_Prg_Wrt_Bin;
Subkey = "LibreOffice.WriterGlobalDocument.1";
Name = "AppUserModelID";
- Value = "TheDocumentFoundation.LibreOffice.Writer";
+ Value = "CIB.CIBOffice.Writer";
End
RegistryItem gid_Regitem_Openoffice_Writerglobaldocument_1_FriendlyTypeName
@@ -1396,7 +1396,7 @@ RegistryItem gid_Regitem_Openoffice_WriterWebTemplate_1_AppUserModelID
ModuleID = gid_Module_Prg_Wrt_Bin;
Subkey = "LibreOffice.WriterWebTemplate.1";
Name = "AppUserModelID";
- Value = "TheDocumentFoundation.LibreOffice.Writer";
+ Value = "CIB.CIBOffice.Writer";
End
RegistryItem gid_Regitem_Openoffice_WriterWebTemplate_1_FriendlyTypeName
diff --git a/scripting/source/pyprov/mailmerge.py b/scripting/source/pyprov/mailmerge.py
index 079744007816..9b0e35ccdf42 100644
--- a/scripting/source/pyprov/mailmerge.py
+++ b/scripting/source/pyprov/mailmerge.py
@@ -49,7 +49,7 @@ from email.utils import formatdate
from email.utils import parseaddr
from socket import _GLOBAL_DEFAULT_TIMEOUT
-import sys, smtplib, imaplib, poplib
+import sys, ssl, smtplib, imaplib, poplib
dbg = False
# pythonloader looks for a static g_ImplementationHelper variable
@@ -105,7 +105,7 @@ class PyMailSMTPService(unohelper.Base, XSmtpService):
if dbg:
print("Timeout: " + str(tout), file=dbgout)
if port == 465:
- self.server = smtplib.SMTP_SSL(server, port,timeout=tout)
+ self.server = smtplib.SMTP_SSL(server, port, timeout=tout, context=ssl.create_default_context())
else:
self.server = smtplib.SMTP(server, port,timeout=tout)
@@ -121,7 +121,7 @@ class PyMailSMTPService(unohelper.Base, XSmtpService):
print("ConnectionType: " + connectiontype, file=dbgout)
if connectiontype.upper() == 'SSL' and port != 465:
self.server.ehlo()
- self.server.starttls()
+ self.server.starttls(context=ssl.create_default_context())
self.server.ehlo()
user = xAuthenticator.getUserName()
@@ -325,7 +325,7 @@ class PyMailIMAPService(unohelper.Base, XMailService):
print(connectiontype, file=dbgout)
print("BEFORE", file=dbgout)
if connectiontype.upper() == 'SSL':
- self.server = imaplib.IMAP4_SSL(server, port)
+ self.server = imaplib.IMAP4_SSL(server, port, ssl_context=ssl.create_default_context())
else:
self.server = imaplib.IMAP4(server, port)
print("AFTER", file=dbgout)
@@ -397,7 +397,7 @@ class PyMailPOP3Service(unohelper.Base, XMailService):
print(connectiontype, file=dbgout)
print("BEFORE", file=dbgout)
if connectiontype.upper() == 'SSL':
- self.server = poplib.POP3_SSL(server, port)
+ self.server = poplib.POP3_SSL(server, port, context=ssl.create_default_context())
else:
tout = xConnectionContext.getValueByName("Timeout")
if dbg:
diff --git a/scripting/source/pyprov/pythonscript.py b/scripting/source/pyprov/pythonscript.py
index 82973266a2b0..912f1b511185 100644
--- a/scripting/source/pyprov/pythonscript.py
+++ b/scripting/source/pyprov/pythonscript.py
@@ -21,7 +21,7 @@ import uno
import unohelper
import sys
import os
-import imp
+import types
import time
import ast
import platform
@@ -347,7 +347,7 @@ class ScriptContext(unohelper.Base):
# code = readTextFromStream( sfa.openFileRead( url ) )
# execute the module
-# entry = ModuleEntry( lastRead, imp.new_module("ooo_script_framework") )
+# entry = ModuleEntry( lastRead, types.ModuleType("ooo_script_framework") )
# entry.module.__dict__[GLOBAL_SCRIPTCONTEXT_NAME] = g_scriptContext
# entry.module.__file__ = url
# exec code in entry.module.__dict__
@@ -489,7 +489,7 @@ class ProviderContext:
src = ensureSourceState( src )
# execute the module
- entry = ModuleEntry( lastRead, imp.new_module("ooo_script_framework") )
+ entry = ModuleEntry( lastRead, types.ModuleType("ooo_script_framework") )
entry.module.__dict__[GLOBAL_SCRIPTCONTEXT_NAME] = self.scriptContext
code = None
@@ -583,7 +583,7 @@ class ScriptBrowseNode( unohelper.Base, XBrowseNode , XPropertySet, XInvocation,
if event.ActionCommand == "Run":
code = self.editor.getControl("EditorTextField").getText()
code = ensureSourceState( code )
- mod = imp.new_module("ooo_script_framework")
+ mod = types.ModuleType("ooo_script_framework")
mod.__dict__[GLOBAL_SCRIPTCONTEXT_NAME] = self.provCtx.scriptContext
exec(code, mod.__dict__)
values = mod.__dict__.get( CALLABLE_CONTAINER_NAME , None )
diff --git a/sd/qa/uitest/impress_tests/data/tdf153161_FlushToSave.odp b/sd/qa/uitest/impress_tests/data/tdf153161_FlushToSave.odp
new file mode 100644
index 000000000000..1fd5c20c2a52
--- /dev/null
+++ b/sd/qa/uitest/impress_tests/data/tdf153161_FlushToSave.odp
Binary files differ
diff --git a/sd/qa/uitest/impress_tests/tdf153161.py b/sd/qa/uitest/impress_tests/tdf153161.py
new file mode 100644
index 000000000000..23ffdef879d1
--- /dev/null
+++ b/sd/qa/uitest/impress_tests/tdf153161.py
@@ -0,0 +1,41 @@
+# -*- 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 libreoffice.uno.propertyvalue import mkPropertyValues
+from uitest.framework import UITestCase
+import org.libreoffice.unotest
+import pathlib
+
+def get_url_for_data_file(file_name):
+ return pathlib.Path(org.libreoffice.unotest.makeCopyFromTDOC(file_name)).as_uri()
+
+class TestTdf153161(UITestCase):
+
+ def testTdf153161(self):
+
+ document = self.ui_test.load_file(get_url_for_data_file('tdf153161_FlushToSave.odp'))
+ oldText = document.DrawPages[0].getByIndex(1).String
+ self.assertTrue(oldText.startswith('在没有版本控制系统的时期'))
+
+ xImpressDoc = self.xUITest.getTopFocusWindow()
+ xEditWin = xImpressDoc.getChild('impress_win')
+ xEditWin.executeAction('SELECT', mkPropertyValues({'OBJECT':'Unnamed Drawinglayer object 1'}))
+
+ # Type something, getting into text editing mode (appending) automatically
+ xEditWin.executeAction('TYPE', mkPropertyValues({'TEXT': 'Foo Bar'}))
+ xToolkit = self.xContext.ServiceManager.createInstance('com.sun.star.awt.Toolkit')
+ xToolkit.processEventsToIdle()
+ self.xUITest.executeCommand('.uno:Save')
+ self.xUITest.executeCommand('.uno:Reload')
+
+ # Reload and check that the edit was saved
+ document = self.ui_test.get_component()
+ self.assertEqual(oldText + 'Foo Bar', document.DrawPages[0].getByIndex(1).String)
+
+# vim: set shiftwidth=4 softtabstop=4 expandtab:
diff --git a/sd/qa/unit/tiledrendering/tiledrendering.cxx b/sd/qa/unit/tiledrendering/tiledrendering.cxx
index ff379531338f..a576c2a236bc 100644
--- a/sd/qa/unit/tiledrendering/tiledrendering.cxx
+++ b/sd/qa/unit/tiledrendering/tiledrendering.cxx
@@ -1337,8 +1337,8 @@ void SdTiledRenderingTest::testTdf102223()
EditView& rEditView = pView->GetTextEditOutlinerView()->GetEditView();
rEditView.SetSelection(ESelection(0, 0, 0, 3)); // start para, start char, end para, end char.
CPPUNIT_ASSERT_EQUAL(OUString("Red"), rEditView.GetSelected());
- const SvxFontHeightItem& rItem = rEditView.GetAttribs().Get(EE_CHAR_FONTHEIGHT);
- CPPUNIT_ASSERT_EQUAL(int(1411), static_cast<int>(rItem.GetHeight()));
+ CPPUNIT_ASSERT_EQUAL(
+ int(1411), static_cast<int>(rEditView.GetAttribs().Get(EE_CHAR_FONTHEIGHT).GetHeight()));
// cut contents of cell
uno::Sequence<beans::PropertyValue> aArgs;
@@ -1349,8 +1349,8 @@ void SdTiledRenderingTest::testTdf102223()
CPPUNIT_ASSERT(pView->GetTextEditObject());
EditView& rEditView2 = pView->GetTextEditOutlinerView()->GetEditView();
rEditView2.SetSelection(ESelection(0, 0, 0, 1)); // start para, start char, end para, end char.
- const SvxFontHeightItem& rItem2 = rEditView2.GetAttribs().Get(EE_CHAR_FONTHEIGHT);
- CPPUNIT_ASSERT_EQUAL(int(1411), static_cast<int>(rItem2.GetHeight()));
+ CPPUNIT_ASSERT_EQUAL(
+ int(1411), static_cast<int>(rEditView2.GetAttribs().Get(EE_CHAR_FONTHEIGHT).GetHeight()));
}
void SdTiledRenderingTest::testPostKeyEventInvalidation()
diff --git a/sd/source/filter/xml/sdxmlwrp.cxx b/sd/source/filter/xml/sdxmlwrp.cxx
index f23eabd0f6c8..261b87634a90 100644
--- a/sd/source/filter/xml/sdxmlwrp.cxx
+++ b/sd/source/filter/xml/sdxmlwrp.cxx
@@ -747,7 +747,7 @@ bool SdXMLFilter::Import( ErrCode& nError )
if( !sBuildId.isEmpty() )
{
sal_Int32 nIndex = sBuildId.indexOf('$');
- if( nIndex != -1 )
+ if (sBuildId.indexOf(';') == -1 && nIndex != -1)
{
sal_Int32 nUPD = sBuildId.copy( 0, nIndex ).toInt32();
diff --git a/sd/source/ui/app/sdmod1.cxx b/sd/source/ui/app/sdmod1.cxx
index 3d84ddb0da56..8d42653545ea 100644
--- a/sd/source/ui/app/sdmod1.cxx
+++ b/sd/source/ui/app/sdmod1.cxx
@@ -32,6 +32,7 @@
#include <sfx2/dispatch.hxx>
#include <sfx2/request.hxx>
#include <sfx2/templatedlg.hxx>
+#include <svl/stritem.hxx>
#include <editeng/eeitem.hxx>
#include <svx/svxids.hrc>
@@ -193,26 +194,32 @@ void SdModule::Execute(SfxRequest& rReq)
{
bool bIntercept = false;
::sd::DrawDocShell* pDocShell = dynamic_cast< ::sd::DrawDocShell *>( SfxObjectShell::Current() );
- if (pDocShell)
+ ::sd::ViewShell* pViewShell = pDocShell ? pDocShell->GetViewShell() : nullptr;
+ if (pViewShell)
{
- ::sd::ViewShell* pViewShell = pDocShell->GetViewShell();
- if (pViewShell)
+ if( sd::SlideShow::IsRunning( pViewShell->GetViewShellBase() ) )
{
- if( sd::SlideShow::IsRunning( pViewShell->GetViewShellBase() ) )
+ // Prevent documents from opening while the slide
+ // show is running, except when this request comes
+ // from a shape interaction.
+ if (rReq.GetArgs() == nullptr)
{
- // Prevent documents from opening while the slide
- // show is running, except when this request comes
- // from a shape interaction.
- if (rReq.GetArgs() == nullptr)
- {
- bIntercept = true;
- }
+ bIntercept = true;
}
}
}
if (!bIntercept)
{
+ if (const SfxStringItem* pURLItem = rReq.GetArg<SfxStringItem>(SID_FILE_NAME))
+ {
+ if (!pViewShell || !SfxObjectShell::AllowedLinkProtocolFromDocument(pURLItem->GetValue(),
+ pViewShell->GetObjectShell(),
+ pViewShell->GetFrameWeld()))
+ {
+ return;
+ }
+ }
SfxGetpApp()->ExecuteSlot(rReq, SfxGetpApp()->GetInterface());
}
else
diff --git a/sd/source/ui/remotecontrol/Receiver.cxx b/sd/source/ui/remotecontrol/Receiver.cxx
index 3c0309e9e461..815c53ef4d35 100644
--- a/sd/source/ui/remotecontrol/Receiver.cxx
+++ b/sd/source/ui/remotecontrol/Receiver.cxx
@@ -78,6 +78,12 @@ void Receiver::executeCommand( const std::vector<OString> &aCommand )
{
}
+ if (aCommand.empty())
+ {
+ SAL_WARN("sdremote", "Receiver::executeCommand: no command");
+ return;
+ }
+
if ( aCommand[0] == "transition_next" )
{
if ( xSlideShowController.is() )
@@ -90,6 +96,11 @@ void Receiver::executeCommand( const std::vector<OString> &aCommand )
}
else if ( aCommand[0] == "goto_slide" )
{
+ if (aCommand.size() < 2)
+ {
+ SAL_WARN("sdremote", "Receiver::executeCommand: invalid goto_slide");
+ return;
+ }
// FIXME: if 0 returned, then not a valid number
sal_Int32 aSlide = aCommand[1].toInt32();
if ( xSlideShowController.is() &&
@@ -122,6 +133,11 @@ void Receiver::executeCommand( const std::vector<OString> &aCommand )
}
else if (aCommand[0] == "pointer_started" )
{
+ if (aCommand.size() < 3)
+ {
+ SAL_WARN("sdremote", "Receiver::executeCommand: invalid pointer_started");
+ return;
+ }
// std::cerr << "pointer_started" << std::endl;
float x = aCommand[1].toFloat();
float y = aCommand[2].toFloat();
@@ -176,6 +192,11 @@ void Receiver::executeCommand( const std::vector<OString> &aCommand )
}
else if (aCommand[0] == "pointer_coordination" )
{
+ if (aCommand.size() < 3)
+ {
+ SAL_WARN("sdremote", "Receiver::executeCommand: invalid pointer_coordination");
+ return;
+ }
float x = aCommand[1].toFloat();
float y = aCommand[2].toFloat();
diff --git a/sdext/Executable_xpdfimport.mk b/sdext/Executable_xpdfimport.mk
index 360358d450d2..7b951a2cd0c6 100644
--- a/sdext/Executable_xpdfimport.mk
+++ b/sdext/Executable_xpdfimport.mk
@@ -22,6 +22,10 @@ $(eval $(call gb_Executable_add_exception_objects,xpdfimport,\
sdext/source/pdfimport/xpdfwrapper/wrapper_gpl \
))
+$(eval $(call gb_Executable_use_system_win32_libs,xpdfimport,\
+ shell32 \
+))
+
$(eval $(call gb_Executable_add_default_nativeres,xpdfimport))
# vim:set noet sw=4 ts=4:
diff --git a/sdext/source/pdfimport/wrapper/wrapper.cxx b/sdext/source/pdfimport/wrapper/wrapper.cxx
index 3d36e77110be..ad25b2edd85b 100644
--- a/sdext/source/pdfimport/wrapper/wrapper.cxx
+++ b/sdext/source/pdfimport/wrapper/wrapper.cxx
@@ -486,12 +486,6 @@ void Parser::parseFontFamilyName( FontAttributes& rResult )
const sal_Unicode* pCopy = rResult.familyName.getStr();
sal_Int32 nLen = rResult.familyName.getLength();
- // parse out truetype subsets (e.g. BAAAAA+Thorndale)
- if( nLen > 8 && pCopy[6] == '+' )
- {
- pCopy += 7;
- nLen -= 7;
- }
// TODO: Looks like this block needs to be refactored
while( nLen )
@@ -613,52 +607,6 @@ void Parser::readFont()
// extract textual attributes (bold, italic in the name, etc.)
parseFontFamilyName(aResult);
- // need to read font file?
- if( nFileLen )
- {
- uno::Sequence<sal_Int8> aFontFile(nFileLen);
- readBinaryData( aFontFile );
-
- awt::FontDescriptor aFD;
- uno::Sequence< uno::Any > aArgs(1);
- aArgs[0] <<= aFontFile;
-
- try
- {
- uno::Reference< beans::XMaterialHolder > xMat(
- m_xContext->getServiceManager()->createInstanceWithArgumentsAndContext(
- "com.sun.star.awt.FontIdentificator", aArgs, m_xContext ),
- uno::UNO_QUERY );
- if( xMat.is() )
- {
- uno::Any aRes( xMat->getMaterial() );
- if( aRes >>= aFD )
- {
- if (!aFD.Name.isEmpty())
- {
- aResult.familyName = aFD.Name;
- parseFontFamilyName(aResult);
- }
- aResult.isBold = (aFD.Weight > 100.0);
- aResult.isItalic = (aFD.Slant == awt::FontSlant_OBLIQUE ||
- aFD.Slant == awt::FontSlant_ITALIC );
- aResult.isUnderline = false;
- aResult.size = 0;
- }
- }
- }
- catch( uno::Exception& )
- {
- }
-
- if( aResult.familyName.isEmpty() )
- {
- // last fallback
- aResult.familyName = "Arial";
- aResult.isUnderline = false;
- }
-
- }
if (!m_xDev)
m_xDev.disposeAndReset(VclPtr<VirtualDevice>::Create());
diff --git a/sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.cxx b/sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.cxx
index 16ad04bf660a..676aefe91859 100644
--- a/sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.cxx
+++ b/sdext/source/pdfimport/xpdfwrapper/pdfioutdev_gpl.cxx
@@ -432,14 +432,19 @@ int PDFOutDev::parseFont( long long nNewId, GfxFont* gfxFont, GfxState* state )
FontAttributes aNewFont;
int nSize = 0;
-#if POPPLER_CHECK_VERSION(0, 64, 0)
- const
+#if POPPLER_CHECK_VERSION(20, 12, 0)
+ std::string familyName = gfxFont->getNameWithoutSubsetTag();
+#else
+ std::string familyName = gfxFont->getName()->toStr();
+ if (familyName.length() > 7 && familyName.at(6) == '+')
+ {
+ familyName = familyName.substr(7);
+ }
#endif
- GooString* pFamily = gfxFont->getName();
- if( pFamily )
+ if( familyName != "" )
{
aNewFont.familyName.clear();
- aNewFont.familyName.append( gfxFont->getName() );
+ aNewFont.familyName.append( familyName );
}
else
{
@@ -456,12 +461,21 @@ int PDFOutDev::parseFont( long long nNewId, GfxFont* gfxFont, GfxState* state )
{
// TODO(P3): Unfortunately, need to read stream twice, since
// we must write byte count to stdout before
+#if POPPLER_CHECK_VERSION(22, 6, 0)
+ std::optional<std::vector<unsigned char>> pBuf = gfxFont->readEmbFontFile( m_pDoc->getXRef() );
+ if ( pBuf )
+ {
+ aNewFont.isEmbedded = true;
+ nSize = pBuf->size();
+ }
+#else
char* pBuf = gfxFont->readEmbFontFile( m_pDoc->getXRef(), &nSize );
if( pBuf )
{
aNewFont.isEmbedded = true;
gfree(pBuf);
}
+#endif
}
m_aFontMap[ nNewId ] = aNewFont;
@@ -474,13 +488,29 @@ void PDFOutDev::writeFontFile( GfxFont* gfxFont ) const
return;
int nSize = 0;
+#if POPPLER_CHECK_VERSION(22, 6, 0)
+ std::optional<std::vector<unsigned char>> pBuf = gfxFont->readEmbFontFile( m_pDoc->getXRef() );
+ if ( pBuf )
+ nSize = pBuf->size();
+ if ( nSize == 0 )
+ return;
+#else
char* pBuf = gfxFont->readEmbFontFile( m_pDoc->getXRef(), &nSize );
if( !pBuf )
return;
+#endif
// ---sync point--- see SYNC STREAMS above
fflush(stdout);
+#if POPPLER_CHECK_VERSION(22, 6, 0)
+ if( fwrite(pBuf->data(), sizeof(*pBuf->data()), nSize, g_binary_out) != static_cast<size_t>(nSize) )
+ {
+ exit(1); // error
+ }
+ // ---sync point--- see SYNC STREAMS above
+ fflush(g_binary_out);
+#else
if( fwrite(pBuf, sizeof(char), nSize, g_binary_out) != static_cast<size_t>(nSize) )
{
gfree(pBuf);
@@ -489,6 +519,7 @@ void PDFOutDev::writeFontFile( GfxFont* gfxFont ) const
// ---sync point--- see SYNC STREAMS above
fflush(g_binary_out);
gfree(pBuf);
+#endif
}
#if POPPLER_CHECK_VERSION(0, 83, 0)
@@ -635,8 +666,15 @@ void PDFOutDev::updateLineDash(GfxState *state)
return;
assert(state);
- double* dashArray; int arrayLen; double startOffset;
+ int arrayLen; double startOffset;
+#if POPPLER_CHECK_VERSION(22, 9, 0)
+ const std::vector<double> &dash = state->getLineDash(&startOffset);
+ const double* dashArray = dash.data();
+ arrayLen = dash.size();
+#else
+ double* dashArray;
state->getLineDash(&dashArray, &arrayLen, &startOffset);
+#endif
printf( "updateLineDash" );
if( arrayLen && dashArray )
@@ -742,7 +780,11 @@ void PDFOutDev::updateFont(GfxState *state)
{
assert(state);
+#if POPPLER_CHECK_VERSION(22, 6, 0)
+ GfxFont *gfxFont = state->getFont().get();
+#else
GfxFont *gfxFont = state->getFont();
+#endif
if( !gfxFont )
return;
@@ -786,9 +828,6 @@ void PDFOutDev::updateFont(GfxState *state)
aEsc.data() );
}
printf( "\n" );
-
- if( nEmbedSize )
- writeFontFile(gfxFont);
}
void PDFOutDev::updateRender(GfxState *state)
diff --git a/sdext/source/pdfimport/xpdfwrapper/wrapper_gpl.cxx b/sdext/source/pdfimport/xpdfwrapper/wrapper_gpl.cxx
index b1a54bd09c5f..3ab3381652cd 100644
--- a/sdext/source/pdfimport/xpdfwrapper/wrapper_gpl.cxx
+++ b/sdext/source/pdfimport/xpdfwrapper/wrapper_gpl.cxx
@@ -119,6 +119,15 @@ int main(int argc, char **argv)
_setmode( _fileno( g_binary_out ), _O_BINARY );
#endif
+#if POPPLER_CHECK_VERSION(22, 6, 0)
+ PDFDoc aDoc( std::make_unique<GooString>(pFileName),
+ std::optional<GooString>(pOwnerPasswordStr),
+ std::optional<GooString>(pUserPasswordStr) );
+
+ PDFDoc aErrDoc( std::make_unique<GooString>(pErrFileName),
+ std::optional<GooString>(pOwnerPasswordStr),
+ std::optional<GooString>(pUserPasswordStr) );
+#else
PDFDoc aDoc( pFileName,
pOwnerPasswordStr,
pUserPasswordStr );
@@ -126,6 +135,7 @@ int main(int argc, char **argv)
PDFDoc aErrDoc( pErrFileName,
pOwnerPasswordStr,
pUserPasswordStr );
+#endif
// Check various permissions for aDoc.
PDFDoc &rDoc = aDoc.isOk()? aDoc: aErrDoc;
diff --git a/setup_native/source/packinfo/packinfo_brand.txt b/setup_native/source/packinfo/packinfo_brand.txt
index 97b5d8cc4fca..b4909fc6c266 100644
--- a/setup_native/source/packinfo/packinfo_brand.txt
+++ b/setup_native/source/packinfo/packinfo_brand.txt
@@ -22,12 +22,15 @@ solarispackagename = "%WITHOUTDOTUNIXPACKAGENAME%BRANDPACKAGEVERSION"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION"
requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-images %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
solarisrequires = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure (Name="UNO Runtime Environment"), %BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-core (Name="Core module for %PRODUCTNAME %PRODUCTVERSION"), %BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-images (Name="Images module for %PRODUCTNAME %PRODUCTVERSION")"
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycib6.4"
+linuxincompat = "libreofficepoweredbycib6.4"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Brand module for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
+provides = "libreofficepoweredbycib6.4"
End
Start
@@ -36,12 +39,15 @@ solarispackagename = "%WITHOUTDOTUNIXPACKAGENAME%BRANDPACKAGEVERSION-writer"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-writer"
requires = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-writer %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
solarisrequires = "%WITHOUTDOTUNIXPACKAGENAME%BRANDPACKAGEVERSION,%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-writer"
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycib6.4-writer"
+linuxincompat = "libreofficepoweredbycib6.4-writer"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Writer brand module for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
+provides = "libreofficepoweredbycib6.4-writer"
End
Start
@@ -50,12 +56,15 @@ solarispackagename = "%WITHOUTDOTUNIXPACKAGENAME%BRANDPACKAGEVERSION-calc"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-calc"
requires = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-calc %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
solarisrequires = "%WITHOUTDOTUNIXPACKAGENAME%BRANDPACKAGEVERSION,%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-calc"
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycib6.4-calc"
+linuxincompat = "libreofficepoweredbycib6.4-calc"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Calc brand module for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
+provides = "libreofficepoweredbycib6.4-calc"
End
Start
@@ -64,12 +73,15 @@ solarispackagename = "%WITHOUTDOTUNIXPACKAGENAME%BRANDPACKAGEVERSION-impress"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-impress"
requires = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-impress %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
solarisrequires = "%WITHOUTDOTUNIXPACKAGENAME%BRANDPACKAGEVERSION,%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-impress"
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycib6.4-impress"
+linuxincompat = "libreofficepoweredbycib6.4-impress"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Impress brand module for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
+provides = "libreofficepoweredbycib6.4-impress"
End
Start
@@ -78,12 +90,15 @@ solarispackagename = "%WITHOUTDOTUNIXPACKAGENAME%BRANDPACKAGEVERSION-draw"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-draw"
requires = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-draw %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
solarisrequires = "%WITHOUTDOTUNIXPACKAGENAME%BRANDPACKAGEVERSION,%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-draw"
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycib6.4-draw"
+linuxincompat = "libreofficepoweredbycib6.4-draw"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Draw brand module for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
+provides = "libreofficepoweredbycib6.4-draw"
End
Start
@@ -92,12 +107,15 @@ solarispackagename = "%WITHOUTDOTUNIXPACKAGENAME%BRANDPACKAGEVERSION-math"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-math"
requires = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-math %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
solarisrequires = "%WITHOUTDOTUNIXPACKAGENAME%BRANDPACKAGEVERSION,%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-math"
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycib6.4-math"
+linuxincompat = "libreofficepoweredbycib6.4-math"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Math brand module for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
+provides = "libreofficepoweredbycib6.4-math"
End
Start
@@ -106,12 +124,15 @@ solarispackagename = "%WITHOUTDOTUNIXPACKAGENAME%BRANDPACKAGEVERSION-base"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-base"
requires = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-base %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
solarisrequires = "%WITHOUTDOTUNIXPACKAGENAME%BRANDPACKAGEVERSION,%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-base"
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycib6.4-base"
+linuxincompat = "libreofficepoweredbycib6.4-base"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Base brand module for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
+provides = "libreofficepoweredbycib6.4-base"
End
Start
@@ -120,10 +141,13 @@ solarispackagename = "%WITHOUTDOTUNIXPACKAGENAME%BRANDPACKAGEVERSION-%LANGUAGEST
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-%LANGUAGESTRING"
requires = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-%LANGUAGESTRING %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
solarisrequires = "%WITHOUTDOTUNIXPACKAGENAME%BRANDPACKAGEVERSION,%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-%LANGUAGESTRING (Name="Language module for %PRODUCTNAME %PRODUCTVERSION\, language %LANGUAGESTRING")"
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycib6.4-%LANGUAGESTRING"
+linuxincompat = "libreofficepoweredbycib6.4-%LANGUAGESTRING"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Brand language module for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
+provides = "libreofficepoweredbycib6.4-%LANGUAGESTRING"
End
diff --git a/setup_native/source/packinfo/packinfo_extensions.txt b/setup_native/source/packinfo/packinfo_extensions.txt
index 4bd5b97c0cda..bb50dec0f3a6 100644
--- a/setup_native/source/packinfo/packinfo_extensions.txt
+++ b/setup_native/source/packinfo/packinfo_extensions.txt
@@ -41,9 +41,11 @@ solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-core (Name="Cor
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-extension-mediawiki-publisher"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycibbasis6.4-extension-mediawiki-publisher"
+linuxincompat = "libreofficepoweredbycibbasis6.4-extension-mediawiki-publisher"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "MediaWiki publisher extension for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -58,7 +60,7 @@ requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERS
linuxpatchrequires = ""
copyright = "2009 by FSF.hu"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Numbertext extension for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -73,7 +75,7 @@ requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERS
linuxpatchrequires = ""
copyright = "Copyright (c) 2008 Cor Nouws"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "ConvertTextToNumber extension for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -86,9 +88,11 @@ solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-core (Name="Cor
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-extension-nlpsolver"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycibbasis6.4-extension-nlpsolver"
+linuxincompat = "libreofficepoweredbycibbasis6.4-extension-nlpsolver"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "NLPSolver extension for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -103,7 +107,7 @@ requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERS
linuxpatchrequires = ""
copyright = "2005-2009 by Daniel Naber"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "LanguageTool extension for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -116,9 +120,11 @@ solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-core (Name="Cor
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-extension-beanshell-script-provider"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycibbasis6.4-extension-beanshell-script-provider"
+linuxincompat = "libreofficepoweredbycibbasis6.4-extension-beanshell-script-provider"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Script provider for BeanShell extension for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -131,9 +137,11 @@ solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-core (Name="Cor
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-extension-javascript-script-provider"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycibbasis6.4-extension-javascript-script-provider"
+linuxincompat = "libreofficepoweredbycibbasis6.4-extension-javascript-script-provider"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Script provider for JavaScript extension for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
diff --git a/setup_native/source/packinfo/packinfo_office.txt b/setup_native/source/packinfo/packinfo_office.txt
index 956a55ef6b9a..48a1b1be91ae 100644
--- a/setup_native/source/packinfo/packinfo_office.txt
+++ b/setup_native/source/packinfo/packinfo_office.txt
@@ -47,9 +47,11 @@ packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-gnome-integration"
freebsdrequires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
findrequires = ""
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycibbasis6.4-gnome-integration"
+linuxincompat = "libreofficepoweredbycibbasis6.4-gnome-integration"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "GNOME integration module for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -62,9 +64,9 @@ solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-core"
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-tde-integration"
freebsdrequires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "TDE integration module for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -77,30 +79,35 @@ solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-core"
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-kde-integration"
freebsdrequires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycibbasis6.4-kde-integration"
+linuxincompat = "libreofficepoweredbycibbasis6.4-kde-integration"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "KDE integration module for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
+provides = "libreofficepoweredbycibbasis6.4-kde-integration"
End
Start
module = "gid_Module_Root"
solarispackagename = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-core"
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core"
-linuxreplaces = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core01, %BASISPACKAGEPREFIX%PRODUCTVERSION-core02, %BASISPACKAGEPREFIX%PRODUCTVERSION-core03, %BASISPACKAGEPREFIX%PRODUCTVERSION-core04, %BASISPACKAGEPREFIX%PRODUCTVERSION-core05, %BASISPACKAGEPREFIX%PRODUCTVERSION-core06, %BASISPACKAGEPREFIX%PRODUCTVERSION-core07"
+linuxreplaces = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core01, %BASISPACKAGEPREFIX%PRODUCTVERSION-core02, %BASISPACKAGEPREFIX%PRODUCTVERSION-core03, %BASISPACKAGEPREFIX%PRODUCTVERSION-core04, %BASISPACKAGEPREFIX%PRODUCTVERSION-core05, %BASISPACKAGEPREFIX%PRODUCTVERSION-core06, %BASISPACKAGEPREFIX%PRODUCTVERSION-core07, libreofficepoweredbycibbasis6.4-core"
+linuxincompat = "libreofficepoweredbycibbasis6.4-core"
requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION, %BASISPACKAGEPREFIX%PRODUCTVERSION-ooofonts %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
solarisrequires = "SUNWcar, SUNWkvm, SUNWcsr, SUNWcsu, SUNWcsd, SUNWcsl,
SUNWxwrtl, SUNWxwplt, SUNWlibC, %SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure, %BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-ooofonts"
freebsdrequires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-ooofonts"
findrequires = "find-requires-x11.sh"
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Core module for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
+provides = "libreofficepoweredbycibbasis6.4-core"
End
Start
@@ -110,9 +117,11 @@ packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-writer"
solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-core, SUNWlibC"
freebsdrequires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycibbasis6.4-writer"
+linuxincompat = "libreofficepoweredbycibbasis6.4-writer"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Writer module for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -125,9 +134,11 @@ solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-core, SUNWlibC"
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-calc"
freebsdrequires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycibbasis6.4-calc"
+linuxincompat = "libreofficepoweredbycibbasis6.4-calc"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Calc module for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -140,9 +151,11 @@ solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-core, SUNWlibC"
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-draw"
freebsdrequires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycibbasis6.4-draw"
+linuxincompat = "libreofficepoweredbycibbasis6.4-draw"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Draw module for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -155,9 +168,11 @@ solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-core, SUNWlibC"
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-impress"
freebsdrequires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycibbasis6.4-impress"
+linuxincompat = "libreofficepoweredbycibbasis6.4-impress"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Impress module for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -170,9 +185,11 @@ solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-core, SUNWlibC"
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-base"
freebsdrequires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycibbasis6.4-base"
+linuxincompat = "libreofficepoweredbycibbasis6.4-base"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Base module for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -185,9 +202,11 @@ solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-core, SUNWlibC"
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-math"
freebsdrequires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycibbasis6.4-math"
+linuxincompat = "libreofficepoweredbycibbasis6.4-math"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Math module for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -200,9 +219,11 @@ solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-core"
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-firebird"
freebsdrequires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core"
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycibbasis6.4-firebird"
+linuxincompat = "libreofficepoweredbycibbasis6.4-firebird"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Firebird module for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -215,9 +236,11 @@ solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-core"
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-graphicfilter"
freebsdrequires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycibbasis6.4-graphicfilter"
+linuxincompat = "libreofficepoweredbycibbasis6.4-graphicfilter"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Graphic filter module for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -230,9 +253,11 @@ solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-core"
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-xsltfilter"
freebsdrequires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycibbasis6.4-xsltfilter"
+linuxincompat = "libreofficepoweredbycibbasis6.4-xsltfilter"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "XSLT filter samples module for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -245,9 +270,9 @@ solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-core"
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-activex"
freebsdrequires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "ActiveX control for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -259,9 +284,9 @@ solarispackagename = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-onlineupdate"
solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-core, SUNWlibC, SUNWgzip"
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-onlineupdate"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Online update module for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -272,13 +297,13 @@ module = "gid_Module_Pyuno"
solarispackagename = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-pyuno"
solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-core, SUNWPython"
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-pyuno"
-linuxreplaces = "%BASISPACKAGEPREFIX%PRODUCTVERSION-librelogo"
-linuxincompat = "%BASISPACKAGEPREFIX%PRODUCTVERSION-librelogo"
+linuxreplaces = "%BASISPACKAGEPREFIX%PRODUCTVERSION-librelogo, libreofficepoweredbycibbasis6.4-pyuno"
+linuxincompat = "%BASISPACKAGEPREFIX%PRODUCTVERSION-librelogo, libreofficepoweredbycibbasis6.4-pyuno"
freebsdrequires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Pyuno module for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -291,9 +316,11 @@ solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-core (Name="Cor
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-python-script-provider"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
freebsdrequires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core"
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycibbasis6.4-python-script-provider"
+linuxincompat = "libreofficepoweredbycibbasis6.4-python-script-provider"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Script provider for Python for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -306,9 +333,11 @@ solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-core"
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-images"
freebsdrequires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycibbasis6.4-images"
+linuxincompat = "libreofficepoweredbycibbasis6.4-images"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Images module for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -321,9 +350,11 @@ solarisrequires = ""
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-ooofonts"
freebsdrequires = ""
requires = ""
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycibbasis6.4-ooofonts"
+linuxincompat = "libreofficepoweredbycibbasis6.4-ooofonts"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "3rd party free fonts for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -336,9 +367,11 @@ solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-core"
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-ooolinguistic"
freebsdrequires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycibbasis6.4-ooolinguistic"
+linuxincompat = "libreofficepoweredbycibbasis6.4-ooolinguistic"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Linguistic module for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -351,9 +384,9 @@ solarisrequires = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure, %BASISPACKAGEP
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-af"
requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Af dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -368,7 +401,7 @@ requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVE
linuxpatchrequires = ""
copyright = "2011 Santiago Paricio, Juan Pablo Martinez"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "An dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -428,7 +461,7 @@ requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVE
linuxpatchrequires = ""
copyright = "2002 Dr Abhijit Das, 2002 Taneem Ahmed, 2008 Jamil Ahmed"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Bn dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -443,7 +476,7 @@ requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVE
linuxpatchrequires = ""
copyright = "2016 Elie Roux"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Bo dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -486,9 +519,9 @@ solarisrequires = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure, %BASISPACKAGEP
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-ca"
requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Ca dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -501,9 +534,9 @@ solarisrequires = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure, %BASISPACKAGEP
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-cs"
requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Cs dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -516,9 +549,9 @@ solarisrequires = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure, %BASISPACKAGEP
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-da"
requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Da dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -531,9 +564,11 @@ solarisrequires = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure, %BASISPACKAGEP
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-de"
requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycib6.4-dict-de"
+linuxincompat = "libreofficepoweredbycib6.4-dict-de"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "De dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -546,9 +581,11 @@ solarisrequires = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure, %BASISPACKAGEP
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-en"
requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycib6.4-dict-en"
+linuxincompat = "libreofficepoweredbycib6.4-dict-en"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "En dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -563,7 +600,7 @@ requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVE
linuxpatchrequires = ""
copyright = "2002 by Evripidis Papakostas, 2006 by Steve Stavropoulos"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "El dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -576,9 +613,11 @@ solarisrequires = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure, %BASISPACKAGEP
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-es"
requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycib6.4-dict-es"
+linuxincompat = "libreofficepoweredbycib6.4-dict-es"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Es dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -591,9 +630,9 @@ solarisrequires = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure, %BASISPACKAGEP
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-et"
requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Et dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -606,9 +645,11 @@ solarisrequires = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure, %BASISPACKAGEP
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-fr"
requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycib6.4-dict-fr"
+linuxincompat = "libreofficepoweredbycib6.4-dict-fr"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Fr dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -636,9 +677,9 @@ solarisrequires = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure, %BASISPACKAGEP
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-gl"
requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Gl dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -653,7 +694,7 @@ requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVE
linuxpatchrequires = ""
copyright = "2009 by Kartik Mistry"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Gu dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -666,9 +707,9 @@ solarisrequires = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure, %BASISPACKAGEP
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-he"
requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "He dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -683,7 +724,7 @@ requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVE
linuxpatchrequires = ""
copyright = "2005 Swapnil {Hajare, Sant}"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Hi dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -696,9 +737,9 @@ solarisrequires = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure, %BASISPACKAGEP
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-hu"
requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Hu dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -713,7 +754,7 @@ requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVE
linuxpatchrequires = ""
copyright = "2003-2010 by Denis Lackovic"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Hr dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -726,9 +767,9 @@ solarisrequires = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure, %BASISPACKAGEP
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-id"
requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Indonesian dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -741,7 +782,7 @@ solarisrequires = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure, %BASISPACKAGEP
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-is"
requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
vendor = "The hunspell-is project"
description = "Is dictionary for %PRODUCTNAME %PRODUCTVERSION"
@@ -756,9 +797,11 @@ solarisrequires = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure, %BASISPACKAGEP
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-it"
requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycib6.4-dict-it"
+linuxincompat = "libreofficepoweredbycib6.4-dict-it"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "It dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -771,9 +814,9 @@ solarisrequires = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure, %BASISPACKAGEP
packagename = "%UNIXPRODUCTNAME%BRANDPACKAGEVERSION-dict-kmr-Latn"
requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%UNIXPRODUCTNAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Kmr-Latn dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -788,7 +831,7 @@ requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVE
linuxpatchrequires = ""
copyright = "2013 by Brian Eugene Wilson, Robert Martin Campbell"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Lo dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -801,9 +844,9 @@ solarisrequires = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure, %BASISPACKAGEP
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-lt"
requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Lt dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -831,9 +874,9 @@ solarisrequires = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure, %BASISPACKAGEP
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-ne"
requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Ne dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -846,9 +889,9 @@ solarisrequires = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure, %BASISPACKAGEP
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-nl"
requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Nl dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -861,9 +904,9 @@ solarisrequires = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure, %BASISPACKAGEP
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-no"
requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "No dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -891,9 +934,9 @@ solarisrequires = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure, %BASISPACKAGEP
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-pl"
requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Pl dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -906,9 +949,9 @@ solarisrequires = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure, %BASISPACKAGEP
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-pt-BR"
requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Pt-BR dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -921,9 +964,9 @@ solarisrequires = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure, %BASISPACKAGEP
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-pt-PT"
requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Pt-PT dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -936,9 +979,9 @@ solarisrequires = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure, %BASISPACKAGEP
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-ro"
requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Ro dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -951,9 +994,11 @@ solarisrequires = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure, %BASISPACKAGEP
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-ru"
requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycib6.4-dict-ru"
+linuxincompat = "libreofficepoweredbycib6.4-dict-ru"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Ru dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -968,7 +1013,7 @@ requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVE
linuxpatchrequires = ""
copyright = "2010 by Laknath Semage"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Si dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -981,9 +1026,9 @@ solarisrequires = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure, %BASISPACKAGEP
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-sk"
requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Sk dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -996,9 +1041,9 @@ solarisrequires = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure, %BASISPACKAGEP
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-sl"
requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Sl dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -1013,7 +1058,7 @@ requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVE
linuxpatchrequires = ""
copyright = "2011 by Luan Kelmendi"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Sq dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -1026,9 +1071,9 @@ solarisrequires = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure, %BASISPACKAGEP
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-sr"
requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Sr dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -1041,9 +1086,9 @@ solarisrequires = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure, %BASISPACKAGEP
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-sv"
requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Sv dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -1056,9 +1101,9 @@ solarisrequires = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure, %BASISPACKAGEP
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-sw"
requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Sw dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -1086,9 +1131,9 @@ solarisrequires = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure, %BASISPACKAGEP
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-th"
requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Th dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -1116,9 +1161,9 @@ solarisrequires = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure, %BASISPACKAGEP
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-vi"
requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Vietnamese dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -1131,9 +1176,9 @@ solarisrequires = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure, %BASISPACKAGEP
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-zu"
requires = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION,%UNIXPACKAGENAME%BRANDPACKAGEVERSION %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Zu dictionary for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -1147,9 +1192,11 @@ solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-impress"
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-ogltrans"
freebsdrequires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-impress"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-impress %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycibbasis6.4-ogltrans"
+linuxincompat = "libreofficepoweredbycibbasis6.4-ogltrans"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "OpenGL slide transitions module for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -1162,9 +1209,11 @@ solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-base"
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-postgresql-sdbc"
freebsdrequires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-base"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-base %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycibbasis6.4-postgresql-sdbc"
+linuxincompat = "libreofficepoweredbycibbasis6.4-postgresql-sdbc"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "PostgreSQL Connector driver for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -1177,9 +1226,11 @@ solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-core (Name="Core
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-extension-pdf-import"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycibbasis6.4-extension-pdf-import"
+linuxincompat = "libreofficepoweredbycibbasis6.4-extension-pdf-import"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "PDF import extension for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -1192,9 +1243,11 @@ solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-core (Name="Core
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-extension-report-builder"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycibbasis6.4-extension-report-builder"
+linuxincompat = "libreofficepoweredbycibbasis6.4-extension-report-builder"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Report Builder extension for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -1207,9 +1260,11 @@ solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-core (Name="Core
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-libreofficekit-data"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
linuxpatchrequires = ""
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycibbasis6.4-libreofficekit-data"
+linuxincompat = "libreofficepoweredbycibbasis6.4-libreofficekit-data"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Libreofficekit data files for %PRODUCTNAME %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
diff --git a/setup_native/source/packinfo/packinfo_office_help.txt b/setup_native/source/packinfo/packinfo_office_help.txt
index 12acde8a4a9b..970aabd59cc5 100644
--- a/setup_native/source/packinfo/packinfo_office_help.txt
+++ b/setup_native/source/packinfo/packinfo_office_help.txt
@@ -39,11 +39,12 @@ module = "gid_Module_Helppack_Help"
solarispackagename = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-%LANGUAGESTRING-help"
solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-%LANGUAGESTRING"
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-%LANGUAGESTRING-help"
-provides = "%BASISPACKAGEPREFIX%PRODUCTVERSION-%LANGUAGESTRING-help"
+provides = "%BASISPACKAGEPREFIX%PRODUCTVERSION-%LANGUAGESTRING-help, libreofficepoweredbycibbasis6.4-%LANGUAGESTRING-help"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-%LANGUAGESTRING %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycibbasis6.4-%LANGUAGESTRING-help"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Help module for %PRODUCTNAME %PRODUCTVERSION, language %LANGUAGESTRING"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
diff --git a/setup_native/source/packinfo/packinfo_office_lang.txt b/setup_native/source/packinfo/packinfo_office_lang.txt
index a23e4695e88d..a084d4b14b71 100644
--- a/setup_native/source/packinfo/packinfo_office_lang.txt
+++ b/setup_native/source/packinfo/packinfo_office_lang.txt
@@ -39,11 +39,13 @@ module = "gid_Module_Langpack_Basis"
solarispackagename = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-%LANGUAGESTRING"
solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-core"
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-%LANGUAGESTRING"
-provides = "%BASISPACKAGEPREFIX%PRODUCTVERSION-%LANGUAGESTRING"
+provides = "%BASISPACKAGEPREFIX%PRODUCTVERSION-%LANGUAGESTRING,libreofficepoweredbycibbasis6.4-%LANGUAGESTRING"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycibbasis6.4-%LANGUAGESTRING"
+linuxincompat = "libreofficepoweredbycibbasis6.4-%LANGUAGESTRING"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Language module for %PRODUCTNAME %PRODUCTVERSION, language %LANGUAGESTRING"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -57,9 +59,9 @@ solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-%LANGUAGESTRING"
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-%LANGUAGESTRING-fonts"
provides = "%BASISPACKAGEPREFIX%PRODUCTVERSION-%LANGUAGESTRING-fonts"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-%LANGUAGESTRING %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Language fonts module for %PRODUCTNAME %PRODUCTVERSION, language %LANGUAGESTRING"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -73,9 +75,9 @@ solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-%LANGUAGESTRING"
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-%LANGUAGESTRING-res"
provides = "%BASISPACKAGEPREFIX%PRODUCTVERSION-%LANGUAGESTRING-res"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-%LANGUAGESTRING %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Language resource module for %PRODUCTNAME %PRODUCTVERSION, language %LANGUAGESTRING"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -89,9 +91,9 @@ solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-%LANGUAGESTRING"
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-%LANGUAGESTRING-writer"
provides = "%BASISPACKAGEPREFIX%PRODUCTVERSION-%LANGUAGESTRING-writer"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-%LANGUAGESTRING %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Writer language module for %PRODUCTNAME %PRODUCTVERSION, language %LANGUAGESTRING"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -105,9 +107,9 @@ solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-%LANGUAGESTRING"
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-%LANGUAGESTRING-calc"
provides = "%BASISPACKAGEPREFIX%PRODUCTVERSION-%LANGUAGESTRING-calc"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-%LANGUAGESTRING %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Calc language module for %PRODUCTNAME %PRODUCTVERSION, language %LANGUAGESTRING"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -121,9 +123,9 @@ solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-%LANGUAGESTRING"
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-%LANGUAGESTRING-impress"
provides = "%BASISPACKAGEPREFIX%PRODUCTVERSION-%LANGUAGESTRING-impress"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-%LANGUAGESTRING %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Impress language module for %PRODUCTNAME %PRODUCTVERSION, language %LANGUAGESTRING"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -137,9 +139,9 @@ solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-%LANGUAGESTRING"
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-%LANGUAGESTRING-draw"
provides = "%BASISPACKAGEPREFIX%PRODUCTVERSION-%LANGUAGESTRING-draw"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-%LANGUAGESTRING %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Draw language module for %PRODUCTNAME %PRODUCTVERSION, language %LANGUAGESTRING"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -153,9 +155,9 @@ solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-%LANGUAGESTRING"
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-%LANGUAGESTRING-math"
provides = "%BASISPACKAGEPREFIX%PRODUCTVERSION-%LANGUAGESTRING-math"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-%LANGUAGESTRING %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Math language module for %PRODUCTNAME %PRODUCTVERSION, language %LANGUAGESTRING"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -169,9 +171,9 @@ solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-%LANGUAGESTRING"
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-%LANGUAGESTRING-base"
provides = "%BASISPACKAGEPREFIX%PRODUCTVERSION-%LANGUAGESTRING-base"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-%LANGUAGESTRING %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Base language module for %PRODUCTNAME %PRODUCTVERSION, language %LANGUAGESTRING"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
@@ -185,9 +187,9 @@ solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-%LANGUAGESTRING"
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-%LANGUAGESTRING-onlineupd"
provides = "%BASISPACKAGEPREFIX%PRODUCTVERSION-%LANGUAGESTRING-onlineupd"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-%LANGUAGESTRING %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Online update language module for %PRODUCTNAME %PRODUCTVERSION, language %LANGUAGESTRING"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
diff --git a/setup_native/source/packinfo/packinfo_sdkoo.txt b/setup_native/source/packinfo/packinfo_sdkoo.txt
index 4d148fb11c4d..d193b238c361 100644
--- a/setup_native/source/packinfo/packinfo_sdkoo.txt
+++ b/setup_native/source/packinfo/packinfo_sdkoo.txt
@@ -23,9 +23,11 @@ solarisrequires = "%BASISPACKAGEPREFIX%WITHOUTDOTPRODUCTVERSION-core, SUNWbtool
packagename = "%BASISPACKAGEPREFIX%PRODUCTVERSION-sdk"
freebsdrequires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core"
requires = "%BASISPACKAGEPREFIX%PRODUCTVERSION-core %PACKAGEVERSION %PACKAGEVERSION-%PACKAGEREVISION"
-copyright = "2020 The Document Foundation"
+linuxreplaces = "libreofficepoweredbycibbasis6.4-sdk"
+linuxincompat = "libreofficepoweredbycibbasis6.4-sdk"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "Software Development Kit for LibreOffice %PRODUCTVERSION"
destpath = "/opt"
packageversion = "%PACKAGEVERSION"
diff --git a/setup_native/source/packinfo/packinfo_ure.txt b/setup_native/source/packinfo/packinfo_ure.txt
index 66e8c66f3326..4fccbb70754c 100644
--- a/setup_native/source/packinfo/packinfo_ure.txt
+++ b/setup_native/source/packinfo/packinfo_ure.txt
@@ -21,12 +21,12 @@ module = "gid_Module_Root"
solarispackagename = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure"
solarisrequires = "SUNWzlibr"
solarisprovides = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-stdlibs"
-linuxreplaces = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-stdlibs"
-linuxincompat = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-stdlibs"
+linuxreplaces = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-stdlibs, libreofficepoweredbycib6.4-ure"
+linuxincompat = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-stdlibs, libreofficepoweredbycib6.4-ure"
packagename = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure"
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "UNO Runtime Environment"
destpath = "/opt"
packageversion = "%UREPACKAGEVERSION"
@@ -37,12 +37,12 @@ module = "gid_Module_Root_Ure_Hidden"
solarispackagename = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure"
solarisrequires = "SUNWzlibr"
solarisprovides = "%SOLSUREPACKAGEPREFIX%BRANDPACKAGEVERSION-stdlibs"
-linuxreplaces = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-stdlibs"
-linuxincompat = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-stdlibs"
+linuxreplaces = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-stdlibs, libreofficepoweredbycib6.4-ure"
+linuxincompat = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-stdlibs, libreofficepoweredbycib6.4-ure"
packagename = "%UREPACKAGEPREFIX%BRANDPACKAGEVERSION-ure"
-copyright = "2020 The Document Foundation"
+copyright = "2022 CIB software GmbH"
solariscopyright = "solariscopyrightfile"
-vendor = "The Document Foundation"
+vendor = "CIB software GmbH"
description = "UNO Runtime Environment"
destpath = "/opt"
packageversion = "%UREPACKAGEVERSION"
diff --git a/sfx2/source/appl/appserv.cxx b/sfx2/source/appl/appserv.cxx
index 9df5f4232445..96577e81f72d 100644
--- a/sfx2/source/appl/appserv.cxx
+++ b/sfx2/source/appl/appserv.cxx
@@ -228,8 +228,10 @@ namespace
SfxStringItem aURL(SID_FILE_NAME, ".component:Bibliography/View1");
SfxStringItem aRef(SID_REFERER, "private:user");
SfxStringItem aTarget(SID_TARGETNAME, "_blank");
- SfxViewFrame::Current()->GetDispatcher()->ExecuteList(SID_OPENDOC,
- SfxCallMode::ASYNCHRON, { &aURL, &aRef, &aTarget });
+ const SfxViewFrame* pViewFrame = SfxViewFrame::Current();
+ if ( pViewFrame )
+ pViewFrame->GetDispatcher()->ExecuteList(SID_OPENDOC,
+ SfxCallMode::ASYNCHRON, { &aURL, &aRef, &aTarget });
}
catch (const Exception &)
{
@@ -549,7 +551,7 @@ void SfxApplication::MiscExec_Impl( SfxRequest& rReq )
case SID_SEND_FEEDBACK:
{
- sfx2::openUriExternally("https://www.cib.de/libreoffice-poweredbycib", false);
+ sfx2::openUriExternally("https://www.cib.de/office", false);
break;
}
case SID_DOCUMENTATION:
diff --git a/sfx2/source/appl/childwin.cxx b/sfx2/source/appl/childwin.cxx
index a7013fa6c530..97a8c2e43bc2 100644
--- a/sfx2/source/appl/childwin.cxx
+++ b/sfx2/source/appl/childwin.cxx
@@ -628,7 +628,7 @@ void SfxChildWindow::SetVisible_Impl( bool bVis )
void SfxChildWindow::Hide()
{
if (xController)
- xController->EndDialog();
+ xController->EndDialog(nCloseResponseToJustHide);
else
pWindow->Hide();
}
@@ -639,8 +639,21 @@ void SfxChildWindow::Show( ShowFlags nFlags )
{
if (!xController->getDialog()->get_visible())
{
- weld::DialogController::runAsync(xController,
- [this](sal_Int32 /*nResult*/){ xController->Close(); });
+ if (!xController->CloseOnHide())
+ {
+ // tdf#155708 - do not run a new (Async) validation window,
+ // because we already have one in sync mode, just show the running one
+ xController->getDialog()->show();
+ }
+ else
+ {
+ weld::DialogController::runAsync(xController,
+ [this](sal_Int32 nResult) {
+ if (nResult == nCloseResponseToJustHide)
+ return;
+ xController->Close();
+ });
+ }
}
}
else
diff --git a/sfx2/source/appl/macroloader.cxx b/sfx2/source/appl/macroloader.cxx
index 98e036e0a7ea..b50d1e63c789 100644
--- a/sfx2/source/appl/macroloader.cxx
+++ b/sfx2/source/appl/macroloader.cxx
@@ -76,10 +76,10 @@ css::uno::Sequence<OUString> SAL_CALL SfxMacroLoader::getSupportedServiceNames()
return aSeq;
}
-SfxObjectShell* SfxMacroLoader::GetObjectShell_Impl()
+SfxObjectShell* SfxMacroLoader::GetObjectShell(const Reference <XFrame>& xFrame)
{
SfxObjectShell* pDocShell = nullptr;
- Reference < XFrame > xFrame( m_xFrame.get(), UNO_QUERY );
+
if ( xFrame.is() )
{
SfxFrame* pFrame=nullptr;
@@ -96,6 +96,11 @@ SfxObjectShell* SfxMacroLoader::GetObjectShell_Impl()
return pDocShell;
}
+SfxObjectShell* SfxMacroLoader::GetObjectShell_Impl()
+{
+ Reference < XFrame > xFrame( m_xFrame.get(), UNO_QUERY );
+ return SfxMacroLoader::GetObjectShell(xFrame);
+}
uno::Reference<frame::XDispatch> SAL_CALL SfxMacroLoader::queryDispatch(
const util::URL& aURL ,
diff --git a/sfx2/source/appl/workwin.cxx b/sfx2/source/appl/workwin.cxx
index 5feb326243fc..5fba0e02079f 100644
--- a/sfx2/source/appl/workwin.cxx
+++ b/sfx2/source/appl/workwin.cxx
@@ -1009,7 +1009,11 @@ void SfxWorkWindow::ShowChildren_Impl()
{
auto xController = pCli->xController;
weld::DialogController::runAsync(xController,
- [=](sal_Int32 /*nResult*/){ xController->Close(); });
+ [=](sal_Int32 nResult){
+ if (nResult == nCloseResponseToJustHide)
+ return;
+ xController->Close();
+ });
}
}
else
diff --git a/sfx2/source/dialog/basedlgs.cxx b/sfx2/source/dialog/basedlgs.cxx
index 905d27fd3a3e..187a030fab4d 100644
--- a/sfx2/source/dialog/basedlgs.cxx
+++ b/sfx2/source/dialog/basedlgs.cxx
@@ -169,11 +169,11 @@ SfxModelessDialogController::~SfxModelessDialogController()
m_pBindings->SetActiveFrame(nullptr);
}
-void SfxDialogController::EndDialog()
+void SfxDialogController::EndDialog(int nResponse)
{
if (!m_xDialog->get_visible())
return;
- response(RET_CLOSE);
+ response(nResponse);
}
bool SfxModelessDialogController::IsClosing() const
@@ -181,7 +181,7 @@ bool SfxModelessDialogController::IsClosing() const
return m_xImpl->bClosing;
}
-void SfxModelessDialogController::EndDialog()
+void SfxModelessDialogController::EndDialog(int nResponse)
{
if (m_xImpl->bClosing)
return;
@@ -190,7 +190,7 @@ void SfxModelessDialogController::EndDialog()
// stack frame.
auto aHoldSelf = shared_from_this();
m_xImpl->bClosing = true;
- SfxDialogController::EndDialog();
+ SfxDialogController::EndDialog(nResponse);
if (!m_xImpl)
return;
m_xImpl->bClosing = false;
diff --git a/sfx2/source/dialog/infobar.cxx b/sfx2/source/dialog/infobar.cxx
index 3479fe72ad7d..b8d79f0b5a9c 100644
--- a/sfx2/source/dialog/infobar.cxx
+++ b/sfx2/source/dialog/infobar.cxx
@@ -13,6 +13,7 @@
#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx>
#include <drawinglayer/processor2d/baseprocessor2d.hxx>
#include <drawinglayer/processor2d/processorfromoutputdevice.hxx>
+#include <officecfg/Office/UI/Infobar.hxx>
#include <sfx2/bindings.hxx>
#include <sfx2/dispatch.hxx>
#include <sfx2/infobar.hxx>
@@ -392,6 +393,9 @@ SfxInfoBarContainerWindow::appendInfoBar(const OUString& sId, const OUString& sP
const OUString& sSecondaryMessage, InfobarType ibType,
WinBits nMessageStyle, bool bShowCloseButton)
{
+ if (!isInfobarEnabled(sId))
+ return nullptr;
+
auto pInfoBar = VclPtr<SfxInfoBarWindow>::Create(this, sId, sPrimaryMessage, sSecondaryMessage,
ibType, nMessageStyle, bShowCloseButton);
@@ -437,6 +441,22 @@ void SfxInfoBarContainerWindow::removeInfoBar(VclPtr<SfxInfoBarWindow> const & p
m_pChildWin->Update();
}
+bool SfxInfoBarContainerWindow::isInfobarEnabled(const OUString& sId)
+{
+ if (sId == "readonly")
+ return officecfg::Office::UI::Infobar::Enabled::Readonly::get();
+ if (sId == "signature")
+ return officecfg::Office::UI::Infobar::Enabled::Signature::get();
+ if (sId == "donate")
+ return officecfg::Office::UI::Infobar::Enabled::Donate::get();
+ if (sId == "getinvolved")
+ return officecfg::Office::UI::Infobar::Enabled::GetInvolved::get();
+ if (sId == "hyphenationmissing")
+ return officecfg::Office::UI::Infobar::Enabled::HyphenationMissing::get();
+
+ return true;
+}
+
void SfxInfoBarContainerWindow::Resize()
{
long nWidth = GetSizePixel().getWidth();
diff --git a/sfx2/source/doc/docfile.cxx b/sfx2/source/doc/docfile.cxx
index 5d00d39bd837..5c4116f2308e 100644
--- a/sfx2/source/doc/docfile.cxx
+++ b/sfx2/source/doc/docfile.cxx
@@ -51,6 +51,7 @@
#include <com/sun/star/ucb/CommandFailedException.hpp>
#include <com/sun/star/ucb/CommandAbortedException.hpp>
#include <com/sun/star/ucb/InteractiveLockingLockedException.hpp>
+#include <com/sun/star/ucb/InteractiveNetworkReadException.hpp>
#include <com/sun/star/ucb/InteractiveNetworkWriteException.hpp>
#include <com/sun/star/ucb/Lock.hpp>
#include <com/sun/star/ucb/XCommandEnvironment.hpp>
@@ -1125,6 +1126,37 @@ namespace
}
}
+namespace
+{
+
+// for LOCK request, suppress dialog on 403, typically indicates read-only
+// document and there's a 2nd dialog prompting to open a copy anyway
+class LockInteractionHandler : public ::cppu::WeakImplHelper<task::XInteractionHandler>
+{
+private:
+ uno::Reference<task::XInteractionHandler> m_xHandler;
+
+public:
+ explicit LockInteractionHandler(uno::Reference<task::XInteractionHandler> const& xHandler)
+ : m_xHandler(xHandler)
+ {
+ }
+
+ virtual void SAL_CALL handle(uno::Reference<task::XInteractionRequest> const& xRequest) override
+ {
+ ucb::InteractiveNetworkWriteException readException;
+ ucb::InteractiveNetworkReadException writeException;
+ if ((xRequest->getRequest() >>= readException)
+ || (xRequest->getRequest() >>= writeException))
+ {
+ return; // 403 gets reported as one of these; ignore to avoid dialog
+ }
+ m_xHandler->handle(xRequest);
+ }
+};
+
+} // namespace
+
#endif // HAVE_FEATURE_MULTIUSER_ENVIRONMENT
// sets SID_DOC_READONLY if the document cannot be opened for editing
@@ -1172,6 +1204,13 @@ SfxMedium::LockFileResult SfxMedium::LockOrigFileOnDemand(bool bLoading, bool bN
if( !bResult )
{
uno::Reference< task::XInteractionHandler > xCHandler = GetInteractionHandler( true );
+ // Dialog with error is superfluous:
+ // on loading, will result in read-only with infobar.
+ // bNoUI case for Reload failing, will open dialog later.
+ if (bLoading || bNoUI)
+ {
+ xCHandler = new LockInteractionHandler(xCHandler);
+ }
Reference< css::ucb::XCommandEnvironment > xComEnv = new ::ucbhelper::CommandEnvironment(
xCHandler, Reference< css::ucb::XProgressHandler >() );
@@ -3635,6 +3674,9 @@ OUString GetLogicBase(std::unique_ptr<SfxMedium_Impl> const & pImpl)
// permission only to create the specifically named output file in that directory.
#if !HAVE_FEATURE_MACOSX_SANDBOX
+ if (!officecfg::Office::Common::Misc::TempFileNextToLocalFile::get())
+ return aLogicBase;
+
if (comphelper::isFileUrl(pImpl->m_aLogicName) && !pImpl->m_pInStream)
{
// Try to create the temp file in the same directory when storing.
@@ -4215,17 +4257,18 @@ OUString SfxMedium::SwitchDocumentToTempFile()
{}
}
+ if (bWasReadonly)
+ {
+ // set the readonly state back
+ pImpl->m_nStorOpenMode = SFX_STREAM_READONLY;
+ GetItemSet()->Put(SfxBoolItem(SID_DOC_READONLY, true));
+ }
+
if ( aResult.isEmpty() )
{
Close();
SetPhysicalName_Impl( OUString() );
SetName( aOrigURL );
- if ( bWasReadonly )
- {
- // set the readonly state back
- pImpl->m_nStorOpenMode = SFX_STREAM_READONLY;
- GetItemSet()->Put( SfxBoolItem(SID_DOC_READONLY, true));
- }
GetMedium_Impl();
pImpl->xStorage = xStorage;
}
diff --git a/sfx2/source/doc/docmacromode.cxx b/sfx2/source/doc/docmacromode.cxx
index 2fa7b968fc41..8a617b1785c6 100644
--- a/sfx2/source/doc/docmacromode.cxx
+++ b/sfx2/source/doc/docmacromode.cxx
@@ -404,8 +404,12 @@ namespace sfx2
return bHasMacros;
}
+ bool DocumentMacroMode::hasMacros() const
+ {
+ return m_xData->m_rDocumentAccess.documentStorageHasMacros() || hasMacroLibrary() || m_xData->m_rDocumentAccess.macroCallsSeenWhileLoading();
+ }
- bool DocumentMacroMode::checkMacrosOnLoading( const Reference< XInteractionHandler >& rxInteraction, bool bHasValidContentSignature )
+ bool DocumentMacroMode::checkMacrosOnLoading( const Reference< XInteractionHandler >& rxInteraction, bool bHasValidContentSignature, bool bHasMacros )
{
bool bAllow = false;
if ( SvtSecurityOptions().IsMacroDisabled() )
@@ -415,7 +419,7 @@ namespace sfx2
}
else
{
- if (m_xData->m_rDocumentAccess.documentStorageHasMacros() || hasMacroLibrary() || m_xData->m_rDocumentAccess.macroCallsSeenWhileLoading())
+ if (bHasMacros)
{
if (m_xData->m_rDocumentAccess.macroCallsSeenWhileLoading())
m_bNeedsContentSigned = true;
diff --git a/sfx2/source/doc/iframe.cxx b/sfx2/source/doc/iframe.cxx
index 8b1271545dfb..23c2defd92d8 100644
--- a/sfx2/source/doc/iframe.cxx
+++ b/sfx2/source/doc/iframe.cxx
@@ -38,12 +38,16 @@
#include <svtools/miscopt.hxx>
#include <svl/ownlist.hxx>
#include <svl/itemprop.hxx>
+#include <sfx2/docfile.hxx>
#include <sfx2/frmdescr.hxx>
+#include <sfx2/objsh.hxx>
#include <sfx2/sfxdlg.hxx>
#include <sfx2/sfxsids.hrc>
#include <toolkit/helper/vclunohelper.hxx>
#include <vcl/window.hxx>
#include <tools/debug.hxx>
+#include <macroloader.hxx>
+#include <eventsupplier.hxx>
using namespace ::com::sun::star;
@@ -159,38 +163,67 @@ sal_Bool SAL_CALL IFrameObject::load(
{
if ( SvtMiscOptions().IsPluginsEnabled() )
{
- DBG_ASSERT( !mxFrame.is(), "Frame already existing!" );
- VclPtr<vcl::Window> pParent = VCLUnoHelper::GetWindow( xFrame->getContainerWindow() );
- VclPtr<IFrameWindow_Impl> pWin = VclPtr<IFrameWindow_Impl>::Create( pParent, maFrmDescr.IsFrameBorderOn() );
- pWin->SetSizePixel( pParent->GetOutputSizePixel() );
- pWin->SetBackground();
- pWin->Show();
+ util::URL aTargetURL;
+ aTargetURL.Complete = maFrmDescr.GetURL().GetMainURL( INetURLObject::DecodeMechanism::NONE );
+ uno::Reference < util::XURLTransformer > xTrans( util::URLTransformer::create( mxContext ) );
+ xTrans->parseStrict( aTargetURL );
- uno::Reference < awt::XWindow > xWindow( pWin->GetComponentInterface(), uno::UNO_QUERY );
- xFrame->setComponent( xWindow, uno::Reference < frame::XController >() );
+ INetURLObject aURLObject(aTargetURL.Complete);
+ if (aURLObject.IsExoticProtocol())
+ {
+ SAL_WARN("sfx", "IFrameObject::load ignoring: " << aTargetURL.Complete);
+ return false;
+ }
- // we must destroy the IFrame before the parent is destroyed
- xWindow->addEventListener( this );
+ uno::Reference<frame::XFramesSupplier> xParentFrame = xFrame->getCreator();
+ SfxObjectShell* pDoc = SfxMacroLoader::GetObjectShell(xParentFrame);
- mxFrame = frame::Frame::create( mxContext );
- uno::Reference < awt::XWindow > xWin( pWin->GetComponentInterface(), uno::UNO_QUERY );
- mxFrame->initialize( xWin );
- mxFrame->setName( maFrmDescr.GetName() );
+ bool bUpdateAllowed(true);
+ if (pDoc)
+ {
+ comphelper::EmbeddedObjectContainer& rEmbeddedObjectContainer = pDoc->getEmbeddedObjectContainer();
+ bUpdateAllowed = rEmbeddedObjectContainer.getUserAllowsLinkUpdate();
+ }
+ if (!bUpdateAllowed)
+ return false;
- uno::Reference < frame::XFramesSupplier > xFramesSupplier( xFrame, uno::UNO_QUERY );
- if ( xFramesSupplier.is() )
- mxFrame->setCreator( xFramesSupplier );
+ OUString sReferer;
+ if (pDoc && pDoc->HasName())
+ sReferer = pDoc->GetMedium()->GetName();
- util::URL aTargetURL;
- aTargetURL.Complete = maFrmDescr.GetURL().GetMainURL( INetURLObject::DecodeMechanism::NONE );
- uno::Reference < util::XURLTransformer > xTrans( util::URLTransformer::create( mxContext ) );
- xTrans->parseStrict( aTargetURL );
+ uno::Reference<css::awt::XWindow> xParentWindow(xFrame->getContainerWindow());
+
+ if (!mxFrame.is())
+ {
+ VclPtr<vcl::Window> pParent = VCLUnoHelper::GetWindow(xParentWindow);
+ VclPtr<IFrameWindow_Impl> pWin = VclPtr<IFrameWindow_Impl>::Create( pParent, maFrmDescr.IsFrameBorderOn() );
+ pWin->SetSizePixel( pParent->GetOutputSizePixel() );
+ pWin->SetBackground();
+ pWin->Show();
+
+ uno::Reference < awt::XWindow > xWindow( pWin->GetComponentInterface(), uno::UNO_QUERY );
+ xFrame->setComponent( xWindow, uno::Reference < frame::XController >() );
+
+ // we must destroy the IFrame before the parent is destroyed
+ xWindow->addEventListener( this );
+
+ mxFrame = frame::Frame::create( mxContext );
+ uno::Reference < awt::XWindow > xWin( pWin->GetComponentInterface(), uno::UNO_QUERY );
+ mxFrame->initialize( xWin );
+ mxFrame->setName( maFrmDescr.GetName() );
+
+ uno::Reference < frame::XFramesSupplier > xFramesSupplier( xFrame, uno::UNO_QUERY );
+ if ( xFramesSupplier.is() )
+ mxFrame->setCreator( xFramesSupplier );
+ }
- uno::Sequence < beans::PropertyValue > aProps(2);
+ uno::Sequence < beans::PropertyValue > aProps(3);
aProps[0].Name = "PluginMode";
aProps[0].Value <<= sal_Int16(2);
aProps[1].Name = "ReadOnly";
aProps[1].Value <<= true;
+ aProps[2].Name = "Referer";
+ aProps[2].Value <<= sReferer;
uno::Reference < frame::XDispatch > xDisp = mxFrame->queryDispatch( aTargetURL, "_self", 0 );
if ( xDisp.is() )
xDisp->dispatch( aTargetURL, aProps );
diff --git a/sfx2/source/doc/objembed.cxx b/sfx2/source/doc/objembed.cxx
index 7d5cdb5cb21c..2d4b6ef5229e 100644
--- a/sfx2/source/doc/objembed.cxx
+++ b/sfx2/source/doc/objembed.cxx
@@ -28,6 +28,7 @@
#include <sfx2/app.hxx>
#include <objshimp.hxx>
#include <sfx2/event.hxx>
+#include <sfx2/sfxbasemodel.hxx>
#include <comphelper/fileformat.h>
#include <svtools/embedtransfer.hxx>
@@ -118,8 +119,14 @@ void SfxObjectShell::SetVisArea( const tools::Rectangle & rVisArea )
pImpl->m_aVisArea = rVisArea;
if ( GetCreateMode() == SfxObjectCreateMode::EMBEDDED )
{
- if ( IsEnableSetModified() )
+ if (IsEnableSetModified()
+ // Base forms use EMBEDDED but they actually live in their own
+ // frame - resizing that shouldn't set it to modified.
+ && pImpl->pBaseModel
+ && pImpl->pBaseModel->getIdentifier() != "com.sun.star.sdb.FormDesign")
+ {
SetModified();
+ }
SfxGetpApp()->NotifyEvent(SfxEventHint( SfxEventHintId::VisAreaChanged, GlobalEventConfig::GetEventName(GlobalEventId::VISAREACHANGED), this));
}
diff --git a/sfx2/source/doc/objmisc.cxx b/sfx2/source/doc/objmisc.cxx
index 04ff6ecd5314..9ff78bff6eea 100644
--- a/sfx2/source/doc/objmisc.cxx
+++ b/sfx2/source/doc/objmisc.cxx
@@ -87,6 +87,8 @@
#include <comphelper/interaction.hxx>
#include <comphelper/storagehelper.hxx>
#include <comphelper/documentconstants.hxx>
+#include <comphelper/namedvaluecollection.hxx>
+#include <officecfg/Office/Common.hxx>
#include <sfx2/signaturestate.hxx>
#include <sfx2/app.hxx>
@@ -260,7 +262,12 @@ void SfxObjectShell::EnableSetModified( bool bEnable )
bool SfxObjectShell::IsEnableSetModified() const
{
- return pImpl->m_bEnableSetModified && !IsReadOnly();
+ // tdf#146547 read-only does not prevent modified, instead try to prevent
+ // setting "internal" documents that may be displayed in some dialog but
+ // which the user didn't load or activate to modified.
+ return pImpl->m_bEnableSetModified && !IsPreview()
+ && eCreateMode != SfxObjectCreateMode::ORGANIZER
+ && eCreateMode != SfxObjectCreateMode::INTERNAL;
}
@@ -965,9 +972,42 @@ void SfxObjectShell::CheckSecurityOnLoading_Impl()
// check macro security
const bool bHasValidContentSignature = HasValidSignatures();
- pImpl->aMacroMode.checkMacrosOnLoading( xInteraction, bHasValidContentSignature );
+ const bool bHasMacros = pImpl->aMacroMode.hasMacros();
+ pImpl->aMacroMode.checkMacrosOnLoading( xInteraction, bHasValidContentSignature, bHasMacros );
+ pImpl->m_bHadCheckedMacrosOnLoad = bHasMacros;
}
+bool SfxObjectShell::GetHadCheckedMacrosOnLoad() const
+{
+ return pImpl->m_bHadCheckedMacrosOnLoad;
+}
+
+bool SfxObjectShell::AllowedLinkProtocolFromDocument(const OUString& rUrl, SfxObjectShell* pObjShell, weld::Window* pDialogParent)
+{
+ if (!INetURLObject(rUrl).IsExoticProtocol())
+ return true;
+ // Default to ignoring exotic protocols
+ bool bAllow = false;
+ if (pObjShell)
+ {
+ // If the document had macros when loaded then follow the allowed macro-mode
+ if (pObjShell->GetHadCheckedMacrosOnLoad())
+ bAllow = pObjShell->AdjustMacroMode();
+ else // otherwise ask the user, defaulting to cancel
+ {
+ //Reuse URITools::onOpenURI warning string
+ std::unique_ptr<weld::MessageDialog> xQueryBox(Application::CreateMessageDialog(pDialogParent,
+ VclMessageType::Warning, VclButtonsType::YesNo,
+ SfxResId(STR_DANGEROUS_TO_OPEN)));
+ xQueryBox->set_primary_text(xQueryBox->get_primary_text().replaceFirst("$(ARG1)",
+ INetURLObject::decode(rUrl, INetURLObject::DecodeMechanism::Unambiguous)));
+ xQueryBox->set_default_response(RET_NO);
+ bAllow = xQueryBox->run() == RET_YES;
+ }
+ }
+ SAL_WARN_IF(!bAllow, "sfx.appl", "SfxObjectShell::AllowedLinkProtocolFromDocument ignoring: " << rUrl);
+ return bAllow;
+}
void SfxObjectShell::CheckEncryption_Impl( const uno::Reference< task::XInteractionHandler >& xHandler )
{
@@ -1896,4 +1936,13 @@ bool SfxObjectShell::IsContinueImportOnFilterExceptions(const OUString& aErrMess
return mbContinueImportOnFilterExceptions == yes;
}
+bool SfxObjectShell::isEditDocLocked()
+{
+ Reference<XModel> xModel = GetModel();
+ if (!xModel.is())
+ return false;
+ comphelper::NamedValueCollection aArgs(xModel->getArgs());
+ return aArgs.getOrDefault("LockEditDoc", false);
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/doc/objxtor.cxx b/sfx2/source/doc/objxtor.cxx
index 510c35daf59f..ecac02074ea2 100644
--- a/sfx2/source/doc/objxtor.cxx
+++ b/sfx2/source/doc/objxtor.cxx
@@ -237,6 +237,7 @@ SfxObjectShell_Impl::SfxObjectShell_Impl( SfxObjectShell& _rDocShell )
,m_bAllowShareControlFileClean( true )
,m_bConfigOptionsChecked( false )
,m_bMacroCallsSeenWhileLoading( false )
+ ,m_bHadCheckedMacrosOnLoad( false )
,lErr(ERRCODE_NONE)
,nEventId ( SfxEventHintId::NONE )
,nLoadedFlags ( SfxLoadedFlags::ALL )
@@ -589,7 +590,13 @@ bool SfxObjectShell::PrepareClose
{
// Save by each Dispatcher
const SfxPoolItem *pPoolItem;
- if ( IsSaveVersionOnClose() )
+ if (IsReadOnly())
+ {
+ SfxBoolItem aWarnItem( SID_FAIL_ON_WARNING, bUI );
+ const SfxPoolItem* ppArgs[] = { &aWarnItem, nullptr };
+ pPoolItem = pFrame->GetBindings().ExecuteSynchron(SID_SAVEASDOC, ppArgs);
+ }
+ else if (IsSaveVersionOnClose())
{
SfxStringItem aItem( SID_DOCINFO_COMMENTS, SfxResId(STR_AUTOMATICVERSION) );
SfxBoolItem aWarnItem( SID_FAIL_ON_WARNING, bUI );
diff --git a/sfx2/source/doc/printhelper.cxx b/sfx2/source/doc/printhelper.cxx
index 42936e53fe99..263c20b58e26 100644
--- a/sfx2/source/doc/printhelper.cxx
+++ b/sfx2/source/doc/printhelper.cxx
@@ -711,6 +711,15 @@ void SAL_CALL SfxPrintHelper::print(const uno::Sequence< beans::PropertyValue >&
aCheckedArgs[nProps++].Value <<= bTemp;
}
+ else if ( rProp.Name == "JobName" )
+ {
+ OUString sTemp;
+ if( !(rProp.Value >>= sTemp) )
+ throw css::lang::IllegalArgumentException();
+ aCheckedArgs[nProps].Name = rProp.Name;
+ aCheckedArgs[nProps++].Value <<= sTemp;
+ }
+
// Pages-Property
else if ( rProp.Name == "Pages" )
{
diff --git a/sfx2/source/inc/eventsupplier.hxx b/sfx2/source/inc/eventsupplier.hxx
index 4624ed8b4907..d24345dba1c5 100644
--- a/sfx2/source/inc/eventsupplier.hxx
+++ b/sfx2/source/inc/eventsupplier.hxx
@@ -87,7 +87,6 @@ public:
SfxObjectShell* i_document );
static void Execute( css::uno::Any const & aEventData, const css::document::DocumentEvent& aTrigger, SfxObjectShell* pDoc );
-private:
/// Check if script URL whitelist exists, and if so, if current script url is part of it
static bool isScriptURLAllowed(const OUString& aScriptURL);
};
diff --git a/sfx2/source/inc/macroloader.hxx b/sfx2/source/inc/macroloader.hxx
index 9e1dfba18ed0..b3e7a5ec1abc 100644
--- a/sfx2/source/inc/macroloader.hxx
+++ b/sfx2/source/inc/macroloader.hxx
@@ -82,6 +82,8 @@ public:
virtual void SAL_CALL addStatusListener( const css::uno::Reference< css::frame::XStatusListener >& xControl, const css::util::URL& aURL ) override;
virtual void SAL_CALL removeStatusListener( const css::uno::Reference< css::frame::XStatusListener >& xControl, const css::util::URL& aURL ) override;
+
+ static SfxObjectShell* GetObjectShell(const css::uno::Reference<css::frame::XFrame>& xFrame);
};
#endif
diff --git a/sfx2/source/inc/objshimp.hxx b/sfx2/source/inc/objshimp.hxx
index 3d7b0b69c945..4afdd706d05e 100644
--- a/sfx2/source/inc/objshimp.hxx
+++ b/sfx2/source/inc/objshimp.hxx
@@ -91,7 +91,8 @@ struct SfxObjectShell_Impl : public ::sfx2::IMacroDocumentAccess
m_bSharedXMLFlag:1, // whether the document should be edited in shared mode
m_bAllowShareControlFileClean:1, // whether the flag should be stored in xml file
m_bConfigOptionsChecked:1, // whether or not the user options are checked after the Options dialog is closed.
- m_bMacroCallsSeenWhileLoading:1; // whether or not the user options are checked after the Options dialog is closed.
+ m_bMacroCallsSeenWhileLoading:1, // whether or not macro calls were seen when loading document.
+ m_bHadCheckedMacrosOnLoad:1; // if document contained macros (or calls) when loaded
IndexBitSet aBitSet;
ErrCode lErr;
diff --git a/sfx2/source/view/viewfrm.cxx b/sfx2/source/view/viewfrm.cxx
index 885023465120..bbfb37e5291d 100644
--- a/sfx2/source/view/viewfrm.cxx
+++ b/sfx2/source/view/viewfrm.cxx
@@ -308,8 +308,7 @@ void SfxViewFrame::ExecReload_Impl( SfxRequest& rReq )
if( !pSh || !pSh->HasName() || !(pSh->Get_Impl()->nLoadedFlags & SfxLoadedFlags::MAINDOCUMENT ))
break;
- SfxViewShell* pViewSh = GetViewShell();
- if (pViewSh && pViewSh->isEditDocLocked())
+ if (pSh->isEditDocLocked())
break;
// Only change read-only UI and remove info bar when we succeed
@@ -331,9 +330,12 @@ void SfxViewFrame::ExecReload_Impl( SfxRequest& rReq )
m_pFrame->RemoveInfoBar("readonly");
if (m_pMed)
{
+ bool const isEnableSetModified(m_pSh->IsEnableSetModified());
+ m_pSh->EnableSetModified(false);
// tdf#116066: DoSaveCompleted should be called after SetReadOnlyUI
m_pSh->DoSaveCompleted(m_pMed);
m_pSh->Broadcast(SfxHint(SfxHintId::ModeChanged));
+ m_pSh->EnableSetModified(isEnableSetModified);
}
}
}
@@ -929,7 +931,7 @@ void SfxViewFrame::StateReload_Impl( SfxItemSet& rSet )
const SfxShell *pFSh;
if ( !pSh->HasName() ||
!( pSh->Get_Impl()->nLoadedFlags & SfxLoadedFlags::MAINDOCUMENT ) ||
- (GetViewShell() && GetViewShell()->isEditDocLocked()) ||
+ (pSh->isEditDocLocked()) ||
( pSh->GetCreateMode() == SfxObjectCreateMode::EMBEDDED &&
( !(pVSh = pSh->GetViewShell()) ||
!(pFSh = pVSh->GetFormShell()) ||
@@ -1351,7 +1353,7 @@ void SfxViewFrame::Notify( SfxBroadcaster& /*rBC*/, const SfxHint& rHint )
}
bool showEditDocumentButton = true;
- if (m_xObjSh->GetViewShell() && m_xObjSh->GetViewShell()->isEditDocLocked())
+ if (m_xObjSh->isEditDocLocked())
showEditDocumentButton = false;
if (showEditDocumentButton)
diff --git a/sfx2/source/view/viewprn.cxx b/sfx2/source/view/viewprn.cxx
index b67267a61b53..f9cd9c005c39 100644
--- a/sfx2/source/view/viewprn.cxx
+++ b/sfx2/source/view/viewprn.cxx
@@ -616,10 +616,14 @@ void SfxViewShell::StartPrint( const uno::Sequence < beans::PropertyValue >& rPr
));
pImpl->m_xPrinterController = xNewController;
- SfxObjectShell *pObjShell = GetObjectShell();
- xNewController->setValue( "JobName",
- makeAny( pObjShell->GetTitle(1) ) );
- xNewController->setPrinterModified( mbPrinterSettingsModified );
+ // When no JobName was specified via com::sun::star::view::PrintOptions::JobName ,
+ // use the document title as default job name
+ css::beans::PropertyValue* pJobNameVal = xNewController->getValue("JobName");
+ if (!pJobNameVal)
+ {
+ xNewController->setValue("JobName", Any(GetObjectShell()->GetTitle(1)));
+ xNewController->setPrinterModified(mbPrinterSettingsModified);
+ }
}
void SfxViewShell::ExecPrint( const uno::Sequence < beans::PropertyValue >& rProps, bool bIsAPI, bool bIsDirect )
diff --git a/sfx2/source/view/viewsh.cxx b/sfx2/source/view/viewsh.cxx
index 80cd8a122d07..cb7925efa907 100644
--- a/sfx2/source/view/viewsh.cxx
+++ b/sfx2/source/view/viewsh.cxx
@@ -1776,15 +1776,6 @@ bool SfxViewShell::isPrintLocked()
return aArgs.getOrDefault("LockPrint", false);
}
-bool SfxViewShell::isEditDocLocked()
-{
- Reference<XModel> xModel = GetCurrentDocument();
- if (!xModel.is())
- return false;
- comphelper::NamedValueCollection aArgs(xModel->getArgs());
- return aArgs.getOrDefault("LockEditDoc", false);
-}
-
bool SfxViewShell::isSaveLocked()
{
Reference<XModel> xModel = GetCurrentDocument();
diff --git a/shell/source/backends/kf5be/kf5backend.cxx b/shell/source/backends/kf5be/kf5backend.cxx
index f55a5150bd3f..e6a349358e5f 100644
--- a/shell/source/backends/kf5be/kf5backend.cxx
+++ b/shell/source/backends/kf5be/kf5backend.cxx
@@ -19,6 +19,8 @@
#include <sal/config.h>
+#include <memory>
+
#include <QtWidgets/QApplication>
#include <boost/noncopyable.hpp>
diff --git a/shell/source/win32/simplemail/senddoc.cxx b/shell/source/win32/simplemail/senddoc.cxx
index 3b57684fe821..e34412cbfae1 100644
--- a/shell/source/win32/simplemail/senddoc.cxx
+++ b/shell/source/win32/simplemail/senddoc.cxx
@@ -58,8 +58,8 @@ namespace /* private */
std::vector<std::wstring> gTo;
std::vector<std::wstring> gCc;
std::vector<std::wstring> gBcc;
- // Keep temp filepath and displayed name
- std::vector<std::pair<std::wstring, std::wstring>> gAttachments;
+ // Keep temp filepath, displayed name, and "do not delete" flag
+ std::vector<std::tuple<std::wstring, std::wstring, bool>> gAttachments;
int gMapiFlags = 0;
}
@@ -121,11 +121,12 @@ static void initAttachmentList(MapiAttachmentList_t* pMapiAttachmentList)
{
OSL_ASSERT(pMapiAttachmentList->empty());
- for (const auto& attachment : gAttachments)
+ for (const auto& [filepath, attachname, nodelete] : gAttachments)
{
+ (void)nodelete;
MapiFileDescW mfd;
ZeroMemory(&mfd, sizeof(mfd));
- mfd.lpszPathName = const_cast<wchar_t*>(attachment.first.c_str());
+ mfd.lpszPathName = const_cast<wchar_t*>(filepath.c_str());
// MapiFileDesc documentation (https://msdn.microsoft.com/en-us/library/hh707272)
// allows using here either nullptr, or a pointer to empty string. However,
// for Outlook 2013, we cannot use nullptr here, and must point to a (possibly
@@ -134,7 +135,7 @@ static void initAttachmentList(MapiAttachmentList_t* pMapiAttachmentList)
// Since C++11, c_str() must return a pointer to single null character when the
// string is empty, so we are OK here in case when there's no explicit file name
// passed
- mfd.lpszFileName = const_cast<wchar_t*>(attachment.second.c_str());
+ mfd.lpszFileName = const_cast<wchar_t*>(attachname.c_str());
mfd.nPosition = sal::static_int_cast<ULONG>(-1);
pMapiAttachmentList->push_back(mfd);
}
@@ -239,7 +240,14 @@ static void initParameter(int argc, wchar_t* argv[])
sName = argv[i+3];
i += 2;
}
- gAttachments.emplace_back(sPath, sName);
+ // Also there may be --nodelete to keep the attachment on exit
+ bool nodelete = false;
+ if ((i + 2) < argc && _wcsicmp(argv[i+2], L"--nodelete") == 0)
+ {
+ nodelete = true;
+ ++i;
+ }
+ gAttachments.emplace_back(sPath, sName, nodelete);
}
else if (_wcsicmp(argv[i], L"--langtag") == 0)
gLangTag = o3tl::toU(argv[i+1]);
@@ -401,8 +409,12 @@ int wmain(int argc, wchar_t* argv[])
}
// Now cleanup the temporary attachment files
- for (const auto& rAttachment : gAttachments)
- DeleteFileW(rAttachment.first.c_str());
+ for (const auto& [filepath, attachname, nodelete] : gAttachments)
+ {
+ (void)attachname;
+ if (!nodelete)
+ DeleteFileW(filepath.c_str());
+ }
// Only show the error message if UI was requested
if ((ulRet != SUCCESS_SUCCESS) && (gMapiFlags & (MAPI_DIALOG | MAPI_LOGON_UI)))
@@ -434,11 +446,13 @@ int wmain(int argc, wchar_t* argv[])
for (const auto& address : gBcc)
oss << "--bcc " << address << std::endl;
- for (const auto& attachment : gAttachments)
+ for (const auto& [filepath, attachname, nodelete] : gAttachments)
{
- oss << "--attach " << attachment.first << std::endl;
- if (!attachment.second.empty())
- oss << "--attach-name " << attachment.second << std::endl;
+ oss << "--attach " << filepath << std::endl;
+ if (!attachname.empty())
+ oss << "--attach-name " << attachname << std::endl;
+ if (nodelete)
+ oss << "--nodelete" << std::endl;
}
if (gMapiFlags & MAPI_DIALOG)
diff --git a/shell/source/win32/simplemail/smplmailclient.cxx b/shell/source/win32/simplemail/smplmailclient.cxx
index 4919ded7f889..254de4bb49a0 100644
--- a/shell/source/win32/simplemail/smplmailclient.cxx
+++ b/shell/source/win32/simplemail/smplmailclient.cxx
@@ -193,7 +193,8 @@ const OUString& GetBaseTempDirURL()
}
}
-OUString CSmplMailClient::CopyAttachment(const OUString& sOrigAttachURL, OUString& sUserVisibleName)
+OUString CSmplMailClient::CopyAttachment(const OUString& sOrigAttachURL, OUString& sUserVisibleName,
+ bool& nodelete)
{
// We do two things here:
// 1. Make the attachment temporary filename to not contain any fancy characters possible in
@@ -213,9 +214,10 @@ OUString CSmplMailClient::CopyAttachment(const OUString& sOrigAttachURL, OUStrin
osl::FileBase::getFileURLFromSystemPath(sCorrectedOrigAttachURL, sCorrectedOrigAttachURL);
if (osl::File::copy(sCorrectedOrigAttachURL, sNewAttachmentURL) == osl::FileBase::RC::E_None)
{
- INetURLObject url(sOrigAttachURL, INetURLObject::EncodeMechanism::WasEncoded);
+ INetURLObject url(sCorrectedOrigAttachURL, INetURLObject::EncodeMechanism::WasEncoded);
sUserVisibleName = url.getName(INetURLObject::LAST_SEGMENT, true,
INetURLObject::DecodeMechanism::WithCharset);
+ nodelete = false;
}
else
{
@@ -224,6 +226,7 @@ OUString CSmplMailClient::CopyAttachment(const OUString& sOrigAttachURL, OUStrin
// is the absent attachment file anyway.
sNewAttachmentURL = sOrigAttachURL;
maAttachmentFiles.pop_back();
+ nodelete = true; // Do not delete a non-temporary in senddoc
}
return sNewAttachmentURL;
}
@@ -311,7 +314,8 @@ void CSmplMailClient::assembleCommandLine(
for (const auto& attachment : attachments)
{
OUString sDisplayName;
- OUString sTempFileURL(CopyAttachment(attachment, sDisplayName));
+ bool nodelete = false;
+ OUString sTempFileURL(CopyAttachment(attachment, sDisplayName, nodelete));
OUString sysPath;
osl::FileBase::RC err = osl::FileBase::getSystemPathFromFileURL(sTempFileURL, sysPath);
if (err != osl::FileBase::E_None)
@@ -327,6 +331,8 @@ void CSmplMailClient::assembleCommandLine(
rCommandArgs.push_back(ATTACH_NAME);
rCommandArgs.push_back(sDisplayName);
}
+ if (nodelete)
+ rCommandArgs.push_back("--nodelete");
}
if (!(aFlag & NO_USER_INTERFACE))
diff --git a/shell/source/win32/simplemail/smplmailclient.hxx b/shell/source/win32/simplemail/smplmailclient.hxx
index 5844e99147e5..6f71a1a2a715 100644
--- a/shell/source/win32/simplemail/smplmailclient.hxx
+++ b/shell/source/win32/simplemail/smplmailclient.hxx
@@ -38,7 +38,7 @@ public:
private:
void validateParameter(const css::uno::Reference<css::system::XSimpleMailMessage>& xSimpleMailMessage, sal_Int32 aFlag);
void assembleCommandLine(const css::uno::Reference<css::system::XSimpleMailMessage>& xSimpleMailMessage, sal_Int32 aFlag, std::vector<OUString>& rCommandArgs);
- OUString CopyAttachment(const OUString& sOrigAttachURL, OUString& sUserVisibleName);
+ OUString CopyAttachment(const OUString& sOrigAttachURL, OUString& sUserVisibleName, bool& nodelete);
// Don't try to delete the copied attachment files; let the spawned process cleanup them
void ReleaseAttachments();
diff --git a/solenv/clang-format/blacklist b/solenv/clang-format/blacklist
index 089582dd6dae..fd1e190ed427 100644
--- a/solenv/clang-format/blacklist
+++ b/solenv/clang-format/blacklist
@@ -3885,77 +3885,6 @@ dtrans/source/cnttype/mcnttype.cxx
dtrans/source/cnttype/mcnttype.hxx
dtrans/source/cnttype/mctfentry.cxx
dtrans/source/cnttype/wbench/testcnttype.cxx
-dtrans/source/generic/clipboardmanager.cxx
-dtrans/source/generic/clipboardmanager.hxx
-dtrans/source/generic/dtrans.cxx
-dtrans/source/generic/generic_clipboard.cxx
-dtrans/source/generic/generic_clipboard.hxx
-dtrans/source/inc/DtObjFactory.hxx
-dtrans/source/inc/WinClip.hxx
-dtrans/source/test/test_dtrans.cxx
-dtrans/source/win32/clipb/APNDataObject.hxx
-dtrans/source/win32/clipb/MtaOleClipb.cxx
-dtrans/source/win32/clipb/MtaOleClipb.hxx
-dtrans/source/win32/clipb/WinClipbImpl.cxx
-dtrans/source/win32/clipb/WinClipbImpl.hxx
-dtrans/source/win32/clipb/WinClipboard.cxx
-dtrans/source/win32/clipb/WinClipboard.hxx
-dtrans/source/win32/clipb/wcbentry.cxx
-dtrans/source/win32/dnd/dndentry.cxx
-dtrans/source/win32/dnd/globals.cxx
-dtrans/source/win32/dnd/globals.hxx
-dtrans/source/win32/dnd/idroptarget.cxx
-dtrans/source/win32/dnd/idroptarget.hxx
-dtrans/source/win32/dnd/source.cxx
-dtrans/source/win32/dnd/source.hxx
-dtrans/source/win32/dnd/sourcecontext.cxx
-dtrans/source/win32/dnd/sourcecontext.hxx
-dtrans/source/win32/dnd/target.cxx
-dtrans/source/win32/dnd/target.hxx
-dtrans/source/win32/dnd/targetdragcontext.cxx
-dtrans/source/win32/dnd/targetdragcontext.hxx
-dtrans/source/win32/dnd/targetdropcontext.cxx
-dtrans/source/win32/dnd/targetdropcontext.hxx
-dtrans/source/win32/dtobj/APNDataObject.cxx
-dtrans/source/win32/dtobj/APNDataObject.hxx
-dtrans/source/win32/dtobj/DOTransferable.cxx
-dtrans/source/win32/dtobj/DOTransferable.hxx
-dtrans/source/win32/dtobj/DTransHelper.cxx
-dtrans/source/win32/dtobj/DTransHelper.hxx
-dtrans/source/win32/dtobj/DataFmtTransl.cxx
-dtrans/source/win32/dtobj/DataFmtTransl.hxx
-dtrans/source/win32/dtobj/DtObjFactory.cxx
-dtrans/source/win32/dtobj/Fetc.cxx
-dtrans/source/win32/dtobj/Fetc.hxx
-dtrans/source/win32/dtobj/FetcList.cxx
-dtrans/source/win32/dtobj/FetcList.hxx
-dtrans/source/win32/dtobj/FmtFilter.cxx
-dtrans/source/win32/dtobj/FmtFilter.hxx
-dtrans/source/win32/dtobj/MimeAttrib.hxx
-dtrans/source/win32/dtobj/TxtCnvtHlp.cxx
-dtrans/source/win32/dtobj/TxtCnvtHlp.hxx
-dtrans/source/win32/dtobj/XNotifyingDataObject.cxx
-dtrans/source/win32/dtobj/XNotifyingDataObject.hxx
-dtrans/source/win32/dtobj/XTDataObject.cxx
-dtrans/source/win32/dtobj/XTDataObject.hxx
-dtrans/source/win32/ftransl/ftransl.cxx
-dtrans/source/win32/ftransl/ftransl.hxx
-dtrans/source/win32/ftransl/ftranslentry.cxx
-dtrans/source/win32/misc/ImplHelper.cxx
-dtrans/source/win32/misc/ImplHelper.hxx
-dtrans/source/win32/workbench/XTDo.cxx
-dtrans/source/win32/workbench/XTDo.hxx
-dtrans/source/win32/workbench/test_wincb.cxx
-dtrans/source/win32/workbench/testmarshal.cxx
-dtrans/test/win32/dnd/atlwindow.cxx
-dtrans/test/win32/dnd/atlwindow.hxx
-dtrans/test/win32/dnd/dndTest.cxx
-dtrans/test/win32/dnd/sourcelistener.cxx
-dtrans/test/win32/dnd/sourcelistener.hxx
-dtrans/test/win32/dnd/targetlistener.cxx
-dtrans/test/win32/dnd/targetlistener.hxx
-dtrans/test/win32/dnd/transferable.cxx
-dtrans/test/win32/dnd/transferable.hxx
editeng/inc/editattr.hxx
editeng/inc/editdoc.hxx
editeng/inc/editeng.hxx
@@ -18169,6 +18098,57 @@ vcl/win/app/salinfo.cxx
vcl/win/app/salinst.cxx
vcl/win/app/salshl.cxx
vcl/win/app/saltimer.cxx
+vcl/win/dtrans/APNDataObject.cxx
+vcl/win/dtrans/APNDataObject.hxx
+vcl/win/dtrans/clipboardmanager.cxx
+vcl/win/dtrans/clipboardmanager.hxx
+vcl/win/dtrans/DataFmtTransl.cxx
+vcl/win/dtrans/DataFmtTransl.hxx
+vcl/win/dtrans/dndentry.cxx
+vcl/win/dtrans/DOTransferable.cxx
+vcl/win/dtrans/DOTransferable.hxx
+vcl/win/dtrans/DtObjFactory.cxx
+vcl/win/dtrans/DtObjFactory.hxx
+vcl/win/dtrans/dtrans.cxx
+vcl/win/dtrans/DTransHelper.cxx
+vcl/win/dtrans/DTransHelper.hxx
+vcl/win/dtrans/Fetc.cxx
+vcl/win/dtrans/Fetc.hxx
+vcl/win/dtrans/FetcList.cxx
+vcl/win/dtrans/FetcList.hxx
+vcl/win/dtrans/FmtFilter.cxx
+vcl/win/dtrans/FmtFilter.hxx
+vcl/win/dtrans/ftransl.cxx
+vcl/win/dtrans/ftranslentry.cxx
+vcl/win/dtrans/ftransl.hxx
+vcl/win/dtrans/generic_clipboard.cxx
+vcl/win/dtrans/generic_clipboard.hxx
+vcl/win/dtrans/globals.cxx
+vcl/win/dtrans/globals.hxx
+vcl/win/dtrans/idroptarget.cxx
+vcl/win/dtrans/idroptarget.hxx
+vcl/win/dtrans/ImplHelper.cxx
+vcl/win/dtrans/ImplHelper.hxx
+vcl/win/dtrans/MimeAttrib.hxx
+vcl/win/dtrans/MtaOleClipb.cxx
+vcl/win/dtrans/MtaOleClipb.hxx
+vcl/win/dtrans/sourcecontext.cxx
+vcl/win/dtrans/sourcecontext.hxx
+vcl/win/dtrans/source.cxx
+vcl/win/dtrans/source.hxx
+vcl/win/dtrans/target.cxx
+vcl/win/dtrans/targetdragcontext.cxx
+vcl/win/dtrans/targetdragcontext.hxx
+vcl/win/dtrans/targetdropcontext.cxx
+vcl/win/dtrans/targetdropcontext.hxx
+vcl/win/dtrans/target.hxx
+vcl/win/dtrans/TxtCnvtHlp.cxx
+vcl/win/dtrans/TxtCnvtHlp.hxx
+vcl/win/dtrans/wcbentry.cxx
+vcl/win/dtrans/XNotifyingDataObject.cxx
+vcl/win/dtrans/XNotifyingDataObject.hxx
+vcl/win/dtrans/XTDataObject.cxx
+vcl/win/dtrans/XTDataObject.hxx
vcl/win/gdi/DWriteTextRenderer.cxx
vcl/win/gdi/gdiimpl.cxx
vcl/win/gdi/gdiimpl.hxx
@@ -18190,6 +18170,7 @@ vcl/workben/bmpfuzzer.cxx
vcl/workben/cgmfuzzer.cxx
vcl/workben/commonfuzzer.hxx
vcl/workben/docxfuzzer.cxx
+vcl/workben/dtrans/test_dtrans.cxx
vcl/workben/dxffuzzer.cxx
vcl/workben/epsfuzzer.cxx
vcl/workben/fftester.cxx
@@ -18243,6 +18224,19 @@ vcl/workben/svptest.cxx
vcl/workben/tgafuzzer.cxx
vcl/workben/tiffuzzer.cxx
vcl/workben/vcldemo.cxx
+vcl/workben/win/dnd/atlwindow.cxx
+vcl/workben/win/dnd/atlwindow.hxx
+vcl/workben/win/dnd/dndTest.cxx
+vcl/workben/win/dnd/sourcelistener.cxx
+vcl/workben/win/dnd/sourcelistener.hxx
+vcl/workben/win/dnd/targetlistener.cxx
+vcl/workben/win/dnd/targetlistener.hxx
+vcl/workben/win/dnd/transferable.cxx
+vcl/workben/win/dnd/transferable.hxx
+vcl/workben/win/dtrans/testmarshal.cxx
+vcl/workben/win/dtrans/test_wincb.cxx
+vcl/workben/win/dtrans/XTDo.cxx
+vcl/workben/win/dtrans/XTDo.hxx
vcl/workben/wmffuzzer.cxx
vcl/workben/ww2fuzzer.cxx
vcl/workben/ww6fuzzer.cxx
diff --git a/solenv/flatpak-manifest.in b/solenv/flatpak-manifest.in
index 34fa66721950..6b23c264b816 100644
--- a/solenv/flatpak-manifest.in
+++ b/solenv/flatpak-manifest.in
@@ -256,10 +256,11 @@
"dest-filename": "external/tarballs/language-subtag-registry-2020-04-01.tar.bz2"
},
{
- "url": "https://dev-www.libreoffice.org/src/liblangtag-0.6.2.tar.bz2",
- "sha256": "d6242790324f1432fb0a6fae71b6851f520b2c5a87675497cf8ea14c2924d52e",
+ "url": "https://dev-www.libreoffice.org/src/liblangtag-0.6.3.tar.bz2",
+ "sha256": "1f12a20a02ec3a8d22e54dedb8b683a43c9c160bda1ba337bf1060607ae733bd",
"type": "file",
- "dest-filename": "external/tarballs/liblangtag-0.6.2.tar.bz2"
+ "dest": "external/tarballs",
+ "dest-filename": "liblangtag-0.6.3.tar.bz2"
},
{
"url": "https://dev-www.libreoffice.org/src/libmspub-0.1.4.tar.xz",
diff --git a/solenv/gbuild/partial_build.mk b/solenv/gbuild/partial_build.mk
index 3b4478f23154..ceb389ec47db 100644
--- a/solenv/gbuild/partial_build.mk
+++ b/solenv/gbuild/partial_build.mk
@@ -28,9 +28,7 @@ BUILDDIR := $(if $(wildcard $(gb_partial_build__makefile_dir)../Module_external.
$(gb_partial_build__makefile_dir)..)
endif
-ifeq ($(BUILD_TYPE),)
include $(BUILDDIR)/config_$(gb_Side).mk
-endif
gb_PARTIAL_BUILD := T
include $(SRCDIR)/solenv/gbuild/gbuild.mk
diff --git a/sot/source/unoolestorage/xolesimplestorage.hxx b/sot/source/unoolestorage/xolesimplestorage.hxx
index af97164c1090..20260dc42782 100644
--- a/sot/source/unoolestorage/xolesimplestorage.hxx
+++ b/sot/source/unoolestorage/xolesimplestorage.hxx
@@ -22,6 +22,8 @@
#include <sal/config.h>
+#include <memory>
+
#include <com/sun/star/embed/XOLESimpleStorage.hpp>
#include <com/sun/star/lang/XServiceInfo.hpp>
#include <cppuhelper/implbase.hxx>
diff --git a/starmath/CppunitTest_starmath_qa_cppunit.mk b/starmath/CppunitTest_starmath_qa_cppunit.mk
index ee436749f95a..41e65c499010 100644
--- a/starmath/CppunitTest_starmath_qa_cppunit.mk
+++ b/starmath/CppunitTest_starmath_qa_cppunit.mk
@@ -76,15 +76,9 @@ $(eval $(call gb_CppunitTest_use_components,starmath_qa_cppunit,\
ucb/source/core/ucb1 \
ucb/source/ucp/file/ucpfile1 \
unotools/util/utl \
+ vcl/vcl.common \
))
-ifeq ($(strip $(OS)),WNT)
-$(eval $(call gb_CppunitTest_use_components,starmath_qa_cppunit,\
- dtrans/util/ftransl \
- dtrans/util/sysdtrans \
-))
-endif
-
$(eval $(call gb_CppunitTest_use_configuration,starmath_qa_cppunit))
# vim: set noet sw=4 ts=4:
diff --git a/starmath/inc/token.hxx b/starmath/inc/token.hxx
index 8abe85e61858..45538077da73 100644
--- a/starmath/inc/token.hxx
+++ b/starmath/inc/token.hxx
@@ -23,6 +23,8 @@
#include <rtl/ustring.hxx>
#include <o3tl/typed_flags_set.hxx>
+#include <memory>
+
// TokenGroups
enum class TG {
NONE = 0x000000,
diff --git a/starmath/qa/cppunit/test_cursor.cxx b/starmath/qa/cppunit/test_cursor.cxx
index 080e7a274c4d..b85b5ceef37a 100644
--- a/starmath/qa/cppunit/test_cursor.cxx
+++ b/starmath/qa/cppunit/test_cursor.cxx
@@ -57,6 +57,7 @@ void Test::setUp()
SmGlobals::ensure();
xDocShRef = new SmDocShell(SfxModelFlags::EMBEDDED_OBJECT);
+ xDocShRef->DoInitNew();
}
void Test::tearDown()
diff --git a/starmath/qa/cppunit/test_node.cxx b/starmath/qa/cppunit/test_node.cxx
index dba0b9ff3c40..570cab00d062 100644
--- a/starmath/qa/cppunit/test_node.cxx
+++ b/starmath/qa/cppunit/test_node.cxx
@@ -53,6 +53,7 @@ void NodeTest::setUp()
mxDocShell = new SmDocShell(SfxModelFlags::EMBEDDED_OBJECT |
SfxModelFlags::DISABLE_EMBEDDED_SCRIPTS |
SfxModelFlags::DISABLE_DOCUMENT_RECOVERY);
+ mxDocShell->DoInitNew();
}
void NodeTest::tearDown()
diff --git a/starmath/qa/cppunit/test_nodetotextvisitors.cxx b/starmath/qa/cppunit/test_nodetotextvisitors.cxx
index c3172ab60126..e738351a8d23 100644
--- a/starmath/qa/cppunit/test_nodetotextvisitors.cxx
+++ b/starmath/qa/cppunit/test_nodetotextvisitors.cxx
@@ -90,6 +90,7 @@ void Test::setUp()
SmGlobals::ensure();
xDocShRef = new SmDocShell(SfxModelFlags::EMBEDDED_OBJECT);
+ xDocShRef->DoInitNew();
}
void Test::tearDown()
diff --git a/starmath/qa/extras/mmlexport-test.cxx b/starmath/qa/extras/mmlexport-test.cxx
index 737885d5f73e..c3a2fc5afca0 100644
--- a/starmath/qa/extras/mmlexport-test.cxx
+++ b/starmath/qa/extras/mmlexport-test.cxx
@@ -91,6 +91,7 @@ xmlDocPtr MathMLExportTest::exportAndParse()
void MathMLExportTest::testBlank()
{
+ mxDocShell->DoInitNew();
mxDocShell->SetText("x`y~~z");
xmlDocPtr pDoc = exportAndParse();
assertXPath(pDoc, "/m:math/m:semantics/m:mrow/m:mspace[1]", "width", "0.5em");
@@ -99,6 +100,7 @@ void MathMLExportTest::testBlank()
void MathMLExportTest::testTdf97049()
{
+ mxDocShell->DoInitNew();
mxDocShell->SetText("intd {{1 over x} dx}");
xmlDocPtr pDoc = exportAndParse();
assertXPath(pDoc, "/m:math/m:semantics/m:mrow/m:mo[1]", "stretchy", "true");
@@ -111,6 +113,7 @@ void MathMLExportTest::testTdf101022()
{
#define CHECK_MATHVARIANT(capital, small) do \
{ \
+ mxDocShell->DoInitNew(); \
mxDocShell->SetText("%GAMMA %iGAMMA {ital %GAMMA} {nitalic %iGAMMA} " \
"%gamma %igamma {ital %gamma} {nitalic %igamma}"); \
xmlDocPtr pDoc = exportAndParse(); \
diff --git a/starmath/source/accessibility.cxx b/starmath/source/accessibility.cxx
index d96300bf785b..2de7e0ec0664 100644
--- a/starmath/source/accessibility.cxx
+++ b/starmath/source/accessibility.cxx
@@ -997,10 +997,10 @@ bool SmTextForwarder::IsValid() const
return pEditEngine && pEditEngine->GetUpdateMode();
}
-OUString SmTextForwarder::CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rpTxtColor, boost::optional<Color>& rpFldColor )
+OUString SmTextForwarder::CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rpTxtColor, boost::optional<Color>& rpFldColor, boost::optional<FontLineStyle>& rpFldLineStyle )
{
EditEngine *pEditEngine = rEditAcc.GetEditEngine();
- return pEditEngine ? pEditEngine->CalcFieldValue(rField, nPara, nPos, rpTxtColor, rpFldColor) : OUString();
+ return pEditEngine ? pEditEngine->CalcFieldValue(rField, nPara, nPos, rpTxtColor, rpFldColor, rpFldLineStyle) : OUString();
}
void SmTextForwarder::FieldClicked(const SvxFieldItem&)
diff --git a/starmath/source/accessibility.hxx b/starmath/source/accessibility.hxx
index 8dcf6a011a18..8ee26f1948d7 100644
--- a/starmath/source/accessibility.hxx
+++ b/starmath/source/accessibility.hxx
@@ -197,7 +197,7 @@ public:
virtual SfxItemPool* GetPool() const override;
- virtual OUString CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rpTxtColor, boost::optional<Color>& rpFldColor ) override;
+ virtual OUString CalcFieldValue( const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos, boost::optional<Color>& rpTxtColor, boost::optional<Color>& rpFldColor, boost::optional<FontLineStyle>& rpFldLineStyle ) override;
virtual void FieldClicked(const SvxFieldItem&) override;
virtual bool IsValid() const override;
diff --git a/svx/source/accessibility/AccessibleEmptyEditSource.cxx b/svx/source/accessibility/AccessibleEmptyEditSource.cxx
index c39bbc26b6ac..31ec00293bd8 100644
--- a/svx/source/accessibility/AccessibleEmptyEditSource.cxx
+++ b/svx/source/accessibility/AccessibleEmptyEditSource.cxx
@@ -120,7 +120,7 @@ namespace accessibility
//XTextCopy
void CopyText(const SvxTextForwarder& ) override {}
- OUString CalcFieldValue( const SvxFieldItem& /*rField*/, sal_Int32 /*nPara*/, sal_Int32 /*nPos*/, boost::optional<Color>& /*rpTxtColor*/, boost::optional<Color>& /*rpFldColor*/ ) override
+ OUString CalcFieldValue( const SvxFieldItem& /*rField*/, sal_Int32 /*nPara*/, sal_Int32 /*nPos*/, boost::optional<Color>& /*rpTxtColor*/, boost::optional<Color>& /*rpFldColor*/, boost::optional<FontLineStyle>& /*rpFldLineStyle*/ ) override
{
return OUString();
}
diff --git a/svx/source/dialog/ClassificationEditView.cxx b/svx/source/dialog/ClassificationEditView.cxx
index bc2266626c35..646b4a75b4a2 100644
--- a/svx/source/dialog/ClassificationEditView.cxx
+++ b/svx/source/dialog/ClassificationEditView.cxx
@@ -30,7 +30,8 @@ ClassificationEditEngine::ClassificationEditEngine(SfxItemPool* pItemPool)
{}
OUString ClassificationEditEngine::CalcFieldValue(const SvxFieldItem& rField, sal_Int32 /*nPara*/,
- sal_Int32 /*nPos*/, boost::optional<Color>& /*rTxtColor*/, boost::optional<Color>& /*rFldColor*/)
+ sal_Int32 /*nPos*/, boost::optional<Color>& /*rTxtColor*/, boost::optional<Color>& /*rFldColor*/,
+ boost::optional<FontLineStyle>& /*rFldLineStyle*/)
{
OUString aString;
const ClassificationField* pClassificationField = dynamic_cast<const ClassificationField*>(rField.GetField());
diff --git a/svx/source/dialog/SafeModeDialog.cxx b/svx/source/dialog/SafeModeDialog.cxx
index 3d2e0e659b83..5303ed99973d 100644
--- a/svx/source/dialog/SafeModeDialog.cxx
+++ b/svx/source/dialog/SafeModeDialog.cxx
@@ -91,7 +91,7 @@ SafeModeDialog::SafeModeDialog(weld::Window* pParent)
RadioBtnHdl(*mxRadioRestore);
// Set URL for help button (module=safemode)
- mxBugLink->set_uri("https://www.cib.de/libreoffice-poweredbycib");
+ mxBugLink->set_uri("https://www.cib.de/office");
mxUserProfileLink->set_uri(comphelper::BackupFileHelper::getUserProfileURL());
}
diff --git a/svx/source/dialog/crashreportdlg.cxx b/svx/source/dialog/crashreportdlg.cxx
index d09fde9b1882..398073efb527 100644
--- a/svx/source/dialog/crashreportdlg.cxx
+++ b/svx/source/dialog/crashreportdlg.cxx
@@ -12,12 +12,18 @@
#include <config_folders.h>
+#include <i18nlangtag/languagetag.hxx>
#include <rtl/bootstrap.hxx>
#include <desktop/crashreport.hxx>
#include <sfx2/safemode.hxx>
#include <comphelper/processfactory.hxx>
+#include <officecfg/Office/Common.hxx>
#include <osl/file.hxx>
+#include <unotools/configmgr.hxx>
+#include <com/sun/star/configuration/ReadOnlyAccess.hpp>
+#include <com/sun/star/configuration/theDefaultProvider.hpp>
+#include <com/sun/star/lang/XLocalizable.hpp>
#include <com/sun/star/task/OfficeRestartManager.hpp>
#include <com/sun/star/task/XInteractionHandler.hpp>
@@ -31,10 +37,40 @@ CrashReportDialog::CrashReportDialog(weld::Window* pParent)
, mxEditPostUpload(m_xBuilder->weld_text_view("ed_post"))
, mxCBSafeMode(m_xBuilder->weld_check_button("check_safemode"))
{
- maSuccessMsg = mxEditPostUpload->get_text();
+ auto const config = css::configuration::ReadOnlyAccess::create(
+ comphelper::getProcessComponentContext(),
+ LanguageTag(
+ css::uno::Reference<css::lang::XLocalizable>(
+ css::configuration::theDefaultProvider::get(
+ comphelper::getProcessComponentContext()),
+ css::uno::UNO_QUERY_THROW)->
+ getLocale()).getBcp47());
+
+ auto const preText = config->getByHierarchicalName(
+ "/org.openoffice.Office.Common/Misc/CrashReportPreSendNotification");
+ if (OUString text; preText >>= text) {
+ mxEditPreUpload->set_label(
+ text.replaceAll("%PRODUCTNAME", utl::ConfigManager::getProductName()));
+ }
+
+ auto const postText = config->getByHierarchicalName(
+ "/org.openoffice.Office.Common/Misc/CrashReportPostSendNotification");
+ if (OUString text; postText >>= text) {
+ OUString url;
+ rtl::Bootstrap::get("CrashDumpUrl", url);
+ maSuccessMsg = text.replaceAll("%CrashDumpUrl%", url);
+ } else {
+ maSuccessMsg = mxEditPostUpload->get_text();
+ }
+
+ auto const offerSafeMode = officecfg::Office::Common::Misc::OfferSafeMode::get();
+ mxCBSafeMode->set_visible(offerSafeMode);
auto nWidth = mxEditPreUpload->get_preferred_size().Width();
- nWidth = std::max(nWidth, mxCBSafeMode->get_size_request().Width());
+ if (offerSafeMode)
+ {
+ nWidth = std::max(nWidth, mxCBSafeMode->get_size_request().Width());
+ }
mxEditPreUpload->set_size_request(nWidth, -1);
mxCBSafeMode->set_size_request(nWidth, -1);
diff --git a/svx/source/dialog/fntctrl.cxx b/svx/source/dialog/fntctrl.cxx
index d312d7ad5f49..10c84ca95222 100644
--- a/svx/source/dialog/fntctrl.cxx
+++ b/svx/source/dialog/fntctrl.cxx
@@ -1014,7 +1014,7 @@ void SvxFontPrevWindow::SetFromItemSet(const SfxItemSet &rSet, bool bPreviewBack
rCTLFont.SetFillColor( rColor );
}
else
- bTransparent = TRUE;
+ bTransparent = true;
rFont.SetTransparent( bTransparent );
rCJKFont.SetTransparent( bTransparent );
diff --git a/svx/source/dialog/weldeditview.cxx b/svx/source/dialog/weldeditview.cxx
index c7de008f28d2..1ecdb73dd30d 100644
--- a/svx/source/dialog/weldeditview.cxx
+++ b/svx/source/dialog/weldeditview.cxx
@@ -236,7 +236,8 @@ public:
virtual OUString CalcFieldValue(const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos,
boost::optional<Color>& rpTxtColor,
- boost::optional<Color>& rpFldColor) override;
+ boost::optional<Color>& rpFldColor,
+ boost::optional<FontLineStyle>& rpFldLineStyle) override;
virtual void FieldClicked(const SvxFieldItem&) override;
virtual bool IsValid() const override;
@@ -899,10 +900,12 @@ bool WeldTextForwarder::IsValid() const
OUString WeldTextForwarder::CalcFieldValue(const SvxFieldItem& rField, sal_Int32 nPara,
sal_Int32 nPos, boost::optional<Color>& rpTxtColor,
- boost::optional<Color>& rpFldColor)
+ boost::optional<Color>& rpFldColor,
+ boost::optional<FontLineStyle>& rpFldLineStyle)
{
EditEngine* pEditEngine = m_rEditAcc.GetEditEngine();
- return pEditEngine ? pEditEngine->CalcFieldValue(rField, nPara, nPos, rpTxtColor, rpFldColor)
+ return pEditEngine ? pEditEngine->CalcFieldValue(rField, nPara, nPos, rpTxtColor, rpFldColor,
+ rpFldLineStyle)
: OUString();
}
diff --git a/svx/source/sdr/contact/viewobjectcontact.cxx b/svx/source/sdr/contact/viewobjectcontact.cxx
index d15ba27dd9f9..db9498a726ad 100644
--- a/svx/source/sdr/contact/viewobjectcontact.cxx
+++ b/svx/source/sdr/contact/viewobjectcontact.cxx
@@ -38,6 +38,7 @@
#include <svx/svdoole2.hxx>
#include <sdr/contact/viewcontactofsdrole2obj.hxx>
#include <drawinglayer/primitive2d/transformprimitive2d.hxx>
+#include <sal/log.hxx>
using namespace com::sun::star;
@@ -461,10 +462,39 @@ drawinglayer::primitive2d::Primitive2DContainer ViewObjectContact::getPrimitive2
// (->View) that has then all needed information
const basegfx::B2DVector& ViewObjectContact::getGridOffset() const
{
- if(0.0 == maGridOffset.getX() && 0.0 == maGridOffset.getY() && GetObjectContact().supportsGridOffsets())
+ if (GetObjectContact().supportsGridOffsets())
{
- // create on-demand
- GetObjectContact().calculateGridOffsetForViewOjectContact(const_cast<ViewObjectContact*>(this)->maGridOffset, *this);
+ if (fabs(maGridOffset.getX()) > 1000.0)
+ {
+ // Huge offsets are a hint for error -> usually the conditions for
+ // calculation have changed. E.g. - I saw errors with +/-5740, that
+ // was in the environment of massive external UNO API using LO as
+ // target.
+ // If condtions for this calculation change, it is usually required to call
+ // - ViewObjectContact::resetGridOffset(), or
+ // - ObjectContact::resetAllGridOffsets() or
+ // - ScDrawView::resetGridOffsetsForAllSdrPageViews()
+ // as it is done e.g. when zoom changes (see ScDrawView::RecalcScale()).
+ // Theoretically these resets have to be done for any precondition
+ // changed that is used in the calculation of that value (see
+ // ScDrawView::calculateGridOffsetForSdrObject).
+ // This is not complete and would be hard to do so.
+ // Since it is just a buffered value and re-calculation is not
+ // expensive (linear O(n)) we can just reset suspicious values here.
+ // Hopefully - when that non-linear ViewTransformation problem for
+ // the calc-view gets solved one day - all this can be removed
+ // again. For now, let's just reset here and force re-calculation.
+ // Add a SAL_WARN to inform about this.
+ SAL_WARN("svx", "Suspicious GridOffset value resetted (!)");
+ const_cast<ViewObjectContact*>(this)->maGridOffset.setX(0.0);
+ const_cast<ViewObjectContact*>(this)->maGridOffset.setY(0.0);
+ }
+
+ if(0.0 == maGridOffset.getX() && 0.0 == maGridOffset.getY() && GetObjectContact().supportsGridOffsets())
+ {
+ // create on-demand
+ GetObjectContact().calculateGridOffsetForViewOjectContact(const_cast<ViewObjectContact*>(this)->maGridOffset, *this);
+ }
}
return maGridOffset;
diff --git a/svx/source/svdraw/svdedxv.cxx b/svx/source/svdraw/svdedxv.cxx
index bafc02dc27db..8e6ee447fb9c 100644
--- a/svx/source/svdraw/svdedxv.cxx
+++ b/svx/source/svdraw/svdedxv.cxx
@@ -1014,14 +1014,19 @@ IMPL_LINK(SdrObjEditView, ImpOutlinerCalcFieldValueHdl, EditFieldInfo*, pFI, voi
{
boost::optional<Color> pTxtCol;
boost::optional<Color> pFldCol;
+ boost::optional<FontLineStyle> pFldLineStyle;
bOk = pTextObj->CalcFieldValue(pFI->GetField(), pFI->GetPara(), pFI->GetPos(), true,
- pTxtCol, pFldCol, rStr);
+ pTxtCol, pFldCol, pFldLineStyle, rStr);
if (bOk)
{
if (pTxtCol)
{
pFI->SetTextColor(*pTxtCol);
}
+ if (pFldLineStyle)
+ {
+ pFI->SetFontLineStyle(*pFldLineStyle);
+ }
if (pFldCol)
{
pFI->SetFieldColor(*pFldCol);
diff --git a/svx/source/svdraw/svdomeas.cxx b/svx/source/svdraw/svdomeas.cxx
index c992fadae228..b605afaa1dc7 100644
--- a/svx/source/svdraw/svdomeas.cxx
+++ b/svx/source/svdraw/svdomeas.cxx
@@ -545,8 +545,8 @@ basegfx::B2DPolyPolygon SdrMeasureObj::ImpCalcXPoly(const ImpMeasurePoly& rPol)
}
bool SdrMeasureObj::CalcFieldValue(const SvxFieldItem& rField, sal_Int32 nPara, sal_uInt16 nPos,
- bool bEdit,
- boost::optional<Color>& rpTxtColor, boost::optional<Color>& rpFldColor, OUString& rRet) const
+ bool bEdit, boost::optional<Color>& rpTxtColor, boost::optional<Color>& rpFldColor,
+ boost::optional<FontLineStyle>& rpFldLineStyle, OUString& rRet) const
{
const SvxFieldData* pField=rField.GetField();
const SdrMeasureField* pMeasureField=dynamic_cast<const SdrMeasureField*>( pField );
@@ -558,7 +558,7 @@ bool SdrMeasureObj::CalcFieldValue(const SvxFieldItem& rField, sal_Int32 nPara,
}
return true;
} else {
- return SdrTextObj::CalcFieldValue(rField,nPara,nPos,bEdit,rpTxtColor,rpFldColor,rRet);
+ return SdrTextObj::CalcFieldValue(rField,nPara,nPos,bEdit,rpTxtColor,rpFldColor,rpFldLineStyle,rRet);
}
}
diff --git a/svx/source/svdraw/svdoole2.cxx b/svx/source/svdraw/svdoole2.cxx
index 16617ecaf94f..91a016e9ac93 100644
--- a/svx/source/svdraw/svdoole2.cxx
+++ b/svx/source/svdraw/svdoole2.cxx
@@ -78,6 +78,7 @@
#include <sdr/contact/viewcontactofsdrole2obj.hxx>
#include <svx/svdograf.hxx>
#include <sdr/properties/oleproperties.hxx>
+#include <svx/unoshape.hxx>
#include <svx/xlineit0.hxx>
#include <svx/xlnclit.hxx>
#include <svx/xbtmpit.hxx>
@@ -232,61 +233,61 @@ void SAL_CALL SdrLightEmbeddedClient_Impl::notifyEvent( const document::EventObj
SolarMutexGuard aGuard;
// the code currently makes sense only in case there is no other client
- if ( mpObj && mpObj->GetAspect() != embed::Aspects::MSOLE_ICON && aEvent.EventName == "OnVisAreaChanged"
- && mpObj->GetObjRef().is() && mpObj->GetObjRef()->getClientSite() == uno::Reference< embed::XEmbeddedClient >( this ) )
- {
- try
- {
- MapUnit aContainerMapUnit( MapUnit::Map100thMM );
- uno::Reference< embed::XVisualObject > xParentVis( mpObj->GetParentXModel(), uno::UNO_QUERY );
- if ( xParentVis.is() )
- aContainerMapUnit = VCLUnoHelper::UnoEmbed2VCLMapUnit( xParentVis->getMapUnit( mpObj->GetAspect() ) );
+ if ( !(mpObj && mpObj->GetAspect() != embed::Aspects::MSOLE_ICON && aEvent.EventName == "OnVisAreaChanged"
+ && mpObj->GetObjRef().is() && mpObj->GetObjRef()->getClientSite() == uno::Reference< embed::XEmbeddedClient >( this )) )
+ return;
- MapUnit aObjMapUnit = VCLUnoHelper::UnoEmbed2VCLMapUnit( mpObj->GetObjRef()->getMapUnit( mpObj->GetAspect() ) );
+ try
+ {
+ MapUnit aContainerMapUnit( MapUnit::Map100thMM );
+ uno::Reference< embed::XVisualObject > xParentVis( mpObj->GetParentXModel(), uno::UNO_QUERY );
+ if ( xParentVis.is() )
+ aContainerMapUnit = VCLUnoHelper::UnoEmbed2VCLMapUnit( xParentVis->getMapUnit( mpObj->GetAspect() ) );
- tools::Rectangle aVisArea;
- awt::Size aSz;
- try
- {
- aSz = mpObj->GetObjRef()->getVisualAreaSize( mpObj->GetAspect() );
- }
- catch( embed::NoVisualAreaSizeException& )
- {
- OSL_FAIL( "No visual area size!" );
- aSz.Width = 5000;
- aSz.Height = 5000;
- }
- catch( uno::Exception& )
- {
- OSL_FAIL( "Unexpected exception!" );
- aSz.Width = 5000;
- aSz.Height = 5000;
- }
+ MapUnit aObjMapUnit = VCLUnoHelper::UnoEmbed2VCLMapUnit( mpObj->GetObjRef()->getMapUnit( mpObj->GetAspect() ) );
- aVisArea.SetSize( Size( aSz.Width, aSz.Height ) );
- aVisArea = OutputDevice::LogicToLogic(aVisArea, MapMode(aObjMapUnit), MapMode(aContainerMapUnit));
- Size aScaledSize( static_cast< long >( m_aScaleWidth * Fraction( aVisArea.GetWidth() ) ),
- static_cast< long >( m_aScaleHeight * Fraction( aVisArea.GetHeight() ) ) );
- tools::Rectangle aLogicRect( mpObj->GetLogicRect() );
-
- // react to the change if the difference is bigger than one pixel
- Size aPixelDiff =
- Application::GetDefaultDevice()->LogicToPixel(
- Size( aLogicRect.GetWidth() - aScaledSize.Width(),
- aLogicRect.GetHeight() - aScaledSize.Height() ),
- MapMode(aContainerMapUnit));
- if( aPixelDiff.Width() || aPixelDiff.Height() )
- {
- mpObj->SetLogicRect( tools::Rectangle( aLogicRect.TopLeft(), aScaledSize ) );
- mpObj->BroadcastObjectChange();
- }
- else
- mpObj->ActionChanged();
+ tools::Rectangle aVisArea;
+ awt::Size aSz;
+ try
+ {
+ aSz = mpObj->GetObjRef()->getVisualAreaSize( mpObj->GetAspect() );
+ }
+ catch( embed::NoVisualAreaSizeException& )
+ {
+ OSL_FAIL( "No visual area size!" );
+ aSz.Width = 5000;
+ aSz.Height = 5000;
}
catch( uno::Exception& )
{
OSL_FAIL( "Unexpected exception!" );
+ aSz.Width = 5000;
+ aSz.Height = 5000;
}
+
+ aVisArea.SetSize( Size( aSz.Width, aSz.Height ) );
+ aVisArea = OutputDevice::LogicToLogic(aVisArea, MapMode(aObjMapUnit), MapMode(aContainerMapUnit));
+ Size aScaledSize( static_cast< long >( m_aScaleWidth * Fraction( aVisArea.GetWidth() ) ),
+ static_cast< long >( m_aScaleHeight * Fraction( aVisArea.GetHeight() ) ) );
+ tools::Rectangle aLogicRect( mpObj->GetLogicRect() );
+
+ // react to the change if the difference is bigger than one pixel
+ Size aPixelDiff =
+ Application::GetDefaultDevice()->LogicToPixel(
+ Size( aLogicRect.GetWidth() - aScaledSize.Width(),
+ aLogicRect.GetHeight() - aScaledSize.Height() ),
+ MapMode(aContainerMapUnit));
+ if( aPixelDiff.Width() || aPixelDiff.Height() )
+ {
+ mpObj->SetLogicRect( tools::Rectangle( aLogicRect.TopLeft(), aScaledSize ) );
+ mpObj->BroadcastObjectChange();
+ }
+ else
+ mpObj->ActionChanged();
+ }
+ catch( uno::Exception& )
+ {
+ OSL_FAIL( "Unexpected exception!" );
}
}
@@ -499,32 +500,32 @@ void SAL_CALL SdrLightEmbeddedClient_Impl::changedPlacement( const awt::Rectangl
tools::Rectangle aNewLogicRect = Application::GetDefaultDevice()->PixelToLogic(aNewPixelRect, MapMode(aContainerMapUnit));
tools::Rectangle aLogicRect = impl_getScaledRect_nothrow();
- if ( aNewLogicRect != aLogicRect )
- {
- // the calculation of the object area has not changed the object size
- // it should be done here then
- //SfxBooleanFlagGuard aGuard( m_bResizeNoScale, true );
-
- // new size of the object area without scaling
- Size aNewObjSize( long( aNewLogicRect.GetWidth() / m_aScaleWidth ),
- long( aNewLogicRect.GetHeight() / m_aScaleHeight ) );
+ if ( aNewLogicRect == aLogicRect )
+ return;
- // now remove scaling from new placement and keep this at the new object area
- aNewLogicRect.SetSize( aNewObjSize );
- // react to the change if the difference is bigger than one pixel
- Size aPixelDiff =
- Application::GetDefaultDevice()->LogicToPixel(
- Size( aLogicRect.GetWidth() - aNewObjSize.Width(),
- aLogicRect.GetHeight() - aNewObjSize.Height() ),
- MapMode(aContainerMapUnit));
- if( aPixelDiff.Width() || aPixelDiff.Height() )
- {
- mpObj->SetLogicRect( tools::Rectangle( aLogicRect.TopLeft(), aNewObjSize ) );
- mpObj->BroadcastObjectChange();
- }
- else
- mpObj->ActionChanged();
+ // the calculation of the object area has not changed the object size
+ // it should be done here then
+ //SfxBooleanFlagGuard aGuard( m_bResizeNoScale, true );
+
+ // new size of the object area without scaling
+ Size aNewObjSize( long( aNewLogicRect.GetWidth() / m_aScaleWidth ),
+ long( aNewLogicRect.GetHeight() / m_aScaleHeight ) );
+
+ // now remove scaling from new placement and keep this at the new object area
+ aNewLogicRect.SetSize( aNewObjSize );
+ // react to the change if the difference is bigger than one pixel
+ Size aPixelDiff =
+ Application::GetDefaultDevice()->LogicToPixel(
+ Size( aLogicRect.GetWidth() - aNewObjSize.Width(),
+ aLogicRect.GetHeight() - aNewObjSize.Height() ),
+ MapMode(aContainerMapUnit));
+ if( aPixelDiff.Width() || aPixelDiff.Height() )
+ {
+ mpObj->SetLogicRect( tools::Rectangle( aLogicRect.TopLeft(), aNewObjSize ) );
+ mpObj->BroadcastObjectChange();
}
+ else
+ mpObj->ActionChanged();
}
// XWindowSupplier
@@ -598,6 +599,35 @@ void SdrEmbedObjectLink::Closed()
SvBaseLink::Closed();
}
+SdrIFrameLink::SdrIFrameLink(SdrOle2Obj* pObject)
+ : ::sfx2::SvBaseLink(::SfxLinkUpdateMode::ONCALL, SotClipboardFormatId::SVXB)
+ , m_pObject(pObject)
+{
+ SetSynchron( false );
+}
+
+::sfx2::SvBaseLink::UpdateResult SdrIFrameLink::DataChanged(
+ const OUString&, const uno::Any& )
+{
+ uno::Reference<embed::XEmbeddedObject> xObject = m_pObject->GetObjRef();
+ uno::Reference<embed::XCommonEmbedPersist> xPersObj(xObject, uno::UNO_QUERY);
+ if (xPersObj.is())
+ {
+ // let the IFrameObject reload the link
+ try
+ {
+ xPersObj->reload(uno::Sequence<beans::PropertyValue>(), uno::Sequence<beans::PropertyValue>());
+ }
+ catch (const uno::Exception&)
+ {
+ }
+
+ m_pObject->SetChanged();
+ }
+
+ return SUCCESS;
+}
+
class SdrOle2ObjImpl
{
public:
@@ -615,7 +645,7 @@ public:
bool mbLoadingOLEObjectFailed:1; // New local var to avoid repeated loading if load of OLE2 fails
bool mbConnected:1;
- SdrEmbedObjectLink* mpObjectLink;
+ sfx2::SvBaseLink* mpObjectLink;
OUString maLinkURL;
rtl::Reference<SvxUnoShapeModifyListener> mxModifyListener;
@@ -815,7 +845,7 @@ bool SdrOle2Obj::IsEmpty() const
return !mpImpl->mxObjRef.is();
}
-void SdrOle2Obj::Connect()
+void SdrOle2Obj::Connect(SvxOle2Shape* pCreator)
{
if( IsEmptyPresObj() )
return;
@@ -828,7 +858,7 @@ void SdrOle2Obj::Connect()
return;
}
- Connect_Impl();
+ Connect_Impl(pCreator);
AddListeners_Impl();
}
@@ -890,23 +920,23 @@ void SdrOle2Obj::BreakFileLink_Impl()
{
uno::Reference<document::XStorageBasedDocument> xDoc(getSdrModelFromSdrObject().getUnoModel(), uno::UNO_QUERY);
- if ( xDoc.is() )
+ if ( !xDoc.is() )
+ return;
+
+ uno::Reference< embed::XStorage > xStorage = xDoc->getDocumentStorage();
+ if ( !xStorage.is() )
+ return;
+
+ try
{
- uno::Reference< embed::XStorage > xStorage = xDoc->getDocumentStorage();
- if ( xStorage.is() )
- {
- try
- {
- uno::Reference< embed::XLinkageSupport > xLinkSupport( mpImpl->mxObjRef.GetObject(), uno::UNO_QUERY_THROW );
- xLinkSupport->breakLink( xStorage, mpImpl->aPersistName );
- DisconnectFileLink_Impl();
- mpImpl->maLinkURL.clear();
- }
- catch( css::uno::Exception& )
- {
- TOOLS_WARN_EXCEPTION( "svx", "SdrOle2Obj::BreakFileLink_Impl()" );
- }
- }
+ uno::Reference< embed::XLinkageSupport > xLinkSupport( mpImpl->mxObjRef.GetObject(), uno::UNO_QUERY_THROW );
+ xLinkSupport->breakLink( xStorage, mpImpl->aPersistName );
+ DisconnectFileLink_Impl();
+ mpImpl->maLinkURL.clear();
+ }
+ catch( css::uno::Exception& )
+ {
+ TOOLS_WARN_EXCEPTION( "svx", "SdrOle2Obj::BreakFileLink_Impl()" );
}
}
@@ -923,105 +953,143 @@ void SdrOle2Obj::DisconnectFileLink_Impl()
void SdrOle2Obj::CheckFileLink_Impl()
{
- if (mpImpl->mxObjRef.GetObject().is() && !mpImpl->mpObjectLink)
+ if (!(mpImpl->mxObjRef.GetObject().is() && !mpImpl->mpObjectLink))
+ return;
+
+ try
{
- try
- {
- uno::Reference< embed::XLinkageSupport > xLinkSupport( mpImpl->mxObjRef.GetObject(), uno::UNO_QUERY );
+ uno::Reference<embed::XEmbeddedObject> xObject = mpImpl->mxObjRef.GetObject();
+ if (!xObject)
+ return;
+
+ bool bIFrame = false;
- if ( xLinkSupport.is() && xLinkSupport->isLink() )
+ OUString aLinkURL;
+ uno::Reference<embed::XLinkageSupport> xLinkSupport(xObject, uno::UNO_QUERY);
+ if (xLinkSupport)
+ {
+ if (xLinkSupport->isLink())
+ aLinkURL = xLinkSupport->getLinkURL();
+ }
+ else
+ {
+ // get IFrame (Floating Frames) listed and updatable from the
+ // manage links dialog
+ SvGlobalName aClassId(xObject->getClassID());
+ if (aClassId == SvGlobalName(SO3_IFRAME_CLASSID))
{
- OUString aLinkURL = xLinkSupport->getLinkURL();
+ uno::Reference<beans::XPropertySet> xSet(xObject->getComponent(), uno::UNO_QUERY);
+ if (xSet.is())
+ xSet->getPropertyValue("FrameURL") >>= aLinkURL;
+ bIFrame = true;
+ }
+ }
- if ( !aLinkURL.isEmpty() )
- {
- // this is a file link so the model link manager should handle it
- sfx2::LinkManager* pLinkManager(getSdrModelFromSdrObject().GetLinkManager());
+ if (!aLinkURL.isEmpty()) // this is a file link so the model link manager should handle it
+ {
+ sfx2::LinkManager* pLinkManager(getSdrModelFromSdrObject().GetLinkManager());
- if ( pLinkManager )
- {
- mpImpl->mpObjectLink = new SdrEmbedObjectLink( this );
- mpImpl->maLinkURL = aLinkURL;
- pLinkManager->InsertFileLink( *mpImpl->mpObjectLink, OBJECT_CLIENT_OLE, aLinkURL );
- mpImpl->mpObjectLink->Connect();
- }
+ if ( pLinkManager )
+ {
+ SdrEmbedObjectLink* pEmbedObjectLink = nullptr;
+ if (!bIFrame)
+ {
+ pEmbedObjectLink = new SdrEmbedObjectLink(this);
+ mpImpl->mpObjectLink = pEmbedObjectLink;
}
+ else
+ mpImpl->mpObjectLink = new SdrIFrameLink(this);
+ mpImpl->maLinkURL = aLinkURL;
+ pLinkManager->InsertFileLink( *mpImpl->mpObjectLink, OBJECT_CLIENT_OLE, aLinkURL );
+ if (pEmbedObjectLink)
+ pEmbedObjectLink->Connect();
}
}
- catch (const css::uno::Exception&)
- {
- TOOLS_WARN_EXCEPTION("svx", "SdrOle2Obj::CheckFileLink_Impl()");
- }
+ }
+ catch (const css::uno::Exception&)
+ {
+ TOOLS_WARN_EXCEPTION("svx", "SdrOle2Obj::CheckFileLink_Impl()");
}
}
-void SdrOle2Obj::Connect_Impl()
+void SdrOle2Obj::Connect_Impl(SvxOle2Shape* pCreator)
{
- if(!mpImpl->aPersistName.isEmpty() )
+ if(mpImpl->aPersistName.isEmpty() )
+ return;
+
+ try
{
- try
+ ::comphelper::IEmbeddedHelper* pPers(getSdrModelFromSdrObject().GetPersist());
+
+ if ( pPers )
{
- ::comphelper::IEmbeddedHelper* pPers(getSdrModelFromSdrObject().GetPersist());
+ comphelper::EmbeddedObjectContainer& rContainer = pPers->getEmbeddedObjectContainer();
- if ( pPers )
+ if ( !rContainer.HasEmbeddedObject( mpImpl->aPersistName )
+ || ( mpImpl->mxObjRef.is() && !rContainer.HasEmbeddedObject( mpImpl->mxObjRef.GetObject() ) ) )
{
- comphelper::EmbeddedObjectContainer& rContainer = pPers->getEmbeddedObjectContainer();
-
- if ( !rContainer.HasEmbeddedObject( mpImpl->aPersistName )
- || ( mpImpl->mxObjRef.is() && !rContainer.HasEmbeddedObject( mpImpl->mxObjRef.GetObject() ) ) )
- {
- // object not known to container document
- // No object -> disaster!
- DBG_ASSERT( mpImpl->mxObjRef.is(), "No object in connect!");
- if ( mpImpl->mxObjRef.is() )
- {
- // object came from the outside, now add it to the container
- OUString aTmp;
- rContainer.InsertEmbeddedObject( mpImpl->mxObjRef.GetObject(), aTmp );
- mpImpl->aPersistName = aTmp;
- }
- }
- else if ( !mpImpl->mxObjRef.is() )
+ // object not known to container document
+ // No object -> disaster!
+ DBG_ASSERT( mpImpl->mxObjRef.is(), "No object in connect!");
+ if ( mpImpl->mxObjRef.is() )
{
- mpImpl->mxObjRef.Assign( rContainer.GetEmbeddedObject( mpImpl->aPersistName ), mpImpl->mxObjRef.GetViewAspect() );
- mpImpl->mbTypeAsked = false;
+ // object came from the outside, now add it to the container
+ OUString aTmp;
+ rContainer.InsertEmbeddedObject( mpImpl->mxObjRef.GetObject(), aTmp );
+ mpImpl->aPersistName = aTmp;
}
+ }
+ else if ( !mpImpl->mxObjRef.is() )
+ {
+ mpImpl->mxObjRef.Assign( rContainer.GetEmbeddedObject( mpImpl->aPersistName ), mpImpl->mxObjRef.GetViewAspect() );
+ mpImpl->mbTypeAsked = false;
+ }
- if ( mpImpl->mxObjRef.GetObject().is() )
- {
- mpImpl->mxObjRef.AssignToContainer( &rContainer, mpImpl->aPersistName );
- mpImpl->mbConnected = true;
- mpImpl->mxObjRef.Lock();
- }
+ if ( mpImpl->mxObjRef.GetObject().is() )
+ {
+ mpImpl->mxObjRef.AssignToContainer( &rContainer, mpImpl->aPersistName );
+ mpImpl->mbConnected = true;
+ mpImpl->mxObjRef.Lock();
}
+ }
- if ( mpImpl->mxObjRef.is() )
+ if (pCreator)
+ {
+ OUString sFrameURL(pCreator->GetAndClearInitialFrameURL());
+ if (!sFrameURL.isEmpty() && svt::EmbeddedObjectRef::TryRunningState(mpImpl->mxObjRef.GetObject()))
{
- if ( !mpImpl->mxLightClient.is() )
- mpImpl->mxLightClient = new SdrLightEmbeddedClient_Impl( this );
+ uno::Reference<beans::XPropertySet> xSet(mpImpl->mxObjRef->getComponent(), uno::UNO_QUERY);
+ if (xSet.is())
+ xSet->setPropertyValue("FrameURL", uno::Any(sFrameURL));
+ }
+ }
- mpImpl->mxObjRef->addStateChangeListener( mpImpl->mxLightClient.get() );
- mpImpl->mxObjRef->addEventListener( uno::Reference< document::XEventListener >( mpImpl->mxLightClient.get() ) );
+ if ( mpImpl->mxObjRef.is() )
+ {
+ if ( !mpImpl->mxLightClient.is() )
+ mpImpl->mxLightClient = new SdrLightEmbeddedClient_Impl( this );
- if ( mpImpl->mxObjRef->getCurrentState() != embed::EmbedStates::LOADED )
- GetSdrGlobalData().GetOLEObjCache().InsertObj(this);
+ mpImpl->mxObjRef->addStateChangeListener( mpImpl->mxLightClient.get() );
+ mpImpl->mxObjRef->addEventListener( uno::Reference< document::XEventListener >( mpImpl->mxLightClient.get() ) );
- CheckFileLink_Impl();
+ if ( mpImpl->mxObjRef->getCurrentState() != embed::EmbedStates::LOADED )
+ GetSdrGlobalData().GetOLEObjCache().InsertObj(this);
- uno::Reference< container::XChild > xChild( mpImpl->mxObjRef.GetObject(), uno::UNO_QUERY );
- if( xChild.is() )
- {
- uno::Reference< uno::XInterface > xParent( getSdrModelFromSdrObject().getUnoModel());
- if( xParent.is())
- xChild->setParent( getSdrModelFromSdrObject().getUnoModel() );
- }
+ CheckFileLink_Impl();
+ uno::Reference< container::XChild > xChild( mpImpl->mxObjRef.GetObject(), uno::UNO_QUERY );
+ if( xChild.is() )
+ {
+ uno::Reference< uno::XInterface > xParent( getSdrModelFromSdrObject().getUnoModel());
+ if( xParent.is())
+ xChild->setParent( getSdrModelFromSdrObject().getUnoModel() );
}
+
}
- catch( css::uno::Exception& )
- {
- TOOLS_WARN_EXCEPTION( "svx", "SdrOle2Obj::Connect_Impl()" );
- }
+ }
+ catch( css::uno::Exception& )
+ {
+ TOOLS_WARN_EXCEPTION( "svx", "SdrOle2Obj::Connect_Impl()" );
}
}
@@ -1032,20 +1100,20 @@ void SdrOle2Obj::ObjectLoaded()
void SdrOle2Obj::AddListeners_Impl()
{
- if( mpImpl->mxObjRef.is() && mpImpl->mxObjRef->getCurrentState() != embed::EmbedStates::LOADED )
+ if( !(mpImpl->mxObjRef.is() && mpImpl->mxObjRef->getCurrentState() != embed::EmbedStates::LOADED) )
+ return;
+
+ // register modify listener
+ if (!mpImpl->mxModifyListener.is())
{
- // register modify listener
- if (!mpImpl->mxModifyListener.is())
- {
- mpImpl->mxModifyListener = new SvxUnoShapeModifyListener(this);
- }
+ mpImpl->mxModifyListener = new SvxUnoShapeModifyListener(this);
+ }
- uno::Reference< util::XModifyBroadcaster > xBC( getXModel(), uno::UNO_QUERY );
- if (xBC.is())
- {
- uno::Reference<util::XModifyListener> xListener(mpImpl->mxModifyListener.get());
- xBC->addModifyListener( xListener );
- }
+ uno::Reference< util::XModifyBroadcaster > xBC( getXModel(), uno::UNO_QUERY );
+ if (xBC.is())
+ {
+ uno::Reference<util::XModifyListener> xListener(mpImpl->mxModifyListener.get());
+ xBC->addModifyListener( xListener );
}
}
@@ -1066,25 +1134,25 @@ void SdrOle2Obj::Disconnect()
void SdrOle2Obj::RemoveListeners_Impl()
{
- if ( mpImpl->mxObjRef.is() && !mpImpl->aPersistName.isEmpty() )
+ if ( !(mpImpl->mxObjRef.is() && !mpImpl->aPersistName.isEmpty()) )
+ return;
+
+ try
{
- try
+ sal_Int32 nState = mpImpl->mxObjRef->getCurrentState();
+ if ( nState != embed::EmbedStates::LOADED )
{
- sal_Int32 nState = mpImpl->mxObjRef->getCurrentState();
- if ( nState != embed::EmbedStates::LOADED )
+ uno::Reference< util::XModifyBroadcaster > xBC( getXModel(), uno::UNO_QUERY );
+ if (xBC.is() && mpImpl->mxModifyListener.is())
{
- uno::Reference< util::XModifyBroadcaster > xBC( getXModel(), uno::UNO_QUERY );
- if (xBC.is() && mpImpl->mxModifyListener.is())
- {
- uno::Reference<util::XModifyListener> xListener(mpImpl->mxModifyListener.get());
- xBC->removeModifyListener( xListener );
- }
+ uno::Reference<util::XModifyListener> xListener(mpImpl->mxModifyListener.get());
+ xBC->removeModifyListener( xListener );
}
}
- catch( css::uno::Exception& )
- {
- TOOLS_WARN_EXCEPTION( "svx", "SdrOle2Obj::RemoveListeners_Impl()" );
- }
+ }
+ catch( css::uno::Exception& )
+ {
+ TOOLS_WARN_EXCEPTION( "svx", "SdrOle2Obj::RemoveListeners_Impl()" );
}
}
@@ -1308,14 +1376,14 @@ SdrObjectUniquePtr SdrOle2Obj::getFullDragClone() const
return createSdrGrafObjReplacement(false);
}
-void SdrOle2Obj::SetPersistName( const OUString& rPersistName )
+void SdrOle2Obj::SetPersistName( const OUString& rPersistName, SvxOle2Shape* pCreator )
{
DBG_ASSERT( mpImpl->aPersistName.isEmpty(), "Persist name changed!");
mpImpl->aPersistName = rPersistName;
mpImpl->mbLoadingOLEObjectFailed = false;
- Connect();
+ Connect(pCreator);
SetChanged();
}
@@ -1453,149 +1521,149 @@ void SdrOle2Obj::ImpSetVisAreaSize()
// the object area of an embedded object was changed, e.g. by user interaction an a selected object
GetObjRef();
- if (mpImpl->mxObjRef.is())
- {
- sal_Int64 nMiscStatus = mpImpl->mxObjRef->getStatus( GetAspect() );
+ if (!mpImpl->mxObjRef.is())
+ return;
- // the client is required to get access to scaling
- SfxInPlaceClient* pClient(
- SfxInPlaceClient::GetClient(
- dynamic_cast<SfxObjectShell*>(
- getSdrModelFromSdrObject().GetPersist()),
- mpImpl->mxObjRef.GetObject()));
- const bool bHasOwnClient(
- mpImpl->mxLightClient.is() &&
- mpImpl->mxObjRef->getClientSite() == uno::Reference< embed::XEmbeddedClient >( mpImpl->mxLightClient.get() ) );
+ sal_Int64 nMiscStatus = mpImpl->mxObjRef->getStatus( GetAspect() );
- if ( pClient || bHasOwnClient )
+ // the client is required to get access to scaling
+ SfxInPlaceClient* pClient(
+ SfxInPlaceClient::GetClient(
+ dynamic_cast<SfxObjectShell*>(
+ getSdrModelFromSdrObject().GetPersist()),
+ mpImpl->mxObjRef.GetObject()));
+ const bool bHasOwnClient(
+ mpImpl->mxLightClient.is() &&
+ mpImpl->mxObjRef->getClientSite() == uno::Reference< embed::XEmbeddedClient >( mpImpl->mxLightClient.get() ) );
+
+ if ( pClient || bHasOwnClient )
+ {
+ // TODO: IMHO we need to do similar things when object is UIActive or OutplaceActive?!
+ if ( ((nMiscStatus & embed::EmbedMisc::MS_EMBED_RECOMPOSEONRESIZE) &&
+ svt::EmbeddedObjectRef::TryRunningState( mpImpl->mxObjRef.GetObject() ))
+ || mpImpl->mxObjRef->getCurrentState() == embed::EmbedStates::INPLACE_ACTIVE
+ )
{
- // TODO: IMHO we need to do similar things when object is UIActive or OutplaceActive?!
- if ( ((nMiscStatus & embed::EmbedMisc::MS_EMBED_RECOMPOSEONRESIZE) &&
- svt::EmbeddedObjectRef::TryRunningState( mpImpl->mxObjRef.GetObject() ))
- || mpImpl->mxObjRef->getCurrentState() == embed::EmbedStates::INPLACE_ACTIVE
- )
+ Fraction aScaleWidth;
+ Fraction aScaleHeight;
+ if ( pClient )
{
- Fraction aScaleWidth;
- Fraction aScaleHeight;
- if ( pClient )
- {
- aScaleWidth = pClient->GetScaleWidth();
- aScaleHeight = pClient->GetScaleHeight();
- }
- else
- {
- aScaleWidth = mpImpl->mxLightClient->GetScaleWidth();
- aScaleHeight = mpImpl->mxLightClient->GetScaleHeight();
- }
+ aScaleWidth = pClient->GetScaleWidth();
+ aScaleHeight = pClient->GetScaleHeight();
+ }
+ else
+ {
+ aScaleWidth = mpImpl->mxLightClient->GetScaleWidth();
+ aScaleHeight = mpImpl->mxLightClient->GetScaleHeight();
+ }
- // The object wants to resize itself (f.e. Chart wants to recalculate the layout)
- // or object is inplace active and so has a window that must be resized also
- // In these cases the change in the object area size will be reflected in a change of the
- // objects' visual area. The scaling will not change, but it might exist already and must
- // be used in calculations
- MapUnit aMapUnit = VCLUnoHelper::UnoEmbed2VCLMapUnit( mpImpl->mxObjRef->getMapUnit( GetAspect() ) );
- Size aVisSize( static_cast<long>( Fraction( maRect.GetWidth() ) / aScaleWidth ),
- static_cast<long>( Fraction( maRect.GetHeight() ) / aScaleHeight ) );
-
- aVisSize = OutputDevice::LogicToLogic(
- aVisSize,
- MapMode(getSdrModelFromSdrObject().GetScaleUnit()),
- MapMode(aMapUnit));
- awt::Size aSz;
- aSz.Width = aVisSize.Width();
- aSz.Height = aVisSize.Height();
- mpImpl->mxObjRef->setVisualAreaSize( GetAspect(), aSz );
+ // The object wants to resize itself (f.e. Chart wants to recalculate the layout)
+ // or object is inplace active and so has a window that must be resized also
+ // In these cases the change in the object area size will be reflected in a change of the
+ // objects' visual area. The scaling will not change, but it might exist already and must
+ // be used in calculations
+ MapUnit aMapUnit = VCLUnoHelper::UnoEmbed2VCLMapUnit( mpImpl->mxObjRef->getMapUnit( GetAspect() ) );
+ Size aVisSize( static_cast<long>( Fraction( maRect.GetWidth() ) / aScaleWidth ),
+ static_cast<long>( Fraction( maRect.GetHeight() ) / aScaleHeight ) );
+
+ aVisSize = OutputDevice::LogicToLogic(
+ aVisSize,
+ MapMode(getSdrModelFromSdrObject().GetScaleUnit()),
+ MapMode(aMapUnit));
+ awt::Size aSz;
+ aSz.Width = aVisSize.Width();
+ aSz.Height = aVisSize.Height();
+ mpImpl->mxObjRef->setVisualAreaSize( GetAspect(), aSz );
- try
- {
- aSz = mpImpl->mxObjRef->getVisualAreaSize( GetAspect() );
- }
- catch( embed::NoVisualAreaSizeException& )
- {}
+ try
+ {
+ aSz = mpImpl->mxObjRef->getVisualAreaSize( GetAspect() );
+ }
+ catch( embed::NoVisualAreaSizeException& )
+ {}
- tools::Rectangle aAcceptedVisArea;
- aAcceptedVisArea.SetSize( Size( static_cast<long>( Fraction( long( aSz.Width ) ) * aScaleWidth ),
- static_cast<long>( Fraction( long( aSz.Height ) ) * aScaleHeight ) ) );
- if (aVisSize != aAcceptedVisArea.GetSize())
- {
- // server changed VisArea to its liking and the VisArea is different than the suggested one
- // store the new value as given by the object
- MapUnit aNewMapUnit = VCLUnoHelper::UnoEmbed2VCLMapUnit( mpImpl->mxObjRef->getMapUnit( GetAspect() ) );
- maRect.SetSize(
- OutputDevice::LogicToLogic(
- aAcceptedVisArea.GetSize(),
- MapMode(aNewMapUnit),
- MapMode(getSdrModelFromSdrObject().GetScaleUnit())));
- }
+ tools::Rectangle aAcceptedVisArea;
+ aAcceptedVisArea.SetSize( Size( static_cast<long>( Fraction( long( aSz.Width ) ) * aScaleWidth ),
+ static_cast<long>( Fraction( long( aSz.Height ) ) * aScaleHeight ) ) );
+ if (aVisSize != aAcceptedVisArea.GetSize())
+ {
+ // server changed VisArea to its liking and the VisArea is different than the suggested one
+ // store the new value as given by the object
+ MapUnit aNewMapUnit = VCLUnoHelper::UnoEmbed2VCLMapUnit( mpImpl->mxObjRef->getMapUnit( GetAspect() ) );
+ maRect.SetSize(
+ OutputDevice::LogicToLogic(
+ aAcceptedVisArea.GetSize(),
+ MapMode(aNewMapUnit),
+ MapMode(getSdrModelFromSdrObject().GetScaleUnit())));
+ }
- // make the new object area known to the client
- // compared to the "else" branch aRect might have been changed by the object and no additional scaling was applied
- // WHY this -> OSL_ASSERT( pClient );
- if( pClient )
- pClient->SetObjArea(maRect);
+ // make the new object area known to the client
+ // compared to the "else" branch aRect might have been changed by the object and no additional scaling was applied
+ // WHY this -> OSL_ASSERT( pClient );
+ if( pClient )
+ pClient->SetObjArea(maRect);
- // we need a new replacement image as the object has resized itself
+ // we need a new replacement image as the object has resized itself
- //#i79578# don't request a new replacement image for charts to often
- //a chart sends a modified call to the framework if it was changed
- //thus the replacement update is already handled there
- if( !IsChart() )
- mpImpl->mxObjRef.UpdateReplacement();
- }
- else
+ //#i79578# don't request a new replacement image for charts to often
+ //a chart sends a modified call to the framework if it was changed
+ //thus the replacement update is already handled there
+ if( !IsChart() )
+ mpImpl->mxObjRef.UpdateReplacement();
+ }
+ else
+ {
+ // The object isn't active and does not want to resize itself so the changed object area size
+ // will be reflected in a changed object scaling
+ Fraction aScaleWidth;
+ Fraction aScaleHeight;
+ Size aObjAreaSize;
+ if ( CalculateNewScaling( aScaleWidth, aScaleHeight, aObjAreaSize ) )
{
- // The object isn't active and does not want to resize itself so the changed object area size
- // will be reflected in a changed object scaling
- Fraction aScaleWidth;
- Fraction aScaleHeight;
- Size aObjAreaSize;
- if ( CalculateNewScaling( aScaleWidth, aScaleHeight, aObjAreaSize ) )
+ if ( pClient )
{
- if ( pClient )
- {
- tools::Rectangle aScaleRect(maRect.TopLeft(), aObjAreaSize);
- pClient->SetObjAreaAndScale( aScaleRect, aScaleWidth, aScaleHeight);
- }
- else
- {
- mpImpl->mxLightClient->SetSizeScale( aScaleWidth, aScaleHeight );
- }
+ tools::Rectangle aScaleRect(maRect.TopLeft(), aObjAreaSize);
+ pClient->SetObjAreaAndScale( aScaleRect, aScaleWidth, aScaleHeight);
+ }
+ else
+ {
+ mpImpl->mxLightClient->SetSizeScale( aScaleWidth, aScaleHeight );
}
}
}
- else if( (nMiscStatus & embed::EmbedMisc::MS_EMBED_RECOMPOSEONRESIZE) &&
- svt::EmbeddedObjectRef::TryRunningState( mpImpl->mxObjRef.GetObject() ) )
+ }
+ else if( (nMiscStatus & embed::EmbedMisc::MS_EMBED_RECOMPOSEONRESIZE) &&
+ svt::EmbeddedObjectRef::TryRunningState( mpImpl->mxObjRef.GetObject() ) )
+ {
+ //also handle not sfx based ole objects e.g. charts
+ //#i83860# resizing charts in impress distorts fonts
+ uno::Reference< embed::XVisualObject > xVisualObject( getXModel(), uno::UNO_QUERY );
+ if( xVisualObject.is() )
{
- //also handle not sfx based ole objects e.g. charts
- //#i83860# resizing charts in impress distorts fonts
- uno::Reference< embed::XVisualObject > xVisualObject( getXModel(), uno::UNO_QUERY );
- if( xVisualObject.is() )
- {
- const MapUnit aMapUnit(
- VCLUnoHelper::UnoEmbed2VCLMapUnit(
- mpImpl->mxObjRef->getMapUnit(GetAspect())));
- const Point aTL( maRect.TopLeft() );
- const Point aBR( maRect.BottomRight() );
- const Point aTL2(
- OutputDevice::LogicToLogic(
- aTL,
- MapMode(getSdrModelFromSdrObject().GetScaleUnit()),
- MapMode(aMapUnit)));
- const Point aBR2(
- OutputDevice::LogicToLogic(
- aBR,
- MapMode(getSdrModelFromSdrObject().GetScaleUnit()),
- MapMode(aMapUnit)));
- const tools::Rectangle aNewRect(
- aTL2,
- aBR2);
-
- xVisualObject->setVisualAreaSize(
- GetAspect(),
- awt::Size(
- aNewRect.GetWidth(),
- aNewRect.GetHeight()));
- }
+ const MapUnit aMapUnit(
+ VCLUnoHelper::UnoEmbed2VCLMapUnit(
+ mpImpl->mxObjRef->getMapUnit(GetAspect())));
+ const Point aTL( maRect.TopLeft() );
+ const Point aBR( maRect.BottomRight() );
+ const Point aTL2(
+ OutputDevice::LogicToLogic(
+ aTL,
+ MapMode(getSdrModelFromSdrObject().GetScaleUnit()),
+ MapMode(aMapUnit)));
+ const Point aBR2(
+ OutputDevice::LogicToLogic(
+ aBR,
+ MapMode(getSdrModelFromSdrObject().GetScaleUnit()),
+ MapMode(aMapUnit)));
+ const tools::Rectangle aNewRect(
+ aTL2,
+ aBR2);
+
+ xVisualObject->setVisualAreaSize(
+ GetAspect(),
+ awt::Size(
+ aNewRect.GetWidth(),
+ aNewRect.GetHeight()));
}
}
}
diff --git a/svx/source/svdraw/svdotxfl.cxx b/svx/source/svdraw/svdotxfl.cxx
index c8e82711b6a3..6ab4914daa3d 100644
--- a/svx/source/svdraw/svdotxfl.cxx
+++ b/svx/source/svdraw/svdotxfl.cxx
@@ -22,7 +22,8 @@
#include <svx/svdotext.hxx>
bool SdrTextObj::CalcFieldValue(const SvxFieldItem& /*rField*/, sal_Int32 /*nPara*/, sal_uInt16 /*nPos*/,
- bool /*bEdit*/, boost::optional<Color>& /*rpTxtColor*/, boost::optional<Color>& /*rpFldColor*/, OUString& /*rRet*/) const
+ bool /*bEdit*/, boost::optional<Color>& /*rpTxtColor*/, boost::optional<Color>& /*rpFldColor*/,
+ boost::optional<FontLineStyle>& /*rpFldLineStyle*/, OUString& /*rRet*/) const
{
return false;
}
diff --git a/svx/source/svdraw/svdoutl.cxx b/svx/source/svdraw/svdoutl.cxx
index 0387afaa5ec9..55990eccabe7 100644
--- a/svx/source/svdraw/svdoutl.cxx
+++ b/svx/source/svdraw/svdoutl.cxx
@@ -72,16 +72,17 @@ void SdrOutliner::SetTextObjNoInit( const SdrTextObj* pObj )
}
OUString SdrOutliner::CalcFieldValue(const SvxFieldItem& rField, sal_Int32 nPara, sal_Int32 nPos,
- boost::optional<Color>& rpTxtColor, boost::optional<Color>& rpFldColor)
+ boost::optional<Color>& rpTxtColor, boost::optional<Color>& rpFldColor,
+ boost::optional<FontLineStyle>& rpFldLineStyle)
{
bool bOk = false;
OUString aRet;
if(mpTextObj.is())
- bOk = mpTextObj->CalcFieldValue(rField, nPara, nPos, false, rpTxtColor, rpFldColor, aRet);
+ bOk = mpTextObj->CalcFieldValue(rField, nPara, nPos, false, rpTxtColor, rpFldColor, rpFldLineStyle, aRet);
if (!bOk)
- aRet = Outliner::CalcFieldValue(rField, nPara, nPos, rpTxtColor, rpFldColor);
+ aRet = Outliner::CalcFieldValue(rField, nPara, nPos, rpTxtColor, rpFldColor, rpFldLineStyle);
return aRet;
}
diff --git a/svx/source/svdraw/svdpdf.cxx b/svx/source/svdraw/svdpdf.cxx
index ba27b6d651cb..d9c478f9f31c 100644
--- a/svx/source/svdraw/svdpdf.cxx
+++ b/svx/source/svdraw/svdpdf.cxx
@@ -826,8 +826,8 @@ void ImpSdrPdfImport::ImportText(FPDF_PAGEOBJECT pPageObject, FPDF_TEXTPAGE pTex
const int nFontName = 80 + 1;
std::unique_ptr<char[]> pFontName(new char[nFontName]); // + terminating null
- char* pCharFontName = reinterpret_cast<char*>(pFontName.get());
- int nFontNameChars = FPDFTextObj_GetFontName(pPageObject, pCharFontName, nFontName);
+ FPDF_FONT pFontObject = FPDFTextObj_GetFont(pPageObject);
+ int nFontNameChars = FPDFFont_GetFontName(pFontObject, pFontName.get(), nFontName);
if (nFontName >= nFontNameChars)
{
OUString sFontName = OUString::createFromAscii(pFontName.get());
diff --git a/svx/source/unodraw/shapeimpl.hxx b/svx/source/unodraw/shapeimpl.hxx
index a1a4e6963020..78aa366b4d88 100644
--- a/svx/source/unodraw/shapeimpl.hxx
+++ b/svx/source/unodraw/shapeimpl.hxx
@@ -36,7 +36,7 @@ protected:
virtual bool getPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, css::uno::Any& rValue ) override;
public:
- explicit SvxPluginShape(SdrObject* pObj);
+ explicit SvxPluginShape(SdrObject* pObj, OUString referer);
virtual ~SvxPluginShape() throw() override;
virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, const css::uno::Any& aValue ) override;
@@ -46,6 +46,7 @@ public:
virtual void Create( SdrObject* pNewOpj, SvxDrawPage* pNewPage ) override;
};
+
class SvxAppletShape : public SvxOle2Shape
{
protected:
@@ -54,7 +55,7 @@ protected:
virtual bool getPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, css::uno::Any& rValue ) override;
public:
- explicit SvxAppletShape(SdrObject* pObj);
+ explicit SvxAppletShape(SdrObject* pObj, OUString referer);
virtual ~SvxAppletShape() throw() override;
virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, const css::uno::Any& aValue ) override;
@@ -64,8 +65,11 @@ public:
virtual void Create( SdrObject* pNewOpj, SvxDrawPage* pNewPage ) override;
};
+
class SvxFrameShape : public SvxOle2Shape
{
+private:
+ OUString m_sInitialFrameURL;
protected:
// override these for special property handling in subcasses. Return true if property is handled
virtual bool setPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, const css::uno::Any& rValue ) override;
@@ -73,7 +77,7 @@ protected:
css::uno::Any& rValue) override;
public:
- explicit SvxFrameShape(SdrObject* pObj);
+ explicit SvxFrameShape(SdrObject* pObj, OUString referer);
virtual ~SvxFrameShape() throw() override;
virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, const css::uno::Any& aValue ) override;
@@ -82,6 +86,8 @@ public:
virtual void SAL_CALL setPropertyValues( const css::uno::Sequence< OUString >& aPropertyNames, const css::uno::Sequence< css::uno::Any >& aValues ) override;
virtual void Create( SdrObject* pNewOpj, SvxDrawPage* pNewPage ) override;
+
+ virtual OUString GetAndClearInitialFrameURL() override;
};
diff --git a/svx/source/unodraw/unomod.cxx b/svx/source/unodraw/unomod.cxx
index e3017b41ecfb..a0ee09645cd4 100644
--- a/svx/source/unodraw/unomod.cxx
+++ b/svx/source/unodraw/unomod.cxx
@@ -209,7 +209,11 @@ uno::Reference< uno::XInterface > SAL_CALL SvxUnoDrawMSFactory::createInstanceWi
{
OUString arg;
if ((ServiceSpecifier == "com.sun.star.drawing.GraphicObjectShape"
- || ServiceSpecifier == "com.sun.star.drawing.MediaShape")
+ || ServiceSpecifier == "com.sun.star.drawing.AppletShape"
+ || ServiceSpecifier == "com.sun.star.drawing.FrameShape"
+ || ServiceSpecifier == "com.sun.star.drawing.OLE2Shape"
+ || ServiceSpecifier == "com.sun.star.drawing.MediaShape"
+ || ServiceSpecifier == "com.sun.star.drawing.PluginShape")
&& Arguments.getLength() == 1 && (Arguments[0] >>= arg))
{
return create(ServiceSpecifier, arg);
diff --git a/svx/source/unodraw/unopage.cxx b/svx/source/unodraw/unopage.cxx
index 28082f35e75f..25f96b615fb3 100644
--- a/svx/source/unodraw/unopage.cxx
+++ b/svx/source/unodraw/unopage.cxx
@@ -702,13 +702,13 @@ SvxShape* SvxDrawPage::CreateShapeByTypeAndInventor( sal_uInt16 nType, SdrInvent
pRet = new SvxGraphicObject( pObj );
break;
case OBJ_FRAME:
- pRet = new SvxFrameShape( pObj );
+ pRet = new SvxFrameShape( pObj, referer );
break;
case OBJ_OLE2_APPLET:
- pRet = new SvxAppletShape( pObj );
+ pRet = new SvxAppletShape( pObj, referer );
break;
case OBJ_OLE2_PLUGIN:
- pRet = new SvxPluginShape( pObj );
+ pRet = new SvxPluginShape( pObj, referer );
break;
case OBJ_OLE2:
{
@@ -736,17 +736,17 @@ SvxShape* SvxDrawPage::CreateShapeByTypeAndInventor( sal_uInt16 nType, SdrInvent
if( aPluginClassId == aClassId )
{
- pRet = new SvxPluginShape( pObj );
+ pRet = new SvxPluginShape( pObj, referer );
nType = OBJ_OLE2_PLUGIN;
}
else if( aAppletClassId == aClassId )
{
- pRet = new SvxAppletShape( pObj );
+ pRet = new SvxAppletShape( pObj, referer );
nType = OBJ_OLE2_APPLET;
}
else if( aIFrameClassId == aClassId )
{
- pRet = new SvxFrameShape( pObj );
+ pRet = new SvxFrameShape( pObj, referer );
nType = OBJ_FRAME;
}
}
@@ -756,7 +756,7 @@ SvxShape* SvxDrawPage::CreateShapeByTypeAndInventor( sal_uInt16 nType, SdrInvent
if( pRet == nullptr )
{
SvxUnoPropertyMapProvider& rSvxMapProvider = getSvxMapProvider();
- pRet = new SvxOle2Shape( pObj, rSvxMapProvider.GetMap(SVXMAP_OLE2), rSvxMapProvider.GetPropertySet(SVXMAP_OLE2, SdrObject::GetGlobalDrawObjectItemPool()) );
+ pRet = new SvxOle2Shape( pObj, referer, rSvxMapProvider.GetMap(SVXMAP_OLE2), rSvxMapProvider.GetPropertySet(SVXMAP_OLE2, SdrObject::GetGlobalDrawObjectItemPool()) );
}
}
break;
diff --git a/svx/source/unodraw/unoshap4.cxx b/svx/source/unodraw/unoshap4.cxx
index f7629f338858..0a4f5055ee02 100644
--- a/svx/source/unodraw/unoshap4.cxx
+++ b/svx/source/unodraw/unoshap4.cxx
@@ -68,14 +68,16 @@ using namespace ::com::sun::star::container;
using namespace ::com::sun::star::beans;
-SvxOle2Shape::SvxOle2Shape(SdrObject* pObject)
-: SvxShapeText( pObject, getSvxMapProvider().GetMap(SVXMAP_OLE2),
- getSvxMapProvider().GetPropertySet(SVXMAP_OLE2,SdrObject::GetGlobalDrawObjectItemPool()) )
+SvxOle2Shape::SvxOle2Shape(SdrObject* pObject, OUString referer)
+ : SvxShapeText(pObject, getSvxMapProvider().GetMap(SVXMAP_OLE2),
+ getSvxMapProvider().GetPropertySet(SVXMAP_OLE2,SdrObject::GetGlobalDrawObjectItemPool()))
+ , referer_(std::move(referer))
{
}
-SvxOle2Shape::SvxOle2Shape(SdrObject* pObject, const SfxItemPropertyMapEntry* pPropertyMap, const SvxItemPropertySet* pPropertySet)
-: SvxShapeText( pObject, pPropertyMap, pPropertySet )
+SvxOle2Shape::SvxOle2Shape(SdrObject* pObject, OUString referer, const SfxItemPropertyMapEntry* pPropertyMap, const SvxItemPropertySet* pPropertySet)
+ : SvxShapeText(pObject, pPropertyMap, pPropertySet)
+ , referer_(std::move(referer))
{
}
@@ -180,7 +182,7 @@ bool SvxOle2Shape::setPropertyValueImpl( const OUString& rName, const SfxItemPro
#else
pOle = static_cast<SdrOle2Obj*>(GetSdrObject());
#endif
- pOle->SetPersistName( aPersistName );
+ pOle->SetPersistName( aPersistName, this );
return true;
}
break;
@@ -450,16 +452,18 @@ void SvxOle2Shape::createLink( const OUString& aLinkURL )
::comphelper::IEmbeddedHelper* pPersist = GetSdrObject()->getSdrModelFromSdrObject().GetPersist();
- uno::Sequence< beans::PropertyValue > aMediaDescr( 1 );
+ uno::Sequence< beans::PropertyValue > aMediaDescr( 2 );
aMediaDescr[0].Name = "URL";
aMediaDescr[0].Value <<= aLinkURL;
+ aMediaDescr[1].Name = "Referer";
+ aMediaDescr[1].Value <<= referer_;
uno::Reference< task::XInteractionHandler > xInteraction = pPersist->getInteractionHandler();
if ( xInteraction.is() )
{
- aMediaDescr.realloc( 2 );
- aMediaDescr[1].Name = "InteractionHandler";
- aMediaDescr[1].Value <<= xInteraction;
+ aMediaDescr.realloc( 3 );
+ aMediaDescr[2].Name = "InteractionHandler";
+ aMediaDescr[2].Value <<= xInteraction;
}
//TODO/LATER: how to cope with creation failure?!
@@ -477,7 +481,7 @@ void SvxOle2Shape::createLink( const OUString& aLinkURL )
awt::Size aSz = xObj->getVisualAreaSize( pOle2Obj->GetAspect() );
aRect.SetSize( Size( aSz.Width, aSz.Height ) );
}
- catch( embed::NoVisualAreaSizeException& )
+ catch( const uno::Exception& )
{}
pOle2Obj->SetLogicRect( aRect );
}
@@ -501,10 +505,11 @@ void SvxOle2Shape::createLink( const OUString& aLinkURL )
void SvxOle2Shape::resetModifiedState()
{
- ::comphelper::IEmbeddedHelper* pPersist = GetSdrObject()->getSdrModelFromSdrObject().GetPersist();
+ SdrObject* pObject = GetSdrObject();
+ ::comphelper::IEmbeddedHelper* pPersist = pObject ? pObject->getSdrModelFromSdrObject().GetPersist() : nullptr;
if( pPersist && !pPersist->isEnableSetModified() )
{
- SdrOle2Obj* pOle = dynamic_cast< SdrOle2Obj* >( GetSdrObject() );
+ SdrOle2Obj* pOle = dynamic_cast< SdrOle2Obj* >(pObject);
if( pOle && !pOle->IsEmpty() )
{
uno::Reference < util::XModifiable > xMod( pOle->GetObjRef(), uno::UNO_QUERY );
@@ -554,8 +559,13 @@ SvGlobalName SvxOle2Shape::GetClassName_Impl(OUString& rHexCLSID)
return aClassName;
}
-SvxAppletShape::SvxAppletShape(SdrObject* pObject)
- : SvxOle2Shape( pObject, getSvxMapProvider().GetMap(SVXMAP_APPLET), getSvxMapProvider().GetPropertySet(SVXMAP_APPLET, SdrObject::GetGlobalDrawObjectItemPool()) )
+OUString SvxOle2Shape::GetAndClearInitialFrameURL()
+{
+ return OUString();
+}
+
+SvxAppletShape::SvxAppletShape(SdrObject* pObject, OUString referer)
+ : SvxOle2Shape(pObject, std::move(referer), getSvxMapProvider().GetMap(SVXMAP_APPLET), getSvxMapProvider().GetPropertySet(SVXMAP_APPLET, SdrObject::GetGlobalDrawObjectItemPool()))
{
SetShapeType( "com.sun.star.drawing.AppletShape" );
}
@@ -625,8 +635,8 @@ bool SvxAppletShape::getPropertyValueImpl( const OUString& rName, const SfxItemP
}
}
-SvxPluginShape::SvxPluginShape(SdrObject* pObject)
- : SvxOle2Shape( pObject, getSvxMapProvider().GetMap(SVXMAP_PLUGIN), getSvxMapProvider().GetPropertySet(SVXMAP_PLUGIN, SdrObject::GetGlobalDrawObjectItemPool()) )
+SvxPluginShape::SvxPluginShape(SdrObject* pObject, OUString referer)
+ : SvxOle2Shape(pObject, std::move(referer), getSvxMapProvider().GetMap(SVXMAP_PLUGIN), getSvxMapProvider().GetPropertySet(SVXMAP_PLUGIN, SdrObject::GetGlobalDrawObjectItemPool()))
{
SetShapeType( "com.sun.star.drawing.PluginShape" );
}
@@ -696,9 +706,8 @@ bool SvxPluginShape::getPropertyValueImpl( const OUString& rName, const SfxItemP
}
}
-
-SvxFrameShape::SvxFrameShape(SdrObject* pObject)
-: SvxOle2Shape( pObject, getSvxMapProvider().GetMap(SVXMAP_FRAME), getSvxMapProvider().GetPropertySet(SVXMAP_FRAME, SdrObject::GetGlobalDrawObjectItemPool()) )
+SvxFrameShape::SvxFrameShape(SdrObject* pObject, OUString referer)
+ : SvxOle2Shape(pObject, std::move(referer), getSvxMapProvider().GetMap(SVXMAP_FRAME), getSvxMapProvider().GetPropertySet(SVXMAP_FRAME, SdrObject::GetGlobalDrawObjectItemPool()))
{
SetShapeType( "com.sun.star.drawing.FrameShape" );
}
@@ -707,8 +716,19 @@ SvxFrameShape::~SvxFrameShape() throw()
{
}
+OUString SvxFrameShape::GetAndClearInitialFrameURL()
+{
+ OUString sRet(m_sInitialFrameURL);
+ m_sInitialFrameURL.clear();
+ return sRet;
+}
+
void SvxFrameShape::Create( SdrObject* pNewObj, SvxDrawPage* pNewPage )
{
+ uno::Reference<beans::XPropertySet> xSet(static_cast<OWeakObject *>(this), uno::UNO_QUERY);
+ if (xSet)
+ xSet->getPropertyValue("FrameURL") >>= m_sInitialFrameURL;
+
SvxShape::Create( pNewObj, pNewPage );
const SvGlobalName aIFrameClassId( SO3_IFRAME_CLASSID );
createObject(aIFrameClassId);
@@ -768,6 +788,7 @@ bool SvxFrameShape::getPropertyValueImpl(const OUString& rName, const SfxItemPro
return SvxOle2Shape::getPropertyValueImpl( rName, pProperty, rValue );
}
}
+
SvxMediaShape::SvxMediaShape(SdrObject* pObj, OUString const & referer)
: SvxShape( pObj, getSvxMapProvider().GetMap(SVXMAP_MEDIA), getSvxMapProvider().GetPropertySet(SVXMAP_MEDIA, SdrObject::GetGlobalDrawObjectItemPool()) ),
referer_(referer)
diff --git a/sw/CppunitTest_sw_core_attr.mk b/sw/CppunitTest_sw_core_attr.mk
new file mode 100644
index 000000000000..91ae9c8b44e6
--- /dev/null
+++ b/sw/CppunitTest_sw_core_attr.mk
@@ -0,0 +1,74 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#*************************************************************************
+#
+# 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,sw_core_attr))
+
+$(eval $(call gb_CppunitTest_use_common_precompiled_header,sw_core_attr))
+
+$(eval $(call gb_CppunitTest_add_exception_objects,sw_core_attr, \
+ sw/qa/core/attr/attr \
+))
+
+$(eval $(call gb_CppunitTest_use_libraries,sw_core_attr, \
+ comphelper \
+ cppu \
+ cppuhelper \
+ editeng \
+ sal \
+ sfx \
+ svl \
+ svx \
+ svxcore \
+ sw \
+ test \
+ unotest \
+ utl \
+ vcl \
+ tl \
+))
+
+$(eval $(call gb_CppunitTest_use_externals,sw_core_attr,\
+ boost_headers \
+ libxml2 \
+))
+
+$(eval $(call gb_CppunitTest_set_include,sw_core_attr,\
+ -I$(SRCDIR)/sw/inc \
+ -I$(SRCDIR)/sw/source/core/inc \
+ -I$(SRCDIR)/sw/source/uibase/inc \
+ -I$(SRCDIR)/sw/qa/inc \
+ $$(INCLUDE) \
+))
+
+$(eval $(call gb_CppunitTest_use_api,sw_core_attr,\
+ udkapi \
+ offapi \
+ oovbaapi \
+))
+
+$(eval $(call gb_CppunitTest_use_ure,sw_core_attr))
+$(eval $(call gb_CppunitTest_use_vcl,sw_core_attr))
+
+$(eval $(call gb_CppunitTest_use_rdb,sw_core_attr,services))
+
+$(eval $(call gb_CppunitTest_use_custom_headers,sw_core_attr,\
+ officecfg/registry \
+))
+
+$(eval $(call gb_CppunitTest_use_configuration,sw_core_attr))
+
+$(eval $(call gb_CppunitTest_use_uiconfigs,sw_core_attr, \
+ modules/swriter \
+))
+
+$(eval $(call gb_CppunitTest_use_more_fonts,sw_core_attr))
+
+# vim: set noet sw=4 ts=4:
diff --git a/sw/CppunitTest_sw_core_edit.mk b/sw/CppunitTest_sw_core_edit.mk
new file mode 100644
index 000000000000..2c04606a75f9
--- /dev/null
+++ b/sw/CppunitTest_sw_core_edit.mk
@@ -0,0 +1,74 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#*************************************************************************
+#
+# 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,sw_core_edit))
+
+$(eval $(call gb_CppunitTest_use_common_precompiled_header,sw_core_edit))
+
+$(eval $(call gb_CppunitTest_add_exception_objects,sw_core_edit, \
+ sw/qa/core/edit/edit \
+))
+
+$(eval $(call gb_CppunitTest_use_libraries,sw_core_edit, \
+ editeng \
+ comphelper \
+ cppu \
+ cppuhelper \
+ sal \
+ sfx \
+ svxcore \
+ sw \
+ test \
+ unotest \
+ utl \
+ vcl \
+ svt \
+ tl \
+ svl \
+))
+
+$(eval $(call gb_CppunitTest_use_externals,sw_core_edit,\
+ boost_headers \
+ libxml2 \
+))
+
+$(eval $(call gb_CppunitTest_set_include,sw_core_edit,\
+ -I$(SRCDIR)/sw/inc \
+ -I$(SRCDIR)/sw/source/core/inc \
+ -I$(SRCDIR)/sw/source/uibase/inc \
+ -I$(SRCDIR)/sw/qa/inc \
+ $$(INCLUDE) \
+))
+
+$(eval $(call gb_CppunitTest_use_api,sw_core_edit,\
+ udkapi \
+ offapi \
+ oovbaapi \
+))
+
+$(eval $(call gb_CppunitTest_use_ure,sw_core_edit))
+$(eval $(call gb_CppunitTest_use_vcl,sw_core_edit))
+
+$(eval $(call gb_CppunitTest_use_rdb,sw_core_edit,services))
+
+$(eval $(call gb_CppunitTest_use_custom_headers,sw_core_edit,\
+ officecfg/registry \
+))
+
+$(eval $(call gb_CppunitTest_use_configuration,sw_core_edit))
+
+$(eval $(call gb_CppunitTest_use_uiconfigs,sw_core_edit, \
+ modules/swriter \
+))
+
+$(eval $(call gb_CppunitTest_use_more_fonts,sw_core_edit))
+
+# vim: set noet sw=4 ts=4:
diff --git a/sw/CppunitTest_sw_core_text.mk b/sw/CppunitTest_sw_core_text.mk
index 9fe4fadbf357..6f8e7e46c0fc 100644
--- a/sw/CppunitTest_sw_core_text.mk
+++ b/sw/CppunitTest_sw_core_text.mk
@@ -21,9 +21,11 @@ $(eval $(call gb_CppunitTest_use_libraries,sw_core_text, \
comphelper \
cppu \
cppuhelper \
+ editeng \
sal \
sfx \
sw \
+ svl \
test \
unotest \
utl \
diff --git a/sw/Module_sw.mk b/sw/Module_sw.mk
index 7ef692352874..943748922397 100644
--- a/sw/Module_sw.mk
+++ b/sw/Module_sw.mk
@@ -114,6 +114,8 @@ $(eval $(call gb_Module_add_slowcheck_targets,sw,\
CppunitTest_sw_core_layout \
CppunitTest_sw_core_unocore \
CppunitTest_sw_core_crsr \
+ CppunitTest_sw_core_edit \
+ CppunitTest_sw_core_attr \
))
ifneq ($(DISABLE_GUI),TRUE)
diff --git a/sw/UIConfig_swriter.mk b/sw/UIConfig_swriter.mk
index 65de527c3b89..18957faa5785 100644
--- a/sw/UIConfig_swriter.mk
+++ b/sw/UIConfig_swriter.mk
@@ -288,6 +288,7 @@ $(eval $(call gb_UIConfig_add_uifiles,modules/swriter,\
sw/uiconfig/swriter/ui/viewoptionspage \
sw/uiconfig/swriter/ui/warndatasourcedialog \
sw/uiconfig/swriter/ui/warnemaildialog \
+ sw/uiconfig/swriter/ui/warnhiddensectiondialog \
sw/uiconfig/swriter/ui/watermarkdialog \
sw/uiconfig/swriter/ui/wordcount \
sw/uiconfig/swriter/ui/wrapdialog \
diff --git a/sw/inc/IDocumentContentOperations.hxx b/sw/inc/IDocumentContentOperations.hxx
index b6857c346a33..6e6b3c1bad3e 100644
--- a/sw/inc/IDocumentContentOperations.hxx
+++ b/sw/inc/IDocumentContentOperations.hxx
@@ -69,6 +69,16 @@ namespace o3tl
template<> struct typed_flags<SwInsertFlags> : is_typed_flags<SwInsertFlags, 0x07> {};
}
+enum class SwDeleteFlags
+{
+ Default = 0,
+ ArtificialSelection = (1<<0), ///< keyboard delete, artificial selection, avoid deleting flys
+};
+namespace o3tl
+{
+ template<> struct typed_flags<SwDeleteFlags> : is_typed_flags<SwDeleteFlags, 0x01> {};
+}
+
/** Text operation/manipulation interface
*/
class IDocumentContentOperations
@@ -130,6 +140,7 @@ public:
Needed for hiding of deletion redlines
*/
virtual bool DeleteAndJoin( SwPaM&,
+ SwDeleteFlags flags = SwDeleteFlags::Default,
const bool bForceJoinNext = false ) = 0;
virtual bool MoveRange(SwPaM&, SwPosition&, SwMoveFlags) = 0;
diff --git a/sw/inc/IDocumentMarkAccess.hxx b/sw/inc/IDocumentMarkAccess.hxx
index 3a13761672ef..b8d7262120b9 100644
--- a/sw/inc/IDocumentMarkAccess.hxx
+++ b/sw/inc/IDocumentMarkAccess.hxx
@@ -229,7 +229,8 @@ class IDocumentMarkAccess
const SwNodeIndex& rEnd,
std::vector< ::sw::mark::SaveBookmark>* pSaveBkmk, // Ugly: SaveBookmark is core-internal
const SwIndex* pSttIdx,
- const SwIndex* pEndIdx) =0;
+ const SwIndex* pEndIdx,
+ bool isReplace) = 0;
/** Deletes a mark.
@@ -282,7 +283,7 @@ class IDocumentMarkAccess
// interface IBookmarks (BOOKMARK, CROSSREF_NUMITEM_BOOKMARK, CROSSREF_HEADING_BOOKMARK )
/** check if the selection would delete a BOOKMARK */
- virtual bool isBookmarkDeleted(SwPaM const& rPaM) const =0;
+ virtual bool isBookmarkDeleted(SwPaM const& rPaM, bool isReplace) const =0;
/** returns a STL-like random access iterator to the begin of the sequence the IBookmarks.
*/
diff --git a/sw/inc/cmdid.h b/sw/inc/cmdid.h
index 34fc28b713a8..8ca02d42b950 100644
--- a/sw/inc/cmdid.h
+++ b/sw/inc/cmdid.h
@@ -289,6 +289,8 @@
#define FN_TABLE_PASTE_ROW_BEFORE (FN_INSERT2 + 31) /* paste table as new table rows */
#define FN_TABLE_PASTE_COL_BEFORE (FN_INSERT2 + 32) /* paste table as new table columns */
+#define FN_EDIT_BOOKMARK (FN_INSERT2 + 33 ) /* Bookmark */
+
// Region: Format
#define FN_AUTOFORMAT_APPLY (FN_FORMAT + 1 ) /* apply autoformat options */
#define FN_AUTOFORMAT_AUTO (FN_FORMAT + 2 ) /* apply autoformat during user input */
diff --git a/sw/inc/crsrsh.hxx b/sw/inc/crsrsh.hxx
index 23b3753dd938..cfeac8305f82 100644
--- a/sw/inc/crsrsh.hxx
+++ b/sw/inc/crsrsh.hxx
@@ -26,6 +26,9 @@
#include <vcl/keycod.hxx>
#include <o3tl/typed_flags_set.hxx>
+#ifdef SW_DLLIMPLEMENTATION
+#include <TextFrameIndex.hxx>
+#endif
#include "IShellCursorSupplier.hxx"
#include "swdllapi.h"
#include "docary.hxx"
@@ -42,6 +45,7 @@
class SfxItemSet;
class SfxPoolItem;
+class SwCallLink;
class SwContentFrame;
class SwUnoCursor;
class SwFormatField;
@@ -256,7 +260,7 @@ private:
SAL_DLLPRIVATE bool LRMargin( bool, bool bAPI = false );
SAL_DLLPRIVATE bool IsAtLRMargin( bool, bool bAPI = false ) const;
- SAL_DLLPRIVATE bool isInHiddenTextFrame(SwShellCursor* pShellCursor);
+ SAL_DLLPRIVATE bool isInHiddenFrame(SwShellCursor* pShellCursor);
SAL_DLLPRIVATE bool GoStartWordImpl();
SAL_DLLPRIVATE bool GoEndWordImpl();
@@ -322,9 +326,10 @@ public:
// only for usage in special cases allowed!
void ExtendedSelectAll(bool bFootnotes = true);
/// If ExtendedSelectAll() was called and selection didn't change since then.
- bool ExtendedSelectedAll();
- /// If document body starts with a table.
- bool StartsWithTable();
+ ::std::optional<::std::pair<SwNode const*, ::std::vector<SwTableNode*>>> ExtendedSelectedAll() const;
+ enum class StartsWith { None, Table, HiddenPara, HiddenSection };
+ /// If document body starts with a table or starts/ends with hidden paragraph.
+ StartsWith StartsWith_();
SwPaM* GetCursor( bool bMakeTableCursor = true ) const;
inline SwCursor* GetSwCursor() const;
@@ -434,6 +439,7 @@ public:
* stack
* @return <true> if there was one on the stack, <false> otherwise
*/
+ bool Pop(PopMode, ::std::unique_ptr<SwCallLink> pLink);
bool Pop(PopMode);
/*
* Combine 2 Cursors.
@@ -472,7 +478,8 @@ public:
// Cursor is placed in something that is protected or selection contains
// something that is protected.
- bool HasReadonlySel() const;
+ bool HasReadonlySel(bool isReplace = false) const;
+ bool HasHiddenSections() const;
// Can the cursor be set to read only ranges?
bool IsReadOnlyAvailable() const { return m_bSetCursorInReadOnly; }
@@ -579,8 +586,11 @@ public:
// fields etc.
OUString GetSelText() const;
- // Check of SPoint or Mark of current cursor are placed within a table.
- inline const SwTableNode* IsCursorInTable() const;
+ /// Check if Point of current cursor is placed within a table.
+ const SwTableNode* IsCursorInTable() const;
+ bool MoveOutOfTable();
+ bool TrySelectOuterTable();
+ bool MoveStartText();
bool IsCursorInFootnote() const;
@@ -792,8 +802,12 @@ public:
bool GotoINetAttr( const SwTextINetFormat& rAttr );
const SwFormatINetFormat* FindINetAttr( const OUString& rName ) const;
- bool SelectText( const sal_Int32 nStart,
- const sal_Int32 nEnd );
+ bool SelectTextModel(sal_Int32 nStart, sal_Int32 nEnd);
+#ifdef SW_DLLIMPLEMENTATION
+ bool SelectTextView(TextFrameIndex nStart, TextFrameIndex nEnd);
+ // result is only valid while cursor isn't moved!
+ TextFrameIndex GetCursorPointAsViewIndex() const;
+#endif
bool CheckTableBoxContent( const SwPosition* pPos = nullptr );
void SaveTableBoxContent( const SwPosition* pPos = nullptr );
@@ -890,11 +904,6 @@ inline bool SwCursorShell::IsMultiSelection() const
return m_pCurrentCursor->GetNext() != m_pCurrentCursor;
}
-inline const SwTableNode* SwCursorShell::IsCursorInTable() const
-{
- return m_pCurrentCursor->GetNode().FindTableNode();
-}
-
inline bool SwCursorShell::IsCursorPtAtEnd() const
{
return m_pCurrentCursor->End() == m_pCurrentCursor->GetPoint();
diff --git a/sw/inc/doc.hxx b/sw/inc/doc.hxx
index 83651fc8fcb2..241ae3b656be 100644
--- a/sw/inc/doc.hxx
+++ b/sw/inc/doc.hxx
@@ -21,6 +21,7 @@
// SwDoc interfaces
#include <o3tl/deleter.hxx>
+#include <o3tl/typed_flags_set.hxx>
#include <vcl/idle.hxx>
#include "swdllapi.h"
#include "swtypes.hxx"
@@ -1189,7 +1190,9 @@ public:
sal_uInt16 nCnt = 1, bool bBehind = true );
// Delete Columns/Rows in table.
- bool DeleteRowCol( const SwSelBoxes& rBoxes, bool bColumn = false );
+ void DelTable(SwTableNode * pTable);
+ enum class RowColMode { DeleteRow = 0, DeleteColumn = 1, DeleteProtected = 2 };
+ bool DeleteRowCol(const SwSelBoxes& rBoxes, RowColMode eMode = RowColMode::DeleteRow);
void DeleteRow( const SwCursor& rCursor );
void DeleteCol( const SwCursor& rCursor );
@@ -1658,6 +1661,10 @@ private:
};
+namespace o3tl {
+ template<> struct typed_flags<SwDoc::RowColMode> : is_typed_flags<SwDoc::RowColMode, 3> {};
+}
+
// This method is called in Dtor of SwDoc and deletes cache of ContourObjects.
void ClrContourCache();
diff --git a/sw/inc/editsh.hxx b/sw/inc/editsh.hxx
index 53b91f44db98..fec0f48909a7 100644
--- a/sw/inc/editsh.hxx
+++ b/sw/inc/editsh.hxx
@@ -80,6 +80,7 @@ class SwLineNumberInfo;
class SwAuthEntry;
class SwRewriter;
class SwView;
+class SwWrtShell;
struct SwConversionArgs;
struct SvxSwAutoFormatFlags;
struct SwInsertTableOptions;
@@ -152,7 +153,7 @@ class SW_DLLPUBLIC SwEditShell : public SwCursorShell
that will be used by GetGraphic() and GetGraphicSize(). */
SAL_DLLPRIVATE SwGrfNode *GetGrfNode_() const ;
- SAL_DLLPRIVATE void DeleteSel( SwPaM& rPam, bool* pUndo = nullptr );
+ SAL_DLLPRIVATE void DeleteSel(SwPaM& rPam, bool isArtificialSelection, bool* pUndo = nullptr);
SAL_DLLPRIVATE void SetSectionAttr_( SwSectionFormat& rSectFormat, const SfxItemSet& rSet );
@@ -174,7 +175,7 @@ public:
/** Delete content of all ranges.
If whole nodes are selected, these nodes get deleted. */
- bool Delete();
+ bool Delete(bool isArtificialSelection = false);
/// Remove a complete paragraph.
bool DelFullPara();
@@ -629,6 +630,19 @@ public:
/// Apply ViewOptions with Start-/EndAction.
virtual void ApplyViewOptions( const SwViewOption &rOpt ) override;
+ /// Selected area has readonly content
+ virtual void InfoReadOnlyDialog() const
+ {
+ // override in SwWrtShell
+ }
+
+ /// Selected area has hidden content
+ virtual bool WarnHiddenSectionDialog() const
+ {
+ // override in SwWrtShell
+ return true;
+ }
+
/** Query text within selection. */
void GetSelectedText( OUString &rBuf,
ParaBreakType nHndlParaBreak = ParaBreakType::ToBlank );
diff --git a/sw/inc/index.hxx b/sw/inc/index.hxx
index 10256ad1f53f..b967b45c1bf0 100644
--- a/sw/inc/index.hxx
+++ b/sw/inc/index.hxx
@@ -22,6 +22,8 @@
#include <sal/types.h>
#include "swdllapi.h"
+#include <o3tl/typed_flags_set.hxx>
+
#include <iostream>
class SwIndexReg;
@@ -115,9 +117,17 @@ class SAL_WARN_UNUSED SwIndexReg
const SwIndex * m_pFirst;
const SwIndex * m_pLast;
+public:
+ enum class UpdateMode {
+ Default = 0,
+ Negative = (1<<0),
+ Delete = (1<<1),
+ Replace = (1<<2),
+ };
+
protected:
virtual void Update( SwIndex const & rPos, const sal_Int32 nChangeLen,
- const bool bNegative = false, const bool bDelete = false );
+ UpdateMode eMode);
bool HasAnyIndex() const { return nullptr != m_pFirst; }
@@ -129,6 +139,11 @@ public:
const SwIndex* GetFirstIndex() const { return m_pFirst; }
};
+namespace o3tl
+{
+ template<> struct typed_flags<SwIndexReg::UpdateMode> : is_typed_flags<SwIndexReg::UpdateMode, 0x07> {};
+}
+
#ifndef DBG_UTIL
inline sal_Int32 SwIndex::operator++()
diff --git a/sw/inc/ndarr.hxx b/sw/inc/ndarr.hxx
index 2f2958c977bc..8b635f9f4778 100644
--- a/sw/inc/ndarr.hxx
+++ b/sw/inc/ndarr.hxx
@@ -44,6 +44,7 @@ class SwNodeIndex;
class SwNodeRange;
class SwOLENode;
class SwPaM;
+class SwRootFrame;
class SwSectionData;
class SwSectionFormat;
class SwTOXBase;
@@ -132,6 +133,11 @@ class SW_DLLPUBLIC SwNodes final
SwNodes( SwDoc* pDoc );
+ // Returns start of the document section (PostIts/Inserts/Autotext/Redlines/Content),
+ // or of a specific fly / header / footer / footnote, where this node is, which must not
+ // be crossed when moving backwards
+ sal_uLong StartOfGlobalSection(const SwNode& node) const;
+
public:
~SwNodes();
@@ -187,7 +193,7 @@ public:
static void GoEndOfSection(SwNodeIndex *);
SwContentNode* GoNext(SwNodeIndex *) const;
- static SwContentNode* GoPrevious(SwNodeIndex *);
+ static SwContentNode* GoPrevious(SwNodeIndex *, bool canCrossBoundary = false);
/** Go to next content-node that is not protected or hidden
(Both set FALSE ==> GoNext/GoPrevious!!!). */
@@ -306,11 +312,12 @@ public:
const SwDoc* GetDoc() const { return m_pMyDoc; }
/** Search previous / next content node or table node with frames.
- If no end is given begin with the FrameIndex, else start search
- with that before rFrameIdx and pEnd at the back.
+ Search is started backward with the one before rFrameIdx and
+ forward after pEnd.
If no valid node is found, return 0. rFrameIdx points to the node with frames. **/
SwNode* FindPrvNxtFrameNode( SwNodeIndex& rFrameIdx,
- const SwNode* pEnd ) const;
+ const SwNode* pEnd,
+ SwRootFrame const* pLayout = nullptr) const;
SwNode * DocumentSectionStartNode(SwNode * pNode) const;
SwNode * DocumentSectionEndNode(SwNode * pNode) const;
diff --git a/sw/inc/ndole.hxx b/sw/inc/ndole.hxx
index 852fffd84e3d..470ea17563f8 100644
--- a/sw/inc/ndole.hxx
+++ b/sw/inc/ndole.hxx
@@ -28,7 +28,7 @@ class SwGrfFormatColl;
class SwDoc;
class SwOLENode;
class SwOLEListener_Impl;
-class SwEmbedObjectLink;
+namespace sfx2 { class SvBaseLink; }
class DeflateData;
class SW_DLLPUBLIC SwOLEObj
@@ -90,7 +90,7 @@ class SW_DLLPUBLIC SwOLENode: public SwNoTextNode
bool mbOLESizeInvalid; /**< Should be considered at SwDoc::PrtOLENotify
(e.g. copied). Is not persistent. */
- SwEmbedObjectLink* mpObjectLink;
+ sfx2::SvBaseLink* mpObjectLink;
OUString maLinkURL;
SwOLENode( const SwNodeIndex &rWhere,
@@ -168,6 +168,21 @@ inline const SwOLENode *SwNode::GetOLENode() const
return SwNodeType::Ole == m_nNodeType ? static_cast<const SwOLENode*>(this) : nullptr;
}
+namespace sw
+{
+ class DocumentSettingManager;
+}
+
+class SW_DLLPUBLIC PurgeGuard
+{
+private:
+ ::sw::DocumentSettingManager &m_rManager;
+ bool m_bOrigPurgeOle;
+public:
+ PurgeGuard(const SwDoc& rDoc);
+ ~PurgeGuard();
+};
+
#endif // _ INCLUDED_SW_INC_NDOLE_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/inc/ndtxt.hxx b/sw/inc/ndtxt.hxx
index acef43b0010e..436349cc9653 100644
--- a/sw/inc/ndtxt.hxx
+++ b/sw/inc/ndtxt.hxx
@@ -504,7 +504,7 @@ public:
@retval true This text node has a number.
@retval false else
*/
- bool HasNumber() const;
+ bool HasNumber(SwRootFrame const* pLayout = nullptr) const;
/** Returns if this text node has a bullet.
@@ -739,8 +739,7 @@ public:
virtual void Update(
SwIndex const & rPos,
const sal_Int32 nChangeLen,
- const bool bNegative = false,
- const bool bDelete = false ) override;
+ UpdateMode eMode) override;
/// change text to Upper/Lower/Hiragana/Katakana/...
void TransliterateText( utl::TransliterationWrapper& rTrans,
diff --git a/sw/inc/node.hxx b/sw/inc/node.hxx
index d12e06d3e950..f4067cd57c4b 100644
--- a/sw/inc/node.hxx
+++ b/sw/inc/node.hxx
@@ -541,7 +541,7 @@ public:
const SwSection& GetSection() const { return *m_pSection; }
SwSection& GetSection() { return *m_pSection; }
- SwFrame *MakeFrame( SwFrame* );
+ SwFrame* MakeFrame(SwFrame* pSib, bool bHidden);
/** Creates the frms for the SectionNode (i.e. the SectionFrames).
On default the frames are created until the end of the range.
diff --git a/sw/inc/pam.hxx b/sw/inc/pam.hxx
index 07ca7ff949a2..5e112fcfc809 100644
--- a/sw/inc/pam.hxx
+++ b/sw/inc/pam.hxx
@@ -252,7 +252,9 @@ public:
/** Is in something protected (readonly) or selection contains
something protected. */
- bool HasReadonlySel( bool bFormView ) const;
+ bool HasReadonlySel(bool bFormView, bool isReplace) const;
+ /** Is there hidden sections in the selected area. */
+ bool HasHiddenSections() const;
bool ContainsPosition(const SwPosition & rPos) const
{
diff --git a/sw/inc/swabstdlg.hxx b/sw/inc/swabstdlg.hxx
index 3d4dd0d7ff29..c972618b3d80 100644
--- a/sw/inc/swabstdlg.hxx
+++ b/sw/inc/swabstdlg.hxx
@@ -373,7 +373,7 @@ public:
virtual VclPtr<SfxAbstractDialog> CreateSwAddressAbstractDlg(weld::Window* pParent, const SfxItemSet& rSet) = 0;
virtual VclPtr<AbstractSwAsciiFilterDlg> CreateSwAsciiFilterDlg(weld::Window* pParent, SwDocShell& rDocSh,
SvStream* pStream) = 0;
- virtual VclPtr<VclAbstractDialog> CreateSwInsertBookmarkDlg(weld::Window *pParent, SwWrtShell &rSh, SfxRequest& rReq) = 0;
+ virtual VclPtr<VclAbstractDialog> CreateSwInsertBookmarkDlg(weld::Window *pParent, SwWrtShell &rSh, SfxRequest& rReq, OUString const* pSelected) = 0;
virtual VclPtr<AbstractSwBreakDlg> CreateSwBreakDlg(weld::Window *pParent, SwWrtShell &rSh) = 0;
virtual VclPtr<VclAbstractDialog> CreateSwChangeDBDlg(SwView& rVw) = 0;
diff --git a/sw/inc/swcrsr.hxx b/sw/inc/swcrsr.hxx
index d3d23155ff5e..ffdc77342367 100644
--- a/sw/inc/swcrsr.hxx
+++ b/sw/inc/swcrsr.hxx
@@ -281,6 +281,8 @@ public:
SwCursor* MakeBoxSels( SwCursor* pCurrentCursor );
// Any boxes protected?
bool HasReadOnlyBoxSel() const;
+ // Any boxes hidden?
+ bool HasHiddenBoxSel() const;
// Has table cursor been changed? If so, save new values immediately.
bool IsCursorMovedUpdate();
diff --git a/sw/inc/undobj.hxx b/sw/inc/undobj.hxx
index 71d9c511591d..42b14f7859e5 100644
--- a/sw/inc/undobj.hxx
+++ b/sw/inc/undobj.hxx
@@ -21,6 +21,7 @@
#include <vector>
#include <memory>
+#include <optional>
#include <svl/undo.hxx>
#include <tools/solar.h>
@@ -177,12 +178,11 @@ protected:
const sal_uLong* pEndNdIdx = nullptr,
bool bForceCreateFrames = false);
- // These two methods move the SPoint back/forth from PaM. With it
- // a range can be spanned for Undo/Redo. (In this case the SPoint
- // is before the manipulated range!!)
- // The flag indicates if there is content before the SPoint.
- static bool MovePtBackward( SwPaM& rPam );
- static void MovePtForward( SwPaM& rPam, bool bMvBkwrd );
+ // These two methods save and restore the Point of PaM.
+ // If the point cannot be moved, a "backup" is created on the previous node.
+ // Either way, it will not be moved by inserting at its original position.
+ static ::std::optional<SwNodeIndex> MovePtBackward(SwPaM& rPam);
+ static void MovePtForward(SwPaM& rPam, ::std::optional<SwNodeIndex> && oMvBkwrd);
// Before moving stuff into UndoNodes-Array care has to be taken that
// the content-bearing attributes are removed from the nodes-array.
diff --git a/sw/inc/unobaseclass.hxx b/sw/inc/unobaseclass.hxx
index 289d5f0b7ee1..9f7db995de53 100644
--- a/sw/inc/unobaseclass.hxx
+++ b/sw/inc/unobaseclass.hxx
@@ -26,6 +26,9 @@
#include <comphelper/servicehelper.hxx>
#include <cppuhelper/implbase.hxx>
+
+#include <o3tl/typed_flags_set.hxx>
+
#include <vcl/svapp.hxx>
class SfxPoolItem;
@@ -54,6 +57,22 @@ enum class CursorType
Meta, // meta/meta-field
};
+namespace sw {
+
+enum class DeleteAndInsertMode
+{
+ Default = 0,
+ ForceExpandHints = (1<<0),
+ ForceReplace = (1<<1),
+};
+
+} // namespace sw
+
+namespace o3tl
+{
+ template<> struct typed_flags<::sw::DeleteAndInsertMode> : is_typed_flags<::sw::DeleteAndInsertMode, 0x03> {};
+}
+
/*
Start/EndAction or Start/EndAllAction
*/
diff --git a/sw/inc/unosett.hxx b/sw/inc/unosett.hxx
index ac7e7b8d9690..a3b64bc1966e 100644
--- a/sw/inc/unosett.hxx
+++ b/sw/inc/unosett.hxx
@@ -147,16 +147,16 @@ private:
OUString m_sNewCharStyleNames[MAXLEVEL];
OUString m_sNewBulletFontNames[MAXLEVEL];
OUString m_sCreatedNumRuleName; //connects to a numbering in SwDoc
- SwDoc* m_pDoc;
+ SwDoc* m_pDoc; // Only if *not* used as chapter numbering.
SwDocShell* m_pDocShell; // Only if used as chapter numbering.
SwNumRule* m_pNumRule;
const SfxItemPropertySet* m_pPropertySet;
bool const m_bOwnNumRuleCreated;
protected:
+ SwXNumberingRules(SwDocShell& rDocSh); // chapter numbering
virtual ~SwXNumberingRules() override;
public:
- SwXNumberingRules(SwDocShell& rDocSh); // chapter numbering
SwXNumberingRules(const SwNumRule& rRule, SwDoc* doc = nullptr); // NumRule for paragraphs, numbering styles
SwXNumberingRules(SwDoc& rDoc); //create a new instance
@@ -218,6 +218,7 @@ public:
OUString *const pHeadingStyleName,
OUString *const pParagraphStyleName,
SwDoc *const pDoc,
+ SwDocShell *const pDocShell,
css::uno::Sequence<css::beans::PropertyValue> const& rProperties);
};
diff --git a/sw/inc/unotextcursor.hxx b/sw/inc/unotextcursor.hxx
index 25cdb7d102d7..4585e79e72ab 100644
--- a/sw/inc/unotextcursor.hxx
+++ b/sw/inc/unotextcursor.hxx
@@ -91,9 +91,7 @@ public:
SwUnoCursor& GetCursor();
bool IsAtEndOfMeta() const;
- void DeleteAndInsert(OUString const& rText,
- const bool bForceExpandHints);
-
+ void DeleteAndInsert(OUString const& rText, ::sw::DeleteAndInsertMode eMode);
// OTextCursorHelper
virtual const SwPaM* GetPaM() const override;
virtual SwPaM* GetPaM() override;
diff --git a/sw/inc/unotextrange.hxx b/sw/inc/unotextrange.hxx
index 41a69049fc5e..36dc36e643db 100644
--- a/sw/inc/unotextrange.hxx
+++ b/sw/inc/unotextrange.hxx
@@ -101,7 +101,7 @@ private:
//TODO: new exception type for protected content
/// @throws css::uno::RuntimeException
void DeleteAndInsert(
- const OUString& rText, const bool bForceExpandHints);
+ const OUString& rText, ::sw::DeleteAndInsertMode eMode);
void Invalidate();
virtual ~SwXTextRange() override;
diff --git a/sw/inc/viewopt.hxx b/sw/inc/viewopt.hxx
index 11d2914ed028..3a2148c7911c 100644
--- a/sw/inc/viewopt.hxx
+++ b/sw/inc/viewopt.hxx
@@ -25,6 +25,7 @@
#include <tools/gen.hxx>
#include <tools/color.hxx>
+#include <svx/swframetypes.hxx>
#include <sfx2/zoomitem.hxx>
#include "swdllapi.h"
@@ -169,6 +170,7 @@ class SW_DLLPUBLIC SwViewOption
bool mbHideWhitespaceMode : 1; // Hide header, footer, and pagebreak.
bool m_bShowPlaceHolderFields : 1; // Only used in printing!
mutable bool m_bIdle;
+ sal_Int32 m_nDefaultAnchor; // GetDefaultAnchorType() to convert int to RndStdIds
// Scale
sal_uInt16 m_nZoom; // In percent.
@@ -649,6 +651,14 @@ public:
static void SetDocBoundaries(bool bSet) {SetAppearanceFlag(ViewOptFlags::DocBoundaries, bSet);}
static void ApplyColorConfigValues(const svtools::ColorConfig& rConfig);
+
+ // get/set default anchor (0..2); use GetDefaultAnchorType() to convert into RndStdIds::FLY_*
+ sal_Int32 GetDefaultAnchor() const
+ { return m_nDefaultAnchor; }
+ void SetDefaultAnchor( const sal_Int32 aFlag )
+ { m_nDefaultAnchor = aFlag; }
+
+ RndStdIds GetDefaultAnchorType();
};
inline bool SwViewOption::operator==( const SwViewOption &rOpt ) const
diff --git a/sw/qa/core/attr/attr.cxx b/sw/qa/core/attr/attr.cxx
new file mode 100644
index 000000000000..a406a91f1f4b
--- /dev/null
+++ b/sw/qa/core/attr/attr.cxx
@@ -0,0 +1,86 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+
+#include <docsh.hxx>
+#include <swdtflvr.hxx>
+#include <swmodule.hxx>
+
+#include <com/sun/star/frame/DispatchHelper.hpp>
+
+namespace
+{
+char const DATA_DIRECTORY[] = "/sw/qa/core/attr/data/";
+
+/// Covers sw/source/core/attr/ fixes.
+class Test : public SwModelTestBase
+{
+public:
+ SwDoc* createDoc(const char* pName = nullptr);
+};
+
+SwDoc* Test::createDoc(const char* pName)
+{
+ if (!pName)
+ loadURL("private:factory/swriter", nullptr);
+ else
+ load(DATA_DIRECTORY, pName);
+
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ CPPUNIT_ASSERT(pTextDoc);
+ return pTextDoc->GetDocShell()->GetDoc();
+}
+
+static void dispatchCommand(const uno::Reference<lang::XComponent>& xComponent,
+ const OUString& rCommand,
+ const uno::Sequence<beans::PropertyValue>& rPropertyValues)
+{
+ uno::Reference<frame::XController> xController
+ = uno::Reference<frame::XModel>(xComponent, uno::UNO_QUERY_THROW)->getCurrentController();
+ CPPUNIT_ASSERT(xController.is());
+ uno::Reference<frame::XDispatchProvider> xFrame(xController->getFrame(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT(xFrame.is());
+
+ uno::Reference<uno::XComponentContext> xContext = ::comphelper::getProcessComponentContext();
+ uno::Reference<frame::XDispatchHelper> xDispatchHelper(frame::DispatchHelper::create(xContext));
+ CPPUNIT_ASSERT(xDispatchHelper.is());
+
+ xDispatchHelper->executeDispatch(xFrame, rCommand, OUString(), 0, rPropertyValues);
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSwAttrSet)
+{
+ // Given a document with track changes and the whole document is selected:
+ SwDoc* pDoc = createDoc("attr-set.docx");
+ SwDocShell* pDocShell = pDoc->GetDocShell();
+ SwWrtShell* pWrtShell = pDocShell->GetWrtShell();
+ dispatchCommand(mxComponent, ".uno:SelectAll", {});
+ dispatchCommand(mxComponent, ".uno:Cut", {});
+ dispatchCommand(mxComponent, ".uno:SelectAll", {});
+ rtl::Reference<SwTransferable> xTransferable(new SwTransferable(*pWrtShell));
+ SwModule* pMod = SW_MOD();
+ SwTransferable* pOldTransferable = pMod->m_pXSelection;
+ pMod->m_pXSelection = xTransferable.get();
+
+ // When getting the plain text version of the selection:
+ datatransfer::DataFlavor aFlavor;
+ aFlavor.MimeType = "text/plain;charset=utf-16";
+ aFlavor.DataType = cppu::UnoType<OUString>::get();
+ uno::Any aData = xTransferable->getTransferData(aFlavor);
+
+ // Then make sure we get data without crashing:
+ CPPUNIT_ASSERT(aData.hasValue());
+ pMod->m_pXSelection = pOldTransferable;
+}
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/attr/data/attr-set.docx b/sw/qa/core/attr/data/attr-set.docx
new file mode 100644
index 000000000000..0cb8508aa2a4
--- /dev/null
+++ b/sw/qa/core/attr/data/attr-set.docx
Binary files differ
diff --git a/sw/qa/core/data/rtf/pass/forcepoint110.rtf b/sw/qa/core/data/rtf/pass/forcepoint110.rtf
new file mode 100644
index 000000000000..b7594ff6b622
--- /dev/null
+++ b/sw/qa/core/data/rtf/pass/forcepoint110.rtf
Binary files differ
diff --git a/sw/qa/core/edit/data/redline-hidden.fodt b/sw/qa/core/edit/data/redline-hidden.fodt
new file mode 100644
index 000000000000..10355e3ac485
--- /dev/null
+++ b/sw/qa/core/edit/data/redline-hidden.fodt
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<office:document xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:settings>
+ <config:config-item-set config:name="ooo:view-settings">
+ <config:config-item config:name="ShowRedlineChanges" config:type="boolean">false</config:config-item>
+ </config:config-item-set>
+ </office:settings>
+ <office:automatic-styles>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm"/>
+ </style:page-layout>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:page-layout-name="pm1">
+ </style:master-page>
+ </office:master-styles>
+ <office:body>
+ <office:text>
+ <text:tracked-changes text:track-changes="false">
+ <text:changed-region xml:id="ct51730224" text:id="ct51730224">
+ <text:insertion>
+ <office:change-info>
+ <dc:creator>Creator</dc:creator>
+ <dc:date>2017-04-27T17:12:10</dc:date>
+ </office:change-info>
+ </text:insertion>
+ </text:changed-region>
+ </text:tracked-changes>
+ <text:p><text:change-start text:change-id="ct51730224"/>test<text:change-end text:change-id="ct51730224"/></text:p>
+ </office:text>
+ </office:body>
+</office:document>
diff --git a/sw/qa/core/edit/edit.cxx b/sw/qa/core/edit/edit.cxx
new file mode 100644
index 000000000000..5f6dff479e73
--- /dev/null
+++ b/sw/qa/core/edit/edit.cxx
@@ -0,0 +1,57 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+
+#include <docsh.hxx>
+#include <view.hxx>
+#include <wrtsh.hxx>
+
+#include <editeng/adjustitem.hxx>
+
+char const DATA_DIRECTORY[] = "/sw/qa/core/edit/data/";
+
+namespace
+{
+/// Covers sw/source/core/edit/ fixes.
+class Test : public SwModelTestBase
+{
+public:
+ SwDoc* createSwDoc(const char* pName)
+ {
+ if (!pName)
+ loadURL("private:factory/swriter", nullptr);
+ else
+ load(DATA_DIRECTORY, pName);
+
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ CPPUNIT_ASSERT(pTextDoc);
+ return pTextDoc->GetDocShell()->GetDoc();
+ }
+};
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testRedlineHidden)
+{
+ // Given a document with ShowRedlineChanges=false:
+ SwDoc* pDoc = createSwDoc("redline-hidden.fodt");
+
+ // When formatting a paragraph by setting the para adjust to center, then make sure setting the
+ // new item set on the paragraph doesn't crash:
+ SwView* pView = pDoc->GetDocShell()->GetView();
+ SfxItemSet aSet(pView->GetPool(), svl::Items<RES_PARATR_ADJUST, RES_PARATR_ADJUST>{});
+ SvxAdjustItem aItem(SvxAdjust::Center, RES_PARATR_ADJUST);
+ aSet.Put(aItem);
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ pWrtShell->SetAttrSet(aSet, SetAttrMode::DEFAULT, nullptr, true);
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/text/text.cxx b/sw/qa/core/text/text.cxx
index 8074cbc9f45e..e6fe75d6c4ad 100644
--- a/sw/qa/core/text/text.cxx
+++ b/sw/qa/core/text/text.cxx
@@ -8,7 +8,12 @@
*/
#include <swmodeltestbase.hxx>
+
+#include <rootfrm.hxx>
+#include <unotxdoc.hxx>
#include <wrtsh.hxx>
+#include <fmtfsize.hxx>
+#include <IDocumentRedlineAccess.hxx>
static char const DATA_DIRECTORY[] = "/sw/qa/core/text/data/";
@@ -21,7 +26,10 @@ public:
SwDoc* SwCoreTextTest::createDoc(const char* pName)
{
- load(DATA_DIRECTORY, pName);
+ if (!pName)
+ loadURL("private:factory/swriter", nullptr);
+ else
+ load(DATA_DIRECTORY, pName);
SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
CPPUNIT_ASSERT(pTextDoc);
@@ -46,6 +54,47 @@ CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testFootnoteConnect)
pWrtShell->DelLeft();
}
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testRedlineDelete)
+{
+ // Given a document with A4 paper size, some text, redlining on, but hidden:
+ SwDoc* pDoc = createDoc();
+ SwDocShell* pDocShell = pDoc->GetDocShell();
+ SwWrtShell* pWrtShell = pDocShell->GetWrtShell();
+ {
+ // Set page size to A4.
+ size_t nCurIdx = pWrtShell->GetCurPageDesc();
+ SwPageDesc aPageDesc(pWrtShell->GetPageDesc(nCurIdx));
+ SwFrameFormat& rMaster = aPageDesc.GetMaster();
+ SwFormatFrameSize aSize(ATT_FIX_SIZE);
+ aSize.SetSize(Size(11906, 16838));
+ rMaster.SetFormatAttr(aSize);
+ pWrtShell->ChgPageDesc(nCurIdx, aPageDesc);
+ }
+ OUString aBefore("aaaaaaaaa aaaaaaaaaa aa aa aa ");
+ OUString aDelete("delete eeeeeeeeeee ee eeeeeeeeeee ee eeeeee");
+ pWrtShell->Insert(aBefore + " " + aDelete
+ + " zz zzz zzzzzzzzz zzz zzzz zzzz zzzzzzzzz zzzzzz zzz zzzzzzzzzzz zzz");
+ // Enable redlining.
+ pDocShell->SetChangeRecording(/*bActivate=*/true);
+ // Hide redlining.
+ pWrtShell->StartAllAction();
+ pWrtShell->GetLayout()->SetHideRedlines(true);
+ pWrtShell->EndAllAction();
+
+ // When deleting content in the middle of the paragraph:
+ pWrtShell->SttEndDoc(/*bStt=*/true);
+ pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/false, /*nCount=*/aBefore.getLength(),
+ /*bBasicCall=*/false);
+ pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/true, /*nCount=*/aDelete.getLength(),
+ /*bBasicCall=*/false);
+ // Without the accompanying fix in place, this test would have crashed:
+ pWrtShell->Delete();
+
+ // Then make sure that the redline is created:
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1),
+ pDoc->getIDocumentRedlineAccess().GetRedlineTable().size());
+}
+
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/uwriter.cxx b/sw/qa/core/uwriter.cxx
index 22cd289c7f27..ec18a86241bf 100644
--- a/sw/qa/core/uwriter.cxx
+++ b/sw/qa/core/uwriter.cxx
@@ -1149,7 +1149,7 @@ void SwDocTest::randomTest()
break;
case 2:
*pCrs->GetMark() = getRandomPosition(m_pDoc, 42);
- m_pDoc->getIDocumentContentOperations().DeleteAndJoin(*pCrs, !!getRand(1));
+ m_pDoc->getIDocumentContentOperations().DeleteAndJoin(*pCrs, SwDeleteFlags::Default, !!getRand(1));
break;
case 3:
default:
diff --git a/sw/qa/extras/htmlexport/htmlexport.cxx b/sw/qa/extras/htmlexport/htmlexport.cxx
index fadd91b728fb..7a3c3aa7638b 100644
--- a/sw/qa/extras/htmlexport/htmlexport.cxx
+++ b/sw/qa/extras/htmlexport/htmlexport.cxx
@@ -492,17 +492,25 @@ DECLARE_HTMLEXPORT_TEST(testReqIfJpgImg, "reqif-jpg-img.xhtml")
DECLARE_HTMLEXPORT_TEST(testReqIfTable, "reqif-table.xhtml")
{
- htmlDocPtr pDoc = parseHtml(maTempFile);
+ SvMemoryStream aStream;
+ HtmlExportTest::wrapFragment(maTempFile, aStream);
+ xmlDocPtr pDoc = parseXmlStream(&aStream);
CPPUNIT_ASSERT(pDoc);
// <div> was missing, so the XHTML fragment wasn't a valid
// xhtml.BlkStruct.class type anymore.
- assertXPath(pDoc, "/html/body/div/table/tr/th", 1);
+ assertXPath(pDoc,
+ "/reqif-xhtml:html/reqif-xhtml:div/reqif-xhtml:table/reqif-xhtml:tr/reqif-xhtml:th",
+ 1);
// The attribute was present to contain "background" and "border", which is
// ignored in reqif-xhtml.
- assertXPathNoAttribute(pDoc, "/html/body/div/table/tr/th", "style");
+ assertXPathNoAttribute(
+ pDoc, "/reqif-xhtml:html/reqif-xhtml:div/reqif-xhtml:table/reqif-xhtml:tr/reqif-xhtml:th",
+ "style");
// The attribute was present, which is not valid in reqif-xhtml.
- assertXPathNoAttribute(pDoc, "/html/body/div/table/tr/th", "bgcolor");
+ assertXPathNoAttribute(
+ pDoc, "/reqif-xhtml:html/reqif-xhtml:div/reqif-xhtml:table/reqif-xhtml:tr/reqif-xhtml:th",
+ "bgcolor");
}
DECLARE_HTMLEXPORT_TEST(testReqIfTable2, "reqif-table2.odt")
diff --git a/sw/qa/extras/layout/data/largeTopMarginAndHiddenFirstSection.fodt b/sw/qa/extras/layout/data/largeTopMarginAndHiddenFirstSection.fodt
new file mode 100644
index 000000000000..fbefc5c48046
--- /dev/null
+++ b/sw/qa/extras/layout/data/largeTopMarginAndHiddenFirstSection.fodt
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:styles>
+ <style:style style:name="Standard" style:family="paragraph" style:class="text">
+ <style:paragraph-properties fo:margin-top="1in" fo:margin-bottom="0" style:contextual-spacing="false" fo:line-height="12pt"/>
+ </style:style>
+ </office:styles>
+ <office:body>
+ <office:text>
+ <text:section text:name="Hidden" text:display="none"/>
+ <text:section text:name="Shown"/>
+ </office:text>
+ </office:body>
+</office:document> \ No newline at end of file
diff --git a/sw/qa/extras/layout/data/pageBreakInHiddenSection.fodt b/sw/qa/extras/layout/data/pageBreakInHiddenSection.fodt
new file mode 100644
index 000000000000..5fae6a491704
--- /dev/null
+++ b/sw/qa/extras/layout/data/pageBreakInHiddenSection.fodt
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:automatic-styles>
+ <style:style style:name="P1" style:family="paragraph" style:master-page-name="Landscape">
+ <style:paragraph-properties style:page-number="1"/>
+ </style:style>
+ <style:style style:name="P2" style:family="paragraph" style:master-page-name="Landscape">
+ <style:paragraph-properties style:page-number="1"/>
+ <style:text-properties text:display="none"/>
+ </style:style>
+ </office:automatic-styles>
+ <office:body>
+ <office:text>
+ <text:p>First line</text:p>
+ <text:section text:name="Hidden" text:display="none">
+ <text:p text:style-name="P1"/>
+ </text:section>
+ <text:section text:name="Shown">
+ <text:p>Before break (still first page)</text:p>
+ </text:section>
+ <text:section text:name="HiddenText">
+ <text:p text:style-name="P2"/>
+ </text:section>
+ <text:p>After break</text:p>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p>Should be together with next</text:p>
+ <text:section text:name="Hidden2" text:display="none">
+ <text:p text:style-name="P2"/>
+ </text:section>
+ <text:p>Should be together with previous</text:p>
+ </office:text>
+ </office:body>
+</office:document> \ No newline at end of file
diff --git a/sw/qa/extras/layout/data/s4_min2.fodt b/sw/qa/extras/layout/data/s4_min2.fodt
new file mode 100644
index 000000000000..e1317de597d8
--- /dev/null
+++ b/sw/qa/extras/layout/data/s4_min2.fodt
@@ -0,0 +1,360 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rpt="http://openoffice.org/2005/report" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/" office:version="1.2" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:meta><meta:generator>CIB_OfficeDev/6.1.7.41$Linux_X86_64 LibreOffice_project/1df0ab666a1bb346850daa72aaa2e29a697a252c</meta:generator><meta:creation-date>2023-06-26T22:28:03.054604345</meta:creation-date><dc:language>de-DE</dc:language><meta:editing-cycles>11</meta:editing-cycles><meta:editing-duration>PT14M3S</meta:editing-duration><dc:date>2023-06-26T23:06:43.147312212</dc:date><meta:document-statistic meta:table-count="1" meta:image-count="0" meta:object-count="0" meta:page-count="3" meta:paragraph-count="14" meta:word-count="247" meta:character-count="1680"/><meta:user-defined meta:name="Info 1"/><meta:user-defined meta:name="Info 2"/><meta:user-defined meta:name="Info 3"/><meta:user-defined meta:name="Info 4"/></office:meta>
+ <office:font-face-decls>
+ <style:font-face style:name="Arial" svg:font-family="Arial" style:font-pitch="variable"/>
+ <style:font-face style:name="Arial Unicode MS" svg:font-family="'Arial Unicode MS'" style:font-pitch="variable"/>
+ <style:font-face style:name="HG Mincho Light J" svg:font-family="'HG Mincho Light J'" style:font-pitch="variable"/>
+ <style:font-face style:name="Times New Roman" svg:font-family="'Times New Roman'" style:font-pitch="variable"/>
+ <style:font-face style:name="Thorndale" svg:font-family="Thorndale" style:font-family-generic="roman" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+ <style:default-style style:family="graphic">
+ <style:graphic-properties svg:stroke-color="#808080" draw:fill-color="#cfe7f5" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:flow-with-text="true"/>
+ <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:font-independent-line-spacing="false">
+ <style:tab-stops/>
+ </style:paragraph-properties>
+ <style:text-properties fo:color="#000000" style:font-name="Thorndale" fo:font-size="12pt" fo:language="de" fo:country="DE" style:font-name-asian="HG Mincho Light J" style:font-size-asian="12pt" style:language-asian="zxx" style:country-asian="none" style:font-name-complex="Arial Unicode MS" style:font-size-complex="12pt" style:language-complex="zxx" style:country-complex="none"/>
+ </style:default-style>
+ <style:default-style style:family="paragraph">
+ <style:paragraph-properties fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="2cm" style:writing-mode="lr-tb"/>
+ <style:text-properties fo:color="#000000" style:font-name="Thorndale" fo:font-size="12pt" fo:language="de" fo:country="DE" style:font-name-asian="HG Mincho Light J" style:font-size-asian="12pt" style:language-asian="zxx" style:country-asian="none" style:font-name-complex="Arial Unicode MS" style:font-size-complex="12pt" style:language-complex="zxx" style:country-complex="none" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2"/>
+ </style:default-style>
+ <style:default-style style:family="table">
+ <style:table-properties table:border-model="separating"/>
+ </style:default-style>
+ <style:default-style style:family="table-row">
+ <style:table-row-properties fo:keep-together="always"/>
+ </style:default-style>
+ <style:style style:name="Standard" style:family="paragraph" style:class="text">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" loext:contextual-spacing="false" fo:hyphenation-ladder-count="no-limit"/>
+ <style:text-properties style:font-name="Arial" fo:font-family="Arial" style:font-pitch="variable" fo:hyphenate="true" fo:hyphenation-remain-char-count="4" fo:hyphenation-push-char-count="4"/>
+ </style:style>
+ <style:style style:name="Text_20_body" style:display-name="Text body" style:family="paragraph" style:parent-style-name="Standard" style:class="text">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" loext:contextual-spacing="false" fo:hyphenation-ladder-count="no-limit"/>
+ <style:text-properties style:font-name="Arial" fo:font-family="Arial" style:font-pitch="variable" fo:hyphenate="true" fo:hyphenation-remain-char-count="4" fo:hyphenation-push-char-count="4"/>
+ </style:style>
+ <style:style style:name="Footer" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
+ <style:paragraph-properties>
+ <style:tab-stops>
+ <style:tab-stop style:position="8.5cm" style:type="center"/>
+ <style:tab-stop style:position="17.002cm" style:type="right"/>
+ </style:tab-stops>
+ </style:paragraph-properties>
+ </style:style>
+ <style:style style:name="Table_20_Contents" style:display-name="Table Contents" style:family="paragraph" style:parent-style-name="Text_20_body" style:class="extra"/>
+ <style:style style:name="Frame_20_contents" style:display-name="Frame contents" style:family="paragraph" style:parent-style-name="Text_20_body" style:class="extra"/>
+ <style:style style:name="Arial_5f_12_5f_Links" style:display-name="Arial_12_Links" style:family="paragraph" style:parent-style-name="Standard">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" loext:contextual-spacing="false" fo:hyphenation-ladder-count="no-limit"/>
+ <style:text-properties style:font-name="Arial" fo:font-family="Arial" style:font-pitch="variable" fo:font-weight="350" fo:hyphenate="false" fo:hyphenation-remain-char-count="4" fo:hyphenation-push-char-count="4"/>
+ </style:style>
+ <style:style style:name="TVS_20_Standard" style:display-name="TVS Standard" style:family="paragraph" style:master-page-name="">
+ <style:paragraph-properties fo:hyphenation-ladder-count="no-limit" style:page-number="auto"/>
+ <style:text-properties style:font-name="Arial" fo:font-family="Arial" style:font-pitch="variable" fo:hyphenate="true" fo:hyphenation-remain-char-count="4" fo:hyphenation-push-char-count="4"/>
+ </style:style>
+ <style:style style:name="TVS_20_KopfzeileFKB_5f_S2" style:display-name="TVS KopfzeileFKB_S2" style:family="paragraph" style:parent-style-name="TVS_20_Standard">
+ <style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/>
+ <style:text-properties fo:font-size="8pt"/>
+ </style:style>
+ <style:style style:name="TVS_20_FußzeileFKB" style:display-name="TVS FußzeileFKB" style:family="paragraph" style:parent-style-name="TVS_20_Standard" style:master-page-name="">
+ <style:paragraph-properties fo:text-align="center" style:justify-single-word="false" style:page-number="auto" style:vertical-align="middle"/>
+ <style:text-properties style:font-name="Times New Roman" fo:font-family="'Times New Roman'" style:font-pitch="variable" fo:font-size="8pt"/>
+ </style:style>
+ <style:style style:name="TVS_20_Adressfeld" style:display-name="TVS Adressfeld" style:family="paragraph" style:parent-style-name="TVS_20_Standard" style:master-page-name="">
+ <style:paragraph-properties style:page-number="auto"/>
+ <style:text-properties fo:language="zxx" fo:country="none"/>
+ </style:style>
+ <style:style style:name="TVS_20_Unsichtbar" style:display-name="TVS Unsichtbar" style:family="paragraph" style:parent-style-name="TVS_20_Standard" style:master-page-name="">
+ <style:paragraph-properties style:page-number="auto"/>
+ <style:text-properties fo:font-size="2pt"/>
+ </style:style>
+ <style:style style:name="TVS_20_Mehrfertigung" style:display-name="TVS Mehrfertigung" style:family="paragraph" style:parent-style-name="TVS_20_Standard" style:master-page-name="">
+ <style:paragraph-properties fo:text-align="center" style:justify-single-word="false" style:page-number="auto"/>
+ <style:text-properties fo:font-weight="bold"/>
+ </style:style>
+ <style:style style:name="TVS_20_Absender" style:display-name="TVS Absender" style:family="paragraph" style:parent-style-name="TVS_20_Standard" style:master-page-name="">
+ <style:paragraph-properties style:page-number="auto"/>
+ <style:text-properties style:font-name="Times New Roman" fo:font-family="'Times New Roman'" style:font-pitch="variable" fo:font-size="8pt"/>
+ </style:style>
+ <style:style style:name="TVS_20_Anrede" style:display-name="TVS Anrede" style:family="paragraph" style:parent-style-name="TVS_20_Standard" style:next-style-name="TVS_20_Freitext">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.42cm" loext:contextual-spacing="false"/>
+ </style:style>
+ <style:style style:name="TVS_20_Freitext" style:display-name="TVS Freitext" style:family="paragraph" style:parent-style-name="TVS_20_Standard">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.42cm" loext:contextual-spacing="false"/>
+ </style:style>
+ <style:style style:name="Footnote_20_Symbol" style:display-name="Footnote Symbol" style:family="text"/>
+ <style:style style:name="Endnote_20_Symbol" style:display-name="Endnote Symbol" style:family="text"/>
+ <style:style style:name="TVS_20_Fett" style:display-name="TVS Fett" style:family="text">
+ <style:text-properties fo:font-weight="bold"/>
+ </style:style>
+ <style:style style:name="Footnote_20_anchor" style:display-name="Footnote anchor" style:family="text">
+ <style:text-properties style:text-position="super 58%"/>
+ </style:style>
+ <style:style style:name="Endnote_20_anchor" style:display-name="Endnote anchor" style:family="text">
+ <style:text-properties style:text-position="super 58%"/>
+ </style:style>
+ <style:style style:name="Frame" style:family="graphic">
+ <style:graphic-properties svg:width="7.696cm" fo:min-height="3.519cm" text:anchor-type="page" style:wrap="parallel" style:number-wrapped-paragraphs="no-limit" style:wrap-contour="false">
+ <style:columns fo:column-count="1" fo:column-gap="0cm"/>
+ </style:graphic-properties>
+ </style:style>
+ <text:outline-style style:name="Outline">
+ <text:outline-level-style text:level="1" style:num-format="">
+ <style:list-level-properties/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="2" style:num-format="">
+ <style:list-level-properties/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="3" style:num-format="">
+ <style:list-level-properties/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="4" style:num-format="">
+ <style:list-level-properties/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="5" style:num-format="">
+ <style:list-level-properties/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="6" style:num-format="">
+ <style:list-level-properties/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="7" style:num-format="">
+ <style:list-level-properties/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="8" style:num-format="">
+ <style:list-level-properties/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="9" style:num-format="">
+ <style:list-level-properties/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="10" style:num-format="">
+ <style:list-level-properties/>
+ </text:outline-level-style>
+ </text:outline-style>
+ <text:notes-configuration text:note-class="footnote" text:citation-style-name="Footnote_20_Symbol" text:citation-body-style-name="Footnote_20_anchor" text:master-page-name="Standard" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/>
+ <text:notes-configuration text:note-class="endnote" text:citation-style-name="Endnote_20_Symbol" text:citation-body-style-name="Endnote_20_anchor" text:master-page-name="Endnote" style:num-format="1" text:start-value="0"/>
+ <text:linenumbering-configuration text:number-lines="false" text:offset="0.499cm" style:num-format="1" text:number-position="left" text:increment="5"/>
+ </office:styles>
+ <office:automatic-styles>
+ <style:style style:name="Tabelle1" style:family="table">
+ <style:table-properties style:width="16.574cm" table:align="margins"/>
+ </style:style>
+ <style:style style:name="Tabelle1.A" style:family="table-column">
+ <style:table-column-properties style:column-width="16.574cm" style:rel-column-width="65535*"/>
+ </style:style>
+ <style:style style:name="Tabelle1.A1" style:family="table-cell">
+ <style:table-cell-properties fo:padding="0.097cm" fo:border="none"/>
+ </style:style>
+ <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Standard">
+ <style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/>
+ <style:text-properties fo:font-size="2pt" fo:font-weight="bold"/>
+ </style:style>
+ <style:style style:name="P2" style:family="paragraph" style:parent-style-name="Standard">
+ <style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/>
+ <style:text-properties fo:font-size="14pt" fo:font-weight="bold"/>
+ </style:style>
+ <style:style style:name="P3" style:family="paragraph" style:parent-style-name="Standard">
+ <style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/>
+ <style:text-properties fo:font-size="10pt" fo:font-weight="normal"/>
+ </style:style>
+ <style:style style:name="P4" style:family="paragraph" style:parent-style-name="Standard">
+ <style:text-properties/>
+ </style:style>
+ <style:style style:name="P5" style:family="paragraph" style:parent-style-name="TVS_20_Adressfeld">
+ <style:text-properties fo:font-size="10pt"/>
+ </style:style>
+ <style:style style:name="P6" style:family="paragraph" style:parent-style-name="Table_20_Contents">
+ <style:text-properties fo:font-size="12pt" style:font-size-asian="12pt" style:font-size-complex="12pt"/>
+ </style:style>
+ <style:style style:name="P7" style:family="paragraph" style:parent-style-name="Arial_5f_12_5f_Links">
+ <style:text-properties/>
+ </style:style>
+ <style:style style:name="P8" style:family="paragraph" style:parent-style-name="Standard" style:master-page-name="Standard2">
+ <style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" loext:contextual-spacing="false" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="auto"/>
+ <style:text-properties style:font-name="Arial" fo:font-size="12pt" fo:font-style="normal" style:text-underline-style="none" fo:font-weight="bold" style:font-size-asian="12pt" style:font-weight-asian="normal" style:font-size-complex="12pt" style:font-weight-complex="normal"/>
+ </style:style>
+ <style:style style:name="P9" style:family="paragraph" style:parent-style-name="TVS_20_Anrede" style:master-page-name="FABrief_5f_S1">
+ <style:paragraph-properties style:page-number="auto"/>
+ </style:style>
+ <style:style style:name="fr1" style:family="graphic" style:parent-style-name="Frame">
+ <style:graphic-properties style:protect="size position" style:vertical-pos="from-top" style:vertical-rel="paragraph" style:horizontal-pos="from-left" style:horizontal-rel="paragraph" fo:padding="0cm" fo:border="none" style:shadow="none" draw:shadow-opacity="100%"/>
+ </style:style>
+ <style:style style:name="fr2" style:family="graphic" style:parent-style-name="Frame">
+ <style:graphic-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" style:protect="content size position" style:vertical-pos="middle" style:vertical-rel="page" style:horizontal-pos="from-left" style:horizontal-rel="paragraph" fo:padding="0cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.51pt solid #000000" fo:border-bottom="none"/>
+ </style:style>
+ <style:style style:name="fr3" style:family="graphic" style:parent-style-name="Frame">
+ <style:graphic-properties style:protect="size position" style:wrap="parallel" style:number-wrapped-paragraphs="no-limit" style:vertical-pos="from-top" style:vertical-rel="page" style:horizontal-pos="from-left" style:horizontal-rel="page" fo:padding="0cm" fo:border="none">
+ <style:columns fo:column-count="1" fo:column-gap="0cm"/>
+ </style:graphic-properties>
+ </style:style>
+ <style:style style:name="fr4" style:family="graphic" style:parent-style-name="Frame">
+ <style:graphic-properties style:protect="size position" style:wrap="parallel" style:number-wrapped-paragraphs="no-limit" style:vertical-pos="from-top" style:vertical-rel="page" style:horizontal-pos="from-left" style:horizontal-rel="page" fo:background-color="transparent" draw:fill="none" draw:fill-color="#ffffff" fo:padding="0cm" fo:border-left="none" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.51pt solid #000000"/>
+ </style:style>
+ <style:style style:name="fr5" style:family="graphic" style:parent-style-name="Frame">
+ <style:graphic-properties style:protect="size position" style:wrap="parallel" style:number-wrapped-paragraphs="no-limit" style:vertical-pos="from-top" style:vertical-rel="page" style:horizontal-pos="from-left" style:horizontal-rel="page" style:shadow="none" draw:shadow-opacity="100%"/>
+ </style:style>
+ <style:style style:name="fr6" style:family="graphic" style:parent-style-name="Frame">
+ <style:graphic-properties style:protect="size position" style:wrap="parallel" style:number-wrapped-paragraphs="no-limit" style:vertical-pos="from-top" style:vertical-rel="page" style:horizontal-pos="from-left" style:horizontal-rel="paragraph" fo:padding="0cm" fo:border="none">
+ <style:columns fo:column-count="1" fo:column-gap="0cm"/>
+ </style:graphic-properties>
+ </style:style>
+ <style:style style:name="fr7" style:family="graphic" style:parent-style-name="Frame">
+ <style:graphic-properties style:protect="position" style:wrap="parallel" style:number-wrapped-paragraphs="no-limit" style:vertical-pos="from-top" style:vertical-rel="page" style:horizontal-pos="from-left" style:horizontal-rel="page">
+ <style:columns fo:column-count="1" fo:column-gap="0cm"/>
+ </style:graphic-properties>
+ </style:style>
+ <style:style style:name="Sect1" style:family="section">
+ <style:section-properties style:editable="false">
+ <style:columns fo:column-count="1" fo:column-gap="0cm"/>
+ </style:section-properties>
+ </style:style>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" style:num-format="1" style:paper-tray-name="[From printer settings]" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" fo:border="none" fo:padding="0cm" style:shadow="none" fo:background-color="transparent" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="20" style:layout-grid-base-height="0.706cm" style:layout-grid-ruby-height="0.353cm" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="true" style:layout-grid-display="true" draw:fill="none" draw:fill-color="#cfe7f5" style:footnote-max-height="0cm">
+ <style:columns fo:column-count="1" fo:column-gap="0cm"/>
+ <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="none" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style/>
+ </style:page-layout>
+ <style:page-layout style:name="pm2" style:page-usage="mirrored">
+ <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" style:num-format="1" style:paper-tray-name="[From printer settings]" style:print-orientation="portrait" fo:margin-top="1.3cm" fo:margin-bottom="1.799cm" fo:margin-left="2.9cm" fo:margin-right="1.799cm" fo:border="none" fo:padding="0cm" style:shadow="none" fo:background-color="transparent" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="20" style:layout-grid-base-height="0.706cm" style:layout-grid-ruby-height="0.353cm" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="true" style:layout-grid-display="true" draw:fill="none" draw:fill-color="#cfe7f5" style:footnote-max-height="0cm">
+ <style:columns fo:column-count="1" fo:column-gap="0cm"/>
+ <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="none" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style>
+ <style:header-footer-properties svg:height="1.9cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-bottom="1.401cm" fo:border="none" fo:padding="0cm" style:shadow="none" fo:background-color="transparent" style:dynamic-spacing="false" draw:fill="none" draw:fill-color="#cfe7f5"/>
+ </style:header-style>
+ <style:footer-style/>
+ </style:page-layout>
+ <style:page-layout style:name="pm3">
+ <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="8.7cm" fo:margin-bottom="1.799cm" fo:margin-left="2.193cm" fo:margin-right="1.799cm" fo:background-color="transparent" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="20" style:layout-grid-base-height="0.706cm" style:layout-grid-ruby-height="0.353cm" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="false" style:layout-grid-display="false" draw:fill="none" draw:fill-color="#cfe7f5" style:footnote-max-height="0cm">
+ <style:columns fo:column-count="1" fo:column-gap="0cm"/>
+ <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="none" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style/>
+ </style:page-layout>
+ <style:page-layout style:name="pm4">
+ <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="20" style:layout-grid-base-height="0.706cm" style:layout-grid-ruby-height="0.353cm" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="false" style:layout-grid-display="false" style:footnote-max-height="0cm">
+ <style:footnote-sep style:line-style="none" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style/>
+ </style:page-layout>
+ <style:page-layout style:name="pm5" style:page-usage="mirrored">
+ <style:page-layout-properties fo:page-width="29.7cm" fo:page-height="21.001cm" style:num-format="1" style:paper-tray-name="[From printer settings]" style:print-orientation="landscape" fo:margin-top="2.9cm" fo:margin-bottom="1.799cm" fo:margin-left="2cm" fo:margin-right="2cm" fo:border="none" fo:padding="0cm" style:shadow="none" fo:background-color="transparent" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="20" style:layout-grid-base-height="0.706cm" style:layout-grid-ruby-height="0.353cm" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="true" style:layout-grid-display="true" draw:fill="none" draw:fill-color="#cfe7f5" style:footnote-max-height="0cm">
+ <style:columns fo:column-count="1" fo:column-gap="0cm"/>
+ <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="none" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style>
+ <style:header-footer-properties fo:min-height="0.499cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-bottom="0.499cm" fo:border="none" fo:padding="0cm" fo:background-color="transparent" style:dynamic-spacing="false" draw:fill="none" draw:fill-color="#cfe7f5"/>
+ </style:header-style>
+ <style:footer-style/>
+ </style:page-layout>
+ <style:page-layout style:name="pm6">
+ <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" style:num-format="1" style:paper-tray-name="[From printer settings]" style:print-orientation="portrait" fo:margin-top="10.7cm" fo:margin-bottom="2.2cm" fo:margin-left="2.9cm" fo:margin-right="1.799cm" fo:border="none" fo:padding="0cm" style:shadow="none" fo:background-color="transparent" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="20" style:layout-grid-base-height="0.706cm" style:layout-grid-ruby-height="0.353cm" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="true" style:layout-grid-display="true" draw:fill="none" draw:fill-color="#cfe7f5" style:footnote-max-height="0cm">
+ <style:columns fo:column-count="1" fo:column-gap="0cm"/>
+ <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="none" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style>
+ <style:header-footer-properties svg:height="2.401cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.3cm" fo:border="none" fo:padding="0cm" style:shadow="none" fo:background-color="transparent" style:dynamic-spacing="false" draw:fill="none" draw:fill-color="#cfe7f5"/>
+ </style:footer-style>
+ </style:page-layout>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:page-layout-name="pm1"/>
+ <style:master-page style:name="FABrief_5f_S2" style:display-name="FABrief_S2" style:page-layout-name="pm2">
+ <style:header>
+ <text:p text:style-name="TVS_20_KopfzeileFKB_5f_S2">- <text:page-number text:select-page="current">2</text:page-number><text:s/>-</text:p>
+ </style:header>
+ </style:master-page>
+ <style:master-page style:name="Standard2" style:page-layout-name="pm3" style:next-style-name="FABrief_5f_S2"/>
+ <style:master-page style:name="Endnote" style:page-layout-name="pm4"/>
+ <style:master-page style:name="FABrief_5f_S1" style:display-name="FABrief_S1" style:page-layout-name="pm6" style:next-style-name="FABrief_5f_S2">
+ <style:footer>
+ <text:p text:style-name="Footer"><draw:frame draw:style-name="fr1" draw:name="ES_FUSSZEILE" text:anchor-type="paragraph" svg:x="0cm" svg:y="0cm" svg:width="16.3cm" svg:height="2.101cm" draw:z-index="7">
+ <draw:text-box>
+ <text:p text:style-name="TVS_20_FußzeileFKB"><text:span text:style-name="TVS_20_Fett"/></text:p>
+ </draw:text-box>
+ </draw:frame></text:p>
+ </style:footer>
+ </style:master-page>
+ </office:master-styles>
+ <office:body>
+ <office:text text:use-soft-page-breaks="true">
+ <office:forms form:automatic-focus="false" form:apply-design-mode="false"/>
+ <text:sequence-decls>
+ <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Table"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Text"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Figure"/>
+ </text:sequence-decls>
+ <text:user-field-decls>
+ <text:user-field-decl office:value-type="string" office:string-value="" text:name="RF_POSTADR1"/>
+ <text:user-field-decl office:value-type="string" office:string-value="" text:name="RF_POSTADR2"/>
+ <text:user-field-decl office:value-type="string" office:string-value="" text:name="IF_MEHRFERTIGUNG"/>
+ <text:user-field-decl office:value-type="string" office:string-value="" text:name="ES_BRIEFANREDE"/>
+ <text:user-field-decl office:value-type="string" office:string-value="" text:name="IF_AUSBL_DSGVO"/>
+ </text:user-field-decls><draw:frame draw:style-name="fr2" draw:name="Rahmen2" text:anchor-type="page" text:anchor-page-number="2" svg:x="0.6cm" svg:width="0.497cm" svg:height="0.041cm" draw:z-index="0">
+ <draw:text-box>
+ <text:p text:style-name="Frame_20_contents"/>
+ </draw:text-box>
+ </draw:frame><draw:frame draw:style-name="fr3" draw:name="ES_ADRESSFELD" text:anchor-type="page" text:anchor-page-number="1" svg:x="2cm" svg:y="6.549cm" svg:width="8.5cm" svg:height="2.799cm" draw:z-index="1">
+ <draw:text-box>
+ <text:p text:style-name="P5"/>
+ </draw:text-box>
+ </draw:frame><draw:frame draw:style-name="fr4" draw:name="Absender" text:anchor-type="page" text:anchor-page-number="1" svg:x="2cm" svg:y="4.3cm" svg:width="8.5cm" svg:height="0.651cm" draw:z-index="2">
+ <draw:text-box>
+ <text:p text:style-name="TVS_20_Absender"><text:user-field-get text:name="RF_POSTADR1"/><text:line-break/><text:user-field-get text:name="RF_POSTADR2"/></text:p>
+ </draw:text-box>
+ </draw:frame><draw:frame draw:style-name="fr5" draw:name="Mehrfertigung" text:anchor-type="page" text:anchor-page-number="1" svg:x="10.901cm" svg:y="4.3cm" svg:width="8.4cm" svg:height="0.55cm" draw:z-index="3">
+ <draw:text-box>
+ <text:p text:style-name="TVS_20_Mehrfertigung"><text:user-field-get text:name="IF_MEHRFERTIGUNG"/></text:p>
+ </draw:text-box>
+ </draw:frame><draw:frame draw:style-name="fr6" draw:name="ES_ADRESSFELD_FA00" text:anchor-type="page" text:anchor-page-number="3" svg:x="2.221cm" svg:y="4.484cm" svg:width="7.878cm" draw:z-index="4">
+ <draw:text-box fo:min-height="3.701cm">
+ <text:p text:style-name="P7">Second box</text:p>
+ </draw:text-box>
+ </draw:frame><draw:frame draw:style-name="fr6" draw:name="Absender_Stpfl" text:anchor-type="page" text:anchor-page-number="3" svg:x="11.312cm" svg:y="4.228cm" svg:width="7.828cm" draw:z-index="5">
+ <draw:text-box fo:min-height="3.62cm">
+ <text:p text:style-name="P7">Third box</text:p>
+ </draw:text-box>
+ </draw:frame><draw:frame draw:style-name="fr7" draw:name="Kopf_Fragebogen" text:anchor-type="page" text:anchor-page-number="3" svg:x="2.17cm" svg:y="1.36cm" svg:width="16.574cm" draw:z-index="6">
+ <draw:text-box fo:min-height="1.353cm">
+ <table:table table:name="Tabelle1" table:style-name="Tabelle1">
+ <table:table-column table:style-name="Tabelle1.A"/>
+ <table:table-header-rows>
+ <table:table-row>
+ <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string">
+ <text:p text:style-name="P2">Something</text:p>
+ </table:table-cell>
+ </table:table-row>
+ </table:table-header-rows>
+ <table:table-row>
+ <table:table-cell table:style-name="Tabelle1.A1" office:value-type="string">
+ <text:p text:style-name="P3">Important here</text:p>
+ </table:table-cell>
+ </table:table-row>
+ </table:table>
+ <text:p text:style-name="P1"/>
+ </draw:text-box>
+ </draw:frame>
+ <text:section text:style-name="Sect1" text:name="CopyA">
+ <text:p text:style-name="P9"><text:user-field-get text:name="ES_BRIEFANREDE"/></text:p>
+ <text:p text:style-name="TVS_20_Freitext"/>
+ <text:p text:style-name="TVS_20_Freitext"/>
+ <text:p text:style-name="TVS_20_Freitext"/>
+ <text:p text:style-name="TVS_20_Freitext"/>
+ <text:p text:style-name="P6">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum consequat mi quis pretium semper. Proin luctus orci ac neque venenatis, quis commodo dolor posuere. Curabitur dignissim sapien quis cursus egestas. Donec blandit auctor arcu, nec pellentesque eros molestie eget. In consectetur aliquam hendrerit. Sed cursus mauris vitae ligula pellentesque, non pellentesque urna aliquet. Fusce placerat mauris enim, nec rutrum purus semper vel. Praesent tincidunt neque eu pellentesque pharetra. Fusce pellentesque est orci.</text:p>
+ <text:p text:style-name="P6">Integer sodales tincidunt tristique. Sed a metus posuere, adipiscing nunc et, viverra odio. Donec auctor molestie sem, sit amet tristique lectus hendrerit sed. Cras sodales nisl sed orci mattis iaculis. Nunc eget dolor accumsan, pharetra risus a, vestibulum mauris. Nunc vulputate lobortis mollis. Vivamus nec tellus faucibus, tempor magna nec, facilisis felis. Donec commodo enim a vehicula pellentesque. Nullam vehicula vestibulum est vel ultricies.</text:p>
+ <text:p text:style-name="P6">Aliquam velit massa, laoreet vel leo nec, volutpat facilisis eros. Donec consequat arcu ut diam tempor luctus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Praesent vitae lacus vel leo sodales pharetra a a nibh. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nam luctus tempus nibh, fringilla dictum augue consectetur eget. Curabitur at ante sit amet tortor pharetra molestie eu nec ante. Mauris tincidunt, nibh eu sollicitudin molestie, dolor sapien congue tortor, a pulvinar sapien turpis sed ante. Donec nec est elementum, euismod nulla in, mollis nunc.</text:p>
+ <text:p text:style-name="TVS_20_Unsichtbar"><text:soft-page-break/><text:user-field-get text:name="IF_AUSBL_DSGVO"/><text:hidden-paragraph text:condition="ooow:IF_AUSBL_DSGVO eq &quot;1&quot;"/></text:p>
+ </text:section>
+ <text:p text:style-name="P4">Second page</text:p>
+ <text:section text:style-name="Sect1" text:name="CopyB">
+ <text:p text:style-name="P8">Page 3</text:p>
+ </text:section>
+ </office:text>
+ </office:body>
+</office:document> \ No newline at end of file
diff --git a/sw/qa/extras/layout/data/table-0-height-rows.fodt b/sw/qa/extras/layout/data/table-0-height-rows.fodt
new file mode 100644
index 000000000000..c73991490249
--- /dev/null
+++ b/sw/qa/extras/layout/data/table-0-height-rows.fodt
@@ -0,0 +1,611 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<office:document xmlns:officeooo="http://openoffice.org/2009/office" xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:ooo="http://openoffice.org/2004/office" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" office:version="1.2" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:font-face-decls>
+ <style:font-face style:name="Times New Roman" svg:font-family="'Times New Roman'" style:font-family-generic="roman" style:font-pitch="variable"/>
+ <style:font-face style:name="Times New Roman1" svg:font-family="'Times New Roman'" style:font-adornments="Standard" style:font-family-generic="roman" style:font-pitch="variable"/>
+ <style:font-face style:name="Arial" svg:font-family="Arial" style:font-adornments="Standard" style:font-family-generic="swiss" style:font-pitch="variable"/>
+ <style:font-face style:name="Arial Unicode MS" svg:font-family="'Arial Unicode MS'" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="Tahoma" svg:font-family="Tahoma" style:font-family-generic="system" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+ <style:default-style style:family="graphic">
+ <style:graphic-properties svg:stroke-color="#808080" draw:fill-color="#cfe7f5" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:flow-with-text="false"/>
+ <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:font-independent-line-spacing="false">
+ <style:tab-stops/>
+ </style:paragraph-properties>
+ <style:text-properties fo:color="#000000" style:font-name="Times New Roman" fo:font-size="12pt" fo:language="de" fo:country="DE" style:letter-kerning="true" style:font-name-asian="Arial Unicode MS" style:font-size-asian="12pt" style:language-asian="en" style:country-asian="US" style:font-name-complex="Tahoma" style:font-size-complex="12pt" style:language-complex="en" style:country-complex="US"/>
+ </style:default-style>
+ <style:default-style style:family="paragraph">
+ <style:paragraph-properties fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.997cm" style:writing-mode="page"/>
+ <style:text-properties fo:color="#000000" style:font-name="Times New Roman" fo:font-size="12pt" fo:language="de" fo:country="DE" style:letter-kerning="true" style:font-name-asian="Arial Unicode MS" style:font-size-asian="12pt" style:language-asian="en" style:country-asian="US" style:font-name-complex="Tahoma" style:font-size-complex="12pt" style:language-complex="en" style:country-complex="US" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" loext:hyphenation-no-caps="false"/>
+ </style:default-style>
+ <style:default-style style:family="table">
+ <style:table-properties table:border-model="collapsing"/>
+ </style:default-style>
+ <style:default-style style:family="table-row">
+ <style:table-row-properties fo:keep-together="auto"/>
+ </style:default-style>
+ <style:style style:name="Standard" style:family="paragraph" style:class="text"/>
+ <style:style style:name="Schrift1" style:family="paragraph">
+ <style:paragraph-properties>
+ <style:tab-stops/>
+ </style:paragraph-properties>
+ <style:text-properties style:font-name="Arial" fo:font-family="Arial" style:font-style-name="Standard" style:font-family-generic="swiss" style:font-pitch="variable"/>
+ </style:style>
+ <style:style style:name="Schrift2" style:family="paragraph" style:master-page-name="">
+ <style:paragraph-properties style:page-number="auto"/>
+ <style:text-properties style:font-name="Times New Roman1" fo:font-family="'Times New Roman'" style:font-style-name="Standard" style:font-family-generic="roman" style:font-pitch="variable"/>
+ </style:style>
+ <style:style style:name="TextNormal" style:family="paragraph" style:parent-style-name="Schrift2" style:master-page-name="">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" loext:contextual-spacing="false" fo:line-height="150%" fo:orphans="2" fo:widows="2" fo:hyphenation-ladder-count="no-limit" style:page-number="auto"/>
+ <style:text-properties fo:hyphenate="true" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" loext:hyphenation-no-caps="false"/>
+ </style:style>
+ <style:style style:name="Vfg2" style:family="paragraph" style:parent-style-name="TextNormal" style:list-style-name="Numbering_20_1" style:master-page-name="">
+ <style:paragraph-properties fo:line-height="100%" style:page-number="auto" text:number-lines="true" text:line-number="2"/>
+ </style:style>
+ <style:style style:name="Header_20_and_20_Footer" style:display-name="Header and Footer" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
+ <style:paragraph-properties text:number-lines="false" text:line-number="0">
+ <style:tab-stops>
+ <style:tab-stop style:position="9.5cm" style:type="center"/>
+ <style:tab-stop style:position="19.001cm" style:type="right"/>
+ </style:tab-stops>
+ </style:paragraph-properties>
+ </style:style>
+ <style:style style:name="Header" style:family="paragraph" style:parent-style-name="Header_20_and_20_Footer" style:class="extra">
+ <style:paragraph-properties text:number-lines="false" text:line-number="0">
+ <style:tab-stops>
+ <style:tab-stop style:position="8.5cm" style:type="center"/>
+ <style:tab-stop style:position="17.002cm" style:type="right"/>
+ </style:tab-stops>
+ </style:paragraph-properties>
+ </style:style>
+ <style:style style:name="Footnote_20_Symbol" style:display-name="Footnote Symbol" style:family="text"/>
+ <style:style style:name="Numbering_20_Symbols" style:display-name="Numbering Symbols" style:family="text"/>
+ <style:style style:name="Endnote_20_Symbol" style:display-name="Endnote Symbol" style:family="text"/>
+ <style:style style:name="Footnote_20_anchor" style:display-name="Footnote anchor" style:family="text">
+ <style:text-properties style:text-position="super 58%"/>
+ </style:style>
+ <style:style style:name="Endnote_20_anchor" style:display-name="Endnote anchor" style:family="text">
+ <style:text-properties style:text-position="super 58%"/>
+ </style:style>
+ <text:outline-style style:name="Outline">
+ <text:outline-level-style text:level="1" style:num-format="">
+ <style:list-level-properties/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="2" style:num-format="">
+ <style:list-level-properties/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="3" style:num-format="">
+ <style:list-level-properties/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="4" style:num-format="">
+ <style:list-level-properties/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="5" style:num-format="">
+ <style:list-level-properties/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="6" style:num-format="">
+ <style:list-level-properties/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="7" style:num-format="">
+ <style:list-level-properties/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="8" style:num-format="">
+ <style:list-level-properties/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="9" style:num-format="">
+ <style:list-level-properties/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="10" style:num-format="">
+ <style:list-level-properties/>
+ </text:outline-level-style>
+ </text:outline-style>
+ <text:list-style style:name="Numbering_20_1" style:display-name="Numbering 1">
+ <text:list-level-style-number text:level="1" text:style-name="Numbering_20_Symbols" style:num-suffix="." style:num-format="1">
+ <style:list-level-properties text:space-before="-0.499cm" text:min-label-width="0.499cm"/>
+ </text:list-level-style-number>
+ <text:list-level-style-number text:level="2" text:style-name="Numbering_20_Symbols" style:num-suffix="." style:num-format="1">
+ <style:list-level-properties text:space-before="-0.499cm" text:min-label-width="0.499cm"/>
+ </text:list-level-style-number>
+ <text:list-level-style-number text:level="3" text:style-name="Numbering_20_Symbols" style:num-suffix="." style:num-format="1">
+ <style:list-level-properties text:space-before="-0.499cm" text:min-label-width="0.499cm"/>
+ </text:list-level-style-number>
+ <text:list-level-style-number text:level="4" text:style-name="Numbering_20_Symbols" style:num-suffix="." style:num-format="1">
+ <style:list-level-properties text:space-before="-0.499cm" text:min-label-width="0.499cm"/>
+ </text:list-level-style-number>
+ <text:list-level-style-number text:level="5" text:style-name="Numbering_20_Symbols" style:num-suffix="." style:num-format="1">
+ <style:list-level-properties text:space-before="-0.499cm" text:min-label-width="0.499cm"/>
+ </text:list-level-style-number>
+ <text:list-level-style-number text:level="6" text:style-name="Numbering_20_Symbols" style:num-suffix="." style:num-format="1">
+ <style:list-level-properties text:space-before="-0.499cm" text:min-label-width="0.499cm"/>
+ </text:list-level-style-number>
+ <text:list-level-style-number text:level="7" text:style-name="Numbering_20_Symbols" style:num-suffix="." style:num-format="1">
+ <style:list-level-properties text:space-before="-0.499cm" text:min-label-width="0.499cm"/>
+ </text:list-level-style-number>
+ <text:list-level-style-number text:level="8" text:style-name="Numbering_20_Symbols" style:num-suffix="." style:num-format="1">
+ <style:list-level-properties text:space-before="-0.499cm" text:min-label-width="0.499cm"/>
+ </text:list-level-style-number>
+ <text:list-level-style-number text:level="9" text:style-name="Numbering_20_Symbols" style:num-suffix="." style:num-format="1">
+ <style:list-level-properties text:space-before="-0.499cm" text:min-label-width="0.499cm"/>
+ </text:list-level-style-number>
+ <text:list-level-style-number text:level="10" text:style-name="Numbering_20_Symbols" style:num-suffix="." style:num-format="1">
+ <style:list-level-properties text:space-before="-0.499cm" text:min-label-width="0.499cm"/>
+ </text:list-level-style-number>
+ </text:list-style>
+ <text:notes-configuration text:note-class="footnote" text:citation-style-name="Footnote_20_Symbol" text:citation-body-style-name="Footnote_20_anchor" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="page"/>
+ <text:notes-configuration text:note-class="endnote" text:citation-style-name="Endnote_20_Symbol" text:citation-body-style-name="Endnote_20_anchor" text:master-page-name="Endnote" style:num-format="1" text:start-value="0"/>
+ <text:linenumbering-configuration text:number-lines="false" text:offset="0.499cm" style:num-format="1" text:number-position="left" text:increment="5"/>
+ </office:styles>
+ <office:automatic-styles>
+ <style:style style:name="Tabelle4" style:family="table">
+ <style:table-properties style:width="17.002cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0.499cm" table:align="margins" border-model="collapsing"/>
+ </style:style>
+ <style:style style:name="Tabelle4.A" style:family="table-column">
+ <style:table-column-properties style:column-width="12.702cm" style:rel-column-width="48961*"/>
+ </style:style>
+ <style:style style:name="Tabelle4.B" style:family="table-column">
+ <style:table-column-properties style:column-width="2.147cm" style:rel-column-width="8272*"/>
+ </style:style>
+ <style:style style:name="Tabelle4.C" style:family="table-column">
+ <style:table-column-properties style:column-width="2.154cm" style:rel-column-width="8302*"/>
+ </style:style>
+ <style:style style:name="Tabelle4.1" style:family="table-row">
+ <style:table-row-properties style:row-height="0.501cm"/>
+ </style:style>
+ <style:style style:name="Tabelle4.A1" style:family="table-cell">
+ <style:table-cell-properties fo:padding="0cm" fo:border="none"/>
+ </style:style>
+ <style:style style:name="Tabelle4.B1" style:family="table-cell">
+ <style:table-cell-properties style:vertical-align="middle" fo:padding="0cm" fo:border="none"/>
+ </style:style>
+ <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Schrift1">
+ <style:paragraph-properties>
+ <style:tab-stops>
+ <style:tab-stop style:position="17cm" style:type="right"/>
+ </style:tab-stops>
+ </style:paragraph-properties>
+ </style:style>
+ <style:style style:name="P3" style:family="paragraph" style:parent-style-name="Standard" style:master-page-name="">
+ <style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0.101cm" loext:contextual-spacing="false" fo:line-height="100%" fo:text-align="start" style:justify-single-word="false" fo:hyphenation-ladder-count="no-limit" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="auto">
+ <style:tab-stops/>
+ </style:paragraph-properties>
+ <style:text-properties style:font-name="Times New Roman" fo:font-size="10pt" fo:font-weight="normal" style:font-size-asian="10pt" style:font-size-complex="10pt" fo:hyphenate="true" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" loext:hyphenation-no-caps="false"/>
+ </style:style>
+ <style:style style:name="P4" style:family="paragraph" style:parent-style-name="Standard">
+ <style:paragraph-properties fo:line-height="100%"/>
+ <style:text-properties fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
+ </style:style>
+ <style:style style:name="P5" style:family="paragraph" style:parent-style-name="Standard">
+ <style:text-properties style:font-name="Times New Roman" fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
+ </style:style>
+ <style:style style:name="P6" style:family="paragraph" style:parent-style-name="Standard">
+ <style:paragraph-properties fo:text-align="start" style:justify-single-word="false"/>
+ <style:text-properties style:font-name="Times New Roman" fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
+ </style:style>
+ <style:style style:name="P7" style:family="paragraph" style:parent-style-name="Standard">
+ <style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/>
+ <style:text-properties style:font-name="Times New Roman" fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
+ </style:style>
+ <style:style style:name="P8" style:family="paragraph" style:parent-style-name="Standard">
+ <style:paragraph-properties fo:text-align="end" style:justify-single-word="false"/>
+ <style:text-properties style:font-name="Times New Roman" fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
+ </style:style>
+ <style:style style:name="P9" style:family="paragraph" style:parent-style-name="Standard">
+ <style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/>
+ <style:text-properties style:font-name="Times New Roman" fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt" text:display="true"/>
+ </style:style>
+ <style:style style:name="P10" style:family="paragraph" style:parent-style-name="Standard">
+ <style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/>
+ <style:text-properties style:font-name="Times New Roman" fo:font-size="10pt" fo:font-weight="normal" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
+ </style:style>
+ <style:style style:name="P11" style:family="paragraph" style:parent-style-name="Standard">
+ <style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/>
+ <style:text-properties style:text-position="0% 100%" style:font-name="Times New Roman" fo:font-size="10pt" fo:font-weight="bold" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
+ </style:style>
+ <style:style style:name="P12" style:family="paragraph" style:parent-style-name="Standard">
+ <style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/>
+ <style:text-properties style:text-position="0% 100%" style:font-name="Times New Roman" fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
+ </style:style>
+ <style:style style:name="P13" style:family="paragraph" style:parent-style-name="TextNormal">
+ <style:paragraph-properties fo:line-height="100%"/>
+ <style:text-properties fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
+ </style:style>
+ <style:style style:name="P14" style:family="paragraph" style:parent-style-name="TextNormal">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.499cm" loext:contextual-spacing="false"/>
+ <style:text-properties fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
+ </style:style>
+ <style:style style:name="P15" style:family="paragraph" style:parent-style-name="Standard">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.101cm" loext:contextual-spacing="false" fo:line-height="100%"/>
+ <style:text-properties fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
+ </style:style>
+ <style:style style:name="P16" style:family="paragraph" style:parent-style-name="Standard">
+ <style:paragraph-properties fo:line-height="100%" fo:break-before="auto" fo:break-after="auto"/>
+ <style:text-properties fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
+ </style:style>
+ <style:style style:name="P17" style:family="paragraph" style:parent-style-name="TextNormal">
+ <style:paragraph-properties fo:margin-top="0.199cm" fo:margin-bottom="0.199cm" loext:contextual-spacing="false" fo:line-height="100%" fo:text-align="start" style:justify-single-word="false"/>
+ <style:text-properties fo:font-size="10pt" fo:font-weight="normal" style:font-size-asian="10pt" style:font-weight-asian="normal" style:font-size-complex="10pt" style:font-weight-complex="normal"/>
+ </style:style>
+ <style:style style:name="P20" style:family="paragraph" style:parent-style-name="Vfg2" style:list-style-name="">
+ <style:text-properties fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
+ </style:style>
+ <style:style style:name="T1" style:family="text">
+ <style:text-properties fo:font-size="10pt"/>
+ </style:style>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1cm" fo:margin-bottom="1cm" fo:margin-left="2.499cm" fo:margin-right="1.499cm" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="20" style:layout-grid-base-height="0.706cm" style:layout-grid-ruby-height="0.353cm" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="false" style:layout-grid-display="false" style:footnote-max-height="0cm">
+ <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style>
+ <style:header-footer-properties fo:min-height="0cm" fo:margin-bottom="0.499cm"/>
+ </style:header-style>
+ <style:footer-style>
+ <style:header-footer-properties svg:height="0.9cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.3cm"/>
+ </style:footer-style>
+ </style:page-layout>
+ <style:page-layout style:name="pm2">
+ <style:page-layout-properties fo:page-width="20.999cm" fo:page-height="29.699cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="20" style:layout-grid-base-height="0.706cm" style:layout-grid-ruby-height="0.353cm" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="false" style:layout-grid-display="false" style:footnote-max-height="0cm">
+ <style:footnote-sep style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style/>
+ </style:page-layout>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:page-layout-name="pm1">
+ <style:header>
+ <text:p text:style-name="Header"/>
+ <text:p text:style-name="Header"/>
+ <text:p text:style-name="Header"/>
+ <text:p text:style-name="Header"/>
+ <text:p text:style-name="Header"/>
+ </style:header>
+ <style:footer>
+ <text:p text:style-name="P1"><text:tab/><text:span text:style-name="T1"><text:page-continuation text:string-value="- " text:select-page="next"/></text:span><text:span text:style-name="T1"><text:page-number text:select-page="current" text:page-adjust="1"/></text:span><text:span text:style-name="T1"><text:page-continuation text:string-value=" -" text:select-page="next"/></text:span></text:p>
+ </style:footer>
+ </style:master-page>
+ <style:master-page style:name="Endnote" style:page-layout-name="pm2"/>
+ </office:master-styles>
+ <office:body>
+ <office:text>
+ <office:forms form:automatic-focus="false" form:apply-design-mode="false"/>
+ <text:sequence-decls>
+ <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Table"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Text"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Figure"/>
+ </text:sequence-decls>
+ <text:p text:style-name="P14"/>
+ <text:p text:style-name="P14"/>
+ <text:p text:style-name="P13"/>
+ <text:p text:style-name="P17"/>
+ <text:p text:style-name="P13"/>
+ <text:p text:style-name="P13"/>
+ <text:p text:style-name="P13"/>
+ <text:p text:style-name="P13"/>
+ <table:table table:name="Tabelle4" table:style-name="Tabelle4">
+ <table:table-column table:style-name="Tabelle4.A"/>
+ <table:table-column table:style-name="Tabelle4.B"/>
+ <table:table-column table:style-name="Tabelle4.C"/>
+ <table:table-header-rows>
+ <table:table-row table:style-name="Tabelle4.1">
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P5">dfghdfgnhdfgnhdbhfghndhgbhdfbh</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.B1" office:value-type="string">
+ <text:p text:style-name="P11">von</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.B1" office:value-type="string">
+ <text:p text:style-name="P11">bis</text:p>
+ </table:table-cell>
+ </table:table-row>
+ </table:table-header-rows>
+ <table:table-row>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P12"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P12"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P3"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P10"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P10"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P3"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P10"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P10"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P8"><text:hidden-paragraph text:condition="ooow:1"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" table:number-columns-spanned="2" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1"/></text:p>
+ </table:table-cell>
+ <table:covered-table-cell/>
+ </table:table-row>
+ <table:table-row>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P9"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P9"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P9"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P9"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P9"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P9"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P6"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"><text:hidden-paragraph text:condition="ooow:1" text:is-hidden="true"/></text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P6">fgdhgfhdfbhfbhfbhfgbfdbhdfbhfgbnfdbhdfbg</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"/>
+ </table:table-cell>
+ <table:table-cell table:style-name="Tabelle4.A1" office:value-type="string">
+ <text:p text:style-name="P7"/>
+ </table:table-cell>
+ </table:table-row>
+ </table:table>
+ <text:p text:style-name="P15"/>
+ <text:p text:style-name="P15"/>
+ <text:p text:style-name="P15"/>
+ <text:p text:style-name="P4"/>
+ <text:p text:style-name="P4"/>
+ <text:p text:style-name="P4"/>
+ <text:p text:style-name="P20"/>
+ <text:p text:style-name="P16"/>
+ <text:p text:style-name="P4"/>
+ </office:text>
+ </office:body>
+</office:document>
diff --git a/sw/qa/extras/layout/data/three_sections.fodt b/sw/qa/extras/layout/data/three_sections.fodt
new file mode 100644
index 000000000000..9233fed89085
--- /dev/null
+++ b/sw/qa/extras/layout/data/three_sections.fodt
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" office:version="1.2" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:body>
+ <office:text>
+ <text:p>Select the text below, copy to clipboard, and paste from clipboard, replacing the selection.</text:p>
+ <text:section text:name="Section1">
+ <text:p>&lt;-- Start selection here. Section1</text:p>
+ </text:section>
+ <text:section text:name="Section2">
+ <text:p>Section2</text:p>
+ </text:section>
+ <text:section text:name="Section3">
+ <text:p>Section3. End selection here --&gt;</text:p>
+ </text:section>
+ </office:text>
+ </office:body>
+</office:document> \ No newline at end of file
diff --git a/sw/qa/extras/layout/layout.cxx b/sw/qa/extras/layout/layout.cxx
index a6015fedaac3..a5f1906cd8e9 100644
--- a/sw/qa/extras/layout/layout.cxx
+++ b/sw/qa/extras/layout/layout.cxx
@@ -108,6 +108,18 @@ void SwLayoutWriter::CheckRedlineFootnotesHidden()
assertXPath(pXmlDoc, "/root/page[1]/ftncont/ftn[2]/txt[1]/Text[1]", "Portion", "mo");
}
+CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf156077)
+{
+ createDoc("s4_min2.fodt");
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Number of pages does not match!", 3, getPages());
+ xmlDocPtr pXmlDoc = parseLayoutDump();
+ assertXPath(pXmlDoc, "/root/page[1]/anchored/fly", 3);
+ assertXPath(pXmlDoc, "/root/page[2]/anchored/fly", 1);
+ // this was 0, the at-page anchored flys were not displayed
+ assertXPath(pXmlDoc, "/root/page[3]/anchored/fly", 3);
+}
+
CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testRedlineFootnotes)
{
createDoc("redline_footnotes.odt");
@@ -3088,13 +3100,25 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf119875)
{
createDoc("tdf119875.odt");
xmlDocPtr pXmlDoc = parseLayoutDump();
- sal_Int32 nFirstTop
- = getXPath(pXmlDoc, "/root/page[2]/body/section[1]/infos/bounds", "top").toInt32();
- sal_Int32 nSecondTop
- = getXPath(pXmlDoc, "/root/page[2]/body/section[2]/infos/bounds", "top").toInt32();
- // The first section had the same top value as the second one, so they
- // overlapped.
- CPPUNIT_ASSERT_LESS(nSecondTop, nFirstTop);
+
+ assertXPath(pXmlDoc, "//page[2]/body/section[1]", "formatName", u"S10");
+ assertXPath(pXmlDoc, "//page[2]/body/section[2]", "formatName", u"S11");
+ assertXPath(pXmlDoc, "//page[2]/body/section[3]", "formatName", u"S13");
+ assertXPath(pXmlDoc, "//page[2]/body/section[4]", "formatName", u"S14");
+ // Sections "S10" and "S13" are hidden -> their frames are zero-height
+ assertXPath(pXmlDoc, "//page[2]/body/section[1]/infos/bounds", "height", u"0");
+ assertXPath(pXmlDoc, "//page[2]/body/section[3]/infos/bounds", "height", u"0");
+
+ OUString S10Top = getXPath(pXmlDoc, "//page[2]/body/section[1]/infos/bounds", "top");
+ OUString S11Top = getXPath(pXmlDoc, "//page[2]/body/section[2]/infos/bounds", "top");
+ OUString S13Top = getXPath(pXmlDoc, "//page[2]/body/section[3]/infos/bounds", "top");
+ OUString S14Top = getXPath(pXmlDoc, "//page[2]/body/section[4]/infos/bounds", "top");
+
+ CPPUNIT_ASSERT_EQUAL(S10Top, S11Top);
+ CPPUNIT_ASSERT_EQUAL(S13Top, S14Top);
+
+ // Section "S11" had the same top value as section "S14", so they overlapped.
+ CPPUNIT_ASSERT_LESS(S14Top.toInt32(), S11Top.toInt32());
}
CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf120287)
@@ -4098,6 +4122,103 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf134548)
}
}
+CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf154113)
+{
+ createDoc("three_sections.fodt");
+ Scheduler::ProcessEventsToIdle();
+
+ lcl_dispatchCommand(mxComponent, ".uno:GoToStartOfDoc", {});
+ lcl_dispatchCommand(mxComponent, ".uno:GoToNextPara", {});
+ lcl_dispatchCommand(mxComponent, ".uno:EndOfDocumentSel", {}); // to the end of current section!
+ lcl_dispatchCommand(mxComponent, ".uno:EndOfDocumentSel", {}); // to the end of the document.
+
+ css::uno::Reference <frame::XModel> xModel(mxComponent, css::uno::UNO_QUERY_THROW);
+ css::uno::Reference <container::XIndexAccess> xSelected(xModel->getCurrentSelection(), css::uno::UNO_QUERY_THROW);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xSelected->getCount());
+ css::uno::Reference <text::XTextRange> xRange (xSelected->getByIndex(0), css::uno::UNO_QUERY_THROW);
+
+ //css::uno::Reference < css::uno::UNO_QUERY_THROW);
+ CPPUNIT_ASSERT_EQUAL(OUString("<-- Start selection here. Section1" SAL_NEWLINE_STRING
+ "Section2" SAL_NEWLINE_STRING "Section3. End selection here -->"),
+ xRange->getString());
+
+ lcl_dispatchCommand(mxComponent, ".uno:Cut", {});
+
+ xSelected = css::uno::Reference <container::XIndexAccess> (xModel->getCurrentSelection(), css::uno::UNO_QUERY_THROW);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xSelected->getCount());
+ xRange = css::uno::Reference <text::XTextRange> (xSelected->getByIndex(0), css::uno::UNO_QUERY_THROW);
+ CPPUNIT_ASSERT_EQUAL(OUString(), xRange->getString());
+
+ lcl_dispatchCommand(mxComponent, ".uno:Paste", {});
+
+ xmlDocPtr pXml = parseLayoutDump();
+
+ // Without the fix in place, this would fail with
+ // - Expected: 3
+ // - Actual : 2
+ assertXPath(pXml, "/root/page/body/section", 3);
+ assertXPath(pXml, "/root/page/body/section[1]/txt/LineBreak", "Line",
+ "<-- Start selection here. Section1");
+ assertXPath(pXml, "/root/page/body/section[2]/txt/LineBreak", "Line",
+ "Section2");
+ assertXPath(pXml, "/root/page/body/section[3]/txt/LineBreak", "Line",
+ "Section3. End selection here -->");
+}
+
+CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTable0HeightRows)
+{
+ createDoc("table-0-height-rows.fodt");
+
+ xmlDocPtr pXmlDoc = parseLayoutDump();
+ CPPUNIT_ASSERT(pXmlDoc);
+
+ // the problem was that the table was erroneously split across 2 or 3 pages
+ assertXPath(pXmlDoc, "/root/page[1]/body/tab", 1);
+ assertXPath(pXmlDoc, "/root/page[1]/body/tab/row", 28);
+ // xpath doesn't work on this branch? assertXPath(pXmlDoc, "/root/page[1]/body/tab/row/infos/bounds[@height='0']", 25);
+ assertXPath(pXmlDoc, "/root/page", 1);
+}
+
+CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testLargeTopParaMarginAfterHiddenSection)
+{
+ // Given a large top margin in Standard paragraph style, and the first section hidden
+ createDoc("largeTopMarginAndHiddenFirstSection.fodt");
+ xmlDocPtr pXmlDoc = parseLayoutDump();
+ // Make sure there is only one page and two sections, first hidden (zero-height)
+ assertXPath(pXmlDoc, "//page", 1);
+ assertXPath(pXmlDoc, "//page/body/section", 2);
+ assertXPath(pXmlDoc, "//page/body/section[1]/infos/bounds", "height", u"0");
+ // Check that the top margin (1 in = 1440 twip) is added to line height (12 pt = 240 twip)
+ assertXPath(pXmlDoc, "//page/body/section[2]/infos/bounds", "height", u"1680");
+}
+
+CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testPageBreakInHiddenSection)
+{
+ // Given a paragraph with page-break-before with page style and page number
+ createDoc("pageBreakInHiddenSection.fodt");
+ xmlDocPtr pXmlDoc = parseLayoutDump();
+ assertXPath(pXmlDoc, "//page", 4);
+ assertXPath(pXmlDoc, "//section", 4);
+ assertXPath(pXmlDoc, "//page[1]/body/txt", 1);
+ // The page break inside the hidden section is ignored (otherwise, there would be one section
+ // on the first page)
+ assertXPath(pXmlDoc, "//page[1]/body/section", 2);
+ // The first section is hidden
+ assertXPath(pXmlDoc, "//page[1]/body/section[1]/infos/bounds", "height", u"0");
+
+ // Page 2 is empty even page (generated by the next page's section with page-break-before)
+ assertXPath(pXmlDoc, "//page[2]/body", 0);
+
+ // The section on page 3 is not hidden, only text in it is, therefore its page break works
+ assertXPath(pXmlDoc, "//page[3]/body/section", 1);
+ assertXPath(pXmlDoc, "//page[3]/body/section/infos/bounds", "height", u"0");
+
+ // The section on page 4 is hidden, thus page break in it is ignored (no further pages, where
+ // the section would be moved to otherwise)
+ assertXPath(pXmlDoc, "//page[4]/body/section", 1);
+ assertXPath(pXmlDoc, "//page[4]/body/section/infos/bounds", "height", u"0");
+}
+
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/extras/odfexport/data/tdf137199.docx b/sw/qa/extras/odfexport/data/tdf137199.docx
new file mode 100644
index 000000000000..25b52977beca
--- /dev/null
+++ b/sw/qa/extras/odfexport/data/tdf137199.docx
Binary files differ
diff --git a/sw/qa/extras/odfexport/data/tdf151100.docx b/sw/qa/extras/odfexport/data/tdf151100.docx
new file mode 100644
index 000000000000..e0341bdb9c8c
--- /dev/null
+++ b/sw/qa/extras/odfexport/data/tdf151100.docx
Binary files differ
diff --git a/sw/qa/extras/odfexport/odfexport.cxx b/sw/qa/extras/odfexport/odfexport.cxx
index 6a216a1b5e92..e686e9d46a46 100644
--- a/sw/qa/extras/odfexport/odfexport.cxx
+++ b/sw/qa/extras/odfexport/odfexport.cxx
@@ -99,6 +99,21 @@ public:
}
};
+CPPUNIT_TEST_FIXTURE(Test, tdf151100)
+{
+ // Similar to tdf135942
+
+ load(mpTestDocumentPath, "tdf151100.docx");
+ reload(mpFilter, "tdf151100.docx");
+ // All table autostyles should be collected, including nested, and must not crash.
+
+ CPPUNIT_ASSERT_EQUAL(1, getPages());
+
+ xmlDocPtr pXmlDoc = parseExport("styles.xml");
+
+ assertXPath(pXmlDoc, "/office:document-styles/office:automatic-styles/style:style[@style:family='table']", 1);
+}
+
DECLARE_ODFEXPORT_TEST(testMathObjectFlatExport, "2_MathType3.docx")
{
uno::Reference<util::XModifiable> xModifiable(mxComponent, uno::UNO_QUERY);
@@ -112,6 +127,17 @@ DECLARE_ODFEXPORT_TEST(testMathObjectFlatExport, "2_MathType3.docx")
CPPUNIT_ASSERT_EQUAL(OUString(" size 12{2+2=4} {}"), formula2);
}
+DECLARE_ODFEXPORT_TEST(testTdf137199, "tdf137199.docx")
+{
+ CPPUNIT_ASSERT_EQUAL(OUString(">1<"), getProperty<OUString>(getParagraph(1), "ListLabelString"));
+
+ CPPUNIT_ASSERT_EQUAL(OUString("1)"), getProperty<OUString>(getParagraph(2), "ListLabelString"));
+
+ CPPUNIT_ASSERT_EQUAL(OUString("HELLO1WORLD!"), getProperty<OUString>(getParagraph(3), "ListLabelString"));
+
+ CPPUNIT_ASSERT_EQUAL(OUString("HELLO2WORLD!"), getProperty<OUString>(getParagraph(4), "ListLabelString"));
+}
+
static void testTdf43569_CheckIfFieldParse()
{
{
diff --git a/sw/qa/extras/odfimport/data/forcepoint108.fodt b/sw/qa/extras/odfimport/data/forcepoint108.fodt
new file mode 100644
index 000000000000..4328ea65f61d
--- /dev/null
+++ b/sw/qa/extras/odfimport/data/forcepoint108.fodt
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rpt="http://openoffice.org/2005/report" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/" office:version="1.2" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:meta><meta:initial-creator>ms </meta:initial-creator><meta:creation-date>2015-08-24T21:49:45.305718699</meta:creation-date><meta:document-statistic meta:table-count="0" meta:image-count="0" meta:object-count="0" meta:page-count="1" meta:paragraph-count="0" meta:word-count="0" meta:character-count="0" meta:non-whitespace-character-count="0"/><meta:generator>LibreOfficeDev/4.3.7.2$Linux_X86_64 LibreOffice_project/8a35821d8636a03b8bf4e15b48f59794652c68ba</meta:generator></office:meta>
+ <office:font-face-decls>
+ <style:font-face style:name="Lohit Devanagari1" svg:font-family="&apos;Lohit Devanagari&apos;"/>
+ <style:font-face style:name="Liberation Serif" svg:font-family="&apos;Liberation Serif&apos;" style:font-family-generic="roman" style:font-pitch="variable"/>
+ <style:font-face style:name="Liberation Sans" svg:font-family="&apos;Liberation Sans&apos;" style:font-family-generic="swiss" style:font-pitch="variable"/>
+ <style:font-face style:name="Lohit Devanagari" svg:font-family="&apos;Lohit Devanagari&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="Source Han Sans CN Regular" svg:font-family="&apos;Source Han Sans CN Regular&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+ <style:default-style style:family="graphic">
+ <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:flow-with-text="false"/>
+ <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:writing-mode="lr-tb" style:font-independent-line-spacing="false">
+ <style:tab-stops/>
+ </style:paragraph-properties>
+ <style:text-properties style:use-window-font-color="true" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="de" fo:country="DE" style:letter-kerning="true" style:font-name-asian="Source Han Sans CN Regular" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lohit Devanagari" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/>
+ </style:default-style>
+ <style:default-style style:family="paragraph">
+ <style:paragraph-properties fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.251cm" style:writing-mode="page"/>
+ <style:text-properties style:use-window-font-color="true" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="de" fo:country="DE" style:letter-kerning="true" style:font-name-asian="Source Han Sans CN Regular" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lohit Devanagari" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2"/>
+ </style:default-style>
+ <style:default-style style:family="table">
+ <style:table-properties table:border-model="collapsing"/>
+ </style:default-style>
+ <style:default-style style:family="table-row">
+ <style:table-row-properties fo:keep-together="auto"/>
+ </style:default-style>
+ <style:style style:name="Standard" style:family="paragraph" style:class="text"/>
+ </office:styles>
+ <office:automatic-styles>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
+ <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style/>
+ </style:page-layout>
+
+ <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Standard">
+ <style:text-properties officeooo:rsid="000b01fe" officeooo:paragraph-rsid="000b01fe"/>
+ </style:style>
+ <style:style style:name="P2" style:family="paragraph" style:parent-style-name="Standard">
+ <style:text-properties officeooo:rsid="000b01fe" officeooo:paragraph-rsid="000b01fe"/>
+ </style:style>
+ <style:style style:name="fr1" style:family="graphic" style:parent-style-name="Frame">
+ <style:graphic-properties style:vertical-pos="top" style:vertical-rel="paragraph-content" style:horizontal-pos="center" style:horizontal-rel="paragraph"/>
+ </style:style>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:page-layout-name="pm1"/>
+ </office:master-styles>
+ <office:body>
+ <office:text>
+
+ <text:tracked-changes>
+ <text:changed-region xml:id="ct58510944" text:id="ct58510944">
+ <text:deletion>
+ <office:change-info>
+ <dc:creator>ms </dc:creator>
+ <dc:date>2015-09-10T15:36:00</dc:date>
+ </office:change-info>
+ <text:p text:style-name="P1"><draw:frame draw:style-name="fr1" draw:name="Frame1" text:anchor-type="char" svg:width="2cm" draw:z-index="-0"><draw:text-box fo:min-height="1.158cm"><text:p text:style-name="P1">foo<text:change text:change-id="ct58510944"/></text:p>
+
+ </office:text>
+ </office:body>
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
--- /dev/null
+++ b/sw/qa/extras/odfimport/data/incorrectsum.odt
Binary files differ
diff --git a/sw/qa/extras/odfimport/odfimport.cxx b/sw/qa/extras/odfimport/odfimport.cxx
index 27e1809eaeff..dc9bc44679e6 100644
--- a/sw/qa/extras/odfimport/odfimport.cxx
+++ b/sw/qa/extras/odfimport/odfimport.cxx
@@ -26,6 +26,7 @@
#include <com/sun/star/util/XNumberFormatTypes.hpp>
#include <com/sun/star/util/XNumberFormatsSupplier.hpp>
#include <com/sun/star/lang/Locale.hpp>
+#include <vcl/scheduler.hxx>
#include <IDocumentSettingAccess.hxx>
#include <wrtsh.hxx>
@@ -39,10 +40,12 @@
typedef std::map<OUString, css::uno::Sequence< css::table::BorderLine> > AllBordersMap;
typedef std::pair<OUString, css::uno::Sequence< css::table::BorderLine> > StringSequencePair;
+char const DATA_DIRECTORY[] = "/sw/qa/extras/odfimport/data/";
+
class Test : public SwModelTestBase
{
public:
- Test() : SwModelTestBase("/sw/qa/extras/odfimport/data/", "writer8") {}
+ Test() : SwModelTestBase(DATA_DIRECTORY, "writer8") {}
};
DECLARE_ODFIMPORT_TEST(testEmptySvgFamilyName, "empty-svg-family-name.odt")
@@ -463,6 +466,17 @@ DECLARE_ODFIMPORT_TEST(testFdo56272, "fdo56272.odt")
CPPUNIT_ASSERT_EQUAL(sal_Int32(422), xShape->getPosition().Y); // Was -2371
}
+DECLARE_ODFIMPORT_TEST(testIncorrectSum, "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"));
+}
+
DECLARE_ODFIMPORT_TEST(testCalcFootnoteContent, "ooo32780-1.odt")
{
//this was a CalcFootnoteContent crash
@@ -576,6 +590,8 @@ DECLARE_ODFIMPORT_TEST(testFdo37606, "fdo37606.odt")
pWrtShell->SelAll(); // Selects the whole table.
pWrtShell->SelAll(); // Selects the whole document.
+ pShellCursor = pWrtShell->getShellCursor(false);
+
SwTextNode& rStart = dynamic_cast<SwTextNode&>(pShellCursor->Start()->nNode.GetNode());
CPPUNIT_ASSERT_EQUAL(OUString("A1"), rStart.GetText());
@@ -641,11 +657,11 @@ DECLARE_ODFIMPORT_TEST(testFdo69862, "fdo69862.odt")
SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument *>(mxComponent.get());
CPPUNIT_ASSERT(pTextDoc);
SwWrtShell* pWrtShell = pTextDoc->GetDocShell()->GetWrtShell();
- SwShellCursor* pShellCursor = pWrtShell->getShellCursor(false);
pWrtShell->SelAll(); // Selects A1.
pWrtShell->SelAll(); // Selects the whole table.
pWrtShell->SelAll(); // Selects the whole document.
+ SwShellCursor* pShellCursor = pWrtShell->getShellCursor(false);
SwTextNode& rStart = dynamic_cast<SwTextNode&>(pShellCursor->Start()->nNode.GetNode());
// This was "Footnote.", as Ctrl-A also selected footnotes, but it should not.
CPPUNIT_ASSERT_EQUAL(OUString("A1"), rStart.GetText());
@@ -1000,5 +1016,13 @@ DECLARE_ODFIMPORT_TEST(testTdf133459, "tdf133459.odt")
CPPUNIT_ASSERT_EQUAL(OUString("QQ YYYY"), getProperty<OUString>(xFormat, "FormatString"));
}
+// just care that it doesn't crash/assert
+CPPUNIT_TEST_FIXTURE(Test, testForcepoint108)
+{
+ //load would assert because it fails to load entirely, like testMathMalformedXml
+ OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "forcepoint108.fodt";
+ mxComponent = mxDesktop->loadComponentFromURL(aURL, "_default", 0, {});
+}
+
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/extras/ooxmlexport/data/tdf155690.docx b/sw/qa/extras/ooxmlexport/data/tdf155690.docx
new file mode 100644
index 000000000000..1839862688ee
--- /dev/null
+++ b/sw/qa/extras/ooxmlexport/data/tdf155690.docx
Binary files differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx
index 8f457f89bc16..aa6d6e557e79 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx
@@ -44,11 +44,11 @@ DECLARE_SW_EXPORT_TEST(testFlyInFly, "ooo39250-1-min.rtf", nullptr, Test)
// check that anchor of text frame is in other text frame
uno::Reference<text::XTextContent> const xAnchored(getShape(3), uno::UNO_QUERY);
CPPUNIT_ASSERT(xAnchored.is());
- CPPUNIT_ASSERT_EQUAL(OUString(""), uno::Reference<container::XNamed>(xAnchored, uno::UNO_QUERY_THROW)->getName());
+ CPPUNIT_ASSERT_EQUAL(OUString("Frame1")/*generated name*/, uno::Reference<container::XNamed>(xAnchored, uno::UNO_QUERY_THROW)->getName());
uno::Reference<text::XText> const xAnchorText(xAnchored->getAnchor()->getText());
uno::Reference<text::XTextFrame> const xAnchorFrame(xAnchorText, uno::UNO_QUERY);
CPPUNIT_ASSERT(xAnchorFrame.is());
- CPPUNIT_ASSERT_EQUAL(OUString("Frame2"), uno::Reference<container::XNamed>(xAnchorFrame, uno::UNO_QUERY_THROW)->getName());
+ CPPUNIT_ASSERT_EQUAL(OUString("Frame3"), uno::Reference<container::XNamed>(xAnchorFrame, uno::UNO_QUERY_THROW)->getName());
}
DECLARE_OOXMLEXPORT_TEST(testTdf125778_lostPageBreakTOX, "tdf125778_lostPageBreakTOX.docx")
@@ -61,6 +61,53 @@ DECLARE_OOXMLEXPORT_TEST(testTdf126994_lostPageBreak, "tdf126994_lostPageBreak.d
CPPUNIT_ASSERT_EQUAL_MESSAGE( "Number of Pages", 3, getPages() );
}
+DECLARE_OOXMLEXPORT_TEST(testTdf155690, "tdf155690.docx")
+{
+ uno::Reference<text::XBookmarksSupplier> xBookmarksSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XNameAccess> xBookmarks = xBookmarksSupplier->getBookmarks();
+ {
+ uno::Reference<text::XTextContent> xMark(xBookmarks->getByName("row1_1"), uno::UNO_QUERY);
+ CPPUNIT_ASSERT(xMark.is());
+ // the problem was that the start was after the H
+ CPPUNIT_ASSERT_EQUAL(OUString("Hello world"), xMark->getAnchor()->getString());
+ }
+ {
+ uno::Reference<text::XTextContent> xMark(xBookmarks->getByName("row1_2"), uno::UNO_QUERY);
+ CPPUNIT_ASSERT(xMark.is());
+ CPPUNIT_ASSERT_EQUAL(OUString("Hello world"), xMark->getAnchor()->getString());
+ }
+ {
+ uno::Reference<text::XTextContent> xMark(xBookmarks->getByName("row1_3"), uno::UNO_QUERY);
+ CPPUNIT_ASSERT(xMark.is());
+ CPPUNIT_ASSERT_EQUAL(OUString("ello world"), xMark->getAnchor()->getString());
+ }
+ {
+ uno::Reference<text::XTextContent> xMark(xBookmarks->getByName("row1_4"), uno::UNO_QUERY);
+ CPPUNIT_ASSERT(xMark.is());
+ CPPUNIT_ASSERT_EQUAL(OUString("Hello world"), xMark->getAnchor()->getString());
+ }
+ {
+ uno::Reference<text::XTextContent> xMark(xBookmarks->getByName("row2_1"), uno::UNO_QUERY);
+ CPPUNIT_ASSERT(xMark.is());
+ CPPUNIT_ASSERT_EQUAL(OUString("Hello world"), xMark->getAnchor()->getString());
+ }
+ {
+ uno::Reference<text::XTextContent> xMark(xBookmarks->getByName("row2_1"), uno::UNO_QUERY);
+ CPPUNIT_ASSERT(xMark.is());
+ CPPUNIT_ASSERT_EQUAL(OUString("Hello world"), xMark->getAnchor()->getString());
+ }
+ {
+ uno::Reference<text::XTextContent> xMark(xBookmarks->getByName("row2_3"), uno::UNO_QUERY);
+ CPPUNIT_ASSERT(xMark.is());
+ CPPUNIT_ASSERT_EQUAL(OUString("ello world"), xMark->getAnchor()->getString());
+ }
+ {
+ uno::Reference<text::XTextContent> xMark(xBookmarks->getByName("row2_4"), uno::UNO_QUERY);
+ CPPUNIT_ASSERT(xMark.is());
+ CPPUNIT_ASSERT_EQUAL(OUString("Hello world"), xMark->getAnchor()->getString());
+ }
+}
+
DECLARE_OOXMLEXPORT_TEST(testTdf121374_sectionHF, "tdf121374_sectionHF.odt")
{
uno::Reference<beans::XPropertySet> xPageStyle(getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY);
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx
index 87795d6ba6c6..696e9c4ee3bd 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport5.cxx
@@ -1140,11 +1140,11 @@ DECLARE_OOXMLEXPORT_TEST(tdf122201_editUnprotectedText, "tdf122201_editUnprotect
// check protected area
SwPaM aPaMPortected(aDocStart);
- CPPUNIT_ASSERT(aPaMPortected.HasReadonlySel(false));
+ CPPUNIT_ASSERT(aPaMPortected.HasReadonlySel(false, false));
// check unprotected area
SwPaM aPaMUnprotected(aDocEnd);
- CPPUNIT_ASSERT(!aPaMUnprotected.HasReadonlySel(false));
+ CPPUNIT_ASSERT(!aPaMUnprotected.HasReadonlySel(false, false));
}
DECLARE_OOXMLEXPORT_TEST(testSectionHeader, "sectionprot.odt")
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport8.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport8.cxx
index fbe8d9d01421..2647b12bcde5 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport8.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport8.cxx
@@ -1019,11 +1019,13 @@ DECLARE_OOXMLEXPORT_TEST(testN820509, "n820509.docx")
CPPUNIT_ASSERT_EQUAL(OUString("M.d.yyyy"), sDateFormat);
}
+#if 0
DECLARE_OOXMLEXPORT_TEST(testN830205, "n830205.docx")
{
// Previously import just crashed (due to infinite recursion).
getParagraph(1, "XXX");
}
+#endif
DECLARE_OOXMLEXPORT_TEST(tdf123705, "tdf123705.docx")
{
diff --git a/sw/qa/extras/uiwriter/data/FrameInHiddenSection.fodt b/sw/qa/extras/uiwriter/data/FrameInHiddenSection.fodt
new file mode 100644
index 000000000000..2095c7173046
--- /dev/null
+++ b/sw/qa/extras/uiwriter/data/FrameInHiddenSection.fodt
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:body>
+ <office:text>
+ <text:section text:name="Section1">
+ <text:section text:name="Section2Hidden" text:display="none">
+ <text:p><draw:frame text:anchor-type="paragraph" svg:x="1cm" svg:y="1cm" svg:width="1cm">
+ <draw:text-box/>
+ </draw:frame>lorem</text:p>
+ </text:section>
+ <text:section text:name="Section3"/>
+ <text:section text:name="Section4"/>
+ <text:section text:name="Section5">
+ <text:p>ipsum</text:p>
+ </text:section>
+ </text:section>
+ </office:text>
+ </office:body>
+</office:document> \ No newline at end of file
diff --git a/sw/qa/extras/uiwriter/data/demo91.fodt b/sw/qa/extras/uiwriter/data/demo91.fodt
new file mode 100644
index 000000000000..de27c587a35d
--- /dev/null
+++ b/sw/qa/extras/uiwriter/data/demo91.fodt
@@ -0,0 +1,156 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<office:document xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:meta><meta:creation-date>2022-06-16T15:27:43.487415219</meta:creation-date><meta:editing-duration>PT29M</meta:editing-duration><meta:editing-cycles>32</meta:editing-cycles><meta:generator>LibreOfficeDev/7.6.0.0.alpha0$Linux_X86_64 LibreOffice_project/fc6bd4f18ea90f789a1425e2c830f4b42457012e</meta:generator><dc:date>2022-06-22T20:18:58.711000000</dc:date><meta:document-statistic meta:table-count="0" meta:image-count="0" meta:object-count="0" meta:page-count="1" meta:paragraph-count="5" meta:word-count="11" meta:character-count="52" meta:non-whitespace-character-count="44"/></office:meta>
+ <office:font-face-decls>
+ <style:font-face style:name="Arial Unicode MS1" svg:font-family="'Arial Unicode MS'" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="Liberation Serif" svg:font-family="'Liberation Serif'" style:font-family-generic="roman" style:font-pitch="variable"/>
+ <style:font-face style:name="Songti SC" svg:font-family="'Songti SC'" style:font-family-generic="system" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+ <style:default-style style:family="graphic">
+ <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:writing-mode="lr-tb" style:flow-with-text="false"/>
+ <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:font-independent-line-spacing="false">
+ <style:tab-stops/>
+ </style:paragraph-properties>
+ <style:text-properties style:use-window-font-color="true" loext:opacity="0%" loext:color-lum-mod="100%" loext:color-lum-off="0%" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="nl" fo:country="NL" style:letter-kerning="true" style:font-name-asian="Songti SC" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Arial Unicode MS1" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/>
+ </style:default-style>
+ <style:default-style style:family="paragraph">
+ <style:paragraph-properties fo:orphans="2" fo:widows="2" fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.251cm" style:writing-mode="page"/>
+ <style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="nl" fo:country="NL" style:letter-kerning="true" style:font-name-asian="Songti SC" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Arial Unicode MS1" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" loext:hyphenation-no-caps="false" loext:hyphenation-no-last-word="false" loext:hyphenation-word-char-count="5" loext:hyphenation-zone="no-limit"/>
+ </style:default-style>
+ <style:default-style style:family="table">
+ <style:table-properties table:border-model="collapsing"/>
+ </style:default-style>
+ <style:default-style style:family="table-row">
+ <style:table-row-properties fo:keep-together="auto"/>
+ </style:default-style>
+ <style:style style:name="Standard" style:family="paragraph" style:class="text"/>
+ <style:style style:name="Text_20_body" style:display-name="Text body" style:family="paragraph" style:parent-style-name="Standard" style:class="text">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.247cm" style:contextual-spacing="false" fo:line-height="115%"/>
+ </style:style>
+ <style:style style:name="_5f__5f_XXX_5f__5f__5f_invalid" style:display-name="__XXX___invalid" style:family="text"/>
+ <style:style style:name="Line_20_numbering" style:display-name="Line numbering" style:family="text"/>
+ <text:outline-style style:name="Outline">
+ <text:outline-level-style text:level="1" text:style-name="_5f__5f_XXX_5f__5f__5f_invalid" loext:num-list-format="%1%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="2" text:style-name="_5f__5f_XXX_5f__5f__5f_invalid" loext:num-list-format="%2%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="3" text:style-name="_5f__5f_XXX_5f__5f__5f_invalid" loext:num-list-format="%3%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="4" text:style-name="_5f__5f_XXX_5f__5f__5f_invalid" loext:num-list-format="%4%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="5" text:style-name="_5f__5f_XXX_5f__5f__5f_invalid" loext:num-list-format="%5%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="6" text:style-name="_5f__5f_XXX_5f__5f__5f_invalid" loext:num-list-format="%6%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="7" text:style-name="_5f__5f_XXX_5f__5f__5f_invalid" loext:num-list-format="%7%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="8" text:style-name="_5f__5f_XXX_5f__5f__5f_invalid" loext:num-list-format="%8%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="9" text:style-name="_5f__5f_XXX_5f__5f__5f_invalid" loext:num-list-format="%9%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="10" text:style-name="_5f__5f_XXX_5f__5f__5f_invalid" loext:num-list-format="%10%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ </text:outline-style>
+ <text:notes-configuration text:note-class="footnote" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/>
+ <text:notes-configuration text:note-class="endnote" style:num-format="i" text:start-value="0"/>
+ <text:linenumbering-configuration text:style-name="Line_20_numbering" text:number-lines="false" text:offset="0.499cm" style:num-format="1" text:number-position="left" text:increment="5"/>
+ </office:styles>
+ <office:automatic-styles>
+ <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Standard">
+ <style:text-properties/>
+ </style:style>
+ <style:style style:name="P4" style:family="paragraph" style:parent-style-name="Text_20_body">
+ <style:text-properties fo:background-color="#ffff00"/>
+ </style:style>
+ <style:style style:name="P6" style:family="paragraph">
+ <loext:graphic-properties draw:fill-color="#fc5c00"/>
+ </style:style>
+ <style:style style:name="P7" style:family="paragraph">
+ <loext:graphic-properties draw:fill-color="#ffd74c"/>
+ </style:style>
+ <style:style style:name="T3" style:family="text">
+ <style:text-properties/>
+ </style:style>
+ <style:style style:name="T4" style:family="text">
+ <style:text-properties/>
+ </style:style>
+ <style:style style:name="gr1" style:family="graphic">
+ <style:graphic-properties draw:textarea-horizontal-align="justify" draw:textarea-vertical-align="middle" draw:auto-grow-height="false" fo:min-height="2.335cm" fo:min-width="3.805cm" style:run-through="foreground" style:wrap="run-through" style:number-wrapped-paragraphs="no-limit" style:vertical-pos="from-top" style:vertical-rel="paragraph" style:horizontal-pos="from-left" style:horizontal-rel="paragraph" draw:wrap-influence-on-position="once-concurrent" loext:allow-overlap="true" style:flow-with-text="false"/>
+ </style:style>
+ <style:style style:name="gr2" style:family="graphic">
+ <style:graphic-properties draw:fill-color="#fc5c00" draw:textarea-horizontal-align="justify" draw:textarea-vertical-align="middle" draw:auto-grow-height="false" fo:min-height="2.335cm" fo:min-width="3.805cm" style:run-through="foreground" style:wrap="run-through" style:number-wrapped-paragraphs="no-limit" style:vertical-pos="from-top" style:vertical-rel="paragraph" style:horizontal-pos="from-left" style:horizontal-rel="paragraph" draw:wrap-influence-on-position="once-concurrent" loext:allow-overlap="true" style:flow-with-text="false"/>
+ </style:style>
+ <style:style style:name="gr3" style:family="graphic">
+ <style:graphic-properties draw:fill-color="#ffd74c" draw:textarea-horizontal-align="justify" draw:textarea-vertical-align="middle" draw:auto-grow-height="false" fo:min-height="2.335cm" fo:min-width="3.805cm" style:run-through="foreground" style:wrap="run-through" style:number-wrapped-paragraphs="no-limit" style:vertical-pos="from-top" style:vertical-rel="paragraph" style:horizontal-pos="from-left" style:horizontal-rel="paragraph" draw:wrap-influence-on-position="once-concurrent" loext:allow-overlap="true" style:flow-with-text="false"/>
+ </style:style>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="20" style:layout-grid-base-height="0.706cm" style:layout-grid-ruby-height="0.353cm" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="false" style:layout-grid-display="false" style:footnote-max-height="0cm" loext:margin-gutter="0cm">
+ <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style/>
+ </style:page-layout>
+ <style:style style:name="dp1" style:family="drawing-page">
+ <style:drawing-page-properties draw:background-size="full"/>
+ </style:style>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:page-layout-name="pm1" draw:style-name="dp1"/>
+ </office:master-styles>
+ <office:body>
+ <office:text>
+ <text:sequence-decls>
+ <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Table"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Text"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Figure"/>
+ </text:sequence-decls>
+ <text:p text:style-name="P1"/>
+ <text:p text:style-name="P4"><draw:custom-shape text:anchor-type="paragraph" draw:z-index="0" draw:name="Shape 2" draw:style-name="gr3" draw:text-style-name="P7" svg:width="3.805cm" svg:height="2.336cm" svg:x="7.482cm" svg:y="4.052cm">
+ <text:p/>
+ <draw:enhanced-geometry svg:viewBox="0 0 21600 21600" draw:type="rectangle" draw:enhanced-path="M 0 0 L 21600 0 21600 21600 0 21600 0 0 Z N"/>
+ </draw:custom-shape><draw:custom-shape text:anchor-type="char" draw:z-index="1" draw:name="Shape 3" draw:style-name="gr2" draw:text-style-name="P6" svg:width="3.805cm" svg:height="2.336cm" svg:x="11.382cm" svg:y="4.062cm">
+ <text:p/>
+ <draw:enhanced-geometry svg:viewBox="0 0 21600 21600" draw:type="rectangle" draw:enhanced-path="M 0 0 L 21600 0 21600 21600 0 21600 0 0 Z N"/>
+ </draw:custom-shape><text:span text:style-name="T4">yellow</text:span><draw:custom-shape text:anchor-type="char" draw:z-index="2" draw:name="Shape 4" draw:style-name="gr1" svg:width="3.805cm" svg:height="2.336cm" svg:x="3.554cm" svg:y="4.041cm">
+ <text:p/>
+ <draw:enhanced-geometry svg:viewBox="0 0 21600 21600" draw:type="rectangle" draw:enhanced-path="M 0 0 L 21600 0 21600 21600 0 21600 0 0 Z N"/>
+ </draw:custom-shape> <text:span text:style-name="T4">at end</text:span><text:span text:style-name="T3">orange</text:span><draw:custom-shape text:anchor-type="char" draw:z-index="4" draw:name="Shape 4" draw:style-name="gr2" draw:text-style-name="P6" svg:width="3.805cm" svg:height="2.336cm" svg:x="15.187cm" svg:y="4.062cm">
+ <text:p/>
+ <draw:enhanced-geometry svg:viewBox="0 0 21600 21600" draw:type="rectangle" draw:enhanced-path="M 0 0 L 21600 0 21600 21600 0 21600 0 0 Z N"/>
+ </draw:custom-shape></text:p>
+ </office:text>
+ </office:body>
+</office:document>
diff --git a/sw/qa/extras/uiwriter/data/hiddenSectionsAroundPageBreak.fodt b/sw/qa/extras/uiwriter/data/hiddenSectionsAroundPageBreak.fodt
new file mode 100644
index 000000000000..12761847ed75
--- /dev/null
+++ b/sw/qa/extras/uiwriter/data/hiddenSectionsAroundPageBreak.fodt
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:automatic-styles>
+ <style:style style:name="P1" style:family="paragraph" style:master-page-name="Landscape">
+ <style:paragraph-properties style:page-number="auto" fo:break-before="page"/>
+ </style:style>
+ </office:automatic-styles>
+ <office:body>
+ <office:text>
+ <text:section text:name="Section 1" text:display="none"/>
+ <text:section text:name="Section 2">
+ <text:p text:style-name="P1">A paragraph with a page-break-before</text:p>
+ </text:section>
+ <text:section text:name="Section 3" text:display="none"/>
+ <text:section text:name="Section 4">
+ <text:p>Lorem</text:p>
+ </text:section>
+ </office:text>
+ </office:body>
+</office:document> \ No newline at end of file
diff --git a/sw/qa/extras/uiwriter/data/pagebreak-source.fodt b/sw/qa/extras/uiwriter/data/pagebreak-source.fodt
new file mode 100644
index 000000000000..cb72fea62a85
--- /dev/null
+++ b/sw/qa/extras/uiwriter/data/pagebreak-source.fodt
@@ -0,0 +1,131 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<office:document xmlns:officeooo="http://openoffice.org/2009/office" xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:ooo="http://openoffice.org/2004/office" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" office:version="1.2" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:meta><meta:creation-date>2024-03-05T16:51:41.526594818</meta:creation-date><dc:date>2024-03-05T17:24:50.151189313</dc:date><meta:editing-duration>PT24M14S</meta:editing-duration><meta:editing-cycles>5</meta:editing-cycles><meta:generator>CIB_OfficeDev/6.4.0.24$Linux_X86_64 LibreOffice_project/2b8ce275a2d1aae9319dfc266e677412b611101d</meta:generator><meta:document-statistic meta:table-count="0" meta:image-count="0" meta:object-count="0" meta:page-count="1" meta:paragraph-count="0" meta:word-count="0" meta:character-count="0" meta:non-whitespace-character-count="0"/></office:meta>
+ <office:font-face-decls>
+ <style:font-face style:name="Liberation Serif" svg:font-family="'Liberation Serif'" style:font-family-generic="roman" style:font-pitch="variable"/>
+ <style:font-face style:name="Noto Sans Devanagari" svg:font-family="'Noto Sans Devanagari'" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="Noto Serif CJK SC" svg:font-family="'Noto Serif CJK SC'" style:font-family-generic="system" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+ <style:default-style style:family="graphic">
+ <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:flow-with-text="false"/>
+ <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:font-independent-line-spacing="false">
+ <style:tab-stops/>
+ </style:paragraph-properties>
+ <style:text-properties style:use-window-font-color="true" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="de" fo:country="DE" style:letter-kerning="true" style:font-name-asian="Noto Serif CJK SC" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Noto Sans Devanagari" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/>
+ </style:default-style>
+ <style:default-style style:family="paragraph">
+ <style:paragraph-properties fo:orphans="2" fo:widows="2" fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.251cm" style:writing-mode="page"/>
+ <style:text-properties style:use-window-font-color="true" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="de" fo:country="DE" style:letter-kerning="true" style:font-name-asian="Noto Serif CJK SC" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Noto Sans Devanagari" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" loext:hyphenation-no-caps="false"/>
+ </style:default-style>
+ <style:default-style style:family="table">
+ <style:table-properties table:border-model="collapsing"/>
+ </style:default-style>
+ <style:default-style style:family="table-row">
+ <style:table-row-properties fo:keep-together="auto"/>
+ </style:default-style>
+ <style:style style:name="Standard" style:family="paragraph" style:class="text"/>
+ <text:outline-style style:name="Outline">
+ <text:outline-level-style text:level="1" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="2" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="3" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="4" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="5" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="6" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="7" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="8" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="9" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="10" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ </text:outline-style>
+ <text:notes-configuration text:note-class="footnote" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/>
+ <text:notes-configuration text:note-class="endnote" style:num-format="i" text:start-value="0"/>
+ <text:linenumbering-configuration text:number-lines="false" text:offset="0.499cm" style:num-format="1" text:number-position="left" text:increment="5"/>
+ </office:styles>
+ <office:automatic-styles>
+ <style:style style:name="P2" style:family="paragraph" style:parent-style-name="Standard">
+ <style:text-properties/>
+ </style:style>
+ <style:style style:name="P3" style:family="paragraph" style:parent-style-name="Standard" style:master-page-name="WithMargin">
+ <style:paragraph-properties style:page-number="auto"/>
+ </style:style>
+ <style:style style:name="Sect1" style:family="section">
+ <style:section-properties fo:background-color="transparent" style:editable="false">
+ <style:columns fo:column-count="1" fo:column-gap="0cm"/>
+ <style:background-image/>
+ </style:section-properties>
+ </style:style>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="20" style:layout-grid-base-height="0.706cm" style:layout-grid-ruby-height="0.353cm" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="false" style:layout-grid-display="false" style:footnote-max-height="0cm">
+ <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style/>
+ </style:page-layout>
+ <style:page-layout style:name="pm2">
+ <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="10cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="20" style:layout-grid-base-height="0.706cm" style:layout-grid-ruby-height="0.353cm" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="false" style:layout-grid-display="false" style:footnote-max-height="0cm">
+ <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style/>
+ </style:page-layout>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:page-layout-name="pm1"/>
+ <style:master-page style:name="WithMargin" style:page-layout-name="pm2"/>
+ </office:master-styles>
+ <office:body>
+ <office:text>
+ <text:sequence-decls>
+ <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Table"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Text"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Figure"/>
+ </text:sequence-decls>
+ <text:section text:style-name="Sect1" text:name="SourceSection">
+ <text:p text:style-name="P3"><text:hidden-paragraph text:condition="ooow:TRUE" text:is-hidden="true"/></text:p>
+ <text:p text:style-name="P2"/>
+ </text:section>
+ </office:text>
+ </office:body>
+</office:document>
diff --git a/sw/qa/extras/uiwriter/data/pagebreak-target.fodt b/sw/qa/extras/uiwriter/data/pagebreak-target.fodt
new file mode 100644
index 000000000000..1219cdd95e25
--- /dev/null
+++ b/sw/qa/extras/uiwriter/data/pagebreak-target.fodt
@@ -0,0 +1,137 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<office:document xmlns:officeooo="http://openoffice.org/2009/office" xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:ooo="http://openoffice.org/2004/office" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" office:version="1.2" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:meta><meta:creation-date>2024-03-05T16:57:01.179149401</meta:creation-date><dc:date>2024-03-05T16:58:35.972978544</dc:date><meta:editing-duration>PT1M35S</meta:editing-duration><meta:editing-cycles>2</meta:editing-cycles><meta:generator>CIB_OfficeDev/6.4.0.24$Linux_X86_64 LibreOffice_project/2b8ce275a2d1aae9319dfc266e677412b611101d</meta:generator><meta:document-statistic meta:table-count="0" meta:image-count="0" meta:object-count="0" meta:page-count="1" meta:paragraph-count="0" meta:word-count="0" meta:character-count="0" meta:non-whitespace-character-count="0"/></office:meta>
+ <office:font-face-decls>
+ <style:font-face style:name="Liberation Serif" svg:font-family="'Liberation Serif'" style:font-family-generic="roman" style:font-pitch="variable"/>
+ <style:font-face style:name="Noto Sans Devanagari" svg:font-family="'Noto Sans Devanagari'" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="Noto Serif CJK SC" svg:font-family="'Noto Serif CJK SC'" style:font-family-generic="system" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+ <style:default-style style:family="graphic">
+ <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:flow-with-text="false"/>
+ <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:writing-mode="lr-tb" style:font-independent-line-spacing="false">
+ <style:tab-stops/>
+ </style:paragraph-properties>
+ <style:text-properties style:use-window-font-color="true" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="de" fo:country="DE" style:letter-kerning="true" style:font-name-asian="Noto Serif CJK SC" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Noto Sans Devanagari" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/>
+ </style:default-style>
+ <style:default-style style:family="paragraph">
+ <style:paragraph-properties fo:orphans="2" fo:widows="2" fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.251cm" style:writing-mode="page"/>
+ <style:text-properties style:use-window-font-color="true" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="de" fo:country="DE" style:letter-kerning="true" style:font-name-asian="Noto Serif CJK SC" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Noto Sans Devanagari" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" loext:hyphenation-no-caps="false"/>
+ </style:default-style>
+ <style:default-style style:family="table">
+ <style:table-properties table:border-model="collapsing"/>
+ </style:default-style>
+ <style:default-style style:family="table-row">
+ <style:table-row-properties fo:keep-together="auto"/>
+ </style:default-style>
+ <style:style style:name="Standard" style:family="paragraph" style:class="text"/>
+ <style:style style:name="Frame_20_contents" style:display-name="Frame contents" style:family="paragraph" style:parent-style-name="Standard" style:class="extra"/>
+ <style:style style:name="Frame" style:family="graphic">
+ <style:graphic-properties text:anchor-type="paragraph" svg:x="0cm" svg:y="0cm" fo:margin-left="0.201cm" fo:margin-right="0.201cm" fo:margin-top="0.201cm" fo:margin-bottom="0.201cm" style:wrap="parallel" style:number-wrapped-paragraphs="no-limit" style:wrap-contour="false" style:vertical-pos="top" style:vertical-rel="paragraph-content" style:horizontal-pos="center" style:horizontal-rel="paragraph-content" fo:padding="0.15cm" fo:border="0.06pt solid #000000"/>
+ </style:style>
+ <text:outline-style style:name="Outline">
+ <text:outline-level-style text:level="1" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="2" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="3" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="4" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="5" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="6" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="7" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="8" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="9" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="10" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ </text:outline-style>
+ <text:notes-configuration text:note-class="footnote" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/>
+ <text:notes-configuration text:note-class="endnote" style:num-format="i" text:start-value="0"/>
+ <text:linenumbering-configuration text:number-lines="false" text:offset="0.499cm" style:num-format="1" text:number-position="left" text:increment="5"/>
+ </office:styles>
+ <office:automatic-styles>
+ <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Standard" style:master-page-name="WithMargin">
+ <style:paragraph-properties style:page-number="auto"/>
+ </style:style>
+ <style:style style:name="fr1" style:family="graphic" style:parent-style-name="Frame">
+ <style:graphic-properties style:vertical-pos="top" style:vertical-rel="page-content" style:horizontal-pos="center" style:horizontal-rel="page"/>
+ </style:style>
+ <style:style style:name="Sect1" style:family="section">
+ <style:section-properties style:editable="false">
+ <style:columns fo:column-count="1" fo:column-gap="0cm"/>
+ </style:section-properties>
+ </style:style>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
+ <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style/>
+ </style:page-layout>
+ <style:page-layout style:name="pm2">
+ <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="10cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
+ <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style/>
+ </style:page-layout>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:page-layout-name="pm1"/>
+ <style:master-page style:name="WithMargin" style:page-layout-name="pm2"/>
+ </office:master-styles>
+ <office:body>
+ <office:text>
+ <text:sequence-decls>
+ <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Table"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Text"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Figure"/>
+ </text:sequence-decls><draw:frame draw:style-name="fr1" draw:name="Frame1" text:anchor-type="page" text:anchor-page-number="1" svg:width="2cm" draw:z-index="0">
+ <draw:text-box fo:min-height="0.499cm">
+ <text:p text:style-name="Frame_20_contents"/>
+ </draw:text-box>
+ </draw:frame>
+ <text:section text:style-name="Sect1" text:name="TargetSection">
+ <text:p text:style-name="P1"/>
+ </text:section>
+ </office:text>
+ </office:body>
+</office:document>
diff --git a/sw/qa/extras/uiwriter/data/table-at-end-of-cell.fodt b/sw/qa/extras/uiwriter/data/table-at-end-of-cell.fodt
new file mode 100644
index 000000000000..4e18f7dc2ce4
--- /dev/null
+++ b/sw/qa/extras/uiwriter/data/table-at-end-of-cell.fodt
@@ -0,0 +1,219 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<office:document xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:meta><meta:creation-date>2023-06-15T12:29:51.722401974</meta:creation-date><dc:date>2023-06-15T12:30:57.494419372</dc:date><meta:editing-duration>PT1M13S</meta:editing-duration><meta:editing-cycles>1</meta:editing-cycles><meta:document-statistic meta:table-count="2" meta:image-count="0" meta:object-count="0" meta:page-count="1" meta:paragraph-count="0" meta:word-count="0" meta:character-count="0" meta:non-whitespace-character-count="0"/><meta:generator>LibreOfficeDev/7.6.0.0.alpha0$Linux_X86_64 LibreOffice_project/2e5dbe93649ec8043e9da75ddc01c486dbbf18e0</meta:generator></office:meta>
+ <office:font-face-decls>
+ <style:font-face style:name="Liberation Serif" svg:font-family="'Liberation Serif'" style:font-family-generic="roman" style:font-pitch="variable"/>
+ <style:font-face style:name="Lohit Devanagari1" svg:font-family="'Lohit Devanagari'" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="Noto Sans CJK SC" svg:font-family="'Noto Sans CJK SC'" style:font-family-generic="system" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+ <style:default-style style:family="graphic">
+ <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:flow-with-text="false"/>
+ <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" loext:tab-stop-distance="0cm" style:writing-mode="lr-tb" style:font-independent-line-spacing="false">
+ <style:tab-stops/>
+ </style:paragraph-properties>
+ <style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="de" fo:country="DE" style:letter-kerning="true" style:font-name-asian="Noto Sans CJK SC" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lohit Devanagari1" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/>
+ </style:default-style>
+ <style:default-style style:family="paragraph">
+ <style:paragraph-properties fo:orphans="2" fo:widows="2" fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.251cm" style:writing-mode="page"/>
+ <style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="de" fo:country="DE" style:letter-kerning="true" style:font-name-asian="Noto Sans CJK SC" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lohit Devanagari1" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" loext:hyphenation-no-caps="false" loext:hyphenation-no-last-word="false" loext:hyphenation-word-char-count="5" loext:hyphenation-zone="no-limit"/>
+ </style:default-style>
+ <style:default-style style:family="table">
+ <style:table-properties table:border-model="collapsing"/>
+ </style:default-style>
+ <style:default-style style:family="table-row">
+ <style:table-row-properties fo:keep-together="auto"/>
+ </style:default-style>
+ <style:style style:name="Standard" style:family="paragraph" style:class="text"/>
+ <style:style style:name="Table_20_Contents" style:display-name="Table Contents" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
+ <style:paragraph-properties fo:orphans="0" fo:widows="0" text:number-lines="false" text:line-number="0"/>
+ </style:style>
+ <text:outline-style style:name="Outline">
+ <text:outline-level-style text:level="1" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="2" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="3" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="4" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="5" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="6" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="7" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="8" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="9" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="10" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ </text:outline-style>
+ <text:notes-configuration text:note-class="footnote" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/>
+ <text:notes-configuration text:note-class="endnote" style:num-format="i" text:start-value="0"/>
+ <text:linenumbering-configuration text:number-lines="false" text:offset="0.499cm" style:num-format="1" text:number-position="left" text:increment="5"/>
+ <loext:theme loext:name="Office Theme">
+ <loext:color-table loext:name="LibreOffice">
+ <loext:color loext:name="dk1" loext:color="#000000"/>
+ <loext:color loext:name="lt1" loext:color="#ffffff"/>
+ <loext:color loext:name="dk2" loext:color="#000000"/>
+ <loext:color loext:name="lt2" loext:color="#ffffff"/>
+ <loext:color loext:name="accent1" loext:color="#18a303"/>
+ <loext:color loext:name="accent2" loext:color="#0369a3"/>
+ <loext:color loext:name="accent3" loext:color="#a33e03"/>
+ <loext:color loext:name="accent4" loext:color="#8e03a3"/>
+ <loext:color loext:name="accent5" loext:color="#c99c00"/>
+ <loext:color loext:name="accent6" loext:color="#c9211e"/>
+ <loext:color loext:name="hlink" loext:color="#0000ee"/>
+ <loext:color loext:name="folHlink" loext:color="#551a8b"/>
+ </loext:color-table>
+ </loext:theme>
+ </office:styles>
+ <office:automatic-styles>
+ <style:style style:name="Table1" style:family="table">
+ <style:table-properties style:width="17cm" table:align="margins"/>
+ </style:style>
+ <style:style style:name="Table1.A" style:family="table-column">
+ <style:table-column-properties style:column-width="8.5cm" style:rel-column-width="32767*"/>
+ </style:style>
+ <style:style style:name="Table1.A1" style:family="table-cell">
+ <style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.5pt solid #000000" fo:border-right="none" fo:border-top="0.5pt solid #000000" fo:border-bottom="0.5pt solid #000000"/>
+ </style:style>
+ <style:style style:name="Table1.B1" style:family="table-cell">
+ <style:table-cell-properties fo:padding="0.097cm" fo:border="0.5pt solid #000000"/>
+ </style:style>
+ <style:style style:name="Table1.A2" style:family="table-cell">
+ <style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.5pt solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.5pt solid #000000"/>
+ </style:style>
+ <style:style style:name="Table1.B2" style:family="table-cell">
+ <style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.5pt solid #000000" fo:border-right="0.5pt solid #000000" fo:border-top="none" fo:border-bottom="0.5pt solid #000000"/>
+ </style:style>
+ <style:style style:name="Table2" style:family="table">
+ <style:table-properties style:width="8.306cm" table:align="margins"/>
+ </style:style>
+ <style:style style:name="Table2.A" style:family="table-column">
+ <style:table-column-properties style:column-width="4.154cm" style:rel-column-width="32767*"/>
+ </style:style>
+ <style:style style:name="Table2.A1" style:family="table-cell">
+ <style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.5pt solid #000000" fo:border-right="none" fo:border-top="0.5pt solid #000000" fo:border-bottom="0.5pt solid #000000"/>
+ </style:style>
+ <style:style style:name="Table2.B1" style:family="table-cell">
+ <style:table-cell-properties fo:padding="0.097cm" fo:border="0.5pt solid #000000"/>
+ </style:style>
+ <style:style style:name="Table2.A2" style:family="table-cell">
+ <style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.5pt solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.5pt solid #000000"/>
+ </style:style>
+ <style:style style:name="Table2.B2" style:family="table-cell">
+ <style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.5pt solid #000000" fo:border-right="0.5pt solid #000000" fo:border-top="none" fo:border-bottom="0.5pt solid #000000"/>
+ </style:style>
+ <style:style style:name="Table2" style:family="table">
+ <style:table-properties style:width="8.306cm" table:align="margins"/>
+ </style:style>
+ <style:style style:name="Table2.A" style:family="table-column">
+ <style:table-column-properties style:column-width="4.154cm" style:rel-column-width="32767*"/>
+ </style:style>
+ <style:style style:name="Table2.A1" style:family="table-cell">
+ <style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.5pt solid #000000" fo:border-right="none" fo:border-top="0.5pt solid #000000" fo:border-bottom="0.5pt solid #000000"/>
+ </style:style>
+ <style:style style:name="Table2.B1" style:family="table-cell">
+ <style:table-cell-properties fo:padding="0.097cm" fo:border="0.5pt solid #000000"/>
+ </style:style>
+ <style:style style:name="Table2.A2" style:family="table-cell">
+ <style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.5pt solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.5pt solid #000000"/>
+ </style:style>
+ <style:style style:name="Table2.B2" style:family="table-cell">
+ <style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.5pt solid #000000" fo:border-right="0.5pt solid #000000" fo:border-top="none" fo:border-bottom="0.5pt solid #000000"/>
+ </style:style>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm" loext:margin-gutter="0cm">
+ <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style/>
+ </style:page-layout>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:page-layout-name="pm1"/>
+ </office:master-styles>
+ <office:body>
+ <office:text>
+ <text:sequence-decls>
+ <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Table"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Text"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Figure"/>
+ </text:sequence-decls>
+ <table:table table:name="Table1" table:style-name="Table1">
+ <table:table-column table:style-name="Table1.A" table:number-columns-repeated="2"/>
+ <table:table-row>
+ <table:table-cell table:style-name="Table1.A1" office:value-type="string">
+ <text:p text:style-name="Table_20_Contents"/>
+ </table:table-cell>
+ <table:table-cell table:style-name="Table1.B1" office:value-type="string">
+ <text:p text:style-name="Table_20_Contents"/>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row>
+ <table:table-cell table:style-name="Table1.A2" office:value-type="string">
+ <text:p text:style-name="Table_20_Contents"/>
+ </table:table-cell>
+ <table:table-cell table:style-name="Table1.B2" office:value-type="string">
+ <text:p text:style-name="Standard"/>
+ <table:table table:name="Table2" table:style-name="Table2">
+ <table:table-column table:style-name="Table2.A" table:number-columns-repeated="2"/>
+ <table:table-row>
+ <table:table-cell table:style-name="Table2.A1" office:value-type="string">
+ <text:p text:style-name="Table_20_Contents"/>
+ </table:table-cell>
+ <table:table-cell table:style-name="Table2.B1" office:value-type="string">
+ <text:p text:style-name="Table_20_Contents"/>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row>
+ <table:table-cell table:style-name="Table2.A2" office:value-type="string">
+ <text:p text:style-name="Table_20_Contents"/>
+ </table:table-cell>
+ <table:table-cell table:style-name="Table2.B2" office:value-type="string">
+ <text:p text:style-name="Table_20_Contents"/>
+ </table:table-cell>
+ </table:table-row>
+ </table:table>
+ </table:table-cell>
+ </table:table-row>
+ </table:table>
+ <text:p text:style-name="Standard"/>
+ </office:text>
+ </office:body>
+</office:document> \ No newline at end of file
diff --git a/sw/qa/extras/uiwriter/data/tdf114973.fodt b/sw/qa/extras/uiwriter/data/tdf114973.fodt
new file mode 100644
index 000000000000..8638cbbb6b4a
--- /dev/null
+++ b/sw/qa/extras/uiwriter/data/tdf114973.fodt
@@ -0,0 +1,144 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<office:document xmlns:officeooo="http://openoffice.org/2009/office" xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:ooo="http://openoffice.org/2004/office" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" office:version="1.2" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:font-face-decls>
+ <style:font-face style:name="Arial" svg:font-family="Arial" style:font-family-generic="swiss"/>
+ <style:font-face style:name="Lucida Sans" svg:font-family="'Lucida Sans'" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="NSimSun" svg:font-family="NSimSun" style:font-family-generic="system" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+ <style:default-style style:family="graphic">
+ <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:flow-with-text="false"/>
+ <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:font-independent-line-spacing="false">
+ <style:tab-stops/>
+ </style:paragraph-properties>
+ <style:text-properties style:use-window-font-color="true" style:font-name="Arial" fo:font-size="12pt" fo:language="de" fo:country="DE" style:letter-kerning="true" style:font-name-asian="NSimSun" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lucida Sans" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/>
+ </style:default-style>
+ <style:default-style style:family="paragraph">
+ <style:paragraph-properties fo:orphans="2" fo:widows="2" fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.251cm" style:writing-mode="page"/>
+ <style:text-properties style:use-window-font-color="true" style:font-name="Arial" fo:font-size="12pt" fo:language="de" fo:country="DE" style:letter-kerning="true" style:font-name-asian="NSimSun" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lucida Sans" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" loext:hyphenation-no-caps="false"/>
+ </style:default-style>
+ <style:default-style style:family="table">
+ <style:table-properties table:border-model="collapsing"/>
+ </style:default-style>
+ <style:default-style style:family="table-row">
+ <style:table-row-properties fo:keep-together="auto"/>
+ </style:default-style>
+ <style:style style:name="Standard" style:family="paragraph" style:class="text"/>
+ <style:style style:name="Header_20_and_20_Footer" style:display-name="Header and Footer" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
+ <style:paragraph-properties text:number-lines="false" text:line-number="0">
+ <style:tab-stops>
+ <style:tab-stop style:position="8.5cm" style:type="center"/>
+ <style:tab-stop style:position="17cm" style:type="right"/>
+ </style:tab-stops>
+ </style:paragraph-properties>
+ </style:style>
+ <style:style style:name="Header" style:family="paragraph" style:parent-style-name="Header_20_and_20_Footer" style:class="extra">
+ <style:paragraph-properties text:number-lines="false" text:line-number="0">
+ <style:tab-stops>
+ <style:tab-stop style:position="8.5cm" style:type="center"/>
+ <style:tab-stop style:position="17cm" style:type="right"/>
+ </style:tab-stops>
+ </style:paragraph-properties>
+ </style:style>
+ <style:style style:name="Footer" style:family="paragraph" style:parent-style-name="Header_20_and_20_Footer" style:class="extra">
+ <style:paragraph-properties text:number-lines="false" text:line-number="0">
+ <style:tab-stops>
+ <style:tab-stop style:position="8.5cm" style:type="center"/>
+ <style:tab-stop style:position="17cm" style:type="right"/>
+ </style:tab-stops>
+ </style:paragraph-properties>
+ </style:style>
+ <text:outline-style style:name="Outline">
+ <text:outline-level-style text:level="1" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="2" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="3" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="4" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="5" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="6" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="7" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="8" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="9" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="10" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ </text:outline-style>
+ <text:notes-configuration text:note-class="footnote" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/>
+ <text:notes-configuration text:note-class="endnote" style:num-format="i" text:start-value="0"/>
+ <text:linenumbering-configuration text:number-lines="false" text:offset="0.499cm" style:num-format="1" text:number-position="left" text:increment="5"/>
+ </office:styles>
+ <office:automatic-styles>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="20" style:layout-grid-base-height="0.706cm" style:layout-grid-ruby-height="0.353cm" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="false" style:layout-grid-display="false" style:footnote-max-height="0cm">
+ <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style>
+ <style:header-footer-properties fo:min-height="0.998cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-bottom="0.499cm" fo:background-color="transparent" style:dynamic-spacing="false" draw:fill="none" draw:fill-color="#729fcf"/>
+ </style:header-style>
+ <style:footer-style>
+ <style:header-footer-properties fo:min-height="0.998cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.499cm" fo:background-color="transparent" style:dynamic-spacing="false" draw:fill="none" draw:fill-color="#729fcf"/>
+ </style:footer-style>
+ </style:page-layout>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:page-layout-name="pm1">
+ <style:header>
+ <text:p text:style-name="Header">Header</text:p>
+ </style:header>
+ <style:footer>
+ <text:p text:style-name="Footer">Footer</text:p>
+ </style:footer>
+ </style:master-page>
+ </office:master-styles>
+ <office:body>
+ <office:text>
+ <text:sequence-decls>
+ <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Table"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Text"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Figure"/>
+ </text:sequence-decls>
+ <text:p text:style-name="Standard">hidden first paragraph<text:hidden-paragraph text:condition="ooow:TRUE" text:is-hidden="true"/></text:p>
+ <text:p text:style-name="Standard">Press CTRL+A for dispatching .uno:SelectAll. You see that nothing will be selected. The cursor jumps to the header</text:p>
+ <text:p text:style-name="Standard">hidden last paragraph<text:hidden-paragraph text:condition="ooow:TRUE" text:is-hidden="true"/></text:p>
+ </office:text>
+ </office:body>
+</office:document>
diff --git a/sw/qa/extras/uiwriter/data/tdf125154.odt b/sw/qa/extras/uiwriter/data/tdf125154.odt
new file mode 100644
index 000000000000..81dee2be72cf
--- /dev/null
+++ b/sw/qa/extras/uiwriter/data/tdf125154.odt
Binary files differ
diff --git a/sw/qa/extras/uiwriter/data/tdf133982.docx b/sw/qa/extras/uiwriter/data/tdf133982.docx
new file mode 100644
index 000000000000..d2e8573d15ac
--- /dev/null
+++ b/sw/qa/extras/uiwriter/data/tdf133982.docx
Binary files differ
diff --git a/sw/qa/extras/uiwriter/data/tdf134021.docx b/sw/qa/extras/uiwriter/data/tdf134021.docx
new file mode 100644
index 000000000000..cda11fbdf3ef
--- /dev/null
+++ b/sw/qa/extras/uiwriter/data/tdf134021.docx
Binary files differ
diff --git a/sw/qa/extras/uiwriter/data/tdf139843.odt b/sw/qa/extras/uiwriter/data/tdf139843.odt
new file mode 100644
index 000000000000..67a555799006
--- /dev/null
+++ b/sw/qa/extras/uiwriter/data/tdf139843.odt
Binary files differ
diff --git a/sw/qa/extras/uiwriter/data/tdf148868.odt b/sw/qa/extras/uiwriter/data/tdf148868.odt
new file mode 100644
index 000000000000..7ebf68a82ea3
--- /dev/null
+++ b/sw/qa/extras/uiwriter/data/tdf148868.odt
Binary files differ
diff --git a/sw/qa/extras/uiwriter/data2/tdf135061.odt b/sw/qa/extras/uiwriter/data2/tdf135061.odt
new file mode 100644
index 000000000000..19b3afa31e47
--- /dev/null
+++ b/sw/qa/extras/uiwriter/data2/tdf135061.odt
Binary files differ
diff --git a/sw/qa/extras/uiwriter/data2/tdf136452.fodt b/sw/qa/extras/uiwriter/data2/tdf136452.fodt
new file mode 100644
index 000000000000..74c3102aa781
--- /dev/null
+++ b/sw/qa/extras/uiwriter/data2/tdf136452.fodt
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<office:document xmlns:officeooo="http://openoffice.org/2009/office" xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rpt="http://openoffice.org/2005/report" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:xforms="http://www.w3.org/2002/xforms" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:font-face-decls>
+ <style:font-face style:name="Liberation Serif" svg:font-family="&apos;Liberation Serif&apos;" style:font-family-generic="roman" style:font-pitch="variable"/>
+ <style:font-face style:name="Lohit Devanagari1" svg:font-family="&apos;Lohit Devanagari&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="Source Han Serif CN" svg:font-family="&apos;Source Han Serif CN&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+ <style:default-style style:family="graphic">
+ <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:flow-with-text="false"/>
+ <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:font-independent-line-spacing="false">
+ <style:tab-stops/>
+ </style:paragraph-properties>
+ <style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="de" fo:country="DE" style:letter-kerning="true" style:font-name-asian="Source Han Serif CN" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lohit Devanagari1" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/>
+ </style:default-style>
+ <style:default-style style:family="paragraph">
+ <style:paragraph-properties fo:orphans="2" fo:widows="2" fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.251cm" style:writing-mode="page"/>
+ <style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="de" fo:country="DE" style:letter-kerning="true" style:font-name-asian="Source Han Serif CN" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lohit Devanagari1" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" loext:hyphenation-no-caps="false"/>
+ </style:default-style>
+ <style:default-style style:family="table">
+ <style:table-properties table:border-model="collapsing"/>
+ </style:default-style>
+ <style:default-style style:family="table-row">
+ <style:table-row-properties fo:keep-together="auto"/>
+ </style:default-style>
+ <style:style style:name="Standard" style:family="paragraph" style:class="text"/>
+ </office:styles>
+ <office:automatic-styles>
+ <style:style style:name="Sect1" style:family="section">
+ <style:section-properties fo:background-color="#3465a4" style:editable="false">
+ <style:columns fo:column-count="1" fo:column-gap="0cm"/>
+ <style:background-image/>
+ </style:section-properties>
+ </style:style>
+ <style:style style:name="Sect2" style:family="section">
+ <style:section-properties fo:background-color="#729fcf" style:editable="false">
+ <style:columns fo:column-count="1" fo:column-gap="0cm"/>
+ <style:background-image/>
+ </style:section-properties>
+ </style:style>
+ <style:style style:name="Sect3" style:family="section">
+ <style:section-properties fo:background-color="#3465a4" style:editable="false">
+ <style:columns fo:column-count="1" fo:column-gap="0cm"/>
+ <style:background-image/>
+ </style:section-properties>
+ </style:style>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="20" style:layout-grid-base-height="0.706cm" style:layout-grid-ruby-height="0.353cm" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="false" style:layout-grid-display="false" style:footnote-max-height="0cm" loext:margin-gutter="0cm">
+ <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style/>
+ </style:page-layout>
+ <style:style style:name="dp1" style:family="drawing-page">
+ <style:drawing-page-properties draw:background-size="full"/>
+ </style:style>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:page-layout-name="pm1" draw:style-name="dp1"/>
+ </office:master-styles>
+ <office:body>
+ <office:text>
+ <text:p text:style-name="Standard">A</text:p>
+ <text:section text:style-name="Sect1" text:name="Section1">
+ <text:p text:style-name="Standard">B</text:p>
+ <text:p text:style-name="Standard">C</text:p>
+ </text:section>
+ <text:p text:style-name="Standard">D</text:p>
+ <text:section text:style-name="Sect2" text:name="Section2">
+ <text:p text:style-name="Standard">E</text:p>
+ <text:p text:style-name="Standard">F</text:p>
+ </text:section>
+ <text:p text:style-name="Standard">G</text:p>
+ <text:section text:style-name="Sect3" text:name="Section3">
+ <text:p text:style-name="Standard">H</text:p>
+ </text:section>
+ </office:text>
+ </office:body>
+</office:document>
diff --git a/sw/qa/extras/uiwriter/data2/tdf141175.odt b/sw/qa/extras/uiwriter/data2/tdf141175.odt
new file mode 100644
index 000000000000..3ccfa6b1a326
--- /dev/null
+++ b/sw/qa/extras/uiwriter/data2/tdf141175.odt
Binary files differ
diff --git a/sw/qa/extras/uiwriter/data2/try2.fodt b/sw/qa/extras/uiwriter/data2/try2.fodt
new file mode 100644
index 000000000000..624a75a85ea9
--- /dev/null
+++ b/sw/qa/extras/uiwriter/data2/try2.fodt
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<office:document xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rpt="http://openoffice.org/2005/report" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:font-face-decls>
+ <style:font-face style:name="Liberation Serif" svg:font-family="&apos;Liberation Serif&apos;" style:font-family-generic="roman" style:font-pitch="variable"/>
+ <style:font-face style:name="Lohit Devanagari" svg:font-family="&apos;Lohit Devanagari&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="Source Han Serif CN" svg:font-family="&apos;Source Han Serif CN&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+ <style:default-style style:family="graphic">
+ <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:flow-with-text="false"/>
+ <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:font-independent-line-spacing="false">
+ <style:tab-stops/>
+ </style:paragraph-properties>
+ <style:text-properties style:use-window-font-color="true" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="de" fo:country="DE" style:letter-kerning="true" style:font-name-asian="Source Han Serif CN" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lohit Devanagari" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/>
+ </style:default-style>
+ <style:default-style style:family="paragraph">
+ <style:paragraph-properties fo:orphans="2" fo:widows="2" fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.251cm" style:writing-mode="page"/>
+ <style:text-properties style:use-window-font-color="true" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="de" fo:country="DE" style:letter-kerning="true" style:font-name-asian="Source Han Serif CN" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lohit Devanagari" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2"/>
+ </style:default-style>
+ <style:default-style style:family="table">
+ <style:table-properties table:border-model="collapsing"/>
+ </style:default-style>
+ <style:default-style style:family="table-row">
+ <style:table-row-properties fo:keep-together="auto"/>
+ </style:default-style>
+ <style:style style:name="Standard" style:family="paragraph" style:class="text"/>
+ </office:styles>
+ <office:automatic-styles>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="20" style:layout-grid-base-height="0.706cm" style:layout-grid-ruby-height="0.353cm" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="false" style:layout-grid-display="false" style:footnote-max-height="0cm">
+ <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style/>
+ </style:page-layout>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:page-layout-name="pm1"/>
+ </office:master-styles>
+ <office:body>
+ <office:text>
+ <text:tracked-changes text:track-changes="false">
+ <text:changed-region xml:id="ct110725936" text:id="ct110725936">
+ <text:deletion>
+ <office:change-info>
+ <dc:creator>Unknown Author</dc:creator>
+ <dc:date>2020-10-12T19:26:19</dc:date>
+ </office:change-info>
+ </text:deletion>
+ </text:changed-region>
+ <text:changed-region xml:id="ct110726576" text:id="ct110726576">
+ <text:deletion>
+ <office:change-info>
+ <dc:creator>Unknown Author</dc:creator>
+ <dc:date>2020-10-12T19:26:26</dc:date>
+ </office:change-info>
+ </text:deletion>
+ </text:changed-region>
+ </text:tracked-changes>
+ <text:p text:style-name="Standard">A<text:change-start text:change-id="ct110725936"/></text:p>
+ <text:p text:style-name="Standard"><text:change-end text:change-id="ct110725936"/>xxxxxxxxxxxxxxxxxx<text:change-start text:change-id="ct110726576"/>x</text:p>
+ <text:p text:style-name="Standard">y<text:change-end text:change-id="ct110726576"/>y</text:p>
+ </office:text>
+ </office:body>
+</office:document>
diff --git a/sw/qa/extras/uiwriter/uiwriter.cxx b/sw/qa/extras/uiwriter/uiwriter.cxx
index 180b9b29d137..d1b117f6a467 100644
--- a/sw/qa/extras/uiwriter/uiwriter.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter.cxx
@@ -94,11 +94,13 @@
#include <com/sun/star/util/XPropertyReplace.hpp>
#include <com/sun/star/beans/PropertyAttribute.hpp>
#include <com/sun/star/text/XTextField.hpp>
+#include <com/sun/star/view/XSelectionSupplier.hpp>
#include <com/sun/star/text/TextMarkupType.hpp>
#include <com/sun/star/chart2/data/XDataSource.hpp>
#include <com/sun/star/document/XEmbeddedObjectSupplier2.hpp>
#include <com/sun/star/drawing/XShape.hpp>
#include <com/sun/star/linguistic2/XLinguProperties.hpp>
+#include <com/sun/star/view/XSelectionSupplier.hpp>
#include <o3tl/cppunittraitshelper.hxx>
#include <o3tl/deleter.hxx>
#include <osl/file.hxx>
@@ -129,6 +131,9 @@
#include <iodetect.hxx>
#include <wrthtml.hxx>
#include <dbmgr.hxx>
+#include <swdtflvr.hxx>
+#include <sortedobjs.hxx>
+#include <txtfrm.hxx>
namespace
{
@@ -152,6 +157,21 @@ int CountFilesInDirectory(const OUString &rURL)
return nRet;
}
+
+static void lcl_dispatchCommand(const uno::Reference<lang::XComponent>& xComponent, const OUString& rCommand, const uno::Sequence<beans::PropertyValue>& rPropertyValues)
+{
+ uno::Reference<frame::XController> xController = uno::Reference<frame::XModel>(xComponent, uno::UNO_QUERY_THROW)->getCurrentController();
+ CPPUNIT_ASSERT(xController.is());
+ uno::Reference<frame::XDispatchProvider> xFrame(xController->getFrame(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT(xFrame.is());
+
+ uno::Reference<uno::XComponentContext> xContext = ::comphelper::getProcessComponentContext();
+ uno::Reference<frame::XDispatchHelper> xDispatchHelper(frame::DispatchHelper::create(xContext));
+ CPPUNIT_ASSERT(xDispatchHelper.is());
+
+ xDispatchHelper->executeDispatch(xFrame, rCommand, OUString(), 0, rPropertyValues);
+}
+
}
class SwUiWriterTest : public SwModelTestBase, public HtmlTestTools
@@ -260,6 +280,7 @@ public:
void testUnicodeNotationToggle();
void testTextTableCellNames();
void testShapeAnchorUndo();
+ void testTdf127635();
void testDde();
void testDocModState();
void testTdf94804();
@@ -291,6 +312,7 @@ public:
void testTdf84695Tab();
void testTableStyleUndo();
void testRedlineCopyPaste();
+ void testTdf135260();
void testRedlineParam();
void testRedlineViewAuthor();
void testTdf91292();
@@ -469,6 +491,7 @@ public:
CPPUNIT_TEST(testUnicodeNotationToggle);
CPPUNIT_TEST(testTextTableCellNames);
CPPUNIT_TEST(testShapeAnchorUndo);
+ CPPUNIT_TEST(testTdf127635);
CPPUNIT_TEST(testDde);
CPPUNIT_TEST(testDocModState);
CPPUNIT_TEST(testTdf94804);
@@ -500,6 +523,7 @@ public:
CPPUNIT_TEST(testTdf84695Tab);
CPPUNIT_TEST(testTableStyleUndo);
CPPUNIT_TEST(testRedlineCopyPaste);
+ CPPUNIT_TEST(testTdf135260);
CPPUNIT_TEST(testRedlineParam);
CPPUNIT_TEST(testRedlineViewAuthor);
CPPUNIT_TEST(testTdf91292);
@@ -579,7 +603,7 @@ public:
CPPUNIT_TEST(testTdf59666);
CPPUNIT_TEST_SUITE_END();
-private:
+protected:
SwDoc* createDoc(const char* pName = nullptr);
std::unique_ptr<SwTextBlocks> readDOCXAutotext(const OUString& sFileName, bool bEmpty = false);
};
@@ -725,6 +749,131 @@ void SwUiWriterTest::testThreadedException()
CPPUNIT_ASSERT(!bRes);
}
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testPasteTableAtFlyAnchor)
+{
+ SwDoc * pDoc(createDoc());
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+
+ SwFormatAnchor anchor(RndStdIds::FLY_AT_CHAR);
+ anchor.SetAnchor(pWrtShell->GetCursor()->GetPoint());
+ SfxItemSet flySet(pDoc->GetAttrPool(), svl::Items<RES_ANCHOR, RES_ANCHOR>{});
+ flySet.Put(anchor);
+ SwFlyFrameFormat const* pFly = dynamic_cast<SwFlyFrameFormat const*>(
+ pWrtShell->NewFlyFrame(flySet, /*bAnchValid=*/true));
+ CPPUNIT_ASSERT(pFly != nullptr);
+ CPPUNIT_ASSERT(pFly->GetFrame() != nullptr);
+ pWrtShell->SelFlyGrabCursor();
+ pWrtShell->GetDrawView()->UnmarkAll();
+ CPPUNIT_ASSERT(pWrtShell->GetCurrFlyFrame() != nullptr);
+
+ // insert table in fly
+ SwInsertTableOptions tableOpt(SwInsertTableFlags::DefaultBorder, 0);
+ pWrtShell->InsertTable(tableOpt, 2, 2);
+
+ // select table
+ pWrtShell->SelAll();
+
+ lcl_dispatchCommand(mxComponent, ".uno:Copy", {});
+
+ // move cursor back to body
+ pWrtShell->ClearMark();
+ pWrtShell->SttEndDoc(/*bStt=*/true);
+ CPPUNIT_ASSERT(!pWrtShell->GetCurrFlyFrame());
+
+ lcl_dispatchCommand(mxComponent, ".uno:Paste", {});
+
+ pWrtShell->SttEndDoc(/*bStt=*/true);
+ CPPUNIT_ASSERT(pWrtShell->IsCursorInTable());
+ CPPUNIT_ASSERT(!pFly->GetAnchor().GetContentAnchor()->nNode.GetNode().FindTableNode());
+
+ pWrtShell->Undo();
+
+ pWrtShell->SttEndDoc(/*bStt=*/true);
+ CPPUNIT_ASSERT(!pWrtShell->IsCursorInTable());
+ CPPUNIT_ASSERT(!pFly->GetAnchor().GetContentAnchor()->nNode.GetNode().FindTableNode());
+
+ // the problem was that Redo moved the fly anchor into the first table cell
+ pWrtShell->Redo();
+
+ pWrtShell->SttEndDoc(/*bStt=*/true);
+ CPPUNIT_ASSERT(pWrtShell->IsCursorInTable());
+ CPPUNIT_ASSERT(!pFly->GetAnchor().GetContentAnchor()->nNode.GetNode().FindTableNode());
+
+ pWrtShell->Undo();
+
+ pWrtShell->SttEndDoc(/*bStt=*/true);
+ CPPUNIT_ASSERT(!pWrtShell->IsCursorInTable());
+ CPPUNIT_ASSERT(!pFly->GetAnchor().GetContentAnchor()->nNode.GetNode().FindTableNode());
+}
+
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testCopyPastePageBreak)
+{
+ rtl::Reference<SwTransferable> pTransfer;
+ {
+ SwDoc * pDoc(createDoc("pagebreak-source.fodt"));
+
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ CPPUNIT_ASSERT_EQUAL(long(5669), pWrtShell->GetLayout()->GetLower()->getFramePrintArea().Top());
+
+ pWrtShell->SelAll();
+
+ pTransfer = new SwTransferable(*pWrtShell);
+ pTransfer->Copy();
+
+ //lcl_dispatchCommand(mxComponent, ".uno:Copy", {});
+
+ mxComponent->dispose();
+ mxComponent.clear();
+ }
+
+ SwDoc * pDoc(createDoc("pagebreak-target.fodt"));
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+
+ CPPUNIT_ASSERT_EQUAL(1, getParagraphs());
+ CPPUNIT_ASSERT_EQUAL(OUString("WithMargin"), getProperty<OUString>(getParagraph(1), "PageDescName"));
+ CPPUNIT_ASSERT_EQUAL(OUString("TargetSection"), pWrtShell->GetCurrSection()->GetSectionName());
+ // page style WithMargin is used
+ CPPUNIT_ASSERT_EQUAL(long(5669), pWrtShell->GetLayout()->GetLower()->getFramePrintArea().Top());
+
+ //paste not working in this branch? lcl_dispatchCommand(mxComponent, ".uno:Paste", {});
+ TransferableDataHelper aHelper(pTransfer.get());
+ SwTransferable::Paste(*pWrtShell, aHelper);
+
+ CPPUNIT_ASSERT_EQUAL(2, getParagraphs());
+ CPPUNIT_ASSERT_EQUAL(OUString("WithMargin"), getProperty<OUString>(getParagraph(1), "PageDescName"));
+ CPPUNIT_ASSERT_EQUAL(size_t(2), pDoc->GetSections().size());
+ CPPUNIT_ASSERT_EQUAL(OUString("SourceSection"), pWrtShell->GetCurrSection()->GetSectionName());
+ // the problem was that there was a page break now
+ CPPUNIT_ASSERT_EQUAL(1, getPages());
+ // page style WithMargin is used
+ CPPUNIT_ASSERT_EQUAL(long(5669), pWrtShell->GetLayout()->GetLower()->getFramePrintArea().Top());
+
+ pWrtShell->Undo();
+ CPPUNIT_ASSERT_EQUAL(1, getParagraphs());
+ CPPUNIT_ASSERT_EQUAL(OUString("WithMargin"), getProperty<OUString>(getParagraph(1), "PageDescName"));
+ CPPUNIT_ASSERT_EQUAL(OUString("TargetSection"), pWrtShell->GetCurrSection()->GetSectionName());
+ CPPUNIT_ASSERT_EQUAL(1, getPages());
+ // page style WithMargin is used
+ CPPUNIT_ASSERT_EQUAL(long(5669), pWrtShell->GetLayout()->GetLower()->getFramePrintArea().Top());
+
+ pWrtShell->Redo();
+ CPPUNIT_ASSERT_EQUAL(2, getParagraphs());
+ CPPUNIT_ASSERT_EQUAL(OUString("WithMargin"), getProperty<OUString>(getParagraph(1), "PageDescName"));
+ CPPUNIT_ASSERT_EQUAL(size_t(2), pDoc->GetSections().size());
+ CPPUNIT_ASSERT_EQUAL(OUString("SourceSection"), pWrtShell->GetCurrSection()->GetSectionName());
+ CPPUNIT_ASSERT_EQUAL(1, getPages());
+ // page style WithMargin is used
+ CPPUNIT_ASSERT_EQUAL(long(5669), pWrtShell->GetLayout()->GetLower()->getFramePrintArea().Top());
+
+ pWrtShell->Undo();
+ CPPUNIT_ASSERT_EQUAL(1, getParagraphs());
+ CPPUNIT_ASSERT_EQUAL(OUString("WithMargin"), getProperty<OUString>(getParagraph(1), "PageDescName"));
+ CPPUNIT_ASSERT_EQUAL(OUString("TargetSection"), pWrtShell->GetCurrSection()->GetSectionName());
+ CPPUNIT_ASSERT_EQUAL(1, getPages());
+ // page style WithMargin is used
+ CPPUNIT_ASSERT_EQUAL(long(5669), pWrtShell->GetLayout()->GetLower()->getFramePrintArea().Top());
+}
+
void SwUiWriterTest::testBookmarkCopy()
{
SwDoc * pDoc(createDoc());
@@ -781,6 +930,52 @@ void SwUiWriterTest::testBookmarkCopy()
}
}
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testFormulaNumberWithGroupSeparator)
+{
+ SwDoc* pDoc = createDoc("tdf125154.odt");
+ lcl_dispatchCommand(mxComponent, ".uno:UpdateAll", {});
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ pWrtShell->SttEndDoc(true);
+ SwField const* pField;
+
+ pField = pWrtShell->GetCurField();
+ CPPUNIT_ASSERT_EQUAL(OUString("1000"), pField->GetFormula());
+ CPPUNIT_ASSERT_EQUAL(OUString("1.000"), pField->ExpandField(true, nullptr));
+ pWrtShell->GoNextCell();
+ CPPUNIT_ASSERT_EQUAL(OUString("10000"), pWrtShell->GetCursor()->GetPoint()->nNode.GetNode().GetTextNode()->GetText());
+ pWrtShell->GoNextCell();
+ pField = pWrtShell->GetCurField();
+ CPPUNIT_ASSERT_EQUAL(OUString("test"), pField->GetFormula());
+ CPPUNIT_ASSERT_EQUAL(OUString("1.000"), pField->ExpandField(true, nullptr));
+ pWrtShell->GoNextCell();
+ // the problem was that this was 0
+ CPPUNIT_ASSERT_EQUAL(OUString("10000"), pWrtShell->GetCursor()->GetPoint()->nNode.GetNode().GetTextNode()->GetText());
+ pWrtShell->Down(false);
+ pWrtShell->SttPara(false);
+ pField = pWrtShell->GetCurField();
+ CPPUNIT_ASSERT_EQUAL(OUString("1000*10%"), pField->GetFormula());
+ CPPUNIT_ASSERT_EQUAL(OUString("100"), pField->ExpandField(true, nullptr));
+ pWrtShell->Down(false);
+ pField = pWrtShell->GetCurField();
+ CPPUNIT_ASSERT_EQUAL(OUString("5.000*10%"), pField->GetFormula());
+ // the problem was that this was 0
+ CPPUNIT_ASSERT_EQUAL(OUString("500"), pField->ExpandField(true, nullptr));
+ pWrtShell->Down(false);
+ pField = pWrtShell->GetCurField();
+ CPPUNIT_ASSERT_EQUAL(OUString("5.000*10%"), pField->GetFormula());
+ // the problem was that this was
+ CPPUNIT_ASSERT_EQUAL(OUString("500"), pField->ExpandField(true, nullptr));
+ pWrtShell->Down(false);
+ pField = pWrtShell->GetCurField();
+ CPPUNIT_ASSERT_EQUAL(OUString("5000*10%"), pField->GetFormula());
+ CPPUNIT_ASSERT_EQUAL(OUString("500"), pField->ExpandField(true, nullptr));
+ pWrtShell->Down(false);
+ CPPUNIT_ASSERT_EQUAL(OUString(u"-100,00 €"), pWrtShell->GetCursor()->GetPoint()->nNode.GetNode().GetTextNode()->GetText());
+ pWrtShell->GoNextCell();
+ // tdf#42518 the problem was that this was 1.900,00 €
+ CPPUNIT_ASSERT_EQUAL(OUString("** Expression is faulty **"), pWrtShell->GetCursor()->GetPoint()->nNode.GetNode().GetTextNode()->GetText());
+}
+
void SwUiWriterTest::testTdf67238()
{
//create a new writer document
@@ -874,6 +1069,23 @@ void SwUiWriterTest::testTdf67238()
CPPUNIT_ASSERT(!((rTable.GetTableBox("C3"))->GetFrameFormat()->GetProtect()).IsContentProtected());
}
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testTdf155685)
+{
+ SwDoc* pDoc = createDoc("table-at-end-of-cell.fodt");
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ pWrtShell->GoNextCell();
+ pWrtShell->GoNextCell();
+ pWrtShell->GoNextCell();
+ pWrtShell->SelAll();
+ pWrtShell->Delete();
+ // this crashed
+ pWrtShell->Undo();
+ pWrtShell->Undo();
+ pWrtShell->Redo();
+ // this crashed
+ pWrtShell->Redo();
+}
+
void SwUiWriterTest::testFdo75110()
{
SwDoc* pDoc = createDoc("fdo75110.odt");
@@ -1780,6 +1992,150 @@ void SwUiWriterTest::testBookmarkUndo()
CPPUNIT_ASSERT_EQUAL(sal_Int32(0), pMarkAccess->getAllMarksCount());
}
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testTdf148389_Left)
+{
+ SwDoc* const pDoc = createDoc();
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ CPPUNIT_ASSERT(pWrtShell);
+ pWrtShell->Insert("foo bar baz");
+ pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/false, 4, /*bBasicCall=*/false);
+ pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/true, 3, /*bBasicCall=*/false);
+ IDocumentMarkAccess* const pMarkAccess = pDoc->getIDocumentMarkAccess();
+
+ auto pMark = pMarkAccess->makeMark(*pWrtShell->GetCursor(), "Mark",
+ IDocumentMarkAccess::MarkType::BOOKMARK, ::sw::mark::InsertMode::New);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pMarkAccess->getAllMarksCount());
+ pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/false, 4, /*bBasicCall=*/false);
+ pWrtShell->DelLeft();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pMarkAccess->getAllMarksCount());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(7), pMark->GetOtherMarkPos().nContent.GetIndex());
+ pWrtShell->DelLeft();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(6), pMark->GetOtherMarkPos().nContent.GetIndex());
+ pWrtShell->DelLeft();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), pMark->GetOtherMarkPos().nContent.GetIndex());
+ pWrtShell->DelLeft();
+ // historically it wasn't deleted if empty, not sure if it should be
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pMarkAccess->getAllMarksCount());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(4), pMark->GetMarkPos().nContent.GetIndex());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(4), pMark->GetOtherMarkPos().nContent.GetIndex());
+ pWrtShell->Undo();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pMarkAccess->getAllMarksCount());
+ // Undo re-creates the mark...
+ pMark = *pMarkAccess->getAllMarksBegin();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(4), pMark->GetMarkPos().nContent.GetIndex());
+ // the problem was that the end position was not restored
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), pMark->GetOtherMarkPos().nContent.GetIndex());
+ pWrtShell->Undo();
+ // this undo is no longer grouped, to prevent Redo deleting bookmark
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pMarkAccess->getAllMarksCount());
+ // Undo re-creates the mark...
+ pMark = *pMarkAccess->getAllMarksBegin();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(4), pMark->GetMarkPos().nContent.GetIndex());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(7), pMark->GetOtherMarkPos().nContent.GetIndex());
+ pWrtShell->Redo();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pMarkAccess->getAllMarksCount());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(4), pMark->GetMarkPos().nContent.GetIndex());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), pMark->GetOtherMarkPos().nContent.GetIndex());
+ pWrtShell->Redo();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pMarkAccess->getAllMarksCount());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(4), pMark->GetMarkPos().nContent.GetIndex());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(4), pMark->GetOtherMarkPos().nContent.GetIndex());
+ pWrtShell->Undo();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pMarkAccess->getAllMarksCount());
+ // Undo re-creates the mark...
+ pMark = *pMarkAccess->getAllMarksBegin();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(4), pMark->GetMarkPos().nContent.GetIndex());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), pMark->GetOtherMarkPos().nContent.GetIndex());
+ pWrtShell->Undo();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pMarkAccess->getAllMarksCount());
+ // Undo re-creates the mark...
+ pMark = *pMarkAccess->getAllMarksBegin();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(4), pMark->GetMarkPos().nContent.GetIndex());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(7), pMark->GetOtherMarkPos().nContent.GetIndex());
+}
+
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testTdf148389_Right)
+{
+ SwDoc* const pDoc = createDoc();
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ CPPUNIT_ASSERT(pWrtShell);
+ pWrtShell->Insert("foo bar baz");
+ pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/false, 4, /*bBasicCall=*/false);
+ pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/true, 3, /*bBasicCall=*/false);
+ IDocumentMarkAccess* const pMarkAccess = pDoc->getIDocumentMarkAccess();
+
+ auto pMark = pMarkAccess->makeMark(*pWrtShell->GetCursor(), "Mark",
+ IDocumentMarkAccess::MarkType::BOOKMARK, ::sw::mark::InsertMode::New);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pMarkAccess->getAllMarksCount());
+ pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/false, 2, /*bBasicCall=*/false);
+ pWrtShell->DelRight();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pMarkAccess->getAllMarksCount());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3), pMark->GetMarkPos().nContent.GetIndex());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(6), pMark->GetOtherMarkPos().nContent.GetIndex());
+ pWrtShell->DelRight();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), pMark->GetMarkPos().nContent.GetIndex());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), pMark->GetOtherMarkPos().nContent.GetIndex());
+ pWrtShell->DelRight();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), pMark->GetMarkPos().nContent.GetIndex());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(4), pMark->GetOtherMarkPos().nContent.GetIndex());
+ pWrtShell->DelRight();
+ // historically it wasn't deleted if empty, not sure if it should be
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pMarkAccess->getAllMarksCount());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), pMark->GetMarkPos().nContent.GetIndex());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3), pMark->GetOtherMarkPos().nContent.GetIndex());
+ pWrtShell->Undo();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pMarkAccess->getAllMarksCount());
+ // Undo re-creates the mark...
+ pMark = *pMarkAccess->getAllMarksBegin();
+ // the problem was that the start position was not restored
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), pMark->GetMarkPos().nContent.GetIndex());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), pMark->GetOtherMarkPos().nContent.GetIndex());
+ pWrtShell->Undo();
+ // this undo is no longer grouped, to prevent Redo deleting bookmark
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pMarkAccess->getAllMarksCount());
+ // Undo re-creates the mark...
+ pMark = *pMarkAccess->getAllMarksBegin();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3), pMark->GetMarkPos().nContent.GetIndex());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(6), pMark->GetOtherMarkPos().nContent.GetIndex());
+ pWrtShell->Undo();
+ // this undo is no longer grouped, to prevent Redo deleting bookmark
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pMarkAccess->getAllMarksCount());
+ // Undo re-creates the mark...
+ pMark = *pMarkAccess->getAllMarksBegin();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(4), pMark->GetMarkPos().nContent.GetIndex());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(7), pMark->GetOtherMarkPos().nContent.GetIndex());
+ pWrtShell->Redo();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pMarkAccess->getAllMarksCount());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3), pMark->GetMarkPos().nContent.GetIndex());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(6), pMark->GetOtherMarkPos().nContent.GetIndex());
+ pWrtShell->Redo();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pMarkAccess->getAllMarksCount());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), pMark->GetMarkPos().nContent.GetIndex());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), pMark->GetOtherMarkPos().nContent.GetIndex());
+ pWrtShell->Redo();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pMarkAccess->getAllMarksCount());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), pMark->GetMarkPos().nContent.GetIndex());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3), pMark->GetOtherMarkPos().nContent.GetIndex());
+ pWrtShell->Undo();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pMarkAccess->getAllMarksCount());
+ // Undo re-creates the mark...
+ pMark = *pMarkAccess->getAllMarksBegin();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), pMark->GetMarkPos().nContent.GetIndex());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), pMark->GetOtherMarkPos().nContent.GetIndex());
+ pWrtShell->Undo();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pMarkAccess->getAllMarksCount());
+ // Undo re-creates the mark...
+ pMark = *pMarkAccess->getAllMarksBegin();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3), pMark->GetMarkPos().nContent.GetIndex());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(6), pMark->GetOtherMarkPos().nContent.GetIndex());
+ pWrtShell->Undo();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pMarkAccess->getAllMarksCount());
+ // Undo re-creates the mark...
+ pMark = *pMarkAccess->getAllMarksBegin();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(4), pMark->GetMarkPos().nContent.GetIndex());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(7), pMark->GetOtherMarkPos().nContent.GetIndex());
+}
+
static void lcl_setWeight(SwWrtShell* pWrtShell, FontWeight aWeight)
{
SvxWeightItem aWeightItem(aWeight, EE_CHAR_WEIGHT);
@@ -3820,7 +4176,7 @@ void SwUiWriterTest::testUndoDelAsCharTdf107512()
CPPUNIT_ASSERT(rIDCO.InsertGraphicObject(*pShell->GetCursor(), grf, &frameSet, &grfSet));
CPPUNIT_ASSERT_EQUAL(size_t(2), pDoc->GetFlyCount(FLYCNTTYPE_GRF));
SvxCharHiddenItem hidden(true, RES_CHRATR_HIDDEN);
- pShell->SelectText(1, 4);
+ pShell->SelectTextModel(1, 4);
rIDCO.InsertPoolItem(*pShell->GetCursor(), hidden);
// now we have "\1foo\1" with the "foo" hidden
CPPUNIT_ASSERT(pShell->GetCursor()->GetNode().GetTextNode()->GetTextAttrForCharAt(0, RES_TXTATR_FLYCNT));
@@ -3834,7 +4190,7 @@ void SwUiWriterTest::testUndoDelAsCharTdf107512()
query.ClearItem(RES_CHRATR_HIDDEN);
// delete from the start
- pShell->SelectText(0, 4);
+ pShell->SelectTextModel(0, 4);
rIDCO.DeleteAndJoin(*pShell->GetCursor());
CPPUNIT_ASSERT(pShell->GetCursor()->GetNode().GetTextNode()->GetTextAttrForCharAt(0, RES_TXTATR_FLYCNT));
CPPUNIT_ASSERT_EQUAL(size_t(1), pDoc->GetFlyCount(FLYCNTTYPE_GRF));
@@ -3877,7 +4233,7 @@ void SwUiWriterTest::testUndoDelAsCharTdf107512()
query.ClearItem(RES_CHRATR_HIDDEN);
// delete from the end
- pShell->SelectText(1, 5);
+ pShell->SelectTextModel(1, 5);
rIDCO.DeleteAndJoin(*pShell->GetCursor());
CPPUNIT_ASSERT(pShell->GetCursor()->GetNode().GetTextNode()->GetTextAttrForCharAt(0, RES_TXTATR_FLYCNT));
CPPUNIT_ASSERT_EQUAL(size_t(1), pDoc->GetFlyCount(FLYCNTTYPE_GRF));
@@ -4122,18 +4478,185 @@ void SwUiWriterTest::testShapeAnchorUndo()
CPPUNIT_ASSERT_EQUAL(pObject->GetLogicRect(), aOrigLogicRect);
}
-static void lcl_dispatchCommand(const uno::Reference<lang::XComponent>& xComponent, const OUString& rCommand, const uno::Sequence<beans::PropertyValue>& rPropertyValues)
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testTdf149595)
{
- uno::Reference<frame::XController> xController = uno::Reference<frame::XModel>(xComponent, uno::UNO_QUERY_THROW)->getCurrentController();
- CPPUNIT_ASSERT(xController.is());
- uno::Reference<frame::XDispatchProvider> xFrame(xController->getFrame(), uno::UNO_QUERY);
- CPPUNIT_ASSERT(xFrame.is());
+ SwDoc* pDoc = createDoc("demo91.fodt");
- uno::Reference<uno::XComponentContext> xContext = ::comphelper::getProcessComponentContext();
- uno::Reference<frame::XDispatchHelper> xDispatchHelper(frame::DispatchHelper::create(xContext));
- CPPUNIT_ASSERT(xDispatchHelper.is());
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
- xDispatchHelper->executeDispatch(xFrame, rCommand, OUString(), 0, rPropertyValues);
+ // all 4 shapes are on the 2nd paragraph
+ CPPUNIT_ASSERT(pWrtShell->GetLayout()->GetLower()->GetLower()->GetLower()->GetDrawObjs() == nullptr);
+ CPPUNIT_ASSERT(pWrtShell->GetLayout()->GetLower()->GetLower()->GetLower()->GetNext()->GetDrawObjs() != nullptr);
+ CPPUNIT_ASSERT_EQUAL(size_t(4), pWrtShell->GetLayout()->GetLower()->GetLower()->GetLower()->GetNext()->GetDrawObjs()->size());
+
+ {
+ pWrtShell->Down(false);
+ pWrtShell->EndPara(/*bSelect=*/true);
+ rtl::Reference<SwTransferable> pTransfer = new SwTransferable(*pWrtShell);
+ pTransfer->Cut();
+
+ // one shape is anchored in the middle, others at the start/end/at-para
+ CPPUNIT_ASSERT(pWrtShell->GetLayout()->GetLower()->GetLower()->GetLower()->GetDrawObjs() == nullptr);
+ CPPUNIT_ASSERT(pWrtShell->GetLayout()->GetLower()->GetLower()->GetLower()->GetNext()->GetDrawObjs() != nullptr);
+ CPPUNIT_ASSERT_EQUAL(size_t(3), pWrtShell->GetLayout()->GetLower()->GetLower()->GetLower()->GetNext()->GetDrawObjs()->size());
+
+ pWrtShell->Up(false);
+ TransferableDataHelper aHelper(pTransfer.get());
+ SwTransferable::Paste(*pWrtShell, aHelper);
+
+ CPPUNIT_ASSERT(pWrtShell->GetLayout()->GetLower()->GetLower()->GetLower()->GetDrawObjs() != nullptr);
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pWrtShell->GetLayout()->GetLower()->GetLower()->GetLower()->GetDrawObjs()->size());
+ CPPUNIT_ASSERT(pWrtShell->GetLayout()->GetLower()->GetLower()->GetLower()->GetNext()->GetDrawObjs() != nullptr);
+ CPPUNIT_ASSERT_EQUAL(size_t(3), pWrtShell->GetLayout()->GetLower()->GetLower()->GetLower()->GetNext()->GetDrawObjs()->size());
+
+ pWrtShell->Undo();
+ pWrtShell->Undo();
+
+ CPPUNIT_ASSERT(pWrtShell->GetLayout()->GetLower()->GetLower()->GetLower()->GetDrawObjs() == nullptr);
+ CPPUNIT_ASSERT(pWrtShell->GetLayout()->GetLower()->GetLower()->GetLower()->GetNext()->GetDrawObjs() != nullptr);
+ CPPUNIT_ASSERT_EQUAL(size_t(4), pWrtShell->GetLayout()->GetLower()->GetLower()->GetLower()->GetNext()->GetDrawObjs()->size());
+ }
+
+ // now try the same with redlining enabled - should be the same result
+ lcl_dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {});
+ lcl_dispatchCommand(mxComponent, ".uno:TrackChanges", {});
+ {
+ pWrtShell->Down(false);
+ pWrtShell->SttPara(/*bSelect=*/false);
+ pWrtShell->EndPara(/*bSelect=*/true);
+ rtl::Reference<SwTransferable> pTransfer = new SwTransferable(*pWrtShell);
+ pTransfer->Cut();
+
+ CPPUNIT_ASSERT(pWrtShell->GetLayout()->GetLower()->GetLower()->GetLower()->GetDrawObjs() == nullptr);
+ CPPUNIT_ASSERT(pWrtShell->GetLayout()->GetLower()->GetLower()->GetLower()->GetNext()->GetDrawObjs() != nullptr);
+ // problem was that this deleted all at-char flys, even at the start/end
+ CPPUNIT_ASSERT_EQUAL(size_t(3), pWrtShell->GetLayout()->GetLower()->GetLower()->GetLower()->GetNext()->GetDrawObjs()->size());
+
+ pWrtShell->Up(false);
+ TransferableDataHelper aHelper(pTransfer.get());
+ SwTransferable::Paste(*pWrtShell, aHelper);
+
+ CPPUNIT_ASSERT(pWrtShell->GetLayout()->GetLower()->GetLower()->GetLower()->GetDrawObjs() != nullptr);
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pWrtShell->GetLayout()->GetLower()->GetLower()->GetLower()->GetDrawObjs()->size());
+ CPPUNIT_ASSERT(pWrtShell->GetLayout()->GetLower()->GetLower()->GetLower()->GetNext()->GetDrawObjs() != nullptr);
+ CPPUNIT_ASSERT_EQUAL(size_t(3), pWrtShell->GetLayout()->GetLower()->GetLower()->GetLower()->GetNext()->GetDrawObjs()->size());
+
+ pWrtShell->Undo();
+ pWrtShell->Undo();
+
+ CPPUNIT_ASSERT(pWrtShell->GetLayout()->GetLower()->GetLower()->GetLower()->GetDrawObjs() == nullptr);
+ CPPUNIT_ASSERT(pWrtShell->GetLayout()->GetLower()->GetLower()->GetLower()->GetNext()->GetDrawObjs() != nullptr);
+ CPPUNIT_ASSERT_EQUAL(size_t(4), pWrtShell->GetLayout()->GetLower()->GetLower()->GetLower()->GetNext()->GetDrawObjs()->size());
+ }
+}
+
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testTdf147220)
+{
+ SwDoc* pDoc = createDoc();
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+
+ pWrtShell->Insert(u"él");
+
+ // hide and enable
+ lcl_dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {});
+ lcl_dispatchCommand(mxComponent, ".uno:TrackChanges", {});
+ CPPUNIT_ASSERT(pDoc->getIDocumentRedlineAccess().IsRedlineOn());
+ CPPUNIT_ASSERT(
+ IDocumentRedlineAccess::IsShowChanges(pDoc->getIDocumentRedlineAccess().GetRedlineFlags()));
+ CPPUNIT_ASSERT(pWrtShell->GetLayout()->IsHideRedlines());
+
+ pWrtShell->GoStartSentence();
+ pWrtShell->SetMark();
+ pWrtShell->GoEndSentence();
+
+ // this did not remove the original text from the layout
+ pWrtShell->Replace(u"Él", false);
+
+ // currently the deleted text is before the replacement text, not sure if
+ // that is really required
+ CPPUNIT_ASSERT_EQUAL(OUString(u"élÉl"),
+ pWrtShell->GetCursor()->GetPoint()->nNode.GetNode().GetTextNode()->GetText());
+ CPPUNIT_ASSERT_EQUAL(OUString(u"Él"),
+ static_cast<SwTextFrame const*>(pWrtShell->GetCursor()->GetPoint()->nNode.GetNode().GetTextNode()->getLayoutFrame(nullptr))->GetText());
+
+ SwRedlineTable const& rRedlines(pDoc->getIDocumentRedlineAccess().GetRedlineTable());
+ CPPUNIT_ASSERT_EQUAL(SwRedlineTable::size_type(2), rRedlines.size());
+ CPPUNIT_ASSERT_EQUAL(RedlineType::Delete, rRedlines[0]->GetType());
+ CPPUNIT_ASSERT_EQUAL(OUString(u"él"), rRedlines[0]->GetText());
+ CPPUNIT_ASSERT_EQUAL(RedlineType::Insert, rRedlines[1]->GetType());
+ CPPUNIT_ASSERT_EQUAL(OUString(u"Él"), rRedlines[1]->GetText());
+}
+
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testTdf135978)
+{
+ SwDoc* pDoc = createDoc();
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+
+ pWrtShell->Insert("foobar");
+ pWrtShell->SplitNode();
+ pWrtShell->Insert("bazquux");
+
+ CPPUNIT_ASSERT(pWrtShell->IsEndOfDoc());
+
+ SwFormatAnchor anchor(RndStdIds::FLY_AT_CHAR);
+ anchor.SetAnchor(pWrtShell->GetCursor()->GetPoint());
+ SfxItemSet flySet(pDoc->GetAttrPool(), svl::Items<RES_ANCHOR, RES_ANCHOR>{});
+ flySet.Put(anchor);
+ SwFlyFrameFormat const* pFly = dynamic_cast<SwFlyFrameFormat const*>(
+ pWrtShell->NewFlyFrame(flySet, /*bAnchValid=*/true));
+ CPPUNIT_ASSERT(pFly != nullptr);
+ CPPUNIT_ASSERT(pFly->GetFrame() != nullptr);
+ // move cursor back to body
+ pWrtShell->SttEndDoc(/*bStt=*/false);
+
+ // hide and enable
+ lcl_dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {});
+ lcl_dispatchCommand(mxComponent, ".uno:TrackChanges", {});
+
+ CPPUNIT_ASSERT(pDoc->getIDocumentRedlineAccess().IsRedlineOn());
+ CPPUNIT_ASSERT(
+ IDocumentRedlineAccess::IsShowChanges(pDoc->getIDocumentRedlineAccess().GetRedlineFlags()));
+ CPPUNIT_ASSERT(pWrtShell->GetLayout()->IsHideRedlines());
+
+ pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/false, 4, /*bBasicCall=*/false);
+ pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/true, 6, /*bBasicCall=*/false);
+ pWrtShell->Delete();
+
+ // now split
+ pWrtShell->SttEndDoc(/*bStt=*/true);
+ pWrtShell->SplitNode();
+ CPPUNIT_ASSERT(pFly->GetFrame() != nullptr);
+
+ // the problem was that undo removed the fly frame from the layout
+ pWrtShell->Undo();
+ CPPUNIT_ASSERT(pFly->GetFrame() != nullptr);
+
+ pWrtShell->Redo();
+ CPPUNIT_ASSERT(pFly->GetFrame() != nullptr);
+
+ pWrtShell->Undo();
+ CPPUNIT_ASSERT(pFly->GetFrame() != nullptr);
+}
+
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testTdf139843)
+{
+ load(DATA_DIRECTORY, "tdf139843.odt");
+
+// int nPages = getPages();
+
+ lcl_dispatchCommand(mxComponent, ".uno:SelectAll", {});
+ Scheduler::ProcessEventsToIdle();
+
+ lcl_dispatchCommand(mxComponent, ".uno:Cut", {});
+ Scheduler::ProcessEventsToIdle();
+
+ CPPUNIT_ASSERT_EQUAL(1, getPages());
+
+ // Without the fix in place, this test would have crashed here
+ lcl_dispatchCommand(mxComponent, ".uno:Paste", {});
+ Scheduler::ProcessEventsToIdle();
+
+//FIXME? CPPUNIT_ASSERT_EQUAL(nPages, getPages());
}
CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testTdf134252)
@@ -4224,7 +4747,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testTdf134250)
Scheduler::ProcessEventsToIdle();
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount());
- CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xSections->getCount());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xSections->getCount());
// this would crash in 2 different ways
lcl_dispatchCommand(mxComponent, ".uno:Undo", {});
@@ -4240,7 +4763,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testTdf134250)
Scheduler::ProcessEventsToIdle();
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount());
- CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xSections->getCount());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xSections->getCount());
lcl_dispatchCommand(mxComponent, ".uno:Undo", {});
Scheduler::ProcessEventsToIdle();
@@ -4253,7 +4776,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testTdf134250)
Scheduler::ProcessEventsToIdle();
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount());
- CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xSections->getCount());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xSections->getCount());
}
void SwUiWriterTest::testDde()
@@ -4282,6 +4805,48 @@ void SwUiWriterTest::testDde()
#endif
}
+void SwUiWriterTest::testTdf127635()
+{
+ SwDoc* pDoc = createDoc();
+
+ SwXTextDocument* pXTextDocument = dynamic_cast<SwXTextDocument *>(mxComponent.get());
+ CPPUNIT_ASSERT(pXTextDocument);
+ pXTextDocument->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 'a', 0);
+ pXTextDocument->postKeyEvent(LOK_KEYEVENT_KEYINPUT, ' ', 0);
+ pXTextDocument->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 'b', 0);
+ Scheduler::ProcessEventsToIdle();
+
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/false, 2, /*bBasicCall=*/false);
+
+ //Select 'a'
+ pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/true, 1, /*bBasicCall=*/false);
+
+ // enable redlining
+ lcl_dispatchCommand(mxComponent, ".uno:TrackChanges", {});
+ // hide
+ lcl_dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {});
+
+ CPPUNIT_ASSERT_MESSAGE("redlining should be on",
+ pDoc->getIDocumentRedlineAccess().IsRedlineOn());
+ CPPUNIT_ASSERT(pWrtShell->GetLayout()->IsHideRedlines());
+
+ pXTextDocument->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 'c', 0);
+ pXTextDocument->postKeyEvent(LOK_KEYEVENT_KEYINPUT, ' ', 0);
+ pXTextDocument->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 'd', 0);
+ Scheduler::ProcessEventsToIdle();
+
+ SwEditShell* const pEditShell(pDoc->GetEditShell());
+ // accept all redlines
+ while(pEditShell->GetRedlineCount())
+ pEditShell->AcceptRedline(0);
+
+ // Without the fix in place, this test would have failed with
+ // - Expected: C d b
+ // - Actual : Cd b
+ CPPUNIT_ASSERT_EQUAL(OUString("C d b"), getParagraph(1)->getString());
+}
+
CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testTdf132160)
{
load(DATA_DIRECTORY, "tdf132160.odt");
@@ -5682,6 +6247,32 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testTdf134436)
CPPUNIT_ASSERT_EQUAL(OUString(""), pWrtShell->GetCursor()->GetText());
}
+void SwUiWriterTest::testTdf135260()
+{
+ SwDoc* pDoc = createDoc();
+ SwDocShell* pDocShell = pDoc->GetDocShell();
+ SwWrtShell* pWrtShell = pDocShell->GetWrtShell();
+ pWrtShell->Insert("test");
+
+ // Turn on track changes
+ uno::Reference<beans::XPropertySet> xPropertySet(mxComponent, uno::UNO_QUERY);
+ xPropertySet->setPropertyValue("RecordChanges", uno::makeAny(true));
+
+ for(int i = 0; i < 4; i++) {
+ pWrtShell->DelLeft();
+ }
+
+ SwEditShell* const pEditShell(pDoc->GetEditShell());
+ // accept all redlines
+ while(pEditShell->GetRedlineCount())
+ pEditShell->AcceptRedline(0);
+
+ // Without the fix in place, this test would have failed with
+ // - Expected:
+ // - Actual : tes
+ CPPUNIT_ASSERT_EQUAL(OUString(""), getParagraph(1)->getString());
+}
+
void SwUiWriterTest::testRedlineParam()
{
// Create a document with minimal content.
@@ -7572,6 +8163,79 @@ void SwUiWriterTest::testTdf38394()
CPPUNIT_ASSERT_EQUAL(sReplaced, static_cast<SwTextNode*>(pDoc->GetNodes()[nIndex])->GetText());
}
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testTdf148868)
+{
+ SwDoc* pDoc = createDoc("tdf148868.odt");
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+
+ CPPUNIT_ASSERT_EQUAL(1, getShapes());
+ CPPUNIT_ASSERT_EQUAL(1, getPages());
+
+ pWrtShell->EndPg(/*bSelect=*/false);
+ pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/true, 5, /*bBasicCall=*/false);
+ pWrtShell->Insert("X");
+
+ // Without the fix in place, this test would have failed with
+ // - Expected: 1
+ // - Actual : 0
+ CPPUNIT_ASSERT_EQUAL(1, getShapes());
+ CPPUNIT_ASSERT_EQUAL(1, getPages());
+}
+
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testTdf134021)
+{
+ load(DATA_DIRECTORY, "tdf134021.docx");
+
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ CPPUNIT_ASSERT(pTextDoc);
+
+ uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xIndexAccess(xTextTablesSupplier->getTextTables(),
+ uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
+ CPPUNIT_ASSERT_EQUAL(12, getPages());
+
+ lcl_dispatchCommand(mxComponent, ".uno:JumpToNextTable", {});
+
+ lcl_dispatchCommand(mxComponent, ".uno:DeleteTable", {});
+ Scheduler::ProcessEventsToIdle();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), xIndexAccess->getCount());
+ CPPUNIT_ASSERT_EQUAL(1, getPages());
+
+ // Without the fix in place, it would have crashed here
+ lcl_dispatchCommand(mxComponent, ".uno:Undo", {});
+ Scheduler::ProcessEventsToIdle();
+
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
+ CPPUNIT_ASSERT_EQUAL(12, getPages());
+}
+
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testTdf133982)
+{
+ load(DATA_DIRECTORY, "tdf133982.docx");
+
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ CPPUNIT_ASSERT(pTextDoc);
+
+ uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xIndexAccess(xTextTablesSupplier->getTextTables(),
+ uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xIndexAccess->getCount());
+
+ //Use selectAll 3 times in a row
+ lcl_dispatchCommand(mxComponent, ".uno:SelectAll", {});
+ lcl_dispatchCommand(mxComponent, ".uno:SelectAll", {});
+ lcl_dispatchCommand(mxComponent, ".uno:SelectAll", {});
+ lcl_dispatchCommand(mxComponent, ".uno:SelectAll", {});
+
+ //Without the fix in place, it would have crashed here
+ lcl_dispatchCommand(mxComponent, ".uno:Cut", {});
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), xIndexAccess->getCount());
+
+ lcl_dispatchCommand(mxComponent, ".uno:Paste", {});
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xIndexAccess->getCount());
+}
+
void SwUiWriterTest::testTdf59666()
{
SwDoc* pDoc = createDoc();
@@ -7618,6 +8282,75 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testTdf133358)
CPPUNIT_ASSERT_EQUAL(sal_Int32(1251), getProperty<sal_Int32>(xParagraph, "ParaLeftMargin"));
}
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testTdf114973)
+{
+ SwDoc* const pDoc = createDoc("tdf114973.fodt");
+
+ SwWrtShell* const pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ pWrtShell->SttEndDoc(true);
+
+ lcl_dispatchCommand(mxComponent, ".uno:SelectAll", {});
+ Scheduler::ProcessEventsToIdle();
+
+ // bug: cursor jumped into header
+ CPPUNIT_ASSERT(!pWrtShell->IsInHeaderFooter());
+
+ lcl_dispatchCommand(mxComponent, ".uno:Copy", {});
+ Scheduler::ProcessEventsToIdle();
+
+ // check that hidden paragraphs at start and end are deleted
+ lcl_dispatchCommand(mxComponent, ".uno:Delete", {});
+ Scheduler::ProcessEventsToIdle();
+
+ CPPUNIT_ASSERT_EQUAL(int(1), getParagraphs());
+ CPPUNIT_ASSERT_EQUAL(OUString(), getParagraph(1)->getString());
+
+ // check that hidden paragraphs at start and end are copied
+ lcl_dispatchCommand(mxComponent, ".uno:Paste", {});
+ Scheduler::ProcessEventsToIdle();
+
+ CPPUNIT_ASSERT_EQUAL(int(3), getParagraphs());
+ CPPUNIT_ASSERT_EQUAL(OUString("hidden first paragraph"), getParagraph(1)->getString());
+ CPPUNIT_ASSERT_EQUAL(OUString("Press CTRL+A for dispatching .uno:SelectAll. You see that "
+ "nothing will be selected. The cursor jumps to the header"),
+ getParagraph(2)->getString());
+ CPPUNIT_ASSERT_EQUAL(OUString("hidden last paragraph"), getParagraph(3)->getString());
+}
+
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testHiddenSectionsAroundPageBreak)
+{
+ createDoc("hiddenSectionsAroundPageBreak.fodt");
+
+ CPPUNIT_ASSERT_EQUAL(1, getPages());
+
+ uno::Reference<frame::XModel> xModel(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextViewCursorSupplier> xTextViewCursorSupplier(xModel->getCurrentController(), uno::UNO_QUERY);
+ uno::Reference<text::XPageCursor> xCursor(xTextViewCursorSupplier->getViewCursor(), uno::UNO_QUERY);
+
+ // Make sure that the page style is set correctly
+ xCursor->jumpToFirstPage();
+ CPPUNIT_ASSERT_EQUAL(OUString("Landscape"), getProperty<OUString>(xCursor, "PageStyleName"));
+}
+
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest, testTdf159565)
+{
+ // Given a document with a hidden section in the beginning, additionally containing a frame
+ createDoc("FrameInHiddenSection.fodt");
+
+ lcl_dispatchCommand(mxComponent, u".uno:SelectAll", {});
+
+ // Check that the selection covers the whole visible text
+ uno::Reference<frame::XModel> xModel(mxComponent, uno::UNO_QUERY);
+ uno::Reference<view::XSelectionSupplier> xSelSupplier(xModel->getCurrentController(), uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xSelections(xSelSupplier->getSelection(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xSelections->getCount());
+ uno::Reference<text::XTextRange> xSelection(xSelections->getByIndex(0), uno::UNO_QUERY);
+
+ // Without the fix, this would fail - there was no selection
+ CPPUNIT_ASSERT_EQUAL(OUString(u"" SAL_NEWLINE_STRING SAL_NEWLINE_STRING "ipsum"),
+ xSelection->getString());
+}
+
CPPUNIT_TEST_SUITE_REGISTRATION(SwUiWriterTest);
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sw/qa/extras/uiwriter/uiwriter2.cxx b/sw/qa/extras/uiwriter/uiwriter2.cxx
index 1825d3483148..f6748fc1200b 100644
--- a/sw/qa/extras/uiwriter/uiwriter2.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter2.cxx
@@ -23,11 +23,16 @@
#include <i18nlangtag/languagetag.hxx>
#include <vcl/scheduler.hxx>
#include <vcl/settings.hxx>
+#include <sfx2/dispatch.hxx>
+#include <sfx2/viewfrm.hxx>
+#include <svx/svxids.hrc>
+#include <view.hxx>
#include <ndtxt.hxx>
#include <swdtflvr.hxx>
#include <wrtsh.hxx>
#include <IDocumentRedlineAccess.hxx>
#include <flyfrm.hxx>
+#include <pagefrm.hxx>
#include <fmtanchr.hxx>
#include <UndoManager.hxx>
#include <sortedobjs.hxx>
@@ -40,6 +45,9 @@
#include <svl/stritem.hxx>
#include <svx/svxids.hrc>
#include <comphelper/lok.hxx>
+#include <comphelper/scopeguard.hxx>
+#include <editeng/acorrcfg.hxx>
+#include <swacorr.hxx>
#include <txtfrm.hxx>
#include <redline.hxx>
#include <view.hxx>
@@ -252,6 +260,20 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf101534)
CPPUNIT_ASSERT(aSet.HasItem(RES_LR_SPACE));
}
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testExtendedSelectAllHang)
+{
+ SwDoc* const pDoc = createDoc();
+ SwWrtShell* const pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+
+ pWrtShell->InsertFootnote("");
+ pWrtShell->StartOfSection();
+ SwView* pView = pDoc->GetDocShell()->GetView();
+ SfxStringItem aLangString(SID_LANGUAGE_STATUS, "Default_Spanish (Bolivia)");
+ // this looped
+ pView->GetViewFrame()->GetDispatcher()->ExecuteList(SID_LANGUAGE_STATUS, SfxCallMode::SYNCHRON,
+ { &aLangString });
+}
+
CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testRedlineMoveInsertInDelete)
{
loadURL("private:factory/swriter", nullptr);
@@ -346,6 +368,305 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testRedlineInHiddenSection)
CPPUNIT_ASSERT(pNode->GetNodes()[pNode->GetIndex() + 4]->IsEndNode());
}
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testRedlineSplitContentNode)
+{
+ load(DATA_DIRECTORY, "try2.fodt");
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ SwWrtShell* const pWrtShell = pTextDoc->GetDocShell()->GetWrtShell();
+
+ SwViewOption aViewOptions(*pWrtShell->GetViewOptions());
+ // these are required so that IsBlank() is true
+ aViewOptions.SetBlank(true);
+ aViewOptions.SetViewMetaChars(true);
+ pWrtShell->ApplyViewOptions(aViewOptions);
+
+ // enable redlining
+ lcl_dispatchCommand(mxComponent, ".uno:TrackChanges", {});
+ // hide
+ lcl_dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {});
+
+ SwDocShell* const pDocShell = pTextDoc->GetDocShell();
+ SwDoc* const pDoc = pDocShell->GetDoc();
+ CPPUNIT_ASSERT_MESSAGE("redlining should be on",
+ pDoc->getIDocumentRedlineAccess().IsRedlineOn());
+ CPPUNIT_ASSERT_MESSAGE(
+ "redlines should be visible",
+ IDocumentRedlineAccess::IsShowChanges(pDoc->getIDocumentRedlineAccess().GetRedlineFlags()));
+
+ sw::UndoManager& rUndoManager = pDoc->GetUndoManager();
+
+ pWrtShell->CalcLayout();
+ pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/false, 18, /*bBasicCall=*/false);
+ pWrtShell->SplitNode(true);
+ rUndoManager.Undo();
+ // crashed
+ pWrtShell->SplitNode(true);
+ rUndoManager.Undo();
+ rUndoManager.Redo();
+ rUndoManager.Undo();
+ rUndoManager.Redo();
+ rUndoManager.Undo();
+ pWrtShell->SplitNode(true);
+ rUndoManager.Undo();
+}
+
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf137318)
+{
+ SwDoc* const pDoc = createDoc();
+ SwWrtShell* const pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+
+ pWrtShell->Insert("A");
+
+ // enable redlining
+ lcl_dispatchCommand(mxComponent, ".uno:TrackChanges", {});
+ // hide
+ lcl_dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {});
+
+ CPPUNIT_ASSERT_MESSAGE("redlining should be on",
+ pDoc->getIDocumentRedlineAccess().IsRedlineOn());
+ CPPUNIT_ASSERT_MESSAGE(
+ "redlines should be visible",
+ IDocumentRedlineAccess::IsShowChanges(pDoc->getIDocumentRedlineAccess().GetRedlineFlags()));
+ CPPUNIT_ASSERT(pWrtShell->GetLayout()->IsHideRedlines());
+
+ pWrtShell->DelLine();
+ pWrtShell->StartOfSection(false);
+ pWrtShell->SplitNode(true);
+ pWrtShell->SplitNode(true);
+
+ xmlDocPtr pXmlDoc = parseLayoutDump();
+
+ assertXPath(pXmlDoc, "/root/page[1]/body/txt", 3);
+ assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text", 0);
+ assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/Text", 0);
+ // not sure why there's an empty text portion here, but it's not a problem
+ assertXPath(pXmlDoc, "/root/page[1]/body/txt[3]/Text", 1);
+ assertXPath(pXmlDoc, "/root/page[1]/body/txt[3]/Text[1]", "nType", "PortionType::Para");
+ assertXPath(pXmlDoc, "/root/page[1]/body/txt[3]/Text[1][@Portion]", 0);
+
+ pWrtShell->Undo();
+
+ // the problem was that here the "A" showed up again
+ discardDumpedLayout();
+ pXmlDoc = parseLayoutDump();
+ assertXPath(pXmlDoc, "/root/page[1]/body/txt", 2);
+ assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text", 0);
+ assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/Text", 1);
+ assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/Text[1]", "nType", "PortionType::Para");
+ assertXPath(pXmlDoc, "/root/page[1]/body/txt[2]/Text[1][@Portion]", 0);
+
+ pWrtShell->Undo();
+
+ discardDumpedLayout();
+ pXmlDoc = parseLayoutDump();
+ assertXPath(pXmlDoc, "/root/page[1]/body/txt", 1);
+ assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text", 1);
+ assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text[1]", "nType", "PortionType::Para");
+ assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text[1][@Portion]", 0);
+
+ pWrtShell->Undo();
+
+ // now the "A" is no longer deleted
+ discardDumpedLayout();
+ pXmlDoc = parseLayoutDump();
+ assertXPath(pXmlDoc, "/root/page[1]/body/txt", 1);
+ assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text", 1);
+ assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text[1]", "nType", "PortionType::Para");
+ assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text[1][@Portion]", 1);
+ assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text[1]", "nLength", "1");
+
+ assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Text[1]", "Portion", "A");
+}
+
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf136452)
+{
+ SwDoc* const pDoc(createDoc("tdf136452.fodt"));
+
+ auto const nNodes(pDoc->GetNodes().Count());
+
+ SwWrtShell* const pWrtShell(pDoc->GetDocShell()->GetWrtShell());
+
+ // first deletion spanning 2 sections
+ pWrtShell->SttEndDoc(false);
+ pWrtShell->SetMark();
+ pWrtShell->Up(true, 2);
+ pWrtShell->Delete();
+
+ // 2 paragraphs deleted, last section is gone
+ CPPUNIT_ASSERT_EQUAL(nNodes - 4, pDoc->GetNodes().Count());
+
+ // second deletion spanning 2 sections
+ pWrtShell->SetMark();
+ pWrtShell->Up(true, 3);
+ pWrtShell->Delete();
+
+ // 3 paragraphs deleted, 2nd section is gone
+ CPPUNIT_ASSERT_EQUAL(nNodes - 9, pDoc->GetNodes().Count());
+
+ pWrtShell->Undo();
+
+ // 2 paragraphs deleted, last section is gone
+ CPPUNIT_ASSERT_EQUAL(nNodes - 4, pDoc->GetNodes().Count());
+
+ // this crashed
+ pWrtShell->Undo();
+
+ CPPUNIT_ASSERT_EQUAL(nNodes, pDoc->GetNodes().Count());
+
+ pWrtShell->Redo();
+
+ // 2 paragraphs deleted, last section is gone
+ CPPUNIT_ASSERT_EQUAL(nNodes - 4, pDoc->GetNodes().Count());
+
+ pWrtShell->Redo();
+
+ // 3 paragraphs deleted, 2nd section is gone
+ CPPUNIT_ASSERT_EQUAL(nNodes - 9, pDoc->GetNodes().Count());
+}
+
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf137245)
+{
+ SwDoc* const pDoc(createDoc());
+ SwWrtShell* const pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ SwAutoCorrect corr(*SvxAutoCorrCfg::Get().GetAutoCorrect());
+ corr.GetSwFlags().bSetBorder = true;
+ // sigh, it's a global... err i mean Singleton design pattern *eyeroll*
+ SvxSwAutoFormatFlags flags(*SwEditShell::GetAutoFormatFlags());
+ comphelper::ScopeGuard const g([=]() { SwEditShell::SetAutoFormatFlags(&flags); });
+ flags.bSetBorder = true;
+ SwEditShell::SetAutoFormatFlags(&flags);
+
+ {
+ SwFormatAnchor anchor(RndStdIds::FLY_AT_PARA);
+ anchor.SetAnchor(pWrtShell->GetCursor()->GetPoint());
+ SfxItemSet flySet(pDoc->GetAttrPool(),
+ svl::Items<RES_FRM_SIZE, RES_FRM_SIZE, RES_ANCHOR, RES_ANCHOR>{});
+ flySet.Put(anchor);
+ SwFormatFrameSize size(ATT_MIN_SIZE, 1000, 1000);
+ flySet.Put(size); // set a size, else we get 1 char per line...
+ SwFrameFormat const* pFly = pWrtShell->NewFlyFrame(flySet, /*bAnchValid=*/true);
+ CPPUNIT_ASSERT(pFly != nullptr);
+ }
+ {
+ SwFormatAnchor anchor(RndStdIds::FLY_AT_CHAR);
+ anchor.SetAnchor(pWrtShell->GetCursor()->GetPoint());
+ SfxItemSet flySet(pDoc->GetAttrPool(),
+ svl::Items<RES_FRM_SIZE, RES_FRM_SIZE, RES_ANCHOR, RES_ANCHOR>{});
+ flySet.Put(anchor);
+ SwFormatFrameSize size(ATT_MIN_SIZE, 1000, 1000);
+ flySet.Put(size); // set a size, else we get 1 char per line...
+ SwFrameFormat const* pFly = pWrtShell->NewFlyFrame(flySet, /*bAnchValid=*/true);
+ CPPUNIT_ASSERT(pFly != nullptr);
+ }
+ // move cursor back to body
+ pWrtShell->SttEndDoc(false);
+ // keep first paragraph empty so that its flys may be deleted too
+ //pWrtShell->Insert("abc");
+ pWrtShell->SplitNode(false);
+
+ {
+ SwFormatAnchor anchor(RndStdIds::FLY_AT_PARA);
+ anchor.SetAnchor(pWrtShell->GetCursor()->GetPoint());
+ SfxItemSet flySet(pDoc->GetAttrPool(),
+ svl::Items<RES_FRM_SIZE, RES_FRM_SIZE, RES_ANCHOR, RES_ANCHOR>{});
+ flySet.Put(anchor);
+ SwFormatFrameSize size(ATT_MIN_SIZE, 1000, 1000);
+ flySet.Put(size); // set a size, else we get 1 char per line...
+ SwFrameFormat const* pFly = pWrtShell->NewFlyFrame(flySet, /*bAnchValid=*/true);
+ CPPUNIT_ASSERT(pFly != nullptr);
+ }
+ {
+ SwFormatAnchor anchor(RndStdIds::FLY_AT_CHAR);
+ anchor.SetAnchor(pWrtShell->GetCursor()->GetPoint());
+ SfxItemSet flySet(pDoc->GetAttrPool(),
+ svl::Items<RES_FRM_SIZE, RES_FRM_SIZE, RES_ANCHOR, RES_ANCHOR>{});
+ flySet.Put(anchor);
+ SwFormatFrameSize size(ATT_MIN_SIZE, 1000, 1000);
+ flySet.Put(size); // set a size, else we get 1 char per line...
+ SwFrameFormat const* pFly = pWrtShell->NewFlyFrame(flySet, /*bAnchValid=*/true);
+ CPPUNIT_ASSERT(pFly != nullptr);
+ }
+
+ const SwFrameFormats& rFormats = *pDoc->GetSpzFrameFormats();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(4), rFormats.size());
+
+ // move cursor back to body
+ pWrtShell->SttEndDoc(false);
+ pWrtShell->Insert("---");
+ pWrtShell->SplitNode(true);
+
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(4), rFormats.size());
+
+ // check that the AutoFormat did something
+ pWrtShell->SttEndDoc(true);
+ SfxItemSet set{ pDoc->GetAttrPool(), svl::Items<RES_BOX, RES_BOX>{} };
+ pWrtShell->GetCurParAttr(set);
+ CPPUNIT_ASSERT_EQUAL(SfxItemState::SET, set.GetItemState(RES_BOX, false));
+}
+
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf139922)
+{
+ SwDoc* const pDoc = createDoc();
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+
+ pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_RETURN);
+ Scheduler::ProcessEventsToIdle();
+
+ SwWrtShell* const pWrtSh = pDoc->GetDocShell()->GetWrtShell();
+ CPPUNIT_ASSERT(pWrtSh);
+
+ pWrtSh->Insert("this _is_ a SEntence. this _is_ a SEntence.");
+
+ CPPUNIT_ASSERT_EQUAL(OUString("this _is_ a SEntence. this _is_ a SEntence."),
+ getParagraph(2)->getString());
+
+ //apply autocorrect StartAutoCorrect
+ lcl_dispatchCommand(mxComponent, ".uno:AutoFormatApply", {});
+ Scheduler::ProcessEventsToIdle();
+
+ // Without the fix in place, this test would have failed with
+ // - Expected: This is a Sentence. This is a Sentence.
+ // - Actual : this is a Sentence. This is a Sentence.
+ CPPUNIT_ASSERT_EQUAL(OUString("This is a Sentence. This is a Sentence."),
+ getParagraph(2)->getString());
+}
+
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf135061)
+{
+ createDoc("tdf135061.odt");
+
+ uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xIndexAccess(xTextTablesSupplier->getTextTables(),
+ uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
+ CPPUNIT_ASSERT_EQUAL(4, getShapes());
+
+ lcl_dispatchCommand(mxComponent, ".uno:SelectAll", {});
+ Scheduler::ProcessEventsToIdle();
+
+ lcl_dispatchCommand(mxComponent, ".uno:Copy", {});
+ Scheduler::ProcessEventsToIdle();
+
+ for (sal_Int32 i = 0; i < 5; ++i)
+ {
+ lcl_dispatchCommand(mxComponent, ".uno:Paste", {});
+ Scheduler::ProcessEventsToIdle();
+ }
+
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(6), xIndexAccess->getCount());
+ CPPUNIT_ASSERT_EQUAL(20, getShapes());
+
+ for (sal_Int32 i = 0; i < 5; ++i)
+ {
+ // Without the fix in place, this test would have crashed here
+ lcl_dispatchCommand(mxComponent, ".uno:Undo", {});
+ Scheduler::ProcessEventsToIdle();
+ }
+
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
+ CPPUNIT_ASSERT_EQUAL(4, getShapes());
+}
+
CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf132236)
{
load(DATA_DIRECTORY, "tdf132236.odt");
@@ -518,6 +839,238 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf131912)
CPPUNIT_ASSERT_EQUAL(OUString("foo"), pWrtShell->GetCursor()->GetText());
}
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf140007)
+{
+ typedef sal_uLong SwNodeOffset;
+ SwDoc* const pDoc = createDoc();
+ SwWrtShell* const pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+
+ pWrtShell->Insert("foo");
+ pWrtShell->SplitNode();
+ pWrtShell->Insert("bar");
+ pWrtShell->SplitNode();
+ pWrtShell->Insert("baz");
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(13), pDoc->GetNodes().Count());
+ CPPUNIT_ASSERT_EQUAL(OUString("foo"),
+ pDoc->GetNodes()[SwNodeOffset(9)]->GetTextNode()->GetText());
+ CPPUNIT_ASSERT_EQUAL(OUString("bar"),
+ pDoc->GetNodes()[SwNodeOffset(10)]->GetTextNode()->GetText());
+ CPPUNIT_ASSERT_EQUAL(OUString("baz"),
+ pDoc->GetNodes()[SwNodeOffset(11)]->GetTextNode()->GetText());
+
+ pWrtShell->SttEndDoc(true);
+ pWrtShell->EndPara(false);
+ pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/true, 1, /*bBasicCall=*/false);
+ pWrtShell->Replace(" ", true);
+ CPPUNIT_ASSERT_EQUAL(SwNodeOffset(12), pDoc->GetNodes().Count());
+ CPPUNIT_ASSERT_EQUAL(OUString("foo bar"),
+ pDoc->GetNodes()[SwNodeOffset(9)]->GetTextNode()->GetText());
+ CPPUNIT_ASSERT_EQUAL(OUString("baz"),
+ pDoc->GetNodes()[SwNodeOffset(10)]->GetTextNode()->GetText());
+
+ pWrtShell->SttEndDoc(true);
+ pWrtShell->EndPara(false);
+ pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/true, 1, /*bBasicCall=*/false);
+ pWrtShell->Replace(" ", true);
+ CPPUNIT_ASSERT_EQUAL(OUString("foo bar baz"),
+ pDoc->GetNodes()[SwNodeOffset(9)]->GetTextNode()->GetText());
+ CPPUNIT_ASSERT_EQUAL(SwNodeOffset(11), pDoc->GetNodes().Count());
+
+ pWrtShell->Undo();
+
+ CPPUNIT_ASSERT_EQUAL(SwNodeOffset(12), pDoc->GetNodes().Count());
+ CPPUNIT_ASSERT_EQUAL(OUString("foo bar"),
+ pDoc->GetNodes()[SwNodeOffset(9)]->GetTextNode()->GetText());
+ CPPUNIT_ASSERT_EQUAL(OUString("baz"),
+ pDoc->GetNodes()[SwNodeOffset(10)]->GetTextNode()->GetText());
+
+ pWrtShell->Undo();
+
+ CPPUNIT_ASSERT_EQUAL(SwNodeOffset(13), pDoc->GetNodes().Count());
+ CPPUNIT_ASSERT_EQUAL(OUString("foo"),
+ pDoc->GetNodes()[SwNodeOffset(9)]->GetTextNode()->GetText());
+ CPPUNIT_ASSERT_EQUAL(OUString("bar"),
+ pDoc->GetNodes()[SwNodeOffset(10)]->GetTextNode()->GetText());
+ CPPUNIT_ASSERT_EQUAL(OUString("baz"),
+ pDoc->GetNodes()[SwNodeOffset(11)]->GetTextNode()->GetText());
+
+ pWrtShell->Redo();
+
+ CPPUNIT_ASSERT_EQUAL(SwNodeOffset(12), pDoc->GetNodes().Count());
+ CPPUNIT_ASSERT_EQUAL(OUString("foo bar"),
+ pDoc->GetNodes()[SwNodeOffset(9)]->GetTextNode()->GetText());
+ CPPUNIT_ASSERT_EQUAL(OUString("baz"),
+ pDoc->GetNodes()[SwNodeOffset(10)]->GetTextNode()->GetText());
+
+ pWrtShell->Redo();
+
+ CPPUNIT_ASSERT_EQUAL(OUString("foo bar baz"),
+ pDoc->GetNodes()[SwNodeOffset(9)]->GetTextNode()->GetText());
+ CPPUNIT_ASSERT_EQUAL(SwNodeOffset(11), pDoc->GetNodes().Count());
+
+ pWrtShell->Undo();
+
+ CPPUNIT_ASSERT_EQUAL(SwNodeOffset(12), pDoc->GetNodes().Count());
+ CPPUNIT_ASSERT_EQUAL(OUString("foo bar"),
+ pDoc->GetNodes()[SwNodeOffset(9)]->GetTextNode()->GetText());
+ CPPUNIT_ASSERT_EQUAL(OUString("baz"),
+ pDoc->GetNodes()[SwNodeOffset(10)]->GetTextNode()->GetText());
+
+ pWrtShell->Undo();
+
+ CPPUNIT_ASSERT_EQUAL(SwNodeOffset(13), pDoc->GetNodes().Count());
+ CPPUNIT_ASSERT_EQUAL(OUString("foo"),
+ pDoc->GetNodes()[SwNodeOffset(9)]->GetTextNode()->GetText());
+ CPPUNIT_ASSERT_EQUAL(OUString("bar"),
+ pDoc->GetNodes()[SwNodeOffset(10)]->GetTextNode()->GetText());
+ CPPUNIT_ASSERT_EQUAL(OUString("baz"),
+ pDoc->GetNodes()[SwNodeOffset(11)]->GetTextNode()->GetText());
+}
+
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf139982)
+{
+ SwDoc* const pDoc = createDoc();
+ SwWrtShell* const pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+
+ // turn on redlining and show changes
+ pDoc->getIDocumentRedlineAccess().SetRedlineFlags(RedlineFlags::On | RedlineFlags::ShowDelete
+ | RedlineFlags::ShowInsert);
+ CPPUNIT_ASSERT_MESSAGE("redlining should be on",
+ pDoc->getIDocumentRedlineAccess().IsRedlineOn());
+ CPPUNIT_ASSERT_MESSAGE(
+ "redlines should be visible",
+ IDocumentRedlineAccess::IsShowChanges(pDoc->getIDocumentRedlineAccess().GetRedlineFlags()));
+
+ pWrtShell->Insert("helloo");
+
+ pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/false, 1, /*bBasicCall=*/false);
+ {
+ SwFormatAnchor anchor(RndStdIds::FLY_AT_CHAR);
+ anchor.SetAnchor(pWrtShell->GetCursor()->GetPoint());
+ SfxItemSet flySet(pDoc->GetAttrPool(), svl::Items<RES_ANCHOR, RES_ANCHOR>{});
+ flySet.Put(anchor);
+ SwFrameFormat const* pFly = pWrtShell->NewFlyFrame(flySet, /*bAnchValid=*/true);
+ CPPUNIT_ASSERT(pFly != nullptr);
+ }
+
+ pWrtShell->SttEndDoc(true);
+ pWrtShell->EndPara(/*bSelect=*/true);
+
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pWrtShell->GetFlyCount(FLYCNTTYPE_FRM));
+
+ pWrtShell->Replace("hello", true);
+
+ // the problem was that a redline delete with the same author as redline
+ // insert has its text deleted immediately, including anchored flys.
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pWrtShell->GetFlyCount(FLYCNTTYPE_FRM));
+
+ pWrtShell->Undo();
+
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pWrtShell->GetFlyCount(FLYCNTTYPE_FRM));
+
+ pWrtShell->Redo();
+
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pWrtShell->GetFlyCount(FLYCNTTYPE_FRM));
+
+ pWrtShell->Undo();
+
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pWrtShell->GetFlyCount(FLYCNTTYPE_FRM));
+}
+
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf135976)
+{
+ SwDoc* const pDoc = createDoc();
+ SwWrtShell* const pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+
+ pWrtShell->Insert("foobar");
+
+ pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/false, 2, /*bBasicCall=*/false);
+ SwFormatAnchor anchor(RndStdIds::FLY_AT_CHAR);
+ anchor.SetAnchor(pWrtShell->GetCursor()->GetPoint());
+ SfxItemSet flySet(pDoc->GetAttrPool(), svl::Items<RES_ANCHOR, RES_ANCHOR>{});
+ flySet.Put(anchor);
+ SwFrameFormat const* pFly = pWrtShell->NewFlyFrame(flySet, /*bAnchValid=*/true);
+ CPPUNIT_ASSERT(pFly != nullptr);
+
+ // turn on redlining and show changes
+ pDoc->getIDocumentRedlineAccess().SetRedlineFlags(RedlineFlags::On | RedlineFlags::ShowDelete
+ | RedlineFlags::ShowInsert);
+ lcl_dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {});
+ CPPUNIT_ASSERT_MESSAGE("redlining should be on",
+ pDoc->getIDocumentRedlineAccess().IsRedlineOn());
+ CPPUNIT_ASSERT_MESSAGE(
+ "redlines should be visible",
+ IDocumentRedlineAccess::IsShowChanges(pDoc->getIDocumentRedlineAccess().GetRedlineFlags()));
+ CPPUNIT_ASSERT(pWrtShell->GetLayout()->IsHideRedlines());
+
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pWrtShell->GetFlyCount(FLYCNTTYPE_FRM));
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pWrtShell->GetLayout()->GetLastPage()->GetSortedObjs()->size());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(4), pFly->GetAnchor().GetContentAnchor()->nContent.GetIndex());
+
+ pWrtShell->UnSelectFrame();
+ pWrtShell->SttEndDoc(/*bStart=*/false);
+ pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/false, 1, /*bBasicCall=*/false);
+
+ pWrtShell->DelLeft();
+ pWrtShell->DelLeft();
+
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pWrtShell->GetFlyCount(FLYCNTTYPE_FRM));
+ // the problem was that the fly was deleted from the layout
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pWrtShell->GetLayout()->GetLastPage()->GetSortedObjs()->size());
+ // check that the anchor was moved outside the redline
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3), pFly->GetAnchor().GetContentAnchor()->nContent.GetIndex());
+
+ pWrtShell->Undo(2);
+
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pWrtShell->GetFlyCount(FLYCNTTYPE_FRM));
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pWrtShell->GetLayout()->GetLastPage()->GetSortedObjs()->size());
+ // check that the anchor was restored
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(4), pFly->GetAnchor().GetContentAnchor()->nContent.GetIndex());
+
+ pWrtShell->Redo(2);
+
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pWrtShell->GetFlyCount(FLYCNTTYPE_FRM));
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pWrtShell->GetLayout()->GetLastPage()->GetSortedObjs()->size());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3), pFly->GetAnchor().GetContentAnchor()->nContent.GetIndex());
+
+ pWrtShell->Undo(2);
+
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pWrtShell->GetFlyCount(FLYCNTTYPE_FRM));
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pWrtShell->GetLayout()->GetLastPage()->GetSortedObjs()->size());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(4), pFly->GetAnchor().GetContentAnchor()->nContent.GetIndex());
+
+ // now again in the other direction:
+
+ pWrtShell->SttEndDoc(/*bStart=*/false);
+ pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/false, 3, /*bBasicCall=*/false);
+
+ pWrtShell->DelRight();
+ pWrtShell->DelRight();
+
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pWrtShell->GetFlyCount(FLYCNTTYPE_FRM));
+ // the problem was that the fly was deleted from the layout
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pWrtShell->GetLayout()->GetLastPage()->GetSortedObjs()->size());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), pFly->GetAnchor().GetContentAnchor()->nContent.GetIndex());
+
+ pWrtShell->Undo(2);
+
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pWrtShell->GetFlyCount(FLYCNTTYPE_FRM));
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pWrtShell->GetLayout()->GetLastPage()->GetSortedObjs()->size());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(4), pFly->GetAnchor().GetContentAnchor()->nContent.GetIndex());
+
+ pWrtShell->Redo(2);
+
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pWrtShell->GetFlyCount(FLYCNTTYPE_FRM));
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pWrtShell->GetLayout()->GetLastPage()->GetSortedObjs()->size());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), pFly->GetAnchor().GetContentAnchor()->nContent.GetIndex());
+
+ pWrtShell->Undo(2);
+
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pWrtShell->GetFlyCount(FLYCNTTYPE_FRM));
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pWrtShell->GetLayout()->GetLastPage()->GetSortedObjs()->size());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(4), pFly->GetAnchor().GetContentAnchor()->nContent.GetIndex());
+}
+
CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf54819)
{
load(DATA_DIRECTORY, "tdf54819.fodt");
@@ -638,6 +1191,38 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf54819_keep_numbering_with_Undo)
CPPUNIT_ASSERT_MESSAGE("Not a bulleted list item", sNumName != "Outline");
}
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf141175)
+{
+ createDoc("tdf141175.odt");
+
+ uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xIndexAccess(xTextTablesSupplier->getTextTables(),
+ uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
+ CPPUNIT_ASSERT_EQUAL(1, getPages());
+
+ //Use selectAll 3 times in a row
+ lcl_dispatchCommand(mxComponent, ".uno:SelectAll", {});
+ lcl_dispatchCommand(mxComponent, ".uno:SelectAll", {});
+ lcl_dispatchCommand(mxComponent, ".uno:SelectAll", {});
+ Scheduler::ProcessEventsToIdle();
+
+ //Without the fix in place, this test would have crashed here
+ lcl_dispatchCommand(mxComponent, ".uno:Cut", {});
+ Scheduler::ProcessEventsToIdle();
+
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
+ CPPUNIT_ASSERT_EQUAL(1, getPages());
+
+ lcl_dispatchCommand(mxComponent, ".uno:Paste", {});
+ Scheduler::ProcessEventsToIdle();
+
+ // the paste now takes a different path, where it doesn't insert a neseted
+ // table but instead merges the source table cells into the target table cells
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
+ CPPUNIT_ASSERT_EQUAL(1, getPages());
+}
+
CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf119571_keep_numbering_with_Undo)
{
// as the previous test, but with partial paragraph deletion:
@@ -838,6 +1423,44 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf119571_keep_numbering_with_Reject)
CPPUNIT_ASSERT_MESSAGE("Bad numbering", sNumName.isEmpty());
}
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf140077)
+{
+ SwDoc* const pDoc = createDoc();
+
+ SwWrtShell* const pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+
+ // hide
+ lcl_dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {});
+
+ pWrtShell->Insert("a");
+ pWrtShell->SplitNode();
+ pWrtShell->Insert("b");
+ pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/false, 1, /*bBasicCall=*/false);
+ pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/true, 1, /*bBasicCall=*/false);
+ // enable
+ lcl_dispatchCommand(mxComponent, ".uno:TrackChanges", {});
+
+ CPPUNIT_ASSERT_MESSAGE("redlining should be on",
+ pDoc->getIDocumentRedlineAccess().IsRedlineOn());
+ CPPUNIT_ASSERT_MESSAGE(
+ "redlines should be visible",
+ IDocumentRedlineAccess::IsShowChanges(pDoc->getIDocumentRedlineAccess().GetRedlineFlags()));
+ CPPUNIT_ASSERT(pWrtShell->GetLayout()->IsHideRedlines());
+
+ pWrtShell->Delete();
+ pWrtShell->SttEndDoc(/*bStart=*/false);
+ pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/false, 1, /*bBasicCall=*/false);
+ lcl_dispatchCommand(mxComponent, ".uno:TrackChanges", {});
+
+ // crashed in layout
+ pWrtShell->SplitNode();
+
+ pWrtShell->Undo();
+ pWrtShell->Redo();
+ pWrtShell->Undo();
+ pWrtShell->Redo();
+}
+
CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf109376_redline)
{
SwDoc* pDoc = createDoc();
@@ -936,6 +1559,82 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf109376)
CPPUNIT_ASSERT_EQUAL(size_t(1), pWrtShell->GetFlyCount(FLYCNTTYPE_FRM));
}
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf147414)
+{
+ SwDoc* const pDoc(createDoc());
+ SwWrtShell* const pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ SwAutoCorrect corr(*SvxAutoCorrCfg::Get().GetAutoCorrect());
+
+ pWrtShell->Insert("Abc");
+
+ // hide and enable
+ lcl_dispatchCommand(mxComponent, ".uno:ShowTrackedChanges", {});
+ lcl_dispatchCommand(mxComponent, ".uno:TrackChanges", {});
+
+ CPPUNIT_ASSERT(pDoc->getIDocumentRedlineAccess().IsRedlineOn());
+ CPPUNIT_ASSERT(
+ IDocumentRedlineAccess::IsShowChanges(pDoc->getIDocumentRedlineAccess().GetRedlineFlags()));
+ CPPUNIT_ASSERT(pWrtShell->GetLayout()->IsHideRedlines());
+
+ pWrtShell->Left(CRSR_SKIP_CHARS, /*bSelect=*/false, 1, /*bBasicCall=*/false);
+ // backspace
+ pWrtShell->DelLeft();
+ pWrtShell->AutoCorrect(corr, u' ');
+
+ // problem was this was 1 i.e. before the deleted "b" while " " was inserted after
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3),
+ pWrtShell->getShellCursor(false)->GetPoint()->nContent.GetIndex());
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("Ab c"),
+ pWrtShell->getShellCursor(false)->GetPoint()->nNode.GetNode().GetTextNode()->GetText());
+}
+
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf147310)
+{
+ SwDoc* pDoc = createDoc();
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ CPPUNIT_ASSERT(pWrtShell);
+
+ // somehow bug happens only with 2 tables
+ SwInsertTableOptions tableOpt(SwInsertTableFlags::DefaultBorder, 0);
+ pWrtShell->InsertTable(tableOpt, 1, 1);
+ pWrtShell->InsertTable(tableOpt, 1, 1);
+
+ pWrtShell->SttEndDoc(/*bStart=*/true);
+
+ pWrtShell->DeleteRow(false);
+ pWrtShell->DeleteRow(false);
+
+ {
+ xmlDocPtr pXmlDoc = parseLayoutDump();
+ assertXPath(pXmlDoc, "/root/page/body/tab", 0);
+ discardDumpedLayout();
+ }
+ pWrtShell->Undo();
+ // this did not create frames for the table
+ pWrtShell->Undo();
+ {
+ xmlDocPtr pXmlDoc = parseLayoutDump();
+ // there are 2 tables
+ assertXPath(pXmlDoc, "/root/page/body/tab", 2);
+ discardDumpedLayout();
+ }
+ pWrtShell->Redo();
+ pWrtShell->Redo();
+ {
+ xmlDocPtr pXmlDoc = parseLayoutDump();
+ assertXPath(pXmlDoc, "/root/page/body/tab", 0);
+ discardDumpedLayout();
+ }
+ pWrtShell->Undo();
+ pWrtShell->Undo();
+ {
+ xmlDocPtr pXmlDoc = parseLayoutDump();
+ // there are 2 tables
+ assertXPath(pXmlDoc, "/root/page/body/tab", 2);
+ }
+}
+
CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf64242_optimizeTable)
{
SwDoc* pDoc = createDoc("tdf64242_optimizeTable.odt");
@@ -1779,7 +2478,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testMixedFormFieldInsertion)
CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf124261)
{
-#if !defined(WNT)
+#if !defined(WNT) && !defined(MACOSX)
// Make sure that pressing a key in a btlr cell frame causes an immediate, correct repaint.
SwDoc* pDoc = createDoc("tdf124261.docx");
SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
@@ -2681,4 +3380,5 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf129655)
xmlDocPtr pXmlDoc = parseLayoutDump();
assertXPath(pXmlDoc, "//fly/txt[@WritingMode='Vertical']", 1);
}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/extras/unowriter/data/tdf134252_onlytable_protected.fodt b/sw/qa/extras/unowriter/data/tdf134252_onlytable_protected.fodt
new file mode 100644
index 000000000000..f588fdba0515
--- /dev/null
+++ b/sw/qa/extras/unowriter/data/tdf134252_onlytable_protected.fodt
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<office:document xmlns:officeooo="http://openoffice.org/2009/office" xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rpt="http://openoffice.org/2005/report" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:xforms="http://www.w3.org/2002/xforms" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:font-face-decls>
+ <style:font-face style:name="Liberation Serif" svg:font-family="&apos;Liberation Serif&apos;" style:font-family-generic="roman" style:font-pitch="variable"/>
+ <style:font-face style:name="Lohit Devanagari" svg:font-family="&apos;Lohit Devanagari&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="Source Han Serif CN" svg:font-family="&apos;Source Han Serif CN&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+ <style:default-style style:family="graphic">
+ <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:flow-with-text="false"/>
+ <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:writing-mode="lr-tb" style:font-independent-line-spacing="false">
+ <style:tab-stops/>
+ </style:paragraph-properties>
+ <style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="de" fo:country="DE" style:letter-kerning="true" style:font-name-asian="Source Han Serif CN" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lohit Devanagari" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/>
+ </style:default-style>
+ <style:default-style style:family="paragraph">
+ <style:paragraph-properties fo:orphans="2" fo:widows="2" fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.251cm" style:writing-mode="page"/>
+ <style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="de" fo:country="DE" style:letter-kerning="true" style:font-name-asian="Source Han Serif CN" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lohit Devanagari" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" loext:hyphenation-no-caps="false"/>
+ </style:default-style>
+ <style:default-style style:family="table">
+ <style:table-properties table:border-model="collapsing"/>
+ </style:default-style>
+ <style:default-style style:family="table-row">
+ <style:table-row-properties fo:keep-together="auto"/>
+ </style:default-style>
+ <style:style style:name="Standard" style:family="paragraph" style:class="text"/>
+ <text:notes-configuration text:note-class="footnote" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/>
+ <text:notes-configuration text:note-class="endnote" style:num-format="i" text:start-value="0"/>
+ <text:linenumbering-configuration text:number-lines="false" text:offset="0.499cm" style:num-format="1" text:number-position="left" text:increment="5"/>
+ </office:styles>
+ <office:automatic-styles>
+ <style:style style:name="Table1" style:family="table">
+ <style:table-properties style:width="17cm" table:align="margins"/>
+ </style:style>
+ <style:style style:name="Table1.A" style:family="table-column">
+ <style:table-column-properties style:column-width="17cm" style:rel-column-width="65535*"/>
+ </style:style>
+ <style:style style:name="Table1.A1" style:family="table-cell">
+ <style:table-cell-properties fo:padding="0.097cm" fo:border="0.05pt solid #000000"/>
+ </style:style>
+ <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Standard">
+ <style:text-properties officeooo:rsid="00078615" officeooo:paragraph-rsid="00078615"/>
+ </style:style>
+ <style:style style:name="P3" style:family="paragraph" style:parent-style-name="Table_20_Contents">
+ <style:text-properties officeooo:rsid="00095b34" officeooo:paragraph-rsid="00095b34"/>
+ </style:style>
+ <style:style style:name="Sect1" style:family="section">
+ <style:section-properties fo:background-color="#81d41a" style:editable="false">
+ <style:columns fo:column-count="1" fo:column-gap="0cm"/>
+ <style:background-image/>
+ </style:section-properties>
+ </style:style>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="20" style:layout-grid-base-height="0.706cm" style:layout-grid-ruby-height="0.353cm" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="false" style:layout-grid-display="false" style:footnote-max-height="0cm">
+ <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style/>
+ </style:page-layout>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:page-layout-name="pm1"/>
+ </office:master-styles>
+ <office:body>
+ <office:text>
+ <text:sequence-decls>
+ <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Table"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Text"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Figure"/>
+ </text:sequence-decls>
+ <text:section text:style-name="Sect1" text:name="Section1">
+ <table:table table:name="Table1" table:style-name="Table1">
+ <table:table-column table:style-name="Table1.A"/>
+ <table:table-row>
+ <table:table-cell table:style-name="Table1.A1" office:value-type="string" table:protected="true">
+ <text:p text:style-name="P3">baz</text:p>
+ </table:table-cell>
+ </table:table-row>
+ </table:table>
+ </text:section>
+ <text:p text:style-name="P1">foo</text:p>
+ </office:text>
+ </office:body>
+</office:document>
diff --git a/sw/qa/extras/unowriter/unowriter.cxx b/sw/qa/extras/unowriter/unowriter.cxx
index a265bb29e728..a935128bac23 100644
--- a/sw/qa/extras/unowriter/unowriter.cxx
+++ b/sw/qa/extras/unowriter/unowriter.cxx
@@ -9,6 +9,7 @@
#include <swmodeltestbase.hxx>
#include <com/sun/star/awt/FontSlant.hpp>
+//#include <com/sun/star/datatransfer/XTransferableTextSupplier.hpp>
#include <com/sun/star/table/XCellRange.hpp>
#include <com/sun/star/text/TextContentAnchorType.hpp>
#include <com/sun/star/text/AutoTextContainer.hpp>
@@ -358,6 +359,67 @@ CPPUNIT_TEST_FIXTURE(SwUnoWriter, testXAutoTextGroup)
xAutoTextContainer->removeByName(sGroupName);
}
+#if 0
+CPPUNIT_TEST_FIXTURE(SwUnoWriter, testSectionAnchorCopyTable)
+{
+ // this contains a section that ends with a table (plus another section)
+ load(DATA_DIRECTORY, "tdf134252_onlytable_protected.fodt");
+
+ uno::Reference<text::XTextTablesSupplier> const xTextTablesSupplier(mxComponent,
+ uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> const xTables(xTextTablesSupplier->getTextTables(),
+ uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount());
+
+ uno::Reference<text::XTextSectionsSupplier> const xTextSectionsSupplier(mxComponent,
+ uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> const xSections(
+ xTextSectionsSupplier->getTextSections(), uno::UNO_QUERY);
+
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xSections->getCount());
+
+ uno::Reference<text::XTextContent> const xSection(xSections->getByIndex(0), uno::UNO_QUERY);
+ uno::Reference<text::XTextRange> const xAnchor(xSection->getAnchor());
+ CPPUNIT_ASSERT_EQUAL(OUString("baz" SAL_NEWLINE_STRING), xAnchor->getString());
+
+ // copy the content of the section to a clipboard document
+ uno::Reference<datatransfer::XTransferableSupplier> const xTS(
+ uno::Reference<frame::XModel>(mxComponent, uno::UNO_QUERY_THROW)->getCurrentController(),
+ uno::UNO_QUERY);
+ uno::Reference<datatransfer::XTransferableTextSupplier> const xTTS(xTS, uno::UNO_QUERY);
+ uno::Reference<datatransfer::XTransferable> const xTransferable(
+ xTTS->getTransferableForTextRange(xAnchor));
+
+ // check this doesn't throw
+ CPPUNIT_ASSERT(xAnchor->getStart().is());
+ CPPUNIT_ASSERT(xAnchor->getEnd().is());
+
+ // replace section content
+ xAnchor->setString("quux");
+
+ // table in section was deleted, but not section itself
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), xTables->getCount());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xSections->getCount());
+ CPPUNIT_ASSERT_EQUAL(OUString("\""
+ "quux" /*SAL_NEWLINE_STRING*/ "\""),
+ OUString("\"" + xAnchor->getString() + "\""));
+
+ // now paste it
+ uno::Reference<text::XTextViewCursorSupplier> const xTVCS(xTS, uno::UNO_QUERY);
+ uno::Reference<text::XTextViewCursor> const xCursor(xTVCS->getViewCursor());
+ xCursor->gotoEnd(false);
+ xTS->insertTransferable(xTransferable);
+
+ // table in section was pasted, but not section itself
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xSections->getCount());
+ xCursor->gotoStart(true);
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("quux" SAL_NEWLINE_STRING "foo" SAL_NEWLINE_STRING "baz" SAL_NEWLINE_STRING),
+ xCursor->getString());
+}
+#endif
+
CPPUNIT_TEST_FIXTURE(SwUnoWriter, testXURI)
{
uno::Reference<uno::XComponentContext> xContext(::comphelper::getProcessComponentContext());
@@ -737,6 +799,39 @@ CPPUNIT_TEST_FIXTURE(SwUnoWriter, testImageCommentAtChar)
}
}
+CPPUNIT_TEST_FIXTURE(SwUnoWriter, testChapterNumberingCharStyle)
+{
+ loadURL("private:factory/swriter", nullptr);
+
+ uno::Reference<lang::XMultiServiceFactory> xDoc(mxComponent, uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xStyle(
+ xDoc->createInstance("com.sun.star.style.CharacterStyle"), uno::UNO_QUERY);
+ uno::Reference<container::XNamed> xStyleN(xStyle, uno::UNO_QUERY);
+ xStyle->setPropertyValue("CharColor", uno::makeAny(sal_Int32(0x00FF0000)));
+ uno::Reference<style::XStyleFamiliesSupplier> xSFS(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XNameContainer> xStyles(
+ xSFS->getStyleFamilies()->getByName("CharacterStyles"), uno::UNO_QUERY);
+ xStyles->insertByName("red", uno::makeAny(xStyle));
+
+ uno::Reference<text::XChapterNumberingSupplier> xCNS(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexReplace> xOutline(xCNS->getChapterNumberingRules());
+ {
+ comphelper::SequenceAsHashMap hashMap(xOutline->getByIndex(0));
+ hashMap["CharStyleName"] <<= OUString("red");
+ uno::Sequence<beans::PropertyValue> props;
+ hashMap >> props;
+ xOutline->replaceByIndex(0, uno::makeAny(props));
+ }
+ // now rename the style
+ xStyleN->setName("reddishred");
+ {
+ comphelper::SequenceAsHashMap hashMap(xOutline->getByIndex(0));
+
+ // tdf#137810 this failed, was old value "red"
+ CPPUNIT_ASSERT_EQUAL(OUString("reddishred"), hashMap["CharStyleName"].get<OUString>());
+ }
+}
+
CPPUNIT_TEST_FIXTURE(SwUnoWriter, testViewCursorPageStyle)
{
// Load a document with 2 pages, but a single paragraph.
diff --git a/sw/qa/extras/ww8export/data/tdf138302_restartNumbering.odt b/sw/qa/extras/ww8export/data/tdf138302_restartNumbering.odt
new file mode 100644
index 000000000000..8c99963616a7
--- /dev/null
+++ b/sw/qa/extras/ww8export/data/tdf138302_restartNumbering.odt
Binary files differ
diff --git a/sw/qa/extras/ww8export/ww8export3.cxx b/sw/qa/extras/ww8export/ww8export3.cxx
index 9c83b6f62fa9..6b39ac200c3b 100644
--- a/sw/qa/extras/ww8export/ww8export3.cxx
+++ b/sw/qa/extras/ww8export/ww8export3.cxx
@@ -56,6 +56,12 @@ DECLARE_WW8EXPORT_TEST(testTdf37778_readonlySection, "tdf37778_readonlySection.d
CPPUNIT_ASSERT_EQUAL_MESSAGE("Last printed date", sal_Int16(2009), xDPS->getDocumentProperties()->getPrintDate().Year);
}
+DECLARE_WW8EXPORT_TEST(tesTdf138302_restartNumbering, "tdf138302_restartNumbering.odt")
+{
+ uno::Reference<beans::XPropertySet> xPara(getParagraph(8), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(OUString("1."), getProperty<OUString>(xPara, "ListLabelString"));
+}
+
DECLARE_WW8EXPORT_TEST(testTdf122429_header, "tdf122429_header.doc")
{
uno::Reference<container::XNameAccess> pageStyles = getStyles("PageStyles");
diff --git a/sw/qa/inc/swmodeltestbase.hxx b/sw/qa/inc/swmodeltestbase.hxx
index 38f8e95a4a40..6119365c6392 100644
--- a/sw/qa/inc/swmodeltestbase.hxx
+++ b/sw/qa/inc/swmodeltestbase.hxx
@@ -895,6 +895,14 @@ protected:
return xCursor->getPage();
}
+ /// Get shape count.
+ int getShapes() const
+ {
+ uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xDraws = xDrawPageSupplier->getDrawPage();
+ return xDraws->getCount();
+ }
+
/**
* Given that some problem doesn't affect the result in the importer, we
* test the resulting file directly, by opening the zip file, parsing an
diff --git a/sw/qa/python/check_xmodifiable2.py b/sw/qa/python/check_xmodifiable2.py
index 53082fc2865e..b860e1f31d0f 100644
--- a/sw/qa/python/check_xmodifiable2.py
+++ b/sw/qa/python/check_xmodifiable2.py
@@ -173,17 +173,16 @@ class XModifiable2(unittest.TestCase):
xDoc = self._uno.openTemplateFromTDOC('WriteProtected.odt')
# perform unit test:
- # it is unable to set modified flag using text editing
- # when modification of the flag was disabled as
+ # it is able to set modified flag using text editing despite
# ODT file was marked to be opened as read-only
- self.assertFalse(xDoc.isSetModifiedEnabled())
+ self.assertTrue(xDoc.isSetModifiedEnabled())
self.assertFalse(xDoc.isModified())
cursor = xDoc.Text.createTextCursor()
xDoc.Text.insertString(cursor, "The first paragraph", 0)
- self.assertFalse(xDoc.isSetModifiedEnabled())
- self.assertFalse(xDoc.isModified())
+ self.assertTrue(xDoc.isSetModifiedEnabled())
+ self.assertTrue(xDoc.isModified())
# clean up
xDoc.close(True)
diff --git a/sw/qa/uitest/data/tdf39721.fodt b/sw/qa/uitest/data/tdf39721.fodt
new file mode 100644
index 000000000000..1acf06c5e2a5
--- /dev/null
+++ b/sw/qa/uitest/data/tdf39721.fodt
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:officeooo="http://openoffice.org/2009/office" office:version="1.2" office:mimetype="application/vnd.oasis.opendocument.text" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <office:styles>
+ <style:style style:name="Standard" style:family="paragraph" style:class="text"/>
+ <style:default-style style:family="paragraph">
+ <style:text-properties fo:language="en" fo:country="US"/>
+ </style:default-style>
+ </office:styles>
+ <office:body>
+ <office:text>
+ <text:tracked-changes text:track-changes="false">
+ <text:changed-region xml:id="ct94454449144064" text:id="ct94454449144064">
+ <text:deletion>
+ <office:change-info>
+ <dc:creator>Unknown Author</dc:creator>
+ <dc:date>2021-01-06T16:18:57</dc:date>
+ </office:change-info>
+ </text:deletion>
+ </text:changed-region>
+ <text:changed-region xml:id="ct94454455394000" text:id="ct94454455394000">
+ <text:deletion>
+ <office:change-info>
+ <dc:creator>Unknown Author</dc:creator>
+ <dc:date>2021-01-06T16:20:17</dc:date>
+ </office:change-info>
+ </text:deletion>
+ </text:changed-region>
+ </text:tracked-changes>
+ <text:list xml:id="list627175737" text:style-name="L3">
+ <text:list-item>
+ <text:p text:style-name="P1">Lorem<text:change-start text:change-id="ct94454449144064"/> ipsu<text:change-end text:change-id="ct94454449144064"/>m</text:p>
+ </text:list-item>
+ <text:list-item>
+ <text:p text:style-name="P1">dol<text:change-start text:change-id="ct94454455394000"/>or <text:change-end text:change-id="ct94454455394000"/>sit</text:p>
+ </text:list-item>
+ <text:list-item>
+ <text:p text:style-name="P1">amet.</text:p>
+ </text:list-item>
+ </text:list>
+ </office:text>
+ </office:body>
+</office:document>
diff --git a/sw/qa/uitest/writer_tests2/bookmark.py b/sw/qa/uitest/writer_tests2/bookmark.py
index 9cbf82c29b41..4cf88ff9ab3c 100644
--- a/sw/qa/uitest/writer_tests2/bookmark.py
+++ b/sw/qa/uitest/writer_tests2/bookmark.py
@@ -136,4 +136,43 @@ class bookmarkDialog(UITestCase):
self.ui_test.close_doc()
+ def test_bookmark_dialog_edittext(self):
+ self.ui_test.create_doc_in_start_center("writer")
+ xDoc = self.ui_test.get_component()
+
+ xDoc.Text.insertString(xDoc.Text.getStart(), "foo", False)
+ self.xUITest.executeCommand(".uno:SelectAll")
+
+ self.ui_test.execute_dialog_through_command(".uno:InsertBookmark")
+ xBookDlg = self.xUITest.getTopFocusWindow()
+ xButton = xBookDlg.getChild("insert")
+ self.ui_test.close_dialog_through_button(xButton)
+
+ self.ui_test.execute_dialog_through_command(".uno:InsertBookmark")
+ xBookDlg = self.xUITest.getTopFocusWindow()
+
+ xBmk = xBookDlg.getChild("bookmarks")
+ xFirstListEntry = xBmk.getChild("0") # select first bookmark
+ xFirstListEntry.executeAction("SELECT", tuple())
+ xEditBtn = xBookDlg.getChild("edittext")
+
+ xEditBtn.executeAction('CLICK', ())
+
+ # this does not work - the Edit widget has the focus but it's not forwarded
+# xBookDlg.executeAction("TYPE", mkPropertyValues({"TEXT":"fubar"}))
+# xBookDlg.executeAction("TYPE", mkPropertyValues({"KEYCODE": "RETURN"}))
+ # this did not work previously but now works due to explicit
+ # forwarding in TreeListUIObject::execute()
+ xBmk.executeAction("TYPE", mkPropertyValues({"TEXT":"fubar"}))
+ xBmk.executeAction("TYPE", mkPropertyValues({"KEYCODE": "RETURN"}))
+
+ x1stListEntry = xBmk.getChild("O") # select first bookmark
+ x1stListEntry.executeAction("SELECT", tuple())
+
+ self.assertEqual(xDoc.Text.String, "fubar")
+ self.assertEqual(get_state_as_dict(x1stListEntry)["Text"], "1\tBookmark 1\tfubar\tNo\t")
+
+ xButton = xBookDlg.getChild("close")
+ self.ui_test.close_dialog_through_button(xButton)
+
# vim: set shiftwidth=4 softtabstop=4 expandtab:
diff --git a/sw/qa/uitest/writer_tests7/tdf130199.py b/sw/qa/uitest/writer_tests7/tdf130199.py
new file mode 100644
index 000000000000..8f9dde57b5af
--- /dev/null
+++ b/sw/qa/uitest/writer_tests7/tdf130199.py
@@ -0,0 +1,62 @@
+# -*- 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
+
+class tdf130199(UITestCase):
+
+ def test_tdf130199(self):
+
+ with self.ui_test.create_doc_in_start_center("writer") as document:
+
+ # Insert an empty para
+ self.xUITest.executeCommand(".uno:InsertPara")
+
+ # Insert an empty section
+ with self.ui_test.execute_dialog_through_command(".uno:InsertSection"):
+ pass
+
+ xWriterDoc = self.xUITest.getTopFocusWindow()
+ xWriterEdit = xWriterDoc.getChild("writer_edit")
+
+ # Insert an extra empty para in the section
+ xWriterEdit.executeAction("TYPE", mkPropertyValues({"KEYCODE": "UP"}))
+ self.xUITest.executeCommand(".uno:InsertPara")
+
+ self.assertEqual(1, len(document.TextSections))
+ self.assertTrue(document.TextSections.Section1.IsVisible)
+
+ with self.ui_test.execute_dialog_through_command(".uno:EditRegion") as xDialog:
+ xHide = xDialog.getChild('hide')
+ self.assertEqual('false', get_state_as_dict(xHide)['Selected'])
+
+ xHide.executeAction('CLICK', tuple())
+
+ self.assertFalse(document.TextSections.Section1.IsVisible)
+
+ # Select everything and do not delete the section
+ self.xUITest.executeCommand(".uno:SelectAll")
+
+ with self.ui_test.execute_dialog_through_command(".uno:Delete", close_button="no") as xDialog:
+ pass
+
+ self.assertEqual(1, len(document.TextSections))
+ self.assertFalse(document.TextSections.Section1.IsVisible)
+
+ # Select everything and delete the section
+ self.xUITest.executeCommand(".uno:SelectAll")
+
+ with self.ui_test.execute_dialog_through_command(".uno:Delete", close_button="yes") as xDialog:
+ pass
+
+ self.assertEqual(0, len(document.TextSections))
+
+
+# vim: set shiftwidth=4 softtabstop=4 expandtab:
diff --git a/sw/qa/uitest/writer_tests7/tdf145093.py b/sw/qa/uitest/writer_tests7/tdf145093.py
new file mode 100644
index 000000000000..c22510a619cc
--- /dev/null
+++ b/sw/qa/uitest/writer_tests7/tdf145093.py
@@ -0,0 +1,34 @@
+# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*-
+#
+# 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 select_pos
+from uitest.uihelper.common import type_text
+from uitest.uihelper.common import get_url_for_data_file
+
+class tdf145093(UITestCase):
+ def test_tdf145093(self):
+ # load the sample file
+ with self.ui_test.load_file(get_url_for_data_file("tdf39721.fodt")) as document:
+
+ # redlining should be on
+ self.xUITest.executeCommand(".uno:TrackChanges")
+
+ # Move Up/Down a list item over a tracked paragraph insertion resulted a crash
+ # (Note: not only at the end of the document, but check the original
+ # bug report temporarily, where the problem is triggered by an other problem).
+
+ self.xUITest.executeCommand(".uno:MoveDown")
+ self.xUITest.executeCommand(".uno:MoveDown")
+ # Note: Move list item from the end of the document creates an extra insertion.
+ # TODO: fix this other problem, and improve the test with an extra paragraph insertion
+ self.xUITest.executeCommand(".uno:MoveUp")
+
+ # This was a crash (using invalid pointer) both in Show Changes and Hide Changes modes
+ self.xUITest.executeCommand(".uno:MoveDown")
+
+# vim: set shiftwidth=4 softtabstop=4 expandtab:
diff --git a/sw/qa/unit/data/sw-dialogs-test.txt b/sw/qa/unit/data/sw-dialogs-test.txt
index 54fa2761b575..0af2679d739e 100644
--- a/sw/qa/unit/data/sw-dialogs-test.txt
+++ b/sw/qa/unit/data/sw-dialogs-test.txt
@@ -199,6 +199,7 @@ modules/swriter/ui/tokenwidget.ui
modules/swriter/ui/viewoptionspage.ui
modules/swriter/ui/warndatasourcedialog.ui
modules/swriter/ui/warnemaildialog.ui
+modules/swriter/ui/warnhiddensectiondialog.ui
modules/swriter/ui/wordcount.ui
modules/swriter/ui/wrapdialog.ui
modules/swriter/ui/wrappage.ui
diff --git a/sw/sdi/_textsh.sdi b/sw/sdi/_textsh.sdi
index a2bfa8e5bdf6..a1fdfda6e5da 100644
--- a/sw/sdi/_textsh.sdi
+++ b/sw/sdi/_textsh.sdi
@@ -140,6 +140,12 @@ interface BaseText
StateMethod = GetState ;
DisableFlags="SfxDisableFlags::SwOnProtectedCursor";
]
+ FN_EDIT_BOOKMARK
+ [
+ ExecMethod = Execute ;
+ StateMethod = GetState ;
+ DisableFlags="SfxDisableFlags::SwOnProtectedCursor";
+ ]
FN_DELETE_BOOKMARK // status(final|play)
[
ExecMethod = Execute ;
diff --git a/sw/sdi/swriter.sdi b/sw/sdi/swriter.sdi
index 5f8b5358309a..e2ed5432b8e3 100644
--- a/sw/sdi/swriter.sdi
+++ b/sw/sdi/swriter.sdi
@@ -2555,6 +2555,24 @@ SfxVoidItem InsertBookmark FN_INSERT_BOOKMARK
GroupId = SfxGroupId::Insert;
]
+SfxVoidItem EditBookmark FN_EDIT_BOOKMARK
+(SfxStringItem Bookmark FN_EDIT_BOOKMARK)
+[
+ AutoUpdate = FALSE,
+ FastCall = FALSE,
+ ReadOnlyDoc = FALSE,
+ Toggle = FALSE,
+ Container = FALSE,
+ RecordAbsolute = FALSE,
+ RecordPerSet;
+ Asynchron;
+
+ AccelConfig = TRUE,
+ MenuConfig = TRUE,
+ ToolBoxConfig = TRUE,
+ GroupId = SfxGroupId::Insert;
+]
+
SfxVoidItem InsertBreak FN_INSERT_BREAK_DLG
(SfxInt16Item Kind FN_INSERT_BREAK_DLG,SfxStringItem TemplateName FN_PARAM_1,SfxUInt16Item PageNumber FN_PARAM_2,SfxBoolItem PageNumberFilled FN_PARAM_3)
[
diff --git a/sw/source/core/attr/swatrset.cxx b/sw/source/core/attr/swatrset.cxx
index 7cd6303ecef1..55835c5d1c30 100644
--- a/sw/source/core/attr/swatrset.cxx
+++ b/sw/source/core/attr/swatrset.cxx
@@ -398,7 +398,8 @@ void SwAttrSet::CopyToModify( SwModify& rMod ) const
}
if (pSrcDoc != pDstDoc &&
- SfxItemState::SET == GetItemState(RES_PARATR_LIST_AUTOFMT, false, &pItem))
+ SfxItemState::SET == GetItemState(RES_PARATR_LIST_AUTOFMT, false, &pItem)
+ && static_cast<SwFormatAutoFormat const*>(pItem)->GetStyleHandle())
{
SfxItemSet const& rAutoStyle(*static_cast<SwFormatAutoFormat const&>(*pItem).GetStyleHandle());
std::shared_ptr<SfxItemSet> const pNewSet(
diff --git a/sw/source/core/bastyp/calc.cxx b/sw/source/core/bastyp/calc.cxx
index 19dd4e7751f0..dc9fb62973f7 100644
--- a/sw/source/core/bastyp/calc.cxx
+++ b/sw/source/core/bastyp/calc.cxx
@@ -140,7 +140,7 @@ const sal_Int32 coStartFlags =
// Continuing characters may be any alphanumeric, underscore, or dot.
const sal_Int32 coContFlags =
- ( coStartFlags | i18n::KParseTokens::ASC_DOT )
+ (coStartFlags | i18n::KParseTokens::ASC_DOT | i18n::KParseTokens::GROUP_SEPARATOR_IN_NUMBER)
& ~i18n::KParseTokens::IGNORE_LEADING_WS;
extern "C" {
diff --git a/sw/source/core/bastyp/index.cxx b/sw/source/core/bastyp/index.cxx
index 4f740948abff..cb7c05825274 100644
--- a/sw/source/core/bastyp/index.cxx
+++ b/sw/source/core/bastyp/index.cxx
@@ -229,12 +229,11 @@ SwIndexReg::~SwIndexReg()
void SwIndexReg::Update(
SwIndex const & rIdx,
const sal_Int32 nDiff,
- const bool bNeg,
- const bool /* argument is only used in derived class*/ )
+ UpdateMode const eMode)
{
SwIndex* pStt = const_cast<SwIndex*>(&rIdx);
const sal_Int32 nNewVal = rIdx.m_nIndex;
- if( bNeg )
+ if (eMode & UpdateMode::Negative)
{
const sal_Int32 nLast = rIdx.GetIndex() + nDiff;
while (pStt && pStt->m_nIndex == nNewVal)
diff --git a/sw/source/core/crsr/callnk.cxx b/sw/source/core/crsr/callnk.cxx
index 4d956e90e2c5..4f93f9b5d232 100644
--- a/sw/source/core/crsr/callnk.cxx
+++ b/sw/source/core/crsr/callnk.cxx
@@ -30,6 +30,7 @@
#include <ndtxt.hxx>
#include <flyfrm.hxx>
#include <breakit.hxx>
+#include <UndoTable.hxx>
SwCallLink::SwCallLink( SwCursorShell & rSh )
: rShell( rSh )
@@ -59,24 +60,36 @@ SwCallLink::SwCallLink( SwCursorShell & rSh )
}
}
-static void lcl_notifyRow(const SwContentNode* pNode, SwCursorShell & rShell)
+namespace sw {
+
+/**
+ An empty paragraph inside a table with a nested table preceding it
+ should be hidden, unless the cursor is positioned in the paragraph.
+
+ If the cursor is now (or was previously) inside such a paragraph,
+ send a size change notification on the row frame to force reformatting.
+ */
+void NotifyTableCollapsedParagraph(const SwContentNode *const pNode, SwCursorShell *const pShell)
{
if ( !pNode )
return;
- SwFrame *const pMyFrame = pNode->getLayoutFrame( rShell.GetLayout() );
+ SwFrame *const pMyFrame = pNode->getLayoutFrame(pShell ? pShell->GetLayout() : nullptr);
if ( !pMyFrame )
return;
- // We need to emulated a change of the row height in order
- // to have the complete row redrawn
+ // important: only invalidate layout if something is actually hidden or
+ // shown! Otherwise performance is going to suffer with "difficult" tables.
+ if (!pMyFrame->IsCollapse())
+ return;
+
SwRowFrame *const pRow = pMyFrame->FindRowFrame();
if ( !pRow )
return;
const SwTableLine* pLine = pRow->GetTabLine( );
- if (rShell.IsTableMode() || (rShell.StartsWithTable() && rShell.ExtendedSelectedAll()))
+ if (pShell && (pShell->IsTableMode() || (pShell->StartsWith_() != SwCursorShell::StartsWith::None && pShell->ExtendedSelectedAll())))
{
// If we have a table selection, then avoid the notification: it's not necessary (the text
// cursor needs no updating) and the notification may kill the selection overlay, leading to
@@ -85,10 +98,13 @@ static void lcl_notifyRow(const SwContentNode* pNode, SwCursorShell & rShell)
return;
}
+ // notify a change in frame size to force reformatting of the row
SwFormatFrameSize aSize = pLine->GetFrameFormat()->GetFrameSize();
pRow->ModifyNotification(nullptr, &aSize);
}
+} // namespace sw
+
SwCallLink::~SwCallLink() COVERITY_NOEXCEPT_FALSE
{
if( nNdTyp == SwNodeType::NONE || !rShell.m_bCallChgLnk ) // see ctor
@@ -101,15 +117,17 @@ SwCallLink::~SwCallLink() COVERITY_NOEXCEPT_FALSE
if( !pCNd )
return;
- lcl_notifyRow(pCNd, rShell);
-
- const SwDoc *pDoc=rShell.GetDoc();
- const SwContentNode *pNode = nullptr;
- if ( pDoc && nNode < pDoc->GetNodes( ).Count( ) )
+ if (pCNd->GetIndex() != nNode) // only if moved to different node
{
- pNode = pDoc->GetNodes()[nNode]->GetContentNode();
+ ::sw::NotifyTableCollapsedParagraph(pCNd, &rShell);
+
+ const SwDoc *pDoc=rShell.GetDoc();
+ if (nNode < pDoc->GetNodes().Count())
+ {
+ const SwContentNode *const pNode = pDoc->GetNodes()[nNode]->GetContentNode();
+ ::sw::NotifyTableCollapsedParagraph(pNode, &rShell);
+ }
}
- lcl_notifyRow(pNode, rShell);
sal_Int32 nCmp, nCurrentContent = pCurrentCursor->GetPoint()->nContent.GetIndex();
SwNodeType nNdWhich = pCNd->GetNodeType();
diff --git a/sw/source/core/crsr/crbm.cxx b/sw/source/core/crsr/crbm.cxx
index a9175808de85..b35b1329cbca 100644
--- a/sw/source/core/crsr/crbm.cxx
+++ b/sw/source/core/crsr/crbm.cxx
@@ -130,9 +130,14 @@ bool IsMarkHidden(SwRootFrame const& rLayout, ::sw::mark::IMark const& rMark)
{
return false;
}
- SwTextNode const& rNode(*rMark.GetMarkPos().nNode.GetNode().GetTextNode());
+ SwNode const& rNode(rMark.GetMarkPos().nNode.GetNode());
+ SwTextNode const*const pTextNode(rNode.GetTextNode());
+ if (pTextNode == nullptr)
+ { // UNO_BOOKMARK may point to table node
+ return rNode.GetRedlineMergeFlag() == SwNode::Merge::Hidden;
+ }
SwTextFrame const*const pFrame(static_cast<SwTextFrame const*>(
- rNode.getLayoutFrame(&rLayout)));
+ pTextNode->getLayoutFrame(&rLayout)));
if (!pFrame)
{
return true;
@@ -147,14 +152,14 @@ bool IsMarkHidden(SwRootFrame const& rLayout, ::sw::mark::IMark const& rMark)
}
else
{
- if (rMark.GetMarkPos().nContent.GetIndex() == rNode.Len())
+ if (rMark.GetMarkPos().nContent.GetIndex() == pTextNode->Len())
{ // at end of node: never deleted (except if node deleted)
- return rNode.GetRedlineMergeFlag() == SwNode::Merge::Hidden;
+ return pTextNode->GetRedlineMergeFlag() == SwNode::Merge::Hidden;
}
else
{ // check character following mark pos
return pFrame->MapModelToViewPos(rMark.GetMarkPos())
- == pFrame->MapModelToView(&rNode, rMark.GetMarkPos().nContent.GetIndex() + 1);
+ == pFrame->MapModelToView(pTextNode, rMark.GetMarkPos().nContent.GetIndex() + 1);
}
}
}
diff --git a/sw/source/core/crsr/crsrsh.cxx b/sw/source/core/crsr/crsrsh.cxx
index 7e0defb67ca0..85e9eb837017 100644
--- a/sw/source/core/crsr/crsrsh.cxx
+++ b/sw/source/core/crsr/crsrsh.cxx
@@ -120,6 +120,10 @@ SwPaM * SwCursorShell::CreateCursor()
// don't create new Cursor with active table Selection
assert(!IsTableMode());
+ // ensure that m_pCurrentCursor is valid; if it's invalid it would be
+ // copied to pNew and then pNew would be deleted in UpdateCursor() below
+ ClearUpCursors();
+
// New cursor as copy of current one. Add to the ring.
// Links point to previously created one, ie forward.
SwShellCursor* pNew = new SwShellCursor( *m_pCurrentCursor );
@@ -228,7 +232,7 @@ void SwCursorShell::StartAction()
void SwCursorShell::EndAction( const bool bIdleEnd, const bool DoSetPosX )
{
- comphelper::FlagRestorationGuard g(mbSelectAll, StartsWithTable() && ExtendedSelectedAll());
+ comphelper::FlagRestorationGuard g(mbSelectAll, StartsWith_() != StartsWith::None && ExtendedSelectedAll());
bool bVis = m_bSVCursorVis;
sal_uInt16 eFlags = SwCursorShell::CHKRANGE;
@@ -581,42 +585,331 @@ bool SwCursorShell::SttEndDoc( bool bStt )
return bRet;
}
+const SwTableNode* SwCursorShell::IsCursorInTable() const
+{
+ if (m_pTableCursor)
+ { // find the table that has the selected boxes
+ return m_pTableCursor->GetSelectedBoxes()[0]->GetSttNd()->FindTableNode();
+ }
+ return m_pCurrentCursor->GetNode().FindTableNode();
+}
+
+// fun cases to consider:
+// * outermost table
+// - into para => SA/ESA
+// - into prev/next table => continue...
+// - no prev/next => done
+// * inner table
+// - into containing cell => SA/ESA
+// - into prev/next of containing cell
+// + into para
+// + into table nested in prev/next cell
+// - out of table -> as above
+// => iterate in one direction until a node is reached that is a parent or a sibling of a parent of the current table
+// - parent reached => SA/ESA depending
+// - not in parent but in *prev/next* sibling of outer cell => TrySelectOuterTable
+// - not in parent but in *prev/next* sibling of outer table => TrySelectOuterTable
+// => select-all cannot select a sequence of table with no para at same level; only 1 table
+// - no parent, no prev/next => TrySelectOuterTable
+
+bool SwCursorShell::MoveOutOfTable()
+{
+ SwPosition const point(*getShellCursor(false)->GetPoint());
+ SwPosition const mark(*getShellCursor(false)->GetMark());
+
+ for (auto const fnMove : {&fnMoveBackward, &fnMoveForward})
+ {
+ Push();
+ SwCursor *const pCursor(getShellCursor(false));
+
+ pCursor->Normalize(fnMove == &fnMoveBackward);
+ pCursor->DeleteMark();
+ SwTableNode const*const pTable(pCursor->GetPoint()->nNode.GetNode().FindTableNode());
+ assert(pTable);
+ while (MovePara(GoInContent, *fnMove))
+ {
+ SwStartNode const*const pBox(pCursor->GetPoint()->nNode.GetNode().FindTableBoxStartNode());
+ if (!pBox)
+ {
+ Pop(SwCursorShell::PopMode::DeleteStack);
+ return true; // moved to paragraph at top-level of text
+ }
+ if (pBox->GetIndex() < pTable->GetIndex()
+ && pTable->EndOfSectionIndex() < pBox->EndOfSectionIndex())
+ {
+ Pop(SwCursorShell::PopMode::DeleteStack);
+ return true; // pBox contains start position (pTable)
+ }
+ }
+
+ Pop(SwCursorShell::PopMode::DeleteCurrent);
+ // FIXME: Pop doesn't restore original cursor if nested tables
+ *getShellCursor(false)->GetPoint() = point;
+ getShellCursor(false)->SetMark();
+ *getShellCursor(false)->GetMark() = mark;
+ }
+ return false;
+}
+
+bool SwCursorShell::TrySelectOuterTable()
+{
+ assert(m_pTableCursor);
+ SwTableNode const& rInnerTable(*m_pTableCursor->GetPoint()->nNode.GetNode().FindTableNode());
+ SwNodes const& rNodes(rInnerTable.GetNodes());
+ SwTableNode const*const pOuterTable(rInnerTable.GetNodes()[rInnerTable.GetIndex()-1]->FindTableNode());
+ if (!pOuterTable)
+ {
+ return false;
+ }
+
+ // manually select boxes of pOuterTable
+ SwNodeIndex firstCell(*pOuterTable, +1);
+ SwNodeIndex lastCell(*rNodes[pOuterTable->EndOfSectionIndex()-1]->StartOfSectionNode());
+ SwSelBoxes aNew;
+ pOuterTable->GetTable().CreateSelection(&firstCell.GetNode(), &lastCell.GetNode(),
+ aNew, SwTable::SEARCH_NONE, false);
+ // set table cursor to 1st / last content which may be in inner table
+ SwContentNode *const pStart = rNodes.GoNext(&firstCell);
+ assert(pStart); // must at least find the previous point node
+ lastCell = *lastCell.GetNode().EndOfSectionNode();
+ SwContentNode *const pEnd = SwNodes::GoPrevious(&lastCell);
+ assert(pEnd); // must at least find the previous point node
+ delete m_pTableCursor;
+ m_pTableCursor = new SwShellTableCursor(*this, SwPosition(*pStart, 0), Point(),
+ SwPosition(*pEnd, 0), Point());
+ m_pTableCursor->ActualizeSelection( aNew );
+ m_pTableCursor->IsCursorMovedUpdate(); // clear this so GetCursor() doesn't recreate our SwSelBoxes
+
+ // this will update m_pCurrentCursor based on m_pTableCursor
+ UpdateCursor(SwCursorShell::SCROLLWIN|SwCursorShell::CHKRANGE|SwCursorShell::READONLY);
+
+ return true;
+}
+
+/// find XText start node
+static SwStartNode const* FindTextStart(SwPosition const& rPos)
+{
+ SwStartNode const* pStartNode(rPos.nNode.GetNode().StartOfSectionNode());
+ while (pStartNode && (pStartNode->IsSectionNode() || pStartNode->IsTableNode()))
+ {
+ pStartNode = pStartNode->StartOfSectionNode();
+ }
+ return pStartNode;
+}
+
+static SwStartNode const* FindParentText(SwShellCursor const& rCursor)
+{
+ // find closest section containing both start and end - ignore Sections
+ SwStartNode const* pStartNode(FindTextStart(*rCursor.Start()));
+ SwEndNode const* pEndNode(FindTextStart(*rCursor.End())->EndOfSectionNode());
+ while (pStartNode->EndOfSectionNode()->GetIndex() < pEndNode->GetIndex())
+ {
+ pStartNode = pStartNode->StartOfSectionNode();
+ }
+ while (pStartNode->GetIndex() < pEndNode->StartOfSectionNode()->GetIndex())
+ {
+ pEndNode = pEndNode->StartOfSectionNode()->StartOfSectionNode()->EndOfSectionNode();
+ }
+ assert(pStartNode->EndOfSectionNode() == pEndNode);
+
+ return (pStartNode->IsSectionNode() || pStartNode->IsTableNode())
+ ? FindTextStart(SwPosition(*pStartNode))
+ : pStartNode;
+}
+
+bool SwCursorShell::MoveStartText()
+{
+ SwPosition const old(*m_pCurrentCursor->GetPoint());
+ SwStartNode const*const pStartNode(FindParentText(*getShellCursor(false)));
+ assert(pStartNode);
+ SwTableNode const*const pTable(pStartNode->FindTableNode());
+ *m_pCurrentCursor->GetPoint() = SwPosition(*pStartNode);
+ GetDoc()->GetNodes().GoNext(&m_pCurrentCursor->GetPoint()->nNode);
+ m_pCurrentCursor->GetPoint()->nContent.Assign(m_pCurrentCursor->GetPoint()->nNode.GetNode().GetContentNode(), 0);
+ while (m_pCurrentCursor->GetPoint()->nNode.GetNode().FindTableNode() != pTable
+ && (!pTable || pTable->GetIndex() < m_pCurrentCursor->GetPoint()->nNode.GetNode().FindTableNode()->GetIndex())
+ && MoveOutOfTable());
+ UpdateCursor(SwCursorShell::SCROLLWIN|SwCursorShell::CHKRANGE|SwCursorShell::READONLY);
+ return old != *m_pCurrentCursor->GetPoint();
+}
+
+// select all inside the current XText, with table or hidden para at start/end
void SwCursorShell::ExtendedSelectAll(bool bFootnotes)
{
+ // find common ancestor node of both ends of cursor
+ SwStartNode const*const pStartNode(FindParentText(*getShellCursor(false)));
+ assert(pStartNode);
+ if (IsTableMode())
+ { // convert m_pTableCursor to m_pCurrentCursor after determining pStartNode
+ TableCursorToCursor();
+ }
SwNodes& rNodes = GetDoc()->GetNodes();
+ m_pCurrentCursor->Normalize(true);
SwPosition* pPos = m_pCurrentCursor->GetPoint();
- pPos->nNode = bFootnotes ? rNodes.GetEndOfPostIts() : rNodes.GetEndOfAutotext();
+ pPos->nNode = bFootnotes ? rNodes.GetEndOfPostIts() : static_cast<SwNode const&>(*pStartNode);
pPos->nContent.Assign( rNodes.GoNext( &pPos->nNode ), 0 );
pPos = m_pCurrentCursor->GetMark();
- pPos->nNode = rNodes.GetEndOfContent();
+ pPos->nNode = bFootnotes ? rNodes.GetEndOfContent() : static_cast<SwNode const&>(*pStartNode->EndOfSectionNode());
SwContentNode* pCNd = SwNodes::GoPrevious( &pPos->nNode );
pPos->nContent.Assign( pCNd, pCNd ? pCNd->Len() : 0 );
}
-bool SwCursorShell::ExtendedSelectedAll()
+static typename SwCursorShell::StartsWith StartsWith(SwStartNode const& rStart)
+{
+ for (auto i = rStart.GetIndex() + 1; i < rStart.EndOfSectionIndex(); ++i)
+ {
+ SwNode const& rNode(*rStart.GetNodes()[i]);
+ switch (rNode.GetNodeType())
+ {
+ case SwNodeType::Section:
+ if (rNode.GetSectionNode()->GetSection().IsHidden())
+ return SwCursorShell::StartsWith::HiddenSection;
+ continue;
+ case SwNodeType::Table:
+ return SwCursorShell::StartsWith::Table;
+ case SwNodeType::Text:
+ if (rNode.GetTextNode()->IsHidden())
+ {
+ return SwCursorShell::StartsWith::HiddenPara;
+ }
+ return SwCursorShell::StartsWith::None;
+ default:
+ return SwCursorShell::StartsWith::None;
+ }
+ }
+ return SwCursorShell::StartsWith::None;
+}
+
+static typename SwCursorShell::StartsWith EndsWith(SwStartNode const& rStart)
+{
+ for (auto i = rStart.EndOfSectionIndex() - 1; rStart.GetIndex() < i; --i)
+ {
+ SwNode const& rNode(*rStart.GetNodes()[i]);
+ switch (rNode.GetNodeType())
+ {
+ case SwNodeType::End:
+ if (auto pStartNode = rNode.StartOfSectionNode(); pStartNode->IsTableNode())
+ {
+ return SwCursorShell::StartsWith::Table;
+ }
+ else if (pStartNode->IsSectionNode())
+ {
+ if (pStartNode->GetSectionNode()->GetSection().IsHidden())
+ return SwCursorShell::StartsWith::HiddenSection;
+ }
+ //TODO buggy SwUndoRedline in testTdf137503? assert(rNode.StartOfSectionNode()->IsSectionNode());
+ break;
+ case SwNodeType::Text:
+ if (rNode.GetTextNode()->IsHidden())
+ {
+ return SwCursorShell::StartsWith::HiddenPara;
+ }
+ return SwCursorShell::StartsWith::None;
+ default:
+ return SwCursorShell::StartsWith::None;
+ }
+ }
+ return SwCursorShell::StartsWith::None;
+}
+
+// return the node that is the start of the extended selection (to include table
+// or section start nodes; looks like extending for end nodes is not required)
+::std::optional<::std::pair<SwNode const*, ::std::vector<SwTableNode*>>>
+SwCursorShell::ExtendedSelectedAll() const
{
+ if (m_pTableCursor)
+ {
+ return {};
+ }
+
SwNodes& rNodes = GetDoc()->GetNodes();
- SwNodeIndex nNode = rNodes.GetEndOfAutotext();
+ SwShellCursor const*const pShellCursor = getShellCursor(false);
+ SwStartNode const* pStartNode(FindParentText(*pShellCursor));
+
+ SwNodeIndex nNode(*pStartNode);
SwContentNode* pStart = rNodes.GoNext(&nNode);
+ if (!pStart)
+ {
+ return {};
+ }
- nNode = rNodes.GetEndOfContent();
+ nNode = *pStartNode->EndOfSectionNode();
SwContentNode* pEnd = SwNodes::GoPrevious(&nNode);
-
- if (!pStart || !pEnd)
- return false;
+ if (!pEnd)
+ {
+ return {};
+ }
SwPosition aStart(*pStart, 0);
SwPosition aEnd(*pEnd, pEnd->Len());
- SwShellCursor* pShellCursor = getShellCursor(false);
- return aStart == *pShellCursor->Start() && aEnd == *pShellCursor->End();
+ if (!(aStart == *pShellCursor->Start() && aEnd == *pShellCursor->End()))
+ {
+ return {};
+ }
+
+ auto const ends(::EndsWith(*pStartNode));
+ if (::StartsWith(*pStartNode) == StartsWith::None
+ && ends == StartsWith::None)
+ {
+ return {}; // "ordinary" selection will work
+ }
+
+ ::std::vector<SwTableNode*> tablesAtEnd;
+ if (ends == StartsWith::Table)
+ {
+ SwNode * pLastNode(rNodes[pStartNode->EndOfSectionIndex() - 1]);
+ while (pLastNode->IsEndNode())
+ {
+ SwNode *const pNode(pLastNode->StartOfSectionNode());
+ if (pNode->IsTableNode())
+ {
+ tablesAtEnd.push_back(pNode->GetTableNode());
+ pLastNode = rNodes[pNode->GetIndex() - 1];
+ }
+ else if (pNode->IsSectionNode())
+ {
+ pLastNode = rNodes[pLastNode->GetIndex() - 1];
+ }
+ }
+ assert(!tablesAtEnd.empty());
+ }
+
+ // tdf#133990 ensure directly containing section is included in SwUndoDelete
+ while (pStartNode->IsSectionNode()
+ && pStartNode->GetIndex() == pStartNode->StartOfSectionNode()->GetIndex() + 1
+ && pStartNode->EndOfSectionNode()->GetIndex() + 1 == pStartNode->StartOfSectionNode()->EndOfSectionNode()->GetIndex())
+ {
+ pStartNode = pStartNode->StartOfSectionNode();
+ }
+
+ // pStartNode is the node that fully contains the selection - the first
+ // node of the selection is the first node inside pStartNode
+ return ::std::make_pair(rNodes[pStartNode->GetIndex() + 1], tablesAtEnd);
}
-bool SwCursorShell::StartsWithTable()
+typename SwCursorShell::StartsWith SwCursorShell::StartsWith_()
{
- SwNodes& rNodes = GetDoc()->GetNodes();
- SwNodeIndex nNode(rNodes.GetEndOfExtras());
- SwContentNode* pContentNode = rNodes.GoNext(&nNode);
- return pContentNode->FindTableNode();
+ SwShellCursor const*const pShellCursor = getShellCursor(false);
+ // first, check if this is invalid; ExtendedSelectAll(true) may result in
+ // a) an ordinary selection that is valid
+ // b) a selection that is extended
+ // c) a selection that is invalid and will cause FindParentText to loop
+ SwNode const& rEndOfExtras(GetDoc()->GetNodes().GetEndOfExtras());
+ if (pShellCursor->Start()->nNode.GetIndex() <= rEndOfExtras.GetIndex()
+ && rEndOfExtras.GetIndex() < pShellCursor->End()->nNode.GetIndex())
+ {
+ return StartsWith::None; // *very* extended, no ExtendedSelectedAll handling!
+ }
+ SwStartNode const*const pStartNode(FindParentText(*pShellCursor));
+ if (auto const ret = ::StartsWith(*pStartNode); ret != StartsWith::None)
+ {
+ return ret;
+ }
+ if (auto const ret = ::EndsWith(*pStartNode); ret != StartsWith::None)
+ {
+ return ret;
+ }
+ return StartsWith::None;
}
bool SwCursorShell::MovePage( SwWhichPage fnWhichPage, SwPosPage fnPosPage )
@@ -645,14 +938,14 @@ bool SwCursorShell::MovePage( SwWhichPage fnWhichPage, SwPosPage fnPosPage )
return bRet;
}
-bool SwCursorShell::isInHiddenTextFrame(SwShellCursor* pShellCursor)
+bool SwCursorShell::isInHiddenFrame(SwShellCursor* pShellCursor)
{
SwContentNode *pCNode = pShellCursor->GetContentNode();
std::pair<Point, bool> tmp(pShellCursor->GetPtPos(), false);
SwContentFrame *const pFrame = pCNode
? pCNode->getLayoutFrame(GetLayout(), pShellCursor->GetPoint(), &tmp)
: nullptr;
- return !pFrame || (pFrame->IsTextFrame() && static_cast<SwTextFrame*>(pFrame)->IsHiddenNow());
+ return !pFrame || pFrame->IsHiddenNow();
}
// sw_redlinehide: this should work for all cases: GoCurrPara, GoNextPara, GoPrevPara
@@ -693,7 +986,7 @@ bool SwCursorShell::MovePara(SwWhichPara fnWhichPara, SwMoveFnCollection const &
//which is what SwCursorShell::UpdateCursorPos will reset
//the position to if we pass it a position in an
//invisible hidden paragraph field
- while (isInHiddenTextFrame(pTmpCursor)
+ while (isInHiddenFrame(pTmpCursor)
|| !IsAtStartOrEndOfFrame(this, pTmpCursor, fnPosPara))
{
if (!pTmpCursor->MovePara(fnWhichPara, fnPosPara))
@@ -1395,7 +1688,7 @@ bool SwCursorShell::GoNextPrevCursorSetSearchLabel(const bool bNext)
void SwCursorShell::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle &rRect)
{
- comphelper::FlagRestorationGuard g(mbSelectAll, StartsWithTable() && ExtendedSelectedAll());
+ comphelper::FlagRestorationGuard g(mbSelectAll, StartsWith_() != StartsWith::None && ExtendedSelectedAll());
SET_CURR_SHELL( this );
// always switch off all cursors when painting
@@ -1469,8 +1762,8 @@ void SwCursorShell::VisPortChgd( const SwRect & rRect )
/** Set the cursor back into content.
- This should only be called if the cursor was move somewhere else (e.g. when
- deleting a border). The new position is calculated from its current position
+ This should only be called if the cursor was moved (e.g. when deleting a
+ text frame). The new position is calculated from its current position
in the layout.
*/
void SwCursorShell::UpdateCursorPos()
@@ -1480,13 +1773,29 @@ void SwCursorShell::UpdateCursorPos()
SwShellCursor* pShellCursor = getShellCursor( true );
Size aOldSz( GetDocSize() );
- if( isInHiddenTextFrame(pShellCursor) )
+ if (isInHiddenFrame(pShellCursor) && !ExtendedSelectedAll())
{
- SwCursorMoveState aTmpState( MV_NONE );
+ SwCursorMoveState aTmpState(MV_SETONLYTEXT);
aTmpState.m_bSetInReadOnly = IsReadOnlyAvailable();
GetLayout()->GetCursorOfst( pShellCursor->GetPoint(), pShellCursor->GetPtPos(),
&aTmpState );
pShellCursor->DeleteMark();
+ // kde45196-1.html: try to get to a non-hidden paragraph, there must
+ // be one in the document body
+ while (isInHiddenFrame(pShellCursor))
+ {
+ if (!pShellCursor->MovePara(GoNextPara, fnParaStart))
+ {
+ break;
+ }
+ }
+ while (isInHiddenFrame(pShellCursor))
+ {
+ if (!pShellCursor->MovePara(GoPrevPara, fnParaStart))
+ {
+ break;
+ }
+ }
}
IGrammarContact *pGrammarContact = GetDoc() ? GetDoc()->getGrammarContact() : nullptr;
if( pGrammarContact )
@@ -2243,7 +2552,14 @@ void SwCursorShell::Push()
*/
bool SwCursorShell::Pop(PopMode const eDelete)
{
- SwCallLink aLk( *this ); // watch Cursor-Moves; call Link if needed
+ ::std::unique_ptr<SwCallLink> pLink(::std::make_unique<SwCallLink>(*this)); // watch Cursor-Moves; call Link if needed
+ return Pop(eDelete, ::std::move(pLink));
+}
+
+bool SwCursorShell::Pop(PopMode const eDelete,
+ [[maybe_unused]] ::std::unique_ptr<SwCallLink> const pLink)
+{
+ assert(pLink); // parameter exists only to be deleted before return
// are there any left?
if (nullptr == m_pStackCursor)
@@ -2264,7 +2580,7 @@ bool SwCursorShell::Pop(PopMode const eDelete)
if (PopMode::DeleteCurrent == eDelete)
{
- SwCursorSaveState aSaveState( *m_pCurrentCursor );
+ ::std::optional<SwCursorSaveState> oSaveState( *m_pCurrentCursor );
// If the visible SSelection was not changed
const Point& rPoint = pOldStack->GetPtPos();
@@ -2292,6 +2608,7 @@ bool SwCursorShell::Pop(PopMode const eDelete)
!m_pCurrentCursor->IsSelOvr( SwCursorSelOverFlags::Toggle |
SwCursorSelOverFlags::ChangePos ) )
{
+ oSaveState.reset(); // prevent UAF
UpdateCursor(); // update current cursor
if (m_pTableCursor)
{ // tdf#106929 ensure m_pCurrentCursor ring is recreated from table
@@ -2373,6 +2690,8 @@ void SwCursorShell::ShowCursor()
{
if( !m_bBasicHideCursor )
{
+ comphelper::FlagRestorationGuard g(mbSelectAll, StartsWith_() != StartsWith::None && ExtendedSelectedAll());
+
m_bSVCursorVis = true;
m_pCurrentCursor->SetShowTextInputFieldOverlay( true );
@@ -2415,6 +2734,8 @@ void SwCursorShell::ShellLoseFocus()
void SwCursorShell::ShellGetFocus()
{
+ comphelper::FlagRestorationGuard g(mbSelectAll, StartsWith_() != StartsWith::None && ExtendedSelectedAll());
+
m_bHasFocus = true;
if( !m_bBasicHideCursor && VisArea().Width() )
{
@@ -2694,7 +3015,7 @@ bool SwCursorShell::IsOverReadOnlyPos( const Point& rPt ) const
SwPaM aPam( *m_pCurrentCursor->GetPoint() );
GetLayout()->GetCursorOfst( aPam.GetPoint(), aPt );
// form view
- return aPam.HasReadonlySel( GetViewOptions()->IsFormView() );
+ return aPam.HasReadonlySel(GetViewOptions()->IsFormView(), false);
}
/** Get the number of elements in the ring of cursors
@@ -3091,7 +3412,7 @@ bool SwCursorShell::FindValidContentNode( bool bOnlyText )
GetDoc()->GetDocShell()->IsReadOnlyUI() )
return true;
- if( m_pCurrentCursor->HasMark() )
+ if( m_pCurrentCursor->HasMark() && !mbSelectAll )
ClearMark();
// first check for frames
@@ -3313,7 +3634,7 @@ void SwCursorShell::SetReadOnlyAvailable( bool bFlag )
}
}
-bool SwCursorShell::HasReadonlySel() const
+bool SwCursorShell::HasReadonlySel(bool const isReplace) const
{
bool bRet = false;
// If protected area is to be ignored, then selections are never read-only.
@@ -3323,14 +3644,15 @@ bool SwCursorShell::HasReadonlySel() const
{
if ( m_pTableCursor != nullptr )
{
+ // TODO: handling when a table cell (cells) is selected
bRet = m_pTableCursor->HasReadOnlyBoxSel()
- || m_pTableCursor->HasReadonlySel( GetViewOptions()->IsFormView() );
+ || m_pTableCursor->HasReadonlySel(GetViewOptions()->IsFormView(), isReplace);
}
else
{
for(const SwPaM& rCursor : m_pCurrentCursor->GetRingContainer())
{
- if( rCursor.HasReadonlySel( GetViewOptions()->IsFormView() ) )
+ if (rCursor.HasReadonlySel(GetViewOptions()->IsFormView(), isReplace))
{
bRet = true;
break;
@@ -3341,6 +3663,31 @@ bool SwCursorShell::HasReadonlySel() const
return bRet;
}
+bool SwCursorShell::HasHiddenSections() const
+{
+ bool bRet = false;
+
+ if ( m_pTableCursor != nullptr )
+ {
+ // TODO: handling when a table cell (cells) is selected
+ bRet = m_pTableCursor->HasHiddenBoxSel()
+ || m_pTableCursor->HasHiddenSections();
+ }
+ else
+ {
+ for(const SwPaM& rCursor : m_pCurrentCursor->GetRingContainer())
+ {
+ if (rCursor.HasHiddenSections())
+ {
+ bRet = true;
+ break;
+ }
+ }
+ }
+
+ return bRet;
+}
+
bool SwCursorShell::IsSelFullPara() const
{
bool bRet = false;
diff --git a/sw/source/core/crsr/crstrvl.cxx b/sw/source/core/crsr/crstrvl.cxx
index 9153b8b34e85..11fb5db02df6 100644
--- a/sw/source/core/crsr/crstrvl.cxx
+++ b/sw/source/core/crsr/crstrvl.cxx
@@ -1930,7 +1930,7 @@ bool SwContentAtPos::IsInRTLText()const
return bRet;
}
-bool SwCursorShell::SelectText( const sal_Int32 nStart,
+bool SwCursorShell::SelectTextModel( const sal_Int32 nStart,
const sal_Int32 nEnd )
{
SET_CURR_SHELL( this );
@@ -1954,6 +1954,43 @@ bool SwCursorShell::SelectText( const sal_Int32 nStart,
return bRet;
}
+TextFrameIndex SwCursorShell::GetCursorPointAsViewIndex() const
+{
+ SwPosition const*const pPos(GetCursor()->GetPoint());
+ SwTextNode const*const pTextNode(pPos->nNode.GetNode().GetTextNode());
+ assert(pTextNode);
+ SwTextFrame const*const pFrame(static_cast<SwTextFrame const*>(pTextNode->getLayoutFrame(GetLayout())));
+ assert(pFrame);
+ return pFrame->MapModelToViewPos(*pPos);
+}
+
+bool SwCursorShell::SelectTextView(TextFrameIndex const nStart,
+ TextFrameIndex const nEnd)
+{
+ CurrShell aCurr( this );
+ bool bRet = false;
+
+ SwCallLink aLk( *this );
+ SwCursorSaveState aSaveState( *m_pCurrentCursor );
+
+ SwPosition& rPos = *m_pCurrentCursor->GetPoint();
+ m_pCurrentCursor->DeleteMark();
+ // indexes must correspond to cursor point!
+ SwTextFrame const*const pFrame(static_cast<SwTextFrame const*>(m_pCurrentCursor->GetPoint()->nNode.GetNode().GetTextNode()->getLayoutFrame(GetLayout())));
+ assert(pFrame);
+ rPos = pFrame->MapViewToModelPos(nStart);
+ m_pCurrentCursor->SetMark();
+ rPos = pFrame->MapViewToModelPos(nEnd);
+
+ if (!m_pCurrentCursor->IsSelOvr())
+ {
+ UpdateCursor();
+ bRet = true;
+ }
+
+ return bRet;
+}
+
bool SwCursorShell::SelectTextAttr( sal_uInt16 nWhich,
bool bExpand,
const SwTextAttr* pTextAttr )
@@ -1977,7 +2014,7 @@ bool SwCursorShell::SelectTextAttr( sal_uInt16 nWhich,
if( pTextAttr )
{
const sal_Int32* pEnd = pTextAttr->End();
- bRet = SelectText( pTextAttr->GetStart(), ( pEnd ? *pEnd : pTextAttr->GetStart() + 1 ) );
+ bRet = SelectTextModel(pTextAttr->GetStart(), (pEnd ? *pEnd : pTextAttr->GetStart() + 1));
}
}
return bRet;
diff --git a/sw/source/core/crsr/pam.cxx b/sw/source/core/crsr/pam.cxx
index b47b35b4bc30..8a7b3fb65507 100644
--- a/sw/source/core/crsr/pam.cxx
+++ b/sw/source/core/crsr/pam.cxx
@@ -573,7 +573,7 @@ static const SwFrame* lcl_FindEditInReadonlyFrame( const SwFrame& rFrame )
}
/// is in protected section or selection surrounds something protected
-bool SwPaM::HasReadonlySel( bool bFormView ) const
+bool SwPaM::HasReadonlySel(bool bFormView, bool const isReplace) const
{
bool bRet = false;
@@ -748,7 +748,7 @@ bool SwPaM::HasReadonlySel( bool bFormView ) const
if (!bRet &&
pDoc->getIDocumentSettingAccess().get(DocumentSettingId::PROTECT_BOOKMARKS))
{
- if (pDoc->getIDocumentMarkAccess()->isBookmarkDeleted(*this))
+ if (pDoc->getIDocumentMarkAccess()->isBookmarkDeleted(*this, isReplace))
{
return true;
}
@@ -790,6 +790,49 @@ bool SwPaM::HasReadonlySel( bool bFormView ) const
return bRet;
}
+bool SwPaM::HasHiddenSections() const
+{
+ bool bRet = false;
+
+ if (HasMark() && GetPoint()->nNode != GetMark()->nNode)
+ {
+ sal_uLong nSttIdx = GetMark()->nNode.GetIndex(),
+ nEndIdx = GetPoint()->nNode.GetIndex();
+ if (nEndIdx <= nSttIdx)
+ {
+ sal_uLong nTmp = nSttIdx;
+ nSttIdx = nEndIdx;
+ nEndIdx = nTmp;
+ }
+
+ // If a hidden section should be between nodes, then the
+ // selection needs to contain already x nodes.
+ // (TextNd, SectNd, TextNd, EndNd, TextNd )
+ if (nSttIdx + 3 < nEndIdx)
+ {
+ const SwSectionFormats& rFormats = GetDoc()->GetSections();
+ for (SwSectionFormats::size_type n = rFormats.size(); n;)
+ {
+ const SwSectionFormat* pFormat = rFormats[--n];
+ if (pFormat->GetSection()->IsHidden())
+ {
+ const SwFormatContent& rContent = pFormat->GetContent(false);
+ OSL_ENSURE(rContent.GetContentIdx(), "where is the SectionNode?");
+ sal_uLong nIdx = rContent.GetContentIdx()->GetIndex();
+ if (nSttIdx <= nIdx && nEndIdx >= nIdx
+ && rContent.GetContentIdx()->GetNode().GetNodes().IsDocNodes())
+ {
+ bRet = true;
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ return bRet;
+}
+
/// This function returns the next node in direction of search. If there is no
/// left or the next is out of the area, then a null-pointer is returned.
/// @param rbFirst If <true> then first time request. If so than the position of
@@ -814,7 +857,7 @@ SwContentNode* GetNode( SwPaM & rPam, bool& rbFirst, SwMoveFnCollection const &
(
nullptr == pFrame ||
( !bInReadOnly && pFrame->IsProtected() ) ||
- (pFrame->IsTextFrame() && static_cast<SwTextFrame const*>(pFrame)->IsHiddenNow())
+ pFrame->IsHiddenNow()
) ||
( !bInReadOnly && pNd->FindSectionNode() &&
pNd->FindSectionNode()->GetSection().IsProtect()
@@ -854,8 +897,7 @@ SwContentNode* GetNode( SwPaM & rPam, bool& rbFirst, SwMoveFnCollection const &
SwContentFrame const*const pFrame(pNd->getLayoutFrame(pLayout));
if (nullptr == pFrame ||
( !bInReadOnly && pFrame->IsProtected() ) ||
- ( pFrame->IsTextFrame() &&
- static_cast<SwTextFrame const*>(pFrame)->IsHiddenNow()))
+ pFrame->IsHiddenNow())
{
pNd = nullptr;
continue;
diff --git a/sw/source/core/crsr/swcrsr.cxx b/sw/source/core/crsr/swcrsr.cxx
index 8cfa09e8c9ac..f8b0213a67cc 100644
--- a/sw/source/core/crsr/swcrsr.cxx
+++ b/sw/source/core/crsr/swcrsr.cxx
@@ -214,7 +214,7 @@ namespace
}
}
-bool SwCursor::IsSelOvr( SwCursorSelOverFlags eFlags )
+bool SwCursor::IsSelOvr(SwCursorSelOverFlags const eFlags)
{
SwDoc* pDoc = GetDoc();
SwNodes& rNds = pDoc->GetNodes();
@@ -336,7 +336,7 @@ bool SwCursor::IsSelOvr( SwCursorSelOverFlags eFlags )
// skip to the next/prev valid paragraph with a layout
SwNodeIndex& rPtIdx = GetPoint()->nNode;
bool bGoNxt = m_vSavePos.back().nNode < rPtIdx.GetIndex();
- while( nullptr != ( pFrame = ( bGoNxt ? pFrame->GetNextContentFrame() : pFrame->GetPrevContentFrame() ))
+ while( nullptr != ( pFrame = ( bGoNxt ? pFrame->FindNextCnt(true) : pFrame->FindPrevCnt() ))
&& 0 == pFrame->getFrameArea().Height() )
;
@@ -348,8 +348,7 @@ bool SwCursor::IsSelOvr( SwCursorSelOverFlags eFlags )
pFrame = static_cast<const SwContentNode*>(pNd)->getLayoutFrame( pDoc->getIDocumentLayoutAccess().GetCurrentLayout() );
while ( pFrame && 0 == pFrame->getFrameArea().Height() )
{
- pFrame = bGoNxt ? pFrame->GetNextContentFrame()
- : pFrame->GetPrevContentFrame();
+ pFrame = bGoNxt ? pFrame->FindNextCnt(true) : pFrame->FindPrevCnt();
}
}
@@ -395,9 +394,16 @@ bool SwCursor::IsSelOvr( SwCursorSelOverFlags eFlags )
if( !pFrame )
{
- DeleteMark();
- RestoreSavePos();
- return true; // we need a frame
+ assert(!m_vSavePos.empty());
+ SwContentNode const*const pSaveNode(rNds[m_vSavePos.back().nNode]->GetContentNode());
+ // if the old position already didn't have a frame, allow moving
+ // anyway, hope the caller can handle that
+ if (pSaveNode && pSaveNode->getLayoutFrame(pDoc->getIDocumentLayoutAccess().GetCurrentLayout()))
+ {
+ DeleteMark();
+ RestoreSavePos();
+ return true; // we need a frame
+ }
}
}
@@ -882,7 +888,7 @@ static bool lcl_MakeSelFwrd( const SwNode& rSttNd, const SwNode& rEndNd,
rPam.SetMark();
rPam.GetPoint()->nNode = rEndNd;
- pCNd = SwNodes::GoPrevious( &rPam.GetPoint()->nNode );
+ pCNd = SwNodes::GoPrevious(&rPam.GetPoint()->nNode, true);
if( !pCNd )
return false;
pCNd->MakeEndIndex( &rPam.GetPoint()->nContent );
@@ -902,7 +908,7 @@ static bool lcl_MakeSelBkwrd( const SwNode& rSttNd, const SwNode& rEndNd,
if( !bFirst )
{
rPam.GetPoint()->nNode = rSttNd;
- pCNd = SwNodes::GoPrevious( &rPam.GetPoint()->nNode );
+ pCNd = SwNodes::GoPrevious(&rPam.GetPoint()->nNode, true);
if( !pCNd )
return false;
pCNd->MakeEndIndex( &rPam.GetPoint()->nContent );
@@ -2526,4 +2532,18 @@ bool SwTableCursor::HasReadOnlyBoxSel() const
return bRet;
}
+bool SwTableCursor::HasHiddenBoxSel() const
+{
+ bool bRet = false;
+ for (size_t n = m_SelectedBoxes.size(); n; )
+ {
+ if (m_SelectedBoxes[--n]->GetFrameFormat()->IsHidden())
+ {
+ bRet = true;
+ break;
+ }
+ }
+ return bRet;
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/core/doc/DocumentContentOperationsManager.cxx b/sw/source/core/doc/DocumentContentOperationsManager.cxx
index a2605673eefb..8318cc5d5ba8 100644
--- a/sw/source/core/doc/DocumentContentOperationsManager.cxx
+++ b/sw/source/core/doc/DocumentContentOperationsManager.cxx
@@ -26,6 +26,7 @@
#include <IDocumentSettingAccess.hxx>
#include <UndoManager.hxx>
#include <docary.hxx>
+#include <pamtyp.hxx>
#include <textboxhelper.hxx>
#include <dcontact.hxx>
#include <grfatr.hxx>
@@ -286,6 +287,12 @@ namespace sw
::sw::mark::InsertMode::CopyText);
// Explicitly try to get exactly the same name as in the source
// because NavigatorReminders, DdeBookmarks etc. ignore the proposed name
+ if (pNewMark == nullptr)
+ {
+ assert(IDocumentMarkAccess::GetType(*pMark) == IDocumentMarkAccess::MarkType::CROSSREF_NUMITEM_BOOKMARK
+ || IDocumentMarkAccess::GetType(*pMark) == IDocumentMarkAccess::MarkType::CROSSREF_HEADING_BOOKMARK);
+ continue; // can't insert duplicate cross reference mark
+ }
pDestDoc->getIDocumentMarkAccess()->renameMark(pNewMark, pMark->GetName());
// copying additional attributes for bookmarks or fieldmarks
@@ -387,7 +394,8 @@ namespace
*pDelPam->GetPoint(), nDelCount );
}
- if (pDelPam->GetNext() && *pDelPam->GetNext()->End() == *pDelPam->Start())
+ if (pDelPam->GetNext() != pDelPam.get()
+ && *pDelPam->GetNext()->End() == *pDelPam->Start())
{
*pDelPam->GetNext()->End() = *pDelPam->End();
pDelPam.reset(pDelPam->GetNext());
@@ -617,8 +625,9 @@ namespace sw
namespace
{
- bool lcl_DoWithBreaks(::sw::DocumentContentOperationsManager & rDocumentContentOperations, SwPaM & rPam,
- bool (::sw::DocumentContentOperationsManager::*pFunc)(SwPaM&, bool), const bool bForceJoinNext = false)
+ bool lcl_DoWithBreaks(::sw::DocumentContentOperationsManager & rDocumentContentOperations,
+ SwPaM & rPam, SwDeleteFlags const flags,
+ bool (::sw::DocumentContentOperationsManager::*pFunc)(SwPaM&, SwDeleteFlags, bool), const bool bForceJoinNext = false)
{
std::vector<std::pair<sal_uLong, sal_Int32>> Breaks;
@@ -626,7 +635,7 @@ namespace
if (Breaks.empty())
{
- return (rDocumentContentOperations.*pFunc)(rPam, bForceJoinNext);
+ return (rDocumentContentOperations.*pFunc)(rPam, flags, bForceJoinNext);
}
// Deletion must be split into several parts if the text node
@@ -650,7 +659,7 @@ namespace
rStart = SwPosition(*rNodes[iter->first - nOffset]->GetTextNode(), iter->second + 1);
if (rStart < rEnd) // check if part is empty
{
- bRet &= (rDocumentContentOperations.*pFunc)(aPam, bForceJoinNext);
+ bRet &= (rDocumentContentOperations.*pFunc)(aPam, flags, bForceJoinNext);
nOffset = iter->first - rStart.nNode.GetIndex(); // deleted fly nodes...
}
rEnd = SwPosition(*rNodes[iter->first - nOffset]->GetTextNode(), iter->second);
@@ -660,7 +669,7 @@ namespace
rStart = *rPam.Start(); // set to original start
if (rStart < rEnd) // check if part is empty
{
- bRet &= (rDocumentContentOperations.*pFunc)(aPam, bForceJoinNext);
+ bRet &= (rDocumentContentOperations.*pFunc)(aPam, flags, bForceJoinNext);
}
return bRet;
@@ -935,8 +944,10 @@ namespace
for(SaveRedline & rSvRedLine : rArr)
{
rSvRedLine.SetPos( nInsPos );
- pDoc->getIDocumentRedlineAccess().AppendRedline( rSvRedLine.pRedl, true );
- if (rSvRedLine.pRedl->GetType() == RedlineType::Delete)
+ IDocumentRedlineAccess::AppendResult const result(
+ pDoc->getIDocumentRedlineAccess().AppendRedline( rSvRedLine.pRedl, true ));
+ if ( IDocumentRedlineAccess::AppendResult::APPENDED == result &&
+ rSvRedLine.pRedl->GetType() == RedlineType::Delete )
{
UpdateFramesForAddDeleteRedline(*pDoc, *rSvRedLine.pRedl);
}
@@ -1962,6 +1973,18 @@ DocumentContentOperationsManager::CopyRange( SwPaM& rPam, SwPosition& rPos, cons
return bRet;
}
+static auto GetCorrPosition(SwPaM const& rPam) -> SwPosition
+{
+ // tdf#152710 target position must be on node that survives deletion
+ // so that PaMCorrAbs can invalidate SwUnoCursors properly
+ return rPam.GetPoint()->nNode.GetNode().IsContentNode()
+ ? *rPam.GetPoint()
+ : rPam.GetMark()->nNode.GetNode().IsContentNode()
+ ? *rPam.GetMark()
+ // this would be the result in SwNodes::RemoveNode()
+ : SwPosition(SwNodeIndex(rPam.End()->nNode.GetNode(), +1));
+}
+
/// Delete a full Section of the NodeArray.
/// The passed Node is located somewhere in the designated Section.
void DocumentContentOperationsManager::DeleteSection( SwNode *pNode )
@@ -1979,8 +2002,9 @@ void DocumentContentOperationsManager::DeleteSection( SwNode *pNode )
{
// move all Cursor/StackCursor/UnoCursor out of the to-be-deleted area
- SwNodeIndex aMvStt( aSttIdx, 1 );
- SwDoc::CorrAbs( aMvStt, aEndIdx, SwPosition( aSttIdx ), true );
+ SwPaM const range(aSttIdx, aEndIdx);
+ SwPosition const pos(GetCorrPosition(range));
+ ::PaMCorrAbs(range, pos);
}
m_rDoc.GetNodes().DelNodes( aSttIdx, aEndIdx.GetIndex() - aSttIdx.GetIndex() + 1 );
@@ -1994,7 +2018,7 @@ void DocumentContentOperationsManager::DeleteDummyChar(
assert(aPam.GetText().getLength() == 1 && aPam.GetText()[0] == cDummy);
(void) cDummy;
- DeleteRangeImpl(aPam);
+ DeleteRangeImpl(aPam, SwDeleteFlags::Default);
if (!m_rDoc.getIDocumentRedlineAccess().IsIgnoreRedline()
&& !m_rDoc.getIDocumentRedlineAccess().GetRedlineTable().empty())
@@ -2005,12 +2029,7 @@ void DocumentContentOperationsManager::DeleteDummyChar(
void DocumentContentOperationsManager::DeleteRange( SwPaM & rPam )
{
- lcl_DoWithBreaks( *this, rPam, &DocumentContentOperationsManager::DeleteRangeImpl );
-
- if (m_rDoc.getIDocumentRedlineAccess().IsRedlineOn())
- {
- rPam.Normalize(false); // tdf#127635 put point at the end of deletion
- }
+ lcl_DoWithBreaks(*this, rPam, SwDeleteFlags::Default, &DocumentContentOperationsManager::DeleteRangeImpl);
if (!m_rDoc.getIDocumentRedlineAccess().IsIgnoreRedline()
&& !m_rDoc.getIDocumentRedlineAccess().GetRedlineTable().empty())
@@ -2113,7 +2132,7 @@ bool DocumentContentOperationsManager::DelFullPara( SwPaM& rPam )
::PaMCorrAbs( aDelPam, aTmpPos );
}
- std::unique_ptr<SwUndoDelete> pUndo(new SwUndoDelete( aDelPam, true ));
+ std::unique_ptr<SwUndoDelete> pUndo(new SwUndoDelete(aDelPam, SwDeleteFlags::Default, true));
*rPam.GetPoint() = *aDelPam.GetPoint();
pUndo->SetPgBrkFlags( bSavePageBreak, bSavePageDesc );
@@ -2208,22 +2227,17 @@ bool DocumentContentOperationsManager::DelFullPara( SwPaM& rPam )
}
// #i100466# Add handling of new optional parameter <bForceJoinNext>
-bool DocumentContentOperationsManager::DeleteAndJoin( SwPaM & rPam,
+bool DocumentContentOperationsManager::DeleteAndJoin(SwPaM & rPam, SwDeleteFlags const flags,
const bool bForceJoinNext )
{
if ( lcl_StrLenOverflow( rPam ) )
return false;
- bool const ret = lcl_DoWithBreaks( *this, rPam, (m_rDoc.getIDocumentRedlineAccess().IsRedlineOn())
+ bool const ret = lcl_DoWithBreaks( *this, rPam, flags, (m_rDoc.getIDocumentRedlineAccess().IsRedlineOn())
? &DocumentContentOperationsManager::DeleteAndJoinWithRedlineImpl
: &DocumentContentOperationsManager::DeleteAndJoinImpl,
bForceJoinNext );
- if (m_rDoc.getIDocumentRedlineAccess().IsRedlineOn())
- {
- rPam.Normalize(false); // tdf#127635 put point at the end of deletion
- }
-
return ret;
}
@@ -3352,8 +3366,8 @@ bool DocumentContentOperationsManager::ReplaceRange( SwPaM& rPam, const OUString
if (rStart < rEnd) // check if part is empty
{
bRet &= (m_rDoc.getIDocumentRedlineAccess().IsRedlineOn())
- ? DeleteAndJoinWithRedlineImpl(aPam)
- : DeleteAndJoinImpl(aPam, false);
+ ? DeleteAndJoinWithRedlineImpl(aPam, SwDeleteFlags::Default)
+ : DeleteAndJoinImpl(aPam, SwDeleteFlags::Default, false);
nOffset = iter->first - rStart.nNode.GetIndex(); // deleted fly nodes...
}
rEnd = SwPosition(*rNodes[iter->first - nOffset]->GetTextNode(), iter->second);
@@ -3488,21 +3502,28 @@ void DocumentContentOperationsManager::CopyWithFlyInFly(
aRedlRest.Restore();
if (bMakeNewFrames) // tdf#130685 only after aRedlRest
{ // recreate from previous node (could be merged now)
- if (SwTextNode *const pNode = aSavePos.GetNode().GetTextNode())
+ std::unordered_set<SwTextFrame*> frames;
+ SwTextNode * pNode = aSavePos.GetNode().GetTextNode();
+ SwTextNode *const pEndNode = rInsPos.GetNode().GetTextNode();
+ if (pEndNode)
{
- std::unordered_set<SwTextFrame*> frames;
- SwTextNode *const pEndNode = rInsPos.GetNode().GetTextNode();
- if (pEndNode)
+ SwIterator<SwTextFrame, SwTextNode, sw::IteratorMode::UnwrapMulti> aIter(*pEndNode);
+ for (SwTextFrame* pFrame = aIter.First(); pFrame; pFrame = aIter.Next())
{
- SwIterator<SwTextFrame, SwTextNode, sw::IteratorMode::UnwrapMulti> aIter(*pEndNode);
- for (SwTextFrame* pFrame = aIter.First(); pFrame; pFrame = aIter.Next())
+ if (pFrame->getRootFrame()->IsHideRedlines())
{
- if (pFrame->getRootFrame()->IsHideRedlines())
+ frames.insert(pFrame);
+ // tdf#135061 check if end node is merged to a preceding node
+ if (pNode == nullptr && pFrame->GetMergedPara()
+ && pFrame->GetMergedPara()->pFirstNode->GetIndex() < aSavePos.GetIndex())
{
- frames.insert(pFrame);
+ pNode = pFrame->GetMergedPara()->pFirstNode;
}
}
}
+ }
+ if (pNode != nullptr)
+ {
sw::RecreateStartTextFrames(*pNode);
if (!frames.empty())
{ // tdf#132187 check if the end node needs new frames
@@ -3914,7 +3935,7 @@ DocumentContentOperationsManager::~DocumentContentOperationsManager()
}
//Private methods
-bool DocumentContentOperationsManager::DeleteAndJoinWithRedlineImpl( SwPaM & rPam, const bool )
+bool DocumentContentOperationsManager::DeleteAndJoinWithRedlineImpl(SwPaM & rPam, SwDeleteFlags const flags, const bool)
{
assert(m_rDoc.getIDocumentRedlineAccess().IsRedlineOn());
@@ -3994,7 +4015,7 @@ bool DocumentContentOperationsManager::DeleteAndJoinWithRedlineImpl( SwPaM & rPa
{
assert(pRedline->HasValidRange());
undos.emplace_back(std::make_unique<SwUndoRedlineDelete>(
- *pRedline, SwUndoId::DELETE));
+ *pRedline, SwUndoId::DELETE, flags));
}
const SwRewriter aRewriter = undos.front()->GetRewriter();
// can only group a single undo action
@@ -4055,7 +4076,7 @@ bool DocumentContentOperationsManager::DeleteAndJoinWithRedlineImpl( SwPaM & rPa
return true;
}
-bool DocumentContentOperationsManager::DeleteAndJoinImpl( SwPaM & rPam,
+bool DocumentContentOperationsManager::DeleteAndJoinImpl(SwPaM & rPam, SwDeleteFlags const flags,
const bool bForceJoinNext )
{
bool bJoinText, bJoinPrev;
@@ -4067,7 +4088,7 @@ bool DocumentContentOperationsManager::DeleteAndJoinImpl( SwPaM & rPam,
}
{
- bool const bSuccess( DeleteRangeImpl( rPam ) );
+ bool const bSuccess( DeleteRangeImpl(rPam, flags) );
if (!bSuccess)
return false;
}
@@ -4086,14 +4107,17 @@ bool DocumentContentOperationsManager::DeleteAndJoinImpl( SwPaM & rPam,
return true;
}
-bool DocumentContentOperationsManager::DeleteRangeImpl(SwPaM & rPam, const bool)
+bool DocumentContentOperationsManager::DeleteRangeImpl(SwPaM & rPam, SwDeleteFlags const flags, const bool)
{
// Move all cursors out of the deleted range, but first copy the
// passed PaM, because it could be a cursor that would be moved!
SwPaM aDelPam( *rPam.GetMark(), *rPam.GetPoint() );
- ::PaMCorrAbs( aDelPam, *aDelPam.GetPoint() );
+ {
+ SwPosition const pos(GetCorrPosition(aDelPam));
+ ::PaMCorrAbs(aDelPam, pos);
+ }
- bool const bSuccess( DeleteRangeImplImpl( aDelPam ) );
+ bool const bSuccess( DeleteRangeImplImpl(aDelPam, flags) );
if (bSuccess)
{ // now copy position from temp copy to given PaM
*rPam.GetPoint() = *aDelPam.GetPoint();
@@ -4102,7 +4126,7 @@ bool DocumentContentOperationsManager::DeleteRangeImpl(SwPaM & rPam, const bool)
return bSuccess;
}
-bool DocumentContentOperationsManager::DeleteRangeImplImpl(SwPaM & rPam)
+bool DocumentContentOperationsManager::DeleteRangeImplImpl(SwPaM & rPam, SwDeleteFlags const flags)
{
SwPosition *pStt = rPam.Start(), *pEnd = rPam.End();
@@ -4167,7 +4191,7 @@ bool DocumentContentOperationsManager::DeleteRangeImplImpl(SwPaM & rPam)
}
if (!bMerged)
{
- m_rDoc.GetIDocumentUndoRedo().AppendUndo( std::make_unique<SwUndoDelete>( rPam ) );
+ m_rDoc.GetIDocumentUndoRedo().AppendUndo(std::make_unique<SwUndoDelete>(rPam, flags));
}
m_rDoc.getIDocumentState().SetModified();
@@ -4179,14 +4203,18 @@ bool DocumentContentOperationsManager::DeleteRangeImplImpl(SwPaM & rPam)
m_rDoc.getIDocumentRedlineAccess().DeleteRedline( rPam, true, RedlineType::Any );
// Delete and move all "Flys at the paragraph", which are within the Selection
- DelFlyInRange(rPam.GetMark()->nNode, rPam.GetPoint()->nNode,
- &rPam.GetMark()->nContent, &rPam.GetPoint()->nContent);
+ if (!(flags & SwDeleteFlags::ArtificialSelection))
+ {
+ DelFlyInRange(rPam.GetMark()->nNode, rPam.GetPoint()->nNode,
+ &rPam.GetMark()->nContent, &rPam.GetPoint()->nContent);
+ }
DelBookmarks(
pStt->nNode,
pEnd->nNode,
nullptr,
&pStt->nContent,
- &pEnd->nContent);
+ &pEnd->nContent,
+ bool(flags & SwDeleteFlags::ArtificialSelection));
SwNodeIndex aSttIdx( pStt->nNode );
SwContentNode * pCNd = aSttIdx.GetNode().GetContentNode();
@@ -4302,7 +4330,7 @@ bool DocumentContentOperationsManager::DeleteRangeImplImpl(SwPaM & rPam)
bool DocumentContentOperationsManager::ReplaceRangeImpl( SwPaM& rPam, const OUString& rStr,
const bool bRegExReplace )
{
- if( !rPam.HasMark() || *rPam.GetPoint() == *rPam.GetMark() )
+ if (!rPam.HasMark())
return false;
bool bJoinText, bJoinPrev;
@@ -4417,12 +4445,26 @@ bool DocumentContentOperationsManager::ReplaceRangeImpl( SwPaM& rPam, const OUSt
InsertItemSet( aTmpRange, aSet );
}
+ // tdf#139982: Appending the redline may immediately delete flys
+ // anchored in the previous text if it's inside an insert redline.
+ // Also flys will be deleted if the redline is accepted. Move them
+ // to the position between the previous text and the new text,
+ // there the chance of surviving both accept and reject is best.
+ SaveFlyArr flys;
+ SaveFlyInRange(aDelPam, *aDelPam.End(), flys, false);
+
if (m_rDoc.GetIDocumentUndoRedo().DoesUndo())
{
m_rDoc.GetIDocumentUndoRedo().AppendUndo(
std::make_unique<SwUndoRedlineDelete>( aDelPam, SwUndoId::REPLACE ));
}
+ // add redline similar to DeleteAndJoinWithRedlineImpl()
+ std::shared_ptr<SwUnoCursor> const pCursor(m_rDoc.CreateUnoCursor(*aDelPam.GetMark()));
+ pCursor->SetMark();
+ *pCursor->GetPoint() = *aDelPam.GetPoint();
m_rDoc.getIDocumentRedlineAccess().AppendRedline( new SwRangeRedline( RedlineType::Delete, aDelPam ), true);
+ RestFlyInRange(flys, *aDelPam.End(), &aDelPam.End()->nNode, true);
+ sw::UpdateFramesForAddDeleteRedline(m_rDoc, *pCursor);
*rPam.GetMark() = *aDelPam.GetMark();
if (m_rDoc.GetIDocumentUndoRedo().DoesUndo())
@@ -4445,8 +4487,8 @@ bool DocumentContentOperationsManager::ReplaceRangeImpl( SwPaM& rPam, const OUSt
m_rDoc.getIDocumentRedlineAccess().SetRedlineFlags( eOld );
*rPam.GetPoint() = pBkmk->GetMarkPos();
- if(pBkmk->IsExpanded())
- *rPam.GetMark() = pBkmk->GetOtherMarkPos();
+ *rPam.GetMark() = pBkmk->IsExpanded() ? pBkmk->GetOtherMarkPos() : pBkmk->GetMarkPos();
+
m_rDoc.getIDocumentMarkAccess()->deleteMark(pBkmk);
}
bJoinText = false;
@@ -4743,26 +4785,25 @@ bool DocumentContentOperationsManager::CopyImplImpl(SwPaM& rPam, SwPosition& rPo
// Move the PaM one node back from the insert position, so that
// the position doesn't get moved
pCopyPam->SetMark();
- bool bCanMoveBack = pCopyPam->Move(fnMoveBackward, GoInContent);
- // If the position was shifted from more than one node, an end node has been skipped
- bool bAfterTable = false;
- if ((rPos.nNode.GetIndex() - pCopyPam->GetPoint()->nNode.GetIndex()) > 1)
+ bool bCanMoveBack = false;
+ // First check if it will be able to move *to* first copied node.
+ // Note this doesn't just check IsStartNode() because SwDoc::AppendDoc()
+ // intentionally sets it to the body start node, perhaps it should just
+ // call SplitNode instead?
+ if (!pStt->nNode.GetNode().IsSectionNode() && !pStt->nNode.GetNode().IsTableNode())
{
- // First go back to the original place
- pCopyPam->GetPoint()->nNode = rPos.nNode;
- pCopyPam->GetPoint()->nContent = rPos.nContent;
-
- bCanMoveBack = false;
- bAfterTable = true;
+ bCanMoveBack = pCopyPam->Move(fnMoveBackward, GoInContent);
}
if( !bCanMoveBack )
{
pCopyPam->GetPoint()->nNode--;
+ pCopyPam->GetPoint()->nContent.Assign(pCopyPam->GetPoint()->nNode.GetNode().GetContentNode(), 0);
assert(pCopyPam->GetPoint()->nContent.GetIndex() == 0);
}
SwNodeRange aRg( pStt->nNode, pEnd->nNode );
SwNodeIndex aInsPos( rPos.nNode );
+ ::std::optional<SwIndex> oInsContentIndex;
const bool bOneNode = pStt->nNode == pEnd->nNode;
SwTextNode* pSttTextNd = pStt->nNode.GetNode().GetTextNode();
SwTextNode* pEndTextNd = pEnd->nNode.GetNode().GetTextNode();
@@ -4912,8 +4953,8 @@ bool DocumentContentOperationsManager::CopyImplImpl(SwPaM& rPam, SwPosition& rPo
// We have to set the correct PaM for Undo, if this PaM starts in a textnode,
// the undo operation will try to merge this node after removing the table.
// If we didn't split a textnode, the PaM should start at the inserted table node
- if( rPos.nContent.GetIndex() == pDestTextNd->Len() )
- { // Insertion at the last position of a textnode (empty or not)
+ if (pDestTextNd->Len() && rPos.nContent.GetIndex() == pDestTextNd->Len())
+ { // Insertion at the last position of a textnode
++aInsPos; // The table will be inserted behind the text node
}
else if( rPos.nContent.GetIndex() )
@@ -4947,27 +4988,18 @@ bool DocumentContentOperationsManager::CopyImplImpl(SwPaM& rPam, SwPosition& rPo
aRg.aEnd--;
}
}
- else if( bCanMoveBack )
- { // Insertion at the first position of a text node. It will not be split, the table
- // will be inserted before the text node.
- // See below, before the SetInsertRange function of the undo object will be called,
- // the CpyPam would be moved to the next content position. This has to be avoided
- // We want to be moved to the table node itself thus we have to set bCanMoveBack
- // and to manipulate pCopyPam.
- bCanMoveBack = false;
- pCopyPam->GetPoint()->nNode--;
- }
+ assert(!bCanMoveBack);
}
pDestTextNd = aInsPos.GetNode().GetTextNode();
if (pEndTextNd)
{
- SwIndex aDestIdx( rPos.nContent );
+ oInsContentIndex.emplace(rPos.nContent);
if( !pDestTextNd )
{
pDestTextNd = pDoc->GetNodes().MakeTextNode( aInsPos,
pDoc->getIDocumentStylePoolAccess().GetTextCollFromPool(RES_POOLCOLL_STANDARD));
- aDestIdx.Assign( pDestTextNd, 0 );
+ oInsContentIndex->Assign(pDestTextNd, 0);
aInsPos--;
// if we have to insert an extra text node
@@ -4985,7 +5017,7 @@ bool DocumentContentOperationsManager::CopyImplImpl(SwPaM& rPam, SwPosition& rPo
PUSH_NUMRULE_STATE
}
- pEndTextNd->CopyText( pDestTextNd, aDestIdx, SwIndex( pEndTextNd ),
+ pEndTextNd->CopyText(pDestTextNd, *oInsContentIndex, SwIndex(pEndTextNd),
pEnd->nContent.GetIndex() );
// Also copy all format templates
@@ -5039,21 +5071,30 @@ bool DocumentContentOperationsManager::CopyImplImpl(SwPaM& rPam, SwPosition& rPo
bCopyBookmarks = false;
}
+ // init *again* - because CopyWithFlyInFly moved startPos
+ SwPosition startPos(SwNodeIndex(pCopyPam->GetPoint()->nNode, +1),
+ SwIndex(SwNodeIndex(pCopyPam->GetPoint()->nNode, +1).GetNode().GetContentNode()));
// at-char anchors post SplitNode are on index 0 of 2nd node and will
// remain there - move them back to the start (end would also work?)
// ... also for at-para anchors; here start is preferable because
// it's consistent with SplitNode from SwUndoInserts::RedoImpl()
- if (pFlysAtInsPos)
+ if (pFlysAtInsPos
+ && (bCanMoveBack
+ || startPos.nNode.GetNode().IsTextNode()
+ || (pCopyPam->GetPoint()->nNode.GetNode().IsStartNode()
+ && startPos.nNode.GetNode().IsSectionNode()))) // not into table
{
- // init *again* - because CopyWithFlyInFly moved startPos
- SwPosition startPos(SwNodeIndex(pCopyPam->GetPoint()->nNode, +1),
- SwIndex(SwNodeIndex(pCopyPam->GetPoint()->nNode, +1).GetNode().GetContentNode()));
if (bCanMoveBack)
{ // pCopyPam is actually 1 before the copy range so move it fwd
SwPaM temp(*pCopyPam->GetPoint());
temp.Move(fnMoveForward, GoInContent);
startPos = *temp.GetPoint();
}
+ else if (startPos.nNode.GetNode().IsSectionNode())
+ { // probably on top-level start node, so no CheckNodesRange here;
+ GoNextNds(&startPos.nNode, false); // SwFEShell::Paste() deletes node
+ startPos.nContent.Assign(startPos.nNode.GetNode().GetContentNode(), 0);
+ }
assert(startPos.nNode.GetNode().IsContentNode());
SwPosition startPosAtPara(startPos);
startPosAtPara.nContent.Assign(nullptr, 0);
@@ -5114,27 +5155,32 @@ bool DocumentContentOperationsManager::CopyImplImpl(SwPaM& rPam, SwPosition& rPo
}
else // incremented in (!pSttTextNd && pDestTextNd) above
{
- pCopyPam->GetMark()->nContent.Assign(pCopyPam->GetContentNode(false), 0);
+ // assign also content index in this case, see testSectionAnchorCopyTableAtStart
+ assert(oInsContentIndex);
+ assert(oInsContentIndex->GetIdxReg() == aInsPos.GetNode().GetContentNode());
+ pCopyPam->GetMark()->nContent = (*oInsContentIndex);
}
rPos = *pCopyPam->GetMark();
}
else
*pCopyPam->GetMark() = rPos;
- if ( !bAfterTable )
- pCopyPam->Move( fnMoveForward, bCanMoveBack ? GoInContent : GoInNode );
+ if (bCanMoveBack)
+ {
+ pCopyPam->Move(fnMoveForward, GoInContent);
+ }
else
{
pCopyPam->GetPoint()->nNode++;
// Reset the offset to 0 as it was before the insertion
pCopyPam->GetPoint()->nContent.Assign(pCopyPam->GetPoint()->nNode.GetNode().GetContentNode(), 0);
- // If the next node is a start node, then step back: the start node
- // has been copied and needs to be in the selection for the undo
+ // If the next node is a start node, then step back: SetInsertRange()
+ // will add 1 in this case, but that is too much...
if (pCopyPam->GetPoint()->nNode.GetNode().IsStartNode())
pCopyPam->GetPoint()->nNode--;
-
}
+ oInsContentIndex.reset();
pCopyPam->Exchange();
// Also copy all bookmarks
diff --git a/sw/source/core/doc/DocumentRedlineManager.cxx b/sw/source/core/doc/DocumentRedlineManager.cxx
index 8ae32f266bdb..718492ab3f79 100644
--- a/sw/source/core/doc/DocumentRedlineManager.cxx
+++ b/sw/source/core/doc/DocumentRedlineManager.cxx
@@ -283,6 +283,12 @@ void UpdateFramesForRemoveDeleteRedline(SwDoc & rDoc, SwPaM const& rPam)
break;
}
+ // no nodes can be unmerged by this - skip MakeFrames() etc.
+ if (rPam.GetPoint()->nNode == rPam.GetMark()->nNode)
+ {
+ break; // continue with AppendAllObjs()
+ }
+
// first, call CheckParaRedlineMerge on the first paragraph,
// to init flag on new merge range (if any) + 1st node post the merge
auto eMode(sw::FrameMode::Existing);
@@ -2319,7 +2325,7 @@ bool DocumentRedlineManager::SplitRedline( const SwPaM& rRange )
SwRedlineTable::size_type n = 0;
const SwPosition* pStt = rRange.Start();
const SwPosition* pEnd = rRange.End();
- GetRedline( *pStt, &n );
+ //FIXME overlapping problem GetRedline( *pStt, &n );
for ( ; n < mpRedlineTable->size(); ++n)
{
SwRangeRedline * pRedline = (*mpRedlineTable)[ n ];
diff --git a/sw/source/core/doc/docbm.cxx b/sw/source/core/doc/docbm.cxx
index 7918e5db8dbe..19d70d112e8b 100644
--- a/sw/source/core/doc/docbm.cxx
+++ b/sw/source/core/doc/docbm.cxx
@@ -963,6 +963,7 @@ namespace sw { namespace mark
static bool isDeleteMark(
::sw::mark::MarkBase const*const pMark,
+ bool const isReplace,
SwNodeIndex const& rStt,
SwNodeIndex const& rEnd,
SwIndex const*const pSttIdx,
@@ -986,6 +987,8 @@ namespace sw { namespace mark
&& lcl_Lower(pMark->GetOtherMarkPos(), rEnd, pEndIdx);
// special case: completely in range, touching the end?
if ( pEndIdx != nullptr
+ && !(isReplace && IDocumentMarkAccess::GetType(*pMark)
+ == IDocumentMarkAccess::MarkType::BOOKMARK)
&& ( ( rbIsOtherPosInRange
&& pMark->GetMarkPos().nNode == rEnd
&& pMark->GetMarkPos().nContent == *pEndIdx )
@@ -1031,7 +1034,7 @@ namespace sw { namespace mark
return false;
}
- bool MarkManager::isBookmarkDeleted(SwPaM const& rPaM) const
+ bool MarkManager::isBookmarkDeleted(SwPaM const& rPaM, bool const isReplace) const
{
SwPosition const& rStart(*rPaM.Start());
SwPosition const& rEnd(*rPaM.End());
@@ -1046,7 +1049,7 @@ namespace sw { namespace mark
bool bIsPosInRange(false);
bool bIsOtherPosInRange(false);
- bool const bDeleteMark = isDeleteMark(pMark,
+ bool const bDeleteMark = isDeleteMark(pMark, isReplace,
rStart.nNode, rEnd.nNode, &rStart.nContent, &rEnd.nContent,
bIsPosInRange, bIsOtherPosInRange);
if (bDeleteMark
@@ -1063,7 +1066,8 @@ namespace sw { namespace mark
const SwNodeIndex& rEnd,
std::vector<SaveBookmark>* pSaveBkmk,
const SwIndex* pSttIdx,
- const SwIndex* pEndIdx )
+ const SwIndex* pEndIdx,
+ bool const isReplace)
{
std::vector<const_iterator_t> vMarksToDelete;
bool bIsSortingNeeded = false;
@@ -1086,7 +1090,7 @@ namespace sw { namespace mark
bool bIsPosInRange(false);
bool bIsOtherPosInRange(false);
- bool const bDeleteMark = isDeleteMark(pMark, rStt, rEnd, pSttIdx, pEndIdx, bIsPosInRange, bIsOtherPosInRange);
+ bool const bDeleteMark = isDeleteMark(pMark, isReplace, rStt, rEnd, pSttIdx, pEndIdx, bIsPosInRange, bIsOtherPosInRange);
if ( bIsPosInRange
&& ( bIsOtherPosInRange
@@ -1803,7 +1807,8 @@ void DelBookmarks(
const SwNodeIndex& rEnd,
std::vector<SaveBookmark> * pSaveBkmk,
const SwIndex* pSttIdx,
- const SwIndex* pEndIdx)
+ const SwIndex* pEndIdx,
+ bool const isReplace)
{
// illegal range ??
if(rStt.GetIndex() > rEnd.GetIndex()
@@ -1811,7 +1816,7 @@ void DelBookmarks(
return;
SwDoc* const pDoc = rStt.GetNode().GetDoc();
- pDoc->getIDocumentMarkAccess()->deleteMarks(rStt, rEnd, pSaveBkmk, pSttIdx, pEndIdx);
+ pDoc->getIDocumentMarkAccess()->deleteMarks(rStt, rEnd, pSaveBkmk, pSttIdx, pEndIdx, isReplace);
// Copy all Redlines which are in the move area into an array
// which holds all position information as offset.
diff --git a/sw/source/core/doc/doccorr.cxx b/sw/source/core/doc/doccorr.cxx
index 8e2769b353e5..a2564119ce06 100644
--- a/sw/source/core/doc/doccorr.cxx
+++ b/sw/source/core/doc/doccorr.cxx
@@ -33,11 +33,14 @@ namespace
/// returns NULL if no restrictions apply
const SwStartNode* lcl_FindUnoCursorSection( const SwNode& rNode )
{
- const SwStartNode* pStartNode = rNode.StartOfSectionNode();
+ const SwStartNode* pStartNode = rNode.IsStartNode() ? rNode.GetStartNode() : rNode.StartOfSectionNode();
while( ( pStartNode != nullptr ) &&
( pStartNode->StartOfSectionNode() != pStartNode ) &&
- ( pStartNode->GetStartNodeType() == SwNormalStartNode ) )
+ // section node is only start node allowing overlapped delete
+ pStartNode->IsSectionNode() )
+ {
pStartNode = pStartNode->StartOfSectionNode();
+ }
return pStartNode;
}
diff --git a/sw/source/core/doc/docedt.cxx b/sw/source/core/doc/docedt.cxx
index 1b93a7a56a78..6587cb0e06a2 100644
--- a/sw/source/core/doc/docedt.cxx
+++ b/sw/source/core/doc/docedt.cxx
@@ -28,6 +28,7 @@
#include <mdiexp.hxx>
#include <mvsave.hxx>
#include <redline.hxx>
+#include <rolbck.hxx>
#include <rootfrm.hxx>
#include <splargs.hxx>
#include <swcrsr.hxx>
@@ -48,7 +49,7 @@ using namespace ::com::sun::star::i18n;
void RestFlyInRange( SaveFlyArr & rArr, const SwPosition& rStartPos,
- const SwNodeIndex* pInsertPos )
+ const SwNodeIndex* pInsertPos, bool const isForceToStartPos)
{
SwPosition aPos(rStartPos);
for(const SaveFly & rSave : rArr)
@@ -57,7 +58,7 @@ void RestFlyInRange( SaveFlyArr & rArr, const SwPosition& rStartPos,
SwFrameFormat* pFormat = rSave.pFrameFormat;
SwFormatAnchor aAnchor( pFormat->GetAnchor() );
- if (rSave.isAtInsertNode)
+ if (rSave.isAtInsertNode || isForceToStartPos)
{
if( pInsertPos != nullptr )
{
@@ -130,7 +131,7 @@ void SaveFlyInRange( const SwNodeRange& rRg, SaveFlyArr& rArr )
}
void SaveFlyInRange( const SwPaM& rPam, const SwPosition& rInsPos,
- SaveFlyArr& rArr, bool bMoveAllFlys )
+ SaveFlyArr& rArr, bool bMoveAllFlys, SwHistory *const pHistory)
{
SwFrameFormats& rFormats = *rPam.GetPoint()->nNode.GetNode().GetDoc()->GetSpzFrameFormats();
SwFrameFormat* pFormat;
@@ -176,6 +177,10 @@ void SaveFlyInRange( const SwPaM& rPam, const SwPosition& rInsPos,
|| (RndStdIds::FLY_AT_CHAR == pAnchor->GetAnchorId()
&& (bInsPos = (rInsPos == *pAPos))))
{
+ if (pHistory)
+ {
+ pHistory->AddChangeFlyAnchor(*pFormat);
+ }
SaveFly aSave( pAPos->nNode.GetIndex() - rSttNdIdx.GetIndex(),
(RndStdIds::FLY_AT_CHAR == pAnchor->GetAnchorId())
? (pAPos->nNode == rSttNdIdx)
@@ -557,7 +562,7 @@ uno::Any SwDoc::Spell( SwPaM& rPaM,
{
nCurrNd = pNd->EndOfSectionIndex();
}
- else if( !static_cast<SwTextFrame*>(pContentFrame)->IsHiddenNow() )
+ else if( !pContentFrame->IsHiddenNow() )
{
if( pPageCnt && *pPageCnt && pPageSt )
{
@@ -778,7 +783,7 @@ static bool lcl_HyphenateNode( const SwNodePtr& rpNd, void* pArgs )
// sw_redlinehide: this will be called once per node for merged nodes;
// the fully deleted ones won't have frames so are skipped.
SwContentFrame* pContentFrame = pNode->getLayoutFrame( pNode->GetDoc()->getIDocumentLayoutAccess().GetCurrentLayout() );
- if( pContentFrame && !static_cast<SwTextFrame*>(pContentFrame)->IsHiddenNow() )
+ if( pContentFrame && !pContentFrame->IsHiddenNow() )
{
sal_uInt16 *pPageSt = pHyphArgs->GetPageSt();
sal_uInt16 *pPageCnt = pHyphArgs->GetPageCnt();
diff --git a/sw/source/core/doc/doclay.cxx b/sw/source/core/doc/doclay.cxx
index ec4861fe39b2..5b3dc0ef3687 100644
--- a/sw/source/core/doc/doclay.cxx
+++ b/sw/source/core/doc/doclay.cxx
@@ -157,13 +157,12 @@ SwFlyFrameFormat* SwDoc::MakeFlySection_( const SwPosition& rAnchPos,
pFrameFormat = getIDocumentStylePoolAccess().GetFrameFormatFromPool( RES_POOLFRM_FRAME );
OUString sName;
- if( !mbInReading )
- switch( rNode.GetNodeType() )
- {
+ switch( rNode.GetNodeType() )
+ {
case SwNodeType::Grf: sName = GetUniqueGrfName(); break;
case SwNodeType::Ole: sName = GetUniqueOLEName(); break;
default: sName = GetUniqueFrameName(); break;
- }
+ }
SwFlyFrameFormat* pFormat = MakeFlyFrameFormat( sName, pFrameFormat );
// Create content and connect to the format.
@@ -1408,6 +1407,10 @@ const SwFlyFrameFormat* SwDoc::FindFlyByName( const OUString& rName, SwNodeType
void SwDoc::SetFlyName( SwFlyFrameFormat& rFormat, const OUString& rName )
{
+ if (rFormat.GetName() == rName)
+ {
+ return;
+ }
OUString sName( rName );
if( sName.isEmpty() || FindFlyByName( sName ) )
{
diff --git a/sw/source/core/doc/docnew.cxx b/sw/source/core/doc/docnew.cxx
index 984f2335bc45..6b041fa96c51 100644
--- a/sw/source/core/doc/docnew.cxx
+++ b/sw/source/core/doc/docnew.cxx
@@ -1054,19 +1054,19 @@ SwNodeIndex SwDoc::AppendDoc(const SwDoc& rSource, sal_uInt16 const nStartPageNu
{
SwNodeIndex aBreakIdx( GetNodes().GetEndOfContent(), -1 );
SwPosition aBreakPos( aBreakIdx );
- // InsertPageBreak just works on SwTextNode nodes, so make
- // sure the last node is one!
- bool bIsTextNode = aBreakIdx.GetNode().IsTextNode();
- if ( !bIsTextNode )
- getIDocumentContentOperations().AppendTextNode( aBreakPos );
- const OUString name = pTargetPageDesc->GetName();
- pTargetShell->InsertPageBreak( &name, nStartPageNumber );
- if ( !bIsTextNode )
- {
- pTargetShell->SttEndDoc( false );
- --aBreakIdx;
- GetNodes().Delete( aBreakIdx );
- }
+ // insert new node - will be removed at the end...
+ // (don't SplitNode() as it may move flys to the wrong node)
+ getIDocumentContentOperations().AppendTextNode(aBreakPos);
+ SwFormatPageDesc pageDesc(pTargetPageDesc);
+ pageDesc.SetNumOffset(nStartPageNumber);
+ // set break on the last paragraph
+ getIDocumentContentOperations().InsertPoolItem(SwPaM(aBreakPos),
+ pageDesc, SetAttrMode::DEFAULT, pTargetShell->GetLayout());
+ // tdf#148309 move to the last node - so that the "flush page break"
+ // code below will format the frame of the node with the page break,
+ // which is required for new page frames to be created! Else layout
+ // performance will be terrible.
+ pTargetShell->SttEndDoc(false);
// There is now a new empty text node on the new page. If it has
// any marks, those are from the previous page: move them back
@@ -1097,6 +1097,7 @@ SwNodeIndex SwDoc::AppendDoc(const SwDoc& rSource, sal_uInt16 const nStartPageNu
if ( !bDeletePrevious )
{
SAL_INFO( "sw.pageframe", "(Flush pagebreak AKA EndAllAction" );
+ assert(pTargetShell->GetCursor()->GetPoint()->nNode.GetNode().GetTextNode()->GetSwAttrSet().HasItem(RES_PAGEDESC));
pTargetShell->EndAllAction();
SAL_INFO( "sw.pageframe", "Flush changes AKA EndAllAction)" );
pTargetShell->StartAllAction();
diff --git a/sw/source/core/doc/textboxhelper.cxx b/sw/source/core/doc/textboxhelper.cxx
index ea57aa58319d..40d1bb607c1e 100644
--- a/sw/source/core/doc/textboxhelper.cxx
+++ b/sw/source/core/doc/textboxhelper.cxx
@@ -90,7 +90,8 @@ void SwTextBoxHelper::create(SwFrameFormat* pShape)
xPropertySet->setPropertyValue(UNO_NAME_SURROUND, uno::makeAny(text::WrapTextMode_THROUGH));
uno::Reference<container::XNamed> xNamed(xTextFrame, uno::UNO_QUERY);
- xNamed->setName(pShape->GetDoc()->GetUniqueFrameName());
+ assert(!xNamed->getName().isEmpty());
+ (void)xNamed;
// Link its text range to the original shape.
uno::Reference<text::XTextRange> xTextBox(xTextFrame, uno::UNO_QUERY_THROW);
diff --git a/sw/source/core/docnode/ndsect.cxx b/sw/source/core/docnode/ndsect.cxx
index 8c2efee0eb7e..ce0f6cf8d4eb 100644
--- a/sw/source/core/docnode/ndsect.cxx
+++ b/sw/source/core/docnode/ndsect.cxx
@@ -535,7 +535,7 @@ void SwDoc::DelSectionFormat( SwSectionFormat *pFormat, bool bDelNodes )
{
SwNodeIndex aUpdIdx( *pIdx );
SwPaM aPaM( *pSectNd->EndOfSectionNode(), *pSectNd );
- GetIDocumentUndoRedo().AppendUndo( std::make_unique<SwUndoDelete>( aPaM ));
+ GetIDocumentUndoRedo().AppendUndo(std::make_unique<SwUndoDelete>(aPaM, SwDeleteFlags::Default));
if( pFootnoteEndAtTextEnd )
GetFootnoteIdxs().UpdateFootnote( aUpdIdx );
getIDocumentState().SetModified();
@@ -1013,9 +1013,9 @@ SwSectionNode::~SwSectionNode()
}
}
-SwFrame *SwSectionNode::MakeFrame( SwFrame *pSib )
+SwFrame* SwSectionNode::MakeFrame(SwFrame* pSib, bool bHidden)
{
- m_pSection->m_Data.SetHiddenFlag(false);
+ m_pSection->m_Data.SetHiddenFlag(bHidden);
return new SwSectionFrame( *m_pSection, pSib );
}
diff --git a/sw/source/core/docnode/ndtbl.cxx b/sw/source/core/docnode/ndtbl.cxx
index 15a49729ce51..690b3ade304a 100644
--- a/sw/source/core/docnode/ndtbl.cxx
+++ b/sw/source/core/docnode/ndtbl.cxx
@@ -880,6 +880,35 @@ const SwTable* SwDoc::TextToTable( const SwInsertTableOptions& rInsTableOpts,
return &rNdTable;
}
+static void lcl_RemoveBreaksTable(SwTableNode & rNode, SwTableFormat *const pTableFormat)
+{
+ // delete old layout frames, new ones need to be created...
+ rNode.DelFrames(nullptr);
+
+ // remove PageBreaks/PageDesc/ColBreak
+ SwFrameFormat & rFormat(*rNode.GetTable().GetFrameFormat());
+
+ const SfxPoolItem* pItem;
+ if (SfxItemState::SET == rFormat.GetItemState(RES_BREAK, false, &pItem))
+ {
+ if (pTableFormat)
+ {
+ pTableFormat->SetFormatAttr(*pItem);
+ }
+ rFormat.ResetFormatAttr(RES_BREAK);
+ }
+
+ if (SfxItemState::SET == rFormat.GetItemState(RES_PAGEDESC, false, &pItem)
+ && static_cast<SwFormatPageDesc const*>(pItem)->GetPageDesc())
+ {
+ if (pTableFormat)
+ {
+ pTableFormat->SetFormatAttr(*pItem);
+ }
+ rFormat.ResetFormatAttr(RES_PAGEDESC);
+ }
+}
+
static void lcl_RemoveBreaks(SwContentNode & rNode, SwTableFormat *const pTableFormat)
{
// delete old layout frames, new ones need to be created...
@@ -1386,10 +1415,19 @@ SwTableNode* SwNodes::TextToTable( const SwNodes::TableRanges_t & rTableNodes,
// delete frames of all contained content nodes
for( nLines = 0; aNodeIndex <= rTableNodes.rbegin()->rbegin()->aEnd; ++aNodeIndex,++nLines )
{
- SwNode& rNode = aNodeIndex.GetNode();
- if( rNode.IsContentNode() )
+ SwNode* pNode(&aNodeIndex.GetNode());
+ while (pNode->IsSectionNode()) // could be ToX field in table
{
- lcl_RemoveBreaks(static_cast<SwContentNode&>(rNode),
+ pNode = pNode->GetNodes()[pNode->GetIndex()+1];
+ }
+ if (pNode->IsTableNode())
+ {
+ lcl_RemoveBreaksTable(static_cast<SwTableNode&>(*pNode),
+ (0 == nLines) ? pTableFormat : nullptr);
+ }
+ else if (pNode->IsContentNode())
+ {
+ lcl_RemoveBreaks(static_cast<SwContentNode&>(*pNode),
(0 == nLines) ? pTableFormat : nullptr);
}
}
@@ -1929,169 +1967,210 @@ void SwDoc::DeleteCol( const SwCursor& rCursor )
// Thus delete the Columns
GetIDocumentUndoRedo().StartUndo(SwUndoId::COL_DELETE, nullptr);
- DeleteRowCol( aBoxes, true );
+ DeleteRowCol(aBoxes, SwDoc::RowColMode::DeleteColumn);
GetIDocumentUndoRedo().EndUndo(SwUndoId::COL_DELETE, nullptr);
}
-bool SwDoc::DeleteRowCol( const SwSelBoxes& rBoxes, bool bColumn )
+void SwDoc::DelTable(SwTableNode *const pTableNd)
{
- if( ::HasProtectedCells( rBoxes ))
- return false;
-
- OSL_ENSURE( !rBoxes.empty(), "No valid Box list" );
- SwTableNode* pTableNd = const_cast<SwTableNode*>(rBoxes[0]->GetSttNd()->FindTableNode());
- if( !pTableNd )
- return false;
-
- if( dynamic_cast<const SwDDETable*>( &pTableNd->GetTable() ) != nullptr)
- return false;
-
- ::ClearFEShellTabCols(*this, nullptr);
- SwSelBoxes aSelBoxes( rBoxes );
- SwTable &rTable = pTableNd->GetTable();
- long nMin = 0;
- long nMax = 0;
- if( rTable.IsNewModel() )
{
- if( bColumn )
- rTable.ExpandColumnSelection( aSelBoxes, nMin, nMax );
- else
- rTable.FindSuperfluousRows( aSelBoxes );
+ // tdf#156267 remove DdeBookmarks before deleting nodes
+ SwDataChanged aTmp(SwPaM(*pTableNd, *pTableNd->EndOfSectionNode()));
}
- // Are we deleting the whole Table?
- const sal_uLong nTmpIdx1 = pTableNd->GetIndex();
- const sal_uLong nTmpIdx2 = aSelBoxes.back()->GetSttNd()->EndOfSectionIndex() + 1;
- if( pTableNd->GetTable().GetTabSortBoxes().size() == aSelBoxes.size() &&
- aSelBoxes[0]->GetSttIdx()-1 == nTmpIdx1 &&
- nTmpIdx2 == pTableNd->EndOfSectionIndex() )
+ bool bNewTextNd = false;
+ // Is it alone in a FlyFrame?
+ SwNodeIndex aIdx( *pTableNd, -1 );
+ const SwStartNode* pSttNd = aIdx.GetNode().GetStartNode();
+ if( pSttNd )
{
- bool bNewTextNd = false;
- // Is it alone in a FlyFrame?
- SwNodeIndex aIdx( *pTableNd, -1 );
- const SwStartNode* pSttNd = aIdx.GetNode().GetStartNode();
- if( pSttNd )
+ const sal_uLong nTableEnd = pTableNd->EndOfSectionIndex() + 1;
+ const sal_uLong nSectEnd = pSttNd->EndOfSectionIndex();
+ if( nTableEnd == nSectEnd )
{
- const sal_uLong nTableEnd = pTableNd->EndOfSectionIndex() + 1;
- const sal_uLong nSectEnd = pSttNd->EndOfSectionIndex();
- if( nTableEnd == nSectEnd )
+ if( SwFlyStartNode == pSttNd->GetStartNodeType() )
{
- if( SwFlyStartNode == pSttNd->GetStartNodeType() )
+ SwFrameFormat* pFormat = pSttNd->GetFlyFormat();
+ if( pFormat )
{
- SwFrameFormat* pFormat = pSttNd->GetFlyFormat();
- if( pFormat )
- {
- // That's the FlyFormat we're looking for
- getIDocumentLayoutAccess().DelLayoutFormat( pFormat );
- return true;
- }
+ // That's the FlyFormat we're looking for
+ getIDocumentLayoutAccess().DelLayoutFormat( pFormat );
+ return;
}
- // No Fly? Thus Header or Footer: always leave a TextNode
- // We can forget about Undo then!
- bNewTextNd = true;
}
+ // No Fly? Thus Header or Footer: always leave a TextNode
+ // We can forget about Undo then!
+ bNewTextNd = true;
}
+ }
- // No Fly? Then it is a Header or Footer, so keep always a TextNode
- ++aIdx;
- if (GetIDocumentUndoRedo().DoesUndo())
+ // No Fly? Then it is a Header or Footer, so keep always a TextNode
+ ++aIdx;
+ if (GetIDocumentUndoRedo().DoesUndo())
+ {
+ GetIDocumentUndoRedo().ClearRedo();
+ SwPaM aPaM( *pTableNd->EndOfSectionNode(), aIdx.GetNode() );
+
+ if( bNewTextNd )
{
- GetIDocumentUndoRedo().ClearRedo();
- SwPaM aPaM( *pTableNd->EndOfSectionNode(), aIdx.GetNode() );
+ const SwNodeIndex aTmpIdx( *pTableNd->EndOfSectionNode(), 1 );
+ GetNodes().MakeTextNode( aTmpIdx,
+ getIDocumentStylePoolAccess().GetTextCollFromPool( RES_POOLCOLL_STANDARD ) );
+ }
- if( bNewTextNd )
+ // Save the cursors (UNO and otherwise)
+ SwPaM const* pSavePaM(nullptr);
+ SwPaM forwardPaM{SwNodeIndex(*pTableNd->EndOfSectionNode())};
+ if (forwardPaM.Move(fnMoveForward, GoInNode))
+ {
+ pSavePaM = &forwardPaM;
+ }
+ SwPaM backwardPaM{SwNodeIndex(*pTableNd)};
+ if (backwardPaM.Move(fnMoveBackward, GoInNode))
+ {
+ if (pSavePaM == nullptr
+ // try to stay in the same outer table cell
+ || (forwardPaM.GetPoint()->nNode.GetNode().FindTableNode() != pTableNd->StartOfSectionNode()->FindTableNode()
+ && forwardPaM.GetPoint()->nNode.GetNode().StartOfSectionIndex()
+ < backwardPaM.GetPoint()->nNode.GetNode().StartOfSectionIndex()))
{
- const SwNodeIndex aTmpIdx( *pTableNd->EndOfSectionNode(), 1 );
- GetNodes().MakeTextNode( aTmpIdx,
- getIDocumentStylePoolAccess().GetTextCollFromPool( RES_POOLCOLL_STANDARD ) );
+ pSavePaM = &backwardPaM;
}
+ }
+ assert(pSavePaM); // due to bNewTextNd this must succeed
+ {
+ SwPaM const tmpPaM(*pTableNd, *pTableNd->EndOfSectionNode());
+ ::PaMCorrAbs(tmpPaM, *pSavePaM->GetPoint());
+ }
- // Save the cursors (UNO and otherwise)
- SwPaM aSavePaM( SwNodeIndex( *pTableNd->EndOfSectionNode() ) );
- if( ! aSavePaM.Move( fnMoveForward, GoInNode ) )
- {
- *aSavePaM.GetMark() = SwPosition( *pTableNd );
- aSavePaM.Move( fnMoveBackward, GoInNode );
- }
+ // Move hard PageBreaks to the succeeding Node
+ bool bSavePageBreak = false, bSavePageDesc = false;
+ sal_uLong nNextNd = pTableNd->EndOfSectionIndex()+1;
+ SwContentNode* pNextNd = GetNodes()[ nNextNd ]->GetContentNode();
+ if( pNextNd )
+ {
+ SwFrameFormat* pTableFormat = pTableNd->GetTable().GetFrameFormat();
+ const SfxPoolItem *pItem;
+ if( SfxItemState::SET == pTableFormat->GetItemState( RES_PAGEDESC,
+ false, &pItem ) )
{
- SwPaM const tmpPaM(*pTableNd, *pTableNd->EndOfSectionNode());
- ::PaMCorrAbs(tmpPaM, *aSavePaM.GetMark());
+ pNextNd->SetAttr( *pItem );
+ bSavePageDesc = true;
}
- // Move hard PageBreaks to the succeeding Node
- bool bSavePageBreak = false, bSavePageDesc = false;
- sal_uLong nNextNd = pTableNd->EndOfSectionIndex()+1;
- SwContentNode* pNextNd = GetNodes()[ nNextNd ]->GetContentNode();
- if( pNextNd )
+ if( SfxItemState::SET == pTableFormat->GetItemState( RES_BREAK,
+ false, &pItem ) )
{
- SwFrameFormat* pTableFormat = pTableNd->GetTable().GetFrameFormat();
- const SfxPoolItem *pItem;
- if( SfxItemState::SET == pTableFormat->GetItemState( RES_PAGEDESC,
- false, &pItem ) )
- {
- pNextNd->SetAttr( *pItem );
- bSavePageDesc = true;
- }
-
- if( SfxItemState::SET == pTableFormat->GetItemState( RES_BREAK,
- false, &pItem ) )
- {
- pNextNd->SetAttr( *pItem );
- bSavePageBreak = true;
- }
+ pNextNd->SetAttr( *pItem );
+ bSavePageBreak = true;
}
- std::unique_ptr<SwUndoDelete> pUndo(new SwUndoDelete( aPaM ));
- if( bNewTextNd )
- pUndo->SetTableDelLastNd();
- pUndo->SetPgBrkFlags( bSavePageBreak, bSavePageDesc );
- pUndo->SetTableName(pTableNd->GetTable().GetFrameFormat()->GetName());
- GetIDocumentUndoRedo().AppendUndo( std::move(pUndo) );
}
- else
+ std::unique_ptr<SwUndoDelete> pUndo(new SwUndoDelete(aPaM, SwDeleteFlags::Default));
+ if( bNewTextNd )
+ pUndo->SetTableDelLastNd();
+ pUndo->SetPgBrkFlags( bSavePageBreak, bSavePageDesc );
+ pUndo->SetTableName(pTableNd->GetTable().GetFrameFormat()->GetName());
+ GetIDocumentUndoRedo().AppendUndo( std::move(pUndo) );
+ }
+ else
+ {
+ if( bNewTextNd )
{
- if( bNewTextNd )
- {
- const SwNodeIndex aTmpIdx( *pTableNd->EndOfSectionNode(), 1 );
- GetNodes().MakeTextNode( aTmpIdx,
- getIDocumentStylePoolAccess().GetTextCollFromPool( RES_POOLCOLL_STANDARD ) );
- }
-
- // Save the cursors (UNO and otherwise)
- SwPaM aSavePaM( SwNodeIndex( *pTableNd->EndOfSectionNode() ) );
- if( ! aSavePaM.Move( fnMoveForward, GoInNode ) )
- {
- *aSavePaM.GetMark() = SwPosition( *pTableNd );
- aSavePaM.Move( fnMoveBackward, GoInNode );
- }
- {
- SwPaM const tmpPaM(*pTableNd, *pTableNd->EndOfSectionNode());
- ::PaMCorrAbs(tmpPaM, *aSavePaM.GetMark());
- }
+ const SwNodeIndex aTmpIdx( *pTableNd->EndOfSectionNode(), 1 );
+ GetNodes().MakeTextNode( aTmpIdx,
+ getIDocumentStylePoolAccess().GetTextCollFromPool( RES_POOLCOLL_STANDARD ) );
+ }
- // Move hard PageBreaks to the succeeding Node
- SwContentNode* pNextNd = GetNodes()[ pTableNd->EndOfSectionIndex()+1 ]->GetContentNode();
- if( pNextNd )
+ // Save the cursors (UNO and otherwise)
+ SwPaM const* pSavePaM(nullptr);
+ SwPaM forwardPaM{SwNodeIndex(*pTableNd->EndOfSectionNode())};
+ if (forwardPaM.Move(fnMoveForward, GoInNode))
+ {
+ pSavePaM = &forwardPaM;
+ }
+ SwPaM backwardPaM{SwNodeIndex(*pTableNd)};
+ if (backwardPaM.Move(fnMoveBackward, GoInNode))
+ {
+ if (pSavePaM == nullptr
+ // try to stay in the same outer table cell
+ || (forwardPaM.GetPoint()->nNode.GetNode().FindTableNode() != pTableNd->StartOfSectionNode()->FindTableNode()
+ && forwardPaM.GetPoint()->nNode.GetNode().StartOfSectionIndex()
+ < backwardPaM.GetPoint()->nNode.GetNode().StartOfSectionIndex()))
{
- SwFrameFormat* pTableFormat = pTableNd->GetTable().GetFrameFormat();
- const SfxPoolItem *pItem;
- if( SfxItemState::SET == pTableFormat->GetItemState( RES_PAGEDESC,
- false, &pItem ) )
- pNextNd->SetAttr( *pItem );
-
- if( SfxItemState::SET == pTableFormat->GetItemState( RES_BREAK,
- false, &pItem ) )
- pNextNd->SetAttr( *pItem );
+ pSavePaM = &backwardPaM;
}
+ }
+ assert(pSavePaM); // due to bNewTextNd this must succeed
+ {
+ SwPaM const tmpPaM(*pTableNd, *pTableNd->EndOfSectionNode());
+ ::PaMCorrAbs(tmpPaM, *pSavePaM->GetPoint());
+ }
- pTableNd->DelFrames();
- getIDocumentContentOperations().DeleteSection( pTableNd );
+ // Move hard PageBreaks to the succeeding Node
+ SwContentNode* pNextNd = GetNodes()[ pTableNd->EndOfSectionIndex()+1 ]->GetContentNode();
+ if( pNextNd )
+ {
+ SwFrameFormat* pTableFormat = pTableNd->GetTable().GetFrameFormat();
+ const SfxPoolItem *pItem;
+ if( SfxItemState::SET == pTableFormat->GetItemState( RES_PAGEDESC,
+ false, &pItem ) )
+ pNextNd->SetAttr( *pItem );
+
+ if( SfxItemState::SET == pTableFormat->GetItemState( RES_BREAK,
+ false, &pItem ) )
+ pNextNd->SetAttr( *pItem );
}
- GetDocShell()->GetFEShell()->UpdateTableStyleFormatting();
+ pTableNd->DelFrames();
+ getIDocumentContentOperations().DeleteSection( pTableNd );
+ }
- getIDocumentState().SetModified();
- getIDocumentFieldsAccess().SetFieldsDirty( true, nullptr, 0 );
+ GetDocShell()->GetFEShell()->UpdateTableStyleFormatting();
+
+ getIDocumentState().SetModified();
+ getIDocumentFieldsAccess().SetFieldsDirty( true, nullptr, 0 );
+}
+bool SwDoc::DeleteRowCol(const SwSelBoxes& rBoxes, RowColMode const eMode)
+{
+ if (!(eMode & SwDoc::RowColMode::DeleteProtected)
+ && ::HasProtectedCells(rBoxes))
+ {
+ return false;
+ }
+
+ OSL_ENSURE( !rBoxes.empty(), "No valid Box list" );
+ SwTableNode* pTableNd = const_cast<SwTableNode*>(rBoxes[0]->GetSttNd()->FindTableNode());
+ if( !pTableNd )
+ return false;
+
+ if (!(eMode & SwDoc::RowColMode::DeleteProtected)
+ && dynamic_cast<const SwDDETable*>(&pTableNd->GetTable()) != nullptr)
+ {
+ return false;
+ }
+
+ ::ClearFEShellTabCols(*this, nullptr);
+ SwSelBoxes aSelBoxes( rBoxes );
+ SwTable &rTable = pTableNd->GetTable();
+ long nMin = 0;
+ long nMax = 0;
+ if( rTable.IsNewModel() )
+ {
+ if (eMode & SwDoc::RowColMode::DeleteColumn)
+ rTable.ExpandColumnSelection( aSelBoxes, nMin, nMax );
+ else
+ rTable.FindSuperfluousRows( aSelBoxes );
+ }
+
+ // Are we deleting the whole Table?
+ const sal_uLong nTmpIdx1 = pTableNd->GetIndex();
+ const sal_uLong nTmpIdx2 = aSelBoxes.back()->GetSttNd()->EndOfSectionIndex() + 1;
+ if( pTableNd->GetTable().GetTabSortBoxes().size() == aSelBoxes.size() &&
+ aSelBoxes[0]->GetSttIdx()-1 == nTmpIdx1 &&
+ nTmpIdx2 == pTableNd->EndOfSectionIndex() )
+ {
+ DelTable(pTableNd);
return true;
}
@@ -2112,7 +2191,7 @@ bool SwDoc::DeleteRowCol( const SwSelBoxes& rBoxes, bool bColumn )
if (rTable.IsNewModel())
{
- if (bColumn)
+ if (eMode & SwDoc::RowColMode::DeleteColumn)
rTable.PrepareDeleteCol( nMin, nMax );
rTable.FindSuperfluousRows( aSelBoxes );
if (pUndo)
diff --git a/sw/source/core/docnode/node.cxx b/sw/source/core/docnode/node.cxx
index 955e113f2768..0bf2729cd02c 100644
--- a/sw/source/core/docnode/node.cxx
+++ b/sw/source/core/docnode/node.cxx
@@ -1384,6 +1384,12 @@ void SwContentNode::DelFrames(SwRootFrame const*const pLayout)
pMerged->pParaPropsNode = pNode->GetTextNode();
break;
}
+ else if (pMerged->pFirstNode->GetIndex() == i)
+ { // this can only happen when called from CheckParaRedlineMerge()
+ // and the pMerged will be deleted anyway
+ pMerged->pParaPropsNode = pMerged->pFirstNode;
+ break;
+ }
}
assert(pMerged->listener.IsListeningTo(pMerged->pParaPropsNode));
}
diff --git a/sw/source/core/docnode/nodes.cxx b/sw/source/core/docnode/nodes.cxx
index 2a2bef4f4488..8e8587994c88 100644
--- a/sw/source/core/docnode/nodes.cxx
+++ b/sw/source/core/docnode/nodes.cxx
@@ -43,6 +43,7 @@
#include <fmtftn.hxx>
#include <docsh.hxx>
+#include <rootfrm.hxx>
typedef std::vector<SwStartNode*> SwStartNodePointers;
@@ -1294,17 +1295,49 @@ SwContentNode* SwNodes::GoNext(SwNodeIndex *pIdx) const
return static_cast<SwContentNode*>(pNd);
}
-SwContentNode* SwNodes::GoPrevious(SwNodeIndex *pIdx)
+sal_uLong SwNodes::StartOfGlobalSection(const SwNode& node) const
+{
+ const sal_uLong pos = node.GetIndex();
+ if (GetEndOfExtras().GetIndex() < pos)
+ // Regular ContentSection
+ return GetEndOfExtras().GetIndex() + sal_uLong(1);
+ if (GetEndOfAutotext().GetIndex() < pos)
+ // Redlines
+ return GetEndOfAutotext().GetIndex() + sal_uLong(1);
+ if (GetEndOfInserts().GetIndex() < pos)
+ {
+ // Flys/Headers/Footers
+ if (auto* p = node.FindFlyStartNode())
+ return p->GetIndex();
+ if (auto* p = node.FindHeaderStartNode())
+ return p->GetIndex();
+ if (auto* p = node.FindFooterStartNode())
+ return p->GetIndex();
+ return GetEndOfInserts().GetIndex() + sal_uLong(1);
+ }
+ if (GetEndOfPostIts().GetIndex() < pos)
+ {
+ // Footnotes
+ if (auto* p = node.FindFootnoteStartNode())
+ return p->GetIndex();
+ return GetEndOfPostIts().GetIndex() + sal_uLong(1);
+ }
+ return sal_uLong(0);
+}
+
+SwContentNode* SwNodes::GoPrevious(SwNodeIndex* pIdx, bool canCrossBoundary)
{
if( !pIdx->GetIndex() )
return nullptr;
SwNodeIndex aTmp( *pIdx, -1 );
+ sal_uLong aGlobalStart(
+ canCrossBoundary ? sal_uLong(0) : aTmp.GetNodes().StartOfGlobalSection(pIdx->GetNode()));
SwNode* pNd = nullptr;
- while( aTmp.GetIndex() && !( pNd = &aTmp.GetNode())->IsContentNode() )
+ while (aTmp > aGlobalStart && !(pNd = &aTmp.GetNode())->IsContentNode())
--aTmp;
- if( !aTmp.GetIndex() )
+ if (aTmp <= aGlobalStart)
pNd = nullptr;
else
(*pIdx) = aTmp;
@@ -1804,7 +1837,7 @@ void SwNodes::CopyNodes( const SwNodeRange& rRange,
// If the end of the section is outside the copy range,
// the section node will skipped, not copied!
// If someone want to change this behaviour, he has to adjust the function
- // lcl_NonCopyCount(..) in ndcopy.cxx which relies on it.
+ // lcl_NonCopyCount() which relies on it.
if( pCurrentNode->EndOfSectionIndex() < aRg.aEnd.GetIndex() )
{
// copy of the whole section, so create a new SectionNode
@@ -1939,7 +1972,7 @@ SwContentNode* SwNodes::GoNextSection( SwNodeIndex * pIdx,
if (SwNodeType::Section == pNd->GetNodeType())
{
const SwSection& rSect = static_cast<const SwSectionNode*>(pNd)->GetSection();
- if( (bSkipHidden && rSect.IsHiddenFlag()) ||
+ if( (bSkipHidden && rSect.CalcHiddenFlag()) ||
(bSkipProtect && rSect.IsProtectFlag()) )
// than skip the section
aTmp = *pNd->EndOfSectionNode();
@@ -1950,7 +1983,7 @@ SwContentNode* SwNodes::GoNextSection( SwNodeIndex * pIdx,
{
const SwSection& rSect = static_cast<SwSectionNode*>(pNd->
m_pStartOfSection)->GetSection();
- if( (bSkipHidden && rSect.IsHiddenFlag()) ||
+ if( (bSkipHidden && rSect.CalcHiddenFlag()) ||
(bSkipProtect && rSect.IsProtectFlag()) )
// than skip the section
aTmp = *pNd->EndOfSectionNode();
@@ -1961,7 +1994,7 @@ SwContentNode* SwNodes::GoNextSection( SwNodeIndex * pIdx,
const SwSectionNode* pSectNd;
if( ( bSkipHidden || bSkipProtect ) &&
nullptr != (pSectNd = pNd->FindSectionNode() ) &&
- ( ( bSkipHidden && pSectNd->GetSection().IsHiddenFlag() ) ||
+ ( ( bSkipHidden && pSectNd->GetSection().CalcHiddenFlag() ) ||
( bSkipProtect && pSectNd->GetSection().IsProtectFlag() )) )
{
aTmp = *pSectNd->EndOfSectionNode();
@@ -1984,8 +2017,9 @@ SwContentNode* SwNodes::GoPrevSection( SwNodeIndex * pIdx,
{
bool bFirst = true;
SwNodeIndex aTmp( *pIdx );
+ sal_uLong aGlobalStart(aTmp.GetNodes().StartOfGlobalSection(pIdx->GetNode()));
const SwNode* pNd;
- while( aTmp > 0 )
+ while (aTmp > aGlobalStart)
{
pNd = & aTmp.GetNode();
if (SwNodeType::End == pNd->GetNodeType())
@@ -2035,90 +2069,108 @@ SwContentNode* SwNodes::GoPrevSection( SwNodeIndex * pIdx,
return nullptr;
}
-//TODO: improve documentation
//TODO: The inventor of the "single responsibility principle" will be crying if you ever show this code to him!
-/** find the next/previous ContentNode or a table node with frames
+/** find the next/previous ContentNode or table node that should have layout
+ * frames that are siblings to the ones of the node at rFrameIdx.
*
- * If no pEnd is given, search is started with FrameIndex; otherwise
- * search is started with the one before rFrameIdx and after pEnd.
+ * Search is started backward with the one before rFrameIdx and
+ * forward after pEnd.
*
- * @param rFrameIdx node with frames to search in
- * @param pEnd ???
- * @return result node; 0 (!!!) if not found
+ * @param rFrameIdx in: node with frames to search in; out: found node
+ * @param pEnd last node after rFrameIdx that should be excluded from search
+ * @return result node; 0 if not found
*/
SwNode* SwNodes::FindPrvNxtFrameNode( SwNodeIndex& rFrameIdx,
- const SwNode* pEnd ) const
+ SwNode const*const pEnd,
+ SwRootFrame const*const pLayout) const
{
+ assert(pEnd != nullptr); // every caller currently
+
SwNode* pFrameNd = nullptr;
// no layout -> skip
if( GetDoc()->getIDocumentLayoutAccess().GetCurrentViewShell() )
{
- SwNode* pSttNd = &rFrameIdx.GetNode();
+ SwNode *const pSttNd = &rFrameIdx.GetNode();
- // move of a hidden section?
- SwSectionNode* pSectNd = pSttNd->IsSectionNode()
+ // inside a hidden section?
+ SwSectionNode *const pSectNd = pSttNd->IsSectionNode()
? pSttNd->StartOfSectionNode()->FindSectionNode()
: pSttNd->FindSectionNode();
if( !( pSectNd && pSectNd->GetSection().CalcHiddenFlag() ) )
{
// in a table in table situation we have to assure that we don't leave the
// outer table cell when the inner table is looking for a PrvNxt...
- SwTableNode* pTableNd = pSttNd->IsTableNode()
+ SwTableNode *const pTableNd = pSttNd->IsTableNode()
? pSttNd->StartOfSectionNode()->FindTableNode()
: pSttNd->FindTableNode();
SwNodeIndex aIdx( rFrameIdx );
- SwNode* pNd;
- if( pEnd )
- {
- --aIdx;
- pNd = &aIdx.GetNode();
- }
- else
- pNd = pSttNd;
-
- if( ( pFrameNd = pNd )->IsContentNode() )
- rFrameIdx = aIdx;
-
- // search forward or backward for a content node
- else if( nullptr != ( pFrameNd = GoPrevSection( &aIdx, true, false )) &&
- ::CheckNodesRange( aIdx, rFrameIdx, true ) &&
- // Never out of the table at the start
- pFrameNd->FindTableNode() == pTableNd &&
- // Bug 37652: Never out of the table at the end
- (!pFrameNd->FindTableNode() || pFrameNd->FindTableBoxStartNode()
- == pSttNd->FindTableBoxStartNode() ) &&
- (!pSectNd || pSttNd->IsSectionNode() ||
- pSectNd->GetIndex() < pFrameNd->GetIndex())
- )
+
+ // search backward for a content or table node
+
+ --aIdx;
+ pFrameNd = &aIdx.GetNode();
+
+ do
{
- rFrameIdx = aIdx;
+ if (pFrameNd->IsContentNode())
+ {
+ // TODO why does this not check for nested tables like forward direction
+ rFrameIdx = aIdx;
+ return pFrameNd;
+ }
+ else if (pFrameNd->IsEndNode() && pFrameNd->StartOfSectionNode()->IsTableNode())
+ {
+ if (pLayout == nullptr
+ || !pLayout->IsHideRedlines()
+ || pFrameNd->StartOfSectionNode()->GetRedlineMergeFlag() != SwNode::Merge::Hidden)
+ {
+ pFrameNd = pFrameNd->StartOfSectionNode();
+ rFrameIdx = *pFrameNd;
+ return pFrameNd;
+ }
+ else
+ {
+ aIdx = *pFrameNd->StartOfSectionNode();
+ --aIdx;
+ pFrameNd = &aIdx.GetNode();
+ }
+ }
+ else
+ {
+ pFrameNd = GoPrevSection( &aIdx, true, false );
+ if ( nullptr != pFrameNd && !(
+ ::CheckNodesRange( aIdx, rFrameIdx, true ) &&
+ // Never out of the table at the start
+ pFrameNd->FindTableNode() == pTableNd &&
+ // Bug 37652: Never out of the table at the end
+ (!pFrameNd->FindTableNode() || pFrameNd->FindTableBoxStartNode()
+ == pSttNd->FindTableBoxStartNode() ) &&
+ (!pSectNd || pSttNd->IsSectionNode() ||
+ pSectNd->GetIndex() < pFrameNd->GetIndex())
+ ))
+ {
+ pFrameNd = nullptr; // no preceding content node, stop search
+ }
+ }
}
- else
+ while (pFrameNd != nullptr);
+
+ // search forward for a content or table node
+
+ aIdx = pEnd->GetIndex() + 1;
+ pFrameNd = &aIdx.GetNode();
+
+ do
{
- if( pEnd )
- aIdx = pEnd->GetIndex() + 1;
- else
- aIdx = rFrameIdx;
-
- // NEVER leave the section when doing this!
- if( ( pEnd && ( pFrameNd = &aIdx.GetNode())->IsContentNode() ) ||
- ( nullptr != ( pFrameNd = GoNextSection( &aIdx, true, false )) &&
- ::CheckNodesRange( aIdx, rFrameIdx, true ) &&
- ( pFrameNd->FindTableNode() == pTableNd &&
- // NEVER go out of the table cell at the end
- (!pFrameNd->FindTableNode() || pFrameNd->FindTableBoxStartNode()
- == pSttNd->FindTableBoxStartNode() ) ) &&
- (!pSectNd || pSttNd->IsSectionNode() ||
- pSectNd->EndOfSectionIndex() > pFrameNd->GetIndex())
- ))
+ if (pFrameNd->IsContentNode())
{
// Undo when merging a table with one before, if there is also one after it.
// However, if the node is in a table, it needs to be returned if the
// SttNode is a section or a table!
- SwTableNode* pTableNode;
+ SwTableNode *const pTableNode = pFrameNd->FindTableNode();
if (pSttNd->IsTableNode() &&
- nullptr != (pTableNode = pFrameNd->FindTableNode()) &&
+ nullptr != pTableNode &&
// TABLE IN TABLE:
pTableNode != pSttNd->StartOfSectionNode()->FindTableNode())
{
@@ -2126,23 +2178,54 @@ SwNode* SwNodes::FindPrvNxtFrameNode( SwNodeIndex& rFrameIdx,
rFrameIdx = *pFrameNd;
}
else
+ {
rFrameIdx = aIdx;
+ }
+ return pFrameNd;
}
- else if( pNd->IsEndNode() && pNd->StartOfSectionNode()->IsTableNode() )
+ else if (pFrameNd->IsTableNode())
{
- pFrameNd = pNd->StartOfSectionNode();
- rFrameIdx = *pFrameNd;
+ if (pLayout == nullptr
+ || !pLayout->IsHideRedlines()
+ || pFrameNd->GetRedlineMergeFlag() != SwNode::Merge::Hidden)
+ {
+ rFrameIdx = *pFrameNd;
+ return pFrameNd;
+ }
+ else
+ {
+ aIdx = *pFrameNd->EndOfSectionNode();
+ ++aIdx;
+ pFrameNd = &aIdx.GetNode();
+ }
}
else
{
- if( pEnd )
- aIdx = pEnd->GetIndex() + 1;
- else
- aIdx = rFrameIdx.GetIndex() + 1;
+ pFrameNd = GoNextSection( &aIdx, true, false );
+ // NEVER leave the section when doing this!
+ if (pFrameNd
+ && !(::CheckNodesRange(aIdx, rFrameIdx, true)
+ && (pFrameNd->FindTableNode() == pTableNd &&
+ // NEVER go out of the table cell at the end
+ (!pFrameNd->FindTableNode() || pFrameNd->FindTableBoxStartNode()
+ == pSttNd->FindTableBoxStartNode()))
+ && (!pSectNd || pSttNd->IsSectionNode() ||
+ pSectNd->EndOfSectionIndex() > pFrameNd->GetIndex()))
+ )
+ {
+ pFrameNd = nullptr; // no following content node, stop search
+ }
+ }
+ }
+ while (pFrameNd != nullptr);
- if( (pFrameNd = &aIdx.GetNode())->IsTableNode() )
- rFrameIdx = aIdx;
- else
+ // probably this is dead code, because the GoNextSection()
+ // should have ended up in the first text node in the table and
+ // then checked it's in a table?
+ {
+ aIdx = pEnd->GetIndex() + 1;
+
+ pFrameNd = &aIdx.GetNode();
{
pFrameNd = nullptr;
@@ -2160,9 +2243,9 @@ SwNode* SwNodes::FindPrvNxtFrameNode( SwNodeIndex& rFrameIdx,
{
rFrameIdx = aIdx;
pFrameNd = &aIdx.GetNode();
+ assert(!"this isn't dead code?");
}
}
- }
}
}
}
diff --git a/sw/source/core/docnode/section.cxx b/sw/source/core/docnode/section.cxx
index 76d54d27ce23..f80b0a624252 100644
--- a/sw/source/core/docnode/section.cxx
+++ b/sw/source/core/docnode/section.cxx
@@ -307,14 +307,11 @@ void SwSection::ImplSetHiddenFlag(bool const bTmpHidden, bool const bCondition)
// Tell all Children that they are hidden
SwMsgPoolItem aMsgItem( RES_SECTION_HIDDEN );
pFormat->ModifyNotification( &aMsgItem, &aMsgItem );
-
- // Delete all Frames
- pFormat->DelFrames();
}
}
else if (m_Data.IsHiddenFlag()) // show Nodes again
{
- // Show all Frames (Child Sections are accounted for by MakeFrames)
+ // Show all Frames
// Only if the Parent Section is not restricting us!
SwSection* pParentSect = pFormat->GetParentSection();
if( !pParentSect || !pParentSect->IsHiddenFlag() )
@@ -322,8 +319,6 @@ void SwSection::ImplSetHiddenFlag(bool const bTmpHidden, bool const bCondition)
// Tell all Children that the Parent is not hidden anymore
SwMsgPoolItem aMsgItem( RES_SECTION_NOT_HIDDEN );
pFormat->ModifyNotification( &aMsgItem, &aMsgItem );
-
- pFormat->MakeFrames();
}
}
}
diff --git a/sw/source/core/edit/acorrect.cxx b/sw/source/core/edit/acorrect.cxx
index 7304e6e7b702..286d4d078de5 100644
--- a/sw/source/core/edit/acorrect.cxx
+++ b/sw/source/core/edit/acorrect.cxx
@@ -346,8 +346,11 @@ OUString const* SwAutoCorrDoc::GetPrevPara(bool const bAtNormalPos)
}
sw::GotoPrevLayoutTextFrame(*pIdx, rEditSh.GetLayout());
}
- if (pFrame && 0 == pFrame->GetTextNodeForParaProps()->GetAttrOutlineLevel())
+ if (pFrame && !pFrame->GetText().isEmpty() &&
+ 0 == pFrame->GetTextNodeForParaProps()->GetAttrOutlineLevel())
+ {
pStr = & pFrame->GetText();
+ }
if( bUndoIdInitialized )
bUndoIdInitialized = true;
diff --git a/sw/source/core/edit/autofmt.cxx b/sw/source/core/edit/autofmt.cxx
index a3925246f32f..6e4bccb55bcc 100644
--- a/sw/source/core/edit/autofmt.cxx
+++ b/sw/source/core/edit/autofmt.cxx
@@ -1196,7 +1196,7 @@ void SwAutoFormat::DeleteSelImpl(SwPaM & rDelPam, SwPaM & rPamToCorrect)
SwPaM* pPrev = rPamToCorrect.GetPrev();
rPamToCorrect.GetRingContainer().merge( pShCursor->GetRingContainer() );
- m_pEditShell->DeleteSel( rDelPam );
+ m_pEditShell->DeleteSel(rDelPam, true);
// and remove Pam again:
SwPaM* p;
@@ -1212,7 +1212,7 @@ void SwAutoFormat::DeleteSelImpl(SwPaM & rDelPam, SwPaM & rPamToCorrect)
m_pCurTextFrame = GetFrame(*m_pCurTextNd); // keep it up to date
}
else
- m_pEditShell->DeleteSel( rDelPam );
+ m_pEditShell->DeleteSel(rDelPam, true);
}
bool SwAutoFormat::DeleteJoinCurNextPara(SwTextFrame const*const pNextFrame,
@@ -1256,7 +1256,7 @@ void SwAutoFormat::DelEmptyLine( bool bTstNextPara )
// delete blanks in empty paragraph
m_aDelPam.DeleteMark();
*m_aDelPam.GetPoint() = m_pCurTextFrame->MapViewToModelPos(
- TextFrameIndex(m_pCurTextFrame->GetText().getLength()));
+ TextFrameIndex(0));
m_aDelPam.SetMark();
m_aDelPam.GetMark()->nNode = m_pCurTextFrame->GetTextNodeFirst()->GetIndex() - 1;
@@ -1275,16 +1275,25 @@ void SwAutoFormat::DelEmptyLine( bool bTstNextPara )
if( pTNd )
{
m_aDelPam.GetMark()->nContent.Assign( pTNd, 0 );
- *m_aDelPam.GetPoint() = m_pCurTextFrame->MapViewToModelPos(TextFrameIndex(0));
+ *m_aDelPam.GetPoint() = m_pCurTextFrame->MapViewToModelPos(
+ TextFrameIndex(m_pCurTextFrame->GetText().getLength()));
}
}
- else
- {
- *m_aDelPam.GetMark() = m_pCurTextFrame->MapViewToModelPos(TextFrameIndex(0));
- pTNd = m_pCurTextNd;
- }
if( pTNd )
- DeleteSel( m_aDelPam );
+ { // join with previous or next paragraph
+ DeleteSel(m_aDelPam);
+ }
+ assert(m_aDelPam.GetNode().IsTextNode());
+ assert(!m_aDelPam.HasMark());
+ m_aDelPam.SetMark(); // mark remains at join position
+ m_pCurTextFrame = GetFrame(*m_aDelPam.GetNode().GetTextNode());
+ // replace until the end of the merged paragraph
+ *m_aDelPam.GetPoint() = m_pCurTextFrame->MapViewToModelPos(
+ TextFrameIndex(m_pCurTextFrame->GetText().getLength()));
+ if (*m_aDelPam.GetPoint() != *m_aDelPam.GetMark())
+ { // tdf#137245 replace (not delete) to preserve any flys
+ m_pDoc->getIDocumentContentOperations().ReplaceRange(m_aDelPam, "", false);
+ }
m_aDelPam.DeleteMark();
ClearRedlineText();
diff --git a/sw/source/core/edit/edatmisc.cxx b/sw/source/core/edit/edatmisc.cxx
index e8f82956106f..c70c90182a0b 100644
--- a/sw/source/core/edit/edatmisc.cxx
+++ b/sw/source/core/edit/edatmisc.cxx
@@ -184,8 +184,8 @@ void SwEditShell::SetAttrSet( const SfxItemSet& rSet, SetAttrMode nFlags, SwPaM*
GetDoc()->getIDocumentContentOperations().InsertItemSet(*pCursor, rSet, nFlags, GetLayout());
}
- EndAllAction();
GetDoc()->getIDocumentRedlineAccess().SetRedlineFlags( eOldMode );
+ EndAllAction();
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/core/edit/eddel.cxx b/sw/source/core/edit/eddel.cxx
index 74e845353566..e16b8256b611 100644
--- a/sw/source/core/edit/eddel.cxx
+++ b/sw/source/core/edit/eddel.cxx
@@ -34,13 +34,17 @@
#include <undobj.hxx>
#include <SwRewriter.hxx>
#include <globals.hrc>
+#include <wrtsh.hxx>
+#include <officecfg/Office/Writer.hxx>
#include <strings.hrc>
#include <vector>
-void SwEditShell::DeleteSel( SwPaM& rPam, bool* pUndo )
+void SwEditShell::DeleteSel(SwPaM& rPam, bool const isArtificialSelection, bool *const pUndo)
{
- bool bSelectAll = StartsWithTable() && ExtendedSelectedAll();
+ auto const oSelectAll(StartsWith_() != SwCursorShell::StartsWith::None
+ ? ExtendedSelectedAll()
+ : ::std::optional<::std::pair<SwNode const*, ::std::vector<SwTableNode *>>>{});
// only for selections
if (!rPam.HasMark()
|| (*rPam.GetPoint() == *rPam.GetMark()
@@ -56,7 +60,7 @@ void SwEditShell::DeleteSel( SwPaM& rPam, bool* pUndo )
// 3. Point and Mark are at the document start and end, Point is in a table: delete selection as usual
if( rPam.GetNode().FindTableNode() &&
rPam.GetNode().StartOfSectionNode() !=
- rPam.GetNode(false).StartOfSectionNode() && !bSelectAll )
+ rPam.GetNode(false).StartOfSectionNode() && !oSelectAll)
{
// group the Undo in the table
if( pUndo && !*pUndo )
@@ -100,43 +104,57 @@ void SwEditShell::DeleteSel( SwPaM& rPam, bool* pUndo )
{
std::unique_ptr<SwPaM> pNewPam;
SwPaM * pPam = &rPam;
- if (bSelectAll)
+ if (oSelectAll)
{
- assert(dynamic_cast<SwShellCursor*>(&rPam)); // must be corrected pam
- pNewPam.reset(new SwPaM(*rPam.GetMark(), *rPam.GetPoint()));
- // Selection starts at the first para of the first cell, but we
- // want to delete the table node before the first cell as well.
- while (SwTableNode const* pTableNode =
- pNewPam->Start()->nNode.GetNode().StartOfSectionNode()->FindTableNode())
+ if (!oSelectAll->second.empty())
{
- pNewPam->Start()->nNode = *pTableNode;
+ SwRewriter aRewriter;
+ aRewriter.AddRule(UndoArg1, SwResId(STR_MULTISEL));
+ GetDoc()->GetIDocumentUndoRedo().StartUndo(SwUndoId::DELETE, &aRewriter);
}
- // tdf#133990 ensure section is included in SwUndoDelete
- while (SwSectionNode const* pSectionNode =
- pNewPam->Start()->nNode.GetNode().StartOfSectionNode()->FindSectionNode())
+ // tdf#155685 tables at the end must be deleted separately
+ for (SwTableNode *const pTable : oSelectAll->second)
{
- pNewPam->Start()->nNode = *pSectionNode;
+ GetDoc()->DelTable(pTable);
}
- pNewPam->Start()->nContent.Assign(nullptr, 0);
+ assert(dynamic_cast<SwShellCursor*>(&rPam)); // must be corrected pam
+ pNewPam.reset(new SwPaM(*rPam.GetMark(), *rPam.GetPoint()));
+ // Selection starts at the first para of the first cell, but we
+ // want to delete the table node before the first cell as well.
+ *pNewPam->Start() = SwPosition(*oSelectAll->first);
pPam = pNewPam.get();
}
// delete everything
- GetDoc()->getIDocumentContentOperations().DeleteAndJoin(*pPam);
+ GetDoc()->getIDocumentContentOperations().DeleteAndJoin(*pPam,
+ isArtificialSelection ? SwDeleteFlags::ArtificialSelection : SwDeleteFlags::Default);
SaveTableBoxContent( pPam->GetPoint() );
+ if (oSelectAll && !oSelectAll->second.empty())
+ {
+ GetDoc()->GetIDocumentUndoRedo().EndUndo(SwUndoId::END, nullptr);
+ }
}
// Selection is not needed anymore
rPam.DeleteMark();
}
-bool SwEditShell::Delete()
+bool SwEditShell::Delete(bool const isArtificialSelection)
{
SET_CURR_SHELL( this );
bool bRet = false;
if ( !HasReadonlySel() || CursorInsideInputField() )
{
- StartAllAction();
+ if (HasHiddenSections() &&
+ officecfg::Office::Writer::Content::Display::ShowWarningHiddenSection::get())
+ {
+ if (!WarnHiddenSectionDialog())
+ {
+ bRet = RemoveParagraphMetadataFieldAtCursor();
+ return bRet;
+ }
+ }
+ StartAllAction();
bool bUndo = GetCursor()->GetNext() != GetCursor();
if( bUndo ) // more than one selection?
{
@@ -148,7 +166,7 @@ bool SwEditShell::Delete()
for(SwPaM& rPaM : GetCursor()->GetRingContainer())
{
- DeleteSel( rPaM, &bUndo );
+ DeleteSel(rPaM, isArtificialSelection, &bUndo);
}
// If undo container then close here
@@ -162,6 +180,11 @@ bool SwEditShell::Delete()
else
{
bRet = RemoveParagraphMetadataFieldAtCursor();
+ if (!bRet)
+ {
+ // false indicates HasReadonlySel failed
+ InfoReadOnlyDialog();
+ }
}
return bRet;
@@ -326,7 +349,7 @@ bool SwEditShell::Replace( const OUString& rNewStr, bool bRegExpRplc )
SET_CURR_SHELL( this );
bool bRet = false;
- if( !HasReadonlySel() )
+ if (!HasReadonlySel(true))
{
StartAllAction();
GetDoc()->GetIDocumentUndoRedo().StartUndo(SwUndoId::EMPTY, nullptr);
diff --git a/sw/source/core/edit/edfcol.cxx b/sw/source/core/edit/edfcol.cxx
index abbed5e40e94..1d68caa68d4f 100644
--- a/sw/source/core/edit/edfcol.cxx
+++ b/sw/source/core/edit/edfcol.cxx
@@ -2202,8 +2202,7 @@ void SwEditShell::SetTextFormatColl(SwTextFormatColl *pFormat,
GetDoc()->GetIDocumentUndoRedo().StartUndo(SwUndoId::SETFMTCOLL, &aRewriter);
for(SwPaM& rPaM : GetCursor()->GetRingContainer())
{
-
- if ( !rPaM.HasReadonlySel( GetViewOptions()->IsFormView() ) )
+ if (!rPaM.HasReadonlySel( GetViewOptions()->IsFormView(), true))
{
// tdf#105413 turn off ShowChanges mode for the next loops to apply styles permanently with redlining,
// ie. in all directly preceding deleted paragraphs at the actual cursor positions
diff --git a/sw/source/core/edit/edglbldc.cxx b/sw/source/core/edit/edglbldc.cxx
index 3d916edc5fe0..c5ea9081d043 100644
--- a/sw/source/core/edit/edglbldc.cxx
+++ b/sw/source/core/edit/edglbldc.cxx
@@ -272,7 +272,7 @@ void SwEditShell::DeleteGlobalDocContent( const SwGlblDocContents& rArr ,
rPos.nNode = pMyDoc->GetNodes().GetEndOfContent();
--rPos.nNode;
if( !pMyDoc->getIDocumentContentOperations().DelFullPara( *pCursor ) )
- Delete();
+ Delete(false);
}
break;
diff --git a/sw/source/core/edit/edglss.cxx b/sw/source/core/edit/edglss.cxx
index ed46482bf933..49683c682371 100644
--- a/sw/source/core/edit/edglss.cxx
+++ b/sw/source/core/edit/edglss.cxx
@@ -203,7 +203,9 @@ bool SwEditShell::CopySelToDoc( SwDoc* pInsDoc )
bool bColSel = GetCursor_()->IsColumnSelection();
if( bColSel && pInsDoc->IsClipBoard() )
pInsDoc->SetColumnSelection( true );
- bool bSelectAll = StartsWithTable() && ExtendedSelectedAll();
+ auto const oSelectAll(StartsWith_() != SwCursorShell::StartsWith::None
+ ? ExtendedSelectedAll()
+ : ::std::optional<::std::pair<SwNode const*, ::std::vector<SwTableNode*>>>{});
{
for(SwPaM& rPaM : GetCursor()->GetRingContainer())
{
@@ -227,18 +229,21 @@ bool SwEditShell::CopySelToDoc( SwDoc* pInsDoc )
// for the purpose of copying, our shell cursor is not touched.
// (Otherwise we would have to restore it.)
SwPaM aPaM(*rPaM.GetMark(), *rPaM.GetPoint());
- if (bSelectAll)
+ if (oSelectAll)
{
// Selection starts at the first para of the first cell,
// but we want to copy the table and the start node before
// the first cell as well.
- // tdf#133982 tables can be nested
- while (SwTableNode const* pTableNode =
- aPaM.Start()->nNode.GetNode().StartOfSectionNode()->FindTableNode())
+ *aPaM.Start() = SwPosition(*oSelectAll->first);
+ if (SwSectionNode const* pSection = oSelectAll->first->GetSectionNode())
{
- aPaM.Start()->nNode = *pTableNode;
+ if (aPaM.End()->nNode.GetIndex() < pSection->EndOfSectionIndex())
+ {
+ // include section end so that section is copied
+ aPaM.End()->nNode = *oSelectAll->first->GetNodes()[pSection->EndOfSectionIndex() + 1];
+ aPaM.End()->nContent.Assign(aPaM.End()->nNode.GetNode().GetContentNode(), 0);
+ }
}
- aPaM.Start()->nContent.Assign(nullptr, 0);
}
bRet = GetDoc()->getIDocumentContentOperations().CopyRange( aPaM, aPos, /*bCopyAll=*/false, /*bCheckPos=*/true, /*bCopyText=*/false ) || bRet;
}
diff --git a/sw/source/core/edit/editsh.cxx b/sw/source/core/edit/editsh.cxx
index 8f84ce42ed75..d697fd05c286 100644
--- a/sw/source/core/edit/editsh.cxx
+++ b/sw/source/core/edit/editsh.cxx
@@ -663,7 +663,7 @@ bool SwEditShell::InsertURL( const SwFormatINetFormat& rFormat, const OUString&
bDelText = bInsText = false;
if( bDelText )
- Delete();
+ Delete(true);
}
else if( pCursor->IsMultiSelection() && rFormat.GetValue() == rStr )
bInsText = false;
@@ -732,7 +732,7 @@ void SwEditShell::DelINetAttrWithText()
{
bool bRet = SelectTextAttr( RES_TXTATR_INETFMT, false );
if( bRet )
- DeleteSel( *GetCursor() );
+ DeleteSel(*GetCursor(), true);
}
/// Set the DontExpand flag at the text character attributes
@@ -789,7 +789,7 @@ void SwEditShell::SetNumberingRestart()
if( nullptr != ( pContentFrame = static_cast<SwTextNode*>(pNd)->getLayoutFrame( GetLayout() )) )
{
// skip hidden frames - ignore protection!
- if( !static_cast<SwTextFrame*>(pContentFrame)->IsHiddenNow() )
+ if( !pContentFrame->IsHiddenNow() )
{
// if the node is numbered and the starting value of the numbering equals the
// start value of the numbering rule then set this value as hard starting value
diff --git a/sw/source/core/edit/edlingu.cxx b/sw/source/core/edit/edlingu.cxx
index 69446dd9b060..8c50eadd8740 100644
--- a/sw/source/core/edit/edlingu.cxx
+++ b/sw/source/core/edit/edlingu.cxx
@@ -823,11 +823,16 @@ void SwEditShell::HandleCorrectionError(const OUString& aText, SwPosition aPos,
SwRect& rSelectRect)
{
// save the start and end positions of the line and the starting point
+ SwNode const& rNode(GetCursor()->GetPoint()->nNode.GetNode());
Push();
LeftMargin();
- const sal_Int32 nLineStart = GetCursor()->GetPoint()->nContent.GetIndex();
+ const sal_Int32 nLineStart = &rNode == &GetCursor()->GetPoint()->nNode.GetNode()
+ ? GetCursor()->GetPoint()->nContent.GetIndex()
+ : 0;
RightMargin();
- const sal_Int32 nLineEnd = GetCursor()->GetPoint()->nContent.GetIndex();
+ const sal_Int32 nLineEnd = &rNode == &GetCursor()->GetPoint()->nNode.GetNode()
+ ? GetCursor()->GetPoint()->nContent.GetIndex()
+ : rNode.GetTextNode()->Len();
Pop(PopMode::DeleteCurrent);
// make sure the selection build later from the data below does
@@ -909,8 +914,14 @@ uno::Reference< XSpellAlternatives >
if (pWrong->InWrongWord(nBegin, nLen) && !pNode->IsSymbolAt(nBegin))
{
const OUString aText(pNode->GetText().copy(nBegin, nLen));
- OUString aWord = aText.replaceAll(OUStringChar(CH_TXTATR_BREAKWORD), "")
- .replaceAll(OUStringChar(CH_TXTATR_INWORD), "");
+ // TODO: this doesn't handle fieldmarks properly
+ ModelToViewHelper const aConversionMap(*pNode, GetLayout(),
+ ExpandMode::ExpandFields | ExpandMode::ExpandFootnote | ExpandMode::ReplaceMode
+ | (GetLayout()->IsHideRedlines() ? ExpandMode::HideDeletions : ExpandMode(0))
+ | (GetViewOptions()->IsShowHiddenChar() ? ExpandMode(0) : ExpandMode::HideInvisible));
+ auto const nBeginView(aConversionMap.ConvertToViewPosition(nBegin));
+ OUString const aWord(aConversionMap.getViewText().copy(nBeginView,
+ aConversionMap.ConvertToViewPosition(nBegin+nLen) - nBeginView));
uno::Reference< XSpellChecker1 > xSpell( ::GetSpellChecker() );
if( xSpell.is() )
diff --git a/sw/source/core/edit/edws.cxx b/sw/source/core/edit/edws.cxx
index dd5381cbb9eb..4991b9376a89 100644
--- a/sw/source/core/edit/edws.cxx
+++ b/sw/source/core/edit/edws.cxx
@@ -265,6 +265,12 @@ void SwEditShell::AutoCorrect( SvxAutoCorrect& rACorr, bool bInsert,
// FIXME: this _must_ be called with reference to the actual node text!
SwTextFrame const*const pFrame(static_cast<SwTextFrame const*>(pTNd->getLayoutFrame(GetLayout())));
TextFrameIndex const nPos(pFrame->MapModelToViewPos(*pCursor->GetPoint()));
+ // tdf#147414 sw_redlinehide: if cursor moved backward, it may be at the
+ // start of a delete redline - but MapViewToModelPos() always returns end
+ // of redline and it will be called when AutoCorrect actually inserts
+ // something - so first normalize cursor point to end of redline so that
+ // point will then be moved forward when something is inserted.
+ *pCursor->GetPoint() = pFrame->MapViewToModelPos(nPos);
OUString const& rMergedText(pFrame->GetText());
rACorr.DoAutoCorrect( aSwAutoCorrDoc,
rMergedText, sal_Int32(nPos),
diff --git a/sw/source/core/fields/reffld.cxx b/sw/source/core/fields/reffld.cxx
index c4825a9343df..9aaf9b2b9f34 100644
--- a/sw/source/core/fields/reffld.cxx
+++ b/sw/source/core/fields/reffld.cxx
@@ -771,7 +771,7 @@ static std::pair<OUString, bool> MakeRefNumStr(
SwTextNode const& rTextNodeOfReferencedItem(pLayout
? *sw::GetParaPropsNode(*pLayout, i_rTextNodeOfReferencedItem)
: i_rTextNodeOfReferencedItem);
- if ( rTextNodeOfReferencedItem.HasNumber() &&
+ if ( rTextNodeOfReferencedItem.HasNumber(pLayout) &&
rTextNodeOfReferencedItem.IsCountedInList() )
{
OSL_ENSURE( rTextNodeOfReferencedItem.GetNum(pLayout),
@@ -795,7 +795,7 @@ static std::pair<OUString, bool> MakeRefNumStr(
== rTextNodeOfReferencedItem.FindFooterStartNode() )
{
const SwNodeNum* pNodeNumForTextNodeOfField( nullptr );
- if ( rTextNodeOfField.HasNumber() &&
+ if ( rTextNodeOfField.HasNumber(pLayout) &&
rTextNodeOfField.GetNumRule() == rTextNodeOfReferencedItem.GetNumRule() )
{
pNodeNumForTextNodeOfField = rTextNodeOfField.GetNum(pLayout);
diff --git a/sw/source/core/frmedt/fecopy.cxx b/sw/source/core/frmedt/fecopy.cxx
index c2470b997a93..a39b7479e669 100644
--- a/sw/source/core/frmedt/fecopy.cxx
+++ b/sw/source/core/frmedt/fecopy.cxx
@@ -686,25 +686,19 @@ bool SwFEShell::Paste( SwDoc* pClpDoc, bool bNestedTable )
OSL_ENSURE( pClpDoc, "no clipboard document" );
// then till end of the nodes array
SwNodeIndex aIdx( pClpDoc->GetNodes().GetEndOfExtras(), 2 );
- SwPaM aCpyPam( aIdx ); //DocStart
+ // select content section, whatever it may contain
+ SwPaM aCpyPam(aIdx, SwNodeIndex(pClpDoc->GetNodes().GetEndOfContent(), -1));
+ if (SwContentNode *const pAtEnd = aCpyPam.GetNode(true).GetContentNode())
+ {
+ pAtEnd->MakeEndIndex(&aCpyPam.GetPoint()->nContent);
+ }
// If there are table formulas in the area, then display the table first
// so that the table formula can calculate a new value first
// (individual boxes in the area are retrieved via the layout)
SwFieldType* pTableFieldTyp = GetDoc()->getIDocumentFieldsAccess().GetSysFieldType( SwFieldIds::Table );
- SwTableNode *const pSrcNd = aCpyPam.GetNode().GetTableNode();
- if( !pSrcNd ) // table node ?
- { // don't skip !!
- SwContentNode* pCNd = aCpyPam.GetNode().GetContentNode();
- if( pCNd )
- aCpyPam.GetPoint()->nContent.Assign( pCNd, 0 );
- else if( !aCpyPam.Move( fnMoveForward, GoInNode ))
- aCpyPam.Move( fnMoveBackward, GoInNode );
- }
-
- aCpyPam.SetMark();
- aCpyPam.Move( fnMoveForward, GoInDoc );
+ SwTableNode *const pSrcNd = aCpyPam.GetNode(false).GetTableNode();
bool bRet = true;
StartAllAction();
@@ -1021,7 +1015,7 @@ bool SwFEShell::Paste( SwDoc* pClpDoc, bool bNestedTable )
{
if( bDelTable && IsTableMode() )
{
- SwEditShell::Delete();
+ SwEditShell::Delete(false);
bDelTable = false;
}
@@ -1045,9 +1039,24 @@ bool SwFEShell::Paste( SwDoc* pClpDoc, bool bNestedTable )
--aIndexBefore;
+ // copying to the clipboard, the section is inserted
+ // at the start of the nodes, followed by empty text node
+ bool const isSourceSection(aCpyPam.Start()->nNode.GetNode().IsSectionNode()
+ && aCpyPam.End()->nNode.GetIndex() == aCpyPam.Start()->nNode.GetNode().EndOfSectionIndex() + 1
+ && aCpyPam.End()->nNode.GetNode().IsTextNode()
+ && aCpyPam.End()->nNode.GetNode().GetTextNode()->Len() == 0);
+
pClpDoc->getIDocumentContentOperations().CopyRange( aCpyPam, rInsPos, /*bCopyAll=*/false, /*bCheckPos=*/true, /*bCopyText=*/false );
// Note: aCpyPam is invalid now
+ if (isSourceSection
+ && aIndexBefore.GetNode().IsStartNode()
+ && rInsPos.nNode.GetNode().GetTextNode()->Len() == 0)
+ { // if there is an empty text node at the start, it
+ // should be *replaced* by the section, so delete it
+ GetDoc()->getIDocumentContentOperations().DelFullPara(rPaM);
+ }
+
++aIndexBefore;
SwPaM aPaM(SwPosition(aIndexBefore),
SwPosition(rInsPos.nNode));
diff --git a/sw/source/core/frmedt/feshview.cxx b/sw/source/core/frmedt/feshview.cxx
index fd0a930a95a0..65e684e1af06 100644
--- a/sw/source/core/frmedt/feshview.cxx
+++ b/sw/source/core/frmedt/feshview.cxx
@@ -3243,8 +3243,11 @@ bool SwFEShell::IsShapeDefaultHoriTextDirR2L() const
if ( dynamic_cast<const SwVirtFlyDrawObj*>( pSdrObj) == nullptr )
{
// determine page frame of the frame the shape is anchored.
- const SwFrame* pAnchorFrame =
- static_cast<SwDrawContact*>(GetUserCall(pSdrObj))->GetAnchorFrame( pSdrObj );
+ const SwContact* pContact = GetUserCall(pSdrObj);
+ OSL_ENSURE( pContact, "<SwFEShell::IsShapeDefaultHoriTextDirR2L(..)> - missing contact!" );
+ if (!pContact)
+ return false;
+ const SwFrame* pAnchorFrame = static_cast<const SwDrawContact*>(pContact)->GetAnchorFrame( pSdrObj );
OSL_ENSURE( pAnchorFrame, "inconsistent model - no anchor at shape!");
if ( pAnchorFrame )
{
diff --git a/sw/source/core/frmedt/fetab.cxx b/sw/source/core/frmedt/fetab.cxx
index a6cd65a55d15..936ababfaea4 100644
--- a/sw/source/core/frmedt/fetab.cxx
+++ b/sw/source/core/frmedt/fetab.cxx
@@ -188,7 +188,7 @@ void SwFEShell::InsertRow( sal_uInt16 nCnt, bool bBehind )
// search boxes via the layout
SwSelBoxes aBoxes;
- bool bSelectAll = StartsWithTable() && ExtendedSelectedAll();
+ bool bSelectAll = StartsWith_() == StartsWith::Table && ExtendedSelectedAll();
if (bSelectAll)
{
// Set the end of the selection to the last paragraph of the last cell of the table.
@@ -296,9 +296,8 @@ bool SwFEShell::DeleteCol()
// then delete the column
StartUndo(SwUndoId::COL_DELETE);
- bRet = GetDoc()->DeleteRowCol( aBoxes, true );
+ bRet = GetDoc()->DeleteRowCol(aBoxes, SwDoc::RowColMode::DeleteColumn);
EndUndo(SwUndoId::COL_DELETE);
-
}
else
bRet = false;
diff --git a/sw/source/core/inc/DocumentContentOperationsManager.hxx b/sw/source/core/inc/DocumentContentOperationsManager.hxx
index 2d600b6ff8ba..994812dc14b4 100644
--- a/sw/source/core/inc/DocumentContentOperationsManager.hxx
+++ b/sw/source/core/inc/DocumentContentOperationsManager.hxx
@@ -48,6 +48,7 @@ public:
// Add optional parameter <bForceJoinNext>, default value <false>
// Needed for hiding of deletion redlines
bool DeleteAndJoin( SwPaM&,
+ SwDeleteFlags flags = SwDeleteFlags::Default,
const bool bForceJoinNext = false ) override;
bool MoveRange(SwPaM&, SwPosition&, SwMoveFlags) override;
@@ -159,10 +160,10 @@ public:
private:
SwDoc& m_rDoc;
- bool DeleteAndJoinImpl(SwPaM&, const bool);
- bool DeleteAndJoinWithRedlineImpl(SwPaM&, const bool unused = false);
- bool DeleteRangeImpl(SwPaM&, const bool unused = false);
- bool DeleteRangeImplImpl(SwPaM &);
+ bool DeleteAndJoinImpl(SwPaM&, SwDeleteFlags, const bool);
+ bool DeleteAndJoinWithRedlineImpl(SwPaM&, SwDeleteFlags, const bool unused = false);
+ bool DeleteRangeImpl(SwPaM&, SwDeleteFlags, const bool unused = false);
+ bool DeleteRangeImplImpl(SwPaM &, SwDeleteFlags);
bool ReplaceRangeImpl(SwPaM&, OUString const&, const bool);
SwFlyFrameFormat* InsNoTextNode( const SwPosition&rPos, SwNoTextNode*,
const SfxItemSet* pFlyAttrSet,
diff --git a/sw/source/core/inc/MarkManager.hxx b/sw/source/core/inc/MarkManager.hxx
index 762c21e59a85..840d492c2b35 100644
--- a/sw/source/core/inc/MarkManager.hxx
+++ b/sw/source/core/inc/MarkManager.hxx
@@ -63,7 +63,7 @@ namespace sw {
virtual void correctMarksAbsolute(const SwNodeIndex& rOldNode, const SwPosition& rNewPos, const sal_Int32 nOffset) override;
virtual void correctMarksRelative(const SwNodeIndex& rOldNode, const SwPosition& rNewPos, const sal_Int32 nOffset) override;
- virtual void deleteMarks(const SwNodeIndex& rStt, const SwNodeIndex& rEnd, std::vector< ::sw::mark::SaveBookmark>* pSaveBkmk, const SwIndex* pSttIdx, const SwIndex* pEndIdx) override;
+ virtual void deleteMarks(const SwNodeIndex& rStt, const SwNodeIndex& rEnd, std::vector< ::sw::mark::SaveBookmark>* pSaveBkmk, const SwIndex* pSttIdx, const SwIndex* pEndIdx, bool isReplace) override;
// deleters
virtual std::unique_ptr<ILazyDeleter>
@@ -78,7 +78,7 @@ namespace sw {
virtual const_iterator_t findMark(const OUString& rName) const override;
// bookmarks
- virtual bool isBookmarkDeleted(SwPaM const& rPaM) const override;
+ virtual bool isBookmarkDeleted(SwPaM const& rPaM, bool isReplace) const override;
virtual const_iterator_t getBookmarksBegin() const override;
virtual const_iterator_t getBookmarksEnd() const override;
virtual sal_Int32 getBookmarksCount() const override;
diff --git a/sw/source/core/inc/UndoDelete.hxx b/sw/source/core/inc/UndoDelete.hxx
index a4eb066581c9..b4ae4544d669 100644
--- a/sw/source/core/inc/UndoDelete.hxx
+++ b/sw/source/core/inc/UndoDelete.hxx
@@ -27,6 +27,7 @@
class SwRedlineSaveDatas;
class SwTextNode;
+enum class SwDeleteFlags;
namespace sfx2 {
class MetadatableUndo;
@@ -59,6 +60,7 @@ class SwUndoDelete
bool m_bResetPgDesc : 1; // TRUE: reset PgDsc on following node
bool m_bResetPgBrk : 1; // TRUE: reset PgBreak on following node
bool const m_bFromTableCopy : 1; // TRUE: called by SwUndoTableCpyTable
+ SwDeleteFlags m_DeleteFlags;
bool SaveContent( const SwPosition* pStt, const SwPosition* pEnd,
SwTextNode* pSttTextNd, SwTextNode* pEndTextNd );
@@ -66,6 +68,7 @@ class SwUndoDelete
public:
SwUndoDelete(
SwPaM&,
+ SwDeleteFlags flags,
bool bFullPara = false,
bool bCalledByTableCpy = false );
virtual ~SwUndoDelete() override;
diff --git a/sw/source/core/inc/UndoRedline.hxx b/sw/source/core/inc/UndoRedline.hxx
index 38ecd86314cb..ada3c34fad7f 100644
--- a/sw/source/core/inc/UndoRedline.hxx
+++ b/sw/source/core/inc/UndoRedline.hxx
@@ -22,6 +22,7 @@
#include <memory>
#include <undobj.hxx>
+#include <IDocumentContentOperations.hxx>
struct SwSortOptions;
class SwRangeRedline;
@@ -52,17 +53,22 @@ public:
class SwUndoRedlineDelete : public SwUndoRedline
{
+private:
+ std::unique_ptr<SwHistory> m_pHistory; ///< for moved fly anchors
+ //
bool bCanGroup : 1;
bool bIsDelim : 1;
bool bIsBackspace : 1;
OUString m_sRedlineText;
+ void InitHistory(SwPaM const& rRange);
+
virtual void UndoRedlineImpl(SwDoc & rDoc, SwPaM & rPam) override;
virtual void RedoRedlineImpl(SwDoc & rDoc, SwPaM & rPam) override;
public:
- SwUndoRedlineDelete( const SwPaM& rRange, SwUndoId nUserId );
+ SwUndoRedlineDelete(const SwPaM& rRange, SwUndoId nUserId, SwDeleteFlags flags = SwDeleteFlags::Default);
virtual SwRewriter GetRewriter() const override;
bool CanGrouping( const SwUndoRedlineDelete& rPrev );
diff --git a/sw/source/core/inc/UndoTable.hxx b/sw/source/core/inc/UndoTable.hxx
index ecfa87745ef7..8815cb0881c7 100644
--- a/sw/source/core/inc/UndoTable.hxx
+++ b/sw/source/core/inc/UndoTable.hxx
@@ -42,6 +42,14 @@ class SwStartNode;
class SwTableNode;
class SwTableAutoFormat;
class SwTableSortBoxes;
+class SwContentNode;
+class SwCursorShell;
+
+namespace sw {
+
+void NotifyTableCollapsedParagraph(const SwContentNode* pNode, SwCursorShell *const pShell);
+
+}
class SwUndoInsTable : public SwUndo
{
@@ -272,7 +280,7 @@ class SwUndoTableCpyTable : public SwUndo
//b6341295: When redlining is active, PrepareRedline has to create the
//redlining attributes for the new and the old table cell content
static std::unique_ptr<SwUndo> PrepareRedline( SwDoc* pDoc, const SwTableBox& rBox,
- const SwPosition& rPos, bool& rJoin, bool bRedo );
+ SwPosition& rPos, bool& rJoin, bool bRedo );
public:
SwUndoTableCpyTable(const SwDoc* pDoc);
diff --git a/sw/source/core/inc/frame.hxx b/sw/source/core/inc/frame.hxx
index a607745db007..cb5a2418ef21 100644
--- a/sw/source/core/inc/frame.hxx
+++ b/sw/source/core/inc/frame.hxx
@@ -861,6 +861,8 @@ public:
// Fly in ... and footnotes
bool IsProtected() const;
+ virtual bool IsHiddenNow() const;
+
bool IsColLocked() const { return mbColLocked; }
virtual bool IsDeleteForbidden() const { return mnForbidDelete > 0; }
diff --git a/sw/source/core/inc/layfrm.hxx b/sw/source/core/inc/layfrm.hxx
index f7d90f00d8f6..89d23f210f45 100644
--- a/sw/source/core/inc/layfrm.hxx
+++ b/sw/source/core/inc/layfrm.hxx
@@ -182,6 +182,7 @@ public:
m_VertPosOrientFramesFor.end(), pObj),
m_VertPosOrientFramesFor.end());
}
+ void dumpAsXmlAttributes(xmlTextWriterPtr writer) const override;
};
/**
diff --git a/sw/source/core/inc/mvsave.hxx b/sw/source/core/inc/mvsave.hxx
index c472b6f7bc1a..14b9ee6f6be5 100644
--- a/sw/source/core/inc/mvsave.hxx
+++ b/sw/source/core/inc/mvsave.hxx
@@ -34,6 +34,7 @@ class SwDoc;
class SwFormatAnchor;
class SwFrameFormat;
class SwIndex;
+class SwHistory;
class SwNodeIndex;
class SwNodeRange;
class SwPaM;
@@ -94,7 +95,8 @@ void DelBookmarks(const SwNodeIndex& rStt,
const SwNodeIndex& rEnd,
std::vector< ::sw::mark::SaveBookmark> * SaveBkmk =nullptr,
const SwIndex* pSttIdx =nullptr,
- const SwIndex* pEndIdx =nullptr);
+ const SwIndex* pEndIdx = nullptr,
+ bool isReplace = false);
/** data structure to temporarily hold fly anchor positions relative to some
* location. */
@@ -116,10 +118,10 @@ struct SaveFly
typedef std::deque< SaveFly > SaveFlyArr;
void RestFlyInRange( SaveFlyArr& rArr, const SwPosition& rSttIdx,
- const SwNodeIndex* pInsPos );
+ const SwNodeIndex* pInsPos, bool isForceToStartPos = false);
void SaveFlyInRange( const SwNodeRange& rRg, SaveFlyArr& rArr );
void SaveFlyInRange( const SwPaM& rPam, const SwPosition& rInsPos,
- SaveFlyArr& rArr, bool bMoveAllFlys );
+ SaveFlyArr& rArr, bool bMoveAllFlys, SwHistory * pHistory = nullptr);
void DelFlyInRange( const SwNodeIndex& rMkNdIdx,
const SwNodeIndex& rPtNdIdx,
diff --git a/sw/source/core/inc/rootfrm.hxx b/sw/source/core/inc/rootfrm.hxx
index 484ff172e25d..44d7a5800032 100644
--- a/sw/source/core/inc/rootfrm.hxx
+++ b/sw/source/core/inc/rootfrm.hxx
@@ -76,7 +76,7 @@ using SwDestroyList = std::set<SwSectionFrame*>;
/// The root element of a Writer document layout. Lower frames are expected to
/// be SwPageFrame instances.
-class SAL_DLLPUBLIC_RTTI SwRootFrame: public SwLayoutFrame
+class SW_DLLPUBLIC SwRootFrame: public SwLayoutFrame
{
// Needs to disable the Superfluous temporarily
friend void AdjustSizeChgNotify( SwRootFrame *pRoot );
diff --git a/sw/source/core/inc/sectfrm.hxx b/sw/source/core/inc/sectfrm.hxx
index 3b890b385e2a..8235e6244335 100644
--- a/sw/source/core/inc/sectfrm.hxx
+++ b/sw/source/core/inc/sectfrm.hxx
@@ -75,6 +75,8 @@ public:
virtual void Cut() override;
virtual void Paste( SwFrame* pParent, SwFrame* pSibling = nullptr ) override;
+ virtual bool IsHiddenNow() const override;
+
inline const SwSectionFrame *GetFollow() const;
inline SwSectionFrame *GetFollow();
SwSectionFrame* FindMaster() const;
@@ -96,7 +98,7 @@ public:
* Splits the SectionFrame surrounding the pFrame up in two parts:
* pFrame and the start of the 2nd part
*/
- bool SplitSect( SwFrame* pFrame, bool bApres );
+ SwSectionFrame* SplitSect( SwFrame* pFrameStartAfter, SwFrame* pFramePutAfter );
void DelEmpty( bool bRemove ); // Like Cut(), except for that Follow chaining is maintained
SwFootnoteContFrame* ContainsFootnoteCont( const SwFootnoteContFrame* pCont = nullptr ) const;
bool Growable() const;
diff --git a/sw/source/core/inc/txtfrm.hxx b/sw/source/core/inc/txtfrm.hxx
index 6bf44794cbaf..7681324c7eed 100644
--- a/sw/source/core/inc/txtfrm.hxx
+++ b/sw/source/core/inc/txtfrm.hxx
@@ -537,7 +537,7 @@ public:
#endif
/// Hidden
- bool IsHiddenNow() const; // bHidden && pOut == pPrt
+ virtual bool IsHiddenNow() const override; // bHidden && pOut == pPrt
void HideHidden(); // Remove appendage if Hidden
void HideFootnotes(TextFrameIndex nStart, TextFrameIndex nEnd);
diff --git a/sw/source/core/layout/atrfrm.cxx b/sw/source/core/layout/atrfrm.cxx
index 79235781896d..884d791caebe 100644
--- a/sw/source/core/layout/atrfrm.cxx
+++ b/sw/source/core/layout/atrfrm.cxx
@@ -3363,7 +3363,7 @@ SwHandleAnchorNodeChg::~SwHandleAnchorNodeChg() COVERITY_NOEXCEPT_FALSE
mpWrtShell->SwEditShell::Copy(mpWrtShell);
mpWrtShell->DestroyCursor();
- mpWrtShell->Delete();
+ mpWrtShell->Delete(false);
mpWrtShell->Pop(SwCursorShell::PopMode::DeleteCurrent);
}
diff --git a/sw/source/core/layout/calcmove.cxx b/sw/source/core/layout/calcmove.cxx
index b9687accdf90..b889de6689ae 100644
--- a/sw/source/core/layout/calcmove.cxx
+++ b/sw/source/core/layout/calcmove.cxx
@@ -163,7 +163,7 @@ bool SwContentFrame::ShouldBwdMoved( SwLayoutFrame *pNewUpper, bool & )
if ( nMoveAnyway < 3 )
{
- if ( nSpace )
+ if (nSpace || IsHiddenNow())
{
// Do not notify footnotes which are stuck to the paragraph:
// This would require extremely confusing code, taking into
@@ -195,7 +195,7 @@ bool SwContentFrame::ShouldBwdMoved( SwLayoutFrame *pNewUpper, bool & )
}
// Check for space left in new upper
- return nSpace != 0;
+ return nSpace != 0 || IsHiddenNow();
}
}
return false;
@@ -531,7 +531,7 @@ static SwFrame* lcl_NotHiddenPrev( SwFrame* pFrame )
do
{
pRet = lcl_Prev( pRet );
- } while ( pRet && pRet->IsTextFrame() && static_cast<SwTextFrame*>(pRet)->IsHiddenNow() );
+ } while ( pRet && pRet->IsHiddenNow() );
return pRet;
}
@@ -1076,9 +1076,8 @@ void SwContentFrame::MakePrtArea( const SwBorderAttrs &rAttrs )
{
setFramePrintAreaValid(true);
SwRectFnSet aRectFnSet(this);
- const bool bTextFrame = IsTextFrame();
SwTwips nUpper = 0;
- if ( bTextFrame && static_cast<SwTextFrame*>(this)->IsHiddenNow() )
+ if (IsTextFrame() && IsHiddenNow())
{
if ( static_cast<SwTextFrame*>(this)->HasFollow() )
static_cast<SwTextFrame*>(this)->JoinFrame();
@@ -1709,7 +1708,7 @@ void SwContentFrame::MakeAll(vcl::RenderContext* /*pRenderContext*/)
const bool bMoveFwdInvalid = nullptr != GetIndNext();
const bool bNxtNew =
( 0 == aRectFnSet.GetHeight(pNxt->getFramePrintArea()) ) &&
- (!pNxt->IsTextFrame() ||!static_cast<SwTextFrame*>(pNxt)->IsHiddenNow());
+ !pNxt->IsHiddenNow();
pNxt->Calc(getRootFrame()->GetCurrShell()->GetOut());
@@ -2211,7 +2210,7 @@ bool SwContentFrame::WouldFit_( SwTwips nSpace,
pTmpPrev = nullptr;
else
{
- if( pFrame->IsTextFrame() && static_cast<SwTextFrame*>(pFrame)->IsHiddenNow() )
+ if (pFrame->IsHiddenNow())
pTmpPrev = lcl_NotHiddenPrev( pFrame );
else
pTmpPrev = pFrame;
diff --git a/sw/source/core/layout/findfrm.cxx b/sw/source/core/layout/findfrm.cxx
index a35af84d54a1..9468c6283fbe 100644
--- a/sw/source/core/layout/findfrm.cxx
+++ b/sw/source/core/layout/findfrm.cxx
@@ -896,7 +896,7 @@ SwFrame *SwFrame::FindNext_()
(!bFootnote || pSct->IsInFootnote() ) )
return pSct;
}
- return pRet;
+ return pRet == this ? nullptr : pRet;
}
// #i27138# - add parameter <_bInSameFootnote>
@@ -1282,11 +1282,7 @@ void SwFrame::InvalidateNextPrtArea()
SwFrame* pNextFrame = FindNext();
// skip empty section frames and hidden text frames
{
- while ( pNextFrame &&
- ( ( pNextFrame->IsSctFrame() &&
- !static_cast<SwSectionFrame*>(pNextFrame)->GetSection() ) ||
- ( pNextFrame->IsTextFrame() &&
- static_cast<SwTextFrame*>(pNextFrame)->IsHiddenNow() ) ) )
+ while (pNextFrame && pNextFrame->IsHiddenNow())
{
pNextFrame = pNextFrame->FindNext();
}
diff --git a/sw/source/core/layout/flowfrm.cxx b/sw/source/core/layout/flowfrm.cxx
index 2cf8ba751b7a..b29909288056 100644
--- a/sw/source/core/layout/flowfrm.cxx
+++ b/sw/source/core/layout/flowfrm.cxx
@@ -1157,8 +1157,7 @@ bool SwFlowFrame::IsPageBreak( bool bAct ) const
// Determine predecessor
const SwFrame *pPrev = m_rThis.FindPrev();
- while ( pPrev && ( !pPrev->IsInDocBody() ||
- ( pPrev->IsTextFrame() && static_cast<const SwTextFrame*>(pPrev)->IsHiddenNow() ) ) )
+ while (pPrev && (!pPrev->IsInDocBody() || pPrev->IsHiddenNow()))
pPrev = pPrev->FindPrev();
if ( pPrev )
@@ -1219,7 +1218,7 @@ bool SwFlowFrame::IsColBreak( bool bAct ) const
// Determine predecessor
const SwFrame *pPrev = m_rThis.FindPrev();
while( pPrev && ( ( !pPrev->IsInDocBody() && !m_rThis.IsInFly() && !m_rThis.FindFooterOrHeader() ) ||
- ( pPrev->IsTextFrame() && static_cast<const SwTextFrame*>(pPrev)->IsHiddenNow() ) ) )
+ pPrev->IsHiddenNow() ) )
pPrev = pPrev->FindPrev();
if ( pPrev )
@@ -1250,6 +1249,14 @@ bool SwFlowFrame::IsColBreak( bool bAct ) const
return false;
}
+// Skip hidden paragraphs and empty sections on the same level
+static const SwFrame* skipHiddenSiblingFrames_(const SwFrame* pFrame)
+{
+ while (pFrame && pFrame->IsHiddenNow())
+ pFrame = pFrame->GetPrev();
+ return pFrame;
+}
+
bool SwFlowFrame::HasParaSpaceAtPages( bool bSct ) const
{
if( m_rThis.IsInSct() )
@@ -1265,7 +1272,7 @@ bool SwFlowFrame::HasParaSpaceAtPages( bool bSct ) const
return !pTmp->GetPrev() || IsPageBreak(true);
if( pTmp->IsColumnFrame() && pTmp->GetPrev() )
return IsColBreak( true );
- if( pTmp->IsSctFrame() && ( !bSct || pTmp->GetPrev() ) )
+ if (pTmp->IsSctFrame() && (!bSct || skipHiddenSiblingFrames_(pTmp->GetPrev())))
return false;
pTmp = pTmp->GetUpper();
}
@@ -1287,6 +1294,31 @@ bool SwFlowFrame::HasParaSpaceAtPages( bool bSct ) const
return pTmp && !pTmp->GetPrev();
}
+// Skip hidden paragraphs and empty sections
+static const SwFrame* skipHiddenFrames_(const SwFrame* pFrame)
+{
+ do
+ {
+ pFrame = skipHiddenSiblingFrames_(pFrame);
+ if (!pFrame || !pFrame->IsSctFrame())
+ return pFrame;
+ // Special case: found previous frame is a section
+ // Search for the last content in the section
+ auto pSectFrame = static_cast<const SwSectionFrame*>(pFrame);
+ pFrame = pSectFrame->FindLastContent();
+ // If the last content is in a table _inside_ the section,
+ // take the table herself.
+ // Correction: Check directly, if table is inside table, instead of indirectly
+ // by checking, if section isn't inside a table
+ if (pFrame && pFrame->IsInTab())
+ {
+ const SwTabFrame* pTableFrame = pFrame->FindTabFrame();
+ if (pSectFrame->IsAnLower(pTableFrame))
+ return pTableFrame;
+ }
+ } while (true);
+}
+
/** helper method to determine previous frame for calculation of the
upper space
@@ -1294,74 +1326,21 @@ bool SwFlowFrame::HasParaSpaceAtPages( bool bSct ) const
*/
const SwFrame* SwFlowFrame::GetPrevFrameForUpperSpaceCalc_( const SwFrame* _pProposedPrevFrame ) const
{
- const SwFrame* pPrevFrame = _pProposedPrevFrame
- ? _pProposedPrevFrame
- : m_rThis.GetPrev();
-
- // Skip hidden paragraphs and empty sections
- while ( pPrevFrame &&
- ( ( pPrevFrame->IsTextFrame() &&
- static_cast<const SwTextFrame*>(pPrevFrame)->IsHiddenNow() ) ||
- ( pPrevFrame->IsSctFrame() &&
- !static_cast<const SwSectionFrame*>(pPrevFrame)->GetSection() ) ) )
- {
- pPrevFrame = pPrevFrame->GetPrev();
- }
+ const SwFrame* pPrevFrame
+ = skipHiddenFrames_(_pProposedPrevFrame ? _pProposedPrevFrame : m_rThis.GetPrev());
+ if (pPrevFrame || !m_rThis.IsInFootnote()
+ || !(m_rThis.IsSctFrame() || !m_rThis.IsInSct() || !m_rThis.FindSctFrame()->IsInFootnote()))
+ return pPrevFrame;
// Special case: no direct previous frame is found but frame is in footnote
// Search for a previous frame in previous footnote,
// if frame isn't in a section, which is also in the footnote
- if ( !pPrevFrame && m_rThis.IsInFootnote() &&
- ( m_rThis.IsSctFrame() ||
- !m_rThis.IsInSct() || !m_rThis.FindSctFrame()->IsInFootnote() ) )
- {
- const SwFootnoteFrame* pPrevFootnoteFrame =
- static_cast<const SwFootnoteFrame*>(m_rThis.FindFootnoteFrame()->GetPrev());
- if ( pPrevFootnoteFrame )
- {
- pPrevFrame = pPrevFootnoteFrame->GetLastLower();
-
- // Skip hidden paragraphs and empty sections
- while ( pPrevFrame &&
- ( ( pPrevFrame->IsTextFrame() &&
- static_cast<const SwTextFrame*>(pPrevFrame)->IsHiddenNow() ) ||
- ( pPrevFrame->IsSctFrame() &&
- !static_cast<const SwSectionFrame*>(pPrevFrame)->GetSection() ) ) )
- {
- pPrevFrame = pPrevFrame->GetPrev();
- }
- }
- }
- // Special case: found previous frame is a section
- // Search for the last content in the section
- if( pPrevFrame && pPrevFrame->IsSctFrame() )
- {
- const SwSectionFrame* pPrevSectFrame =
- static_cast<const SwSectionFrame*>(pPrevFrame);
- pPrevFrame = pPrevSectFrame->FindLastContent();
- // If the last content is in a table _inside_ the section,
- // take the table herself.
- // OD 2004-02-18 #106629# - correction:
- // Check directly, if table is inside table, instead of indirectly
- // by checking, if section isn't inside a table
- if ( pPrevFrame && pPrevFrame->IsInTab() )
- {
- const SwTabFrame* pTableFrame = pPrevFrame->FindTabFrame();
- if ( pPrevSectFrame->IsAnLower( pTableFrame ) )
- {
- pPrevFrame = pTableFrame;
- }
- }
- // OD 2004-02-18 #106629# correction: skip hidden text frames
- while ( pPrevFrame &&
- pPrevFrame->IsTextFrame() &&
- static_cast<const SwTextFrame*>(pPrevFrame)->IsHiddenNow() )
- {
- pPrevFrame = pPrevFrame->GetPrev();
- }
- }
+ const SwFootnoteFrame* pPrevFootnoteFrame =
+ static_cast<const SwFootnoteFrame*>(m_rThis.FindFootnoteFrame()->GetPrev());
+ if ( pPrevFootnoteFrame )
+ return skipHiddenFrames_(pPrevFootnoteFrame->GetLastLower());
- return pPrevFrame;
+ return nullptr;
}
/// Compare styles attached to these text frames.
@@ -1770,6 +1749,8 @@ SwTwips SwFlowFrame::CalcAddLowerSpaceAsLastInTableCell(
/// Moves the Frame forward if it seems necessary regarding the current conditions and attributes.
bool SwFlowFrame::CheckMoveFwd( bool& rbMakePage, bool bKeep, bool bIgnoreMyOwnKeepValue )
{
+ if (m_rThis.IsHiddenNow())
+ return false;
const SwFrame* pNxt = m_rThis.GetIndNext();
if ( bKeep && //!bMovedBwd &&
@@ -2145,7 +2126,8 @@ bool SwFlowFrame::MoveBwd( bool &rbReformat )
)
pNewUpper = m_rThis.GetLeaf( MAKEPAGE_FTN, false );
}
- else if ( IsPageBreak( true ) ) // Do we have to respect a PageBreak?
+ // Do we have to respect a PageBreak?
+ else if (IsPageBreak(true) && (!m_rThis.IsInSct() || !m_rThis.FindSctFrame()->IsHiddenNow()))
{
// If the previous page doesn't have a Frame in the body,
// flowing back makes sense despite the PageBreak (otherwise,
@@ -2212,7 +2194,7 @@ bool SwFlowFrame::MoveBwd( bool &rbReformat )
}
}
}
- else if ( IsColBreak( true ) )
+ else if (IsColBreak(true))
{
// If the previous column doesn't contain a ContentFrame, flowing back
// makes sense despite the ColumnBreak, as otherwise we'd get
diff --git a/sw/source/core/layout/frmtool.cxx b/sw/source/core/layout/frmtool.cxx
index a861dd60013b..111623518f24 100644
--- a/sw/source/core/layout/frmtool.cxx
+++ b/sw/source/core/layout/frmtool.cxx
@@ -69,6 +69,7 @@
#include <undobj.hxx>
#include <DocumentSettingManager.hxx>
#include <IDocumentDrawModelAccess.hxx>
+#include <IDocumentLayoutAccess.hxx>
#include <IDocumentTimerAccess.hxx>
#include <IDocumentRedlineAccess.hxx>
#include <IDocumentFieldsAccess.hxx>
@@ -782,11 +783,7 @@ SwContentNotify::~SwContentNotify()
SwFrame* pPrevFrame = pCnt->FindPrev();
// skip empty section frames and hidden text frames
{
- while ( pPrevFrame &&
- ( ( pPrevFrame->IsSctFrame() &&
- !static_cast<SwSectionFrame*>(pPrevFrame)->GetSection() ) ||
- ( pPrevFrame->IsTextFrame() &&
- static_cast<SwTextFrame*>(pPrevFrame)->IsHiddenNow() ) ) )
+ while (pPrevFrame && pPrevFrame->IsHiddenNow())
{
pPrevFrame = pPrevFrame->FindPrev();
}
@@ -1067,6 +1064,12 @@ static bool IsShown(sal_uLong const nIndex,
assert(pFirstNode);
assert(pLastNode);
assert(rAnch.GetAnchorId() != RndStdIds::FLY_AT_FLY);
+ if (*pIter == *pEnd && rAnch.GetAnchorId() == RndStdIds::FLY_AT_CHAR)
+ { // tdf#149595 special case - it *could* be shown if first == last
+ return !IsDestroyFrameAnchoredAtChar(*rAnch.GetContentAnchor(),
+ SwPosition(const_cast<SwTextNode&>(*pFirstNode), 0),
+ SwPosition(const_cast<SwTextNode&>(*pLastNode), pLastNode->Len()));
+ }
for (auto iter = *pIter; iter != *pEnd; ++iter)
{
assert(iter->nStart != iter->nEnd); // TODO possible?
@@ -1161,8 +1164,7 @@ void RemoveHiddenObjsOfNode(SwTextNode const& rNode,
{
SwFormatAnchor const& rAnchor = pFrameFormat->GetAnchor();
if (rAnchor.GetAnchorId() == RndStdIds::FLY_AT_CHAR
- || (rAnchor.GetAnchorId() == RndStdIds::FLY_AS_CHAR
- && RES_DRAWFRMFMT == pFrameFormat->Which()))
+ || rAnchor.GetAnchorId() == RndStdIds::FLY_AS_CHAR)
{
assert(rAnchor.GetContentAnchor()->nNode.GetIndex() == rNode.GetIndex());
if (!IsShown(rNode.GetIndex(), rAnchor, pIter, pEnd, pFirstNode, pLastNode))
@@ -1547,10 +1549,20 @@ void InsertCnt_( SwLayoutFrame *pLay, SwDoc *pDoc,
pFrame = pNode->IsTextNode()
? sw::MakeTextFrame(*pNode->GetTextNode(), pLay, eMode)
: pNode->MakeFrame(pLay);
- if( pPageMaker )
+ if (pPageMaker && !pLay->IsHiddenNow())
pPageMaker->CheckInsert( nIndex );
pFrame->InsertBehind( pLay, pPrv );
+ if (!pPrv)
+ {
+ if (SwSectionFrame *const pSection = pLay->FindSctFrame())
+ {
+ if (pSection && pSection->ContainsAny() == pFrame)
+ { // tdf#146258 section PrtArea depends on paragraph upper margin
+ pSection->InvalidatePrt();
+ }
+ }
+ }
// #i27138#
// notify accessibility paragraphs objects about changed
// CONTENT_FLOWS_FROM/_TO relation.
@@ -1682,12 +1694,11 @@ void InsertCnt_( SwLayoutFrame *pLay, SwDoc *pDoc,
continue; // skip it
}
SwSectionNode *pNode = static_cast<SwSectionNode*>(pNd);
- if( pNode->GetSection().CalcHiddenFlag() )
- // is hidden, skip the area
- nIndex = pNode->EndOfSectionIndex();
- else
{
- pFrame = pNode->MakeFrame( pLay );
+ if (pActualSection)
+ pActualSection->SetLastPos(pPrv);
+
+ pFrame = pNode->MakeFrame(pLay, pNode->GetSection().CalcHiddenFlag());
pActualSection.reset( new SwActualSection( pActualSection.release(),
static_cast<SwSectionFrame*>(pFrame), pNode ) );
if ( pActualSection->GetUpper() )
@@ -1719,7 +1730,10 @@ void InsertCnt_( SwLayoutFrame *pLay, SwDoc *pDoc,
static_cast<SwTextFrame*>(pPrv)->Prepare( PREP_QUOVADIS, nullptr, false );
}
}
- if (nIndex + 1 == nEndIndex)
+
+ if (nIndex + 1 == nEndIndex
+ // tdf#136452 may also be needed at end of section
+ || pNode->EndOfSectionIndex() - 1 == nEndIndex)
{ // tdf#131684 tdf#132236 fix upper of frame moved in
// SwUndoDelete; can't be done there unfortunately
// because empty section frames are deleted here
@@ -1831,33 +1845,31 @@ void InsertCnt_( SwLayoutFrame *pLay, SwDoc *pDoc,
}
// new section frame
- pFrame = pActualSection->GetSectionNode()->MakeFrame( pLay );
- pFrame->InsertBehind( pLay, pPrv );
- static_cast<SwSectionFrame*>(pFrame)->Init();
-
- // OD 12.08.2003 #i17969# - consider horizontal/vertical layout
- // for setting position at newly inserted frame
- lcl_SetPos( *pFrame, *pLay );
-
- SwSectionFrame* pOuterSectionFrame = pActualSection->GetSectionFrame();
-
- // a follow has to be appended to the new section frame
- SwSectionFrame* pFollow = pOuterSectionFrame ? pOuterSectionFrame->GetFollow() : nullptr;
- if ( pFollow )
+ if (SwSectionFrame* pOuterSectionFrame = pActualSection->GetSectionFrame())
{
- pOuterSectionFrame->SetFollow( nullptr );
- pOuterSectionFrame->InvalidateSize();
- static_cast<SwSectionFrame*>(pFrame)->SetFollow( pFollow );
- }
+ // Splitting moves the trailing content to the next frame
+ pFrame = pOuterSectionFrame->SplitSect(pActualSection->GetLastPos(), pPrv);
- // We don't want to leave empty parts back.
- if (pOuterSectionFrame &&
- ! pOuterSectionFrame->IsColLocked() &&
- ! pOuterSectionFrame->ContainsContent() )
+ // We don't want to leave empty parts back.
+ if (! pOuterSectionFrame->IsColLocked() &&
+ ! pOuterSectionFrame->ContainsContent() )
+ {
+ pOuterSectionFrame->DelEmpty( true );
+ SwFrame::DestroyFrame(pOuterSectionFrame);
+ }
+ }
+ else
{
- pOuterSectionFrame->DelEmpty( true );
- SwFrame::DestroyFrame(pOuterSectionFrame);
+ pFrame = pActualSection->GetSectionNode()->MakeFrame(
+ pLay, pActualSection->GetSectionNode()->GetSection().IsHiddenFlag());
+ pFrame->InsertBehind( pLay, pPrv );
+ static_cast<SwSectionFrame*>(pFrame)->Init();
+
+ // OD 12.08.2003 #i17969# - consider horizontal/vertical layout
+ // for setting position at newly inserted frame
+ lcl_SetPos( *pFrame, *pLay );
}
+
pActualSection->SetSectionFrame( static_cast<SwSectionFrame*>(pFrame) );
pLay = static_cast<SwLayoutFrame*>(pFrame);
@@ -1941,8 +1953,10 @@ void MakeFrames( SwDoc *pDoc, const SwNodeIndex &rSttIdx,
SwNodeIndex aTmp( rSttIdx );
sal_uLong nEndIdx = rEndIdx.GetIndex();
+ // TODO for multiple layouts there should be a loop here
SwNode* pNd = pDoc->GetNodes().FindPrvNxtFrameNode( aTmp,
- pDoc->GetNodes()[ nEndIdx-1 ]);
+ pDoc->GetNodes()[ nEndIdx-1 ],
+ pDoc->getIDocumentLayoutAccess().GetCurrentLayout());
if ( pNd )
{
bool bApres = aTmp < rSttIdx;
@@ -2080,20 +2094,7 @@ void MakeFrames( SwDoc *pDoc, const SwNodeIndex &rSttIdx,
}
else
{
- bool bSplit;
SwFrame* pPrv = bApres ? pFrame : pFrame->GetPrev();
- // If the section frame is inserted into another one, it must be split.
- if( pSct && rSttIdx.GetNode().IsSectionNode() )
- {
- bSplit = pSct->SplitSect( pFrame, bApres );
- if( !bSplit && !bApres )
- {
- pUpper = pSct->GetUpper();
- pPrv = pSct->GetPrev();
- }
- }
- else
- bSplit = false;
::InsertCnt_( pUpper, pDoc, rSttIdx.GetIndex(), false,
nEndIdx, pPrv, eMode );
@@ -2106,10 +2107,6 @@ void MakeFrames( SwDoc *pDoc, const SwNodeIndex &rSttIdx,
AppendAllObjs( pTable, pUpper );
}
- // If nothing was added (e.g. a hidden section), the split must be reversed.
- if( bSplit && pSct && pSct->GetNext()
- && pSct->GetNext()->IsSctFrame() )
- pSct->MergeNext( static_cast<SwSectionFrame*>(pSct->GetNext()) );
if( pFrame->IsInFly() )
pFrame->FindFlyFrame()->Invalidate_();
if( pFrame->IsInTab() )
@@ -2415,8 +2412,7 @@ void SwBorderAttrs::CalcJoinedWithPrev( const SwFrame& _rFrame,
// one as previous frame.
const SwFrame* pPrevFrame = _pPrevFrame ? _pPrevFrame : _rFrame.GetPrev();
// OD 2004-02-13 #i25029# - skip hidden text frames.
- while ( pPrevFrame && pPrevFrame->IsTextFrame() &&
- static_cast<const SwTextFrame*>(pPrevFrame)->IsHiddenNow() )
+ while (pPrevFrame && pPrevFrame->IsHiddenNow())
{
pPrevFrame = pPrevFrame->GetPrev();
}
@@ -2447,8 +2443,7 @@ void SwBorderAttrs::CalcJoinedWithNext( const SwFrame& _rFrame )
// corresponding attribute set is set at current text frame.
// OD 2004-02-13 #i25029# - get next frame, but skip hidden text frames.
const SwFrame* pNextFrame = _rFrame.GetNext();
- while ( pNextFrame && pNextFrame->IsTextFrame() &&
- static_cast<const SwTextFrame*>(pNextFrame)->IsHiddenNow() )
+ while (pNextFrame && pNextFrame->IsHiddenNow())
{
pNextFrame = pNextFrame->GetNext();
}
diff --git a/sw/source/core/layout/ftnfrm.cxx b/sw/source/core/layout/ftnfrm.cxx
index df8a2e54a6f9..9498cd1e13a6 100644
--- a/sw/source/core/layout/ftnfrm.cxx
+++ b/sw/source/core/layout/ftnfrm.cxx
@@ -2955,13 +2955,9 @@ SwContentFrame* SwFootnoteFrame::FindLastContent()
while ( pTmpLastLower && pTmpLastLower->GetNext() )
{
pTmpLastLower = pTmpLastLower->GetNext();
- if ( ( pTmpLastLower->IsTextFrame() &&
- !static_cast<SwTextFrame*>(pTmpLastLower)->IsHiddenNow() ) ||
- ( pTmpLastLower->IsSctFrame() &&
- static_cast<SwSectionFrame*>(pTmpLastLower)->GetSection() &&
- static_cast<SwSectionFrame*>(pTmpLastLower)->ContainsContent() ) ||
- ( pTmpLastLower->IsTabFrame() &&
- static_cast<SwTabFrame*>(pTmpLastLower)->ContainsContent() ) )
+ if (!pTmpLastLower->IsHiddenNow()
+ && (!pTmpLastLower->IsLayoutFrame()
+ || static_cast<SwLayoutFrame*>(pTmpLastLower)->ContainsContent()))
{
pLastLowerOfFootnote = pTmpLastLower;
}
diff --git a/sw/source/core/layout/layhelp.hxx b/sw/source/core/layout/layhelp.hxx
index 9dc5a916b25f..6dfa4b507639 100644
--- a/sw/source/core/layout/layhelp.hxx
+++ b/sw/source/core/layout/layhelp.hxx
@@ -85,6 +85,7 @@ class SwActualSection
{
SwActualSection *pUpper;
SwSectionFrame *pSectFrame;
+ SwFrame* m_pLastPos = nullptr; // Split it *after* this child frame
SwSectionNode *pSectNode;
public:
SwActualSection( SwActualSection *pUpper,
@@ -96,6 +97,8 @@ public:
SwSectionNode *GetSectionNode() { return pSectNode;}
void SetUpper(SwActualSection *p) { pUpper = p; }
SwActualSection *GetUpper() { return pUpper; }
+ void SetLastPos(SwFrame* p) { m_pLastPos = p; }
+ SwFrame* GetLastPos() const { return m_pLastPos; }
};
/// Helps during the InsertCnt_ function to create new pages.
diff --git a/sw/source/core/layout/newfrm.cxx b/sw/source/core/layout/newfrm.cxx
index 1d1f4597fcf2..2b3c18f981b0 100644
--- a/sw/source/core/layout/newfrm.cxx
+++ b/sw/source/core/layout/newfrm.cxx
@@ -500,6 +500,11 @@ void SwRootFrame::Init( SwFrameFormat* pFormat )
SwNodeIndex aTmp( *pDoc->GetNodes().GetEndOfContent().StartOfSectionNode(), 1 );
::InsertCnt_( pLay, pDoc, aTmp.GetIndex(), true );
+
+ // tdf#156077 create all pages for at-page anchored flys now because all
+ // these flys must be attached to some page when Init() is finished
+ AssertFlyPages();
+
//Remove masters that haven't been replaced yet from the list.
RemoveMasterObjs( mpDrawPage );
if( rSettingAccess.get(DocumentSettingId::GLOBAL_DOCUMENT) )
diff --git a/sw/source/core/layout/pagechg.cxx b/sw/source/core/layout/pagechg.cxx
index a650179660ac..8056c85c2d4c 100644
--- a/sw/source/core/layout/pagechg.cxx
+++ b/sw/source/core/layout/pagechg.cxx
@@ -53,6 +53,7 @@
#include <tabfrm.hxx>
#include <txtfrm.hxx>
#include <notxtfrm.hxx>
+#include <sectfrm.hxx>
#include <layact.hxx>
#include <flyfrms.hxx>
#include <htmltbl.hxx>
@@ -775,7 +776,13 @@ SwPageDesc *SwPageFrame::FindPageDesc()
return pRet;
}
- SwFrame *pFlow = FindFirstBodyContent();
+ SwContentFrame* pFirstContent = FindFirstBodyContent();
+ while (pFirstContent && pFirstContent->IsInSct()
+ && pFirstContent->FindSctFrame()->IsHiddenNow())
+ {
+ pFirstContent = pFirstContent->GetNextContentFrame();
+ }
+ SwFrame* pFlow = pFirstContent;
if ( pFlow && pFlow->IsInTab() )
pFlow = pFlow->FindTabFrame();
diff --git a/sw/source/core/layout/sectfrm.cxx b/sw/source/core/layout/sectfrm.cxx
index 48debbcc399a..4f4e36ca5711 100644
--- a/sw/source/core/layout/sectfrm.cxx
+++ b/sw/source/core/layout/sectfrm.cxx
@@ -182,6 +182,13 @@ SwSectionFrame::~SwSectionFrame()
{
}
+//virtual
+bool SwSectionFrame::IsHiddenNow() const
+{
+ const auto* pSection = GetSection();
+ return !pSection || pSection->CalcHiddenFlag();
+}
+
void SwSectionFrame::DelEmpty( bool bRemove )
{
if( IsColLocked() )
@@ -498,50 +505,53 @@ void SwSectionFrame::MergeNext( SwSectionFrame* pNxt )
}
/**
-|* Divides a SectionFrame into two parts. The second one starts with the
-|* passed frame.
+|* Divides a SectionFrame into two parts. The content of the second one
+|* starts after pFrameStartAfter; the created second section frame itself
+|* is put after pFramePutAfter.
+|* If pFrameStartAfter is nullptr, the split happens at the start.
|* This is required when inserting an inner section, because the MoveFwd
|* cannot have the desired effect within a frame or a table cell.
+|* Splitting at the start/end makes sense, because the empty frame would
+|* be removed after the InsertCnt_ finished.
|*/
-bool SwSectionFrame::SplitSect( SwFrame* pFrame, bool bApres )
+SwSectionFrame* SwSectionFrame::SplitSect( SwFrame* pFrameStartAfter, SwFrame* pFramePutAfter )
{
- assert(pFrame && "SplitSect: Why?");
- SwFrame* pOther = bApres ? pFrame->FindNext() : pFrame->FindPrev();
- if( !pOther )
- return false;
- SwSectionFrame* pSect = pOther->FindSctFrame();
- if( pSect != this )
- return false;
+ assert(!pFrameStartAfter || pFrameStartAfter->FindSctFrame() == this);
+ SwFrame* pSav = pFrameStartAfter ? pFrameStartAfter->FindNext() : ContainsAny();
+ if (pSav && pSav->FindSctFrame() != this)
+ pSav = nullptr; // we are at the very end
+
// Put the content aside
- SwFrame* pSav = ::SaveContent( this, bApres ? pOther : pFrame );
- OSL_ENSURE( pSav, "SplitSect: What's on?" );
- if( pSav ) // be robust
- { // Create a new SctFrame, not as a Follower/master
- SwSectionFrame* pNew = new SwSectionFrame( *pSect->GetSection(), pSect );
- pNew->InsertBehind( pSect->GetUpper(), pSect );
- pNew->Init();
- SwRectFnSet aRectFnSet(this);
- aRectFnSet.MakePos( *pNew, nullptr, pSect, true );
- // OD 25.03.2003 #108339# - restore content:
- // determine layout frame for restoring content after the initialization
- // of the section frame. In the section initialization the columns are
- // created.
- {
- SwLayoutFrame* pLay = pNew;
- // Search for last layout frame, e.g. for columned sections.
- while( pLay->Lower() && pLay->Lower()->IsLayoutFrame() )
- pLay = static_cast<SwLayoutFrame*>(pLay->Lower());
- ::RestoreContent( pSav, pLay, nullptr );
- }
- InvalidateSize_();
- if( HasFollow() )
- {
- pNew->SetFollow( GetFollow() );
- SetFollow( nullptr );
- }
- return true;
+ if (pSav)
+ pSav = ::SaveContent( this, pSav );
+
+ // Create a new SctFrame, not as a Follower/master
+ if (!pFramePutAfter)
+ pFramePutAfter = this;
+ SwSectionFrame* pNew = new SwSectionFrame( *GetSection(), this );
+ pNew->InsertBehind( pFramePutAfter->GetUpper(), pFramePutAfter );
+ pNew->Init();
+ SwRectFnSet aRectFnSet(this);
+ aRectFnSet.MakePos( *pNew, nullptr, pFramePutAfter, true );
+ // OD 25.03.2003 #108339# - restore content:
+ // determine layout frame for restoring content after the initialization
+ // of the section frame. In the section initialization the columns are
+ // created.
+ if (pSav)
+ {
+ SwLayoutFrame* pLay = pNew;
+ // Search for last layout frame, e.g. for columned sections.
+ while( pLay->Lower() && pLay->Lower()->IsLayoutFrame() )
+ pLay = static_cast<SwLayoutFrame*>(pLay->Lower());
+ ::RestoreContent( pSav, pLay, nullptr );
+ }
+ InvalidateSize_();
+ if( HasFollow() )
+ {
+ pNew->SetFollow( GetFollow() );
+ SetFollow( nullptr );
}
- return false;
+ return pNew;
}
/**
@@ -1338,6 +1348,20 @@ void SwSectionFrame::Format( vcl::RenderContext* pRenderContext, const SwBorderA
SwRectFnSet aRectFnSet(this);
+ if (GetSection()->CalcHiddenFlag())
+ {
+ {
+ SwFrameAreaDefinition::FrameAreaWriteAccess aFrm(*this);
+ aRectFnSet.SetHeight(aFrm, 0);
+ }
+ {
+ SwFrameAreaDefinition::FramePrintAreaWriteAccess aPrt(*this);
+ aRectFnSet.SetHeight(aPrt, 0);
+ }
+ setFrameAreaSizeValid(true);
+ setFramePrintAreaValid(true);
+ }
+
if ( !isFramePrintAreaValid() )
{
PROTOCOL( this, PROT::PrintArea, DbgAction::NONE, nullptr )
@@ -2145,6 +2169,11 @@ bool SwSectionFrame::Growable() const
SwTwips SwSectionFrame::Grow_( SwTwips nDist, bool bTst )
{
+ if (GetSection()->CalcHiddenFlag())
+ {
+ return 0;
+ }
+
if ( !IsColLocked() && !HasFixSize() )
{
SwRectFnSet aRectFnSet(this);
@@ -2582,6 +2611,18 @@ void SwSectionFrame::Modify( const SfxPoolItem* pOld, const SfxPoolItem * pNew )
if ( aOldSet.Count() || aNewSet.Count() )
SwLayoutFrame::Modify( &aOldSet, &aNewSet );
}
+ else if (pNew && (RES_SECTION_HIDDEN == pNew->Which()
+ || RES_SECTION_NOT_HIDDEN == pNew->Which()))
+ {
+ InvalidateAll();
+ InvalidateObjs(false);
+
+ for (SwFrame* pLowerFrame = Lower(); pLowerFrame; pLowerFrame = pLowerFrame->GetNext())
+ {
+ pLowerFrame->InvalidateAll();
+ pLowerFrame->InvalidateObjs(false);
+ }
+ }
else
UpdateAttr_( pOld, pNew, nInvFlags );
diff --git a/sw/source/core/layout/tabfrm.cxx b/sw/source/core/layout/tabfrm.cxx
index 59ab746ae9ec..dd0d6bbc9dd5 100644
--- a/sw/source/core/layout/tabfrm.cxx
+++ b/sw/source/core/layout/tabfrm.cxx
@@ -1359,7 +1359,104 @@ namespace
return true;
}
-}
+
+ auto IsAllHiddenSection(SwSectionFrame const& rSection) -> bool
+ {
+ if (rSection.IsHiddenNow())
+ return true;
+ for (SwFrame const* pFrame = rSection.Lower(); pFrame; pFrame = pFrame->GetNext())
+ {
+ if (pFrame->IsColumnFrame())
+ {
+ return false; // adds some padding
+ }
+ else if (pFrame->IsSctFrame())
+ {
+ assert(false); // these aren't nested?
+ if (!IsAllHiddenSection(*static_cast<SwSectionFrame const*>(pFrame)))
+ {
+ return false;
+ }
+ }
+ else if (pFrame->IsTabFrame())
+ {
+ return false; // presumably
+ }
+ else if (pFrame->IsTextFrame())
+ {
+ if (!pFrame->IsHiddenNow())
+ {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+ auto IsAllHiddenRow(SwRowFrame const& rRow, SwTabFrame const& rTab) -> bool;
+
+ auto IsAllHiddenCell(SwCellFrame const& rCell, SwRowFrame const& rRow, SwTabFrame const& rTab) -> bool
+ {
+ for (SwFrame const* pFrame = rCell.Lower(); pFrame; pFrame = pFrame->GetNext())
+ {
+ if (pFrame->IsRowFrame())
+ {
+ if (!IsAllHiddenRow(*static_cast<SwRowFrame const*>(pFrame), rTab))
+ {
+ return false;
+ }
+ }
+ else if (pFrame->IsSctFrame())
+ {
+ if (!IsAllHiddenSection(*static_cast<SwSectionFrame const*>(pFrame)))
+ {
+ return false;
+ }
+ }
+ else if (pFrame->IsTabFrame())
+ {
+ return false; // presumably
+ }
+ else if (pFrame->IsTextFrame())
+ {
+ if (!pFrame->IsHiddenNow())
+ {
+ return false;
+ }
+ }
+ }
+ if (rTab.IsCollapsingBorders() && !rCell.Lower()->IsRowFrame())
+ {
+ if (rRow.GetTopMarginForLowers() != 0
+ || rRow.GetBottomMarginForLowers() != 0)
+ {
+ return false;
+ }
+ }
+ else
+ {
+ SwBorderAttrAccess border(SwFrame::GetCache(), &rCell);
+ if (border.Get()->CalcTop() != 0 || border.Get()->CalcBottom() != 0)
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ auto IsAllHiddenRow(SwRowFrame const& rRow, SwTabFrame const& rTab) -> bool
+ {
+ for (SwFrame const* pCell = rRow.Lower(); pCell; pCell = pCell->GetNext())
+ {
+ if (!IsAllHiddenCell(*static_cast<SwCellFrame const*>(pCell), rRow, rTab))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+} // namespace
void SwTabFrame::Join()
{
@@ -1378,11 +1475,20 @@ void SwTabFrame::Join()
SwFrame* pPrv = GetLastLower();
SwTwips nHeight = 0; //Total height of the inserted rows as return value.
+ bool isAllHidden(true);
while ( pRow )
{
pNxt = pRow->GetNext();
nHeight += aRectFnSet.GetHeight(pRow->getFrameArea());
+ if (nHeight != 0)
+ {
+ isAllHidden = false;
+ }
+ if (isAllHidden)
+ {
+ isAllHidden = IsAllHiddenRow(*static_cast<SwRowFrame *>(pRow), *this);
+ }
pRow->RemoveFromLayout();
pRow->InvalidateAll_();
pRow->InsertBehind( this, pPrv );
@@ -1396,6 +1502,18 @@ void SwTabFrame::Join()
SwFrame::DestroyFrame(pFoll);
Grow( nHeight );
+
+ // In case the row does not have a height, Grow(nHeight) did nothing.
+ // If this is not invalidated, subsequent follows may never be joined.
+ // Try to guess if the height of the row will be 0. If the document
+ // was just loaded, it will be 0 in any case, but probably it's not a good
+ // idea to join *all* follows for a newly loaded document, it would be
+ // easier not to split the table in the first place; presumably it is split
+ // because that improves performance.
+ if (isAllHidden)
+ {
+ InvalidateSize_();
+ }
}
}
@@ -5524,9 +5642,12 @@ static SwTwips lcl_CalcHeightOfFirstContentLine( const SwRowFrame& rSourceLine )
const SwRowFrame* pTmpSourceRow = static_cast<const SwRowFrame*>(pCurrSourceCell->Lower());
nTmpHeight = lcl_CalcHeightOfFirstContentLine( *pTmpSourceRow );
}
- else if ( pTmp->IsTabFrame() )
+ else if (pTmp->IsTabFrame() || (pTmp->IsSctFrame() && pTmp->GetLower() && pTmp->GetLower()->IsTabFrame()))
{
- nTmpHeight = static_cast<const SwTabFrame*>(pTmp)->CalcHeightOfFirstContentLine();
+ SwTabFrame const*const pTabFrame(pTmp->IsTabFrame()
+ ? static_cast<SwTabFrame const*>(pTmp)
+ : static_cast<SwTabFrame const*>(pTmp->GetLower()));
+ nTmpHeight = pTabFrame->CalcHeightOfFirstContentLine();
}
else if (pTmp->IsTextFrame() || (pTmp->IsSctFrame() && pTmp->GetLower() && pTmp->GetLower()->IsTextFrame()))
{
diff --git a/sw/source/core/layout/trvlfrm.cxx b/sw/source/core/layout/trvlfrm.cxx
index 9079d0a9cbab..3dd5cc223038 100644
--- a/sw/source/core/layout/trvlfrm.cxx
+++ b/sw/source/core/layout/trvlfrm.cxx
@@ -49,6 +49,7 @@
#include <frmtool.hxx>
#include <ndtxt.hxx>
#include <undobj.hxx>
+#include <sectfrm.hxx>
#include <cfloat>
#include <swselectionlist.hxx>
@@ -801,8 +802,7 @@ static bool lcl_UpDown( SwPaM *pPam, const SwContentFrame *pStart,
//If I'm in the DocumentBody, I want to stay there.
if ( pStart->IsInDocBody() )
{
- while ( pCnt && (!pCnt->IsInDocBody() ||
- (pCnt->IsTextFrame() && static_cast<const SwTextFrame*>(pCnt)->IsHiddenNow())))
+ while (pCnt && (!pCnt->IsInDocBody() || pCnt->IsHiddenNow()))
{
pCnt = (*fnNxtPrv)( pCnt );
pCnt = ::lcl_MissProtectedFrames( pCnt, fnNxtPrv, true, bInReadOnly, bTableSel );
@@ -813,8 +813,7 @@ static bool lcl_UpDown( SwPaM *pPam, const SwContentFrame *pStart,
//case of necessity.
else if ( pStart->IsInFootnote() )
{
- while ( pCnt && (!pCnt->IsInFootnote() ||
- (pCnt->IsTextFrame() && static_cast<const SwTextFrame*>(pCnt)->IsHiddenNow())))
+ while (pCnt && (!pCnt->IsInFootnote() || pCnt->IsHiddenNow()))
{
pCnt = (*fnNxtPrv)( pCnt );
pCnt = ::lcl_MissProtectedFrames( pCnt, fnNxtPrv, true, bInReadOnly, bTableSel );
@@ -824,7 +823,7 @@ static bool lcl_UpDown( SwPaM *pPam, const SwContentFrame *pStart,
//In Flys we can go ahead blindly as long as we find a Content.
else if ( pStart->IsInFly() )
{
- if ( pCnt && pCnt->IsTextFrame() && static_cast<const SwTextFrame*>(pCnt)->IsHiddenNow() )
+ if (pCnt && pCnt->IsHiddenNow())
{
pCnt = (*fnNxtPrv)( pCnt );
pCnt = ::lcl_MissProtectedFrames( pCnt, fnNxtPrv, true, bInReadOnly, bTableSel );
@@ -848,7 +847,7 @@ static bool lcl_UpDown( SwPaM *pPam, const SwContentFrame *pStart,
}
if ( !bSame )
pCnt = nullptr;
- else if (pCnt->IsTextFrame() && static_cast<const SwTextFrame*>(pCnt)->IsHiddenNow()) // i73332
+ else if (pCnt->IsHiddenNow()) // i73332
{
pCnt = (*fnNxtPrv)( pCnt );
pCnt = ::lcl_MissProtectedFrames( pCnt, fnNxtPrv, true, bInReadOnly, bTableSel );
@@ -931,8 +930,7 @@ static bool lcl_UpDown( SwPaM *pPam, const SwContentFrame *pStart,
}
}
- } while ( !bEnd ||
- (pCnt && pCnt->IsTextFrame() && static_cast<const SwTextFrame*>(pCnt)->IsHiddenNow()));
+ } while (!bEnd || (pCnt && pCnt->IsHiddenNow()));
if (pCnt == nullptr)
{
@@ -1219,7 +1217,7 @@ const SwContentFrame *SwLayoutFrame::GetContentPos( Point& rPoint,
if ( pComp != pContent )
continue;
- if ( !pContent->IsTextFrame() || !static_cast<const SwTextFrame*>(pContent)->IsHiddenNow() )
+ if (!pContent->IsHiddenNow())
{
SwRect aContentFrame( pContent->UnionFrame() );
if ( aContentFrame.IsInside( rPoint ) )
@@ -1686,6 +1684,15 @@ bool SwFrame::IsProtected() const
return false;
}
+// virtual
+bool SwFrame::IsHiddenNow() const
+{
+ if (const auto* pSectFrame = FindSctFrame())
+ return pSectFrame->IsHiddenNow();
+
+ return false;
+}
+
/** @return the physical page number */
sal_uInt16 SwFrame::GetPhyPageNum() const
{
diff --git a/sw/source/core/layout/wsfrm.cxx b/sw/source/core/layout/wsfrm.cxx
index c1e85421cce3..d8875dbc89cd 100644
--- a/sw/source/core/layout/wsfrm.cxx
+++ b/sw/source/core/layout/wsfrm.cxx
@@ -3973,6 +3973,18 @@ void SwLayoutFrame::FormatWidthCols( const SwBorderAttrs &rAttrs,
}
}
+void SwLayoutFrame::dumpAsXmlAttributes(xmlTextWriterPtr writer) const
+{
+ SwFrame::dumpAsXmlAttributes(writer);
+
+ const SwFrameFormat* pFormat = GetFormat();
+ if (pFormat)
+ {
+ (void)xmlTextWriterWriteFormatAttribute( writer, BAD_CAST( "format" ), "%p", pFormat);
+ (void)xmlTextWriterWriteFormatAttribute( writer, BAD_CAST( "formatName" ), "%s", BAD_CAST(pFormat->GetName().toUtf8().getStr()));
+ }
+}
+
static SwContentFrame* lcl_InvalidateSection( SwFrame *pCnt, SwInvalidateFlags nInv )
{
SwSectionFrame* pSect = pCnt->FindSctFrame();
diff --git a/sw/source/core/ole/ndole.cxx b/sw/source/core/ole/ndole.cxx
index 9000d6ef1b9e..5094b9f777a1 100644
--- a/sw/source/core/ole/ndole.cxx
+++ b/sw/source/core/ole/ndole.cxx
@@ -147,6 +147,8 @@ void SAL_CALL SwOLEListener_Impl::disposing( const lang::EventObject& )
// TODO/LATER: actually SwEmbedObjectLink should be used here, but because different objects are used to control
// embedded object different link objects with the same functionality had to be implemented
+namespace {
+
class SwEmbedObjectLink : public sfx2::SvBaseLink
{
SwOLENode* pOleNode;
@@ -209,6 +211,44 @@ void SwEmbedObjectLink::Closed()
SvBaseLink::Closed();
}
+class SwIFrameLink : public sfx2::SvBaseLink
+{
+ SwOLENode* m_pOleNode;
+
+public:
+ explicit SwIFrameLink(SwOLENode* pNode)
+ : ::sfx2::SvBaseLink(::SfxLinkUpdateMode::ONCALL, SotClipboardFormatId::SVXB)
+ , m_pOleNode(pNode)
+ {
+ SetSynchron( false );
+ }
+
+ ::sfx2::SvBaseLink::UpdateResult DataChanged(
+ const OUString&, const uno::Any& )
+ {
+ uno::Reference<embed::XEmbeddedObject> xObject = m_pOleNode->GetOLEObj().GetOleRef();
+ uno::Reference<embed::XCommonEmbedPersist> xPersObj(xObject, uno::UNO_QUERY);
+ if (xPersObj.is())
+ {
+ // let the IFrameObject reload the link
+ try
+ {
+ xPersObj->reload(uno::Sequence<beans::PropertyValue>(), uno::Sequence<beans::PropertyValue>());
+ }
+ catch (const uno::Exception&)
+ {
+ }
+
+ m_pOleNode->SetChanged();
+ }
+
+ return SUCCESS;
+ }
+
+};
+
+}
+
SwOLENode::SwOLENode( const SwNodeIndex &rWhere,
const svt::EmbeddedObjectRef& xObj,
SwGrfFormatColl *pGrfColl,
@@ -572,22 +612,22 @@ void SwOLENode::BreakFileLink_Impl()
{
SfxObjectShell* pPers = GetDoc()->GetPersist();
- if ( pPers )
+ if ( !pPers )
+ return;
+
+ uno::Reference< embed::XStorage > xStorage = pPers->GetStorage();
+ if ( !xStorage.is() )
+ return;
+
+ try
+ {
+ uno::Reference< embed::XLinkageSupport > xLinkSupport( maOLEObj.GetOleRef(), uno::UNO_QUERY_THROW );
+ xLinkSupport->breakLink( xStorage, maOLEObj.GetCurrentPersistName() );
+ DisconnectFileLink_Impl();
+ maLinkURL.clear();
+ }
+ catch( uno::Exception& )
{
- uno::Reference< embed::XStorage > xStorage = pPers->GetStorage();
- if ( xStorage.is() )
- {
- try
- {
- uno::Reference< embed::XLinkageSupport > xLinkSupport( maOLEObj.GetOleRef(), uno::UNO_QUERY_THROW );
- xLinkSupport->breakLink( xStorage, maOLEObj.GetCurrentPersistName() );
- DisconnectFileLink_Impl();
- maLinkURL.clear();
- }
- catch( uno::Exception& )
- {
- }
- }
}
}
@@ -602,28 +642,59 @@ void SwOLENode::DisconnectFileLink_Impl()
void SwOLENode::CheckFileLink_Impl()
{
- if ( maOLEObj.m_xOLERef.GetObject().is() && !mpObjectLink )
+ if ( !(maOLEObj.m_xOLERef.GetObject().is() && !mpObjectLink) )
+ return;
+
+ try
{
- try
+ uno::Reference<embed::XEmbeddedObject> xObject = maOLEObj.m_xOLERef.GetObject();
+ if (!xObject)
+ return;
+
+ bool bIFrame = false;
+
+ OUString aLinkURL;
+ uno::Reference<embed::XLinkageSupport> xLinkSupport(xObject, uno::UNO_QUERY);
+ if (xLinkSupport)
+ {
+ if (xLinkSupport->isLink())
+ aLinkURL = xLinkSupport->getLinkURL();
+ }
+ else
{
- uno::Reference< embed::XLinkageSupport > xLinkSupport( maOLEObj.m_xOLERef.GetObject(), uno::UNO_QUERY_THROW );
- if ( xLinkSupport->isLink() )
+ // get IFrame (Floating Frames) listed and updatable from the
+ // manage links dialog
+ SvGlobalName aClassId(xObject->getClassID());
+ if (aClassId == SvGlobalName(SO3_IFRAME_CLASSID))
{
- const OUString aLinkURL = xLinkSupport->getLinkURL();
- if ( !aLinkURL.isEmpty() )
- {
- // this is a file link so the model link manager should handle it
- mpObjectLink = new SwEmbedObjectLink( this );
- maLinkURL = aLinkURL;
- GetDoc()->getIDocumentLinksAdministration().GetLinkManager().InsertFileLink( *mpObjectLink, OBJECT_CLIENT_OLE, aLinkURL );
- mpObjectLink->Connect();
- }
+ uno::Reference<beans::XPropertySet> xSet(xObject->getComponent(), uno::UNO_QUERY);
+ if (xSet.is())
+ xSet->getPropertyValue("FrameURL") >>= aLinkURL;
+ bIFrame = true;
}
}
- catch( uno::Exception& )
+
+ if (!aLinkURL.isEmpty()) // this is a file link so the model link manager should handle it
{
+ SwEmbedObjectLink* pEmbedObjectLink = nullptr;
+ if (!bIFrame)
+ {
+ pEmbedObjectLink = new SwEmbedObjectLink(this);
+ mpObjectLink = pEmbedObjectLink;
+ }
+ else
+ {
+ mpObjectLink = new SwIFrameLink(this);
+ }
+ maLinkURL = aLinkURL;
+ GetDoc()->getIDocumentLinksAdministration().GetLinkManager().InsertFileLink( *mpObjectLink, OBJECT_CLIENT_OLE, aLinkURL );
+ if (pEmbedObjectLink)
+ pEmbedObjectLink->Connect();
}
}
+ catch( uno::Exception& )
+ {
+ }
}
// #i99665#
@@ -862,39 +933,39 @@ SwOLEObj::~SwOLEObj() COVERITY_NOEXCEPT_FALSE
void SwOLEObj::SetNode( SwOLENode* pNode )
{
m_pOLENode = pNode;
- if ( m_aName.isEmpty() )
- {
- SwDoc* pDoc = pNode->GetDoc();
-
- // If there's already a SvPersist instance, we use it
- SfxObjectShell* p = pDoc->GetPersist();
- if( !p )
- {
- // TODO/LATER: Isn't an EmbeddedObjectContainer sufficient here?
- // What happens to the document?
- OSL_ENSURE( false, "Why are we creating a DocShell here??" );
- p = new SwDocShell( pDoc, SfxObjectCreateMode::INTERNAL );
- p->DoInitNew();
- }
+ if ( !m_aName.isEmpty() )
+ return;
- OUString aObjName;
- uno::Reference < container::XChild > xChild( m_xOLERef.GetObject(), uno::UNO_QUERY );
- if ( xChild.is() && xChild->getParent() != p->GetModel() )
- // it is possible that the parent was set already
- xChild->setParent( p->GetModel() );
- if (!p->GetEmbeddedObjectContainer().InsertEmbeddedObject( m_xOLERef.GetObject(), aObjName ) )
- {
- OSL_FAIL( "InsertObject failed" );
- if ( xChild.is() )
- xChild->setParent( nullptr );
- }
- else
- m_xOLERef.AssignToContainer( &p->GetEmbeddedObjectContainer(), aObjName );
+ SwDoc* pDoc = pNode->GetDoc();
- const_cast<SwOLENode*>(m_pOLENode)->CheckFileLink_Impl(); // for this notification nonconst access is required
+ // If there's already a SvPersist instance, we use it
+ SfxObjectShell* p = pDoc->GetPersist();
+ if( !p )
+ {
+ // TODO/LATER: Isn't an EmbeddedObjectContainer sufficient here?
+ // What happens to the document?
+ OSL_ENSURE( false, "Why are we creating a DocShell here??" );
+ p = new SwDocShell( pDoc, SfxObjectCreateMode::INTERNAL );
+ p->DoInitNew();
+ }
- m_aName = aObjName;
+ OUString aObjName;
+ uno::Reference < container::XChild > xChild( m_xOLERef.GetObject(), uno::UNO_QUERY );
+ if ( xChild.is() && xChild->getParent() != p->GetModel() )
+ // it is possible that the parent was set already
+ xChild->setParent( p->GetModel() );
+ if (!p->GetEmbeddedObjectContainer().InsertEmbeddedObject( m_xOLERef.GetObject(), aObjName ) )
+ {
+ OSL_FAIL( "InsertObject failed" );
+ if ( xChild.is() )
+ xChild->setParent( nullptr );
}
+ else
+ m_xOLERef.AssignToContainer( &p->GetEmbeddedObjectContainer(), aObjName );
+
+ const_cast<SwOLENode*>(m_pOLENode)->CheckFileLink_Impl(); // for this notification nonconst access is required
+
+ m_aName = aObjName;
}
OUString SwOLEObj::GetStyleString()
@@ -980,6 +1051,18 @@ bool SwOLEObj::UnloadObject()
return bRet;
}
+PurgeGuard::PurgeGuard(const SwDoc& rDoc)
+ : m_rManager(const_cast<SwDoc&>(rDoc).GetDocumentSettingManager())
+ , m_bOrigPurgeOle(m_rManager.get(DocumentSettingId::PURGE_OLE))
+{
+ m_rManager.set(DocumentSettingId::PURGE_OLE, false);
+}
+
+PurgeGuard::~PurgeGuard()
+{
+ m_rManager.set(DocumentSettingId::PURGE_OLE, m_bOrigPurgeOle);
+}
+
bool SwOLEObj::UnloadObject( uno::Reference< embed::XEmbeddedObject > const & xObj, const SwDoc* pDoc, sal_Int64 nAspect )
{
if ( !pDoc )
@@ -1006,6 +1089,8 @@ bool SwOLEObj::UnloadObject( uno::Reference< embed::XEmbeddedObject > const & xO
{
uno::Reference < embed::XEmbedPersist > xPers( xObj, uno::UNO_QUERY );
assert(xPers.is() && "Modified object without persistence in cache!");
+
+ PurgeGuard aGuard(*pDoc);
xPers->storeOwn();
}
@@ -1167,7 +1252,7 @@ void SwOLELRUCache::Load()
if (nVal < m_nLRU_InitSize)
{
- std::shared_ptr<SwOLELRUCache> tmp(g_pOLELRU_Cache); // prevent delete this
+ std::shared_ptr<SwOLELRUCache> xKeepAlive(g_pOLELRU_Cache); // prevent delete this
// size of cache has been changed
sal_Int32 nCount = m_OleObjects.size();
sal_Int32 nPos = nCount;
@@ -1197,20 +1282,20 @@ void SwOLELRUCache::InsertObj( SwOLEObj& rObj )
m_OleObjects.erase(it);
it = m_OleObjects.end();
}
- if (it == m_OleObjects.end())
+ if (it != m_OleObjects.end())
+ return;
+
+ std::shared_ptr<SwOLELRUCache> xKeepAlive(g_pOLELRU_Cache); // prevent delete this
+ // try to remove objects if necessary
+ sal_Int32 nCount = m_OleObjects.size();
+ sal_Int32 nPos = nCount-1;
+ while (nPos >= 0 && nCount >= m_nLRU_InitSize)
{
- std::shared_ptr<SwOLELRUCache> tmp(g_pOLELRU_Cache); // prevent delete this
- // try to remove objects if necessary
- sal_Int32 nCount = m_OleObjects.size();
- sal_Int32 nPos = nCount-1;
- while (nPos >= 0 && nCount >= m_nLRU_InitSize)
- {
- pObj = m_OleObjects[ nPos-- ];
- if ( pObj->UnloadObject() )
- nCount--;
- }
- m_OleObjects.push_front(&rObj);
+ pObj = m_OleObjects[ nPos-- ];
+ if ( pObj->UnloadObject() )
+ nCount--;
}
+ m_OleObjects.push_front(&rObj);
}
void SwOLELRUCache::RemoveObj( SwOLEObj& rObj )
diff --git a/sw/source/core/text/frmcrsr.cxx b/sw/source/core/text/frmcrsr.cxx
index 7eae6a55198e..07c8944d0a03 100644
--- a/sw/source/core/text/frmcrsr.cxx
+++ b/sw/source/core/text/frmcrsr.cxx
@@ -181,7 +181,7 @@ bool SwTextFrame::GetCharRect( SwRect& rOrig, const SwPosition &rPos,
{
OSL_ENSURE( ! IsVertical() || ! IsSwapped(),"SwTextFrame::GetCharRect with swapped frame" );
- if( IsLocked() || IsHiddenNow() )
+ if (IsLocked())
return false;
// Find the right frame first. We need to keep in mind that:
diff --git a/sw/source/core/text/frmform.cxx b/sw/source/core/text/frmform.cxx
index 5ef68ca3010d..7a1b0ed7e3ff 100755
--- a/sw/source/core/text/frmform.cxx
+++ b/sw/source/core/text/frmform.cxx
@@ -1599,9 +1599,27 @@ void SwTextFrame::Format_( SwTextFormatter &rLine, SwTextFormatInfo &rInf,
// If we're finished formatting the text and we still
// have other line objects left, these are superfluous
// now because the text has gotten shorter.
+ bool bTruncLines = false;
if( rLine.GetStart() + rLine.GetLength() >= nStrLen &&
rLine.GetCurr()->GetNext() )
{
+ bTruncLines = true;
+ }
+ else if (GetMergedPara() && rLine.GetCurr()->GetNext())
+ {
+ // We can also have superfluous lines with redlining in case the current line is shorter
+ // than the text length, but the total length of lines is still more than expected.
+ // Truncate in this case as well.
+ TextFrameIndex nLen(0);
+ for (const SwLineLayout* pLine = pPara; pLine; pLine = pLine->GetNext())
+ {
+ nLen += pLine->GetLen();
+ }
+ bTruncLines = nLen > nStrLen;
+ }
+
+ if (bTruncLines)
+ {
rLine.TruncLines();
rLine.SetTruncLines( true );
}
diff --git a/sw/source/core/text/porfld.cxx b/sw/source/core/text/porfld.cxx
index 5872e5688ba1..ad3acbafefa4 100644
--- a/sw/source/core/text/porfld.cxx
+++ b/sw/source/core/text/porfld.cxx
@@ -1069,6 +1069,9 @@ void SwTextFrame::StopAnimation( OutputDevice* pOut )
*/
SwCombinedPortion::SwCombinedPortion( const OUString &rText )
: SwFieldPortion( rText )
+ , aWidth{ static_cast<sal_uInt16>(0),
+ static_cast<sal_uInt16>(0),
+ static_cast<sal_uInt16>(0) }
, nUpPos(0)
, nLowPos(0)
, nProportion(55)
diff --git a/sw/source/core/text/porfld.hxx b/sw/source/core/text/porfld.hxx
index c8d7b7942ac5..7678298495d7 100644
--- a/sw/source/core/text/porfld.hxx
+++ b/sw/source/core/text/porfld.hxx
@@ -199,7 +199,7 @@ public:
class SwCombinedPortion : public SwFieldPortion
{
sal_uInt16 aPos[6]; // up to six X positions
- o3tl::enumarray<SwFontScript,sal_uInt16> aWidth = {}; // one width for every scripttype
+ o3tl::enumarray<SwFontScript,sal_uInt16> aWidth; // one width for every scripttype
SwFontScript aScrType[6]; // scripttype of every character
sal_uInt16 nUpPos; // the Y position of the upper baseline
sal_uInt16 nLowPos; // the Y position of the lower baseline
diff --git a/sw/source/core/text/porlay.cxx b/sw/source/core/text/porlay.cxx
index 13453253a837..a4287066c828 100644
--- a/sw/source/core/text/porlay.cxx
+++ b/sw/source/core/text/porlay.cxx
@@ -1016,7 +1016,7 @@ void SwScriptInfo::InitScriptInfo(const SwTextNode& rNode,
{
const Range& rRange = aHiddenMulti.GetRange( i );
const sal_Int32 nStart = rRange.Min();
- const sal_Int32 nEnd = rRange.Max() + 1;
+ const sal_Int32 nEnd = rRange.Max() + (rText.isEmpty() ? 0 : 1);
m_HiddenChg.push_back( TextFrameIndex(nStart) );
m_HiddenChg.push_back( TextFrameIndex(nEnd) );
diff --git a/sw/source/core/text/pormulti.cxx b/sw/source/core/text/pormulti.cxx
index 3bd45fee2180..9ef4c25ccf85 100644
--- a/sw/source/core/text/pormulti.cxx
+++ b/sw/source/core/text/pormulti.cxx
@@ -2357,6 +2357,11 @@ bool SwTextFormatter::BuildMultiPortion( SwTextFormatInfo &rInf,
return bRet;
}
+static bool IsIncompleteRuby(const SwMultiPortion& rHelpMulti)
+{
+ return rHelpMulti.IsRuby() && static_cast<const SwRubyPortion&>(rHelpMulti).GetRubyOffset() < TextFrameIndex(COMPLETE_STRING);
+}
+
// When a fieldportion at the end of line breaks and needs a following
// fieldportion in the next line, then the "restportion" of the formatinfo
// has to be set. Normally this happens during the formatting of the first
@@ -2465,19 +2470,19 @@ SwLinePortion* SwTextFormatter::MakeRestPortion( const SwLineLayout* pLine,
if (!pCreate)
return pRest;
- if( pRest || nMultiPos > nPosition || ( pHelpMulti->IsRuby() &&
- static_cast<const SwRubyPortion*>(pHelpMulti)->GetRubyOffset() < TextFrameIndex(COMPLETE_STRING)))
+ if( pRest || nMultiPos > nPosition || IsIncompleteRuby(*pHelpMulti))
{
SwMultiPortion* pTmp;
if( pHelpMulti->IsDouble() )
pTmp = new SwDoubleLinePortion( *pCreate, nMultiPos );
else if( pHelpMulti->IsBidi() )
pTmp = new SwBidiPortion( nMultiPos, pCreate->nLevel );
- else if( pHelpMulti->IsRuby() )
+ else if (IsIncompleteRuby(*pHelpMulti) && pCreate->pAttr)
{
+ TextFrameIndex nRubyOffset = static_cast<const SwRubyPortion*>(pHelpMulti)->GetRubyOffset();
pTmp = new SwRubyPortion( *pCreate, *GetInfo().GetFont(),
m_pFrame->GetDoc().getIDocumentSettingAccess(),
- nMultiPos, static_cast<const SwRubyPortion*>(pHelpMulti)->GetRubyOffset(),
+ nMultiPos, nRubyOffset,
GetInfo() );
}
else if( pHelpMulti->HasRotation() )
diff --git a/sw/source/core/text/txtfrm.cxx b/sw/source/core/text/txtfrm.cxx
index b8d450779ee7..676210c0c800 100644
--- a/sw/source/core/text/txtfrm.cxx
+++ b/sw/source/core/text/txtfrm.cxx
@@ -1373,6 +1373,9 @@ bool SwTextFrame::IsHiddenNow() const
return true;
}
+ if (SwContentFrame::IsHiddenNow())
+ return true;
+
bool bHiddenCharsHidePara(false);
bool bHiddenParaField(false);
if (m_pMergedPara)
@@ -1438,6 +1441,19 @@ bool SwTextFrame::IsHiddenNow() const
( bHiddenCharsHidePara &&
!pVsh->GetViewOptions()->IsShowHiddenChar() ) )
{
+ // in order to put the cursor in the body text, one paragraph must
+ // be visible - check this for the 1st body paragraph
+ if (IsInDocBody() && FindPrevCnt() == nullptr)
+ {
+ for (SwContentFrame const* pNext = FindNextCnt(true);
+ pNext != nullptr; pNext = pNext->FindNextCnt(true))
+ {
+ if (!pNext->IsHiddenNow())
+ return true;
+ }
+ SAL_INFO("sw.core", "unhiding one body paragraph");
+ return false;
+ }
return true;
}
}
@@ -1922,7 +1938,6 @@ void UpdateMergedParaForMove(sw::MergedPara & rMerged,
}
if (nLastEnd != rNode.Len()) // without nLen, string yet to be removed
{
- assert(rNode.Len() == 0 || nLastEnd < nSourceEnd);
if (nLastEnd < nSourceEnd)
{
deleted.emplace_back(std::max(nLastEnd, nSourceStart), nSourceEnd);
diff --git a/sw/source/core/text/widorp.cxx b/sw/source/core/text/widorp.cxx
index df0c779d6dbb..43afbd1e45e6 100644
--- a/sw/source/core/text/widorp.cxx
+++ b/sw/source/core/text/widorp.cxx
@@ -138,6 +138,8 @@ bool SwTextFrameBreak::IsInside( SwTextMargin const &rLine ) const
bFit = nDiff >= 0;
if (!bFit && rLine.MaybeHasHints() && m_pFrame->GetFollow()
+ // tdf#153319 RemoveFootnote only works if this frame doesn't
+ && !rLine.GetNext() // contain the footnote portion
// if using same footnote container as the follow, pointless to try?
&& m_pFrame->FindFootnoteBossFrame() != m_pFrame->GetFollow()->FindFootnoteBossFrame())
{
diff --git a/sw/source/core/text/xmldump.cxx b/sw/source/core/text/xmldump.cxx
index 3a93b1f25121..08f9b83bb57b 100644
--- a/sw/source/core/text/xmldump.cxx
+++ b/sw/source/core/text/xmldump.cxx
@@ -488,13 +488,6 @@ void SwFrame::dumpAsXmlAttributes( xmlTextWriterPtr writer ) const
}
xmlTextWriterWriteAttribute(writer, BAD_CAST("WritingMode"), BAD_CAST(aMode.getStr()));
}
- if (IsHeaderFrame() || IsFooterFrame())
- {
- const SwHeadFootFrame *pHeadFootFrame = static_cast<const SwHeadFootFrame*>(this);
- OUString aFormatName = pHeadFootFrame->GetFormat()->GetName();
- xmlTextWriterWriteFormatAttribute( writer, BAD_CAST( "fmtName" ), "%s", BAD_CAST(OUStringToOString(aFormatName, RTL_TEXTENCODING_UTF8).getStr()));
- xmlTextWriterWriteFormatAttribute( writer, BAD_CAST( "fmtPtr" ), "%p", pHeadFootFrame->GetFormat());
- }
}
void SwFrame::dumpChildrenAsXml( xmlTextWriterPtr writer ) const
@@ -549,7 +542,7 @@ void SwTextFrame::dumpAsXmlAttributes( xmlTextWriterPtr writer ) const
void SwSectionFrame::dumpAsXmlAttributes( xmlTextWriterPtr writer ) const
{
- SwFrame::dumpAsXmlAttributes( writer );
+ SwLayoutFrame::dumpAsXmlAttributes( writer );
if ( HasFollow() )
xmlTextWriterWriteFormatAttribute( writer, BAD_CAST( "follow" ), "%" SAL_PRIuUINT32, GetFollow()->GetFrameId() );
diff --git a/sw/source/core/txtnode/ndtxt.cxx b/sw/source/core/txtnode/ndtxt.cxx
index 3d721ebee00b..a1f17358efa5 100644
--- a/sw/source/core/txtnode/ndtxt.cxx
+++ b/sw/source/core/txtnode/ndtxt.cxx
@@ -64,6 +64,7 @@
#include <txtfrm.hxx>
#include <ftnfrm.hxx>
#include <ftnboss.hxx>
+#include <pagefrm.hxx>
#include <rootfrm.hxx>
#include <pagedesc.hxx>
#include <expfld.hxx>
@@ -456,9 +457,7 @@ SwTextNode *SwTextNode::SplitContentNode(const SwPosition & rPos,
{
// optimization for SplitNode: If a split is at the end of a node then
// move the frames from the current to the new one and create new ones
- // for the current one. As a result, no need for recreating the layout.
-
- LockModify(); // disable notifications
+ // for the current one.
// If fly frames are moved, they don't need to destroy their layout
// frames. Set a flag that is checked in SwTextFlyCnt::SetAnchor.
@@ -566,28 +565,6 @@ SwTextNode *SwTextNode::SplitContentNode(const SwPosition & rPos,
SetInCache( false );
}
- UnlockModify(); // enable notify again
-
- // If there is an accessible layout we must call modify even
- // with length zero, because we have to notify about the changed
- // text node.
- const SwRootFrame *pRootFrame;
- if ( (nTextLen != nSplitPos) ||
- ( (pRootFrame = pNode->GetDoc()->getIDocumentLayoutAccess().GetCurrentLayout()) != nullptr &&
- pRootFrame->IsAnyShellAccessible() ) )
- {
- // tell the frames that something was "deleted" at the end
- if( 1 == nTextLen - nSplitPos )
- {
- SwDelChr aHint( nSplitPos );
- pNode->NotifyClients( nullptr, &aHint );
- }
- else
- {
- SwDelText aHint( nSplitPos, nTextLen - nSplitPos );
- pNode->NotifyClients( nullptr, &aHint );
- }
- }
if ( HasHints() )
{
MoveTextAttr_To_AttrSet();
@@ -690,9 +667,9 @@ SwTextNode *SwTextNode::SplitContentNode(const SwPosition & rPos,
// Update the extents with new node; also inits merge flag,
// so the MakeFramesForAdjacentContentNode below respects it
pFrame->RegisterToNode(*pNode);
- if (pFrame->GetText().isEmpty())
+ if (nSplitPos == 0)
{
- // turns out it's empty - in this case, it was not
+ // in this case, it was not
// invalidated because Cut didn't sent it any hints,
// so we have to invalidate it here!
pFrame->Prepare(PREP_CLEAR, nullptr, false);
@@ -918,9 +895,18 @@ void CheckResetRedlineMergeFlag(SwTextNode & rNode, Recreate const eRecreateMerg
assert(rFirstNode.GetIndex() <= rNode.GetIndex());
pFrame->SetMergedPara(sw::CheckParaRedlineMerge(
*pFrame, rFirstNode, eMode));
- assert(pFrame->GetMergedPara());
- assert(pFrame->GetMergedPara()->listener.IsListeningTo(&rNode));
- assert(rNode.GetIndex() <= pFrame->GetMergedPara()->pLastNode->GetIndex());
+ // there is no merged para in case the deleted node had one but
+ // nothing was actually hidden
+ if (pFrame->GetMergedPara())
+ {
+ assert(pFrame->GetMergedPara()->listener.IsListeningTo(&rNode));
+ assert(rNode.GetIndex() <= pFrame->GetMergedPara()->pLastNode->GetIndex());
+ // tdf#135978 Join: recreate fly frames anchored to subsequent nodes
+ if (eRecreateMerged == sw::Recreate::ThisNode)
+ {
+ AddRemoveFlysAnchoredToFrameStartingAtNode(*pFrame, rNode, nullptr);
+ }
+ }
eMode = sw::FrameMode::New; // Existing is not idempotent!
}
}
@@ -1031,14 +1017,29 @@ SwContentNode *SwTextNode::JoinNext()
pDoc->CorrAbs( aIdx, SwPosition( *this ), nOldLen, true );
}
SwNode::Merge const eOldMergeFlag(pTextNode->GetRedlineMergeFlag());
+ auto eRecreateMerged(eOldMergeFlag == SwNode::Merge::First
+ ? sw::Recreate::ThisNode
+ : sw::Recreate::No);
+ if (eRecreateMerged == sw::Recreate::No)
+ {
+ // tdf#137318 if a delete is inside one node, flag is still None!
+ SwIterator<SwTextFrame, SwTextNode, sw::IteratorMode::UnwrapMulti> aIter(*pTextNode);
+ for (SwTextFrame* pFrame = aIter.First(); pFrame; pFrame = aIter.Next())
+ {
+ if (pFrame->GetMergedPara())
+ {
+ eRecreateMerged = sw::Recreate::ThisNode;
+ break;
+ }
+ }
+ }
+
rNds.Delete(aIdx);
SetWrong( pList, false );
SetGrammarCheck( pList3, false );
SetSmartTags( pList2, false );
InvalidateNumRule();
- CheckResetRedlineMergeFlag(*this, eOldMergeFlag == SwNode::Merge::First
- ? sw::Recreate::ThisNode
- : sw::Recreate::No);
+ CheckResetRedlineMergeFlag(*this, eRecreateMerged);
}
else {
OSL_FAIL( "No TextNode." );
@@ -1175,8 +1176,7 @@ void SwTextNode::NewAttrSet( SwAttrPool& rPool )
void SwTextNode::Update(
SwIndex const & rPos,
const sal_Int32 nChangeLen,
- const bool bNegative,
- const bool bDelete )
+ UpdateMode const eMode)
{
SetAutoCompleteWordDirty( true );
@@ -1185,7 +1185,7 @@ void SwTextNode::Update(
if ( HasHints() )
{
- if ( bNegative )
+ if (eMode & UpdateMode::Negative)
{
std::vector<SwTextInputField*> aTextInputFields;
@@ -1357,7 +1357,7 @@ void SwTextNode::Update(
bool bSortMarks = false;
SwIndexReg aTmpIdxReg;
- if ( !bNegative && !bDelete )
+ if (!(eMode & UpdateMode::Negative) && !(eMode & UpdateMode::Delete))
{
const SwRedlineTable& rTable = GetDoc()->getIDocumentRedlineAccess().GetRedlineTable();
for (SwRangeRedline* pRedl : rTable)
@@ -1392,6 +1392,7 @@ void SwTextNode::Update(
// Bookmarks must never grow to either side, when editing (directly)
// to the left or right (i#29942)! Exception: if the bookmark has
// 2 positions and start == end, then expand it (tdf#96479)
+ if (!(eMode & UpdateMode::Replace)) // Exception: Replace
{
bool bAtLeastOneBookmarkMoved = false;
bool bAtLeastOneExpandedBookmarkAtInsertionPosition = false;
@@ -1514,7 +1515,7 @@ void SwTextNode::Update(
}
// base class
- SwIndexReg::Update( rPos, nChangeLen, bNegative, bDelete );
+ SwIndexReg::Update(rPos, nChangeLen, eMode);
if (pCollector)
{
@@ -1533,10 +1534,21 @@ void SwTextNode::Update(
//Any drawing objects anchored into this text node may be sorted by their
//anchor position which may have changed here, so resort them
- SwContentFrame* pContentFrame = getLayoutFrame(GetDoc()->getIDocumentLayoutAccess().GetCurrentLayout());
- SwSortedObjs* pSortedObjs = pContentFrame ? pContentFrame->GetDrawObjs() : nullptr;
- if (pSortedObjs)
- pSortedObjs->UpdateAll();
+ SwIterator<SwTextFrame, SwTextNode, sw::IteratorMode::UnwrapMulti> iter(*this);
+ for (SwTextFrame* pFrame = iter.First(); pFrame; pFrame = iter.Next())
+ {
+ SwSortedObjs * pSortedObjs(pFrame->GetDrawObjs());
+ if (pSortedObjs)
+ {
+ pSortedObjs->UpdateAll();
+ }
+ // also sort the objs on the page frame
+ pSortedObjs = pFrame->FindPageFrame()->GetSortedObjs();
+ if (pSortedObjs) // doesn't exist yet if called for inserting as-char fly
+ {
+ pSortedObjs->UpdateAll();
+ }
+ }
// Update the paragraph signatures.
if (SwEditShell* pEditShell = GetDoc()->GetEditShell())
@@ -2311,7 +2323,7 @@ OUString SwTextNode::InsertText( const OUString & rStr, const SwIndex & rIdx,
SetIgnoreDontExpand( true );
}
- Update( rIdx, nLen ); // text content changed!
+ Update(rIdx, nLen, UpdateMode::Default); // text content changed!
if (nMode & SwInsertFlags::FORCEHINTEXPAND)
{
@@ -2447,7 +2459,7 @@ void SwTextNode::CutImpl( SwTextNode * const pDest, const SwIndex & rDestStart,
if (bUpdate)
{
// Update all SwIndex
- pDest->Update( rDestStart, nLen, false, false/*??? why was it true*/);
+ pDest->Update(rDestStart, nLen, UpdateMode::Default);
}
CHECK_SWPHINTS(pDest);
@@ -2640,7 +2652,7 @@ void SwTextNode::CutImpl( SwTextNode * const pDest, const SwIndex & rDestStart,
++nAttrCnt;
}
}
- Update( rStart, nLen, true, true );
+ Update(rStart, nLen, UpdateMode::Negative|UpdateMode::Delete);
for (SwTextAttr* pHt : aArr)
{
@@ -2651,7 +2663,7 @@ void SwTextNode::CutImpl( SwTextNode * const pDest, const SwIndex & rDestStart,
}
else
{
- Update( rStart, nLen, true, true );
+ Update(rStart, nLen, UpdateMode::Negative|UpdateMode::Delete);
}
// set after moving hints
@@ -2744,7 +2756,7 @@ void SwTextNode::EraseText(const SwIndex &rIdx, const sal_Int32 nCount,
TryDeleteSwpHints();
- Update( rIdx, nCnt, true );
+ Update(rIdx, nCnt, UpdateMode::Negative);
if( 1 == nCnt )
{
@@ -3094,11 +3106,11 @@ sal_uInt16 lcl_BoundListLevel(const int nActualLevel)
}
// -> #i29560#
-bool SwTextNode::HasNumber() const
+bool SwTextNode::HasNumber(SwRootFrame const*const pLayout) const
{
bool bResult = false;
- const SwNumRule* pRule = GetNum() ? GetNum()->GetNumRule() : nullptr;
+ const SwNumRule *const pRule = GetNum(pLayout) ? GetNum(pLayout)->GetNumRule() : nullptr;
if ( pRule )
{
const SwNumFormat& aFormat(pRule->Get(lcl_BoundListLevel(GetActualListLevel())));
@@ -3732,19 +3744,19 @@ void SwTextNode::ReplaceText( const SwIndex& rStart, const sal_Int32 nDelLen,
++const_cast<SwIndex&>(rStart);
m_Text = m_Text.replaceAt(rStart.GetIndex(), nLen - 1, "");
- Update( rStart, nLen - 1, true );
+ Update(rStart, nLen - 1, UpdateMode::Negative);
OUString aTmpText( sInserted.copy(1) );
m_Text = m_Text.replaceAt(rStart.GetIndex(), 0, aTmpText);
- Update( rStart, aTmpText.getLength() );
+ Update(rStart, aTmpText.getLength(), UpdateMode::Replace);
}
else
{
m_Text = m_Text.replaceAt(nStartPos, nLen, "");
- Update( rStart, nLen, true );
+ Update(rStart, nLen, UpdateMode::Negative);
m_Text = m_Text.replaceAt(nStartPos, 0, sInserted);
- Update( rStart, sInserted.getLength() );
+ Update(rStart, sInserted.getLength(), UpdateMode::Replace);
}
SetIgnoreDontExpand( bOldExpFlg );
diff --git a/sw/source/core/txtnode/thints.cxx b/sw/source/core/txtnode/thints.cxx
index 5b363f2d9119..784babd9a3a9 100644
--- a/sw/source/core/txtnode/thints.cxx
+++ b/sw/source/core/txtnode/thints.cxx
@@ -1378,7 +1378,7 @@ bool SwTextNode::InsertHint( SwTextAttr * const pAttr, const SetAttrMode nMode )
m_Text = m_Text.replaceAt(pAttr->GetStart(), 1, "");
// Update SwIndexes
SwIndex aTmpIdx( this, pAttr->GetStart() );
- Update( aTmpIdx, 1, true );
+ Update(aTmpIdx, 1, UpdateMode::Negative);
}
// do not record deletion of Format!
::sw::UndoGuard const ug(pDoc->GetIDocumentUndoRedo());
@@ -1409,7 +1409,7 @@ bool SwTextNode::InsertHint( SwTextAttr * const pAttr, const SetAttrMode nMode )
m_Text = m_Text.replaceAt(pAttr->GetStart(), 1, "");
// Update SwIndexes
SwIndex aTmpIdx( this, pAttr->GetStart() );
- Update( aTmpIdx, 1, true );
+ Update(aTmpIdx, 1, UpdateMode::Negative);
}
DestroyAttr( pAttr );
return false;
diff --git a/sw/source/core/txtnode/txtedt.cxx b/sw/source/core/txtnode/txtedt.cxx
index 5c599d78afab..00b6d9ab8d05 100644
--- a/sw/source/core/txtnode/txtedt.cxx
+++ b/sw/source/core/txtnode/txtedt.cxx
@@ -1947,7 +1947,7 @@ void SwTextNode::ReplaceTextOnly( sal_Int32 nPos, sal_Int32 nLen,
while( nI + nCnt < nTLen && nOff == pOffsets[ nI + nCnt ] )
++nCnt;
- Update( SwIndex( this, nMyOff ), nCnt );
+ Update(SwIndex( this, nMyOff ), nCnt, UpdateMode::Default);
nMyOff = nOff;
//nMyOff -= nCnt;
nI += nCnt - 1;
@@ -1955,14 +1955,14 @@ void SwTextNode::ReplaceTextOnly( sal_Int32 nPos, sal_Int32 nLen,
else if( nOff > nMyOff )
{
// something is deleted
- Update( SwIndex( this, nMyOff+1 ), nOff - nMyOff, true );
+ Update(SwIndex(this, nMyOff+1), nOff - nMyOff, UpdateMode::Negative);
nMyOff = nOff;
}
++nMyOff;
}
if( nMyOff < nLen )
// something is deleted at the end
- Update( SwIndex( this, nMyOff ), nLen - nMyOff, true );
+ Update(SwIndex(this, nMyOff), nLen - nMyOff, UpdateMode::Negative);
// notify the layout!
SwDelText aDelHint( nPos, nTLen );
diff --git a/sw/source/core/undo/rolbck.cxx b/sw/source/core/undo/rolbck.cxx
index 50ff24aa4d98..ce36b4a1c37c 100644
--- a/sw/source/core/undo/rolbck.cxx
+++ b/sw/source/core/undo/rolbck.cxx
@@ -599,44 +599,37 @@ void SwHistoryBookmark::SetInDoc( SwDoc* pDoc, bool )
std::unique_ptr<SwPaM> pPam;
::sw::mark::IMark* pMark = nullptr;
+ // now the situation is that m_bSavePos and m_bSaveOtherPos don't determine
+ // whether the mark was deleted
+ if (auto const iter = pMarkAccess->findMark(m_aName); iter != pMarkAccess->getAllMarksEnd())
+ {
+ pMark = *iter;
+ }
if(m_bSavePos)
{
SwContentNode* const pContentNd = rNds[m_nNode]->GetContentNode();
- OSL_ENSURE(pContentNd,
- "<SwHistoryBookmark::SetInDoc(..)>"
- " - wrong node for a mark");
-
- // #111660# don't crash when nNode1 doesn't point to content node.
- if(pContentNd)
- pPam.reset(new SwPaM(*pContentNd, m_nContent));
+ assert(pContentNd);
+ pPam.reset(new SwPaM(*pContentNd, m_nContent));
}
else
{
- pMark = *pMarkAccess->findMark(m_aName);
+ assert(pMark);
pPam.reset(new SwPaM(pMark->GetMarkPos()));
}
+ assert(pPam);
if(m_bSaveOtherPos)
{
SwContentNode* const pContentNd = rNds[m_nOtherNode]->GetContentNode();
- OSL_ENSURE(pContentNd,
- "<SwHistoryBookmark::SetInDoc(..)>"
- " - wrong node for a mark");
-
- if (pPam != nullptr && pContentNd)
- {
- pPam->SetMark();
- pPam->GetMark()->nNode = m_nOtherNode;
- pPam->GetMark()->nContent.Assign(pContentNd, m_nOtherContent);
- }
+ assert(pContentNd);
+ pPam->SetMark();
+ pPam->GetMark()->nNode = m_nOtherNode;
+ pPam->GetMark()->nContent.Assign(pContentNd, m_nOtherContent);
}
else if(m_bHadOtherPos)
{
- if(!pMark)
- pMark = *pMarkAccess->findMark(m_aName);
- OSL_ENSURE(pMark->IsExpanded(),
- "<SwHistoryBookmark::SetInDoc(..)>"
- " - missing pos on old mark");
+ assert(pMark);
+ assert(pMark->IsExpanded());
pPam->SetMark();
*pPam->GetMark() = pMark->GetOtherMarkPos();
}
diff --git a/sw/source/core/undo/undel.cxx b/sw/source/core/undo/undel.cxx
index 4e55a46196b4..dc24ce96e2fd 100644
--- a/sw/source/core/undo/undel.cxx
+++ b/sw/source/core/undo/undel.cxx
@@ -172,6 +172,7 @@ static void DelFullParaMoveFrames(SwDoc & rDoc, SwUndRng const& rRange,
// move the paragraph into this section and to record this in nSectDiff.
SwUndoDelete::SwUndoDelete(
SwPaM& rPam,
+ SwDeleteFlags const flags,
bool bFullPara,
bool bCalledByTableCpy )
: SwUndo(SwUndoId::DELETE, rPam.GetDoc()),
@@ -190,7 +191,9 @@ SwUndoDelete::SwUndoDelete(
m_bResetPgDesc( false ),
m_bResetPgBrk( false ),
m_bFromTableCopy( bCalledByTableCpy )
+ , m_DeleteFlags(flags)
{
+ assert(!m_bDelFullPara || !(m_DeleteFlags & SwDeleteFlags::ArtificialSelection));
m_bCacheComment = false;
@@ -226,7 +229,9 @@ SwUndoDelete::SwUndoDelete(
}
else
{
- DelContentIndex( *rPam.GetMark(), *rPam.GetPoint() );
+ DelContentIndex(*rPam.GetMark(), *rPam.GetPoint(),
+ DelContentType::AllMask
+ | ((m_DeleteFlags & SwDeleteFlags::ArtificialSelection) ? DelContentType::Replace : DelContentType(0)));
::sw::UndoGuard const undoGuard(pDoc->GetIDocumentUndoRedo());
if (m_nEndNode - m_nSttNode > 1) // check for fully selected nodes
{
@@ -542,6 +547,7 @@ bool SwUndoDelete::CanGrouping( SwDoc* pDoc, const SwPaM& rDelPam )
if( m_bGroup && !m_bBackSp ) return false;
m_bBackSp = true;
}
+ // note: compare m_nSttContent here because the text isn't there any more!
else if( pStt->nContent == m_nSttContent )
{
if( m_bGroup && m_bBackSp ) return false;
@@ -570,6 +576,30 @@ bool SwUndoDelete::CanGrouping( SwDoc* pDoc, const SwPaM& rDelPam )
return false;
}
+ if ((m_DeleteFlags & SwDeleteFlags::ArtificialSelection) && m_pHistory)
+ {
+ IDocumentMarkAccess const& rIDMA(*pDoc->getIDocumentMarkAccess());
+ for (auto i = m_pHistory->Count(); 0 < i; )
+ {
+ --i;
+ SwHistoryHint const*const pHistory((*m_pHistory)[i]);
+ if (pHistory->Which() == HSTRY_BOOKMARK)
+ {
+ SwHistoryBookmark const*const pHistoryBM(
+ static_cast<SwHistoryBookmark const*>(pHistory));
+ auto const ppMark(rIDMA.findMark(pHistoryBM->GetName()));
+ if (ppMark != rIDMA.getAllMarksEnd()
+ && (m_bBackSp
+ ? ((**ppMark).GetMarkPos() == *pStt)
+ : ((**ppMark).IsExpanded()
+ && (**ppMark).GetOtherMarkPos() == *pEnd)))
+ { // prevent grouping that would delete this mark on Redo()
+ return false;
+ }
+ }
+ }
+ }
+
{
SwRedlineSaveDatas aTmpSav;
const bool bSaved = FillSaveData( rDelPam, aTmpSav, false );
@@ -1135,7 +1165,10 @@ void SwUndoDelete::UndoImpl(::sw::UndoRedoContext & rContext)
// don't include end node in the range: it may have been merged already
// by the start node, or it may be merged by one of the moved nodes,
// but if it isn't merged, its current frame(s) should be good...
- SwNodeIndex const end(rDoc.GetNodes(), m_bDelFullPara ? delFullParaEndNode : m_nEndNode);
+ SwNodeIndex const end(rDoc.GetNodes(), m_bDelFullPara
+ ? delFullParaEndNode
+ // tdf#147310 SwDoc::DeleteRowCol() may delete whole table - end must be node following table!
+ : (m_nEndNode + (rDoc.GetNodes()[m_nSttNode]->IsTableNode() && rDoc.GetNodes()[m_nEndNode]->IsEndNode() ? 1 : 0)));
::MakeFrames(&rDoc, start, end);
}
@@ -1197,7 +1230,11 @@ void SwUndoDelete::RedoImpl(::sw::UndoRedoContext & rContext)
DelBookmarks(rPam.GetMark()->nNode, rPam.GetPoint()->nNode);
}
else
- DelContentIndex( *rPam.GetMark(), *rPam.GetPoint() );
+ {
+ DelContentIndex(*rPam.GetMark(), *rPam.GetPoint(),
+ DelContentType::AllMask
+ | ((m_DeleteFlags & SwDeleteFlags::ArtificialSelection) ? DelContentType::Replace : DelContentType(0)));
+ }
m_nSetPos = m_pHistory ? m_pHistory->Count() : 0;
m_pHistory->Move( m_nSetPos, &aHstr );
@@ -1213,7 +1250,11 @@ void SwUndoDelete::RedoImpl(::sw::UndoRedoContext & rContext)
DelBookmarks( rPam.GetMark()->nNode, rPam.GetPoint()->nNode );
}
else
- DelContentIndex( *rPam.GetMark(), *rPam.GetPoint() );
+ {
+ DelContentIndex(*rPam.GetMark(), *rPam.GetPoint(),
+ DelContentType::AllMask
+ | ((m_DeleteFlags & SwDeleteFlags::ArtificialSelection) ? DelContentType::Replace : DelContentType(0)));
+ }
m_nSetPos = m_pHistory ? m_pHistory->Count() : 0;
}
@@ -1288,7 +1329,7 @@ void SwUndoDelete::RedoImpl(::sw::UndoRedoContext & rContext)
rDoc.getIDocumentContentOperations().DelFullPara( rPam );
}
else
- rDoc.getIDocumentContentOperations().DeleteAndJoin( rPam );
+ rDoc.getIDocumentContentOperations().DeleteAndJoin(rPam, m_DeleteFlags);
}
void SwUndoDelete::RepeatImpl(::sw::RepeatContext & rContext)
diff --git a/sw/source/core/undo/undobj.cxx b/sw/source/core/undo/undobj.cxx
index 3fe7f107f052..8ff858013b72 100644
--- a/sw/source/core/undo/undobj.cxx
+++ b/sw/source/core/undo/undobj.cxx
@@ -798,30 +798,26 @@ void SwUndoSaveContent::MoveFromUndoNds( SwDoc& rDoc, sal_uLong nNodeIdx,
}
}
-// These two methods move the Point of Pam backwards/forwards. With that, one
-// can span an area for a Undo/Redo. (The Point is then positioned in front of
-// the area to manipulate!)
-// The flag indicates if there is still content in front of Point.
-bool SwUndoSaveContent::MovePtBackward( SwPaM& rPam )
+// These two methods save and restore the Point of PaM.
+// If the point cannot be moved, a "backup" is created on the previous node.
+// Either way, returned, inserting at its original position will not move it.
+::std::optional<SwNodeIndex> SwUndoSaveContent::MovePtBackward(SwPaM & rPam)
{
rPam.SetMark();
if( rPam.Move( fnMoveBackward ))
- return true;
+ return {};
- // If there is no content onwards, set Point simply to the previous position
- // (Node and Content, so that Content will be detached!)
- --rPam.GetPoint()->nNode;
- rPam.GetPoint()->nContent.Assign( nullptr, 0 );
- return false;
+ return { SwNodeIndex(rPam.GetPoint()->nNode, -1) };
}
-void SwUndoSaveContent::MovePtForward( SwPaM& rPam, bool bMvBkwrd )
+void SwUndoSaveContent::MovePtForward(SwPaM& rPam, ::std::optional<SwNodeIndex> && oMvBkwrd)
{
// Was there content before this position?
- if( bMvBkwrd )
+ if (!oMvBkwrd)
rPam.Move( fnMoveForward );
else
{
+ *rPam.GetPoint() = SwPosition(*oMvBkwrd);
++rPam.GetPoint()->nNode;
SwContentNode* pCNd = rPam.GetContentNode();
if( pCNd )
@@ -981,10 +977,14 @@ void SwUndoSaveContent::DelContentIndex( const SwPosition& rMark,
// Moving the anchor?
else if (!((DelContentType::CheckNoCntnt|DelContentType::ExcludeFlyAtStartEnd)
& nDelContentType) &&
- // at least for calls from SwUndoDelete,
- // this should work - other Undos don't
- // remember the order of the cursor
- (rPoint.nNode.GetIndex() == pAPos->nNode.GetIndex())
+ // for SwUndoDelete: rPoint is the node that
+ // will be Joined - so anchor should be moved
+ // off it - but UndoImpl() split will insert
+ // new node *before* existing one so a no-op
+ // may need to be done here to add it to
+ // history for Undo.
+ (rPoint.nNode.GetIndex() == pAPos->nNode.GetIndex()
+ || pStt->nNode.GetIndex() == pAPos->nNode.GetIndex())
// Do not try to move the anchor to a table!
&& rMark.nNode.GetNode().IsTextNode())
{
@@ -1061,6 +1061,7 @@ void SwUndoSaveContent::DelContentIndex( const SwPosition& rMark,
// #i81002#
bool bSavePos = false;
bool bSaveOtherPos = false;
+ bool bDelete = false;
const ::sw::mark::IMark *const pBkmk = pMarkAccess->getAllMarksBegin()[n];
auto const type(IDocumentMarkAccess::GetType(*pBkmk));
@@ -1077,6 +1078,7 @@ void SwUndoSaveContent::DelContentIndex( const SwPosition& rMark,
{
bSaveOtherPos = true;
}
+ bDelete = bSavePos && bSaveOtherPos;
}
else
{
@@ -1108,13 +1110,26 @@ void SwUndoSaveContent::DelContentIndex( const SwPosition& rMark,
&& ( type == IDocumentMarkAccess::MarkType::TEXT_FIELDMARK
|| type == IDocumentMarkAccess::MarkType::CHECKBOX_FIELDMARK
|| type == IDocumentMarkAccess::MarkType::DROPDOWN_FIELDMARK
- || type == IDocumentMarkAccess::MarkType::DATE_FIELDMARK)))
+ || type == IDocumentMarkAccess::MarkType::DATE_FIELDMARK))
+ || (bMaybe
+ && !(nDelContentType & DelContentType::Replace)
+ && type == IDocumentMarkAccess::MarkType::BOOKMARK
+ && pStt->nContent == 0 // entire paragraph deleted?
+ && pEnd->nContent == pEnd->nNode.GetNode().GetTextNode()->Len()))
{
if( bMaybe )
bSavePos = true;
- bSaveOtherPos = true;
+ bDelete = true;
+ }
+ if (bDelete || pBkmk->GetOtherMarkPos() == *pEnd)
+ {
+ bSaveOtherPos = true; // tdf#148389 always undo if at end
}
}
+ if (!bSavePos && bMaybe && pBkmk->IsExpanded() && *pStt == pBkmk->GetMarkPos())
+ {
+ bSavePos = true; // tdf#148389 always undo if at start
+ }
if ( !bSavePos && !bSaveOtherPos
&& dynamic_cast< const ::sw::mark::CrossRefBookmark* >(pBkmk) )
@@ -1152,6 +1167,7 @@ void SwUndoSaveContent::DelContentIndex( const SwPosition& rMark,
{
bSavePos = true;
bSaveOtherPos = pBkmk->IsExpanded(); //tdf#90138, only save the other pos if there is one
+ bDelete = true;
}
}
}
@@ -1165,8 +1181,7 @@ void SwUndoSaveContent::DelContentIndex( const SwPosition& rMark,
m_pHistory->Add( *pBkmk, bSavePos, bSaveOtherPos );
}
if ( bSavePos
- && ( bSaveOtherPos
- || !pBkmk->IsExpanded() ) )
+ && (bDelete || !pBkmk->IsExpanded()))
{
pMarkAccess->deleteMark(pMarkAccess->getAllMarksBegin()+n, false);
n--;
diff --git a/sw/source/core/undo/unins.cxx b/sw/source/core/undo/unins.cxx
index 85b20fae911b..ff3f4777329c 100644
--- a/sw/source/core/undo/unins.cxx
+++ b/sw/source/core/undo/unins.cxx
@@ -328,7 +328,7 @@ void SwUndoInsert::RedoImpl(::sw::UndoRedoContext & rContext)
if( nLen )
{
- const bool bMvBkwrd = MovePtBackward( *pPam );
+ ::std::optional<SwNodeIndex> oMvBkwrd = MovePtBackward(*pPam);
if (maText)
{
@@ -355,7 +355,7 @@ void SwUndoInsert::RedoImpl(::sw::UndoRedoContext & rContext)
nNode = pPam->GetMark()->nNode.GetIndex();
nContent = pPam->GetMark()->nContent.GetIndex();
- MovePtForward( *pPam, bMvBkwrd );
+ MovePtForward(*pPam, ::std::move(oMvBkwrd));
pPam->Exchange();
if( pRedlData && IDocumentRedlineAccess::IsRedlineOn( GetRedlineFlags() ))
{
@@ -689,7 +689,8 @@ void SwUndoReplace::Impl::UndoImpl(::sw::UndoRedoContext & rContext)
if( m_bSplitNext )
{
- SwPosition aPos(*pNd, pNd->Len());
+ assert(m_nSttCnt + m_sOld.getLength() <= pNd->Len());
+ SwPosition aPos(*pNd, m_nSttCnt + m_sOld.getLength());
pDoc->getIDocumentContentOperations().SplitNode( aPos, false );
pNd->RestoreMetadata(m_pMetadataUndoEnd);
pNd = pDoc->GetNodes()[ m_nSttNd - m_nOffset ]->GetTextNode();
@@ -723,7 +724,7 @@ void SwUndoReplace::Impl::UndoImpl(::sw::UndoRedoContext & rContext)
}
rPam.GetPoint()->nNode = m_nSttNd;
- rPam.GetPoint()->nContent = m_nSttCnt;
+ rPam.GetPoint()->nContent.Assign(rPam.GetPoint()->nNode.GetNode().GetTextNode(), m_nSttCnt);
}
void SwUndoReplace::Impl::RedoImpl(::sw::UndoRedoContext & rContext)
@@ -917,7 +918,7 @@ void SwUndoInsertLabel::UndoImpl(::sw::UndoRedoContext & rContext)
aPam.GetPoint()->nNode = NODE.nNode;
aPam.SetMark();
aPam.GetPoint()->nNode = NODE.nNode + 1;
- NODE.pUndoInsNd = new SwUndoDelete( aPam, true );
+ NODE.pUndoInsNd = new SwUndoDelete(aPam, SwDeleteFlags::Default, true);
}
}
diff --git a/sw/source/core/undo/unredln.cxx b/sw/source/core/undo/unredln.cxx
index 8aae3c055b63..c66d8eed133e 100644
--- a/sw/source/core/undo/unredln.cxx
+++ b/sw/source/core/undo/unredln.cxx
@@ -26,6 +26,8 @@
#include <pam.hxx>
#include <ndtxt.hxx>
#include <txtfrm.hxx>
+#include <mvsave.hxx>
+#include <rolbck.hxx>
#include <UndoCore.hxx>
#include <UndoDelete.hxx>
#include <strings.hrc>
@@ -153,7 +155,8 @@ void SwUndoRedline::RedoRedlineImpl(SwDoc & rDoc, SwPaM & rPam)
rDoc.getIDocumentRedlineAccess().DeleteRedline(rPam, true, RedlineType::Any);
}
-SwUndoRedlineDelete::SwUndoRedlineDelete( const SwPaM& rRange, SwUndoId nUsrId )
+SwUndoRedlineDelete::SwUndoRedlineDelete(
+ const SwPaM& rRange, SwUndoId const nUsrId, SwDeleteFlags const flags)
: SwUndoRedline( nUsrId != SwUndoId::EMPTY ? nUsrId : SwUndoId::DELETE, rRange ),
bCanGroup( false ), bIsDelim( false ), bIsBackspace( false )
{
@@ -174,6 +177,24 @@ SwUndoRedlineDelete::SwUndoRedlineDelete( const SwPaM& rRange, SwUndoId nUsrId )
}
m_bCacheComment = false;
+ if (flags & SwDeleteFlags::ArtificialSelection)
+ {
+ InitHistory(rRange);
+ }
+}
+
+void SwUndoRedlineDelete::InitHistory(SwPaM const& rRedline)
+{
+ m_pHistory.reset(new SwHistory);
+ // try to rely on direction of rPam here so it works for
+ // backspacing/deleting consecutive characters
+ SaveFlyArr flys;
+ SaveFlyInRange(rRedline, *rRedline.GetMark(), flys, false, m_pHistory.get());
+ RestFlyInRange(flys, *rRedline.GetPoint(), &rRedline.GetPoint()->nNode, true);
+ if (m_pHistory->Count())
+ {
+ bCanGroup = false; // how to group history?
+ }
}
// bit of a hack, replace everything...
@@ -197,12 +218,21 @@ void SwUndoRedlineDelete::SetRedlineText(const OUString & rText)
void SwUndoRedlineDelete::UndoRedlineImpl(SwDoc & rDoc, SwPaM & rPam)
{
rDoc.getIDocumentRedlineAccess().DeleteRedline(rPam, true, RedlineType::Any);
+ if (m_pHistory)
+ {
+ m_pHistory->TmpRollback(&rDoc, 0);
+ }
}
void SwUndoRedlineDelete::RedoRedlineImpl(SwDoc & rDoc, SwPaM & rPam)
{
if (rPam.GetPoint() != rPam.GetMark())
{
+ if (m_pHistory) // if it was created before, it must be recreated now
+ {
+ rPam.Normalize(bIsBackspace); // to check the correct edge
+ InitHistory(rPam);
+ }
rDoc.getIDocumentRedlineAccess().AppendRedline( new SwRangeRedline(*mpRedlData, rPam), false );
}
sw::UpdateFramesForAddDeleteRedline(rDoc, rPam);
@@ -212,7 +242,7 @@ bool SwUndoRedlineDelete::CanGrouping( const SwUndoRedlineDelete& rNext )
{
bool bRet = false;
if( SwUndoId::DELETE == mnUserId && mnUserId == rNext.mnUserId &&
- bCanGroup == rNext.bCanGroup &&
+ bCanGroup && rNext.bCanGroup &&
bIsDelim == rNext.bIsDelim &&
bIsBackspace == rNext.bIsBackspace &&
m_nSttNode == m_nEndNode &&
@@ -449,7 +479,7 @@ void SwUndoCompDoc::UndoImpl(::sw::UndoRedoContext & rContext)
bool bJoinText, bJoinPrev;
sw_GetJoinFlags(rPam, bJoinText, bJoinPrev);
- pUnDel.reset( new SwUndoDelete(rPam, false) );
+ pUnDel.reset( new SwUndoDelete(rPam, SwDeleteFlags::Default, false) );
if( bJoinText )
sw_JoinText(rPam, bJoinPrev);
@@ -466,7 +496,7 @@ void SwUndoCompDoc::UndoImpl(::sw::UndoRedoContext & rContext)
++rPam.GetPoint()->nNode;
rPam.GetBound().nContent.Assign( nullptr, 0 );
rPam.GetBound( false ).nContent.Assign( nullptr, 0 );
- pUnDel2.reset( new SwUndoDelete(rPam, true) );
+ pUnDel2.reset( new SwUndoDelete(rPam, SwDeleteFlags::Default, true) );
}
}
rPam.DeleteMark();
diff --git a/sw/source/core/undo/untbl.cxx b/sw/source/core/undo/untbl.cxx
index 9d1675c0f304..a07d951dc288 100644
--- a/sw/source/core/undo/untbl.cxx
+++ b/sw/source/core/undo/untbl.cxx
@@ -277,6 +277,8 @@ void SwUndoInsTable::UndoImpl(::sw::UndoRedoContext & rContext)
if( SfxItemState::SET == pTableFormat->GetItemState( RES_BREAK,
false, &pItem ) )
pNextNd->SetAttr( *pItem );
+
+ ::sw::NotifyTableCollapsedParagraph(pNextNd, nullptr);
}
m_sTableName = pTableNd->GetTable().GetFrameFormat()->GetName();
@@ -2420,11 +2422,11 @@ void SwUndoTableCpyTable::UndoImpl(::sw::UndoRedoContext & rContext)
else
*aPam.GetPoint() = SwPosition( aTmpIdx );
}
- pUndo = std::make_unique<SwUndoDelete>( aPam, bDeleteCompleteParagraph, true );
+ pUndo = std::make_unique<SwUndoDelete>(aPam, SwDeleteFlags::Default, bDeleteCompleteParagraph, true);
}
else
{
- pUndo = std::make_unique<SwUndoDelete>( aPam, true );
+ pUndo = std::make_unique<SwUndoDelete>(aPam, SwDeleteFlags::Default, true);
if( pEntry->pUndo )
{
pEntry->pUndo->UndoImpl(rContext);
@@ -2501,7 +2503,9 @@ void SwUndoTableCpyTable::RedoImpl(::sw::UndoRedoContext & rContext)
// b62341295: Redline for copying tables - Start.
rDoc.GetNodes().MakeTextNode( aInsIdx, rDoc.GetDfltTextFormatColl() );
SwPaM aPam( aInsIdx.GetNode(), *rBox.GetSttNd()->EndOfSectionNode());
- std::unique_ptr<SwUndo> pUndo = IDocumentRedlineAccess::IsRedlineOn( GetRedlineFlags() ) ? nullptr : std::make_unique<SwUndoDelete>( aPam, true );
+ std::unique_ptr<SwUndo> pUndo(IDocumentRedlineAccess::IsRedlineOn(GetRedlineFlags())
+ ? nullptr
+ : std::make_unique<SwUndoDelete>(aPam, SwDeleteFlags::Default, true));
if( pEntry->pUndo )
{
pEntry->pUndo->UndoImpl(rContext);
@@ -2513,7 +2517,7 @@ void SwUndoTableCpyTable::RedoImpl(::sw::UndoRedoContext & rContext)
// Otherwise aInsIdx has been moved during the Undo operation
if( pEntry->bJoin )
{
- SwPaM const& rLastPam =
+ SwPaM& rLastPam =
rContext.GetCursorSupplier().GetCurrentShellCursor();
pUndo = PrepareRedline( &rDoc, rBox, *rLastPam.GetPoint(),
pEntry->bJoin, true );
@@ -2582,7 +2586,7 @@ void SwUndoTableCpyTable::AddBoxBefore( const SwTableBox& rBox, bool bDelContent
SwPaM aPam( aInsIdx.GetNode(), *rBox.GetSttNd()->EndOfSectionNode() );
if( !pDoc->getIDocumentRedlineAccess().IsRedlineOn() )
- pEntry->pUndo = std::make_unique<SwUndoDelete>( aPam, true );
+ pEntry->pUndo = std::make_unique<SwUndoDelete>(aPam, SwDeleteFlags::Default, true);
}
pEntry->pBoxNumAttr = std::make_unique<SfxItemSet>(
@@ -2628,7 +2632,7 @@ void SwUndoTableCpyTable::AddBoxAfter( const SwTableBox& rBox, const SwNodeIndex
// rJoin is true if Redo() is calling and the content has already been merged
std::unique_ptr<SwUndo> SwUndoTableCpyTable::PrepareRedline( SwDoc* pDoc, const SwTableBox& rBox,
- const SwPosition& rPos, bool& rJoin, bool bRedo )
+ SwPosition& rPos, bool& rJoin, bool bRedo )
{
std::unique_ptr<SwUndo> pUndo;
// b62341295: Redline for copying tables
@@ -2652,6 +2656,10 @@ std::unique_ptr<SwUndo> SwUndoTableCpyTable::PrepareRedline( SwDoc* pDoc, const
if( !bRedo && rPos.nNode.GetNode().GetTextNode() )
{ // Try to merge, if not called by Redo()
rJoin = true;
+
+ // Park this somewhere else so nothing points to the to-be-deleted node.
+ rPos.nContent.Assign(pText, 0);
+
pText->JoinNext();
}
}
@@ -2682,7 +2690,7 @@ std::unique_ptr<SwUndo> SwUndoTableCpyTable::PrepareRedline( SwDoc* pDoc, const
aCellEnd = SwPosition(
SwNodeIndex( *rBox.GetSttNd()->EndOfSectionNode() ));
SwPaM aTmpPam( aDeleteStart, aCellEnd );
- pUndo = std::make_unique<SwUndoDelete>( aTmpPam, true );
+ pUndo = std::make_unique<SwUndoDelete>(aTmpPam, SwDeleteFlags::Default, true);
}
SwPosition aCellStart( SwNodeIndex( *rBox.GetSttNd(), 2 ) );
pText = aCellStart.nNode.GetNode().GetTextNode();
@@ -2754,7 +2762,7 @@ void SwUndoCpyTable::UndoImpl(::sw::UndoRedoContext & rContext)
}
SwPaM aPam( *pTNd, *pTNd->EndOfSectionNode(), 0 , 1 );
- pDel.reset( new SwUndoDelete( aPam, true ) );
+ pDel.reset( new SwUndoDelete( aPam, SwDeleteFlags::Default, true ) );
}
void SwUndoCpyTable::RedoImpl(::sw::UndoRedoContext & rContext)
diff --git a/sw/source/core/undo/untblk.cxx b/sw/source/core/undo/untblk.cxx
index 28f41f817061..8258498b9181 100644
--- a/sw/source/core/undo/untblk.cxx
+++ b/sw/source/core/undo/untblk.cxx
@@ -125,11 +125,11 @@ void SwUndoInserts::SetInsertRange( const SwPaM& rPam, bool bScanFlys,
m_nSttNode = pTmpPos->nNode.GetIndex();
m_nSttContent = pTmpPos->nContent.GetIndex();
+ m_nDeleteTextNodes = nDeleteTextNodes;
if (m_nDeleteTextNodes == 0) // if a table selection is added...
{
++m_nSttNode; // ... then the CopyPam is not fully correct
}
- m_nDeleteTextNodes = nDeleteTextNodes;
}
// Fill m_FlyUndos with flys anchored to first and last paragraphs
@@ -357,21 +357,25 @@ void SwUndoInserts::RedoImpl(::sw::UndoRedoContext & rContext)
auto const pFlysAtInsPos(sw::GetFlysAnchoredAt(*pDoc,
rPam.GetPoint()->nNode.GetIndex()));
- const bool bMvBkwrd = MovePtBackward(rPam);
+ ::std::optional<SwNodeIndex> oMvBkwrd = MovePtBackward(rPam);
+ bool const isMoveFlyAnchors(!oMvBkwrd // equivalent to bCanMoveBack
+ || m_pUndoNodeIndex->GetNode().IsTextNode()
+ || (oMvBkwrd->GetNode().IsStartNode()
+ && m_pUndoNodeIndex->GetNode().IsSectionNode()));
// re-insert content again (first detach m_pUndoNodeIndex!)
sal_uLong const nMvNd = m_pUndoNodeIndex->GetIndex();
m_pUndoNodeIndex.reset();
MoveFromUndoNds(*pDoc, nMvNd, *rPam.GetMark());
- if (m_nDeleteTextNodes != 0)
+ if (m_nDeleteTextNodes != 0 || oMvBkwrd)
{
- MovePtForward(rPam, bMvBkwrd);
+ MovePtForward(rPam, ::std::move(oMvBkwrd));
}
rPam.Exchange();
// at-char anchors post SplitNode are on index 0 of 2nd node and will
// remain there - move them back to the start (end would also work?)
- if (pFlysAtInsPos)
+ if (pFlysAtInsPos && isMoveFlyAnchors)
{
for (SwFrameFormat * pFly : *pFlysAtInsPos)
{
diff --git a/sw/source/core/unocore/unobkm.cxx b/sw/source/core/unocore/unobkm.cxx
index ddeaccf1966b..a4d719016f68 100644
--- a/sw/source/core/unocore/unobkm.cxx
+++ b/sw/source/core/unocore/unobkm.cxx
@@ -410,6 +410,8 @@ void SAL_CALL
SwXBookmark::setPropertyValue(const OUString& PropertyName,
const uno::Any& rValue)
{
+ SolarMutexGuard g;
+
if (PropertyName == UNO_NAME_BOOKMARK_HIDDEN)
{
bool bNewValue = false;
diff --git a/sw/source/core/unocore/unoframe.cxx b/sw/source/core/unocore/unoframe.cxx
index e2e5c9411715..e5ced2a27fd0 100644
--- a/sw/source/core/unocore/unoframe.cxx
+++ b/sw/source/core/unocore/unoframe.cxx
@@ -2771,8 +2771,13 @@ void SwXFrame::attachToRange(uno::Reference<text::XTextRange> const& xTextRange,
aFrameSet.Put( SwFormatAnchor( RndStdIds::FLY_AT_PAGE, 1 ));
}
- aPam.DeleteMark(); // mark position node will be deleted!
- aIntPam.DeleteMark(); // mark position node will be deleted!
+ // park these no longer needed PaMs somewhere safe so MakeFlyAndMove
+ // can delete what it likes without any assert these are pointing to
+ // that content
+ aPam.DeleteMark();
+ aIntPam.DeleteMark();
+ *aPam.GetPoint() = *aIntPam.GetPoint() = SwPosition(pDoc->GetNodes());
+
pFormat = pDoc->MakeFlyAndMove( *pCopySource, aFrameSet,
nullptr,
pParentFrameFormat );
diff --git a/sw/source/core/unocore/unoobj.cxx b/sw/source/core/unocore/unoobj.cxx
index 1f8b4d02edfd..e3ac0563be12 100644
--- a/sw/source/core/unocore/unoobj.cxx
+++ b/sw/source/core/unocore/unoobj.cxx
@@ -765,7 +765,7 @@ SwXTextCursor::~SwXTextCursor()
}
void SwXTextCursor::DeleteAndInsert(const OUString& rText,
- const bool bForceExpandHints)
+ ::sw::DeleteAndInsertMode const eMode)
{
auto pUnoCursor = static_cast<SwCursor*>(m_pImpl->m_pUnoCursor.get());
if (pUnoCursor)
@@ -780,13 +780,15 @@ void SwXTextCursor::DeleteAndInsert(const OUString& rText,
{
if (pCurrent->HasMark())
{
- pDoc->getIDocumentContentOperations().DeleteAndJoin(*pCurrent);
+ pDoc->getIDocumentContentOperations().DeleteAndJoin(*pCurrent,
+ // is it "delete" or "replace"?
+ (nTextLen != 0 || eMode & ::sw::DeleteAndInsertMode::ForceReplace) ? SwDeleteFlags::ArtificialSelection : SwDeleteFlags::Default);
}
if(nTextLen)
{
const bool bSuccess(
SwUnoCursorHelper::DocInsertStringSplitCR(
- *pDoc, *pCurrent, rText, bForceExpandHints ) );
+ *pDoc, *pCurrent, rText, bool(eMode & ::sw::DeleteAndInsertMode::ForceExpandHints)) );
OSL_ENSURE( bSuccess, "Doc->Insert(Str) failed." );
SwUnoCursorHelper::SelectPam(*pUnoCursor, true);
@@ -1754,7 +1756,7 @@ SwXTextCursor::setString(const OUString& aString)
const bool bForceExpandHints( (CursorType::Meta == m_pImpl->m_eType)
&& dynamic_cast<SwXMeta*>(m_pImpl->m_xParentText.get())
->CheckForOwnMemberMeta(*GetPaM(), true) );
- DeleteAndInsert(aString, bForceExpandHints);
+ DeleteAndInsert(aString, bForceExpandHints ? ::sw::DeleteAndInsertMode::ForceExpandHints : ::sw::DeleteAndInsertMode::Default);
}
uno::Any SwUnoCursorHelper::GetPropertyValue(
diff --git a/sw/source/core/unocore/unoobj2.cxx b/sw/source/core/unocore/unoobj2.cxx
index 502e2e74c2dd..53c881a8400a 100644
--- a/sw/source/core/unocore/unoobj2.cxx
+++ b/sw/source/core/unocore/unoobj2.cxx
@@ -790,8 +790,22 @@ void SwXTextRange::SetPositions(const SwPaM& rPam)
m_pImpl->SetMark(*pMark);
}
+#if 0
+static void DeleteTable(SwDoc & rDoc, SwTable& rTable)
+{
+ SwSelBoxes aSelBoxes;
+ for (auto& rBox : rTable.GetTabSortBoxes())
+ {
+ aSelBoxes.insert(rBox);
+ }
+ // note: if the table is the content in the section, this will create
+ // a new text node - that's desirable here
+ rDoc.DeleteRowCol(aSelBoxes, SwDoc::RowColMode::DeleteProtected);
+}
+#endif
+
void SwXTextRange::DeleteAndInsert(
- const OUString& rText, const bool bForceExpandHints)
+ const OUString& rText, ::sw::DeleteAndInsertMode const eMode)
{
if (RANGE_IS_TABLE == m_pImpl->m_eRangePosition)
{
@@ -807,13 +821,14 @@ void SwXTextRange::DeleteAndInsert(
m_pImpl->m_rDoc.GetIDocumentUndoRedo().StartUndo(SwUndoId::INSERT, nullptr);
if (aCursor.HasMark())
{
- m_pImpl->m_rDoc.getIDocumentContentOperations().DeleteAndJoin(aCursor);
+ m_pImpl->m_rDoc.getIDocumentContentOperations().DeleteAndJoin(aCursor,
+ (!rText.isEmpty() || eMode & ::sw::DeleteAndInsertMode::ForceReplace) ? SwDeleteFlags::ArtificialSelection : SwDeleteFlags::Default);
}
if (!rText.isEmpty())
{
SwUnoCursorHelper::DocInsertStringSplitCR(
- m_pImpl->m_rDoc, aCursor, rText, bForceExpandHints);
+ m_pImpl->m_rDoc, aCursor, rText, bool(eMode & ::sw::DeleteAndInsertMode::ForceExpandHints));
SwUnoCursorHelper::SelectPam(aCursor, true);
aCursor.Left(rText.getLength());
@@ -961,7 +976,7 @@ void SAL_CALL SwXTextRange::setString(const OUString& rString)
{
SolarMutexGuard aGuard;
- DeleteAndInsert(rString, false);
+ DeleteAndInsert(rString, ::sw::DeleteAndInsertMode::Default);
}
bool SwXTextRange::GetPositions(SwPaM& rToFill) const
diff --git a/sw/source/core/unocore/unosett.cxx b/sw/source/core/unocore/unosett.cxx
index 1f68135f7a4a..6d1752881418 100644
--- a/sw/source/core/unocore/unosett.cxx
+++ b/sw/source/core/unocore/unosett.cxx
@@ -1148,6 +1148,7 @@ void SwXNumberingRules::replaceByIndex(sal_Int32 nIndex, const uno::Any& rElemen
SwXNumberingRules::SetNumberingRuleByIndex( aNumRule,
*rProperties, nIndex);
// set character format if needed
+ // this code appears to be dead - except when a style is assigned for BITMAP numbering?
const SwCharFormats* pFormats = m_pDocShell->GetDoc()->GetCharFormats();
const size_t nChCount = pFormats->size();
for(sal_uInt16 i = 0; i < MAXLEVEL;i++)
@@ -1492,7 +1493,7 @@ void SwXNumberingRules::SetNumberingRuleByIndex(
SetPropertiesToNumFormat(aFormat, m_sNewCharStyleNames[nIndex],
&m_sNewBulletFontNames[nIndex],
&sHeadingStyleName, &sParagraphStyleName,
- m_pDoc, rProperties);
+ m_pDoc, m_pDocShell, rProperties);
if (m_pDoc && !sParagraphStyleName.isEmpty())
@@ -1539,8 +1540,11 @@ void SwXNumberingRules::SetPropertiesToNumFormat(
OUString *const pHeadingStyleName,
OUString *const pParagraphStyleName,
SwDoc *const pDoc,
+ SwDocShell *const pDocShell,
const uno::Sequence<beans::PropertyValue>& rProperties)
{
+ assert(pDoc == nullptr || pDocShell == nullptr); // can't be both ordinary and chapter numbering
+
bool bWrongArg = false;
std::unique_ptr<SvxBrushItem> pSetBrush;
std::unique_ptr<Size> pSetSize;
@@ -1588,14 +1592,15 @@ void SwXNumberingRules::SetPropertiesToNumFormat(
rProp.Value >>= uTmp;
OUString sCharFormatName;
SwStyleNameMapper::FillUIName( uTmp, sCharFormatName, SwGetPoolIdFromName::ChrFmt );
+ SwDoc *const pLocalDoc = pDocShell ? pDocShell->GetDoc() : pDoc;
if (sCharFormatName == UNO_NAME_CHARACTER_FORMAT_NONE)
{
rCharStyleName = aInvalidStyle;
aFormat.SetCharFormat(nullptr);
}
- else if(pDoc)
+ else if (pLocalDoc)
{
- const SwCharFormats* pFormats = pDoc->GetCharFormats();
+ const SwCharFormats* pFormats = pLocalDoc->GetCharFormats();
const size_t nChCount = pFormats->size();
SwCharFormat* pCharFormat = nullptr;
@@ -1614,7 +1619,7 @@ void SwXNumberingRules::SetPropertiesToNumFormat(
{
SfxStyleSheetBase* pBase;
- SfxStyleSheetBasePool* pPool = pDoc->GetDocShell()->GetStyleSheetPool();
+ SfxStyleSheetBasePool* pPool = pLocalDoc->GetDocShell()->GetStyleSheetPool();
pBase = pPool->Find(sCharFormatName, SfxStyleFamily::Char);
if(!pBase)
pBase = &pPool->Make(sCharFormatName, SfxStyleFamily::Char);
@@ -1626,7 +1631,7 @@ void SwXNumberingRules::SetPropertiesToNumFormat(
// If the character format has been found its name should not be in the
// char style names array
rCharStyleName.clear();
- }
+ }
else
rCharStyleName = sCharFormatName;
}
@@ -1779,7 +1784,7 @@ void SwXNumberingRules::SetPropertiesToNumFormat(
{
OUString sBulletFontName;
rProp.Value >>= sBulletFontName;
- SwDocShell* pLclDocShell = pDoc->GetDocShell();
+ SwDocShell *const pLclDocShell = pDocShell ? pDocShell : pDoc ? pDoc->GetDocShell() : nullptr;
if( !sBulletFontName.isEmpty() && pLclDocShell )
{
const SvxFontListItem* pFontListItem =
@@ -1878,7 +1883,8 @@ void SwXNumberingRules::SetPropertiesToNumFormat(
}
pSetVOrient->PutValue(rProp.Value, MID_VERTORIENT_ORIENT);
}
- else if (rProp.Name == UNO_NAME_HEADING_STYLE_NAME)
+ else if (rProp.Name == UNO_NAME_HEADING_STYLE_NAME
+ && pDocShell) // only on chapter numbering
{
if (pHeadingStyleName)
{
diff --git a/sw/source/core/unocore/unotbl.cxx b/sw/source/core/unocore/unotbl.cxx
index fa378c7e8ae1..f149c3a4ce16 100644
--- a/sw/source/core/unocore/unotbl.cxx
+++ b/sw/source/core/unocore/unotbl.cxx
@@ -2227,7 +2227,7 @@ void SwXTextTable::dispose()
SwSelBoxes aSelBoxes;
for(auto& rBox : pTable->GetTabSortBoxes() )
aSelBoxes.insert(rBox);
- pFormat->GetDoc()->DeleteRowCol(aSelBoxes);
+ pFormat->GetDoc()->DeleteRowCol(aSelBoxes, SwDoc::RowColMode::DeleteProtected);
}
void SAL_CALL SwXTextTable::addEventListener(
diff --git a/sw/source/core/unocore/unotext.cxx b/sw/source/core/unocore/unotext.cxx
index 3887a11191d7..4b5e16c028e2 100644
--- a/sw/source/core/unocore/unotext.cxx
+++ b/sw/source/core/unocore/unotext.cxx
@@ -364,7 +364,8 @@ SwXText::insertString(const uno::Reference< text::XTextRange >& xTextRange,
dynamic_cast<SwXTextCursor*>(pCursor) );
if (pTextCursor)
{
- pTextCursor->DeleteAndInsert(rString, bForceExpandHints);
+ pTextCursor->DeleteAndInsert(rString, ::sw::DeleteAndInsertMode::ForceReplace
+ | (bForceExpandHints ? ::sw::DeleteAndInsertMode::ForceExpandHints : ::sw::DeleteAndInsertMode::Default));
}
else
{
@@ -373,7 +374,8 @@ SwXText::insertString(const uno::Reference< text::XTextRange >& xTextRange,
}
else
{
- pRange->DeleteAndInsert(rString, bForceExpandHints);
+ pRange->DeleteAndInsert(rString, ::sw::DeleteAndInsertMode::ForceReplace
+ | (bForceExpandHints ? ::sw::DeleteAndInsertMode::ForceExpandHints : ::sw::DeleteAndInsertMode::Default));
}
}
else
@@ -605,7 +607,21 @@ SwXText::insertTextContent(
if (bAbsorb && !bAttribute)
{
- xRange->setString(OUString());
+ uno::Reference<lang::XUnoTunnel> const xRangeTunnel(xRange, uno::UNO_QUERY);
+ if (SwXTextRange *const pRange = ::sw::UnoTunnelGetImplementation<SwXTextRange>(xRangeTunnel))
+ {
+ pRange->DeleteAndInsert(OUString(), ::sw::DeleteAndInsertMode::ForceReplace
+ | (bForceExpandHints ? ::sw::DeleteAndInsertMode::ForceExpandHints : ::sw::DeleteAndInsertMode::Default));
+ }
+ else if (SwXTextCursor *const pCursor = dynamic_cast<SwXTextCursor*>(::sw::UnoTunnelGetImplementation<OTextCursorHelper>(xRangeTunnel)))
+ {
+ pCursor->DeleteAndInsert(OUString(), ::sw::DeleteAndInsertMode::ForceReplace
+ | (bForceExpandHints ? ::sw::DeleteAndInsertMode::ForceExpandHints : ::sw::DeleteAndInsertMode::Default));
+ }
+ else
+ {
+ xRange->setString(OUString());
+ }
}
uno::Reference< text::XTextRange > xTempRange =
(bAttribute && bAbsorb) ? xRange : xRange->getStart();
@@ -1566,6 +1582,8 @@ SwXText::convertToTextFrame(
}
bool bParaAfterInserted = false;
bool bParaBeforeInserted = false;
+ ::std::optional<SwPaM> oAnchorCheckPam;
+ oAnchorCheckPam.emplace(*pStartPam->Start(), *pEndPam->End());
if (
pStartStartNode && pEndStartNode &&
(pStartStartNode != pEndStartNode || pStartStartNode != GetStartNode())
@@ -1646,6 +1664,7 @@ SwXText::convertToTextFrame(
bParaAfterInserted = GetDoc()->getIDocumentContentOperations().AppendTextNode( aEnd );
pEndPam->DeleteMark();
*pEndPam->GetPoint() = aEnd;
+ *oAnchorCheckPam->End() = aEnd;
}
pStartPam->SetMark();
*pStartPam->End() = *pEndPam->End();
@@ -1660,10 +1679,17 @@ SwXText::convertToTextFrame(
{
const SwFrameFormat* pFrameFormat = (*m_pImpl->m_pDoc->GetSpzFrameFormats())[i];
const SwFormatAnchor& rAnchor = pFrameFormat->GetAnchor();
- if ( !isGraphicNode(pFrameFormat) &&
- (RndStdIds::FLY_AT_PARA == rAnchor.GetAnchorId() || RndStdIds::FLY_AT_CHAR == rAnchor.GetAnchorId()) &&
- pStartPam->Start()->nNode.GetIndex() <= rAnchor.GetContentAnchor()->nNode.GetIndex() &&
- pStartPam->End()->nNode.GetIndex() >= rAnchor.GetContentAnchor()->nNode.GetIndex())
+ // note: Word can do at-char anchors in text frames - sometimes!
+ // see testFlyInFly for why this checks only the edges of the selection,
+ // and testFloatingTablesAnchor for why it excludes pre/post table
+ // added nodes
+ if (!isGraphicNode(pFrameFormat)
+ && ( (RndStdIds::FLY_AT_PARA == rAnchor.GetAnchorId()
+ && ( oAnchorCheckPam->Start()->nNode.GetIndex() == rAnchor.GetContentAnchor()->nNode.GetIndex()
+ || oAnchorCheckPam->End()->nNode.GetIndex() == rAnchor.GetContentAnchor()->nNode.GetIndex()))
+ || (RndStdIds::FLY_AT_CHAR == rAnchor.GetAnchorId()
+ && ( *oAnchorCheckPam->Start() == *rAnchor.GetContentAnchor()
+ || *oAnchorCheckPam->End() == *rAnchor.GetContentAnchor()))))
{
if (pFrameFormat->GetName().isEmpty())
{
@@ -1675,6 +1701,7 @@ SwXText::convertToTextFrame(
}
}
}
+ oAnchorCheckPam.reset(); // clear SwIndex before deleting nodes
const uno::Reference<text::XTextFrame> xNewFrame(
SwXTextFrame::CreateXTextFrame(*m_pImpl->m_pDoc, nullptr));
@@ -1692,7 +1719,7 @@ SwXText::convertToTextFrame(
new SwXTextRange(*pStartPam, this);
assert(rNewFrame.IsDescriptor());
rNewFrame.attachToRange(xInsertTextRange, pStartPam.get());
- rNewFrame.setName(m_pImpl->m_pDoc->GetUniqueFrameName());
+ assert(!rNewFrame.getName().isEmpty());
}
SwTextNode *const pTextNode(pStartPam->GetNode().GetTextNode());
@@ -2259,12 +2286,6 @@ SwXText::copyText(
// us, even if we have only a single paragraph.
m_pImpl->m_pDoc->getIDocumentContentOperations().CopyRange(temp, rPos, /*bCopyAll=*/false, /*bCheckPos=*/true, /*bCopyText=*/false);
}
- if (!pFirstNode)
- { // the node at rPos was split; get rid of the first empty one so
- // that the pasted table is first
- auto pDelCursor(m_pImpl->m_pDoc->CreateUnoCursor(SwPosition(SwNodeIndex(*GetStartNode(), 1))));
- m_pImpl->m_pDoc->getIDocumentContentOperations().DelFullPara(*pDelCursor);
- }
}
else
{
diff --git a/sw/source/filter/basflt/shellio.cxx b/sw/source/filter/basflt/shellio.cxx
index 47657980602f..06bbbe14e88c 100644
--- a/sw/source/filter/basflt/shellio.cxx
+++ b/sw/source/filter/basflt/shellio.cxx
@@ -58,6 +58,7 @@
#include <poolfmt.hxx>
#include <fltini.hxx>
#include <docsh.hxx>
+#include <ndole.hxx>
#include <ndtxt.hxx>
#include <redline.hxx>
#include <swerror.h>
@@ -377,7 +378,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, 0);
+ mxDoc->getIDocumentFieldsAccess().SetFieldsDirty(true, nullptr, 0);
}
mxDoc->getIDocumentRedlineAccess().SetRedlineFlags_intern( eOld );
@@ -854,8 +855,7 @@ ErrCode SwWriter::Write( WriterRef const & rxWriter, const OUString* pRealFileNa
pESh->StartAllAction();
}
- const bool bOrigPurgeOle = pOutDoc->getIDocumentSettingAccess().get(DocumentSettingId::PURGE_OLE);
- pOutDoc->getIDocumentSettingAccess().set(DocumentSettingId::PURGE_OLE, false);
+ auto xGuard = std::make_unique<PurgeGuard>(*pOutDoc);
ErrCode nError = ERRCODE_NONE;
if( pMedium )
@@ -865,7 +865,7 @@ ErrCode SwWriter::Write( WriterRef const & rxWriter, const OUString* pRealFileNa
else if( xStg.is() )
nError = rxWriter->Write( *pPam, xStg, pRealFileName );
- pOutDoc->getIDocumentSettingAccess().set(DocumentSettingId::PURGE_OLE, bOrigPurgeOle );
+ xGuard.reset();
if( pESh )
{
diff --git a/sw/source/filter/html/htmlplug.cxx b/sw/source/filter/html/htmlplug.cxx
index a0da671de733..112975f98511 100644
--- a/sw/source/filter/html/htmlplug.cxx
+++ b/sw/source/filter/html/htmlplug.cxx
@@ -1087,7 +1087,12 @@ void SwHTMLParser::InsertFloatingFrame()
bool bHasBorder = aFrameDesc.HasFrameBorder();
Size aMargin = aFrameDesc.GetMargin();
- xSet->setPropertyValue("FrameURL", uno::makeAny( aFrameDesc.GetURL().GetMainURL( INetURLObject::DecodeMechanism::NONE ) ) );
+ OUString sHRef = aFrameDesc.GetURL().GetMainURL( INetURLObject::DecodeMechanism::NONE );
+
+ if (INetURLObject(sHRef).IsExoticProtocol())
+ NotifyMacroEventRead();
+
+ xSet->setPropertyValue("FrameURL", uno::makeAny( sHRef ) );
xSet->setPropertyValue("FrameName", uno::makeAny( aName ) );
if ( eScroll == ScrollingMode::Auto )
diff --git a/sw/source/filter/html/htmltab.cxx b/sw/source/filter/html/htmltab.cxx
index 670ed3ae7aeb..8a7c2c8bbd72 100644
--- a/sw/source/filter/html/htmltab.cxx
+++ b/sw/source/filter/html/htmltab.cxx
@@ -4925,7 +4925,7 @@ void SwHTMLParser::ClearFootnotesMarksInRange(const SwNodeIndex& rMkNdIdx, const
//ofz#9733 drop bookmarks in this range
IDocumentMarkAccess* const pMarkAccess = pDoc->getIDocumentMarkAccess();
- pMarkAccess->deleteMarks(rMkNdIdx, SwNodeIndex(rPtNdIdx, 1), nullptr, nullptr, nullptr);
+ pMarkAccess->deleteMarks(rMkNdIdx, SwNodeIndex(rPtNdIdx, 1), nullptr, nullptr, nullptr, false);
SwFrameFormats& rTable = *pDoc->GetSpzFrameFormats();
for ( auto i = rTable.size(); i; )
diff --git a/sw/source/filter/ww8/wrtw8num.cxx b/sw/source/filter/ww8/wrtw8num.cxx
index d0514482e5e1..05e860caec74 100644
--- a/sw/source/filter/ww8/wrtw8num.cxx
+++ b/sw/source/filter/ww8/wrtw8num.cxx
@@ -61,6 +61,17 @@ SwNumRule* MSWordExportBase::DuplicateNumRuleImpl(const SwNumRule *pRule)
return pMyNumRule;
}
+sal_uInt16 MSWordExportBase::DuplicateNumRule(const SwNumRule* pRule, sal_uInt8 nLevel, sal_uInt16 nVal)
+{
+ SwNumRule* const pMyNumRule = DuplicateNumRuleImpl(pRule);
+
+ SwNumFormat aNumFormat(pMyNumRule->Get(nLevel));
+ aNumFormat.SetStart(nVal);
+ pMyNumRule->Set(nLevel, aNumFormat);
+
+ return GetNumberingId(*pMyNumRule);
+}
+
// multiple SwList can be based on the same SwNumRule; ensure one w:abstractNum
// per SwList
sal_uInt16 MSWordExportBase::DuplicateAbsNum(OUString const& rListId,
diff --git a/sw/source/filter/ww8/wrtww8.hxx b/sw/source/filter/ww8/wrtww8.hxx
index a64f5627a2b4..0433332493ef 100644
--- a/sw/source/filter/ww8/wrtww8.hxx
+++ b/sw/source/filter/ww8/wrtww8.hxx
@@ -657,6 +657,7 @@ public:
/// List is set to restart at a particular value so for export make a
/// completely new list based on this one and export that instead,
/// which duplicates words behaviour in this respect.
+ sal_uInt16 DuplicateNumRule(const SwNumRule* pRule, sal_uInt8 nLevel, sal_uInt16 nVal);
SwNumRule * DuplicateNumRuleImpl(const SwNumRule *pRule);
/// check if a new abstractNum is needed for this list
diff --git a/sw/source/filter/ww8/ww8atr.cxx b/sw/source/filter/ww8/ww8atr.cxx
index 0b2c6527c0ea..5868928c5bf6 100644
--- a/sw/source/filter/ww8/ww8atr.cxx
+++ b/sw/source/filter/ww8/ww8atr.cxx
@@ -3649,6 +3649,13 @@ void AttributeOutputBase::ParaNumRule( const SwNumRuleItem& rNumRule )
}
}
}
+ else if (pTextNd->IsListRestart())
+ {
+ sal_uInt16 nStartWith = static_cast<sal_uInt16>(pTextNd->GetActualListStartValue());
+ nNumId = GetExport().DuplicateNumRule(pRule, nLvl, nStartWith);
+ if (USHRT_MAX != nNumId)
+ ++nNumId;
+ }
}
else
{
diff --git a/sw/source/filter/xml/XMLRedlineImportHelper.cxx b/sw/source/filter/xml/XMLRedlineImportHelper.cxx
index bfd4e488fcb8..b42a28eeacb7 100644
--- a/sw/source/filter/xml/XMLRedlineImportHelper.cxx
+++ b/sw/source/filter/xml/XMLRedlineImportHelper.cxx
@@ -33,6 +33,9 @@
#include <IDocumentStylePoolAccess.hxx>
#include <tools/datetime.hxx>
#include <poolfmt.hxx>
+#include <fmtanchr.hxx>
+#include <ftnidx.hxx>
+#include <txtftn.hxx>
#include <unoredline.hxx>
#include <DocumentRedlineManager.hxx>
#include "xmlimp.hxx"
@@ -571,6 +574,73 @@ inline bool XMLRedlineImportHelper::IsReady(const RedlineInfo* pRedline)
!pRedline->bNeedsAdjustment );
}
+/// recursively check if rPos or its anchor (if in fly or footnote) is in redline section
+static auto RecursiveContains(SwStartNode const& rRedlineSection, SwNode const& rPos) -> bool
+{
+ if (rRedlineSection.GetIndex() <= rPos.GetIndex()
+ && rPos.GetIndex() <= rRedlineSection.EndOfSectionIndex())
+ {
+ return true;
+ }
+ // loop to iterate "up" in the node tree and find an anchored XText
+ for (SwStartNode const* pStartNode = rPos.StartOfSectionNode();
+ pStartNode != nullptr && pStartNode->GetIndex() != 0;
+ pStartNode = pStartNode->StartOfSectionNode())
+ {
+ switch (pStartNode->GetStartNodeType())
+ {
+ case SwNormalStartNode:
+ case SwTableBoxStartNode:
+ continue;
+ break;
+ case SwFlyStartNode:
+ {
+ SwFrameFormat const*const pFormat(pStartNode->GetFlyFormat());
+ assert(pFormat);
+ SwFormatAnchor const& rAnchor(pFormat->GetAnchor());
+ if (rAnchor.GetAnchorId() == RndStdIds::FLY_AT_PAGE)
+ {
+ return false;
+ }
+ else if (rAnchor.GetAnchorId() == RndStdIds::FLY_AT_FLY)
+ { // anchor is on a start node, avoid skipping it:
+ pStartNode = rAnchor.GetContentAnchor()->nNode.GetNode().GetStartNode();
+ assert(pStartNode);
+ // pass the next node to recursive call - it will call
+ // call StartOfSectionNode on it and go back to pStartNode
+ SwNodeIndex const next(*pStartNode, +1);
+ return RecursiveContains(rRedlineSection, next.GetNode());
+ }
+ else
+ {
+ return RecursiveContains(rRedlineSection, rAnchor.GetContentAnchor()->nNode.GetNode());
+ }
+ }
+ break;
+ case SwFootnoteStartNode:
+ { // sigh ... need to search
+ for (SwTextFootnote const*const pFootnote : rRedlineSection.GetDoc()->GetFootnoteIdxs())
+ {
+ if (pStartNode == pFootnote->GetStartNode()->GetNode().GetStartNode())
+ {
+ return RecursiveContains(rRedlineSection, pFootnote->GetTextNode());
+ }
+ }
+ assert(false);
+ }
+ break;
+ case SwHeaderStartNode:
+ case SwFooterStartNode:
+ return false; // headers aren't anchored
+ break;
+ default:
+ assert(false);
+ break;
+ }
+ }
+ return false;
+}
+
void XMLRedlineImportHelper::InsertIntoDocument(RedlineInfo* pRedlineInfo)
{
OSL_ENSURE(nullptr != pRedlineInfo, "need redline info");
@@ -649,6 +719,16 @@ void XMLRedlineImportHelper::InsertIntoDocument(RedlineInfo* pRedlineInfo)
}
}
}
+ else if (pRedlineInfo->pContentIndex != nullptr
+ // should be enough to check 1 position of aPaM bc CheckNodesRange() above
+ && RecursiveContains(*pRedlineInfo->pContentIndex->GetNode().GetStartNode(), aPaM.GetPoint()->nNode.GetNode()))
+ {
+ SAL_WARN("sw.xml", "Recursive change tracking, removing");
+ // reuse aPaM to remove it from nodes that will be deleted
+ *aPaM.GetPoint() = SwPosition(pRedlineInfo->pContentIndex->GetNode());
+ aPaM.DeleteMark();
+ pDoc->getIDocumentContentOperations().DeleteSection(&aPaM.GetPoint()->nNode.GetNode());
+ }
else
{
// regular file loading: insert redline
diff --git a/sw/source/filter/xml/xmlexp.hxx b/sw/source/filter/xml/xmlexp.hxx
index 22e6a42368a7..a5abc5baf15f 100644
--- a/sw/source/filter/xml/xmlexp.hxx
+++ b/sw/source/filter/xml/xmlexp.hxx
@@ -23,6 +23,8 @@
#include <xmloff/xmlexp.hxx>
#include "xmlitmap.hxx"
#include <xmloff/xmltoken.hxx>
+
+#include <optional>
#include <vector>
class SwDoc;
@@ -73,7 +75,8 @@ class SwXMLExport : public SvXMLExport
SwXMLTableInfo_Impl& rTableInfo,
bool bTop=false );
- void ExportFormat( const SwFormat& rFormat, enum ::xmloff::token::XMLTokenEnum eClass );
+ void ExportFormat(const SwFormat& rFormat, enum ::xmloff::token::XMLTokenEnum eClass,
+ ::std::optional<OUString> const oStyleName);
void ExportTableFormat( const SwFrameFormat& rFormat, sal_uInt32 nAbsWidth );
void ExportTableColumnStyle( const SwXMLTableColumn_Impl& rCol );
diff --git a/sw/source/filter/xml/xmlfmte.cxx b/sw/source/filter/xml/xmlfmte.cxx
index 209cdd5a3904..b7aa337eede3 100644
--- a/sw/source/filter/xml/xmlfmte.cxx
+++ b/sw/source/filter/xml/xmlfmte.cxx
@@ -46,7 +46,8 @@ using namespace ::com::sun::star::drawing;
using namespace ::com::sun::star::lang;
using namespace ::xmloff::token;
-void SwXMLExport::ExportFormat( const SwFormat& rFormat, enum XMLTokenEnum eFamily )
+void SwXMLExport::ExportFormat(const SwFormat& rFormat, enum XMLTokenEnum eFamily,
+ ::std::optional<OUString> const oStyleName)
{
// <style:style ...>
CheckAttrList();
@@ -57,11 +58,14 @@ void SwXMLExport::ExportFormat( const SwFormat& rFormat, enum XMLTokenEnum eFami
return;
OSL_ENSURE( eFamily != XML_TOKEN_INVALID, "family must be specified" );
// style:name="..."
+ assert(oStyleName || (eFamily != XML_TABLE_ROW && eFamily != XML_TABLE_CELL));
bool bEncoded = false;
- AddAttribute( XML_NAMESPACE_STYLE, XML_NAME, EncodeStyleName(
- rFormat.GetName(), &bEncoded ) );
+ OUString const name(oStyleName ? *oStyleName : rFormat.GetName());
+ AddAttribute(XML_NAMESPACE_STYLE, XML_NAME, EncodeStyleName(name, &bEncoded));
if( bEncoded )
- AddAttribute( XML_NAMESPACE_STYLE, XML_DISPLAY_NAME, rFormat.GetName() );
+ {
+ AddAttribute(XML_NAMESPACE_STYLE, XML_DISPLAY_NAME, name);
+ }
if( eFamily != XML_TOKEN_INVALID )
AddAttribute( XML_NAMESPACE_STYLE, XML_FAMILY, eFamily );
diff --git a/sw/source/filter/xml/xmliteme.cxx b/sw/source/filter/xml/xmliteme.cxx
index b307a5c10872..8972bd14a51e 100644
--- a/sw/source/filter/xml/xmliteme.cxx
+++ b/sw/source/filter/xml/xmliteme.cxx
@@ -219,7 +219,7 @@ void SwXMLExport::ExportTableFormat( const SwFrameFormat& rFormat, sal_uInt32 nA
{
static_cast<SwXMLTableItemMapper_Impl *>(m_pTableItemMapper.get())
->SetAbsWidth( nAbsWidth );
- ExportFormat( rFormat, XML_TABLE );
+ ExportFormat(rFormat, XML_TABLE, {});
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/filter/xml/xmltble.cxx b/sw/source/filter/xml/xmltble.cxx
index 6a4fa1c9902b..d840509ecdc0 100644
--- a/sw/source/filter/xml/xmltble.cxx
+++ b/sw/source/filter/xml/xmltble.cxx
@@ -179,13 +179,18 @@ class SwXMLTableFrameFormatsSort_Impl
{
private:
SwXMLFrameFormats_Impl aFormatList;
+ SwXMLTextParagraphExport::FormatMap & m_rFormatMap;
+
public:
- bool AddRow( SwFrameFormat& rFrameFormat, const OUString& rNamePrefix, sal_uInt32 nLine );
- bool AddCell( SwFrameFormat& rFrameFormat, const OUString& rNamePrefix,
+ SwXMLTableFrameFormatsSort_Impl(SwXMLTextParagraphExport::FormatMap & rFormatMap)
+ : m_rFormatMap(rFormatMap)
+ {}
+ ::std::optional<OUString> AddRow(SwFrameFormat& rFrameFormat, const OUString& rNamePrefix, sal_uInt32 nLine );
+ ::std::optional<OUString> AddCell(SwFrameFormat& rFrameFormat, const OUString& rNamePrefix,
sal_uInt32 nCol, sal_uInt32 nRow, bool bTop );
};
-bool SwXMLTableFrameFormatsSort_Impl::AddRow( SwFrameFormat& rFrameFormat,
+::std::optional<OUString> SwXMLTableFrameFormatsSort_Impl::AddRow(SwFrameFormat& rFrameFormat,
const OUString& rNamePrefix,
sal_uInt32 nLine )
{
@@ -206,10 +211,12 @@ bool SwXMLTableFrameFormatsSort_Impl::AddRow( SwFrameFormat& rFrameFormat,
// empty styles have not to be exported
if( !pFrameSize && !pBrush && !pRowSplit )
- return false;
+ {
+ m_rFormatMap.emplace(&rFrameFormat, ::std::optional<OUString>()); // empty just to enable assert
+ return {};
+ }
// order is: -/brush, size/-, size/brush
- bool bInsert = true;
SwXMLFrameFormats_Impl::iterator i;
for( i = aFormatList.begin(); i < aFormatList.end(); ++i )
{
@@ -272,19 +279,19 @@ bool SwXMLTableFrameFormatsSort_Impl::AddRow( SwFrameFormat& rFrameFormat,
continue;
// found!
- rFrameFormat.SetName( pTestFormat->GetName() );
- bInsert = false;
- break;
+ auto const oName(m_rFormatMap.find(pTestFormat)->second);
+ assert(oName);
+ m_rFormatMap.emplace(&rFrameFormat, oName);
+ return {};
}
- if( bInsert )
{
- rFrameFormat.SetName( rNamePrefix + "." + OUString::number(nLine+1) );
+ OUString const name(rNamePrefix + "." + OUString::number(nLine+1));
+ m_rFormatMap.emplace(&rFrameFormat, ::std::optional<OUString>(name));
if ( i != aFormatList.end() ) ++i;
aFormatList.insert( i, &rFrameFormat );
+ return ::std::optional<OUString>(name);
}
-
- return bInsert;
}
static OUString lcl_xmltble_appendBoxPrefix(const OUString& rNamePrefix,
@@ -301,7 +308,7 @@ static OUString lcl_xmltble_appendBoxPrefix(const OUString& rNamePrefix,
+ "." + OUString::number(nRow + 1);
}
-bool SwXMLTableFrameFormatsSort_Impl::AddCell( SwFrameFormat& rFrameFormat,
+::std::optional<OUString> SwXMLTableFrameFormatsSort_Impl::AddCell(SwFrameFormat& rFrameFormat,
const OUString& rNamePrefix,
sal_uInt32 nCol, sal_uInt32 nRow, bool bTop )
{
@@ -336,7 +343,10 @@ bool SwXMLTableFrameFormatsSort_Impl::AddCell( SwFrameFormat& rFrameFormat,
// empty styles have not to be exported
if( !pVertOrient && !pBrush && !pBox && !pNumFormat && !pFrameDir && !pAttCnt )
- return false;
+ {
+ m_rFormatMap.emplace(&rFrameFormat, ::std::optional<OUString>()); // empty just to enable assert
+ return {};
+ }
// order is: -/-/-/num,
// -/-/box/-, -/-/box/num,
@@ -344,7 +354,6 @@ bool SwXMLTableFrameFormatsSort_Impl::AddCell( SwFrameFormat& rFrameFormat,
// vert/-/-/-, vert/-/-/num, vert/-/box/-, ver/-/box/num,
// vert/brush/-/-, vert/brush/-/num, vert/brush/box/-,
// vert/brush/box/num
- bool bInsert = true;
SwXMLFrameFormats_Impl::iterator i;
for( i = aFormatList.begin(); i < aFormatList.end(); ++i )
{
@@ -462,19 +471,19 @@ bool SwXMLTableFrameFormatsSort_Impl::AddCell( SwFrameFormat& rFrameFormat,
continue;
// found!
- rFrameFormat.SetName( pTestFormat->GetName() );
- bInsert = false;
- break;
+ auto const oName(m_rFormatMap.find(pTestFormat)->second);
+ assert(oName);
+ m_rFormatMap.emplace(&rFrameFormat, oName);
+ return {};
}
- if( bInsert )
{
- rFrameFormat.SetName( lcl_xmltble_appendBoxPrefix( rNamePrefix, nCol, nRow, bTop ) );
+ OUString const name(lcl_xmltble_appendBoxPrefix(rNamePrefix, nCol, nRow, bTop));
+ m_rFormatMap.emplace(&rFrameFormat, ::std::optional<OUString>(name));
if ( i != aFormatList.end() ) ++i;
aFormatList.insert( i, &rFrameFormat );
+ return ::std::optional<OUString>(name);
}
-
- return bInsert;
}
class SwXMLTableInfo_Impl
@@ -483,10 +492,21 @@ class SwXMLTableInfo_Impl
Reference<XTextSection> m_xBaseSection;
bool m_bBaseSectionValid;
sal_uInt32 const m_nPrefix;
+ SwXMLTextParagraphExport::FormatMap const& m_rLineFormats;
+ SwXMLTextParagraphExport::FormatMap const& m_rBoxFormats;
public:
- inline SwXMLTableInfo_Impl( const SwTable *pTable, sal_uInt16 nPrefix );
+ inline SwXMLTableInfo_Impl( const SwTable *pTable, sal_uInt16 nPrefix,
+ SwXMLTextParagraphExport::FormatMap const& rLineFormats,
+ SwXMLTextParagraphExport::FormatMap const& rBoxFormats)
+ : m_pTable(pTable)
+ , m_bBaseSectionValid(false)
+ , m_nPrefix(nPrefix)
+ , m_rLineFormats(rLineFormats)
+ , m_rBoxFormats(rBoxFormats)
+ {
+ }
const SwTable *GetTable() const { return m_pTable; }
const SwFrameFormat *GetTableFormat() const { return m_pTable->GetFrameFormat(); }
@@ -496,15 +516,10 @@ public:
inline void SetBaseSection( const Reference < XTextSection >& rBase );
/// The namespace (table or loext) that should be used for the elements.
sal_uInt16 GetPrefix() const { return m_nPrefix; }
+ SwXMLTextParagraphExport::FormatMap const& GetLineFormats() const { return m_rLineFormats; }
+ SwXMLTextParagraphExport::FormatMap const& GetBoxFormats() const { return m_rBoxFormats; }
};
-inline SwXMLTableInfo_Impl::SwXMLTableInfo_Impl(const SwTable *pTable, sal_uInt16 nPrefix) :
- m_pTable(pTable),
- m_bBaseSectionValid(false),
- m_nPrefix(nPrefix)
-{
-}
-
inline void SwXMLTableInfo_Impl::SetBaseSection(
const Reference < XTextSection >& rBaseSection )
{
@@ -638,8 +653,10 @@ void SwXMLExport::ExportTableLinesAutoStyles( const SwTableLines& rLines,
SwTableLine *pLine = rLines[nLine];
SwFrameFormat *pFrameFormat = pLine->GetFrameFormat();
- if( rExpRows.AddRow( *pFrameFormat, rNamePrefix, nLine ) )
- ExportFormat( *pFrameFormat, XML_TABLE_ROW );
+ if (auto oNew = rExpRows.AddRow(*pFrameFormat, rNamePrefix, nLine))
+ {
+ ExportFormat(*pFrameFormat, XML_TABLE_ROW, oNew);
+ }
const SwTableBoxes& rBoxes = pLine->GetTabBoxes();
const size_t nBoxes = rBoxes.size();
@@ -666,9 +683,11 @@ void SwXMLExport::ExportTableLinesAutoStyles( const SwTableLines& rLines,
if( pBoxSttNd )
{
SwFrameFormat *pFrameFormat2 = pBox->GetFrameFormat();
- if( rExpCells.AddCell( *pFrameFormat2, rNamePrefix, nOldCol, nLine,
+ if (auto oNew = rExpCells.AddCell(*pFrameFormat2, rNamePrefix, nOldCol, nLine,
bTop) )
- ExportFormat( *pFrameFormat2, XML_TABLE_CELL );
+ {
+ ExportFormat(*pFrameFormat2, XML_TABLE_CELL, oNew);
+ }
Reference < XCell > xCell = SwXCell::CreateXCell(
const_cast<SwFrameFormat *>(rTableInfo.GetTableFormat()),
@@ -714,8 +733,13 @@ void SwXMLExport::ExportTableLinesAutoStyles( const SwTableLines& rLines,
}
}
-void SwXMLExport::ExportTableAutoStyles( const SwTableNode& rTableNd )
+void SwXMLExport::ExportTableAutoStyles(const SwTableNode& rTableNd)
{
+ auto & rFormats(static_cast<SwXMLTextParagraphExport *>(GetTextParagraphExport().get())->GetTableFormats());
+ auto const it(rFormats.find(&rTableNd));
+ assert(it != rFormats.end());
+ SwXMLTextParagraphExport::FormatMap & rRowFormats(it->second.first);
+ SwXMLTextParagraphExport::FormatMap & rBoxFormats(it->second.second);
const SwTable& rTable = rTableNd.GetTable();
const SwFrameFormat *pTableFormat = rTable.GetFrameFormat();
@@ -743,9 +767,9 @@ void SwXMLExport::ExportTableAutoStyles( const SwTableNode& rTableNd )
ExportTableFormat( *pTableFormat, nAbsWidth );
SwXMLTableColumnsSortByWidth_Impl aExpCols;
- SwXMLTableFrameFormatsSort_Impl aExpRows;
- SwXMLTableFrameFormatsSort_Impl aExpCells;
- SwXMLTableInfo_Impl aTableInfo( &rTable, XML_NAMESPACE_TABLE );
+ SwXMLTableFrameFormatsSort_Impl aExpRows(rRowFormats);
+ SwXMLTableFrameFormatsSort_Impl aExpCells(rBoxFormats);
+ SwXMLTableInfo_Impl aTableInfo(&rTable, XML_NAMESPACE_TABLE, rRowFormats, rBoxFormats);
ExportTableLinesAutoStyles( rTable.GetTabLines(), nAbsWidth, nBaseWidth,
pTableFormat->GetName(), aExpCols, aExpRows, aExpCells,
aTableInfo, true);
@@ -763,10 +787,12 @@ void SwXMLExport::ExportTableBox( const SwTableBox& rBox,
const SwFrameFormat *pFrameFormat = rBox.GetFrameFormat();
if( pFrameFormat )
{
- const OUString& sName = pFrameFormat->GetName();
- if( !sName.isEmpty() )
+ auto const it(rTableInfo.GetBoxFormats().find(pFrameFormat));
+ assert(it != rTableInfo.GetBoxFormats().end());
+ if (it->second)
{
- AddAttribute( XML_NAMESPACE_TABLE, XML_STYLE_NAME, EncodeStyleName(sName) );
+ assert(!it->second->isEmpty());
+ AddAttribute(XML_NAMESPACE_TABLE, XML_STYLE_NAME, EncodeStyleName(*it->second));
}
}
}
@@ -896,10 +922,12 @@ void SwXMLExport::ExportTableLine( const SwTableLine& rLine,
const SwFrameFormat *pFrameFormat = rLine.GetFrameFormat();
if( pFrameFormat )
{
- const OUString& sName = pFrameFormat->GetName();
- if( !sName.isEmpty() )
+ auto const it(rTableInfo.GetLineFormats().find(pFrameFormat));
+ assert(it != rTableInfo.GetLineFormats().end());
+ if (it->second)
{
- AddAttribute( XML_NAMESPACE_TABLE, XML_STYLE_NAME, EncodeStyleName(sName) );
+ assert(!it->second->isEmpty());
+ AddAttribute(XML_NAMESPACE_TABLE, XML_STYLE_NAME, EncodeStyleName(*it->second));
}
}
@@ -1051,29 +1079,6 @@ void SwXMLExport::ExportTableLines( const SwTableLines& rLines,
delete pLines;
}
-static void lcl_xmltble_ClearName_Line( SwTableLine* pLine );
-
-static void lcl_xmltble_ClearName_Box( SwTableBox* pBox )
-{
- if( !pBox->GetSttNd() )
- {
- for( SwTableLine* pLine : pBox->GetTabLines() )
- lcl_xmltble_ClearName_Line( pLine );
- }
- else
- {
- SwFrameFormat *pFrameFormat = pBox->GetFrameFormat();
- if( pFrameFormat && !pFrameFormat->GetName().isEmpty() )
- pFrameFormat->SetName( OUString() );
- }
-}
-
-void lcl_xmltble_ClearName_Line( SwTableLine* pLine )
-{
- for( SwTableBox* pBox : pLine->GetTabBoxes() )
- lcl_xmltble_ClearName_Box( pBox );
-}
-
void SwXMLExport::ExportTable( const SwTableNode& rTableNd )
{
const SwTable& rTable = rTableNd.GetTable();
@@ -1132,15 +1137,16 @@ void SwXMLExport::ExportTable( const SwTableNode& rTableNd )
XML_DDE_SOURCE, true, false);
}
- SwXMLTableInfo_Impl aTableInfo( &rTable, nPrefix );
+ auto const& rFormats(static_cast<SwXMLTextParagraphExport const*>(GetTextParagraphExport().get())->GetTableFormats());
+ auto const it(rFormats.find(&rTableNd));
+ assert(it != rFormats.end());
+ SwXMLTableInfo_Impl aTableInfo(&rTable, nPrefix, it->second.first, it->second.second);
ExportTableLines( rTable.GetTabLines(), aTableInfo, rTable.GetRowsToRepeat() );
-
- for( SwTableLine *pLine : const_cast<SwTable &>(rTable).GetTabLines() )
- lcl_xmltble_ClearName_Line( pLine );
}
}
void SwXMLTextParagraphExport::exportTableAutoStyles() {
+ // note: maTableNodes is used here only to keep the iteration order as before
for (const auto* pTableNode : maTableNodes)
{
static_cast<SwXMLExport&>(GetExport()).ExportTableAutoStyles(*pTableNode);
@@ -1187,6 +1193,7 @@ void SwXMLTextParagraphExport::exportTable(
&& (bExportStyles || !pFormat->GetDoc()->IsInHeaderFooter(aIdx)))
{
maTableNodes.push_back(pTableNd);
+ m_TableFormats.emplace(pTableNd, ::std::make_pair(SwXMLTextParagraphExport::FormatMap(), SwXMLTextParagraphExport::FormatMap()));
// Collect all tables inside cells of this table, too
const auto aCellNames = pXTable->getCellNames();
for (const OUString& rCellName : aCellNames)
diff --git a/sw/source/filter/xml/xmltexte.hxx b/sw/source/filter/xml/xmltexte.hxx
index 4432e4ce0166..78e0271384c3 100644
--- a/sw/source/filter/xml/xmltexte.hxx
+++ b/sw/source/filter/xml/xmltexte.hxx
@@ -23,6 +23,9 @@
#include <xmloff/txtparae.hxx>
#include <tools/globname.hxx>
+#include <optional>
+#include <unordered_map>
+
#define XML_EMBEDDEDOBJECTGRAPHIC_URL_BASE "vnd.sun.star.GraphicObject:"
class SwXMLExport;
@@ -41,6 +44,10 @@ class SwXMLTextParagraphExport : public XMLTextParagraphExport
// Collected autostyles for use in exportTextAutoStyles
std::vector<const SwTableNode*> maTableNodes;
+public:
+ typedef ::std::unordered_map<SwFrameFormat const*, ::std::optional<OUString>> FormatMap;
+private:
+ ::std::unordered_map<SwTableNode const*, ::std::pair<FormatMap, FormatMap>> m_TableFormats;
static SwNoTextNode *GetNoTextNode(
const css::uno::Reference < css::beans::XPropertySet >& rPropSet );
@@ -63,6 +70,11 @@ public:
SwXMLExport& rExp,
SvXMLAutoStylePoolP& rAutoStylePool );
virtual ~SwXMLTextParagraphExport() override;
+
+ ::std::unordered_map<SwTableNode const*, ::std::pair<FormatMap, FormatMap>> const&
+ GetTableFormats() const { return m_TableFormats; }
+ ::std::unordered_map<SwTableNode const*, ::std::pair<FormatMap, FormatMap>> &
+ GetTableFormats() { return m_TableFormats; }
};
#endif // INCLUDED_SW_SOURCE_FILTER_XML_XMLTEXTE_HXX
diff --git a/sw/source/filter/xml/xmltexti.cxx b/sw/source/filter/xml/xmltexti.cxx
index 788bec5c2d47..caf300f239c6 100644
--- a/sw/source/filter/xml/xmltexti.cxx
+++ b/sw/source/filter/xml/xmltexti.cxx
@@ -853,9 +853,14 @@ uno::Reference< XPropertySet > SwXMLTextImportHelper::createAndInsertFloatingFra
uno::Reference < beans::XPropertySet > xSet( xObj->getComponent(), uno::UNO_QUERY );
if ( xSet.is() )
{
+ OUString sHRef = URIHelper::SmartRel2Abs(
+ INetURLObject( GetXMLImport().GetBaseURL() ), rHRef );
+
+ if (INetURLObject(sHRef).IsExoticProtocol())
+ GetXMLImport().NotifyMacroEventRead();
+
xSet->setPropertyValue("FrameURL",
- makeAny( URIHelper::SmartRel2Abs(
- INetURLObject( GetXMLImport().GetBaseURL() ), rHRef ) ) );
+ makeAny( sHRef ) );
xSet->setPropertyValue("FrameName",
makeAny( rName ) );
diff --git a/sw/source/ui/config/optpage.cxx b/sw/source/ui/config/optpage.cxx
index 88b6740e8a9a..98359cc2ae05 100644
--- a/sw/source/ui/config/optpage.cxx
+++ b/sw/source/ui/config/optpage.cxx
@@ -1218,6 +1218,7 @@ SwShdwCursorOptionsTabPage::SwShdwCursorOptionsTabPage(weld::Container* pPage, w
, m_xFillSpaceRB(m_xBuilder->weld_radio_button("fillspace"))
, m_xCursorProtFrame(m_xBuilder->weld_frame("crsrprotframe"))
, m_xCursorInProtCB(m_xBuilder->weld_check_button("cursorinprot"))
+ , m_xDefaultAnchorType(m_xBuilder->weld_combo_box("cxDefaultAnchor"))
, m_xMathBaselineAlignmentCB(m_xBuilder->weld_check_button("mathbaseline"))
{
const SfxPoolItem* pItem = nullptr;
diff --git a/sw/source/ui/dialog/swdlgfact.cxx b/sw/source/ui/dialog/swdlgfact.cxx
index 05dccd0da12a..247e86b9e71b 100644
--- a/sw/source/ui/dialog/swdlgfact.cxx
+++ b/sw/source/ui/dialog/swdlgfact.cxx
@@ -807,9 +807,9 @@ VclPtr<AbstractSwAsciiFilterDlg> SwAbstractDialogFactory_Impl::CreateSwAsciiFilt
}
VclPtr<VclAbstractDialog> SwAbstractDialogFactory_Impl::CreateSwInsertBookmarkDlg(weld::Window *pParent,
- SwWrtShell &rSh, SfxRequest& rReq)
+ SwWrtShell &rSh, SfxRequest& rReq, OUString const*const pSelected)
{
- return VclPtr<AbstractGenericDialog_Impl>::Create(std::make_unique<SwInsertBookmarkDlg>(pParent, rSh, rReq));
+ return VclPtr<AbstractGenericDialog_Impl>::Create(std::make_unique<SwInsertBookmarkDlg>(pParent, rSh, rReq, pSelected));
}
VclPtr<AbstractSwBreakDlg> SwAbstractDialogFactory_Impl::CreateSwBreakDlg(weld::Window* pParent, SwWrtShell &rSh)
diff --git a/sw/source/ui/dialog/swdlgfact.hxx b/sw/source/ui/dialog/swdlgfact.hxx
index 579fe94562c2..a18a8df53998 100644
--- a/sw/source/ui/dialog/swdlgfact.hxx
+++ b/sw/source/ui/dialog/swdlgfact.hxx
@@ -654,7 +654,7 @@ public:
virtual VclPtr<SfxAbstractDialog> CreateSwAddressAbstractDlg(weld::Window* pParent, const SfxItemSet& rSet) override;
virtual VclPtr<AbstractSwAsciiFilterDlg> CreateSwAsciiFilterDlg(weld::Window* pParent, SwDocShell& rDocSh,
SvStream* pStream) override;
- virtual VclPtr<VclAbstractDialog> CreateSwInsertBookmarkDlg(weld::Window *pParent, SwWrtShell &rSh, SfxRequest& rReq) override;
+ virtual VclPtr<VclAbstractDialog> CreateSwInsertBookmarkDlg(weld::Window *pParent, SwWrtShell &rSh, SfxRequest& rReq, OUString const* pSelected) override;
virtual VclPtr<AbstractSwBreakDlg> CreateSwBreakDlg(weld::Window *pParent, SwWrtShell &rSh) override;
virtual VclPtr<VclAbstractDialog> CreateSwChangeDBDlg(SwView& rVw) override;
virtual VclPtr<SfxAbstractTabDialog> CreateSwCharDlg(weld::Window* pParent, SwView& pVw, const SfxItemSet& rCoreSet,
diff --git a/sw/source/ui/fldui/fldtdlg.cxx b/sw/source/ui/fldui/fldtdlg.cxx
index 8c1bb998fb85..6172d2bc7b8d 100644
--- a/sw/source/ui/fldui/fldtdlg.cxx
+++ b/sw/source/ui/fldui/fldtdlg.cxx
@@ -99,10 +99,10 @@ SwFieldDlg::~SwFieldDlg()
{
}
-void SwFieldDlg::EndDialog()
+void SwFieldDlg::EndDialog(int nResponse)
{
m_bClosing = true;
- SfxTabDialogController::EndDialog();
+ SfxTabDialogController::EndDialog(nResponse);
m_bClosing = false;
}
@@ -110,9 +110,16 @@ void SwFieldDlg::Close()
{
if (m_bClosing)
return;
- m_pBindings->GetDispatcher()->
+ const SfxPoolItem* pResult = m_pBindings->GetDispatcher()->
Execute(m_bDataBaseMode ? FN_INSERT_FIELD_DATA_ONLY : FN_INSERT_FIELD,
SfxCallMode::SYNCHRON|SfxCallMode::RECORD);
+ if (!pResult)
+ {
+ // If Execute action did fail for whatever reason, this means that request
+ // to close did fail or wasn't delivered to SwTextShell::ExecField().
+ // Just explicitly close dialog in this case.
+ SfxTabDialogController::EndDialog(RET_CLOSE);
+ }
}
void SwFieldDlg::Initialize(SfxChildWinInfo const *pInfo)
diff --git a/sw/source/ui/index/swuiidxmrk.cxx b/sw/source/ui/index/swuiidxmrk.cxx
index 33a0eab8cd69..5eca069b963b 100644
--- a/sw/source/ui/index/swuiidxmrk.cxx
+++ b/sw/source/ui/index/swuiidxmrk.cxx
@@ -955,7 +955,8 @@ SwIndexMarkFloatDlg::SwIndexMarkFloatDlg(SfxBindings* _pBindings,
"modules/swriter/ui/indexentry.ui", "IndexEntryDialog")
, m_aContent(m_xDialog, *m_xBuilder, bNew, *::GetActiveWrtShell())
{
- m_aContent.ReInitDlg(*::GetActiveWrtShell());
+ if (SwWrtShell* pSh = ::GetActiveWrtShell())
+ m_aContent.ReInitDlg(*pSh);
Initialize(pInfo);
}
diff --git a/sw/source/ui/misc/bookmark.cxx b/sw/source/ui/misc/bookmark.cxx
index 730d9f1d575d..4133b28a8914 100644
--- a/sw/source/ui/misc/bookmark.cxx
+++ b/sw/source/ui/misc/bookmark.cxx
@@ -89,6 +89,7 @@ IMPL_LINK_NOARG(SwInsertBookmarkDlg, ModifyHdl, weld::Entry&, void)
// allow to delete only if all bookmarks are recognized
m_xDeleteBtn->set_sensitive(nEntries > 0 && nSelectedEntries == nEntries && !m_bAreProtected);
m_xGotoBtn->set_sensitive(nEntries == 1 && nSelectedEntries == 1);
+ m_xEditTextBtn->set_sensitive(nEntries == 1 && nSelectedEntries == 1);
m_xRenameBtn->set_sensitive(nEntries == 1 && nSelectedEntries == 1 && !m_bAreProtected);
}
@@ -127,6 +128,7 @@ IMPL_LINK_NOARG(SwInsertBookmarkDlg, DeleteHdl, weld::Button&, void)
m_xDeleteBtn->set_sensitive(false);
m_xGotoBtn->set_sensitive(false);
+ m_xEditTextBtn->set_sensitive(false);
m_xRenameBtn->set_sensitive(false);
m_xInsertBtn->set_sensitive(false);
}
@@ -151,6 +153,11 @@ IMPL_LINK_NOARG(SwInsertBookmarkDlg, SelectionChangedHdl, weld::TreeView&, void)
if (!m_xBookmarksBox->has_focus())
return;
+ SelectionChanged();
+}
+
+void SwInsertBookmarkDlg::SelectionChanged()
+{
OUStringBuffer sEditBoxText;
int nSelectedRows = 0;
m_xBookmarksBox->selected_foreach([this, &sEditBoxText, &nSelectedRows](weld::TreeIter& rEntry){
@@ -166,6 +173,7 @@ IMPL_LINK_NOARG(SwInsertBookmarkDlg, SelectionChangedHdl, weld::TreeView&, void)
{
m_xInsertBtn->set_sensitive(false);
m_xGotoBtn->set_sensitive(nSelectedRows == 1);
+ m_xEditTextBtn->set_sensitive(nSelectedRows == 1);
m_xRenameBtn->set_sensitive(nSelectedRows == 1 && !m_bAreProtected);
m_xDeleteBtn->set_sensitive(!m_bAreProtected);
m_xEditBox->set_text(sEditBoxText.makeStringAndClear());
@@ -174,11 +182,23 @@ IMPL_LINK_NOARG(SwInsertBookmarkDlg, SelectionChangedHdl, weld::TreeView&, void)
{
m_xInsertBtn->set_sensitive(!m_bAreProtected);
m_xGotoBtn->set_sensitive(false);
+ m_xEditTextBtn->set_sensitive(false);
m_xRenameBtn->set_sensitive(false);
m_xDeleteBtn->set_sensitive(false);
}
}
+IMPL_LINK_NOARG(SwInsertBookmarkDlg, EditTextHdl, weld::Button&, void)
+{
+ if (!ValidateBookmarks())
+ return;
+ auto pSelected = m_xBookmarksBox->get_selected();
+ if (!pSelected)
+ return;
+
+ m_xBookmarksBox->start_editing(*pSelected);
+}
+
IMPL_LINK_NOARG(SwInsertBookmarkDlg, RenameHdl, weld::Button&, void)
{
if (!ValidateBookmarks())
@@ -204,6 +224,7 @@ IMPL_LINK_NOARG(SwInsertBookmarkDlg, RenameHdl, weld::Button&, void)
ValidateBookmarks();
m_xDeleteBtn->set_sensitive(false);
m_xGotoBtn->set_sensitive(false);
+ m_xEditTextBtn->set_sensitive(false);
m_xRenameBtn->set_sensitive(false);
m_xInsertBtn->set_sensitive(false);
}
@@ -229,6 +250,45 @@ IMPL_LINK(SwInsertBookmarkDlg, ChangeHideHdl, weld::ToggleButton&, rBox, void)
m_xConditionFT->set_sensitive(bHide);
}
+IMPL_LINK(SwInsertBookmarkDlg, EditingHdl, weld::TreeIter const&, rIter, bool)
+{
+ sw::mark::IMark const* const pBookmark(
+ reinterpret_cast<sw::mark::IMark*>(m_xBookmarksBox->get_id(rIter).toInt64()));
+ assert(pBookmark);
+ return pBookmark->IsExpanded()
+ && pBookmark->GetMarkPos().nNode == pBookmark->GetOtherMarkPos().nNode
+ && !m_xBookmarksBox->get_text(rIter).endsWith(u"…");
+}
+
+IMPL_LINK(SwInsertBookmarkDlg, EditedHdl, comma_issue, rIterString, bool)
+{
+ sw::mark::IMark const* const pBookmark(
+ reinterpret_cast<sw::mark::IMark*>(m_xBookmarksBox->get_id(rIterString.first).toInt64()));
+ assert(pBookmark);
+ bool bRet(false);
+ if (pBookmark->GetMarkPos() != pBookmark->GetOtherMarkPos())
+ {
+ if (pBookmark->GetMarkPos().nNode != pBookmark->GetOtherMarkPos().nNode)
+ {
+ return false; // don't allow editing if it spans multiple nodes
+ }
+ rSh.Push();
+ rSh.GotoMark(pBookmark);
+ // GetSelText only works for 1 paragraph, but it's checked above
+ if (rSh.GetSelText() != rIterString.second)
+ {
+ bRet = rSh.Replace(rIterString.second, false);
+ }
+ rSh.Pop(SwEditShell::PopMode::DeleteCurrent);
+ }
+ else if (pBookmark->IsExpanded() && !rIterString.second.isEmpty())
+ { // SwEditShell::Replace does nothing for empty selection
+ rSh.Insert(rIterString.second);
+ bRet = true;
+ }
+ return bRet;
+}
+
void SwInsertBookmarkDlg::GotoSelectedBookmark()
{
if (!ValidateBookmarks())
@@ -292,14 +352,15 @@ void SwInsertBookmarkDlg::PopulateTable()
{
if (IDocumentMarkAccess::MarkType::BOOKMARK == IDocumentMarkAccess::GetType(**ppBookmark))
{
- m_xBookmarksBox->InsertBookmark(*ppBookmark);
+ m_xBookmarksBox->InsertBookmark(rSh, *ppBookmark);
aTableBookmarks.emplace_back(*ppBookmark, (*ppBookmark)->GetName());
}
}
m_nLastBookmarksCount = pMarkAccess->getBookmarksCount();
}
-SwInsertBookmarkDlg::SwInsertBookmarkDlg(weld::Window* pParent, SwWrtShell& rS, SfxRequest& rRequest)
+SwInsertBookmarkDlg::SwInsertBookmarkDlg(weld::Window* pParent, SwWrtShell& rS, SfxRequest& rRequest,
+ OUString const* const pSelected)
: SfxDialogController(pParent, "modules/swriter/ui/insertbookmark.ui", "InsertBookmarkDialog")
, rSh(rS)
, rReq(rRequest)
@@ -309,6 +370,7 @@ SwInsertBookmarkDlg::SwInsertBookmarkDlg(weld::Window* pParent, SwWrtShell& rS,
, m_xInsertBtn(m_xBuilder->weld_button("insert"))
, m_xDeleteBtn(m_xBuilder->weld_button("delete"))
, m_xGotoBtn(m_xBuilder->weld_button("goto"))
+ , m_xEditTextBtn(m_xBuilder->weld_button("edittext"))
, m_xRenameBtn(m_xBuilder->weld_button("rename"))
, m_xHideCB(m_xBuilder->weld_check_button("hide"))
, m_xConditionFT(m_xBuilder->weld_label("condlabel"))
@@ -319,17 +381,24 @@ SwInsertBookmarkDlg::SwInsertBookmarkDlg(weld::Window* pParent, SwWrtShell& rS,
m_xBookmarksBox->connect_changed(LINK(this, SwInsertBookmarkDlg, SelectionChangedHdl));
m_xBookmarksBox->connect_row_activated(LINK(this, SwInsertBookmarkDlg, DoubleClickHdl));
m_xBookmarksBox->connect_column_clicked(LINK(this, SwInsertBookmarkDlg, HeaderBarClick));
+ m_xBookmarksBox->connect_editing(LINK(this, SwInsertBookmarkDlg, EditingHdl),
+ LINK(this, SwInsertBookmarkDlg, EditedHdl));
m_xEditBox->connect_changed(LINK(this, SwInsertBookmarkDlg, ModifyHdl));
m_xInsertBtn->connect_clicked(LINK(this, SwInsertBookmarkDlg, InsertHdl));
m_xDeleteBtn->connect_clicked(LINK(this, SwInsertBookmarkDlg, DeleteHdl));
m_xGotoBtn->connect_clicked(LINK(this, SwInsertBookmarkDlg, GotoHdl));
+ m_xEditTextBtn->connect_clicked(LINK(this, SwInsertBookmarkDlg, EditTextHdl));
m_xRenameBtn->connect_clicked(LINK(this, SwInsertBookmarkDlg, RenameHdl));
m_xHideCB->connect_toggled(LINK(this, SwInsertBookmarkDlg, ChangeHideHdl));
m_xDeleteBtn->set_sensitive(false);
m_xGotoBtn->set_sensitive(false);
+ m_xEditTextBtn->set_sensitive(false);
m_xRenameBtn->set_sensitive(false);
+ // select 3rd column, otherwise it'll pick 1st one
+ m_xBookmarksBox->set_column_editables({ false, false, true, false, false });
+
PopulateTable();
m_xEditBox->set_text(m_xBookmarksBox->GetNameProposal());
@@ -352,6 +421,18 @@ SwInsertBookmarkDlg::SwInsertBookmarkDlg(weld::Window* pParent, SwWrtShell& rS,
// disabled until "Hide" flag is not checked
m_xConditionED->set_sensitive(false);
m_xConditionFT->set_sensitive(false);
+
+ if (pSelected)
+ {
+ if (m_xBookmarksBox->SelectByName(*pSelected))
+ {
+ SelectionChanged();
+ // which is better, focus on a button or focus on the table row?
+ // as long as editing doesn't work via the TreeView with VCL
+ // widgets, better on button.
+ m_xEditTextBtn->grab_focus();
+ }
+ }
}
IMPL_LINK(SwInsertBookmarkDlg, HeaderBarClick, int, nColumn, void)
@@ -410,40 +491,27 @@ std::unique_ptr<weld::TreeIter> BookmarkTable::get_selected() const
return xIter;
}
-void BookmarkTable::InsertBookmark(sw::mark::IMark* pMark)
+void BookmarkTable::InsertBookmark(SwWrtShell& rSh, sw::mark::IMark* const pMark)
{
sw::mark::IBookmark* pBookmark = dynamic_cast<sw::mark::IBookmark*>(pMark);
assert(pBookmark);
- OUString sBookmarkNodeText = pBookmark->GetMarkStart().nNode.GetNode().GetTextNode()->GetText();
- sal_Int32 nBookmarkNodeTextPos = pBookmark->GetMarkStart().nContent.GetIndex();
- sal_Int32 nBookmarkTextLen = 0;
- bool bPulledAll = false;
- bool bPulling = false;
+ OUString sBookmarkNodeText;
static const sal_Int32 nMaxTextLen = 50;
if (pBookmark->IsExpanded())
{
- nBookmarkTextLen = pBookmark->GetMarkEnd().nContent.GetIndex() - nBookmarkNodeTextPos;
+ rSh.Push();
+ rSh.GotoMark(pBookmark);
+ rSh.GetSelectedText(sBookmarkNodeText, ParaBreakType::ToBlank);
+ rSh.Pop(SwEditShell::PopMode::DeleteCurrent);
}
- else
+ if (nMaxTextLen < sBookmarkNodeText.getLength())
{
- if (nBookmarkNodeTextPos == sBookmarkNodeText.getLength()) // no text after bookmark
- {
- nBookmarkNodeTextPos = std::max<sal_Int32>(0, nBookmarkNodeTextPos - nMaxTextLen);
- bPulling = true;
- if (nBookmarkNodeTextPos == 0)
- bPulledAll = true;
- }
- nBookmarkTextLen = sBookmarkNodeText.getLength() - nBookmarkNodeTextPos;
+ sBookmarkNodeText = sBookmarkNodeText.copy(0, nMaxTextLen);
+ ;
+ sBookmarkNodeText += u"…";
}
- bool bExceedsLength = nBookmarkTextLen > nMaxTextLen;
- nBookmarkTextLen = std::min<sal_Int32>(nMaxTextLen, nBookmarkTextLen);
- sBookmarkNodeText = sBookmarkNodeText.copy(nBookmarkNodeTextPos, nBookmarkTextLen).trim();
- if (bExceedsLength)
- sBookmarkNodeText += "...";
- else if (bPulling && !bPulledAll)
- sBookmarkNodeText = "..." + sBookmarkNodeText;
OUString sHidden = SwResId(STR_BOOKMARK_NO);
if (pBookmark->IsHidden())
@@ -482,12 +550,13 @@ sw::mark::IMark* BookmarkTable::GetBookmarkByName(const OUString& sName)
return reinterpret_cast<sw::mark::IMark*>(m_xControl->get_id(*xEntry).toInt64());
}
-void BookmarkTable::SelectByName(const OUString& sName)
+bool BookmarkTable::SelectByName(const OUString& sName)
{
auto xEntry = GetRowByBookmarkName(sName);
if (!xEntry)
- return;
+ return false;
select(*xEntry);
+ return true;
}
OUString BookmarkTable::GetNameProposal() const
diff --git a/sw/source/uibase/config/StoredChapterNumbering.cxx b/sw/source/uibase/config/StoredChapterNumbering.cxx
index 5c94fc56110b..eea0c260bbf5 100644
--- a/sw/source/uibase/config/StoredChapterNumbering.cxx
+++ b/sw/source/uibase/config/StoredChapterNumbering.cxx
@@ -152,7 +152,7 @@ public:
SwXNumberingRules::SetPropertiesToNumFormat(
aNumberFormat,
charStyleName,
- nullptr, nullptr, nullptr, nullptr,
+ nullptr, nullptr, nullptr, nullptr, nullptr,
props);
SwNumRulesWithName *const pRules(GetOrCreateRules());
pRules->SetNumFormat(nIndex, aNumberFormat, charStyleName);
diff --git a/sw/source/uibase/config/cfgitems.cxx b/sw/source/uibase/config/cfgitems.cxx
index efbbdf4154b4..a5e8718aa718 100644
--- a/sw/source/uibase/config/cfgitems.cxx
+++ b/sw/source/uibase/config/cfgitems.cxx
@@ -41,6 +41,7 @@ SwDocDisplayItem::SwDocDisplayItem() :
bCharHiddenText =
bBookmarks =
bManualBreak = true;
+ m_xDefaultAnchor = 1; //FLY_TO_CHAR
};
// Item for the Settings dialog, page document view
@@ -55,6 +56,7 @@ SwDocDisplayItem::SwDocDisplayItem(const SwViewOption& rVOpt ) :
bCharHiddenText = rVOpt.IsShowHiddenChar(true);
bBookmarks = rVOpt.IsShowBookmarks(true);
bManualBreak = rVOpt.IsLineBreak(true);
+ m_xDefaultAnchor = rVOpt.GetDefaultAnchor();
}
SfxPoolItem* SwDocDisplayItem::Clone( SfxItemPool* ) const
@@ -75,7 +77,8 @@ bool SwDocDisplayItem::operator==( const SfxPoolItem& rAttr ) const
bSoftHyphen == rItem.bSoftHyphen &&
bCharHiddenText == rItem.bCharHiddenText &&
bBookmarks == rItem.bBookmarks &&
- bManualBreak == rItem.bManualBreak );
+ bManualBreak == rItem.bManualBreak &&
+ m_xDefaultAnchor == rItem.m_xDefaultAnchor);
}
void SwDocDisplayItem::FillViewOptions( SwViewOption& rVOpt) const
@@ -88,6 +91,7 @@ void SwDocDisplayItem::FillViewOptions( SwViewOption& rVOpt) const
rVOpt.SetShowHiddenChar(bCharHiddenText );
rVOpt.SetShowBookmarks(bBookmarks );
rVOpt.SetLineBreak (bManualBreak );
+ rVOpt.SetDefaultAnchor( m_xDefaultAnchor );
}
SwElemItem::SwElemItem() :
diff --git a/sw/source/uibase/config/usrpref.cxx b/sw/source/uibase/config/usrpref.cxx
index cfc6142314c6..7f368346f66c 100644
--- a/sw/source/uibase/config/usrpref.cxx
+++ b/sw/source/uibase/config/usrpref.cxx
@@ -83,6 +83,7 @@ SwMasterUsrPref::~SwMasterUsrPref()
}
static const auto g_UpdateLinkIndex = 17;
+const auto g_DefaultAnchor = 22;
Sequence<OUString> SwContentViewConfig::GetPropertyNames() const
{
@@ -93,8 +94,8 @@ Sequence<OUString> SwContentViewConfig::GetPropertyNames() const
"Display/DrawingControl", // 2
"Display/FieldCode", // 3
"Display/Note", // 4
- "Display/ShowContentTips", // 5
- "NonprintingCharacter/MetaCharacters", // 6
+ "Display/ShowContentTips", // 5
+ "NonprintingCharacter/MetaCharacters", // 6
"NonprintingCharacter/ParagraphEnd", // 7
"NonprintingCharacter/OptionalHyphen", // 8
"NonprintingCharacter/Space", // 9
@@ -109,7 +110,8 @@ Sequence<OUString> SwContentViewConfig::GetPropertyNames() const
"Update/Field", // 18
"Update/Chart", // 19
"Display/ShowInlineTooltips", // 20
- "Display/UseHeaderFooterMenu" // 21
+ "Display/UseHeaderFooterMenu", // 21
+ "Display/DefaultAnchor" // 22
};
#if defined(__GNUC__) && !defined(__clang__)
// clang 8.0.0 says strcmp isn't constexpr
@@ -177,8 +179,9 @@ void SwContentViewConfig::ImplCommit()
case 19: bVal = rParent.IsUpdateCharts(); break;// "Update/Chart"
case 20: bVal = rParent.IsShowInlineTooltips(); break;// "Display/ShowInlineTooltips"
case 21: bVal = rParent.IsUseHeaderFooterMenu(); break;// "Display/UseHeaderFooterMenu"
+ case 22: pValues[nProp] <<= rParent.GetDefaultAnchor(); break;// "Display/DefaultAnchor"
}
- if (nProp != g_UpdateLinkIndex)
+ if ((nProp != g_UpdateLinkIndex) && (nProp != g_DefaultAnchor))
pValues[nProp] <<= bVal;
}
PutProperties(aNames, aValues);
@@ -196,7 +199,8 @@ void SwContentViewConfig::Load()
{
if(pValues[nProp].hasValue())
{
- bool bSet = nProp != g_UpdateLinkIndex && *o3tl::doAccess<bool>(pValues[nProp]);
+ bool bSet = ((nProp != g_UpdateLinkIndex) && (nProp != g_DefaultAnchor))
+ && *o3tl::doAccess<bool>(pValues[nProp]);
switch(nProp)
{
case 0: rParent.SetGraphic(bSet); break;// "Display/GraphicObject",
@@ -227,6 +231,13 @@ void SwContentViewConfig::Load()
case 19: rParent.SetUpdateCharts(bSet); break;// "Update/Chart"
case 20: rParent.SetShowInlineTooltips(bSet); break;// "Display/ShowInlineTooltips"
case 21: rParent.SetUseHeaderFooterMenu(bSet); break;// "Display/UseHeaderFooterMenu"
+ case 22:
+ {
+ sal_Int32 nSet = 0;
+ pValues[nProp] >>= nSet;
+ rParent.SetDefaultAnchor(nSet);
+ }
+ break; // "Display/DefaultAnchor"
}
}
}
diff --git a/sw/source/uibase/config/viewopt.cxx b/sw/source/uibase/config/viewopt.cxx
index 6059ef5ec8c8..6fa49a4258f0 100644
--- a/sw/source/uibase/config/viewopt.cxx
+++ b/sw/source/uibase/config/viewopt.cxx
@@ -83,6 +83,7 @@ bool SwViewOption::IsEqualFlags( const SwViewOption &rOpt ) const
&& mbHideWhitespaceMode == rOpt.mbHideWhitespaceMode
&& m_bShowPlaceHolderFields == rOpt.m_bShowPlaceHolderFields
&& m_bIdle == rOpt.m_bIdle
+ && m_nDefaultAnchor == rOpt.m_nDefaultAnchor
#ifdef DBG_UTIL
// correspond to the statements in ui/config/cfgvw.src
&& m_bTest1 == rOpt.IsTest1()
@@ -210,6 +211,8 @@ SwViewOption::SwViewOption() :
m_bIdle = true;
+ m_nDefaultAnchor = 1; //FLY_TO_CHAR
+
#ifdef DBG_UTIL
// correspond to the statements in ui/config/cfgvw.src
m_bTest1 = m_bTest2 = m_bTest3 = m_bTest4 =
@@ -248,6 +251,7 @@ SwViewOption::SwViewOption(const SwViewOption& rVOpt)
mbHideWhitespaceMode = rVOpt.mbHideWhitespaceMode;
m_bShowPlaceHolderFields = rVOpt.m_bShowPlaceHolderFields;
m_bIdle = rVOpt.m_bIdle;
+ m_nDefaultAnchor = rVOpt.m_nDefaultAnchor;
#ifdef DBG_UTIL
m_bTest1 = rVOpt.m_bTest1;
@@ -289,6 +293,7 @@ SwViewOption& SwViewOption::operator=( const SwViewOption &rVOpt )
mbHideWhitespaceMode = rVOpt.mbHideWhitespaceMode;
m_bShowPlaceHolderFields = rVOpt.m_bShowPlaceHolderFields;
m_bIdle = rVOpt.m_bIdle;
+ m_nDefaultAnchor = rVOpt.m_nDefaultAnchor;
#ifdef DBG_UTIL
m_bTest1 = rVOpt.m_bTest1;
@@ -360,6 +365,24 @@ sal_uInt16 GetHtmlMode(const SwDocShell* pShell)
return nRet;
}
+RndStdIds SwViewOption::GetDefaultAnchorType()
+{
+ switch ( m_nDefaultAnchor )
+ {
+ case 0:
+ return RndStdIds::FLY_AT_PARA; //0
+ break;
+ case 1:
+ return RndStdIds::FLY_AT_CHAR; //4
+ break;
+ case 2:
+ return RndStdIds::FLY_AS_CHAR; //1
+ break;
+ default:
+ return RndStdIds::FLY_AT_CHAR; //4
+ }//switch
+}
+
Color& SwViewOption::GetDocColor()
{
return s_aDocColor;
diff --git a/sw/source/uibase/dochdl/swdtflvr.cxx b/sw/source/uibase/dochdl/swdtflvr.cxx
index d63d58850aa0..51ca02aaa524 100644
--- a/sw/source/uibase/dochdl/swdtflvr.cxx
+++ b/sw/source/uibase/dochdl/swdtflvr.cxx
@@ -3950,7 +3950,7 @@ bool SwTransferable::PrivateDrop( SwWrtShell& rSh, const Point& rDragPt,
if ( bTableSel )
{
/* delete table contents not cells */
- rSrcSh.Delete();
+ rSrcSh.Delete(false);
}
else
{
diff --git a/sw/source/uibase/docvw/OverlayRanges.hxx b/sw/source/uibase/docvw/OverlayRanges.hxx
index f8ea5694b128..8deecac241fd 100644
--- a/sw/source/uibase/docvw/OverlayRanges.hxx
+++ b/sw/source/uibase/docvw/OverlayRanges.hxx
@@ -23,6 +23,7 @@
#include <svx/sdr/overlay/overlayobject.hxx>
#include <basegfx/range/b2drange.hxx>
+#include <memory>
#include <vector>
#include <memory>
diff --git a/sw/source/uibase/docvw/ShadowOverlayObject.hxx b/sw/source/uibase/docvw/ShadowOverlayObject.hxx
index 4b333cf4c06f..506b801d0991 100644
--- a/sw/source/uibase/docvw/ShadowOverlayObject.hxx
+++ b/sw/source/uibase/docvw/ShadowOverlayObject.hxx
@@ -20,6 +20,10 @@
#ifndef INCLUDED_SW_SOURCE_UIBASE_DOCVW_SHADOWOVERLAYOBJECT_HXX
#define INCLUDED_SW_SOURCE_UIBASE_DOCVW_SHADOWOVERLAYOBJECT_HXX
+#include <sal/config.h>
+
+#include <memory>
+
#include <svx/sdr/overlay/overlayobject.hxx>
#include <memory>
diff --git a/sw/source/uibase/docvw/SidebarTxtControl.cxx b/sw/source/uibase/docvw/SidebarTxtControl.cxx
index bdbb0e2804e4..62387bc03330 100644
--- a/sw/source/uibase/docvw/SidebarTxtControl.cxx
+++ b/sw/source/uibase/docvw/SidebarTxtControl.cxx
@@ -270,9 +270,7 @@ void SidebarTextControl::KeyInput( const KeyEvent& rKeyEvt )
}
else
{
- std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), "modules/swriter/ui/inforeadonlydialog.ui"));
- std::unique_ptr<weld::MessageDialog> xQuery(xBuilder->weld_message_dialog("InfoReadonlyDialog"));
- xQuery->run();
+ mrDocView.GetWrtShell().InfoReadOnlyDialog();
}
}
if (bDone)
diff --git a/sw/source/uibase/docvw/edtwin.cxx b/sw/source/uibase/docvw/edtwin.cxx
index 20f5761f1361..28a672963e83 100644
--- a/sw/source/uibase/docvw/edtwin.cxx
+++ b/sw/source/uibase/docvw/edtwin.cxx
@@ -163,6 +163,9 @@
#include <sfx2/event.hxx>
#include <memory>
+#include "../../core/crsr/callnk.hxx"
+
+
using namespace sw::mark;
using namespace ::com::sun::star;
@@ -1838,9 +1841,7 @@ KEYINPUT_CHECKTABLE_INSDEL:
}
else if (!rSh.IsCursorInParagraphMetadataField())
{
- std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), "modules/swriter/ui/inforeadonlydialog.ui"));
- std::unique_ptr<weld::MessageDialog> xInfo(xBuilder->weld_message_dialog("InfoReadonlyDialog"));
- xInfo->run();
+ rSh.InfoReadOnlyDialog();
eKeyState = SwKeyState::End;
}
break;
@@ -1993,9 +1994,7 @@ KEYINPUT_CHECKTABLE_INSDEL:
}
else if (!rSh.IsCursorInParagraphMetadataField())
{
- std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), "modules/swriter/ui/inforeadonlydialog.ui"));
- std::unique_ptr<weld::MessageDialog> xInfo(xBuilder->weld_message_dialog("InfoReadonlyDialog"));
- xInfo->run();
+ rSh.InfoReadOnlyDialog();
eKeyState = SwKeyState::End;
}
break;
@@ -3700,7 +3699,7 @@ void SwEditWin::MouseButtonDown(const MouseEvent& _rMEvt)
// select content of Input Field, but exclude CH_TXT_ATR_INPUTFIELDSTART
// and CH_TXT_ATR_INPUTFIELDEND
rSh.SttSelect();
- rSh.SelectText( aFieldAtPos.pFndTextAttr->GetStart() + 1,
+ rSh.SelectTextModel( aFieldAtPos.pFndTextAttr->GetStart() + 1,
*(aFieldAtPos.pFndTextAttr->End()) - 1 );
}
// don't reset here any longer so that, in case through MouseMove
@@ -3730,8 +3729,8 @@ void SwEditWin::MouseButtonDown(const MouseEvent& _rMEvt)
// select content of Input Field, but exclude CH_TXT_ATR_INPUTFIELDSTART
// and CH_TXT_ATR_INPUTFIELDEND
rSh.SttSelect();
- rSh.SelectText( aFieldAtPos.pFndTextAttr->GetStart() + 1,
- *(aFieldAtPos.pFndTextAttr->End()) - 1 );
+ rSh.SelectTextModel( aFieldAtPos.pFndTextAttr->GetStart() + 1,
+ *(aFieldAtPos.pFndTextAttr->End()) - 1 );
}
}
@@ -6287,8 +6286,7 @@ OUString SwEditWin::GetSurroundingText() const
rSh.GetSelectedText( sReturn, ParaBreakType::ToOnlyCR );
else if( !rSh.HasSelection() )
{
- SwPosition *pPos = rSh.GetCursor()->GetPoint();
- const sal_Int32 nPos = pPos->nContent.GetIndex();
+ rSh.Push();
// get the sentence around the cursor
rSh.HideCursor();
@@ -6297,8 +6295,7 @@ OUString SwEditWin::GetSurroundingText() const
rSh.GoEndSentence();
rSh.GetSelectedText( sReturn, ParaBreakType::ToOnlyCR );
- pPos->nContent = nPos;
- rSh.ClearMark();
+ rSh.Pop(SwCursorShell::PopMode::DeleteCurrent);
rSh.HideCursor();
}
@@ -6318,18 +6315,20 @@ Selection SwEditWin::GetSurroundingTextSelection() const
{
// Return the position of the visible cursor in the sentence
// around the visible cursor.
- SwPosition *pPos = rSh.GetCursor()->GetPoint();
- const sal_Int32 nPos = pPos->nContent.GetIndex();
+ TextFrameIndex const nPos(rSh.GetCursorPointAsViewIndex());
+
+ // store shell state *before* Push
+ ::std::unique_ptr<SwCallLink> pLink(::std::make_unique<SwCallLink>(rSh));
+ rSh.Push();
rSh.HideCursor();
rSh.GoStartSentence();
- const sal_Int32 nStartPos = rSh.GetCursor()->GetPoint()->nContent.GetIndex();
+ TextFrameIndex const nStartPos(rSh.GetCursorPointAsViewIndex());
- pPos->nContent = nPos;
- rSh.ClearMark();
+ rSh.Pop(SwCursorShell::PopMode::DeleteCurrent, ::std::move(pLink));
rSh.ShowCursor();
- return Selection( nPos - nStartPos, nPos - nStartPos );
+ return Selection(sal_Int32(nPos - nStartPos), sal_Int32(nPos - nStartPos));
}
}
diff --git a/sw/source/uibase/frmdlg/frmmgr.cxx b/sw/source/uibase/frmdlg/frmmgr.cxx
index e09d42623ee1..db6b036a7cc8 100644
--- a/sw/source/uibase/frmdlg/frmmgr.cxx
+++ b/sw/source/uibase/frmdlg/frmmgr.cxx
@@ -88,7 +88,9 @@ SwFlyFrameAttrMgr::SwFlyFrameAttrMgr( bool bNew, SwWrtShell* pSh, Frmmgr_Type nT
if (nType == Frmmgr_Type::GRF || nType == Frmmgr_Type::OLE)
{
- m_aSet.Put(SwFormatAnchor(RndStdIds::FLY_AT_CHAR));
+ // Default anchor for new graphics and objects is at-char, except for Math objects.
+ SwViewOption aViewOpt(*pSh->GetViewOptions());
+ m_aSet.Put(SwFormatAnchor(aViewOpt.GetDefaultAnchorType()));//RndStdIds::FLY_AT_CHAR
}
}
else if ( nType == Frmmgr_Type::NONE )
diff --git a/sw/source/uibase/inc/bookmark.hxx b/sw/source/uibase/inc/bookmark.hxx
index 3a8ee1506d58..01ae7f416c56 100644
--- a/sw/source/uibase/inc/bookmark.hxx
+++ b/sw/source/uibase/inc/bookmark.hxx
@@ -33,8 +33,8 @@ class BookmarkTable
std::unique_ptr<weld::TreeIter> GetRowByBookmarkName(const OUString& sName);
public:
BookmarkTable(std::unique_ptr<weld::TreeView> xControl);
- void InsertBookmark(sw::mark::IMark* pMark);
- void SelectByName(const OUString& sName);
+ void InsertBookmark(SwWrtShell & rSh, sw::mark::IMark* pMark);
+ bool SelectByName(const OUString& sName);
sw::mark::IMark* GetBookmarkByName(const OUString& sName);
OUString GetNameProposal() const;
@@ -45,6 +45,7 @@ public:
void remove(const weld::TreeIter& rIter) { m_xControl->remove(rIter); }
void select(const weld::TreeIter& rIter) { m_xControl->select(rIter); }
void remove_selection() { m_xControl->remove_selection(); }
+ OUString get_text(const weld::TreeIter& rIter) const { return m_xControl->get_text(rIter, 2); }
OUString get_id(const weld::TreeIter& rIter) const { return m_xControl->get_id(rIter); }
void set_sort_indicator(TriState eState, int nColumn = -1) { m_xControl->set_sort_indicator(eState, nColumn); }
void selected_foreach(const std::function<bool(weld::TreeIter&)>& func) { m_xControl->selected_foreach(func); }
@@ -52,6 +53,10 @@ public:
void connect_changed(const Link<weld::TreeView&, void>& rLink) { m_xControl->connect_changed(rLink); }
void connect_row_activated(const Link<weld::TreeView&, bool>& rLink) { m_xControl->connect_row_activated(rLink); }
void connect_column_clicked(const Link<int, void>& rLink) { m_xControl->connect_column_clicked(rLink); }
+ void connect_editing(const Link<const weld::TreeIter&, bool>& rStartLink,
+ const Link<::std::pair<weld::TreeIter const&, OUString> const&, bool>& rEndLink) { m_xControl->connect_editing(rStartLink, rEndLink); }
+ void set_column_editables(::std::vector<bool> const& rEditables) { m_xControl->set_column_editables(rEditables); }
+ void start_editing(weld::TreeIter const& rIter) { m_xControl->start_editing(rIter); }
void make_sorted() { m_xControl->make_sorted(); }
bool get_sort_order() const { return m_xControl->get_sort_order(); }
void set_sort_order(bool bAscending) { m_xControl->set_sort_order(bAscending); }
@@ -75,6 +80,7 @@ class SwInsertBookmarkDlg : public SfxDialogController
std::unique_ptr<weld::Button> m_xInsertBtn;
std::unique_ptr<weld::Button> m_xDeleteBtn;
std::unique_ptr<weld::Button> m_xGotoBtn;
+ std::unique_ptr<weld::Button> m_xEditTextBtn;
std::unique_ptr<weld::Button> m_xRenameBtn;
std::unique_ptr<weld::CheckButton> m_xHideCB;
std::unique_ptr<weld::Label> m_xConditionFT;
@@ -85,12 +91,16 @@ class SwInsertBookmarkDlg : public SfxDialogController
DECL_LINK(ModifyHdl, weld::Entry&, void);
DECL_LINK(InsertHdl, weld::Button&, void);
DECL_LINK(DeleteHdl, weld::Button&, void);
+ DECL_LINK(EditTextHdl, weld::Button&, void);
DECL_LINK(RenameHdl, weld::Button&, void);
DECL_LINK(GotoHdl, weld::Button&, void);
DECL_LINK(SelectionChangedHdl, weld::TreeView&, void);
DECL_LINK(DoubleClickHdl, weld::TreeView&, bool);
DECL_LINK(HeaderBarClick, int, void);
DECL_LINK(ChangeHideHdl, weld::ToggleButton&, void);
+ DECL_LINK(EditingHdl, weld::TreeIter const&, bool);
+ typedef ::std::pair<weld::TreeIter const&, OUString> const& comma_issue;
+ DECL_LINK(EditedHdl, comma_issue, bool);
// Fill table with bookmarks
void PopulateTable();
@@ -101,9 +111,10 @@ class SwInsertBookmarkDlg : public SfxDialogController
bool ValidateBookmarks();
bool HaveBookmarksChanged();
void GotoSelectedBookmark();
+ void SelectionChanged();
public:
- SwInsertBookmarkDlg(weld::Window* pParent, SwWrtShell& rSh, SfxRequest& rReq);
+ SwInsertBookmarkDlg(weld::Window* pParent, SwWrtShell& rSh, SfxRequest& rReq, OUString const* pSelected);
virtual ~SwInsertBookmarkDlg() override;
};
diff --git a/sw/source/uibase/inc/cfgitems.hxx b/sw/source/uibase/inc/cfgitems.hxx
index 297ac1846faa..11fc13baecc0 100644
--- a/sw/source/uibase/inc/cfgitems.hxx
+++ b/sw/source/uibase/inc/cfgitems.hxx
@@ -51,6 +51,7 @@ class SW_DLLPUBLIC SwDocDisplayItem : public SfxPoolItem
bool bCharHiddenText :1;
bool bBookmarks :1;
bool bManualBreak :1;
+ sal_Int32 m_xDefaultAnchor;
public:
SwDocDisplayItem();
diff --git a/sw/source/uibase/inc/fldtdlg.hxx b/sw/source/uibase/inc/fldtdlg.hxx
index 159881ed1192..9546b99ffa0d 100644
--- a/sw/source/uibase/inc/fldtdlg.hxx
+++ b/sw/source/uibase/inc/fldtdlg.hxx
@@ -53,7 +53,7 @@ public:
void ActivateDatabasePage();
void ShowReferencePage();
virtual void Close() override;
- virtual void EndDialog() override;
+ virtual void EndDialog(int nResponse) override;
virtual void Activate() override;
};
diff --git a/sw/source/uibase/inc/optpage.hxx b/sw/source/uibase/inc/optpage.hxx
index 8de1394b633e..d85091a4572e 100644
--- a/sw/source/uibase/inc/optpage.hxx
+++ b/sw/source/uibase/inc/optpage.hxx
@@ -244,6 +244,8 @@ class SwShdwCursorOptionsTabPage : public SfxTabPage
std::unique_ptr<weld::Frame> m_xCursorProtFrame;
std::unique_ptr<weld::CheckButton> m_xCursorInProtCB;
+ std::unique_ptr<weld::ComboBox> m_xDefaultAnchorType;
+
std::unique_ptr<weld::CheckButton> m_xMathBaselineAlignmentCB;
public:
diff --git a/sw/source/uibase/inc/wrtsh.hxx b/sw/source/uibase/inc/wrtsh.hxx
index 6ec17d5b0e78..decf24bb4a08 100644
--- a/sw/source/uibase/inc/wrtsh.hxx
+++ b/sw/source/uibase/inc/wrtsh.hxx
@@ -140,6 +140,7 @@ public:
// is there a text- or frameselection?
bool HasSelection() const { return SwCursorShell::HasSelection() ||
IsMultiSelection() || IsSelFrameMode() || IsObjSelected(); }
+ bool Pop(SwCursorShell::PopMode, ::std::unique_ptr<SwCallLink> const pLink);
bool Pop(SwCursorShell::PopMode = SwCursorShell::PopMode::DeleteStack);
void EnterStdMode();
@@ -279,7 +280,7 @@ typedef bool (SwWrtShell:: *FNSimpleMove)();
bool DelLeft();
// also deletes the frame or sets the cursor in the frame when bDelFrame == false
- bool DelRight();
+ bool DelRight(bool isReplaceHeuristic = false);
void DelToEndOfPara();
void DelToStartOfPara();
bool DelToEndOfSentence();
@@ -489,6 +490,9 @@ typedef bool (SwWrtShell:: *FNSimpleMove)();
/// Inserts a new annotation/comment at the current cursor position / selection.
void InsertPostIt(SwFieldMgr& rFieldMgr, const SfxRequest& rReq);
+ virtual void InfoReadOnlyDialog() const override;
+ virtual bool WarnHiddenSectionDialog() const override;
+
private:
SAL_DLLPRIVATE void OpenMark();
diff --git a/sw/source/uibase/lingu/hhcwrp.cxx b/sw/source/uibase/lingu/hhcwrp.cxx
index 52ee334ec21d..55f09447c623 100644
--- a/sw/source/uibase/lingu/hhcwrp.cxx
+++ b/sw/source/uibase/lingu/hhcwrp.cxx
@@ -326,7 +326,7 @@ void SwHHCWrapper::ChangeText_impl( const OUString &rNewText, bool bKeepAttribut
// restore those for the new text
m_rWrtShell.GetCurAttr( aItemSet );
- m_rWrtShell.Delete();
+ m_rWrtShell.Delete(true);
m_rWrtShell.Insert( rNewText );
// select new inserted text (currently the Point is right after the new text)
@@ -346,7 +346,7 @@ void SwHHCWrapper::ChangeText_impl( const OUString &rNewText, bool bKeepAttribut
}
else
{
- m_rWrtShell.Delete();
+ m_rWrtShell.Delete(true);
m_rWrtShell.Insert( rNewText );
}
}
diff --git a/sw/source/uibase/ribbar/inputwin.cxx b/sw/source/uibase/ribbar/inputwin.cxx
index 1c278137cb16..fdab2b6ec5de 100644
--- a/sw/source/uibase/ribbar/inputwin.cxx
+++ b/sw/source/uibase/ribbar/inputwin.cxx
@@ -245,7 +245,7 @@ void SwInputWindow::ShowWin()
if( pWrtShell->SwCursorShell::HasSelection() )
{
pWrtShell->StartUndo( SwUndoId::DELETE );
- pWrtShell->Delete();
+ pWrtShell->Delete(false);
if( SwUndoId::EMPTY != pWrtShell->EndUndo( SwUndoId::DELETE ))
{
m_bCallUndo = true;
@@ -451,7 +451,7 @@ void SwInputWindow::DelBoxContent()
pWrtShell->MoveSection( GoCurrSection, fnSectionStart );
pWrtShell->SetMark();
pWrtShell->MoveSection( GoCurrSection, fnSectionEnd );
- pWrtShell->SwEditShell::Delete();
+ pWrtShell->SwEditShell::Delete(false);
pWrtShell->EndAllAction();
}
}
diff --git a/sw/source/uibase/ribbar/workctrl.cxx b/sw/source/uibase/ribbar/workctrl.cxx
index f62059f661e5..d7260fdfe1d2 100644
--- a/sw/source/uibase/ribbar/workctrl.cxx
+++ b/sw/source/uibase/ribbar/workctrl.cxx
@@ -97,15 +97,18 @@ VclPtr<SfxPopupWindow> SwTbxAutoTextCtrl::CreatePopupWindow()
ScopedVclPtrInstance<PopupMenu> pPopup;
SwGlossaryList* pGlossaryList = ::GetGlossaryList();
const size_t nGroupCount = pGlossaryList->GetGroupCount();
+ o3tl::sorted_vector<OUString> titles;
for(size_t i = 1; i <= nGroupCount; ++i)
{
OUString sTitle = pGlossaryList->GetGroupTitle(i - 1);
const sal_uInt16 nBlockCount = pGlossaryList->GetBlockCount(i -1);
+ auto const [it, _] = titles.insert(sTitle);
+ size_t const menuIndex(::std::distance(titles.begin(), it));
if(nBlockCount)
{
sal_uInt16 nIndex = static_cast<sal_uInt16>(100*i);
// but insert without extension
- pPopup->InsertItem( i, sTitle);
+ pPopup->InsertItem(i, sTitle, MenuItemBits::NONE, {}, menuIndex);
VclPtrInstance<PopupMenu> pSub;
pSub->SetSelectHdl(aLnk);
pPopup->SetPopupMenu(i, pSub);
diff --git a/sw/source/uibase/shells/drwtxtex.cxx b/sw/source/uibase/shells/drwtxtex.cxx
index 60bdf16380be..0e3ba07c3973 100644
--- a/sw/source/uibase/shells/drwtxtex.cxx
+++ b/sw/source/uibase/shells/drwtxtex.cxx
@@ -545,12 +545,8 @@ void SwDrawTextShell::Execute( SfxRequest &rReq )
const SvxFieldData* pField = pOLV->GetFieldAtCursor();
if (const SvxURLField* pURLField = dynamic_cast<const SvxURLField*>(pField))
{
- SfxStringItem aUrl(SID_FILE_NAME, pURLField->GetURL());
- SfxStringItem aTarget(SID_TARGETNAME, pURLField->GetTargetFrame());
- SfxBoolItem aNewView(SID_OPEN_NEW_VIEW, false);
- SfxBoolItem aBrowsing(SID_BROWSE, true);
- GetView().GetViewFrame()->GetDispatcher()->ExecuteList(
- SID_OPENDOC, SfxCallMode::SYNCHRON, { &aUrl, &aTarget, &aNewView, &aBrowsing });
+ ::LoadURL(GetShell(), pURLField->GetURL(), LoadUrlFlags::NONE,
+ pURLField->GetTargetFrame());
}
}
break;
diff --git a/sw/source/uibase/shells/tabsh.cxx b/sw/source/uibase/shells/tabsh.cxx
index 073fe280c924..e7260ef1492f 100644
--- a/sw/source/uibase/shells/tabsh.cxx
+++ b/sw/source/uibase/shells/tabsh.cxx
@@ -181,7 +181,7 @@ static std::shared_ptr<SwTableRep> lcl_TableParamToItemSet( SfxItemSet& rSet, Sw
rSet.Put(*aBoxDirection);
}
- bool bSelectAll = rSh.StartsWithTable() && rSh.ExtendedSelectedAll();
+ bool bSelectAll = rSh.StartsWith_() == SwCursorShell::StartsWith::Table && rSh.ExtendedSelectedAll();
bool bTableSel = rSh.IsTableMode() || bSelectAll;
if(!bTableSel)
{
diff --git a/sw/source/uibase/shells/textfld.cxx b/sw/source/uibase/shells/textfld.cxx
index c65d5d65da6a..072a38ab81b5 100644
--- a/sw/source/uibase/shells/textfld.cxx
+++ b/sw/source/uibase/shells/textfld.cxx
@@ -199,7 +199,7 @@ void SwTextShell::ExecField(SfxRequest &rReq)
SwCursorShell::GetTextFieldAtCursor(rSh.GetCursor(), true))))
{
rSh.SttSelect();
- rSh.SelectText(
+ rSh.SelectTextModel(
SwCursorShell::StartOfInputFieldAtPos( *(rSh.GetCursor()->Start()) ) + 1,
SwCursorShell::EndOfInputFieldAtPos( *(rSh.GetCursor()->Start()) ) - 1 );
}
diff --git a/sw/source/uibase/shells/textsh1.cxx b/sw/source/uibase/shells/textsh1.cxx
index aa91c39de2e8..c65efe7c1c12 100644
--- a/sw/source/uibase/shells/textsh1.cxx
+++ b/sw/source/uibase/shells/textsh1.cxx
@@ -377,10 +377,7 @@ void SwTextShell::Execute(SfxRequest &rReq)
if (rWrtSh.HasReadonlySel() && !rWrtSh.CursorInsideInputField())
{
// Only break if there's something to do; don't nag with the dialog otherwise
- auto xInfo(std::make_unique<weld::GenericDialogController>(
- rWrtSh.GetView().GetFrameWeld(), "modules/swriter/ui/inforeadonlydialog.ui",
- "InfoReadonlyDialog"));
- xInfo->run();
+ rWrtSh.InfoReadOnlyDialog();
break;
}
SwRewriter aRewriter;
@@ -693,11 +690,20 @@ void SwTextShell::Execute(SfxRequest &rReq)
{
OUString sName = static_cast<const SfxStringItem*>(pItem)->GetValue();
rWrtSh.SetBookmark( vcl::KeyCode(), sName );
+ break;
+ }
+ [[fallthrough]];
+ }
+ case FN_EDIT_BOOKMARK:
+ {
+ ::std::optional<OUString> oName;
+ if (pItem)
+ {
+ oName.emplace(static_cast<const SfxStringItem*>(pItem)->GetValue());
}
- else
{
SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
- ScopedVclPtr<VclAbstractDialog> pDlg(pFact->CreateSwInsertBookmarkDlg(GetView().GetFrameWeld(), rWrtSh, rReq));
+ ScopedVclPtr<VclAbstractDialog> pDlg(pFact->CreateSwInsertBookmarkDlg(GetView().GetFrameWeld(), rWrtSh, rReq, oName ? &*oName : nullptr));
pDlg->Execute();
}
diff --git a/sw/source/uibase/uitest/uiobject.cxx b/sw/source/uibase/uitest/uiobject.cxx
index ecdfd68ad6a8..f44f2b5a70fb 100644
--- a/sw/source/uibase/uitest/uiobject.cxx
+++ b/sw/source/uibase/uitest/uiobject.cxx
@@ -13,6 +13,7 @@
#include <view.hxx>
#include <wrtsh.hxx>
#include <navipi.hxx>
+#include <ndtxt.hxx>
#include <sfx2/sidebar/Sidebar.hxx>
#include <sfx2/viewfrm.hxx>
@@ -89,14 +90,30 @@ void SwEditWinUIObject::execute(const OUString& rAction,
{
auto itr = rParameters.find("START_POS");
OUString aStartPos = itr->second;
- sal_Int32 nStartPos = aStartPos.toInt32();
+ TextFrameIndex const nStartPos(aStartPos.toInt32());
itr = rParameters.find("END_POS");
assert(itr != rParameters.end());
OUString aEndPos = itr->second;
- sal_Int32 nEndPos = aEndPos.toInt32();
-
- getWrtShell(mxEditWin).SelectText(nStartPos, nEndPos);
+ TextFrameIndex const nEndPos(aEndPos.toInt32());
+
+ auto & shell = getWrtShell(mxEditWin);
+ if (shell.GetCursor_()->GetPoint()->nNode.GetNode().GetTextNode())
+ {
+ shell.Push();
+ shell.MovePara(GoCurrPara, fnParaEnd);
+ TextFrameIndex const len(shell.GetCursorPointAsViewIndex());
+ shell.Pop(SwCursorShell::PopMode::DeleteCurrent);
+ SAL_WARN_IF(
+ sal_Int32(nStartPos) < 0 || nStartPos > len || sal_Int32(nEndPos) < 0 || nEndPos > len, "sw.ui",
+ "SELECT START/END_POS " << sal_Int32(nStartPos) << ".." << sal_Int32(nEndPos) << " outside 0.." << sal_Int32(len));
+ shell.SelectTextView(
+ std::clamp(nStartPos, TextFrameIndex(0), len), std::clamp(nEndPos, TextFrameIndex(0), len));
+ }
+ else
+ {
+ SAL_WARN("sw.ui", "SELECT without SwTextNode");
+ }
}
}
else if (rAction == "SIDEBAR")
diff --git a/sw/source/uibase/uiview/view.cxx b/sw/source/uibase/uiview/view.cxx
index 296140abbae7..03df8259d09f 100644
--- a/sw/source/uibase/uiview/view.cxx
+++ b/sw/source/uibase/uiview/view.cxx
@@ -1166,6 +1166,10 @@ void SwView::WriteUserData( OUString &rUserData, bool bBrowse )
static bool lcl_IsOwnDocument( SwView& rView )
{
+ if (::officecfg::Office::Common::Load::ViewPositionForAnyUser::get())
+ {
+ return true;
+ }
uno::Reference<document::XDocumentPropertiesSupplier> xDPS(
rView.GetDocShell()->GetModel(), uno::UNO_QUERY_THROW);
uno::Reference<document::XDocumentProperties> xDocProps
diff --git a/sw/source/uibase/uiview/viewmdi.cxx b/sw/source/uibase/uiview/viewmdi.cxx
index 4fd706e84667..5fb06156c1a2 100644
--- a/sw/source/uibase/uiview/viewmdi.cxx
+++ b/sw/source/uibase/uiview/viewmdi.cxx
@@ -127,14 +127,15 @@ void SwView::SetZoom_( const Size &rEditSize, SvxZoomType eZoomType,
const MapMode aTmpMap( MapUnit::MapTwip );
const Size aWindowSize( GetEditWin().PixelToLogic( rEditSize, aTmpMap ) );
- if( UseOnPage::Mirror == rDesc.GetUseOn() ) // mirrored pages
- {
- const SvxLRSpaceItem &rLeftLRSpace = rDesc.GetLeft().GetLRSpace();
- aPageSize.AdjustWidth(std::abs( rLeftLRSpace.GetLeft() - rLRSpace.GetLeft() ) );
- }
-
if( SvxZoomType::OPTIMAL == eZoomType )
{
+ // unclear if this is useful for OPTIMAL, or completely useless?
+ if( UseOnPage::Mirror == rDesc.GetUseOn() ) // mirrored pages
+ {
+ const SvxLRSpaceItem &rLeftLRSpace = rDesc.GetLeft().GetLRSpace();
+ aPageSize.AdjustWidth(std::abs( rLeftLRSpace.GetLeft() - rLRSpace.GetLeft() ) );
+ }
+
if (!pPostItMgr->HasNotes() || !pPostItMgr->ShowNotes())
aPageSize.AdjustWidth( -( rLRSpace.GetLeft() + rLRSpace.GetRight() + nLeftOfst * 2 ) );
lLeftMargin = rLRSpace.GetLeft() + DOCUMENTBORDER + nLeftOfst;
diff --git a/sw/source/uibase/uiview/viewport.cxx b/sw/source/uibase/uiview/viewport.cxx
index 2fa7e12f5afe..fb40aa453798 100644
--- a/sw/source/uibase/uiview/viewport.cxx
+++ b/sw/source/uibase/uiview/viewport.cxx
@@ -323,8 +323,9 @@ void SwView::SetVisArea( const Point &rPt, bool bUpdateScrollbar )
void SwView::CheckVisArea()
{
- m_pHScrollbar->SetAuto( m_pWrtShell->GetViewOptions()->getBrowseMode() &&
- !GetViewFrame()->GetFrame().IsInPlace() );
+ if (m_pHScrollbar)
+ m_pHScrollbar->SetAuto( m_pWrtShell->GetViewOptions()->getBrowseMode() &&
+ !GetViewFrame()->GetFrame().IsInPlace() );
if ( IsDocumentBorder() )
{
if ( m_aVisArea.Left() != DOCUMENTBORDER ||
diff --git a/sw/source/uibase/utlui/content.cxx b/sw/source/uibase/utlui/content.cxx
index ff05af4f2a3b..891e786f63d9 100644
--- a/sw/source/uibase/utlui/content.cxx
+++ b/sw/source/uibase/utlui/content.cxx
@@ -19,6 +19,7 @@
#include <comphelper/string.hxx>
#include <svl/urlbmk.hxx>
+#include <svl/stritem.hxx>
#include <osl/thread.h>
#include <sal/log.hxx>
#include <tools/urlobj.hxx>
@@ -348,7 +349,7 @@ void SwContentType::Init(bool* pbInvalidateWindow)
&lcl_IsUiVisibleBookmark);
m_sTypeToken.clear();
const bool bProtectedBM = m_pWrtShell->getIDocumentSettingAccess().get(DocumentSettingId::PROTECT_BOOKMARKS);
- m_bEdit = !bProtectedBM;
+ m_bEdit = true;
m_bDelete = !bProtectedBM;
}
break;
@@ -1296,7 +1297,7 @@ VclPtr<PopupMenu> SwContentTree::CreateContextMenu()
const bool bProtectBM = (ContentTypeId::BOOKMARK == nContentType)
&& m_pActiveShell->getIDocumentSettingAccess().get(DocumentSettingId::PROTECT_BOOKMARKS);
const bool bEditable = pContType->IsEditable() &&
- ((bVisible && !bProtected && !bProtectBM) || ContentTypeId::REGION == nContentType);
+ ((bVisible && !bProtected) || ContentTypeId::REGION == nContentType);
const bool bDeletable = pContType->IsDeletable() &&
((bVisible && !bProtected && !bProtectBM) || ContentTypeId::REGION == nContentType);
const bool bRenamable = bEditable && !bReadonly &&
@@ -3534,20 +3535,27 @@ void SwContentTree::EditEntry(SvTreeListEntry const * pEntry, EditEntryMode nMod
nSlot = FN_FORMAT_FRAME_DLG;
break;
case ContentTypeId::BOOKMARK :
- assert(!m_pActiveShell->getIDocumentSettingAccess().get(DocumentSettingId::PROTECT_BOOKMARKS));
if(nMode == EditEntryMode::DELETE)
{
+ assert(!m_pActiveShell->getIDocumentSettingAccess().get(DocumentSettingId::PROTECT_BOOKMARKS));
IDocumentMarkAccess* const pMarkAccess = m_pActiveShell->getIDocumentMarkAccess();
pMarkAccess->deleteMark(pMarkAccess->findMark(pCnt->GetName()), false);
}
else if(nMode == EditEntryMode::RENAME)
{
+ assert(!m_pActiveShell->getIDocumentSettingAccess().get(DocumentSettingId::PROTECT_BOOKMARKS));
uno::Reference< frame::XModel > xModel = m_pActiveShell->GetView().GetDocShell()->GetBaseModel();
uno::Reference< text::XBookmarksSupplier > xBkms(xModel, uno::UNO_QUERY);
xNameAccess = xBkms->getBookmarks();
}
else
- nSlot = FN_INSERT_BOOKMARK;
+ {
+ // allowed despite PROTECT_BOOKMARKS: the dialog itself enforces it
+ SfxStringItem const name(FN_EDIT_BOOKMARK, pCnt->GetName());
+ SfxPoolItem const* args[2] = { &name, nullptr };
+ m_pActiveShell->GetView().GetViewFrame()->
+ GetDispatcher()->Execute(FN_EDIT_BOOKMARK, SfxCallMode::SYNCHRON, args);
+ }
break;
case ContentTypeId::REGION :
diff --git a/sw/source/uibase/wrtsh/delete.cxx b/sw/source/uibase/wrtsh/delete.cxx
index 5f6ed36c25e2..ec0a88e64cf0 100644
--- a/sw/source/uibase/wrtsh/delete.cxx
+++ b/sw/source/uibase/wrtsh/delete.cxx
@@ -104,7 +104,7 @@ void SwWrtShell::DelLine()
SetMark();
SwCursorShell::RightMargin();
- bool bRet = Delete();
+ bool bRet = Delete(false);
Pop(SwCursorShell::PopMode::DeleteCurrent);
if( bRet )
UpdateAttr();
@@ -114,7 +114,7 @@ void SwWrtShell::DelToStartOfLine()
{
OpenMark();
SwCursorShell::LeftMargin();
- bool bRet = Delete();
+ bool bRet = Delete(false);
CloseMark( bRet );
}
@@ -122,7 +122,7 @@ void SwWrtShell::DelToEndOfLine()
{
OpenMark();
SwCursorShell::RightMargin();
- bool bRet = Delete();
+ bool bRet = Delete(false);
CloseMark( bRet );
}
@@ -164,7 +164,7 @@ bool SwWrtShell::DelLeft()
{
SwActContext aActContext(this);
ResetCursorStack();
- Delete();
+ Delete(false);
UpdateAttr();
}
if( IsBlockMode() )
@@ -275,20 +275,15 @@ bool SwWrtShell::DelLeft()
}
}
}
- bool bRet = Delete();
+ bool bRet = Delete(true);
if( !bRet && bSwap )
SwCursorShell::SwapPam();
CloseMark( bRet );
- if (!bRet)
- { // false indicates HasReadonlySel failed
- std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetView().GetFrameWeld(), "modules/swriter/ui/inforeadonlydialog.ui"));
- std::unique_ptr<weld::MessageDialog> xInfo(xBuilder->weld_message_dialog("InfoReadonlyDialog"));
- xInfo->run();
- }
+
return bRet;
}
-bool SwWrtShell::DelRight()
+bool SwWrtShell::DelRight(bool const isReplaceHeuristic)
{
// Will be or'ed, if a tableselection exists;
// will here be implemented on SelectionType::Table
@@ -315,7 +310,7 @@ bool SwWrtShell::DelRight()
{
SwActContext aActContext(this);
ResetCursorStack();
- Delete();
+ Delete(isReplaceHeuristic);
UpdateAttr();
}
if( IsBlockMode() )
@@ -398,14 +393,8 @@ bool SwWrtShell::DelRight()
OpenMark();
SwCursorShell::Right(1, CRSR_SKIP_CELLS);
- bRet = Delete();
+ bRet = Delete(true);
CloseMark( bRet );
- if (!bRet)
- { // false indicates HasReadonlySel failed
- std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetView().GetFrameWeld(), "modules/swriter/ui/inforeadonlydialog.ui"));
- std::unique_ptr<weld::MessageDialog> xInfo(xBuilder->weld_message_dialog("InfoReadonlyDialog"));
- xInfo->run();
- }
break;
case SelectionType::Frame:
@@ -510,7 +499,7 @@ void SwWrtShell::DelToEndOfPara()
Pop(SwCursorShell::PopMode::DeleteCurrent);
return;
}
- bool bRet = Delete();
+ bool bRet = Delete(false);
Pop(SwCursorShell::PopMode::DeleteCurrent);
if( bRet )
UpdateAttr();
@@ -527,7 +516,7 @@ void SwWrtShell::DelToStartOfPara()
Pop(SwCursorShell::PopMode::DeleteCurrent);
return;
}
- bool bRet = Delete();
+ bool bRet = Delete(false);
Pop(SwCursorShell::PopMode::DeleteCurrent);
if( bRet )
UpdateAttr();
@@ -542,7 +531,7 @@ void SwWrtShell::DelToStartOfSentence()
if(IsStartOfDoc())
return;
OpenMark();
- bool bRet = BwdSentence_() && Delete();
+ bool bRet = BwdSentence_() && Delete(false);
CloseMark( bRet );
}
@@ -574,7 +563,7 @@ bool SwWrtShell::DelToEndOfSentence()
}
else
{
- bRet = FwdSentence_() && Delete();
+ bRet = FwdSentence_() && Delete(false);
}
CloseMark( bRet );
return bRet;
@@ -595,7 +584,7 @@ void SwWrtShell::DelNxtWord()
else
EndWrd();
- bool bRet = Delete();
+ bool bRet = Delete(false);
if( bRet )
UpdateAttr();
else
@@ -619,7 +608,7 @@ void SwWrtShell::DelPrvWord()
else
SttWrd();
}
- bool bRet = Delete();
+ bool bRet = Delete(false);
if( bRet )
UpdateAttr();
else
diff --git a/sw/source/uibase/wrtsh/move.cxx b/sw/source/uibase/wrtsh/move.cxx
index 76f4baedaba5..b0dcdc522de7 100644
--- a/sw/source/uibase/wrtsh/move.cxx
+++ b/sw/source/uibase/wrtsh/move.cxx
@@ -218,12 +218,25 @@ bool SwWrtShell::GoStart( bool bKeepArea, bool *pMoveTable,
*pMoveTable = false;
return true;
}
+ SwTableNode const*const pTable(getShellCursor(false)->GetPoint()->nNode.GetNode().FindTableNode());
+ assert(pTable);
if( MoveTable( GotoCurrTable, fnTableStart ) || bDontMoveRegion )
{
if ( pMoveTable )
*pMoveTable = true;
return true;
}
+ else if (SwCursor const*const pCursor = getShellCursor(false);
+ pTable->GetNodes()[pTable->GetIndex()+1]->EndOfSectionIndex()
+ < pCursor->GetPoint()->nNode.GetNode().GetIndex()
+ && pMoveTable != nullptr // only set by SelAll()
+ // problem: cursor isn't inside 1st cell, and didn't move there
+ // workaround: try to move cursor outside of table for SelAll()
+ && MoveOutOfTable())
+ {
+ assert(!*pMoveTable);
+ return true;
+ }
else if( bBoxSelection && pMoveTable )
{
// JP 09.01.96: We have a box selection (or an empty cell)
@@ -258,15 +271,40 @@ bool SwWrtShell::GoStart( bool bKeepArea, bool *pMoveTable,
else if ( bKeepArea )
return true;
}
- // Regions ???
+
+ // first try to move to the start of the current SwSection
return SwCursorShell::MoveRegion( GotoCurrRegionAndSkip, fnRegionStart ) ||
- SwCursorShell::SttEndDoc(true);
+ (pMoveTable != nullptr
+ // move to start of text - if in different table, move out
+ ? MoveStartText()
+ // TODO who needs SttEndDoc for other case?
+ : SwCursorShell::SttEndDoc(true));
}
bool SwWrtShell::GoEnd(bool bKeepArea, const bool *pMoveTable)
{
- if ( pMoveTable && *pMoveTable )
- return MoveTable( GotoCurrTable, fnTableEnd );
+ if (pMoveTable && *pMoveTable) // only in SelAll()
+ {
+ SwTableNode const*const pTable(getShellCursor(false)->GetPoint()->nNode.GetNode().FindTableNode());
+ assert(pTable);
+ if (MoveTable(GotoCurrTable, fnTableEnd))
+ {
+ return true;
+ }
+ else if (SwCursor const*const pCursor = getShellCursor(false);
+ pCursor->GetPoint()->nNode.GetNode().GetIndex()
+ < pTable->GetNodes()[pTable->EndOfSectionIndex()-1]->StartOfSectionIndex()
+ // problem: cursor isn't inside 1st cell, and didn't move there
+ // workaround: try to move cursor outside of table for SelAll()
+ && MoveOutOfTable())
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
if ( IsCursorInTable() )
{
diff --git a/sw/source/uibase/wrtsh/select.cxx b/sw/source/uibase/wrtsh/select.cxx
index 90664ae098f5..17d4c068416a 100644
--- a/sw/source/uibase/wrtsh/select.cxx
+++ b/sw/source/uibase/wrtsh/select.cxx
@@ -141,7 +141,10 @@ void SwWrtShell::SelAll()
bool bHasWholeTabSelection = HasWholeTabSelection();
bool bIsCursorInTable = IsCursorInTable();
- if (!bHasWholeTabSelection)
+ if (!bHasWholeTabSelection
+ && ( !bIsCursorInTable
+ || getShellCursor(false)->GetNode(false).FindTableNode() == nullptr
+ || !ExtendedSelectedAll())) // ESA inside table -> else branch
{
if ( IsSelection() && IsCursorPtAtEnd() )
SwapPam();
@@ -157,30 +160,35 @@ void SwWrtShell::SelAll()
bIsFullSel &= !MoveSection( GoCurrSection, fnSectionEnd);
Pop(SwCursorShell::PopMode::DeleteCurrent);
GoStart(true, &bMoveTable, false, !bIsFullSel);
+ SttSelect();
+ GoEnd(true, &bMoveTable);
}
else
{
- EnterStdMode();
- SttEndDoc(true);
+ if (MoveOutOfTable())
+ { // select outer text
+ EnterStdMode(); // delete m_pTableCursor
+// GoStart(true, &bMoveTable, false, true);
+ MoveSection(GoCurrSection, fnSectionStart); // don't move into prev table
+ SttSelect();
+ MoveSection(GoCurrSection, fnSectionEnd); // don't move to different cell
+ }
+ else
+ {
+ TrySelectOuterTable();
+ }
}
- SttSelect();
- GoEnd(true, &bMoveTable);
- bool bNeedsExtendedSelectAll = StartsWithTable();
+ bool bNeedsExtendedSelectAll = StartsWith_() != StartsWith::None;
- // If the cursor was in a table, then we only need the extended select
- // all if the whole table is already selected, to still allow selecting
- // only a single cell or a single table before selecting the whole
- // document.
+ // the GoEnd() could have created a table selection, if so avoid ESA.
if (bNeedsExtendedSelectAll && bIsCursorInTable)
- bNeedsExtendedSelectAll = bHasWholeTabSelection;
+ {
+ bNeedsExtendedSelectAll = !HasWholeTabSelection();
+ }
if (bNeedsExtendedSelectAll)
{
- // Disable table cursor to make sure getShellCursor() returns m_pCurrentCursor, not m_pTableCursor.
- if (IsTableMode())
- TableCursorToCursor();
- // Do the extended select all on m_pCurrentCursor.
ExtendedSelectAll(/*bFootnotes =*/ false);
}
@@ -914,7 +922,7 @@ int SwWrtShell::IntelligentCut(SelectionType nSelection, bool bCut)
ClearMark();
SetMark();
SwCursorShell::Left(1,CRSR_SKIP_CHARS);
- SwFEShell::Delete();
+ SwFEShell::Delete(true);
Pop(SwCursorShell::PopMode::DeleteCurrent);
}
}
@@ -928,7 +936,7 @@ int SwWrtShell::IntelligentCut(SelectionType nSelection, bool bCut)
ClearMark();
SetMark();
SwCursorShell::Right(1,CRSR_SKIP_CHARS);
- SwFEShell::Delete();
+ SwFEShell::Delete(true);
Pop(SwCursorShell::PopMode::DeleteCurrent);
}
}
diff --git a/sw/source/uibase/wrtsh/wrtsh1.cxx b/sw/source/uibase/wrtsh/wrtsh1.cxx
index 9eb00d361b9a..d8d7d77e209c 100644
--- a/sw/source/uibase/wrtsh/wrtsh1.cxx
+++ b/sw/source/uibase/wrtsh/wrtsh1.cxx
@@ -48,6 +48,7 @@
#include <editeng/svxacorr.hxx>
#include <editeng/ulspitem.hxx>
#include <vcl/graph.hxx>
+#include <vcl/svapp.hxx>
#include <sfx2/printer.hxx>
#include <unotools/charclass.hxx>
#include <comphelper/storagehelper.hxx>
@@ -118,6 +119,9 @@
#include <comphelper/lok.hxx>
#include <memory>
+#include "../../core/crsr/callnk.hxx"
+
+
using namespace sw::mark;
using namespace com::sun::star;
namespace {
@@ -213,11 +217,6 @@ void SwWrtShell::Insert( const OUString &rStr )
bCallIns = m_bIns /*|| bHasSel*/;
bool bDeleted = false;
- typedef svl::Items<RES_CHRATR_BEGIN, RES_CHRATR_RSID - 1,
- RES_CHRATR_RSID + 1, RES_CHRATR_END - 1,
- RES_TXTATR_CHARFMT, RES_TXTATR_CHARFMT> CharItems;
- SfxItemSet aCharAttrSet(GetAttrPool(), CharItems{});
-
if( bHasSel || ( !m_bIns && SelectHiddenRange() ) )
{
// Only here parenthesizing, because the normal
@@ -235,37 +234,19 @@ void SwWrtShell::Insert( const OUString &rStr )
aRewriter.AddRule(UndoArg3, aTmpStr);
}
- // tdf#79717 Save character formatting of the start of the selection
- const SwPosition *pStart = GetCursor()->Start();
- SwPaM aPaM(pStart->nNode.GetNode(), pStart->nContent.GetIndex(),
- pStart->nNode.GetNode(), pStart->nContent.GetIndex() + 1);
- GetPaMAttr(&aPaM, aCharAttrSet);
-
StartUndo(SwUndoId::REPLACE, &aRewriter);
bStarted = true;
- bDeleted = DelRight();
+ Push();
+ // let's interpret a selection within the same node as "replace"
+ bDeleted = DelRight(GetCursor()->GetPoint()->nNode == GetCursor()->GetMark()->nNode);
+ Pop(SwCursorShell::PopMode::DeleteCurrent); // Restore selection (if tracking changes)
+ NormalizePam(false); // tdf#127635 put point at the end of deletion
+ ClearMark();
}
bCallIns ?
SwEditShell::Insert2( rStr, bDeleted ) : SwEditShell::Overwrite( rStr );
- if( bDeleted )
- {
- // tdf#79717 Restore formatting of the deleted selection
- SwPosition* pEnd = GetCursor()->Start();
- SwPaM aPaM(pEnd->nNode.GetNode(), pEnd->nContent.GetIndex() - rStr.getLength(),
- pEnd->nNode.GetNode(), pEnd->nContent.GetIndex());
-
- std::set<sal_uInt16> aAttribs;
- for (sal_uInt16 i = RES_CHRATR_BEGIN; i < RES_CHRATR_END; ++i)
- if (i != sal_uInt16(RES_CHRATR_RSID))
- aAttribs.insert(aAttribs.end(), i);
- aAttribs.insert(aAttribs.end(), RES_TXTATR_CHARFMT);
- ResetAttr(aAttribs, &aPaM);
-
- SetAttrSet(aCharAttrSet, SetAttrMode::DEFAULT, &aPaM);
- }
-
if( bStarted )
{
EndUndo();
@@ -1663,7 +1644,7 @@ void SwWrtShell::AutoCorrect( SvxAutoCorrect& rACorr, sal_Unicode cChar )
StartUndo( SwUndoId::REPLACE, &aRewriter );
bStarted = true;
- DelRight();
+ DelRight(true);
}
SwEditShell::AutoCorrect( rACorr, IsInsMode(), cChar );
@@ -1725,7 +1706,13 @@ SwWrtShell::~SwWrtShell()
bool SwWrtShell::Pop(SwCursorShell::PopMode const eDelete)
{
- bool bRet = SwCursorShell::Pop(eDelete);
+ ::std::unique_ptr<SwCallLink> pLink(::std::make_unique<SwCallLink>(*this));
+ return Pop(eDelete, ::std::move(pLink));
+}
+
+bool SwWrtShell::Pop(SwCursorShell::PopMode const eDelete, ::std::unique_ptr<SwCallLink> pLink)
+{
+ bool bRet = SwCursorShell::Pop(eDelete, ::std::move(pLink));
if( bRet && IsSelection() )
{
m_fnSetCursor = &SwWrtShell::SetCursorKillSel;
@@ -2010,4 +1997,24 @@ void SwWrtShell::InsertPostIt(SwFieldMgr& rFieldMgr, const SfxRequest& rReq)
}
}
+void SwWrtShell::InfoReadOnlyDialog() const
+{
+ std::unique_ptr<weld::Builder>
+ xBuilder(Application::CreateBuilder(GetView().GetFrameWeld(),
+ "modules/swriter/ui/inforeadonlydialog.ui"));
+ std::unique_ptr<weld::MessageDialog>
+ xInfo(xBuilder->weld_message_dialog("InfoReadonlyDialog"));
+ xInfo->run();
+}
+
+bool SwWrtShell::WarnHiddenSectionDialog() const
+{
+ std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(
+ GetView().GetFrameWeld(), "modules/swriter/ui/warnhiddensectiondialog.ui"));
+ std::unique_ptr<weld::MessageDialog> xQuery(
+ xBuilder->weld_message_dialog("WarnHiddenSectionDialog"));
+
+ return (RET_YES == xQuery->run());
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/uibase/wrtsh/wrtsh2.cxx b/sw/source/uibase/wrtsh/wrtsh2.cxx
index 82d7c27cb0c6..57769ab6e881 100644
--- a/sw/source/uibase/wrtsh/wrtsh2.cxx
+++ b/sw/source/uibase/wrtsh/wrtsh2.cxx
@@ -488,30 +488,24 @@ bool SwWrtShell::ClickToINetGrf( const Point& rDocPt, LoadUrlFlags nFilter )
return bRet;
}
-void LoadURL( SwViewShell& rVSh, const OUString& rURL, LoadUrlFlags nFilter,
- const OUString& rTargetFrameName )
+static void LoadURL(SwView& rView, const OUString& rURL, LoadUrlFlags nFilter,
+ const OUString& rTargetFrameName)
{
- OSL_ENSURE( !rURL.isEmpty(), "what should be loaded here?" );
- if( rURL.isEmpty() )
- return ;
+ SwDocShell* pDShell = rView.GetDocShell();
+ OSL_ENSURE( pDShell, "No DocShell?!");
+ SfxViewFrame& rViewFrame = *rView.GetViewFrame();
- // The shell could be 0 also!!!!!
- if ( dynamic_cast<const SwCursorShell*>( &rVSh) == nullptr )
+ if (!SfxObjectShell::AllowedLinkProtocolFromDocument(rURL, pDShell, rView.GetFrameWeld()))
return;
// We are doing tiledRendering, let the client handles the URL loading,
// unless we are jumping to a TOC mark.
if (comphelper::LibreOfficeKit::isActive() && !rURL.startsWith("#"))
{
- rVSh.GetSfxViewShell()->libreOfficeKitViewCallback(LOK_CALLBACK_HYPERLINK_CLICKED, rURL.toUtf8().getStr());
+ rView.libreOfficeKitViewCallback(LOK_CALLBACK_HYPERLINK_CLICKED, rURL.toUtf8().getStr());
return;
}
- //A CursorShell is always a WrtShell
- SwWrtShell &rSh = static_cast<SwWrtShell&>(rVSh);
-
- SwDocShell* pDShell = rSh.GetView().GetDocShell();
- OSL_ENSURE( pDShell, "No DocShell?!");
OUString sTargetFrame(rTargetFrameName);
if (sTargetFrame.isEmpty() && pDShell)
{
@@ -526,8 +520,7 @@ void LoadURL( SwViewShell& rVSh, const OUString& rURL, LoadUrlFlags nFilter,
OUString sReferer;
if( pDShell && pDShell->GetMedium() )
sReferer = pDShell->GetMedium()->GetName();
- SfxViewFrame* pViewFrame = rSh.GetView().GetViewFrame();
- SfxFrameItem aView( SID_DOCFRAME, pViewFrame );
+ SfxFrameItem aView( SID_DOCFRAME, &rViewFrame );
SfxStringItem aName( SID_FILE_NAME, rURL );
SfxStringItem aTargetFrameName( SID_TARGETNAME, sTargetFrame );
SfxStringItem aReferer( SID_REFERER, sReferer );
@@ -548,10 +541,27 @@ void LoadURL( SwViewShell& rVSh, const OUString& rURL, LoadUrlFlags nFilter,
nullptr
};
- pViewFrame->GetDispatcher()->GetBindings()->Execute( SID_OPENDOC, aArr,
+ rViewFrame.GetDispatcher()->GetBindings()->Execute( SID_OPENDOC, aArr,
SfxCallMode::ASYNCHRON|SfxCallMode::RECORD );
}
+void LoadURL( SwViewShell& rVSh, const OUString& rURL, LoadUrlFlags nFilter,
+ const OUString& rTargetFrameName )
+{
+ OSL_ENSURE( !rURL.isEmpty(), "what should be loaded here?" );
+ if( rURL.isEmpty() )
+ return ;
+
+ // The shell could be 0 also!!!!!
+ if ( dynamic_cast<const SwCursorShell*>( &rVSh) == nullptr )
+ return;
+
+ //A CursorShell is always a WrtShell
+ SwWrtShell &rSh = static_cast<SwWrtShell&>(rVSh);
+
+ ::LoadURL(rSh.GetView(), rURL, nFilter, rTargetFrameName);
+}
+
void SwWrtShell::NavigatorPaste( const NaviContentBookmark& rBkmk,
const sal_uInt16 nAction )
{
diff --git a/sw/uiconfig/sglobal/popupmenu/table.xml b/sw/uiconfig/sglobal/popupmenu/table.xml
index 09470cab6d34..3ae9ad5f688e 100644
--- a/sw/uiconfig/sglobal/popupmenu/table.xml
+++ b/sw/uiconfig/sglobal/popupmenu/table.xml
@@ -122,6 +122,7 @@
</menu:menupopup>
</menu:menu>
<menu:menuseparator/>
+ <menu:menuitem menu:id=".uno:FieldDialog"/>
<menu:menuitem menu:id=".uno:AcceptTrackedChange"/>
<menu:menuitem menu:id=".uno:RejectTrackedChange"/>
<menu:menuitem menu:id=".uno:NextTrackedChange"/>
@@ -134,6 +135,7 @@
<menu:menuitem menu:id=".uno:OpenSmartTagMenuOnCursor"/>
<menu:menuitem menu:id=".uno:ThesaurusFromContext"/>
<menu:menuseparator/>
+ <menu:menuitem menu:id=".uno:TableNumberFormatDialog"/>
<menu:menuitem menu:id=".uno:InsertCaptionDialog"/>
<menu:menuitem menu:id=".uno:TableDialog"/>
</menu:menupopup>
diff --git a/sw/uiconfig/sweb/popupmenu/table.xml b/sw/uiconfig/sweb/popupmenu/table.xml
index 09470cab6d34..3ae9ad5f688e 100644
--- a/sw/uiconfig/sweb/popupmenu/table.xml
+++ b/sw/uiconfig/sweb/popupmenu/table.xml
@@ -122,6 +122,7 @@
</menu:menupopup>
</menu:menu>
<menu:menuseparator/>
+ <menu:menuitem menu:id=".uno:FieldDialog"/>
<menu:menuitem menu:id=".uno:AcceptTrackedChange"/>
<menu:menuitem menu:id=".uno:RejectTrackedChange"/>
<menu:menuitem menu:id=".uno:NextTrackedChange"/>
@@ -134,6 +135,7 @@
<menu:menuitem menu:id=".uno:OpenSmartTagMenuOnCursor"/>
<menu:menuitem menu:id=".uno:ThesaurusFromContext"/>
<menu:menuseparator/>
+ <menu:menuitem menu:id=".uno:TableNumberFormatDialog"/>
<menu:menuitem menu:id=".uno:InsertCaptionDialog"/>
<menu:menuitem menu:id=".uno:TableDialog"/>
</menu:menupopup>
diff --git a/sw/uiconfig/swform/popupmenu/table.xml b/sw/uiconfig/swform/popupmenu/table.xml
index 09470cab6d34..3ae9ad5f688e 100644
--- a/sw/uiconfig/swform/popupmenu/table.xml
+++ b/sw/uiconfig/swform/popupmenu/table.xml
@@ -122,6 +122,7 @@
</menu:menupopup>
</menu:menu>
<menu:menuseparator/>
+ <menu:menuitem menu:id=".uno:FieldDialog"/>
<menu:menuitem menu:id=".uno:AcceptTrackedChange"/>
<menu:menuitem menu:id=".uno:RejectTrackedChange"/>
<menu:menuitem menu:id=".uno:NextTrackedChange"/>
@@ -134,6 +135,7 @@
<menu:menuitem menu:id=".uno:OpenSmartTagMenuOnCursor"/>
<menu:menuitem menu:id=".uno:ThesaurusFromContext"/>
<menu:menuseparator/>
+ <menu:menuitem menu:id=".uno:TableNumberFormatDialog"/>
<menu:menuitem menu:id=".uno:InsertCaptionDialog"/>
<menu:menuitem menu:id=".uno:TableDialog"/>
</menu:menupopup>
diff --git a/sw/uiconfig/swriter/popupmenu/table.xml b/sw/uiconfig/swriter/popupmenu/table.xml
index 2a302ef1a2cd..1f8ca8ee499c 100644
--- a/sw/uiconfig/swriter/popupmenu/table.xml
+++ b/sw/uiconfig/swriter/popupmenu/table.xml
@@ -125,6 +125,7 @@
</menu:menupopup>
</menu:menu>
<menu:menuseparator/>
+ <menu:menuitem menu:id=".uno:FieldDialog"/>
<menu:menuitem menu:id=".uno:AcceptTrackedChange"/>
<menu:menuitem menu:id=".uno:RejectTrackedChange"/>
<menu:menuitem menu:id=".uno:NextTrackedChange"/>
@@ -137,6 +138,7 @@
<menu:menuitem menu:id=".uno:OpenSmartTagMenuOnCursor"/>
<menu:menuitem menu:id=".uno:ThesaurusFromContext"/>
<menu:menuseparator/>
+ <menu:menuitem menu:id=".uno:TableNumberFormatDialog"/>
<menu:menuitem menu:id=".uno:InsertCaptionDialog"/>
<menu:menuitem menu:id=".uno:TableDialog"/>
</menu:menupopup>
diff --git a/sw/uiconfig/swriter/ui/insertbookmark.ui b/sw/uiconfig/swriter/ui/insertbookmark.ui
index 8b65bfc619b9..0b1ba7623f15 100644
--- a/sw/uiconfig/swriter/ui/insertbookmark.ui
+++ b/sw/uiconfig/swriter/ui/insertbookmark.ui
@@ -251,7 +251,9 @@
<property name="title" translatable="yes" context="insertbookmark|text">Text</property>
<property name="clickable">True</property>
<child>
- <object class="GtkCellRendererText" id="cellrenderer2"/>
+ <object class="GtkCellRendererText" id="cellrenderer2">
+ <property name="editable">True</property>
+ </object>
<attributes>
<attribute name="text">2</attribute>
</attributes>
@@ -348,6 +350,20 @@
</packing>
</child>
<child>
+ <object class="GtkButton" id="edittext">
+ <property name="label" translatable="yes" context="insertbookmark|edittext">Edit Text</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives-default">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="pack_type">end</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
<object class="GtkButton" id="rename">
<property name="label" translatable="yes" context="insertbookmark|rename">Rename</property>
<property name="visible">True</property>
@@ -358,7 +374,7 @@
<property name="expand">False</property>
<property name="fill">False</property>
<property name="pack_type">end</property>
- <property name="position">2</property>
+ <property name="position">3</property>
</packing>
</child>
</object>
diff --git a/sw/uiconfig/swriter/ui/warnhiddensectiondialog.ui b/sw/uiconfig/swriter/ui/warnhiddensectiondialog.ui
new file mode 100644
index 000000000000..19aeec830203
--- /dev/null
+++ b/sw/uiconfig/swriter/ui/warnhiddensectiondialog.ui
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.20.2 -->
+<interface domain="sw">
+ <requires lib="gtk+" version="3.20"/>
+ <object class="GtkMessageDialog" id="WarnHiddenSectionDialog">
+ <property name="can_focus">False</property>
+ <property name="title" translatable="yes" context="warnhiddensectiondialog|WarnHiddenSectionDialog">Delete hidden section(s)?</property>
+ <property name="resizable">False</property>
+ <property name="modal">True</property>
+ <property name="type_hint">dialog</property>
+ <property name="skip_taskbar_hint">True</property>
+ <property name="message_type">question</property>
+ <property name="buttons">yes-no</property>
+ <property name="text" translatable="yes" context="warnhiddensectiondialog|WarnHiddenSectionDialog">Would you like to delete the hidden section(s)?</property>
+ <property name="secondary_text" translatable="yes" context="warnhiddensectiondialog|WarnHiddenSectionDialog">There are hidden sections in the deleted area.</property>
+ <child internal-child="vbox">
+ <object class="GtkBox" id="messagedialog-vbox">
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <child internal-child="action_area">
+ <object class="GtkButtonBox" id="messagedialog-action_area">
+ <property name="can_focus">False</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+</interface>
diff --git a/sw/uiconfig/swxform/popupmenu/table.xml b/sw/uiconfig/swxform/popupmenu/table.xml
index 09470cab6d34..3ae9ad5f688e 100644
--- a/sw/uiconfig/swxform/popupmenu/table.xml
+++ b/sw/uiconfig/swxform/popupmenu/table.xml
@@ -122,6 +122,7 @@
</menu:menupopup>
</menu:menu>
<menu:menuseparator/>
+ <menu:menuitem menu:id=".uno:FieldDialog"/>
<menu:menuitem menu:id=".uno:AcceptTrackedChange"/>
<menu:menuitem menu:id=".uno:RejectTrackedChange"/>
<menu:menuitem menu:id=".uno:NextTrackedChange"/>
@@ -134,6 +135,7 @@
<menu:menuitem menu:id=".uno:OpenSmartTagMenuOnCursor"/>
<menu:menuitem menu:id=".uno:ThesaurusFromContext"/>
<menu:menuseparator/>
+ <menu:menuitem menu:id=".uno:TableNumberFormatDialog"/>
<menu:menuitem menu:id=".uno:InsertCaptionDialog"/>
<menu:menuitem menu:id=".uno:TableDialog"/>
</menu:menupopup>
diff --git a/sysui/desktop/debian/control b/sysui/desktop/debian/control
index cfcd7074a616..8fae8a745534 100644
--- a/sysui/desktop/debian/control
+++ b/sysui/desktop/debian/control
@@ -1,3 +1,5 @@
Description: %productname desktop integration
-Maintainer: LibreOffice
+Maintainer: CIB software GmbH
Architecture: all
+Replaces: libreofficepoweredbycib6.4-debian-menus
+Conflicts: libreofficepoweredbycib6.4-debian-menus
diff --git a/sysui/desktop/freedesktop/freedesktop-menus.spec b/sysui/desktop/freedesktop/freedesktop-menus.spec
index cc30badd0551..239a116a1700 100644
--- a/sysui/desktop/freedesktop/freedesktop-menus.spec
+++ b/sysui/desktop/freedesktop/freedesktop-menus.spec
@@ -25,11 +25,12 @@ Name: %pkgprefix-freedesktop-menus
Group: Office
License: LGPLv3 with MPLv2, ALv2 and others
Provides: libreoffice-desktop-integration
-Provides: libreofficepoweredbycib-desktop-integration
+Provides: ciboffice-desktop-integration
Conflicts: %pkgprefix-suse-menus
Conflicts: %pkgprefix-debian-menus
Conflicts: %pkgprefix-redhat-menus
Conflicts: %pkgprefix-mandriva-menus
+Obsoletes: libreofficepoweredbycib6.4-freedesktop-menus
BuildArch: noarch
AutoReqProv: no
%define _binary_filedigest_algorithm 1
@@ -391,7 +392,7 @@ done
# glibc breaks rpm unless rpm is build with internal glob-matching (issue 49374)
# https://bugzilla.redhat.com/beta/show_bug.cgi?id=134362
%defattr(-, root, root)
-%if "%unixfilename" != "libreofficepoweredbycib%productversion" && "%unixfilename" != "libreofficepoweredbycibdev%productversion"
+%if "%unixfilename" != "ciboffice%productversion" && "%unixfilename" != "cibofficedev%productversion"
# compat symlinks
%attr(0755,root,root) /opt/%unixfilename
%endif
diff --git a/sysui/desktop/icons/empty-document.ico b/sysui/desktop/icons/empty-document.ico
index 56e1e4e00c99..3b8c8a0704d9 100644
--- a/sysui/desktop/icons/empty-document.ico
+++ b/sysui/desktop/icons/empty-document.ico
Binary files differ
diff --git a/sysui/desktop/icons/empty-template.ico b/sysui/desktop/icons/empty-template.ico
index 56e1e4e00c99..3b8c8a0704d9 100644
--- a/sysui/desktop/icons/empty-template.ico
+++ b/sysui/desktop/icons/empty-template.ico
Binary files differ
diff --git a/sysui/desktop/icons/hicolor/1024x1024/apps/main.png b/sysui/desktop/icons/hicolor/1024x1024/apps/main.png
index 7b2dac9bd50d..ceb4127fb92a 100644
--- a/sysui/desktop/icons/hicolor/1024x1024/apps/main.png
+++ b/sysui/desktop/icons/hicolor/1024x1024/apps/main.png
Binary files differ
diff --git a/sysui/desktop/icons/hicolor/1024x1024/apps/main.svg b/sysui/desktop/icons/hicolor/1024x1024/apps/main.svg
index 4b3feca3067f..d1a39f9d0f4b 100644
--- a/sysui/desktop/icons/hicolor/1024x1024/apps/main.svg
+++ b/sysui/desktop/icons/hicolor/1024x1024/apps/main.svg
@@ -1,90 +1,10 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- height="1024"
- preserveAspectRatio="xMidYMid"
- viewBox="0 0 27093.333 27093.333"
- width="1024"
- version="1.1"
- id="svg1868"
- sodipodi:docname="main.svg"
- inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
- style="fill-rule:evenodd;stroke-width:28.22200012;stroke-linejoin:round"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\1024x1024\apps\main.png"
- inkscape:export-xdpi="96"
- inkscape:export-ydpi="96">
- <metadata
- id="metadata1874">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <defs
- id="defs1872" />
- <sodipodi:namedview
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="1"
- inkscape:pageshadow="2"
- inkscape:window-width="2520"
- inkscape:window-height="1496"
- id="namedview1870"
- showgrid="false"
- inkscape:zoom="0.84285714"
- inkscape:cx="465.3704"
- inkscape:cy="416.5281"
- inkscape:window-x="2869"
- inkscape:window-y="50"
- inkscape:window-maximized="1"
- inkscape:current-layer="g6082"
- inkscape:showpageshadow="false"
- units="px" />
- <g
- data-name="Ebene 4"
- id="Ebene_4"
- transform="matrix(99.215593,0,0,99.215593,82.797858,19718.19)">
- <g
- id="g6082">
- <g
- id="g822"
- transform="matrix(3.6457852,0,0,3.6406766,2.020256,-197.11182)"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\16x16\apps\main.png"
- inkscape:export-xdpi="95.16349"
- inkscape:export-ydpi="95.16349">
- <rect
- style="fill:#971e29;stroke-width:28.78103447"
- y="-0.44744909"
- x="-0.78303587"
- width="74.901657"
- height="75.00676"
- id="rect2699" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6084"
- d="m 49.49,11.51 a 1.41,1.41 0 0 0 -1.3,0.83 1.38,1.38 0 0 0 0.3,1.49 l 11.72,11.76 a 1.43,1.43 0 0 0 1.5,0.31 1.38,1.38 0 0 0 0.85,-1.25 V 12.87 a 1.42,1.42 0 0 0 -1.37,-1.36 z" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6088"
- d="M 17.25,11.51 A 1.39,1.39 0 0 0 15.88,12.9 V 66.59 A 1.39,1.39 0 0 0 17.25,68 h 30.84 c 4.53,0 14.47,-9.74 14.47,-14.68 V 32 a 1.36,1.36 0 0 0 -0.4,-1 l -19,-19.09 a 1.43,1.43 0 0 0 -1,-0.43 z m 1.39,2.78 h 23 l 18.14,18.29 c 0,0 0,18.59 0,19.78 0,3.7 -8.53,12.83 -13,12.83 H 18.64 Z" />
- </g>
- </g>
- </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1024px" height="1024px" viewBox="0 0 1024 1024" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 858.238281 455.679688 C 846.71875 444.160156 828.160156 444.160156 816.640625 455.679688 L 511.039062 761.28125 L 382.71875 633.601562 L 312.960938 703.359375 L 511.039062 901.441406 L 907.199219 505.28125 L 858.238281 456 Z M 858.238281 455.679688 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 643.519531 830.71875 L 558.71875 902.398438 L 611.199219 902.398438 C 708.160156 902.398438 787.199219 823.359375 787.199219 726.398438 L 787.199219 710.398438 L 706.558594 779.519531 C 693.121094 803.839844 670.398438 822.398438 643.519531 830.71875 Z M 643.519531 830.71875 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 250.558594 835.519531 L 250.558594 175.679688 L 720.320312 175.679688 L 720.320312 462.078125 L 787.199219 404.800781 L 787.199219 108.800781 L 184 108.800781 L 184 902.398438 L 421.441406 902.398438 L 365.121094 835.519531 Z M 250.558594 835.519531 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 373.441406 232.960938 L 583.679688 232.960938 C 604.710938 232.960938 621.761719 250.007812 621.761719 271.039062 L 621.761719 276.160156 C 621.761719 297.191406 604.710938 314.238281 583.679688 314.238281 L 373.441406 314.238281 C 352.410156 314.238281 335.359375 297.191406 335.359375 276.160156 L 335.359375 271.039062 C 335.359375 250.007812 352.410156 232.960938 373.441406 232.960938 Z M 373.441406 232.960938 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 376.320312 425.28125 L 589.761719 425.28125 C 609.90625 425.28125 626.238281 441.613281 626.238281 461.761719 L 626.238281 466.238281 C 626.238281 486.386719 609.90625 502.71875 589.761719 502.71875 L 376.320312 502.71875 C 356.171875 502.71875 339.839844 486.386719 339.839844 466.238281 L 339.839844 461.761719 C 339.839844 441.613281 356.171875 425.28125 376.320312 425.28125 Z M 376.320312 425.28125 "/>
+</g>
</svg>
diff --git a/sysui/desktop/icons/hicolor/1024x1024/apps/startcenter.png b/sysui/desktop/icons/hicolor/1024x1024/apps/startcenter.png
index 7b2dac9bd50d..b4336c92c92e 100644
--- a/sysui/desktop/icons/hicolor/1024x1024/apps/startcenter.png
+++ b/sysui/desktop/icons/hicolor/1024x1024/apps/startcenter.png
Binary files differ
diff --git a/sysui/desktop/icons/hicolor/1024x1024/apps/startcenter.svg b/sysui/desktop/icons/hicolor/1024x1024/apps/startcenter.svg
index 6002546aeecd..d1a39f9d0f4b 100644
--- a/sysui/desktop/icons/hicolor/1024x1024/apps/startcenter.svg
+++ b/sysui/desktop/icons/hicolor/1024x1024/apps/startcenter.svg
@@ -1,90 +1,10 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- height="1024"
- preserveAspectRatio="xMidYMid"
- viewBox="0 0 27093.333 27093.333"
- width="1024"
- version="1.1"
- id="svg1868"
- sodipodi:docname="startcenter.svg"
- inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
- style="fill-rule:evenodd;stroke-width:28.22200012;stroke-linejoin:round"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\1024x1024\apps\main.png"
- inkscape:export-xdpi="96"
- inkscape:export-ydpi="96">
- <metadata
- id="metadata1874">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <defs
- id="defs1872" />
- <sodipodi:namedview
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="1"
- inkscape:pageshadow="2"
- inkscape:window-width="2520"
- inkscape:window-height="1496"
- id="namedview1870"
- showgrid="false"
- inkscape:zoom="0.84285714"
- inkscape:cx="465.3704"
- inkscape:cy="416.5281"
- inkscape:window-x="2869"
- inkscape:window-y="50"
- inkscape:window-maximized="1"
- inkscape:current-layer="g6082"
- inkscape:showpageshadow="false"
- units="px" />
- <g
- data-name="Ebene 4"
- id="Ebene_4"
- transform="matrix(99.215593,0,0,99.215593,82.797858,19718.19)">
- <g
- id="g6082">
- <g
- id="g822"
- transform="matrix(3.6457852,0,0,3.6406766,2.020256,-197.11182)"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\16x16\apps\main.png"
- inkscape:export-xdpi="95.16349"
- inkscape:export-ydpi="95.16349">
- <rect
- style="fill:#971e29;stroke-width:28.78103447"
- y="-0.44744909"
- x="-0.78303587"
- width="74.901657"
- height="75.00676"
- id="rect2699" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6084"
- d="m 49.49,11.51 a 1.41,1.41 0 0 0 -1.3,0.83 1.38,1.38 0 0 0 0.3,1.49 l 11.72,11.76 a 1.43,1.43 0 0 0 1.5,0.31 1.38,1.38 0 0 0 0.85,-1.25 V 12.87 a 1.42,1.42 0 0 0 -1.37,-1.36 z" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6088"
- d="M 17.25,11.51 A 1.39,1.39 0 0 0 15.88,12.9 V 66.59 A 1.39,1.39 0 0 0 17.25,68 h 30.84 c 4.53,0 14.47,-9.74 14.47,-14.68 V 32 a 1.36,1.36 0 0 0 -0.4,-1 l -19,-19.09 a 1.43,1.43 0 0 0 -1,-0.43 z m 1.39,2.78 h 23 l 18.14,18.29 c 0,0 0,18.59 0,19.78 0,3.7 -8.53,12.83 -13,12.83 H 18.64 Z" />
- </g>
- </g>
- </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1024px" height="1024px" viewBox="0 0 1024 1024" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 858.238281 455.679688 C 846.71875 444.160156 828.160156 444.160156 816.640625 455.679688 L 511.039062 761.28125 L 382.71875 633.601562 L 312.960938 703.359375 L 511.039062 901.441406 L 907.199219 505.28125 L 858.238281 456 Z M 858.238281 455.679688 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 643.519531 830.71875 L 558.71875 902.398438 L 611.199219 902.398438 C 708.160156 902.398438 787.199219 823.359375 787.199219 726.398438 L 787.199219 710.398438 L 706.558594 779.519531 C 693.121094 803.839844 670.398438 822.398438 643.519531 830.71875 Z M 643.519531 830.71875 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 250.558594 835.519531 L 250.558594 175.679688 L 720.320312 175.679688 L 720.320312 462.078125 L 787.199219 404.800781 L 787.199219 108.800781 L 184 108.800781 L 184 902.398438 L 421.441406 902.398438 L 365.121094 835.519531 Z M 250.558594 835.519531 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 373.441406 232.960938 L 583.679688 232.960938 C 604.710938 232.960938 621.761719 250.007812 621.761719 271.039062 L 621.761719 276.160156 C 621.761719 297.191406 604.710938 314.238281 583.679688 314.238281 L 373.441406 314.238281 C 352.410156 314.238281 335.359375 297.191406 335.359375 276.160156 L 335.359375 271.039062 C 335.359375 250.007812 352.410156 232.960938 373.441406 232.960938 Z M 373.441406 232.960938 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 376.320312 425.28125 L 589.761719 425.28125 C 609.90625 425.28125 626.238281 441.613281 626.238281 461.761719 L 626.238281 466.238281 C 626.238281 486.386719 609.90625 502.71875 589.761719 502.71875 L 376.320312 502.71875 C 356.171875 502.71875 339.839844 486.386719 339.839844 466.238281 L 339.839844 461.761719 C 339.839844 441.613281 356.171875 425.28125 376.320312 425.28125 Z M 376.320312 425.28125 "/>
+</g>
</svg>
diff --git a/sysui/desktop/icons/hicolor/1024x1024/mimetypes/oasis-empty.png b/sysui/desktop/icons/hicolor/1024x1024/mimetypes/oasis-empty.png
index 1b0f8607b5fa..ceb4127fb92a 100644
--- a/sysui/desktop/icons/hicolor/1024x1024/mimetypes/oasis-empty.png
+++ b/sysui/desktop/icons/hicolor/1024x1024/mimetypes/oasis-empty.png
Binary files differ
diff --git a/sysui/desktop/icons/hicolor/1024x1024/mimetypes/oasis-empty.svg b/sysui/desktop/icons/hicolor/1024x1024/mimetypes/oasis-empty.svg
index c447504f1126..d1a39f9d0f4b 100644
--- a/sysui/desktop/icons/hicolor/1024x1024/mimetypes/oasis-empty.svg
+++ b/sysui/desktop/icons/hicolor/1024x1024/mimetypes/oasis-empty.svg
@@ -1 +1,10 @@
-<svg height="1024" width="1024" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientTransform="matrix(4.0217311 0 0 4.0377691 252.6082 5692.3585)" gradientUnits="userSpaceOnUse" x1="151.89412" x2="-24.890966" y1="-1168.5558" y2="-1398.881"><stop offset="0" stop-color="#535353"/><stop offset="1" stop-color="#7e7e7e"/></linearGradient><linearGradient id="b" gradientUnits="userSpaceOnUse" x1="868.50004" x2="148.50004" y1="964.0004" y2="44.0004"><stop offset="0" stop-color="#e6e6e6"/><stop offset="1" stop-color="#fff"/></linearGradient><path d="m150.2763-.0001c-16.5556 0-31.7763 14.72919-31.7763 32.48242v959.80274c0 15.46954 14.5086 31.71484 31.0722 31.71484h722.8645c18.5345 0 33.0477-15.477 33.0477-30.97461v-596.76758c0-16.89736-2.0504-24.7277-14.0194-36.67383l-341.7826-341.14648c-11.9691-11.94213-21.1265-18.10119-38.0546-18.11719zm509.9865.15625c-27.391 0-28.5919 28.45464-14.1073 42.98437v.004l213.0638 213.73438c17.3848 17.42928 46.2807 13.29444 46.2807-14.19727v-209.73828c0-16.90935-15.3294-32.78711-32.1733-32.78711h-213.0639z" fill="url(#a)" stroke-width="15.997"/><path d="m168.5 49.9999v926h688v-574l-352-352z" fill="url(#b)"/></svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1024px" height="1024px" viewBox="0 0 1024 1024" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 858.238281 455.679688 C 846.71875 444.160156 828.160156 444.160156 816.640625 455.679688 L 511.039062 761.28125 L 382.71875 633.601562 L 312.960938 703.359375 L 511.039062 901.441406 L 907.199219 505.28125 L 858.238281 456 Z M 858.238281 455.679688 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 643.519531 830.71875 L 558.71875 902.398438 L 611.199219 902.398438 C 708.160156 902.398438 787.199219 823.359375 787.199219 726.398438 L 787.199219 710.398438 L 706.558594 779.519531 C 693.121094 803.839844 670.398438 822.398438 643.519531 830.71875 Z M 643.519531 830.71875 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 250.558594 835.519531 L 250.558594 175.679688 L 720.320312 175.679688 L 720.320312 462.078125 L 787.199219 404.800781 L 787.199219 108.800781 L 184 108.800781 L 184 902.398438 L 421.441406 902.398438 L 365.121094 835.519531 Z M 250.558594 835.519531 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 373.441406 232.960938 L 583.679688 232.960938 C 604.710938 232.960938 621.761719 250.007812 621.761719 271.039062 L 621.761719 276.160156 C 621.761719 297.191406 604.710938 314.238281 583.679688 314.238281 L 373.441406 314.238281 C 352.410156 314.238281 335.359375 297.191406 335.359375 276.160156 L 335.359375 271.039062 C 335.359375 250.007812 352.410156 232.960938 373.441406 232.960938 Z M 373.441406 232.960938 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 376.320312 425.28125 L 589.761719 425.28125 C 609.90625 425.28125 626.238281 441.613281 626.238281 461.761719 L 626.238281 466.238281 C 626.238281 486.386719 609.90625 502.71875 589.761719 502.71875 L 376.320312 502.71875 C 356.171875 502.71875 339.839844 486.386719 339.839844 466.238281 L 339.839844 461.761719 C 339.839844 441.613281 356.171875 425.28125 376.320312 425.28125 Z M 376.320312 425.28125 "/>
+</g>
+</svg>
diff --git a/sysui/desktop/icons/hicolor/128x128/apps/main.png b/sysui/desktop/icons/hicolor/128x128/apps/main.png
index 37d91bfa2320..cb03d2a31e3d 100644
--- a/sysui/desktop/icons/hicolor/128x128/apps/main.png
+++ b/sysui/desktop/icons/hicolor/128x128/apps/main.png
Binary files differ
diff --git a/sysui/desktop/icons/hicolor/128x128/apps/main.svg b/sysui/desktop/icons/hicolor/128x128/apps/main.svg
index 64a2474cc446..3f694bfcc479 100644
--- a/sysui/desktop/icons/hicolor/128x128/apps/main.svg
+++ b/sysui/desktop/icons/hicolor/128x128/apps/main.svg
@@ -1,90 +1,10 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- height="128"
- preserveAspectRatio="xMidYMid"
- viewBox="0 0 3386.6665 3386.6665"
- width="128"
- version="1.1"
- id="svg1868"
- sodipodi:docname="main.svg"
- inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
- style="fill-rule:evenodd;stroke-width:28.22200012;stroke-linejoin:round"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\128x128\apps\main.png"
- inkscape:export-xdpi="96"
- inkscape:export-ydpi="96">
- <metadata
- id="metadata1874">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <defs
- id="defs1872" />
- <sodipodi:namedview
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="1"
- inkscape:pageshadow="2"
- inkscape:window-width="2520"
- inkscape:window-height="1496"
- id="namedview1870"
- showgrid="false"
- inkscape:zoom="0.84285714"
- inkscape:cx="465.3704"
- inkscape:cy="416.5281"
- inkscape:window-x="2869"
- inkscape:window-y="50"
- inkscape:window-maximized="1"
- inkscape:current-layer="g6082"
- inkscape:showpageshadow="false"
- units="px" />
- <g
- data-name="Ebene 4"
- id="Ebene_4"
- transform="matrix(99.215593,0,0,99.215593,82.797858,-3988.4758)">
- <g
- id="g6082">
- <g
- id="g822"
- transform="matrix(0.45572313,0,0,0.45508455,-0.47767695,40.403718)"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\16x16\apps\main.png"
- inkscape:export-xdpi="95.16349"
- inkscape:export-ydpi="95.16349">
- <rect
- style="fill:#971e29;stroke-width:28.78103447"
- y="-0.44744909"
- x="-0.78303587"
- width="74.901657"
- height="75.00676"
- id="rect2699" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6084"
- d="m 49.49,11.51 a 1.41,1.41 0 0 0 -1.3,0.83 1.38,1.38 0 0 0 0.3,1.49 l 11.72,11.76 a 1.43,1.43 0 0 0 1.5,0.31 1.38,1.38 0 0 0 0.85,-1.25 V 12.87 a 1.42,1.42 0 0 0 -1.37,-1.36 z" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6088"
- d="M 17.25,11.51 A 1.39,1.39 0 0 0 15.88,12.9 V 66.59 A 1.39,1.39 0 0 0 17.25,68 h 30.84 c 4.53,0 14.47,-9.74 14.47,-14.68 V 32 a 1.36,1.36 0 0 0 -0.4,-1 l -19,-19.09 a 1.43,1.43 0 0 0 -1,-0.43 z m 1.39,2.78 h 23 l 18.14,18.29 c 0,0 0,18.59 0,19.78 0,3.7 -8.53,12.83 -13,12.83 H 18.64 Z" />
- </g>
- </g>
- </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="128px" height="128px" viewBox="0 0 128 128" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 107.28125 56.960938 C 105.839844 55.519531 103.519531 55.519531 102.078125 56.960938 L 63.878906 95.160156 L 47.839844 79.199219 L 39.121094 87.921875 L 63.878906 112.679688 L 113.398438 63.160156 L 107.28125 57 Z M 107.28125 56.960938 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 80.441406 103.839844 L 69.839844 112.800781 L 76.398438 112.800781 C 88.519531 112.800781 98.398438 102.921875 98.398438 90.800781 L 98.398438 88.800781 L 88.320312 97.441406 C 86.640625 100.480469 83.800781 102.800781 80.441406 103.839844 Z M 80.441406 103.839844 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 31.320312 104.441406 L 31.320312 21.960938 L 90.039062 21.960938 L 90.039062 57.761719 L 98.398438 50.601562 L 98.398438 13.601562 L 23 13.601562 L 23 112.800781 L 52.679688 112.800781 L 45.640625 104.441406 Z M 31.320312 104.441406 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 46.679688 29.121094 L 72.960938 29.121094 C 75.589844 29.121094 77.71875 31.25 77.71875 33.878906 L 77.71875 34.519531 C 77.71875 37.148438 75.589844 39.28125 72.960938 39.28125 L 46.679688 39.28125 C 44.050781 39.28125 41.921875 37.148438 41.921875 34.519531 L 41.921875 33.878906 C 41.921875 31.25 44.050781 29.121094 46.679688 29.121094 Z M 46.679688 29.121094 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 47.039062 53.160156 L 73.71875 53.160156 C 76.238281 53.160156 78.28125 55.203125 78.28125 57.71875 L 78.28125 58.28125 C 78.28125 60.796875 76.238281 62.839844 73.71875 62.839844 L 47.039062 62.839844 C 44.523438 62.839844 42.480469 60.796875 42.480469 58.28125 L 42.480469 57.71875 C 42.480469 55.203125 44.523438 53.160156 47.039062 53.160156 Z M 47.039062 53.160156 "/>
+</g>
</svg>
diff --git a/sysui/desktop/icons/hicolor/128x128/apps/startcenter.png b/sysui/desktop/icons/hicolor/128x128/apps/startcenter.png
index 37d91bfa2320..e15b71c5d464 100644
--- a/sysui/desktop/icons/hicolor/128x128/apps/startcenter.png
+++ b/sysui/desktop/icons/hicolor/128x128/apps/startcenter.png
Binary files differ
diff --git a/sysui/desktop/icons/hicolor/128x128/apps/startcenter.svg b/sysui/desktop/icons/hicolor/128x128/apps/startcenter.svg
index 64a2474cc446..3f694bfcc479 100644
--- a/sysui/desktop/icons/hicolor/128x128/apps/startcenter.svg
+++ b/sysui/desktop/icons/hicolor/128x128/apps/startcenter.svg
@@ -1,90 +1,10 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- height="128"
- preserveAspectRatio="xMidYMid"
- viewBox="0 0 3386.6665 3386.6665"
- width="128"
- version="1.1"
- id="svg1868"
- sodipodi:docname="main.svg"
- inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
- style="fill-rule:evenodd;stroke-width:28.22200012;stroke-linejoin:round"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\128x128\apps\main.png"
- inkscape:export-xdpi="96"
- inkscape:export-ydpi="96">
- <metadata
- id="metadata1874">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <defs
- id="defs1872" />
- <sodipodi:namedview
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="1"
- inkscape:pageshadow="2"
- inkscape:window-width="2520"
- inkscape:window-height="1496"
- id="namedview1870"
- showgrid="false"
- inkscape:zoom="0.84285714"
- inkscape:cx="465.3704"
- inkscape:cy="416.5281"
- inkscape:window-x="2869"
- inkscape:window-y="50"
- inkscape:window-maximized="1"
- inkscape:current-layer="g6082"
- inkscape:showpageshadow="false"
- units="px" />
- <g
- data-name="Ebene 4"
- id="Ebene_4"
- transform="matrix(99.215593,0,0,99.215593,82.797858,-3988.4758)">
- <g
- id="g6082">
- <g
- id="g822"
- transform="matrix(0.45572313,0,0,0.45508455,-0.47767695,40.403718)"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\16x16\apps\main.png"
- inkscape:export-xdpi="95.16349"
- inkscape:export-ydpi="95.16349">
- <rect
- style="fill:#971e29;stroke-width:28.78103447"
- y="-0.44744909"
- x="-0.78303587"
- width="74.901657"
- height="75.00676"
- id="rect2699" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6084"
- d="m 49.49,11.51 a 1.41,1.41 0 0 0 -1.3,0.83 1.38,1.38 0 0 0 0.3,1.49 l 11.72,11.76 a 1.43,1.43 0 0 0 1.5,0.31 1.38,1.38 0 0 0 0.85,-1.25 V 12.87 a 1.42,1.42 0 0 0 -1.37,-1.36 z" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6088"
- d="M 17.25,11.51 A 1.39,1.39 0 0 0 15.88,12.9 V 66.59 A 1.39,1.39 0 0 0 17.25,68 h 30.84 c 4.53,0 14.47,-9.74 14.47,-14.68 V 32 a 1.36,1.36 0 0 0 -0.4,-1 l -19,-19.09 a 1.43,1.43 0 0 0 -1,-0.43 z m 1.39,2.78 h 23 l 18.14,18.29 c 0,0 0,18.59 0,19.78 0,3.7 -8.53,12.83 -13,12.83 H 18.64 Z" />
- </g>
- </g>
- </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="128px" height="128px" viewBox="0 0 128 128" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 107.28125 56.960938 C 105.839844 55.519531 103.519531 55.519531 102.078125 56.960938 L 63.878906 95.160156 L 47.839844 79.199219 L 39.121094 87.921875 L 63.878906 112.679688 L 113.398438 63.160156 L 107.28125 57 Z M 107.28125 56.960938 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 80.441406 103.839844 L 69.839844 112.800781 L 76.398438 112.800781 C 88.519531 112.800781 98.398438 102.921875 98.398438 90.800781 L 98.398438 88.800781 L 88.320312 97.441406 C 86.640625 100.480469 83.800781 102.800781 80.441406 103.839844 Z M 80.441406 103.839844 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 31.320312 104.441406 L 31.320312 21.960938 L 90.039062 21.960938 L 90.039062 57.761719 L 98.398438 50.601562 L 98.398438 13.601562 L 23 13.601562 L 23 112.800781 L 52.679688 112.800781 L 45.640625 104.441406 Z M 31.320312 104.441406 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 46.679688 29.121094 L 72.960938 29.121094 C 75.589844 29.121094 77.71875 31.25 77.71875 33.878906 L 77.71875 34.519531 C 77.71875 37.148438 75.589844 39.28125 72.960938 39.28125 L 46.679688 39.28125 C 44.050781 39.28125 41.921875 37.148438 41.921875 34.519531 L 41.921875 33.878906 C 41.921875 31.25 44.050781 29.121094 46.679688 29.121094 Z M 46.679688 29.121094 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 47.039062 53.160156 L 73.71875 53.160156 C 76.238281 53.160156 78.28125 55.203125 78.28125 57.71875 L 78.28125 58.28125 C 78.28125 60.796875 76.238281 62.839844 73.71875 62.839844 L 47.039062 62.839844 C 44.523438 62.839844 42.480469 60.796875 42.480469 58.28125 L 42.480469 57.71875 C 42.480469 55.203125 44.523438 53.160156 47.039062 53.160156 Z M 47.039062 53.160156 "/>
+</g>
</svg>
diff --git a/sysui/desktop/icons/hicolor/128x128/mimetypes/oasis-empty.png b/sysui/desktop/icons/hicolor/128x128/mimetypes/oasis-empty.png
index 3e2adb943ad8..cb03d2a31e3d 100644
--- a/sysui/desktop/icons/hicolor/128x128/mimetypes/oasis-empty.png
+++ b/sysui/desktop/icons/hicolor/128x128/mimetypes/oasis-empty.png
Binary files differ
diff --git a/sysui/desktop/icons/hicolor/128x128/mimetypes/oasis-empty.svg b/sysui/desktop/icons/hicolor/128x128/mimetypes/oasis-empty.svg
index bc08fb9f3687..3f694bfcc479 100644
--- a/sysui/desktop/icons/hicolor/128x128/mimetypes/oasis-empty.svg
+++ b/sysui/desktop/icons/hicolor/128x128/mimetypes/oasis-empty.svg
@@ -1 +1,10 @@
-<svg viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="108.00134" x2="20.00134" y1="121.99995" y2="5.99995"><stop offset="0" stop-color="#e6e6e6"/><stop offset="1" stop-color="#fff"/></linearGradient><linearGradient id="b" gradientTransform="matrix(7.99974 0 0 7.9977797 -873.96742 -7808.7673)" gradientUnits="userSpaceOnUse" x1="122.75008" x2="111.74973" y1="991.62115" y2="977.11713"><stop offset="0" stop-color="#535353"/><stop offset="1" stop-color="#7e7e7e"/></linearGradient><path d="m21.253295-.00005c-.25037 0-.50072.0111562-.75.0351562-3.66708.6998-4.56576 2.2662469-4.5 5.9980468v115.968747c.0004 4.1875 1.81149 5.99765 6 5.99805h83.998055c4.18851-.0004 5.99765-1.81055 5.99805-5.99805v-71.818356c.048-2.1119-.78004-4.230247-2.25-5.748047l-42.160155-42.1503908c-1.51819-1.4691999-3.63759-2.2988999-5.75-2.25h-39.83595c-.24919-.024-.49962-.0351562-.75-.0351562zm62.00978.0136719c-.20997 0-.41948.0168281-.62695.0488281-2.66247.8528-3.55843 4.904547-1.50586 6.810547l24.095695 24.220703c2.22593 2.1217 6.65811.306209 6.77539-2.775391v-24.220703c-.00024-2.1136998-1.91298-4.034856-4.01562-4.035156h-24.093755c-.20758-.032-.41894-.0488281-.6289-.0488281z" fill="url(#b)"/><path d="m22.001355 5.99995v116h84.000015v-72l-43.999995-44z" fill="url(#a)"/></svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="128px" height="128px" viewBox="0 0 128 128" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 107.28125 56.960938 C 105.839844 55.519531 103.519531 55.519531 102.078125 56.960938 L 63.878906 95.160156 L 47.839844 79.199219 L 39.121094 87.921875 L 63.878906 112.679688 L 113.398438 63.160156 L 107.28125 57 Z M 107.28125 56.960938 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 80.441406 103.839844 L 69.839844 112.800781 L 76.398438 112.800781 C 88.519531 112.800781 98.398438 102.921875 98.398438 90.800781 L 98.398438 88.800781 L 88.320312 97.441406 C 86.640625 100.480469 83.800781 102.800781 80.441406 103.839844 Z M 80.441406 103.839844 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 31.320312 104.441406 L 31.320312 21.960938 L 90.039062 21.960938 L 90.039062 57.761719 L 98.398438 50.601562 L 98.398438 13.601562 L 23 13.601562 L 23 112.800781 L 52.679688 112.800781 L 45.640625 104.441406 Z M 31.320312 104.441406 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 46.679688 29.121094 L 72.960938 29.121094 C 75.589844 29.121094 77.71875 31.25 77.71875 33.878906 L 77.71875 34.519531 C 77.71875 37.148438 75.589844 39.28125 72.960938 39.28125 L 46.679688 39.28125 C 44.050781 39.28125 41.921875 37.148438 41.921875 34.519531 L 41.921875 33.878906 C 41.921875 31.25 44.050781 29.121094 46.679688 29.121094 Z M 46.679688 29.121094 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 47.039062 53.160156 L 73.71875 53.160156 C 76.238281 53.160156 78.28125 55.203125 78.28125 57.71875 L 78.28125 58.28125 C 78.28125 60.796875 76.238281 62.839844 73.71875 62.839844 L 47.039062 62.839844 C 44.523438 62.839844 42.480469 60.796875 42.480469 58.28125 L 42.480469 57.71875 C 42.480469 55.203125 44.523438 53.160156 47.039062 53.160156 Z M 47.039062 53.160156 "/>
+</g>
+</svg>
diff --git a/sysui/desktop/icons/hicolor/16x16/apps/main.png b/sysui/desktop/icons/hicolor/16x16/apps/main.png
index 10b10d7e3491..e58c486aae72 100644
--- a/sysui/desktop/icons/hicolor/16x16/apps/main.png
+++ b/sysui/desktop/icons/hicolor/16x16/apps/main.png
Binary files differ
diff --git a/sysui/desktop/icons/hicolor/16x16/apps/main.svg b/sysui/desktop/icons/hicolor/16x16/apps/main.svg
index 54d6f6512fc6..fd5b7b322a81 100644
--- a/sysui/desktop/icons/hicolor/16x16/apps/main.svg
+++ b/sysui/desktop/icons/hicolor/16x16/apps/main.svg
@@ -1,90 +1,10 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- height="16"
- preserveAspectRatio="xMidYMid"
- viewBox="0 0 423.3333 423.3333"
- width="16"
- version="1.1"
- id="svg1868"
- sodipodi:docname="main.svg"
- inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
- style="fill-rule:evenodd;stroke-width:28.22200012;stroke-linejoin:round"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\16x16\apps\main.png"
- inkscape:export-xdpi="96"
- inkscape:export-ydpi="96">
- <metadata
- id="metadata1874">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <defs
- id="defs1872" />
- <sodipodi:namedview
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="1"
- inkscape:pageshadow="2"
- inkscape:window-width="2520"
- inkscape:window-height="1496"
- id="namedview1870"
- showgrid="false"
- inkscape:zoom="6.7428571"
- inkscape:cx="42.260936"
- inkscape:cy="64.290578"
- inkscape:window-x="2869"
- inkscape:window-y="50"
- inkscape:window-maximized="1"
- inkscape:current-layer="g6082"
- inkscape:showpageshadow="false"
- units="px" />
- <g
- data-name="Ebene 4"
- id="Ebene_4"
- transform="matrix(99.215593,0,0,99.215593,82.797858,-6951.809)">
- <g
- id="g6082">
- <g
- id="g822"
- transform="matrix(0.05696539,0,0,0.05688557,-0.78991871,70.093159)"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\16x16\apps\main.png"
- inkscape:export-xdpi="95.16349"
- inkscape:export-ydpi="95.16349">
- <rect
- style="fill:#971e29;stroke-width:28.78103447"
- y="-0.44744909"
- x="-0.78303587"
- width="74.901657"
- height="75.00676"
- id="rect2699" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6084"
- d="m 49.49,11.51 a 1.41,1.41 0 0 0 -1.3,0.83 1.38,1.38 0 0 0 0.3,1.49 l 11.72,11.76 a 1.43,1.43 0 0 0 1.5,0.31 1.38,1.38 0 0 0 0.85,-1.25 V 12.87 a 1.42,1.42 0 0 0 -1.37,-1.36 z" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6088"
- d="M 17.25,11.51 A 1.39,1.39 0 0 0 15.88,12.9 V 66.59 A 1.39,1.39 0 0 0 17.25,68 h 30.84 c 4.53,0 14.47,-9.74 14.47,-14.68 V 32 a 1.36,1.36 0 0 0 -0.4,-1 l -19,-19.09 a 1.43,1.43 0 0 0 -1,-0.43 z m 1.39,2.78 h 23 l 18.14,18.29 c 0,0 0,18.59 0,19.78 0,3.7 -8.53,12.83 -13,12.83 H 18.64 Z" />
- </g>
- </g>
- </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16px" height="16px" viewBox="0 0 16 16" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 13.410156 7.121094 C 13.230469 6.941406 12.941406 6.941406 12.761719 7.121094 L 7.984375 11.894531 L 5.980469 9.898438 L 4.890625 10.988281 L 7.984375 14.085938 L 14.175781 7.894531 L 13.410156 7.125 Z M 13.410156 7.121094 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 10.054688 12.980469 L 8.730469 14.101562 L 9.550781 14.101562 C 11.066406 14.101562 12.300781 12.863281 12.300781 11.351562 L 12.300781 11.101562 L 11.039062 12.179688 C 10.828125 12.558594 10.476562 12.851562 10.054688 12.980469 Z M 10.054688 12.980469 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 3.914062 13.054688 L 3.914062 2.746094 L 11.253906 2.746094 L 11.253906 7.21875 L 12.300781 6.324219 L 12.300781 1.699219 L 2.875 1.699219 L 2.875 14.101562 L 6.585938 14.101562 L 5.703125 13.054688 Z M 3.914062 13.054688 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 5.835938 3.640625 L 9.121094 3.640625 C 9.449219 3.640625 9.714844 3.90625 9.714844 4.234375 L 9.714844 4.316406 C 9.714844 4.644531 9.449219 4.910156 9.121094 4.910156 L 5.835938 4.910156 C 5.507812 4.910156 5.238281 4.644531 5.238281 4.316406 L 5.238281 4.234375 C 5.238281 3.90625 5.507812 3.640625 5.835938 3.640625 Z M 5.835938 3.640625 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 5.878906 6.644531 L 9.214844 6.644531 C 9.53125 6.644531 9.785156 6.898438 9.785156 7.214844 L 9.785156 7.285156 C 9.785156 7.601562 9.53125 7.855469 9.214844 7.855469 L 5.878906 7.855469 C 5.566406 7.855469 5.308594 7.601562 5.308594 7.285156 L 5.308594 7.214844 C 5.308594 6.898438 5.566406 6.644531 5.878906 6.644531 Z M 5.878906 6.644531 "/>
+</g>
</svg>
diff --git a/sysui/desktop/icons/hicolor/16x16/apps/startcenter.png b/sysui/desktop/icons/hicolor/16x16/apps/startcenter.png
index 10b10d7e3491..9740e9312a57 100644
--- a/sysui/desktop/icons/hicolor/16x16/apps/startcenter.png
+++ b/sysui/desktop/icons/hicolor/16x16/apps/startcenter.png
Binary files differ
diff --git a/sysui/desktop/icons/hicolor/16x16/apps/startcenter.svg b/sysui/desktop/icons/hicolor/16x16/apps/startcenter.svg
index 54d6f6512fc6..fd5b7b322a81 100644
--- a/sysui/desktop/icons/hicolor/16x16/apps/startcenter.svg
+++ b/sysui/desktop/icons/hicolor/16x16/apps/startcenter.svg
@@ -1,90 +1,10 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- height="16"
- preserveAspectRatio="xMidYMid"
- viewBox="0 0 423.3333 423.3333"
- width="16"
- version="1.1"
- id="svg1868"
- sodipodi:docname="main.svg"
- inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
- style="fill-rule:evenodd;stroke-width:28.22200012;stroke-linejoin:round"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\16x16\apps\main.png"
- inkscape:export-xdpi="96"
- inkscape:export-ydpi="96">
- <metadata
- id="metadata1874">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <defs
- id="defs1872" />
- <sodipodi:namedview
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="1"
- inkscape:pageshadow="2"
- inkscape:window-width="2520"
- inkscape:window-height="1496"
- id="namedview1870"
- showgrid="false"
- inkscape:zoom="6.7428571"
- inkscape:cx="42.260936"
- inkscape:cy="64.290578"
- inkscape:window-x="2869"
- inkscape:window-y="50"
- inkscape:window-maximized="1"
- inkscape:current-layer="g6082"
- inkscape:showpageshadow="false"
- units="px" />
- <g
- data-name="Ebene 4"
- id="Ebene_4"
- transform="matrix(99.215593,0,0,99.215593,82.797858,-6951.809)">
- <g
- id="g6082">
- <g
- id="g822"
- transform="matrix(0.05696539,0,0,0.05688557,-0.78991871,70.093159)"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\16x16\apps\main.png"
- inkscape:export-xdpi="95.16349"
- inkscape:export-ydpi="95.16349">
- <rect
- style="fill:#971e29;stroke-width:28.78103447"
- y="-0.44744909"
- x="-0.78303587"
- width="74.901657"
- height="75.00676"
- id="rect2699" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6084"
- d="m 49.49,11.51 a 1.41,1.41 0 0 0 -1.3,0.83 1.38,1.38 0 0 0 0.3,1.49 l 11.72,11.76 a 1.43,1.43 0 0 0 1.5,0.31 1.38,1.38 0 0 0 0.85,-1.25 V 12.87 a 1.42,1.42 0 0 0 -1.37,-1.36 z" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6088"
- d="M 17.25,11.51 A 1.39,1.39 0 0 0 15.88,12.9 V 66.59 A 1.39,1.39 0 0 0 17.25,68 h 30.84 c 4.53,0 14.47,-9.74 14.47,-14.68 V 32 a 1.36,1.36 0 0 0 -0.4,-1 l -19,-19.09 a 1.43,1.43 0 0 0 -1,-0.43 z m 1.39,2.78 h 23 l 18.14,18.29 c 0,0 0,18.59 0,19.78 0,3.7 -8.53,12.83 -13,12.83 H 18.64 Z" />
- </g>
- </g>
- </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16px" height="16px" viewBox="0 0 16 16" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 13.410156 7.121094 C 13.230469 6.941406 12.941406 6.941406 12.761719 7.121094 L 7.984375 11.894531 L 5.980469 9.898438 L 4.890625 10.988281 L 7.984375 14.085938 L 14.175781 7.894531 L 13.410156 7.125 Z M 13.410156 7.121094 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 10.054688 12.980469 L 8.730469 14.101562 L 9.550781 14.101562 C 11.066406 14.101562 12.300781 12.863281 12.300781 11.351562 L 12.300781 11.101562 L 11.039062 12.179688 C 10.828125 12.558594 10.476562 12.851562 10.054688 12.980469 Z M 10.054688 12.980469 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 3.914062 13.054688 L 3.914062 2.746094 L 11.253906 2.746094 L 11.253906 7.21875 L 12.300781 6.324219 L 12.300781 1.699219 L 2.875 1.699219 L 2.875 14.101562 L 6.585938 14.101562 L 5.703125 13.054688 Z M 3.914062 13.054688 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 5.835938 3.640625 L 9.121094 3.640625 C 9.449219 3.640625 9.714844 3.90625 9.714844 4.234375 L 9.714844 4.316406 C 9.714844 4.644531 9.449219 4.910156 9.121094 4.910156 L 5.835938 4.910156 C 5.507812 4.910156 5.238281 4.644531 5.238281 4.316406 L 5.238281 4.234375 C 5.238281 3.90625 5.507812 3.640625 5.835938 3.640625 Z M 5.835938 3.640625 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 5.878906 6.644531 L 9.214844 6.644531 C 9.53125 6.644531 9.785156 6.898438 9.785156 7.214844 L 9.785156 7.285156 C 9.785156 7.601562 9.53125 7.855469 9.214844 7.855469 L 5.878906 7.855469 C 5.566406 7.855469 5.308594 7.601562 5.308594 7.285156 L 5.308594 7.214844 C 5.308594 6.898438 5.566406 6.644531 5.878906 6.644531 Z M 5.878906 6.644531 "/>
+</g>
</svg>
diff --git a/sysui/desktop/icons/hicolor/16x16/mimetypes/oasis-empty.png b/sysui/desktop/icons/hicolor/16x16/mimetypes/oasis-empty.png
index 7dd440146279..e58c486aae72 100644
--- a/sysui/desktop/icons/hicolor/16x16/mimetypes/oasis-empty.png
+++ b/sysui/desktop/icons/hicolor/16x16/mimetypes/oasis-empty.png
Binary files differ
diff --git a/sysui/desktop/icons/hicolor/16x16/mimetypes/oasis-empty.svg b/sysui/desktop/icons/hicolor/16x16/mimetypes/oasis-empty.svg
index 4a59ede3cd17..fd5b7b322a81 100644
--- a/sysui/desktop/icons/hicolor/16x16/mimetypes/oasis-empty.svg
+++ b/sysui/desktop/icons/hicolor/16x16/mimetypes/oasis-empty.svg
@@ -1 +1,10 @@
-<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientTransform="matrix(.999981 0 0 .999625 -109.99781 -976.00291)" gradientUnits="userSpaceOnUse" x1="124.00017" x2="111.99994" y1="992.375" y2="976.36902"><stop offset="0" stop-color="#535353"/><stop offset="1" stop-color="#7e7e7e"/></linearGradient><path d="m2.8125.00581c-.458392.0875-.82072.53358-.8125 1v13.99414c.00005.52339.47643.99995 1 1h10c .52357-.00005.99995-.47661 1-1v-7.99609c.006-.26396-.0975-.52904-.28125-.71875l-5-5.99805c-.189776-.18363-.454695-.28737-.71875-.28125h-5c-.0623-.006-.125182-.006-.1875 0zm7.53125 0c-.331493.10559-.4430551.60775-.1875.84375l3 2.99805c.277145.26269.82915.0378.84375-.34375v-2.99805c-.00003-.26169-.238215-.49997-.5-.5h-3c-.0517-.008-.104591-.008-.15625 0z" fill="url(#a)"/><path d="m3 .99995v14h10v-8l-5-6z" fill="#fff"/></svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16px" height="16px" viewBox="0 0 16 16" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 13.410156 7.121094 C 13.230469 6.941406 12.941406 6.941406 12.761719 7.121094 L 7.984375 11.894531 L 5.980469 9.898438 L 4.890625 10.988281 L 7.984375 14.085938 L 14.175781 7.894531 L 13.410156 7.125 Z M 13.410156 7.121094 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 10.054688 12.980469 L 8.730469 14.101562 L 9.550781 14.101562 C 11.066406 14.101562 12.300781 12.863281 12.300781 11.351562 L 12.300781 11.101562 L 11.039062 12.179688 C 10.828125 12.558594 10.476562 12.851562 10.054688 12.980469 Z M 10.054688 12.980469 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 3.914062 13.054688 L 3.914062 2.746094 L 11.253906 2.746094 L 11.253906 7.21875 L 12.300781 6.324219 L 12.300781 1.699219 L 2.875 1.699219 L 2.875 14.101562 L 6.585938 14.101562 L 5.703125 13.054688 Z M 3.914062 13.054688 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 5.835938 3.640625 L 9.121094 3.640625 C 9.449219 3.640625 9.714844 3.90625 9.714844 4.234375 L 9.714844 4.316406 C 9.714844 4.644531 9.449219 4.910156 9.121094 4.910156 L 5.835938 4.910156 C 5.507812 4.910156 5.238281 4.644531 5.238281 4.316406 L 5.238281 4.234375 C 5.238281 3.90625 5.507812 3.640625 5.835938 3.640625 Z M 5.835938 3.640625 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 5.878906 6.644531 L 9.214844 6.644531 C 9.53125 6.644531 9.785156 6.898438 9.785156 7.214844 L 9.785156 7.285156 C 9.785156 7.601562 9.53125 7.855469 9.214844 7.855469 L 5.878906 7.855469 C 5.566406 7.855469 5.308594 7.601562 5.308594 7.285156 L 5.308594 7.214844 C 5.308594 6.898438 5.566406 6.644531 5.878906 6.644531 Z M 5.878906 6.644531 "/>
+</g>
+</svg>
diff --git a/sysui/desktop/icons/hicolor/22x22/apps/main.png b/sysui/desktop/icons/hicolor/22x22/apps/main.png
index 1d2cb64d4fee..fd27be7cffd5 100644
--- a/sysui/desktop/icons/hicolor/22x22/apps/main.png
+++ b/sysui/desktop/icons/hicolor/22x22/apps/main.png
Binary files differ
diff --git a/sysui/desktop/icons/hicolor/22x22/apps/main.svg b/sysui/desktop/icons/hicolor/22x22/apps/main.svg
index bef939796ac2..78e08abc3560 100644
--- a/sysui/desktop/icons/hicolor/22x22/apps/main.svg
+++ b/sysui/desktop/icons/hicolor/22x22/apps/main.svg
@@ -1,90 +1,10 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- height="22"
- preserveAspectRatio="xMidYMid"
- viewBox="0 0 582.08329 582.08329"
- width="22"
- version="1.1"
- id="svg1868"
- sodipodi:docname="main.svg"
- inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
- style="fill-rule:evenodd;stroke-width:28.22200012;stroke-linejoin:round"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\22x22\apps\main.png"
- inkscape:export-xdpi="96"
- inkscape:export-ydpi="96">
- <metadata
- id="metadata1874">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <defs
- id="defs1872" />
- <sodipodi:namedview
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="1"
- inkscape:pageshadow="2"
- inkscape:window-width="2520"
- inkscape:window-height="1496"
- id="namedview1870"
- showgrid="false"
- inkscape:zoom="6.7428571"
- inkscape:cx="42.260936"
- inkscape:cy="64.290578"
- inkscape:window-x="2869"
- inkscape:window-y="50"
- inkscape:window-maximized="1"
- inkscape:current-layer="g6082"
- inkscape:showpageshadow="false"
- units="px" />
- <g
- data-name="Ebene 4"
- id="Ebene_4"
- transform="matrix(99.215593,0,0,99.215593,82.797858,-6793.059)">
- <g
- id="g6082">
- <g
- id="g822"
- transform="matrix(0.07832741,0,0,0.07821766,-0.77319143,68.502653)"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\16x16\apps\main.png"
- inkscape:export-xdpi="95.16349"
- inkscape:export-ydpi="95.16349">
- <rect
- style="fill:#971e29;stroke-width:28.78103447"
- y="-0.44744909"
- x="-0.78303587"
- width="74.901657"
- height="75.00676"
- id="rect2699" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6084"
- d="m 49.49,11.51 a 1.41,1.41 0 0 0 -1.3,0.83 1.38,1.38 0 0 0 0.3,1.49 l 11.72,11.76 a 1.43,1.43 0 0 0 1.5,0.31 1.38,1.38 0 0 0 0.85,-1.25 V 12.87 a 1.42,1.42 0 0 0 -1.37,-1.36 z" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6088"
- d="M 17.25,11.51 A 1.39,1.39 0 0 0 15.88,12.9 V 66.59 A 1.39,1.39 0 0 0 17.25,68 h 30.84 c 4.53,0 14.47,-9.74 14.47,-14.68 V 32 a 1.36,1.36 0 0 0 -0.4,-1 l -19,-19.09 a 1.43,1.43 0 0 0 -1,-0.43 z m 1.39,2.78 h 23 l 18.14,18.29 c 0,0 0,18.59 0,19.78 0,3.7 -8.53,12.83 -13,12.83 H 18.64 Z" />
- </g>
- </g>
- </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="22px" height="22px" viewBox="0 0 22 22" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 18.4375 9.789062 C 18.191406 9.542969 17.792969 9.542969 17.546875 9.789062 L 10.980469 16.355469 L 8.222656 13.613281 L 6.722656 15.109375 L 10.980469 19.367188 L 19.492188 10.855469 L 18.4375 9.796875 Z M 18.4375 9.789062 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 13.824219 17.847656 L 12.003906 19.386719 L 13.132812 19.386719 C 15.214844 19.386719 16.914062 17.6875 16.914062 15.605469 L 16.914062 15.261719 L 15.179688 16.746094 C 14.890625 17.269531 14.402344 17.667969 13.824219 17.847656 Z M 13.824219 17.847656 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 5.382812 17.949219 L 5.382812 3.773438 L 15.476562 3.773438 L 15.476562 9.925781 L 16.914062 8.695312 L 16.914062 2.335938 L 3.953125 2.335938 L 3.953125 19.386719 L 9.054688 19.386719 L 7.84375 17.949219 Z M 5.382812 17.949219 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 8.023438 5.003906 L 12.539062 5.003906 C 12.992188 5.003906 13.359375 5.371094 13.359375 5.824219 L 13.359375 5.933594 C 13.359375 6.386719 12.992188 6.75 12.539062 6.75 L 8.023438 6.75 C 7.570312 6.75 7.203125 6.386719 7.203125 5.933594 L 7.203125 5.824219 C 7.203125 5.371094 7.570312 5.003906 8.023438 5.003906 Z M 8.023438 5.003906 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 8.085938 9.136719 L 12.671875 9.136719 C 13.101562 9.136719 13.453125 9.488281 13.453125 9.921875 L 13.453125 10.015625 C 13.453125 10.449219 13.101562 10.800781 12.671875 10.800781 L 8.085938 10.800781 C 7.652344 10.800781 7.300781 10.449219 7.300781 10.015625 L 7.300781 9.921875 C 7.300781 9.488281 7.652344 9.136719 8.085938 9.136719 Z M 8.085938 9.136719 "/>
+</g>
</svg>
diff --git a/sysui/desktop/icons/hicolor/22x22/apps/startcenter.png b/sysui/desktop/icons/hicolor/22x22/apps/startcenter.png
index 1d2cb64d4fee..c9d2cae505cf 100644
--- a/sysui/desktop/icons/hicolor/22x22/apps/startcenter.png
+++ b/sysui/desktop/icons/hicolor/22x22/apps/startcenter.png
Binary files differ
diff --git a/sysui/desktop/icons/hicolor/22x22/apps/startcenter.svg b/sysui/desktop/icons/hicolor/22x22/apps/startcenter.svg
index bef939796ac2..78e08abc3560 100644
--- a/sysui/desktop/icons/hicolor/22x22/apps/startcenter.svg
+++ b/sysui/desktop/icons/hicolor/22x22/apps/startcenter.svg
@@ -1,90 +1,10 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- height="22"
- preserveAspectRatio="xMidYMid"
- viewBox="0 0 582.08329 582.08329"
- width="22"
- version="1.1"
- id="svg1868"
- sodipodi:docname="main.svg"
- inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
- style="fill-rule:evenodd;stroke-width:28.22200012;stroke-linejoin:round"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\22x22\apps\main.png"
- inkscape:export-xdpi="96"
- inkscape:export-ydpi="96">
- <metadata
- id="metadata1874">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <defs
- id="defs1872" />
- <sodipodi:namedview
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="1"
- inkscape:pageshadow="2"
- inkscape:window-width="2520"
- inkscape:window-height="1496"
- id="namedview1870"
- showgrid="false"
- inkscape:zoom="6.7428571"
- inkscape:cx="42.260936"
- inkscape:cy="64.290578"
- inkscape:window-x="2869"
- inkscape:window-y="50"
- inkscape:window-maximized="1"
- inkscape:current-layer="g6082"
- inkscape:showpageshadow="false"
- units="px" />
- <g
- data-name="Ebene 4"
- id="Ebene_4"
- transform="matrix(99.215593,0,0,99.215593,82.797858,-6793.059)">
- <g
- id="g6082">
- <g
- id="g822"
- transform="matrix(0.07832741,0,0,0.07821766,-0.77319143,68.502653)"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\16x16\apps\main.png"
- inkscape:export-xdpi="95.16349"
- inkscape:export-ydpi="95.16349">
- <rect
- style="fill:#971e29;stroke-width:28.78103447"
- y="-0.44744909"
- x="-0.78303587"
- width="74.901657"
- height="75.00676"
- id="rect2699" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6084"
- d="m 49.49,11.51 a 1.41,1.41 0 0 0 -1.3,0.83 1.38,1.38 0 0 0 0.3,1.49 l 11.72,11.76 a 1.43,1.43 0 0 0 1.5,0.31 1.38,1.38 0 0 0 0.85,-1.25 V 12.87 a 1.42,1.42 0 0 0 -1.37,-1.36 z" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6088"
- d="M 17.25,11.51 A 1.39,1.39 0 0 0 15.88,12.9 V 66.59 A 1.39,1.39 0 0 0 17.25,68 h 30.84 c 4.53,0 14.47,-9.74 14.47,-14.68 V 32 a 1.36,1.36 0 0 0 -0.4,-1 l -19,-19.09 a 1.43,1.43 0 0 0 -1,-0.43 z m 1.39,2.78 h 23 l 18.14,18.29 c 0,0 0,18.59 0,19.78 0,3.7 -8.53,12.83 -13,12.83 H 18.64 Z" />
- </g>
- </g>
- </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="22px" height="22px" viewBox="0 0 22 22" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 18.4375 9.789062 C 18.191406 9.542969 17.792969 9.542969 17.546875 9.789062 L 10.980469 16.355469 L 8.222656 13.613281 L 6.722656 15.109375 L 10.980469 19.367188 L 19.492188 10.855469 L 18.4375 9.796875 Z M 18.4375 9.789062 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 13.824219 17.847656 L 12.003906 19.386719 L 13.132812 19.386719 C 15.214844 19.386719 16.914062 17.6875 16.914062 15.605469 L 16.914062 15.261719 L 15.179688 16.746094 C 14.890625 17.269531 14.402344 17.667969 13.824219 17.847656 Z M 13.824219 17.847656 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 5.382812 17.949219 L 5.382812 3.773438 L 15.476562 3.773438 L 15.476562 9.925781 L 16.914062 8.695312 L 16.914062 2.335938 L 3.953125 2.335938 L 3.953125 19.386719 L 9.054688 19.386719 L 7.84375 17.949219 Z M 5.382812 17.949219 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 8.023438 5.003906 L 12.539062 5.003906 C 12.992188 5.003906 13.359375 5.371094 13.359375 5.824219 L 13.359375 5.933594 C 13.359375 6.386719 12.992188 6.75 12.539062 6.75 L 8.023438 6.75 C 7.570312 6.75 7.203125 6.386719 7.203125 5.933594 L 7.203125 5.824219 C 7.203125 5.371094 7.570312 5.003906 8.023438 5.003906 Z M 8.023438 5.003906 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 8.085938 9.136719 L 12.671875 9.136719 C 13.101562 9.136719 13.453125 9.488281 13.453125 9.921875 L 13.453125 10.015625 C 13.453125 10.449219 13.101562 10.800781 12.671875 10.800781 L 8.085938 10.800781 C 7.652344 10.800781 7.300781 10.449219 7.300781 10.015625 L 7.300781 9.921875 C 7.300781 9.488281 7.652344 9.136719 8.085938 9.136719 Z M 8.085938 9.136719 "/>
+</g>
</svg>
diff --git a/sysui/desktop/icons/hicolor/22x22/mimetypes/oasis-empty.png b/sysui/desktop/icons/hicolor/22x22/mimetypes/oasis-empty.png
index bb3df18b254a..fd27be7cffd5 100644
--- a/sysui/desktop/icons/hicolor/22x22/mimetypes/oasis-empty.png
+++ b/sysui/desktop/icons/hicolor/22x22/mimetypes/oasis-empty.png
Binary files differ
diff --git a/sysui/desktop/icons/hicolor/22x22/mimetypes/oasis-empty.svg b/sysui/desktop/icons/hicolor/22x22/mimetypes/oasis-empty.svg
index a00d8397a867..78e08abc3560 100644
--- a/sysui/desktop/icons/hicolor/22x22/mimetypes/oasis-empty.svg
+++ b/sysui/desktop/icons/hicolor/22x22/mimetypes/oasis-empty.svg
@@ -1 +1,10 @@
-<svg viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientTransform="matrix(1.1249688 0 0 1.1245683 -122.99628 -1095.9936)" gradientUnits="userSpaceOnUse" x1="124.00017" x2="111.99994" y1="992.375" y2="976.36902"><stop offset="0" stop-color="#535353"/><stop offset="1" stop-color="#7e7e7e"/></linearGradient><path d="m3.9142093.0067c-.515687.0984-.923302.60028-.914055 1.125v19.74327c.000057.5888.535979 1.12493 1.124991 1.12499h13.7499727c.589011-.00006 1.124934-.53619 1.12499-1.12499v-12.99553c.0068-.29695-.109687-.59516-.316404-.80858l-5.624951-6.74775c-.213496-.20658-.511528-.32329-.808586-.31641h-8.1250217c-.07009-.007-.140829-.007-.210936 0zm10.9726517 0c-.372926.11879-.498432.68372-.210935.94922l3.37497 3.37277c.311786.29553.932786.0425.949211-.38671v-3.37278c-.000034-.2944-.26799-.56246-.562495-.5625h-3.374971c-.05816-.009-.117664-.009-.17578 0z" fill="url(#a)"/><path d="m4.0001373.99995v20h13.9999997v-13l-6-7z" fill="#fff"/></svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="22px" height="22px" viewBox="0 0 22 22" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 18.4375 9.789062 C 18.191406 9.542969 17.792969 9.542969 17.546875 9.789062 L 10.980469 16.355469 L 8.222656 13.613281 L 6.722656 15.109375 L 10.980469 19.367188 L 19.492188 10.855469 L 18.4375 9.796875 Z M 18.4375 9.789062 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 13.824219 17.847656 L 12.003906 19.386719 L 13.132812 19.386719 C 15.214844 19.386719 16.914062 17.6875 16.914062 15.605469 L 16.914062 15.261719 L 15.179688 16.746094 C 14.890625 17.269531 14.402344 17.667969 13.824219 17.847656 Z M 13.824219 17.847656 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 5.382812 17.949219 L 5.382812 3.773438 L 15.476562 3.773438 L 15.476562 9.925781 L 16.914062 8.695312 L 16.914062 2.335938 L 3.953125 2.335938 L 3.953125 19.386719 L 9.054688 19.386719 L 7.84375 17.949219 Z M 5.382812 17.949219 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 8.023438 5.003906 L 12.539062 5.003906 C 12.992188 5.003906 13.359375 5.371094 13.359375 5.824219 L 13.359375 5.933594 C 13.359375 6.386719 12.992188 6.75 12.539062 6.75 L 8.023438 6.75 C 7.570312 6.75 7.203125 6.386719 7.203125 5.933594 L 7.203125 5.824219 C 7.203125 5.371094 7.570312 5.003906 8.023438 5.003906 Z M 8.023438 5.003906 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 8.085938 9.136719 L 12.671875 9.136719 C 13.101562 9.136719 13.453125 9.488281 13.453125 9.921875 L 13.453125 10.015625 C 13.453125 10.449219 13.101562 10.800781 12.671875 10.800781 L 8.085938 10.800781 C 7.652344 10.800781 7.300781 10.449219 7.300781 10.015625 L 7.300781 9.921875 C 7.300781 9.488281 7.652344 9.136719 8.085938 9.136719 Z M 8.085938 9.136719 "/>
+</g>
+</svg>
diff --git a/sysui/desktop/icons/hicolor/24x24/apps/main.png b/sysui/desktop/icons/hicolor/24x24/apps/main.png
index 1d754aa650bc..832af7220506 100644
--- a/sysui/desktop/icons/hicolor/24x24/apps/main.png
+++ b/sysui/desktop/icons/hicolor/24x24/apps/main.png
Binary files differ
diff --git a/sysui/desktop/icons/hicolor/24x24/apps/main.svg b/sysui/desktop/icons/hicolor/24x24/apps/main.svg
index ad1c5c55cde4..727dc743e203 100644
--- a/sysui/desktop/icons/hicolor/24x24/apps/main.svg
+++ b/sysui/desktop/icons/hicolor/24x24/apps/main.svg
@@ -1,90 +1,10 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- height="24"
- preserveAspectRatio="xMidYMid"
- viewBox="0 0 634.99995 634.99995"
- width="24"
- version="1.1"
- id="svg1868"
- sodipodi:docname="main.svg"
- inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
- style="fill-rule:evenodd;stroke-width:28.22200012;stroke-linejoin:round"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\24x24\apps\main.png"
- inkscape:export-xdpi="96"
- inkscape:export-ydpi="96">
- <metadata
- id="metadata1874">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <defs
- id="defs1872" />
- <sodipodi:namedview
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="1"
- inkscape:pageshadow="2"
- inkscape:window-width="2520"
- inkscape:window-height="1496"
- id="namedview1870"
- showgrid="false"
- inkscape:zoom="6.7428571"
- inkscape:cx="42.260936"
- inkscape:cy="64.290578"
- inkscape:window-x="2869"
- inkscape:window-y="50"
- inkscape:window-maximized="1"
- inkscape:current-layer="g6082"
- inkscape:showpageshadow="false"
- units="px" />
- <g
- data-name="Ebene 4"
- id="Ebene_4"
- transform="matrix(99.215593,0,0,99.215593,82.797858,-6740.1423)">
- <g
- id="g6082">
- <g
- id="g822"
- transform="matrix(0.08544808,0,0,0.08532835,-0.76761556,67.972485)"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\16x16\apps\main.png"
- inkscape:export-xdpi="95.16349"
- inkscape:export-ydpi="95.16349">
- <rect
- style="fill:#971e29;stroke-width:28.78103447"
- y="-0.44744909"
- x="-0.78303587"
- width="74.901657"
- height="75.00676"
- id="rect2699" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6084"
- d="m 49.49,11.51 a 1.41,1.41 0 0 0 -1.3,0.83 1.38,1.38 0 0 0 0.3,1.49 l 11.72,11.76 a 1.43,1.43 0 0 0 1.5,0.31 1.38,1.38 0 0 0 0.85,-1.25 V 12.87 a 1.42,1.42 0 0 0 -1.37,-1.36 z" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6088"
- d="M 17.25,11.51 A 1.39,1.39 0 0 0 15.88,12.9 V 66.59 A 1.39,1.39 0 0 0 17.25,68 h 30.84 c 4.53,0 14.47,-9.74 14.47,-14.68 V 32 a 1.36,1.36 0 0 0 -0.4,-1 l -19,-19.09 a 1.43,1.43 0 0 0 -1,-0.43 z m 1.39,2.78 h 23 l 18.14,18.29 c 0,0 0,18.59 0,19.78 0,3.7 -8.53,12.83 -13,12.83 H 18.64 Z" />
- </g>
- </g>
- </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24px" height="24px" viewBox="0 0 24 24" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 20.113281 10.679688 C 19.84375 10.410156 19.410156 10.410156 19.140625 10.679688 L 11.976562 17.84375 L 8.96875 14.851562 L 7.335938 16.484375 L 11.976562 21.128906 L 21.261719 11.84375 L 20.113281 10.6875 Z M 20.113281 10.679688 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 15.082031 19.46875 L 13.09375 21.148438 L 14.324219 21.148438 C 16.597656 21.148438 18.449219 19.296875 18.449219 17.023438 L 18.449219 16.648438 L 16.558594 18.269531 C 16.246094 18.839844 15.710938 19.273438 15.082031 19.46875 Z M 15.082031 19.46875 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 5.871094 19.582031 L 5.871094 4.117188 L 16.882812 4.117188 L 16.882812 10.828125 L 18.449219 9.488281 L 18.449219 2.550781 L 4.3125 2.550781 L 4.3125 21.148438 L 9.878906 21.148438 L 8.558594 19.582031 Z M 5.871094 19.582031 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 8.753906 5.460938 L 13.679688 5.460938 C 14.171875 5.460938 14.574219 5.859375 14.574219 6.351562 L 14.574219 6.472656 C 14.574219 6.964844 14.171875 7.363281 13.679688 7.363281 L 8.753906 7.363281 C 8.257812 7.363281 7.859375 6.964844 7.859375 6.472656 L 7.859375 6.351562 C 7.859375 5.859375 8.257812 5.460938 8.753906 5.460938 Z M 8.753906 5.460938 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 8.820312 9.96875 L 13.824219 9.96875 C 14.292969 9.96875 14.675781 10.351562 14.675781 10.824219 L 14.675781 10.925781 C 14.675781 11.398438 14.292969 11.78125 13.824219 11.78125 L 8.820312 11.78125 C 8.347656 11.78125 7.964844 11.398438 7.964844 10.925781 L 7.964844 10.824219 C 7.964844 10.351562 8.347656 9.96875 8.820312 9.96875 Z M 8.820312 9.96875 "/>
+</g>
</svg>
diff --git a/sysui/desktop/icons/hicolor/24x24/apps/startcenter.png b/sysui/desktop/icons/hicolor/24x24/apps/startcenter.png
index 1d754aa650bc..a4da903ca002 100644
--- a/sysui/desktop/icons/hicolor/24x24/apps/startcenter.png
+++ b/sysui/desktop/icons/hicolor/24x24/apps/startcenter.png
Binary files differ
diff --git a/sysui/desktop/icons/hicolor/24x24/apps/startcenter.svg b/sysui/desktop/icons/hicolor/24x24/apps/startcenter.svg
index ad1c5c55cde4..727dc743e203 100644
--- a/sysui/desktop/icons/hicolor/24x24/apps/startcenter.svg
+++ b/sysui/desktop/icons/hicolor/24x24/apps/startcenter.svg
@@ -1,90 +1,10 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- height="24"
- preserveAspectRatio="xMidYMid"
- viewBox="0 0 634.99995 634.99995"
- width="24"
- version="1.1"
- id="svg1868"
- sodipodi:docname="main.svg"
- inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
- style="fill-rule:evenodd;stroke-width:28.22200012;stroke-linejoin:round"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\24x24\apps\main.png"
- inkscape:export-xdpi="96"
- inkscape:export-ydpi="96">
- <metadata
- id="metadata1874">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <defs
- id="defs1872" />
- <sodipodi:namedview
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="1"
- inkscape:pageshadow="2"
- inkscape:window-width="2520"
- inkscape:window-height="1496"
- id="namedview1870"
- showgrid="false"
- inkscape:zoom="6.7428571"
- inkscape:cx="42.260936"
- inkscape:cy="64.290578"
- inkscape:window-x="2869"
- inkscape:window-y="50"
- inkscape:window-maximized="1"
- inkscape:current-layer="g6082"
- inkscape:showpageshadow="false"
- units="px" />
- <g
- data-name="Ebene 4"
- id="Ebene_4"
- transform="matrix(99.215593,0,0,99.215593,82.797858,-6740.1423)">
- <g
- id="g6082">
- <g
- id="g822"
- transform="matrix(0.08544808,0,0,0.08532835,-0.76761556,67.972485)"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\16x16\apps\main.png"
- inkscape:export-xdpi="95.16349"
- inkscape:export-ydpi="95.16349">
- <rect
- style="fill:#971e29;stroke-width:28.78103447"
- y="-0.44744909"
- x="-0.78303587"
- width="74.901657"
- height="75.00676"
- id="rect2699" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6084"
- d="m 49.49,11.51 a 1.41,1.41 0 0 0 -1.3,0.83 1.38,1.38 0 0 0 0.3,1.49 l 11.72,11.76 a 1.43,1.43 0 0 0 1.5,0.31 1.38,1.38 0 0 0 0.85,-1.25 V 12.87 a 1.42,1.42 0 0 0 -1.37,-1.36 z" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6088"
- d="M 17.25,11.51 A 1.39,1.39 0 0 0 15.88,12.9 V 66.59 A 1.39,1.39 0 0 0 17.25,68 h 30.84 c 4.53,0 14.47,-9.74 14.47,-14.68 V 32 a 1.36,1.36 0 0 0 -0.4,-1 l -19,-19.09 a 1.43,1.43 0 0 0 -1,-0.43 z m 1.39,2.78 h 23 l 18.14,18.29 c 0,0 0,18.59 0,19.78 0,3.7 -8.53,12.83 -13,12.83 H 18.64 Z" />
- </g>
- </g>
- </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24px" height="24px" viewBox="0 0 24 24" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 20.113281 10.679688 C 19.84375 10.410156 19.410156 10.410156 19.140625 10.679688 L 11.976562 17.84375 L 8.96875 14.851562 L 7.335938 16.484375 L 11.976562 21.128906 L 21.261719 11.84375 L 20.113281 10.6875 Z M 20.113281 10.679688 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 15.082031 19.46875 L 13.09375 21.148438 L 14.324219 21.148438 C 16.597656 21.148438 18.449219 19.296875 18.449219 17.023438 L 18.449219 16.648438 L 16.558594 18.269531 C 16.246094 18.839844 15.710938 19.273438 15.082031 19.46875 Z M 15.082031 19.46875 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 5.871094 19.582031 L 5.871094 4.117188 L 16.882812 4.117188 L 16.882812 10.828125 L 18.449219 9.488281 L 18.449219 2.550781 L 4.3125 2.550781 L 4.3125 21.148438 L 9.878906 21.148438 L 8.558594 19.582031 Z M 5.871094 19.582031 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 8.753906 5.460938 L 13.679688 5.460938 C 14.171875 5.460938 14.574219 5.859375 14.574219 6.351562 L 14.574219 6.472656 C 14.574219 6.964844 14.171875 7.363281 13.679688 7.363281 L 8.753906 7.363281 C 8.257812 7.363281 7.859375 6.964844 7.859375 6.472656 L 7.859375 6.351562 C 7.859375 5.859375 8.257812 5.460938 8.753906 5.460938 Z M 8.753906 5.460938 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 8.820312 9.96875 L 13.824219 9.96875 C 14.292969 9.96875 14.675781 10.351562 14.675781 10.824219 L 14.675781 10.925781 C 14.675781 11.398438 14.292969 11.78125 13.824219 11.78125 L 8.820312 11.78125 C 8.347656 11.78125 7.964844 11.398438 7.964844 10.925781 L 7.964844 10.824219 C 7.964844 10.351562 8.347656 9.96875 8.820312 9.96875 Z M 8.820312 9.96875 "/>
+</g>
</svg>
diff --git a/sysui/desktop/icons/hicolor/24x24/mimetypes/oasis-empty.png b/sysui/desktop/icons/hicolor/24x24/mimetypes/oasis-empty.png
index 1b3d87604b37..832af7220506 100644
--- a/sysui/desktop/icons/hicolor/24x24/mimetypes/oasis-empty.png
+++ b/sysui/desktop/icons/hicolor/24x24/mimetypes/oasis-empty.png
Binary files differ
diff --git a/sysui/desktop/icons/hicolor/24x24/mimetypes/oasis-empty.svg b/sysui/desktop/icons/hicolor/24x24/mimetypes/oasis-empty.svg
index f69aa9de1bae..727dc743e203 100644
--- a/sysui/desktop/icons/hicolor/24x24/mimetypes/oasis-empty.svg
+++ b/sysui/desktop/icons/hicolor/24x24/mimetypes/oasis-empty.svg
@@ -1 +1,10 @@
-<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientTransform="matrix(1.1249688 0 0 1.1245683 -120.99628 -1094.9935)" gradientUnits="userSpaceOnUse" x1="124.00017" x2="111.99994" y1="992.375" y2="976.36902"><stop offset="0" stop-color="#535353"/><stop offset="1" stop-color="#7e7e7e"/></linearGradient><path d="m3.9142044.00633c-.51568.0984-.9233.60028-.91405 1.125v21.74413c.00005.5888.53598 1.12492 1.12499 1.12498h15.7499656c.58901-.00006 1.12493-.53619 1.12499-1.12498v-14.99639c.007-.29695-.10969-.59517-.3164-.80859l-5.624946-6.74775c-.2135-.20658-.51153-.32329-.80859-.31641h-10.1250196c-.0701-.007-.14083-.007-.21094.00001zm12.9726456 0c-.37292.11879-.49843.68372-.21093.94922l3.37497 3.37277c.31178.29553.93278.0425.94921-.38671v-3.37278c-.00003-.2944-.26799-.56246-.56249-.5625h-3.37498c-.0582-.009-.11766-.009-.17578 0z" fill="url(#a)"/><path d="m4.0001344.99958v22.00086h15.9999956v-15.00086l-5.999996-7z" fill="#fff"/></svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24px" height="24px" viewBox="0 0 24 24" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 20.113281 10.679688 C 19.84375 10.410156 19.410156 10.410156 19.140625 10.679688 L 11.976562 17.84375 L 8.96875 14.851562 L 7.335938 16.484375 L 11.976562 21.128906 L 21.261719 11.84375 L 20.113281 10.6875 Z M 20.113281 10.679688 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 15.082031 19.46875 L 13.09375 21.148438 L 14.324219 21.148438 C 16.597656 21.148438 18.449219 19.296875 18.449219 17.023438 L 18.449219 16.648438 L 16.558594 18.269531 C 16.246094 18.839844 15.710938 19.273438 15.082031 19.46875 Z M 15.082031 19.46875 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 5.871094 19.582031 L 5.871094 4.117188 L 16.882812 4.117188 L 16.882812 10.828125 L 18.449219 9.488281 L 18.449219 2.550781 L 4.3125 2.550781 L 4.3125 21.148438 L 9.878906 21.148438 L 8.558594 19.582031 Z M 5.871094 19.582031 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 8.753906 5.460938 L 13.679688 5.460938 C 14.171875 5.460938 14.574219 5.859375 14.574219 6.351562 L 14.574219 6.472656 C 14.574219 6.964844 14.171875 7.363281 13.679688 7.363281 L 8.753906 7.363281 C 8.257812 7.363281 7.859375 6.964844 7.859375 6.472656 L 7.859375 6.351562 C 7.859375 5.859375 8.257812 5.460938 8.753906 5.460938 Z M 8.753906 5.460938 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 8.820312 9.96875 L 13.824219 9.96875 C 14.292969 9.96875 14.675781 10.351562 14.675781 10.824219 L 14.675781 10.925781 C 14.675781 11.398438 14.292969 11.78125 13.824219 11.78125 L 8.820312 11.78125 C 8.347656 11.78125 7.964844 11.398438 7.964844 10.925781 L 7.964844 10.824219 C 7.964844 10.351562 8.347656 9.96875 8.820312 9.96875 Z M 8.820312 9.96875 "/>
+</g>
+</svg>
diff --git a/sysui/desktop/icons/hicolor/256x256/apps/main.png b/sysui/desktop/icons/hicolor/256x256/apps/main.png
index 51f51e38e033..9fd23ad6c7e2 100644
--- a/sysui/desktop/icons/hicolor/256x256/apps/main.png
+++ b/sysui/desktop/icons/hicolor/256x256/apps/main.png
Binary files differ
diff --git a/sysui/desktop/icons/hicolor/256x256/apps/main.svg b/sysui/desktop/icons/hicolor/256x256/apps/main.svg
index 470b1bf3b8a6..749275e65af7 100644
--- a/sysui/desktop/icons/hicolor/256x256/apps/main.svg
+++ b/sysui/desktop/icons/hicolor/256x256/apps/main.svg
@@ -1,90 +1,10 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- height="256"
- preserveAspectRatio="xMidYMid"
- viewBox="0 0 6773.333 6773.333"
- width="256"
- version="1.1"
- id="svg1868"
- sodipodi:docname="main.svg"
- inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
- style="fill-rule:evenodd;stroke-width:28.22200012;stroke-linejoin:round"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\256x256\apps\main.png"
- inkscape:export-xdpi="96"
- inkscape:export-ydpi="96">
- <metadata
- id="metadata1874">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <defs
- id="defs1872" />
- <sodipodi:namedview
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="1"
- inkscape:pageshadow="2"
- inkscape:window-width="2520"
- inkscape:window-height="1496"
- id="namedview1870"
- showgrid="false"
- inkscape:zoom="0.84285714"
- inkscape:cx="465.3704"
- inkscape:cy="416.5281"
- inkscape:window-x="2869"
- inkscape:window-y="50"
- inkscape:window-maximized="1"
- inkscape:current-layer="g6082"
- inkscape:showpageshadow="false"
- units="px" />
- <g
- data-name="Ebene 4"
- id="Ebene_4"
- transform="matrix(99.215593,0,0,99.215593,82.797858,-601.8093)">
- <g
- id="g6082">
- <g
- id="g822"
- transform="matrix(0.91144626,0,0,0.91016911,-0.12082939,6.4729268)"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\16x16\apps\main.png"
- inkscape:export-xdpi="95.16349"
- inkscape:export-ydpi="95.16349">
- <rect
- style="fill:#971e29;stroke-width:28.78103447"
- y="-0.44744909"
- x="-0.78303587"
- width="74.901657"
- height="75.00676"
- id="rect2699" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6084"
- d="m 49.49,11.51 a 1.41,1.41 0 0 0 -1.3,0.83 1.38,1.38 0 0 0 0.3,1.49 l 11.72,11.76 a 1.43,1.43 0 0 0 1.5,0.31 1.38,1.38 0 0 0 0.85,-1.25 V 12.87 a 1.42,1.42 0 0 0 -1.37,-1.36 z" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6088"
- d="M 17.25,11.51 A 1.39,1.39 0 0 0 15.88,12.9 V 66.59 A 1.39,1.39 0 0 0 17.25,68 h 30.84 c 4.53,0 14.47,-9.74 14.47,-14.68 V 32 a 1.36,1.36 0 0 0 -0.4,-1 l -19,-19.09 a 1.43,1.43 0 0 0 -1,-0.43 z m 1.39,2.78 h 23 l 18.14,18.29 c 0,0 0,18.59 0,19.78 0,3.7 -8.53,12.83 -13,12.83 H 18.64 Z" />
- </g>
- </g>
- </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="256px" height="256px" viewBox="0 0 256 256" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 214.558594 113.921875 C 211.679688 111.039062 207.039062 111.039062 204.160156 113.921875 L 127.761719 190.320312 L 95.679688 158.398438 L 78.238281 175.839844 L 127.761719 225.359375 L 226.800781 126.320312 L 214.558594 114 Z M 214.558594 113.921875 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 160.878906 207.679688 L 139.679688 225.601562 L 152.800781 225.601562 C 177.039062 225.601562 196.800781 205.839844 196.800781 181.601562 L 196.800781 177.601562 L 176.640625 194.878906 C 173.28125 200.960938 167.601562 205.601562 160.878906 207.679688 Z M 160.878906 207.679688 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 62.640625 208.878906 L 62.640625 43.921875 L 180.078125 43.921875 L 180.078125 115.519531 L 196.800781 101.199219 L 196.800781 27.199219 L 46 27.199219 L 46 225.601562 L 105.359375 225.601562 L 91.28125 208.878906 Z M 62.640625 208.878906 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 93.359375 58.238281 L 145.921875 58.238281 C 151.179688 58.238281 155.441406 62.503906 155.441406 67.761719 L 155.441406 69.039062 C 155.441406 74.296875 151.179688 78.558594 145.921875 78.558594 L 93.359375 78.558594 C 88.101562 78.558594 83.839844 74.296875 83.839844 69.039062 L 83.839844 67.761719 C 83.839844 62.503906 88.101562 58.238281 93.359375 58.238281 Z M 93.359375 58.238281 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 94.078125 106.320312 L 147.441406 106.320312 C 152.476562 106.320312 156.558594 110.402344 156.558594 115.441406 L 156.558594 116.558594 C 156.558594 121.597656 152.476562 125.679688 147.441406 125.679688 L 94.078125 125.679688 C 89.042969 125.679688 84.960938 121.597656 84.960938 116.558594 L 84.960938 115.441406 C 84.960938 110.402344 89.042969 106.320312 94.078125 106.320312 Z M 94.078125 106.320312 "/>
+</g>
</svg>
diff --git a/sysui/desktop/icons/hicolor/256x256/apps/startcenter.png b/sysui/desktop/icons/hicolor/256x256/apps/startcenter.png
index 51f51e38e033..276c5c955e05 100644
--- a/sysui/desktop/icons/hicolor/256x256/apps/startcenter.png
+++ b/sysui/desktop/icons/hicolor/256x256/apps/startcenter.png
Binary files differ
diff --git a/sysui/desktop/icons/hicolor/256x256/apps/startcenter.svg b/sysui/desktop/icons/hicolor/256x256/apps/startcenter.svg
index 470b1bf3b8a6..749275e65af7 100644
--- a/sysui/desktop/icons/hicolor/256x256/apps/startcenter.svg
+++ b/sysui/desktop/icons/hicolor/256x256/apps/startcenter.svg
@@ -1,90 +1,10 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- height="256"
- preserveAspectRatio="xMidYMid"
- viewBox="0 0 6773.333 6773.333"
- width="256"
- version="1.1"
- id="svg1868"
- sodipodi:docname="main.svg"
- inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
- style="fill-rule:evenodd;stroke-width:28.22200012;stroke-linejoin:round"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\256x256\apps\main.png"
- inkscape:export-xdpi="96"
- inkscape:export-ydpi="96">
- <metadata
- id="metadata1874">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <defs
- id="defs1872" />
- <sodipodi:namedview
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="1"
- inkscape:pageshadow="2"
- inkscape:window-width="2520"
- inkscape:window-height="1496"
- id="namedview1870"
- showgrid="false"
- inkscape:zoom="0.84285714"
- inkscape:cx="465.3704"
- inkscape:cy="416.5281"
- inkscape:window-x="2869"
- inkscape:window-y="50"
- inkscape:window-maximized="1"
- inkscape:current-layer="g6082"
- inkscape:showpageshadow="false"
- units="px" />
- <g
- data-name="Ebene 4"
- id="Ebene_4"
- transform="matrix(99.215593,0,0,99.215593,82.797858,-601.8093)">
- <g
- id="g6082">
- <g
- id="g822"
- transform="matrix(0.91144626,0,0,0.91016911,-0.12082939,6.4729268)"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\16x16\apps\main.png"
- inkscape:export-xdpi="95.16349"
- inkscape:export-ydpi="95.16349">
- <rect
- style="fill:#971e29;stroke-width:28.78103447"
- y="-0.44744909"
- x="-0.78303587"
- width="74.901657"
- height="75.00676"
- id="rect2699" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6084"
- d="m 49.49,11.51 a 1.41,1.41 0 0 0 -1.3,0.83 1.38,1.38 0 0 0 0.3,1.49 l 11.72,11.76 a 1.43,1.43 0 0 0 1.5,0.31 1.38,1.38 0 0 0 0.85,-1.25 V 12.87 a 1.42,1.42 0 0 0 -1.37,-1.36 z" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6088"
- d="M 17.25,11.51 A 1.39,1.39 0 0 0 15.88,12.9 V 66.59 A 1.39,1.39 0 0 0 17.25,68 h 30.84 c 4.53,0 14.47,-9.74 14.47,-14.68 V 32 a 1.36,1.36 0 0 0 -0.4,-1 l -19,-19.09 a 1.43,1.43 0 0 0 -1,-0.43 z m 1.39,2.78 h 23 l 18.14,18.29 c 0,0 0,18.59 0,19.78 0,3.7 -8.53,12.83 -13,12.83 H 18.64 Z" />
- </g>
- </g>
- </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="256px" height="256px" viewBox="0 0 256 256" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 214.558594 113.921875 C 211.679688 111.039062 207.039062 111.039062 204.160156 113.921875 L 127.761719 190.320312 L 95.679688 158.398438 L 78.238281 175.839844 L 127.761719 225.359375 L 226.800781 126.320312 L 214.558594 114 Z M 214.558594 113.921875 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 160.878906 207.679688 L 139.679688 225.601562 L 152.800781 225.601562 C 177.039062 225.601562 196.800781 205.839844 196.800781 181.601562 L 196.800781 177.601562 L 176.640625 194.878906 C 173.28125 200.960938 167.601562 205.601562 160.878906 207.679688 Z M 160.878906 207.679688 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 62.640625 208.878906 L 62.640625 43.921875 L 180.078125 43.921875 L 180.078125 115.519531 L 196.800781 101.199219 L 196.800781 27.199219 L 46 27.199219 L 46 225.601562 L 105.359375 225.601562 L 91.28125 208.878906 Z M 62.640625 208.878906 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 93.359375 58.238281 L 145.921875 58.238281 C 151.179688 58.238281 155.441406 62.503906 155.441406 67.761719 L 155.441406 69.039062 C 155.441406 74.296875 151.179688 78.558594 145.921875 78.558594 L 93.359375 78.558594 C 88.101562 78.558594 83.839844 74.296875 83.839844 69.039062 L 83.839844 67.761719 C 83.839844 62.503906 88.101562 58.238281 93.359375 58.238281 Z M 93.359375 58.238281 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 94.078125 106.320312 L 147.441406 106.320312 C 152.476562 106.320312 156.558594 110.402344 156.558594 115.441406 L 156.558594 116.558594 C 156.558594 121.597656 152.476562 125.679688 147.441406 125.679688 L 94.078125 125.679688 C 89.042969 125.679688 84.960938 121.597656 84.960938 116.558594 L 84.960938 115.441406 C 84.960938 110.402344 89.042969 106.320312 94.078125 106.320312 Z M 94.078125 106.320312 "/>
+</g>
</svg>
diff --git a/sysui/desktop/icons/hicolor/256x256/mimetypes/oasis-empty.png b/sysui/desktop/icons/hicolor/256x256/mimetypes/oasis-empty.png
index 847d179db2d0..9fd23ad6c7e2 100644
--- a/sysui/desktop/icons/hicolor/256x256/mimetypes/oasis-empty.png
+++ b/sysui/desktop/icons/hicolor/256x256/mimetypes/oasis-empty.png
Binary files differ
diff --git a/sysui/desktop/icons/hicolor/256x256/mimetypes/oasis-empty.svg b/sysui/desktop/icons/hicolor/256x256/mimetypes/oasis-empty.svg
index 133a2d2ef0e2..749275e65af7 100644
--- a/sysui/desktop/icons/hicolor/256x256/mimetypes/oasis-empty.svg
+++ b/sysui/desktop/icons/hicolor/256x256/mimetypes/oasis-empty.svg
@@ -1 +1,10 @@
-<svg height="256" width="256" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="217.00001" x2="37.00001" y1="241" y2="11"><stop offset="0" stop-color="#e6e6e6"/><stop offset="1" stop-color="#fff"/></linearGradient><linearGradient id="b" gradientTransform="matrix(1.004 0 0 1.0093981 64.49495 1423.0889)" gradientUnits="userSpaceOnUse" x1="151.8994" x2="-27.383467" y1="-1166.1295" y2="-1398.9415"><stop offset="0" stop-color="#535353"/><stop offset="1" stop-color="#7e7e7e"/></linearGradient><path d="m39.93554.06245c-4.133 0-7.93359 3.68103-7.93359 8.11914v239.93945c0 3.86723 3.62281 7.92969 7.75781 7.92969h175.98438c4.627 0 8.25-3.86992 8.25-7.74414v-149.185546c0-4.224155-.512-6.181567-3.5-9.167969l-85.32227-85.283205c-2.988-2.9854-5.274-4.5253-9.5-4.5293l-85.73633-.0781zm122.8418.0371c-6.838 0-7.13748 7.11382-3.52148 10.74609v.002l53.18945 53.431644c4.34 4.357128 11.55273 3.321844 11.55273-3.550781v-52.431643c0-4.22715-3.82625-8.19726-8.03125-8.19726h-53.18945z" fill="url(#b)" stroke-width="15.997"/><path d="m44.00002 11.99995v232h168v-148l-86-84z" fill="url(#a)"/></svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="256px" height="256px" viewBox="0 0 256 256" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 214.558594 113.921875 C 211.679688 111.039062 207.039062 111.039062 204.160156 113.921875 L 127.761719 190.320312 L 95.679688 158.398438 L 78.238281 175.839844 L 127.761719 225.359375 L 226.800781 126.320312 L 214.558594 114 Z M 214.558594 113.921875 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 160.878906 207.679688 L 139.679688 225.601562 L 152.800781 225.601562 C 177.039062 225.601562 196.800781 205.839844 196.800781 181.601562 L 196.800781 177.601562 L 176.640625 194.878906 C 173.28125 200.960938 167.601562 205.601562 160.878906 207.679688 Z M 160.878906 207.679688 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 62.640625 208.878906 L 62.640625 43.921875 L 180.078125 43.921875 L 180.078125 115.519531 L 196.800781 101.199219 L 196.800781 27.199219 L 46 27.199219 L 46 225.601562 L 105.359375 225.601562 L 91.28125 208.878906 Z M 62.640625 208.878906 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 93.359375 58.238281 L 145.921875 58.238281 C 151.179688 58.238281 155.441406 62.503906 155.441406 67.761719 L 155.441406 69.039062 C 155.441406 74.296875 151.179688 78.558594 145.921875 78.558594 L 93.359375 78.558594 C 88.101562 78.558594 83.839844 74.296875 83.839844 69.039062 L 83.839844 67.761719 C 83.839844 62.503906 88.101562 58.238281 93.359375 58.238281 Z M 93.359375 58.238281 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 94.078125 106.320312 L 147.441406 106.320312 C 152.476562 106.320312 156.558594 110.402344 156.558594 115.441406 L 156.558594 116.558594 C 156.558594 121.597656 152.476562 125.679688 147.441406 125.679688 L 94.078125 125.679688 C 89.042969 125.679688 84.960938 121.597656 84.960938 116.558594 L 84.960938 115.441406 C 84.960938 110.402344 89.042969 106.320312 94.078125 106.320312 Z M 94.078125 106.320312 "/>
+</g>
+</svg>
diff --git a/sysui/desktop/icons/hicolor/32x32/apps/main.png b/sysui/desktop/icons/hicolor/32x32/apps/main.png
index a2617607e6e3..6b9b3fe25c7f 100644
--- a/sysui/desktop/icons/hicolor/32x32/apps/main.png
+++ b/sysui/desktop/icons/hicolor/32x32/apps/main.png
Binary files differ
diff --git a/sysui/desktop/icons/hicolor/32x32/apps/main.svg b/sysui/desktop/icons/hicolor/32x32/apps/main.svg
index 0747ec11fc6e..b659ef2d9cc3 100644
--- a/sysui/desktop/icons/hicolor/32x32/apps/main.svg
+++ b/sysui/desktop/icons/hicolor/32x32/apps/main.svg
@@ -1,90 +1,10 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- height="48"
- preserveAspectRatio="xMidYMid"
- viewBox="0 0 1269.9999 1269.9999"
- width="48"
- version="1.1"
- id="svg1868"
- sodipodi:docname="main.svg"
- inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
- style="fill-rule:evenodd;stroke-width:28.22200012;stroke-linejoin:round"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\48x48\apps\main.png"
- inkscape:export-xdpi="96"
- inkscape:export-ydpi="96">
- <metadata
- id="metadata1874">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <defs
- id="defs1872" />
- <sodipodi:namedview
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="1"
- inkscape:pageshadow="2"
- inkscape:window-width="2520"
- inkscape:window-height="1496"
- id="namedview1870"
- showgrid="false"
- inkscape:zoom="6.7428571"
- inkscape:cx="42.260936"
- inkscape:cy="64.290578"
- inkscape:window-x="2869"
- inkscape:window-y="50"
- inkscape:window-maximized="1"
- inkscape:current-layer="g6082"
- inkscape:showpageshadow="false"
- units="px" />
- <g
- data-name="Ebene 4"
- id="Ebene_4"
- transform="matrix(99.215593,0,0,99.215593,82.797858,-6105.1423)">
- <g
- id="g6082">
- <g
- id="g822"
- transform="matrix(0.17089617,0,0,0.1706567,-0.70070684,61.610461)"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\16x16\apps\main.png"
- inkscape:export-xdpi="95.16349"
- inkscape:export-ydpi="95.16349">
- <rect
- style="fill:#971e29;stroke-width:28.78103447"
- y="-0.44744909"
- x="-0.78303587"
- width="74.901657"
- height="75.00676"
- id="rect2699" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6084"
- d="m 49.49,11.51 a 1.41,1.41 0 0 0 -1.3,0.83 1.38,1.38 0 0 0 0.3,1.49 l 11.72,11.76 a 1.43,1.43 0 0 0 1.5,0.31 1.38,1.38 0 0 0 0.85,-1.25 V 12.87 a 1.42,1.42 0 0 0 -1.37,-1.36 z" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6088"
- d="M 17.25,11.51 A 1.39,1.39 0 0 0 15.88,12.9 V 66.59 A 1.39,1.39 0 0 0 17.25,68 h 30.84 c 4.53,0 14.47,-9.74 14.47,-14.68 V 32 a 1.36,1.36 0 0 0 -0.4,-1 l -19,-19.09 a 1.43,1.43 0 0 0 -1,-0.43 z m 1.39,2.78 h 23 l 18.14,18.29 c 0,0 0,18.59 0,19.78 0,3.7 -8.53,12.83 -13,12.83 H 18.64 Z" />
- </g>
- </g>
- </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32px" height="32px" viewBox="0 0 32 32" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 26.820312 14.238281 C 26.460938 13.878906 25.878906 13.878906 25.519531 14.238281 L 15.96875 23.789062 L 11.960938 19.800781 L 9.78125 21.980469 L 15.96875 28.171875 L 28.351562 15.789062 L 26.820312 14.25 Z M 26.820312 14.238281 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 20.109375 25.960938 L 17.460938 28.199219 L 19.101562 28.199219 C 22.128906 28.199219 24.601562 25.730469 24.601562 22.699219 L 24.601562 22.199219 L 22.078125 24.359375 C 21.660156 25.121094 20.949219 25.699219 20.109375 25.960938 Z M 20.109375 25.960938 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 7.828125 26.109375 L 7.828125 5.488281 L 22.511719 5.488281 L 22.511719 14.441406 L 24.601562 12.648438 L 24.601562 3.398438 L 5.75 3.398438 L 5.75 28.199219 L 13.171875 28.199219 L 11.410156 26.109375 Z M 7.828125 26.109375 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 11.671875 7.28125 L 18.238281 7.28125 C 18.898438 7.28125 19.429688 7.8125 19.429688 8.46875 L 19.429688 8.628906 C 19.429688 9.289062 18.898438 9.820312 18.238281 9.820312 L 11.671875 9.820312 C 11.011719 9.820312 10.480469 9.289062 10.480469 8.628906 L 10.480469 8.46875 C 10.480469 7.8125 11.011719 7.28125 11.671875 7.28125 Z M 11.671875 7.28125 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 11.761719 13.289062 L 18.429688 13.289062 C 19.058594 13.289062 19.570312 13.800781 19.570312 14.429688 L 19.570312 14.570312 C 19.570312 15.199219 19.058594 15.710938 18.429688 15.710938 L 11.761719 15.710938 C 11.128906 15.710938 10.621094 15.199219 10.621094 14.570312 L 10.621094 14.429688 C 10.621094 13.800781 11.128906 13.289062 11.761719 13.289062 Z M 11.761719 13.289062 "/>
+</g>
</svg>
diff --git a/sysui/desktop/icons/hicolor/32x32/apps/startcenter.png b/sysui/desktop/icons/hicolor/32x32/apps/startcenter.png
index a2617607e6e3..1d9d606f0c40 100644
--- a/sysui/desktop/icons/hicolor/32x32/apps/startcenter.png
+++ b/sysui/desktop/icons/hicolor/32x32/apps/startcenter.png
Binary files differ
diff --git a/sysui/desktop/icons/hicolor/32x32/apps/startcenter.svg b/sysui/desktop/icons/hicolor/32x32/apps/startcenter.svg
index 0747ec11fc6e..b659ef2d9cc3 100644
--- a/sysui/desktop/icons/hicolor/32x32/apps/startcenter.svg
+++ b/sysui/desktop/icons/hicolor/32x32/apps/startcenter.svg
@@ -1,90 +1,10 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- height="48"
- preserveAspectRatio="xMidYMid"
- viewBox="0 0 1269.9999 1269.9999"
- width="48"
- version="1.1"
- id="svg1868"
- sodipodi:docname="main.svg"
- inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
- style="fill-rule:evenodd;stroke-width:28.22200012;stroke-linejoin:round"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\48x48\apps\main.png"
- inkscape:export-xdpi="96"
- inkscape:export-ydpi="96">
- <metadata
- id="metadata1874">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <defs
- id="defs1872" />
- <sodipodi:namedview
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="1"
- inkscape:pageshadow="2"
- inkscape:window-width="2520"
- inkscape:window-height="1496"
- id="namedview1870"
- showgrid="false"
- inkscape:zoom="6.7428571"
- inkscape:cx="42.260936"
- inkscape:cy="64.290578"
- inkscape:window-x="2869"
- inkscape:window-y="50"
- inkscape:window-maximized="1"
- inkscape:current-layer="g6082"
- inkscape:showpageshadow="false"
- units="px" />
- <g
- data-name="Ebene 4"
- id="Ebene_4"
- transform="matrix(99.215593,0,0,99.215593,82.797858,-6105.1423)">
- <g
- id="g6082">
- <g
- id="g822"
- transform="matrix(0.17089617,0,0,0.1706567,-0.70070684,61.610461)"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\16x16\apps\main.png"
- inkscape:export-xdpi="95.16349"
- inkscape:export-ydpi="95.16349">
- <rect
- style="fill:#971e29;stroke-width:28.78103447"
- y="-0.44744909"
- x="-0.78303587"
- width="74.901657"
- height="75.00676"
- id="rect2699" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6084"
- d="m 49.49,11.51 a 1.41,1.41 0 0 0 -1.3,0.83 1.38,1.38 0 0 0 0.3,1.49 l 11.72,11.76 a 1.43,1.43 0 0 0 1.5,0.31 1.38,1.38 0 0 0 0.85,-1.25 V 12.87 a 1.42,1.42 0 0 0 -1.37,-1.36 z" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6088"
- d="M 17.25,11.51 A 1.39,1.39 0 0 0 15.88,12.9 V 66.59 A 1.39,1.39 0 0 0 17.25,68 h 30.84 c 4.53,0 14.47,-9.74 14.47,-14.68 V 32 a 1.36,1.36 0 0 0 -0.4,-1 l -19,-19.09 a 1.43,1.43 0 0 0 -1,-0.43 z m 1.39,2.78 h 23 l 18.14,18.29 c 0,0 0,18.59 0,19.78 0,3.7 -8.53,12.83 -13,12.83 H 18.64 Z" />
- </g>
- </g>
- </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32px" height="32px" viewBox="0 0 32 32" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 26.820312 14.238281 C 26.460938 13.878906 25.878906 13.878906 25.519531 14.238281 L 15.96875 23.789062 L 11.960938 19.800781 L 9.78125 21.980469 L 15.96875 28.171875 L 28.351562 15.789062 L 26.820312 14.25 Z M 26.820312 14.238281 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 20.109375 25.960938 L 17.460938 28.199219 L 19.101562 28.199219 C 22.128906 28.199219 24.601562 25.730469 24.601562 22.699219 L 24.601562 22.199219 L 22.078125 24.359375 C 21.660156 25.121094 20.949219 25.699219 20.109375 25.960938 Z M 20.109375 25.960938 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 7.828125 26.109375 L 7.828125 5.488281 L 22.511719 5.488281 L 22.511719 14.441406 L 24.601562 12.648438 L 24.601562 3.398438 L 5.75 3.398438 L 5.75 28.199219 L 13.171875 28.199219 L 11.410156 26.109375 Z M 7.828125 26.109375 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 11.671875 7.28125 L 18.238281 7.28125 C 18.898438 7.28125 19.429688 7.8125 19.429688 8.46875 L 19.429688 8.628906 C 19.429688 9.289062 18.898438 9.820312 18.238281 9.820312 L 11.671875 9.820312 C 11.011719 9.820312 10.480469 9.289062 10.480469 8.628906 L 10.480469 8.46875 C 10.480469 7.8125 11.011719 7.28125 11.671875 7.28125 Z M 11.671875 7.28125 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 11.761719 13.289062 L 18.429688 13.289062 C 19.058594 13.289062 19.570312 13.800781 19.570312 14.429688 L 19.570312 14.570312 C 19.570312 15.199219 19.058594 15.710938 18.429688 15.710938 L 11.761719 15.710938 C 11.128906 15.710938 10.621094 15.199219 10.621094 14.570312 L 10.621094 14.429688 C 10.621094 13.800781 11.128906 13.289062 11.761719 13.289062 Z M 11.761719 13.289062 "/>
+</g>
</svg>
diff --git a/sysui/desktop/icons/hicolor/32x32/mimetypes/oasis-empty.png b/sysui/desktop/icons/hicolor/32x32/mimetypes/oasis-empty.png
index 23a76bbc0b5b..6b9b3fe25c7f 100644
--- a/sysui/desktop/icons/hicolor/32x32/mimetypes/oasis-empty.png
+++ b/sysui/desktop/icons/hicolor/32x32/mimetypes/oasis-empty.png
Binary files differ
diff --git a/sysui/desktop/icons/hicolor/32x32/mimetypes/oasis-empty.svg b/sysui/desktop/icons/hicolor/32x32/mimetypes/oasis-empty.svg
index c1a72247270e..b659ef2d9cc3 100644
--- a/sysui/desktop/icons/hicolor/32x32/mimetypes/oasis-empty.svg
+++ b/sysui/desktop/icons/hicolor/32x32/mimetypes/oasis-empty.svg
@@ -1 +1,10 @@
-<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientTransform="matrix(1.99993 0 0 1.9994499 -217.9916 -1950.1968)" gradientUnits="userSpaceOnUse" x1="124.00028" x2="110.99982" y1="992.37128" y2="976.36688"><stop offset="0" stop-color="#535353"/><stop offset="1" stop-color="#7e7e7e"/></linearGradient><path d="m5.6252743.009716c-.91677.174932-1.64144 1.065106-1.625 1.998044v27.99219c.0001 1.04688.95288 1.9999 2 2h19.9999997c1.04712-.0001 1.9999-.95312 2-2v-17.45508c.012-.52797-.19501-1.05609-.5625-1.43554l-10.54102-10.537114c-.37954-.367299-.90939-.574736-1.4375-.5625h-9.4589797c-.1246-.012-.25036-.012-.375 0zm15.0331997.0059c-.66561.213198-.89009 1.226608-.37695 1.703125l6.02539 6.054689c.55648.53041 1.66404.077 1.69336-.69336v-6.054688c-.00006-.528417-.47824-1.009706-1.00391-1.009766h-6.02343c-.1038-.01599-.21072-.01599-.31446 0z" fill="url(#a)"/><path d="m6.0002743 1.99995v28h19.9999997v-17.5l-10.5-10.5z" fill="#fff"/></svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32px" height="32px" viewBox="0 0 32 32" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 26.820312 14.238281 C 26.460938 13.878906 25.878906 13.878906 25.519531 14.238281 L 15.96875 23.789062 L 11.960938 19.800781 L 9.78125 21.980469 L 15.96875 28.171875 L 28.351562 15.789062 L 26.820312 14.25 Z M 26.820312 14.238281 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 20.109375 25.960938 L 17.460938 28.199219 L 19.101562 28.199219 C 22.128906 28.199219 24.601562 25.730469 24.601562 22.699219 L 24.601562 22.199219 L 22.078125 24.359375 C 21.660156 25.121094 20.949219 25.699219 20.109375 25.960938 Z M 20.109375 25.960938 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 7.828125 26.109375 L 7.828125 5.488281 L 22.511719 5.488281 L 22.511719 14.441406 L 24.601562 12.648438 L 24.601562 3.398438 L 5.75 3.398438 L 5.75 28.199219 L 13.171875 28.199219 L 11.410156 26.109375 Z M 7.828125 26.109375 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 11.671875 7.28125 L 18.238281 7.28125 C 18.898438 7.28125 19.429688 7.8125 19.429688 8.46875 L 19.429688 8.628906 C 19.429688 9.289062 18.898438 9.820312 18.238281 9.820312 L 11.671875 9.820312 C 11.011719 9.820312 10.480469 9.289062 10.480469 8.628906 L 10.480469 8.46875 C 10.480469 7.8125 11.011719 7.28125 11.671875 7.28125 Z M 11.671875 7.28125 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 11.761719 13.289062 L 18.429688 13.289062 C 19.058594 13.289062 19.570312 13.800781 19.570312 14.429688 L 19.570312 14.570312 C 19.570312 15.199219 19.058594 15.710938 18.429688 15.710938 L 11.761719 15.710938 C 11.128906 15.710938 10.621094 15.199219 10.621094 14.570312 L 10.621094 14.429688 C 10.621094 13.800781 11.128906 13.289062 11.761719 13.289062 Z M 11.761719 13.289062 "/>
+</g>
+</svg>
diff --git a/sysui/desktop/icons/hicolor/48x48/apps/main.png b/sysui/desktop/icons/hicolor/48x48/apps/main.png
index 3d577dc41352..9b597cc12898 100644
--- a/sysui/desktop/icons/hicolor/48x48/apps/main.png
+++ b/sysui/desktop/icons/hicolor/48x48/apps/main.png
Binary files differ
diff --git a/sysui/desktop/icons/hicolor/48x48/apps/main.svg b/sysui/desktop/icons/hicolor/48x48/apps/main.svg
index 0747ec11fc6e..4239da758057 100644
--- a/sysui/desktop/icons/hicolor/48x48/apps/main.svg
+++ b/sysui/desktop/icons/hicolor/48x48/apps/main.svg
@@ -1,90 +1,10 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- height="48"
- preserveAspectRatio="xMidYMid"
- viewBox="0 0 1269.9999 1269.9999"
- width="48"
- version="1.1"
- id="svg1868"
- sodipodi:docname="main.svg"
- inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
- style="fill-rule:evenodd;stroke-width:28.22200012;stroke-linejoin:round"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\48x48\apps\main.png"
- inkscape:export-xdpi="96"
- inkscape:export-ydpi="96">
- <metadata
- id="metadata1874">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <defs
- id="defs1872" />
- <sodipodi:namedview
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="1"
- inkscape:pageshadow="2"
- inkscape:window-width="2520"
- inkscape:window-height="1496"
- id="namedview1870"
- showgrid="false"
- inkscape:zoom="6.7428571"
- inkscape:cx="42.260936"
- inkscape:cy="64.290578"
- inkscape:window-x="2869"
- inkscape:window-y="50"
- inkscape:window-maximized="1"
- inkscape:current-layer="g6082"
- inkscape:showpageshadow="false"
- units="px" />
- <g
- data-name="Ebene 4"
- id="Ebene_4"
- transform="matrix(99.215593,0,0,99.215593,82.797858,-6105.1423)">
- <g
- id="g6082">
- <g
- id="g822"
- transform="matrix(0.17089617,0,0,0.1706567,-0.70070684,61.610461)"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\16x16\apps\main.png"
- inkscape:export-xdpi="95.16349"
- inkscape:export-ydpi="95.16349">
- <rect
- style="fill:#971e29;stroke-width:28.78103447"
- y="-0.44744909"
- x="-0.78303587"
- width="74.901657"
- height="75.00676"
- id="rect2699" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6084"
- d="m 49.49,11.51 a 1.41,1.41 0 0 0 -1.3,0.83 1.38,1.38 0 0 0 0.3,1.49 l 11.72,11.76 a 1.43,1.43 0 0 0 1.5,0.31 1.38,1.38 0 0 0 0.85,-1.25 V 12.87 a 1.42,1.42 0 0 0 -1.37,-1.36 z" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6088"
- d="M 17.25,11.51 A 1.39,1.39 0 0 0 15.88,12.9 V 66.59 A 1.39,1.39 0 0 0 17.25,68 h 30.84 c 4.53,0 14.47,-9.74 14.47,-14.68 V 32 a 1.36,1.36 0 0 0 -0.4,-1 l -19,-19.09 a 1.43,1.43 0 0 0 -1,-0.43 z m 1.39,2.78 h 23 l 18.14,18.29 c 0,0 0,18.59 0,19.78 0,3.7 -8.53,12.83 -13,12.83 H 18.64 Z" />
- </g>
- </g>
- </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48px" height="48px" viewBox="0 0 48 48" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 40.230469 21.359375 C 39.691406 20.820312 38.820312 20.820312 38.28125 21.359375 L 23.953125 35.683594 L 17.941406 29.699219 L 14.671875 32.96875 L 23.953125 42.253906 L 42.523438 23.683594 L 40.230469 21.375 Z M 40.230469 21.359375 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 30.164062 38.941406 L 26.191406 42.300781 L 28.648438 42.300781 C 33.195312 42.300781 36.898438 38.59375 36.898438 34.050781 L 36.898438 33.300781 L 33.121094 36.539062 C 32.488281 37.679688 31.425781 38.550781 30.164062 38.941406 Z M 30.164062 38.941406 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 11.746094 39.164062 L 11.746094 8.234375 L 33.765625 8.234375 L 33.765625 21.660156 L 36.898438 18.976562 L 36.898438 5.101562 L 8.625 5.101562 L 8.625 42.300781 L 19.753906 42.300781 L 17.113281 39.164062 Z M 11.746094 39.164062 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 17.503906 10.921875 L 27.359375 10.921875 C 28.347656 10.921875 29.144531 11.71875 29.144531 12.703125 L 29.144531 12.945312 C 29.144531 13.929688 28.347656 14.730469 27.359375 14.730469 L 17.503906 14.730469 C 16.519531 14.730469 15.71875 13.929688 15.71875 12.945312 L 15.71875 12.703125 C 15.71875 11.71875 16.519531 10.921875 17.503906 10.921875 Z M 17.503906 10.921875 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 17.640625 19.933594 L 27.644531 19.933594 C 28.589844 19.933594 29.355469 20.699219 29.355469 21.644531 L 29.355469 21.855469 C 29.355469 22.800781 28.589844 23.566406 27.644531 23.566406 L 17.640625 23.566406 C 16.695312 23.566406 15.929688 22.800781 15.929688 21.855469 L 15.929688 21.644531 C 15.929688 20.699219 16.695312 19.933594 17.640625 19.933594 Z M 17.640625 19.933594 "/>
+</g>
</svg>
diff --git a/sysui/desktop/icons/hicolor/48x48/apps/startcenter.png b/sysui/desktop/icons/hicolor/48x48/apps/startcenter.png
index 3d577dc41352..8fc277140591 100644
--- a/sysui/desktop/icons/hicolor/48x48/apps/startcenter.png
+++ b/sysui/desktop/icons/hicolor/48x48/apps/startcenter.png
Binary files differ
diff --git a/sysui/desktop/icons/hicolor/48x48/apps/startcenter.svg b/sysui/desktop/icons/hicolor/48x48/apps/startcenter.svg
index 0747ec11fc6e..4239da758057 100644
--- a/sysui/desktop/icons/hicolor/48x48/apps/startcenter.svg
+++ b/sysui/desktop/icons/hicolor/48x48/apps/startcenter.svg
@@ -1,90 +1,10 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- height="48"
- preserveAspectRatio="xMidYMid"
- viewBox="0 0 1269.9999 1269.9999"
- width="48"
- version="1.1"
- id="svg1868"
- sodipodi:docname="main.svg"
- inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
- style="fill-rule:evenodd;stroke-width:28.22200012;stroke-linejoin:round"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\48x48\apps\main.png"
- inkscape:export-xdpi="96"
- inkscape:export-ydpi="96">
- <metadata
- id="metadata1874">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <defs
- id="defs1872" />
- <sodipodi:namedview
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="1"
- inkscape:pageshadow="2"
- inkscape:window-width="2520"
- inkscape:window-height="1496"
- id="namedview1870"
- showgrid="false"
- inkscape:zoom="6.7428571"
- inkscape:cx="42.260936"
- inkscape:cy="64.290578"
- inkscape:window-x="2869"
- inkscape:window-y="50"
- inkscape:window-maximized="1"
- inkscape:current-layer="g6082"
- inkscape:showpageshadow="false"
- units="px" />
- <g
- data-name="Ebene 4"
- id="Ebene_4"
- transform="matrix(99.215593,0,0,99.215593,82.797858,-6105.1423)">
- <g
- id="g6082">
- <g
- id="g822"
- transform="matrix(0.17089617,0,0,0.1706567,-0.70070684,61.610461)"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\16x16\apps\main.png"
- inkscape:export-xdpi="95.16349"
- inkscape:export-ydpi="95.16349">
- <rect
- style="fill:#971e29;stroke-width:28.78103447"
- y="-0.44744909"
- x="-0.78303587"
- width="74.901657"
- height="75.00676"
- id="rect2699" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6084"
- d="m 49.49,11.51 a 1.41,1.41 0 0 0 -1.3,0.83 1.38,1.38 0 0 0 0.3,1.49 l 11.72,11.76 a 1.43,1.43 0 0 0 1.5,0.31 1.38,1.38 0 0 0 0.85,-1.25 V 12.87 a 1.42,1.42 0 0 0 -1.37,-1.36 z" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6088"
- d="M 17.25,11.51 A 1.39,1.39 0 0 0 15.88,12.9 V 66.59 A 1.39,1.39 0 0 0 17.25,68 h 30.84 c 4.53,0 14.47,-9.74 14.47,-14.68 V 32 a 1.36,1.36 0 0 0 -0.4,-1 l -19,-19.09 a 1.43,1.43 0 0 0 -1,-0.43 z m 1.39,2.78 h 23 l 18.14,18.29 c 0,0 0,18.59 0,19.78 0,3.7 -8.53,12.83 -13,12.83 H 18.64 Z" />
- </g>
- </g>
- </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48px" height="48px" viewBox="0 0 48 48" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 40.230469 21.359375 C 39.691406 20.820312 38.820312 20.820312 38.28125 21.359375 L 23.953125 35.683594 L 17.941406 29.699219 L 14.671875 32.96875 L 23.953125 42.253906 L 42.523438 23.683594 L 40.230469 21.375 Z M 40.230469 21.359375 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 30.164062 38.941406 L 26.191406 42.300781 L 28.648438 42.300781 C 33.195312 42.300781 36.898438 38.59375 36.898438 34.050781 L 36.898438 33.300781 L 33.121094 36.539062 C 32.488281 37.679688 31.425781 38.550781 30.164062 38.941406 Z M 30.164062 38.941406 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 11.746094 39.164062 L 11.746094 8.234375 L 33.765625 8.234375 L 33.765625 21.660156 L 36.898438 18.976562 L 36.898438 5.101562 L 8.625 5.101562 L 8.625 42.300781 L 19.753906 42.300781 L 17.113281 39.164062 Z M 11.746094 39.164062 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 17.503906 10.921875 L 27.359375 10.921875 C 28.347656 10.921875 29.144531 11.71875 29.144531 12.703125 L 29.144531 12.945312 C 29.144531 13.929688 28.347656 14.730469 27.359375 14.730469 L 17.503906 14.730469 C 16.519531 14.730469 15.71875 13.929688 15.71875 12.945312 L 15.71875 12.703125 C 15.71875 11.71875 16.519531 10.921875 17.503906 10.921875 Z M 17.503906 10.921875 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 17.640625 19.933594 L 27.644531 19.933594 C 28.589844 19.933594 29.355469 20.699219 29.355469 21.644531 L 29.355469 21.855469 C 29.355469 22.800781 28.589844 23.566406 27.644531 23.566406 L 17.640625 23.566406 C 16.695312 23.566406 15.929688 22.800781 15.929688 21.855469 L 15.929688 21.644531 C 15.929688 20.699219 16.695312 19.933594 17.640625 19.933594 Z M 17.640625 19.933594 "/>
+</g>
</svg>
diff --git a/sysui/desktop/icons/hicolor/48x48/mimetypes/oasis-empty.png b/sysui/desktop/icons/hicolor/48x48/mimetypes/oasis-empty.png
index 1851eb452d42..9b597cc12898 100644
--- a/sysui/desktop/icons/hicolor/48x48/mimetypes/oasis-empty.png
+++ b/sysui/desktop/icons/hicolor/48x48/mimetypes/oasis-empty.png
Binary files differ
diff --git a/sysui/desktop/icons/hicolor/48x48/mimetypes/oasis-empty.svg b/sysui/desktop/icons/hicolor/48x48/mimetypes/oasis-empty.svg
index 5ff605e50b5a..4239da758057 100644
--- a/sysui/desktop/icons/hicolor/48x48/mimetypes/oasis-empty.svg
+++ b/sysui/desktop/icons/hicolor/48x48/mimetypes/oasis-empty.svg
@@ -1 +1,10 @@
-<svg height="48" width="48" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientTransform="matrix(2.9999 0 0 2.9991699 -328.98808 -2928.2904)" gradientUnits="userSpaceOnUse" x1="123.66695" x2="111.66655" y1="991.70453" y2="977.03375"><stop offset="0" stop-color="#535353"/><stop offset="1" stop-color="#7e7e7e"/></linearGradient><path d="m8.4379114.0135885c-1.37515.262398-2.46216 1.598638-2.4375 2.998047v41.9882855c.00015 1.57031 1.42931 2.99985 3 3h29.9999996c1.57069-.00015 2.99985-1.42969 3-3v-26.18165c.018-.79196-.29252-1.587065-.84375-2.156245l-15.8125-15.8046875c-.56932-.550947-1.3641-.862103-2.15625-.84375h-14.1874996c-.18689-.01799-.37555-.01799-.5625 0zm22.5507796.0098c-.99843.319797-1.33417 1.839914-.56445 2.554688l9.03515 9.0820315c.83473.795587 2.49704.114553 2.54102-1.04105v-9.0820325c-.00009-.792623-.71736-1.513582-1.50586-1.513672h-9.03516c-.15569-.02399-.31509-.02399-.4707 0z" fill="url(#a)"/><path d="m9.0004114 2.9999505v42.0000005h29.9999996v-26l-16-16.0000005z" fill="#fff"/></svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48px" height="48px" viewBox="0 0 48 48" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 40.230469 21.359375 C 39.691406 20.820312 38.820312 20.820312 38.28125 21.359375 L 23.953125 35.683594 L 17.941406 29.699219 L 14.671875 32.96875 L 23.953125 42.253906 L 42.523438 23.683594 L 40.230469 21.375 Z M 40.230469 21.359375 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 30.164062 38.941406 L 26.191406 42.300781 L 28.648438 42.300781 C 33.195312 42.300781 36.898438 38.59375 36.898438 34.050781 L 36.898438 33.300781 L 33.121094 36.539062 C 32.488281 37.679688 31.425781 38.550781 30.164062 38.941406 Z M 30.164062 38.941406 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 11.746094 39.164062 L 11.746094 8.234375 L 33.765625 8.234375 L 33.765625 21.660156 L 36.898438 18.976562 L 36.898438 5.101562 L 8.625 5.101562 L 8.625 42.300781 L 19.753906 42.300781 L 17.113281 39.164062 Z M 11.746094 39.164062 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 17.503906 10.921875 L 27.359375 10.921875 C 28.347656 10.921875 29.144531 11.71875 29.144531 12.703125 L 29.144531 12.945312 C 29.144531 13.929688 28.347656 14.730469 27.359375 14.730469 L 17.503906 14.730469 C 16.519531 14.730469 15.71875 13.929688 15.71875 12.945312 L 15.71875 12.703125 C 15.71875 11.71875 16.519531 10.921875 17.503906 10.921875 Z M 17.503906 10.921875 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 17.640625 19.933594 L 27.644531 19.933594 C 28.589844 19.933594 29.355469 20.699219 29.355469 21.644531 L 29.355469 21.855469 C 29.355469 22.800781 28.589844 23.566406 27.644531 23.566406 L 17.640625 23.566406 C 16.695312 23.566406 15.929688 22.800781 15.929688 21.855469 L 15.929688 21.644531 C 15.929688 20.699219 16.695312 19.933594 17.640625 19.933594 Z M 17.640625 19.933594 "/>
+</g>
+</svg>
diff --git a/sysui/desktop/icons/hicolor/512x512/apps/main.png b/sysui/desktop/icons/hicolor/512x512/apps/main.png
index 5af078ea6475..9e407b0874f4 100644
--- a/sysui/desktop/icons/hicolor/512x512/apps/main.png
+++ b/sysui/desktop/icons/hicolor/512x512/apps/main.png
Binary files differ
diff --git a/sysui/desktop/icons/hicolor/512x512/apps/main.svg b/sysui/desktop/icons/hicolor/512x512/apps/main.svg
index 606d5f7bfaf6..3d14deb1e790 100644
--- a/sysui/desktop/icons/hicolor/512x512/apps/main.svg
+++ b/sysui/desktop/icons/hicolor/512x512/apps/main.svg
@@ -1,90 +1,10 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- height="512"
- preserveAspectRatio="xMidYMid"
- viewBox="0 0 13546.666 13546.666"
- width="512"
- version="1.1"
- id="svg1868"
- sodipodi:docname="main.svg"
- inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
- style="fill-rule:evenodd;stroke-width:28.22200012;stroke-linejoin:round"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\512x512\apps\main.png"
- inkscape:export-xdpi="96"
- inkscape:export-ydpi="96">
- <metadata
- id="metadata1874">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <defs
- id="defs1872" />
- <sodipodi:namedview
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="1"
- inkscape:pageshadow="2"
- inkscape:window-width="2520"
- inkscape:window-height="1496"
- id="namedview1870"
- showgrid="false"
- inkscape:zoom="0.84285714"
- inkscape:cx="465.3704"
- inkscape:cy="416.5281"
- inkscape:window-x="2869"
- inkscape:window-y="50"
- inkscape:window-maximized="1"
- inkscape:current-layer="g6082"
- inkscape:showpageshadow="false"
- units="px" />
- <g
- data-name="Ebene 4"
- id="Ebene_4"
- transform="matrix(99.215593,0,0,99.215593,82.797858,6171.5237)">
- <g
- id="g6082">
- <g
- id="g822"
- transform="matrix(1.8228925,0,0,1.8203382,0.59286564,-61.388645)"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\16x16\apps\main.png"
- inkscape:export-xdpi="95.16349"
- inkscape:export-ydpi="95.16349">
- <rect
- style="fill:#971e29;stroke-width:28.78103447"
- y="-0.44744909"
- x="-0.78303587"
- width="74.901657"
- height="75.00676"
- id="rect2699" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6084"
- d="m 49.49,11.51 a 1.41,1.41 0 0 0 -1.3,0.83 1.38,1.38 0 0 0 0.3,1.49 l 11.72,11.76 a 1.43,1.43 0 0 0 1.5,0.31 1.38,1.38 0 0 0 0.85,-1.25 V 12.87 a 1.42,1.42 0 0 0 -1.37,-1.36 z" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6088"
- d="M 17.25,11.51 A 1.39,1.39 0 0 0 15.88,12.9 V 66.59 A 1.39,1.39 0 0 0 17.25,68 h 30.84 c 4.53,0 14.47,-9.74 14.47,-14.68 V 32 a 1.36,1.36 0 0 0 -0.4,-1 l -19,-19.09 a 1.43,1.43 0 0 0 -1,-0.43 z m 1.39,2.78 h 23 l 18.14,18.29 c 0,0 0,18.59 0,19.78 0,3.7 -8.53,12.83 -13,12.83 H 18.64 Z" />
- </g>
- </g>
- </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="512px" height="512px" viewBox="0 0 512 512" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 429.121094 227.839844 C 423.359375 222.078125 414.078125 222.078125 408.320312 227.839844 L 255.519531 380.640625 L 191.359375 316.800781 L 156.480469 351.679688 L 255.519531 450.71875 L 453.601562 252.640625 L 429.121094 228 Z M 429.121094 227.839844 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 321.761719 415.359375 L 279.359375 451.199219 L 305.601562 451.199219 C 354.078125 451.199219 393.601562 411.679688 393.601562 363.199219 L 393.601562 355.199219 L 353.28125 389.761719 C 346.558594 401.921875 335.199219 411.199219 321.761719 415.359375 Z M 321.761719 415.359375 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 125.28125 417.761719 L 125.28125 87.839844 L 360.160156 87.839844 L 360.160156 231.039062 L 393.601562 202.398438 L 393.601562 54.398438 L 92 54.398438 L 92 451.199219 L 210.71875 451.199219 L 182.558594 417.761719 Z M 125.28125 417.761719 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 186.71875 116.480469 L 291.839844 116.480469 C 302.355469 116.480469 310.878906 125.003906 310.878906 135.519531 L 310.878906 138.078125 C 310.878906 148.59375 302.355469 157.121094 291.839844 157.121094 L 186.71875 157.121094 C 176.203125 157.121094 167.679688 148.59375 167.679688 138.078125 L 167.679688 135.519531 C 167.679688 125.003906 176.203125 116.480469 186.71875 116.480469 Z M 186.71875 116.480469 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 188.160156 212.640625 L 294.878906 212.640625 C 304.953125 212.640625 313.121094 220.804688 313.121094 230.878906 L 313.121094 233.121094 C 313.121094 243.195312 304.953125 251.359375 294.878906 251.359375 L 188.160156 251.359375 C 178.085938 251.359375 169.921875 243.195312 169.921875 233.121094 L 169.921875 230.878906 C 169.921875 220.804688 178.085938 212.640625 188.160156 212.640625 Z M 188.160156 212.640625 "/>
+</g>
</svg>
diff --git a/sysui/desktop/icons/hicolor/512x512/apps/startcenter.png b/sysui/desktop/icons/hicolor/512x512/apps/startcenter.png
index 5af078ea6475..1e94d2ec8aba 100644
--- a/sysui/desktop/icons/hicolor/512x512/apps/startcenter.png
+++ b/sysui/desktop/icons/hicolor/512x512/apps/startcenter.png
Binary files differ
diff --git a/sysui/desktop/icons/hicolor/512x512/apps/startcenter.svg b/sysui/desktop/icons/hicolor/512x512/apps/startcenter.svg
index 606d5f7bfaf6..3d14deb1e790 100644
--- a/sysui/desktop/icons/hicolor/512x512/apps/startcenter.svg
+++ b/sysui/desktop/icons/hicolor/512x512/apps/startcenter.svg
@@ -1,90 +1,10 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- height="512"
- preserveAspectRatio="xMidYMid"
- viewBox="0 0 13546.666 13546.666"
- width="512"
- version="1.1"
- id="svg1868"
- sodipodi:docname="main.svg"
- inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
- style="fill-rule:evenodd;stroke-width:28.22200012;stroke-linejoin:round"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\512x512\apps\main.png"
- inkscape:export-xdpi="96"
- inkscape:export-ydpi="96">
- <metadata
- id="metadata1874">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <defs
- id="defs1872" />
- <sodipodi:namedview
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="1"
- inkscape:pageshadow="2"
- inkscape:window-width="2520"
- inkscape:window-height="1496"
- id="namedview1870"
- showgrid="false"
- inkscape:zoom="0.84285714"
- inkscape:cx="465.3704"
- inkscape:cy="416.5281"
- inkscape:window-x="2869"
- inkscape:window-y="50"
- inkscape:window-maximized="1"
- inkscape:current-layer="g6082"
- inkscape:showpageshadow="false"
- units="px" />
- <g
- data-name="Ebene 4"
- id="Ebene_4"
- transform="matrix(99.215593,0,0,99.215593,82.797858,6171.5237)">
- <g
- id="g6082">
- <g
- id="g822"
- transform="matrix(1.8228925,0,0,1.8203382,0.59286564,-61.388645)"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\16x16\apps\main.png"
- inkscape:export-xdpi="95.16349"
- inkscape:export-ydpi="95.16349">
- <rect
- style="fill:#971e29;stroke-width:28.78103447"
- y="-0.44744909"
- x="-0.78303587"
- width="74.901657"
- height="75.00676"
- id="rect2699" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6084"
- d="m 49.49,11.51 a 1.41,1.41 0 0 0 -1.3,0.83 1.38,1.38 0 0 0 0.3,1.49 l 11.72,11.76 a 1.43,1.43 0 0 0 1.5,0.31 1.38,1.38 0 0 0 0.85,-1.25 V 12.87 a 1.42,1.42 0 0 0 -1.37,-1.36 z" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6088"
- d="M 17.25,11.51 A 1.39,1.39 0 0 0 15.88,12.9 V 66.59 A 1.39,1.39 0 0 0 17.25,68 h 30.84 c 4.53,0 14.47,-9.74 14.47,-14.68 V 32 a 1.36,1.36 0 0 0 -0.4,-1 l -19,-19.09 a 1.43,1.43 0 0 0 -1,-0.43 z m 1.39,2.78 h 23 l 18.14,18.29 c 0,0 0,18.59 0,19.78 0,3.7 -8.53,12.83 -13,12.83 H 18.64 Z" />
- </g>
- </g>
- </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="512px" height="512px" viewBox="0 0 512 512" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 429.121094 227.839844 C 423.359375 222.078125 414.078125 222.078125 408.320312 227.839844 L 255.519531 380.640625 L 191.359375 316.800781 L 156.480469 351.679688 L 255.519531 450.71875 L 453.601562 252.640625 L 429.121094 228 Z M 429.121094 227.839844 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 321.761719 415.359375 L 279.359375 451.199219 L 305.601562 451.199219 C 354.078125 451.199219 393.601562 411.679688 393.601562 363.199219 L 393.601562 355.199219 L 353.28125 389.761719 C 346.558594 401.921875 335.199219 411.199219 321.761719 415.359375 Z M 321.761719 415.359375 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 125.28125 417.761719 L 125.28125 87.839844 L 360.160156 87.839844 L 360.160156 231.039062 L 393.601562 202.398438 L 393.601562 54.398438 L 92 54.398438 L 92 451.199219 L 210.71875 451.199219 L 182.558594 417.761719 Z M 125.28125 417.761719 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 186.71875 116.480469 L 291.839844 116.480469 C 302.355469 116.480469 310.878906 125.003906 310.878906 135.519531 L 310.878906 138.078125 C 310.878906 148.59375 302.355469 157.121094 291.839844 157.121094 L 186.71875 157.121094 C 176.203125 157.121094 167.679688 148.59375 167.679688 138.078125 L 167.679688 135.519531 C 167.679688 125.003906 176.203125 116.480469 186.71875 116.480469 Z M 186.71875 116.480469 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 188.160156 212.640625 L 294.878906 212.640625 C 304.953125 212.640625 313.121094 220.804688 313.121094 230.878906 L 313.121094 233.121094 C 313.121094 243.195312 304.953125 251.359375 294.878906 251.359375 L 188.160156 251.359375 C 178.085938 251.359375 169.921875 243.195312 169.921875 233.121094 L 169.921875 230.878906 C 169.921875 220.804688 178.085938 212.640625 188.160156 212.640625 Z M 188.160156 212.640625 "/>
+</g>
</svg>
diff --git a/sysui/desktop/icons/hicolor/512x512/mimetypes/oasis-empty.png b/sysui/desktop/icons/hicolor/512x512/mimetypes/oasis-empty.png
index cfb1bc348109..9e407b0874f4 100644
--- a/sysui/desktop/icons/hicolor/512x512/mimetypes/oasis-empty.png
+++ b/sysui/desktop/icons/hicolor/512x512/mimetypes/oasis-empty.png
Binary files differ
diff --git a/sysui/desktop/icons/hicolor/512x512/mimetypes/oasis-empty.svg b/sysui/desktop/icons/hicolor/512x512/mimetypes/oasis-empty.svg
index c0c3049235ab..3d14deb1e790 100644
--- a/sysui/desktop/icons/hicolor/512x512/mimetypes/oasis-empty.svg
+++ b/sysui/desktop/icons/hicolor/512x512/mimetypes/oasis-empty.svg
@@ -1 +1,10 @@
-<svg height="512" width="512" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="434.00592" x2="74.00592" y1="482" y2="22"><stop offset="0" stop-color="#e6e6e6"/><stop offset="1" stop-color="#fff"/></linearGradient><linearGradient id="b" gradientTransform="matrix(2.008088 0 0 2.0188846 126.9892 2846.1792)" gradientUnits="userSpaceOnUse" x1="151.89409" x2="-24.890991" y1="-1168.5558" y2="-1398.881"><stop offset="0" stop-color="#535353"/><stop offset="1" stop-color="#7e7e7e"/></linearGradient><path d="m75.8672-.00005c-8.2664 0-15.8672 7.36558-15.8672 16.24219v479.90039c0 7.73479 7.2433 15.85742 15.5137 15.85742h359.9902c9.2544 0 16.5-7.73949 16.5-15.48828v-298.38281c0-8.44868-1.0237-12.36482-7-18.33789l-170.6562-170.57227c-5.9762-5.97107-10.5476-9.0506-19-9.05859zm253.6953.0781c-13.6766 0-14.2772 14.22732-7.0449 21.49219v.002l106.3848 106.86718c8.6804 8.71464 23.1094 6.6482 23.1094-7.09765v-104.8711c0-8.45468-7.6541-16.39258-16.0645-16.39258z" fill="url(#b)" stroke-width="15.997"/><path d="m84.0059 23.99995v464h344v-288l-176-176z" fill="url(#a)"/></svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="512px" height="512px" viewBox="0 0 512 512" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 429.121094 227.839844 C 423.359375 222.078125 414.078125 222.078125 408.320312 227.839844 L 255.519531 380.640625 L 191.359375 316.800781 L 156.480469 351.679688 L 255.519531 450.71875 L 453.601562 252.640625 L 429.121094 228 Z M 429.121094 227.839844 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 321.761719 415.359375 L 279.359375 451.199219 L 305.601562 451.199219 C 354.078125 451.199219 393.601562 411.679688 393.601562 363.199219 L 393.601562 355.199219 L 353.28125 389.761719 C 346.558594 401.921875 335.199219 411.199219 321.761719 415.359375 Z M 321.761719 415.359375 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 125.28125 417.761719 L 125.28125 87.839844 L 360.160156 87.839844 L 360.160156 231.039062 L 393.601562 202.398438 L 393.601562 54.398438 L 92 54.398438 L 92 451.199219 L 210.71875 451.199219 L 182.558594 417.761719 Z M 125.28125 417.761719 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 186.71875 116.480469 L 291.839844 116.480469 C 302.355469 116.480469 310.878906 125.003906 310.878906 135.519531 L 310.878906 138.078125 C 310.878906 148.59375 302.355469 157.121094 291.839844 157.121094 L 186.71875 157.121094 C 176.203125 157.121094 167.679688 148.59375 167.679688 138.078125 L 167.679688 135.519531 C 167.679688 125.003906 176.203125 116.480469 186.71875 116.480469 Z M 186.71875 116.480469 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 188.160156 212.640625 L 294.878906 212.640625 C 304.953125 212.640625 313.121094 220.804688 313.121094 230.878906 L 313.121094 233.121094 C 313.121094 243.195312 304.953125 251.359375 294.878906 251.359375 L 188.160156 251.359375 C 178.085938 251.359375 169.921875 243.195312 169.921875 233.121094 L 169.921875 230.878906 C 169.921875 220.804688 178.085938 212.640625 188.160156 212.640625 Z M 188.160156 212.640625 "/>
+</g>
+</svg>
diff --git a/sysui/desktop/icons/hicolor/64x64/apps/main.png b/sysui/desktop/icons/hicolor/64x64/apps/main.png
index ea22a799292f..b650bdda86f6 100644
--- a/sysui/desktop/icons/hicolor/64x64/apps/main.png
+++ b/sysui/desktop/icons/hicolor/64x64/apps/main.png
Binary files differ
diff --git a/sysui/desktop/icons/hicolor/64x64/apps/main.svg b/sysui/desktop/icons/hicolor/64x64/apps/main.svg
index 54b4ee747afa..af1b4fe7a3a2 100644
--- a/sysui/desktop/icons/hicolor/64x64/apps/main.svg
+++ b/sysui/desktop/icons/hicolor/64x64/apps/main.svg
@@ -1,90 +1,10 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- height="64"
- preserveAspectRatio="xMidYMid"
- viewBox="0 0 1693.3332 1693.3332"
- width="64"
- version="1.1"
- id="svg1868"
- sodipodi:docname="main.svg"
- inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
- style="fill-rule:evenodd;stroke-width:28.22200012;stroke-linejoin:round"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\64x64\apps\main.png"
- inkscape:export-xdpi="96"
- inkscape:export-ydpi="96">
- <metadata
- id="metadata1874">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <defs
- id="defs1872" />
- <sodipodi:namedview
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="1"
- inkscape:pageshadow="2"
- inkscape:window-width="2520"
- inkscape:window-height="1496"
- id="namedview1870"
- showgrid="false"
- inkscape:zoom="6.7428571"
- inkscape:cx="42.260936"
- inkscape:cy="64.290578"
- inkscape:window-x="2869"
- inkscape:window-y="50"
- inkscape:window-maximized="1"
- inkscape:current-layer="g6082"
- inkscape:showpageshadow="false"
- units="px" />
- <g
- data-name="Ebene 4"
- id="Ebene_4"
- transform="matrix(99.215593,0,0,99.215593,82.797858,-5681.809)">
- <g
- id="g6082">
- <g
- id="g822"
- transform="matrix(0.22786156,0,0,0.22754227,-0.6561009,57.369112)"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\16x16\apps\main.png"
- inkscape:export-xdpi="95.16349"
- inkscape:export-ydpi="95.16349">
- <rect
- style="fill:#971e29;stroke-width:28.78103447"
- y="-0.44744909"
- x="-0.78303587"
- width="74.901657"
- height="75.00676"
- id="rect2699" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6084"
- d="m 49.49,11.51 a 1.41,1.41 0 0 0 -1.3,0.83 1.38,1.38 0 0 0 0.3,1.49 l 11.72,11.76 a 1.43,1.43 0 0 0 1.5,0.31 1.38,1.38 0 0 0 0.85,-1.25 V 12.87 a 1.42,1.42 0 0 0 -1.37,-1.36 z" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6088"
- d="M 17.25,11.51 A 1.39,1.39 0 0 0 15.88,12.9 V 66.59 A 1.39,1.39 0 0 0 17.25,68 h 30.84 c 4.53,0 14.47,-9.74 14.47,-14.68 V 32 a 1.36,1.36 0 0 0 -0.4,-1 l -19,-19.09 a 1.43,1.43 0 0 0 -1,-0.43 z m 1.39,2.78 h 23 l 18.14,18.29 c 0,0 0,18.59 0,19.78 0,3.7 -8.53,12.83 -13,12.83 H 18.64 Z" />
- </g>
- </g>
- </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="64px" height="64px" viewBox="0 0 64 64" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 53.640625 28.480469 C 52.921875 27.761719 51.761719 27.761719 51.039062 28.480469 L 31.941406 47.578125 L 23.921875 39.601562 L 19.558594 43.960938 L 31.941406 56.339844 L 56.699219 31.578125 L 53.640625 28.5 Z M 53.640625 28.480469 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 40.21875 51.921875 L 34.921875 56.398438 L 38.199219 56.398438 C 44.261719 56.398438 49.199219 51.460938 49.199219 45.398438 L 49.199219 44.398438 L 44.160156 48.71875 C 43.320312 50.238281 41.898438 51.398438 40.21875 51.921875 Z M 40.21875 51.921875 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 15.660156 52.21875 L 15.660156 10.980469 L 45.019531 10.980469 L 45.019531 28.878906 L 49.199219 25.300781 L 49.199219 6.800781 L 11.5 6.800781 L 11.5 56.398438 L 26.339844 56.398438 L 22.820312 52.21875 Z M 15.660156 52.21875 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 23.339844 14.558594 L 36.480469 14.558594 C 37.792969 14.558594 38.859375 15.625 38.859375 16.941406 L 38.859375 17.261719 C 38.859375 18.574219 37.792969 19.640625 36.480469 19.640625 L 23.339844 19.640625 C 22.027344 19.640625 20.960938 18.574219 20.960938 17.261719 L 20.960938 16.941406 C 20.960938 15.625 22.027344 14.558594 23.339844 14.558594 Z M 23.339844 14.558594 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 23.519531 26.578125 L 36.859375 26.578125 C 38.121094 26.578125 39.140625 27.601562 39.140625 28.859375 L 39.140625 29.140625 C 39.140625 30.398438 38.121094 31.421875 36.859375 31.421875 L 23.519531 31.421875 C 22.261719 31.421875 21.238281 30.398438 21.238281 29.140625 L 21.238281 28.859375 C 21.238281 27.601562 22.261719 26.578125 23.519531 26.578125 Z M 23.519531 26.578125 "/>
+</g>
</svg>
diff --git a/sysui/desktop/icons/hicolor/64x64/apps/startcenter.png b/sysui/desktop/icons/hicolor/64x64/apps/startcenter.png
index ea22a799292f..c8268ea38afb 100644
--- a/sysui/desktop/icons/hicolor/64x64/apps/startcenter.png
+++ b/sysui/desktop/icons/hicolor/64x64/apps/startcenter.png
Binary files differ
diff --git a/sysui/desktop/icons/hicolor/64x64/apps/startcenter.svg b/sysui/desktop/icons/hicolor/64x64/apps/startcenter.svg
index 54b4ee747afa..af1b4fe7a3a2 100644
--- a/sysui/desktop/icons/hicolor/64x64/apps/startcenter.svg
+++ b/sysui/desktop/icons/hicolor/64x64/apps/startcenter.svg
@@ -1,90 +1,10 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- height="64"
- preserveAspectRatio="xMidYMid"
- viewBox="0 0 1693.3332 1693.3332"
- width="64"
- version="1.1"
- id="svg1868"
- sodipodi:docname="main.svg"
- inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
- style="fill-rule:evenodd;stroke-width:28.22200012;stroke-linejoin:round"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\64x64\apps\main.png"
- inkscape:export-xdpi="96"
- inkscape:export-ydpi="96">
- <metadata
- id="metadata1874">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <defs
- id="defs1872" />
- <sodipodi:namedview
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="1"
- inkscape:pageshadow="2"
- inkscape:window-width="2520"
- inkscape:window-height="1496"
- id="namedview1870"
- showgrid="false"
- inkscape:zoom="6.7428571"
- inkscape:cx="42.260936"
- inkscape:cy="64.290578"
- inkscape:window-x="2869"
- inkscape:window-y="50"
- inkscape:window-maximized="1"
- inkscape:current-layer="g6082"
- inkscape:showpageshadow="false"
- units="px" />
- <g
- data-name="Ebene 4"
- id="Ebene_4"
- transform="matrix(99.215593,0,0,99.215593,82.797858,-5681.809)">
- <g
- id="g6082">
- <g
- id="g822"
- transform="matrix(0.22786156,0,0,0.22754227,-0.6561009,57.369112)"
- inkscape:export-filename="C:\cygwin\home\Marina\lode\dev\FLOSS-194\sysui\desktop\icons\hicolor\16x16\apps\main.png"
- inkscape:export-xdpi="95.16349"
- inkscape:export-ydpi="95.16349">
- <rect
- style="fill:#971e29;stroke-width:28.78103447"
- y="-0.44744909"
- x="-0.78303587"
- width="74.901657"
- height="75.00676"
- id="rect2699" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6084"
- d="m 49.49,11.51 a 1.41,1.41 0 0 0 -1.3,0.83 1.38,1.38 0 0 0 0.3,1.49 l 11.72,11.76 a 1.43,1.43 0 0 0 1.5,0.31 1.38,1.38 0 0 0 0.85,-1.25 V 12.87 a 1.42,1.42 0 0 0 -1.37,-1.36 z" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6088"
- d="M 17.25,11.51 A 1.39,1.39 0 0 0 15.88,12.9 V 66.59 A 1.39,1.39 0 0 0 17.25,68 h 30.84 c 4.53,0 14.47,-9.74 14.47,-14.68 V 32 a 1.36,1.36 0 0 0 -0.4,-1 l -19,-19.09 a 1.43,1.43 0 0 0 -1,-0.43 z m 1.39,2.78 h 23 l 18.14,18.29 c 0,0 0,18.59 0,19.78 0,3.7 -8.53,12.83 -13,12.83 H 18.64 Z" />
- </g>
- </g>
- </g>
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="64px" height="64px" viewBox="0 0 64 64" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 53.640625 28.480469 C 52.921875 27.761719 51.761719 27.761719 51.039062 28.480469 L 31.941406 47.578125 L 23.921875 39.601562 L 19.558594 43.960938 L 31.941406 56.339844 L 56.699219 31.578125 L 53.640625 28.5 Z M 53.640625 28.480469 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 40.21875 51.921875 L 34.921875 56.398438 L 38.199219 56.398438 C 44.261719 56.398438 49.199219 51.460938 49.199219 45.398438 L 49.199219 44.398438 L 44.160156 48.71875 C 43.320312 50.238281 41.898438 51.398438 40.21875 51.921875 Z M 40.21875 51.921875 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 15.660156 52.21875 L 15.660156 10.980469 L 45.019531 10.980469 L 45.019531 28.878906 L 49.199219 25.300781 L 49.199219 6.800781 L 11.5 6.800781 L 11.5 56.398438 L 26.339844 56.398438 L 22.820312 52.21875 Z M 15.660156 52.21875 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 23.339844 14.558594 L 36.480469 14.558594 C 37.792969 14.558594 38.859375 15.625 38.859375 16.941406 L 38.859375 17.261719 C 38.859375 18.574219 37.792969 19.640625 36.480469 19.640625 L 23.339844 19.640625 C 22.027344 19.640625 20.960938 18.574219 20.960938 17.261719 L 20.960938 16.941406 C 20.960938 15.625 22.027344 14.558594 23.339844 14.558594 Z M 23.339844 14.558594 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 23.519531 26.578125 L 36.859375 26.578125 C 38.121094 26.578125 39.140625 27.601562 39.140625 28.859375 L 39.140625 29.140625 C 39.140625 30.398438 38.121094 31.421875 36.859375 31.421875 L 23.519531 31.421875 C 22.261719 31.421875 21.238281 30.398438 21.238281 29.140625 L 21.238281 28.859375 C 21.238281 27.601562 22.261719 26.578125 23.519531 26.578125 Z M 23.519531 26.578125 "/>
+</g>
</svg>
diff --git a/sysui/desktop/icons/hicolor/64x64/mimetypes/oasis-empty.png b/sysui/desktop/icons/hicolor/64x64/mimetypes/oasis-empty.png
index c6ecc7cd06b1..b650bdda86f6 100644
--- a/sysui/desktop/icons/hicolor/64x64/mimetypes/oasis-empty.png
+++ b/sysui/desktop/icons/hicolor/64x64/mimetypes/oasis-empty.png
Binary files differ
diff --git a/sysui/desktop/icons/hicolor/64x64/mimetypes/oasis-empty.svg b/sysui/desktop/icons/hicolor/64x64/mimetypes/oasis-empty.svg
index 0f240c0d1b12..af1b4fe7a3a2 100644
--- a/sysui/desktop/icons/hicolor/64x64/mimetypes/oasis-empty.svg
+++ b/sysui/desktop/icons/hicolor/64x64/mimetypes/oasis-empty.svg
@@ -1 +1,10 @@
-<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientTransform="matrix(3.9998072 0 0 3.9988898 -436.9764 -3904.3838)" gradientUnits="userSpaceOnUse" x1="122.75008" x2="111.74973" y1="991.62115" y2="977.11713"><stop offset="0" stop-color="#535353"/><stop offset="1" stop-color="#7e7e7e"/></linearGradient><path d="m9.6266073.000051c-.12518 0-.25035.0056-.37499.01758-1.83351.349901-2.28285 1.133123-2.24997 2.999025v57.984264c.0002 2.09375.90573 2.99883 2.9999597 2.99903h43.9984c2.09422-.0002 2.99878-.90528 2.99898-2.99903v-35.909069c.024-1.05595-.39002-2.115124-1.12498-2.874025l-21.07975-21.075198c-.75909-.7346-1.81877-1.14945-2.87496-1.125h-21.91769c-.1245997-.012-.2498097-.01758-.3749997-.01758zm33.0044397.0068c-.10498 0-.20974.0084-.31347.02441-1.33122.4264-1.77919 2.452275-.75292 3.405273l12.04766 12.110393c1.11295 1.060849 3.329.153103 3.38764-1.387697v-12.110351c-.00012-1.05685-.95647-2.017428-2.00778-2.017577h-12.04669c-.10378-.016-.20946-.02441-.31444-.02441z" fill="url(#a)"/><path d="m10.000637 3.000051v57.999899h43.99937v-35.999899l-21.99965-22z" fill="#fff"/></svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="64px" height="64px" viewBox="0 0 64 64" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 53.640625 28.480469 C 52.921875 27.761719 51.761719 27.761719 51.039062 28.480469 L 31.941406 47.578125 L 23.921875 39.601562 L 19.558594 43.960938 L 31.941406 56.339844 L 56.699219 31.578125 L 53.640625 28.5 Z M 53.640625 28.480469 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 40.21875 51.921875 L 34.921875 56.398438 L 38.199219 56.398438 C 44.261719 56.398438 49.199219 51.460938 49.199219 45.398438 L 49.199219 44.398438 L 44.160156 48.71875 C 43.320312 50.238281 41.898438 51.398438 40.21875 51.921875 Z M 40.21875 51.921875 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 15.660156 52.21875 L 15.660156 10.980469 L 45.019531 10.980469 L 45.019531 28.878906 L 49.199219 25.300781 L 49.199219 6.800781 L 11.5 6.800781 L 11.5 56.398438 L 26.339844 56.398438 L 22.820312 52.21875 Z M 15.660156 52.21875 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 23.339844 14.558594 L 36.480469 14.558594 C 37.792969 14.558594 38.859375 15.625 38.859375 16.941406 L 38.859375 17.261719 C 38.859375 18.574219 37.792969 19.640625 36.480469 19.640625 L 23.339844 19.640625 C 22.027344 19.640625 20.960938 18.574219 20.960938 17.261719 L 20.960938 16.941406 C 20.960938 15.625 22.027344 14.558594 23.339844 14.558594 Z M 23.339844 14.558594 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 23.519531 26.578125 L 36.859375 26.578125 C 38.121094 26.578125 39.140625 27.601562 39.140625 28.859375 L 39.140625 29.140625 C 39.140625 30.398438 38.121094 31.421875 36.859375 31.421875 L 23.519531 31.421875 C 22.261719 31.421875 21.238281 30.398438 21.238281 29.140625 L 21.238281 28.859375 C 21.238281 27.601562 22.261719 26.578125 23.519531 26.578125 Z M 23.519531 26.578125 "/>
+</g>
+</svg>
diff --git a/sysui/desktop/icons/hicolor/scalable/apps/main.png b/sysui/desktop/icons/hicolor/scalable/apps/main.png
index 37d91bfa2320..d1ca6f9865b7 100644
--- a/sysui/desktop/icons/hicolor/scalable/apps/main.png
+++ b/sysui/desktop/icons/hicolor/scalable/apps/main.png
Binary files differ
diff --git a/sysui/desktop/icons/hicolor/scalable/apps/main.svg b/sysui/desktop/icons/hicolor/scalable/apps/main.svg
index 28215ee52ca5..7cfdad3fd177 100644
--- a/sysui/desktop/icons/hicolor/scalable/apps/main.svg
+++ b/sysui/desktop/icons/hicolor/scalable/apps/main.svg
@@ -1,83 +1 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- height="128mm"
- preserveAspectRatio="xMidYMid"
- viewBox="0 0 12800 12800"
- width="128mm"
- version="1.1"
- id="svg1868"
- sodipodi:docname="main.svg"
- inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
- style="fill-rule:evenodd;stroke-width:28.22200012;stroke-linejoin:round">
- <metadata
- id="metadata1874">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <defs
- id="defs1872" />
- <sodipodi:namedview
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="0"
- inkscape:pageshadow="2"
- inkscape:window-width="2880"
- inkscape:window-height="1721"
- id="namedview1870"
- showgrid="false"
- inkscape:zoom="1.19198"
- inkscape:cx="372.42041"
- inkscape:cy="253.74975"
- inkscape:window-x="2869"
- inkscape:window-y="-11"
- inkscape:window-maximized="1"
- inkscape:current-layer="g6082"
- inkscape:showpageshadow="false" />
- <g
- data-name="Ebene 4"
- id="Ebene_4"
- transform="matrix(99.215593,0,0,99.215593,82.797858,5424.8566)">
- <g
- id="g6082">
- <g
- id="g822"
- transform="matrix(1.718595,0,0,1.718595,0.6543779,-53.855609)">
- <rect
- style="fill:#971e29;stroke-width:28.78103447"
- y="-0.44744909"
- x="-0.78303587"
- width="74.901657"
- height="75.00676"
- id="rect2699" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6084"
- d="m 49.49,11.51 a 1.41,1.41 0 0 0 -1.3,0.83 1.38,1.38 0 0 0 0.3,1.49 l 11.72,11.76 a 1.43,1.43 0 0 0 1.5,0.31 1.38,1.38 0 0 0 0.85,-1.25 V 12.87 a 1.42,1.42 0 0 0 -1.37,-1.36 z" />
- <path
- style="fill:#ffffff"
- inkscape:connector-curvature="0"
- id="path6088"
- d="M 17.25,11.51 A 1.39,1.39 0 0 0 15.88,12.9 V 66.59 A 1.39,1.39 0 0 0 17.25,68 h 30.84 c 4.53,0 14.47,-9.74 14.47,-14.68 V 32 a 1.36,1.36 0 0 0 -0.4,-1 l -19,-19.09 a 1.43,1.43 0 0 0 -1,-0.43 z m 1.39,2.78 h 23 l 18.14,18.29 c 0,0 0,18.59 0,19.78 0,3.7 -8.53,12.83 -13,12.83 H 18.64 Z" />
- </g>
- </g>
- </g>
-</svg>
+<?xml version="1.0" encoding="UTF-8"?><svg id="Logos_Material" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32"><defs><style>.cls-1{fill:#e11e19;}.cls-2{clip-path:url(#clippath);}.cls-3{fill:none;}</style><clipPath id="clippath"><rect class="cls-3" x="206.65" y="209.85" width="174" height="38"/></clipPath></defs><g class="cls-2"><g><path class="cls-1" d="M27.39,14.82c-.36-.36-.94-.36-1.3,0l-9.55,9.55-4.01-3.99-2.18,2.18,6.19,6.19,12.38-12.38-1.53-1.54Z"/><path class="cls-1" d="M20.68,26.54l-2.65,2.24h1.64c3.03,0,5.5-2.47,5.5-5.5v-.5l-2.52,2.16c-.42,.76-1.13,1.34-1.97,1.6Z"/><polygon class="cls-1" points="8.4 26.69 8.4 6.07 23.08 6.07 23.08 15.02 25.17 13.23 25.17 3.98 6.32 3.98 6.32 28.77 13.74 28.77 11.98 26.69 8.4 26.69"/><rect class="cls-1" x="11.05" y="7.86" width="8.95" height="2.54" rx="1.19" ry="1.19"/><rect class="cls-1" x="11.19" y="13.87" width="8.95" height="2.42" rx="1.14" ry="1.14"/></g></g><g><path class="cls-1" d="M26.82,14.24c-.36-.36-.94-.36-1.3,0l-9.55,9.55-4.01-3.99-2.18,2.18,6.19,6.19,12.38-12.38-1.53-1.54Z"/><path class="cls-1" d="M20.11,25.96l-2.65,2.24h1.64c3.03,0,5.5-2.47,5.5-5.5v-.5l-2.52,2.16c-.42,.76-1.13,1.34-1.97,1.6Z"/><polygon class="cls-1" points="7.83 26.11 7.83 5.49 22.51 5.49 22.51 14.44 24.6 12.65 24.6 3.4 5.75 3.4 5.75 28.2 13.17 28.2 11.41 26.11 7.83 26.11"/><rect class="cls-1" x="10.48" y="7.28" width="8.95" height="2.54" rx="1.19" ry="1.19"/><rect class="cls-1" x="10.62" y="13.29" width="8.95" height="2.42" rx="1.14" ry="1.14"/></g></svg> \ No newline at end of file
diff --git a/sysui/desktop/icons/hicolor/scalable/apps/startcenter.svg b/sysui/desktop/icons/hicolor/scalable/apps/startcenter.svg
index 67f6899269c1..7cfdad3fd177 100644
--- a/sysui/desktop/icons/hicolor/scalable/apps/startcenter.svg
+++ b/sysui/desktop/icons/hicolor/scalable/apps/startcenter.svg
@@ -1,417 +1 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- version="1.1"
- x="0px"
- y="0px"
- viewBox="0 0 128 128"
- xml:space="preserve"
- id="svg3336"
- inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
- sodipodi:docname="startcenter.svg"
- width="128"
- height="128"><metadata
- id="metadata3474"><rdf:RDF><cc:Work
- rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
- id="defs3472"><clipPath
- clipPathUnits="userSpaceOnUse"
- id="clipPath4978"><rect
- style="fill:#5fa243;fill-opacity:1"
- id="rect4980"
- width="113.625"
- height="79.875"
- x="72.875"
- y="50.125" /></clipPath><style
- id="style1078">
- .cls-1 {
- fill: #961e29;
- }
-
- .cls-2 {
- fill: #fff;
- }
- </style><style
- id="style943">
- .cls-1 {
- fill: #961e29;
- }
-
- .cls-2 {
- fill: #fff;
- }
- </style></defs><sodipodi:namedview
- pagecolor="#eff1f4"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="0"
- inkscape:pageshadow="2"
- inkscape:window-width="2880"
- inkscape:window-height="1721"
- id="namedview3470"
- showgrid="false"
- inkscape:zoom="7.9999999"
- inkscape:cx="104.3664"
- inkscape:cy="56.580491"
- inkscape:window-x="2869"
- inkscape:window-y="-11"
- inkscape:window-maximized="1"
- inkscape:current-layer="svg3336"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:showpageshadow="false" />
-<style
- type="text/css"
- id="style3338">
- .st0{display:none;}
- .st1{display:inline;}
- .st2{fill:#5FA243;}
- .st3{fill:#FFFFFF;}
- .st4{fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;}
- .st5{fill:#C12521;}
- .st6{clip-path:url(#SVGID_2_);fill:#FFFFFF;}
- .st7{display:inline;fill:#5FA243;}
- .st8{display:inline;fill:#C12521;}
- .st9{display:inline;fill:#FFFFFF;}
- .st10{clip-path:url(#SVGID_4_);fill:#FFFFFF;}
- .st11{font-family:'CIBUnit';}
- .st12{font-size:17px;}
-</style>
-<g
- id="alte_version"
- class="st0"
- style="display:none"
- transform="translate(-52.877201,-55.941053)">
- <g
- class="st1"
- id="g3341"
- style="display:inline">
- <polygon
- class="st2"
- points="262,-250 262,-64 0,-64 0,-249.9 "
- id="polygon3343"
- style="fill:#5fa243" />
- </g>
- <g
- id="Libre_2_"
- class="st1"
- style="display:inline">
- <polyline
- class="st3"
- points="73.7,-207.5 73.7,-182.8 89.6,-182.8 89.6,-186.5 78.6,-186.5 78.6,-207.5 73.7,-207.5 "
- id="polyline3346"
- style="fill:#ffffff" />
- <path
- class="st3"
- d="m 92.6,-182.8 h 4.9 v -17.8 h -4.9 v 17.8 m 2.4,-19.3 c 1.5,0 2.8,-1.2 2.8,-2.8 0,-1.5 -1.3,-2.8 -2.8,-2.8 -1.6,0 -2.8,1.3 -2.8,2.8 0,1.6 1.3,2.8 2.8,2.8"
- id="path3348"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" />
- <path
- class="st3"
- d="m 105.9,-198.5 v 0 L 105.8,-209 H 101 v 26.2 h 4.8 l 0.1,-2.1 h 0.1 c 1.5,1.7 3,2.4 5.6,2.4 4.7,0 7.8,-4.3 7.8,-9.6 0,-5.1 -2.8,-8.9 -7.6,-8.9 -2.7,0.1 -4.2,0.9 -5.9,2.5 m 0,6.4 c 0,-3.1 1.4,-5.1 4,-5.1 2.9,0 4.4,2.1 4.4,5.5 0,3.4 -1.4,5.5 -4.3,5.5 -2.5,0 -4.1,-2 -4.1,-5.1 v -0.8"
- id="path3350"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" />
- <path
- class="st3"
- d="m 132.4,-200.9 c -2.3,0.1 -4.5,1.6 -5.6,3.5 h -0.1 l -0.1,-3.2 h -4.8 v 17.8 h 4.9 v -6.7 c 0,-3.6 0.7,-4.8 1.8,-5.7 1,-0.7 2.1,-1 3.7,-1.1 l 0.2,-4.6"
- id="path3352"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" />
- <path
- class="st3"
- d="m 150.3,-192.7 c 0,-4.4 -2.7,-8.2 -7.3,-8.2 -5.6,0 -9.2,3.9 -9.2,9.7 0,5.7 3.7,8.8 9.2,8.8 2.6,0 4.4,-0.4 6.1,-1.2 l -0.5,-3.6 c -1.6,0.7 -3.2,1.1 -5,1.1 -2.9,0 -4.8,-1.3 -5,-4.1 h 11.5 c 0.1,-0.7 0.2,-1.7 0.2,-2.5 m -7.9,-4.5 c 2.1,0 3.1,1.7 3.2,3.5 h -6.9 c 0.4,-2 1.8,-3.5 3.7,-3.5"
- id="path3354"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" />
- <path
- class="st3"
- d="m 165,-207.8 c -6.5,0 -11.9,4.8 -11.9,12.7 0,7.9 5.4,12.7 11.9,12.7 6.5,0 11.9,-4.8 11.9,-12.7 0.1,-8 -5.3,-12.7 -11.9,-12.7 m 0,2.4 c 4.9,0 8.6,3.6 8.6,10.2 0,6.6 -3.7,10.2 -8.6,10.2 -4.9,0 -8.6,-3.6 -8.6,-10.2 0.1,-6.5 3.8,-10.2 8.6,-10.2"
- id="path3356"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" />
- <path
- class="st3"
- d="m 181.6,-201.5 v 1.1 h -2.9 v 2.3 h 2.9 v 15.3 h 3 v -15.3 h 4.5 v -2.3 h -4.5 v -1.6 c 0,-3.2 1.3,-5 3.8,-5 1.1,0 1.9,0.2 2.5,0.4 l 0.3,-2.3 c -0.7,-0.3 -1.9,-0.5 -2.9,-0.5 -4.2,0 -6.7,2.8 -6.7,7.9"
- id="path3358"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" />
- <path
- class="st3"
- d="m 191.7,-201.5 v 1.1 h -2.9 v 2.3 h 2.9 v 15.3 h 3 v -15.3 h 4.5 v -2.3 h -4.5 v -1.6 c 0,-3.2 1.3,-5 3.8,-5 1.1,0 1.9,0.2 2.5,0.4 l 0.3,-2.3 c -0.7,-0.3 -1.9,-0.5 -2.9,-0.5 -4.2,0 -6.7,2.8 -6.7,7.9"
- id="path3360"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" />
- <path
- class="st3"
- d="m 202.8,-182.8 h 3 v -17.6 h -3 v 17.6 m 1.5,-20.2 c 1.1,0 1.9,-0.8 1.9,-1.9 0,-1.1 -0.8,-1.9 -1.9,-1.9 -1.1,0 -1.9,0.8 -1.9,1.9 0.1,1.1 0.9,1.9 1.9,1.9"
- id="path3362"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" />
- <path
- class="st3"
- d="m 212.2,-191.7 c 0,-4.4 2.7,-6.8 6.1,-6.8 1.8,0 3.4,0.4 4.7,1.1 l 0.3,-2.3 c -1.1,-0.5 -2.8,-1.1 -4.8,-1.1 -5.4,0 -9.5,3.3 -9.5,9.5 0,5.8 3.7,8.9 8.6,8.9 2.2,0 3.7,-0.3 5.5,-1 l -0.3,-2.3 c -1.5,0.7 -3.2,1 -4.7,1 -3.5,0 -5.9,-2.3 -5.9,-7"
- id="path3364"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" />
- <path
- class="st3"
- d="m 240.5,-190.9 c 0.1,-0.7 0.1,-1.2 0.1,-1.8 0,-4.5 -2.4,-8.1 -6.9,-8.1 -4.9,0 -8.5,4.1 -8.5,9.5 0,6 3.6,8.9 8.5,8.9 2.2,0 3.8,-0.3 5.5,-1 l -0.3,-2.3 c -1.3,0.7 -3.3,1 -4.8,1 -3.5,0 -5.8,-2.2 -5.9,-6.2 h 12.3 m -7,-7.5 c 2.7,0 4.1,2.2 4.1,5.1 h -9.2 c 0.5,-3.1 2.2,-5.1 5.1,-5.1"
- id="path3366"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" />
- <path
- class="st4"
- d="m 47.3,-224.2 c -0.4,0 -0.8,0.2 -1,0.6 -0.2,0.4 -0.1,0.8 0.2,1.1 l 8.7,8.8 c 0.3,0.3 0.7,0.4 1.1,0.2 0.4,-0.2 0.6,-0.5 0.6,-0.9 v -8.8 c 0,-0.5 -0.5,-1 -1,-1 z m 0,0"
- id="path3368"
- inkscape:connector-curvature="0"
- style="clip-rule:evenodd;fill:#ffffff;fill-rule:evenodd" />
- <path
- class="st4"
- d="m 23.4,-224.2 c -0.5,0 -1,0.5 -1,1 v 39.9 c 0,0.5 0.5,1 1,1 H 56 c 0.5,0 1,-0.5 1,-1 V -209 c 0,-0.3 -0.1,-0.5 -0.3,-0.7 l -14.1,-14.2 c -0.2,-0.2 -0.5,-0.3 -0.7,-0.3 z m 1,2.1 h 17.1 l 13.5,13.6 v 24.3 H 24.4 Z m 0,0"
- id="path3370"
- inkscape:connector-curvature="0"
- style="clip-rule:evenodd;fill:#ffffff;fill-rule:evenodd" />
- </g>
- <g
- class="st1"
- id="g3372"
- style="display:inline">
- <path
- class="st5"
- d="M 0,-103.5 0.1,-64 H 262 v -112 c -82,46.9 -180.2,-13.4 -262,72.5 z"
- id="path3374"
- inkscape:connector-curvature="0"
- style="fill:#c12521" />
- </g>
- <g
- class="st1"
- id="g3376"
- style="display:inline">
- <path
- class="st3"
- d="m 313.7,-253 c 0,0 -0.3,1.4 -1,4.1 -0.6,2.7 -1.7,6.6 -3.2,11.5 -1.6,4.9 -3.6,10.8 -6.6,17.4 -3,6.6 -6.9,13.8 -12.1,21 -0.7,0.9 -1.3,1.8 -2,2.7 -0.7,0.9 -1.5,1.8 -2.2,2.7 -0.4,0.4 -0.7,0.9 -1.1,1.4 -0.4,0.4 -0.8,0.9 -1.2,1.3 -0.8,0.9 -1.6,1.8 -2.4,2.6 -0.8,0.9 -1.7,1.7 -2.6,2.6 -0.4,0.4 -0.9,0.9 -1.3,1.3 -0.4,0.4 -0.9,0.8 -1.4,1.2 -0.9,0.8 -1.9,1.6 -2.9,2.5 -1,0.8 -2,1.5 -3,2.3 -4.1,3 -8.6,5.9 -13.4,8.3 -4.8,2.4 -9.9,4.6 -15.2,6.3 -10.6,3.5 -22,5.7 -33.5,7 -11.6,1.4 -23.3,1.8 -35.1,2.1 -11.7,0.2 -23.4,0.5 -35,0.7 -11.5,0.3 -22.8,0.9 -33.7,2.1 -10.9,1.1 -21.3,3 -31,5.4 -9.7,2.5 -18.6,5.6 -26.6,9.2 -8,3.6 -14.9,7.6 -20.8,11.6 -1.5,0.9 -2.9,2 -4.2,3 -0.7,0.5 -1.3,1 -2,1.4 -0.6,0.5 -1.2,1 -1.8,1.5 -1.2,0.9 -2.4,1.8 -3.5,2.7 -1.1,0.9 -2.1,1.8 -3.1,2.6 -2,1.6 -3.6,3.2 -5.1,4.6 -1.5,1.3 -2.7,2.5 -3.6,3.5 -2,1.9 -3,3 -3,3 0,0 1,-1.1 2.8,-3.2 0.9,-1 2,-2.3 3.4,-3.7 1.4,-1.4 3,-3.1 4.9,-4.8 3.7,-3.6 8.5,-7.6 14.4,-11.7 5.8,-4.2 12.8,-8.4 20.8,-12.1 8,-3.8 17,-7.1 26.8,-9.8 9.8,-2.6 20.3,-4.6 31.3,-6 11,-1.4 22.3,-2.1 33.9,-2.6 11.6,-0.5 23.3,-0.7 35,-1.1 11.7,-0.4 23.4,-1 34.7,-2.3 11.4,-1.3 22.4,-3.5 32.7,-6.8 10.2,-3.5 19.6,-8.2 27.6,-14 1,-0.7 2,-1.5 2.9,-2.2 0.9,-0.8 1.9,-1.6 2.8,-2.3 0.9,-0.8 1.8,-1.6 2.7,-2.4 0.9,-0.8 1.7,-1.6 2.6,-2.4 0.8,-0.8 1.6,-1.7 2.4,-2.5 0.4,-0.4 0.8,-0.8 1.2,-1.2 0.4,-0.4 0.7,-0.9 1.1,-1.3 0.7,-0.9 1.5,-1.7 2.2,-2.5 0.7,-0.8 1.4,-1.7 2,-2.6 5.3,-6.8 9.4,-13.8 12.6,-20 3.3,-6.3 5.6,-12 7.5,-16.8 0.9,-2.4 1.7,-4.5 2.4,-6.4 0.4,-0.9 0.6,-1.8 0.9,-2.6 0.3,-0.8 0.5,-1.5 0.7,-2.2 0.8,-2.7 1.3,-4.1 1.3,-4.1 z"
- id="path3378"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" />
- </g>
- <g
- class="st1"
- id="g3380"
- style="display:inline">
- <path
- class="st3"
- d="m 185.1,-89.2 c 0,1.9 -2.3,4 -4.2,4 -1.2,0 -3.4,0 -3.4,0 v -33.6 h 7.6 z"
- id="path3382"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" />
- <g
- id="g3384">
- <defs
- id="defs3386">
- <rect
- id="SVGID_1_"
- x="147.60001"
- y="-126.7"
- width="92.699997"
- height="42" />
- </defs>
- <clipPath
- id="SVGID_2_">
- <use
- xlink:href="#SVGID_1_"
- style="overflow:visible"
- id="use3390"
- x="0"
- y="0"
- width="100%"
- height="100%" />
- </clipPath>
- <path
- class="st6"
- d="m 207.1,-108.8 c 0,-1.3 -0.3,-2.3 -0.9,-2.8 -0.6,-0.5 -1.7,-0.8 -3.1,-0.8 H 197 v 7.3 h 6.3 c 1.3,0 2.3,-0.3 2.9,-0.9 0.6,-0.5 0.9,-1.5 0.9,-2.8 z m 0.8,13.3 c 0,-1.4 -0.3,-2.4 -1,-3.1 -0.7,-0.6 -1.8,-0.9 -3.5,-0.9 h -6.5 v 8.1 h 6.7 c 0,0 2.6,-0.3 3.3,-0.9 0.7,-0.5 1,-1.6 1,-3.2 z m -14.3,-23.3 c 0.8,0 9.7,0 9.7,0 3.7,0 6.4,0.8 8.2,2.3 1.8,1.5 2.7,3.6 2.7,6.3 0,1.9 -0.4,3.4 -1.2,4.6 -0.8,1.2 -1.9,2.1 -3.2,2.6 v 0.1 c 3.8,1 5.7,3.7 5.7,7.9 0,1.5 -0.2,2.9 -0.7,4.1 -0.5,1.2 -1.2,2.2 -2.1,3.1 -1,0.9 -2.2,1.5 -3.7,1.9 -1.5,0.4 -3.3,0.7 -5.4,0.7 h -13.8 c 0,0 0,-29.6 0,-29.6 -0.1,-1.5 2.2,-4 3.8,-4 z"
- id="path3392"
- clip-path="url(#SVGID_2_)"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" />
- <path
- class="st6"
- d="m 167.1,-112.3 c -9.3,-1.4 -11.6,1.8 -11.6,10.3 0,8.2 2.3,11.3 12.4,10.3 3.2,-0.3 3.9,0.7 4.5,5.6 -1.1,0.6 -5.9,1.4 -9.3,1.3 -5.1,-0.2 -9.3,-1.4 -11.7,-4.3 -2.5,-2.8 -3.7,-7.2 -3.7,-13.2 0,-12 5.4,-17 15.9,-17 5.1,0 8.6,1.5 8.6,1.5 -1,5.6 -1.9,6 -5.1,5.5 z"
- id="path3394"
- clip-path="url(#SVGID_2_)"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" />
- </g>
- <path
- class="st3"
- d="m 234.5,-99.5 c 2.5,0 6.2,-4 6.2,-6.1 0,0 0,-21 0,-21 h -19.3 v 27.2 h 13.1 z"
- id="path3396"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" />
- </g>
- <text
- transform="translate(20.9652,-84.5756)"
- class="st9 st11 st12"
- id="text3398"
- style="font-size:17px;line-height:0%;font-family:CIBUnit;display:inline;fill:#ffffff">powered by</text>
-
-
-
-
-
-
-</g>
-
-<g
- data-name="doXigate Arbeitsunterlagen"
- id="doXigate_Arbeitsunterlagen"
- transform="matrix(0.76734924,0,0,0.76734924,0.52757444,49.804039)"><g
- id="g995"><path
- id="path949"
- d="M 53.008,20.047 H 43 V 3.242 h 3.785 v 13.735 h 6.223 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path951"
- d="m 56.781,6.148 a 2.163,2.163 0 0 1 -1.535,-0.556 1.8,1.8 0 0 1 -0.6,-1.365 1.733,1.733 0 0 1 0.6,-1.36 2.508,2.508 0 0 1 3.076,0 1.737,1.737 0 0 1 0.592,1.36 1.783,1.783 0 0 1 -0.592,1.382 2.2,2.2 0 0 1 -1.541,0.539 z m 1.828,13.9 h -3.7 v -12 h 3.7 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path953"
- d="M 65.477,18.652 H 65.43 v 1.395 h -3.7 V 2.281 h 3.7 v 7.571 h 0.047 a 4.392,4.392 0 0 1 3.9,-2.1 4.28,4.28 0 0 1 3.574,1.594 6.87,6.87 0 0 1 1.254,4.359 7.437,7.437 0 0 1 -1.465,4.816 4.771,4.771 0 0 1 -3.914,1.817 3.78,3.78 0 0 1 -3.349,-1.686 z M 65.371,13.59 v 1.23 a 2.81,2.81 0 0 0 0.668,1.922 2.173,2.173 0 0 0 1.711,0.762 2.269,2.269 0 0 0 1.963,-0.979 4.722,4.722 0 0 0 0.7,-2.771 3.763,3.763 0 0 0 -0.638,-2.326 2.156,2.156 0 0 0 -1.823,-0.838 2.352,2.352 0 0 0 -1.845,0.832 3.157,3.157 0 0 0 -0.736,2.168 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path955"
- d="m 84.438,11.387 a 3.217,3.217 0 0 0 -1.559,-0.364 2.245,2.245 0 0 0 -1.887,0.885 3.861,3.861 0 0 0 -0.679,2.408 v 5.731 h -3.7 v -12 h 3.7 v 2.226 h 0.046 a 3.2,3.2 0 0 1 3.164,-2.437 2.384,2.384 0 0 1 0.915,0.141 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path957"
- d="M 96.848,15.1 H 89.02 q 0.188,2.613 3.293,2.613 a 6.428,6.428 0 0 0 3.48,-0.938 v 2.672 a 9.139,9.139 0 0 1 -4.324,0.891 6.087,6.087 0 0 1 -4.512,-1.611 6.092,6.092 0 0 1 -1.6,-4.495 6.422,6.422 0 0 1 1.729,-4.732 5.778,5.778 0 0 1 4.266,-1.746 5.24,5.24 0 0 1 4.06,1.559 6,6 0 0 1 1.436,4.23 z m -3.434,-2.274 q 0,-2.578 -2.086,-2.578 A 1.992,1.992 0 0 0 89.787,10.986 3.361,3.361 0 0 0 89,12.828 Z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path959"
- d="m 106.516,20.34 a 7.819,7.819 0 0 1 -5.883,-2.35 8.433,8.433 0 0 1 -2.274,-6.123 9.04,9.04 0 0 1 2.309,-6.445 7.991,7.991 0 0 1 6.117,-2.461 7.63,7.63 0 0 1 5.815,2.355 8.688,8.688 0 0 1 2.22,6.211 8.894,8.894 0 0 1 -2.3,6.387 7.907,7.907 0 0 1 -6.004,2.426 z M 106.68,6.219 a 3.81,3.81 0 0 0 -3.164,1.494 6.224,6.224 0 0 0 -1.172,3.955 6.111,6.111 0 0 0 1.172,3.949 4.044,4.044 0 0 0 6.175,0.041 6.045,6.045 0 0 0 1.149,-3.92 6.555,6.555 0 0 0 -1.113,-4.066 3.63,3.63 0 0 0 -3.047,-1.453 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path961"
- d="m 125.078,5.117 a 3.746,3.746 0 0 0 -1.371,-0.281 q -1.78,0 -1.781,1.934 v 1.277 h 2.742 v 2.73 h -2.742 v 9.27 h -3.692 v -9.27 h -2.015 v -2.73 h 2.015 V 6.559 a 4.322,4.322 0 0 1 1.336,-3.3 5.1,5.1 0 0 1 3.63,-1.259 6.389,6.389 0 0 1 1.875,0.234 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path963"
- d="m 134.277,5.117 a 3.746,3.746 0 0 0 -1.371,-0.281 q -1.781,0 -1.781,1.934 v 1.277 h 2.742 v 2.73 h -2.742 v 9.27 h -3.691 v -9.27 h -2.016 v -2.73 h 2.016 V 6.559 a 4.319,4.319 0 0 1 1.336,-3.3 5.092,5.092 0 0 1 3.63,-1.259 6.389,6.389 0 0 1 1.875,0.234 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path965"
- d="m 137.523,6.148 a 2.163,2.163 0 0 1 -1.535,-0.556 1.794,1.794 0 0 1 -0.6,-1.365 1.732,1.732 0 0 1 0.6,-1.36 2.509,2.509 0 0 1 3.077,0 1.74,1.74 0 0 1 0.591,1.36 1.786,1.786 0 0 1 -0.591,1.382 2.2,2.2 0 0 1 -1.542,0.539 z m 1.829,13.9 h -3.7 v -12 h 3.7 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path967"
- d="m 151.563,19.613 a 7.316,7.316 0 0 1 -3.622,0.727 6.124,6.124 0 0 1 -4.476,-1.676 5.785,5.785 0 0 1 -1.711,-4.324 6.373,6.373 0 0 1 1.834,-4.822 6.775,6.775 0 0 1 4.9,-1.764 6.3,6.3 0 0 1 3.071,0.562 v 3.141 a 4.224,4.224 0 0 0 -2.59,-0.867 3.41,3.41 0 0 0 -2.526,0.932 3.475,3.475 0 0 0 -0.931,2.572 3.424,3.424 0 0 0 0.89,2.5 3.275,3.275 0 0 0 2.449,0.908 4.891,4.891 0 0 0 2.708,-0.867 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path969"
- d="m 164.77,15.1 h -7.829 q 0.188,2.613 3.293,2.613 a 6.429,6.429 0 0 0 3.481,-0.938 v 2.672 a 9.142,9.142 0 0 1 -4.324,0.891 6.087,6.087 0 0 1 -4.512,-1.611 6.092,6.092 0 0 1 -1.606,-4.495 6.422,6.422 0 0 1 1.735,-4.732 5.777,5.777 0 0 1 4.265,-1.746 5.242,5.242 0 0 1 4.061,1.559 6,6 0 0 1 1.436,4.23 z m -3.434,-2.274 q 0,-2.578 -2.086,-2.578 a 1.992,1.992 0 0 0 -1.541,0.738 3.354,3.354 0 0 0 -0.791,1.84 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path971"
- d="m 44.62,32.412 v 3.555 H 43 v -9.8 h 2.974 a 3.938,3.938 0 0 1 2.618,0.786 2.743,2.743 0 0 1 0.93,2.215 3.061,3.061 0 0 1 -0.971,2.338 3.689,3.689 0 0 1 -2.625,0.909 z m 0,-4.908 v 3.582 h 1.053 a 2.333,2.333 0 0 0 1.593,-0.485 1.737,1.737 0 0 0 0.547,-1.368 q 0,-1.73 -2.01,-1.729 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path973"
- d="M 56.272,36.131 A 4.41,4.41 0 0 1 52.878,34.757 5.046,5.046 0 0 1 51.6,31.182 5.348,5.348 0 0 1 52.9,27.408 4.568,4.568 0 0 1 56.43,26 a 4.31,4.31 0 0 1 3.325,1.367 5.06,5.06 0 0 1 1.262,3.575 5.364,5.364 0 0 1 -1.292,3.794 4.481,4.481 0 0 1 -3.453,1.395 z m 0.076,-8.7 a 2.727,2.727 0 0 0 -2.191,1.005 3.973,3.973 0 0 0 -0.844,2.645 4.013,4.013 0 0 0 0.82,2.632 2.647,2.647 0 0 0 2.146,1 2.77,2.77 0 0 0 2.222,-0.95 3.967,3.967 0 0 0 0.814,-2.659 4.146,4.146 0 0 0 -0.791,-2.714 2.667,2.667 0 0 0 -2.176,-0.961 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path975"
- d="m 76.025,26.164 -2.686,9.8 H 71.5 L 69.634,29.11 A 4.77,4.77 0 0 1 69.49,28.153 h -0.027 a 4.639,4.639 0 0 1 -0.164,0.944 l -1.873,6.87 h -1.88 l -2.741,-9.8 h 1.784 l 1.777,7.178 a 5.2,5.2 0 0 1 0.137,0.943 h 0.034 a 5.373,5.373 0 0 1 0.192,-0.943 l 2.009,-7.178 h 1.675 l 1.859,7.233 a 5.635,5.635 0 0 1 0.144,0.875 h 0.027 a 5.445,5.445 0 0 1 0.158,-0.9 l 1.743,-7.2 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path977"
- d="m 83.94,35.967 h -5.5 v -9.8 h 5.285 v 1.381 h -3.661 v 2.772 h 3.37 v 1.374 h -3.37 v 2.9 h 3.876 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path979"
- d="m 94.307,35.967 h -1.9 l -1.565,-2.625 a 5.813,5.813 0 0 0 -0.414,-0.619 2.488,2.488 0 0 0 -0.41,-0.42 1.349,1.349 0 0 0 -0.454,-0.239 1.9,1.9 0 0 0 -0.554,-0.076 h -0.656 v 3.979 h -1.622 v -9.8 h 3.227 a 4.678,4.678 0 0 1 1.271,0.164 2.962,2.962 0 0 1 1.012,0.5 2.3,2.3 0 0 1 0.673,0.826 2.608,2.608 0 0 1 0.243,1.16 2.883,2.883 0 0 1 -0.153,0.954 2.492,2.492 0 0 1 -0.438,0.771 2.661,2.661 0 0 1 -0.683,0.578 3.4,3.4 0 0 1 -0.9,0.369 v 0.028 a 2.489,2.489 0 0 1 0.465,0.332 c 0.132,0.12 0.258,0.244 0.376,0.372 a 4.53,4.53 0 0 1 0.352,0.434 c 0.117,0.162 0.245,0.35 0.387,0.564 z m -5.954,-8.484 v 3.186 h 1.353 a 2,2 0 0 0 0.693,-0.116 1.587,1.587 0 0 0 0.551,-0.335 1.52,1.52 0 0 0 0.363,-0.533 1.843,1.843 0 0 0 0.129,-0.7 A 1.4,1.4 0 0 0 91,27.88 1.856,1.856 0 0 0 89.722,27.48 Z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path981"
- d="m 102,35.967 h -5.5 v -9.8 h 5.284 v 1.381 h -3.659 v 2.772 h 3.37 v 1.374 h -3.37 v 2.9 H 102 Z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path983"
- d="m 104.794,35.967 v -9.8 h 2.83 q 5.421,0 5.421,4.778 a 4.711,4.711 0 0 1 -1.5,3.648 5.741,5.741 0 0 1 -4.033,1.377 z m 1.62,-8.422 v 7.048 h 1.3 a 3.636,3.636 0 0 0 2.67,-0.944 3.583,3.583 0 0 0 0.953,-2.666 q 0,-3.438 -3.562,-3.438 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path985"
- d="m 120.785,35.967 v -9.8 h 3.115 a 3.665,3.665 0 0 1 2.251,0.622 1.932,1.932 0 0 1 0.832,1.62 2.32,2.32 0 0 1 -0.472,1.45 2.548,2.548 0 0 1 -1.306,0.875 v 0.027 a 2.552,2.552 0 0 1 1.616,0.748 2.275,2.275 0 0 1 0.606,1.644 2.47,2.47 0 0 1 -0.991,2.038 3.93,3.93 0 0 1 -2.5,0.779 z m 1.62,-8.5 v 2.789 h 1.053 a 2.028,2.028 0 0 0 1.33,-0.4 1.392,1.392 0 0 0 0.482,-1.131 q 0,-1.259 -1.682,-1.258 z m 0,4.1 v 3.1 h 1.388 a 2.119,2.119 0 0 0 1.4,-0.42 1.441,1.441 0 0 0 0.5,-1.159 q 0,-1.525 -2.112,-1.524 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path987"
- d="m 136.717,26.164 -3.217,6.241 v 3.562 h -1.627 V 32.44 l -3.131,-6.276 h 1.858 l 1.927,4.2 q 0.034,0.075 0.2,0.568 h 0.021 a 3.839,3.839 0 0 1 0.226,-0.568 l 2.016,-4.2 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path989"
- d="m 150.752,35.557 a 5.938,5.938 0 0 1 -2.755,0.574 4.5,4.5 0 0 1 -3.418,-1.347 4.909,4.909 0 0 1 -1.285,-3.534 5.15,5.15 0 0 1 1.445,-3.8 4.951,4.951 0 0 1 3.655,-1.45 6,6 0 0 1 2.358,0.4 v 1.614 a 4.208,4.208 0 0 0 -2.187,-0.588 3.442,3.442 0 0 0 -2.582,1.018 3.744,3.744 0 0 0 -0.983,2.724 3.567,3.567 0 0 0 0.923,2.58 3.209,3.209 0 0 0 2.427,0.961 4.348,4.348 0 0 0 2.406,-0.656 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path991"
- d="m 155.329,35.967 h -1.675 v -9.8 h 1.675 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /><path
- id="path993"
- d="m 158.793,35.967 v -9.8 h 3.11 a 3.667,3.667 0 0 1 2.252,0.622 1.931,1.931 0 0 1 0.831,1.62 2.32,2.32 0 0 1 -0.471,1.45 2.548,2.548 0 0 1 -1.306,0.875 v 0.027 a 2.552,2.552 0 0 1 1.616,0.748 2.279,2.279 0 0 1 0.606,1.644 2.47,2.47 0 0 1 -0.991,2.038 3.932,3.932 0 0 1 -2.5,0.779 z m 1.62,-8.5 v 2.789 h 1.053 a 2.028,2.028 0 0 0 1.33,-0.4 1.392,1.392 0 0 0 0.481,-1.131 q 0,-1.259 -1.681,-1.258 z m 0,4.1 v 3.1 h 1.387 a 2.119,2.119 0 0 0 1.405,-0.42 1.441,1.441 0 0 0 0.5,-1.159 q 0,-1.525 -2.112,-1.524 z"
- class="cls-1"
- inkscape:connector-curvature="0"
- style="fill:#961e29" /></g><rect
- id="rect997"
- height="37"
- width="37"
- class="cls-1"
- x="0"
- y="0"
- style="fill:#961e29" /><g
- id="g1001"><path
- d="m 23.59,4.5 a 0.7,0.7 0 0 0 -0.643,0.409 0.68,0.68 0 0 0 0.149,0.74 l 5.814,5.833 a 0.7,0.7 0 0 0 0.74,0.151 0.688,0.688 0 0 0 0.425,-0.617 V 5.172 A 0.7,0.7 0 0 0 29.393,4.5 Z"
- class="cls-2"
- id="path6084"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" /><path
- d="M 7.6,4.5 A 0.689,0.689 0 0 0 6.921,5.19 V 31.81 A 0.688,0.688 0 0 0 7.6,32.5 l 15.3,-0.008 c 2.249,0.008 7.18,-4.832 7.18,-7.278 V 14.668 a 0.691,0.691 0 0 0 -0.2,-0.49 L 20.452,4.711 A 0.689,0.689 0 0 0 19.963,4.5 Z m 0.689,1.379 h 11.385 l 9.026,9.067 c 0,0 0,9.218 0,9.809 0,1.835 -4.229,6.366 -6.45,6.366 H 8.293 Z"
- class="cls-2"
- id="path6088"
- inkscape:connector-curvature="0"
- style="fill:#ffffff" /></g></g></svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?><svg id="Logos_Material" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32"><defs><style>.cls-1{fill:#e11e19;}.cls-2{clip-path:url(#clippath);}.cls-3{fill:none;}</style><clipPath id="clippath"><rect class="cls-3" x="206.65" y="209.85" width="174" height="38"/></clipPath></defs><g class="cls-2"><g><path class="cls-1" d="M27.39,14.82c-.36-.36-.94-.36-1.3,0l-9.55,9.55-4.01-3.99-2.18,2.18,6.19,6.19,12.38-12.38-1.53-1.54Z"/><path class="cls-1" d="M20.68,26.54l-2.65,2.24h1.64c3.03,0,5.5-2.47,5.5-5.5v-.5l-2.52,2.16c-.42,.76-1.13,1.34-1.97,1.6Z"/><polygon class="cls-1" points="8.4 26.69 8.4 6.07 23.08 6.07 23.08 15.02 25.17 13.23 25.17 3.98 6.32 3.98 6.32 28.77 13.74 28.77 11.98 26.69 8.4 26.69"/><rect class="cls-1" x="11.05" y="7.86" width="8.95" height="2.54" rx="1.19" ry="1.19"/><rect class="cls-1" x="11.19" y="13.87" width="8.95" height="2.42" rx="1.14" ry="1.14"/></g></g><g><path class="cls-1" d="M26.82,14.24c-.36-.36-.94-.36-1.3,0l-9.55,9.55-4.01-3.99-2.18,2.18,6.19,6.19,12.38-12.38-1.53-1.54Z"/><path class="cls-1" d="M20.11,25.96l-2.65,2.24h1.64c3.03,0,5.5-2.47,5.5-5.5v-.5l-2.52,2.16c-.42,.76-1.13,1.34-1.97,1.6Z"/><polygon class="cls-1" points="7.83 26.11 7.83 5.49 22.51 5.49 22.51 14.44 24.6 12.65 24.6 3.4 5.75 3.4 5.75 28.2 13.17 28.2 11.41 26.11 7.83 26.11"/><rect class="cls-1" x="10.48" y="7.28" width="8.95" height="2.54" rx="1.19" ry="1.19"/><rect class="cls-1" x="10.62" y="13.29" width="8.95" height="2.42" rx="1.14" ry="1.14"/></g></svg> \ No newline at end of file
diff --git a/sysui/desktop/icons/locolor/16x16/apps/main.png b/sysui/desktop/icons/locolor/16x16/apps/main.png
index 10b10d7e3491..e58c486aae72 100644
--- a/sysui/desktop/icons/locolor/16x16/apps/main.png
+++ b/sysui/desktop/icons/locolor/16x16/apps/main.png
Binary files differ
diff --git a/sysui/desktop/icons/locolor/16x16/apps/main.svg b/sysui/desktop/icons/locolor/16x16/apps/main.svg
index aabbb60e0122..fd5b7b322a81 100644
--- a/sysui/desktop/icons/locolor/16x16/apps/main.svg
+++ b/sysui/desktop/icons/locolor/16x16/apps/main.svg
@@ -1 +1,10 @@
-<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m1.8125.00586c-.458392.0875-.82072.53358-.8125 1v13.99414c.00005.52339.47643.99995 1 1h12c .52357-.00005.99995-.47661 1-1v-7.99609c.006-.26396-.0975-.52904-.28125-.71875l-5-5.99805c-.189776-.18363-.454695-.28737-.71875-.28125h-7c-.0623-.006-.125182-.006-.1875 0zm9.53125 0c-.331493.10559-.443055.60775-.1875.84375l3 2.99805c.277145.26269.82915.0378.84375-.34375v-2.99805c-.00003-.26169-.238215-.49997-.5-.5h-3c-.0517-.008-.104591-.008-.15625 0z" fill="#808080"/><path d="m2 1v14h12v-8l-5-6z" fill="#fff"/></svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16px" height="16px" viewBox="0 0 16 16" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 13.410156 7.121094 C 13.230469 6.941406 12.941406 6.941406 12.761719 7.121094 L 7.984375 11.894531 L 5.980469 9.898438 L 4.890625 10.988281 L 7.984375 14.085938 L 14.175781 7.894531 L 13.410156 7.125 Z M 13.410156 7.121094 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 10.054688 12.980469 L 8.730469 14.101562 L 9.550781 14.101562 C 11.066406 14.101562 12.300781 12.863281 12.300781 11.351562 L 12.300781 11.101562 L 11.039062 12.179688 C 10.828125 12.558594 10.476562 12.851562 10.054688 12.980469 Z M 10.054688 12.980469 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 3.914062 13.054688 L 3.914062 2.746094 L 11.253906 2.746094 L 11.253906 7.21875 L 12.300781 6.324219 L 12.300781 1.699219 L 2.875 1.699219 L 2.875 14.101562 L 6.585938 14.101562 L 5.703125 13.054688 Z M 3.914062 13.054688 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 5.835938 3.640625 L 9.121094 3.640625 C 9.449219 3.640625 9.714844 3.90625 9.714844 4.234375 L 9.714844 4.316406 C 9.714844 4.644531 9.449219 4.910156 9.121094 4.910156 L 5.835938 4.910156 C 5.507812 4.910156 5.238281 4.644531 5.238281 4.316406 L 5.238281 4.234375 C 5.238281 3.90625 5.507812 3.640625 5.835938 3.640625 Z M 5.835938 3.640625 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 5.878906 6.644531 L 9.214844 6.644531 C 9.53125 6.644531 9.785156 6.898438 9.785156 7.214844 L 9.785156 7.285156 C 9.785156 7.601562 9.53125 7.855469 9.214844 7.855469 L 5.878906 7.855469 C 5.566406 7.855469 5.308594 7.601562 5.308594 7.285156 L 5.308594 7.214844 C 5.308594 6.898438 5.566406 6.644531 5.878906 6.644531 Z M 5.878906 6.644531 "/>
+</g>
+</svg>
diff --git a/sysui/desktop/icons/locolor/16x16/apps/startcenter.png b/sysui/desktop/icons/locolor/16x16/apps/startcenter.png
index 10b10d7e3491..9740e9312a57 100644
--- a/sysui/desktop/icons/locolor/16x16/apps/startcenter.png
+++ b/sysui/desktop/icons/locolor/16x16/apps/startcenter.png
Binary files differ
diff --git a/sysui/desktop/icons/locolor/16x16/apps/startcenter.svg b/sysui/desktop/icons/locolor/16x16/apps/startcenter.svg
index aabbb60e0122..fd5b7b322a81 100644
--- a/sysui/desktop/icons/locolor/16x16/apps/startcenter.svg
+++ b/sysui/desktop/icons/locolor/16x16/apps/startcenter.svg
@@ -1 +1,10 @@
-<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m1.8125.00586c-.458392.0875-.82072.53358-.8125 1v13.99414c.00005.52339.47643.99995 1 1h12c .52357-.00005.99995-.47661 1-1v-7.99609c.006-.26396-.0975-.52904-.28125-.71875l-5-5.99805c-.189776-.18363-.454695-.28737-.71875-.28125h-7c-.0623-.006-.125182-.006-.1875 0zm9.53125 0c-.331493.10559-.443055.60775-.1875.84375l3 2.99805c.277145.26269.82915.0378.84375-.34375v-2.99805c-.00003-.26169-.238215-.49997-.5-.5h-3c-.0517-.008-.104591-.008-.15625 0z" fill="#808080"/><path d="m2 1v14h12v-8l-5-6z" fill="#fff"/></svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16px" height="16px" viewBox="0 0 16 16" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 13.410156 7.121094 C 13.230469 6.941406 12.941406 6.941406 12.761719 7.121094 L 7.984375 11.894531 L 5.980469 9.898438 L 4.890625 10.988281 L 7.984375 14.085938 L 14.175781 7.894531 L 13.410156 7.125 Z M 13.410156 7.121094 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 10.054688 12.980469 L 8.730469 14.101562 L 9.550781 14.101562 C 11.066406 14.101562 12.300781 12.863281 12.300781 11.351562 L 12.300781 11.101562 L 11.039062 12.179688 C 10.828125 12.558594 10.476562 12.851562 10.054688 12.980469 Z M 10.054688 12.980469 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 3.914062 13.054688 L 3.914062 2.746094 L 11.253906 2.746094 L 11.253906 7.21875 L 12.300781 6.324219 L 12.300781 1.699219 L 2.875 1.699219 L 2.875 14.101562 L 6.585938 14.101562 L 5.703125 13.054688 Z M 3.914062 13.054688 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 5.835938 3.640625 L 9.121094 3.640625 C 9.449219 3.640625 9.714844 3.90625 9.714844 4.234375 L 9.714844 4.316406 C 9.714844 4.644531 9.449219 4.910156 9.121094 4.910156 L 5.835938 4.910156 C 5.507812 4.910156 5.238281 4.644531 5.238281 4.316406 L 5.238281 4.234375 C 5.238281 3.90625 5.507812 3.640625 5.835938 3.640625 Z M 5.835938 3.640625 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 5.878906 6.644531 L 9.214844 6.644531 C 9.53125 6.644531 9.785156 6.898438 9.785156 7.214844 L 9.785156 7.285156 C 9.785156 7.601562 9.53125 7.855469 9.214844 7.855469 L 5.878906 7.855469 C 5.566406 7.855469 5.308594 7.601562 5.308594 7.285156 L 5.308594 7.214844 C 5.308594 6.898438 5.566406 6.644531 5.878906 6.644531 Z M 5.878906 6.644531 "/>
+</g>
+</svg>
diff --git a/sysui/desktop/icons/locolor/16x16/mimetypes/oasis-empty.png b/sysui/desktop/icons/locolor/16x16/mimetypes/oasis-empty.png
index ac227f6e9d72..e58c486aae72 100644
--- a/sysui/desktop/icons/locolor/16x16/mimetypes/oasis-empty.png
+++ b/sysui/desktop/icons/locolor/16x16/mimetypes/oasis-empty.png
Binary files differ
diff --git a/sysui/desktop/icons/locolor/16x16/mimetypes/oasis-empty.svg b/sysui/desktop/icons/locolor/16x16/mimetypes/oasis-empty.svg
index 63c8d7294edc..fd5b7b322a81 100644
--- a/sysui/desktop/icons/locolor/16x16/mimetypes/oasis-empty.svg
+++ b/sysui/desktop/icons/locolor/16x16/mimetypes/oasis-empty.svg
@@ -1 +1,10 @@
-<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m2.8125.00585938c-.458392.0875-.82072.53358-.8125 1.00000002v13.9941406c.00005.52339.47643.99995 1 1h10c .52357-.00005.99995-.47661 1-1v-7.9960938c.006-.2639599-.0975-.52904-.28125-.71875l-5-5.99804682c-.189776-.18363-.454695-.28737001-.71875-.28125h-5c-.0623-.006-.125182-.006-.1875 0zm7.53125 0c-.331493.10559-.4430551.60775-.1875.84375l3 2.99804682c.277145.26269.82915.0378.84375-.34375v-2.99804682c-.00003-.26169-.238215-.49997-.5-.5h-3c-.0517-.00800001-.104591-.00800001-.15625 0zm-7.34375.99414062h5l5 6v8h-10z" fill="#808080"/><path d="m3 .99995v14h10v-8l-5-6z" fill="#fff"/></svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16px" height="16px" viewBox="0 0 16 16" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 13.410156 7.121094 C 13.230469 6.941406 12.941406 6.941406 12.761719 7.121094 L 7.984375 11.894531 L 5.980469 9.898438 L 4.890625 10.988281 L 7.984375 14.085938 L 14.175781 7.894531 L 13.410156 7.125 Z M 13.410156 7.121094 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 10.054688 12.980469 L 8.730469 14.101562 L 9.550781 14.101562 C 11.066406 14.101562 12.300781 12.863281 12.300781 11.351562 L 12.300781 11.101562 L 11.039062 12.179688 C 10.828125 12.558594 10.476562 12.851562 10.054688 12.980469 Z M 10.054688 12.980469 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 3.914062 13.054688 L 3.914062 2.746094 L 11.253906 2.746094 L 11.253906 7.21875 L 12.300781 6.324219 L 12.300781 1.699219 L 2.875 1.699219 L 2.875 14.101562 L 6.585938 14.101562 L 5.703125 13.054688 Z M 3.914062 13.054688 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 5.835938 3.640625 L 9.121094 3.640625 C 9.449219 3.640625 9.714844 3.90625 9.714844 4.234375 L 9.714844 4.316406 C 9.714844 4.644531 9.449219 4.910156 9.121094 4.910156 L 5.835938 4.910156 C 5.507812 4.910156 5.238281 4.644531 5.238281 4.316406 L 5.238281 4.234375 C 5.238281 3.90625 5.507812 3.640625 5.835938 3.640625 Z M 5.835938 3.640625 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 5.878906 6.644531 L 9.214844 6.644531 C 9.53125 6.644531 9.785156 6.898438 9.785156 7.214844 L 9.785156 7.285156 C 9.785156 7.601562 9.53125 7.855469 9.214844 7.855469 L 5.878906 7.855469 C 5.566406 7.855469 5.308594 7.601562 5.308594 7.285156 L 5.308594 7.214844 C 5.308594 6.898438 5.566406 6.644531 5.878906 6.644531 Z M 5.878906 6.644531 "/>
+</g>
+</svg>
diff --git a/sysui/desktop/icons/locolor/32x32/apps/main.png b/sysui/desktop/icons/locolor/32x32/apps/main.png
index a2617607e6e3..6b9b3fe25c7f 100644
--- a/sysui/desktop/icons/locolor/32x32/apps/main.png
+++ b/sysui/desktop/icons/locolor/32x32/apps/main.png
Binary files differ
diff --git a/sysui/desktop/icons/locolor/32x32/apps/main.svg b/sysui/desktop/icons/locolor/32x32/apps/main.svg
index 3ff9c3d12ca8..b659ef2d9cc3 100644
--- a/sysui/desktop/icons/locolor/32x32/apps/main.svg
+++ b/sysui/desktop/icons/locolor/32x32/apps/main.svg
@@ -1,9 +1,10 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
- <path
- style="fill:#808080"
- d="M 4.625 0.009765625 C 3.70823 0.18469763 2.98356 1.0748745 3 2.0078125 L 3 30 C 3.0001 31.04688 3.95288 31.9999 5 32 L 27 32 C 28.04712 31.9999 28.9999 31.04688 29 30 L 29 12.544922 C 29.012 12.016952 28.80499 11.488825 28.4375 11.109375 L 17.896484 0.57226562 C 17.516944 0.20496663 16.987094 -0.002470375 16.458984 0.009765625 L 5 0.009765625 C 4.8754 -0.002234375 4.74964 -0.002234375 4.625 0.009765625 z M 21.658203 0.015625 C 20.992593 0.228823 20.76811 1.242233 21.28125 1.71875 L 27.306641 7.7734375 C 27.863121 8.3038475 28.97068 7.8504381 29 7.0800781 L 29 1.0253906 C 28.99994 0.49697362 28.521764 0.015685 27.996094 0.015625 L 21.972656 0.015625 C 21.868856 -0.000365 21.761943 -0.000365 21.658203 0.015625 z M 5 2 L 16.5 2 L 27 12.5 L 27 30 L 5 30 L 5 2 z "
- />
- <path
- d="m5.0002743 2v28h21.9999997v-17.5l-10.5-10.5z"
- fill="#fff" />
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32px" height="32px" viewBox="0 0 32 32" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 26.820312 14.238281 C 26.460938 13.878906 25.878906 13.878906 25.519531 14.238281 L 15.96875 23.789062 L 11.960938 19.800781 L 9.78125 21.980469 L 15.96875 28.171875 L 28.351562 15.789062 L 26.820312 14.25 Z M 26.820312 14.238281 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 20.109375 25.960938 L 17.460938 28.199219 L 19.101562 28.199219 C 22.128906 28.199219 24.601562 25.730469 24.601562 22.699219 L 24.601562 22.199219 L 22.078125 24.359375 C 21.660156 25.121094 20.949219 25.699219 20.109375 25.960938 Z M 20.109375 25.960938 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 7.828125 26.109375 L 7.828125 5.488281 L 22.511719 5.488281 L 22.511719 14.441406 L 24.601562 12.648438 L 24.601562 3.398438 L 5.75 3.398438 L 5.75 28.199219 L 13.171875 28.199219 L 11.410156 26.109375 Z M 7.828125 26.109375 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 11.671875 7.28125 L 18.238281 7.28125 C 18.898438 7.28125 19.429688 7.8125 19.429688 8.46875 L 19.429688 8.628906 C 19.429688 9.289062 18.898438 9.820312 18.238281 9.820312 L 11.671875 9.820312 C 11.011719 9.820312 10.480469 9.289062 10.480469 8.628906 L 10.480469 8.46875 C 10.480469 7.8125 11.011719 7.28125 11.671875 7.28125 Z M 11.671875 7.28125 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 11.761719 13.289062 L 18.429688 13.289062 C 19.058594 13.289062 19.570312 13.800781 19.570312 14.429688 L 19.570312 14.570312 C 19.570312 15.199219 19.058594 15.710938 18.429688 15.710938 L 11.761719 15.710938 C 11.128906 15.710938 10.621094 15.199219 10.621094 14.570312 L 10.621094 14.429688 C 10.621094 13.800781 11.128906 13.289062 11.761719 13.289062 Z M 11.761719 13.289062 "/>
+</g>
</svg>
diff --git a/sysui/desktop/icons/locolor/32x32/apps/startcenter.png b/sysui/desktop/icons/locolor/32x32/apps/startcenter.png
index a2617607e6e3..1d9d606f0c40 100644
--- a/sysui/desktop/icons/locolor/32x32/apps/startcenter.png
+++ b/sysui/desktop/icons/locolor/32x32/apps/startcenter.png
Binary files differ
diff --git a/sysui/desktop/icons/locolor/32x32/apps/startcenter.svg b/sysui/desktop/icons/locolor/32x32/apps/startcenter.svg
index 3ff9c3d12ca8..b659ef2d9cc3 100644
--- a/sysui/desktop/icons/locolor/32x32/apps/startcenter.svg
+++ b/sysui/desktop/icons/locolor/32x32/apps/startcenter.svg
@@ -1,9 +1,10 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
- <path
- style="fill:#808080"
- d="M 4.625 0.009765625 C 3.70823 0.18469763 2.98356 1.0748745 3 2.0078125 L 3 30 C 3.0001 31.04688 3.95288 31.9999 5 32 L 27 32 C 28.04712 31.9999 28.9999 31.04688 29 30 L 29 12.544922 C 29.012 12.016952 28.80499 11.488825 28.4375 11.109375 L 17.896484 0.57226562 C 17.516944 0.20496663 16.987094 -0.002470375 16.458984 0.009765625 L 5 0.009765625 C 4.8754 -0.002234375 4.74964 -0.002234375 4.625 0.009765625 z M 21.658203 0.015625 C 20.992593 0.228823 20.76811 1.242233 21.28125 1.71875 L 27.306641 7.7734375 C 27.863121 8.3038475 28.97068 7.8504381 29 7.0800781 L 29 1.0253906 C 28.99994 0.49697362 28.521764 0.015685 27.996094 0.015625 L 21.972656 0.015625 C 21.868856 -0.000365 21.761943 -0.000365 21.658203 0.015625 z M 5 2 L 16.5 2 L 27 12.5 L 27 30 L 5 30 L 5 2 z "
- />
- <path
- d="m5.0002743 2v28h21.9999997v-17.5l-10.5-10.5z"
- fill="#fff" />
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32px" height="32px" viewBox="0 0 32 32" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 26.820312 14.238281 C 26.460938 13.878906 25.878906 13.878906 25.519531 14.238281 L 15.96875 23.789062 L 11.960938 19.800781 L 9.78125 21.980469 L 15.96875 28.171875 L 28.351562 15.789062 L 26.820312 14.25 Z M 26.820312 14.238281 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 20.109375 25.960938 L 17.460938 28.199219 L 19.101562 28.199219 C 22.128906 28.199219 24.601562 25.730469 24.601562 22.699219 L 24.601562 22.199219 L 22.078125 24.359375 C 21.660156 25.121094 20.949219 25.699219 20.109375 25.960938 Z M 20.109375 25.960938 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 7.828125 26.109375 L 7.828125 5.488281 L 22.511719 5.488281 L 22.511719 14.441406 L 24.601562 12.648438 L 24.601562 3.398438 L 5.75 3.398438 L 5.75 28.199219 L 13.171875 28.199219 L 11.410156 26.109375 Z M 7.828125 26.109375 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 11.671875 7.28125 L 18.238281 7.28125 C 18.898438 7.28125 19.429688 7.8125 19.429688 8.46875 L 19.429688 8.628906 C 19.429688 9.289062 18.898438 9.820312 18.238281 9.820312 L 11.671875 9.820312 C 11.011719 9.820312 10.480469 9.289062 10.480469 8.628906 L 10.480469 8.46875 C 10.480469 7.8125 11.011719 7.28125 11.671875 7.28125 Z M 11.671875 7.28125 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 11.761719 13.289062 L 18.429688 13.289062 C 19.058594 13.289062 19.570312 13.800781 19.570312 14.429688 L 19.570312 14.570312 C 19.570312 15.199219 19.058594 15.710938 18.429688 15.710938 L 11.761719 15.710938 C 11.128906 15.710938 10.621094 15.199219 10.621094 14.570312 L 10.621094 14.429688 C 10.621094 13.800781 11.128906 13.289062 11.761719 13.289062 Z M 11.761719 13.289062 "/>
+</g>
</svg>
diff --git a/sysui/desktop/icons/locolor/32x32/mimetypes/oasis-empty.png b/sysui/desktop/icons/locolor/32x32/mimetypes/oasis-empty.png
index 4fd59298ecba..6b9b3fe25c7f 100644
--- a/sysui/desktop/icons/locolor/32x32/mimetypes/oasis-empty.png
+++ b/sysui/desktop/icons/locolor/32x32/mimetypes/oasis-empty.png
Binary files differ
diff --git a/sysui/desktop/icons/locolor/32x32/mimetypes/oasis-empty.svg b/sysui/desktop/icons/locolor/32x32/mimetypes/oasis-empty.svg
index 3ff9c3d12ca8..b659ef2d9cc3 100644
--- a/sysui/desktop/icons/locolor/32x32/mimetypes/oasis-empty.svg
+++ b/sysui/desktop/icons/locolor/32x32/mimetypes/oasis-empty.svg
@@ -1,9 +1,10 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
- <path
- style="fill:#808080"
- d="M 4.625 0.009765625 C 3.70823 0.18469763 2.98356 1.0748745 3 2.0078125 L 3 30 C 3.0001 31.04688 3.95288 31.9999 5 32 L 27 32 C 28.04712 31.9999 28.9999 31.04688 29 30 L 29 12.544922 C 29.012 12.016952 28.80499 11.488825 28.4375 11.109375 L 17.896484 0.57226562 C 17.516944 0.20496663 16.987094 -0.002470375 16.458984 0.009765625 L 5 0.009765625 C 4.8754 -0.002234375 4.74964 -0.002234375 4.625 0.009765625 z M 21.658203 0.015625 C 20.992593 0.228823 20.76811 1.242233 21.28125 1.71875 L 27.306641 7.7734375 C 27.863121 8.3038475 28.97068 7.8504381 29 7.0800781 L 29 1.0253906 C 28.99994 0.49697362 28.521764 0.015685 27.996094 0.015625 L 21.972656 0.015625 C 21.868856 -0.000365 21.761943 -0.000365 21.658203 0.015625 z M 5 2 L 16.5 2 L 27 12.5 L 27 30 L 5 30 L 5 2 z "
- />
- <path
- d="m5.0002743 2v28h21.9999997v-17.5l-10.5-10.5z"
- fill="#fff" />
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32px" height="32px" viewBox="0 0 32 32" version="1.1">
+<g id="surface1">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 26.820312 14.238281 C 26.460938 13.878906 25.878906 13.878906 25.519531 14.238281 L 15.96875 23.789062 L 11.960938 19.800781 L 9.78125 21.980469 L 15.96875 28.171875 L 28.351562 15.789062 L 26.820312 14.25 Z M 26.820312 14.238281 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 20.109375 25.960938 L 17.460938 28.199219 L 19.101562 28.199219 C 22.128906 28.199219 24.601562 25.730469 24.601562 22.699219 L 24.601562 22.199219 L 22.078125 24.359375 C 21.660156 25.121094 20.949219 25.699219 20.109375 25.960938 Z M 20.109375 25.960938 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 7.828125 26.109375 L 7.828125 5.488281 L 22.511719 5.488281 L 22.511719 14.441406 L 24.601562 12.648438 L 24.601562 3.398438 L 5.75 3.398438 L 5.75 28.199219 L 13.171875 28.199219 L 11.410156 26.109375 Z M 7.828125 26.109375 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 11.671875 7.28125 L 18.238281 7.28125 C 18.898438 7.28125 19.429688 7.8125 19.429688 8.46875 L 19.429688 8.628906 C 19.429688 9.289062 18.898438 9.820312 18.238281 9.820312 L 11.671875 9.820312 C 11.011719 9.820312 10.480469 9.289062 10.480469 8.628906 L 10.480469 8.46875 C 10.480469 7.8125 11.011719 7.28125 11.671875 7.28125 Z M 11.671875 7.28125 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(88.235295%,11.764706%,9.803922%);fill-opacity:1;" d="M 11.761719 13.289062 L 18.429688 13.289062 C 19.058594 13.289062 19.570312 13.800781 19.570312 14.429688 L 19.570312 14.570312 C 19.570312 15.199219 19.058594 15.710938 18.429688 15.710938 L 11.761719 15.710938 C 11.128906 15.710938 10.621094 15.199219 10.621094 14.570312 L 10.621094 14.429688 C 10.621094 13.800781 11.128906 13.289062 11.761719 13.289062 Z M 11.761719 13.289062 "/>
+</g>
</svg>
diff --git a/sysui/desktop/icons/oasis-empty-document.ico b/sysui/desktop/icons/oasis-empty-document.ico
index 56e1e4e00c99..3b8c8a0704d9 100644
--- a/sysui/desktop/icons/oasis-empty-document.ico
+++ b/sysui/desktop/icons/oasis-empty-document.ico
Binary files differ
diff --git a/sysui/desktop/icons/oasis-empty-template.ico b/sysui/desktop/icons/oasis-empty-template.ico
index 56e1e4e00c99..3b8c8a0704d9 100644
--- a/sysui/desktop/icons/oasis-empty-template.ico
+++ b/sysui/desktop/icons/oasis-empty-template.ico
Binary files differ
diff --git a/sysui/desktop/icons/open.ico b/sysui/desktop/icons/open.ico
index 56e1e4e00c99..3b8c8a0704d9 100644
--- a/sysui/desktop/icons/open.ico
+++ b/sysui/desktop/icons/open.ico
Binary files differ
diff --git a/sysui/desktop/icons/soffice.ico b/sysui/desktop/icons/soffice.ico
index 1f2319cb569c..3b8c8a0704d9 100644
--- a/sysui/desktop/icons/soffice.ico
+++ b/sysui/desktop/icons/soffice.ico
Binary files differ
diff --git a/sysui/desktop/menus/startcenter.desktop b/sysui/desktop/menus/startcenter.desktop
index be551ae27335..378cc9aea8b8 100644
--- a/sysui/desktop/menus/startcenter.desktop
+++ b/sysui/desktop/menus/startcenter.desktop
@@ -26,7 +26,7 @@ Exec=${UNIXBASISROOTNAME} %%FILE%%
MimeType=application/vnd.openofficeorg.extension;x-scheme-handler/vnd.libreoffice.cmis;x-scheme-handler/vnd.sun.star.webdav;x-scheme-handler/vnd.sun.star.webdavs;x-scheme-handler/vnd.libreoffice.command;
Name=%PRODUCTNAME
GenericName=Office
-Comment=The office productivity suite compatible to the open and standardized ODF document format. Supported by The Document Foundation.
+Comment=The office productivity suite compatible to the open and standardized ODF document format. Supported by CIB software GmbH.
StartupNotify=true
X-GIO-NoFuse=true
StartupWMClass=libreoffice-startcenter
diff --git a/sysui/desktop/share/create_tree.sh b/sysui/desktop/share/create_tree.sh
index a60078dfc86c..047064671f47 100755
--- a/sysui/desktop/share/create_tree.sh
+++ b/sysui/desktop/share/create_tree.sh
@@ -60,14 +60,14 @@ office_root=${office_prefix}/${PREFIX}
#this symlink is needed to have the API bootstrap functions running right
ln -sf "${office_root}/program/soffice" "${DESTDIR}/${BINDIR}/${PREFIX}"
-if test "${PREFIX}" != libreofficepoweredbycib${PRODUCTVERSION} -a "${PREFIX}" != libreofficepoweredbycibdev${PRODUCTVERSION} ; then
+if test "${PREFIX}" != ciboffice${PRODUCTVERSION} -a "${PREFIX}" != cibofficedev${PRODUCTVERSION} ; then
# compat symlinks
mkdir -p "${DESTDIR}${office_prefix}"
- ln -sf libreofficepoweredbycib${PRODUCTVERSION} "${DESTDIR}${office_root}"
- ln -sf /${BINDIR}/${PREFIX} "${DESTDIR}/${BINDIR}/libreofficepoweredbycib${PRODUCTVERSION}"
+ ln -sf ciboffice${PRODUCTVERSION} "${DESTDIR}${office_root}"
+ ln -sf /${BINDIR}/${PREFIX} "${DESTDIR}/${BINDIR}/ciboffice${PRODUCTVERSION}"
fi
-test "${PREFIX}" = libreofficepoweredbycibdev${PRODUCTVERSION} && mime_def_file="libreofficepoweredbycibdev${PRODUCTVERSION}.xml" || mime_def_file="libreofficepoweredbycib${PRODUCTVERSION}.xml"
+test "${PREFIX}" = cibofficedev${PRODUCTVERSION} && mime_def_file="cibofficedev${PRODUCTVERSION}.xml" || mime_def_file="ciboffice${PRODUCTVERSION}.xml"
mkdir -p "${DESTDIR}/${PREFIXDIR}/share/mime/packages"
cp openoffice.org.xml "${DESTDIR}/${PREFIXDIR}/share/mime/packages/$mime_def_file"
chmod 0644 "${DESTDIR}/${PREFIXDIR}/share/mime/packages/$mime_def_file"
diff --git a/sysui/desktop/share/launcher_comment.ulf b/sysui/desktop/share/launcher_comment.ulf
index d7f9e8beb9c1..edfa7a3cfbdc 100644
--- a/sysui/desktop/share/launcher_comment.ulf
+++ b/sysui/desktop/share/launcher_comment.ulf
@@ -35,5 +35,5 @@ en-US = "Create and edit scientific formulas and equations by using Math."
en-US = "Manage databases, create queries and reports to track and manage your information by using Base."
[startcenter]
-en-US = "The office productivity suite compatible to the open and standardized ODF document format. Supported by The Document Foundation."
+en-US = "The office productivity suite compatible to the open and standardized ODF document format. Supported by CIB software GmbH."
diff --git a/sysui/productlist.mk b/sysui/productlist.mk
index 0159a86ac2b0..207be0506ef3 100644
--- a/sysui/productlist.mk
+++ b/sysui/productlist.mk
@@ -7,14 +7,14 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
-PRODUCTLIST := libreoffice libreofficedev libreofficepoweredbycib
+PRODUCTLIST := ciboffice
PKGVERSION := $(LIBO_VERSION_MAJOR).$(LIBO_VERSION_MINOR).$(LIBO_VERSION_MICRO)
PKGVERSIONSHORT := $(LIBO_VERSION_MAJOR).$(LIBO_VERSION_MINOR)
PRODUCTNAME.libreoffice := LibreOffice
PRODUCTNAME.libreofficedev := LibreOfficeDev
-PRODUCTNAME.libreofficepoweredbycib := LibreOfficePoweredByCIB
+PRODUCTNAME.ciboffice := CIBOffice
UNIXFILENAME.libreoffice := libreoffice$(PKGVERSIONSHORT)
UNIXFILENAME.libreofficedev := libreofficedev$(PKGVERSIONSHORT)
-UNIXFILENAME.libreofficepoweredbycib := libreofficepoweredbycib$(PKGVERSIONSHORT)
+UNIXFILENAME.ciboffice := ciboffice$(PKGVERSIONSHORT)
# vim: set noet sw=4 ts=4:
diff --git a/test/source/xmltesttools.cxx b/test/source/xmltesttools.cxx
index 38420ba384d2..9cfe7b876ad5 100644
--- a/test/source/xmltesttools.cxx
+++ b/test/source/xmltesttools.cxx
@@ -144,9 +144,11 @@ OUString XmlTestTools::getXPathContent(xmlDocPtr pXmlDoc, const OString& rXPath)
xmlXPathFreeObject(pXmlObj);
return convertedVal;
}
+#if LIBXML_VERSION < 21000 || defined(LIBXML_XPTR_LOCS_ENABLED)
case XPATH_POINT:
case XPATH_RANGE:
case XPATH_LOCATIONSET:
+#endif
case XPATH_USERS:
case XPATH_XSLT_TREE:
xmlXPathFreeObject(pXmlObj);
diff --git a/tools/source/fsys/fileutil.cxx b/tools/source/fsys/fileutil.cxx
index 9470fabd2fee..acf174cf8581 100644
--- a/tools/source/fsys/fileutil.cxx
+++ b/tools/source/fsys/fileutil.cxx
@@ -10,6 +10,7 @@
#include <tools/fileutil.hxx>
#if defined _WIN32
#include <osl/file.hxx>
+#include <rtl/uri.hxx>
#include <o3tl/char16_t2wchar_t.hxx>
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
@@ -29,7 +30,11 @@ OUString UNCToDavURL(LPCWSTR sUNC)
bufURL = std::make_unique<wchar_t[]>(nSize);
nResult = DavGetHTTPFromUNCPath(sUNC, bufURL.get(), &nSize);
}
- return nResult == ERROR_SUCCESS ? o3tl::toU(bufURL.get()) : OUString();
+ // looks like on different Windowses this may or may not be URL encoded?
+ return nResult == ERROR_SUCCESS
+ ? ::rtl::Uri::encode(o3tl::toU(bufURL.get()), rtl_UriCharClassUric,
+ rtl_UriEncodeKeepEscapes, RTL_TEXTENCODING_UTF8)
+ : OUString();
}
#endif
}
diff --git a/tools/source/fsys/urlobj.cxx b/tools/source/fsys/urlobj.cxx
index 64daa11c9415..1ef2b7e0b2af 100644
--- a/tools/source/fsys/urlobj.cxx
+++ b/tools/source/fsys/urlobj.cxx
@@ -4771,4 +4771,13 @@ OUString INetURLObject::CutExtension()
? aTheExtension : OUString();
}
+bool INetURLObject::IsExoticProtocol() const
+{
+ return m_eScheme == INetProtocol::Slot ||
+ m_eScheme == INetProtocol::Macro ||
+ m_eScheme == INetProtocol::Uno ||
+ isSchemeEqualTo(u"vnd.sun.star.script") ||
+ isSchemeEqualTo(u"service");
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/translations b/translations
-Subproject d22ce66630c6862b6859c153f288500814bd99a
+Subproject 24a3d3dac0d23c65e9586e13fe6b2c983e1aacb
diff --git a/ucb/CppunitTest_ucb_webdav_core.mk b/ucb/CppunitTest_ucb_webdav_core.mk
index 2d37401da28b..060968e96b61 100644
--- a/ucb/CppunitTest_ucb_webdav_core.mk
+++ b/ucb/CppunitTest_ucb_webdav_core.mk
@@ -29,6 +29,20 @@ $(eval $(call gb_CppunitTest_use_library_objects,ucb_webdav_core, \
ucpdav1 \
))
+ifeq ($(OS),WNT)
+$(eval $(call gb_CppunitTest_add_libs,ucb_webdav_core,\
+ $(call gb_UnpackedTarball_get_dir,nss)/dist/out/lib/sqlite3.lib \
+))
+$(eval $(call gb_CppunitTest_use_externals,ucb_webdav_core,\
+ nss3 \
+))
+$(eval $(call gb_CppunitTest_use_system_win32_libs,ucb_webdav_core,\
+ crypt32 \
+ Ole32 \
+ shell32 \
+))
+endif
+
$(eval $(call gb_CppunitTest_use_externals,ucb_webdav_core,\
boost_headers \
libxml2 \
diff --git a/ucb/Library_ucpdav1.mk b/ucb/Library_ucpdav1.mk
index 7b8812563e87..91933763f0ec 100644
--- a/ucb/Library_ucpdav1.mk
+++ b/ucb/Library_ucpdav1.mk
@@ -36,6 +36,24 @@ $(eval $(call gb_Library_use_externals,ucpdav1,\
curl \
))
+ifeq ($(OS),WNT)
+$(eval $(call gb_Library_set_include,ucpdav1,\
+ $$(INCLUDE) \
+ -I$(call gb_UnpackedTarball_get_dir,nss)/dist/private/nss \
+))
+$(eval $(call gb_Library_add_libs,ucpdav1,\
+ $(call gb_UnpackedTarball_get_dir,nss)/dist/out/lib/sqlite3.lib \
+))
+$(eval $(call gb_Library_use_externals,ucpdav1,\
+ nss3 \
+))
+$(eval $(call gb_Library_use_system_win32_libs,ucpdav1,\
+ crypt32 \
+ Ole32 \
+ shell32 \
+))
+endif
+
$(eval $(call gb_Library_add_exception_objects,ucpdav1,\
ucb/source/ucp/webdav-curl/ContentProperties \
ucb/source/ucp/webdav-curl/CurlSession \
@@ -45,6 +63,7 @@ $(eval $(call gb_Library_add_exception_objects,ucpdav1,\
ucb/source/ucp/webdav-curl/DAVSessionFactory \
ucb/source/ucp/webdav-curl/DAVTypes \
ucb/source/ucp/webdav-curl/DateTimeHelper \
+ ucb/source/ucp/webdav-curl/ImportCookies \
ucb/source/ucp/webdav-curl/PropfindCache \
ucb/source/ucp/webdav-curl/SerfLockStore \
ucb/source/ucp/webdav-curl/UCBDeadPropertyValue \
diff --git a/ucb/qa/complex/ucb/UCB.java b/ucb/qa/complex/ucb/UCB.java
index f403beee4c93..16ee670805ff 100644
--- a/ucb/qa/complex/ucb/UCB.java
+++ b/ucb/qa/complex/ucb/UCB.java
@@ -117,10 +117,11 @@ public class UCB {
System.out.println("now executing open");
executeCommand(content, "open", aArg);
- fail("Expected 'IllegalArgumentException' was not thrown.");
+ fail("Expected exception 'IllegalArgumentException' or 'IllegalIdentifierException' was not thrown.");
} catch (com.sun.star.lang.IllegalArgumentException ex) {
- //TODO error message;
- System.out.println("Correct exception thrown: " + ex.getClass().toString());
+ // correct
+ } catch (com.sun.star.ucb.IllegalIdentifierException ex) {
+ // correct
} catch(com.sun.star.ucb.InteractiveNetworkException ex) {
System.out.println("This Exception is correctly thrown when no Proxy in StarOffice is used.");
System.out.println("To reproduce the bug behaviour, use a Proxy and try again.");
diff --git a/ucb/source/ucp/ftp/ftpcontent.cxx b/ucb/source/ucp/ftp/ftpcontent.cxx
index 92c3639bebf0..a7703e98ed75 100644
--- a/ucb/source/ucp/ftp/ftpcontent.cxx
+++ b/ucb/source/ucp/ftp/ftpcontent.cxx
@@ -62,6 +62,7 @@
#include <com/sun/star/ucb/UnsupportedDataSinkException.hpp>
#include <com/sun/star/ucb/OpenCommandArgument2.hpp>
#include <com/sun/star/ucb/UnsupportedOpenModeException.hpp>
+#include <com/sun/star/ucb/IllegalIdentifierException.hpp>
#include <com/sun/star/ucb/InteractiveNetworkConnectException.hpp>
#include <com/sun/star/ucb/InteractiveNetworkResolveNameException.hpp>
#include <com/sun/star/ucb/InteractiveIOException.hpp>
@@ -223,6 +224,7 @@ enum ACTION { NOACTION,
THROWAUTHENTICATIONREQUEST,
THROWACCESSDENIED,
THROWINTERACTIVECONNECT,
+ THROWMALFORMED,
THROWRESOLVENAME,
THROWQUOTE,
THROWNOFILE,
@@ -339,6 +341,15 @@ Any SAL_CALL FTPContent::execute( const Command& aCommand,
Environment);
break;
}
+ case THROWMALFORMED:
+ {
+ IllegalIdentifierException ex;
+ aRet <<= ex;
+ ucbhelper::cancelCommandExecution(
+ aRet,
+ Environment);
+ break;
+ }
case THROWRESOLVENAME:
{
InteractiveNetworkResolveNameException excep;
@@ -533,6 +544,10 @@ Any SAL_CALL FTPContent::execute( const Command& aCommand,
{
if(e.code() == CURLE_COULDNT_CONNECT)
action = THROWINTERACTIVECONNECT;
+ else if (e.code() == CURLE_URL_MALFORMAT)
+ {
+ action = THROWMALFORMED;
+ }
else if(e.code() == CURLE_COULDNT_RESOLVE_HOST )
action = THROWRESOLVENAME;
else if(e.code() == CURLE_FTP_USER_PASSWORD_INCORRECT ||
diff --git a/ucb/source/ucp/webdav-curl/CurlSession.cxx b/ucb/source/ucp/webdav-curl/CurlSession.cxx
index 4fe05ab97e72..0d384633d66a 100644
--- a/ucb/source/ucp/webdav-curl/CurlSession.cxx
+++ b/ucb/source/ucp/webdav-curl/CurlSession.cxx
@@ -44,6 +44,9 @@ using namespace ::com::sun::star;
namespace
{
+static void lock_cb(CURL*, curl_lock_data, curl_lock_access, void*);
+static void unlock_cb(CURL*, curl_lock_data, curl_lock_access, void*);
+
/// globals container
struct Init
{
@@ -51,17 +54,59 @@ struct Init
/// so don't call LockStore with m_Mutex held to prevent deadlock.
::http_dav_ucp::SerfLockStore LockStore;
+ /// libcurl shared data - to store cookies beyond one connection
+ ::std::mutex ShareLock[CURL_LOCK_DATA_LAST];
+ ::std::unique_ptr<CURLSH, http_dav_ucp::deleter_from_fn<CURLSH, curl_share_cleanup>> pShare;
+
Init()
{
if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK)
{
assert(!"curl_global_init failed");
}
+ pShare.reset(curl_share_init());
+ if (!pShare)
+ {
+ assert(!"curl_share_init failed");
+ }
+ CURLSHcode sh = curl_share_setopt(pShare.get(), CURLSHOPT_LOCKFUNC, lock_cb);
+ assert(sh == CURLSHE_OK); // might fail but can't handle error here
+ sh = curl_share_setopt(pShare.get(), CURLSHOPT_UNLOCKFUNC, unlock_cb);
+ assert(sh == CURLSHE_OK); // might fail but can't handle error here
+ sh = curl_share_setopt(pShare.get(), CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);
+ assert(sh == CURLSHE_OK); // might fail but can't handle error here
+ sh = curl_share_setopt(pShare.get(), CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);
+ assert(sh == CURLSHE_OK); // might fail but can't handle error here
+ sh = curl_share_setopt(pShare.get(), CURLSHOPT_SHARE, CURL_LOCK_DATA_SSL_SESSION);
+ assert(sh == CURLSHE_OK); // might fail but can't handle error here
}
// do not call curl_global_cleanup() - this is not the only client of curl
};
Init g_Init;
+// global callbacks
+
+static void lock_cb(CURL* /*handle*/, curl_lock_data const data, curl_lock_access /*access*/,
+ void* /*userptr*/)
+{
+ assert(0 <= data && data < CURL_LOCK_DATA_LAST);
+ try
+ {
+ g_Init.ShareLock[data].lock();
+ }
+ catch (std::exception const&)
+ {
+ ::std::abort();
+ }
+}
+
+static void unlock_cb(CURL* /*handle*/, curl_lock_data const data, curl_lock_access /*access*/,
+ void* /*userptr*/)
+{
+ assert(0 <= data && data < CURL_LOCK_DATA_LAST);
+ g_Init.ShareLock[data].unlock();
+}
+
struct ResponseHeaders
{
::std::vector<::std::pair<::std::vector<OString>, ::std::optional<long>>> HeaderFields;
@@ -164,15 +209,6 @@ struct CurlOption
}
};
-// NOBODY will prevent logging the response body in ProcessRequest() exception
-// handler, so only use it if logging is disabled
-const CurlOption g_NoBody{ CURLOPT_NOBODY,
- sal_detail_log_report(SAL_DETAIL_LOG_LEVEL_INFO, "ucb.ucp.webdav.curl")
- == SAL_DETAIL_LOG_ACTION_IGNORE
- ? 1L
- : 0L,
- nullptr };
-
/// combined guard class to ensure things are released in correct order,
/// particularly in ProcessRequest() error handling
class Guard
@@ -677,8 +713,18 @@ CurlSession::CurlSession(uno::Reference<uno::XComponentContext> const& xContext,
rc = curl_easy_setopt(m_pCurl.get(), CURLOPT_READFUNCTION, &read_callback);
assert(rc == CURLE_OK);
rc = curl_easy_setopt(m_pCurl.get(), CURLOPT_HEADERFUNCTION, &header_callback);
- // set this initially, may be overwritten during authentication
+ rc = curl_easy_setopt(m_pCurl.get(), CURLOPT_SHARE, g_Init.pShare.get());
+ assert(rc == CURLE_OK);
+ // tdf#149921 by default, with schannel (WNT) connection fails if revocation
+ // lists cannot be checked; try to limit the checking to when revocation
+ // lists can actually be retrieved (usually not the case for self-signed CA)
+#if CURL_AT_LEAST_VERSION(7, 70, 0)
+ rc = curl_easy_setopt(m_pCurl.get(), CURLOPT_SSL_OPTIONS, CURLSSLOPT_REVOKE_BEST_EFFORT);
+ assert(rc == CURLE_OK);
+ rc = curl_easy_setopt(m_pCurl.get(), CURLOPT_PROXY_SSL_OPTIONS, CURLSSLOPT_REVOKE_BEST_EFFORT);
assert(rc == CURLE_OK);
+#endif
+ // set this initially, may be overwritten during authentication
rc = curl_easy_setopt(m_pCurl.get(), CURLOPT_HTTPAUTH, CURLAUTH_ANY);
assert(rc == CURLE_OK); // ANY is always available
// always set CURLOPT_PROXY to suppress proxy detection in libcurl
@@ -1196,11 +1242,18 @@ auto CurlProcessor::ProcessRequest(
::std::optional<Auth> oAuthProxy;
if (pEnv && !rSession.m_isAuthenticatedProxy && !rSession.m_Proxy.aName.isEmpty())
{
- // the hope is that this must be a URI
- CurlUri const uri(rSession.m_Proxy.aName);
- if (!uri.GetUser().isEmpty() || !uri.GetPassword().isEmpty())
+ try
{
- oAuthProxy.emplace(uri.GetUser(), uri.GetPassword(), CURLAUTH_ANY);
+ // the hope is that this must be a URI
+ CurlUri const uri(rSession.m_Proxy.aName);
+ if (!uri.GetUser().isEmpty() || !uri.GetPassword().isEmpty())
+ {
+ oAuthProxy.emplace(uri.GetUser(), uri.GetPassword(), CURLAUTH_ANY);
+ }
+ }
+ catch (DAVException&)
+ {
+ // ignore any parsing failure here
}
}
decltype(CURLAUTH_ANY) const authSystem(CURLAUTH_NEGOTIATE | CURLAUTH_NTLM | CURLAUTH_NTLM_WB);
@@ -1234,6 +1287,7 @@ auto CurlProcessor::ProcessRequest(
bool isRetry(false);
int nAuthRequests(0);
int nAuthRequestsProxy(0);
+ OString cookies;
// libcurl does not have an authentication callback so handle auth
// related status codes and requesting credentials via this loop
@@ -1261,9 +1315,14 @@ auto CurlProcessor::ProcessRequest(
throw DAVException(DAVException::DAV_INVALID_ARG);
}
rc = curl_easy_setopt(rSession.m_pCurl.get(), CURLOPT_HTTPAUTH, oAuth->AuthMask);
- assert(
- rc
- == CURLE_OK); // it shouldn't be possible to reduce auth to 0 via the authSystem masks
+ if (rc != CURLE_OK)
+ { // NEGOTIATE typically disabled on Linux, NTLM is optional too
+ assert(rc == CURLE_NOT_BUILT_IN);
+ SAL_INFO("ucb.ucp.webdav.curl", "no auth method available");
+ throw DAVException(
+ DAVException::DAV_HTTP_NOAUTH,
+ ConnectionEndPointString(rSession.m_URI.GetHost(), rSession.m_URI.GetPort()));
+ }
}
if (oAuthProxy && !rSession.m_isAuthenticatedProxy)
@@ -1289,9 +1348,14 @@ auto CurlProcessor::ProcessRequest(
throw DAVException(DAVException::DAV_INVALID_ARG);
}
rc = curl_easy_setopt(rSession.m_pCurl.get(), CURLOPT_PROXYAUTH, oAuthProxy->AuthMask);
- assert(
- rc
- == CURLE_OK); // it shouldn't be possible to reduce auth to 0 via the authSystem masks
+ if (rc != CURLE_OK)
+ { // NEGOTIATE typically disabled on Linux, NTLM is optional too
+ assert(rc == CURLE_NOT_BUILT_IN);
+ SAL_INFO("ucb.ucp.webdav.curl", "no auth method available");
+ throw DAVException(
+ DAVException::DAV_HTTP_NOAUTH,
+ ConnectionEndPointString(rSession.m_URI.GetHost(), rSession.m_URI.GetPort()));
+ }
}
ResponseHeaders headers(rSession.m_pCurl.get());
@@ -1373,11 +1437,56 @@ auto CurlProcessor::ProcessRequest(
}
break;
}
+ case SC_FORBIDDEN:
+ {
+ ::std::map<OUString, OUString> const headerMap(
+ ProcessHeaders(headers.HeaderFields.back().first));
+ // X-MSDAVEXT_Error see [MS-WEBDAVE] 2.2.3.1.9
+ auto const it(headerMap.find("x-msdavext_error"));
+ if (it == headerMap.end() || !it->second.startsWith("917656;"))
+ {
+ break;
+ }
+ // both fallbacks need cookie engine enabled
+ CURLcode rc
+ = curl_easy_setopt(rSession.m_pCurl.get(), CURLOPT_COOKIEFILE, "");
+ assert(rc == CURLE_OK);
+ if (cookies.isEmpty() // retry only once - could be expired...
+ && rSession.m_URI.GetScheme() == "https") // only encrypted
+ {
+ cookies
+ = TryImportCookies(rSession.m_xContext, rSession.m_URI.GetHost());
+ if (!cookies.isEmpty())
+ {
+ rc = curl_easy_setopt(rSession.m_pCurl.get(), CURLOPT_COOKIE,
+ cookies.getStr());
+ assert(rc == CURLE_OK);
+ (void)rc;
+ isRetry = true;
+ SAL_INFO("ucb.ucp.webdav.curl", "FedAuth cookie set");
+ break; // try cookie once
+ }
+ }
+ SAL_INFO("ucb.ucp.webdav.curl", "403 fallback authentication hack");
+ // disable 302 redirect
+ pRequestHeaderList.reset(curl_slist_append(
+ pRequestHeaderList.release(), "X-FORMS_BASED_AUTH_ACCEPTED: f"));
+ if (!pRequestHeaderList)
+ {
+ throw uno::RuntimeException("curl_slist_append failed");
+ }
+ }
+ [[fallthrough]]; // SP, no cookie, or cookie failed: try NTLM
case SC_UNAUTHORIZED:
case SC_PROXY_AUTHENTICATION_REQUIRED:
{
- auto& rnAuthRequests(statusCode == SC_UNAUTHORIZED ? nAuthRequests
- : nAuthRequestsProxy);
+ (statusCode != SC_PROXY_AUTHENTICATION_REQUIRED
+ ? rSession.m_isAuthenticated
+ : rSession.m_isAuthenticatedProxy)
+ = false; // any auth data in m_pCurl is invalid
+ auto& rnAuthRequests(statusCode != SC_PROXY_AUTHENTICATION_REQUIRED
+ ? nAuthRequests
+ : nAuthRequestsProxy);
if (rnAuthRequests == 10)
{
SAL_INFO("ucb.ucp.webdav.curl", "aborting authentication after "
@@ -1385,22 +1494,54 @@ auto CurlProcessor::ProcessRequest(
}
else if (pEnv && pEnv->m_xAuthListener)
{
- ::std::optional<OUString> const oRealm(ExtractRealm(
- headers, statusCode == SC_UNAUTHORIZED ? "WWW-Authenticate"
- : "Proxy-Authenticate"));
+ ::std::optional<OUString> const oRealm(
+ ExtractRealm(headers, statusCode != SC_PROXY_AUTHENTICATION_REQUIRED
+ ? "WWW-Authenticate"
+ : "Proxy-Authenticate"));
::std::optional<Auth>& roAuth(
- statusCode == SC_UNAUTHORIZED ? oAuth : oAuthProxy);
+ statusCode != SC_PROXY_AUTHENTICATION_REQUIRED ? oAuth
+ : oAuthProxy);
OUString userName(roAuth ? roAuth->UserName : OUString());
OUString passWord(roAuth ? roAuth->PassWord : OUString());
long authAvail(0);
- auto const rc = curl_easy_getinfo(rSession.m_pCurl.get(),
- statusCode == SC_UNAUTHORIZED
- ? CURLINFO_HTTPAUTH_AVAIL
- : CURLINFO_PROXYAUTH_AVAIL,
- &authAvail);
+ auto rc
+ = curl_easy_getinfo(rSession.m_pCurl.get(),
+ statusCode != SC_PROXY_AUTHENTICATION_REQUIRED
+ ? CURLINFO_HTTPAUTH_AVAIL
+ : CURLINFO_PROXYAUTH_AVAIL,
+ &authAvail);
assert(rc == CURLE_OK);
- (void)rc;
+ if (statusCode == SC_FORBIDDEN)
+ { // SharePoint hack: try NTLM auth
+ assert(authAvail == 0);
+ // note: this must be a single value!
+ // would need 2 iterations to try CURLAUTH_NTLM too
+ rc = curl_easy_setopt(rSession.m_pCurl.get(), CURLOPT_HTTPAUTH,
+ CURLAUTH_NEGOTIATE);
+ if (rc == CURLE_OK)
+ {
+ authAvail = CURLAUTH_NEGOTIATE;
+ }
+ else
+ {
+ rc = curl_easy_setopt(rSession.m_pCurl.get(), CURLOPT_HTTPAUTH,
+ CURLAUTH_NTLM);
+ if (rc == CURLE_OK)
+ {
+ authAvail = CURLAUTH_NTLM;
+ }
+ else
+ { // can't work
+ SAL_INFO("ucb.ucp.webdav.curl",
+ "no SP fallback auth method available");
+ throw DAVException(
+ DAVException::DAV_HTTP_NOAUTH,
+ ConnectionEndPointString(rSession.m_URI.GetHost(),
+ rSession.m_URI.GetPort()));
+ }
+ }
+ }
// only allow SystemCredentials once - the
// PasswordContainer may have stored it in the
// Config (TrySystemCredentialsFirst or
@@ -1419,8 +1560,9 @@ auto CurlProcessor::ProcessRequest(
auto const ret = pEnv->m_xAuthListener->authenticate(
oRealm ? *oRealm : "",
- statusCode == SC_UNAUTHORIZED ? rSession.m_URI.GetHost()
- : rSession.m_Proxy.aName,
+ statusCode != SC_PROXY_AUTHENTICATION_REQUIRED
+ ? rSession.m_URI.GetHost()
+ : rSession.m_Proxy.aName,
userName, passWord, isSystemCredSupported);
if (ret == 0)
@@ -1488,9 +1630,8 @@ auto CurlSession::OPTIONS(OUString const& rURIReference,
DAVResource result;
::std::pair<::std::vector<OUString> const&, DAVResource&> const headers(headerNames, result);
- ::std::vector<CurlOption> const options{
- g_NoBody, { CURLOPT_CUSTOMREQUEST, "OPTIONS", "CURLOPT_CUSTOMREQUEST" }
- };
+ ::std::vector<CurlOption> const options{ { CURLOPT_CUSTOMREQUEST, "OPTIONS",
+ "CURLOPT_CUSTOMREQUEST" } };
CurlProcessor::ProcessRequest(*this, uri, "OPTIONS", options, &rEnv, nullptr, nullptr, nullptr,
&headers);
@@ -1796,7 +1937,13 @@ auto CurlSession::HEAD(OUString const& rURIReference, ::std::vector<OUString> co
CurlUri const uri(CurlProcessor::URIReferenceToURI(*this, rURIReference));
- ::std::vector<CurlOption> const options{ g_NoBody };
+ ::std::vector<CurlOption> const options{
+ // NOBODY will prevent logging the response body in ProcessRequest()
+ // exception, but omitting it here results in a long timeout until the
+ // server closes the connection, which is worse
+ { CURLOPT_NOBODY, 1L, nullptr },
+ { CURLOPT_CUSTOMREQUEST, "HEAD", "CURLOPT_CUSTOMREQUEST" }
+ };
::std::pair<::std::vector<OUString> const&, DAVResource&> const headers(rHeaderNames,
io_rResource);
@@ -2029,9 +2176,8 @@ auto CurlSession::MKCOL(OUString const& rURIReference, DAVRequestEnvironment con
CurlUri const uri(CurlProcessor::URIReferenceToURI(*this, rURIReference));
- ::std::vector<CurlOption> const options{
- g_NoBody, { CURLOPT_CUSTOMREQUEST, "MKCOL", "CURLOPT_CUSTOMREQUEST" }
- };
+ ::std::vector<CurlOption> const options{ { CURLOPT_CUSTOMREQUEST, "MKCOL",
+ "CURLOPT_CUSTOMREQUEST" } };
CurlProcessor::ProcessRequest(*this, uri, "MKCOL", options, &rEnv, nullptr, nullptr, nullptr,
nullptr);
@@ -2059,9 +2205,8 @@ auto CurlProcessor::MoveOrCopy(CurlSession& rSession, OUString const& rSourceURI
throw uno::RuntimeException("curl_slist_append failed");
}
- ::std::vector<CurlOption> const options{
- g_NoBody, { CURLOPT_CUSTOMREQUEST, pMethod, "CURLOPT_CUSTOMREQUEST" }
- };
+ ::std::vector<CurlOption> const options{ { CURLOPT_CUSTOMREQUEST, pMethod,
+ "CURLOPT_CUSTOMREQUEST" } };
CurlProcessor::ProcessRequest(rSession, uriSource, OUString::createFromAscii(pMethod), options,
&rEnv, ::std::move(pList), nullptr, nullptr, nullptr);
@@ -2091,9 +2236,8 @@ auto CurlSession::DESTROY(OUString const& rURIReference, DAVRequestEnvironment c
CurlUri const uri(CurlProcessor::URIReferenceToURI(*this, rURIReference));
- ::std::vector<CurlOption> const options{
- g_NoBody, { CURLOPT_CUSTOMREQUEST, "DELETE", "CURLOPT_CUSTOMREQUEST" }
- };
+ ::std::vector<CurlOption> const options{ { CURLOPT_CUSTOMREQUEST, "DELETE",
+ "CURLOPT_CUSTOMREQUEST" } };
CurlProcessor::ProcessRequest(*this, uri, "DESTROY", options, &rEnv, nullptr, nullptr, nullptr,
nullptr);
diff --git a/ucb/source/ucp/webdav-curl/CurlSession.hxx b/ucb/source/ucp/webdav-curl/CurlSession.hxx
index 75ccf682692c..5428bb98b23f 100644
--- a/ucb/source/ucp/webdav-curl/CurlSession.hxx
+++ b/ucb/source/ucp/webdav-curl/CurlSession.hxx
@@ -140,6 +140,10 @@ public:
auto NonInteractive_UNLOCK(OUString const& rURI) -> void;
};
+OString TryImportCookies(
+ ::com::sun::star::uno::Reference<::com::sun::star::uno::XComponentContext> const& xContext,
+ OUString const& rHost);
+
} // namespace http_dav_ucp
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/ucb/source/ucp/webdav-curl/ImportCookies.cxx b/ucb/source/ucp/webdav-curl/ImportCookies.cxx
new file mode 100644
index 000000000000..ff5d7389aeac
--- /dev/null
+++ b/ucb/source/ucp/webdav-curl/ImportCookies.cxx
@@ -0,0 +1,249 @@
+/* -*- 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 "CurlSession.hxx"
+#include "CurlUri.hxx"
+
+#include <comphelper/base64.hxx>
+#include <comphelper/scopeguard.hxx>
+#include <o3tl/char16_t2wchar_t.hxx>
+
+#include <com/sun/star/xml/crypto/DigestID.hpp>
+#include <com/sun/star/xml/crypto/NSSInitializer.hpp>
+#include <com/sun/star/uno/Sequence.hxx>
+
+#include <osl/file.hxx>
+#include <sal/log.hxx>
+#include <rtl/string.hxx>
+#include <rtl/ustring.hxx>
+
+#ifdef _WIN32
+#include <comphelper/windowserrorstring.hxx>
+
+#include <boost/property_tree/json_parser.hpp>
+
+#include <sqlite3.h>
+#include <pk11pub.h>
+
+#define WIN32_LEAN_AND_MEAN
+#include <Windows.h>
+#include <Shlobj.h>
+#include <Knownfolders.h>
+#include <dpapi.h>
+#endif
+
+using namespace ::com::sun::star;
+
+namespace http_dav_ucp
+{
+#ifdef _WIN32
+struct Value
+{
+ OString value;
+ OString encryptedValue;
+};
+
+static int callback(void* pArg, int argc, char** argv, char** ppColNames)
+{
+ Value* const pValue(static_cast<Value*>(pArg));
+ assert(argc == 3);
+ assert(strcmp(ppColNames[0], "value") == 0);
+ assert(strcmp(ppColNames[2], "encrypted_value") == 0);
+ pValue->value = OString(argv[0]); // base64 has no embedded 0
+ auto const len(OString(argv[1]).toInt32());
+ assert(len >= 0);
+ pValue->encryptedValue = OString(argv[2], len);
+ return 0;
+}
+#endif
+
+OString TryImportCookies(uno::Reference<uno::XComponentContext> const& xContext[[maybe_unused]],
+ OUString const& rHost[[maybe_unused]])
+{
+#ifdef _WIN32
+ // Sharepoint authentication: try to find a cookie from Microsoft Edge
+ PWSTR ladPath;
+ if (S_OK != SHGetKnownFolderPath(FOLDERID_LocalAppData, KF_FLAG_DEFAULT, nullptr, &ladPath))
+ {
+ SAL_INFO("ucb.ucp.webdav.curl", "ShGetKnownFolderPath failed");
+ return OString();
+ }
+ OUString const localAppDirPath(o3tl::toU(ladPath));
+ CoTaskMemFree(ladPath);
+ OUString localAppDirUrl;
+ ::osl::File::getFileURLFromSystemPath(localAppDirPath, localAppDirUrl);
+ ::osl::DirectoryItem temp;
+ OUString dbUrlU = localAppDirUrl + "/Microsoft/Edge/User Data/Default/Network/Cookies";
+ if (::osl::DirectoryItem::get(dbUrlU, temp) != osl_File_E_None)
+ {
+ dbUrlU = localAppDirUrl + "/Microsoft/Edge/User Data/Default/Cookies";
+ if (::osl::DirectoryItem::get(dbUrlU, temp) != osl_File_E_None)
+ {
+ SAL_INFO("ucb.ucp.webdav.curl", "no Cookies file");
+ return OString();
+ }
+ }
+ OString const dbUrl(::rtl::OUStringToOString(dbUrlU, RTL_TEXTENCODING_UTF8));
+ sqlite3* db;
+ int rc = sqlite3_open_v2(dbUrl.getStr(), &db, SQLITE_OPEN_READONLY | SQLITE_OPEN_URI, nullptr);
+ if (rc != SQLITE_OK)
+ {
+ // apparently this may crash, and sqlite3_errstr() isn't exported?
+ // SAL_INFO("ucb.ucp.webdav.curl", "sqlite3_open failed: " << sqlite3_errmsg(db));
+ SAL_INFO("ucb.ucp.webdav.curl", "sqlite3_open failed: " << rc);
+ if (db)
+ {
+ sqlite3_close(db);
+ }
+ return OString();
+ }
+ char* err(nullptr);
+ Value value;
+ OString const statement("SELECT value, LENGTH(encrypted_value), encrypted_value FROM cookies "
+ "WHERE name = \"FedAuth\" AND host_key = \""
+ + ::rtl::OUStringToOString(rHost, RTL_TEXTENCODING_ASCII_US) + "\";");
+ rc = sqlite3_exec(db, statement.getStr(), callback, &value, &err);
+ if (rc != SQLITE_OK)
+ {
+ SAL_WARN("ucb.ucp.webdav.curl", "sqlite3_exec failed: " << err);
+ sqlite3_free(err);
+ }
+ sqlite3_close(db);
+ if (!value.value.isEmpty())
+ {
+ return value.value;
+ }
+ if (value.encryptedValue.getLength() < 3 + 12 + 16)
+ {
+ SAL_INFO("ucb.ucp.webdav.curl", "encrypted_value too short: " << value.encryptedValue.getLength());
+ return OString();
+ }
+
+ OString const iv(value.encryptedValue.copy(3, 12));
+ OString const encryptedValue(
+ value.encryptedValue.copy(3 + 12, value.encryptedValue.getLength() - 3 - 12 - 16));
+ OString const tag(value.encryptedValue.copy(value.encryptedValue.getLength() - 16, 16));
+
+ OUString const stateUrl = localAppDirUrl + "/Microsoft/Edge/User Data/Local State";
+ OUString statePathU;
+ ::osl::File::getSystemPathFromFileURL(stateUrl, statePathU);
+ OString const statePath(::rtl::OUStringToOString(statePathU, RTL_TEXTENCODING_UTF8));
+ ::std::string sEncryptedKey;
+ try
+ {
+ ::boost::property_tree::ptree localState;
+ ::boost::property_tree::read_json(::std::string(statePath.getStr()), localState);
+ sEncryptedKey = localState.get<std::string>("os_crypt.encrypted_key");
+ }
+ catch (...)
+ {
+ SAL_INFO("ucb.ucp.webdav.curl", "failed to parse Local State");
+ return OString();
+ }
+ OUString const encodedEncryptedKey(sEncryptedKey.data(), sEncryptedKey.size(),
+ RTL_TEXTENCODING_UTF8);
+ uno::Sequence<sal_Int8> decodedEncryptedKey;
+ ::comphelper::Base64::decode(decodedEncryptedKey, encodedEncryptedKey);
+ if (decodedEncryptedKey.getLength() < 5)
+ {
+ SAL_INFO("ucb.ucp.webdav.curl", "decoded key too short: " << decodedEncryptedKey.getLength());
+ return OString();
+ }
+ DATA_BLOB protectedKey;
+ protectedKey.cbData = decodedEncryptedKey.getLength() - 5;
+ protectedKey.pbData
+ = reinterpret_cast<BYTE*>(const_cast<sal_Int8*>(decodedEncryptedKey.getConstArray())) + 5;
+ DATA_BLOB unprotectedKey;
+ if (CryptUnprotectData(&protectedKey, nullptr, nullptr, nullptr, nullptr,
+ CRYPTPROTECT_UI_FORBIDDEN, &unprotectedKey)
+ == FALSE)
+ {
+ SAL_INFO("ucb.ucp.webdav.curl", "CryptUnprotectData failed: " << WindowsErrorString(GetLastError()));
+ assert(false);
+ return OString();
+ }
+ ::comphelper::ScopeGuard g([&]() {
+ SecureZeroMemory(unprotectedKey.pbData, unprotectedKey.cbData);
+ LocalFree(unprotectedKey.pbData);
+ });
+ if (unprotectedKey.cbData < 16)
+ {
+ SAL_WARN("ucb.ucp.webdav.curl", "CryptUnprotectData result too short: " << unprotectedKey.cbData);
+ return OString();
+ }
+
+ // first, init NSS - but can't do AES GCM via API so do it directly
+ uno::Reference<xml::crypto::XNSSInitializer> xNSS(
+ xml::crypto::NSSInitializer::create(xContext));
+ xNSS->getDigestContext(xml::crypto::DigestID::SHA256, {});
+ SECItem keyItem = { siBuffer, reinterpret_cast<unsigned char*>(unprotectedKey.pbData),
+ sal::static_int_cast<unsigned>(unprotectedKey.cbData) };
+ ::std::unique_ptr<PK11SlotInfo, deleter_from_fn<PK11SlotInfo, PK11_FreeSlot>> pSlot(
+ PK11_GetBestSlot(CKM_AES_GCM, nullptr));
+ if (!pSlot)
+ {
+ SAL_WARN("ucb.ucp.webdav.curl", "PK11_GetBestSlot failed");
+ return OString();
+ }
+ ::std::unique_ptr<PK11SymKey, deleter_from_fn<PK11SymKey, PK11_FreeSymKey>> pSymKey(
+ PK11_ImportSymKey(pSlot.get(), CKM_AES_GCM, PK11_OriginDerive, CKA_DECRYPT, &keyItem,
+ nullptr));
+ if (!pSymKey)
+ {
+ SAL_WARN("ucb.ucp.webdav.curl", "PK11_ImportSymKey failed");
+ return OString();
+ }
+ SECItem dummy = { siBuffer, nullptr, 0 };
+ struct ContextDeleter
+ {
+ void operator()(PK11Context* p) const { PK11_DestroyContext(p, PR_TRUE); }
+ };
+ ::std::unique_ptr<PK11Context, ContextDeleter> pContext(PK11_CreateContextBySymKey(
+ CKM_AES_GCM, CKA_NSS_MESSAGE | CKA_DECRYPT, pSymKey.get(), &dummy));
+ if (!pContext)
+ {
+ SAL_WARN("ucb.ucp.webdav.curl", "PK11_CreateContextBySymKey failed");
+ return OString();
+ }
+
+ ::std::vector<unsigned char> unencryptedValue;
+ unencryptedValue.resize(encryptedValue.getLength());
+ int outLength(0);
+ SECStatus rv = PK11_AEADOp(
+ pContext.get(), CKG_NO_GENERATE, 0, // only used for encryption
+ reinterpret_cast<unsigned char*>(const_cast<sal_Char*>(iv.getStr())), iv.getLength(),
+ nullptr, 0, // "additional data" not used
+ unencryptedValue.data(), &outLength, encryptedValue.getLength(),
+ reinterpret_cast<unsigned char*>(const_cast<sal_Char*>(tag.getStr())), tag.getLength(),
+ reinterpret_cast<const unsigned char*>(encryptedValue.getStr()),
+ encryptedValue.getLength());
+ if (rv != SECSuccess)
+ {
+ SAL_WARN("ucb.ucp.webdav.curl", "PK11_AEADOp failed: " << rv);
+ return OString();
+ }
+ if (outLength != encryptedValue.getLength())
+ {
+ SAL_WARN("ucb.ucp.webdav.curl", "PK11_AEADOp unexpected output length");
+ return OString();
+ }
+
+ return "FedAuth="
+ + OString(reinterpret_cast<const char*>(unencryptedValue.data()),
+ unencryptedValue.size())
+ + ";";
+
+#else
+ return OString();
+#endif
+}
+
+} // namespace http_dav_ucp
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/unotools/source/i18n/resmgr.cxx b/unotools/source/i18n/resmgr.cxx
index 786c83df2e7b..07e604be7ed7 100644
--- a/unotools/source/i18n/resmgr.cxx
+++ b/unotools/source/i18n/resmgr.cxx
@@ -121,8 +121,13 @@ namespace Translate
if (aFind != aCache.end())
return aFind->second;
boost::locale::generator gen;
+#if BOOST_VERSION < 108100
gen.characters(boost::locale::char_facet);
gen.categories(boost::locale::message_facet | boost::locale::information_facet);
+#else
+ gen.characters(boost::locale::char_facet_t::char_f);
+ gen.categories(boost::locale::category_t::message | boost::locale::category_t::information);
+#endif
OUString uri("$BRAND_BASE_DIR/$BRAND_SHARE_RESOURCE_SUBDIR/");
rtl::Bootstrap::expandMacros(uri);
OUString path;
diff --git a/unoxml/qa/unit/domtest.cxx b/unoxml/qa/unit/domtest.cxx
index 0a80d2a4cadc..f9bdec2917eb 100644
--- a/unoxml/qa/unit/domtest.cxx
+++ b/unoxml/qa/unit/domtest.cxx
@@ -207,9 +207,9 @@ struct BasicTest : public test::BootstrapFixture
mxErrHandler.set( new ErrorHandler() );
uno::Reference<XDocumentBuilder> xDB( getMultiServiceFactory()->createInstance("com.sun.star.xml.dom.DocumentBuilder"), uno::UNO_QUERY_THROW );
mxDomBuilder.set( xDB );
- mxValidInStream.set( new SequenceInputStream(css::uno::Sequence<sal_Int8>(reinterpret_cast<sal_Int8 const *>(validTestFile), SAL_N_ELEMENTS(validTestFile))) );
- mxWarningInStream.set( new SequenceInputStream(css::uno::Sequence<sal_Int8>(reinterpret_cast<sal_Int8 const *>(warningTestFile), SAL_N_ELEMENTS(warningTestFile))) );
- mxErrorInStream.set( new SequenceInputStream(css::uno::Sequence<sal_Int8>(reinterpret_cast<sal_Int8 const *>(errorTestFile), SAL_N_ELEMENTS(errorTestFile))) );
+ mxValidInStream.set( new SequenceInputStream(css::uno::Sequence<sal_Int8>(reinterpret_cast<sal_Int8 const *>(validTestFile), SAL_N_ELEMENTS(validTestFile)-1)) );
+ mxWarningInStream.set( new SequenceInputStream(css::uno::Sequence<sal_Int8>(reinterpret_cast<sal_Int8 const *>(warningTestFile), SAL_N_ELEMENTS(warningTestFile)-1)) );
+ mxErrorInStream.set( new SequenceInputStream(css::uno::Sequence<sal_Int8>(reinterpret_cast<sal_Int8 const *>(errorTestFile), SAL_N_ELEMENTS(errorTestFile)-1)) );
mxDomBuilder->setErrorHandler(mxErrHandler.get());
}
@@ -293,7 +293,7 @@ struct SerializerTest : public test::BootstrapFixture
mxErrHandler.set( new ErrorHandler() );
uno::Reference<XDocumentBuilder> xDB( getMultiServiceFactory()->createInstance("com.sun.star.xml.dom.DocumentBuilder"), uno::UNO_QUERY_THROW );
mxDomBuilder.set( xDB );
- mxInStream.set( new SequenceInputStream(css::uno::Sequence<sal_Int8>(reinterpret_cast<sal_Int8 const *>(validTestFile), SAL_N_ELEMENTS(validTestFile))) );
+ mxInStream.set( new SequenceInputStream(css::uno::Sequence<sal_Int8>(reinterpret_cast<sal_Int8 const *>(validTestFile), SAL_N_ELEMENTS(validTestFile)-1)) );
mxDomBuilder->setErrorHandler(mxErrHandler.get());
mxHandler.set( new DocumentHandler );
mxTokHandler.set( new TokenHandler );
diff --git a/unoxml/source/dom/attr.cxx b/unoxml/source/dom/attr.cxx
index 4ff411d3f62c..39889e114c99 100644
--- a/unoxml/source/dom/attr.cxx
+++ b/unoxml/source/dom/attr.cxx
@@ -22,6 +22,7 @@
#include <string.h>
#include <memory>
+#include <libxml/entities.h>
#include <osl/diagnose.h>
#include <sal/log.hxx>
diff --git a/unoxml/source/dom/document.cxx b/unoxml/source/dom/document.cxx
index e84ff5bdc8d3..bcd2e01bac15 100644
--- a/unoxml/source/dom/document.cxx
+++ b/unoxml/source/dom/document.cxx
@@ -41,6 +41,7 @@
#include <eventdispatcher.hxx>
#include <string.h>
+#include <libxml/xmlIO.h>
#include <osl/diagnose.h>
diff --git a/unoxml/source/dom/documentbuilder.cxx b/unoxml/source/dom/documentbuilder.cxx
index 5a03cf0bcf2d..7b1d97ac44e4 100644
--- a/unoxml/source/dom/documentbuilder.cxx
+++ b/unoxml/source/dom/documentbuilder.cxx
@@ -25,6 +25,7 @@
#include <libxml/xmlerror.h>
#include <libxml/tree.h>
+#include <libxml/parser.h>
#include <memory>
diff --git a/unoxml/source/dom/entity.cxx b/unoxml/source/dom/entity.cxx
index 74b1faaf7e75..0b8c384ddcc1 100644
--- a/unoxml/source/dom/entity.cxx
+++ b/unoxml/source/dom/entity.cxx
@@ -22,6 +22,7 @@
#include <osl/diagnose.h>
#include <string.h>
+#include <libxml/entities.h>
using namespace css::uno;
using namespace css::xml::dom;
diff --git a/unoxml/source/xpath/xpathapi.cxx b/unoxml/source/xpath/xpathapi.cxx
index 5d3e6d8c6189..a87781c57c85 100644
--- a/unoxml/source/xpath/xpathapi.cxx
+++ b/unoxml/source/xpath/xpathapi.cxx
@@ -26,6 +26,7 @@
#include <libxml/xmlerror.h>
#include <libxml/xpath.h>
#include <libxml/xpathInternals.h>
+#include <libxml/xmlIO.h>
#include <rtl/ustrbuf.hxx>
#include <sal/log.hxx>
@@ -233,7 +234,7 @@ namespace XPath
return selectSingleNode(contextNode, expr);
}
- static OUString make_error_message(xmlErrorPtr pError)
+ static OUString make_error_message(const xmlError* pError)
{
OUStringBuffer buf;
if (pError) {
@@ -279,7 +280,11 @@ namespace XPath
SAL_WARN("unoxml", "libxml2 error: " << str);
}
+#if LIBXML_VERSION >= 21200
+ static void structured_error_func(void *, const xmlError* error)
+#else
static void structured_error_func(void *, xmlErrorPtr error)
+#endif
{
SAL_WARN("unoxml", "libxml2 error: " << make_error_message(error));
}
diff --git a/unoxml/source/xpath/xpathobject.cxx b/unoxml/source/xpath/xpathobject.cxx
index 2a055f10cdc4..6da7ed351f80 100644
--- a/unoxml/source/xpath/xpathobject.cxx
+++ b/unoxml/source/xpath/xpathobject.cxx
@@ -44,12 +44,14 @@ namespace XPath
return XPathObjectType_XPATH_NUMBER;
case XPATH_STRING:
return XPathObjectType_XPATH_STRING;
+#if LIBXML_VERSION < 21000 || defined(LIBXML_XPTR_LOCS_ENABLED)
case XPATH_POINT:
return XPathObjectType_XPATH_POINT;
case XPATH_RANGE:
return XPathObjectType_XPATH_RANGE;
case XPATH_LOCATIONSET:
return XPathObjectType_XPATH_LOCATIONSET;
+#endif
case XPATH_USERS:
return XPathObjectType_XPATH_USERS;
case XPATH_XSLT_TREE:
diff --git a/vcl/Library_vclplug_win.mk b/vcl/Library_vclplug_win.mk
index 2b05aae476b3..f0e48cd77ad3 100644
--- a/vcl/Library_vclplug_win.mk
+++ b/vcl/Library_vclplug_win.mk
@@ -19,6 +19,8 @@
$(eval $(call gb_Library_Library,vclplug_win))
+$(eval $(call gb_Library_set_componentfile,vclplug_win,vcl/vclplug_win))
+
$(eval $(call gb_Library_set_include,vclplug_win,\
$$(INCLUDE) \
-I$(SRCDIR)/vcl/inc \
@@ -43,6 +45,7 @@ $(eval $(call gb_Library_use_libraries,vclplug_win,\
basegfx \
comphelper \
cppu \
+ cppuhelper \
i18nlangtag \
i18nutil \
sal \
@@ -66,32 +69,59 @@ $(eval $(call gb_Library_add_exception_objects,vclplug_win,\
vcl/win/app/salinst \
vcl/win/app/salshl \
vcl/win/app/saltimer \
+ vcl/win/dtrans/APNDataObject \
+ vcl/win/dtrans/clipboardmanager \
+ vcl/win/dtrans/DataFmtTransl \
+ vcl/win/dtrans/DOTransferable \
+ vcl/win/dtrans/DtObjFactory \
+ vcl/win/dtrans/DTransHelper \
+ vcl/win/dtrans/Fetc \
+ vcl/win/dtrans/FetcList \
+ vcl/win/dtrans/FmtFilter \
+ vcl/win/dtrans/ftransl \
+ vcl/win/dtrans/generic_clipboard \
+ vcl/win/dtrans/globals \
+ vcl/win/dtrans/idroptarget \
+ vcl/win/dtrans/ImplHelper \
+ vcl/win/dtrans/MtaOleClipb \
+ vcl/win/dtrans/source \
+ vcl/win/dtrans/sourcecontext \
+ vcl/win/dtrans/target \
+ vcl/win/dtrans/targetdragcontext \
+ vcl/win/dtrans/targetdropcontext \
+ vcl/win/dtrans/TxtCnvtHlp \
+ vcl/win/dtrans/WinClipboard \
+ vcl/win/dtrans/XNotifyingDataObject \
+ vcl/win/dtrans/XTDataObject \
vcl/win/gdi/gdiimpl \
vcl/win/gdi/salbmp \
+ vcl/win/gdi/salfont \
vcl/win/gdi/salgdi \
vcl/win/gdi/salgdi2 \
- vcl/win/gdi/salfont \
vcl/win/gdi/salgdi_gdiplus \
vcl/win/gdi/salnativewidgets-luna \
vcl/win/gdi/salprn \
vcl/win/gdi/salvd \
vcl/win/gdi/winlayout \
vcl/win/gdi/DWriteTextRenderer \
- vcl/win/window/salframe \
vcl/win/window/keynames \
+ vcl/win/window/salframe \
vcl/win/window/salmenu \
vcl/win/window/salobj \
))
$(eval $(call gb_Library_use_system_win32_libs,vclplug_win,\
+ advapi32 \
d2d1 \
dwrite \
gdi32 \
gdiplus \
imm32 \
ole32 \
+ oleaut32 \
shell32 \
shlwapi \
+ uuid \
version \
winspool \
))
diff --git a/vcl/inc/brdwin.hxx b/vcl/inc/brdwin.hxx
index 0510006fa3ea..057415ce4a7c 100644
--- a/vcl/inc/brdwin.hxx
+++ b/vcl/inc/brdwin.hxx
@@ -171,6 +171,8 @@ public:
tools::Rectangle GetMenuRect() const;
virtual Size GetOptimalSize() const override;
+
+ virtual void FlashWindow() const override;
};
struct ImplBorderFrameData
diff --git a/vcl/inc/salframe.hxx b/vcl/inc/salframe.hxx
index 4b540d61ca0e..74d4946eb262 100644
--- a/vcl/inc/salframe.hxx
+++ b/vcl/inc/salframe.hxx
@@ -208,6 +208,8 @@ public:
virtual void Beep() = 0;
+ virtual void FlashWindow() const {};
+
// returns system data (most prominent: window handle)
virtual const SystemEnvData*
GetSystemData() const = 0;
diff --git a/vcl/inc/win/salframe.h b/vcl/inc/win/salframe.h
index 25c6819bb7e2..f7bf988de410 100644
--- a/vcl/inc/win/salframe.h
+++ b/vcl/inc/win/salframe.h
@@ -126,6 +126,7 @@ public:
virtual LanguageType GetInputLanguage() override;
virtual void UpdateSettings( AllSettings& rSettings ) override;
virtual void Beep() override;
+ virtual void FlashWindow() const override;
virtual const SystemEnvData* GetSystemData() const override;
virtual SalPointerState GetPointerState() override;
virtual KeyIndicatorState GetIndicatorState() override;
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index ea0120524027..ebbc07b8f56e 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -3474,6 +3474,13 @@ public:
m_xTreeView->Resize();
}
+ virtual void set_column_editables(const std::vector<bool>& rEditables) override
+ {
+ size_t nTabCount = rEditables.size();
+ for (size_t i = 0 ; i < nTabCount; ++i)
+ m_xTreeView->SetTabEditable(i, rEditables[i]);
+ }
+
virtual void set_centered_column(int nCol) override
{
m_xTreeView->SetTabJustify(nCol, SvTabJustify::AdjustCenter);
@@ -4424,8 +4431,7 @@ public:
virtual void set_sort_indicator(TriState eState, int col) override
{
- if (col == -1)
- col = 0;
+ assert(col >= 0 && "cannot sort on expander column");
LclHeaderTabListBox* pHeaderBox = dynamic_cast<LclHeaderTabListBox*>(m_xTreeView.get());
if (HeaderBar* pHeaderBar = pHeaderBox ? pHeaderBox->GetHeaderBar() : nullptr)
@@ -4447,8 +4453,7 @@ public:
virtual TriState get_sort_indicator(int col) const override
{
- if (col == -1)
- col = 0;
+ assert(col >= 0 && "cannot sort on expander column");
LclHeaderTabListBox* pHeaderBox = dynamic_cast<LclHeaderTabListBox*>(m_xTreeView.get());
if (HeaderBar* pHeaderBar = pHeaderBox ? pHeaderBox->GetHeaderBar() : nullptr)
diff --git a/vcl/source/outdev/text.cxx b/vcl/source/outdev/text.cxx
index 0bb1d36fd35e..cea6f18410d1 100644
--- a/vcl/source/outdev/text.cxx
+++ b/vcl/source/outdev/text.cxx
@@ -1079,7 +1079,7 @@ void OutputDevice::GetCaretPositions( const OUString& rStr, long* pCaretXArray,
for( i = 0; i < 2 * nLen; ++i )
if( pCaretXArray[ i ] >= 0 )
break;
- long nXPos = pCaretXArray[ i ];
+ long nXPos = (i < 2 * nLen) ? pCaretXArray[i] : -1;
for( i = 0; i < 2 * nLen; ++i )
{
if( pCaretXArray[ i ] >= 0 )
diff --git a/vcl/source/toolkit/group.cxx b/vcl/source/toolkit/group.cxx
index 0743518f8ba1..f713b1f8fd43 100644
--- a/vcl/source/toolkit/group.cxx
+++ b/vcl/source/toolkit/group.cxx
@@ -60,9 +60,9 @@ void GroupBox::ImplInitSettings( bool bBackground )
if ( bBackground )
{
vcl::Window* pParent = GetParent();
- if ( (pParent->IsChildTransparentModeEnabled() ||
- !(pParent->GetStyle() & WB_CLIPCHILDREN) ) &&
- !IsControlBackground() )
+ if (pParent->IsChildTransparentModeEnabled() ||
+ !(pParent->GetStyle() & WB_CLIPCHILDREN) ||
+ !IsControlBackground())
{
EnableChildTransparentMode();
SetParentClipMode( ParentClipMode::NoClip );
diff --git a/vcl/source/treelist/svtabbx.cxx b/vcl/source/treelist/svtabbx.cxx
index c7e17fe66f4b..6e37eb3bd165 100644
--- a/vcl/source/treelist/svtabbx.cxx
+++ b/vcl/source/treelist/svtabbx.cxx
@@ -67,6 +67,16 @@ void SvTabListBox::SetTabs()
}
*/
+ // the 1st column (index 1 or 2 depending on button flags) is always set
+ // editable by SvTreeListBox::SetTabs(),
+ // which prevents setting a different column to editable as the first
+ // one with the flag is picked in SvTreeListBox::ImplEditEntry()
+ assert(aTabs.back()->nFlags & SvLBoxTabFlags::EDITABLE);
+ if (!(mvTabList[0].nFlags & SvLBoxTabFlags::EDITABLE))
+ {
+ aTabs.back()->nFlags &= ~SvLBoxTabFlags::EDITABLE;
+ }
+
// append all other tabs to the list
for( sal_uInt16 nCurTab = 1; nCurTab < sal_uInt16(mvTabList.size()); nCurTab++ )
{
@@ -109,6 +119,7 @@ void SvTabListBox::dispose()
void SvTabListBox::SetTabs(sal_uInt16 nTabs, long const pTabPositions[], MapUnit eMapUnit)
{
+ assert(0 < nTabs);
mvTabList.resize(nTabs);
MapMode aMMSource( eMapUnit );
@@ -122,6 +133,8 @@ void SvTabListBox::SetTabs(sal_uInt16 nTabs, long const pTabPositions[], MapUnit
mvTabList[nIdx].SetPos( nNewTab );
mvTabList[nIdx].nFlags &= MYTABMASK;
}
+ // by default, 1st one is editable, others not; override with set_column_editables
+ mvTabList[0].nFlags |= SvLBoxTabFlags::EDITABLE;
SvTreeListBox::nTreeFlags |= SvTreeFlags::RECALCTABS;
if( IsUpdateMode() )
Invalidate();
@@ -429,6 +442,18 @@ void SvTabListBox::SetTabJustify( sal_uInt16 nTab, SvTabJustify eJustify)
Invalidate();
}
+void SvTabListBox::SetTabEditable(sal_uInt16 nTab, bool bEditable)
+{
+ DBG_ASSERT(nTab<mvTabList.size(),"GetTabPos:Invalid Tab");
+ if( nTab >= mvTabList.size() )
+ return;
+ SvLBoxTab& rTab = mvTabList[ nTab ];
+ if (bEditable)
+ rTab.nFlags |= SvLBoxTabFlags::EDITABLE;
+ else
+ rTab.nFlags &= ~SvLBoxTabFlags::EDITABLE;
+}
+
long SvTabListBox::GetLogicTab( sal_uInt16 nTab )
{
if( SvTreeListBox::nTreeFlags & SvTreeFlags::RECALCTABS )
diff --git a/vcl/source/treelist/treelistbox.cxx b/vcl/source/treelist/treelistbox.cxx
index aa56db5b718f..26d7d44dc6aa 100644
--- a/vcl/source/treelist/treelistbox.cxx
+++ b/vcl/source/treelist/treelistbox.cxx
@@ -889,6 +889,13 @@ void SvTreeListBox::EnableSelectionAsDropTarget( bool bEnable )
// InplaceEditing
// ******************************************************************
+VclPtr<Edit> SvInplaceEdit2::GetEditWidget() const { return pEdit; };
+
+VclPtr<Edit> SvTreeListBox::GetEditWidget() const
+{
+ return pEdCtrl ? pEdCtrl->GetEditWidget() : nullptr;
+}
+
void SvTreeListBox::EditText( const OUString& rStr, const tools::Rectangle& rRect,
const Selection& rSel )
{
diff --git a/vcl/source/treelist/uiobject.cxx b/vcl/source/treelist/uiobject.cxx
index 6c4a4e15bda2..65dbecbc4fb8 100644
--- a/vcl/source/treelist/uiobject.cxx
+++ b/vcl/source/treelist/uiobject.cxx
@@ -8,6 +8,8 @@
*/
#include <memory>
+
+#include <vcl/edit.hxx>
#include <vcl/svlbitm.hxx>
#include <vcl/uitest/uiobject.hxx>
#include <vcl/treelistbox.hxx>
@@ -49,6 +51,10 @@ void TreeListUIObject::execute(const OUString& rAction,
if (rAction.isEmpty())
{
}
+ else if (auto const pEdit = mxTreeList->GetEditWidget())
+ {
+ std::unique_ptr<UIObject>(new EditUIObject(pEdit))->execute(rAction, rParameters);
+ }
else
WindowUIObject::execute(rAction, rParameters);
}
@@ -64,6 +70,13 @@ std::unique_ptr<UIObject> TreeListUIObject::get_child(const OUString& rID)
return std::unique_ptr<UIObject>(new TreeListEntryUIObject(mxTreeList, pEntry));
}
+ else if (nID == -1) // FIXME hack?
+ {
+ if (auto const pEdit = mxTreeList->GetEditWidget())
+ {
+ return std::unique_ptr<UIObject>(new EditUIObject(pEdit));
+ }
+ }
return nullptr;
}
diff --git a/vcl/source/window/brdwin.cxx b/vcl/source/window/brdwin.cxx
index 1b436b544700..f6d06f5073ba 100644
--- a/vcl/source/window/brdwin.cxx
+++ b/vcl/source/window/brdwin.cxx
@@ -20,6 +20,7 @@
#include <strings.hrc>
#include <svdata.hxx>
#include <brdwin.hxx>
+#include <salframe.hxx>
#include <window.h>
#include <vcl/textrectinfo.hxx>
@@ -2070,4 +2071,18 @@ void ImplBorderWindow::queue_resize(StateChangedType eReason)
vcl::Window::queue_resize(eReason);
}
+void ImplBorderWindow::FlashWindow() const
+{
+ // We are showing top level window without focus received. Let's flash it
+ // Use OS features to bring user attention to this window: find topmost one and FlashWindow
+ vcl::Window* pMyParent = mpWindowImpl->mpParent;
+ while (pMyParent && pMyParent->mpWindowImpl && pMyParent->mpWindowImpl->mpParent)
+ {
+ pMyParent = pMyParent->mpWindowImpl->mpParent;
+ }
+ if (pMyParent) {
+ pMyParent->mpWindowImpl->mpFrame->FlashWindow();
+ }
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/source/window/dlgctrl.cxx b/vcl/source/window/dlgctrl.cxx
index f63cb6782b39..ed95662e7677 100644
--- a/vcl/source/window/dlgctrl.cxx
+++ b/vcl/source/window/dlgctrl.cxx
@@ -939,7 +939,7 @@ bool Window::ImplDlgCtrl( const KeyEvent& rKEvt, bool bKeyInput )
}
}
}
- else
+ else if (aKeyCode.IsMod2()) // tdf#151385
{
sal_Unicode c = rKEvt.GetCharCode();
if ( c )
diff --git a/vcl/source/window/layout.cxx b/vcl/source/window/layout.cxx
index a9f23d661caa..4adb37e4a1c4 100644
--- a/vcl/source/window/layout.cxx
+++ b/vcl/source/window/layout.cxx
@@ -1422,9 +1422,9 @@ void VclFrame::designate_label(vcl::Window *pWindow)
const vcl::Window *VclFrame::get_label_widget() const
{
- assert(GetChildCount() == 2);
if (m_pLabel)
return m_pLabel;
+ assert(GetChildCount() <= 2);
//The label widget is normally the first (of two) children
const WindowImpl* pWindowImpl = ImplGetWindowImpl();
if (pWindowImpl->mpFirstChild == pWindowImpl->mpLastChild) //no label exists
diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx
index 9a5a6cde533b..d10674274cff 100644
--- a/vcl/source/window/window.cxx
+++ b/vcl/source/window/window.cxx
@@ -2277,6 +2277,10 @@ void Window::Show(bool bVisible, ShowFlags nFlags)
ImplFocusToTop( ToTopFlags::NONE, false );
}
+ if (!HasFocus() && GetParent()) {
+ GetParent()->FlashWindow();
+ }
+
// adjust mpWindowImpl->mbReallyVisible
bRealVisibilityChanged = !mpWindowImpl->mbReallyVisible;
ImplSetReallyVisible();
diff --git a/vcl/source/window/window2.cxx b/vcl/source/window/window2.cxx
index e2c306fdab1b..db4c1aaf0bc2 100644
--- a/vcl/source/window/window2.cxx
+++ b/vcl/source/window/window2.cxx
@@ -219,6 +219,12 @@ void Window::InvertTracking( const tools::Rectangle& rRect, ShowTrackFlags nFlag
IMPL_LINK( Window, ImplTrackTimerHdl, Timer*, pTimer, void )
{
+ if (!mpWindowImpl)
+ {
+ SAL_WARN("vcl", "ImplTrackTimerHdl has outlived dispose");
+ return;
+ }
+
ImplSVData* pSVData = ImplGetSVData();
// if Button-Repeat we have to change the timeout
diff --git a/vcl/unx/generic/printer/cupsmgr.cxx b/vcl/unx/generic/printer/cupsmgr.cxx
index 12482b2ba878..82655682ed81 100644
--- a/vcl/unx/generic/printer/cupsmgr.cxx
+++ b/vcl/unx/generic/printer/cupsmgr.cxx
@@ -82,14 +82,9 @@ struct GetPPDAttribs
{
// This CUPS method is not at all thread-safe we need
// to dup the pointer to a static buffer it returns ASAP
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-#endif
+SAL_WNODEPRECATED_DECLARATIONS_PUSH
OString aResult = cupsGetPPD(m_aParameter.getStr());
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+SAL_WNODEPRECATED_DECLARATIONS_POP
MutexGuard aGuard( *m_pSyncMutex );
m_aResult = aResult;
m_aCondition.set();
@@ -222,10 +217,7 @@ void CUPSManager::runDests()
// n#722902 - do a fast-failing check for cups working *at all* first
http_t* p_http;
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-#endif
+SAL_WNODEPRECATED_DECLARATIONS_PUSH
if( (p_http=httpConnectEncrypt(
cupsServer(),
ippPort(),
@@ -242,9 +234,7 @@ void CUPSManager::runDests()
httpClose(p_http);
}
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+SAL_WNODEPRECATED_DECLARATIONS_POP
}
void CUPSManager::initialize()
@@ -448,14 +438,9 @@ const PPDParser* CUPSManager::createCUPSParser( const OUString& rPrinter )
rtl_TextEncoding aEncoding = osl_getThreadTextEncoding();
OUString aFileName( OStringToOUString( aPPDFile, aEncoding ) );
// update the printer info with context information
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-#endif
+SAL_WNODEPRECATED_DECLARATIONS_PUSH
ppd_file_t* pPPD = ppdOpenFile( aPPDFile.getStr() );
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+SAL_WNODEPRECATED_DECLARATIONS_POP
if( pPPD )
{
// create the new parser
@@ -463,14 +448,9 @@ const PPDParser* CUPSManager::createCUPSParser( const OUString& rPrinter )
pCUPSParser->m_aFile = rPrinter;
pNewParser = pCUPSParser;
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-#endif
+SAL_WNODEPRECATED_DECLARATIONS_PUSH
/*int nConflicts =*/ cupsMarkOptions( pPPD, pDest->num_options, pDest->options );
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+SAL_WNODEPRECATED_DECLARATIONS_POP
SAL_INFO("vcl.unx.print", "processing the following options for printer " << pDest->name << " (instance " << (pDest->instance == nullptr ? "null" : pDest->instance) << "):");
for( int k = 0; k < pDest->num_options; k++ )
SAL_INFO("vcl.unx.print",
@@ -491,14 +471,9 @@ const PPDParser* CUPSManager::createCUPSParser( const OUString& rPrinter )
rInfo.m_aContext = rContext;
// clean up the mess
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-#endif
+SAL_WNODEPRECATED_DECLARATIONS_PUSH
ppdClose( pPPD );
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+SAL_WNODEPRECATED_DECLARATIONS_POP
}
else
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index c9d66e1ac7f7..b54b41df8c45 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -7964,10 +7964,10 @@ private:
std::vector<GtkSortType> m_aSavedSortTypes;
std::vector<int> m_aSavedSortColumns;
std::vector<int> m_aViewColToModelCol;
- std::vector<int> m_aModelColToViewCol;
bool m_bWorkAroundBadDragRegion;
bool m_bInDrag;
gint m_nTextCol;
+ gint m_nTextView;
gint m_nImageCol;
gint m_nExpanderImageCol;
gint m_nIdCol;
@@ -8237,7 +8237,7 @@ private:
set(iter, m_aToggleTriStateMap[nCol], false);
- signal_toggled(std::make_pair(nRow, nCol));
+ signal_toggled(std::make_pair(nRow, to_external_model(nCol)));
gtk_tree_path_free(tree_path);
}
@@ -8334,9 +8334,67 @@ private:
return m_aViewColToModelCol[viewcol];
}
- int get_view_col(int modelcol) const
+ // We allow only one CellRenderer per TreeViewColumn except for the first
+ // TreeViewColumn which can have two, where the first CellRenderer is
+ // either an expander image. From outside the second CellRenderer is
+ // considered index 0 in the model and the expander as -1
+ int to_external_model(int modelcol) const
{
- return m_aModelColToViewCol[modelcol];
+ if (m_nExpanderImageCol == -1)
+ return modelcol;
+ return modelcol - 1;
+ }
+
+ int to_internal_model(int modelcol) const
+ {
+ if (m_nExpanderImageCol == -1)
+ return modelcol;
+ return modelcol + 1;
+ }
+
+ void set_column_editable(int nCol, bool bEditable)
+ {
+ nCol = to_internal_model(nCol);
+
+ // recompute these 2 based on new 1st editable column
+ m_nTextCol = -1;
+ m_nTextView = -1;
+ int nIndex(0);
+ int nViewColumn(0);
+ bool isSet(false);
+ for (GList* pEntry = g_list_first(m_pColumns); pEntry; pEntry = g_list_next(pEntry))
+ {
+ GtkTreeViewColumn* pColumn = GTK_TREE_VIEW_COLUMN(pEntry->data);
+ GList *pRenderers = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(pColumn));
+ for (GList* pRenderer = g_list_first(pRenderers); pRenderer; pRenderer = g_list_next(pRenderer))
+ {
+ GtkCellRenderer* pCellRenderer = GTK_CELL_RENDERER(pRenderer->data);
+ void* pData = g_object_get_data(G_OBJECT(pCellRenderer), "g-lo-CellIndex");
+ if (reinterpret_cast<sal_IntPtr>(pData) == nCol)
+ {
+ g_object_set(G_OBJECT(pCellRenderer), "editable", bEditable, "editable-set", true, nullptr);
+ isSet = true;
+ }
+ if (GTK_IS_CELL_RENDERER_TEXT(pCellRenderer))
+ {
+ gboolean is_editable(false);
+ g_object_get(pCellRenderer, "editable", &is_editable, nullptr);
+ if (is_editable && m_nTextCol == -1)
+ {
+ assert(m_nTextView == -1);
+ m_nTextCol = nIndex;
+ m_nTextView = nViewColumn;
+ }
+ }
+ if (isSet && m_nTextCol != -1) // both tasks done?
+ {
+ break;
+ }
+ ++nIndex;
+ }
+ g_list_free(pRenderers);
+ ++nViewColumn;
+ }
}
static void signalRowDeleted(GtkTreeModel*, GtkTreePath*, gpointer widget)
@@ -8425,6 +8483,7 @@ public:
, m_bWorkAroundBadDragRegion(false)
, m_bInDrag(false)
, m_nTextCol(-1)
+ , m_nTextView(-1)
, m_nImageCol(-1)
, m_nExpanderImageCol(-1)
, m_nChangedSignalId(g_signal_connect(gtk_tree_view_get_selection(pTreeView), "changed",
@@ -8438,8 +8497,14 @@ public:
, m_nKeyPressSignalId(g_signal_connect(pTreeView, "key-press-event", G_CALLBACK(signalKeyPress), this))
, m_pChangeEvent(nullptr)
{
+ /* The outside concept of a column maps to a gtk CellRenderer, rather than
+ a TreeViewColumn. If the first TreeViewColumn has two CellRenderers, and
+ the first CellRenderer is an image, that CellRenderer is considered to
+ be index -1.
+ */
m_pColumns = gtk_tree_view_get_columns(m_pTreeView);
int nIndex(0);
+ int nViewColumn(0);
for (GList* pEntry = g_list_first(m_pColumns); pEntry; pEntry = g_list_next(pEntry))
{
GtkTreeViewColumn* pColumn = GTK_TREE_VIEW_COLUMN(pEntry->data);
@@ -8448,11 +8513,13 @@ public:
for (GList* pRenderer = g_list_first(pRenderers); pRenderer; pRenderer = g_list_next(pRenderer))
{
GtkCellRenderer* pCellRenderer = GTK_CELL_RENDERER(pRenderer->data);
- g_object_set_data(G_OBJECT(pCellRenderer), "g-lo-CellIndex", reinterpret_cast<gpointer>(nIndex));
if (GTK_IS_CELL_RENDERER_TEXT(pCellRenderer))
{
if (m_nTextCol == -1)
+ {
m_nTextCol = nIndex;
+ m_nTextView = nViewColumn;
+ }
m_aWeightMap[nIndex] = -1;
m_aSensitiveMap[nIndex] = -1;
g_signal_connect(G_OBJECT(pCellRenderer), "editing-started", G_CALLBACK(signalCellEditingStarted), this);
@@ -8473,11 +8540,12 @@ public:
else if (m_nImageCol == -1)
m_nImageCol = nIndex;
}
- m_aModelColToViewCol.push_back(m_aViewColToModelCol.size());
+ g_object_set_data(G_OBJECT(pCellRenderer), "g-lo-CellIndex", reinterpret_cast<gpointer>(nIndex));
++nIndex;
}
g_list_free(pRenderers);
m_aViewColToModelCol.push_back(nIndex - 1);
+ ++nViewColumn;
}
m_nIdCol = nIndex++;
@@ -8513,6 +8581,13 @@ public:
}
}
+ virtual void set_column_editables(const std::vector<bool>& rEditables) override
+ {
+ size_t nTabCount = rEditables.size();
+ for (size_t i = 0 ; i < nTabCount; ++i)
+ set_column_editable(i, rEditables[i]);
+ }
+
virtual void set_centered_column(int nCol) override
{
for (GList* pEntry = g_list_first(m_pColumns); pEntry; pEntry = g_list_next(pEntry))
@@ -8714,8 +8789,7 @@ public:
virtual void set_sort_indicator(TriState eState, int col) override
{
- if (col == -1)
- col = get_view_col(m_nTextCol);
+ assert(col >= 0 && "cannot sort on expander column");
GtkTreeViewColumn* pColumn = GTK_TREE_VIEW_COLUMN(g_list_nth_data(m_pColumns, col));
assert(pColumn && "wrong count");
@@ -8731,8 +8805,7 @@ public:
virtual TriState get_sort_indicator(int col) const override
{
- if (col == -1)
- col = get_view_col(m_nTextCol);
+ assert(col >= 0 && "cannot sort on expander column");
GtkTreeViewColumn* pColumn = GTK_TREE_VIEW_COLUMN(g_list_nth_data(m_pColumns, col));
if (!gtk_tree_view_column_get_sort_indicator(pColumn))
@@ -8746,7 +8819,7 @@ public:
gint sort_column_id(0);
if (!gtk_tree_sortable_get_sort_column_id(pSortable, &sort_column_id, nullptr))
return -1;
- return get_view_col(sort_column_id);
+ return to_external_model(sort_column_id);
}
virtual void set_sort_column(int nColumn) override
@@ -8759,7 +8832,7 @@ public:
GtkSortType eSortType;
GtkTreeSortable* pSortable = GTK_TREE_SORTABLE(m_pTreeStore);
gtk_tree_sortable_get_sort_column_id(pSortable, nullptr, &eSortType);
- int nSortCol = get_model_col(nColumn);
+ int nSortCol = to_internal_model(nColumn);
gtk_tree_sortable_set_sort_func(pSortable, nSortCol, sortFunc, this, nullptr);
gtk_tree_sortable_set_sort_column_id(pSortable, nSortCol, eSortType);
}
@@ -9761,34 +9834,60 @@ public:
virtual void start_editing(const weld::TreeIter& rIter) override
{
- int col = get_view_col(m_nTextCol);
- GtkTreeViewColumn* pColumn = GTK_TREE_VIEW_COLUMN(g_list_nth_data(m_pColumns, col));
- assert(pColumn && "wrong column");
-
const GtkInstanceTreeIter& rGtkIter = static_cast<const GtkInstanceTreeIter&>(rIter);
GtkTreeModel *pModel = GTK_TREE_MODEL(m_pTreeStore);
GtkTreePath* path = gtk_tree_model_get_path(pModel, const_cast<GtkTreeIter*>(&rGtkIter.iter));
- // allow editing of cells which are not usually editable, so we can have double click
- // do its usual row-activate but if we explicitly want to edit (remote files dialog)
+ GtkTreeViewColumn* pColumn = nullptr;
+
+ for (GList* pEntry = g_list_first(m_pColumns); pEntry; pEntry = g_list_next(pEntry))
+ {
+ GtkTreeViewColumn* pTestColumn = GTK_TREE_VIEW_COLUMN(pEntry->data);
+
+ // see if this column is editable
+ gboolean is_editable(false);
+ GList *pRenderers = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(pTestColumn));
+ for (GList* pRenderer = g_list_first(pRenderers); pRenderer; pRenderer = g_list_next(pRenderer))
+ {
+ GtkCellRenderer* pCellRenderer = GTK_CELL_RENDERER(pRenderer->data);
+ if (GTK_IS_CELL_RENDERER_TEXT(pCellRenderer))
+ {
+ g_object_get(pCellRenderer, "editable", &is_editable, nullptr);
+ if (is_editable)
+ {
+ pColumn = pTestColumn;
+ break;
+ }
+ }
+ }
+ g_list_free(pRenderers);
+
+ if (is_editable)
+ break;
+ }
+
+ // if nothing explicit editable, allow editing of cells which are not
+ // usually editable, so we can have double click do its usual
+ // row-activate but if we explicitly want to edit (remote files dialog)
// we can still do that
- GList *pRenderers = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(pColumn));
- for (GList* pRenderer = g_list_first(pRenderers); pRenderer; pRenderer = g_list_next(pRenderer))
+ if (!pColumn)
{
- GtkCellRenderer* pCellRenderer = GTK_CELL_RENDERER(pRenderer->data);
- if (GTK_IS_CELL_RENDERER_TEXT(pCellRenderer))
+ pColumn = GTK_TREE_VIEW_COLUMN(g_list_nth_data(m_pColumns, m_nTextView));
+ assert(pColumn && "wrong column");
+
+ GList *pRenderers = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(pColumn));
+ for (GList* pRenderer = g_list_first(pRenderers); pRenderer; pRenderer = g_list_next(pRenderer))
{
- gboolean is_editable(false);
- g_object_get(pCellRenderer, "editable", &is_editable, nullptr);
- if (!is_editable)
+ GtkCellRenderer* pCellRenderer = GTK_CELL_RENDERER(pRenderer->data);
+ if (GTK_IS_CELL_RENDERER_TEXT(pCellRenderer))
{
g_object_set(pCellRenderer, "editable", true, "editable-set", true, nullptr);
g_object_set_data(G_OBJECT(pCellRenderer), "g-lo-RestoreNonEditable", reinterpret_cast<gpointer>(true));
break;
}
}
+ g_list_free(pRenderers);
}
- g_list_free(pRenderers);
gtk_tree_view_set_cursor(m_pTreeView, path, pColumn, true);
diff --git a/dtrans/source/generic/dtrans.component b/vcl/vclplug_win.component
index 915e3f0bcf8f..907694991895 100644
--- a/dtrans/source/generic/dtrans.component
+++ b/vcl/vclplug_win.component
@@ -15,14 +15,32 @@
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
- -->
+-->
<component loader="com.sun.star.loader.SharedLibrary" environment="@CPPU_ENV@"
- prefix="dtrans" xmlns="http://openoffice.org/2010/uno-components">
- <implementation name="com.sun.star.comp.datatransfer.ClipboardManager">
+ xmlns="http://openoffice.org/2010/uno-components">
+ <implementation name="com.sun.star.datatransfer.DataFormatTranslator"
+ constructor="dtrans_CDataFormatTranslatorUNO_get_implementation">
+ <service name="com.sun.star.datatransfer.DataFormatTranslator"/>
+ </implementation>
+ <implementation name="com.sun.star.comp.datatransfer.dnd.OleDragSource_V1"
+ constructor="dtrans_DragSource_get_implementation">
+ <service name="com.sun.star.datatransfer.dnd.OleDragSource"/>
+ </implementation>
+ <implementation name="com.sun.star.comp.datatransfer.dnd.OleDropTarget_V1"
+ constructor="dtrans_DropTarget_get_implementation">
+ <service name="com.sun.star.datatransfer.dnd.OleDropTarget"/>
+ </implementation>
+ <implementation name="com.sun.star.comp.datatransfer.ClipboardManager"
+ constructor="dtrans_ClipboardManager_get_implementation">
<service name="com.sun.star.datatransfer.clipboard.ClipboardManager"/>
</implementation>
- <implementation name="com.sun.star.comp.datatransfer.clipboard.GenericClipboard">
+ <implementation name="com.sun.star.comp.datatransfer.clipboard.GenericClipboard"
+ constructor="dtrans_GenericClipboard_get_implementation">
<service name="com.sun.star.datatransfer.clipboard.GenericClipboard"/>
</implementation>
+ <implementation name="com.sun.star.datatransfer.clipboard.ClipboardW32"
+ constructor="dtrans_CWinClipboard_get_implementation">
+ <service name="com.sun.star.datatransfer.clipboard.SystemClipboard"/>
+ </implementation>
</component>
diff --git a/vcl/win/app/salinst.cxx b/vcl/win/app/salinst.cxx
index 727c3f5c7cf9..3010105a5e16 100644
--- a/vcl/win/app/salinst.cxx
+++ b/vcl/win/app/salinst.cxx
@@ -944,7 +944,7 @@ void WinSalInstance::AddToRecentDocumentList(const OUString& rFileUrl, const OUS
if ( !sApplicationName.isEmpty() )
{
- OUString sApplicationID("TheDocumentFoundation.LibreOffice." + sApplicationName);
+ OUString sApplicationID("CIB.CIBOffice." + sApplicationName);
SHARDAPPIDINFO info;
info.psi = pShellItem;
diff --git a/dtrans/source/win32/dtobj/APNDataObject.cxx b/vcl/win/dtrans/APNDataObject.cxx
index 53342f21f379..53342f21f379 100644
--- a/dtrans/source/win32/dtobj/APNDataObject.cxx
+++ b/vcl/win/dtrans/APNDataObject.cxx
diff --git a/dtrans/source/win32/dtobj/APNDataObject.hxx b/vcl/win/dtrans/APNDataObject.hxx
index 2c1d9718ec2f..df3ac559cae5 100644
--- a/dtrans/source/win32/dtobj/APNDataObject.hxx
+++ b/vcl/win/dtrans/APNDataObject.hxx
@@ -20,6 +20,11 @@
#ifndef INCLUDED_DTRANS_SOURCE_WIN32_DTOBJ_APNDATAOBJECT_HXX
#define INCLUDED_DTRANS_SOURCE_WIN32_DTOBJ_APNDATAOBJECT_HXX
+#if !defined WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
+#endif
+#include <objidl.h>
+
#include <systools/win32/comtools.hxx>
/*
diff --git a/dtrans/source/win32/dtobj/DOTransferable.cxx b/vcl/win/dtrans/DOTransferable.cxx
index 230a7fbfed8e..11692781a683 100644
--- a/dtrans/source/win32/dtobj/DOTransferable.cxx
+++ b/vcl/win/dtrans/DOTransferable.cxx
@@ -22,8 +22,9 @@
#include <osl/diagnose.h>
#include "DOTransferable.hxx"
-#include "../misc/ImplHelper.hxx"
-#include <WinClip.hxx>
+#include "ImplHelper.hxx"
+#include "WinClip.hxx"
+#include "WinClipboard.hxx"
#include "DTransHelper.hxx"
#include "TxtCnvtHlp.hxx"
#include "MimeAttrib.hxx"
@@ -167,19 +168,6 @@ bool cmpAllContentTypeParameter(
} // end namespace
-Reference< XTransferable > CDOTransferable::create( const Reference< XComponentContext >& rxContext,
- IDataObjectPtr pIDataObject )
-{
- CDOTransferable* pTransf = new CDOTransferable(rxContext, pIDataObject);
- Reference<XTransferable> refDOTransf(pTransf);
-
- pTransf->acquire();
- pTransf->initFlavorList();
- pTransf->release();
-
- return refDOTransf;
-}
-
CDOTransferable::CDOTransferable(
const Reference< XComponentContext >& rxContext, IDataObjectPtr rDataObject ) :
m_rDataObject( rDataObject ),
@@ -188,6 +176,20 @@ CDOTransferable::CDOTransferable(
m_bUnicodeRegistered( false ),
m_TxtFormatOnClipboard( CF_INVALID )
{
+ initFlavorList();
+}
+
+CDOTransferable::CDOTransferable(
+ const Reference<XComponentContext>& rxContext,
+ const css::uno::Reference<css::datatransfer::clipboard::XClipboard>& xClipboard,
+ const std::vector<sal_uInt32>& rFormats)
+ : m_xClipboard(xClipboard)
+ , m_xContext(rxContext)
+ , m_DataFormatTranslator(rxContext)
+ , m_bUnicodeRegistered(false)
+ , m_TxtFormatOnClipboard(CF_INVALID)
+{
+ initFlavorListFromFormatList(rFormats);
}
Any SAL_CALL CDOTransferable::getTransferData( const DataFlavor& aFlavor )
@@ -271,6 +273,7 @@ sal_Bool SAL_CALL CDOTransferable::isDataFlavorSupported( const DataFlavor& aFla
void CDOTransferable::initFlavorList( )
{
+ std::vector<sal_uInt32> aFormats;
sal::systools::COMReference<IEnumFORMATETC> pEnumFormatEtc;
HRESULT hr = m_rDataObject->EnumFormatEtc( DATADIR_GET, &pEnumFormatEtc );
if ( SUCCEEDED( hr ) )
@@ -280,39 +283,38 @@ void CDOTransferable::initFlavorList( )
FORMATETC fetc;
while ( S_OK == pEnumFormatEtc->Next( 1, &fetc, nullptr ) )
{
- // we use locales only to determine the
- // charset if there is text on the cliboard
- // we don't offer this format
- if ( CF_LOCALE == fetc.cfFormat )
- continue;
-
- DataFlavor aFlavor = formatEtcToDataFlavor( fetc );
+ aFormats.push_back(fetc.cfFormat);
+ // see MSDN IEnumFORMATETC
+ CoTaskMemFree( fetc.ptd );
+ }
+ initFlavorListFromFormatList(aFormats);
+ }
+}
- // if text or oemtext is offered we also pretend to have unicode text
- if ( CDataFormatTranslator::isOemOrAnsiTextFormat( fetc.cfFormat ) &&
- !m_bUnicodeRegistered )
+void CDOTransferable::initFlavorListFromFormatList(const std::vector<sal_uInt32>& rFormats)
+{
+ for (sal_uInt32 cfFormat : rFormats)
+ {
+ // we use locales only to determine the
+ // charset if there is text on the cliboard
+ // we don't offer this format
+ if (CF_LOCALE == cfFormat)
+ continue;
+
+ // if text or oemtext is offered we pretend to have unicode text
+ if (CDataFormatTranslator::isTextFormat(cfFormat))
+ {
+ if (!m_bUnicodeRegistered)
{
- addSupportedFlavor( aFlavor );
-
- m_TxtFormatOnClipboard = fetc.cfFormat;
+ m_TxtFormatOnClipboard = cfFormat;
m_bUnicodeRegistered = true;
- // register unicode text as accompany format
- aFlavor = formatEtcToDataFlavor(
- CDataFormatTranslator::getFormatEtcForClipformat( CF_UNICODETEXT ) );
- addSupportedFlavor( aFlavor );
+ // register unicode text as format
+ addSupportedFlavor(formatEtcToDataFlavor(CF_UNICODETEXT));
}
- else if ( (CF_UNICODETEXT == fetc.cfFormat) && !m_bUnicodeRegistered )
- {
- addSupportedFlavor( aFlavor );
- m_bUnicodeRegistered = true;
- }
- else
- addSupportedFlavor( aFlavor );
-
- // see MSDN IEnumFORMATETC
- CoTaskMemFree( fetc.ptd );
}
+ else
+ addSupportedFlavor(formatEtcToDataFlavor(cfFormat));
}
}
@@ -329,18 +331,9 @@ void CDOTransferable::addSupportedFlavor( const DataFlavor& aFlavor )
}
}
-DataFlavor CDOTransferable::formatEtcToDataFlavor( const FORMATETC& aFormatEtc )
+DataFlavor CDOTransferable::formatEtcToDataFlavor(sal_uInt32 cfFormat)
{
- LCID lcid = 0;
-
- // for non-unicode text format we must provide a locale to get
- // the character-set of the text, if there is no locale on the
- // clipboard we assume the text is in a charset appropriate for
- // the current thread locale
- if ( (CF_TEXT == aFormatEtc.cfFormat) || (CF_OEMTEXT == aFormatEtc.cfFormat) )
- lcid = getLocaleFromClipboard( );
-
- return m_DataFormatTranslator.getDataFlavorFromFormatEtc( aFormatEtc, lcid );
+ return m_DataFormatTranslator.getDataFlavorFromFormatEtc(cfFormat);
}
// returns the current locale on clipboard; if there is no locale on
@@ -370,6 +363,18 @@ LCID CDOTransferable::getLocaleFromClipboard( )
return lcid;
}
+void CDOTransferable::tryToGetIDataObjectIfAbsent()
+{
+ if (!m_rDataObject.is())
+ {
+ auto xClipboard = m_xClipboard.get(); // holding the reference while we get the object
+ if (CWinClipboard* pWinClipboard = dynamic_cast<CWinClipboard*>(xClipboard.get()))
+ {
+ m_rDataObject = pWinClipboard->getIDataObject();
+ }
+ }
+}
+
// I think it's not necessary to call ReleaseStgMedium
// in case of failures because nothing should have been
// allocated etc.
@@ -377,6 +382,9 @@ LCID CDOTransferable::getLocaleFromClipboard( )
CDOTransferable::ByteSequence_t CDOTransferable::getClipboardData( CFormatEtc& aFormatEtc )
{
STGMEDIUM stgmedium;
+ tryToGetIDataObjectIfAbsent();
+ if (!m_rDataObject.is()) // Maybe we are shutting down, and clipboard is already destroyed?
+ throw RuntimeException();
HRESULT hr = m_rDataObject->GetData( aFormatEtc, &stgmedium );
// in case of failure to get a WMF metafile handle, try to get a memory block
diff --git a/dtrans/source/win32/dtobj/DOTransferable.hxx b/vcl/win/dtrans/DOTransferable.hxx
index f45e18c4f85a..cc33ff70c6a9 100644
--- a/dtrans/source/win32/dtobj/DOTransferable.hxx
+++ b/vcl/win/dtrans/DOTransferable.hxx
@@ -24,12 +24,16 @@
#include <cppuhelper/implbase.hxx>
#include "DataFmtTransl.hxx"
+#include <com/sun/star/datatransfer/clipboard/XClipboard.hpp>
#include <com/sun/star/datatransfer/XMimeContentTypeFactory.hpp>
#include <com/sun/star/datatransfer/XMimeContentType.hpp>
#include <com/sun/star/datatransfer/XSystemTransferable.hpp>
+#include <cppuhelper/weakref.hxx>
#include <systools/win32/comtools.hxx>
+#include <vector>
+
// forward
class CFormatEtc;
@@ -40,9 +44,6 @@ class CDOTransferable : public ::cppu::WeakImplHelper<
public:
typedef css::uno::Sequence< sal_Int8 > ByteSequence_t;
- static css::uno::Reference< css::datatransfer::XTransferable > create(
- const css::uno::Reference< css::uno::XComponentContext >& rxContext, IDataObjectPtr pIDataObject );
-
// XTransferable
virtual css::uno::Any SAL_CALL getTransferData( const css::datatransfer::DataFlavor& aFlavor ) override;
@@ -55,18 +56,25 @@ public:
virtual css::uno::Any SAL_CALL getData( const css::uno::Sequence<sal_Int8>& aProcessId ) override;
-private:
+ explicit CDOTransferable(
+ const css::uno::Reference< css::uno::XComponentContext >& rxContext,
+ const css::uno::Reference<css::datatransfer::clipboard::XClipboard>& xClipboard,
+ const std::vector<sal_uInt32>& rFormats);
+
explicit CDOTransferable(
const css::uno::Reference< css::uno::XComponentContext >& rxContext,
IDataObjectPtr rDataObject );
+private:
// some helper functions
void initFlavorList( );
+ void initFlavorListFromFormatList(const std::vector<sal_uInt32>& rFormats);
void addSupportedFlavor( const css::datatransfer::DataFlavor& aFlavor );
- css::datatransfer::DataFlavor formatEtcToDataFlavor( const FORMATETC& aFormatEtc );
+ css::datatransfer::DataFlavor formatEtcToDataFlavor(sal_uInt32 cfFormat);
+ void tryToGetIDataObjectIfAbsent();
ByteSequence_t getClipboardData( CFormatEtc& aFormatEtc );
OUString synthesizeUnicodeText( );
@@ -76,6 +84,7 @@ private:
const css::datatransfer::DataFlavor& rhs );
private:
+ css::uno::WeakReference<css::datatransfer::clipboard::XClipboard> m_xClipboard;
IDataObjectPtr m_rDataObject;
css::uno::Sequence< css::datatransfer::DataFlavor > m_FlavorList;
const css::uno::Reference< css::uno::XComponentContext > m_xContext;
diff --git a/dtrans/source/win32/dtobj/DTransHelper.cxx b/vcl/win/dtrans/DTransHelper.cxx
index 5ca12d0fe26b..5ca12d0fe26b 100644
--- a/dtrans/source/win32/dtobj/DTransHelper.cxx
+++ b/vcl/win/dtrans/DTransHelper.cxx
diff --git a/dtrans/source/win32/dtobj/DTransHelper.hxx b/vcl/win/dtrans/DTransHelper.hxx
index e003c2a70629..684becfafa9a 100644
--- a/dtrans/source/win32/dtobj/DTransHelper.hxx
+++ b/vcl/win/dtrans/DTransHelper.hxx
@@ -25,7 +25,7 @@
#endif
#include <windows.h>
#include <objidl.h>
-#include <WinClip.hxx>
+#include "WinClip.hxx"
#define AUTO_INIT TRUE
diff --git a/dtrans/source/win32/dtobj/DataFmtTransl.cxx b/vcl/win/dtrans/DataFmtTransl.cxx
index b8513c6e75d4..46947b81c6fa 100644
--- a/dtrans/source/win32/dtobj/DataFmtTransl.cxx
+++ b/vcl/win/dtrans/DataFmtTransl.cxx
@@ -21,8 +21,8 @@
#include <rtl/string.hxx>
#include <osl/diagnose.h>
#include <rtl/tencinfo.h>
-#include "../misc/ImplHelper.hxx"
-#include <WinClip.hxx>
+#include "ImplHelper.hxx"
+#include "WinClip.hxx"
#include "MimeAttrib.hxx"
#include "DTransHelper.hxx"
#include <rtl/string.h>
@@ -98,13 +98,13 @@ CFormatEtc CDataFormatTranslator::getFormatEtcFromDataFlavor( const DataFlavor&
return sal::static_int_cast<CFormatEtc>(getFormatEtcForClipformat( sal::static_int_cast<CLIPFORMAT>(cf) ));
}
-DataFlavor CDataFormatTranslator::getDataFlavorFromFormatEtc( const FORMATETC& aFormatEtc, LCID lcid ) const
+DataFlavor CDataFormatTranslator::getDataFlavorFromFormatEtc(sal_uInt32 cfFormat, LCID lcid) const
{
DataFlavor aFlavor;
try
{
- CLIPFORMAT aClipformat = aFormatEtc.cfFormat;
+ CLIPFORMAT aClipformat = cfFormat;
Any aAny;
aAny <<= static_cast< sal_Int32 >( aClipformat );
diff --git a/dtrans/source/win32/dtobj/DataFmtTransl.hxx b/vcl/win/dtrans/DataFmtTransl.hxx
index 3fad9bbdc89a..0a8f08582b9c 100644
--- a/dtrans/source/win32/dtobj/DataFmtTransl.hxx
+++ b/vcl/win/dtrans/DataFmtTransl.hxx
@@ -43,7 +43,7 @@ public:
CFormatEtc getFormatEtcFromDataFlavor( const css::datatransfer::DataFlavor& aDataFlavor ) const;
css::datatransfer::DataFlavor getDataFlavorFromFormatEtc(
- const FORMATETC& aFormatEtc, LCID lcid = GetThreadLocale( ) ) const;
+ sal_uInt32 cfFormat, LCID lcid = GetThreadLocale()) const;
static CFormatEtc getFormatEtcForClipformat( CLIPFORMAT cf );
static CFormatEtc getFormatEtcForClipformatName( const OUString& aClipFmtName );
diff --git a/dtrans/source/win32/dtobj/DtObjFactory.cxx b/vcl/win/dtrans/DtObjFactory.cxx
index 29f630bf406b..5a17d8b4c2e4 100644
--- a/dtrans/source/win32/dtobj/DtObjFactory.cxx
+++ b/vcl/win/dtrans/DtObjFactory.cxx
@@ -17,8 +17,7 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-#include "../../inc/DtObjFactory.hxx"
-
+#include "DtObjFactory.hxx"
#include "XTDataObject.hxx"
using namespace com::sun::star::uno;
diff --git a/dtrans/source/inc/DtObjFactory.hxx b/vcl/win/dtrans/DtObjFactory.hxx
index be8bf8dbcb3e..be8bf8dbcb3e 100644
--- a/dtrans/source/inc/DtObjFactory.hxx
+++ b/vcl/win/dtrans/DtObjFactory.hxx
diff --git a/dtrans/source/win32/dtobj/Fetc.cxx b/vcl/win/dtrans/Fetc.cxx
index 048b9228de5d..9bcb2f609ff6 100644
--- a/dtrans/source/win32/dtobj/Fetc.cxx
+++ b/vcl/win/dtrans/Fetc.cxx
@@ -19,7 +19,7 @@
#include <osl/diagnose.h>
#include "Fetc.hxx"
-#include "../misc/ImplHelper.hxx"
+#include "ImplHelper.hxx"
CFormatEtc::CFormatEtc( )
{
diff --git a/dtrans/source/win32/dtobj/Fetc.hxx b/vcl/win/dtrans/Fetc.hxx
index 5ec3e4b9459e..5ec3e4b9459e 100644
--- a/dtrans/source/win32/dtobj/Fetc.hxx
+++ b/vcl/win/dtrans/Fetc.hxx
diff --git a/dtrans/source/win32/dtobj/FetcList.cxx b/vcl/win/dtrans/FetcList.cxx
index 0a262b0677fb..e9a1c0dac5f1 100644
--- a/dtrans/source/win32/dtobj/FetcList.cxx
+++ b/vcl/win/dtrans/FetcList.cxx
@@ -25,8 +25,8 @@
#include <com/sun/star/datatransfer/XMimeContentType.hpp>
#include "DataFmtTransl.hxx"
-#include "../misc/ImplHelper.hxx"
-#include <WinClip.hxx>
+#include "ImplHelper.hxx"
+#include "WinClip.hxx"
#include <algorithm>
@@ -285,10 +285,7 @@ OUString CFormatRegistrar::getCharsetFromDataFlavor( const DataFlavor& aFlavor )
bool CFormatRegistrar::hasUnicodeFlavor( const Reference< XTransferable >& aXTransferable ) const
{
- CFormatEtc fetc( CF_UNICODETEXT );
-
- DataFlavor aFlavor =
- m_DataFormatTranslator.getDataFlavorFromFormatEtc( fetc );
+ DataFlavor aFlavor = m_DataFormatTranslator.getDataFlavorFromFormatEtc(CF_UNICODETEXT);
return aXTransferable->isDataFlavorSupported( aFlavor );
}
diff --git a/dtrans/source/win32/dtobj/FetcList.hxx b/vcl/win/dtrans/FetcList.hxx
index cf7697e1ba1e..cf7697e1ba1e 100644
--- a/dtrans/source/win32/dtobj/FetcList.hxx
+++ b/vcl/win/dtrans/FetcList.hxx
diff --git a/dtrans/source/win32/dtobj/FmtFilter.cxx b/vcl/win/dtrans/FmtFilter.cxx
index 2130c42ba578..2130c42ba578 100644
--- a/dtrans/source/win32/dtobj/FmtFilter.cxx
+++ b/vcl/win/dtrans/FmtFilter.cxx
diff --git a/dtrans/source/win32/dtobj/FmtFilter.hxx b/vcl/win/dtrans/FmtFilter.hxx
index 1c2325851208..1c2325851208 100644
--- a/dtrans/source/win32/dtobj/FmtFilter.hxx
+++ b/vcl/win/dtrans/FmtFilter.hxx
diff --git a/dtrans/source/win32/misc/ImplHelper.cxx b/vcl/win/dtrans/ImplHelper.cxx
index 0e38b9183d82..0e38b9183d82 100644
--- a/dtrans/source/win32/misc/ImplHelper.cxx
+++ b/vcl/win/dtrans/ImplHelper.cxx
diff --git a/dtrans/source/win32/misc/ImplHelper.hxx b/vcl/win/dtrans/ImplHelper.hxx
index 2d39e0727551..2d39e0727551 100644
--- a/dtrans/source/win32/misc/ImplHelper.hxx
+++ b/vcl/win/dtrans/ImplHelper.hxx
diff --git a/dtrans/source/win32/dtobj/MimeAttrib.hxx b/vcl/win/dtrans/MimeAttrib.hxx
index eb57ba750ea1..eb57ba750ea1 100644
--- a/dtrans/source/win32/dtobj/MimeAttrib.hxx
+++ b/vcl/win/dtrans/MimeAttrib.hxx
diff --git a/dtrans/source/win32/clipb/MtaOleClipb.cxx b/vcl/win/dtrans/MtaOleClipb.cxx
index a3e28806deed..eef43afa735c 100644
--- a/dtrans/source/win32/clipb/MtaOleClipb.cxx
+++ b/vcl/win/dtrans/MtaOleClipb.cxx
@@ -34,6 +34,10 @@
#include <sal/log.hxx>
#include "MtaOleClipb.hxx"
+
+#include <svsys.h>
+#include <win/saldata.hxx>
+
#include <osl/thread.h>
#include <wchar.h>
@@ -48,8 +52,7 @@ using osl::ClearableMutexGuard;
namespace /* private */
{
- wchar_t CLIPSRV_DLL_NAME[] = L"sysdtrans.dll";
- wchar_t g_szWndClsName[] = L"MtaOleReqWnd###";
+ const wchar_t g_szWndClsName[] = L"MtaOleReqWnd###";
// messages constants
@@ -607,8 +610,8 @@ void CMtaOleClipboard::createMtaOleReqWnd( )
{
WNDCLASSEXW wcex;
- HINSTANCE hInst = GetModuleHandleW( CLIPSRV_DLL_NAME );
- OSL_ENSURE( nullptr != hInst, "The name of the clipboard service dll must have changed" );
+ SalData* pSalData = GetSalData();
+ OSL_ASSERT(nullptr != pSalData->mhInst);
ZeroMemory( &wcex, sizeof(wcex) );
@@ -617,7 +620,7 @@ void CMtaOleClipboard::createMtaOleReqWnd( )
wcex.lpfnWndProc = CMtaOleClipboard::mtaOleReqWndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
- wcex.hInstance = hInst;
+ wcex.hInstance = pSalData->mhInst;
wcex.hIcon = nullptr;
wcex.hCursor = nullptr;
wcex.hbrBackground = nullptr;
@@ -629,7 +632,7 @@ void CMtaOleClipboard::createMtaOleReqWnd( )
if ( 0 != m_MtaOleReqWndClassAtom )
m_hwndMtaOleReqWnd = CreateWindowW(
- g_szWndClsName, nullptr, 0, 0, 0, 0, 0, nullptr, nullptr, hInst, nullptr );
+ g_szWndClsName, nullptr, 0, 0, 0, 0, 0, nullptr, nullptr, pSalData->mhInst, nullptr );
}
unsigned int CMtaOleClipboard::run( )
diff --git a/dtrans/source/win32/clipb/MtaOleClipb.hxx b/vcl/win/dtrans/MtaOleClipb.hxx
index bf71ac26e8f8..bf71ac26e8f8 100644
--- a/dtrans/source/win32/clipb/MtaOleClipb.hxx
+++ b/vcl/win/dtrans/MtaOleClipb.hxx
diff --git a/dtrans/source/win32/dtobj/TxtCnvtHlp.cxx b/vcl/win/dtrans/TxtCnvtHlp.cxx
index 1ea9f4c9f549..a0c09a1badf5 100644
--- a/dtrans/source/win32/dtobj/TxtCnvtHlp.cxx
+++ b/vcl/win/dtrans/TxtCnvtHlp.cxx
@@ -18,9 +18,10 @@
*/
#include <osl/diagnose.h>
+
#include "TxtCnvtHlp.hxx"
#include "DTransHelper.hxx"
-#include "../misc/ImplHelper.hxx"
+#include "ImplHelper.hxx"
using namespace ::com::sun::star::datatransfer;
using namespace ::com::sun::star::uno;
diff --git a/dtrans/source/win32/dtobj/TxtCnvtHlp.hxx b/vcl/win/dtrans/TxtCnvtHlp.hxx
index 9f8d47209d9c..9f8d47209d9c 100644
--- a/dtrans/source/win32/dtobj/TxtCnvtHlp.hxx
+++ b/vcl/win/dtrans/TxtCnvtHlp.hxx
diff --git a/dtrans/source/inc/WinClip.hxx b/vcl/win/dtrans/WinClip.hxx
index 69d4c500c242..69d4c500c242 100644
--- a/dtrans/source/inc/WinClip.hxx
+++ b/vcl/win/dtrans/WinClip.hxx
diff --git a/vcl/win/dtrans/WinClipboard.cxx b/vcl/win/dtrans/WinClipboard.cxx
new file mode 100644
index 000000000000..2e5dc2ad2d88
--- /dev/null
+++ b/vcl/win/dtrans/WinClipboard.cxx
@@ -0,0 +1,364 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <osl/diagnose.h>
+#include <com/sun/star/datatransfer/clipboard/ClipboardEvent.hpp>
+#include <com/sun/star/lang/DisposedException.hpp>
+#include <com/sun/star/lang/IllegalArgumentException.hpp>
+#include <com/sun/star/uno/XComponentContext.hpp>
+#include <cppuhelper/supportsservice.hxx>
+#include <rtl/ref.hxx>
+
+#include <com/sun/star/datatransfer/clipboard/RenderingCapabilities.hpp>
+#include "XNotifyingDataObject.hxx"
+
+#include <systools/win32/comtools.hxx>
+#include "DtObjFactory.hxx"
+#include "APNDataObject.hxx"
+#include "DOTransferable.hxx"
+#include "WinClipboard.hxx"
+
+#if !defined WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#include <windows.h>
+#include <ole2.h>
+#include <objidl.h>
+
+#include "WinClipboard.hxx"
+
+using namespace com::sun::star;
+
+// definition of static members
+CWinClipboard* CWinClipboard::s_pCWinClipbImpl = nullptr;
+osl::Mutex CWinClipboard::s_aMutex;
+
+/*XEventListener,*/
+CWinClipboard::CWinClipboard(const uno::Reference<uno::XComponentContext>& rxContext,
+ const OUString& aClipboardName)
+ : WeakComponentImplHelper<XSystemClipboard, XFlushableClipboard, XServiceInfo>(
+ m_aCbListenerMutex)
+ , m_xContext(rxContext)
+ , m_itsName(aClipboardName)
+ , m_pCurrentClipContent(nullptr)
+{
+ // necessary to reassociate from
+ // the static callback function
+ s_pCWinClipbImpl = this;
+ registerClipboardViewer();
+}
+
+CWinClipboard::~CWinClipboard()
+{
+ {
+ osl::MutexGuard aGuard(s_aMutex);
+ s_pCWinClipbImpl = nullptr;
+ }
+
+ unregisterClipboardViewer();
+}
+
+// XClipboard
+
+// to avoid unnecessary traffic we check first if there is a clipboard
+// content which was set via setContent, in this case we don't need
+// to query the content from the clipboard, create a new wrapper object
+// and so on, we simply return the original XTransferable instead of our
+// DOTransferable
+
+uno::Reference<datatransfer::XTransferable> SAL_CALL CWinClipboard::getContents()
+{
+ osl::MutexGuard aGuard(m_aMutex);
+
+ if (rBHelper.bDisposed)
+ throw lang::DisposedException("object is already disposed",
+ static_cast<XClipboardEx*>(this));
+
+ // use the shortcut or create a transferable from
+ // system clipboard
+ {
+ osl::MutexGuard aGuard(m_ClipContentMutex);
+
+ if (nullptr != m_pCurrentClipContent)
+ return m_pCurrentClipContent->m_XTransferable;
+
+ // Content cached?
+ if (m_foreignContent.is())
+ return m_foreignContent;
+
+ // release the mutex, so that the variable may be
+ // changed by other threads
+ }
+
+ uno::Reference<datatransfer::XTransferable> rClipContent;
+
+ // get the current format list from clipboard
+ if (UINT nFormats; !GetUpdatedClipboardFormats(nullptr, 0, &nFormats)
+ && GetLastError() == ERROR_INSUFFICIENT_BUFFER)
+ {
+ std::vector<UINT> aUINTFormats(nFormats);
+ if (GetUpdatedClipboardFormats(aUINTFormats.data(), nFormats, &nFormats))
+ {
+ std::vector<sal_uInt32> aFormats(aUINTFormats.begin(), aUINTFormats.end());
+ rClipContent = new CDOTransferable(m_xContext, this, aFormats);
+
+ osl::MutexGuard aGuard2(m_ClipContentMutex);
+ m_foreignContent = rClipContent;
+ }
+ }
+
+ return rClipContent;
+}
+
+IDataObjectPtr CWinClipboard::getIDataObject()
+{
+ osl::MutexGuard aGuard(m_aMutex);
+
+ if (rBHelper.bDisposed)
+ throw lang::DisposedException("object is already disposed",
+ static_cast<XClipboardEx*>(this));
+
+ // get the current dataobject from clipboard
+ IDataObjectPtr pIDataObject;
+ HRESULT hr = m_MtaOleClipboard.getClipboard(&pIDataObject);
+
+ if (SUCCEEDED(hr))
+ {
+ // create an apartment neutral dataobject and initialize it with a
+ // com smart pointer to the IDataObject from clipboard
+ pIDataObject = new CAPNDataObject(pIDataObject);
+ }
+
+ return pIDataObject;
+}
+
+void SAL_CALL CWinClipboard::setContents(
+ const uno::Reference<datatransfer::XTransferable>& xTransferable,
+ const uno::Reference<datatransfer::clipboard::XClipboardOwner>& xClipboardOwner)
+{
+ osl::MutexGuard aGuard(m_aMutex);
+
+ if (rBHelper.bDisposed)
+ throw lang::DisposedException("object is already disposed",
+ static_cast<XClipboardEx*>(this));
+
+ IDataObjectPtr pIDataObj;
+
+ if (xTransferable.is())
+ {
+ {
+ osl::MutexGuard aGuard(m_ClipContentMutex);
+
+ m_foreignContent.clear();
+
+ m_pCurrentClipContent = new CXNotifyingDataObject(
+ CDTransObjFactory::createDataObjFromTransferable(m_xContext, xTransferable),
+ xTransferable, xClipboardOwner, this);
+ }
+
+ pIDataObj = IDataObjectPtr(m_pCurrentClipContent);
+ }
+
+ m_MtaOleClipboard.setClipboard(pIDataObj.get());
+}
+
+OUString SAL_CALL CWinClipboard::getName()
+{
+ if (rBHelper.bDisposed)
+ throw lang::DisposedException("object is already disposed",
+ static_cast<XClipboardEx*>(this));
+
+ return m_itsName;
+}
+
+// XFlushableClipboard
+
+void SAL_CALL CWinClipboard::flushClipboard()
+{
+ osl::MutexGuard aGuard(m_aMutex);
+
+ if (rBHelper.bDisposed)
+ throw lang::DisposedException("object is already disposed",
+ static_cast<XClipboardEx*>(this));
+
+ // actually it should be ClearableMutexGuard aGuard( m_ClipContentMutex );
+ // but it does not work since FlushClipboard does a callback and frees DataObject
+ // which results in a deadlock in onReleaseDataObject.
+ // FlushClipboard had to be synchron in order to prevent shutdown until all
+ // clipboard-formats are rendered.
+ // The request is needed to prevent flushing if we are not clipboard owner (it is
+ // not known what happens if we flush but aren't clipboard owner).
+ // It may be possible to move the request to the clipboard STA thread by saving the
+ // DataObject and call OleIsCurrentClipboard before flushing.
+
+ if (nullptr != m_pCurrentClipContent)
+ m_MtaOleClipboard.flushClipboard();
+}
+
+// XClipboardEx
+
+sal_Int8 SAL_CALL CWinClipboard::getRenderingCapabilities()
+{
+ if (rBHelper.bDisposed)
+ throw lang::DisposedException("object is already disposed",
+ static_cast<XClipboardEx*>(this));
+
+ using namespace datatransfer::clipboard::RenderingCapabilities;
+ return (Delayed | Persistant);
+}
+
+// XClipboardNotifier
+
+void SAL_CALL CWinClipboard::addClipboardListener(
+ const uno::Reference<datatransfer::clipboard::XClipboardListener>& listener)
+{
+ if (rBHelper.bDisposed)
+ throw lang::DisposedException("object is already disposed",
+ static_cast<XClipboardEx*>(this));
+
+ // check input parameter
+ if (!listener.is())
+ throw lang::IllegalArgumentException("empty reference", static_cast<XClipboardEx*>(this),
+ 1);
+
+ rBHelper.aLC.addInterface(cppu::UnoType<decltype(listener)>::get(), listener);
+}
+
+void SAL_CALL CWinClipboard::removeClipboardListener(
+ const uno::Reference<datatransfer::clipboard::XClipboardListener>& listener)
+{
+ if (rBHelper.bDisposed)
+ throw lang::DisposedException("object is already disposed",
+ static_cast<XClipboardEx*>(this));
+
+ // check input parameter
+ if (!listener.is())
+ throw lang::IllegalArgumentException("empty reference", static_cast<XClipboardEx*>(this),
+ 1);
+
+ rBHelper.aLC.removeInterface(cppu::UnoType<decltype(listener)>::get(), listener);
+}
+
+void CWinClipboard::notifyAllClipboardListener()
+{
+ if (rBHelper.bDisposed)
+ return;
+
+ osl::ClearableMutexGuard aGuard(rBHelper.rMutex);
+ if (rBHelper.bDisposed)
+ return;
+ aGuard.clear();
+
+ cppu::OInterfaceContainerHelper* pICHelper = rBHelper.aLC.getContainer(
+ cppu::UnoType<datatransfer::clipboard::XClipboardListener>::get());
+ if (!pICHelper)
+ return;
+
+ try
+ {
+ cppu::OInterfaceIteratorHelper iter(*pICHelper);
+ uno::Reference<datatransfer::XTransferable> rXTransf(getContents());
+ datatransfer::clipboard::ClipboardEvent aClipbEvent(static_cast<XClipboard*>(this),
+ rXTransf);
+
+ while (iter.hasMoreElements())
+ {
+ try
+ {
+ uno::Reference<datatransfer::clipboard::XClipboardListener> xCBListener(
+ iter.next(), uno::UNO_QUERY);
+ if (xCBListener.is())
+ xCBListener->changedContents(aClipbEvent);
+ }
+ catch (uno::RuntimeException&)
+ {
+ OSL_FAIL("RuntimeException caught");
+ }
+ }
+ }
+ catch (const lang::DisposedException&)
+ {
+ OSL_FAIL("Service Manager disposed");
+
+ // no further clipboard changed notifications
+ unregisterClipboardViewer();
+ }
+}
+
+// XServiceInfo
+
+OUString SAL_CALL CWinClipboard::getImplementationName()
+{
+ return "com.sun.star.datatransfer.clipboard.ClipboardW32";
+}
+
+sal_Bool SAL_CALL CWinClipboard::supportsService(const OUString& ServiceName)
+{
+ return cppu::supportsService(this, ServiceName);
+}
+
+uno::Sequence<OUString> SAL_CALL CWinClipboard::getSupportedServiceNames()
+{
+ return { "com.sun.star.datatransfer.clipboard.SystemClipboard" };
+}
+
+extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
+dtrans_CWinClipboard_get_implementation(css::uno::XComponentContext* context,
+ css::uno::Sequence<css::uno::Any> const&)
+{
+ static rtl::Reference<CWinClipboard> g_Instance(new CWinClipboard(context, ""));
+ g_Instance->acquire();
+ return static_cast<cppu::OWeakObject*>(g_Instance.get());
+}
+
+void CWinClipboard::onReleaseDataObject(CXNotifyingDataObject* theCaller)
+{
+ OSL_ASSERT(nullptr != theCaller);
+
+ if (theCaller)
+ theCaller->lostOwnership();
+
+ // if the current caller is the one we currently hold, then set it to NULL
+ // because an external source must be the clipboardowner now
+ osl::MutexGuard aGuard(m_ClipContentMutex);
+
+ if (m_pCurrentClipContent == theCaller)
+ m_pCurrentClipContent = nullptr;
+}
+
+void CWinClipboard::registerClipboardViewer()
+{
+ m_MtaOleClipboard.registerClipViewer(CWinClipboard::onClipboardContentChanged);
+}
+
+void CWinClipboard::unregisterClipboardViewer() { m_MtaOleClipboard.registerClipViewer(nullptr); }
+
+void WINAPI CWinClipboard::onClipboardContentChanged()
+{
+ osl::MutexGuard aGuard(s_aMutex);
+
+ // reassociation to instance through static member
+ if (nullptr != s_pCWinClipbImpl)
+ {
+ s_pCWinClipbImpl->m_foreignContent.clear();
+ s_pCWinClipbImpl->notifyAllClipboardListener();
+ }
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/dtrans/source/win32/clipb/WinClipboard.hxx b/vcl/win/dtrans/WinClipboard.hxx
index db3f1ab188ed..56a1da34226a 100644
--- a/dtrans/source/win32/clipb/WinClipboard.hxx
+++ b/vcl/win/dtrans/WinClipboard.hxx
@@ -33,11 +33,10 @@
#include <com/sun/star/lang/XServiceInfo.hpp>
#include <com/sun/star/uno/XComponentContext.hpp>
#include <osl/conditn.hxx>
+#include <systools/win32/comtools.hxx>
-#include <memory>
-
-// forward
-class CWinClipbImpl;
+#include "MtaOleClipb.hxx"
+#include "XNotifyingDataObject.hxx"
// implements the XClipboard[Ex] ... interfaces
// for the clipboard viewer mechanism we need a static callback function
@@ -54,68 +53,69 @@ class CWinClipbImpl;
class CWinClipboardDummy
{
protected:
- osl::Mutex m_aMutex;
- osl::Mutex m_aCbListenerMutex;
+ osl::Mutex m_aMutex;
+ osl::Mutex m_aCbListenerMutex;
};
-class CWinClipboard :
- public CWinClipboardDummy,
- public cppu::WeakComponentImplHelper<
- css::datatransfer::clipboard::XSystemClipboard,
- css::datatransfer::clipboard::XFlushableClipboard,
- css::lang::XServiceInfo >
+class CWinClipboard final
+ : public CWinClipboardDummy,
+ public cppu::WeakComponentImplHelper<css::datatransfer::clipboard::XSystemClipboard,
+ css::datatransfer::clipboard::XFlushableClipboard,
+ css::lang::XServiceInfo>
{
-public:
- CWinClipboard( const css::uno::Reference< css::uno::XComponentContext >& rxContext,
- const OUString& aClipboardName );
+ friend STDMETHODIMP_(ULONG) CXNotifyingDataObject::Release();
- // XClipboard
+ css::uno::Reference<css::uno::XComponentContext> m_xContext;
+ const OUString m_itsName;
+ CMtaOleClipboard m_MtaOleClipboard;
+ CXNotifyingDataObject* m_pCurrentClipContent;
+ com::sun::star::uno::Reference<com::sun::star::datatransfer::XTransferable> m_foreignContent;
+ osl::Mutex m_ClipContentMutex;
- virtual css::uno::Reference< css::datatransfer::XTransferable > SAL_CALL getContents( ) override;
+ static osl::Mutex s_aMutex;
+ static CWinClipboard* s_pCWinClipbImpl;
- virtual void SAL_CALL setContents(
- const css::uno::Reference< css::datatransfer::XTransferable >& xTransferable,
- const css::uno::Reference< css::datatransfer::clipboard::XClipboardOwner >& xClipboardOwner ) override;
+ void notifyAllClipboardListener();
+ void onReleaseDataObject(CXNotifyingDataObject* theCaller);
- virtual OUString SAL_CALL getName( ) override;
+ void registerClipboardViewer();
+ void unregisterClipboardViewer();
- // XFlushableClipboard
+ static void WINAPI onClipboardContentChanged();
- virtual void SAL_CALL flushClipboard( ) override;
+public:
+ CWinClipboard(const css::uno::Reference<css::uno::XComponentContext>& rxContext,
+ const OUString& aClipboardName);
+ virtual ~CWinClipboard() override;
- // XClipboardEx
+ // XClipboard
+ virtual css::uno::Reference<css::datatransfer::XTransferable> SAL_CALL getContents() override;
+ virtual void SAL_CALL setContents(
+ const css::uno::Reference<css::datatransfer::XTransferable>& xTransferable,
+ const css::uno::Reference<css::datatransfer::clipboard::XClipboardOwner>& xClipboardOwner)
+ override;
+ virtual OUString SAL_CALL getName() override;
- virtual sal_Int8 SAL_CALL getRenderingCapabilities( ) override;
+ // XFlushableClipboard
+ virtual void SAL_CALL flushClipboard() override;
- // XClipboardNotifier
+ // XClipboardEx
+ virtual sal_Int8 SAL_CALL getRenderingCapabilities() override;
+ // XClipboardNotifier
virtual void SAL_CALL addClipboardListener(
- const css::uno::Reference< css::datatransfer::clipboard::XClipboardListener >& listener ) override;
-
+ const css::uno::Reference<css::datatransfer::clipboard::XClipboardListener>& listener)
+ override;
virtual void SAL_CALL removeClipboardListener(
- const css::uno::Reference< css::datatransfer::clipboard::XClipboardListener >& listener ) override;
-
- // overwrite base class method, which is called
- // by base class dispose function
-
- virtual void SAL_CALL disposing() override;
+ const css::uno::Reference<css::datatransfer::clipboard::XClipboardListener>& listener)
+ override;
// XServiceInfo
+ virtual OUString SAL_CALL getImplementationName() override;
+ virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
+ virtual css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
- virtual OUString SAL_CALL getImplementationName( ) override;
-
- virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
-
- virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( ) override;
-
-private:
- void notifyAllClipboardListener( );
-
-private:
- std::unique_ptr< CWinClipbImpl > m_pImpl;
- css::uno::Reference< css::uno::XComponentContext > m_xContext;
-
- friend class CWinClipbImpl;
+ IDataObjectPtr getIDataObject();
};
#endif
diff --git a/dtrans/source/win32/dtobj/XNotifyingDataObject.cxx b/vcl/win/dtrans/XNotifyingDataObject.cxx
index 46f563f9497c..a989b47e938d 100644
--- a/dtrans/source/win32/dtobj/XNotifyingDataObject.cxx
+++ b/vcl/win/dtrans/XNotifyingDataObject.cxx
@@ -19,8 +19,7 @@
#include <osl/diagnose.h>
#include "XNotifyingDataObject.hxx"
-#include "../clipb/WinClipbImpl.hxx"
-#include "../clipb/WinClipboard.hxx"
+#include "WinClipboard.hxx"
using namespace com::sun::star::datatransfer;
using namespace com::sun::star::datatransfer::clipboard;
@@ -31,12 +30,12 @@ CXNotifyingDataObject::CXNotifyingDataObject(
const IDataObjectPtr& aIDataObject,
const Reference< XTransferable >& aXTransferable,
const Reference< XClipboardOwner >& aXClipOwner,
- CWinClipbImpl* theWinClipImpl ) :
+ CWinClipboard* const theWinClipoard) :
m_nRefCnt( 0 ),
m_aIDataObject( aIDataObject ),
m_XTransferable( aXTransferable ),
m_XClipboardOwner( aXClipOwner ),
- m_pWinClipImpl( theWinClipImpl )
+ m_pWinClipImpl( theWinClipoard )
{
}
@@ -138,7 +137,7 @@ void CXNotifyingDataObject::lostOwnership( )
{
if (m_XClipboardOwner.is())
m_XClipboardOwner->lostOwnership(
- static_cast<XClipboardEx*>(m_pWinClipImpl->m_pWinClipboard ), m_XTransferable);
+ static_cast<XClipboardEx*>(m_pWinClipImpl), m_XTransferable);
}
catch(RuntimeException&)
{
diff --git a/dtrans/source/win32/dtobj/XNotifyingDataObject.hxx b/vcl/win/dtrans/XNotifyingDataObject.hxx
index 0d72c760f4c2..a89cb0f5e54e 100644
--- a/dtrans/source/win32/dtobj/XNotifyingDataObject.hxx
+++ b/vcl/win/dtrans/XNotifyingDataObject.hxx
@@ -37,16 +37,16 @@
----------------------------------------------------------------------------*/
// forward
-class CWinClipbImpl;
+class CWinClipboard;
-class CXNotifyingDataObject : public IDataObject
+class CXNotifyingDataObject final : public IDataObject
{
public:
CXNotifyingDataObject(
const IDataObjectPtr& aIDataObject,
const css::uno::Reference< css::datatransfer::XTransferable >& aXTransferable,
const css::uno::Reference< css::datatransfer::clipboard::XClipboardOwner >& aXClipOwner,
- CWinClipbImpl* theWinClipImpl );
+ CWinClipboard* const theWinClipoard);
virtual ~CXNotifyingDataObject() {}
@@ -73,14 +73,13 @@ public:
private:
void lostOwnership( );
-private:
sal_Int32 m_nRefCnt;
IDataObjectPtr m_aIDataObject;
const css::uno::Reference< css::datatransfer::XTransferable > m_XTransferable;
const css::uno::Reference< css::datatransfer::clipboard::XClipboardOwner > m_XClipboardOwner;
- CWinClipbImpl* m_pWinClipImpl;
+ CWinClipboard* const m_pWinClipImpl;
- friend class CWinClipbImpl;
+ friend class CWinClipboard;
};
#endif
diff --git a/dtrans/source/win32/dtobj/XTDataObject.cxx b/vcl/win/dtrans/XTDataObject.cxx
index 6df5c9d384c1..b829d2cdf3c1 100644
--- a/dtrans/source/win32/dtobj/XTDataObject.cxx
+++ b/vcl/win/dtrans/XTDataObject.cxx
@@ -22,7 +22,7 @@
#include "XTDataObject.hxx"
#include <com/sun/star/datatransfer/DataFlavor.hpp>
-#include "../misc/ImplHelper.hxx"
+#include "ImplHelper.hxx"
#include "DTransHelper.hxx"
#include "TxtCnvtHlp.hxx"
#include <com/sun/star/datatransfer/UnsupportedFlavorException.hpp>
@@ -635,10 +635,10 @@ DataFlavor CXTDataObject::formatEtcToDataFlavor( const FORMATETC& aFormatEtc ) c
DataFlavor aFlavor;
if ( m_FormatRegistrar.hasSynthesizedLocale( ) )
- aFlavor =
- m_DataFormatTranslator.getDataFlavorFromFormatEtc( aFormatEtc, CFormatRegistrar::getSynthesizedLocale( ) );
+ aFlavor = m_DataFormatTranslator.getDataFlavorFromFormatEtc(
+ aFormatEtc.cfFormat, CFormatRegistrar::getSynthesizedLocale());
else
- aFlavor = m_DataFormatTranslator.getDataFlavorFromFormatEtc( aFormatEtc );
+ aFlavor = m_DataFormatTranslator.getDataFlavorFromFormatEtc(aFormatEtc.cfFormat);
if ( !aFlavor.MimeType.getLength( ) )
throw UnsupportedFlavorException( );
diff --git a/dtrans/source/win32/dtobj/XTDataObject.hxx b/vcl/win/dtrans/XTDataObject.hxx
index ca30bbea2434..ca30bbea2434 100644
--- a/dtrans/source/win32/dtobj/XTDataObject.hxx
+++ b/vcl/win/dtrans/XTDataObject.hxx
diff --git a/dtrans/source/generic/clipboardmanager.cxx b/vcl/win/dtrans/clipboardmanager.cxx
index 0c5dd396fec9..8cea07171f78 100644
--- a/dtrans/source/generic/clipboardmanager.cxx
+++ b/vcl/win/dtrans/clipboardmanager.cxx
@@ -22,8 +22,10 @@
#include <com/sun/star/container/NoSuchElementException.hpp>
#include <com/sun/star/lang/DisposedException.hpp>
#include <com/sun/star/lang/IllegalArgumentException.hpp>
+#include <com/sun/star/uno/XComponentContext.hpp>
#include <cppuhelper/supportsservice.hxx>
#include <comphelper/sequence.hxx>
+#include <rtl/ref.hxx>
using namespace com::sun::star::container;
using namespace com::sun::star::datatransfer;
@@ -36,6 +38,11 @@ using namespace std;
using ::dtrans::ClipboardManager;
+static osl::Mutex g_InstanceGuard;
+static rtl::Reference<ClipboardManager> g_Instance;
+static bool g_Disposed = false;
+
+
ClipboardManager::ClipboardManager():
WeakComponentImplHelper< XClipboardManager, XEventListener, XServiceInfo > (m_aMutex),
m_aDefaultName(OUString("default"))
@@ -48,7 +55,7 @@ ClipboardManager::~ClipboardManager()
OUString SAL_CALL ClipboardManager::getImplementationName( )
{
- return CLIPBOARDMANAGER_IMPLEMENTATION_NAME;
+ return "com.sun.star.comp.datatransfer.ClipboardManager";
}
sal_Bool SAL_CALL ClipboardManager::supportsService( const OUString& ServiceName )
@@ -58,7 +65,7 @@ sal_Bool SAL_CALL ClipboardManager::supportsService( const OUString& ServiceName
Sequence< OUString > SAL_CALL ClipboardManager::getSupportedServiceNames( )
{
- return ClipboardManager_getSupportedServiceNames();
+ return { "com.sun.star.datatransfer.clipboard.ClipboardManager" };
}
Reference< XClipboard > SAL_CALL ClipboardManager::getClipboard( const OUString& aName )
@@ -139,43 +146,50 @@ Sequence< OUString > SAL_CALL ClipboardManager::listClipboardNames()
void SAL_CALL ClipboardManager::dispose()
{
- ClearableMutexGuard aGuard( rBHelper.rMutex );
- if (!rBHelper.bDisposed && !rBHelper.bInDispose)
{
- rBHelper.bInDispose = true;
- aGuard.clear();
-
- // give everyone a chance to save his clipboard instance
- EventObject aEvt(static_cast < XClipboardManager * > (this));
- rBHelper.aLC.disposeAndClear( aEvt );
-
- // removeClipboard is still allowed here, so make a copy of the
- // list (to ensure integrity) and clear the original.
- ClearableMutexGuard aGuard2( rBHelper.rMutex );
- ClipboardMap aCopy(m_aClipboardMap);
- m_aClipboardMap.clear();
- aGuard2.clear();
-
- // dispose all clipboards still in list
- for (auto const& elem : aCopy)
+ osl::MutexGuard aGuard(g_InstanceGuard);
+ g_Instance.clear();
+ g_Disposed = true;
+ }
+ {
+ ClearableMutexGuard aGuard( rBHelper.rMutex );
+ if (!rBHelper.bDisposed && !rBHelper.bInDispose)
{
- Reference< XComponent > xComponent(elem.second, UNO_QUERY);
- if (xComponent.is())
+ rBHelper.bInDispose = true;
+ aGuard.clear();
+
+ // give everyone a chance to save his clipboard instance
+ EventObject aEvt(static_cast < XClipboardManager * > (this));
+ rBHelper.aLC.disposeAndClear( aEvt );
+
+ // removeClipboard is still allowed here, so make a copy of the
+ // list (to ensure integrity) and clear the original.
+ ClearableMutexGuard aGuard2( rBHelper.rMutex );
+ ClipboardMap aCopy(m_aClipboardMap);
+ m_aClipboardMap.clear();
+ aGuard2.clear();
+
+ // dispose all clipboards still in list
+ for (auto const& elem : aCopy)
{
- try
- {
- xComponent->removeEventListener(static_cast < XEventListener * > (this));
- xComponent->dispose();
- }
- catch (const Exception&)
+ Reference< XComponent > xComponent(elem.second, UNO_QUERY);
+ if (xComponent.is())
{
- // exceptions can be safely ignored here.
+ try
+ {
+ xComponent->removeEventListener(static_cast < XEventListener * > (this));
+ xComponent->dispose();
+ }
+ catch (const Exception&)
+ {
+ // exceptions can be safely ignored here.
+ }
}
}
- }
- rBHelper.bDisposed = true;
- rBHelper.bInDispose = false;
+ rBHelper.bDisposed = true;
+ rBHelper.bInDispose = false;
+ }
}
}
@@ -187,16 +201,17 @@ void SAL_CALL ClipboardManager::disposing( const EventObject& event )
removeClipboard(xClipboard->getName());
}
-Reference< XInterface > ClipboardManager_createInstance(
- const Reference< XMultiServiceFactory > & /*xMultiServiceFactory*/)
-{
- return Reference < XInterface >(static_cast<OWeakObject *>(new ClipboardManager()));
-}
-
-Sequence< OUString > ClipboardManager_getSupportedServiceNames()
+extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
+dtrans_ClipboardManager_get_implementation(
+ css::uno::XComponentContext* , css::uno::Sequence<css::uno::Any> const&)
{
- Sequence < OUString > SupportedServicesNames { "com.sun.star.datatransfer.clipboard.ClipboardManager" };
- return SupportedServicesNames;
+ osl::MutexGuard aGuard(g_InstanceGuard);
+ if (g_Disposed)
+ return nullptr;
+ if (!g_Instance)
+ g_Instance.set(new ClipboardManager());
+ g_Instance->acquire();
+ return static_cast<cppu::OWeakObject*>(g_Instance.get());
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/dtrans/source/generic/clipboardmanager.hxx b/vcl/win/dtrans/clipboardmanager.hxx
index e3217f6bf6bb..2750b61246cb 100644
--- a/dtrans/source/generic/clipboardmanager.hxx
+++ b/vcl/win/dtrans/clipboardmanager.hxx
@@ -28,8 +28,6 @@
#include <map>
-#define CLIPBOARDMANAGER_IMPLEMENTATION_NAME "com.sun.star.comp.datatransfer.ClipboardManager"
-
typedef std::map< OUString, css::uno::Reference< css::datatransfer::clipboard::XClipboard > > ClipboardMap;
namespace dtrans
@@ -90,10 +88,6 @@ namespace dtrans
}
-css::uno::Sequence< OUString > ClipboardManager_getSupportedServiceNames();
-css::uno::Reference< css::uno::XInterface > ClipboardManager_createInstance(
- const css::uno::Reference< css::lang::XMultiServiceFactory > & xMultiServiceFactory);
-
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/dtrans/source/win32/ftransl/ftransl.cxx b/vcl/win/dtrans/ftransl.cxx
index 4cc1897059a3..e2a6581abfec 100644
--- a/dtrans/source/win32/ftransl/ftransl.cxx
+++ b/vcl/win/dtrans/ftransl.cxx
@@ -26,16 +26,13 @@
#include <com/sun/star/lang/IllegalArgumentException.hpp>
#include <com/sun/star/uno/XComponentContext.hpp>
#include <cppuhelper/supportsservice.hxx>
-#include "../misc/ImplHelper.hxx"
+#include <rtl/ref.hxx>
+#include "ImplHelper.hxx"
#include <shlobj.h>
-#define IMPL_NAME "com.sun.star.datatransfer.DataFormatTranslator"
-
#define CPPUTYPE_SEQSALINT8 cppu::UnoType<Sequence< sal_Int8 >>::get()
#define CPPUTYPE_DEFAULT CPPUTYPE_SEQSALINT8
-#define CPPUTYPE_OUSTR cppu::UnoType<OUString>::get()
-#define CPPUTYPE_SALINT32 cppu::UnoType<sal_Int32>::get()
const OUString Windows_FormatName ("windows_formatname");
const css::uno::Type CppuType_ByteSequence = cppu::UnoType<css::uno::Sequence<sal_Int8>>::get();
@@ -51,12 +48,6 @@ using namespace com::sun::star::container;
namespace
{
- Sequence< OUString > DataFormatTranslator_getSupportedServiceNames( )
- {
- Sequence< OUString > aRet { "com.sun.star.datatransfer.DataFormatTranslator" };
- return aRet;
- }
-}
struct FormatEntry
{
@@ -73,6 +64,8 @@ struct FormatEntry
sal_Int32 aStandardFormatId;
};
+}
+
FormatEntry::FormatEntry(
const char *mime_content_type,
const char *human_presentable_name,
@@ -506,14 +499,14 @@ DataFlavor SAL_CALL CDataFormatTranslatorUNO::getDataFlavorFromSystemDataType( c
DataFlavor aFlavor = mkDataFlv( OUString(), OUString(), CPPUTYPE_SEQSALINT8 );
- if ( aSysDataType.getValueType( ) == CPPUTYPE_SALINT32 )
+ if ( aSysDataType.getValueType( ) == cppu::UnoType<sal_Int32>::get() )
{
sal_Int32 clipformat = CF_INVALID;
aSysDataType >>= clipformat;
if ( CF_INVALID != clipformat )
findDataFlavorForStandardFormatId( clipformat, aFlavor );
}
- else if ( aSysDataType.getValueType( ) == CPPUTYPE_OUSTR )
+ else if ( aSysDataType.getValueType( ) == cppu::UnoType<OUString>::get() )
{
OUString nativeFormatName;
aSysDataType >>= nativeFormatName;
@@ -530,7 +523,7 @@ DataFlavor SAL_CALL CDataFormatTranslatorUNO::getDataFlavorFromSystemDataType( c
OUString SAL_CALL CDataFormatTranslatorUNO::getImplementationName( )
{
- return IMPL_NAME;
+ return "com.sun.star.datatransfer.DataFormatTranslator";
}
sal_Bool SAL_CALL CDataFormatTranslatorUNO::supportsService( const OUString& ServiceName )
@@ -540,7 +533,15 @@ sal_Bool SAL_CALL CDataFormatTranslatorUNO::supportsService( const OUString& Ser
Sequence< OUString > SAL_CALL CDataFormatTranslatorUNO::getSupportedServiceNames( )
{
- return DataFormatTranslator_getSupportedServiceNames( );
+ return { "com.sun.star.datatransfer.DataFormatTranslator" };
}
+extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
+dtrans_CDataFormatTranslatorUNO_get_implementation(
+ css::uno::XComponentContext* context, css::uno::Sequence<css::uno::Any> const&)
+{
+ static rtl::Reference<CDataFormatTranslatorUNO> g_Instance(new CDataFormatTranslatorUNO(context));
+ g_Instance->acquire();
+ return static_cast<cppu::OWeakObject*>(g_Instance.get());
+}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/dtrans/source/win32/ftransl/ftransl.hxx b/vcl/win/dtrans/ftransl.hxx
index 71d8038d2b23..c93cd8096d5d 100644
--- a/dtrans/source/win32/ftransl/ftransl.hxx
+++ b/vcl/win/dtrans/ftransl.hxx
@@ -27,7 +27,7 @@
#include <com/sun/star/datatransfer/XDataFormatTranslator.hpp>
#include <com/sun/star/datatransfer/XMimeContentTypeFactory.hpp>
#include <com/sun/star/uno/XComponentContext.hpp>
-#include <WinClip.hxx>
+#include "WinClip.hxx"
#include <vector>
diff --git a/dtrans/source/generic/generic_clipboard.cxx b/vcl/win/dtrans/generic_clipboard.cxx
index 4fa49b3d5ebe..dfc5759750f9 100644
--- a/dtrans/source/generic/generic_clipboard.cxx
+++ b/vcl/win/dtrans/generic_clipboard.cxx
@@ -20,6 +20,7 @@
#include "generic_clipboard.hxx"
#include <com/sun/star/lang/DisposedException.hpp>
#include <com/sun/star/datatransfer/clipboard/RenderingCapabilities.hpp>
+#include <com/sun/star/uno/XComponentContext.hpp>
#include <cppuhelper/supportsservice.hxx>
using namespace com::sun::star::datatransfer;
@@ -56,7 +57,7 @@ void SAL_CALL GenericClipboard::initialize( const Sequence< Any >& aArguments )
OUString SAL_CALL GenericClipboard::getImplementationName( )
{
- return GENERIC_CLIPBOARD_IMPLEMENTATION_NAME;
+ return "com.sun.star.comp.datatransfer.clipboard.GenericClipboard";
}
sal_Bool SAL_CALL GenericClipboard::supportsService( const OUString& ServiceName )
@@ -66,7 +67,7 @@ sal_Bool SAL_CALL GenericClipboard::supportsService( const OUString& ServiceName
Sequence< OUString > SAL_CALL GenericClipboard::getSupportedServiceNames( )
{
- return GenericClipboard_getSupportedServiceNames();
+ return { "com.sun.star.datatransfer.clipboard.GenericClipboard" };
}
Reference< XTransferable > SAL_CALL GenericClipboard::getContents()
@@ -137,16 +138,11 @@ void SAL_CALL GenericClipboard::removeClipboardListener( const Reference< XClipb
rBHelper.aLC.removeInterface( cppu::UnoType<XClipboardListener>::get(), listener );
}
-Sequence< OUString > GenericClipboard_getSupportedServiceNames()
+extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
+dtrans_GenericClipboard_get_implementation(
+ css::uno::XComponentContext* , css::uno::Sequence<css::uno::Any> const&)
{
- Sequence< OUString > aRet { "com.sun.star.datatransfer.clipboard.GenericClipboard" };
- return aRet;
-}
-
-Reference< XInterface > GenericClipboard_createInstance(
- const Reference< XMultiServiceFactory > & /*xMultiServiceFactory*/)
-{
- return Reference < XInterface >(static_cast<OWeakObject *>(new GenericClipboard()));
+ return cppu::acquire(static_cast<cppu::OWeakObject*>(new GenericClipboard()));
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/dtrans/source/generic/generic_clipboard.hxx b/vcl/win/dtrans/generic_clipboard.hxx
index 2b31d063229c..f23a0cc9a120 100644
--- a/dtrans/source/generic/generic_clipboard.hxx
+++ b/vcl/win/dtrans/generic_clipboard.hxx
@@ -29,8 +29,6 @@
#include <com/sun/star/lang/XServiceInfo.hpp>
#include <com/sun/star/lang/XInitialization.hpp>
-#define GENERIC_CLIPBOARD_IMPLEMENTATION_NAME "com.sun.star.comp.datatransfer.clipboard.GenericClipboard"
-
namespace dtrans
{
@@ -101,10 +99,6 @@ namespace dtrans
}
-css::uno::Sequence< OUString > GenericClipboard_getSupportedServiceNames();
-css::uno::Reference< css::uno::XInterface > GenericClipboard_createInstance(
- const css::uno::Reference< css::lang::XMultiServiceFactory > & xMultiServiceFactory);
-
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/dtrans/source/win32/dnd/globals.cxx b/vcl/win/dtrans/globals.cxx
index fcddef22e6c1..fcddef22e6c1 100644
--- a/dtrans/source/win32/dnd/globals.cxx
+++ b/vcl/win/dtrans/globals.cxx
diff --git a/dtrans/source/win32/dnd/globals.hxx b/vcl/win/dtrans/globals.hxx
index 373270358d5c..057f449395c6 100644
--- a/dtrans/source/win32/dnd/globals.hxx
+++ b/vcl/win/dtrans/globals.hxx
@@ -31,12 +31,6 @@ namespace com { namespace sun { namespace star { namespace datatransfer {
#include <wtypes.h>
#include <sal/types.h>
-#define DNDSOURCE_SERVICE_NAME "com.sun.star.datatransfer.dnd.OleDragSource"
-#define DNDSOURCE_IMPL_NAME "com.sun.star.comp.datatransfer.dnd.OleDragSource_V1"
-
-#define DNDTARGET_SERVICE_NAME "com.sun.star.datatransfer.dnd.OleDropTarget"
-#define DNDTARGET_IMPL_NAME "com.sun.star.comp.datatransfer.dnd.OleDropTarget_V1"
-
// This maps key states as occur as parameter, e.g. in IDropTarget::DragEnter,
// IDropSource::QueryContinueDrag, to actions as are declared in
// css::datatransfer::dnd::DNDConstants ( ACTION_MOVE etc).
diff --git a/dtrans/source/win32/dnd/idroptarget.cxx b/vcl/win/dtrans/idroptarget.cxx
index 8b403eb7a35f..8b403eb7a35f 100644
--- a/dtrans/source/win32/dnd/idroptarget.cxx
+++ b/vcl/win/dtrans/idroptarget.cxx
diff --git a/dtrans/source/win32/dnd/idroptarget.hxx b/vcl/win/dtrans/idroptarget.hxx
index a86739f87cdd..a86739f87cdd 100644
--- a/dtrans/source/win32/dnd/idroptarget.hxx
+++ b/vcl/win/dtrans/idroptarget.hxx
diff --git a/dtrans/source/win32/dnd/source.cxx b/vcl/win/dtrans/source.cxx
index c797684d233c..93d94e94e4c7 100644
--- a/dtrans/source/win32/dnd/source.cxx
+++ b/vcl/win/dtrans/source.cxx
@@ -30,7 +30,8 @@
#include "source.hxx"
#include "globals.hxx"
#include "sourcecontext.hxx"
-#include "../../inc/DtObjFactory.hxx"
+#include "DtObjFactory.hxx"
+
#include <rtl/ustring.h>
#include <osl/thread.h>
#include <winuser.h>
@@ -278,7 +279,7 @@ dwEffect
// XServiceInfo
OUString SAL_CALL DragSource::getImplementationName( )
{
- return DNDSOURCE_IMPL_NAME;
+ return "com.sun.star.comp.datatransfer.dnd.OleDragSource_V1";
}
// XServiceInfo
sal_Bool SAL_CALL DragSource::supportsService( const OUString& ServiceName )
@@ -288,7 +289,14 @@ sal_Bool SAL_CALL DragSource::supportsService( const OUString& ServiceName )
Sequence< OUString > SAL_CALL DragSource::getSupportedServiceNames( )
{
- return { DNDSOURCE_SERVICE_NAME };
+ return { "com.sun.star.datatransfer.dnd.OleDragSource" };
+}
+
+extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
+dtrans_DragSource_get_implementation(
+ css::uno::XComponentContext* context, css::uno::Sequence<css::uno::Any> const&)
+{
+ return cppu::acquire(static_cast<cppu::OWeakObject*>(new DragSource(context)));
}
/** This function is called as extra thread from
diff --git a/dtrans/source/win32/dnd/source.hxx b/vcl/win/dtrans/source.hxx
index 52d4bab1982f..52d4bab1982f 100644
--- a/dtrans/source/win32/dnd/source.hxx
+++ b/vcl/win/dtrans/source.hxx
diff --git a/dtrans/source/win32/dnd/sourcecontext.cxx b/vcl/win/dtrans/sourcecontext.cxx
index 8531fd8a1184..8531fd8a1184 100644
--- a/dtrans/source/win32/dnd/sourcecontext.cxx
+++ b/vcl/win/dtrans/sourcecontext.cxx
diff --git a/dtrans/source/win32/dnd/sourcecontext.hxx b/vcl/win/dtrans/sourcecontext.hxx
index 81b1682ebff9..81b1682ebff9 100644
--- a/dtrans/source/win32/dnd/sourcecontext.hxx
+++ b/vcl/win/dtrans/sourcecontext.hxx
diff --git a/dtrans/source/win32/dnd/target.cxx b/vcl/win/dtrans/target.cxx
index 7592eb390962..86229f23914c 100644
--- a/dtrans/source/win32/dnd/target.cxx
+++ b/vcl/win/dtrans/target.cxx
@@ -31,7 +31,7 @@
#include <rtl/ustring.h>
#include <osl/thread.h>
-#include "../dtobj/DOTransferable.hxx"
+#include "DOTransferable.hxx"
using namespace cppu;
using namespace osl;
@@ -248,7 +248,7 @@ DWORD WINAPI DndTargetOleSTAFunc(LPVOID pParams)
// XServiceInfo
OUString SAL_CALL DropTarget::getImplementationName( )
{
- return DNDTARGET_IMPL_NAME;
+ return "com.sun.star.comp.datatransfer.dnd.OleDropTarget_V1";
}
// XServiceInfo
sal_Bool SAL_CALL DropTarget::supportsService( const OUString& ServiceName )
@@ -258,7 +258,7 @@ sal_Bool SAL_CALL DropTarget::supportsService( const OUString& ServiceName )
Sequence< OUString > SAL_CALL DropTarget::getSupportedServiceNames( )
{
- return { DNDTARGET_SERVICE_NAME };
+ return { "com.sun.star.datatransfer.dnd.OleDropTarget" };
}
// XDropTarget
@@ -321,8 +321,7 @@ HRESULT DropTarget::DragEnter( IDataObject *pDataObj,
else
{
// Convert the IDataObject to a XTransferable
- m_currentData= CDOTransferable::create(
- m_xContext, IDataObjectPtr(pDataObj));
+ m_currentData = new CDOTransferable(m_xContext, IDataObjectPtr(pDataObj));
}
//<-- TRA
@@ -625,4 +624,11 @@ inline sal_Int8 DropTarget::getFilteredActions( DWORD grfKeyState, DWORD dwEffec
return actions & m_nDefaultActions;
}
+extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
+dtrans_DropTarget_get_implementation(
+ css::uno::XComponentContext* context, css::uno::Sequence<css::uno::Any> const&)
+{
+ return cppu::acquire(static_cast<cppu::OWeakObject*>(new DropTarget(context)));
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/dtrans/source/win32/dnd/target.hxx b/vcl/win/dtrans/target.hxx
index 9becfe484260..9becfe484260 100644
--- a/dtrans/source/win32/dnd/target.hxx
+++ b/vcl/win/dtrans/target.hxx
diff --git a/dtrans/source/win32/dnd/targetdragcontext.cxx b/vcl/win/dtrans/targetdragcontext.cxx
index 4ffd16123d9d..4ffd16123d9d 100644
--- a/dtrans/source/win32/dnd/targetdragcontext.cxx
+++ b/vcl/win/dtrans/targetdragcontext.cxx
diff --git a/dtrans/source/win32/dnd/targetdragcontext.hxx b/vcl/win/dtrans/targetdragcontext.hxx
index a8f48cad193e..a8f48cad193e 100644
--- a/dtrans/source/win32/dnd/targetdragcontext.hxx
+++ b/vcl/win/dtrans/targetdragcontext.hxx
diff --git a/dtrans/source/win32/dnd/targetdropcontext.cxx b/vcl/win/dtrans/targetdropcontext.cxx
index 9719664a9fbb..9719664a9fbb 100644
--- a/dtrans/source/win32/dnd/targetdropcontext.cxx
+++ b/vcl/win/dtrans/targetdropcontext.cxx
diff --git a/dtrans/source/win32/dnd/targetdropcontext.hxx b/vcl/win/dtrans/targetdropcontext.hxx
index b7db849fe4e1..b7db849fe4e1 100644
--- a/dtrans/source/win32/dnd/targetdropcontext.hxx
+++ b/vcl/win/dtrans/targetdropcontext.hxx
diff --git a/vcl/win/gdi/gdiimpl.cxx b/vcl/win/gdi/gdiimpl.cxx
index 95fd346af1a5..2ead5b5ba78c 100644
--- a/vcl/win/gdi/gdiimpl.cxx
+++ b/vcl/win/gdi/gdiimpl.cxx
@@ -2428,7 +2428,7 @@ bool WinSalGraphicsImpl::TryDrawBitmapGDIPlus(const SalTwoRect& rTR, const SalBi
const WinSalBitmap& rSalBitmap = static_cast< const WinSalBitmap& >(rSrcBitmap);
std::shared_ptr< Gdiplus::Bitmap > aARGB(rSalBitmap.ImplGetGdiPlusBitmap());
- if(aARGB.get())
+ if(aARGB)
{
Gdiplus::Graphics aGraphics(mrParent.getHDC());
@@ -2481,7 +2481,7 @@ bool WinSalGraphicsImpl::drawAlphaBitmap(
const WinSalBitmap& rSalAlpha = static_cast< const WinSalBitmap& >(rAlphaBmp);
std::shared_ptr< Gdiplus::Bitmap > aARGB(rSalBitmap.ImplGetGdiPlusBitmap(&rSalAlpha));
- if(aARGB.get())
+ if(aARGB)
{
Gdiplus::Graphics aGraphics(mrParent.getHDC());
@@ -2518,7 +2518,7 @@ bool WinSalGraphicsImpl::drawTransformedBitmap(
const WinSalBitmap* pSalAlpha = static_cast< const WinSalBitmap* >(pAlphaBitmap);
std::shared_ptr< Gdiplus::Bitmap > aARGB(rSalBitmap.ImplGetGdiPlusBitmap(pSalAlpha));
- if(aARGB.get())
+ if(aARGB)
{
const long nSrcWidth(aARGB->GetWidth());
const long nSrcHeight(aARGB->GetHeight());
diff --git a/vcl/win/gdi/salbmp.cxx b/vcl/win/gdi/salbmp.cxx
index 173ea361bbe8..393cdd685b8d 100644
--- a/vcl/win/gdi/salbmp.cxx
+++ b/vcl/win/gdi/salbmp.cxx
@@ -658,7 +658,7 @@ bool WinSalBitmap::Create( const css::uno::Reference< css::rendering::XBitmapCan
css::uno::Reference< css::beans::XFastPropertySet >
xFastPropertySet( rBitmapCanvas, css::uno::UNO_QUERY );
- if( xFastPropertySet.get() ) {
+ if( xFastPropertySet ) {
css::uno::Sequence< css::uno::Any > args;
if( xFastPropertySet->getFastPropertyValue(bMask ? 2 : 1) >>= args ) {
diff --git a/vcl/win/window/salframe.cxx b/vcl/win/window/salframe.cxx
index dd5f8fbb8533..c3f86d5cd1bb 100644
--- a/vcl/win/window/salframe.cxx
+++ b/vcl/win/window/salframe.cxx
@@ -39,6 +39,7 @@
#include <osl/file.hxx>
#include <osl/process.h>
+#include <rtl/bootstrap.hxx>
#include <rtl/string.h>
#include <rtl/ustring.h>
#include <sal/log.hxx>
@@ -1281,10 +1282,22 @@ void WinSalFrame::SetPosSize( long nX, long nY, long nWidth, long nHeight,
nWidth = aWinRect.right - aWinRect.left + 1;
nHeight = aWinRect.bottom - aWinRect.top + 1;
- if ( !(nPosSize & SWP_NOMOVE) && ::GetParent( mhWnd ) )
+ HWND hWndParent = ImplGetParentHwnd(mhWnd);
+ // For dialogs (WS_POPUP && WS_DLGFRAME), we need to find the "real" parent,
+ // in case multiple dialogs are stacked on each other
+ // (we don't want to position the second dialog relative to the first one, but relative to the main window)
+ if ( (GetWindowStyle( mhWnd ) & WS_POPUP) && (GetWindowStyle( mhWnd ) & WS_DLGFRAME) ) // mhWnd is a dialog
+ {
+ while ( hWndParent && (GetWindowStyle( hWndParent ) & WS_POPUP) && (GetWindowStyle( hWndParent ) & WS_DLGFRAME) )
+ {
+ hWndParent = ::ImplGetParentHwnd( hWndParent );
+ }
+ }
+
+ if ( !(nPosSize & SWP_NOMOVE) && hWndParent )
{
RECT aParentRect;
- GetClientRect( ImplGetParentHwnd( mhWnd ), &aParentRect );
+ GetClientRect( hWndParent, &aParentRect );
if( AllSettings::GetLayoutRTL() )
nX = (aParentRect.right - aParentRect.left) - nWidth-1 - nX;
@@ -1295,8 +1308,7 @@ void WinSalFrame::SetPosSize( long nX, long nY, long nWidth, long nHeight,
aPt.x = nX;
aPt.y = nY;
- HWND parentHwnd = ImplGetParentHwnd( mhWnd );
- WinSalFrame* pParentFrame = GetWindowPtr( parentHwnd );
+ WinSalFrame* pParentFrame = GetWindowPtr( hWndParent );
if ( pParentFrame && pParentFrame->mnShowState == SW_SHOWMAXIMIZED )
{
// #i42485#: parent will be shown maximized in which case
@@ -1306,7 +1318,7 @@ void WinSalFrame::SetPosSize( long nX, long nY, long nWidth, long nHeight,
aPt.y += pParentFrame->maGeometry.nY;
}
else
- ClientToScreen( parentHwnd, &aPt );
+ ClientToScreen( hWndParent, &aPt );
nX = aPt.x;
nY = aPt.y;
@@ -1932,33 +1944,42 @@ void WinSalFrame::SetAlwaysOnTop( bool bOnTop )
static bool EnableAttachThreadInputHack()
{
- OUString aBootstrapUri;
- if (osl_getProcessWorkingDir(&aBootstrapUri.pData) != osl_Process_E_None)
- return false;
- aBootstrapUri += "/bootstrap.ini";
-
- OUString aSystemFileName;
- if (osl::FileBase::getSystemPathFromFileURL(aBootstrapUri, aSystemFileName) != osl::FileBase::E_None)
- return false;
- if (aSystemFileName.getLength() > MAX_PATH)
- return false;
-
- // this uses the Boost ini parser, instead of tools::Config, as we already use it to read other
- // values from bootstrap.ini in desktop/win32/source/loader.cxx, because that watchdog process
- // can't access LO libs. This way the handling is consistent.
- try
- {
- boost::property_tree::ptree pt;
- std::ifstream aFile(o3tl::toW(aSystemFileName.getStr()));
- boost::property_tree::ini_parser::read_ini(aFile, pt);
- const bool bEnabled = pt.get("Win32.EnableAttachThreadInputHack", false);
- SAL_WARN_IF(bEnabled, "vcl", "AttachThreadInput hack is enabled. Watch out for deadlocks!");
- return bEnabled;
- }
- catch (...)
- {
- return false;
+ OUString s("$EnableAttachThreadInputHack");
+ rtl::Bootstrap::expandMacros(s);
+ bool bEnabled;
+ if (!s.isEmpty()) {
+ bEnabled = s == "true";
+ } else {
+ // For backwards compatibility, for now also try to read the value from a [Win32] section of
+ // bootstrap.ini if it is not set as a boostrap variable:
+ bEnabled = false;
+ OUString aBootstrapUri;
+ if (osl_getProcessWorkingDir(&aBootstrapUri.pData) == osl_Process_E_None) {
+ aBootstrapUri += "/bootstrap.ini";
+
+ OUString aSystemFileName;
+ if (osl::FileBase::getSystemPathFromFileURL(aBootstrapUri, aSystemFileName)
+ == osl::FileBase::E_None
+ && aSystemFileName.getLength() <= MAX_PATH)
+ {
+ // this uses the Boost ini parser, instead of tools::Config, as we already use it to
+ // read other values from bootstrap.ini in desktop/win32/source/loader.cxx, because
+ // that watchdog process can't access LO libs. This way the handling is consistent.
+ try
+ {
+ boost::property_tree::ptree pt;
+ std::ifstream aFile(o3tl::toW(aSystemFileName.getStr()));
+ boost::property_tree::ini_parser::read_ini(aFile, pt);
+ bEnabled = pt.get("Win32.EnableAttachThreadInputHack", false);
+ }
+ catch (...)
+ {
+ }
+ }
+ }
}
+ SAL_WARN_IF(bEnabled, "vcl", "AttachThreadInput hack is enabled. Watch out for deadlocks!");
+ return bEnabled;
}
static void ImplSalToTop( HWND hWnd, SalFrameToTop nFlags )
@@ -2832,6 +2853,14 @@ void WinSalFrame::Beep()
MessageBeep( 0 );
}
+void WinSalFrame::FlashWindow() const
+{
+ if (GetForegroundWindow() != mhWnd)
+ {
+ ::FlashWindow(mhWnd, TRUE);
+ }
+}
+
SalFrame::SalPointerState WinSalFrame::GetPointerState()
{
SalPointerState aState;
@@ -5269,27 +5298,40 @@ static void ImplHandleIMENotify( HWND hWnd, WPARAM wParam )
static bool
ImplHandleGetObject(HWND hWnd, LPARAM lParam, WPARAM wParam, LRESULT & nRet)
{
- // IA2 should be enabled automatically
- AllSettings aSettings = Application::GetSettings();
- MiscSettings aMisc = aSettings.GetMiscSettings();
- aMisc.SetEnableATToolSupport( true );
- aSettings.SetMiscSettings( aMisc );
- Application::SetSettings( aSettings );
+ uno::Reference<accessibility::XMSAAService> xMSAA;
+ if (ImplSalYieldMutexTryToAcquire())
+ {
+ // IA2 should be enabled automatically
+ AllSettings aSettings = Application::GetSettings();
+ MiscSettings aMisc = aSettings.GetMiscSettings();
+ aMisc.SetEnableATToolSupport( true );
+ aSettings.SetMiscSettings( aMisc );
+ Application::SetSettings( aSettings );
- if (!Application::GetSettings().GetMiscSettings().GetEnableATToolSupport())
- return false; // locked down somehow ?
+ if (!Application::GetSettings().GetMiscSettings().GetEnableATToolSupport())
+ return false; // locked down somehow ?
- ImplSVData* pSVData = ImplGetSVData();
+ ImplSVData* pSVData = ImplGetSVData();
- // Make sure to launch Accessibility only the following criteria are satisfied
- // to avoid RFT interrupts regular accessibility processing
- if ( !pSVData->mxAccessBridge.is() )
- {
- if( !InitAccessBridge() )
- return false;
+ // Make sure to launch Accessibility only the following criteria are satisfied
+ // to avoid RFT interrupts regular accessibility processing
+ if ( !pSVData->mxAccessBridge.is() )
+ {
+ if( !InitAccessBridge() )
+ return false;
+ }
+ xMSAA.set(pSVData->mxAccessBridge, uno::UNO_QUERY);
+ ImplSalYieldMutexRelease();
+ }
+ else
+ { // tdf#155794: access without locking: hopefully this should be fine
+ // as the bridge is typically inited in Desktop::Main() already and the
+ // WM_GETOBJECT is received only on the main thread and by the time in
+ // VCL shutdown when ImplSvData dies there should not be Windows any
+ // more that could receive messages.
+ xMSAA.set(ImplGetSVData()->mxAccessBridge, uno::UNO_QUERY);
}
- uno::Reference< accessibility::XMSAAService > xMSAA( pSVData->mxAccessBridge, uno::UNO_QUERY );
if ( xMSAA.is() )
{
sal_Int32 lParam32 = static_cast<sal_Int32>(lParam);
@@ -5820,12 +5862,11 @@ static LRESULT CALLBACK SalFrameWndProc( HWND hWnd, UINT nMsg, WPARAM wParam, LP
break;
case WM_GETOBJECT:
- ImplSalYieldMutexAcquireWithWait();
+ // tdf#155794: this must complete without taking SolarMutex
if ( ImplHandleGetObject( hWnd, lParam, wParam, nRet ) )
{
rDef = false;
}
- ImplSalYieldMutexRelease();
break;
case WM_APPCOMMAND:
diff --git a/dtrans/source/test/makefile.mk b/vcl/workben/dtrans/makefile.mk
index 588d4685a300..588d4685a300 100644
--- a/dtrans/source/test/makefile.mk
+++ b/vcl/workben/dtrans/makefile.mk
diff --git a/dtrans/source/test/test_dtrans.cxx b/vcl/workben/dtrans/test_dtrans.cxx
index f531f12fd119..f531f12fd119 100644
--- a/dtrans/source/test/test_dtrans.cxx
+++ b/vcl/workben/dtrans/test_dtrans.cxx
diff --git a/dtrans/test/win32/dnd/atlwindow.cxx b/vcl/workben/win/dnd/atlwindow.cxx
index 0d8d5d77646a..0d8d5d77646a 100644
--- a/dtrans/test/win32/dnd/atlwindow.cxx
+++ b/vcl/workben/win/dnd/atlwindow.cxx
diff --git a/dtrans/test/win32/dnd/atlwindow.hxx b/vcl/workben/win/dnd/atlwindow.hxx
index 378407274b56..378407274b56 100644
--- a/dtrans/test/win32/dnd/atlwindow.hxx
+++ b/vcl/workben/win/dnd/atlwindow.hxx
diff --git a/dtrans/test/win32/dnd/dndTest.cxx b/vcl/workben/win/dnd/dndTest.cxx
index b9f1d841e1c5..b9f1d841e1c5 100644
--- a/dtrans/test/win32/dnd/dndTest.cxx
+++ b/vcl/workben/win/dnd/dndTest.cxx
diff --git a/dtrans/test/win32/dnd/makefile.mk b/vcl/workben/win/dnd/makefile.mk
index e0d438418eb1..e0d438418eb1 100644
--- a/dtrans/test/win32/dnd/makefile.mk
+++ b/vcl/workben/win/dnd/makefile.mk
diff --git a/dtrans/test/win32/dnd/sourcelistener.cxx b/vcl/workben/win/dnd/sourcelistener.cxx
index aa3366e79a11..aa3366e79a11 100644
--- a/dtrans/test/win32/dnd/sourcelistener.cxx
+++ b/vcl/workben/win/dnd/sourcelistener.cxx
diff --git a/dtrans/test/win32/dnd/sourcelistener.hxx b/vcl/workben/win/dnd/sourcelistener.hxx
index 686d95c11025..686d95c11025 100644
--- a/dtrans/test/win32/dnd/sourcelistener.hxx
+++ b/vcl/workben/win/dnd/sourcelistener.hxx
diff --git a/dtrans/test/win32/dnd/targetlistener.cxx b/vcl/workben/win/dnd/targetlistener.cxx
index 0a93d394560a..0a93d394560a 100644
--- a/dtrans/test/win32/dnd/targetlistener.cxx
+++ b/vcl/workben/win/dnd/targetlistener.cxx
diff --git a/dtrans/test/win32/dnd/targetlistener.hxx b/vcl/workben/win/dnd/targetlistener.hxx
index 153dc64eead5..153dc64eead5 100644
--- a/dtrans/test/win32/dnd/targetlistener.hxx
+++ b/vcl/workben/win/dnd/targetlistener.hxx
diff --git a/dtrans/test/win32/dnd/transferable.cxx b/vcl/workben/win/dnd/transferable.cxx
index 924c031763b5..924c031763b5 100644
--- a/dtrans/test/win32/dnd/transferable.cxx
+++ b/vcl/workben/win/dnd/transferable.cxx
diff --git a/dtrans/test/win32/dnd/transferable.hxx b/vcl/workben/win/dnd/transferable.hxx
index 1323a2cd5aaa..1323a2cd5aaa 100644
--- a/dtrans/test/win32/dnd/transferable.hxx
+++ b/vcl/workben/win/dnd/transferable.hxx
diff --git a/dtrans/source/win32/workbench/XTDo.cxx b/vcl/workben/win/dtrans/XTDo.cxx
index f8da707d92e3..f8da707d92e3 100644
--- a/dtrans/source/win32/workbench/XTDo.cxx
+++ b/vcl/workben/win/dtrans/XTDo.cxx
diff --git a/dtrans/source/win32/workbench/XTDo.hxx b/vcl/workben/win/dtrans/XTDo.hxx
index 50f8425593e4..50f8425593e4 100644
--- a/dtrans/source/win32/workbench/XTDo.hxx
+++ b/vcl/workben/win/dtrans/XTDo.hxx
diff --git a/dtrans/source/win32/workbench/makefile.mk b/vcl/workben/win/dtrans/makefile.mk
index 3c82289f8ee1..3c82289f8ee1 100644
--- a/dtrans/source/win32/workbench/makefile.mk
+++ b/vcl/workben/win/dtrans/makefile.mk
diff --git a/dtrans/source/win32/workbench/test_wincb.cxx b/vcl/workben/win/dtrans/test_wincb.cxx
index 8a2f25fd4ccc..8a2f25fd4ccc 100644
--- a/dtrans/source/win32/workbench/test_wincb.cxx
+++ b/vcl/workben/win/dtrans/test_wincb.cxx
diff --git a/dtrans/source/win32/workbench/testmarshal.cxx b/vcl/workben/win/dtrans/testmarshal.cxx
index d9edfe753107..d9edfe753107 100644
--- a/dtrans/source/win32/workbench/testmarshal.cxx
+++ b/vcl/workben/win/dtrans/testmarshal.cxx
diff --git a/winaccessibility/inc/AccEventListener.hxx b/winaccessibility/inc/AccEventListener.hxx
index 9c5515529440..095f1cad1598 100644
--- a/winaccessibility/inc/AccEventListener.hxx
+++ b/winaccessibility/inc/AccEventListener.hxx
@@ -75,7 +75,7 @@ public:
//get the accessible parent's role
virtual short GetParentRole();
- void RemoveMeFromBroadcaster();
+ void RemoveMeFromBroadcaster(bool isNotifyDestroy);
};
#endif // INCLUDED_WINACCESSIBILITY_INC_ACCEVENTLISTENER_HXX
diff --git a/winaccessibility/inc/AccObject.hxx b/winaccessibility/inc/AccObject.hxx
index 2a024642d8ac..6211b2a48d3e 100644
--- a/winaccessibility/inc/AccObject.hxx
+++ b/winaccessibility/inc/AccObject.hxx
@@ -61,7 +61,7 @@ private:
long m_resID;
HWND m_pParantID;
bool m_bShouldDestroy; //avoid access COM interface when acc object is deleted
- IMAccessible* m_pIMAcc;
+ IMAccessible* const m_pIMAcc; // AccObjectManager::GetTopWindowIMAccessible relies on this being const
AccObject* m_pParentObj;
IAccChildList m_childrenList;
::rtl::Reference<AccEventListener> m_pListener;
@@ -99,7 +99,7 @@ public:
void SetParentHWND(HWND hWnd);//need to set top window handle when send event to AT
HWND GetParentHWND();
- void SetListener(::rtl::Reference<AccEventListener> const& pListener);
+ ::rtl::Reference<AccEventListener> SetListener(::rtl::Reference<AccEventListener> const& pListener);
AccEventListener* getListener();
void SetParentObj(AccObject* pParentAccObj);
diff --git a/winaccessibility/inc/AccObjectWinManager.hxx b/winaccessibility/inc/AccObjectWinManager.hxx
index 1529bc40ec7f..a533c1be373d 100644
--- a/winaccessibility/inc/AccObjectWinManager.hxx
+++ b/winaccessibility/inc/AccObjectWinManager.hxx
@@ -22,6 +22,8 @@
#include <com/sun/star/accessibility/XAccessible.hpp>
#include <map>
+#include <mutex>
+
#if !defined WIN32_LEAN_AND_MEAN
# define WIN32_LEAN_AND_MEAN
#endif
@@ -63,6 +65,9 @@ private:
typedef std::map<const HWND, css::accessibility::XAccessible* >
XHWNDToDocumentHash;
+ // guard any access to XIdAccList and HwndXAcc
+ std::recursive_mutex m_Mutex;
+
//XAccessible to AccObject
XIdToAccObjHash XIdAccList;
@@ -86,11 +91,11 @@ private:
long ImpleGenerateResID();
AccObject* GetAccObjByXAcc( css::accessibility::XAccessible* pXAcc);
- AccObject* GetTopWindowAccObj(HWND hWnd);
+ IMAccessible* GetTopWindowIMAccessible(HWND hWnd);
css::accessibility::XAccessible* GetAccDocByHWND(HWND hWnd);
- static void DeleteAccListener( AccObject* pAccObj );
+ static rtl::Reference<AccEventListener> DeleteAccListener(AccObject* pAccObj);
static void InsertAccChildNode(AccObject* pCurObj,AccObject* pParentObj,HWND pWnd);
static void DeleteAccChildNode(AccObject* pChild);
void DeleteFromHwndXAcc(css::accessibility::XAccessible const * pXAcc );
diff --git a/winaccessibility/source/service/AccEventListener.cxx b/winaccessibility/source/service/AccEventListener.cxx
index e2be5cce145d..0a55d481c0ae 100644
--- a/winaccessibility/source/service/AccEventListener.cxx
+++ b/winaccessibility/source/service/AccEventListener.cxx
@@ -223,7 +223,7 @@ short AccEventListener::GetParentRole()
/**
* remove the listener from accessible object
*/
-void AccEventListener::RemoveMeFromBroadcaster()
+void AccEventListener::RemoveMeFromBroadcaster(bool const isNotifyDestroy)
{
try
{
@@ -244,7 +244,10 @@ void AccEventListener::RemoveMeFromBroadcaster()
catch (Exception const&)
{ // may throw if it's already disposed - ignore that
}
- pAgent->NotifyDestroy(m_xAccessible.get());
+ if (isNotifyDestroy)
+ {
+ pAgent->NotifyDestroy(m_xAccessible.get());
+ }
m_xAccessible.clear(); // release cyclic reference
}
catch(...)
@@ -261,7 +264,7 @@ void AccEventListener::disposing( const css::lang::EventObject& /*Source*/ )
{
SolarMutexGuard g;
- RemoveMeFromBroadcaster();
+ RemoveMeFromBroadcaster(true);
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/winaccessibility/source/service/AccObject.cxx b/winaccessibility/source/service/AccObject.cxx
index bf71d8617596..c606970c753d 100644
--- a/winaccessibility/source/service/AccObject.cxx
+++ b/winaccessibility/source/service/AccObject.cxx
@@ -162,7 +162,7 @@ AccObject::AccObject(XAccessible* pAcc, AccObjectManagerAgent* pAgent,
m_resID (NULL),
m_pParantID (nullptr),
m_bShouldDestroy(false),
- m_pIMAcc (nullptr),
+ m_pIMAcc (UAccCOMCreateInstance()),
m_pParentObj(nullptr),
m_pListener (pListener),
m_xAccRef( pAcc )
@@ -186,7 +186,6 @@ AccObject::AccObject(XAccessible* pAcc, AccObjectManagerAgent* pAgent,
*/
AccObject::~AccObject()
{
- m_pIMAcc = nullptr;
m_xAccRef = nullptr;
m_xAccActionRef = nullptr;
m_xAccContextRef = nullptr;
@@ -256,8 +255,6 @@ void AccObject::UpdateValidWindow()
*/
void AccObject::ImplInitializeCreateObj()
{
- m_pIMAcc = UAccCOMCreateInstance();
-
assert(m_pIMAcc);
}
@@ -397,7 +394,7 @@ void AccObject::SetValue( Any pAny )
case HEADING:
case TABLE_CELL:
- if(pRText.get())
+ if(pRText)
{
val = pRText->getText();
}
@@ -1162,9 +1159,11 @@ void AccObject::SetParentHWND(HWND hWnd)
m_pParantID = hWnd;
}
-void AccObject::SetListener(rtl::Reference<AccEventListener> const& pListener)
+rtl::Reference<AccEventListener> AccObject::SetListener(rtl::Reference<AccEventListener> const& pListener)
{
+ rtl::Reference<AccEventListener> pRet(m_pListener);
m_pListener = pListener;
+ return pRet;
}
AccEventListener* AccObject::getListener()
diff --git a/winaccessibility/source/service/AccObjectWinManager.cxx b/winaccessibility/source/service/AccObjectWinManager.cxx
index b56db56d4bab..a29c3a2513cd 100644
--- a/winaccessibility/source/service/AccObjectWinManager.cxx
+++ b/winaccessibility/source/service/AccObjectWinManager.cxx
@@ -75,8 +75,12 @@ AccObjectWinManager::AccObjectWinManager( AccObjectManagerAgent* Agent ):
*/
AccObjectWinManager::~AccObjectWinManager()
{
- XIdAccList.clear();
- HwndXAcc.clear();
+ {
+ std::scoped_lock l(m_Mutex);
+
+ XIdAccList.clear();
+ HwndXAcc.clear();
+ }
XResIdAccList.clear();
XHWNDDocList.clear();
#ifdef ACC_DEBUG
@@ -100,13 +104,7 @@ AccObjectWinManager::Get_ToATInterface(HWND hWnd, long lParam, WPARAM wParam)
if(lParam == OBJID_CLIENT )
{
- AccObject* topWindowAccObj = GetTopWindowAccObj(hWnd);
- if(topWindowAccObj)
- {
- pRetIMAcc = topWindowAccObj->GetIMAccessible();
- if(pRetIMAcc)
- pRetIMAcc->AddRef();//increase COM reference count
- }
+ pRetIMAcc = GetTopWindowIMAccessible(hWnd);
}
if ( pRetIMAcc && lParam == OBJID_CLIENT )
@@ -128,6 +126,8 @@ AccObject* AccObjectWinManager::GetAccObjByXAcc( XAccessible* pXAcc)
if( pXAcc == nullptr)
return nullptr;
+ std::scoped_lock l(m_Mutex);
+
XIdToAccObjHash::iterator pIndTemp = XIdAccList.find( pXAcc );
if ( pIndTemp == XIdAccList.end() )
return nullptr;
@@ -140,13 +140,26 @@ AccObject* AccObjectWinManager::GetAccObjByXAcc( XAccessible* pXAcc)
* @param hWnd, top window handle
* @return pointer to AccObject
*/
-AccObject* AccObjectWinManager::GetTopWindowAccObj(HWND hWnd)
+IMAccessible * AccObjectWinManager::GetTopWindowIMAccessible(HWND hWnd)
{
+ std::scoped_lock l(m_Mutex); // tdf#155794 for HwndXAcc and XIdAccList
+
XHWNDToXAccHash::iterator iterResult =HwndXAcc.find(hWnd);
if(iterResult == HwndXAcc.end())
return nullptr;
XAccessible* pXAcc = static_cast<XAccessible*>(iterResult->second);
- return GetAccObjByXAcc(pXAcc);
+ AccObject *const pAccObject(GetAccObjByXAcc(pXAcc));
+ if (!pAccObject)
+ {
+ return nullptr;
+ }
+ IMAccessible *const pRet(pAccObject->GetIMAccessible());
+ if (!pRet)
+ {
+ return nullptr;
+ }
+ pRet->AddRef();
+ return pRet;
}
/**
@@ -471,6 +484,8 @@ void AccObjectWinManager::DeleteAccChildNode( AccObject* pObj )
*/
void AccObjectWinManager::DeleteFromHwndXAcc(XAccessible const * pXAcc )
{
+ std::scoped_lock l(m_Mutex);
+
auto iter = std::find_if(HwndXAcc.begin(), HwndXAcc.end(),
[&pXAcc](XHWNDToXAccHash::value_type& rEntry) { return rEntry.second == pXAcc; });
if (iter != HwndXAcc.end())
@@ -513,34 +528,46 @@ void AccObjectWinManager::DeleteAccObj( XAccessible* pXAcc )
{
if( pXAcc == nullptr )
return;
- XIdToAccObjHash::iterator temp = XIdAccList.find(pXAcc);
- if( temp != XIdAccList.end() )
- {
- ResIdGen.SetSub( temp->second.GetResID() );
- }
- else
- {
- return;
- }
- AccObject& accObj = temp->second;
- DeleteAccChildNode( &accObj );
- DeleteAccListener( &accObj );
- if( accObj.GetIMAccessible() )
+ rtl::Reference<AccEventListener> pListener;
+
{
- accObj.GetIMAccessible()->Release();
+ std::scoped_lock l(m_Mutex);
+
+ XIdToAccObjHash::iterator temp = XIdAccList.find(pXAcc);
+ if( temp != XIdAccList.end() )
+ {
+ ResIdGen.SetSub( temp->second.GetResID() );
+ }
+ else
+ {
+ return;
+ }
+
+ AccObject& accObj = temp->second;
+ DeleteAccChildNode( &accObj );
+ pListener = DeleteAccListener(&accObj);
+ accObj.NotifyDestroy(true);
+ if( accObj.GetIMAccessible() )
+ {
+ accObj.GetIMAccessible()->Release();
+ }
+ size_t i = XResIdAccList.erase(accObj.GetResID());
+ assert(i != 0);
+ DeleteFromHwndXAcc(pXAcc);
+ if( accObj.GetRole() == DOCUMENT ||
+ accObj.GetRole() == DOCUMENT_PRESENTATION ||
+ accObj.GetRole() == DOCUMENT_SPREADSHEET ||
+ accObj.GetRole() == DOCUMENT_TEXT )
+ {
+ XHWNDDocList.erase(accObj.GetParentHWND());
+ }
+ XIdAccList.erase(pXAcc); // note: this invalidates accObj so do it last!
}
- size_t i = XResIdAccList.erase(accObj.GetResID());
- assert(i != 0);
- DeleteFromHwndXAcc(pXAcc);
- if( accObj.GetRole() == DOCUMENT ||
- accObj.GetRole() == DOCUMENT_PRESENTATION ||
- accObj.GetRole() == DOCUMENT_SPREADSHEET ||
- accObj.GetRole() == DOCUMENT_TEXT )
+ if (pListener)
{
- XHWNDDocList.erase(accObj.GetParentHWND());
+ pListener->RemoveMeFromBroadcaster(false);
}
- XIdAccList.erase(pXAcc); // note: this invalidates accObj so do it last!
}
/**
@@ -548,13 +575,9 @@ void AccObjectWinManager::DeleteAccObj( XAccessible* pXAcc )
* @param pAccObj Accobject pointer.
* @return
*/
-void AccObjectWinManager::DeleteAccListener( AccObject* pAccObj )
+rtl::Reference<AccEventListener> AccObjectWinManager::DeleteAccListener( AccObject* pAccObj )
{
- AccEventListener* listener = pAccObj->getListener();
- if( listener==nullptr )
- return;
- listener->RemoveMeFromBroadcaster();
- pAccObj->SetListener(nullptr);
+ return pAccObj->SetListener(nullptr);
}
/**
@@ -647,29 +670,6 @@ void AccObjectWinManager::InsertAccChildNode( AccObject* pCurObj, AccObject* pPa
*/
bool AccObjectWinManager::InsertAccObj( XAccessible* pXAcc,XAccessible* pParentXAcc,HWND pWnd )
{
- XIdToAccObjHash::iterator itXacc = XIdAccList.find( pXAcc );
- if (itXacc != XIdAccList.end() )
- {
- short nCurRole =GetRole(pXAcc);
- if (AccessibleRole::SHAPE == nCurRole)
- {
- AccObject &objXacc = itXacc->second;
- AccObject *pObjParent = objXacc.GetParentObj();
- if (pObjParent &&
- pObjParent->GetXAccessible().is() &&
- pObjParent->GetXAccessible().get() != pParentXAcc)
- {
- XIdToAccObjHash::iterator itXaccParent = XIdAccList.find( pParentXAcc );
- if(itXaccParent != XIdAccList.end())
- {
- objXacc.SetParentObj(&(itXaccParent->second));
- }
- }
- }
- return false;
- }
-
-
Reference< XAccessibleContext > pRContext;
if( pXAcc == nullptr)
@@ -679,6 +679,33 @@ bool AccObjectWinManager::InsertAccObj( XAccessible* pXAcc,XAccessible* pParentX
if( !pRContext.is() )
return false;
+ {
+ short nCurRole = GetRole(pXAcc);
+
+ std::scoped_lock l(m_Mutex);
+
+ XIdToAccObjHash::iterator itXacc = XIdAccList.find( pXAcc );
+ if (itXacc != XIdAccList.end() )
+ {
+ if (AccessibleRole::SHAPE == nCurRole)
+ {
+ AccObject &objXacc = itXacc->second;
+ AccObject *pObjParent = objXacc.GetParentObj();
+ if (pObjParent &&
+ pObjParent->GetXAccessible().is() &&
+ pObjParent->GetXAccessible().get() != pParentXAcc)
+ {
+ XIdToAccObjHash::iterator itXaccParent = XIdAccList.find( pParentXAcc );
+ if(itXaccParent != XIdAccList.end())
+ {
+ objXacc.SetParentObj(&(itXaccParent->second));
+ }
+ }
+ }
+ return false;
+ }
+ }
+
if( pWnd == nullptr )
{
if(pParentXAcc)
@@ -726,9 +753,13 @@ bool AccObjectWinManager::InsertAccObj( XAccessible* pXAcc,XAccessible* pParentX
else
return false;
- XIdAccList.emplace(pXAcc, pObj);
- XIdToAccObjHash::iterator pIndTemp = XIdAccList.find( pXAcc );
- XResIdAccList.emplace(pObj.GetResID(),&(pIndTemp->second));
+ {
+ std::scoped_lock l(m_Mutex);
+
+ XIdAccList.emplace(pXAcc, pObj);
+ XIdToAccObjHash::iterator pIndTemp = XIdAccList.find( pXAcc );
+ XResIdAccList.emplace(pObj.GetResID(),&(pIndTemp->second));
+ }
AccObject* pCurObj = GetAccObjByXAcc(pXAcc);
if( pCurObj )
@@ -752,6 +783,8 @@ bool AccObjectWinManager::InsertAccObj( XAccessible* pXAcc,XAccessible* pParentX
*/
void AccObjectWinManager::SaveTopWindowHandle(HWND hWnd, css::accessibility::XAccessible* pXAcc)
{
+ std::scoped_lock l(m_Mutex);
+
HwndXAcc.emplace(hWnd,pXAcc);
}
diff --git a/winaccessibility/source/service/msaaservice_impl.cxx b/winaccessibility/source/service/msaaservice_impl.cxx
index 15959e2b4c83..3c40c139be66 100644
--- a/winaccessibility/source/service/msaaservice_impl.cxx
+++ b/winaccessibility/source/service/msaaservice_impl.cxx
@@ -92,7 +92,7 @@ public:
sal_Int64 MSAAServiceImpl::getAccObjectPtr(
sal_Int64 hWnd, sal_Int64 lParam, sal_Int64 wParam)
{
- SolarMutexGuard g;
+ // tdf#155794: this must complete without taking SolarMutex
if (!m_pTopWindowListener.is())
{
diff --git a/wizards/source/access2base/DoCmd.xba b/wizards/source/access2base/DoCmd.xba
index 27b0d74be34f..26755a8d901d 100644
--- a/wizards/source/access2base/DoCmd.xba
+++ b/wizards/source/access2base/DoCmd.xba
@@ -2655,7 +2655,7 @@ Private Sub _ShellExecute(sCommand As String)
Dim oShell As Object
Set oShell = createUnoService(&quot;com.sun.star.system.SystemShellExecute&quot;)
- oShell.execute(sCommand, &quot;&quot; , com.sun.star.system.SystemShellExecuteFlags.DEFAULTS)
+ oShell.execute(sCommand, &quot;&quot; , com.sun.star.system.SystemShellExecuteFlags.URIS_ONLY)
End Sub &apos; _ShellExecute V0.8.5
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 329999ca18ce..22626bc8bf34 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -3191,7 +3191,7 @@ static OUString lcl_ExctractVariableAndHint( const OUString& rCommand, OUString&
sal_Int32 nIndex = rCommand.indexOf( ' ', 2); //find last space after 'ASK'
if (nIndex == -1)
return OUString();
- while(rCommand[nIndex] == ' ')
+ while (nIndex < rCommand.getLength() && rCommand[nIndex] == ' ')
++nIndex;
OUString sShortCommand( rCommand.copy( nIndex ) ); //cut off the " ASK "
@@ -3309,14 +3309,15 @@ void DomainMapper_Impl::ChainTextFrames()
sal_Int32 nId;
sal_Int32 nSeq;
OUString s_mso_next_textbox;
- bool bShapeNameSet;
- TextFramesForChaining(): nId(0), nSeq(0), bShapeNameSet(false) {}
+ OUString shapeName;
+ TextFramesForChaining() : nId(0), nSeq(0) {}
} ;
typedef std::map <OUString, TextFramesForChaining> ChainMap;
try
{
ChainMap aTextFramesForChainingHelper;
+ ::std::vector<TextFramesForChaining> chainingWPS;
OUString sChainNextName("ChainNextName");
//learn about ALL of the textboxes and their chaining values first - because frames are processed in no specific order.
@@ -3354,19 +3355,22 @@ void DomainMapper_Impl::ChainTextFrames()
//Sometimes the shape names have not been imported. If not, we may have a fallback name.
//Set name later, only if required for linking.
- if( sShapeName.isEmpty() )
- aChainStruct.bShapeNameSet = false;
- else
- {
- aChainStruct.bShapeNameSet = true;
- sLinkChainName = sShapeName;
- }
+ aChainStruct.shapeName = sShapeName;
- if( !sLinkChainName.isEmpty() )
+ if (!sLinkChainName.isEmpty())
{
aChainStruct.xShape = rTextFrame;
aTextFramesForChainingHelper[sLinkChainName] = aChainStruct;
}
+ if (aChainStruct.s_mso_next_textbox.isEmpty())
+ { // no VML chaining => try to chain DrawingML via IDs
+ aChainStruct.xShape = rTextFrame;
+ if (!sLinkChainName.isEmpty())
+ { // for member of group shapes, TestTdf73499
+ aChainStruct.shapeName = sLinkChainName;
+ }
+ chainingWPS.emplace_back(aChainStruct);
+ }
}
//if mso-next-textbox tags are provided, create those vml-style links first. Afterwards we will make dml-style id/seq links.
@@ -3381,22 +3385,22 @@ void DomainMapper_Impl::ChainTextFrames()
if( nextFinder != aTextFramesForChainingHelper.end() )
{
//if the frames have no name yet, then set them. LinkDisplayName / ChainName are read-only.
- if( !msoItem.second.bShapeNameSet )
+ if (msoItem.second.shapeName.isEmpty())
{
uno::Reference< container::XNamed > xNamed( msoItem.second.xShape, uno::UNO_QUERY );
if ( xNamed.is() )
{
xNamed->setName( msoItem.first );
- msoItem.second.bShapeNameSet = true;
+ msoItem.second.shapeName = msoItem.first;
}
}
- if( !nextFinder->second.bShapeNameSet )
+ if (nextFinder->second.shapeName.isEmpty())
{
uno::Reference< container::XNamed > xNamed( nextFinder->second.xShape, uno::UNO_QUERY );
if ( xNamed.is() )
{
xNamed->setName( nextFinder->first );
- nextFinder->second.bShapeNameSet = true;
+ nextFinder->second.shapeName = msoItem.first;
}
}
@@ -3404,7 +3408,7 @@ void DomainMapper_Impl::ChainTextFrames()
uno::Reference<beans::XPropertySet> xPropertySet(xTextContent, uno::UNO_QUERY);
//The reverse chaining happens automatically, so only one direction needs to be set
- xPropertySet->setPropertyValue(sChainNextName, uno::makeAny(nextFinder->first));
+ xPropertySet->setPropertyValue(sChainNextName, uno::makeAny(nextFinder->second.shapeName));
//the last item in an mso-next-textbox chain is indistinguishable from id/seq items. Now that it is handled, remove it.
if( nextFinder->second.s_mso_next_textbox.isEmpty() )
@@ -3417,26 +3421,23 @@ void DomainMapper_Impl::ChainTextFrames()
const sal_Int32 nDirection = 1;
//Finally - go through and attach the chains based on matching ID and incremented sequence number (dml-style).
- for (const auto& rOuter : aTextFramesForChainingHelper)
+ for (const auto& rOuter : chainingWPS)
{
- if( rOuter.second.s_mso_next_textbox.isEmpty() ) //non-empty ones already handled earlier - so skipping them now.
- {
- for (const auto& rInner : aTextFramesForChainingHelper)
+ for (const auto& rInner : chainingWPS)
{
- if ( rInner.second.nId == rOuter.second.nId )
+ if (rInner.nId == rOuter.nId)
{
- if ( rInner.second.nSeq == ( rOuter.second.nSeq + nDirection ) )
+ if (rInner.nSeq == (rOuter.nSeq + nDirection))
{
- uno::Reference<text::XTextContent> xTextContent(rOuter.second.xShape, uno::UNO_QUERY_THROW);
+ uno::Reference<text::XTextContent> const xTextContent(rOuter.xShape, uno::UNO_QUERY_THROW);
uno::Reference<beans::XPropertySet> xPropertySet(xTextContent, uno::UNO_QUERY);
//The reverse chaining happens automatically, so only one direction needs to be set
- xPropertySet->setPropertyValue(sChainNextName, uno::makeAny(rInner.first));
+ xPropertySet->setPropertyValue(sChainNextName, uno::makeAny(rInner.shapeName));
break ; //there cannot be more than one next frame
}
}
}
- }
}
m_vTextFramesForChaining.clear(); //clear the vector
}
@@ -5106,19 +5107,26 @@ void DomainMapper_Impl::CloseFieldCommand()
case FIELD_LASTSAVEDBY : break;
case FIELD_MACROBUTTON:
{
- //extract macro name
- sal_Int32 nIndex = sizeof(" MACROBUTTON ");
- OUString sMacro = pContext->GetCommand().getToken( 0, ' ', nIndex);
if (xFieldProperties.is())
- xFieldProperties->setPropertyValue(
- getPropertyName(PROP_MACRO_NAME), uno::makeAny( sMacro ));
-
- //extract quick help text
- if(xFieldProperties.is() && pContext->GetCommand().getLength() > nIndex + 1)
{
- xFieldProperties->setPropertyValue(
- getPropertyName(PROP_HINT),
- uno::makeAny( pContext->GetCommand().copy( nIndex )));
+ sal_Int32 nIndex = sizeof(" MACROBUTTON ");
+ OUString sCommand = pContext->GetCommand();
+
+ //extract macro name
+ if (sCommand.getLength() >= nIndex)
+ {
+ OUString sMacro = sCommand.getToken(0, ' ', nIndex);
+ xFieldProperties->setPropertyValue(
+ getPropertyName(PROP_MACRO_NAME), uno::Any( sMacro ));
+ }
+
+ //extract quick help text
+ if (sCommand.getLength() > nIndex + 1)
+ {
+ xFieldProperties->setPropertyValue(
+ getPropertyName(PROP_HINT),
+ uno::Any( sCommand.copy( nIndex )));
+ }
}
}
break;
@@ -5995,6 +6003,9 @@ void DomainMapper_Impl::StartOrEndBookmark( const OUString& rId )
else
{
xCursor = xText->createTextCursorByRange( aBookmarkIter->second.m_xTextRange );
+ }
+ if (!aBookmarkIter->second.m_bIsStartOfText)
+ {
xCursor->goRight( 1, false );
}
@@ -6123,6 +6134,9 @@ void DomainMapper_Impl::startOrEndPermissionRange(sal_Int32 permissinId)
else
{
xCursor = xText->createTextCursorByRange(aPermIter->second.m_xTextRange);
+ }
+ if (!aPermIter->second.m_bIsStartOfText)
+ {
xCursor->goRight(1, false);
}
diff --git a/writerfilter/source/dmapper/GraphicImport.cxx b/writerfilter/source/dmapper/GraphicImport.cxx
index b69f4565fb13..ea369ae858fc 100644
--- a/writerfilter/source/dmapper/GraphicImport.cxx
+++ b/writerfilter/source/dmapper/GraphicImport.cxx
@@ -367,11 +367,12 @@ public:
{
try
{
- // Ask the graphic naming helper to find out the name for this
- // object: It's around till the end of the import, so it remembers
- // what's the first free name.
- uno::Reference< container::XNamed > xNamed( xGraphicObjectProperties, uno::UNO_QUERY_THROW );
- xNamed->setName(rDomainMapper.GetGraphicNamingHelper().NameGraphic(sName));
+ if (!sName.isEmpty())
+ {
+ uno::Reference<container::XNamed> const xNamed(xGraphicObjectProperties, uno::UNO_QUERY_THROW);
+ xNamed->setName(sName);
+ }
+ // else: name is automatically generated by SwDoc::MakeFlySection_()
if ( sHyperlinkURL.getLength() > 0 )
xGraphicObjectProperties->setPropertyValue(getPropertyName( PROP_HYPER_LINK_U_R_L ),
diff --git a/xmloff/qa/unit/uxmloff.cxx b/xmloff/qa/unit/uxmloff.cxx
index 27edb47004d2..b3b285730634 100644
--- a/xmloff/qa/unit/uxmloff.cxx
+++ b/xmloff/qa/unit/uxmloff.cxx
@@ -173,30 +173,35 @@ void Test::testMetaGenerator()
{ "OpenOffice/4.1.4$Unix OpenOffice.org_project/414m2$Build-9785", "414$9785", SvXMLImport::AOO_4x },
// LO versions
- { "LibreOffice/3.3$Linux LibreOffice_project/330m17$Build-3", "330$3;33", SvXMLImport::LO_3x },
- { "BrOffice/3.3$Win32 LibreOffice_project/330m19$Build-8", "330$8;33", SvXMLImport::LO_3x },
- { "LibreOffice/3.4$Linux LibreOffice_project/340m1$Build-1206", "340$1206;34", SvXMLImport::LO_3x },
- { "LibreOffice/3.5$Linux_X86_64 LibreOffice_project/3fa2330-e49ffd2-90d118b-705e248-051e21c", ";35", SvXMLImport::LO_3x },
- { "LibreOffice/3.6$Windows_x86 LibreOffice_project/a9a0717-273e462-768e6e3-978247f-65e65f", ";36", SvXMLImport::LO_3x },
- { "LibreOffice/4.0.2.2$Windows_x86 LibreOffice_project/4c82dcdd6efcd48b1d8bba66bfe1989deee49c3", ";4022", SvXMLImport::LO_41x },
- { "LibreOffice/4.1.2.3$MacOSX_x86 LibreOffice_project/40b2d7fde7e8d2d7bc5a449dc65df4d08a7dd38", ";4123", SvXMLImport::LO_41x },
- { "LibreOffice/4.2.8.2$Windows_x86 LibreOffice_project/48d50dbfc06349262c9d50868e5c1f630a573ebd", ";4282", SvXMLImport::LO_42x },
- { "LibreOffice_from_Collabora_4.2-8/4.2.10.8$Linux_x86 LibreOffice_project/84584cc237b2eb93f7684d8fcd063bb37e87b5fb", ";42108", SvXMLImport::LO_42x },
- { "LibreOffice/4.3.3.2$Linux_x86 LibreOffice_project/9bb7eadab57b6755b1265afa86e04bf45fbfc644", ";4332", SvXMLImport::LO_43x },
- { "LibreOffice_from_Collabora_4.4-10/4.4.10.9$Linux_x86 LibreOffice_project/5600b19b88a01bbb669b0900100760758dff8c26", ";44109", SvXMLImport::LO_44x },
- { "LibreOffice/4.3.3.2$Linux_X86_64 LibreOffice_project/430m0$Build-2", "430$2;4332", SvXMLImport::LO_43x },
- { "LibreOffice/4.4.3.2$Linux_x86 LibreOffice_project/88805f81e9fe61362df02b9941de8e38a9b5fd16", ";4432", SvXMLImport::LO_44x },
- { "LibreOffice/5.0.1.1$Linux_x86 LibreOffice_project/00m0$Build-1", "00$1;5011", SvXMLImport::LO_5x },
- { "LibreOffice/5.0.3.2$Windows_X86_64 LibreOffice_project/e5f16313668ac592c1bfb310f4390624e3dbfb75", ";5032", SvXMLImport::LO_5x },
- { "Collabora_Office/5.0.10.19$Linux_X86_64 LibreOffice_project/95060d44300d8866fa81c16fc8fe2afe22d63777", ";501019", SvXMLImport::LO_5x },
- { "LibreOffice/5.1.6.2.0$Linux_X86_64 LibreOffice_project/10$Build-2", ";51620", SvXMLImport::LO_5x },
- { "Collabora_Office/5.1.10.17$Linux_X86_64 LibreOffice_project/a104cbe76eefca3cf23973da68893d2225fd718b", ";511017", SvXMLImport::LO_5x },
- { "LibreOffice/5.2.1.2$Windows_X86_64 LibreOffice_project/31dd62db80d4e60af04904455ec9c9219178d620", ";5212", SvXMLImport::LO_5x },
- { "LibreOffice_Vanilla/5.2.3.5$MacOSX_X86_64 LibreOffice_project/83adc9c35c74e0badc710d981405858b1179a327", ";5235", SvXMLImport::LO_5x },
- { "LibreOffice/5.3.4.2$Windows_X86_64 LibreOffice_project/f82d347ccc0be322489bf7da61d7e4ad13fe2ff3", ";5342", SvXMLImport::LO_5x },
- { "Collabora_Office/5.3.10.27$Linux_X86_64 LibreOffice_project/7a5a5378661e338a44666c08773cc796b8d1c84a", ";531027", SvXMLImport::LO_5x },
- { "LibreOfficeDev/5.4.7.0.0$Linux_X86_64 LibreOffice_project/ba7461fc88c08e75e315f786020a2946e56166c9", ";54700", SvXMLImport::LO_5x },
- { "LibreOfficeDev/6.0.3.0.0$Linux_X86_64 LibreOffice_project/34442b85bfb0c451738b4db023345a7484463321", ";60300", SvXMLImport::LO_6x },
+ { "LibreOffice/3.3$Linux LibreOffice_project/330m17$Build-3", "330$3;3.3", SvXMLImport::LO_3x },
+ { "BrOffice/3.3$Win32 LibreOffice_project/330m19$Build-8", "330$8;3.3", SvXMLImport::LO_3x },
+ { "LibreOffice/3.4$Linux LibreOffice_project/340m1$Build-1206", "340$1206;3.4", SvXMLImport::LO_3x },
+ { "LibreOffice/3.5$Linux_X86_64 LibreOffice_project/3fa2330-e49ffd2-90d118b-705e248-051e21c", ";3.5", SvXMLImport::LO_3x },
+ { "LibreOffice/3.6$Windows_x86 LibreOffice_project/a9a0717-273e462-768e6e3-978247f-65e65f", ";3.6", SvXMLImport::LO_3x },
+ { "LibreOffice/4.0.2.2$Windows_x86 LibreOffice_project/4c82dcdd6efcd48b1d8bba66bfe1989deee49c3", ";4.0.2.2", SvXMLImport::LO_41x },
+ { "LibreOffice/4.1.2.3$MacOSX_x86 LibreOffice_project/40b2d7fde7e8d2d7bc5a449dc65df4d08a7dd38", ";4.1.2.3", SvXMLImport::LO_41x },
+ { "LibreOffice/4.2.8.2$Windows_x86 LibreOffice_project/48d50dbfc06349262c9d50868e5c1f630a573ebd", ";4.2.8.2", SvXMLImport::LO_42x },
+ { "LibreOffice_from_Collabora_4.2-8/4.2.10.8$Linux_x86 LibreOffice_project/84584cc237b2eb93f7684d8fcd063bb37e87b5fb", ";4.2.10.8", SvXMLImport::LO_42x },
+ { "LibreOffice/4.3.3.2$Linux_x86 LibreOffice_project/9bb7eadab57b6755b1265afa86e04bf45fbfc644", ";4.3.3.2", SvXMLImport::LO_43x },
+ { "LibreOffice_from_Collabora_4.4-10/4.4.10.9$Linux_x86 LibreOffice_project/5600b19b88a01bbb669b0900100760758dff8c26", ";4.4.10.9", SvXMLImport::LO_44x },
+ { "LibreOffice/4.3.3.2$Linux_X86_64 LibreOffice_project/430m0$Build-2", "430$2;4.3.3.2", SvXMLImport::LO_43x },
+ { "LibreOffice/4.4.3.2$Linux_x86 LibreOffice_project/88805f81e9fe61362df02b9941de8e38a9b5fd16", ";4.4.3.2", SvXMLImport::LO_44x },
+ { "LibreOffice/5.0.1.1$Linux_x86 LibreOffice_project/00m0$Build-1", "00$1;5.0.1.1", SvXMLImport::LO_5x },
+ { "LibreOffice/5.0.3.2$Windows_X86_64 LibreOffice_project/e5f16313668ac592c1bfb310f4390624e3dbfb75", ";5.0.3.2", SvXMLImport::LO_5x },
+ { "Collabora_Office/5.0.10.19$Linux_X86_64 LibreOffice_project/95060d44300d8866fa81c16fc8fe2afe22d63777", ";5.0.10.19", SvXMLImport::LO_5x },
+ { "LibreOffice/5.1.6.2.0$Linux_X86_64 LibreOffice_project/10$Build-2", ";5.1.6.2.0", SvXMLImport::LO_5x },
+ { "Collabora_Office/5.1.10.17$Linux_X86_64 LibreOffice_project/a104cbe76eefca3cf23973da68893d2225fd718b", ";5.1.10.17", SvXMLImport::LO_5x },
+ { "LibreOffice/5.2.1.2$Windows_X86_64 LibreOffice_project/31dd62db80d4e60af04904455ec9c9219178d620", ";5.2.1.2", SvXMLImport::LO_5x },
+ { "LibreOffice_Vanilla/5.2.3.5$MacOSX_X86_64 LibreOffice_project/83adc9c35c74e0badc710d981405858b1179a327", ";5.2.3.5", SvXMLImport::LO_5x },
+ { "LibreOffice/5.3.4.2$Windows_X86_64 LibreOffice_project/f82d347ccc0be322489bf7da61d7e4ad13fe2ff3", ";5.3.4.2", SvXMLImport::LO_5x },
+ { "Collabora_Office/5.3.10.27$Linux_X86_64 LibreOffice_project/7a5a5378661e338a44666c08773cc796b8d1c84a", ";5.3.10.27", SvXMLImport::LO_5x },
+ { "LibreOfficeDev/5.4.7.0.0$Linux_X86_64 LibreOffice_project/ba7461fc88c08e75e315f786020a2946e56166c9", ";5.4.7.0.0", SvXMLImport::LO_5x },
+ { "LibreOfficeDev/6.0.3.0.0$Linux_X86_64 LibreOffice_project/34442b85bfb0c451738b4db023345a7484463321", ";6.0.3.0.0", SvXMLImport::LO_6x },
+ { "LibreOffice_powered_by_CIBDev/6.3.9.0.0$Linux_X86_64 LibreOffice_project/c87f331d2900eab70ac3021cbe530926efa6499f", ";6.3.9.0.0", SvXMLImport::LO_6x/*LO_63x*/ },
+ { "LibreOffice_powered_by_CIBDev/6.4.0.0.0$Linux_X86_64 LibreOffice_project/e29e100174c133d27e953934311d68602c4515b7", ";6.4.0.0.0", SvXMLImport::LO_6x/*LO_63x*/ },
+ { "LibreOfficeDev/7.0.6.0.0$Linux_X86_64 LibreOffice_project/dfc40e2292c6e19e285c10ed8c8044d9454107d0", ";7.0.6.0.0", SvXMLImport::LO_6x/*LO_7x*/ },
+ { "CIB_OfficeDev/6.4.0.19$Linux_X86_64 LibreOffice_project/2e04f804b5f82770435f250873f07b3384d95504", ";6.4.0.19", SvXMLImport::LO_6x/*LO_63x*/ },
+ { "LibreOfficeDev/24.2.0.0.alpha0$Linux_X86_64 LibreOffice_project/b81e7b6f3c71fb3ade1cb665444ac730dac0a9a9", ";24.2.0.0.", SvXMLImport::ProductVersionUnknown/*LO_New*/ },
};
for (size_t i = 0; i < SAL_N_ELEMENTS(tests); ++i)
@@ -212,14 +217,15 @@ void Test::testMetaGenerator()
OUString::createFromAscii(tests[i].generator), xInfoSet);
if (tests[i].buildId[0] != '\0')
{
- CPPUNIT_ASSERT_EQUAL(OUString::createFromAscii(tests[i].buildId),
- xInfoSet->getPropertyValue("BuildId").get<OUString>());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(tests[i].generator,
+ OUString::createFromAscii(tests[i].buildId),
+ xInfoSet->getPropertyValue("BuildId").get<OUString>());
}
else
{
- CPPUNIT_ASSERT(!xInfoSet->getPropertyValue("BuildId").hasValue());
+ CPPUNIT_ASSERT_MESSAGE(tests[i].generator, !xInfoSet->getPropertyValue("BuildId").hasValue());
}
- CPPUNIT_ASSERT_EQUAL(tests[i].result, pImport->getGeneratorVersion());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(tests[i].generator, tests[i].result, pImport->getGeneratorVersion());
}
}
diff --git a/xmloff/source/core/xmlimp.cxx b/xmloff/source/core/xmlimp.cxx
index bfc9d3fe819a..2cc37c313d5f 100644
--- a/xmloff/source/core/xmlimp.cxx
+++ b/xmloff/source/core/xmlimp.cxx
@@ -162,37 +162,63 @@ public:
OUString const loVersion(buildIds.copy(ix + 1));
if (!loVersion.isEmpty())
{
- if ('3' == loVersion[0])
- {
- mnGeneratorVersion = SvXMLImport::LO_3x;
- }
- else if ('4' == loVersion[0])
- {
- if (loVersion.getLength() > 1
- && (loVersion[1] == '0' || loVersion[1] == '1'))
+ auto const firstDot(loVersion.indexOf('.'));
+ if (firstDot == 1)
+ { // old version scheme 3.3 ... 7.6
+ if ('3' == loVersion[0])
{
- mnGeneratorVersion = SvXMLImport::LO_41x; // 4.0/4.1
+ mnGeneratorVersion = SvXMLImport::LO_3x;
}
- else if (loVersion.getLength() > 1 && '2' == loVersion[1])
+ else if ('4' == loVersion[0])
{
- mnGeneratorVersion = SvXMLImport::LO_42x; // 4.2
+ if (loVersion.getLength() > 2
+ && (loVersion[2] == '0' || loVersion[2] == '1'))
+ {
+ mnGeneratorVersion = SvXMLImport::LO_41x; // 4.0/4.1
+ }
+ else if (loVersion.getLength() > 2 && '2' == loVersion[2])
+ {
+ mnGeneratorVersion = SvXMLImport::LO_42x; // 4.2
+ }
+ else if (loVersion.getLength() > 2 && '3' == loVersion[2])
+ {
+ mnGeneratorVersion = SvXMLImport::LO_43x; // 4.3
+ }
+ else if (loVersion.getLength() > 2 && '4' == loVersion[2])
+ {
+ mnGeneratorVersion = SvXMLImport::LO_44x; // 4.4
+ }
}
- else if (loVersion.getLength() > 1 && '3' == loVersion[1])
+ else if ('5' == loVersion[0])
{
- mnGeneratorVersion = SvXMLImport::LO_43x; // 4.3
+ mnGeneratorVersion = SvXMLImport::LO_5x;
}
- else if (loVersion.getLength() > 1 && '4' == loVersion[1])
+ else if ('6' == loVersion[0])
{
- mnGeneratorVersion = SvXMLImport::LO_44x; // 4.4
+ mnGeneratorVersion = SvXMLImport::LO_6x;
+ }
+ else if ('7' == loVersion[0])
+ {
+ mnGeneratorVersion = SvXMLImport::LO_6x; // no point in adding LO_7x here
+ }
+ else
+ {
+ SAL_INFO("xmloff.core", "unknown LO version: " << loVersion);
}
}
- else if ('5' == loVersion[0])
- {
- mnGeneratorVersion = SvXMLImport::LO_5x;
- }
- else if ('6' == loVersion[0])
+ else if (1 < firstDot) // new version scheme 24.2 ...
{
- mnGeneratorVersion = SvXMLImport::LO_6x;
+ OUString const nMajor(loVersion.copy(0, firstDot));
+ auto const year(nMajor.toInt32());
+ //auto const month(loVersion.copy(firstDot+1).toInt32());
+ if (0 < year)
+ {
+ //mnGeneratorVersion = SvXMLImport::LO_New;
+ }
+ else
+ {
+ SAL_INFO("xmloff.core", "unknown LO version: " << loVersion);
+ }
}
else
{
diff --git a/xmloff/source/core/xmltoken.cxx b/xmloff/source/core/xmltoken.cxx
index 13f1415b8cc4..1b2f4bcf8566 100644
--- a/xmloff/source/core/xmltoken.cxx
+++ b/xmloff/source/core/xmltoken.cxx
@@ -707,7 +707,7 @@ namespace xmloff { namespace token {
TOKEN( "embedded-visible-area", XML_EMBEDDED_VISIBLE_AREA ),
TOKEN( "embossed", XML_EMBOSSED ),
TOKEN( "emissive-color", XML_EMISSIVE_COLOR ),
- TOKEN( "empty", XML_EMPTY ),
+ TOKEN( "empty", XML_TOKEN_EMPTY ),
TOKEN( "empty-line-refresh", XML_EMPTY_LINE_REFRESH ),
TOKEN( "enable-numbering", XML_ENABLE_NUMBERING ),
TOKEN( "enabled", XML_ENABLED ),
diff --git a/xmloff/source/draw/eventimp.cxx b/xmloff/source/draw/eventimp.cxx
index f9e10c11cf7d..fcc36f946ff1 100644
--- a/xmloff/source/draw/eventimp.cxx
+++ b/xmloff/source/draw/eventimp.cxx
@@ -231,6 +231,9 @@ SdXMLEventContext::SdXMLEventContext( SvXMLImport& rImp, sal_uInt16 nPrfx, cons
if( maData.mbValid )
maData.mbValid = !sEventName.isEmpty();
+
+ if (!maData.msMacroName.isEmpty())
+ rImp.NotifyMacroEventRead();
}
SvXMLImportContextRef SdXMLEventContext::CreateChildContext( sal_uInt16 nPrefix, const OUString& rLocalName, const Reference< XAttributeList>& xAttrList )
diff --git a/xmloff/source/draw/sdpropls.cxx b/xmloff/source/draw/sdpropls.cxx
index 6a59ac6967e2..378faaca9e68 100644
--- a/xmloff/source/draw/sdpropls.cxx
+++ b/xmloff/source/draw/sdpropls.cxx
@@ -75,7 +75,7 @@ using namespace ::xmloff::token;
#define DPMAP(name,prefix,token,type,context) MAP_(name,prefix,token,type|XML_TYPE_PROP_DRAWING_PAGE,context)
#define TMAP(name,prefix,token,type,context) MAP_(name,prefix,token,type|XML_TYPE_PROP_TEXT,context)
#define PMAP(name,prefix,token,type,context) MAP_(name,prefix,token,type|XML_TYPE_PROP_PARAGRAPH,context)
-#define MAP_END() { nullptr, 0, 0, XML_EMPTY, 0 ,0, SvtSaveOptions::ODFVER_010, false }
+#define MAP_END() { nullptr, 0, 0, XML_TOKEN_EMPTY, 0 ,0, SvtSaveOptions::ODFVER_010, false }
// entry list for graphic properties
diff --git a/xmloff/source/draw/shapeexport.cxx b/xmloff/source/draw/shapeexport.cxx
index ddd128d1d8b0..887c49e61a49 100644
--- a/xmloff/source/draw/shapeexport.cxx
+++ b/xmloff/source/draw/shapeexport.cxx
@@ -302,23 +302,20 @@ void XMLShapeExport::collectShapeAutoStyles(const uno::Reference< drawing::XShap
if( xPropSet.is() && bObjSupportsText )
{
uno::Reference< text::XText > xText(xShape, uno::UNO_QUERY);
- bool bSkip = false;
if (xText.is())
{
try
{
- bSkip = xText->getString().isEmpty();
+ // tdf#153161: it seems that the call to XTextRange::getString flushes the changes
+ // for some objects, that otherwise fail to get exported correctly. Maybe at some
+ // point it would make sense to find a better place for more targeted flush.
+ xText->getString();
}
catch (uno::RuntimeException const&)
{
- // tdf#102479: SwXTextFrame that contains only a table will
- // throw, but the table must be iterated so that
- // SwXMLExport::ExportTableLines() can find its auto styles
- // so do not skip it!
+ // E.g., SwXTextFrame that contains only a table will throw; this is not an error
}
- }
- if (!bSkip)
- {
+
uno::Reference< beans::XPropertySetInfo > xPropSetInfo( xPropSet->getPropertySetInfo() );
if( xPropSetInfo.is() && xPropSetInfo->hasPropertyByName("IsEmptyPresentationObject") )
diff --git a/xmloff/source/draw/ximpshap.cxx b/xmloff/source/draw/ximpshap.cxx
index 8bee4b376ba1..955ec011c5df 100644
--- a/xmloff/source/draw/ximpshap.cxx
+++ b/xmloff/source/draw/ximpshap.cxx
@@ -87,6 +87,7 @@
#include <basegfx/polygon/b2dpolypolygon.hxx>
#include <basegfx/polygon/b2dpolypolygontools.hxx>
#include <basegfx/vector/b2dvector.hxx>
+#include <tools/urlobj.hxx>
#include <o3tl/safeint.hxx>
using namespace ::com::sun::star;
@@ -509,7 +510,11 @@ void SdXMLShapeContext::AddShape(OUString const & serviceName)
xShape.set(xServiceFact->createInstance("com.sun.star.drawing.temporaryForXMLImportOLE2Shape"), uno::UNO_QUERY);
}
else if (serviceName == "com.sun.star.drawing.GraphicObjectShape"
+ || serviceName == "com.sun.star.drawing.AppletShape"
+ || serviceName == "com.sun.star.drawing.FrameShape"
|| serviceName == "com.sun.star.drawing.MediaShape"
+ || serviceName == "com.sun.star.drawing.OLE2Shape"
+ || serviceName == "com.sun.star.drawing.PluginShape"
|| serviceName == "com.sun.star.presentation.MediaShape")
{
css::uno::Sequence<css::uno::Any> args(1);
@@ -3222,9 +3227,35 @@ SdXMLFloatingFrameShapeContext::~SdXMLFloatingFrameShapeContext()
{
}
+uno::Reference<drawing::XShape> SdXMLFloatingFrameShapeContext::CreateFloatingFrameShape() const
+{
+ uno::Reference<lang::XMultiServiceFactory> xServiceFact(GetImport().GetModel(), uno::UNO_QUERY);
+ if (!xServiceFact.is())
+ return nullptr;
+ uno::Reference<drawing::XShape> xShape(
+ xServiceFact->createInstance("com.sun.star.drawing.FrameShape"), uno::UNO_QUERY);
+ return xShape;
+}
+
void SdXMLFloatingFrameShapeContext::StartElement( const css::uno::Reference< css::xml::sax::XAttributeList >& )
{
- AddShape("com.sun.star.drawing.FrameShape");
+ uno::Reference<drawing::XShape> xShape(SdXMLFloatingFrameShapeContext::CreateFloatingFrameShape());
+
+ uno::Reference< beans::XPropertySet > xProps(xShape, uno::UNO_QUERY);
+ // set FrameURL before AddShape, we have to do it again later because it
+ // gets cleared when the SdrOle2Obj is attached to the XShape. But we want
+ // FrameURL to exist when AddShape triggers SetPersistName which itself
+ // triggers SdrOle2Obj::CheckFileLink_Impl and at that point we want to
+ // know what URL will end up being used. So bodge this by setting FrameURL
+ // to the temp pre-SdrOle2Obj attached properties and we can smuggle it
+ // eventually into SdrOle2Obj::SetPersistName at the right point after
+ // PersistName is set but before SdrOle2Obj::CheckFileLink_Impl is called
+ // in order to inform the link manager that this is an IFrame that links to
+ // a URL
+ if (xProps && !maHref.isEmpty())
+ xProps->setPropertyValue("FrameURL", Any(maHref));
+
+ AddShape(xShape);
if( mxShape.is() )
{
@@ -3233,7 +3264,6 @@ void SdXMLFloatingFrameShapeContext::StartElement( const css::uno::Reference< cs
// set pos, size, shear and rotate
SetTransformation();
- uno::Reference< beans::XPropertySet > xProps( mxShape, uno::UNO_QUERY );
if( xProps.is() )
{
if( !maFrameName.isEmpty() )
@@ -3243,6 +3273,9 @@ void SdXMLFloatingFrameShapeContext::StartElement( const css::uno::Reference< cs
if( !maHref.isEmpty() )
{
+ if (INetURLObject(maHref).IsExoticProtocol())
+ GetImport().NotifyMacroEventRead();
+
xProps->setPropertyValue("FrameURL", Any(maHref) );
}
}
diff --git a/xmloff/source/draw/ximpshap.hxx b/xmloff/source/draw/ximpshap.hxx
index fae45f88f00a..a00c87e8a0da 100644
--- a/xmloff/source/draw/ximpshap.hxx
+++ b/xmloff/source/draw/ximpshap.hxx
@@ -513,6 +513,8 @@ private:
OUString maFrameName;
OUString maHref;
+ css::uno::Reference<css::drawing::XShape> CreateFloatingFrameShape() const;
+
public:
SdXMLFloatingFrameShapeContext( SvXMLImport& rImport, sal_uInt16 nPrfx,
diff --git a/xmloff/source/meta/xmlmetai.cxx b/xmloff/source/meta/xmlmetai.cxx
index 907fd68d4e0d..22c96917b097 100644
--- a/xmloff/source/meta/xmlmetai.cxx
+++ b/xmloff/source/meta/xmlmetai.cxx
@@ -273,11 +273,11 @@ void SvXMLMetaDocumentContext::setBuildId(OUString const& i_rBuildId, const uno:
assert(firstSlash != -1);
for (sal_Int32 i = firstSlash + 1; i < i_rBuildId.getLength(); ++i)
{
- if (rtl::isAsciiDigit(i_rBuildId[i]))
+ if (rtl::isAsciiDigit(i_rBuildId[i]) || '.' == i_rBuildId[i])
{
sNumber.append(i_rBuildId[i]);
}
- else if ('.' != i_rBuildId[i])
+ else
{
break;
}
diff --git a/xmloff/source/style/PageMasterStyleMap.cxx b/xmloff/source/style/PageMasterStyleMap.cxx
index 0faabe8264b2..39bd291d670d 100644
--- a/xmloff/source/style/PageMasterStyleMap.cxx
+++ b/xmloff/source/style/PageMasterStyleMap.cxx
@@ -154,7 +154,7 @@ const XMLPropertyMapEntry aXMLPageMasterStyleMap[] =
PLMAP( "FootnoteLineRelativeWidth", XML_NAMESPACE_STYLE, XML__EMPTY, XML_TYPE_PERCENT8|MID_FLAG_SPECIAL_ITEM, CTF_PM_FTN_LINE_WIDTH ),
PLMAP( "FootnoteLineTextDistance", XML_NAMESPACE_STYLE, XML__EMPTY, XML_TYPE_MEASURE|MID_FLAG_SPECIAL_ITEM, CTF_PM_FTN_LINE_DISTANCE ),
PLMAP( "FootnoteLineWeight", XML_NAMESPACE_STYLE, XML_FOOTNOTE_SEP, XML_TYPE_MEASURE16|MID_FLAG_ELEMENT_ITEM, CTF_PM_FTN_LINE_WEIGHT ),
- PLMAP( "FootnoteLineStyle", XML_NAMESPACE_STYLE, XML_EMPTY, XML_TYPE_STRING|MID_FLAG_ELEMENT_ITEM, CTF_PM_FTN_LINE_STYLE ),
+ PLMAP( "FootnoteLineStyle", XML_NAMESPACE_STYLE, XML_TOKEN_EMPTY, XML_TYPE_STRING|MID_FLAG_ELEMENT_ITEM, CTF_PM_FTN_LINE_STYLE ),
//////////////////////////////////////////////////////////////////////////
//Index 92: Section for 'header-style' own section, all members *have* to use CTF_PM_HEADERFLAG in the context entry (the 5th one)
@@ -268,7 +268,7 @@ const XMLPropertyMapEntry aXMLPageMasterStyleMap[] =
HFMAP( "FooterFillBitmapOffsetX", XML_NAMESPACE_DRAW, XML_TILE_REPEAT_OFFSET, XML_SW_TYPE_BITMAPREPOFFSETX|MID_FLAG_MULTI_PROPERTY, CTF_PM_FOOTERREPEAT_OFFSET_X ),
HFMAP( "FooterFillBitmapOffsetY", XML_NAMESPACE_DRAW, XML_TILE_REPEAT_OFFSET, XML_SW_TYPE_BITMAPREPOFFSETY|MID_FLAG_MULTI_PROPERTY, CTF_PM_FOOTERREPEAT_OFFSET_Y ),
- { nullptr, 0, 0, XML_EMPTY, 0, 0, SvtSaveOptions::ODFVER_010, false } // index 190
+ { nullptr, 0, 0, XML_TOKEN_EMPTY, 0, 0, SvtSaveOptions::ODFVER_010, false } // index 190
};
XMLPropertyMapEntry const g_XMLPageMasterDrawingPageStyleMap[] =
@@ -296,7 +296,7 @@ XMLPropertyMapEntry const g_XMLPageMasterDrawingPageStyleMap[] =
DPMAP_IMPORT("FillBitmapOffsetX", XML_NAMESPACE_DRAW, XML_TILE_REPEAT_OFFSET, XML_SW_TYPE_BITMAPREPOFFSETX|MID_FLAG_MULTI_PROPERTY, CTF_PM_REPEAT_OFFSET_X),
DPMAP_IMPORT("FillBitmapOffsetY", XML_NAMESPACE_DRAW, XML_TILE_REPEAT_OFFSET, XML_SW_TYPE_BITMAPREPOFFSETY|MID_FLAG_MULTI_PROPERTY, CTF_PM_REPEAT_OFFSET_Y),
- { nullptr, 0, 0, XML_EMPTY, 0, 0, SvtSaveOptions::ODFVER_010, false }
+ { nullptr, 0, 0, XML_TOKEN_EMPTY, 0, 0, SvtSaveOptions::ODFVER_010, false }
};
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/xmloff/source/style/xmlnume.cxx b/xmloff/source/style/xmlnume.cxx
index 0f5a45dc40da..b549f447eb0c 100644
--- a/xmloff/source/style/xmlnume.cxx
+++ b/xmloff/source/style/xmlnume.cxx
@@ -119,7 +119,24 @@ void SvxXMLNumRuleExport::exportLevelStyle( sal_Int32 nLevel,
{
rProp.Value >>= sSuffix;
}
- else if( rProp.Name == "BulletChar" )
+ else if (rProp.Name == "ListFormat")
+ {
+ OUString sListFormat;
+ rProp.Value >>= sListFormat;
+
+ // Since we have no support for entire format string it should be converted
+ // to prefix and suffix. Of course, it is not so flexible as format string,
+ // but it is the only option
+ sal_Int32 nFirstReplacement = sListFormat.indexOf('%');
+ sal_Int32 nLastReplacement = sListFormat.lastIndexOf('%') + 1;
+ if (nFirstReplacement > 0)
+ // Everything before first '%' will be prefix
+ sPrefix = sListFormat.copy(0, nFirstReplacement);
+ if (nLastReplacement >= 0 && nLastReplacement < sListFormat.getLength() -1 )
+ // Everything beyond last '%' (+1 for follow up id) is a suffix
+ sSuffix = sListFormat.copy(nLastReplacement + 1);
+ }
+ else if (rProp.Name == "BulletChar")
{
OUString sValue;
rProp.Value >>= sValue;
diff --git a/xmloff/source/table/XMLTableExport.cxx b/xmloff/source/table/XMLTableExport.cxx
index 42d482a1c8a5..4ab8cdb20daf 100644
--- a/xmloff/source/table/XMLTableExport.cxx
+++ b/xmloff/source/table/XMLTableExport.cxx
@@ -61,7 +61,7 @@ using namespace ::com::sun::star::style;
#define CMAP(name,prefix,token,type,context) MAP_(name,prefix,token,type|XML_TYPE_PROP_TABLE_COLUMN,context)
#define RMAP(name,prefix,token,type,context) MAP_(name,prefix,token,type|XML_TYPE_PROP_TABLE_ROW,context)
#define CELLMAP(name,prefix,token,type,context) MAP_(name,prefix,token,type|XML_TYPE_PROP_TABLE_CELL,context)
-#define MAP_END { nullptr, 0, 0, XML_EMPTY, 0, 0, SvtSaveOptions::ODFVER_010, false }
+#define MAP_END { nullptr, 0, 0, XML_TOKEN_EMPTY, 0, 0, SvtSaveOptions::ODFVER_010, false }
const XMLPropertyMapEntry* getColumnPropertiesMap()
{
diff --git a/xmlsecurity/inc/xmlsec-wrapper.h b/xmlsecurity/inc/xmlsec-wrapper.h
index 2d06dcfdd549..b5e142015f75 100644
--- a/xmlsecurity/inc/xmlsec-wrapper.h
+++ b/xmlsecurity/inc/xmlsec-wrapper.h
@@ -29,6 +29,7 @@
#define XMLSEC_NO_SIZE_T
#endif
+#include <libxml/parser.h>
#include <xmlsec/base64.h>
#include <xmlsec/bn.h>
#include <xmlsec/errors.h>
diff --git a/xmlsecurity/inc/xmlsec/saxhelper.hxx b/xmlsecurity/inc/xmlsec/saxhelper.hxx
index e1eed377d6fa..5262b52c81e0 100644
--- a/xmlsecurity/inc/xmlsec/saxhelper.hxx
+++ b/xmlsecurity/inc/xmlsec/saxhelper.hxx
@@ -20,6 +20,7 @@
#ifndef INCLUDED_XMLSECURITY_INC_XMLSEC_SAXHELPER_HXX
#define INCLUDED_XMLSECURITY_INC_XMLSEC_SAXHELPER_HXX
+#include <libxml/parser.h>
#include <libxml/tree.h>
#include <rtl/ustring.hxx>
diff --git a/xmlsecurity/source/gpg/SecurityEnvironment.hxx b/xmlsecurity/source/gpg/SecurityEnvironment.hxx
index f3213e77e23b..5ed662afa5cc 100644
--- a/xmlsecurity/source/gpg/SecurityEnvironment.hxx
+++ b/xmlsecurity/source/gpg/SecurityEnvironment.hxx
@@ -11,6 +11,9 @@
#define INCLUDED_XMLSECURITY_SOURCE_GPG_SECURITYENVIRONMENT_HXX
#include <sal/config.h>
+
+#include <memory>
+
#include <rtl/ustring.hxx>
#include <cppuhelper/implbase.hxx>
diff --git a/xmlsecurity/source/helper/ooxmlsecparser.hxx b/xmlsecurity/source/helper/ooxmlsecparser.hxx
index 5fe6f53eb701..bb27a219ea28 100644
--- a/xmlsecurity/source/helper/ooxmlsecparser.hxx
+++ b/xmlsecurity/source/helper/ooxmlsecparser.hxx
@@ -18,6 +18,7 @@
#include <xmloff/nmspmap.hxx>
#include <memory>
+#include <optional>
#include <stack>
class XSecController;
diff --git a/xmlsecurity/source/helper/xsecparser.hxx b/xmlsecurity/source/helper/xsecparser.hxx
index a54bbdac37a5..3abaf7c7e8be 100644
--- a/xmlsecurity/source/helper/xsecparser.hxx
+++ b/xmlsecurity/source/helper/xsecparser.hxx
@@ -28,6 +28,7 @@
#include <xmloff/nmspmap.hxx>
#include <memory>
+#include <optional>
#include <stack>
class XMLSignatureHelper;
diff --git a/xmlsecurity/source/xmlsec/saxhelper.cxx b/xmlsecurity/source/xmlsec/saxhelper.cxx
index 1410eb5b0874..4f50e4d5c665 100644
--- a/xmlsecurity/source/xmlsec/saxhelper.cxx
+++ b/xmlsecurity/source/xmlsec/saxhelper.cxx
@@ -118,11 +118,12 @@ SAXHelper::SAXHelper( )
* compile error:
* xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS ;
*/
+SAL_WNODEPRECATED_DECLARATIONS_PUSH
xmlSubstituteEntitiesDefault(0) ;
-
#ifndef XMLSEC_NO_XSLT
xmlIndentTreeOutput = 1 ;
#endif /* XMLSEC_NO_XSLT */
+SAL_WNODEPRECATED_DECLARATIONS_POP
m_pParserCtxt = xmlNewParserCtxt() ;