diff --git a/.gitignore b/.gitignore index 1338610..5f39b3c 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,6 @@ SOURCES/1f24ab1d39f4a51faf22244c94a6203f-xmlsec1-1.2.14.tar.gz SOURCES/35c94d2df8893241173de1d16b6034c0-swingExSrc.zip SOURCES/798b2ffdc8bcfe7bca2cf92b62caf685-rhino1_5R5.zip SOURCES/a7983f859eafb2677d7ff386a023bc40-xsltml_2.1.2.zip -SOURCES/libreoffice-4.2.6.3.tar.xz -SOURCES/libreoffice-help-4.2.6.3.tar.xz -SOURCES/libreoffice-translations-4.2.6.3.tar.xz +SOURCES/libreoffice-4.3.7.2.tar.xz +SOURCES/libreoffice-help-4.3.7.2.tar.xz +SOURCES/libreoffice-translations-4.3.7.2.tar.xz diff --git a/.libreoffice.metadata b/.libreoffice.metadata index 7da70fd..4a11338 100644 --- a/.libreoffice.metadata +++ b/.libreoffice.metadata @@ -5,6 +5,6 @@ 1acea86fd399ed7817879d36370d3d1f8b109050 SOURCES/35c94d2df8893241173de1d16b6034c0-swingExSrc.zip 8a90669029e107b61953b90ba11545fef586c2ca SOURCES/798b2ffdc8bcfe7bca2cf92b62caf685-rhino1_5R5.zip 2d49e11b0b711970f494294dc3698f05eb294853 SOURCES/a7983f859eafb2677d7ff386a023bc40-xsltml_2.1.2.zip -f6674acadd8f655d94535953eea71c288515d0aa SOURCES/libreoffice-4.2.6.3.tar.xz -6c6c113c1e1f97afa366ba4b188a03d983c5d73c SOURCES/libreoffice-help-4.2.6.3.tar.xz -f7a983a38e08cd0d536984c079c17bd74a6d64ae SOURCES/libreoffice-translations-4.2.6.3.tar.xz +2d1906b6c8e4ce84c5000094108bc2cf95cb49ff SOURCES/libreoffice-4.3.7.2.tar.xz +9901a6a0cbfbf840a38c4d14b709364541aec2c8 SOURCES/libreoffice-help-4.3.7.2.tar.xz +10d9764a854247b05c96c95b6ead9c186022a1b6 SOURCES/libreoffice-translations-4.3.7.2.tar.xz diff --git a/SOURCES/0001-Change-SDK-javaodc-from-static-Package-to-dynamic-Ge.patch b/SOURCES/0001-Change-SDK-javaodc-from-static-Package-to-dynamic-Ge.patch deleted file mode 100644 index 2b34206..0000000 --- a/SOURCES/0001-Change-SDK-javaodc-from-static-Package-to-dynamic-Ge.patch +++ /dev/null @@ -1,209 +0,0 @@ -From a59e5ecd611ddd41cec6d9c78773f55887df67e6 Mon Sep 17 00:00:00 2001 -From: Stephan Bergmann -Date: Tue, 25 Feb 2014 15:44:16 +0100 -Subject: [PATCH] Change SDK javaodc from static Package to dynamic - GeneratedPackage - -...as e.g. the list of resrouces/*.gif apparently varies per javadoc version. - -Change-Id: Idcf95229295c1c5cd16e565bcd168c1a0e7d4f0c ---- - odk/GeneratedPackage_odk_javadoc.mk | 16 ++++ - odk/Module_odk.mk | 2 +- - odk/Package_javadoc.mk | 146 ------------------------------------ - 3 files changed, 17 insertions(+), 147 deletions(-) - create mode 100644 odk/GeneratedPackage_odk_javadoc.mk - delete mode 100644 odk/Package_javadoc.mk - -diff --git a/odk/GeneratedPackage_odk_javadoc.mk b/odk/GeneratedPackage_odk_javadoc.mk -new file mode 100644 -index 0000000..569377b ---- /dev/null -+++ b/odk/GeneratedPackage_odk_javadoc.mk -@@ -0,0 +1,16 @@ -+# -*- 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_GeneratedPackage_GeneratedPackage,odk_javadoc,$(call gb_CustomTarget_get_workdir,odk/docs/java/ref))) -+ -+$(eval $(call gb_GeneratedPackage_add_dir,odk_javadoc,$(INSTDIR)/$(SDKDIRNAME)/docs/java/ref,.)) -+ -+$(eval $(call gb_GeneratedPackage_use_customtarget,odk_javadoc,odk/docs/java/ref)) -+ -+# vim: set noet sw=4 ts=4: -diff --git a/odk/Module_odk.mk b/odk/Module_odk.mk -index 9ddc400..32bdfc1 100644 ---- a/odk/Module_odk.mk -+++ b/odk/Module_odk.mk -@@ -44,9 +44,9 @@ $(eval $(call gb_Module_add_targets,odk,\ - $(if $(filter YESGCC,$(BUILD_UNOWINREG)$(COM)),CustomTarget_unowinreg) \ - CustomTarget_classes \ - CustomTarget_javadoc \ -+ GeneratedPackage_odk_javadoc \ - GeneratedPackage_uno_loader_classes \ - $(if $(filter WNT,$(OS)),Library_unowinreg) \ -- Package_javadoc \ - Package_unowinreg \ - )) - endif -diff --git a/odk/Package_javadoc.mk b/odk/Package_javadoc.mk -deleted file mode 100644 -index 5f0ea44..0000000 ---- a/odk/Package_javadoc.mk -+++ /dev/null -@@ -1,146 +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/. --# -- --$(eval $(call gb_Package_Package,odk_javadoc,$(call gb_CustomTarget_get_workdir,odk/docs/java/ref))) -- --$(eval $(call gb_Package_set_outdir,odk_javadoc,$(INSTDIR))) -- --$(eval $(call gb_Package_add_files_with_dir,odk_javadoc,$(SDKDIRNAME)/docs/java/ref,\ -- allclasses-frame.html \ -- allclasses-noframe.html \ -- com/sun/star/comp/helper/Bootstrap.html \ -- com/sun/star/comp/helper/BootstrapException.html \ -- com/sun/star/comp/helper/ComponentContext.html \ -- com/sun/star/comp/helper/ComponentContextEntry.html \ -- com/sun/star/comp/helper/SharedLibraryLoader.html \ -- com/sun/star/comp/helper/class-use/Bootstrap.html \ -- com/sun/star/comp/helper/class-use/BootstrapException.html \ -- com/sun/star/comp/helper/class-use/ComponentContext.html \ -- com/sun/star/comp/helper/class-use/ComponentContextEntry.html \ -- com/sun/star/comp/helper/class-use/SharedLibraryLoader.html \ -- com/sun/star/comp/helper/package-frame.html \ -- com/sun/star/comp/helper/package-summary.html \ -- com/sun/star/comp/helper/package-tree.html \ -- com/sun/star/comp/helper/package-use.html \ -- com/sun/star/lib/uno/helper/ComponentBase.html \ -- com/sun/star/lib/uno/helper/Factory.html \ -- com/sun/star/lib/uno/helper/InterfaceContainer.html \ -- com/sun/star/lib/uno/helper/MultiTypeInterfaceContainer.html \ -- com/sun/star/lib/uno/helper/PropertySet.html \ -- com/sun/star/lib/uno/helper/PropertySetMixin.BoundListeners.html \ -- com/sun/star/lib/uno/helper/PropertySetMixin.html \ -- com/sun/star/lib/uno/helper/UnoUrl.html \ -- com/sun/star/lib/uno/helper/WeakAdapter.html \ -- com/sun/star/lib/uno/helper/WeakBase.html \ -- com/sun/star/lib/uno/helper/class-use/ComponentBase.html \ -- com/sun/star/lib/uno/helper/class-use/Factory.html \ -- com/sun/star/lib/uno/helper/class-use/InterfaceContainer.html \ -- com/sun/star/lib/uno/helper/class-use/MultiTypeInterfaceContainer.html \ -- com/sun/star/lib/uno/helper/class-use/PropertySet.html \ -- com/sun/star/lib/uno/helper/class-use/PropertySetMixin.BoundListeners.html \ -- com/sun/star/lib/uno/helper/class-use/PropertySetMixin.html \ -- com/sun/star/lib/uno/helper/class-use/UnoUrl.html \ -- com/sun/star/lib/uno/helper/class-use/WeakAdapter.html \ -- com/sun/star/lib/uno/helper/class-use/WeakBase.html \ -- com/sun/star/lib/uno/helper/package-frame.html \ -- com/sun/star/lib/uno/helper/package-summary.html \ -- com/sun/star/lib/uno/helper/package-tree.html \ -- com/sun/star/lib/uno/helper/package-use.html \ -- com/sun/star/lib/unoloader/UnoClassLoader.html \ -- com/sun/star/lib/unoloader/UnoLoader.html \ -- com/sun/star/lib/unoloader/class-use/UnoClassLoader.html \ -- com/sun/star/lib/unoloader/class-use/UnoLoader.html \ -- com/sun/star/lib/unoloader/package-frame.html \ -- com/sun/star/lib/unoloader/package-summary.html \ -- com/sun/star/lib/unoloader/package-tree.html \ -- com/sun/star/lib/unoloader/package-use.html \ -- com/sun/star/lib/util/UrlToFileMapper.html \ -- com/sun/star/lib/util/class-use/UrlToFileMapper.html \ -- com/sun/star/lib/util/package-frame.html \ -- com/sun/star/lib/util/package-summary.html \ -- com/sun/star/lib/util/package-tree.html \ -- com/sun/star/lib/util/package-use.html \ -- com/sun/star/uno/Any.html \ -- com/sun/star/uno/AnyConverter.html \ -- com/sun/star/uno/Ascii.html \ -- com/sun/star/uno/AsciiString.html \ -- com/sun/star/uno/Enum.html \ -- com/sun/star/uno/IBridge.html \ -- com/sun/star/uno/IEnvironment.html \ -- com/sun/star/uno/IFieldDescription.html \ -- com/sun/star/uno/IMapping.html \ -- com/sun/star/uno/IMemberDescription.html \ -- com/sun/star/uno/IMethodDescription.html \ -- com/sun/star/uno/IQueryInterface.html \ -- com/sun/star/uno/ITypeDescription.html \ -- com/sun/star/uno/MappingException.html \ -- com/sun/star/uno/Type.html \ -- com/sun/star/uno/Union.html \ -- com/sun/star/uno/UnoRuntime.html \ -- com/sun/star/uno/WeakReference.html \ -- com/sun/star/uno/class-use/Any.html \ -- com/sun/star/uno/class-use/AnyConverter.html \ -- com/sun/star/uno/class-use/Ascii.html \ -- com/sun/star/uno/class-use/AsciiString.html \ -- com/sun/star/uno/class-use/Enum.html \ -- com/sun/star/uno/class-use/IBridge.html \ -- com/sun/star/uno/class-use/IEnvironment.html \ -- com/sun/star/uno/class-use/IFieldDescription.html \ -- com/sun/star/uno/class-use/IMapping.html \ -- com/sun/star/uno/class-use/IMemberDescription.html \ -- com/sun/star/uno/class-use/IMethodDescription.html \ -- com/sun/star/uno/class-use/IQueryInterface.html \ -- com/sun/star/uno/class-use/ITypeDescription.html \ -- com/sun/star/uno/class-use/MappingException.html \ -- com/sun/star/uno/class-use/Type.html \ -- com/sun/star/uno/class-use/Union.html \ -- com/sun/star/uno/class-use/UnoRuntime.html \ -- com/sun/star/uno/class-use/WeakReference.html \ -- com/sun/star/uno/package-frame.html \ -- com/sun/star/uno/package-summary.html \ -- com/sun/star/uno/package-tree.html \ -- com/sun/star/uno/package-use.html \ -- constant-values.html \ -- deprecated-list.html \ -- help-doc.html \ -- index-files/index-1.html \ -- index-files/index-10.html \ -- index-files/index-11.html \ -- index-files/index-12.html \ -- index-files/index-13.html \ -- index-files/index-14.html \ -- index-files/index-15.html \ -- index-files/index-16.html \ -- index-files/index-17.html \ -- index-files/index-18.html \ -- index-files/index-19.html \ -- index-files/index-2.html \ -- index-files/index-20.html \ -- index-files/index-21.html \ -- index-files/index-3.html \ -- index-files/index-4.html \ -- index-files/index-5.html \ -- index-files/index-6.html \ -- index-files/index-7.html \ -- index-files/index-8.html \ -- index-files/index-9.html \ -- index.html \ -- overview-frame.html \ -- overview-summary.html \ -- overview-tree.html \ -- package-list \ -- resources/background.gif \ -- resources/tab.gif \ -- resources/titlebar.gif \ -- resources/titlebar_end.gif \ -- serialized-form.html \ -- stylesheet.css \ --)) -- --# vim: set noet sw=4 ts=4: --- -1.9.0 - diff --git a/SOURCES/0001-DOCX-import-fix-handling-of-dropdown-SDT-around-cell.patch b/SOURCES/0001-DOCX-import-fix-handling-of-dropdown-SDT-around-cell.patch new file mode 100644 index 0000000..b79228a --- /dev/null +++ b/SOURCES/0001-DOCX-import-fix-handling-of-dropdown-SDT-around-cell.patch @@ -0,0 +1,103 @@ +From bb21f53e6c9b6b3f4a2d8c5e55ebc3a08caa69ba Mon Sep 17 00:00:00 2001 +From: Miklos Vajna +Date: Thu, 18 Sep 2014 15:47:59 +0200 +Subject: [PATCH] DOCX import: fix handling of dropdown SDT around cell + +There were two problems here: + +1) The CT_SdtContentCell handlers didn't emit the usual +NS_ooxml::LN_CT_SdtBlock_sdtContent / +NS_ooxml::LN_CT_SdtBlock_sdtEndContent tokens, so the dropdown control +was not created (and then was created with the wrong anchor). + +2) In case the SDT was around the cell, the newline character was also +added to the text of the currently selected entry, resulting in an +invalid argument of SwXText::convertToTable(), so no table was created. + +(cherry picked from commit 419054c0f19acb323a0e51c7ef49a1a2d9f42ac8) + +Conflicts: + sw/qa/extras/ooxmlexport/ooxmlexport.cxx + writerfilter/source/dmapper/DomainMapper.cxx + writerfilter/source/ooxml/model.xml + +Change-Id: I4806626181f40c6d26ff7b25f5dbb863967d8077 +--- + sw/qa/extras/ooxmlexport/ooxmlexport.cxx | 9 --------- + writerfilter/source/dmapper/DomainMapper.cxx | 14 +++++++++++--- + writerfilter/source/ooxml/model.xml | 5 ++++- + 3 files changed, 15 insertions(+), 13 deletions(-) + +diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx +index a443d58..24459d1 100644 +--- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx ++++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx +@@ -3566,15 +3566,6 @@ DECLARE_OOXMLEXPORT_TEST(testfdo79822, "fdo79822.docx") + return; + } + +-DECLARE_OOXMLEXPORT_TEST(testfdo79817,"fdo79817.docx") +-{ +- xmlDocPtr pXmlDoc = parseExport("word/document.xml"); +- if (!pXmlDoc) +- return; +- assertXPath ( pXmlDoc, "/w:document/w:body/w:p[3]/w:sdt/w:sdtPr/w:dataBinding", "storeItemID","{9222E47B-A68B-4AEB-9855-21C912B9D3D2}"); +- assertXPath ( pXmlDoc, "/w:document/w:body/w:p[3]/w:sdt/w:sdtPr/w:dataBinding", "xpath","/ns0:properties[1]/documentManagement[1]/ns2:Responsible_x0020_Officer_x0020_Title[1]"); +-} +- + DECLARE_OOXMLEXPORT_TEST(testfdo80522,"fdo80522.docx") + { + xmlDocPtr pXmlDoc = parseExport("[Content_Types].xml"); +diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx +index 44efb59..baf91d9 100644 +--- a/writerfilter/source/dmapper/DomainMapper.cxx ++++ b/writerfilter/source/dmapper/DomainMapper.cxx +@@ -2768,10 +2768,18 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len) + aBuffer.append( (const sal_Unicode *) data_, len); + sText = aBuffer.makeStringAndClear(); + ++ ++ bool bNewLine = len == 1 && (sText[0] == 0x0d || sText[0] == 0x07); + if (!m_pImpl->m_pSdtHelper->getDropDownItems().empty()) + { +- m_pImpl->m_pSdtHelper->getSdtTexts().append(sText); +- return; ++ if (bNewLine) ++ // Dropdown control has single-line texts, so in case of newline, create the control. ++ m_pImpl->m_pSdtHelper->createDropDownControl(); ++ else ++ { ++ m_pImpl->m_pSdtHelper->getSdtTexts().append(sText); ++ return; ++ } + } + else if (!m_pImpl->m_pSdtHelper->getDateFormat().isEmpty()) + { +@@ -2814,7 +2822,7 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len) + { + m_pImpl->getTableManager().utext(data_, len); + +- if(len == 1 && (sText[0] == 0x0d || sText[0] == 0x07)) ++ if (bNewLine) + { + if (m_pImpl->m_bIgnoreNextPara) + { +diff --git a/writerfilter/source/ooxml/model.xml b/writerfilter/source/ooxml/model.xml +index 69ac296..3f4e71c 100644 +--- a/writerfilter/source/ooxml/model.xml ++++ b/writerfilter/source/ooxml/model.xml +@@ -25033,7 +25033,10 @@ + + + +- ++ ++ ++ ++ + + + +-- +2.1.0 + diff --git a/SOURCES/0001-Disable-sdremote-by-default-and-improve-flow-control.patch b/SOURCES/0001-Disable-sdremote-by-default-and-improve-flow-control.patch deleted file mode 100644 index 30e62aa..0000000 --- a/SOURCES/0001-Disable-sdremote-by-default-and-improve-flow-control.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 99023fe9bd7d8b665faed7fe9cb98b3fb8922292 Mon Sep 17 00:00:00 2001 -From: Michael Meeks -Date: Tue, 7 Oct 2014 10:10:27 +0100 -Subject: [PATCH] Disable sdremote by default, and improve flow control. - -It was intended to disable sdremote by default when it exited -experimental mode. - -This reverts commit 576943b9bf7506829de97d2194c4bee35a485436. - -Change-Id: I2c1b5443e334021bd9574316167f48b1af6200e5 -Reviewed-on: https://gerrit.libreoffice.org/11837 -Reviewed-by: Jan Holesovsky -Tested-by: Jan Holesovsky ---- - officecfg/registry/schema/org/openoffice/Office/Impress.xcs | 2 +- - sd/source/ui/remotecontrol/Server.cxx | 6 +++++- - 2 files changed, 6 insertions(+), 2 deletions(-) - -diff --git a/officecfg/registry/schema/org/openoffice/Office/Impress.xcs b/officecfg/registry/schema/org/openoffice/Office/Impress.xcs -index b740aca..01836d6 100644 ---- a/officecfg/registry/schema/org/openoffice/Office/Impress.xcs -+++ b/officecfg/registry/schema/org/openoffice/Office/Impress.xcs -@@ -629,7 +629,7 @@ - Indicates whether to enable the Impress remote controller. - - -- true -+ false - - - -diff --git a/sd/source/ui/remotecontrol/Server.cxx b/sd/source/ui/remotecontrol/Server.cxx -index 51796cc..fb24e67 100644 ---- a/sd/source/ui/remotecontrol/Server.cxx -+++ b/sd/source/ui/remotecontrol/Server.cxx -@@ -115,7 +115,11 @@ void RemoteServer::execute() - { - OString aName( aLine ); - -- if ( ! pSocket->readLine( aLine ) ) delete pSocket; -+ if ( ! pSocket->readLine( aLine ) ) -+ { -+ delete pSocket; -+ continue; -+ } - OString aPin( aLine ); - - SocketAddr aClientAddr; --- -1.9.3 - diff --git a/SOURCES/0001-During-DocumentRedlineManager-SetRedlineMode-the-arr.patch b/SOURCES/0001-During-DocumentRedlineManager-SetRedlineMode-the-arr.patch new file mode 100644 index 0000000..bbd9f86 --- /dev/null +++ b/SOURCES/0001-During-DocumentRedlineManager-SetRedlineMode-the-arr.patch @@ -0,0 +1,414 @@ +From f3974a01283674f016ebd564652964302b1ab1e8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Fri, 30 Jan 2015 15:34:30 +0000 +Subject: [PATCH] During DocumentRedlineManager::SetRedlineMode the array + becomes unsorted +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +so GetPos cannot be used safely, so pass down the known index +of the redline and propogate it everywhere the redline goes + +This reverts + +commit 36e158ce7a0effb130936ba4598a193102faa6a1 +Author: Caolán McNamara +Date: Mon Jan 19 12:09:17 2015 +0000 + + if we change the keys we have to resort based on the new keys + +which tried to keep the table sorted, but thats no use because +DocumentRedlineManager::SetRedlineMode loops over by index +so sorting the table during the process busts that. + +Taking a copy of the entries and looping over that shows another +gadzillion problems. + +So try this approach instead. + +I imagine it should be possible to calculate the correct +current index of pRedl in DocumentRedlineManager::AppendRedline +but for now assume that we are sorted correctly at that +point and can use GetPos + +(cherry picked from commit a5a20187c3a5e5956492f932c49501f9547e4915) + +Conflicts: + sw/source/core/doc/DocumentRedlineManager.cxx + sw/source/core/doc/docredln.cxx + sw/source/core/undo/unredln.cxx + +Change-Id: If092dce185e3b36fd256db390132358cba155847 +--- + sw/inc/docary.hxx | 1 + + sw/inc/redline.hxx | 12 +++--- + sw/source/core/doc/docredln.cxx | 90 ++++++++++++++++++++--------------------- + sw/source/core/undo/unredln.cxx | 2 +- + 4 files changed, 51 insertions(+), 54 deletions(-) + +diff --git a/sw/inc/docary.hxx b/sw/inc/docary.hxx +index 94f8229..34f22ed 100644 +--- a/sw/inc/docary.hxx ++++ b/sw/inc/docary.hxx +@@ -195,6 +195,7 @@ public: + using _SwRedlineTbl::size; + using _SwRedlineTbl::operator[]; + using _SwRedlineTbl::empty; ++ using _SwRedlineTbl::Resort; + }; + + /// Table that holds 'extra' redlines, such as 'table row insert\delete', 'paragraph moves' etc... +diff --git a/sw/inc/redline.hxx b/sw/inc/redline.hxx +index ab1945b..b639063 100644 +--- a/sw/inc/redline.hxx ++++ b/sw/inc/redline.hxx +@@ -190,8 +190,8 @@ class SW_DLLPUBLIC SwRangeRedline : public SwPaM + + void MoveToSection(); + void CopyToSection(); +- void DelCopyOfSection(); +- void MoveFromSection(); ++ void DelCopyOfSection(size_t nMyPos); ++ void MoveFromSection(size_t nMyPos); + + public: + SwRangeRedline( RedlineType_t eType, const SwPaM& rPam ); +@@ -263,10 +263,10 @@ public: + // hide the Del-Redlines via Copy and Delete. + // Otherwise at Move the attribution would be handled incorrectly. + // All other callers must always give 0. +- void CallDisplayFunc( sal_uInt16 nLoop = 0 ); +- void Show( sal_uInt16 nLoop = 0 ); +- void Hide( sal_uInt16 nLoop = 0 ); +- void ShowOriginal( sal_uInt16 nLoop = 0 ); ++ void CallDisplayFunc(sal_uInt16 nLoop, size_t nMyPos); ++ void Show(sal_uInt16 nLoop , size_t nMyPos); ++ void Hide(sal_uInt16 nLoop , size_t nMyPos); ++ void ShowOriginal(sal_uInt16 nLoop, size_t nMyPos); + + /// Calculates the intersection with text node number nNdIdx. + void CalcStartEnd(sal_uLong nNdIdx, sal_Int32& rStart, sal_Int32& rEnd) const; +diff --git a/sw/source/core/doc/docredln.cxx b/sw/source/core/doc/docredln.cxx +index 8d3d704..fd2730e 100644 +--- a/sw/source/core/doc/docredln.cxx ++++ b/sw/source/core/doc/docredln.cxx +@@ -157,7 +157,7 @@ void SwDoc::SetRedlineMode( RedlineMode_t eMode ) + bool bSaveInXMLImportFlag = IsInXMLImport(); + SetInXMLImport( false ); + // and then hide/display everything +- void (SwRangeRedline::*pFnc)( sal_uInt16 ) = 0; ++ void (SwRangeRedline::*pFnc)(sal_uInt16, size_t) = 0; + + switch( nsRedlineMode_t::REDLINE_SHOW_MASK & eMode ) + { +@@ -179,10 +179,17 @@ void SwDoc::SetRedlineMode( RedlineMode_t eMode ) + + _CHECK_REDLINE( this ) + +- if( pFnc ) +- for( sal_uInt16 nLoop = 1; nLoop <= 2; ++nLoop ) +- for( sal_uInt16 i = 0; i < mpRedlineTbl->size(); ++i ) +- ((*mpRedlineTbl)[ i ]->*pFnc)( nLoop ); ++ if (pFnc) ++ { ++ for (sal_uInt16 nLoop = 1; nLoop <= 2; ++nLoop) ++ for (size_t i = 0; i < mpRedlineTbl->size(); ++i) ++ ((*mpRedlineTbl)[i]->*pFnc)(nLoop, i); ++ ++ //SwRangeRedline::MoveFromSection routinely changes ++ //the keys that mpRedlineTbl is sorted by ++ mpRedlineTbl->Resort(); ++ } ++ + _CHECK_REDLINE( this ) + SetInXMLImport( bSaveInXMLImportFlag ); + } +@@ -705,7 +712,7 @@ bool SwDoc::AppendRedline( SwRangeRedline* pNewRedl, bool bCallDelete ) + // We insert temporarily so that pNew is + // also dealt with when moving the indices. + mpRedlineTbl->Insert( pNewRedl ); +- pRedl->Show(); ++ pRedl->Show(0, mpRedlineTbl->GetPos(pRedl)); + mpRedlineTbl->Remove( pNewRedl ); + pRStt = pRedl->Start(); + pREnd = pRedl->End(); +@@ -882,7 +889,7 @@ bool SwDoc::AppendRedline( SwRangeRedline* pNewRedl, bool bCallDelete ) + pRedl->PushData( *pNewRedl ); + delete pNewRedl, pNewRedl = 0; + if( IsHideChanges( meRedlineMode )) +- pRedl->Hide(); ++ pRedl->Hide(0, mpRedlineTbl->GetPos(pRedl)); + bCompress = true; + } + break; +@@ -946,7 +953,7 @@ bool SwDoc::AppendRedline( SwRangeRedline* pNewRedl, bool bCallDelete ) + if( IsHideChanges( meRedlineMode )) + { + mpRedlineTbl->Insert( pNewRedl ); +- pRedl->Hide(); ++ pRedl->Hide(0, mpRedlineTbl->GetPos(pRedl)); + mpRedlineTbl->Remove( pNewRedl ); + } + } +@@ -974,7 +981,7 @@ bool SwDoc::AppendRedline( SwRangeRedline* pNewRedl, bool bCallDelete ) + if( IsHideChanges( meRedlineMode )) + { + mpRedlineTbl->Insert( pNewRedl ); +- pRedl->Hide(); ++ pRedl->Hide(0, mpRedlineTbl->GetPos(pRedl)); + mpRedlineTbl->Remove( pNewRedl ); + } + } +@@ -1255,7 +1262,7 @@ void SwDoc::CompressRedlines() + { + _CHECK_REDLINE( this ) + +- void (SwRangeRedline::*pFnc)(sal_uInt16) = 0; ++ void (SwRangeRedline::*pFnc)(sal_uInt16, size_t) = 0; + switch( nsRedlineMode_t::REDLINE_SHOW_MASK & meRedlineMode ) + { + case nsRedlineMode_t::REDLINE_SHOW_INSERT | nsRedlineMode_t::REDLINE_SHOW_DELETE: +@@ -1283,14 +1290,15 @@ void SwDoc::CompressRedlines() + !pCurEnd->nNode.GetNode().StartOfSectionNode()->IsTableNode() ) + { + // we then can merge them +- pPrev->Show(); +- pCur->Show(); ++ size_t nPrevIndex = n-1; ++ pPrev->Show(0, nPrevIndex); ++ pCur->Show(0, n); + + pPrev->SetEnd( *pCur->End() ); + mpRedlineTbl->DeleteAndDestroy( n ); + --n; + if( pFnc ) +- (pPrev->*pFnc)(0); ++ (pPrev->*pFnc)(0, nPrevIndex); + } + } + _CHECK_REDLINE( this ) +@@ -2751,8 +2759,10 @@ bool SwRedlineTbl::Insert( SwRangeRedline* p, bool bIns ) + bool bRet = false; + if( p->HasValidRange() ) + { +- bRet = insert( p ).second; +- p->CallDisplayFunc(); ++ std::pair<_SwRedlineTbl::const_iterator, bool> rv = insert( p ); ++ size_t nP = rv.first - begin(); ++ bRet = rv.second; ++ p->CallDisplayFunc(0, nP); + } + else if( bIns ) + bRet = InsertWithValidRanges( p ); +@@ -2771,7 +2781,7 @@ bool SwRedlineTbl::Insert( SwRangeRedline* p, sal_uInt16& rP, bool bIns ) + std::pair<_SwRedlineTbl::const_iterator, bool> rv = insert( p ); + rP = rv.first - begin(); + bRet = rv.second; +- p->CallDisplayFunc(); ++ p->CallDisplayFunc(0, rP); + } + else if( bIns ) + bRet = InsertWithValidRanges( p, &rP ); +@@ -2873,7 +2883,7 @@ bool SwRedlineTbl::InsertWithValidRanges( SwRangeRedline* p, sal_uInt16* pInsPos + pNew->HasValidRange() && + Insert( pNew, nInsPos ) ) + { +- pNew->CallDisplayFunc(); ++ pNew->CallDisplayFunc(0, nInsPos); + bAnyIns = true; + pNew = 0; + if( pInsPos && *pInsPos < nInsPos ) +@@ -3382,23 +3392,23 @@ bool SwRangeRedline::HasValidRange() const + return false; + } + +-void SwRangeRedline::CallDisplayFunc( sal_uInt16 nLoop ) ++void SwRangeRedline::CallDisplayFunc(sal_uInt16 nLoop, size_t nMyPos) + { + switch( nsRedlineMode_t::REDLINE_SHOW_MASK & GetDoc()->GetRedlineMode() ) + { + case nsRedlineMode_t::REDLINE_SHOW_INSERT | nsRedlineMode_t::REDLINE_SHOW_DELETE: +- Show( nLoop ); ++ Show(nLoop, nMyPos); + break; + case nsRedlineMode_t::REDLINE_SHOW_INSERT: +- Hide( nLoop ); ++ Hide(nLoop, nMyPos); + break; + case nsRedlineMode_t::REDLINE_SHOW_DELETE: +- ShowOriginal( nLoop ); ++ ShowOriginal(nLoop, nMyPos); + break; + } + } + +-void SwRangeRedline::Show( sal_uInt16 nLoop ) ++void SwRangeRedline::Show(sal_uInt16 nLoop, size_t nMyPos) + { + if( 1 <= nLoop ) + { +@@ -3411,12 +3421,12 @@ void SwRangeRedline::Show( sal_uInt16 nLoop ) + { + case nsRedlineType_t::REDLINE_INSERT: // Content has been inserted + bIsVisible = true; +- MoveFromSection(); ++ MoveFromSection(nMyPos); + break; + + case nsRedlineType_t::REDLINE_DELETE: // Content has been deleted + bIsVisible = true; +- MoveFromSection(); ++ MoveFromSection(nMyPos); + break; + + case nsRedlineType_t::REDLINE_FORMAT: // Attributes have been applied +@@ -3430,7 +3440,7 @@ void SwRangeRedline::Show( sal_uInt16 nLoop ) + } + } + +-void SwRangeRedline::Hide( sal_uInt16 nLoop ) ++void SwRangeRedline::Hide(sal_uInt16 nLoop, size_t nMyPos) + { + SwDoc* pDoc = GetDoc(); + RedlineMode_t eOld = pDoc->GetRedlineMode(); +@@ -3442,7 +3452,7 @@ void SwRangeRedline::Hide( sal_uInt16 nLoop ) + case nsRedlineType_t::REDLINE_INSERT: // Content has been inserted + bIsVisible = true; + if( 1 <= nLoop ) +- MoveFromSection(); ++ MoveFromSection(nMyPos); + break; + + case nsRedlineType_t::REDLINE_DELETE: // Content has been deleted +@@ -3451,7 +3461,7 @@ void SwRangeRedline::Hide( sal_uInt16 nLoop ) + { + case 0: MoveToSection(); break; + case 1: CopyToSection(); break; +- case 2: DelCopyOfSection(); break; ++ case 2: DelCopyOfSection(nMyPos); break; + } + break; + +@@ -3466,7 +3476,7 @@ void SwRangeRedline::Hide( sal_uInt16 nLoop ) + pDoc->SetRedlineMode_intern( eOld ); + } + +-void SwRangeRedline::ShowOriginal( sal_uInt16 nLoop ) ++void SwRangeRedline::ShowOriginal(sal_uInt16 nLoop, size_t nMyPos) + { + SwDoc* pDoc = GetDoc(); + RedlineMode_t eOld = pDoc->GetRedlineMode(); +@@ -3487,14 +3497,14 @@ void SwRangeRedline::ShowOriginal( sal_uInt16 nLoop ) + { + case 0: MoveToSection(); break; + case 1: CopyToSection(); break; +- case 2: DelCopyOfSection(); break; ++ case 2: DelCopyOfSection(nMyPos); break; + } + break; + + case nsRedlineType_t::REDLINE_DELETE: // Inhalt wurde eingefuegt + bIsVisible = true; + if( 1 <= nLoop ) +- MoveFromSection(); ++ MoveFromSection(nMyPos); + break; + + case nsRedlineType_t::REDLINE_FORMAT: // Attributes have been applied +@@ -3725,7 +3735,7 @@ void SwRangeRedline::CopyToSection() + } + } + +-void SwRangeRedline::DelCopyOfSection() ++void SwRangeRedline::DelCopyOfSection(size_t nMyPos) + { + if( pCntntSect ) + { +@@ -3772,7 +3782,7 @@ void SwRangeRedline::DelCopyOfSection() + // bDelLastPara condition above), only redlines before the + // current ones can be affected. + const SwRedlineTbl& rTbl = pDoc->GetRedlineTbl(); +- sal_uInt16 n = rTbl.GetPos( this ); ++ sal_uInt16 n = nMyPos; + OSL_ENSURE( n != USHRT_MAX, "How strange. We don't exist!" ); + for( bool bBreak = false; !bBreak && n > 0; ) + { +@@ -3813,16 +3823,13 @@ void SwRangeRedline::DelCopyOfSection() + } + } + +-void SwRangeRedline::MoveFromSection() ++void SwRangeRedline::MoveFromSection(size_t nMyPos) + { + if( pCntntSect ) + { + SwDoc* pDoc = GetDoc(); + const SwRedlineTbl& rTbl = pDoc->GetRedlineTbl(); + std::vector aBeforeArr, aBehindArr; +- typedef std::map IndexAndRange; +- IndexAndRange aIndexAndRangeMap; +- sal_uInt16 nMyPos = rTbl.GetPos( this ); + OSL_ENSURE( this, "this is not in the array?" ); + bool bBreak = false; + sal_uInt16 n; +@@ -3834,14 +3841,12 @@ void SwRangeRedline::MoveFromSection() + { + SwRangeRedline* pRedl = rTbl[n]; + aBehindArr.push_back(&pRedl->GetBound(true)); +- aIndexAndRangeMap.insert(std::make_pair(n, pRedl)); + bBreak = false; + } + if( rTbl[ n ]->GetBound(false) == *GetPoint() ) + { + SwRangeRedline* pRedl = rTbl[n]; + aBehindArr.push_back(&pRedl->GetBound(false)); +- aIndexAndRangeMap.insert(std::make_pair(n, pRedl)); + bBreak = false; + } + } +@@ -3853,14 +3858,12 @@ void SwRangeRedline::MoveFromSection() + { + SwRangeRedline* pRedl = rTbl[n]; + aBeforeArr.push_back(&pRedl->GetBound(true)); +- aIndexAndRangeMap.insert(std::make_pair(n, pRedl)); + bBreak = false; + } + if( rTbl[ n ]->GetBound(false) == *GetPoint() ) + { + SwRangeRedline* pRedl = rTbl[n]; + aBeforeArr.push_back(&pRedl->GetBound(false)); +- aIndexAndRangeMap.insert(std::make_pair(n, pRedl)); + bBreak = false; + } + } +@@ -3935,13 +3938,6 @@ void SwRangeRedline::MoveFromSection() + *aBeforeArr[ n ] = *Start(); + for( n = 0; n < aBehindArr.size(); ++n ) + *aBehindArr[ n ] = *End(); +- SwRedlineTbl& rResortTbl = const_cast(rTbl); +- for (auto& a : aIndexAndRangeMap) +- { +- // re-insert +- rResortTbl.Remove(a.first); +- rResortTbl.Insert(a.second); +- } + } + else + InvalidateRange(); +diff --git a/sw/source/core/undo/unredln.cxx b/sw/source/core/undo/unredln.cxx +index 283bf30..48b80c7 100644 +--- a/sw/source/core/undo/unredln.cxx ++++ b/sw/source/core/undo/unredln.cxx +@@ -243,7 +243,7 @@ void SwUndoRedlineSort::UndoRedlineImpl(SwDoc & rDoc, SwPaM & rPam) + OSL_ENSURE( USHRT_MAX != nFnd && nFnd+1 < (sal_uInt16)rDoc.GetRedlineTbl().size(), + "could not find an Insert object" ); + ++nFnd; +- rDoc.GetRedlineTbl()[nFnd]->Show( 1 ); ++ rDoc.GetRedlineTbl()[nFnd]->Show(1, nFnd); + } + + { +-- +1.9.3 + diff --git a/SOURCES/0001-KDE-don-t-throw-on-TemplatePathVariable.patch b/SOURCES/0001-KDE-don-t-throw-on-TemplatePathVariable.patch deleted file mode 100644 index 4959bd7..0000000 --- a/SOURCES/0001-KDE-don-t-throw-on-TemplatePathVariable.patch +++ /dev/null @@ -1,51 +0,0 @@ -From e44a7eefb7f632977b4c8c91ad14244372c6e04d Mon Sep 17 00:00:00 2001 -From: Maxim Monastirsky -Date: Wed, 26 Feb 2014 17:02:38 +0200 -Subject: [PATCH] KDE: don't throw on TemplatePathVariable -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This is required after commit -838b77f5f3d6d8fd98891e99a23ff78a6a357cb2. - -Actual functionality is still missing. - -Change-Id: Ib94d8a982609de730d9c61bf7bf9886093c51f5b -Reviewed-on: https://gerrit.libreoffice.org/8367 -Reviewed-by: Caolán McNamara -Tested-by: Caolán McNamara ---- - shell/source/backends/kde4be/kde4backend.cxx | 2 +- - shell/source/backends/kdebe/kdebackend.cxx | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/shell/source/backends/kde4be/kde4backend.cxx b/shell/source/backends/kde4be/kde4backend.cxx -index bf12683..1d486e4 100644 ---- a/shell/source/backends/kde4be/kde4backend.cxx -+++ b/shell/source/backends/kde4be/kde4backend.cxx -@@ -172,7 +172,7 @@ css::uno::Any Service::getPropertyValue(OUString const & PropertyName) - || PropertyName == "SourceViewFontName" || PropertyName == "WorkPathVariable" || PropertyName == "ooInetFTPProxyName" - || PropertyName == "ooInetFTPProxyPort" || PropertyName == "ooInetHTTPProxyName" || PropertyName == "ooInetHTTPProxyPort" - || PropertyName == "ooInetHTTPSProxyName" || PropertyName == "ooInetHTTPSProxyPort" || PropertyName == "ooInetNoProxy" -- || PropertyName == "ooInetProxyType" ) -+ || PropertyName == "ooInetProxyType" || PropertyName == "TemplatePathVariable" ) - { - return css::uno::makeAny( - enabled_ -diff --git a/shell/source/backends/kdebe/kdebackend.cxx b/shell/source/backends/kdebe/kdebackend.cxx -index 8089632..08915e8 100644 ---- a/shell/source/backends/kdebe/kdebackend.cxx -+++ b/shell/source/backends/kdebe/kdebackend.cxx -@@ -172,7 +172,7 @@ css::uno::Any Service::getPropertyValue(OUString const & PropertyName) - || PropertyName == "SourceViewFontName" || PropertyName == "WorkPathVariable" || PropertyName == "ooInetFTPProxyName" - || PropertyName == "ooInetFTPProxyPort" || PropertyName == "ooInetHTTPProxyName" || PropertyName == "ooInetHTTPProxyPort" - || PropertyName == "ooInetHTTPSProxyName" || PropertyName == "ooInetHTTPSProxyPort" || PropertyName == "ooInetNoProxy" -- || PropertyName == "ooInetProxyType" ) -+ || PropertyName == "ooInetProxyType" || PropertyName == "TemplatePathVariable" ) - { - return css::uno::makeAny( - enabled_ --- -1.8.5.3 - diff --git a/SOURCES/0001-Package-GeneratedPackage-fixup.patch b/SOURCES/0001-Package-GeneratedPackage-fixup.patch deleted file mode 100644 index db1ebba..0000000 --- a/SOURCES/0001-Package-GeneratedPackage-fixup.patch +++ /dev/null @@ -1,26 +0,0 @@ -From c17e40a9b712142c268e0f57fe2e092350d2f2c0 Mon Sep 17 00:00:00 2001 -From: Stephan Bergmann -Date: Tue, 25 Feb 2014 16:03:21 +0100 -Subject: [PATCH] Package -> GeneratedPackage fixup - -Change-Id: Ib6e7a456b2f39c47da44552184669005d18d4fa4 ---- - odk/CustomTarget_check.mk | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/odk/CustomTarget_check.mk b/odk/CustomTarget_check.mk -index 88af63a..175d44d 100644 ---- a/odk/CustomTarget_check.mk -+++ b/odk/CustomTarget_check.mk -@@ -38,7 +38,7 @@ $(call gb_CustomTarget_get_workdir,odk/check)/checkbin : \ - ) \ - $(call gb_Package_get_target,odk_docs) \ - $(call gb_Package_get_target,odk_html) \ -- $(if $(ENABLE_JAVA),$(call gb_Package_get_target,odk_javadoc)) \ -+ $(if $(ENABLE_JAVA),$(call gb_GeneratedPackage_get_target,odk_javadoc)) \ - $(call gb_Package_get_target,odk_lib) \ - $(call gb_Package_get_target,odk_settings) \ - $(call gb_Package_get_target,odk_settings_generated) \ --- -1.9.0 - diff --git a/SOURCES/0001-Related-fdo-36815-center-scaled-comment-page-vertica.patch b/SOURCES/0001-Related-fdo-36815-center-scaled-comment-page-vertica.patch deleted file mode 100644 index 501825f..0000000 --- a/SOURCES/0001-Related-fdo-36815-center-scaled-comment-page-vertica.patch +++ /dev/null @@ -1,104 +0,0 @@ -From 9fd97266ce7dbeac33c93b6dace69d64c02d222c Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= -Date: Wed, 23 Apr 2014 15:22:13 +0100 -Subject: [PATCH] Related: fdo#36815 center scaled comment page vertically - -so comments at the top of the page don't get clipped -off the true printable area - -Change-Id: Icb796c901372437b276e7ce4e31c08e0bf2ec250 ---- - sw/source/core/view/vprint.cxx | 56 +++++++++++++++--------------------------- - 1 file changed, 20 insertions(+), 36 deletions(-) - -diff --git a/sw/source/core/view/vprint.cxx b/sw/source/core/view/vprint.cxx -index b680e52..0022fff 100644 ---- a/sw/source/core/view/vprint.cxx -+++ b/sw/source/core/view/vprint.cxx -@@ -455,26 +455,6 @@ sal_Bool SwViewShell::PrintOrPDFExport( - // output device is now provided by a call from outside the Writer) - pOutDev->Push(); - -- // fdo#36815 for comments in margins print to a metafile -- // and then scale that metafile down so that the comments -- // will fit on the real page, and replay that scaled -- // output to the real outputdevice -- GDIMetaFile *pOrigRecorder(NULL); -- GDIMetaFile *pMetaFile(NULL); -- sal_Int16 nPostItMode = rPrintData.GetPrintPostIts(); -- if (nPostItMode == POSTITS_INMARGINS) -- { -- //get and disable the existing recorder -- pOrigRecorder = pOutDev->GetConnectMetaFile(); -- pOutDev->SetConnectMetaFile(NULL); -- // turn off output to the device -- pOutDev->EnableOutput(false); -- // just record the rendering commands to the metafile -- // instead -- pMetaFile = new GDIMetaFile; -- pMetaFile->Record(pOutDev); -- } -- - // Print/PDF export for (multi-)selection has already generated a - // temporary document with the selected text. - // (see XRenderable implementation in unotxdoc.cxx) -@@ -490,6 +470,8 @@ sal_Bool SwViewShell::PrintOrPDFExport( - pDrawView->SetBufferedOverlayAllowed( false ); - } - -+ sal_Int16 nPostItMode = rPrintData.GetPrintPostIts(); -+ - { // additional scope so that the CurrShell is reset before destroying the shell - - SET_CURR_SHELL( pShell ); -@@ -537,22 +519,6 @@ sal_Bool SwViewShell::PrintOrPDFExport( - pPostItManager->CalcRects(); - pPostItManager->LayoutPostIts(); - pPostItManager->DrawNotesForPage(pOutDev, nPage-1); -- -- //Now scale the recorded page down so the notes -- //will fit in the final page -- pMetaFile->Stop(); -- pMetaFile->WindStart(); -- double fScale = 0.75; -- pMetaFile->Scale( fScale, fScale ); -- pMetaFile->WindStart(); -- -- //Enable output the the device again -- pOutDev->EnableOutput(true); -- //Restore the original recorder -- pOutDev->SetConnectMetaFile(pOrigRecorder); -- //play back the scaled page -- pMetaFile->Play(pOutDev); -- delete pMetaFile; - } - } - -@@ -562,6 +528,24 @@ sal_Bool SwViewShell::PrintOrPDFExport( - // output device is now provided by a call from outside the Writer) - pOutDev->Pop(); - -+ // fdo#36815 for comments in margins get the metafile we are printing to -+ // and then scale and vertically center that metafile down so that the -+ // comments will fit on the real page -+ GDIMetaFile *pRecorder = pOutDev->GetConnectMetaFile(); -+ if (nPostItMode == POSTITS_INMARGINS && pRecorder) -+ { -+ pRecorder->Stop(); -+ pRecorder->WindStart(); -+ double fScale = 0.75; -+ long nOrigHeight = pOutDev->GetOutputSize().Height(); -+ long nNewHeight = nOrigHeight*fScale; -+ long nShiftY = (nOrigHeight-nNewHeight)/2; -+ pRecorder->Scale(fScale, fScale); -+ pRecorder->WindStart(); -+ pRecorder->Move(0, nShiftY, pOutDev->ImplGetDPIX(), pOutDev->ImplGetDPIY()); -+ pRecorder->WindStart(); -+ } -+ - return sal_True; - } - --- -1.9.0 - diff --git a/SOURCES/0001-Related-fdo-36815-clip-overlarge-comment-contents.patch b/SOURCES/0001-Related-fdo-36815-clip-overlarge-comment-contents.patch deleted file mode 100644 index 5e76743..0000000 --- a/SOURCES/0001-Related-fdo-36815-clip-overlarge-comment-contents.patch +++ /dev/null @@ -1,102 +0,0 @@ -From 0709713ad7ee0fa26b2a4f12720834e47e5dd681 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= -Date: Tue, 6 May 2014 15:56:23 +0100 -Subject: [PATCH] Related: fdo#36815 clip overlarge comment contents - -and add an indicator that the comment won't fit in the space available - -Change-Id: I8dce7dfa678a606e8c4532addc4ba70c2a43644e ---- - sw/source/ui/docvw/SidebarTxtControl.cxx | 23 ++++------------------- - sw/source/ui/docvw/SidebarWin.cxx | 31 ++++++++++++++++++++++--------- - 2 files changed, 26 insertions(+), 28 deletions(-) - -diff --git a/sw/source/ui/docvw/SidebarTxtControl.cxx b/sw/source/ui/docvw/SidebarTxtControl.cxx -index 15af740..889c3bb 100644 ---- a/sw/source/ui/docvw/SidebarTxtControl.cxx -+++ b/sw/source/ui/docvw/SidebarTxtControl.cxx -@@ -120,28 +120,13 @@ void SidebarTxtControl::RequestHelp(const HelpEvent &rEvt) - - void SidebarTxtControl::Draw(OutputDevice* pDev, const Point& rPt, const Size& rSz, sal_uLong) - { -- if ( !Application::GetSettings().GetStyleSettings().GetHighContrastMode() ) -- { -- if ( mrSidebarWin.IsMouseOverSidebarWin() || -- HasFocus() ) -- { -- pDev->DrawGradient( Rectangle( Point(0,0) + rPt, PixelToLogic(GetSizePixel()) ), -- Gradient( GradientStyle_LINEAR, -- mrSidebarWin.ColorDark(), -- mrSidebarWin.ColorDark() ) ); -- } -- else -- { -- pDev->DrawGradient( Rectangle( Point(0,0) + rPt, PixelToLogic(GetSizePixel()) ), -- Gradient( GradientStyle_LINEAR, -- mrSidebarWin.ColorLight(), -- mrSidebarWin.ColorDark())); -- } -- } -+ //Take the control's height, but overwrite the scrollbar area if there was one -+ Size aSize(PixelToLogic(GetSizePixel())); -+ aSize.Width() = rSz.Width(); - - if ( GetTextView() ) - { -- GetTextView()->GetOutliner()->Draw(pDev, Rectangle(rPt, rSz)); -+ GetTextView()->GetOutliner()->Draw(pDev, Rectangle(rPt, aSize)); - } - - if ( mrSidebarWin.GetLayoutStatus()==SwPostItHelper::DELETED ) -diff --git a/sw/source/ui/docvw/SidebarWin.cxx b/sw/source/ui/docvw/SidebarWin.cxx -index c3aa5b0..ebc4d4c 100644 ---- a/sw/source/ui/docvw/SidebarWin.cxx -+++ b/sw/source/ui/docvw/SidebarWin.cxx -@@ -218,15 +218,7 @@ void SwSidebarWin::Draw(OutputDevice* pDev, const Point& rPt, const Size& rSz, s - { - if (mpMetadataAuthor->IsVisible() ) - { -- //draw left over space -- if ( Application::GetSettings().GetStyleSettings().GetHighContrastMode() ) -- { -- pDev->SetFillColor(COL_BLACK); -- } -- else -- { -- pDev->SetFillColor(mColorDark); -- } -+ pDev->SetFillColor(mColorDark); - pDev->SetLineColor(); - pDev->DrawRect( Rectangle( rPt, rSz ) ); - } -@@ -265,6 +257,27 @@ void SwSidebarWin::Draw(OutputDevice* pDev, const Point& rPt, const Size& rSz, s - - pProcessor->process(rSequence); - delete pProcessor; -+ -+ if (mpVScrollbar->IsVisible()) -+ { -+ Font aOrigFont(mpMetadataDate->GetControlFont()); -+ Color aOrigBg( mpMetadataDate->GetControlBackground() ); -+ OUString sOrigText(mpMetadataDate->GetText()); -+ -+ Size aSize(PixelToLogic(mpMenuButton->GetSizePixel())); -+ Point aPos(PixelToLogic(mpMenuButton->GetPosPixel())); -+ aPos += rPt; -+ -+ Font aFont( mpMetadataDate->GetSettings().GetStyleSettings().GetFieldFont() ); -+ mpMetadataDate->SetControlFont( aFont ); -+ mpMetadataDate->SetControlBackground( 0xFFFFFF ); -+ mpMetadataDate->SetText("..."); -+ mpMetadataDate->Draw(pDev, aPos, aSize, nInFlags); -+ -+ mpMetadataDate->SetText(sOrigText); -+ mpMetadataDate->SetControlFont( aOrigFont ); -+ mpMetadataDate->SetControlBackground( aOrigBg ); -+ } - } - - void SwSidebarWin::SetPosSizePixelRect( long nX, --- -1.9.0 - diff --git a/SOURCES/0001-Related-fdo-36815-print-the-text-highlight-range-as-.patch b/SOURCES/0001-Related-fdo-36815-print-the-text-highlight-range-as-.patch deleted file mode 100644 index 9a34fea..0000000 --- a/SOURCES/0001-Related-fdo-36815-print-the-text-highlight-range-as-.patch +++ /dev/null @@ -1,24 +0,0 @@ -From fede08ac7d8b9d6c0abd2ba1b09fd3beb1c1b7e7 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= -Date: Thu, 17 Apr 2014 08:41:07 +0100 -Subject: [PATCH] Related: fdo#36815 print the text highlight range as well - -Change-Id: Ic332b1968b5dc72d26bd704cce70a496ec81e0b8 ---- - sw/source/core/layout/paintfrm.cxx | 2 +- - sw/source/core/uibase/docvw/SidebarWin.cxx | 4 ++-- - 2 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/sw/source/core/layout/paintfrm.cxx b/sw/source/core/layout/paintfrm.cxx -index a5cbf3b..eb3133a 100644 ---- a/sw/source/core/layout/paintfrm.cxx -+++ b/sw/source/core/layout/paintfrm.cxx -@@ -6172,7 +6172,7 @@ static void lcl_paintBitmapExToRect(OutputDevice *pOut, const Point& aPoint, con - SwAlignRect( aPageRect, _pViewShell ); - - const SwPostItMgr *pMgr = _pViewShell->GetPostItMgr(); -- if (pMgr /*&& pMgr->ShowNotes()*/ && pMgr->HasNotes()) // do not show anything in print preview -+ if (pMgr && pMgr->ShowNotes() && pMgr->HasNotes()) // do not show anything in print preview - { - sal_Int32 nScrollerHeight = pMgr->GetSidebarScrollerHeight(); - const Rectangle &aVisRect = _pViewShell->VisArea().SVRect(); diff --git a/SOURCES/0001-Related-fdo-50697-reset-the-cache-timeout-on-GetGrap.patch b/SOURCES/0001-Related-fdo-50697-reset-the-cache-timeout-on-GetGrap.patch deleted file mode 100644 index 441a047..0000000 --- a/SOURCES/0001-Related-fdo-50697-reset-the-cache-timeout-on-GetGrap.patch +++ /dev/null @@ -1,63 +0,0 @@ -From 62b0eaf37c08dd27244e77b8bc90c691b000ebd6 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= -Date: Tue, 29 Apr 2014 14:17:11 +0100 -Subject: [PATCH] Related: fdo#50697 reset the cache timeout on GetGraphic - -so the graphic gets swapped out Xms after the last use and not Xms after -initial creation regardless of if it got used a moment earlier. - -Change-Id: I1458f307d090ecd8d8d031b545f23e78bf1bcb67 ---- - include/svtools/grfmgr.hxx | 2 ++ - svtools/source/graphic/grfmgr.cxx | 20 ++++++++++++++++++-- - 2 files changed, 20 insertions(+), 2 deletions(-) - -diff --git a/include/svtools/grfmgr.hxx b/include/svtools/grfmgr.hxx -index 3e1423a..251ee6d 100644 ---- a/include/svtools/grfmgr.hxx -+++ b/include/svtools/grfmgr.hxx -@@ -299,6 +299,8 @@ private: - - DECL_LINK( ImplAutoSwapOutHdl, void* ); - -+ void SVT_DLLPRIVATE ResetCacheTimeOut(); -+ - protected: - - virtual void GraphicManagerDestroyed(); -diff --git a/svtools/source/graphic/grfmgr.cxx b/svtools/source/graphic/grfmgr.cxx -index 087d27b..a405ea7 100644 ---- a/svtools/source/graphic/grfmgr.cxx -+++ b/svtools/source/graphic/grfmgr.cxx -@@ -744,10 +744,26 @@ void GraphicObject::StopAnimation( OutputDevice* pOut, long nExtraData ) - mpSimpleCache->maGraphic.StopAnimation( pOut, nExtraData ); - } - -+void GraphicObject::ResetCacheTimeOut() -+{ -+ if (mpSwapOutTimer) -+ { -+ mpSwapOutTimer->Stop(); -+ mpSwapOutTimer->Start(); -+ } -+} -+ - const Graphic& GraphicObject::GetGraphic() const - { -- if( mbAutoSwapped ) -- ( (GraphicObject*) this )->ImplAutoSwapIn(); -+ GraphicObject *pThis = const_cast(this); -+ -+ if (mbAutoSwapped) -+ pThis->ImplAutoSwapIn(); -+ -+ //fdo#50697 If we've been asked to provide the graphic, then reset -+ //the cache timeout to start from now and not remain at the -+ //time of creation -+ pThis->ResetCacheTimeOut(); - - return maGraphic; - } --- -1.9.0 - diff --git a/SOURCES/0001-Related-fdo-78151-only-make-outline-title-and-subtit.patch b/SOURCES/0001-Related-fdo-78151-only-make-outline-title-and-subtit.patch new file mode 100644 index 0000000..efbf420 --- /dev/null +++ b/SOURCES/0001-Related-fdo-78151-only-make-outline-title-and-subtit.patch @@ -0,0 +1,43 @@ +From f8533123802c5a709280dd06b4452d00a11c71b1 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Wed, 3 Dec 2014 10:49:15 +0000 +Subject: [PATCH] Related: fdo#78151 only make outline, title and subtitle + read-only + +Change-Id: Ic62291a61f6f4c055255f644df5f5e02fe6d0801 +--- + sd/source/ui/view/sdview.cxx | 18 ++++++++++++++++-- + 1 file changed, 16 insertions(+), 2 deletions(-) + +diff --git a/sd/source/ui/view/sdview.cxx b/sd/source/ui/view/sdview.cxx +index 9b93c8c..1eb87b5 100644 +--- a/sd/source/ui/view/sdview.cxx ++++ b/sd/source/ui/view/sdview.cxx +@@ -738,8 +738,22 @@ bool View::SdrBeginTextEdit( + } + } + +- if (bMasterPage && bReturn) +- maMasterViewFilter.Start(pOutl); ++ if (bMasterPage && bReturn && pOutl) ++ { ++ const SdrTextObj* pTextObj = pOutl->GetTextObj(); ++ const SdPage* pSdPage = pTextObj ? static_cast(pTextObj->GetPage()) : NULL; ++ const PresObjKind eKind = pSdPage ? pSdPage->GetPresObjKind(const_cast(pTextObj)) : PRESOBJ_NONE; ++ switch (eKind) ++ { ++ case PRESOBJ_TITLE: ++ case PRESOBJ_OUTLINE: ++ case PRESOBJ_TEXT: ++ maMasterViewFilter.Start(pOutl); ++ break; ++ default: ++ break; ++ } ++ } + + return bReturn; + } +-- +1.9.3 + diff --git a/SOURCES/0001-Related-fdo-87242-init-VirtualDevice-with-size-of-su.patch b/SOURCES/0001-Related-fdo-87242-init-VirtualDevice-with-size-of-su.patch new file mode 100644 index 0000000..5875b6c --- /dev/null +++ b/SOURCES/0001-Related-fdo-87242-init-VirtualDevice-with-size-of-su.patch @@ -0,0 +1,559 @@ +From bc839c159d4ee94ef8ca08975cf65be37378ae04 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Thu, 11 Dec 2014 16:20:49 +0000 +Subject: [PATCH] Related: fdo#87242 init VirtualDevice with size of surface + +otherwise vcl's clipping doesn't work quite right when the render text +with vcl apis fallback is used. + +Manually forced in my case, but it should happen in practice with vertical +text, so if there is a bug about vertical text not appearing in slideshows then +this is part of the fix for that. + +Windows and Mac remain unchanged as initialized with 1, 1. If the same problem +affects those platforms then they'll need to be adjusted to remember their +height/widths from the ctor and those values plugged in here instead + +(cherry picked from commit f95b0743da4239e047db8638c61f90f8bbe54306) +(cherry picked from commit e2be2c23c1ad61b3bd640be6f16d66f5cd925d38) + +Conflicts: + desktop/source/lib/init.cxx + +Related: fdo#87242 merge duplicate clip setup code + +favoring the vclcanvas one for the places where +they diverge + +(cherry picked from commit f88b5ab8692ee7ecf58b570e703d0e7f10cc2f0d) +(cherry picked from commit e0e96579ce3a248ee5d3b07ecf90f38e2020c555) + +Conflicts: + canvas/source/cairo/cairo_canvashelper_text.cxx + canvas/source/vcl/canvashelper.cxx + +Resolves: fdo#87242 reuse vcl clip for cairo during animations + +(cherry picked from commit 94d935eecbba0161de2616c2234b4a5d9d3cad88) +(cherry picked from commit 3a108b0600ce61f7960d561cee9989ab3a48780f) + +stray debugging code + +(cherry picked from commit 067b560335195b24eeedc4514956029ea975fbbf) +(cherry picked from commit fafc85559097166eceb67c4db4528cc9977e4184) + +Change-Id: I2f82f0db0cf446d7db21f0a7ee4f8c15c7ebdb42 +18e3d4e7659ebd4cb90c86718c1b1035671b4be3 +0a26d4c4092226732620c3852b0402ee45d4fa1d +953389e236739c01226365c33ab777fc3972b69d +--- + canvas/source/cairo/cairo_canvashelper.hxx | 3 + + canvas/source/cairo/cairo_canvashelper_text.cxx | 117 ++++++++++-------------- + canvas/source/cairo/cairo_quartz_cairo.cxx | 2 +- + canvas/source/cairo/cairo_win32_cairo.cxx | 2 +- + canvas/source/cairo/cairo_xlib_cairo.cxx | 7 +- + canvas/source/tools/canvastools.cxx | 75 +++++++++++++++ + canvas/source/vcl/canvashelper.cxx | 79 +--------------- + include/canvas/canvastools.hxx | 6 ++ + include/vcl/virdev.hxx | 3 +- + vcl/source/gdi/virdev.cxx | 6 +- + 10 files changed, 147 insertions(+), 153 deletions(-) + +diff --git a/canvas/source/cairo/cairo_canvashelper.hxx b/canvas/source/cairo/cairo_canvashelper.hxx +index 9258e7c..ccb03ac 100644 +--- a/canvas/source/cairo/cairo_canvashelper.hxx ++++ b/canvas/source/cairo/cairo_canvashelper.hxx +@@ -310,6 +310,9 @@ namespace cairocanvas + ::cairo::CairoSharedPtr mpCairo; + ::cairo::SurfaceSharedPtr mpSurface; + ::basegfx::B2ISize maSize; ++ ++ void clip_cairo_from_dev(::OutputDevice& rOutDev); ++ + }; + + /// also needed from SpriteHelper +diff --git a/canvas/source/cairo/cairo_canvashelper_text.cxx b/canvas/source/cairo/cairo_canvashelper_text.cxx +index d65f2de..78a2ddf 100644 +--- a/canvas/source/cairo/cairo_canvashelper_text.cxx ++++ b/canvas/source/cairo/cairo_canvashelper_text.cxx +@@ -127,73 +127,7 @@ namespace cairocanvas + + // TODO(P2): Don't change clipping all the time, maintain current clip + // state and change only when update is necessary +- +- // accumulate non-empty clips into one region +- // ========================================== +- +- Region aClipRegion; +- +- if( viewState.Clip.is() ) +- { +- ::basegfx::B2DPolyPolygon aClipPoly( +- ::basegfx::unotools::b2DPolyPolygonFromXPolyPolygon2D( +- viewState.Clip) ); +- +- if( aClipPoly.count() ) +- { +- // setup non-empty clipping +- ::basegfx::B2DHomMatrix aMatrix; +- aClipPoly.transform( +- ::basegfx::unotools::homMatrixFromAffineMatrix( aMatrix, +- viewState.AffineTransform ) ); +- +- aClipRegion = Region::GetRegionFromPolyPolygon( ::PolyPolygon( aClipPoly ) ); +- } +- } +- +- if( renderState.Clip.is() ) +- { +- ::basegfx::B2DPolyPolygon aClipPoly( +- ::basegfx::unotools::b2DPolyPolygonFromXPolyPolygon2D( +- renderState.Clip) ); +- +- ::basegfx::B2DHomMatrix aMatrix; +- aClipPoly.transform( +- ::canvas::tools::mergeViewAndRenderTransform( aMatrix, +- viewState, +- renderState ) ); +- +- if( aClipPoly.count() ) +- { +- // setup non-empty clipping +- Region aRegion = Region::GetRegionFromPolyPolygon( ::PolyPolygon( aClipPoly ) ); +- +- if( aClipRegion.IsEmpty() ) +- aClipRegion = aRegion; +- else +- aClipRegion.Intersect( aRegion ); +- } +- else +- { +- // clip polygon is empty +- aClipRegion.SetEmpty(); +- } +- } +- +- // setup accumulated clip region. Note that setting an +- // empty clip region denotes "clip everything" on the +- // OutputDevice (which is why we translate that into +- // SetClipRegion() here). When both view and render clip +- // are empty, aClipRegion remains default-constructed, +- // i.e. empty, too. +- if( aClipRegion.IsEmpty() ) +- { +- rOutDev.SetClipRegion(); +- } +- else +- { +- rOutDev.SetClipRegion( aClipRegion ); +- } ++ ::canvas::tools::clipOutDev(viewState, renderState, rOutDev); + + if( eColorType != IGNORE_COLOR ) + { +@@ -238,6 +172,31 @@ namespace cairocanvas + return nTransparency; + } + ++ class DeviceSettingsGuard ++ { ++ private: ++ OutputDevice *mpVirtualDevice; ++ cairo_t *mpCairo; ++ bool mbMappingWasEnabled; ++ public: ++ DeviceSettingsGuard(OutputDevice *pVirtualDevice, cairo_t *pCairo) ++ : mpVirtualDevice(pVirtualDevice) ++ , mpCairo(pCairo) ++ , mbMappingWasEnabled(mpVirtualDevice->IsMapModeEnabled()) ++ { ++ cairo_save(mpCairo); ++ mpVirtualDevice->Push(); ++ mpVirtualDevice->EnableMapMode(false); ++ } ++ ++ ~DeviceSettingsGuard() ++ { ++ mpVirtualDevice->EnableMapMode(mbMappingWasEnabled); ++ mpVirtualDevice->Pop(); ++ cairo_restore(mpCairo); ++ } ++ }; ++ + bool setupTextOutput( OutputDevice& rOutDev, + const rendering::XCanvas* pOwner, + ::Point& o_rOutPos, +@@ -247,14 +206,12 @@ namespace cairocanvas + { + setupOutDevState( rOutDev, pOwner, viewState, renderState, TEXT_COLOR ); + +- ::Font aVCLFont; +- + CanvasFont* pFont = dynamic_cast< CanvasFont* >( xFont.get() ); + + ENSURE_ARG_OR_THROW( pFont, + "CanvasHelper::setupTextOutput(): Font not compatible with this canvas" ); + +- aVCLFont = pFont->getVCLFont(); ++ ::Font aVCLFont = pFont->getVCLFont(); + + Color aColor( COL_BLACK ); + +@@ -273,10 +230,20 @@ namespace cairocanvas + + rOutDev.SetFont( aVCLFont ); + +- + return true; + } + ++ //set the clip of the rOutDev to the cairo surface ++ void CanvasHelper::clip_cairo_from_dev(::OutputDevice& rOutDev) ++ { ++ Region aRegion(rOutDev.GetClipRegion()); ++ if (!aRegion.IsEmpty() && !aRegion.IsNull()) ++ { ++ doPolyPolygonImplementation(aRegion.GetAsB2DPolyPolygon(), Clip, mpCairo.get(), ++ NULL, mpSurfaceProvider, rendering::FillRule_EVEN_ODD); ++ } ++ } ++ + uno::Reference< rendering::XCachedPrimitive > CanvasHelper::drawText( const rendering::XCanvas* pOwner, + const rendering::StringContext& text, + const uno::Reference< rendering::XCanvasFont >& xFont, +@@ -297,6 +264,8 @@ namespace cairocanvas + + if( mpVirtualDevice ) + { ++ DeviceSettingsGuard aGuard(mpVirtualDevice.get(), mpCairo.get()); ++ + #if defined CAIRO_HAS_WIN32_SURFACE + // FIXME: Some kind of work-araound... + cairo_rectangle (mpSurface->getCairo().get(), 0, 0, 0, 0); +@@ -330,6 +299,8 @@ namespace cairocanvas + // TODO(F2): alpha + mpVirtualDevice->SetLayoutMode( nLayoutMode ); + ++ clip_cairo_from_dev(*mpVirtualDevice); ++ + OSL_TRACE(":cairocanvas::CanvasHelper::drawText(O,t,f,v,r,d): %s", OUStringToOString( text.Text.copy( text.StartPosition, text.Length ), + RTL_TEXTENCODING_UTF8 ).getStr()); + +@@ -357,6 +328,8 @@ namespace cairocanvas + + if( mpVirtualDevice ) + { ++ DeviceSettingsGuard aGuard(mpVirtualDevice.get(), mpCairo.get()); ++ + #if defined CAIRO_HAS_WIN32_SURFACE + // FIXME: Some kind of work-araound... + cairo_rectangle( mpSurface->getCairo().get(), 0, 0, 0, 0); +@@ -371,6 +344,8 @@ namespace cairocanvas + if( !setupTextOutput( *mpVirtualDevice, pOwner, aOutpos, viewState, renderState, xLayoutedText->getFont() ) ) + return uno::Reference< rendering::XCachedPrimitive >(NULL); // no output necessary + ++ clip_cairo_from_dev(*mpVirtualDevice); ++ + // TODO(F2): What about the offset scalings? + pTextLayout->draw( mpSurface, *mpVirtualDevice, aOutpos, viewState, renderState ); + } +diff --git a/canvas/source/cairo/cairo_quartz_cairo.cxx b/canvas/source/cairo/cairo_quartz_cairo.cxx +index 07951ee..6b8b9aa 100644 +--- a/canvas/source/cairo/cairo_quartz_cairo.cxx ++++ b/canvas/source/cairo/cairo_quartz_cairo.cxx +@@ -269,7 +269,7 @@ namespace cairo + aSystemGraphicsData.nSize = sizeof(SystemGraphicsData); + aSystemGraphicsData.rCGContext = getCGContext(); + return boost::shared_ptr( +- new VirtualDevice( &aSystemGraphicsData, getDepth() )); ++ new VirtualDevice( &aSystemGraphicsData, Size(1, 1), getDepth() )); + } + + /** +diff --git a/canvas/source/cairo/cairo_win32_cairo.cxx b/canvas/source/cairo/cairo_win32_cairo.cxx +index a70add9..8d53b4f 100644 +--- a/canvas/source/cairo/cairo_win32_cairo.cxx ++++ b/canvas/source/cairo/cairo_win32_cairo.cxx +@@ -197,7 +197,7 @@ namespace cairo + aSystemGraphicsData.hDC = cairo_win32_surface_get_dc( mpSurface.get() ); + + return boost::shared_ptr( +- new VirtualDevice( &aSystemGraphicsData, sal::static_int_cast(getDepth()) )); ++ new VirtualDevice( &aSystemGraphicsData, Size(1, 1), sal::static_int_cast(getDepth()) )); + } + + +diff --git a/canvas/source/cairo/cairo_xlib_cairo.cxx b/canvas/source/cairo/cairo_xlib_cairo.cxx +index 9b49c7e..79ab2a5 100644 +--- a/canvas/source/cairo/cairo_xlib_cairo.cxx ++++ b/canvas/source/cairo/cairo_xlib_cairo.cxx +@@ -277,8 +277,13 @@ namespace cairo + aSystemGraphicsData.hDrawable = getDrawable(); + aSystemGraphicsData.pXRenderFormat = getRenderFormat(); + ++ int width = cairo_xlib_surface_get_width(mpSurface.get()); ++ int height = cairo_xlib_surface_get_height(mpSurface.get()); ++ + return boost::shared_ptr( +- new VirtualDevice( &aSystemGraphicsData, std::max( getDepth(), 0 ) )); ++ new VirtualDevice(&aSystemGraphicsData, ++ Size(width, height), ++ std::max(getDepth(), 0))); + } + + /** +diff --git a/canvas/source/tools/canvastools.cxx b/canvas/source/tools/canvastools.cxx +index ae79cc9..6698f58 100644 +--- a/canvas/source/tools/canvastools.cxx ++++ b/canvas/source/tools/canvastools.cxx +@@ -1290,6 +1290,81 @@ namespace canvas + nColorSteps ) ); + } + ++ void clipOutDev(const rendering::ViewState& viewState, ++ const rendering::RenderState& renderState, ++ OutputDevice& rOutDev, ++ OutputDevice* p2ndOutDev) ++ { ++ // accumulate non-empty clips into one region ++ Region aClipRegion(true); ++ ++ if( viewState.Clip.is() ) ++ { ++ ::basegfx::B2DPolyPolygon aClipPoly( ++ ::basegfx::unotools::b2DPolyPolygonFromXPolyPolygon2D(viewState.Clip) ); ++ ++ if( aClipPoly.count() ) ++ { ++ // setup non-empty clipping ++ ::basegfx::B2DHomMatrix aMatrix; ++ aClipPoly.transform( ++ ::basegfx::unotools::homMatrixFromAffineMatrix( aMatrix, ++ viewState.AffineTransform ) ); ++ ++ aClipRegion = Region::GetRegionFromPolyPolygon( PolyPolygon( aClipPoly ) ); ++ } ++ else ++ { ++ // clip polygon is empty ++ aClipRegion.SetEmpty(); ++ } ++ } ++ ++ if( renderState.Clip.is() ) ++ { ++ ::basegfx::B2DPolyPolygon aClipPoly( ++ ::basegfx::unotools::b2DPolyPolygonFromXPolyPolygon2D(renderState.Clip) ); ++ ++ ::basegfx::B2DHomMatrix aMatrix; ++ aClipPoly.transform( ++ ::canvas::tools::mergeViewAndRenderTransform( aMatrix, ++ viewState, ++ renderState ) ); ++ ++ if( aClipPoly.count() ) ++ { ++ // setup non-empty clipping ++ Region aRegion = Region::GetRegionFromPolyPolygon( PolyPolygon( aClipPoly ) ); ++ aClipRegion.Intersect( aRegion ); ++ } ++ else ++ { ++ // clip polygon is empty ++ aClipRegion.SetEmpty(); ++ } ++ } ++ ++ // setup accumulated clip region. Note that setting an ++ // empty clip region denotes "clip everything" on the ++ // OutputDevice (which is why we translate that into ++ // SetClipRegion() here). When both view and render clip ++ // are empty, aClipRegion remains default-constructed, ++ // i.e. empty, too. ++ if( aClipRegion.IsNull() ) ++ { ++ rOutDev.SetClipRegion(); ++ ++ if( p2ndOutDev ) ++ p2ndOutDev->SetClipRegion(); ++ } ++ else ++ { ++ rOutDev.SetClipRegion( aClipRegion ); ++ ++ if( p2ndOutDev ) ++ p2ndOutDev->SetClipRegion( aClipRegion ); ++ } ++ } + } // namespace tools + + } // namespace canvas +diff --git a/canvas/source/vcl/canvashelper.cxx b/canvas/source/vcl/canvashelper.cxx +index 0bd3954..5424e9e 100644 +--- a/canvas/source/vcl/canvashelper.cxx ++++ b/canvas/source/vcl/canvashelper.cxx +@@ -1236,78 +1236,7 @@ namespace vclcanvas + + // TODO(P2): Don't change clipping all the time, maintain current clip + // state and change only when update is necessary +- +- // accumulate non-empty clips into one region +- // ========================================== +- +- Region aClipRegion(true); +- +- if( viewState.Clip.is() ) +- { +- ::basegfx::B2DPolyPolygon aClipPoly( +- ::basegfx::unotools::b2DPolyPolygonFromXPolyPolygon2D(viewState.Clip) ); +- +- if( aClipPoly.count() ) +- { +- // setup non-empty clipping +- ::basegfx::B2DHomMatrix aMatrix; +- aClipPoly.transform( +- ::basegfx::unotools::homMatrixFromAffineMatrix( aMatrix, +- viewState.AffineTransform ) ); +- +- aClipRegion = Region::GetRegionFromPolyPolygon( ::PolyPolygon( aClipPoly ) ); +- } +- else +- { +- // clip polygon is empty +- aClipRegion.SetEmpty(); +- } +- } +- +- if( renderState.Clip.is() ) +- { +- ::basegfx::B2DPolyPolygon aClipPoly( +- ::basegfx::unotools::b2DPolyPolygonFromXPolyPolygon2D(renderState.Clip) ); +- +- ::basegfx::B2DHomMatrix aMatrix; +- aClipPoly.transform( +- ::canvas::tools::mergeViewAndRenderTransform( aMatrix, +- viewState, +- renderState ) ); +- +- if( aClipPoly.count() ) +- { +- // setup non-empty clipping +- Region aRegion = Region::GetRegionFromPolyPolygon( ::PolyPolygon( aClipPoly ) ); +- aClipRegion.Intersect( aRegion ); +- } +- else +- { +- // clip polygon is empty +- aClipRegion.SetEmpty(); +- } +- } +- +- // setup accumulated clip region. Note that setting an +- // empty clip region denotes "clip everything" on the +- // OutputDevice (which is why we translate that into +- // SetClipRegion() here). When both view and render clip +- // are empty, aClipRegion remains default-constructed, +- // i.e. empty, too. +- if( aClipRegion.IsNull() ) +- { +- rOutDev.SetClipRegion(); +- +- if( p2ndOutDev ) +- p2ndOutDev->SetClipRegion(); +- } +- else +- { +- rOutDev.SetClipRegion( aClipRegion ); +- +- if( p2ndOutDev ) +- p2ndOutDev->SetClipRegion( aClipRegion ); +- } ++ ::canvas::tools::clipOutDev(viewState, renderState, rOutDev, p2ndOutDev); + + Color aColor( COL_WHITE ); + +@@ -1373,18 +1302,16 @@ namespace vclcanvas + ENSURE_OR_THROW( mpOutDev.get(), + "outdev null. Are we disposed?" ); + +- setupOutDevState( viewState, renderState, TEXT_COLOR ); +- + OutputDevice& rOutDev( mpOutDev->getOutDev() ); + +- ::Font aVCLFont; ++ setupOutDevState( viewState, renderState, TEXT_COLOR ); + + CanvasFont* pFont = dynamic_cast< CanvasFont* >( xFont.get() ); + + ENSURE_ARG_OR_THROW( pFont, + "Font not compatible with this canvas" ); + +- aVCLFont = pFont->getVCLFont(); ++ ::Font aVCLFont = pFont->getVCLFont(); + + Color aColor( COL_BLACK ); + +diff --git a/include/canvas/canvastools.hxx b/include/canvas/canvastools.hxx +index de5a76c..3881537 100644 +--- a/include/canvas/canvastools.hxx ++++ b/include/canvas/canvastools.hxx +@@ -77,6 +77,7 @@ namespace com { namespace sun { namespace star { namespace awt + } } } } + + class Color; ++class OutputDevice; + + namespace canvas + { +@@ -579,6 +580,11 @@ namespace canvas + ::std::size_t mnEntries; + bool mbCaseSensitive; + }; ++ ++ CANVASTOOLS_DLLPUBLIC void clipOutDev(const css::rendering::ViewState& viewState, ++ const css::rendering::RenderState& renderState, ++ OutputDevice& rOutDev, ++ OutputDevice* p2ndOutDev=NULL); + } + } + +diff --git a/include/vcl/virdev.hxx b/include/vcl/virdev.hxx +index 87205c7..1c0a412 100644 +--- a/include/vcl/virdev.hxx ++++ b/include/vcl/virdev.hxx +@@ -110,7 +110,8 @@ public: + Any rendering will happen directly on the context and not on any intermediate bitmap. + Note: This might not be supported on all platforms ! + */ +- explicit VirtualDevice( const SystemGraphicsData *pData, sal_uInt16 nBitCount ); ++ explicit VirtualDevice(const SystemGraphicsData *pData, const Size &rSize, ++ sal_uInt16 nBitCount); + + virtual ~VirtualDevice(); + +diff --git a/vcl/source/gdi/virdev.cxx b/vcl/source/gdi/virdev.cxx +index 6378785..9dcc286 100644 +--- a/vcl/source/gdi/virdev.cxx ++++ b/vcl/source/gdi/virdev.cxx +@@ -236,13 +236,15 @@ VirtualDevice::VirtualDevice( const OutputDevice& rCompDev, sal_uInt16 nBitCount + mnAlphaDepth = sal::static_int_cast(nAlphaBitCount); + } + +-VirtualDevice::VirtualDevice( const SystemGraphicsData *pData, sal_uInt16 nBitCount ) ++VirtualDevice::VirtualDevice(const SystemGraphicsData *pData, const Size &rSize, ++ sal_uInt16 nBitCount) + : mpVirDev( NULL ), + meRefDevMode( REFDEV_NONE ) + { + SAL_INFO( "vcl.gdi", "VirtualDevice::VirtualDevice( " << nBitCount << " )" ); + +- ImplInitVirDev( Application::GetDefaultDevice(), 1, 1, nBitCount, pData ); ++ ImplInitVirDev(Application::GetDefaultDevice(), rSize.Width(), rSize.Height(), ++ nBitCount, pData); + } + + VirtualDevice::~VirtualDevice() +-- +1.9.3 + diff --git a/SOURCES/0001-Related-rhbz-1032774-bodge-around-reported-NULL-valu.patch b/SOURCES/0001-Related-rhbz-1032774-bodge-around-reported-NULL-valu.patch deleted file mode 100644 index dc9299c..0000000 --- a/SOURCES/0001-Related-rhbz-1032774-bodge-around-reported-NULL-valu.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 5620f5ba2fa123f029ac449f69a89ffc5703c71e Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= -Date: Thu, 21 Nov 2013 15:27:59 +0000 -Subject: [PATCH] Related: rhbz#1032774 bodge-around reported NULL value here - -Change-Id: I9c4791b8f82cdd6e4823f88f592ad9ce233b6966 ---- - sd/source/ui/slideshow/slideshow.cxx | 11 ++++++++--- - 1 file changed, 8 insertions(+), 3 deletions(-) - -diff --git a/sd/source/ui/slideshow/slideshow.cxx b/sd/source/ui/slideshow/slideshow.cxx -index 2bab38d..b71cad6 100644 ---- a/sd/source/ui/slideshow/slideshow.cxx -+++ b/sd/source/ui/slideshow/slideshow.cxx -@@ -1235,10 +1235,15 @@ void SlideShow::StartFullscreenPresentation( ) - // frame view of the current view shell. This avoids that - // changes made by the presentation have an effect on the other - // view shells. -- FrameView* pOriginalFrameView = mpCurrentViewShellBase ? mpCurrentViewShellBase->GetMainViewShell()->GetFrameView() : 0; -+ FrameView* pOriginalFrameView = 0; -+ if (mpCurrentViewShellBase) -+ { -+ ::boost::shared_ptr xShell(mpCurrentViewShellBase->GetMainViewShell()); -+ if (xShell.get()) -+ pOriginalFrameView = xShell->GetFrameView(); -+ } - -- if( mpFullScreenFrameView ) -- delete mpFullScreenFrameView; -+ delete mpFullScreenFrameView; - mpFullScreenFrameView = new FrameView(mpDoc, pOriginalFrameView); - - // The new frame is created hidden. To make it visible and activate the --- -1.8.3.1 - diff --git a/SOURCES/0001-Related-rhbz-1065807-rework-i66157-for-multiple-writ.patch b/SOURCES/0001-Related-rhbz-1065807-rework-i66157-for-multiple-writ.patch deleted file mode 100644 index 31230c1..0000000 --- a/SOURCES/0001-Related-rhbz-1065807-rework-i66157-for-multiple-writ.patch +++ /dev/null @@ -1,204 +0,0 @@ -From 2fc88c27a7c329753f2c58ec5ee1caa3678200ae Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= -Date: Mon, 24 Feb 2014 15:27:36 +0000 -Subject: [PATCH] Related: rhbz#1065807 rework #i66157# for multiple writable - template dirs - -if there are multiple user-level template dirs then we should be able to -remove/rename content in all of them, not just the default writable target. - -The target scenario here is to default to ~/Templates when it exists as the -template dir, but to retain ~/.config/libreoffice/user/template in the dir for -any pre-existing templates and to treat both as equivalent in terms of removing -their content etc. - -i#66157# wanted to avoid remove extensions templates and other internal -ones, so rework that logic to instead just be hands off internal templates -and allow modification of the remainder - -Change-Id: I56afe991d4297ba692e914ae95ea02d68553f60a ---- - sfx2/source/doc/doctemplates.cxx | 82 ++++++++++++++++++++++++++++++++-------- - 1 file changed, 67 insertions(+), 15 deletions(-) - -diff --git a/sfx2/source/doc/doctemplates.cxx b/sfx2/source/doc/doctemplates.cxx -index ff07ef3..fe43a40 100644 ---- a/sfx2/source/doc/doctemplates.cxx -+++ b/sfx2/source/doc/doctemplates.cxx -@@ -54,6 +54,7 @@ - #include - #include - #include -+#include - - #include - #include -@@ -180,6 +181,7 @@ class SfxDocTplService_Impl - - ::osl::Mutex maMutex; - Sequence< OUString > maTemplateDirs; -+ Sequence< OUString > maInternalTemplateDirs; - OUString maRootURL; - NameList_Impl maNames; - Locale maLocale; -@@ -264,8 +266,16 @@ class SfxDocTplService_Impl - - void updateData( DocTemplates_EntryData_Impl *pData ); - -+ //See: #i66157# and rhbz#1065807 -+ //return which template dir the rURL is a subpath of -+ OUString findParentTemplateDir(const OUString& rURL) const; -+ -+ //See: #i66157# and rhbz#1065807 -+ //return true if rURL is a path (or subpath of) a dir which is not a user path -+ //which implies neither it or its contents can be removed -+ bool isInternalTemplateDir(const OUString& rURL) const; - public: -- SfxDocTplService_Impl( const uno::Reference< XComponentContext > & xContext ); -+ SfxDocTplService_Impl( const uno::Reference< XComponentContext > & xContext ); - ~SfxDocTplService_Impl(); - - sal_Bool init() { if ( !mbIsInitialized ) init_Impl(); return mbIsInitialized; } -@@ -545,7 +555,7 @@ void SfxDocTplService_Impl::getDirList() - // TODO/LATER: let use service, register listener - INetURLObject aURL; - OUString aDirs = SvtPathOptions().GetTemplatePath(); -- sal_uInt16 nCount = comphelper::string::getTokenCount(aDirs, C_DELIM); -+ sal_Int32 nCount = comphelper::string::getTokenCount(aDirs, C_DELIM); - - maTemplateDirs = Sequence< OUString >( nCount ); - -@@ -553,7 +563,7 @@ void SfxDocTplService_Impl::getDirList() - const OUString aPrefix( - "vnd.sun.star.expand:" ); - -- for ( sal_uInt16 i=0; i xPathSettings = -+ css::util::PathSettings::create( mxContext ); -+ -+ // load internal paths -+ OUString sProp( "Template_internal" ); -+ Any aAny = xPathSettings->getPropertyValue( sProp ); -+ aAny >>= maInternalTemplateDirs; -+ -+ nCount = maInternalTemplateDirs.getLength(); -+ for (sal_Int32 i = 0; i < nCount; ++i) -+ { -+ //expand vnd.sun.star.expand: and remove "..." from them -+ //to normalize into the expected url patterns -+ maRelocator.makeRelocatableURL(maInternalTemplateDirs[i]); -+ maRelocator.makeAbsoluteURL(maInternalTemplateDirs[i]); -+ } -+ - // Store the template dir list - setProperty( maRootContent, aPropName, aValue ); - } -@@ -1547,13 +1574,16 @@ sal_Bool SfxDocTplService_Impl::removeGroup( const OUString& rGroupName ) - - if ( !maTemplateDirs.getLength() ) - return sal_False; -- OUString aGeneralTempPath = maTemplateDirs[ maTemplateDirs.getLength() - 1 ]; - - // check that the fs location is in writeble folder and this is not a "My templates" folder - INetURLObject aGroupParentFolder( aGroupTargetURL ); -- if ( !aGroupParentFolder.removeSegment() -- || !::utl::UCBContentHelper::IsSubPath( aGeneralTempPath, -- aGroupParentFolder.GetMainURL( INetURLObject::NO_DECODE ) ) ) -+ if (!aGroupParentFolder.removeSegment()) -+ return sal_False; -+ -+ OUString aGeneralTempPath = findParentTemplateDir( -+ aGroupParentFolder.GetMainURL(INetURLObject::NO_DECODE)); -+ -+ if (aGeneralTempPath.isEmpty()) - return sal_False; - - // now get the content of the Group -@@ -1661,14 +1691,14 @@ sal_Bool SfxDocTplService_Impl::renameGroup( const OUString& rOldName, - - if ( !maTemplateDirs.getLength() ) - return sal_False; -- OUString aGeneralTempPath = maTemplateDirs[ maTemplateDirs.getLength() - 1 ]; - - // check that the fs location is in writeble folder and this is not a "My templates" folder - INetURLObject aGroupParentFolder( aGroupTargetURL ); -- if ( !aGroupParentFolder.removeSegment() -- || !::utl::UCBContentHelper::IsSubPath( aGeneralTempPath, -- aGroupParentFolder.GetMainURL( INetURLObject::NO_DECODE ) ) ) -+ if (!aGroupParentFolder.removeSegment() || -+ isInternalTemplateDir(aGroupParentFolder.GetMainURL(INetURLObject::NO_DECODE))) -+ { - return sal_False; -+ } - - // check that the group can be renamed ( all the contents must be in target location ) - sal_Bool bCanBeRenamed = sal_False; -@@ -1770,7 +1800,7 @@ sal_Bool SfxDocTplService_Impl::storeTemplate( const OUString& rGroupName, - aValue >>= aTemplateToRemoveTargetURL; - - if ( aGroupTargetURL.isEmpty() || !maTemplateDirs.getLength() -- || (!aTemplateToRemoveTargetURL.isEmpty() && !::utl::UCBContentHelper::IsSubPath( maTemplateDirs[ maTemplateDirs.getLength() - 1 ], aTemplateToRemoveTargetURL )) ) -+ || (!aTemplateToRemoveTargetURL.isEmpty() && isInternalTemplateDir(aTemplateToRemoveTargetURL)) ) - return sal_False; // it is not allowed to remove the template - } - -@@ -1909,6 +1939,30 @@ sal_Bool SfxDocTplService_Impl::storeTemplate( const OUString& rGroupName, - } - } - -+bool SfxDocTplService_Impl::isInternalTemplateDir(const OUString& rURL) const -+{ -+ const sal_Int32 nDirs = maInternalTemplateDirs.getLength(); -+ const OUString* pDirs = maInternalTemplateDirs.getConstArray(); -+ for (sal_Int32 i = 0; i < nDirs; ++i, ++pDirs) -+ { -+ if (::utl::UCBContentHelper::IsSubPath(*pDirs, rURL)) -+ return true; -+ } -+ return false; -+} -+ -+OUString SfxDocTplService_Impl::findParentTemplateDir(const OUString& rURL) const -+{ -+ const sal_Int32 nDirs = maTemplateDirs.getLength(); -+ const OUString* pDirs = maTemplateDirs.getConstArray(); -+ for (sal_Int32 i = 0; i < nDirs; ++i, ++pDirs) -+ { -+ if (::utl::UCBContentHelper::IsSubPath(*pDirs, rURL)) -+ return *pDirs; -+ } -+ return OUString(); -+} -+ - //----------------------------------------------------------------------------- - sal_Bool SfxDocTplService_Impl::addTemplate( const OUString& rGroupName, - const OUString& rTemplateName, -@@ -2032,7 +2086,6 @@ sal_Bool SfxDocTplService_Impl::addTemplate( const OUString& rGroupName, - catch ( Exception& ) - { return sal_False; } - -- - // either the document has title and it is the same as requested, or we have to set it - sal_Bool bCorrectTitle = ( bDocHasTitle && aTitle.equals( rTemplateName ) ); - if ( !bCorrectTitle ) -@@ -2101,8 +2154,7 @@ sal_Bool SfxDocTplService_Impl::removeTemplate( const OUString& rGroupName, - // delete the target template - if ( !aTargetURL.isEmpty() ) - { -- if ( !maTemplateDirs.getLength() -- || !::utl::UCBContentHelper::IsSubPath( maTemplateDirs[ maTemplateDirs.getLength() - 1 ], aTargetURL ) ) -+ if (isInternalTemplateDir(aTargetURL)) - return sal_False; - - removeContent( aTargetURL ); --- -1.8.5.3 - diff --git a/SOURCES/0001-Related-rhbz-1075951-abrt-crash-in-MSWordExportBase-.patch b/SOURCES/0001-Related-rhbz-1075951-abrt-crash-in-MSWordExportBase-.patch deleted file mode 100644 index f92356e..0000000 --- a/SOURCES/0001-Related-rhbz-1075951-abrt-crash-in-MSWordExportBase-.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 7d53f81f0a88afcff0f60bbd066a5645ac2e6a8b Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= -Date: Fri, 14 Mar 2014 15:30:31 +0000 -Subject: [PATCH] Related: rhbz#1075951 abrt crash in - MSWordExportBase::OutputFormat - -Change-Id: I681fa40196eb04f4824e49458cba0acc15b26193 ---- - sw/source/filter/ww8/ww8atr.cxx | 7 +++++-- - 1 file changed, 5 insertions(+), 2 deletions(-) - -diff --git a/sw/source/filter/ww8/ww8atr.cxx b/sw/source/filter/ww8/ww8atr.cxx -index 7eb3134..da25acc 100644 ---- a/sw/source/filter/ww8/ww8atr.cxx -+++ b/sw/source/filter/ww8/ww8atr.cxx -@@ -745,10 +745,13 @@ void MSWordExportBase::OutputFormat( const SwFmt& rFmt, bool bPapFmt, bool bChpF - case RES_TXTFMTCOLL: - if( bPapFmt ) - { -+ int nLvl = MAXLEVEL; -+ - if (((const SwTxtFmtColl&)rFmt).IsAssignedToListLevelOfOutlineStyle()) -- { -- int nLvl = ((const SwTxtFmtColl&)rFmt).GetAssignedOutlineStyleLevel(); -+ nLvl = ((const SwTxtFmtColl&)rFmt).GetAssignedOutlineStyleLevel(); - -+ if (nLvl >= 0 && nLvl < MAXLEVEL) -+ { - //if outline numbered - // if Write StyleDefinition then write the OutlineRule - const SwNumFmt& rNFmt = pDoc->GetOutlineNumRule()->Get( static_cast( nLvl ) ); --- -1.8.5.3 - diff --git a/SOURCES/0001-Related-rhbz-1117853-nStartPara-of-EE_PARA_NOT_FOUND.patch b/SOURCES/0001-Related-rhbz-1117853-nStartPara-of-EE_PARA_NOT_FOUND.patch new file mode 100644 index 0000000..85b596d --- /dev/null +++ b/SOURCES/0001-Related-rhbz-1117853-nStartPara-of-EE_PARA_NOT_FOUND.patch @@ -0,0 +1,62 @@ +From fdb1d62a09f7320ee5c2828aa4ce84248a6e3e4e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Thu, 17 Jul 2014 13:48:30 +0100 +Subject: [PATCH] Related: rhbz#1117853 nStartPara of EE_PARA_NOT_FOUND + +we know that nStartPara is EE_PARA_NOT_FOUND so rOutliner.GetAbsPos must have +returned that, but we don't know the circumstances that lead to that yet. + +Change-Id: I53a488317d154b4a3c050248b8737da0a611ca43 +--- + editeng/source/outliner/outliner.cxx | 3 +-- + sd/source/ui/view/outlnvsh.cxx | 5 ++--- + 2 files changed, 3 insertions(+), 5 deletions(-) + +diff --git a/editeng/source/outliner/outliner.cxx b/editeng/source/outliner/outliner.cxx +index 4d7214b..aaa843d 100644 +--- a/editeng/source/outliner/outliner.cxx ++++ b/editeng/source/outliner/outliner.cxx +@@ -384,7 +384,6 @@ sal_Int32 Outliner::GetBulletsNumberingStatus() const + + OutlinerParaObject* Outliner::CreateParaObject( sal_Int32 nStartPara, sal_Int32 nCount ) const + { +- + if ( static_cast(nStartPara) + nCount > + static_cast(pParaList->GetParagraphCount()) ) + nCount = pParaList->GetParagraphCount() - nStartPara; +@@ -394,7 +393,7 @@ OutlinerParaObject* Outliner::CreateParaObject( sal_Int32 nStartPara, sal_Int32 + if ( ( nStartPara + nCount ) > pEditEngine->GetParagraphCount() ) + nCount = pEditEngine->GetParagraphCount() - nStartPara; + +- if( !nCount ) ++ if (nCount <= 0) + return NULL; + + EditTextObject* pText = pEditEngine->CreateTextObject( nStartPara, nCount ); +diff --git a/sd/source/ui/view/outlnvsh.cxx b/sd/source/ui/view/outlnvsh.cxx +index 03e899d..e3b4aa7 100644 +--- a/sd/source/ui/view/outlnvsh.cxx ++++ b/sd/source/ui/view/outlnvsh.cxx +@@ -1658,7 +1658,6 @@ bool OutlineViewShell::UpdateTitleObject( SdPage* pPage, Paragraph* pPara ) + + ::Outliner* pOutliner = pOlView->GetOutliner(); + SdrTextObj* pTO = pOlView->GetTitleTextObject( pPage ); +- OutlinerParaObject* pOPO = NULL; + + OUString aTest = pOutliner->GetText(pPara); + bool bText = !aTest.isEmpty(); +@@ -1675,9 +1674,9 @@ bool OutlineViewShell::UpdateTitleObject( SdPage* pPage, Paragraph* pPara ) + } + + // if we have a title object and a text, set the text +- if( pTO ) ++ OutlinerParaObject* pOPO = pTO ? pOutliner->CreateParaObject(pOutliner->GetAbsPos(pPara), 1) : NULL; ++ if (pOPO) + { +- pOPO = pOutliner->CreateParaObject( pOutliner->GetAbsPos( pPara ), 1 ); + pOPO->SetOutlinerMode( OUTLINERMODE_TITLEOBJECT ); + pOPO->SetVertical( pTO->IsVerticalWriting() ); + if( pTO->GetOutlinerParaObject() && (pOPO->GetTextObject() == pTO->GetOutlinerParaObject()->GetTextObject()) ) +-- +1.9.3 + diff --git a/SOURCES/0001-Related-rhbz-1130264-plausible-fix-for-reported-cras.patch b/SOURCES/0001-Related-rhbz-1130264-plausible-fix-for-reported-cras.patch index abd96ee..9594cc9 100644 --- a/SOURCES/0001-Related-rhbz-1130264-plausible-fix-for-reported-cras.patch +++ b/SOURCES/0001-Related-rhbz-1130264-plausible-fix-for-reported-cras.patch @@ -37,7 +37,7 @@ index ceea8e2..836e89e 100644 } } --// ------------------------------------------------------------------------------ +- - static gboolean pipeline_bus_callback( GstBus *, GstMessage *message, gpointer data ) { diff --git a/SOURCES/0001-Remove-smb-from-X-KDE-Protocols-lines.patch b/SOURCES/0001-Remove-smb-from-X-KDE-Protocols-lines.patch new file mode 100644 index 0000000..79ee877 --- /dev/null +++ b/SOURCES/0001-Remove-smb-from-X-KDE-Protocols-lines.patch @@ -0,0 +1,156 @@ +From f9f9aa9873c5851da86d33ca75e937ac022206a3 Mon Sep 17 00:00:00 2001 +From: Stephan Bergmann +Date: Wed, 8 Oct 2014 09:54:55 +0200 +Subject: [PATCH] Remove smb from X-KDE-Protocols lines + +smb was included in the set of supported protocols since those X-KDE-Protocol +lines got introduced with 673be8e76856c6bc39f448f3374db4ae84258952 "add +X-KDE-Protocols," but as discussed in the mail thread starting at + +"X-KDE-Protocols=...,smb,...," actual support for smb URLs in LO under KDE is +very fragile and typically requires further steps from the user (which vary +across the various LO configure options, --enable-gio vs. --enable-gnome-vfs, +and Linux distros) to work at all. + +So it is probably best to not unconditionally claim smb support in those +X-KDE_Protocols lines at least in the vanilla LO sources (esp. since the TDF +builds with --enable-gnome-vfs need a really weird OOO_FORCE_DESKTOP=gnome +workaround to make it work at all, cf. + +"Re: X-KDE-Protocols=...,smb,..."). Any Linux distros that are confident that +smb support in LO under KDE reliably works for them can patch those lines +locally. + +Change-Id: I1c247d85825c96f0d74efcce3003e327a1522fa3 +--- + sysui/desktop/menus/base.desktop | 2 +- + sysui/desktop/menus/calc.desktop | 2 +- + sysui/desktop/menus/draw.desktop | 2 +- + sysui/desktop/menus/impress.desktop | 2 +- + sysui/desktop/menus/math.desktop | 2 +- + sysui/desktop/menus/qstart.desktop | 2 +- + sysui/desktop/menus/startcenter.desktop | 2 +- + sysui/desktop/menus/writer.desktop | 2 +- + sysui/desktop/menus/xsltfilter.desktop | 2 +- + 9 files changed, 9 insertions(+), 9 deletions(-) + +diff --git a/sysui/desktop/menus/base.desktop b/sysui/desktop/menus/base.desktop +index 26f1c6a..76255fe 100644 +--- a/sysui/desktop/menus/base.desktop ++++ b/sysui/desktop/menus/base.desktop +@@ -31,8 +31,8 @@ X-GIO-NoFuse=true + Keywords=Data;SQL; + InitialPreference=5 + StartupWMClass=libreoffice-base +-X-KDE-Protocols=file,http,smb,ftp,webdav ++X-KDE-Protocols=file,http,ftp,webdav + X-TryExec=oobase + + Actions=NewDocument; + [Desktop Action NewDocument] +diff --git a/sysui/desktop/menus/calc.desktop b/sysui/desktop/menus/calc.desktop +index fca3fe3..5aa48d2 100644 +--- a/sysui/desktop/menus/calc.desktop ++++ b/sysui/desktop/menus/calc.desktop +@@ -31,8 +31,8 @@ X-GIO-NoFuse=true + Keywords=Accounting;Stats;OpenDocument Spreadsheet;Chart;Microsoft Excel;Microsoft Works;OpenOffice Calc;ods;xls;xlsx; + InitialPreference=5 + StartupWMClass=libreoffice-calc +-X-KDE-Protocols=file,http,smb,ftp,webdav ++X-KDE-Protocols=file,http,ftp,webdav + X-TryExec=oocalc + + Actions=NewDocument; + [Desktop Action NewDocument] +diff --git a/sysui/desktop/menus/draw.desktop b/sysui/desktop/menus/draw.desktop +index ae57504..3e20e8d 100644 +--- a/sysui/desktop/menus/draw.desktop ++++ b/sysui/desktop/menus/draw.desktop +@@ -31,8 +31,8 @@ X-GIO-NoFuse=true + Keywords=Vector;Schema;Diagram;Layout;OpenDocument Graphics;Microsoft Publisher;Corel Draw;cdr;odg;svg; + InitialPreference=5 + StartupWMClass=libreoffice-draw +-X-KDE-Protocols=file,http,smb,ftp,webdav ++X-KDE-Protocols=file,http,ftp,webdav + X-TryExec=oodraw + + Actions=NewDocument; + [Desktop Action NewDocument] +diff --git a/sysui/desktop/menus/impress.desktop b/sysui/desktop/menus/impress.desktop +index c1f6231..b419593 100644 +--- a/sysui/desktop/menus/impress.desktop ++++ b/sysui/desktop/menus/impress.desktop +@@ -31,8 +31,8 @@ X-GIO-NoFuse=true + Keywords=Slideshow;Slides;OpenDocument Presentation;Microsoft PowerPoint;Microsoft Works;OpenOffice Impress;odp;ppt;pptx; + InitialPreference=5 + StartupWMClass=libreoffice-impress +-X-KDE-Protocols=file,http,smb,ftp,webdav ++X-KDE-Protocols=file,http,ftp,webdav + X-TryExec=ooimpress + + Actions=NewDocument; + [Desktop Action NewDocument] +diff --git a/sysui/desktop/menus/math.desktop b/sysui/desktop/menus/math.desktop +index b6981f5..e437d26 100644 +--- a/sysui/desktop/menus/math.desktop ++++ b/sysui/desktop/menus/math.desktop +@@ -32,8 +32,8 @@ X-GIO-NoFuse=true + Keywords=Equation;OpenDocument Formula;Formula;odf;MathML; + InitialPreference=5 + StartupWMClass=libreoffice-math +-X-KDE-Protocols=file,http,smb,ftp,webdav ++X-KDE-Protocols=file,http,ftp,webdav + X-TryExec=oomath + + Actions=NewDocument; + [Desktop Action NewDocument] +diff --git a/sysui/desktop/menus/qstart.desktop b/sysui/desktop/menus/qstart.desktop +index 2669cc3..ec4e9c2 100644 +--- a/sysui/desktop/menus/qstart.desktop ++++ b/sysui/desktop/menus/qstart.desktop +@@ -25,4 +25,4 @@ NoDisplay=true + Name=%PRODUCTNAME Quickstarter + Comment=Hook for quickstarter startup + X-GIO-NoFuse=true +-X-KDE-Protocols=file,http,smb,ftp,webdav ++X-KDE-Protocols=file,http,ftp,webdav +diff --git a/sysui/desktop/menus/startcenter.desktop b/sysui/desktop/menus/startcenter.desktop +index 3858c89..08d4a11 100644 +--- a/sysui/desktop/menus/startcenter.desktop ++++ b/sysui/desktop/menus/startcenter.desktop +@@ -30,7 +30,7 @@ Comment=The office productivity suite compatible to the open and standardized OD + StartupNotify=true + X-GIO-NoFuse=true + StartupWMClass=libreoffice-startcenter +-X-KDE-Protocols=file,http,smb,ftp,webdav ++X-KDE-Protocols=file,http,ftp,webdav + + ##Define Actions + Actions=Writer;Calc;Impress;Draw;Base;Math; +diff --git a/sysui/desktop/menus/writer.desktop b/sysui/desktop/menus/writer.desktop +index e22a7b4..44a6421 100644 +--- a/sysui/desktop/menus/writer.desktop ++++ b/sysui/desktop/menus/writer.desktop +@@ -31,8 +31,8 @@ X-GIO-NoFuse=true + Keywords=Text;Letter;Fax;Document;OpenDocument Text;Microsoft Word;Microsoft Works;Lotus WordPro;OpenOffice Writer;CV;odt;doc;docx;rtf; + InitialPreference=5 + StartupWMClass=libreoffice-writer +-X-KDE-Protocols=file,http,smb,ftp,webdav ++X-KDE-Protocols=file,http,ftp,webdav + X-TryExec=oowriter + + Actions=NewDocument; + [Desktop Action NewDocument] +diff --git a/sysui/desktop/menus/xsltfilter.desktop b/sysui/desktop/menus/xsltfilter.desktop +index 3dcad81..adea82a 100644 +--- a/sysui/desktop/menus/xsltfilter.desktop ++++ b/sysui/desktop/menus/xsltfilter.desktop +@@ -9,4 +9,4 @@ GenericName=XSLT based filters + NoDisplay=true + StartupNotify=true + X-GIO-NoFuse=true +-X-KDE-Protocols=file,http,smb,ftp,webdav ++X-KDE-Protocols=file,http,ftp,webdav +-- +1.9.3 + diff --git a/SOURCES/0001-Resolves-fdo-36815-enable-printing-WYSIWYG-sidewindo.patch b/SOURCES/0001-Resolves-fdo-36815-enable-printing-WYSIWYG-sidewindo.patch deleted file mode 100644 index 510aa1f..0000000 --- a/SOURCES/0001-Resolves-fdo-36815-enable-printing-WYSIWYG-sidewindo.patch +++ /dev/null @@ -1,496 +0,0 @@ -From fd3cf8a32c58ee1b0f9d676cfb393478cf9b1ba2 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= -Date: Tue, 15 Apr 2014 09:42:32 +0100 -Subject: [PATCH] Resolves: fdo#36815 enable printing WYSIWYG sidewindow - comments - -in order for that to happen the document has to be scaled down -so that the comments outside the border of the sheet of paper -can be brought inside the printable area - -Change-Id: Ifafb8eec10a4ea3ea0014097728888603e61e5a4 ---- - sw/inc/PostItMgr.hxx | 3 ++ - sw/inc/SidebarWin.hxx | 1 + - sw/inc/printdata.hxx | 1 + - sw/source/core/layout/paintfrm.cxx | 2 +- - sw/source/core/view/printdata.cxx | 7 ++-- - sw/source/core/view/vprint.cxx | 49 ++++++++++++++++++++++++-- - sw/source/ui/config/optdlg.src | 1 + - sw/source/ui/config/optpage.cxx | 7 ++++ - sw/source/ui/docvw/PostItMgr.cxx | 16 +++++++++ - sw/source/ui/docvw/SidebarTxtControl.cxx | 40 ++++++++++++++++++++++ - sw/source/ui/docvw/SidebarTxtControl.hxx | 2 ++ - sw/source/ui/docvw/SidebarWin.cxx | 55 ++++++++++++++++++++++++++++++ - sw/source/ui/inc/optpage.hxx | 1 + - sw/uiconfig/swriter/ui/printoptionspage.ui | 23 +++++++++++-- - 14 files changed, 200 insertions(+), 8 deletions(-) - -diff --git a/sw/inc/PostItMgr.hxx b/sw/inc/PostItMgr.hxx -index 4c38d40..0ac0273 100644 ---- a/sw/inc/PostItMgr.hxx -+++ b/sw/inc/PostItMgr.hxx -@@ -33,6 +33,7 @@ - #include - #include - -+class OutputDevice; - class SwWrtShell; - class SwDoc; - class SwView; -@@ -279,6 +280,8 @@ class SwPostItMgr: public SfxListener - const sal_Int32 nIndex ); - void GetAllSidebarWinForFrm( const SwFrm& rFrm, - std::vector< Window* >* pChildren ); -+ -+ void DrawNotesForPage(OutputDevice *pOutDev, sal_uInt32 nPage); - }; - - #endif -diff --git a/sw/inc/SidebarWin.hxx b/sw/inc/SidebarWin.hxx -index b3c4c82..5c8c527 100644 ---- a/sw/inc/SidebarWin.hxx -+++ b/sw/inc/SidebarWin.hxx -@@ -163,6 +163,7 @@ class SwSidebarWin : public Window - - void ChangeSidebarItem( SwSidebarItem& rSidebarItem ); - virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > CreateAccessible(); -+ virtual void Draw(OutputDevice* pDev, const Point&, const Size&, sal_uLong); - - protected: - virtual void DataChanged( const DataChangedEvent& aEvent); -diff --git a/sw/inc/printdata.hxx b/sw/inc/printdata.hxx -index b688608..b2f49b7 100644 ---- a/sw/inc/printdata.hxx -+++ b/sw/inc/printdata.hxx -@@ -307,6 +307,7 @@ public: - #define POSTITS_ONLY 1 - #define POSTITS_ENDDOC 2 - #define POSTITS_ENDPAGE 3 -+#define POSTITS_INMARGINS 4 - - namespace sw { - -diff --git a/sw/source/core/layout/paintfrm.cxx b/sw/source/core/layout/paintfrm.cxx -index 3e4ed87..2e88ef7 100644 ---- a/sw/source/core/layout/paintfrm.cxx -+++ b/sw/source/core/layout/paintfrm.cxx -@@ -6213,7 +6213,7 @@ static void lcl_paintBitmapExToRect(OutputDevice *pOut, Point aPoint, BitmapEx& - SwAlignRect( aPageRect, _pViewShell ); - - const SwPostItMgr *pMgr = _pViewShell->GetPostItMgr(); -- if (pMgr && pMgr->ShowNotes() && pMgr->HasNotes()) // do not show anything in print preview -+ if (pMgr /*&& pMgr->ShowNotes()*/ && pMgr->HasNotes()) // do not show anything in print preview - { - sal_Int32 nScrollerHeight = pMgr->GetSidebarScrollerHeight(); - const Rectangle &aVisRect = _pViewShell->VisArea().SVRect(); -diff --git a/sw/source/core/view/printdata.cxx b/sw/source/core/view/printdata.cxx -index 192ae5a..b2e2ef5 100644 ---- a/sw/source/core/view/printdata.cxx -+++ b/sw/source/core/view/printdata.cxx -@@ -172,8 +172,8 @@ SwPrintUIOptions::SwPrintUIOptions( - { - ResStringArray aLocalizedStrings( SW_RES( STR_PRINTOPTUI ) ); - -- OSL_ENSURE( aLocalizedStrings.Count() >= 30, "resource incomplete" ); -- if( aLocalizedStrings.Count() < 30 ) // bad resource ? -+ OSL_ENSURE( aLocalizedStrings.Count() >= 31, "resource incomplete" ); -+ if( aLocalizedStrings.Count() < 31 ) // bad resource ? - return; - - // printing HTML sources does not have any valid UI options. -@@ -322,11 +322,12 @@ SwPrintUIOptions::SwPrintUIOptions( - OUString(), aContentsOpt); - // create a list box for notes content - const sal_Int16 nPrintPostIts = rDefaultPrintData.GetPrintPostIts(); -- aChoices.realloc( 4 ); -+ aChoices.realloc( 5 ); - aChoices[0] = aLocalizedStrings.GetString( 13 ); - aChoices[1] = aLocalizedStrings.GetString( 14 ); - aChoices[2] = aLocalizedStrings.GetString( 15 ); - aChoices[3] = aLocalizedStrings.GetString( 16 ); -+ aChoices[4] = aLocalizedStrings.GetString( 30 ); - aHelpIds.realloc( 2 ); - aHelpIds[0] = ".HelpID:vcl:PrintDialog:PrintAnnotationMode:FixedText"; - aHelpIds[1] = ".HelpID:vcl:PrintDialog:PrintAnnotationMode:ListBox"; -diff --git a/sw/source/core/view/vprint.cxx b/sw/source/core/view/vprint.cxx -index ff5ffb2..13c829b 100644 ---- a/sw/source/core/view/vprint.cxx -+++ b/sw/source/core/view/vprint.cxx -@@ -69,6 +69,7 @@ - #include - #include - #include -+#include "PostItMgr.hxx" - - using namespace ::com::sun::star; - -@@ -454,13 +455,33 @@ sal_Bool SwViewShell::PrintOrPDFExport( - // output device is now provided by a call from outside the Writer) - pOutDev->Push(); - -+ // fdo#36815 for comments in margins print to a metafile -+ // and then scale that metafile down so that the comments -+ // will fit on the real page, and replay that scaled -+ // output to the real outputdevice -+ GDIMetaFile *pOrigRecorder(NULL); -+ GDIMetaFile *pMetaFile(NULL); -+ sal_Int16 nPostItMode = rPrintData.GetPrintPostIts(); -+ if (nPostItMode == POSTITS_INMARGINS) -+ { -+ //get and disable the existing recorder -+ pOrigRecorder = pOutDev->GetConnectMetaFile(); -+ pOutDev->SetConnectMetaFile(NULL); -+ // turn off output to the device -+ pOutDev->EnableOutput(false); -+ // just record the rendering commands to the metafile -+ // instead -+ pMetaFile = new GDIMetaFile; -+ pMetaFile->Record(pOutDev); -+ } -+ - // Print/PDF export for (multi-)selection has already generated a - // temporary document with the selected text. - // (see XRenderable implementation in unotxdoc.cxx) - // It is implemented this way because PDF export calls this Prt function - // once per page and we do not like to always have the temporary document - // to be created that often here. -- SwViewShell *pShell = new SwViewShell( *this, 0, pOutDev ); -+ SwViewShell *pShell = new SwViewShell(*this, 0, pOutDev); - - SdrView *pDrawView = pShell->GetDrawView(); - if (pDrawView) -@@ -502,13 +523,37 @@ sal_Bool SwViewShell::PrintOrPDFExport( - - ::SetSwVisArea( pViewSh2, pStPage->Frm() ); - -- pShell->InitPrt( pOutDev ); -+ pShell->InitPrt(pOutDev); - - ::SetSwVisArea( pViewSh2, pStPage->Frm() ); - - pStPage->GetUpper()->Paint( pStPage->Frm(), &rPrintData ); - - SwPaintQueue::Repaint(); -+ -+ if (nPostItMode == POSTITS_INMARGINS) -+ { -+ SwPostItMgr *pPostItManager = pShell->GetPostItMgr(); -+ pPostItManager->CalcRects(); -+ pPostItManager->LayoutPostIts(); -+ pPostItManager->DrawNotesForPage(pOutDev, nPage-1); -+ -+ //Now scale the recorded page down so the notes -+ //will fit in the final page -+ pMetaFile->Stop(); -+ pMetaFile->WindStart(); -+ double fScale = 0.75; -+ pMetaFile->Scale( fScale, fScale ); -+ pMetaFile->WindStart(); -+ -+ //Enable output the the device again -+ pOutDev->EnableOutput(true); -+ //Restore the original recorder -+ pOutDev->SetConnectMetaFile(pOrigRecorder); -+ //play back the scaled page -+ pMetaFile->Play(pOutDev); -+ delete pMetaFile; -+ } - } - - delete pShell; -diff --git a/sw/source/ui/config/optdlg.src b/sw/source/ui/config/optdlg.src -index 748560a..b5ae69c 100644 ---- a/sw/source/ui/config/optdlg.src -+++ b/sw/source/ui/config/optdlg.src -@@ -71,6 +71,7 @@ StringArray STR_PRINTOPTUI - < "~All pages"; >; - < "Pa~ges"; >; - < "~Selection"; >; -+ < "Place in margins"; >; - }; - }; - -diff --git a/sw/source/ui/config/optpage.cxx b/sw/source/ui/config/optpage.cxx -index d7efd53..4549402 100644 ---- a/sw/source/ui/config/optpage.cxx -+++ b/sw/source/ui/config/optpage.cxx -@@ -312,6 +312,7 @@ SwAddPrinterTabPage::SwAddPrinterTabPage(Window* pParent, - get(m_pOnlyRB, "only"); - get(m_pEndRB, "end"); - get(m_pEndPageRB, "endpage"); -+ get(m_pInMarginsRB, "inmargins"); - get(m_pPrintEmptyPagesCB, "blankpages"); - get(m_pPaperFromSetupCB, "papertray"); - get(m_pFaxLB, "fax"); -@@ -332,6 +333,7 @@ SwAddPrinterTabPage::SwAddPrinterTabPage(Window* pParent, - m_pPaperFromSetupCB->SetClickHdl( aLk ); - m_pPrintEmptyPagesCB->SetClickHdl( aLk ); - m_pEndPageRB->SetClickHdl( aLk ); -+ m_pInMarginsRB->SetClickHdl( aLk ); - m_pEndRB->SetClickHdl( aLk ); - m_pOnlyRB->SetClickHdl( aLk ); - m_pNoRB->SetClickHdl( aLk ); -@@ -398,6 +400,8 @@ sal_Bool SwAddPrinterTabPage::FillItemSet( SfxItemSet& rCoreSet ) - POSTITS_ENDDOC; - if (m_pEndPageRB->IsChecked()) aAddPrinterAttr.nPrintPostIts = - POSTITS_ENDPAGE; -+ if (m_pInMarginsRB->IsChecked()) aAddPrinterAttr.nPrintPostIts = -+ POSTITS_INMARGINS; - - OUString sFax = m_pFaxLB->GetSelectEntry(); - aAddPrinterAttr.sFaxName = sNone == sFax ? aEmptyOUStr : sFax; -@@ -431,6 +435,7 @@ void SwAddPrinterTabPage::Reset( const SfxItemSet& ) - m_pOnlyRB->Check (pAddPrinterAttr->nPrintPostIts== POSTITS_ONLY ) ; - m_pEndRB->Check (pAddPrinterAttr->nPrintPostIts== POSTITS_ENDDOC ) ; - m_pEndPageRB->Check (pAddPrinterAttr->nPrintPostIts== POSTITS_ENDPAGE ) ; -+ m_pInMarginsRB->Check (pAddPrinterAttr->nPrintPostIts== POSTITS_INMARGINS ) ; - m_pFaxLB->SelectEntry( pAddPrinterAttr->sFaxName ); - } - if (m_pProspectCB->IsChecked()) -@@ -440,6 +445,7 @@ void SwAddPrinterTabPage::Reset( const SfxItemSet& ) - m_pOnlyRB->Enable( sal_False ); - m_pEndRB->Enable( sal_False ); - m_pEndPageRB->Enable( sal_False ); -+ m_pInMarginsRB->Enable( sal_False ); - } - else - m_pProspectCB_RTL->Enable( sal_False ); -@@ -461,6 +467,7 @@ IMPL_LINK_NOARG_INLINE_START(SwAddPrinterTabPage, AutoClickHdl) - m_pOnlyRB->Enable( !bIsProspect ); - m_pEndRB->Enable( !bIsProspect ); - m_pEndPageRB->Enable( !bIsProspect ); -+ m_pInMarginsRB->Enable( !bIsProspect ); - return 0; - } - IMPL_LINK_NOARG_INLINE_END(SwAddPrinterTabPage, AutoClickHdl) -diff --git a/sw/source/ui/docvw/PostItMgr.cxx b/sw/source/ui/docvw/PostItMgr.cxx -index 8ca06e7..e6b7cb6 100644 ---- a/sw/source/ui/docvw/PostItMgr.cxx -+++ b/sw/source/ui/docvw/PostItMgr.cxx -@@ -807,6 +807,22 @@ bool SwPostItMgr::BorderOverPageBorder(unsigned long aPage) const - return false; - } - -+void SwPostItMgr::DrawNotesForPage(OutputDevice *pOutDev, sal_uInt32 nPage) -+{ -+ assert(nPage < mPages.size()); -+ if (nPage >= mPages.size()) -+ return; -+ for(SwSidebarItem_iterator i = mPages[nPage]->mList->begin(); i != mPages[nPage]->mList->end(); ++i) -+ { -+ SwSidebarWin* pPostIt = (*i)->pPostIt; -+ if (!pPostIt) -+ continue; -+ Point aPoint(mpEditWin->PixelToLogic(pPostIt->GetPosPixel())); -+ Size aSize(pPostIt->PixelToLogic(pPostIt->GetSizePixel())); -+ pPostIt->Draw(pOutDev, aPoint, aSize, 0); -+ } -+} -+ - void SwPostItMgr::Scroll(const long lScroll,const unsigned long aPage) - { - OSL_ENSURE((lScroll % GetScrollSize() )==0,"SwPostItMgr::Scroll: scrolling by wrong value"); -diff --git a/sw/source/ui/docvw/SidebarTxtControl.cxx b/sw/source/ui/docvw/SidebarTxtControl.cxx -index b1d3767..15af740 100644 ---- a/sw/source/ui/docvw/SidebarTxtControl.cxx -+++ b/sw/source/ui/docvw/SidebarTxtControl.cxx -@@ -118,6 +118,46 @@ void SidebarTxtControl::RequestHelp(const HelpEvent &rEvt) - } - } - -+void SidebarTxtControl::Draw(OutputDevice* pDev, const Point& rPt, const Size& rSz, sal_uLong) -+{ -+ if ( !Application::GetSettings().GetStyleSettings().GetHighContrastMode() ) -+ { -+ if ( mrSidebarWin.IsMouseOverSidebarWin() || -+ HasFocus() ) -+ { -+ pDev->DrawGradient( Rectangle( Point(0,0) + rPt, PixelToLogic(GetSizePixel()) ), -+ Gradient( GradientStyle_LINEAR, -+ mrSidebarWin.ColorDark(), -+ mrSidebarWin.ColorDark() ) ); -+ } -+ else -+ { -+ pDev->DrawGradient( Rectangle( Point(0,0) + rPt, PixelToLogic(GetSizePixel()) ), -+ Gradient( GradientStyle_LINEAR, -+ mrSidebarWin.ColorLight(), -+ mrSidebarWin.ColorDark())); -+ } -+ } -+ -+ if ( GetTextView() ) -+ { -+ GetTextView()->GetOutliner()->Draw(pDev, Rectangle(rPt, rSz)); -+ } -+ -+ if ( mrSidebarWin.GetLayoutStatus()==SwPostItHelper::DELETED ) -+ { -+ SetLineColor(mrSidebarWin.GetChangeColor()); -+ pDev->DrawLine( PixelToLogic( GetPosPixel(), pDev->GetMapMode() ), -+ PixelToLogic( GetPosPixel() + -+ Point( GetSizePixel().Width(), -+ GetSizePixel().Height() ), pDev->GetMapMode() ) ); -+ pDev->DrawLine( PixelToLogic( GetPosPixel() + -+ Point( GetSizePixel().Width(),0), pDev->GetMapMode() ), -+ PixelToLogic( GetPosPixel() + -+ Point( 0, GetSizePixel().Height() ), pDev->GetMapMode() ) ); -+ } -+} -+ - void SidebarTxtControl::Paint( const Rectangle& rRect) - { - if ( !Application::GetSettings().GetStyleSettings().GetHighContrastMode() ) -diff --git a/sw/source/ui/docvw/SidebarTxtControl.hxx b/sw/source/ui/docvw/SidebarTxtControl.hxx -index 37829b2..66e282f 100644 ---- a/sw/source/ui/docvw/SidebarTxtControl.hxx -+++ b/sw/source/ui/docvw/SidebarTxtControl.hxx -@@ -66,6 +66,8 @@ class SidebarTxtControl : public Control - DECL_LINK( OnlineSpellCallback, SpellCallbackInfo*); - - virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > CreateAccessible(); -+ virtual void Draw(OutputDevice* pDev, const Point&, const Size&, sal_uLong); -+ - }; - - } } // end of namespace sw::sidebarwindows -diff --git a/sw/source/ui/docvw/SidebarWin.cxx b/sw/source/ui/docvw/SidebarWin.cxx -index 4cf128a..275b72e 100644 ---- a/sw/source/ui/docvw/SidebarWin.cxx -+++ b/sw/source/ui/docvw/SidebarWin.cxx -@@ -64,10 +64,12 @@ - #include - - #include -+#include - #include - #include - #include - #include -+#include - #include - - namespace sw { namespace sidebarwindows { -@@ -212,6 +214,59 @@ void SwSidebarWin::Paint( const Rectangle& rRect) - } - } - -+void SwSidebarWin::Draw(OutputDevice* pDev, const Point& rPt, const Size& rSz, sal_uLong nInFlags) -+{ -+ if (mpMetadataAuthor->IsVisible() ) -+ { -+ //draw left over space -+ if ( Application::GetSettings().GetStyleSettings().GetHighContrastMode() ) -+ { -+ pDev->SetFillColor(COL_BLACK); -+ } -+ else -+ { -+ pDev->SetFillColor(mColorDark); -+ } -+ pDev->SetLineColor(); -+ pDev->DrawRect( Rectangle( rPt, rSz ) ); -+ } -+ -+ if (mpMetadataAuthor->IsVisible()) -+ { -+ Font aOrigFont(mpMetadataAuthor->GetControlFont()); -+ Size aSize(PixelToLogic(mpMetadataAuthor->GetSizePixel())); -+ Point aPos(PixelToLogic(mpMetadataAuthor->GetPosPixel())); -+ aPos += rPt; -+ Font aFont( mpMetadataAuthor->GetSettings().GetStyleSettings().GetFieldFont() ); -+ mpMetadataAuthor->SetControlFont( aFont ); -+ mpMetadataAuthor->Draw(pDev, aPos, aSize, nInFlags); -+ mpMetadataAuthor->SetControlFont( aOrigFont ); -+ } -+ -+ if (mpMetadataDate->IsVisible()) -+ { -+ Font aOrigFont(mpMetadataDate->GetControlFont()); -+ Size aSize(PixelToLogic(mpMetadataDate->GetSizePixel())); -+ Point aPos(PixelToLogic(mpMetadataDate->GetPosPixel())); -+ aPos += rPt; -+ Font aFont( mpMetadataDate->GetSettings().GetStyleSettings().GetFieldFont() ); -+ mpMetadataDate->SetControlFont( aFont ); -+ mpMetadataDate->Draw(pDev, aPos, aSize, nInFlags); -+ mpMetadataDate->SetControlFont( aOrigFont ); -+ } -+ -+ mpSidebarTxtControl->Draw(pDev, rPt, rSz, nInFlags); -+ -+ const drawinglayer::primitive2d::Primitive2DSequence& rSequence = mpAnchor->getOverlayObjectPrimitive2DSequence(); -+ const drawinglayer::geometry::ViewInformation2D aNewViewInfos; -+ drawinglayer::processor2d::BaseProcessor2D * pProcessor = -+ drawinglayer::processor2d::createBaseProcessor2DFromOutputDevice( -+ *pDev, aNewViewInfos ); -+ -+ pProcessor->process(rSequence); -+ delete pProcessor; -+} -+ - void SwSidebarWin::SetPosSizePixelRect( long nX, - long nY, - long nWidth, -diff --git a/sw/source/ui/inc/optpage.hxx b/sw/source/ui/inc/optpage.hxx -index 3e196e2..fa8f6b7 100644 ---- a/sw/source/ui/inc/optpage.hxx -+++ b/sw/source/ui/inc/optpage.hxx -@@ -104,6 +104,7 @@ class SwAddPrinterTabPage : public SfxTabPage - RadioButton* m_pOnlyRB; - RadioButton* m_pEndRB; - RadioButton* m_pEndPageRB; -+ RadioButton* m_pInMarginsRB; - - CheckBox* m_pPrintEmptyPagesCB; - CheckBox* m_pPaperFromSetupCB; -diff --git a/sw/uiconfig/swriter/ui/printoptionspage.ui b/sw/uiconfig/swriter/ui/printoptionspage.ui -index 0bf9afe..95e5ae2 100644 ---- a/sw/uiconfig/swriter/ui/printoptionspage.ui -+++ b/sw/uiconfig/swriter/ui/printoptionspage.ui -@@ -1,6 +1,7 @@ - -+ - -- -+ - - True - False -@@ -344,7 +345,7 @@ - True - 0 - True -- none -+ inmargins - - - 0 -@@ -353,6 +354,24 @@ - 1 - - -+ -+ -+ In margins -+ True -+ True -+ False -+ True -+ 0 -+ True -+ none -+ -+ -+ 0 -+ 4 -+ 1 -+ 1 -+ -+ - - - --- -1.8.5.3 - diff --git a/SOURCES/0001-Resolves-fdo-37130-use-10pt-Default-style-font-for-c.patch b/SOURCES/0001-Resolves-fdo-37130-use-10pt-Default-style-font-for-c.patch deleted file mode 100644 index 04d2b87..0000000 --- a/SOURCES/0001-Resolves-fdo-37130-use-10pt-Default-style-font-for-c.patch +++ /dev/null @@ -1,32 +0,0 @@ -From a7228e0bdbb06de56145d1edeacfe4ede1a7a7d4 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= -Date: Sat, 12 Apr 2014 13:35:20 +0100 -Subject: [PATCH] Resolves: fdo#37130 use 10pt Default style font for comments - -instead of 10pt UI font - -Change-Id: I92e2b415ff37f8baae67a00cc077e431b12b924c ---- - sw/source/core/uibase/docvw/SidebarWin.cxx | 6 ------ - 1 file changed, 6 deletions(-) - -diff --git a/sw/source/core/uibase/docvw/SidebarWin.cxx b/sw/source/core/uibase/docvw/SidebarWin.cxx -index fb78b3b..930b95b 100644 ---- a/sw/source/ui/docvw/SidebarWin.cxx -+++ b/sw/source/ui/docvw/SidebarWin.cxx -@@ -270,12 +270,6 @@ SfxItemSet SwSidebarWin::DefaultItem() - { - SfxItemSet aItem( mrView.GetDocShell()->GetPool() ); - aItem.Put(SvxFontHeightItem(200,100,EE_CHAR_FONTHEIGHT)); -- aItem.Put(SvxFontItem(FAMILY_SWISS, -- GetSettings().GetStyleSettings().GetFieldFont().GetName(), -- OUString(), -- PITCH_DONTKNOW, -- RTL_TEXTENCODING_DONTKNOW, -- EE_CHAR_FONTINFO)); - return aItem; - } - --- -1.9.0 - diff --git a/SOURCES/0001-Resolves-fdo-37559-revert-adding-extra-dummy-polygon.patch b/SOURCES/0001-Resolves-fdo-37559-revert-adding-extra-dummy-polygon.patch new file mode 100644 index 0000000..e04e56a --- /dev/null +++ b/SOURCES/0001-Resolves-fdo-37559-revert-adding-extra-dummy-polygon.patch @@ -0,0 +1,73 @@ +From 62ccbdf2233e10e70909a080f09465982a504474 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Wed, 5 Nov 2014 13:49:07 +0000 +Subject: [PATCH] Resolves: fdo#37559 revert adding extra dummy polygons to get + better gradients + +Change-Id: I38b8e7cb79540a99696ac09e4061c9d87440b2b2 +--- + drawinglayer/source/primitive2d/polygonprimitive2d.cxx | 3 +-- + svx/source/customshapes/EnhancedCustomShape2d.cxx | 16 ---------------- + svx/source/customshapes/EnhancedCustomShapeFontWork.cxx | 2 +- + 3 files changed, 2 insertions(+), 19 deletions(-) + +diff --git a/drawinglayer/source/primitive2d/polygonprimitive2d.cxx b/drawinglayer/source/primitive2d/polygonprimitive2d.cxx +index 4a2944b..85b118f 100644 +--- a/drawinglayer/source/primitive2d/polygonprimitive2d.cxx ++++ b/drawinglayer/source/primitive2d/polygonprimitive2d.cxx +@@ -526,11 +526,10 @@ namespace drawinglayer + { + // copy local polygon, it may be changed + basegfx::B2DPolygon aLocalPolygon(getB2DPolygon()); +- aLocalPolygon.removeDoublePoints(); + basegfx::B2DPolyPolygon aArrowA; + basegfx::B2DPolyPolygon aArrowB; + +- if(!aLocalPolygon.isClosed() && aLocalPolygon.count() > 1) ++ if(!aLocalPolygon.isClosed()) + { + // apply arrows + const double fPolyLength(basegfx::tools::getLength(aLocalPolygon)); +diff --git a/svx/source/customshapes/EnhancedCustomShape2d.cxx b/svx/source/customshapes/EnhancedCustomShape2d.cxx +index 1e0e818..64e08d9 100644 +--- a/svx/source/customshapes/EnhancedCustomShape2d.cxx ++++ b/svx/source/customshapes/EnhancedCustomShape2d.cxx +@@ -1902,22 +1902,6 @@ void EnhancedCustomShape2d::CreateSubPath( sal_uInt16& rSrcPt, sal_uInt16& rSegm + + if(aNewB2DPolyPolygon.count()) + { +- if( !bLineGeometryNeededOnly ) +- { +- // hack aNewB2DPolyPolygon to fill logic rect - this is +- // needed to produce gradient fills that look like mso +- aNewB2DPolygon.clear(); +- aNewB2DPolygon.append(basegfx::B2DPoint(0,0)); +- aNewB2DPolygon.setClosed(true); +- aNewB2DPolyPolygon.append(aNewB2DPolygon); +- +- aNewB2DPolygon.clear(); +- aNewB2DPolygon.append(basegfx::B2DPoint(aLogicRect.GetWidth(), +- aLogicRect.GetHeight())); +- aNewB2DPolygon.setClosed(true); +- aNewB2DPolyPolygon.append(aNewB2DPolygon); +- } +- + // #i37011# + bool bForceCreateTwoObjects(false); + +diff --git a/svx/source/customshapes/EnhancedCustomShapeFontWork.cxx b/svx/source/customshapes/EnhancedCustomShapeFontWork.cxx +index 7332449..fba8740 100644 +--- a/svx/source/customshapes/EnhancedCustomShapeFontWork.cxx ++++ b/svx/source/customshapes/EnhancedCustomShapeFontWork.cxx +@@ -606,7 +606,7 @@ void InsertMissingOutlinePoints( const Polygon& /*rOutlinePoly*/, const std::vec + void GetPoint( const Polygon& rPoly, const std::vector< double >& rDistances, const double& fX, double& fx1, double& fy1 ) + { + fy1 = fx1 = 0.0; +- if ( rPoly.GetSize() > 1 ) ++ if ( rPoly.GetSize() ) + { + std::vector< double >::const_iterator aIter = std::lower_bound( rDistances.begin(), rDistances.end(), fX ); + sal_uInt16 nIdx = sal::static_int_cast( std::distance( rDistances.begin(), aIter ) ); +-- +1.9.3 + diff --git a/SOURCES/0001-Resolves-fdo-68967-looping-layout.patch b/SOURCES/0001-Resolves-fdo-68967-looping-layout.patch new file mode 100644 index 0000000..8c89e8f --- /dev/null +++ b/SOURCES/0001-Resolves-fdo-68967-looping-layout.patch @@ -0,0 +1,49 @@ +From 1fec67aab152e0c0ad6dd85082c50f1beff7d520 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Tue, 16 Sep 2014 13:22:44 +0100 +Subject: [PATCH] Resolves: fdo#68967 looping layout + +RemoveFollowFlowLine() marks the layout invalid, but the +next cycle through does everything exactly the same again. + +Try the same foul horror as nUnSplitted. But at least with +a test-case that nails down reproducing the bug if a better +fix is needed. + +Change-Id: Id6698bcb2364bd0253bedd4a7c313e25f705be8d +--- + sw/qa/extras/ww8import/data/fdo68967.doc | Bin 0 -> 99328 bytes + sw/qa/extras/ww8import/ww8import.cxx | 4 ++++ + sw/source/core/layout/tabfrm.cxx | 7 +++++++ + 3 files changed, 11 insertions(+) + create mode 100644 sw/qa/extras/ww8import/data/fdo68967.doc + +diff --git a/sw/source/core/layout/tabfrm.cxx b/sw/source/core/layout/tabfrm.cxx +index 06f38c7..f7a39f5 100644 +--- a/sw/source/core/layout/tabfrm.cxx ++++ b/sw/source/core/layout/tabfrm.cxx +@@ -1831,6 +1831,7 @@ void SwTabFrm::MakeAll() + } + + int nUnSplitted = 5; // Just another loop control :-( ++ int nThrowAwayValidLayoutLimit = 5; // And another one :-( + SWRECTFN( this ) + while ( !mbValidPos || !mbValidSize || !mbValidPrtArea ) + { +@@ -2301,7 +2302,13 @@ void SwTabFrm::MakeAll() + // An existing follow flow line has to be removed. + if ( HasFollowFlowLine() ) + { ++ if (!nThrowAwayValidLayoutLimit) ++ continue; ++ bool bInitialLoopEndCondition = mbValidPos && mbValidSize && mbValidPrtArea; + RemoveFollowFlowLine(); ++ bool bFinalLoopEndCondition = mbValidPos && mbValidSize && mbValidPrtArea; ++ if (bInitialLoopEndCondition && !bFinalLoopEndCondition) ++ --nThrowAwayValidLayoutLimit; + } + + const bool bSplitError = !Split( nDeadLine, bTryToSplit, ( bTableRowKeep && !bAllowSplitOfRow ) ); +-- +1.9.3 + diff --git a/SOURCES/0001-Resolves-fdo-78128-go-back-to-using-an-interim-metaf.patch b/SOURCES/0001-Resolves-fdo-78128-go-back-to-using-an-interim-metaf.patch deleted file mode 100644 index 8a22d0a..0000000 --- a/SOURCES/0001-Resolves-fdo-78128-go-back-to-using-an-interim-metaf.patch +++ /dev/null @@ -1,119 +0,0 @@ -From 834c9363f67198e33880c2ee7bdd136b5558599d Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= -Date: Thu, 1 May 2014 17:10:21 +0100 -Subject: [PATCH] Resolves: fdo#78128 go back to using an interim metafile - -this time we know that the other varient of "Move" doesn't -handle pixel drawing stuff like the dpi-using one does. - -and the move values have to be in 100TH_MM_MAP and -with the true numbers of the write page size - -Change-Id: I15fdb78797d8744702bec649024fedbf3e39b342 ---- - sw/source/core/view/vprint.cxx | 68 +++++++++++++++++++++++++++++------------- - 1 file changed, 48 insertions(+), 20 deletions(-) - -diff --git a/sw/source/core/view/vprint.cxx b/sw/source/core/view/vprint.cxx -index c9c7e42..6bc53e8 100644 ---- a/sw/source/core/view/vprint.cxx -+++ b/sw/source/core/view/vprint.cxx -@@ -455,6 +455,28 @@ sal_Bool SwViewShell::PrintOrPDFExport( - // output device is now provided by a call from outside the Writer) - pOutDev->Push(); - -+ // fdo#36815 for comments in margins print to a metafile -+ // and then scale that metafile down so that the comments -+ // will fit on the real page, and replay that scaled -+ // output to the real outputdevice -+ GDIMetaFile *pOrigRecorder(NULL); -+ GDIMetaFile *pMetaFile(NULL); -+ sal_Int16 nPostItMode = rPrintData.GetPrintPostIts(); -+ if (nPostItMode == POSTITS_INMARGINS) -+ { -+ //get and disable the existing recorder -+ pOrigRecorder = pOutDev->GetConnectMetaFile(); -+ pOutDev->SetConnectMetaFile(NULL); -+ // turn off output to the device -+ pOutDev->EnableOutput(false); -+ // just record the rendering commands to the metafile -+ // instead -+ pMetaFile = new GDIMetaFile; -+ pMetaFile->SetPrefSize(pOutDev->GetOutputSize()); -+ pMetaFile->SetPrefMapMode(pOutDev->GetMapMode()); -+ pMetaFile->Record(pOutDev); -+ } -+ - // Print/PDF export for (multi-)selection has already generated a - // temporary document with the selected text. - // (see XRenderable implementation in unotxdoc.cxx) -@@ -470,8 +492,6 @@ sal_Bool SwViewShell::PrintOrPDFExport( - pDrawView->SetBufferedOverlayAllowed( false ); - } - -- sal_Int16 nPostItMode = rPrintData.GetPrintPostIts(); -- - { // additional scope so that the CurrShell is reset before destroying the shell - - SET_CURR_SHELL( pShell ); -@@ -519,6 +539,32 @@ sal_Bool SwViewShell::PrintOrPDFExport( - pPostItManager->CalcRects(); - pPostItManager->LayoutPostIts(); - pPostItManager->DrawNotesForPage(pOutDev, nPage-1); -+ -+ //Stop recording now -+ pMetaFile->Stop(); -+ pMetaFile->WindStart(); -+ //Enable output to the device again -+ pOutDev->EnableOutput(true); -+ //Restore the original recorder -+ pOutDev->SetConnectMetaFile(pOrigRecorder); -+ -+ //Now scale the recorded page down so the notes -+ //will fit in the final page -+ double fScale = 0.75; -+ long nOrigHeight = pStPage->Frm().Height(); -+ long nNewHeight = nOrigHeight*fScale; -+ long nShiftY = (nOrigHeight-nNewHeight)/2; -+ pMetaFile->Scale( fScale, fScale ); -+ pMetaFile->WindStart(); -+ //Move the scaled page down to center it -+ //the other variant of Move does not map pixels -+ //back to the logical units correctly -+ pMetaFile->Move(0, TWIP_TO_MM100(nShiftY), pOutDev->ImplGetDPIX(), pOutDev->ImplGetDPIY()); -+ pMetaFile->WindStart(); -+ -+ //play back the scaled page -+ pMetaFile->Play(pOutDev); -+ delete pMetaFile; - } - } - -@@ -528,24 +574,6 @@ sal_Bool SwViewShell::PrintOrPDFExport( - // output device is now provided by a call from outside the Writer) - pOutDev->Pop(); - -- // fdo#36815 for comments in margins get the metafile we are printing to -- // and then scale and vertically center that metafile down so that the -- // comments will fit on the real page -- GDIMetaFile *pRecorder = pOutDev->GetConnectMetaFile(); -- if (nPostItMode == POSTITS_INMARGINS && pRecorder) -- { -- pRecorder->Stop(); -- pRecorder->WindStart(); -- double fScale = 0.75; -- long nOrigHeight = pOutDev->GetOutputSize().Height(); -- long nNewHeight = nOrigHeight*fScale; -- long nShiftY = (nOrigHeight-nNewHeight)/2; -- pRecorder->Scale(fScale, fScale); -- pRecorder->WindStart(); -- pRecorder->Move(0, nShiftY, pOutDev->ImplGetDPIX(), pOutDev->ImplGetDPIY()); -- pRecorder->WindStart(); -- } -- - return sal_True; - } - --- -1.9.0 - diff --git a/SOURCES/0001-Resolves-fdo-78151-change-style-on-toggling-bullets-.patch b/SOURCES/0001-Resolves-fdo-78151-change-style-on-toggling-bullets-.patch new file mode 100644 index 0000000..6ab8336 --- /dev/null +++ b/SOURCES/0001-Resolves-fdo-78151-change-style-on-toggling-bullets-.patch @@ -0,0 +1,810 @@ +From 34dcadf5f7bec6a02e3269d4cffb27e036303b2a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Fri, 6 Jun 2014 15:13:26 +0100 +Subject: [PATCH] Resolves: fdo#78151 change style on toggling bullets on + master page outliners + +"do what I mean" + +In master pages prior to this if we toggle bullets on and off the that changes +the *level* of the paragraph. And because the paragraph is effectively a +preview of the equivalent style level, changing the level disconnects it from +the style which is useless for us. + +So instead turn the numbering off at the given outline level. In order to +toggle the numbering back split the defaults-setting into a reusable piece that +sets the numbering indent which we can call to toggle numbering back on + +Also split out the broadcast style change *and explicit child* broadcast code +into a reusable method, the absence of which left me stumped for well over an +hour as to why my changes only worked on level 1 + +Related: fdo#78151 force outliners in master view to be read-only text + +because these contain place-holder text and it doesn't make sense +to be able to edit them (unless some-day we support custom place-holder +prompts) + +because they are now read-only add a pair of "show next level" and "hide +last level" features so on right clicking the last outline paragraph +you can make the next one visible, or make the last one invisible + +Change-Id: Iea24d810f298156cfe2f32aa53d0515da45e08eb +(cherry picked from commit 7e600aca08ebbd69b0c8ef924c84af4dcf80df56) + +Change-Id: I311c7f35f1ca7dff1d151c6141ff5faa7f15c5a2 +(cherry picked from commit 8a5b3971057237b178f7e65437deec766b56f9c4) +--- + .../openoffice/Office/UI/DrawImpressCommands.xcu | 10 +++ + sd/inc/app.hrc | 5 +- + sd/inc/sdcommands.h | 2 + + sd/inc/stlpool.hxx | 2 + + sd/inc/stlsheet.hxx | 8 +++ + sd/sdi/_drvwsh.sdi | 10 +++ + sd/sdi/sdraw.sdi | 48 ++++++++++++++ + sd/source/core/stlpool.cxx | 57 +++++++++++----- + sd/source/core/stlsheet.cxx | 30 ++++++++- + sd/source/ui/app/popup.src | 13 ++++ + sd/source/ui/func/futempl.cxx | 21 +----- + sd/source/ui/inc/DrawViewShell.hxx | 6 ++ + sd/source/ui/inc/View.hxx | 19 ++++++ + sd/source/ui/view/drtxtob1.cxx | 76 ++++++++++++++++++++-- + sd/source/ui/view/drviews2.cxx | 50 ++++++++++++++ + sd/source/ui/view/drviews7.cxx | 66 +++++++++++++++++++ + sd/source/ui/view/sdview.cxx | 30 ++++++++- + 17 files changed, 408 insertions(+), 45 deletions(-) + +diff --git a/officecfg/registry/data/org/openoffice/Office/UI/DrawImpressCommands.xcu b/officecfg/registry/data/org/openoffice/Office/UI/DrawImpressCommands.xcu +index b4b6366..31aa4d7 100644 +--- a/officecfg/registry/data/org/openoffice/Office/UI/DrawImpressCommands.xcu ++++ b/officecfg/registry/data/org/openoffice/Office/UI/DrawImpressCommands.xcu +@@ -584,6 +584,16 @@ + H~yperlink... + + ++ ++ ++ ~Hide Last Level ++ ++ ++ ++ ++ ~Show Next Level ++ ++ + + + ~Page... +diff --git a/sd/inc/app.hrc b/sd/inc/app.hrc +index ef8631f..fae13da 100644 +--- a/sd/inc/app.hrc ++++ b/sd/inc/app.hrc +@@ -447,9 +447,10 @@ + + #define SID_ADD_MOTION_PATH (SID_SD_START+442) + #define SID_TABLE_TOOLBOX (SID_SD_START+443) +- + // free +-#define SID_PRESENTATION_MINIMIZER (SID_SD_START+450) ++#define SID_HIDE_LAST_LEVEL (SID_SD_START+448) ++#define SID_SHOW_NEXT_LEVEL (SID_SD_START+449) ++#define SID_PRESENTATION_MINIMIZER (SID_SD_START+450) + #endif + + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +diff --git a/sd/inc/sdcommands.h b/sd/inc/sdcommands.h +index 2041d8f..276bf6d 100644 +--- a/sd/inc/sdcommands.h ++++ b/sd/inc/sdcommands.h +@@ -119,6 +119,8 @@ + #define CMD_SID_INSERTPAGE_LAYOUT_MENU ".uno:TaskPaneInsertPage" + #define CMD_SID_PHOTOALBUM ".uno:PhotoAlbumDialog" + #define CMD_SID_PRESENTATION_MINIMIZER ".uno:PresentationMinimizer" ++#define CMD_SID_HIDE_LAST_LEVEL ".uno:HideLastLevel" ++#define CMD_SID_SHOW_NEXT_LEVEL ".uno:ShowNextLevel" + + #endif + +diff --git a/sd/inc/stlpool.hxx b/sd/inc/stlpool.hxx +index 31cb814..7af9fe9 100644 +--- a/sd/inc/stlpool.hxx ++++ b/sd/inc/stlpool.hxx +@@ -42,6 +42,7 @@ class SdStyleSheet; + class SdDrawDocument; + class SdPage; + class SfxStyleSheetBase; ++class SvxNumberFormat; + + typedef std::map< const SdPage*, SdStyleFamilyRef > SdStyleFamilyMap; + +@@ -92,6 +93,7 @@ public: + + static SdStyleSheetVector CreateChildList( SdStyleSheet* pSheet ); + ++ static void setDefaultOutlineNumberFormatBulletAndIndent(sal_uInt16 i, SvxNumberFormat &rNumberFormat); + + public: + void throwIfDisposed() throw(::com::sun::star::uno::RuntimeException); +diff --git a/sd/inc/stlsheet.hxx b/sd/inc/stlsheet.hxx +index a64366b..d8b1183 100644 +--- a/sd/inc/stlsheet.hxx ++++ b/sd/inc/stlsheet.hxx +@@ -39,6 +39,8 @@ + + #include + ++#include "prlayout.hxx" ++ + class ModifyListenerForewarder; + + typedef cppu::ImplInheritanceHelper5< SfxUnoStyleSheet, +@@ -75,6 +77,12 @@ public: + + static SdStyleSheet* CreateEmptyUserStyle( SfxStyleSheetBasePool& rPool, SfxStyleFamily eFamily ); + ++ //Broadcast that a SdStyleSheet has changed, taking into account outline sublevels ++ //which need to be explicitly broadcast as changing if their parent style was ++ //the one that changed ++ static void BroadcastSdStyleSheetChange(SfxStyleSheetBase* pStyleSheet, PresentationObjects ePO, ++ SfxStyleSheetBasePool* pSSPool); ++ + // XInterface + virtual void SAL_CALL release( ) throw () SAL_OVERRIDE; + +diff --git a/sd/sdi/_drvwsh.sdi b/sd/sdi/_drvwsh.sdi +index d328cf4..f8119e9 100644 +--- a/sd/sdi/_drvwsh.sdi ++++ b/sd/sdi/_drvwsh.sdi +@@ -2309,6 +2309,16 @@ interface DrawView + ExecMethod = FuTemporary ; + StateMethod = GetMenuState ; + ] ++ SID_HIDE_LAST_LEVEL // ole : no, status : ? ++ [ ++ ExecMethod = FuTemporary ; ++ StateMethod = GetMenuState ; ++ ] ++ SID_SHOW_NEXT_LEVEL // ole : no, status : ? ++ [ ++ ExecMethod = FuTemporary ; ++ StateMethod = GetMenuState ; ++ ] + SID_TRANSLITERATE_UPPER // ole : no, status : ? + [ + ExecMethod = FuSupport ; +diff --git a/sd/sdi/sdraw.sdi b/sd/sdi/sdraw.sdi +index 9a03c4f..de7f1a2 100644 +--- a/sd/sdi/sdraw.sdi ++++ b/sd/sdi/sdraw.sdi +@@ -7025,3 +7025,51 @@ SfxVoidItem PresentationMinimizer SID_PRESENTATION_MINIMIZER + ToolBoxConfig = TRUE, + GroupId = GID_OPTIONS; + ] ++ ++SfxVoidItem HideLastLevel SID_HIDE_LAST_LEVEL ++() ++[ ++ /* flags: */ ++ AutoUpdate = FALSE, ++ Cachable = Cachable, ++ FastCall = FALSE, ++ HasCoreId = FALSE, ++ HasDialog = TRUE, ++ ReadOnlyDoc = FALSE, ++ Toggle = FALSE, ++ Container = FALSE, ++ RecordAbsolute = FALSE, ++ RecordPerSet; ++ Synchron; ++ ++ /* config: */ ++ AccelConfig = FALSE, ++ MenuConfig = FALSE, ++ StatusBarConfig = FALSE, ++ ToolBoxConfig = FALSE, ++ GroupId = GID_OPTIONS; ++] ++ ++SfxVoidItem ShowNextLevel SID_SHOW_NEXT_LEVEL ++() ++[ ++ /* flags: */ ++ AutoUpdate = FALSE, ++ Cachable = Cachable, ++ FastCall = FALSE, ++ HasCoreId = FALSE, ++ HasDialog = TRUE, ++ ReadOnlyDoc = FALSE, ++ Toggle = FALSE, ++ Container = FALSE, ++ RecordAbsolute = FALSE, ++ RecordPerSet; ++ Synchron; ++ ++ /* config: */ ++ AccelConfig = FALSE, ++ MenuConfig = FALSE, ++ StatusBarConfig = FALSE, ++ ToolBoxConfig = FALSE, ++ GroupId = GID_OPTIONS; ++] +diff --git a/sd/source/core/stlpool.cxx b/sd/source/core/stlpool.cxx +index c98dff7..8fdec5e 100644 +--- a/sd/source/core/stlpool.cxx ++++ b/sd/source/core/stlpool.cxx +@@ -1052,9 +1052,49 @@ void SdStyleSheetPool::UpdateStdNames() + } + } + +-// Set new SvxNumBulletItem for the respective style sheet ++void SdStyleSheetPool::setDefaultOutlineNumberFormatBulletAndIndent(sal_uInt16 i, SvxNumberFormat &rNumberFormat) ++{ ++ rNumberFormat.SetBulletChar( 0x25CF ); // StarBats: 0xF000 + 34 ++ rNumberFormat.SetBulletRelSize(45); ++ const short nLSpace = (i + 1) * 1200; ++ rNumberFormat.SetLSpace(nLSpace); ++ rNumberFormat.SetAbsLSpace(nLSpace); ++ short nFirstLineOffset = -600; ++ ++ switch(i) ++ { ++ case 0: ++ { ++ nFirstLineOffset = -900; ++ } ++ break; + ++ case 1: ++ { ++ rNumberFormat.SetBulletChar( 0x2013 ); // StarBats: 0xF000 + 150 ++ rNumberFormat.SetBulletRelSize(75); ++ nFirstLineOffset = -900; ++ } ++ break; + ++ case 2: ++ { ++ nFirstLineOffset = -800; ++ } ++ break; ++ ++ case 3: ++ { ++ rNumberFormat.SetBulletChar( 0x2013 ); // StarBats: 0xF000 + 150 ++ rNumberFormat.SetBulletRelSize(75); ++ } ++ break; ++ } ++ ++ rNumberFormat.SetFirstLineOffset(nFirstLineOffset); ++} ++ ++// Set new SvxNumBulletItem for the respective style sheet + void SdStyleSheetPool::PutNumBulletItem( SfxStyleSheetBase* pSheet, + Font& rBulletFont ) + { +@@ -1134,12 +1174,7 @@ void SdStyleSheetPool::PutNumBulletItem( SfxStyleSheetBase* pSheet, + SVX_MAX_NUM, false ); + for( sal_uInt16 i = 0; i < aNumRule.GetLevelCount(); i++ ) + { +- aNumberFormat.SetBulletChar( 0x25CF ); // StarBats: 0xF000 + 34 +- aNumberFormat.SetBulletRelSize(45); +- const short nLSpace = (i + 1) * 1200; +- aNumberFormat.SetLSpace(nLSpace); +- aNumberFormat.SetAbsLSpace(nLSpace); +- short nFirstLineOffset = -600; ++ setDefaultOutlineNumberFormatBulletAndIndent(i, aNumberFormat); + + sal_uLong nFontSize = 20; + switch(i) +@@ -1147,36 +1182,28 @@ void SdStyleSheetPool::PutNumBulletItem( SfxStyleSheetBase* pSheet, + case 0: + { + nFontSize = 32; +- nFirstLineOffset = -900; + } + break; + + case 1: + { +- aNumberFormat.SetBulletChar( 0x2013 ); // StarBats: 0xF000 + 150 +- aNumberFormat.SetBulletRelSize(75); + nFontSize = 32; +- nFirstLineOffset = -900; + } + break; + + case 2: + { + nFontSize = 28; +- nFirstLineOffset = -800; + } + break; + + case 3: + { +- aNumberFormat.SetBulletChar( 0x2013 ); // StarBats: 0xF000 + 150 +- aNumberFormat.SetBulletRelSize(75); + nFontSize = 24; + } + break; + } + +- aNumberFormat.SetFirstLineOffset(nFirstLineOffset); + nFontSize = (sal_uInt16)((nFontSize * 2540L) / 72); // Pt --> 1/100 mm + rBulletFont.SetSize(Size(0,846)); // 24 pt + aNumberFormat.SetBulletFont(&rBulletFont); +diff --git a/sd/source/core/stlsheet.cxx b/sd/source/core/stlsheet.cxx +index 5df055f..c0f34e0 100644 +--- a/sd/source/core/stlsheet.cxx ++++ b/sd/source/core/stlsheet.cxx +@@ -1364,12 +1364,38 @@ Any SAL_CALL SdStyleSheet::getPropertyDefault( const OUString& aPropertyName ) t + return aRet; + } + +- +- + /** this is used because our property map is not sorted yet */ + const SfxItemPropertySimpleEntry* SdStyleSheet::getPropertyMapEntry( const OUString& rPropertyName ) const throw() + { + return GetStylePropertySet().getPropertyMapEntry(rPropertyName); + } + ++//Broadcast that a SdStyleSheet has changed, taking into account outline sublevels ++//which need to be explicitly broadcast as changing if their parent style was ++//the one that changed ++void SdStyleSheet::BroadcastSdStyleSheetChange(SfxStyleSheetBase* pStyleSheet, ++ PresentationObjects ePO, SfxStyleSheetBasePool* pSSPool) ++{ ++ SdStyleSheet* pRealSheet =((SdStyleSheet*)pStyleSheet)->GetRealStyleSheet(); ++ pRealSheet->Broadcast(SfxSimpleHint(SFX_HINT_DATACHANGED)); ++ ++ if( (ePO >= PO_OUTLINE_1) && (ePO <= PO_OUTLINE_8) ) ++ { ++ OUString sStyleName(SD_RESSTR(STR_PSEUDOSHEET_OUTLINE) + " "); ++ ++ for( sal_uInt16 n = (sal_uInt16)(ePO - PO_OUTLINE_1 + 2); n < 10; n++ ) ++ { ++ OUString aName( sStyleName + OUString::number(n) ); ++ ++ SfxStyleSheetBase* pSheet = pSSPool->Find( aName, SD_STYLE_FAMILY_PSEUDO); ++ ++ if(pSheet) ++ { ++ SdStyleSheet* pRealStyleSheet = ((SdStyleSheet*)pSheet)->GetRealStyleSheet(); ++ pRealStyleSheet->Broadcast(SfxSimpleHint(SFX_HINT_DATACHANGED)); ++ } ++ } ++ } ++} ++ + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +diff --git a/sd/source/ui/app/popup.src b/sd/source/ui/app/popup.src +index 7f8692f..1fd5561 100644 +--- a/sd/source/ui/app/popup.src ++++ b/sd/source/ui/app/popup.src +@@ -33,6 +33,19 @@ Menu RID_DRAW_TEXTOBJ_INSIDE_POPUP + { + ItemList = + { ++ MenuItem ++ { ++ Identifier = SID_HIDE_LAST_LEVEL; ++ Command = CMD_SID_HIDE_LAST_LEVEL; ++ Text [ en-US ] = "~Hide Last Level"; ++ }; ++ MenuItem ++ { ++ Identifier = SID_SHOW_NEXT_LEVEL; ++ Command = CMD_SID_SHOW_NEXT_LEVEL; ++ Text [ en-US ] = "~Show Next Level"; ++ }; ++ SEPARATOR + MN_SET_DEFAULT + SEPARATOR + MN_TEXTATTR +diff --git a/sd/source/ui/func/futempl.cxx b/sd/source/ui/func/futempl.cxx +index 1dd0c40..42b453c 100644 +--- a/sd/source/ui/func/futempl.cxx ++++ b/sd/source/ui/func/futempl.cxx +@@ -428,27 +428,8 @@ void FuTemplate::DoExecute( SfxRequest& rReq ) + } + } + +- OUString sStyleName(SD_RESSTR(STR_PSEUDOSHEET_OUTLINE) + " "); +- + pStyleSheet->GetItemSet().Put(aTempSet); +- SdStyleSheet* pRealSheet =((SdStyleSheet*)pStyleSheet)->GetRealStyleSheet(); +- pRealSheet->Broadcast(SfxSimpleHint(SFX_HINT_DATACHANGED)); +- +- if( (ePO >= PO_OUTLINE_1) && (ePO <= PO_OUTLINE_8) ) +- { +- for( sal_uInt16 n = (sal_uInt16)(ePO - PO_OUTLINE_1 + 2); n < 10; n++ ) +- { +- OUString aName( sStyleName + OUString::number(n) ); +- +- SfxStyleSheetBase* pSheet = pSSPool->Find( aName, SD_STYLE_FAMILY_PSEUDO); +- +- if(pSheet) +- { +- SdStyleSheet* pRealStyleSheet = ((SdStyleSheet*)pSheet)->GetRealStyleSheet(); +- pRealStyleSheet->Broadcast(SfxSimpleHint(SFX_HINT_DATACHANGED)); +- } +- } +- } ++ SdStyleSheet::BroadcastSdStyleSheetChange(pStyleSheet, ePO, pSSPool); + } + + SfxItemSet& rAttr = pStyleSheet->GetItemSet(); +diff --git a/sd/source/ui/inc/DrawViewShell.hxx b/sd/source/ui/inc/DrawViewShell.hxx +index 7ec42ea..6e4b55a 100644 +--- a/sd/source/ui/inc/DrawViewShell.hxx ++++ b/sd/source/ui/inc/DrawViewShell.hxx +@@ -32,6 +32,7 @@ + #include + #include + ++class Outliner; + class SdPage; + class SdrExternalToolEdit; + class DrawDocShell; +@@ -43,6 +44,7 @@ class TransferableClipboardListener; + class AbstractSvxNameDialog; + class SdrLayer; + class SvxClipboardFmtItem; ++struct ESelection; + + namespace sd { + +@@ -163,6 +165,10 @@ public: + virtual OUString GetSelectionText( bool bCompleteWords = false ); + virtual bool HasSelection( bool bText = true ) const; + ++ //If we are editing an PRESOBJ_OUTLINE return the Outliner and fill rSel ++ //with the current selection ++ ::Outliner* GetOutlinerForMasterPageOutlineTextObj(ESelection &rSel); ++ + void ExecCtrl(SfxRequest& rReq); + void GetCtrlState(SfxItemSet& rSet); + void GetDrawAttrState(SfxItemSet& rSet); +diff --git a/sd/source/ui/inc/View.hxx b/sd/source/ui/inc/View.hxx +index cd80568..2c59ade 100644 +--- a/sd/source/ui/inc/View.hxx ++++ b/sd/source/ui/inc/View.hxx +@@ -63,6 +63,24 @@ struct SdViewRedrawRec + Rectangle aRect; + }; + ++//For master view we want to force that master ++//textboxes have readonly text, because the ++//text is the auto-generated click-here-to-edit ++//and it doesn't help to change it ++class OutlinerMasterViewFilter ++{ ++private: ++ SdrOutliner *m_pOutl; ++ bool m_bReadOnly; ++public: ++ OutlinerMasterViewFilter() ++ : m_pOutl(0) ++ , m_bReadOnly(false) ++ { ++ } ++ void Start(SdrOutliner *pOutl); ++ void End(); ++}; + + class View : public FmFormView + { +@@ -275,6 +293,7 @@ protected: + + private: + ::std::auto_ptr mpClipboard; ++ OutlinerMasterViewFilter maMasterViewFilter; + }; + + +diff --git a/sd/source/ui/view/drtxtob1.cxx b/sd/source/ui/view/drtxtob1.cxx +index 605983c..761ed63 100644 +--- a/sd/source/ui/view/drtxtob1.cxx ++++ b/sd/source/ui/view/drtxtob1.cxx +@@ -57,10 +57,14 @@ + #include + + #include "app.hrc" +- ++#include "glob.hrc" ++#include "sdresid.hxx" ++#include "prlayout.hxx" + #include "ViewShell.hxx" + #include "drawview.hxx" + #include "drawdoc.hxx" ++#include "stlpool.hxx" ++#include "stlsheet.hxx" + #include "OutlineView.hxx" + #include "Window.hxx" + #include "futempl.hxx" +@@ -316,10 +320,74 @@ void TextObjectBar::Execute( SfxRequest &rReq ) + break; + + case FN_NUM_BULLET_ON: +- if( pOLV ) +- pOLV->ToggleBullets(); +- break; ++ { ++ if (pOLV) ++ { ++ bool bMasterPage = false; ++ SdrPageView* pPageView = mpView->GetSdrPageView(); ++ if (pPageView) ++ { ++ SdPage* pPage = (SdPage*)pPageView->GetPage(); ++ bMasterPage = pPage && (pPage->GetPageKind() == PK_STANDARD) && pPage->IsMasterPage(); ++ } + ++ if (!bMasterPage) ++ pOLV->ToggleBullets(); ++ else ++ { ++ //Resolves: fdo#78151 in master pages if we toggle bullets on ++ //and off then just disable/enable the bulleting, but do not ++ //change the *level* of the paragraph, because the paragraph is ++ //effectively a preview of the equivalent style level, and ++ //changing the level disconnects it from the style ++ ++ ::Outliner* pOL = pOLV->GetOutliner(); ++ if (pOL) ++ { ++ const SvxNumBulletItem *pItem = NULL; ++ SfxStyleSheetBasePool* pSSPool = mpView->GetDocSh()->GetStyleSheetPool(); ++ OUString sStyleName(SD_RESSTR(STR_PSEUDOSHEET_OUTLINE) + " 1"); ++ SfxStyleSheetBase* pFirstStyleSheet = pSSPool->Find(sStyleName, SD_STYLE_FAMILY_PSEUDO); ++ if( pFirstStyleSheet ) ++ pFirstStyleSheet->GetItemSet().GetItemState(EE_PARA_NUMBULLET, false, (const SfxPoolItem**)&pItem); ++ ++ if (pItem ) ++ { ++ SvxNumRule aNewRule(*((SvxNumBulletItem*)pItem)->GetNumRule()); ++ ESelection aSel = pOLV->GetSelection(); ++ aSel.Adjust(); ++ sal_Int32 nStartPara = aSel.nStartPara; ++ sal_Int32 nEndPara = aSel.nEndPara; ++ for (sal_Int32 nPara = nStartPara; nPara <= nEndPara; ++nPara) ++ { ++ sal_uInt16 nLevel = pOL->GetDepth(nPara); ++ SvxNumberFormat aFmt(aNewRule.GetLevel(nLevel)); ++ ++ if (aFmt.GetNumberingType() == SVX_NUM_NUMBER_NONE) ++ { ++ aFmt.SetNumberingType(SVX_NUM_CHAR_SPECIAL); ++ SdStyleSheetPool::setDefaultOutlineNumberFormatBulletAndIndent(nLevel, aFmt); ++ } ++ else ++ { ++ aFmt.SetNumberingType(SVX_NUM_NUMBER_NONE); ++ aFmt.SetLSpace(0); ++ aFmt.SetAbsLSpace(0); ++ aFmt.SetFirstLineOffset(0); ++ } ++ ++ aNewRule.SetLevel(nLevel, aFmt); ++ } ++ ++ pFirstStyleSheet->GetItemSet().Put(SvxNumBulletItem(aNewRule, EE_PARA_NUMBULLET)); ++ ++ SdStyleSheet::BroadcastSdStyleSheetChange(pFirstStyleSheet, PO_OUTLINE_1, pSSPool); ++ } ++ } ++ } ++ } ++ break; ++ } + case SID_GROW_FONT_SIZE: + case SID_SHRINK_FONT_SIZE: + { +diff --git a/sd/source/ui/view/drviews2.cxx b/sd/source/ui/view/drviews2.cxx +index 688432e..685adbd 100644 +--- a/sd/source/ui/view/drviews2.cxx ++++ b/sd/source/ui/view/drviews2.cxx +@@ -1799,6 +1799,56 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq) + } + break; + ++ case SID_HIDE_LAST_LEVEL: ++ { ++ ESelection aSel; ++ // fdo#78151 editing a PRESOBJ_OUTLINE in a master page ? ++ ::Outliner* pOL = GetOutlinerForMasterPageOutlineTextObj(aSel); ++ if (pOL) ++ { ++ //we are on the last paragraph ++ aSel.Adjust(); ++ if (aSel.nEndPara == pOL->GetParagraphCount() - 1) ++ { ++ sal_uInt16 nDepth = pOL->GetDepth(aSel.nEndPara); ++ //there exists a previous numbering level ++ if (nDepth != sal_uInt16(-1) && nDepth > 0) ++ { ++ Paragraph* pPara = pOL->GetParagraph(aSel.nEndPara); ++ pOL->Remove(pPara, 1); ++ } ++ } ++ } ++ Cancel(); ++ rReq.Done (); ++ } ++ break; ++ ++ case SID_SHOW_NEXT_LEVEL: ++ { ++ ESelection aSel; ++ // fdo#78151 editing a PRESOBJ_OUTLINE in a master page ? ++ ::Outliner* pOL = GetOutlinerForMasterPageOutlineTextObj(aSel); ++ if (pOL) ++ { ++ //we are on the last paragraph ++ aSel.Adjust(); ++ if (aSel.nEndPara == pOL->GetParagraphCount() - 1) ++ { ++ sal_uInt16 nDepth = pOL->GetDepth(aSel.nEndPara); ++ //there exists a previous numbering level ++ if (nDepth != sal_uInt16(-1) && nDepth < 8) ++ { ++ sal_uInt16 nNewDepth = nDepth+1; ++ pOL->Insert(SD_RESSTR(STR_PRESOBJ_MPOUTLINE+nNewDepth), EE_PARA_APPEND, nNewDepth); ++ } ++ } ++ } ++ Cancel(); ++ rReq.Done (); ++ } ++ break; ++ + case SID_INSERT_FLD_DATE_FIX: + case SID_INSERT_FLD_DATE_VAR: + case SID_INSERT_FLD_TIME_FIX: +diff --git a/sd/source/ui/view/drviews7.cxx b/sd/source/ui/view/drviews7.cxx +index 81e2e00..d57b4a6 100644 +--- a/sd/source/ui/view/drviews7.cxx ++++ b/sd/source/ui/view/drviews7.cxx +@@ -212,6 +212,37 @@ void DrawViewShell::GetDrawAttrState(SfxItemSet& rSet) + rSet.Put(aSet,false); + } + ++::Outliner* DrawViewShell::GetOutlinerForMasterPageOutlineTextObj(ESelection &rSel) ++{ ++ if( !mpDrawView ) ++ return NULL; ++ ++ //when there is one object selected ++ if (!mpDrawView->AreObjectsMarked() || (mpDrawView->GetMarkedObjectList().GetMarkCount() != 1)) ++ return NULL; ++ ++ //and we are editing the outline object ++ if (!mpDrawView->IsTextEdit()) ++ return NULL; ++ ++ SdrPageView* pPageView = mpDrawView->GetSdrPageView(); ++ if (!pPageView) ++ return NULL; ++ ++ SdPage* pPage = (SdPage*)pPageView->GetPage(); ++ //only show these in a normal master page ++ if (!pPage || (pPage->GetPageKind() != PK_STANDARD) || !pPage->IsMasterPage()) ++ return NULL; ++ ++ OutlinerView* pOLV = mpDrawView->GetTextEditOutlinerView(); ++ ::Outliner* pOL = pOLV ? pOLV->GetOutliner() : NULL; ++ if (!pOL) ++ return NULL; ++ rSel = pOLV->GetSelection(); ++ ++ return pOL; ++} ++ + void DrawViewShell::GetMenuState( SfxItemSet &rSet ) + { + if (mpDrawView == NULL) +@@ -1565,6 +1596,41 @@ void DrawViewShell::GetMenuState( SfxItemSet &rSet ) + if ( bDisableEditHyperlink ) + rSet.DisableItem( SID_OPEN_HYPERLINK ); + ++ //fdo#78151 enable show next level/hide last level if editing a master page ++ //PRESOBJ_OUTLINE object and the current selection allow that to happen ++ { ++ bool bDisableShowNextLevel = true; ++ bool bDisableHideLastLevel = true; ++ ++ ESelection aSel; ++ ::Outliner* pOL = GetOutlinerForMasterPageOutlineTextObj(aSel); ++ if (pOL) ++ { ++ //and are on the last paragraph ++ aSel.Adjust(); ++ if (aSel.nEndPara == pOL->GetParagraphCount() - 1) ++ { ++ sal_uInt16 nDepth = pOL->GetDepth(aSel.nEndPara); ++ if (nDepth != sal_uInt16(-1)) ++ { ++ //there exists another numbering level that ++ //is currently hidden ++ if (nDepth < 8) ++ bDisableShowNextLevel = false; ++ //there exists a previous numbering level ++ if (nDepth > 0) ++ bDisableHideLastLevel = false; ++ } ++ } ++ } ++ ++ if (bDisableShowNextLevel) ++ rSet.DisableItem(SID_SHOW_NEXT_LEVEL); ++ ++ if (bDisableHideLastLevel) ++ rSet.DisableItem(SID_HIDE_LAST_LEVEL); ++ } ++ + #if defined WNT || defined UNX + if( !mxScannerManager.is() ) + { +diff --git a/sd/source/ui/view/sdview.cxx b/sd/source/ui/view/sdview.cxx +index 53e48a5..8755f8e 100644 +--- a/sd/source/ui/view/sdview.cxx ++++ b/sd/source/ui/view/sdview.cxx +@@ -653,12 +653,33 @@ static void SetSpellOptions( const SdDrawDocument& rDoc, sal_uLong& rCntrl ) + rCntrl &= ~EE_CNTRL_ONLINESPELLING; + } + ++void OutlinerMasterViewFilter::Start(SdrOutliner *pOutl) ++{ ++ m_pOutl = pOutl; ++ OutlinerView* pOutlView = m_pOutl->GetView(0); ++ m_bReadOnly = pOutlView->IsReadOnly(); ++ pOutlView->SetReadOnly(true); ++} ++ ++void OutlinerMasterViewFilter::End() ++{ ++ if (m_pOutl) ++ { ++ OutlinerView* pOutlView = m_pOutl->GetView(0); ++ pOutlView->SetReadOnly(m_bReadOnly); ++ m_pOutl = NULL; ++ } ++} ++ + bool View::SdrBeginTextEdit( + SdrObject* pObj, SdrPageView* pPV, ::Window* pWin, + bool bIsNewObj, + SdrOutliner* pOutl, OutlinerView* pGivenOutlinerView, + bool bDontDeleteOutliner, bool bOnlyOneView, bool bGrabFocus ) + { ++ SdrPage* pPage = pObj->GetPage(); ++ bool bMasterPage = pPage && pPage->IsMasterPage(); ++ + GetViewShell()->GetViewShellBase().GetEventMultiplexer()->MultiplexEvent( + sd::tools::EventMultiplexerEvent::EID_BEGIN_TEXT_EDIT, (void*)pObj ); + +@@ -731,12 +752,17 @@ bool View::SdrBeginTextEdit( + } + } + +- return(bReturn); ++ if (bMasterPage && bReturn) ++ maMasterViewFilter.Start(pOutl); ++ ++ return bReturn; + } + + /** ends current text editing */ +-SdrEndTextEditKind View::SdrEndTextEdit(bool bDontDeleteReally ) ++SdrEndTextEditKind View::SdrEndTextEdit(bool bDontDeleteReally) + { ++ maMasterViewFilter.End(); ++ + SdrObjectWeakRef xObj( GetTextEditObject() ); + + bool bDefaultTextRestored = RestoreDefaultText( dynamic_cast< SdrTextObj* >( GetTextEditObject() ) ); +-- +2.1.0 + diff --git a/SOURCES/0001-Resolves-fdo-80911-don-t-swap-notes-page-width-heigh.patch b/SOURCES/0001-Resolves-fdo-80911-don-t-swap-notes-page-width-heigh.patch new file mode 100644 index 0000000..c7c70c1 --- /dev/null +++ b/SOURCES/0001-Resolves-fdo-80911-don-t-swap-notes-page-width-heigh.patch @@ -0,0 +1,96 @@ +From 8e4c1db34025dff41f4576865e49f1e9f990aa9f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Thu, 18 Sep 2014 11:40:26 +0100 +Subject: [PATCH] Resolves: fdo#80911 don't swap notes page width/height + +IsDraw doesn't mean the app/page is Draw + +it means a slide in impress. + +commit 7b31e45ec7106d2cfbdbb7915d97667ba710f81c +Date: Mon Jun 23 20:55:21 2014 +0100 + Make Draw use paper size when printing - fdo#63905 + + Previously, Draw/Impress use the default size from the printer. + Now Draw uses the paper size (specified in page formatting). + Impress still uses the old method - not sure if this is correct + but printing handouts etc probably complicate print/paper size. + +suggests the intent is for this to not affect Impress and to only +affect Draw, so this does that + +(cherry picked from commit f1f89f0202232635e7fbbd7ca47de51755b2bce0) + +Conflicts: + sd/source/ui/view/DocumentRenderer.cxx + +Change-Id: I481a824ef244fd837992c893f6de0c051af0a26b + +(cherry picked from commit cca120ad92ecab741ca9683f3cf76d9e4fc81729) + +Conflicts: + sd/source/ui/view/DocumentRenderer.cxx + +Change-Id: I9826f69d03de85ea8d2b2c025121599877798852 +--- + sd/source/ui/view/DocumentRenderer.cxx | 31 +++++++++++++++++-------------- + 1 file changed, 17 insertions(+), 14 deletions(-) + +diff --git a/sd/source/ui/view/DocumentRenderer.cxx b/sd/source/ui/view/DocumentRenderer.cxx +index 7080e9d..8e1739c 100644 +--- a/sd/source/ui/view/DocumentRenderer.cxx ++++ b/sd/source/ui/view/DocumentRenderer.cxx +@@ -1409,6 +1409,7 @@ private: + SdDrawDocument* pDocument = mrBase.GetMainViewShell()->GetDoc(); + bool bIsDraw = pDocument->GetDocumentType() == DOCUMENT_TYPE_DRAW; + rInfo.meOrientation = ORIENTATION_PORTRAIT; ++ bool bDoDodgyHeightWidthFit = !bIsDraw && !mpOptions->IsNotes(); + + if( ! mpOptions->IsBooklet()) + { +@@ -1418,9 +1420,9 @@ private: + else if (rInfo.maPageSize.Width() < rInfo.maPageSize.Height()) + rInfo.meOrientation = ORIENTATION_LANDSCAPE; + +- // Draw should abide by specified paper size ++ // Draw and Notes should abide by their specified paper size + Size aPaperSize; +- if (bIsDraw) ++ if (!bDoDodgyHeightWidthFit) + { + aPaperSize.setWidth(rInfo.maPageSize.Width()); + aPaperSize.setHeight(rInfo.maPageSize.Height()); +@@ -1431,18 +1433,19 @@ private: + aPaperSize.setHeight(rInfo.mpPrinter->GetPaperSize().Height()); + } + +- if( (rInfo.meOrientation == ORIENTATION_LANDSCAPE && +- (aPaperSize.Width() < aPaperSize.Height())) +- || +- (rInfo.meOrientation == ORIENTATION_PORTRAIT && +- (aPaperSize.Width() > aPaperSize.Height())) +- ) +- { +- maPrintSize = awt::Size(aPaperSize.Height(), aPaperSize.Width()); +- } +- else ++ maPrintSize = awt::Size(aPaperSize.Width(), aPaperSize.Height()); ++ ++ if (bDoDodgyHeightWidthFit) + { +- maPrintSize = awt::Size(aPaperSize.Width(), aPaperSize.Height()); ++ if( (rInfo.meOrientation == ORIENTATION_LANDSCAPE && ++ (aPaperSize.Width() < aPaperSize.Height())) ++ || ++ (rInfo.meOrientation == ORIENTATION_PORTRAIT && ++ (aPaperSize.Width() > aPaperSize.Height())) ++ ) ++ { ++ maPrintSize = awt::Size(aPaperSize.Height(), aPaperSize.Width()); ++ } + } + + return true; +-- +1.9.3 + diff --git a/SOURCES/0001-Resolves-i125289-do-apply-possible-changed-GraphicSt.patch b/SOURCES/0001-Resolves-i125289-do-apply-possible-changed-GraphicSt.patch deleted file mode 100644 index 4a14092..0000000 --- a/SOURCES/0001-Resolves-i125289-do-apply-possible-changed-GraphicSt.patch +++ /dev/null @@ -1,77 +0,0 @@ -From fd641c7b23ce4205c29fc0c564b73336cb2cfb07 Mon Sep 17 00:00:00 2001 -From: Oliver-Rainer Wittmann -Date: Wed, 23 Jul 2014 08:53:15 +0000 -Subject: [PATCH] Resolves: #i125289# do apply possible changed - ... - -only for embedded images which already have its stream inside the package - -fixes also issue 125290 - -(cherry picked from commit 9602a121b458e7456fc533dad86f434f846a72ba) - -Conflicts: - xmloff/source/draw/shapeexport2.cxx - -Change-Id: I5af0093b20f2f291d3a94c690bfbdb59a59320c3 ---- - xmloff/source/draw/shapeexport.cxx | 32 +++++++++++++++++++------------- - 1 file changed, 19 insertions(+), 13 deletions(-) - -diff --git a/xmloff/source/draw/shapeexport.cxx b/xmloff/source/draw/shapeexport.cxx -index 7f33e58..ba8ce16 100644 ---- a/xmloff/source/draw/shapeexport.cxx -+++ b/xmloff/source/draw/shapeexport.cxx -@@ -2256,9 +2256,12 @@ void XMLShapeExport::ImpExportGraphicObjectShape( - OUString aResolveURL( sImageURL ); - const OUString sPackageURL( "vnd.sun.star.Package:" ); - -- // trying to preserve the filename -+ // trying to preserve the filename for embedded images which already have its stream inside the package -+ bool bIsEmbeddedImageWithExistingStreamInPackage = false; - if ( aStreamURL.match( sPackageURL, 0 ) ) - { -+ bIsEmbeddedImageWithExistingStreamInPackage = true; -+ - OUString sRequestedName( aStreamURL.copy( sPackageURL.getLength(), aStreamURL.getLength() - sPackageURL.getLength() ) ); - sal_Int32 nLastIndex = sRequestedName.lastIndexOf( '/' ) + 1; - if ( ( nLastIndex > 0 ) && ( nLastIndex < sRequestedName.getLength() ) ) -@@ -2278,20 +2281,23 @@ void XMLShapeExport::ImpExportGraphicObjectShape( - - if( !aStr.isEmpty() ) - { -- aStreamURL = sPackageURL; -- if( aStr[ 0 ] == '#' ) -- { -- aStreamURL = aStreamURL.concat( aStr.copy( 1, aStr.getLength() - 1 ) ); -- } -- else -+ // apply possible changed stream URL to embedded image object -+ if ( bIsEmbeddedImageWithExistingStreamInPackage ) - { -- aStreamURL = aStreamURL.concat( aStr ); -- } -+ aStreamURL = sPackageURL; -+ if ( aStr[0] == '#' ) -+ { -+ aStreamURL = aStreamURL.concat( aStr.copy( 1, aStr.getLength() - 1 ) ); -+ } -+ else -+ { -+ aStreamURL = aStreamURL.concat( aStr ); -+ } - -- // update stream URL for load on demand -- uno::Any aAny; -- aAny <<= aStreamURL; -- xPropSet->setPropertyValue("GraphicStreamURL", aAny ); -+ uno::Any aAny; -+ aAny <<= aStreamURL; -+ xPropSet->setPropertyValue( OUString("GraphicStreamURL"), aAny ); -+ } - - mrExport.AddAttribute(XML_NAMESPACE_XLINK, XML_TYPE, XML_SIMPLE ); - mrExport.AddAttribute(XML_NAMESPACE_XLINK, XML_SHOW, XML_EMBED ); --- -1.9.3 - diff --git a/SOURCES/0001-Resolves-rhbz-1065807-use-xdg-Templates-for-default-.patch b/SOURCES/0001-Resolves-rhbz-1065807-use-xdg-Templates-for-default-.patch deleted file mode 100644 index 7a969ed..0000000 --- a/SOURCES/0001-Resolves-rhbz-1065807-use-xdg-Templates-for-default-.patch +++ /dev/null @@ -1,198 +0,0 @@ -From cc9493e690c6dbe40a1da47a06acf7172a33ffa7 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= -Date: Mon, 24 Feb 2014 11:38:13 +0000 -Subject: [PATCH 1/2] Resolves: rhbz#1065807 use xdg ~/Templates for default - Template location - -(if it exists) - -Change-Id: I98fc9fd54d1f56c8bed24ce4d2ebf53756ded2cc ---- - framework/source/services/pathsettings.cxx | 6 ++++ - .../registry/data/org/openoffice/Office/Paths.xcu | 13 +++++++ - shell/source/backends/desktopbe/desktopbackend.cxx | 21 ++++++++--- - shell/source/backends/gconfbe/gconfaccess.cxx | 41 ++++++++++++++++------ - shell/source/backends/gconfbe/gconfaccess.hxx | 1 + - 5 files changed, 66 insertions(+), 16 deletions(-) - -diff --git a/framework/source/services/pathsettings.cxx b/framework/source/services/pathsettings.cxx -index 15fb3c0..bdb2949 100644 ---- a/framework/source/services/pathsettings.cxx -+++ b/framework/source/services/pathsettings.cxx -@@ -280,6 +280,12 @@ PathSettings::PathInfo PathSettings::impl_readNewFormat(const OUString& sPath) - // read the writeable path - xPath->getByName(CFGPROP_WRITEPATH) >>= aPathVal.sWritePath; - -+ // avoid duplicates, by removing the writeable path from -+ // the user defined path list if it happens to be there too -+ OUStringList::iterator aI = aPathVal.lUserPaths.find(aPathVal.sWritePath); -+ if (aI != aPathVal.lUserPaths.end()) -+ aPathVal.lUserPaths.erase(aI); -+ - // read state props - xPath->getByName(CFGPROP_ISSINGLEPATH) >>= aPathVal.bIsSinglePath; - -diff --git a/officecfg/registry/data/org/openoffice/Office/Paths.xcu b/officecfg/registry/data/org/openoffice/Office/Paths.xcu -index 05f8e0b..2a9eb5c 100644 ---- a/officecfg/registry/data/org/openoffice/Office/Paths.xcu -+++ b/officecfg/registry/data/org/openoffice/Office/Paths.xcu -@@ -161,8 +161,21 @@ - - - -+ - - $(userurl)/template -+ -+ -+ -+ $(userurl)/template - - - -diff --git a/shell/source/backends/desktopbe/desktopbackend.cxx b/shell/source/backends/desktopbe/desktopbackend.cxx -index 3e8e8c1..52d8358 100644 ---- a/shell/source/backends/desktopbe/desktopbackend.cxx -+++ b/shell/source/backends/desktopbe/desktopbackend.cxx -@@ -154,11 +154,22 @@ css::uno::Any Default::getPropertyValue(OUString const & PropertyName) - css::beans::UnknownPropertyException, css::lang::WrappedTargetException, - css::uno::RuntimeException) - { -- if ( PropertyName == "EnableATToolSupport" || PropertyName == "ExternalMailer" || PropertyName == "SourceViewFontHeight" -- || PropertyName == "SourceViewFontName" || PropertyName == "WorkPathVariable" || PropertyName == "ooInetFTPProxyName" -- || PropertyName == "ooInetFTPProxyPort" || PropertyName == "ooInetHTTPProxyName" || PropertyName == "ooInetHTTPProxyPort" -- || PropertyName == "ooInetHTTPSProxyName" || PropertyName == "ooInetHTTPSProxyPort" || PropertyName == "ooInetNoProxy" -- || PropertyName == "ooInetProxyType" || PropertyName == "givenname" || PropertyName == "sn" ) -+ if ( PropertyName == "EnableATToolSupport" || -+ PropertyName == "ExternalMailer" || -+ PropertyName == "SourceViewFontHeight" || -+ PropertyName == "SourceViewFontName" || -+ PropertyName == "TemplatePathVariable" || -+ PropertyName == "WorkPathVariable" || -+ PropertyName == "ooInetFTPProxyName" || -+ PropertyName == "ooInetFTPProxyPort" || -+ PropertyName == "ooInetHTTPProxyName" || -+ PropertyName == "ooInetHTTPProxyPort" || -+ PropertyName == "ooInetHTTPSProxyName" || -+ PropertyName == "ooInetHTTPSProxyPort" || -+ PropertyName == "ooInetNoProxy" || -+ PropertyName == "ooInetProxyType" || -+ PropertyName == "givenname" || -+ PropertyName == "sn" ) - { - return css::uno::makeAny(css::beans::Optional< css::uno::Any >()); - } -diff --git a/shell/source/backends/gconfbe/gconfaccess.cxx b/shell/source/backends/gconfbe/gconfaccess.cxx -index de8eb29..0d407d6 100644 ---- a/shell/source/backends/gconfbe/gconfaccess.cxx -+++ b/shell/source/backends/gconfbe/gconfaccess.cxx -@@ -23,6 +23,7 @@ - #include - - #include "com/sun/star/uno/RuntimeException.hpp" -+#include "com/sun/star/uno/Sequence.hxx" - #include "osl/file.hxx" - #include "osl/security.hxx" - #include "osl/thread.h" -@@ -189,15 +190,8 @@ static OUString xdg_user_dir_lookup (const char *type) - if( osl::FileBase::E_None == aDocumentsDir.open() ) - return aDocumentsDirURL; - } -- /* Special case desktop for historical compatibility */ -- if (strcmp (type, "DESKTOP") == 0) -- { -- return aHomeDirURL + "/Desktop"; -- } -- else -- { -- return aHomeDirURL + "/Documents"; -- } -+ /* Use fallbacks historical compatibility if nothing else exists */ -+ return aHomeDirURL + "/" + OUString::createFromAscii(type); - } - - //------------------------------------------------------------------------------ -@@ -317,11 +311,18 @@ uno::Any translateToOOo( const ConfigurationValue &rValue, GConfValue *pGconfVal - - case SETTING_WORK_DIRECTORY: - { -- OUString aDocumentsDirURL = xdg_user_dir_lookup("DOCUMENTS"); -+ OUString aDocumentsDirURL = xdg_user_dir_lookup("Documents"); - - return uno::makeAny( aDocumentsDirURL ); - } - -+ case SETTING_TEMPLATE_DIRECTORY: -+ { -+ OUString aTemplatesDirURL = xdg_user_dir_lookup("Templates"); -+ -+ return uno::makeAny( aTemplatesDirURL ); -+ } -+ - case SETTING_USER_GIVENNAME: - { - OUString aCompleteName( OStringToOUString( -@@ -392,7 +393,7 @@ sal_Bool SAL_CALL isDependencySatisfied( GConfClient* pClient, const Configurati - - case SETTING_WORK_DIRECTORY: - { -- OUString aDocumentsDirURL = xdg_user_dir_lookup("DOCUMENTS"); -+ OUString aDocumentsDirURL = xdg_user_dir_lookup("Documents"); - osl::Directory aDocumentsDir( aDocumentsDirURL ); - - if( osl::FileBase::E_None == aDocumentsDir.open() ) -@@ -400,6 +401,16 @@ sal_Bool SAL_CALL isDependencySatisfied( GConfClient* pClient, const Configurati - } - break; - -+ case SETTING_TEMPLATE_DIRECTORY: -+ { -+ OUString aTemplatesDirURL = xdg_user_dir_lookup("Templates"); -+ osl::Directory aTemplatesDir( aTemplatesDirURL ); -+ -+ if( osl::FileBase::E_None == aTemplatesDir.open() ) -+ return sal_True; -+ } -+ break; -+ - case SETTING_USER_GIVENNAME: - { - OUString aCompleteName( OStringToOUString( -@@ -563,6 +574,14 @@ ConfigurationValue const ConfigurationValues[] = - }, - - { -+ SETTING_TEMPLATE_DIRECTORY, -+ "/desktop/gnome/url-handlers/mailto/command", // dummy -+ RTL_CONSTASCII_STRINGPARAM("TemplatePathVariable"), -+ sal_True, -+ SETTING_TEMPLATE_DIRECTORY, // so that the existence of the dir can be checked -+ }, -+ -+ { - SETTING_USER_GIVENNAME, - "/desktop/gnome/url-handlers/mailto/command", // dummy - RTL_CONSTASCII_STRINGPARAM("givenname"), -diff --git a/shell/source/backends/gconfbe/gconfaccess.hxx b/shell/source/backends/gconfbe/gconfaccess.hxx -index 7f0a52a..3fcd217 100644 ---- a/shell/source/backends/gconfbe/gconfaccess.hxx -+++ b/shell/source/backends/gconfbe/gconfaccess.hxx -@@ -47,6 +47,7 @@ enum ConfigurationSetting - SETTING_ENABLE_ACCESSIBILITY, - SETTING_MAILER_PROGRAM, - SETTING_WORK_DIRECTORY, -+ SETTING_TEMPLATE_DIRECTORY, - SETTING_SOURCEVIEWFONT_NAME, - SETTING_SOURCEVIEWFONT_HEIGHT, - SETTING_USER_GIVENNAME, --- -1.9.0 - diff --git a/SOURCES/0001-Resolves-rhbz-1081176-don-t-jump-to-cursor-pos-when.patch b/SOURCES/0001-Resolves-rhbz-1081176-don-t-jump-to-cursor-pos-when.patch deleted file mode 100644 index 134ad96..0000000 --- a/SOURCES/0001-Resolves-rhbz-1081176-don-t-jump-to-cursor-pos-when.patch +++ /dev/null @@ -1,83 +0,0 @@ -From 903652fafacf5268aeac4a702d52de44a8388652 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= -Date: Fri, 11 Apr 2014 14:45:39 +0100 -Subject: [PATCH] Resolves: rhbz#1081176: don't jump to cursor pos when... - -launching a new window view of a document. This was happening because of -(temporary) activation of the modified flag (from updating the document stats -in the bottom bar) triggering a scrolll to the current cursor position of the -old document - -Change-Id: I6e1a3c07b66ff6373345850d1449f17c1f0baa17 -(cherry picked from commit e12184393f0591b5c5d9218062cc0a4bced6d4e6) ---- - sw/source/core/doc/doc.cxx | 39 ++++++++++++++++++++++++++++++++++++++- - 1 file changed, 38 insertions(+), 1 deletion(-) - -diff --git a/sw/source/core/doc/doc.cxx b/sw/source/core/doc/doc.cxx -index 6382d74..047b8b3 100644 ---- a/sw/source/core/doc/doc.cxx -+++ b/sw/source/core/doc/doc.cxx -@@ -1650,6 +1650,40 @@ void SwDoc::CalculatePagePairsForProspectPrinting( - // thus we are done here. - } - -+namespace -+{ -+ class LockAllViews -+ { -+ std::vector m_aViewWasUnLocked; -+ SwViewShell* m_pViewShell; -+ public: -+ LockAllViews(SwViewShell *pViewShell) -+ : m_pViewShell(pViewShell) -+ { -+ if (!m_pViewShell) -+ return; -+ SwViewShell *pSh = m_pViewShell; -+ do -+ { -+ if (!pSh->IsViewLocked()) -+ { -+ m_aViewWasUnLocked.push_back(pSh); -+ pSh->LockView(true); -+ } -+ pSh = (SwViewShell*)pSh->GetNext(); -+ } while (pSh != m_pViewShell); -+ } -+ ~LockAllViews() -+ { -+ for (std::vector::iterator aI = m_aViewWasUnLocked.begin(); aI != m_aViewWasUnLocked.end(); ++aI) -+ { -+ SwViewShell *pSh = *aI; -+ pSh->LockView(false); -+ } -+ } -+ }; -+} -+ - // returns true while there is more to do - bool SwDoc::IncrementalDocStatCalculate(long nChars, bool bFields) - { -@@ -1720,7 +1754,7 @@ bool SwDoc::IncrementalDocStatCalculate(long nChars, bool bFields) - aStat[n++].Value <<= (sal_Int32)mpDocStat->nCharExcludingSpaces; - - // For e.g. autotext documents there is no pSwgInfo (#i79945) -- SfxObjectShell * const pObjShell( GetDocShell() ); -+ SwDocShell* pObjShell(GetDocShell()); - if (pObjShell) - { - const uno::Reference xDPS( -@@ -1730,6 +1764,9 @@ bool SwDoc::IncrementalDocStatCalculate(long nChars, bool bFields) - // #i96786#: do not set modified flag when updating statistics - const bool bDocWasModified( IsModified() ); - const ModifyBlocker_Impl b(pObjShell); -+ // rhbz#1081176: don't jump to cursor pos because of (temporary) -+ // activation of modified flag triggering move to input position -+ LockAllViews aViewGuard((SwViewShell*)pObjShell->GetWrtShell()); - xDocProps->setDocumentStatistics(aStat); - if (!bDocWasModified) - { --- -1.8.5.3 - diff --git a/SOURCES/0001-Resolves-rhbz-1096295-hard-to-distinguish-selected-f.patch b/SOURCES/0001-Resolves-rhbz-1096295-hard-to-distinguish-selected-f.patch deleted file mode 100644 index 9dbc7a7..0000000 --- a/SOURCES/0001-Resolves-rhbz-1096295-hard-to-distinguish-selected-f.patch +++ /dev/null @@ -1,102 +0,0 @@ -From fd4b20efbb734f5a82c636ded2ec65dcb46c5129 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= -Date: Mon, 12 May 2014 14:06:37 +0100 -Subject: [PATCH] Resolves: rhbz#1096295 hard to distinguish selected from - mouseover - -Change-Id: Id6c11afd161bea15266a54a595bf7ee305e954f0 ---- - .../ui/slidesorter/inc/view/SlsPageObjectPainter.hxx | 1 + - sd/source/ui/slidesorter/inc/view/SlsTheme.hxx | 1 + - sd/source/ui/slidesorter/view/SlsPageObjectPainter.cxx | 15 ++++++++------- - sd/source/ui/slidesorter/view/SlsTheme.cxx | 9 +++++---- - 4 files changed, 15 insertions(+), 11 deletions(-) - -diff --git a/sd/source/ui/slidesorter/inc/view/SlsPageObjectPainter.hxx b/sd/source/ui/slidesorter/inc/view/SlsPageObjectPainter.hxx -index ec698d0..7d417da 100644 ---- a/sd/source/ui/slidesorter/inc/view/SlsPageObjectPainter.hxx -+++ b/sd/source/ui/slidesorter/inc/view/SlsPageObjectPainter.hxx -@@ -85,6 +85,7 @@ private: - Bitmap maFocusedBackground; - Bitmap maMouseOverBackground; - Bitmap maMouseOverFocusedBackground; -+ Bitmap maMouseOverSelectedBackground; - Bitmap maMouseOverSelectedAndFocusedBackground; - Size maSize; - -diff --git a/sd/source/ui/slidesorter/inc/view/SlsTheme.hxx b/sd/source/ui/slidesorter/inc/view/SlsTheme.hxx -index 5a69142..55188af 100644 ---- a/sd/source/ui/slidesorter/inc/view/SlsTheme.hxx -+++ b/sd/source/ui/slidesorter/inc/view/SlsTheme.hxx -@@ -82,6 +82,7 @@ public: - Gradient_SelectedPage, - Gradient_SelectedAndFocusedPage, - Gradient_MouseOverPage, -+ Gradient_MouseOverSelected, - Gradient_MouseOverSelectedAndFocusedPage, - Gradient_FocusedPage, - _GradientColorType_Size_ -diff --git a/sd/source/ui/slidesorter/view/SlsPageObjectPainter.cxx b/sd/source/ui/slidesorter/view/SlsPageObjectPainter.cxx -index 60c51fa..736c6dc 100644 ---- a/sd/source/ui/slidesorter/view/SlsPageObjectPainter.cxx -+++ b/sd/source/ui/slidesorter/view/SlsPageObjectPainter.cxx -@@ -53,13 +53,7 @@ PageObjectPainter::PageObjectPainter ( - mpTheme(rSlideSorter.GetTheme()), - mpPageNumberFont(Theme::GetFont(Theme::Font_PageNumber, *rSlideSorter.GetContentWindow())), - mpShadowPainter(new FramePainter(mpTheme->GetIcon(Theme::Icon_RawShadow))), -- mpFocusBorderPainter(new FramePainter(mpTheme->GetIcon(Theme::Icon_FocusBorder))), -- maNormalBackground(), -- maSelectionBackground(), -- maFocusedSelectionBackground(), -- maMouseOverBackground(), -- maMouseOverFocusedBackground(), -- maSize() -+ mpFocusBorderPainter(new FramePainter(mpTheme->GetIcon(Theme::Icon_FocusBorder))) - { - // Replace the color (not the alpha values) in the focus border with a - // color derived from the current selection color. -@@ -148,6 +142,7 @@ void PageObjectPainter::InvalidateBitmaps (void) - maFocusedSelectionBackground.SetEmpty(); - maFocusedBackground.SetEmpty(); - maMouseOverBackground.SetEmpty(); -+ maMouseOverSelectedBackground.SetEmpty(); - maMouseOverFocusedBackground.SetEmpty(); - maMouseOverSelectedAndFocusedBackground.SetEmpty(); - } -@@ -399,6 +394,12 @@ Bitmap& PageObjectPainter::GetBackgroundForState ( - true); - - case MouseOver | Selected: -+ return GetBackground( -+ maMouseOverSelectedBackground, -+ Theme::Gradient_MouseOverSelected, -+ rReferenceDevice, -+ false); -+ - case MouseOver: - return GetBackground( - maMouseOverBackground, -diff --git a/sd/source/ui/slidesorter/view/SlsTheme.cxx b/sd/source/ui/slidesorter/view/SlsTheme.cxx -index c38951c..3ac38cc 100644 ---- a/sd/source/ui/slidesorter/view/SlsTheme.cxx -+++ b/sd/source/ui/slidesorter/view/SlsTheme.cxx -@@ -110,11 +110,12 @@ void Theme::Update (const ::boost::shared_ptr& rpPropert - maColor[Color_PageCountFontColor] = White; - - // Set up gradients. -- SetGradient(Gradient_SelectedPage, aSelectionColor, 50, 50, +100,+100, +50,+25); -- SetGradient(Gradient_MouseOverPage, aSelectionColor, 75, 75, +100,+100, +50,+25); -- SetGradient(Gradient_SelectedAndFocusedPage, aSelectionColor, 50, 50, +100,+100, -50,-75); -- SetGradient(Gradient_MouseOverSelectedAndFocusedPage, aSelectionColor, 75, 75, +100,+100, -50,-75); -+ SetGradient(Gradient_MouseOverPage, aSelectionColor, 0, 60, +80,+100, +50,+25); -+ SetGradient(Gradient_SelectedPage, aSelectionColor, 50, 50, +80,+100, +50,+25); - SetGradient(Gradient_FocusedPage, aSelectionColor, -1,-1, 0,0, -50,-75); -+ SetGradient(Gradient_MouseOverSelected, aSelectionColor, 55, 60, +80,+100, +50,+25); -+ SetGradient(Gradient_SelectedAndFocusedPage, aSelectionColor, 50, 50, +80,+100, -50,-75); -+ SetGradient(Gradient_MouseOverSelectedAndFocusedPage, aSelectionColor, 55, 60, +80,+100, -50,-75); - - SetGradient(Gradient_NormalPage, maBackgroundColor, -1,-1, 0,0, 0,0); - --- -1.9.0 - diff --git a/SOURCES/0001-Resolves-rhbz-1121341-crash-on-closing-shrunk-validi.patch b/SOURCES/0001-Resolves-rhbz-1121341-crash-on-closing-shrunk-validi.patch deleted file mode 100644 index b66ae92..0000000 --- a/SOURCES/0001-Resolves-rhbz-1121341-crash-on-closing-shrunk-validi.patch +++ /dev/null @@ -1,82 +0,0 @@ -From efb02fcddb7abe7f6f163ee8a47878b06d15a610 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= -Date: Mon, 21 Jul 2014 13:14:19 +0100 -Subject: [PATCH] Resolves: rhbz#1121341 crash on closing shrunk validity - window - -Change-Id: I5fc1d6b909b3281ec3799b60bc3fd7b5f1163a75 ---- - sc/source/ui/dbgui/validate.cxx | 29 ++++++++++++++++++++++++----- - sc/source/ui/inc/validate.hxx | 2 ++ - 2 files changed, 26 insertions(+), 5 deletions(-) - -diff --git a/sc/source/ui/dbgui/validate.cxx b/sc/source/ui/dbgui/validate.cxx -index f40981c..d119747 100644 ---- a/sc/source/ui/dbgui/validate.cxx -+++ b/sc/source/ui/dbgui/validate.cxx -@@ -151,12 +151,14 @@ void ScTPValidationValue::RefInputDonePostHdl() - - } - -- - sal_Bool ScValidationDlg::Close() - { -- if( m_bOwnRefHdlr ) -- if( SfxTabPage* pPage = GetTabPage( TP_VALIDATION_VALUES ) ) -- static_cast(pPage)->RemoveRefDlg(); -+ SfxTabPage* pPage = GetTabPage(TP_VALIDATION_VALUES); -+ if (pPage) -+ static_cast(pPage)->ParkRefs(); -+ -+ if (m_bOwnRefHdlr && pPage) -+ static_cast(pPage)->RemoveRefDlg(); - - return ScValidationDlgBase::Close(); - } -@@ -168,7 +170,6 @@ ScValidationDlg::~ScValidationDlg() - delete mpHBox; - } - -- - // ============================================================================ - - namespace { -@@ -338,6 +339,22 @@ ScTPValidationValue::ScTPValidationValue( Window* pParent, const SfxItemSet& rAr - m_btnRef.Hide(); // cell range picker - } - -+void ScTPValidationValue::ParkRefs() -+{ -+ //if there are children of the mpHBox, i.e. -+ //in shrunk mode, this will crash -+ //after the mpHBox is deleted -+ if( m_pRefEdit && m_pRefEdit->GetParent()!= this ) -+ { -+ m_pRefEdit->SetParent( this ); -+ } -+ -+ if( m_btnRef.GetParent()!=this ) -+ { -+ m_btnRef.SetParent( this ); -+ } -+} -+ - ScTPValidationValue::~ScTPValidationValue() - { - } -diff --git a/sc/source/ui/inc/validate.hxx b/sc/source/ui/inc/validate.hxx -index 5cac401..12d1cec 100644 ---- a/sc/source/ui/inc/validate.hxx -+++ b/sc/source/ui/inc/validate.hxx -@@ -182,6 +182,8 @@ public: - virtual sal_Bool FillItemSet( SfxItemSet& rArgSet ); - virtual void Reset( const SfxItemSet& rArgSet ); - -+ void ParkRefs(); -+ - private: - void Init(); - --- -1.9.3 - diff --git a/SOURCES/0001-Resolves-rhbz-1125588-port-LibreOffice-to-ppc64le.patch b/SOURCES/0001-Resolves-rhbz-1125588-port-LibreOffice-to-ppc64le.patch deleted file mode 100644 index 8fc2a2e..0000000 --- a/SOURCES/0001-Resolves-rhbz-1125588-port-LibreOffice-to-ppc64le.patch +++ /dev/null @@ -1,547 +0,0 @@ -From 63a25f30c2b2eec9ebda54750b0e7e6bf889ef0b Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= -Date: Thu, 21 Aug 2014 08:52:16 +0100 -Subject: [PATCH] Resolves: rhbz#1125588 port LibreOffice to ppc64le - -Related: rhbz#1125588 first steps for ppc64le - -almost certainly won't get us too far, but a start - -(cherry picked from commit 170109708e6a082252efba3d2f1726bbd82b6452) - -openjdk appears to use ppc64/server/libjvm.so and not ppc64le/server/libjvm.so - -(cherry picked from commit 632e4095ad92196480ad82cfa1f106c4c08ae1cc) - -need to accept ppc64le as a lib64 using platform in ax_boost_base.m4 - -(cherry picked from commit 2d48c52da712f8fa3c4a579494c824491afb8515) - -linux_powerpc64le->linux_powerpc64_le to match dp_platform.cxx - -(cherry picked from commit 2ced4d39cc1b8de233cd886d3ef991b3079500d2) - -Related: rhbz#1125588 get as far as privateSnippetExecutor - -(cherry picked from commit 4c5bbbf059924f3aa24620a4cbbc35816978a606) - -Related: rhbz#1125588 get to the end of cpp_mediate on ppc64le - -(cherry picked from commit d8fcd8ca9af087e98a2f6d9cbcf6eb42cddd0c74) - -Related: rhbz#1125588 force existence of argument save area - -ELFv2 ABI on ppc64 optimises stack allocation -(http://gcc.gnu.org/ml/gcc-patches/2013-11/msg01149.html -so we're getting no argument save area - -This now appears to pass the simple cases and onwards -to the tricky ones - -(cherry picked from commit 6396e18f4d49c24283b170310a1892db40c128d3) - -Related: rhbz#1125588 ppc64le has new struct passing rules - -http://gcc.gnu.org/ml/gcc-patches/2013-11/msg01145.html -http://gcc.gnu.org/ml/gcc-patches/2013-11/msg01147.html - -now we just fail instead of crash - -(cherry picked from commit 970ad502e3ea2cc992c6cc1c7583231aec5bf5da) - -Related: rhbz#1125588 ppc64le fix simple struct returning - -(cherry picked from commit ee6fcdd18b1a839d7d60617d4fda622f6e6e7e66) - -Resolves: rhbz#1125588 ppc64le passes testtools - -*bzzt*, , it's alive! - -(cherry picked from commit 6ab1951ea2e31f47bc9f211dd9b2681c794b8e7f) - -openjdk appears to use ppc64/server/libjvm.so and not ppc64le/server/libjvm.so - -(cherry picked from commit 632e4095ad92196480ad82cfa1f106c4c08ae1cc) - -Conflicts: - configure.ac - -need to accept ppc64le as a lib64 using platform in ax_boost_base.m4 - -(cherry picked from commit 2d48c52da712f8fa3c4a579494c824491afb8515) - -linux_powerpc64le->linux_powerpc64_le to match dp_platform.cxx - -(cherry picked from commit 2ced4d39cc1b8de233cd886d3ef991b3079500d2) - -Related: rhbz#1125588 get as far as privateSnippetExecutor - -(cherry picked from commit 4c5bbbf059924f3aa24620a4cbbc35816978a606) - -Related: rhbz#1125588 get to the end of cpp_mediate on ppc64le - -(cherry picked from commit d8fcd8ca9af087e98a2f6d9cbcf6eb42cddd0c74) - -Conflicts: - bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx - -Related: rhbz#1125588 force existence of argument save area - -ELFv2 ABI on ppc64 optimises stack allocation -(http://gcc.gnu.org/ml/gcc-patches/2013-11/msg01149.html -so we're getting no argument save area - -This now appears to pass the simple cases and onwards -to the tricky ones - -(cherry picked from commit 6396e18f4d49c24283b170310a1892db40c128d3) - -Related: rhbz#1125588 ppc64le has new struct passing rules - -http://gcc.gnu.org/ml/gcc-patches/2013-11/msg01145.html -http://gcc.gnu.org/ml/gcc-patches/2013-11/msg01147.html - -now we just fail instead of crash - -(cherry picked from commit 970ad502e3ea2cc992c6cc1c7583231aec5bf5da) - -Related: rhbz#1125588 ppc64le fix simple struct returning - -(cherry picked from commit ee6fcdd18b1a839d7d60617d4fda622f6e6e7e66) - -Conflicts: - bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx - -Resolves: rhbz#1125588 ppc64le passes testtools - -*bzzt*, , it's alive! - -(cherry picked from commit 6ab1951ea2e31f47bc9f211dd9b2681c794b8e7f) - -Change-Id: Ic20b97a97b6d506c32322173bd8332d15c3a4555 -ff9e2e0ac9921b0d9d36a49fdcd2323d5dd124ee -86ef068661082addbd165629d3d6905695090a6b -b63e5a28d7ff12780a1051d94c5976244eab1814 -cc386083ecd9faefbedebbb9d2496a4eddfa0b2b -d3928ef5ac68ea13a7aa8723bc8b068ecf8075a0 -e56d148ebea7fcfc023cb7183bc97f09186e66b4 -329c676337885bcf4fdfdcdb5912d75424862126 -1e253922fdb606648eff9865f1125a24e35b0d9a -0b42f4e2603e6d76200d63ab2e26bbb856ae1173 -ff9e2e0ac9921b0d9d36a49fdcd2323d5dd124ee -86ef068661082addbd165629d3d6905695090a6b -b63e5a28d7ff12780a1051d94c5976244eab1814 -cc386083ecd9faefbedebbb9d2496a4eddfa0b2b -d3928ef5ac68ea13a7aa8723bc8b068ecf8075a0 -e56d148ebea7fcfc023cb7183bc97f09186e66b4 -329c676337885bcf4fdfdcdb5912d75424862126 -1e253922fdb606648eff9865f1125a24e35b0d9a -0b42f4e2603e6d76200d63ab2e26bbb856ae1173 ---- - .../cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx | 64 ++++++++++++++---- - .../source/cpp_uno/gcc3_linux_powerpc64/share.hxx | 1 + - .../cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx | 79 ++++++++++++++++++++-- - configure.ac | 11 ++- - desktop/source/deployment/misc/dp_platform.cxx | 3 + - m4/ax_boost_base.m4 | 2 +- - 6 files changed, 137 insertions(+), 23 deletions(-) - -diff --git a/bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx b/bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx -index 8bb611f..877c1ab 100644 ---- a/bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx -+++ b/bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx -@@ -31,6 +31,11 @@ - #include - #include - -+#ifdef OSL_BIGENDIAN -+#define IS_BIG_ENDIAN 1 -+#else -+#define IS_BIG_ENDIAN 0 -+#endif - - using namespace ::com::sun::star::uno; - -@@ -67,7 +72,7 @@ static typelib_TypeClass cpp2uno_call( - - if (pReturnTypeDescr) - { -- if (bridges::cpp_uno::shared::isSimpleType( pReturnTypeDescr )) -+ if (!ppc64::return_in_hidden_param(pReturnTypeRef)) - { - pUnoReturn = pRegisterReturn; // direct way for simple types - } -@@ -139,13 +144,13 @@ static typelib_TypeClass cpp2uno_call( - case typelib_TypeClass_BOOLEAN: - if (ng < ppc64::MAX_GPR_REGS) - { -- pCppArgs[nPos] = pUnoArgs[nPos] = (((char *)gpreg) + (sizeof(void*)-1)); -+ pCppArgs[nPos] = pUnoArgs[nPos] = (((char *)gpreg) + 7*IS_BIG_ENDIAN); - ng++; - gpreg++; - } - else - { -- pCppArgs[nPos] = pUnoArgs[nPos] = (((char *)ovrflw) + (sizeof(void*)-1)); -+ pCppArgs[nPos] = pUnoArgs[nPos] = (((char *)ovrflw) + 7*IS_BIG_ENDIAN); - bOverFlowUsed = true; - } - if (bOverFlowUsed) ovrflw++; -@@ -155,13 +160,13 @@ static typelib_TypeClass cpp2uno_call( - case typelib_TypeClass_UNSIGNED_SHORT: - if (ng < ppc64::MAX_GPR_REGS) - { -- pCppArgs[nPos] = pUnoArgs[nPos] = (((char *)gpreg) + (sizeof(void*)-2)); -+ pCppArgs[nPos] = pUnoArgs[nPos] = (((char *)gpreg) + 6*IS_BIG_ENDIAN); - ng++; - gpreg++; - } - else - { -- pCppArgs[nPos] = pUnoArgs[nPos] = (((char *)ovrflw) + (sizeof(void*)-2)); -+ pCppArgs[nPos] = pUnoArgs[nPos] = (((char *)ovrflw) + 6*IS_BIG_ENDIAN); - bOverFlowUsed = true; - } - if (bOverFlowUsed) ovrflw++; -@@ -171,13 +176,13 @@ static typelib_TypeClass cpp2uno_call( - case typelib_TypeClass_UNSIGNED_LONG: - if (ng < ppc64::MAX_GPR_REGS) - { -- pCppArgs[nPos] = pUnoArgs[nPos] = (((char *)gpreg) + (sizeof(void*)-4)); -+ pCppArgs[nPos] = pUnoArgs[nPos] = (((char *)gpreg) + 4*IS_BIG_ENDIAN); - ng++; - gpreg++; - } - else - { -- pCppArgs[nPos] = pUnoArgs[nPos] = (((char *)ovrflw) + (sizeof(void*)-4)); -+ pCppArgs[nPos] = pUnoArgs[nPos] = (((char *)ovrflw) + 4*IS_BIG_ENDIAN); - bOverFlowUsed = true; - } - if (bOverFlowUsed) ovrflw++; -@@ -321,6 +326,11 @@ static typelib_TypeClass cpp2uno_call( - } - } - -+#if _CALL_ELF == 2 -+# define PARAMSAVE 32 -+#else -+# define PARAMSAVE 48 -+#endif - - //================================================================================================== - static typelib_TypeClass cpp_mediate( -@@ -334,7 +344,7 @@ static typelib_TypeClass cpp_mediate( - sal_Int32 nFunctionIndex = (nOffsetAndIndex & 0xFFFFFFFF); - - long sf = *(long*)sp; -- void ** ovrflw = (void**)(sf + 112); -+ void ** ovrflw = (void**)(sf + PARAMSAVE + 64); - - // gpreg: [ret *], this, [other gpr params] - // fpreg: [fpr params] -@@ -540,7 +550,11 @@ extern "C" void privateSnippetExecutor( ... ) - "mr %0, 1\n\t" - : "=r" (sp) : ); - -+#if _CALL_ELF == 2 -+ volatile long nRegReturn[2]; -+#else - volatile long nRegReturn[1]; -+#endif - - typelib_TypeClass aType = - cpp_mediate( nOffsetAndIndex, (void**)gpreg, (void**)fpreg, sp, (sal_Int64*)nRegReturn); -@@ -583,14 +597,22 @@ extern "C" void privateSnippetExecutor( ... ) - default: - __asm__( "ld 3,%0\n\t" - : : "m" (nRegReturn[0]) ); -+#if _CALL_ELF == 2 -+ __asm__( "ld 4,%0\n\t" -+ : : "m" (nRegReturn[1]) ); -+#endif - break; - } - } - -+#if _CALL_ELF == 2 -+const int codeSnippetSize = 32; -+#else - const int codeSnippetSize = 24; -+#endif - - unsigned char * codeSnippet( unsigned char * code, sal_Int32 nFunctionIndex, sal_Int32 nVtableOffset, -- bool simpleRetType) -+ bool bHasHiddenParam) - { - #if OSL_DEBUG_LEVEL > 2 - fprintf(stderr,"in codeSnippet functionIndex is %x\n", nFunctionIndex); -@@ -599,15 +621,27 @@ unsigned char * codeSnippet( unsigned char * code, sal_Int32 nFunctionIndex, sa - - sal_uInt64 nOffsetAndIndex = ( ( (sal_uInt64) nVtableOffset ) << 32 ) | ( (sal_uInt64) nFunctionIndex ); - -- if ( !simpleRetType ) -+ if ( bHasHiddenParam ) - nOffsetAndIndex |= 0x80000000; -- -+#if _CALL_ELF == 2 -+ unsigned int *raw = (unsigned int *)&code[0]; -+ -+ raw[0] = 0xe96c0018; /* 0: ld 11,2f-0b(12) */ -+ raw[1] = 0xe98c0010; /* ld 12,1f-0b(12) */ -+ raw[2] = 0x7d8903a6; /* mtctr 12 */ -+ raw[3] = 0x4e800420; /* bctr */ -+ /* 1: .quad function_addr */ -+ /* 2: .quad context */ -+ *(void **)&raw[4] = (void *)privateSnippetExecutor; -+ *(void **)&raw[6] = (void*)nOffsetAndIndex; -+#else - void ** raw = (void **)&code[0]; - memcpy(raw, (char*) privateSnippetExecutor, 16); - raw[2] = (void*) nOffsetAndIndex; -+#endif - #if OSL_DEBUG_LEVEL > 2 - fprintf(stderr, "in: offset/index is %x %x %d, %lx\n", -- nFunctionIndex, nVtableOffset, !simpleRetType, raw[2]); -+ nFunctionIndex, nVtableOffset, bHasHiddenParam, raw[2]); - #endif - return (code + codeSnippetSize); - } -@@ -673,7 +707,7 @@ unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions( - (s++)->fn = code + writetoexecdiff; - code = codeSnippet( - code, functionOffset++, vtableOffset, -- bridges::cpp_uno::shared::isSimpleType( -+ ppc64::return_in_hidden_param( - reinterpret_cast< - typelib_InterfaceAttributeTypeDescription * >( - member)->pAttributeTypeRef)); -@@ -684,7 +718,7 @@ unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions( - member)->bReadOnly) - { - (s++)->fn = code + writetoexecdiff; -- code = codeSnippet(code, functionOffset++, vtableOffset, true); -+ code = codeSnippet(code, functionOffset++, vtableOffset, false); - } - break; - -@@ -692,7 +726,7 @@ unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions( - (s++)->fn = code + writetoexecdiff; - code = codeSnippet( - code, functionOffset++, vtableOffset, -- bridges::cpp_uno::shared::isSimpleType( -+ ppc64::return_in_hidden_param( - reinterpret_cast< - typelib_InterfaceMethodTypeDescription * >( - member)->pReturnTypeRef)); -diff --git a/bridges/source/cpp_uno/gcc3_linux_powerpc64/share.hxx b/bridges/source/cpp_uno/gcc3_linux_powerpc64/share.hxx -index 4e7a197..a05193a 100644 ---- a/bridges/source/cpp_uno/gcc3_linux_powerpc64/share.hxx -+++ b/bridges/source/cpp_uno/gcc3_linux_powerpc64/share.hxx -@@ -85,6 +85,7 @@ void fillUnoException( - namespace ppc64 - { - enum ppclimits { MAX_GPR_REGS = 8, MAX_SSE_REGS = 13 }; -+ bool return_in_hidden_param( typelib_TypeDescriptionReference *pTypeRef ); - } - - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx -index a1874d8..105335eb 100644 ---- a/bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx -+++ b/bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx -@@ -37,9 +37,59 @@ - using namespace ::rtl; - using namespace ::com::sun::star::uno; - --void MapReturn(long r3, double dret, typelib_TypeClass eTypeClass, void *pRegisterReturn) -+namespace ppc64 - { -- switch (eTypeClass) -+#if _CALL_ELF == 2 -+ bool is_complex_struct(const typelib_TypeDescription * type) -+ { -+ const typelib_CompoundTypeDescription * p -+ = reinterpret_cast< const typelib_CompoundTypeDescription * >(type); -+ for (sal_Int32 i = 0; i < p->nMembers; ++i) -+ { -+ if (p->ppTypeRefs[i]->eTypeClass == typelib_TypeClass_STRUCT || -+ p->ppTypeRefs[i]->eTypeClass == typelib_TypeClass_EXCEPTION) -+ { -+ typelib_TypeDescription * t = 0; -+ TYPELIB_DANGER_GET(&t, p->ppTypeRefs[i]); -+ bool b = is_complex_struct(t); -+ TYPELIB_DANGER_RELEASE(t); -+ if (b) { -+ return true; -+ } -+ } -+ else if (!bridges::cpp_uno::shared::isSimpleType(p->ppTypeRefs[i]->eTypeClass)) -+ return true; -+ } -+ if (p->pBaseTypeDescription != 0) -+ return is_complex_struct(&p->pBaseTypeDescription->aBase); -+ return false; -+ } -+#endif -+ -+ bool return_in_hidden_param( typelib_TypeDescriptionReference *pTypeRef ) -+ { -+ if (bridges::cpp_uno::shared::isSimpleType(pTypeRef)) -+ return false; -+#if _CALL_ELF == 2 -+ else if (pTypeRef->eTypeClass == typelib_TypeClass_STRUCT || pTypeRef->eTypeClass == typelib_TypeClass_EXCEPTION) -+ { -+ typelib_TypeDescription * pTypeDescr = 0; -+ TYPELIB_DANGER_GET( &pTypeDescr, pTypeRef ); -+ -+ //A Composite Type not larger than 16 bytes is returned in up to two GPRs -+ bool bRet = pTypeDescr->nSize > 16 || is_complex_struct(pTypeDescr); -+ -+ TYPELIB_DANGER_RELEASE( pTypeDescr ); -+ return bRet; -+ } -+#endif -+ return true; -+ } -+} -+ -+void MapReturn(long r3, long r4, double dret, typelib_TypeDescriptionReference* pReturnType, void *pRegisterReturn) -+{ -+ switch (pReturnType->eTypeClass) - { - case typelib_TypeClass_HYPER: - case typelib_TypeClass_UNSIGNED_HYPER: -@@ -65,6 +115,17 @@ void MapReturn(long r3, double dret, typelib_TypeClass eTypeClass, void *pRegist - case typelib_TypeClass_DOUBLE: - *reinterpret_cast( pRegisterReturn ) = dret; - break; -+#if _CALL_ELF == 2 -+ case typelib_TypeClass_STRUCT: -+ case typelib_TypeClass_EXCEPTION: -+ if (!ppc64::return_in_hidden_param(pReturnType)) -+ { -+ sal_uInt64 *pRegisters = reinterpret_cast(pRegisterReturn); -+ pRegisters[0] = r3; -+ if (pReturnType->pType->nSize > 8) -+ pRegisters[1] = r4; -+ } -+#endif - default: - break; - } -@@ -114,7 +175,11 @@ static void callVirtualMethod(void * pThis, sal_uInt32 nVtableIndex, - pMethod += 8 * nVtableIndex; - pMethod = *((sal_uInt64 *)pMethod); - -+#if _CALL_ELF == 2 -+ typedef void (* FunctionCall )(...); -+#else - typedef void (* FunctionCall )( sal_uInt64, sal_uInt64, sal_uInt64, sal_uInt64, sal_uInt64, sal_uInt64, sal_uInt64, sal_uInt64 ); -+#endif - FunctionCall pFunc = (FunctionCall)pMethod; - - volatile double dret; -@@ -168,7 +233,7 @@ static void callVirtualMethod(void * pThis, sal_uInt32 nVtableIndex, - "fmr %0, 1\n\t" - : "=f" (dret), "=r" (r3), "=r" (r4) : ); - -- MapReturn(r3, dret, pReturnTypeDescr->eTypeClass, pRegisterReturn); -+ MapReturn(r3, r4, dret, pReturnTypeRef, pRegisterReturn); - } - - // Macros for easier insertion of values to registers or stack -@@ -252,14 +317,18 @@ static void cpp_call( - - void * pCppReturn = 0; // if != 0 && != pUnoReturn, needs reconversion - -- bool bOverFlow = false; -+ bool bOverFlow = false; -+ bool bSimpleReturn = true; - - if (pReturnTypeDescr) - { - #if OSL_DEBUG_LEVEL > 2 - fprintf(stderr, "return type is %d\n", pReturnTypeDescr->eTypeClass); - #endif -- if (bridges::cpp_uno::shared::isSimpleType( pReturnTypeDescr )) -+ if (ppc64::return_in_hidden_param(pReturnTypeRef)) -+ bSimpleReturn = false; -+ -+ if (bSimpleReturn) - { - pCppReturn = pUnoReturn; // direct way for simple types - #if OSL_DEBUG_LEVEL > 2 -diff --git a/configure.ac b/configure.ac -index 2560a0d..d72d272 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -4157,6 +4157,13 @@ linux-gnu*) - PLATFORMID=linux_powerpc_64 - OUTPATH=unxlngppc64 - ;; -+ powerpc64le) -+ CPUNAME=POWERPC64 -+ RTL_ARCH=PowerPC_64_LE -+ LIB64="lib64" -+ PLATFORMID=linux_powerpc64_le -+ OUTPATH=unxlngppc64 -+ ;; - sparc) - CPUNAME=SPARC - RTL_ARCH=SPARC -@@ -7155,7 +7162,7 @@ if test -n "$ENABLE_JAVA" -a \( -z "$JAVALIB" -o -z "$JAVAINC" \); then - ;; - esac - ;; -- powerpc64) -+ powerpc64*) - JAVA_ARCH="ppc64" - if test "$JDK" = "gcj"; then - JAVA_TOOLKIT="client" -@@ -10809,7 +10816,7 @@ AC_SUBST(RHINO_JAR) - - supports_multilib= - case "$host_cpu" in --x86_64 | powerpc64 | s390x) -+x86_64 | powerpc64 | powerpc64le | s390x) - if test "$SAL_TYPES_SIZEOFLONG" = "8"; then - supports_multilib="yes" - fi -diff --git a/desktop/source/deployment/misc/dp_platform.cxx b/desktop/source/deployment/misc/dp_platform.cxx -index 830f865..adb5a9a 100644 ---- a/desktop/source/deployment/misc/dp_platform.cxx -+++ b/desktop/source/deployment/misc/dp_platform.cxx -@@ -35,6 +35,7 @@ - #define PLATFORM_LINUX_SPARC "linux_sparc" - #define PLATFORM_LINUX_POWERPC "linux_powerpc" - #define PLATFORM_LINUX_POWERPC64 "linux_powerpc64" -+#define PLATFORM_LINUX_POWERPC64_LE "linux_powerpc64_le" - #define PLATFORM_LINUX_ARM_EABI "linux_arm_eabi" - #define PLATFORM_LINUX_ARM_OABI "linux_arm_oabi" - #define PLATFORM_LINUX_MIPS_EL "linux_mips_el" -@@ -129,6 +130,8 @@ namespace - ret = checkOSandCPU("Linux", "PowerPC"); - else if (token == PLATFORM_LINUX_POWERPC64) - ret = checkOSandCPU("Linux", "PowerPC_64"); -+ else if (token == PLATFORM_LINUX_POWERPC64_LE) -+ ret = checkOSandCPU("Linux", "PowerPC_64_LE"); - else if (token == PLATFORM_LINUX_ARM_EABI) - ret = checkOSandCPU("Linux", "ARM_EABI"); - else if (token == PLATFORM_LINUX_ARM_OABI) -diff --git a/m4/ax_boost_base.m4 b/m4/ax_boost_base.m4 -index 7a0cf52..55de0c4 100644 ---- a/m4/ax_boost_base.m4 -+++ b/m4/ax_boost_base.m4 -@@ -91,7 +91,7 @@ if test "x$want_boost" = "xyes"; then - dnl are found, e.g. when only header-only libraries are installed! - libsubdirs="lib" - ax_arch=`uname -m` -- if test $ax_arch = x86_64 -o $ax_arch = ppc64 -o $ax_arch = s390x -o $ax_arch = sparc64 -o $ax_arch = aarch64; then -+ if test $ax_arch = x86_64 -o $ax_arch = ppc64 -o $ax_arch = ppc64le -o $ax_arch = s390x -o $ax_arch = sparc64 -o $ax_arch = aarch64; then - libsubdirs="lib64 lib lib64" - fi - --- -1.9.3 - diff --git a/SOURCES/0001-Resolves-rhbz-1161238-sync-PRESOBJ_OUTLINE-para-dept.patch b/SOURCES/0001-Resolves-rhbz-1161238-sync-PRESOBJ_OUTLINE-para-dept.patch new file mode 100644 index 0000000..9055061 --- /dev/null +++ b/SOURCES/0001-Resolves-rhbz-1161238-sync-PRESOBJ_OUTLINE-para-dept.patch @@ -0,0 +1,95 @@ +From a6ddf90a2c4070d9c2355b7349db9f02b2119dc4 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Fri, 7 Nov 2014 14:16:58 +0000 +Subject: [PATCH] Resolves: rhbz#1161238 sync PRESOBJ_OUTLINE para depths to + outline numbering + +same problem as fdo#78151, except that pre-existing documents created +before the bullet/numbering toggling UI change have PRESOBJ_OUTLINEs with +paras in them with "numbering off" but the outline level they are a +preview of still have numbering enabled. + +Leave the actual numbering styles alone in this case and toggle the +PRESOBJ_OUTLINEs paras back to the level they "really" are + +Change-Id: I76508f88b5003afd1740feee3ec328326117f896 +--- + sd/source/filter/xml/sdxmlwrp.cxx | 48 +++++++++++++++++++++++++++++++++++++++ + 1 file changed, 48 insertions(+) + +diff --git a/sd/source/filter/xml/sdxmlwrp.cxx b/sd/source/filter/xml/sdxmlwrp.cxx +index 411e7b1..65a52ac 100644 +--- a/sd/source/filter/xml/sdxmlwrp.cxx ++++ b/sd/source/filter/xml/sdxmlwrp.cxx +@@ -26,6 +26,7 @@ + #include + #include + #include "drawdoc.hxx" ++#include "Outliner.hxx" + #include + #include + +@@ -415,6 +416,51 @@ sal_Int32 ReadThroughComponent( + + + ++//PRESOBJ_OUTLINEs in master pages are the preview of the outline styles ++//numbering format. Since fdo#78151 toggling bullets on and off changes ++//the style they are a preview of, previously toggling bullets on and off ++//would only affect the preview paragraph itself without an effect on the ++//style. i.e. previews of numbering which don't match the real numbering ++//they are supposed to be a preview of. ++// ++//But there exist documents which were saved previous to that modification ++//so here we detect such cases and fix them up to ensure the previews ++//numbering level matches that of the outline level it previews ++void fixupOutlinePlaceholderNumberingDepths(SdDrawDocument* pDoc) ++{ ++ for (sal_uInt16 i = 0; i < pDoc->GetMasterSdPageCount(PK_STANDARD); ++i) ++ { ++ SdPage *pMasterPage = pDoc->GetMasterSdPage(i, PK_STANDARD); ++ SdrObject* pMasterOutline = pMasterPage->GetPresObj(PRESOBJ_OUTLINE); ++ if (!pMasterOutline) ++ continue; ++ OutlinerParaObject* pOutlParaObj = pMasterOutline->GetOutlinerParaObject(); ++ if (!pOutlParaObj) ++ continue; ++ ::sd::Outliner* pOutliner = pDoc->GetInternalOutliner(); ++ pOutliner->Clear(); ++ pOutliner->SetText(*pOutlParaObj); ++ bool bInconsistent = false; ++ const sal_Int32 nParaCount = pOutliner->GetParagraphCount(); ++ for (sal_Int32 j = 0; j < nParaCount; ++j) ++ { ++ const sal_Int16 nExpectedDepth = j; ++ if (nExpectedDepth != pOutliner->GetDepth(j)) ++ { ++ Paragraph* p = pOutliner->GetParagraph(j); ++ pOutliner->SetDepth(p, nExpectedDepth); ++ bInconsistent = true; ++ } ++ } ++ if (bInconsistent) ++ { ++ SAL_WARN("sd.filter", "Fixing inconsistent outline numbering placeholder preview depth"); ++ pMasterOutline->SetOutlinerParaObject(pOutliner->CreateParaObject(0, nParaCount)); ++ } ++ pOutliner->Clear(); ++ } ++} ++ + bool SdXMLFilter::Import( ErrCode& nError ) + { + sal_uInt32 nRet = 0; +@@ -779,6 +825,8 @@ bool SdXMLFilter::Import( ErrCode& nError ) + } + } + ++ fixupOutlinePlaceholderNumberingDepths(pDoc); ++ + pDoc->EnableUndo(true); + mrDocShell.ClearUndoBuffer(); + return nRet == 0; +-- +1.9.3 + diff --git a/SOURCES/0001-Resolves-rhbz-1193971-clear-hard-coded-char-props-in.patch b/SOURCES/0001-Resolves-rhbz-1193971-clear-hard-coded-char-props-in.patch new file mode 100644 index 0000000..2751bf4 --- /dev/null +++ b/SOURCES/0001-Resolves-rhbz-1193971-clear-hard-coded-char-props-in.patch @@ -0,0 +1,132 @@ +From dffb7a52ddba02b725d0f1d2438931e20655475f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Wed, 18 Feb 2015 15:04:45 +0000 +Subject: [PATCH] Resolves: rhbz#1193971 clear hard-coded char props in table + cells... +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +like we do already for shapes. So now when attempting to set replacement char +properties on the entire cell, clear any hard-coded sub ranges within the +existing paragraphs. + +This extends the effort of +commit a217f3cb2dce71a4322f78ceb45edb6f171b2b65 +Author: Matúš Kukan +Date: Tue Aug 26 10:16:34 2014 +0200 + + bnc#770711: Make changing table text color in impress always work + +to encompass all character properties, not just color + +(cherry picked from commit b14259b946686c753c0df42c519fc2537e871601) + +Conflicts: + svx/source/table/cell.cxx + +Change-Id: If8b426c3531b4678868d8351426db32c3c558650 +--- + svx/source/svdraw/svdedtv1.cxx | 38 ++++++++++++++++++++++---------------- + svx/source/table/cell.cxx | 15 +++++++++++++-- + 2 files changed, 35 insertions(+), 18 deletions(-) + +diff --git a/svx/source/svdraw/svdedtv1.cxx b/svx/source/svdraw/svdedtv1.cxx +index 7945d2c..928f9e2 100644 +--- a/svx/source/svdraw/svdedtv1.cxx ++++ b/svx/source/svdraw/svdedtv1.cxx +@@ -953,6 +953,26 @@ void SdrEditView::MergeAttrFromMarked(SfxItemSet& rAttr, bool bOnlyHardAttr) con + } + } + ++std::vector GetAllCharPropIds(const SfxItemSet& rSet) ++{ ++ std::vector aCharWhichIds; ++ { ++ SfxItemIter aIter(rSet); ++ const SfxPoolItem* pItem=aIter.FirstItem(); ++ while (pItem!=NULL) ++ { ++ if (!IsInvalidItem(pItem)) ++ { ++ sal_uInt16 nWhich = pItem->Which(); ++ if (nWhich>=EE_CHAR_START && nWhich<=EE_CHAR_END) ++ aCharWhichIds.push_back( nWhich ); ++ } ++ pItem=aIter.NextItem(); ++ } ++ } ++ return aCharWhichIds; ++} ++ + void SdrEditView::SetAttrToMarked(const SfxItemSet& rAttr, bool bReplaceAll) + { + if (AreObjectsMarked()) +@@ -977,25 +997,11 @@ void SdrEditView::SetAttrToMarked(const SfxItemSet& rAttr, bool bReplaceAll) + } + #endif + +- // #103836# if the user thets character attributes to the complete shape, ++ // #103836# if the user sets character attributes to the complete shape, + // we want to remove all hard set character attributes with same + // which ids from the text. We do that later but here we remember + // all character attribute which id's that are set. +- std::vector aCharWhichIds; +- { +- SfxItemIter aIter(rAttr); +- const SfxPoolItem* pItem=aIter.FirstItem(); +- while( pItem!=NULL ) +- { +- if (!IsInvalidItem(pItem)) +- { +- sal_uInt16 nWhich = pItem->Which(); +- if (nWhich>=EE_CHAR_START && nWhich<=EE_CHAR_END) +- aCharWhichIds.push_back( nWhich ); +- } +- pItem=aIter.NextItem(); +- } +- } ++ std::vector aCharWhichIds(GetAllCharPropIds(rAttr)); + + // To make Undo reconstruct text attributes correctly after Format.Standard + bool bHasEEItems=SearchOutlinerItems(rAttr,bReplaceAll); +diff --git a/svx/source/table/cell.cxx b/svx/source/table/cell.cxx +index 8d64dbc..7c2e5eb 100644 +--- a/svx/source/table/cell.cxx ++++ b/svx/source/table/cell.cxx +@@ -139,6 +139,8 @@ SdrText* CellTextProvider::getText(sal_Int32 nIndex) const + + } + ++extern std::vector GetAllCharPropIds(const SfxItemSet& rSet); ++ + namespace sdr + { + namespace properties +@@ -261,12 +263,21 @@ namespace sdr + + sal_Int32 nParaCount(pOutliner->GetParagraphCount()); + ++ // if the user sets character attributes to the complete ++ // cell we want to remove all hard set character attributes ++ // with same which ids from the text ++ std::vector aCharWhichIds(GetAllCharPropIds(rSet)); ++ + for(sal_Int32 nPara = 0; nPara < nParaCount; nPara++) + { + SfxItemSet aSet(pOutliner->GetParaAttribs(nPara)); + aSet.Put(rSet); +- if (aSet.GetItemState(EE_CHAR_COLOR, false) == SFX_ITEM_ON) +- pOutliner->QuickRemoveCharAttribs( nPara, EE_CHAR_COLOR ); ++ ++ for (std::vector::const_iterator aI = aCharWhichIds.begin(); aI != aCharWhichIds.end(); ++aI) ++ { ++ pOutliner->QuickRemoveCharAttribs(nPara, *aI); ++ } ++ + pOutliner->SetParaAttribs(nPara, aSet); + } + +-- +1.9.3 + diff --git a/SOURCES/0001-Resolves-rhbz-1204244-group-sdb-windows-together-as-.patch b/SOURCES/0001-Resolves-rhbz-1204244-group-sdb-windows-together-as-.patch new file mode 100644 index 0000000..ea2244a --- /dev/null +++ b/SOURCES/0001-Resolves-rhbz-1204244-group-sdb-windows-together-as-.patch @@ -0,0 +1,49 @@ +From 71c00b3e96fb639e0ff0815608827936219adac5 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Mon, 23 Mar 2015 10:41:21 +0000 +Subject: [PATCH] Resolves: rhbz#1204244 group sdb windows together as 'base' + +Change-Id: Ie0d17e562b24a8108d79d13592fff3bf2b9a6713 +--- + framework/source/helper/titlebarupdate.cxx | 20 ++++++-------------- + 1 file changed, 6 insertions(+), 14 deletions(-) + +diff --git a/framework/source/helper/titlebarupdate.cxx b/framework/source/helper/titlebarupdate.cxx +index 7626309..b79b5b2 100644 +--- a/framework/source/helper/titlebarupdate.cxx ++++ b/framework/source/helper/titlebarupdate.cxx +@@ -139,25 +139,17 @@ void TitleBarUpdate::impl_updateApplicationID(const css::uno::Reference< css::fr + + OUString sDesktopName; + OUString aModuleId = xModuleManager->identify(xFrame); +- if ( aModuleId == "com.sun.star.text.TextDocument" || +- aModuleId == "com.sun.star.text.GlobalDocument" || +- aModuleId == "com.sun.star.text.WebDocument" || +- aModuleId == "com.sun.star.xforms.XMLFormDocument" ) ++ if ( aModuleId.startsWith("com.sun.star.text.") || aModuleId.startsWith("com.sun.star.xforms.") ) + sDesktopName = "Writer"; +- else if ( aModuleId == "com.sun.star.sheet.SpreadsheetDocument" ) ++ else if ( aModuleId.startsWith("com.sun.star.sheet.") ) + sDesktopName = "Calc"; +- else if ( aModuleId == "com.sun.star.presentation.PresentationDocument" ) ++ else if ( aModuleId.startsWith("com.sun.star.presentation.") ) + sDesktopName = "Impress"; +- else if ( aModuleId == "com.sun.star.drawing.DrawingDocument" ) ++ else if ( aModuleId.startsWith("com.sun.star.drawing." ) ) + sDesktopName = "Draw"; +- else if ( aModuleId == "com.sun.star.formula.FormulaProperties" ) ++ else if ( aModuleId.startsWith("com.sun.star.formula." ) ) + sDesktopName = "Math"; +- else if ( aModuleId == "com.sun.star.sdb.DatabaseDocument" || +- aModuleId == "com.sun.star.sdb.OfficeDatabaseDocument" || +- aModuleId == "com.sun.star.sdb.RelationDesign" || +- aModuleId == "com.sun.star.sdb.QueryDesign" || +- aModuleId == "com.sun.star.sdb.TableDesign" || +- aModuleId == "com.sun.star.sdb.DataSourceBrowser" ) ++ else if ( aModuleId.startsWith("com.sun.star.sdb.") ) + sDesktopName = "Base"; + else + sDesktopName = "Startcenter"; +-- +1.9.3 + diff --git a/SOURCES/0001-Resolves-rhbz-1215060-get-LibreOffice-to-load-specif.patch b/SOURCES/0001-Resolves-rhbz-1215060-get-LibreOffice-to-load-specif.patch new file mode 100644 index 0000000..c3b78cd --- /dev/null +++ b/SOURCES/0001-Resolves-rhbz-1215060-get-LibreOffice-to-load-specif.patch @@ -0,0 +1,619 @@ +From fa8128adf0bdd7698a2806fd277da2ff61bb8dfa Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Tue, 28 Oct 2014 11:35:18 +0000 +Subject: [PATCH] Resolves: rhbz#1215060 get LibreOffice to load specific + Polarion .docx + +coverity#1000600 Division or modulo by zero + +Change-Id: I38fb8a7072eb7905f5dccc8697b3176d8b34c6c2 +(cherry picked from commit 04343704ae9e5b2be4a47f7ba8ef35174db7076d) + +coverity#1202781 Division or modulo by zero + +(cherry picked from commit 54ba9587c0f1d3b5206742339af4907047fb4748) + +Conflicts: + filter/source/graphicfilter/epict/epict.cxx + svtools/source/misc/imap.cxx + +Change-Id: I2908c57badd079c8f19c679f40ed815ce2cba374 + +coverity#1000600 Division or modulo by float zero + +Change-Id: If39679b54ef1bb0a7af794c2f7a6186ebd69c2e0 +(cherry picked from commit 2149e924cbc32c370128c5f87a4f55c50c99e6bd) + +be a little more consistent stylewise + +(cherry picked from commit 2d5130ebab13fb94b07950a03b7051825b3d5b15) + +Conflicts: + vcl/source/outdev/map.cxx + +Change-Id: If1d822e0e6c87e792ff4a769a525e161505325c9 + +Related: rhbz#1215060 pass std::exceptions through + +(cherry picked from commit cb4276278962c2cbd47d0685881fb2460bf31c70) + +Conflicts: + writerfilter/source/ooxml/OOXMLFastContextHandler.hxx + +Change-Id: Ifb3431a50f92b95dfc1e851f9584533271e69324 +--- + filter/source/graphicfilter/epict/epict.cxx | 2 +- + include/o3tl/numeric.hxx | 28 +++++++++++++ + svtools/source/misc/imap.cxx | 2 +- + sw/source/core/docnode/ndtbl.cxx | 22 ++++++---- + .../source/dmapper/DomainMapperTableManager.cxx | 47 ++++++++++++++------- + .../source/ooxml/OOXMLFastContextHandler.cxx | 48 ++++++++++----------- + .../source/ooxml/OOXMLFastContextHandler.hxx | 49 +++++++++++----------- + 7 files changed, 124 insertions(+), 74 deletions(-) + create mode 100644 include/o3tl/numeric.hxx + +diff --git a/filter/source/graphicfilter/epict/epict.cxx b/filter/source/graphicfilter/epict/epict.cxx +index 1675cdc..2e037dd 100644 +--- a/filter/source/graphicfilter/epict/epict.cxx ++++ b/filter/source/graphicfilter/epict/epict.cxx +@@ -34,7 +34,7 @@ + #include + #include + #include +- ++#include + #include + #include + #include +diff --git a/include/o3tl/numeric.hxx b/include/o3tl/numeric.hxx +new file mode 100644 +index 0000000..09f67f5 +--- /dev/null ++++ b/include/o3tl/numeric.hxx +@@ -0,0 +1,28 @@ ++/* -*- 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/. ++ */ ++ ++#ifndef INCLUDED_O3TL_NUMERIC_HXX ++#define INCLUDED_O3TL_NUMERIC_HXX ++ ++#include ++ ++namespace o3tl ++{ ++ struct divide_by_zero : public std::runtime_error ++ { ++ explicit divide_by_zero() ++ : std::runtime_error("divide by zero") ++ { ++ } ++ }; ++} ++ ++#endif ++ ++/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +diff --git a/svtools/source/misc/imap.cxx b/svtools/source/misc/imap.cxx +index df2fddc..887d0ce 100644 +--- a/svtools/source/misc/imap.cxx ++++ b/svtools/source/misc/imap.cxx +@@ -22,7 +22,7 @@ + #include + #include + #include +- ++#include + #include + #include + #include +diff --git a/sw/source/core/docnode/ndtbl.cxx b/sw/source/core/docnode/ndtbl.cxx +index c10acd5..c6a9a07 100644 +--- a/sw/source/core/docnode/ndtbl.cxx ++++ b/sw/source/core/docnode/ndtbl.cxx +@@ -85,6 +85,7 @@ + #include + #include + #include ++#include + #include + + #ifdef DBG_UTIL +@@ -2950,7 +2951,7 @@ const SwTableBox* SwCollectTblLineBoxes::GetBoxOfPos( const SwTableBox& rBox ) + + bool SwCollectTblLineBoxes::Resize( sal_uInt16 nOffset, sal_uInt16 nOldWidth ) + { +- sal_uInt16 n; ++ size_t n; + + if( !aPosArr.empty() ) + { +@@ -2969,13 +2970,20 @@ bool SwCollectTblLineBoxes::Resize( sal_uInt16 nOffset, sal_uInt16 nOldWidth ) + aPosArr.erase( aPosArr.begin(), aPosArr.begin() + n ); + m_Boxes.erase(m_Boxes.begin(), m_Boxes.begin() + n); + +- // Adapt the positions to the new Size +- for( n = 0; n < aPosArr.size(); ++n ) ++ size_t nSize = aPosArr.size(); ++ if (nSize) + { +- sal_uLong nSize = nWidth; +- nSize *= ( aPosArr[ n ] - nOffset ); +- nSize /= nOldWidth; +- aPosArr[ n ] = sal_uInt16( nSize ); ++ if (nOldWidth == 0) ++ throw o3tl::divide_by_zero(); ++ ++ // Adapt the positions to the new Size ++ for( n = 0; n < nSize; ++n ) ++ { ++ sal_uLong nSize = nWidth; ++ nSize *= ( aPosArr[ n ] - nOffset ); ++ nSize /= nOldWidth; ++ aPosArr[ n ] = sal_uInt16( nSize ); ++ } + } + } + return !aPosArr.empty(); +diff --git a/writerfilter/source/dmapper/DomainMapperTableManager.cxx b/writerfilter/source/dmapper/DomainMapperTableManager.cxx +index 22c7a62..c4ba571 100644 +--- a/writerfilter/source/dmapper/DomainMapperTableManager.cxx ++++ b/writerfilter/source/dmapper/DomainMapperTableManager.cxx +@@ -30,6 +30,7 @@ + #include + #include + #include ++#include + #include + #include + +@@ -697,20 +698,27 @@ void DomainMapperTableManager::endOfRowAction() + sal_Int16 nLastRelPos = 0; + sal_uInt32 nBorderGridIndex = m_nGridBefore; + +- ::std::vector< sal_Int32 >::const_iterator aSpansIter = pCurrentSpans->begin( ); +- for( sal_uInt32 nBorder = 0; nBorder < m_nCell.back( ) - 1; ++nBorder ) ++ size_t nWidthsBound = m_nCell.back( ) - 1; ++ if (nWidthsBound) + { +- double fGridWidth = 0.; +- for ( sal_Int32 nGridCount = *aSpansIter; nGridCount > 0; --nGridCount ) +- fGridWidth += (*pTableGrid.get())[nBorderGridIndex++]; ++ if (nFullWidthRelative == 0) ++ throw o3tl::divide_by_zero(); + +- sal_Int16 nRelPos = +- sal::static_int_cast< sal_Int16 >((fGridWidth * 10000) / nFullWidthRelative); ++ ::std::vector< sal_Int32 >::const_iterator aSpansIter = pCurrentSpans->begin( ); ++ for( sal_uInt32 nBorder = 0; nBorder < nWidthsBound; ++nBorder ) ++ { ++ double fGridWidth = 0.; ++ for ( sal_Int32 nGridCount = *aSpansIter; nGridCount > 0; --nGridCount ) ++ fGridWidth += (*pTableGrid.get())[nBorderGridIndex++]; ++ ++ sal_Int16 nRelPos = ++ sal::static_int_cast< sal_Int16 >((fGridWidth * 10000) / nFullWidthRelative); + +- pSeparators[nBorder].Position = nRelPos + nLastRelPos; +- pSeparators[nBorder].IsVisible = sal_True; +- nLastRelPos = nLastRelPos + nRelPos; +- ++aSpansIter; ++ pSeparators[nBorder].Position = nRelPos + nLastRelPos; ++ pSeparators[nBorder].IsVisible = sal_True; ++ nLastRelPos = nLastRelPos + nRelPos; ++ ++aSpansIter; ++ } + } + TablePropertyMapPtr pPropMap( new TablePropertyMap ); + pPropMap->Insert( PROP_TABLE_COLUMN_SEPARATORS, uno::makeAny( aSeparators ) ); +@@ -744,12 +752,19 @@ void DomainMapperTableManager::endOfRowAction() + for (sal_uInt32 i = 0; i < pCellWidths->size(); ++i) + nFullWidthRelative += (*pCellWidths.get())[i]; + +- for (sal_uInt32 i = 0; i < pCellWidths->size() - 1; ++i) ++ size_t nWidthsBound = pCellWidths->size() - 1; ++ if (nWidthsBound) + { +- nSum += (*pCellWidths.get())[i]; +- pSeparators[nPos].Position = (nSum * 10000) / nFullWidthRelative; // Relative position +- pSeparators[nPos].IsVisible = sal_True; +- nPos++; ++ if (nFullWidthRelative == 0) ++ throw o3tl::divide_by_zero(); ++ ++ for (sal_uInt32 i = 0; i < nWidthsBound; ++i) ++ { ++ nSum += (*pCellWidths.get())[i]; ++ pSeparators[nPos].Position = (nSum * 10000) / nFullWidthRelative; // Relative position ++ pSeparators[nPos].IsVisible = sal_True; ++ nPos++; ++ } + } + + TablePropertyMapPtr pPropMap( new TablePropertyMap ); +diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx +index 5104574..4fd6a63 100644 +--- a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx ++++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx +@@ -289,7 +289,7 @@ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) + void OOXMLFastContextHandler::lcl_startFastElement + (Token_t Element, + const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/) +- throw (uno::RuntimeException, xml::sax::SAXException) ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) + { + OOXMLFactory::getInstance()->startAction(this, Element); + if( Element == (NS_wordprocessingDrawing|OOXML_positionV) ) +@@ -301,7 +301,7 @@ void OOXMLFastContextHandler::lcl_startFastElement + + void OOXMLFastContextHandler::lcl_endFastElement + (Token_t Element) +- throw (uno::RuntimeException, xml::sax::SAXException) ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) + { + OOXMLFactory::getInstance()->endAction(this, Element); + } +@@ -346,7 +346,7 @@ uno::Reference< xml::sax::XFastContextHandler > + OOXMLFastContextHandler::lcl_createFastChildContext + (Token_t Element, + const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/) +- throw (uno::RuntimeException, xml::sax::SAXException) ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) + { + return OOXMLFactory::getInstance()->createFastChildContext(this, Element); + } +@@ -381,7 +381,7 @@ void SAL_CALL OOXMLFastContextHandler::characters + + void OOXMLFastContextHandler::lcl_characters + (const OUString & rString) +-throw (uno::RuntimeException, xml::sax::SAXException) ++throw (uno::RuntimeException, xml::sax::SAXException, std::exception) + { + if (!m_bDiscardChildren) + OOXMLFactory::getInstance()->characters(this, rString); +@@ -1401,7 +1401,7 @@ OOXMLFastContextHandlerProperties::~OOXMLFastContextHandlerProperties() + + void OOXMLFastContextHandlerProperties::lcl_endFastElement + (Token_t Element) +- throw (uno::RuntimeException, xml::sax::SAXException) ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) + { + endAction(Element); + +@@ -1599,7 +1599,7 @@ OOXMLFastContextHandlerPropertyTable::~OOXMLFastContextHandlerPropertyTable() + + void OOXMLFastContextHandlerPropertyTable::lcl_endFastElement + (Token_t Element) +- throw (uno::RuntimeException, xml::sax::SAXException) ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) + { + OOXMLPropertySet::Pointer_t pPropSet(mpPropertySet->clone()); + OOXMLTableImpl::ValuePointer_t pTmpVal +@@ -1655,7 +1655,7 @@ OOXMLValue::Pointer_t OOXMLFastContextHandlerValue::getValue() const + + void OOXMLFastContextHandlerValue::lcl_endFastElement + (Token_t Element) +-throw (uno::RuntimeException, xml::sax::SAXException) ++throw (uno::RuntimeException, xml::sax::SAXException, std::exception) + { + sendPropertyToParent(); + +@@ -1743,7 +1743,7 @@ OOXMLFastContextHandlerTable::createFastChildContext + + void OOXMLFastContextHandlerTable::lcl_endFastElement + (Token_t /*Element*/) +- throw (uno::RuntimeException, xml::sax::SAXException) ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) + { + addCurrentChild(); + +@@ -1802,7 +1802,7 @@ OOXMLFastContextHandlerXNote::~OOXMLFastContextHandlerXNote() + void OOXMLFastContextHandlerXNote::lcl_startFastElement + (Token_t Element, + const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/) +- throw (uno::RuntimeException, xml::sax::SAXException) ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) + { + mbForwardEventsSaved = isForwardEvents(); + +@@ -1817,7 +1817,7 @@ void OOXMLFastContextHandlerXNote::lcl_startFastElement + + void OOXMLFastContextHandlerXNote::lcl_endFastElement + (Token_t Element) +- throw (uno::RuntimeException, xml::sax::SAXException) ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) + { + endAction(Element); + +@@ -2066,7 +2066,7 @@ OOXMLFastContextHandlerTextTable::~OOXMLFastContextHandlerTextTable() + void OOXMLFastContextHandlerTextTable::lcl_startFastElement + (Token_t Element, + const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/) +- throw (uno::RuntimeException, xml::sax::SAXException) ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) + { + mpParserState->startTable(); + mnTableDepth++; +@@ -2086,7 +2086,7 @@ void OOXMLFastContextHandlerTextTable::lcl_startFastElement + + void OOXMLFastContextHandlerTextTable::lcl_endFastElement + (Token_t Element) +- throw (uno::RuntimeException, xml::sax::SAXException) ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) + { + endAction(Element); + +@@ -2142,7 +2142,7 @@ OOXMLFastContextHandlerShape::~OOXMLFastContextHandlerShape() + void OOXMLFastContextHandlerShape::lcl_startFastElement + (Token_t Element, + const uno::Reference< xml::sax::XFastAttributeList > & Attribs) +- throw (uno::RuntimeException, xml::sax::SAXException) ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) + { + startAction(Element); + +@@ -2198,7 +2198,7 @@ void OOXMLFastContextHandlerShape::sendShape( Token_t Element ) + + void OOXMLFastContextHandlerShape::lcl_endFastElement + (Token_t Element) +- throw (uno::RuntimeException, xml::sax::SAXException) ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) + { + if (mrShapeContext.is()) + { +@@ -2227,7 +2227,7 @@ uno::Reference< xml::sax::XFastContextHandler > + OOXMLFastContextHandlerShape::lcl_createFastChildContext + (Token_t Element, + const uno::Reference< xml::sax::XFastAttributeList > & Attribs) +- throw (uno::RuntimeException, xml::sax::SAXException) ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) + { + uno::Reference< xml::sax::XFastContextHandler > xContextHandler; + +@@ -2300,7 +2300,7 @@ OOXMLFastContextHandlerShape::createUnknownChildContext + + void OOXMLFastContextHandlerShape::lcl_characters + (const OUString & aChars) +- throw (uno::RuntimeException, xml::sax::SAXException) ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) + { + if (mrShapeContext.is()) + mrShapeContext->characters(aChars); +@@ -2392,7 +2392,7 @@ void OOXMLFastContextHandlerWrapper::addToken( Token_t Token ) + void OOXMLFastContextHandlerWrapper::lcl_startFastElement + (Token_t Element, + const uno::Reference< xml::sax::XFastAttributeList > & Attribs) +- throw (uno::RuntimeException, xml::sax::SAXException) ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) + { + if (mxContext.is()) + mxContext->startFastElement(Element, Attribs); +@@ -2400,7 +2400,7 @@ void OOXMLFastContextHandlerWrapper::lcl_startFastElement + + void OOXMLFastContextHandlerWrapper::lcl_endFastElement + (Token_t Element) +- throw (uno::RuntimeException, xml::sax::SAXException) ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) + { + if (mxContext.is()) + mxContext->endFastElement(Element); +@@ -2410,7 +2410,7 @@ uno::Reference< xml::sax::XFastContextHandler > + OOXMLFastContextHandlerWrapper::lcl_createFastChildContext + (Token_t Element, + const uno::Reference< xml::sax::XFastAttributeList > & Attribs) +- throw (uno::RuntimeException, xml::sax::SAXException) ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) + { + uno::Reference< xml::sax::XFastContextHandler > xResult; + +@@ -2464,7 +2464,7 @@ OOXMLFastContextHandlerWrapper::lcl_createFastChildContext + + void OOXMLFastContextHandlerWrapper::lcl_characters + (const OUString & aChars) +- throw (uno::RuntimeException, xml::sax::SAXException) ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) + { + if (mxContext.is()) + mxContext->characters(aChars); +@@ -2599,14 +2599,14 @@ OOXMLFastContextHandlerLinear::OOXMLFastContextHandlerLinear(OOXMLFastContextHan + + void OOXMLFastContextHandlerLinear::lcl_startFastElement(Token_t Element, + const uno::Reference< xml::sax::XFastAttributeList >& Attribs) +- throw (uno::RuntimeException, xml::sax::SAXException) ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) + { + buffer.appendOpeningTag( Element, Attribs ); + ++depthCount; + } + + void OOXMLFastContextHandlerLinear::lcl_endFastElement(Token_t Element) +- throw (uno::RuntimeException, xml::sax::SAXException) ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) + { + buffer.appendClosingTag( Element ); + if( --depthCount == 0 ) +@@ -2616,7 +2616,7 @@ void OOXMLFastContextHandlerLinear::lcl_endFastElement(Token_t Element) + uno::Reference< xml::sax::XFastContextHandler > + OOXMLFastContextHandlerLinear::lcl_createFastChildContext(Token_t, + const uno::Reference< xml::sax::XFastAttributeList >&) +- throw (uno::RuntimeException, xml::sax::SAXException) ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) + { + uno::Reference< xml::sax::XFastContextHandler > xContextHandler; + xContextHandler.set( this ); +@@ -2624,7 +2624,7 @@ OOXMLFastContextHandlerLinear::lcl_createFastChildContext(Token_t, + } + + void OOXMLFastContextHandlerLinear::lcl_characters(const OUString& aChars) +- throw (uno::RuntimeException, xml::sax::SAXException) ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) + { + buffer.appendCharacters( aChars ); + } +diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx +index f56f5e9..6a40c25 100644 +--- a/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx ++++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx +@@ -263,20 +263,19 @@ protected: + virtual void lcl_startFastElement + (Token_t Element, + const uno::Reference< xml::sax::XFastAttributeList > & Attribs) +- throw (uno::RuntimeException, xml::sax::SAXException); ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception); + + virtual void lcl_endFastElement(Token_t Element) +- throw (uno::RuntimeException, xml::sax::SAXException); ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception); + + virtual uno::Reference< xml::sax::XFastContextHandler > + lcl_createFastChildContext + (Token_t Element, + const uno::Reference< xml::sax::XFastAttributeList > & Attribs) +- throw (uno::RuntimeException, xml::sax::SAXException); ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception); + + virtual void lcl_characters(const OUString & aChars) +- throw (uno::RuntimeException, xml::sax::SAXException); +- ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception); + void startAction(Token_t Element); + virtual void lcl_startAction(Token_t Element); + void endAction(Token_t Element); +@@ -361,7 +360,7 @@ protected: + OOXMLPropertySet::Pointer_t mpPropertySet; + + virtual void lcl_endFastElement(Token_t Element) +- throw (uno::RuntimeException, xml::sax::SAXException) SAL_OVERRIDE; ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE; + virtual void setParent(OOXMLFastContextHandler * pParent) SAL_OVERRIDE; + + private: +@@ -380,7 +379,7 @@ protected: + OOXMLTableImpl mTable; + + virtual void lcl_endFastElement(Token_t Element) +- throw (uno::RuntimeException, xml::sax::SAXException) SAL_OVERRIDE; ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE; + }; + + class OOXMLFastContextHandlerValue : +@@ -395,7 +394,7 @@ public: + virtual OOXMLValue::Pointer_t getValue() const SAL_OVERRIDE; + + virtual void lcl_endFastElement(Token_t Element) +- throw (uno::RuntimeException, xml::sax::SAXException) SAL_OVERRIDE; ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE; + + virtual string getType() const SAL_OVERRIDE { return "Value"; } + +@@ -427,7 +426,7 @@ protected: + RefAndPointer_t mCurrentChild; + + virtual void lcl_endFastElement(Token_t Element) +- throw (uno::RuntimeException, xml::sax::SAXException) SAL_OVERRIDE; ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE; + + virtual ResourceEnum_t getResource() const SAL_OVERRIDE { return TABLE; } + +@@ -456,10 +455,10 @@ private: + virtual void lcl_startFastElement + (Token_t Element, + const uno::Reference< xml::sax::XFastAttributeList > & Attribs) +- throw (uno::RuntimeException, xml::sax::SAXException) SAL_OVERRIDE; ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE; + + virtual void lcl_endFastElement(Token_t Element) +- throw (uno::RuntimeException, xml::sax::SAXException) SAL_OVERRIDE; ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE; + + virtual ResourceEnum_t getResource() const SAL_OVERRIDE { return STREAM; } + }; +@@ -507,10 +506,10 @@ protected: + virtual void lcl_startFastElement + (Token_t Element, + const uno::Reference< xml::sax::XFastAttributeList > & Attribs) +- throw (uno::RuntimeException, xml::sax::SAXException) SAL_OVERRIDE; ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE; + + virtual void lcl_endFastElement(Token_t Element) +- throw (uno::RuntimeException, xml::sax::SAXException) SAL_OVERRIDE; ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE; + }; + + class OOXMLFastContextHandlerShape: public OOXMLFastContextHandlerProperties +@@ -559,19 +558,19 @@ protected: + virtual void lcl_startFastElement + (Token_t Element, + const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) +- throw (css::uno::RuntimeException, css::xml::sax::SAXException) SAL_OVERRIDE; ++ throw (css::uno::RuntimeException, css::xml::sax::SAXException, std::exception) SAL_OVERRIDE; + + virtual void lcl_endFastElement(Token_t Element) +- throw (css::uno::RuntimeException, css::xml::sax::SAXException) SAL_OVERRIDE; ++ throw (css::uno::RuntimeException, css::xml::sax::SAXException, std::exception) SAL_OVERRIDE; + + virtual uno::Reference< xml::sax::XFastContextHandler > + lcl_createFastChildContext + (Token_t Element, + const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) +- throw (css::uno::RuntimeException, css::xml::sax::SAXException) SAL_OVERRIDE; ++ throw (css::uno::RuntimeException, css::xml::sax::SAXException, std::exception) SAL_OVERRIDE; + + virtual void lcl_characters(const OUString & aChars) +- throw (css::uno::RuntimeException, css::xml::sax::SAXException) SAL_OVERRIDE; ++ throw (css::uno::RuntimeException, css::xml::sax::SAXException, std::exception) SAL_OVERRIDE; + + }; + +@@ -628,19 +627,19 @@ protected: + virtual void lcl_startFastElement + (Token_t Element, + const uno::Reference< xml::sax::XFastAttributeList > & Attribs) +- throw (uno::RuntimeException, xml::sax::SAXException) SAL_OVERRIDE; ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE; + + virtual void lcl_endFastElement(Token_t Element) +- throw (uno::RuntimeException, xml::sax::SAXException) SAL_OVERRIDE; ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE; + + virtual uno::Reference< xml::sax::XFastContextHandler > + lcl_createFastChildContext + (Token_t Element, + const uno::Reference< xml::sax::XFastAttributeList > & Attribs) +- throw (uno::RuntimeException, xml::sax::SAXException) SAL_OVERRIDE; ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE; + + virtual void lcl_characters(const OUString & aChars) +- throw (uno::RuntimeException, xml::sax::SAXException) SAL_OVERRIDE; ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE; + + virtual void setId(Id nId) SAL_OVERRIDE; + virtual Id getId() const SAL_OVERRIDE; +@@ -690,15 +689,15 @@ protected: + virtual void process() = 0; + + virtual void lcl_startFastElement(Token_t Element, const uno::Reference< xml::sax::XFastAttributeList > & Attribs) +- throw (uno::RuntimeException, xml::sax::SAXException) SAL_OVERRIDE; ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE; + +- virtual void lcl_endFastElement(Token_t Element) throw (uno::RuntimeException, xml::sax::SAXException) SAL_OVERRIDE; ++ virtual void lcl_endFastElement(Token_t Element) throw (uno::RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE; + + virtual uno::Reference< xml::sax::XFastContextHandler > lcl_createFastChildContext(Token_t Element, + const uno::Reference< xml::sax::XFastAttributeList > & Attribs) +- throw (uno::RuntimeException, xml::sax::SAXException) SAL_OVERRIDE; ++ throw (uno::RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE; + +- virtual void lcl_characters(const OUString & aChars) throw (uno::RuntimeException, xml::sax::SAXException) SAL_OVERRIDE; ++ virtual void lcl_characters(const OUString & aChars) throw (uno::RuntimeException, xml::sax::SAXException, std::exception) SAL_OVERRIDE; + + // should be private, but not much point in making deep copies of it + oox::formulaimport::XmlStreamBuilder buffer; +-- +2.1.0 + diff --git a/SOURCES/0001-Resolves-rhbz-912529-Kerkis-SmallCaps-shown-instead-.patch b/SOURCES/0001-Resolves-rhbz-912529-Kerkis-SmallCaps-shown-instead-.patch deleted file mode 100644 index aa68715..0000000 --- a/SOURCES/0001-Resolves-rhbz-912529-Kerkis-SmallCaps-shown-instead-.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 1ded21bfb99951ca947bd11a7442398668202ca6 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= -Date: Wed, 4 Dec 2013 15:04:04 +0000 -Subject: [PATCH] Resolves: rhbz#912529 Kerkis SmallCaps shown instead of - Kerkis Regular - -we encounter both fonts, but all their properties that we compare -are the same, so we think they are two versions of the same font -and throw away the "Regular" version. - -Change-Id: I24369f10c7a0edba1faa02621bb78616e880966e ---- - vcl/source/gdi/outdev3.cxx | 11 +++++++++-- - 1 file changed, 9 insertions(+), 2 deletions(-) - -diff --git a/vcl/source/gdi/outdev3.cxx b/vcl/source/gdi/outdev3.cxx -index c27cd93..f3f5a77 100644 ---- a/vcl/source/gdi/outdev3.cxx -+++ b/vcl/source/gdi/outdev3.cxx -@@ -665,7 +665,7 @@ PhysicalFontFace::PhysicalFontFace( const ImplDevFontAttributes& rDFA, int nMagi - - sal_Int32 PhysicalFontFace::CompareIgnoreSize( const PhysicalFontFace& rOther ) const - { -- // compare their width, weight, italic and style name -+ // compare their width, weight, italic, style name and family name - if( GetWidthType() < rOther.GetWidthType() ) - return -1; - else if( GetWidthType() > rOther.GetWidthType() ) -@@ -681,7 +681,14 @@ sal_Int32 PhysicalFontFace::CompareIgnoreSize( const PhysicalFontFace& rOther ) - else if( GetSlant() > rOther.GetSlant() ) - return 1; - -- return GetFamilyName().compareTo( rOther.GetFamilyName() ); -+ sal_Int32 nRet = GetFamilyName().compareTo( rOther.GetFamilyName() ); -+ -+ if (nRet == 0) -+ { -+ nRet = GetStyleName().compareTo( rOther.GetStyleName() ); -+ } -+ -+ return nRet; - } - - sal_Int32 PhysicalFontFace::CompareWithSize( const PhysicalFontFace& rOther ) const --- -1.8.3.1 - diff --git a/SOURCES/0001-Resolves-tdf-73211-gtk-checkboxes-need-erase-afer-to.patch b/SOURCES/0001-Resolves-tdf-73211-gtk-checkboxes-need-erase-afer-to.patch new file mode 100644 index 0000000..504098a --- /dev/null +++ b/SOURCES/0001-Resolves-tdf-73211-gtk-checkboxes-need-erase-afer-to.patch @@ -0,0 +1,53 @@ +From cefd9a4a0ad5d8c1cd352e5911f8eebccd344e6b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Fri, 24 Apr 2015 11:01:50 +0100 +Subject: [PATCH] Resolves: tdf#73211 gtk checkboxes need erase afer toggling + +because an unchecked checkbox can have a smaller paint area +than a checked checkbox. This has always bugged me + +(cherry picked from commit d194074aa34e3724dd9b93fbc81bf2ba793cd37a) + +Conflicts: + vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx + +Change-Id: Iac0f075089611b47c381863a9655445d732bfddc +--- + vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx | 2 ++ + vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx | 7 ++++++- + 2 files changed, 8 insertions(+), 1 deletion(-) + +diff --git a/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx b/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx +index b1e7e23..226ea69 100644 +--- a/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx ++++ b/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx +@@ -441,6 +441,8 @@ void GtkData::initNWF( void ) + pSVData->maNWFData.mnMenuFormatBorderX = xthickness + horizontal_padding; + pSVData->maNWFData.mnMenuFormatBorderY = ythickness + vertical_padding; + ++ pSVData->maNWFData.mbCheckBoxNeedsErase = true; ++ + if( SalGetDesktopEnvironment() == "KDE" ) + { + // #i97196# ensure a widget exists and the style engine was loaded +diff --git a/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx b/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx +index 2a1f4e7..ed4c2d0 100644 +--- a/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx ++++ b/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx +@@ -1470,7 +1470,12 @@ bool GtkSalGraphics::IsNativeControlSupported( ControlType nType, ControlPart nP + return false; + } + +-void GtkData::initNWF() {} ++void GtkData::initNWF() ++{ ++ ImplSVData* pSVData = ImplGetSVData(); ++ pSVData->maNWFData.mbCheckBoxNeedsErase = true; ++} ++ + void GtkData::deInitNWF() {} + + void GtkSalGraphics::getStyleContext(GtkStyleContext** style, GtkWidget* widget) +-- +2.1.0 + diff --git a/SOURCES/0001-Resolves-tdf-90256-repair-invalid-docking-positions.patch b/SOURCES/0001-Resolves-tdf-90256-repair-invalid-docking-positions.patch new file mode 100644 index 0000000..4856428 --- /dev/null +++ b/SOURCES/0001-Resolves-tdf-90256-repair-invalid-docking-positions.patch @@ -0,0 +1,34 @@ +From 3c22024f41029dd4c1dca6b265d1fd0f14fc2f95 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Thu, 26 Mar 2015 13:37:10 +0000 +Subject: [PATCH] Resolves: tdf#90256 repair invalid docking positions + +Change-Id: If144a867dc4be6975c08cd1eea9ebb540975aafc +--- + framework/source/layoutmanager/layoutmanager.cxx | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/framework/source/layoutmanager/layoutmanager.cxx b/framework/source/layoutmanager/layoutmanager.cxx +index d4e4eee..94e99ff 100644 +--- a/framework/source/layoutmanager/layoutmanager.cxx ++++ b/framework/source/layoutmanager/layoutmanager.cxx +@@ -531,8 +531,15 @@ bool LayoutManager::readWindowStateData( const OUString& aName, UIElement& rElem + else if ( aWindowState[n].Name == WINDOWSTATE_PROPERTY_DOCKPOS ) + { + awt::Point aPoint; +- if ( aWindowState[n].Value >>= aPoint ) ++ if (aWindowState[n].Value >>= aPoint) ++ { ++ //tdf#90256 repair these broken Docking positions ++ if (aPoint.X < 0) ++ aPoint.X = SAL_MAX_INT32; ++ if (aPoint.Y < 0) ++ aPoint.Y = SAL_MAX_INT32; + rElementData.m_aDockedData.m_aPos = aPoint; ++ } + } + else if ( aWindowState[n].Name == WINDOWSTATE_PROPERTY_POS ) + { +-- +1.9.3 + diff --git a/SOURCES/0001-Resolves-tdf-90757-ensure-start-row-end-row-order-ma.patch b/SOURCES/0001-Resolves-tdf-90757-ensure-start-row-end-row-order-ma.patch new file mode 100644 index 0000000..8460b0e --- /dev/null +++ b/SOURCES/0001-Resolves-tdf-90757-ensure-start-row-end-row-order-ma.patch @@ -0,0 +1,97 @@ +From 92ce22450d4a140b368bf95ae6975887f3a30032 Mon Sep 17 00:00:00 2001 +Message-Id: <92ce22450d4a140b368bf95ae6975887f3a30032.1430767502.git.erack@redhat.com> +From: Eike Rathke +Date: Mon, 4 May 2015 20:45:45 +0200 +Subject: [PATCH] Resolves tdf#90757 ensure start row / end row order makes + sense +MIME-Version: 1.0 +Content-Type: multipart/mixed; boundary="------------erAck-patch-parts" + +This is a multi-part message in MIME format. +--------------erAck-patch-parts +Content-Type: text/plain; charset=UTF-8; format=fixed +Content-Transfer-Encoding: 8bit + + +... in case the header is the only row. + +(cherry picked from commit 46fa99f61aff88f1697959a9d3c41a5c3c3c05e9) + +Conflicts: + sc/source/ui/docshell/dbdocfun.cxx + +Change-Id: I5e6046007a8d668f9834e108aaf8af0072629fc8 +--- + sc/source/core/data/table3.cxx | 9 ++++----- + sc/source/ui/docshell/dbdocfun.cxx | 13 ++++++++----- + 2 files changed, 12 insertions(+), 10 deletions(-) + + +--------------erAck-patch-parts +Content-Type: text/x-patch; name="0001-Resolves-tdf-90757-ensure-start-row-end-row-order-ma.patch" +Content-Transfer-Encoding: 8bit +Content-Disposition: attachment; filename="0001-Resolves-tdf-90757-ensure-start-row-end-row-order-ma.patch" + +diff --git a/sc/source/core/data/table3.cxx b/sc/source/core/data/table3.cxx +index daf370c..c9e9377 100644 +--- a/sc/source/core/data/table3.cxx ++++ b/sc/source/core/data/table3.cxx +@@ -1429,11 +1429,10 @@ void ScTable::Sort( + SCROW nLastRow = 0; + for (SCCOL nCol = rSortParam.nCol1; nCol <= rSortParam.nCol2; nCol++) + nLastRow = std::max(nLastRow, aCol[nCol].GetLastDataPos()); +- rSortParam.nRow2 = nLastRow = std::min(nLastRow, rSortParam.nRow2); +- SCROW nRow1 = (rSortParam.bHasHeader ? +- rSortParam.nRow1 + 1 : rSortParam.nRow1); ++ rSortParam.nRow2 = nLastRow = std::max( std::min(nLastRow, rSortParam.nRow2), rSortParam.nRow1); ++ SCROW nRow1 = (rSortParam.bHasHeader ? rSortParam.nRow1 + 1 : rSortParam.nRow1); + aSortParam = rSortParam; // must be assigned before calling IsSorted() +- if (!IsSorted(nRow1, nLastRow)) ++ if (nRow1 < nLastRow && !IsSorted(nRow1, nLastRow)) + { + if(pProgress) + pProgress->SetState( 0, nLastRow-nRow1 ); +@@ -1459,7 +1458,7 @@ void ScTable::Sort( + SCCOL nCol1 = (rSortParam.bHasHeader ? + rSortParam.nCol1 + 1 : rSortParam.nCol1); + aSortParam = rSortParam; // must be assigned before calling IsSorted() +- if (!IsSorted(nCol1, nLastCol)) ++ if (nCol1 < nLastCol && !IsSorted(nCol1, nLastCol)) + { + if(pProgress) + pProgress->SetState( 0, nLastCol-nCol1 ); +diff --git a/sc/source/ui/docshell/dbdocfun.cxx b/sc/source/ui/docshell/dbdocfun.cxx +index c4e81bc..cb132b6 100644 +--- a/sc/source/ui/docshell/dbdocfun.cxx ++++ b/sc/source/ui/docshell/dbdocfun.cxx +@@ -531,10 +531,13 @@ bool ScDBDocFunc::Sort( SCTAB nTab, const ScSortParam& rSortParam, + + pDBData->SetSortParam(rSortParam); + +- ScRange aDirtyRange( +- aLocalParam.nCol1, nStartRow, nTab, +- aLocalParam.nCol2, aLocalParam.nRow2, nTab); +- pDoc->SetDirty( aDirtyRange, true ); ++ if (nStartRow <= aLocalParam.nRow2) ++ { ++ ScRange aDirtyRange( ++ aLocalParam.nCol1, nStartRow, nTab, ++ aLocalParam.nCol2, aLocalParam.nRow2, nTab); ++ pDoc->SetDirty( aDirtyRange, true ); ++ } + + if (bPaint) + { +@@ -552,7 +555,7 @@ bool ScDBDocFunc::Sort( SCTAB nTab, const ScSortParam& rSortParam, + rDocShell.PostPaint(ScRange(nStartX, nStartY, nTab, nEndX, nEndY, nTab), nPaint); + } + +- if (!bUniformRowHeight) ++ if (!bUniformRowHeight && nStartRow <= aLocalParam.nRow2) + rDocShell.AdjustRowHeight(nStartRow, aLocalParam.nRow2, nTab); + + aModificator.SetDocumentModified(); + +--------------erAck-patch-parts-- + + diff --git a/SOURCES/0001-Resolves-tdf-91078-check-also-DBData-modified-not-on.patch b/SOURCES/0001-Resolves-tdf-91078-check-also-DBData-modified-not-on.patch new file mode 100644 index 0000000..d672de6 --- /dev/null +++ b/SOURCES/0001-Resolves-tdf-91078-check-also-DBData-modified-not-on.patch @@ -0,0 +1,259 @@ +From 43c6130f152066ce751033f5b0fd205b4912e332 Mon Sep 17 00:00:00 2001 +Message-Id: <43c6130f152066ce751033f5b0fd205b4912e332.1430929664.git.erack@redhat.com> +From: Eike Rathke +Date: Wed, 6 May 2015 17:15:12 +0200 +Subject: [PATCH] Resolves: tdf#91078 check also DBData modified, not only + named expressions +MIME-Version: 1.0 +Content-Type: multipart/mixed; boundary="------------erAck-patch-parts" + +This is a multi-part message in MIME format. +--------------erAck-patch-parts +Content-Type: text/plain; charset=UTF-8; format=fixed +Content-Transfer-Encoding: 8bit + + +This adds ScDocument& to all RefUpdate...Context; another approach could +had been to add an UpdatedDBData similar to UpdatedRangeNames and gather +those in the ScDBData::Update...() methods, but as long as +ScDBData::IsModified() works that isn't necessary. + +(cherry picked from commit 848dc76e76c1c4a9040be4a0088c4d4527af6f40) + +Backported. + +Change-Id: Iae3ec6c8b8356cbd8acb2445489e91e7d6922fb3 +--- + sc/inc/refupdatecontext.hxx | 9 ++++++--- + sc/source/core/data/documen2.cxx | 4 ++-- + sc/source/core/data/document.cxx | 8 ++++---- + sc/source/core/data/refupdatecontext.cxx | 12 ++++++------ + sc/source/core/tool/token.cxx | 29 +++++++++++++++++++++-------- + 5 files changed, 39 insertions(+), 23 deletions(-) + + +--------------erAck-patch-parts +Content-Type: text/x-patch; name="0001-Resolves-tdf-91078-check-also-DBData-modified-not-on.patch" +Content-Transfer-Encoding: 8bit +Content-Disposition: attachment; filename="0001-Resolves-tdf-91078-check-also-DBData-modified-not-on.patch" + +diff --git a/sc/inc/refupdatecontext.hxx b/sc/inc/refupdatecontext.hxx +index 393a855..3b4db92 100644 +--- a/sc/inc/refupdatecontext.hxx ++++ b/sc/inc/refupdatecontext.hxx +@@ -103,29 +103,32 @@ struct RefUpdateResult + + struct RefUpdateInsertTabContext + { ++ ScDocument& mrDoc; + SCTAB mnInsertPos; + SCTAB mnSheets; + UpdatedRangeNames maUpdatedNames; + +- RefUpdateInsertTabContext(SCTAB nInsertPos, SCTAB nSheets); ++ RefUpdateInsertTabContext(ScDocument& rDoc, SCTAB nInsertPos, SCTAB nSheets); + }; + + struct RefUpdateDeleteTabContext + { ++ ScDocument& mrDoc; + SCTAB mnDeletePos; + SCTAB mnSheets; + UpdatedRangeNames maUpdatedNames; + +- RefUpdateDeleteTabContext(SCTAB nInsertPos, SCTAB nSheets); ++ RefUpdateDeleteTabContext(ScDocument& rDoc, SCTAB nInsertPos, SCTAB nSheets); + }; + + struct RefUpdateMoveTabContext + { ++ ScDocument& mrDoc; + SCTAB mnOldPos; + SCTAB mnNewPos; + UpdatedRangeNames maUpdatedNames; + +- RefUpdateMoveTabContext(SCTAB nOldPos, SCTAB nNewPos); ++ RefUpdateMoveTabContext(ScDocument& rDoc, SCTAB nOldPos, SCTAB nNewPos); + + SCTAB getNewTab(SCTAB nOldTab) const; + }; +diff --git a/sc/source/core/data/documen2.cxx b/sc/source/core/data/documen2.cxx +index 79e6f63..5e73cb9 100644 +--- a/sc/source/core/data/documen2.cxx ++++ b/sc/source/core/data/documen2.cxx +@@ -744,7 +744,7 @@ bool ScDocument::MoveTab( SCTAB nOldPos, SCTAB nNewPos, ScProgress* pProgress ) + // Referenz-Updaterei + //! mit UpdateReference zusammenfassen! + +- sc::RefUpdateMoveTabContext aCxt(nOldPos, nNewPos); ++ sc::RefUpdateMoveTabContext aCxt( *this, nOldPos, nNewPos); + + SCsTAB nDz = ((SCsTAB)nNewPos) - (SCsTAB)nOldPos; + ScRange aSourceRange( 0,0,nOldPos, MAXCOL,MAXROW,nOldPos ); +@@ -820,7 +820,7 @@ bool ScDocument::CopyTab( SCTAB nOldPos, SCTAB nNewPos, const ScMarkData* pOnlyM + bValid = !GetTable( aName, nDummy ); + + sc::AutoCalcSwitch aACSwitch(*this, false); +- sc::RefUpdateInsertTabContext aCxt(nNewPos, 1); ++ sc::RefUpdateInsertTabContext aCxt( *this, nNewPos, 1); + + if (bValid) + { +diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx +index 524f97f..cfa6c7c 100644 +--- a/sc/source/core/data/document.cxx ++++ b/sc/source/core/data/document.cxx +@@ -494,7 +494,7 @@ bool ScDocument::InsertTab( + { + if (ValidTab(nPos) && (nPos < nTabCount)) + { +- sc::RefUpdateInsertTabContext aCxt(nPos, 1); ++ sc::RefUpdateInsertTabContext aCxt( *this, nPos, 1); + + ScRange aRange( 0,0,nPos, MAXCOL,MAXROW,MAXTAB ); + xColNameRanges->UpdateReference( URM_INSDEL, this, aRange, 0,0,1 ); +@@ -588,7 +588,7 @@ bool ScDocument::InsertTabs( SCTAB nPos, const std::vector& rNames, + { + if (ValidTab(nPos) && (nPos < nTabCount)) + { +- sc::RefUpdateInsertTabContext aCxt(nPos, nNewSheets); ++ sc::RefUpdateInsertTabContext aCxt( *this, nPos, nNewSheets); + ScRange aRange( 0,0,nPos, MAXCOL,MAXROW,MAXTAB ); + xColNameRanges->UpdateReference( URM_INSDEL, this, aRange, 0,0,nNewSheets ); + xRowNameRanges->UpdateReference( URM_INSDEL, this, aRange, 0,0,nNewSheets ); +@@ -666,7 +666,7 @@ bool ScDocument::DeleteTab( SCTAB nTab ) + if (nTabCount > 1) + { + sc::AutoCalcSwitch aACSwitch(*this, false); +- sc::RefUpdateDeleteTabContext aCxt(nTab, 1); ++ sc::RefUpdateDeleteTabContext aCxt( *this, nTab, 1); + + ScRange aRange( 0, 0, nTab, MAXCOL, MAXROW, nTab ); + DelBroadcastAreasInRange( aRange ); +@@ -752,7 +752,7 @@ bool ScDocument::DeleteTabs( SCTAB nTab, SCTAB nSheets ) + if (nTabCount > nSheets) + { + sc::AutoCalcSwitch aACSwitch(*this, false); +- sc::RefUpdateDeleteTabContext aCxt(nTab, nSheets); ++ sc::RefUpdateDeleteTabContext aCxt( *this, nTab, nSheets); + + for (SCTAB aTab = 0; aTab < nSheets; ++aTab) + { +diff --git a/sc/source/core/data/refupdatecontext.cxx b/sc/source/core/data/refupdatecontext.cxx +index 8bf52985..6727765 100644 +--- a/sc/source/core/data/refupdatecontext.cxx ++++ b/sc/source/core/data/refupdatecontext.cxx +@@ -61,14 +61,14 @@ RefUpdateResult::RefUpdateResult(const RefUpdateResult& r) : + mbReferenceModified(r.mbReferenceModified), + mbNameModified(r.mbNameModified) {} + +-RefUpdateInsertTabContext::RefUpdateInsertTabContext(SCTAB nInsertPos, SCTAB nSheets) : +- mnInsertPos(nInsertPos), mnSheets(nSheets) {} ++RefUpdateInsertTabContext::RefUpdateInsertTabContext(ScDocument& rDoc, SCTAB nInsertPos, SCTAB nSheets) : ++ mrDoc(rDoc), mnInsertPos(nInsertPos), mnSheets(nSheets) {} + +-RefUpdateDeleteTabContext::RefUpdateDeleteTabContext(SCTAB nDeletePos, SCTAB nSheets) : +- mnDeletePos(nDeletePos), mnSheets(nSheets) {} ++RefUpdateDeleteTabContext::RefUpdateDeleteTabContext(ScDocument& rDoc, SCTAB nDeletePos, SCTAB nSheets) : ++ mrDoc(rDoc), mnDeletePos(nDeletePos), mnSheets(nSheets) {} + +-RefUpdateMoveTabContext::RefUpdateMoveTabContext(SCTAB nOldPos, SCTAB nNewPos) : +- mnOldPos(nOldPos), mnNewPos(nNewPos) {} ++RefUpdateMoveTabContext::RefUpdateMoveTabContext(ScDocument& rDoc, SCTAB nOldPos, SCTAB nNewPos) : ++ mrDoc(rDoc), mnOldPos(nOldPos), mnNewPos(nNewPos) {} + + SCTAB RefUpdateMoveTabContext::getNewTab(SCTAB nOldTab) const + { +diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx +index 9961b58..a83ba8e 100644 +--- a/sc/source/core/tool/token.cxx ++++ b/sc/source/core/tool/token.cxx +@@ -42,6 +42,7 @@ + #include "types.hxx" + #include "globstr.hrc" + #include "addincol.hxx" ++#include "dbdata.hxx" + #include + + using ::std::vector; +@@ -2748,9 +2749,6 @@ bool expandRangeByEdge( const sc::RefUpdateContext& rCxt, ScRange& rRefRange, co + + bool isNameModified( const sc::UpdatedRangeNames& rUpdatedNames, SCTAB nOldTab, const formula::FormulaToken& rToken ) + { +- if (rToken.GetOpCode() != ocName) +- return false; +- + SCTAB nTab = -1; + if (!rToken.IsGlobal()) + nTab = nOldTab; +@@ -2759,6 +2757,16 @@ bool isNameModified( const sc::UpdatedRangeNames& rUpdatedNames, SCTAB nOldTab, + return rUpdatedNames.isNameUpdated(nTab, rToken.GetIndex()); + } + ++bool isDBDataModified( const ScDocument& rDoc, const formula::FormulaToken& rToken ) ++{ ++ // Check if this DBData has been modified. ++ const ScDBData* pDBData = rDoc.GetDBCollection()->getNamedDBs().findByIndex( rToken.GetIndex()); ++ if (!pDBData) ++ return false; ++ ++ return pDBData->IsModified(); ++} ++ + } + + sc::RefUpdateResult ScTokenArray::AdjustReferenceOnShift( const sc::RefUpdateContext& rCxt, const ScAddress& rOldPos ) +@@ -2897,7 +2905,8 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceOnShift( const sc::RefUpdateCon + break; + case svIndex: + { +- if (isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p)) ++ if (((*p)->GetOpCode() == ocName && isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p)) || ++ ((*p)->GetOpCode() == ocDBArea && isDBDataModified(rCxt.mrDoc, **p))) + aRes.mbNameModified = true; + } + break; +@@ -2965,7 +2974,8 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceOnMove( + break; + case svIndex: + { +- if (isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p)) ++ if (((*p)->GetOpCode() == ocName && isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p)) || ++ ((*p)->GetOpCode() == ocDBArea && isDBDataModified(rCxt.mrDoc, **p))) + aRes.mbNameModified = true; + } + break; +@@ -3489,7 +3499,8 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceOnDeletedTab( sc::RefUpdateDele + break; + case svIndex: + { +- if (isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p)) ++ if (((*p)->GetOpCode() == ocName && isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p)) || ++ ((*p)->GetOpCode() == ocDBArea && isDBDataModified(rCxt.mrDoc, **p))) + aRes.mbNameModified = true; + } + break; +@@ -3533,7 +3544,8 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceOnInsertedTab( sc::RefUpdateIns + break; + case svIndex: + { +- if (isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p)) ++ if (((*p)->GetOpCode() == ocName && isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p)) || ++ ((*p)->GetOpCode() == ocDBArea && isDBDataModified(rCxt.mrDoc, **p))) + aRes.mbNameModified = true; + } + break; +@@ -3598,7 +3610,8 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceOnMovedTab( sc::RefUpdateMoveTa + break; + case svIndex: + { +- if (isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p)) ++ if (((*p)->GetOpCode() == ocName && isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p)) || ++ ((*p)->GetOpCode() == ocDBArea && isDBDataModified(rCxt.mrDoc, **p))) + aRes.mbNameModified = true; + } + break; + +--------------erAck-patch-parts-- + + diff --git a/SOURCES/0001-Use-the-same-advanced-Ellipse-and-Rectangle-shapes-i.patch b/SOURCES/0001-Use-the-same-advanced-Ellipse-and-Rectangle-shapes-i.patch new file mode 100644 index 0000000..bdef5f7 --- /dev/null +++ b/SOURCES/0001-Use-the-same-advanced-Ellipse-and-Rectangle-shapes-i.patch @@ -0,0 +1,139 @@ +From 5bf5fb4567096680d417af37744c743f00e26eeb Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Wed, 14 Jan 2015 16:55:02 +0000 +Subject: [PATCH] Use the same advanced Ellipse and Rectangle shapes in writer + as draw + +i.e. reconcile writer with draw/impress wrt. + +commit 0e9faf7a0f8c76b50d9a9354d5fab5d1ad4af821 +Author: Petr Mladek +Date: Fri Apr 22 16:51:58 2011 +0200 + + sd-toolbar-advanced-shapes.diff: used advanced Ellipse and Rectangle shapes + + they allow to wrap text according to the shape which is a very nice + feature (bnc#171052) + +Change-Id: I0bddfe65030f3515bcb5a30f2886d3ad17a72b0d +--- + sw/uiconfig/sglobal/toolbar/drawbar.xml | 6 +++--- + sw/uiconfig/swform/toolbar/drawbar.xml | 6 +++--- + sw/uiconfig/swreport/toolbar/drawbar.xml | 6 +++--- + sw/uiconfig/swriter/toolbar/drawbar.xml | 6 +++--- + sw/uiconfig/swxform/toolbar/drawbar.xml | 6 +++--- + 5 files changed, 15 insertions(+), 15 deletions(-) + +diff --git a/sw/uiconfig/sglobal/toolbar/drawbar.xml b/sw/uiconfig/sglobal/toolbar/drawbar.xml +index 8731a05..b31c198 100644 +--- a/sw/uiconfig/sglobal/toolbar/drawbar.xml ++++ b/sw/uiconfig/sglobal/toolbar/drawbar.xml +@@ -21,8 +21,8 @@ + + + +- +- ++ ++ + + + +@@ -48,4 +48,4 @@ + + + +- +\ No newline at end of file ++ +diff --git a/sw/uiconfig/swform/toolbar/drawbar.xml b/sw/uiconfig/swform/toolbar/drawbar.xml +index 8731a05..b31c198 100644 +--- a/sw/uiconfig/swform/toolbar/drawbar.xml ++++ b/sw/uiconfig/swform/toolbar/drawbar.xml +@@ -21,8 +21,8 @@ + + + +- +- ++ ++ + + + +@@ -48,4 +48,4 @@ + + + +- +\ No newline at end of file ++ +diff --git a/sw/uiconfig/swreport/toolbar/drawbar.xml b/sw/uiconfig/swreport/toolbar/drawbar.xml +index 8731a05..b31c198 100644 +--- a/sw/uiconfig/swreport/toolbar/drawbar.xml ++++ b/sw/uiconfig/swreport/toolbar/drawbar.xml +@@ -21,8 +21,8 @@ + + + +- +- ++ ++ + + + +@@ -48,4 +48,4 @@ + + + +- +\ No newline at end of file ++ +diff --git a/sw/uiconfig/swriter/toolbar/drawbar.xml b/sw/uiconfig/swriter/toolbar/drawbar.xml +index 8731a05..b31c198 100644 +--- a/sw/uiconfig/swriter/toolbar/drawbar.xml ++++ b/sw/uiconfig/swriter/toolbar/drawbar.xml +@@ -21,8 +21,8 @@ + + + +- +- ++ ++ + + + +@@ -48,4 +48,4 @@ + + + +- +\ No newline at end of file ++ +diff --git a/sw/uiconfig/swxform/toolbar/drawbar.xml b/sw/uiconfig/swxform/toolbar/drawbar.xml +index 8731a05..b31c198 100644 +--- a/sw/uiconfig/swxform/toolbar/drawbar.xml ++++ b/sw/uiconfig/swxform/toolbar/drawbar.xml +@@ -21,8 +21,8 @@ + + + +- +- ++ ++ + + + +@@ -48,4 +48,4 @@ + + + +- +\ No newline at end of file ++ +-- +1.9.3 + diff --git a/SOURCES/0001-add-X-TryExec-entries-to-desktop-files.patch b/SOURCES/0001-add-X-TryExec-entries-to-desktop-files.patch index 6e63c83..0b4707c 100644 --- a/SOURCES/0001-add-X-TryExec-entries-to-desktop-files.patch +++ b/SOURCES/0001-add-X-TryExec-entries-to-desktop-files.patch @@ -1,4 +1,4 @@ -From f04a62ef7e5146daefe19b04db95828198c0e1e0 Mon Sep 17 00:00:00 2001 +From 5c6b12167e070e2713640e0756f40efa2fd7494c Mon Sep 17 00:00:00 2001 From: David Tardon Date: Mon, 28 Apr 2014 09:59:10 +0200 Subject: [PATCH] add X-TryExec entries to desktop files @@ -14,7 +14,7 @@ Change-Id: Ic3626f79fa8b0b6e0d6696799445eaea8b0ab47f 6 files changed, 6 insertions(+) diff --git a/sysui/desktop/menus/base.desktop b/sysui/desktop/menus/base.desktop -index 62626d4..69ddaea 100755 +index 26f1c6a..2861dfe 100644 --- a/sysui/desktop/menus/base.desktop +++ b/sysui/desktop/menus/base.desktop @@ -32,6 +32,7 @@ Keywords=Data;SQL; @@ -26,7 +26,7 @@ index 62626d4..69ddaea 100755 Actions=NewDocument; [Desktop Action NewDocument] diff --git a/sysui/desktop/menus/calc.desktop b/sysui/desktop/menus/calc.desktop -index e50de65..8e9d7ea 100755 +index fc5e241..c50f380 100644 --- a/sysui/desktop/menus/calc.desktop +++ b/sysui/desktop/menus/calc.desktop @@ -32,6 +32,7 @@ Keywords=Accounting;Stats;OpenDocument Spreadsheet;Chart;Microsoft Excel;Microso @@ -38,7 +38,7 @@ index e50de65..8e9d7ea 100755 Actions=NewDocument; [Desktop Action NewDocument] diff --git a/sysui/desktop/menus/draw.desktop b/sysui/desktop/menus/draw.desktop -index a807fe0..4f5428f 100755 +index b5d58ce..274275f 100644 --- a/sysui/desktop/menus/draw.desktop +++ b/sysui/desktop/menus/draw.desktop @@ -32,6 +32,7 @@ Keywords=Vector;Schema;Diagram;Layout;OpenDocument Graphics;Microsoft Publisher; @@ -50,7 +50,7 @@ index a807fe0..4f5428f 100755 Actions=NewDocument; [Desktop Action NewDocument] diff --git a/sysui/desktop/menus/impress.desktop b/sysui/desktop/menus/impress.desktop -index fda44e4..21336fe 100755 +index c1f6231..7e70bfb 100644 --- a/sysui/desktop/menus/impress.desktop +++ b/sysui/desktop/menus/impress.desktop @@ -32,6 +32,7 @@ Keywords=Slideshow;Slides;OpenDocument Presentation;Microsoft PowerPoint;Microso @@ -62,7 +62,7 @@ index fda44e4..21336fe 100755 Actions=NewDocument; [Desktop Action NewDocument] diff --git a/sysui/desktop/menus/math.desktop b/sysui/desktop/menus/math.desktop -index 4822166..acb7d21 100755 +index b6981f5..4d7bd3c 100644 --- a/sysui/desktop/menus/math.desktop +++ b/sysui/desktop/menus/math.desktop @@ -33,6 +33,7 @@ Keywords=Equation;OpenDocument Formula;Formula;odf;MathML; @@ -74,7 +74,7 @@ index 4822166..acb7d21 100755 Actions=NewDocument; [Desktop Action NewDocument] diff --git a/sysui/desktop/menus/writer.desktop b/sysui/desktop/menus/writer.desktop -index e59187e..ece25c2 100755 +index c4cea12..6d943a9 100644 --- a/sysui/desktop/menus/writer.desktop +++ b/sysui/desktop/menus/writer.desktop @@ -32,6 +32,7 @@ Keywords=Text;Letter;Fax;Document;OpenDocument Text;Microsoft Word;Microsoft Wor diff --git a/SOURCES/0001-add-a-format-all-comments-feature.patch b/SOURCES/0001-add-a-format-all-comments-feature.patch deleted file mode 100644 index 0a05539..0000000 --- a/SOURCES/0001-add-a-format-all-comments-feature.patch +++ /dev/null @@ -1,441 +0,0 @@ -From ebb728c9c01b5e86926381fa816cf69cb3eb1e37 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= -Date: Tue, 22 Apr 2014 17:06:26 +0100 -Subject: [PATCH] add a 'format all comments' feature - -Change-Id: Ie9530f0f58b38d014beda60b9efba3ce93fe5c0e ---- - .../org/openoffice/Office/UI/GenericCommands.xcu | 5 ++ - sw/inc/PostItMgr.hxx | 5 ++ - sw/inc/cmdid.h | 2 +- - sw/inc/swcommands.h | 1 + - sw/sdi/_annotsh.sdi | 6 ++ - sw/sdi/_textsh.sdi | 5 ++ - sw/sdi/swriter.sdi | 24 +++++++ - .../core/uibase/docvw/AnnotationMenuButton.cxx | 2 + - sw/source/core/uibase/docvw/PostItMgr.cxx | 77 +++++++++++++++++++++- - sw/source/core/uibase/docvw/SidebarWin.cxx | 1 + - sw/source/core/uibase/docvw/annotation.hrc | 1 + - sw/source/core/uibase/inc/annotsh.hxx | 2 + - sw/source/core/uibase/shells/annotsh.cxx | 17 +++-- - sw/source/core/uibase/shells/textfld.cxx | 14 +++- - sw/source/ui/app/mn.src | 6 ++ - sw/source/ui/docvw/annotation.src | 5 ++ - 16 files changed, 166 insertions(+), 7 deletions(-) - -diff --git a/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu b/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu -index a16b900..a2d997c 100644 ---- a/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu -+++ b/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu -@@ -5298,6 +5298,11 @@ - Delete All Comments - - -+ -+ -+ Format All Comments -+ -+ - - - Delete All Comments by This Author -diff --git a/sw/inc/PostItMgr.hxx b/sw/inc/PostItMgr.hxx -index 0ac0273..56760fd 100644 ---- a/sw/inc/PostItMgr.hxx -+++ b/sw/inc/PostItMgr.hxx -@@ -44,6 +44,8 @@ class SfxBroadcaster; - class SfxHint; - class SwEditWin; - class Color; -+class SfxItemPool; -+class SfxItemSet; - class SvxSearchItem; - class SvxLanguageItem; - namespace sw { namespace annotation { -@@ -219,6 +221,9 @@ class SwPostItMgr: public SfxListener - void Delete(OUString aAuthor); - void Delete(); - -+ void ExecuteFormatAllDialog(SwView& rView); -+ void FormatAll(const SfxItemSet &rNewAttr); -+ - void Hide( const OUString& rAuthor ); - void Hide(); - void Show(); -diff --git a/sw/inc/cmdid.h b/sw/inc/cmdid.h -index 7d506a3..b10359a 100644 ---- a/sw/inc/cmdid.h -+++ b/sw/inc/cmdid.h -@@ -780,7 +780,7 @@ included in c-context files, so c++ style stuff will cause problems. - - #define FN_DELETE_COMMENT (FN_NOTES+6) - #define FN_REPLY (FN_NOTES+7) -- -+#define FN_FORMAT_ALL_NOTES (FN_NOTES+8) - - #define FN_HEADERFOOTER_EDIT (FN_HEADERFOOTER+1) - #define FN_HEADERFOOTER_DELETE (FN_HEADERFOOTER+2) -diff --git a/sw/inc/swcommands.h b/sw/inc/swcommands.h -index 0f5cd54..cc9bc07 100644 ---- a/sw/inc/swcommands.h -+++ b/sw/inc/swcommands.h -@@ -116,6 +116,7 @@ - #define CMD_FN_DELETE_COMMENT ".uno:DeleteComment" - #define CMD_FN_DELETE_NOTE_AUTHOR ".uno:DeleteAuthor" - #define CMD_FN_DELETE_ALL_NOTES ".uno:DeleteAllNotes" -+#define CMD_FN_FORMAT_ALL_NOTES ".uno:FormatAllNotes" - #define CMD_FN_HIDE_NOTE ".uno:HideNote" - #define CMD_FN_HIDE_NOTE_AUTHOR ".uno:HideAuthor" - #define CMD_FN_HIDE_ALL_NOTES ".uno:HideAllNotes" -diff --git a/sw/sdi/_annotsh.sdi b/sw/sdi/_annotsh.sdi -index 142d5e7..15f03ad 100644 ---- a/sw/sdi/_annotsh.sdi -+++ b/sw/sdi/_annotsh.sdi -@@ -37,6 +37,12 @@ interface _Annotation - StateMethod = GetNoteState ; - ] - -+ FN_FORMAT_ALL_NOTES -+ [ -+ ExecMethod = NoteExec ; -+ StateMethod = GetNoteState ; -+ ] -+ - FN_HIDE_NOTE - [ - ExecMethod = NoteExec ; -diff --git a/sw/sdi/_textsh.sdi b/sw/sdi/_textsh.sdi -index 0fb5cdb..c90bfcd 100644 ---- a/sw/sdi/_textsh.sdi -+++ b/sw/sdi/_textsh.sdi -@@ -941,6 +941,11 @@ interface BaseText - ExecMethod = ExecField ; - StateMethod = StateField; - ] -+ FN_FORMAT_ALL_NOTES -+ [ -+ ExecMethod = ExecField ; -+ StateMethod = StateField; -+ ] - FN_HIDE_NOTE - [ - ExecMethod = ExecField ; -diff --git a/sw/sdi/swriter.sdi b/sw/sdi/swriter.sdi -index f8218fe..9312844 100644 ---- a/sw/sdi/swriter.sdi -+++ b/sw/sdi/swriter.sdi -@@ -9920,6 +9920,30 @@ SfxVoidItem DeleteAllNotes FN_DELETE_ALL_NOTES - GroupId = GID_EDIT; - ] - -+SfxVoidItem FormatAllNotes FN_FORMAT_ALL_NOTES -+() -+[ -+ /* flags: */ -+ AutoUpdate = FALSE, -+ Cachable = Cachable, -+ FastCall = FALSE, -+ HasCoreId = FALSE, -+ HasDialog = FALSE, -+ ReadOnlyDoc = FALSE, -+ Toggle = FALSE, -+ Container = FALSE, -+ RecordAbsolute = FALSE, -+ RecordPerSet; -+ Synchron; -+ -+ /* config: */ -+ AccelConfig = TRUE, -+ MenuConfig = TRUE, -+ StatusBarConfig = FALSE, -+ ToolBoxConfig = TRUE, -+ GroupId = GID_EDIT; -+] -+ - //-------------------------------------------------------------------------- - SfxVoidItem HideNote FN_HIDE_NOTE - () -diff --git a/sw/source/ui/app/mn.src b/sw/source/ui/app/mn.src -index eb5ee0e..94ddb2f 100644 ---- a/sw/source/ui/app/mn.src -+++ b/sw/source/ui/app/mn.src -@@ -761,6 +761,12 @@ location: /uiconfig/[swriter|sweb|sglobal]/menubar/menubar.xml - HelpId = CMD_FN_DELETE_ALL_NOTES ;\ - Text [ en-US ] = "~Delete All Comments" ;\ - };\ -+ MenuItem\ -+ {\ -+ Identifier = FN_FORMAT_ALL_NOTES ;\ -+ HelpId = CMD_FN_FORMAT_ALL_NOTES ;\ -+ Text [ en-US ] = "~Format All Comments" ;\ -+ };\ - /* - MenuItem\ - {\ -diff --git a/sw/source/ui/docvw/AnnotationMenuButton.cxx b/sw/source/ui/docvw/AnnotationMenuButton.cxx -index 0bd4bf2..218daee 100644 ---- a/sw/source/ui/docvw/AnnotationMenuButton.cxx -+++ b/sw/source/ui/docvw/AnnotationMenuButton.cxx -@@ -74,12 +74,14 @@ void AnnotationMenuButton::MouseButtonDown( const MouseEvent& rMEvt ) - pButtonPopup->EnableItem( FN_DELETE_COMMENT, false ); - pButtonPopup->EnableItem( FN_DELETE_NOTE_AUTHOR, false ); - pButtonPopup->EnableItem( FN_DELETE_ALL_NOTES, false ); -+ pButtonPopup->EnableItem( FN_FORMAT_ALL_NOTES, false ); - } - else - { - pButtonPopup->EnableItem( FN_DELETE_COMMENT, !mrSidebarWin.IsProtected() ); - pButtonPopup->EnableItem( FN_DELETE_NOTE_AUTHOR, true ); - pButtonPopup->EnableItem( FN_DELETE_ALL_NOTES, true ); -+ pButtonPopup->EnableItem( FN_FORMAT_ALL_NOTES, true ); - } - - if ( mrSidebarWin.IsProtected() ) -diff --git a/sw/source/ui/docvw/PostItMgr.cxx b/sw/source/ui/docvw/PostItMgr.cxx -index e6b7cb6..c2b1225 100644 ---- a/sw/source/ui/docvw/PostItMgr.cxx -+++ b/sw/source/ui/docvw/PostItMgr.cxx -@@ -34,8 +34,8 @@ - #include - #include - -+#include - #include -- - #include - #include - #include -@@ -67,11 +67,14 @@ - #include - #include - #include -+#include - #include - - #include - #include - -+#include "annotsh.hxx" -+#include "swabstdlg.hxx" - #include "swevent.hxx" - #include "switerator.hxx" - -@@ -1227,6 +1230,78 @@ void SwPostItMgr::Delete() - CalcRects(); - LayoutPostIts(); - } -+ -+void SwPostItMgr::ExecuteFormatAllDialog(SwView& rView) -+{ -+ if (mvPostItFlds.empty()) -+ return; -+ sw::sidebarwindows::SwSidebarWin *pOrigActiveWin = GetActiveSidebarWin(); -+ sw::sidebarwindows::SwSidebarWin *pWin = pOrigActiveWin; -+ if (!pWin) -+ { -+ for (SwSidebarItem_iterator i = mvPostItFlds.begin(); i != mvPostItFlds.end(); ++i) -+ { -+ pWin = (*i)->pPostIt; -+ if (pWin) -+ break; -+ } -+ } -+ if (!pWin) -+ return; -+ SetActiveSidebarWin(pWin); -+ OutlinerView* pOLV = pWin->GetOutlinerView(); -+ SfxItemSet aEditAttr(pOLV->GetAttribs()); -+ SfxItemPool* pPool(SwAnnotationShell::GetAnnotationPool(rView)); -+ SfxItemSet aDlgAttr(*pPool, EE_ITEMS_START, EE_ITEMS_END); -+ aDlgAttr.Put(aEditAttr); -+ SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create(); -+ SfxAbstractTabDialog* pDlg = pFact->CreateSwCharDlg(rView.GetWindow(), rView, aDlgAttr, DLG_CHAR_ANN); -+ sal_uInt16 nRet = pDlg->Execute(); -+ if (RET_OK == nRet) -+ { -+ aDlgAttr.Put(*pDlg->GetOutputItemSet()); -+ FormatAll(aDlgAttr); -+ } -+ delete pDlg; -+ SetActiveSidebarWin(pOrigActiveWin); -+} -+ -+void SwPostItMgr::FormatAll(const SfxItemSet &rNewAttr) -+{ -+ mpWrtShell->StartAllAction(); -+ SwRewriter aRewriter; -+ aRewriter.AddRule(UndoArg1, SW_RES(STR_FORMAT_ALL_NOTES) ); -+ mpWrtShell->StartUndo( UNDO_INSATTR, &aRewriter ); -+ -+ for(SwSidebarItem_iterator i = mvPostItFlds.begin(); i != mvPostItFlds.end() ; ++i) -+ { -+ if (!(*i)->pPostIt) -+ continue; -+ OutlinerView* pOLV = (*i)->pPostIt->GetOutlinerView(); -+ //save old selection -+ ESelection aOrigSel(pOLV->GetSelection()); -+ //select all -+ Outliner *pOutliner = pOLV->GetOutliner(); -+ if (pOutliner) -+ { -+ sal_Int32 nParaCount = pOutliner->GetParagraphCount(); -+ if (nParaCount > 0) -+ pOLV->SelectRange(0, nParaCount); -+ } -+ //set new char properties -+ pOLV->SetAttribs(rNewAttr); -+ //restore old selection -+ pOLV->SetSelection(aOrigSel); -+ } -+ -+ mpWrtShell->EndUndo(); -+ PrepareView(); -+ mpWrtShell->EndAllAction(); -+ mbLayout = true; -+ CalcRects(); -+ LayoutPostIts(); -+} -+ - void SwPostItMgr::Hide( const OUString& rAuthor ) - { - for(SwSidebarItem_iterator i = mvPostItFlds.begin(); i != mvPostItFlds.end() ; ++i) -diff --git a/sw/source/ui/docvw/SidebarWin.cxx b/sw/source/ui/docvw/SidebarWin.cxx -index 275b72e..4a0d4a7 100644 ---- a/sw/source/ui/docvw/SidebarWin.cxx -+++ b/sw/source/ui/docvw/SidebarWin.cxx -@@ -971,6 +971,7 @@ void SwSidebarWin::ExecuteCommand(sal_uInt16 nSlot) - //Delete(); // do not kill the parent of our open popup menu - mnEventId = Application::PostUserEvent( LINK( this, SwSidebarWin, DeleteHdl), 0 ); - break; -+ case FN_FORMAT_ALL_NOTES: - case FN_DELETE_ALL_NOTES: - case FN_HIDE_ALL_NOTES: - // not possible as slot as this would require that "this" is the active postit -diff --git a/sw/source/ui/docvw/annotation.hrc b/sw/source/ui/docvw/annotation.hrc -index 7daf555..5fe3e49 100644 ---- a/sw/source/ui/docvw/annotation.hrc -+++ b/sw/source/ui/docvw/annotation.hrc -@@ -32,6 +32,7 @@ - #define STR_NOAUTHOR (RC_ANNOTATION_BEGIN + 6) - - #define STR_REPLY (RC_ANNOTATION_BEGIN + 7) -+#define STR_FORMAT_ALL_NOTES (RC_ANNOTATION_BEGIN + 8) - - - #define ANNOTATION_ACT_END STR_REPLY -diff --git a/sw/source/ui/docvw/annotation.src b/sw/source/ui/docvw/annotation.src -index 46afad9..a45c3ca 100644 ---- a/sw/source/ui/docvw/annotation.src -+++ b/sw/source/ui/docvw/annotation.src -@@ -35,6 +35,11 @@ String STR_DELETE_ALL_NOTES - Text [ en-US ] = "All Comments" ; - }; - -+String STR_FORMAT_ALL_NOTES -+{ -+ Text [ en-US ] = "All Comments" ; -+}; -+ - String STR_DELETE_AUTHOR_NOTES - { - Text [ en-US ] = "Comments by " ; -diff --git a/sw/source/ui/inc/annotsh.hxx b/sw/source/ui/inc/annotsh.hxx -index 5872c95..09961a7 100644 ---- a/sw/source/ui/inc/annotsh.hxx -+++ b/sw/source/ui/inc/annotsh.hxx -@@ -68,6 +68,8 @@ public: - - virtual ::svl::IUndoManager* - GetUndoManager(); -+ -+ static SfxItemPool* GetAnnotationPool(SwView& rV); - }; - - #endif -diff --git a/sw/source/ui/shells/annotsh.cxx b/sw/source/ui/shells/annotsh.cxx -index 1106013..c83a99d 100644 ---- a/sw/source/ui/shells/annotsh.cxx -+++ b/sw/source/ui/shells/annotsh.cxx -@@ -145,11 +145,16 @@ SFX_IMPL_INTERFACE(SwAnnotationShell, SfxShell, SW_RES(STR_SHELLNAME_DRAW_TEXT)) - - TYPEINIT1(SwAnnotationShell,SfxShell) - -+SfxItemPool* SwAnnotationShell::GetAnnotationPool(SwView& rV) -+{ -+ SwWrtShell &rSh = rV.GetWrtShell(); -+ return rSh.GetAttrPool().GetSecondaryPool(); -+} -+ - SwAnnotationShell::SwAnnotationShell( SwView& r ) --: rView(r) -+ : rView(r) - { -- SwWrtShell &rSh = rView.GetWrtShell(); -- SetPool(rSh.GetAttrPool().GetSecondaryPool()); -+ SetPool(SwAnnotationShell::GetAnnotationPool(rView)); - SfxShell::SetContextName(sfx2::sidebar::EnumContext::GetContextName(sfx2::sidebar::EnumContext::Context_Annotation)); - } - -@@ -1087,9 +1092,12 @@ void SwAnnotationShell::NoteExec(SfxRequest &rReq) - pPostItMgr->GetActiveSidebarWin()->ExecuteCommand(nSlot); - break; - -- case FN_DELETE_ALL_NOTES: -+ case FN_DELETE_ALL_NOTES: - pPostItMgr->Delete(); - break; -+ case FN_FORMAT_ALL_NOTES: -+ pPostItMgr->ExecuteFormatAllDialog(rView); -+ break; - case FN_DELETE_NOTE_AUTHOR: - { - SFX_REQUEST_ARG( rReq, pItem, SfxStringItem, nSlot, sal_False); -@@ -1124,6 +1132,7 @@ void SwAnnotationShell::GetNoteState(SfxItemSet &rSet) - case FN_POSTIT: - case FN_DELETE_NOTE_AUTHOR: - case FN_DELETE_ALL_NOTES: -+ case FN_FORMAT_ALL_NOTES: - case FN_HIDE_NOTE: - case FN_HIDE_NOTE_AUTHOR: - case FN_HIDE_ALL_NOTES: -diff --git a/sw/source/ui/shells/textfld.cxx b/sw/source/ui/shells/textfld.cxx -index a7050c4..7289f37 100644 ---- a/sw/source/ui/shells/textfld.cxx -+++ b/sw/source/ui/shells/textfld.cxx -@@ -18,9 +18,13 @@ - */ - - -+#include - #include - #include -- -+#include -+#include -+#include -+#include - #include - #include - #include -@@ -321,6 +325,13 @@ void SwTextShell::ExecField(SfxRequest &rReq) - if ( GetView().GetPostItMgr() ) - GetView().GetPostItMgr()->Delete(); - break; -+ case FN_FORMAT_ALL_NOTES: -+ { -+ SwPostItMgr* pPostItMgr = GetView().GetPostItMgr(); -+ if (pPostItMgr) -+ pPostItMgr->ExecuteFormatAllDialog(GetView()); -+ } -+ break; - case FN_DELETE_NOTE_AUTHOR: - { - SFX_REQUEST_ARG( rReq, pNoteItem, SfxStringItem, nSlot, sal_False); -@@ -629,6 +640,7 @@ void SwTextShell::StateField( SfxItemSet &rSet ) - case FN_DELETE_COMMENT: - case FN_DELETE_NOTE_AUTHOR: - case FN_DELETE_ALL_NOTES: -+ case FN_FORMAT_ALL_NOTES: - case FN_HIDE_NOTE: - case FN_HIDE_NOTE_AUTHOR: - case FN_HIDE_ALL_NOTES: diff --git a/SOURCES/0001-add-a-status-bar-icon-to-fit-slide-to-window.patch b/SOURCES/0001-add-a-status-bar-icon-to-fit-slide-to-window.patch deleted file mode 100644 index ac7f6da..0000000 --- a/SOURCES/0001-add-a-status-bar-icon-to-fit-slide-to-window.patch +++ /dev/null @@ -1,232 +0,0 @@ -From d6f5d4ee2cd0654497f1af37421d788411db762c Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= -Date: Thu, 8 May 2014 14:27:53 +0100 -Subject: [PATCH] add a status bar icon to fit slide to window - -Change-Id: I2c1d1fc7425b0aaad2a2445e0ac71ddc38410fdb ---- - icon-themes/galaxy/svx/res/zoom_page_statusbar.png | Bin 0 -> 418 bytes - include/svx/dialogs.hrc | 6 ++- - include/svx/zoomctrl.hxx | 15 ++++++- - sd/source/ui/app/sddll.cxx | 1 + - sd/uiconfig/simpress/statusbar/statusbar.xml | 1 + - svx/source/stbctrls/modctrl.cxx | 7 ---- - svx/source/stbctrls/stbctrls.src | 13 ++++++ - svx/source/stbctrls/zoomctrl.cxx | 46 +++++++++++++++++---- - 8 files changed, 70 insertions(+), 19 deletions(-) - create mode 100644 icon-themes/galaxy/svx/res/zoom_page_statusbar.png - -diff --git a/icon-themes/galaxy/svx/res/zoom_page_statusbar.png b/icon-themes/galaxy/svx/res/zoom_page_statusbar.png -new file mode 100644 -index 0000000000000000000000000000000000000000..5fb2d59cf7549dbb665e9efc81f7a94c0f4e4980 -GIT binary patch -literal 418 -zcmeAS@N?(olHy`uVBq!ia0vp^d>}Rl8<3oNC%zs?aTa()76ZkPfH31!Z9ZwBAbW|Y -zuPggKRt_Em37r=8g+L+M%#er@=ltB<)VvZPmw~~#C^fMpHASI3vm`^o-P1Q9MK6_| -zfq_xN)5S4F<9zQVMQ;~Jf#dbYn_qus^<|gZlVlLhn=WYb!{o$M=H~ea)HIsH)+Pzs -zA7O3wTb1UD040>XycHdeXZiA&sHNY`QYup??3pE~^|b;>byRP|ES8VP<`l -z`Gp^To!vF}*zE59-5A<;>sii - #include -- --// class SvxZoomToolBoxControl ------------------------------------------- -+#include - - class SVX_DLLPUBLIC SvxZoomStatusBarControl : public SfxStatusBarControl - { -@@ -42,6 +41,18 @@ public: - - }; - -+class SVX_DLLPUBLIC SvxZoomPageStatusBarControl : public SfxStatusBarControl -+{ -+private: -+ Image maImage; -+public: -+ virtual void Paint( const UserDrawEvent& rEvt ) SAL_OVERRIDE; -+ virtual sal_Bool MouseButtonDown( const MouseEvent & rEvt ) SAL_OVERRIDE; -+ -+ SFX_DECL_STATUSBAR_CONTROL(); -+ -+ SvxZoomPageStatusBarControl(sal_uInt16 nSlotId, sal_uInt16 nId, StatusBar& rStb); -+}; - - #endif - -diff --git a/sd/source/ui/app/sddll.cxx b/sd/source/ui/app/sddll.cxx -index f7a27c0..b37d934 100644 ---- a/sd/source/ui/app/sddll.cxx -+++ b/sd/source/ui/app/sddll.cxx -@@ -242,6 +242,7 @@ void SdDLL::RegisterControllers() - SvxCTLTextTbxCtrl::RegisterControl(SID_ATTR_PARA_RIGHT_TO_LEFT, pMod); - - // register StatusBarControls -+ SvxZoomPageStatusBarControl::RegisterControl( SID_ZOOM_ENTIRE_PAGE, pMod ); - SvxZoomStatusBarControl::RegisterControl( SID_ATTR_ZOOM, pMod ); - SvxPosSizeStatusBarControl::RegisterControl( SID_ATTR_SIZE, pMod ); - SvxModifyControl::RegisterControl( SID_DOC_MODIFIED, pMod ); -diff --git a/sd/uiconfig/simpress/statusbar/statusbar.xml b/sd/uiconfig/simpress/statusbar/statusbar.xml -index 24224fe..78042ef 100644 ---- a/sd/uiconfig/simpress/statusbar/statusbar.xml -+++ b/sd/uiconfig/simpress/statusbar/statusbar.xml -@@ -24,6 +24,7 @@ - - - -+ - - - -diff --git a/svx/source/stbctrls/modctrl.cxx b/svx/source/stbctrls/modctrl.cxx -index db94f49..aff7e75 100644 ---- a/svx/source/stbctrls/modctrl.cxx -+++ b/svx/source/stbctrls/modctrl.cxx -@@ -137,8 +137,6 @@ void SvxModifyControl::_repaint() - - // ----------------------------------------------------------------------- - --namespace { -- - /** - * Given a bounding rectangle and an image, determine the top-left position - * of the image so that the image would look centered both horizontally and -@@ -160,9 +158,6 @@ Point centerImage(const Rectangle& rBoundingRect, const Image& rImg) - return aPt; - } - --} -- -- - void SvxModifyControl::Paint( const UserDrawEvent& rUsrEvt ) - { - OutputDevice* pDev = rUsrEvt.GetDevice(); -diff --git a/svx/source/stbctrls/stbctrls.src b/svx/source/stbctrls/stbctrls.src -index 8d5beeb..5987d7a 100644 ---- a/svx/source/stbctrls/stbctrls.src -+++ b/svx/source/stbctrls/stbctrls.src -@@ -120,6 +120,11 @@ String RID_SVXSTR_DOC_LOAD - Text [ en-US ] = "Loading document..."; - }; - -+String RID_SVXSTR_FIT_SLIDE -+{ -+ Text [ en-US ] = "Fit slide to current window."; -+}; -+ - // PopupMenu ------------------------------------------------------------- - Menu RID_SVXMNU_ZOOM - { -@@ -337,5 +342,13 @@ Image RID_SVXBMP_DOC_MODIFIED_FEEDBACK - }; - MaskColor = STD_MASKCOLOR; - }; -+Image RID_SVXBMP_ZOOM_PAGE -+{ -+ ImageBitmap = Bitmap -+ { -+ File = "zoom_page_statusbar.png" ; -+ }; -+ MaskColor = STD_MASKCOLOR; -+}; - - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/svx/source/stbctrls/zoomctrl.cxx b/svx/source/stbctrls/zoomctrl.cxx -index b5be076..229f98d 100644 ---- a/svx/source/stbctrls/zoomctrl.cxx -+++ b/svx/source/stbctrls/zoomctrl.cxx -@@ -25,7 +25,8 @@ - - #include - --#include "svx/zoomctrl.hxx" -+#include -+#include - #include - #include "stbctrls.h" - #include -@@ -95,7 +96,6 @@ void ZoomPopup_Impl::Select() - } - - // class SvxZoomStatusBarControl ------------------------------------------ -- - SvxZoomStatusBarControl::SvxZoomStatusBarControl( sal_uInt16 _nSlotId, - sal_uInt16 _nId, - StatusBar& rStb ) : -@@ -183,5 +183,41 @@ void SvxZoomStatusBarControl::Command( const CommandEvent& rCEvt ) - SfxStatusBarControl::Command( rCEvt ); - } - -+SFX_IMPL_STATUSBAR_CONTROL(SvxZoomPageStatusBarControl,SfxVoidItem); -+ -+SvxZoomPageStatusBarControl::SvxZoomPageStatusBarControl(sal_uInt16 _nSlotId, -+ sal_uInt16 _nId, StatusBar& rStb) -+ : SfxStatusBarControl(_nSlotId, _nId, rStb) -+ , maImage(SVX_RES(RID_SVXBMP_ZOOM_PAGE)) -+{ -+ GetStatusBar().SetQuickHelpText(GetId(), SVX_RESSTR(RID_SVXSTR_FIT_SLIDE)); -+} -+ -+extern Point centerImage(const Rectangle& rBoundingRect, const Image& rImg); -+ -+void SvxZoomPageStatusBarControl::Paint(const UserDrawEvent& rUsrEvt) -+{ -+ OutputDevice* pDev = rUsrEvt.GetDevice(); -+ Rectangle aRect = rUsrEvt.GetRect(); -+ Point aPt = centerImage(aRect, maImage); -+ pDev->DrawImage(aPt, maImage); -+} -+ -+sal_Bool SvxZoomPageStatusBarControl::MouseButtonDown(const MouseEvent&) -+{ -+ SvxZoomItem aZoom( SVX_ZOOM_WHOLEPAGE, 0, GetId() ); -+ -+ ::com::sun::star::uno::Any a; -+ INetURLObject aObj( m_aCommandURL ); -+ -+ ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > aArgs( 1 ); -+ aArgs[0].Name = aObj.GetURLPath(); -+ aZoom.QueryValue( a ); -+ aArgs[0].Value = a; -+ -+ execute( aArgs ); -+ -+ return true; -+} - - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ - diff --git a/SOURCES/0001-add-accel.-to-switch-monitors-to-pres.-console.patch b/SOURCES/0001-add-accel.-to-switch-monitors-to-pres.-console.patch new file mode 100644 index 0000000..9d75b02 --- /dev/null +++ b/SOURCES/0001-add-accel.-to-switch-monitors-to-pres.-console.patch @@ -0,0 +1,56 @@ +From c11b6b64f63b3c7f8f8bb0f1857a9c7d8748ba9c Mon Sep 17 00:00:00 2001 +From: David Tardon +Date: Thu, 12 Mar 2015 15:42:23 +0100 +Subject: [PATCH] add accel. to switch monitors to pres. console + +Change-Id: I86c458f2c0a1c6a6baa6461a44b68c5f48ea55b0 +--- + officecfg/registry/data/org/openoffice/Office/PresenterScreen.xcu | 8 ++++++++ + sdext/source/presenter/PresenterController.cxx | 5 ++++- + 2 files changed, 12 insertions(+), 1 deletion(-) + +diff --git a/officecfg/registry/data/org/openoffice/Office/PresenterScreen.xcu b/officecfg/registry/data/org/openoffice/Office/PresenterScreen.xcu +index 3eb6434..26d9483 100644 +--- a/officecfg/registry/data/org/openoffice/Office/PresenterScreen.xcu ++++ b/officecfg/registry/data/org/openoffice/Office/PresenterScreen.xcu +@@ -969,6 +969,14 @@ + Shows the Slides Overview + + ++ ++ ++ Ctrl-'4' ++ ++ ++ Switches monitors ++ ++ + + + +diff --git a/sdext/source/presenter/PresenterController.cxx b/sdext/source/presenter/PresenterController.cxx +index 6c64bd7..e416a73 100644 +--- a/sdext/source/presenter/PresenterController.cxx ++++ b/sdext/source/presenter/PresenterController.cxx +@@ -1005,7 +1005,7 @@ void PresenterController::HandleNumericKeyPress ( + + case awt::KeyModifier::MOD1: + // Ctrl-1, Ctrl-2, and Ctrl-3 are used to switch between views +- // (slide view, notes view, normal) ++ // (slide view, notes view, normal). Ctrl-4 switches monitors + mnPendingSlideNumber = -1; + if (mpWindowManager.get() == NULL) + return; +@@ -1020,6 +1020,9 @@ void PresenterController::HandleNumericKeyPress ( + case 3: + mpWindowManager->SetViewMode(PresenterWindowManager::VM_SlideOverview); + break; ++ case 4: ++ SwitchMonitors(); ++ break; + default: + // Ignore unsupported key. + break; +-- +2.3.1 + diff --git a/SOURCES/0001-allow-comparing-documents-which-only-differ-by-frame.patch b/SOURCES/0001-allow-comparing-documents-which-only-differ-by-frame.patch new file mode 100644 index 0000000..e1ce8ce --- /dev/null +++ b/SOURCES/0001-allow-comparing-documents-which-only-differ-by-frame.patch @@ -0,0 +1,436 @@ +From b2b455b4258993a9982efb829b333df9905fe95c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Tue, 13 Jan 2015 13:55:58 +0000 +Subject: [PATCH] allow comparing documents which only differ by frame contents + +if two documents have the same number of frames then have an additional stab at +comparing the contents of those frames + +(cherry picked from commit 16916a14a2ce382aa4ff2a25f8e477108aba5a67) + +Change-Id: Ib8ad2ba938da48a46c012961b00d81b2c386a368 +--- + sw/source/core/doc/doccomp.cxx | 238 +++++++++++++++++++++++++---------------- + 1 file changed, 146 insertions(+), 92 deletions(-) + +diff --git a/sw/source/core/doc/doccomp.cxx b/sw/source/core/doc/doccomp.cxx +index 3a6e4f3..210224f 100644 +--- a/sw/source/core/doc/doccomp.cxx ++++ b/sw/source/core/doc/doccomp.cxx +@@ -35,6 +35,8 @@ + #include + #include + #include ++#include ++#include + + #include + #include +@@ -62,18 +63,32 @@ public: + + class CompareData + { ++protected: ++ SwDoc& rDoc; ++private: + size_t* pIndex; + bool* pChangedFlag; + +-protected: ++ SwPaM *pInsRing, *pDelRing; ++ ++ sal_uLong PrevIdx( const SwNode* pNd ); ++ sal_uLong NextIdx( const SwNode* pNd ); ++ + vector< CompareLine* > aLines; + sal_uLong nSttLineNum; ++ bool m_bRecordDiff; + + // Truncate beginning and end and add all others to the LinesArray +- virtual void CheckRanges( CompareData& ) = 0; ++ void CheckRanges( CompareData& ); ++ ++ virtual const SwNode& GetEndOfContent() = 0; + + public: +- CompareData(); ++ CompareData(SwDoc& rD, bool bRecordDiff) ++ : rDoc( rD ), pIndex( 0 ), pChangedFlag( 0 ), pInsRing(0), pDelRing(0) ++ , nSttLineNum( 0 ), m_bRecordDiff(bRecordDiff) ++ { ++ } + virtual ~CompareData(); + + // Are there differences? +@@ -86,10 +101,10 @@ public: + // Displaying the actually content is to be handled by the subclass! + sal_uLong ShowDiffs( const CompareData& rData ); + +- virtual void ShowInsert( sal_uLong nStt, sal_uLong nEnd ); +- virtual void ShowDelete( const CompareData& rData, sal_uLong nStt, ++ void ShowInsert( sal_uLong nStt, sal_uLong nEnd ); ++ void ShowDelete( const CompareData& rData, sal_uLong nStt, + sal_uLong nEnd, sal_uLong nInsPos ); +- virtual void CheckForChangesInLine( const CompareData& rData, ++ void CheckForChangesInLine( const CompareData& rData, + sal_uLong& nStt, sal_uLong& nEnd, + sal_uLong& nThisStt, sal_uLong& nThisEnd ); + +@@ -111,6 +126,38 @@ public: + { return aLines[ nLine ]; } + void InsertLine( CompareLine* pLine ) + { aLines.push_back( pLine ); } ++ ++ void SetRedlinesToDoc( bool bUseDocInfo ); ++}; ++ ++class CompareMainText : public CompareData ++{ ++public: ++ CompareMainText(SwDoc &rD, bool bRecordDiff=true) ++ : CompareData(rD, bRecordDiff) ++ { ++ } ++ ++ virtual const SwNode& GetEndOfContent() SAL_OVERRIDE ++ { ++ return rDoc.GetNodes().GetEndOfContent(); ++ } ++}; ++ ++class CompareFrmFmtText : public CompareData ++{ ++ const SwNodeIndex &m_rIndex; ++public: ++ CompareFrmFmtText(SwDoc &rD, const SwNodeIndex &rIndex, bool bRecordDiff=true) ++ : CompareData(rD, bRecordDiff) ++ , m_rIndex(rIndex) ++ { ++ } ++ ++ virtual const SwNode& GetEndOfContent() SAL_OVERRIDE ++ { ++ return *m_rIndex.GetNode().EndOfSectionNode(); ++ } + }; + + class Hash +@@ -325,13 +372,21 @@ public: + + CompareLine::~CompareLine() {} + +-CompareData::CompareData() +- : pIndex( 0 ), pChangedFlag( 0 ), nSttLineNum( 0 ) +-{ +-} +- + CompareData::~CompareData() + { ++ if( pDelRing ) ++ { ++ while( pDelRing->GetNext() != pDelRing ) ++ delete pDelRing->GetNext(); ++ delete pDelRing; ++ } ++ if( pInsRing ) ++ { ++ while( pInsRing->GetNext() != pInsRing ) ++ delete pInsRing->GetNext(); ++ delete pInsRing; ++ } ++ + delete[] pIndex; + delete[] pChangedFlag; + } +@@ -390,9 +445,12 @@ sal_uLong CompareData::ShowDiffs( const CompareData& rData ) + while( nStt1 < nLen1 && rData.GetChanged( nStt1 )) ++nStt1; + while( nStt2 < nLen2 && GetChanged( nStt2 )) ++nStt2; + +- // Check if there are changed lines (only slightly different) and +- // compare them in detail. +- CheckForChangesInLine( rData, nSav1, nStt1, nSav2, nStt2 ); ++ if (m_bRecordDiff) ++ { ++ // Check if there are changed lines (only slightly different) and ++ // compare them in detail. ++ CheckForChangesInLine( rData, nSav1, nStt1, nSav2, nStt2 ); ++ } + + ++nCnt; + } +@@ -419,19 +477,6 @@ bool CompareData::HasDiffs( const CompareData& rData ) const + return bRet; + } + +-void CompareData::ShowInsert( sal_uLong, sal_uLong ) +-{ +-} +- +-void CompareData::ShowDelete( const CompareData&, sal_uLong, sal_uLong, sal_uLong ) +-{ +-} +- +-void CompareData::CheckForChangesInLine( const CompareData& , +- sal_uLong&, sal_uLong&, sal_uLong&, sal_uLong& ) +-{ +-} +- + Hash::Hash( sal_uLong nSize ) + : nCount(1) + { +@@ -969,30 +1014,6 @@ public: + OUString GetText() const; + }; + +-class SwCompareData : public CompareData +-{ +- SwDoc& rDoc; +- SwPaM *pInsRing, *pDelRing; +- +- sal_uLong PrevIdx( const SwNode* pNd ); +- sal_uLong NextIdx( const SwNode* pNd ); +- +- virtual void CheckRanges( CompareData& ) SAL_OVERRIDE; +- virtual void ShowInsert( sal_uLong nStt, sal_uLong nEnd ) SAL_OVERRIDE; +- virtual void ShowDelete( const CompareData& rData, sal_uLong nStt, +- sal_uLong nEnd, sal_uLong nInsPos ) SAL_OVERRIDE; +- +- virtual void CheckForChangesInLine( const CompareData& rData, +- sal_uLong& nStt, sal_uLong& nEnd, +- sal_uLong& nThisStt, sal_uLong& nThisEnd ) SAL_OVERRIDE; +- +-public: +- SwCompareData( SwDoc& rD ) : rDoc( rD ), pInsRing(0), pDelRing(0) {} +- virtual ~SwCompareData(); +- +- void SetRedlinesToDoc( bool bUseDocInfo ); +-}; +- + SwCompareLine::SwCompareLine( const SwNode& rNd ) + : rNode( rNd ) + { +@@ -1397,23 +1418,7 @@ bool SwCompareLine::ChangesInLine( const SwCompareLine& rLine, + return bRet; + } + +-SwCompareData::~SwCompareData() +-{ +- if( pDelRing ) +- { +- while( pDelRing->GetNext() != pDelRing ) +- delete pDelRing->GetNext(); +- delete pDelRing; +- } +- if( pInsRing ) +- { +- while( pInsRing->GetNext() != pInsRing ) +- delete pInsRing->GetNext(); +- delete pInsRing; +- } +-} +- +-sal_uLong SwCompareData::NextIdx( const SwNode* pNd ) ++sal_uLong CompareData::NextIdx( const SwNode* pNd ) + { + if( pNd->IsStartNode() ) + { +@@ -1427,7 +1432,7 @@ sal_uLong SwCompareData::NextIdx( const SwNode* pNd ) + return pNd->GetIndex() + 1; + } + +-sal_uLong SwCompareData::PrevIdx( const SwNode* pNd ) ++sal_uLong CompareData::PrevIdx( const SwNode* pNd ) + { + if( pNd->IsEndNode() ) + { +@@ -1441,13 +1446,13 @@ sal_uLong SwCompareData::PrevIdx( const SwNode* pNd ) + return pNd->GetIndex() - 1; + } + +-void SwCompareData::CheckRanges( CompareData& rData ) ++void CompareData::CheckRanges( CompareData& rData ) + { +- const SwNodes& rSrcNds = ((SwCompareData&)rData).rDoc.GetNodes(); ++ const SwNodes& rSrcNds = rData.rDoc.GetNodes(); + const SwNodes& rDstNds = rDoc.GetNodes(); + +- const SwNode& rSrcEndNd = rSrcNds.GetEndOfContent(); +- const SwNode& rDstEndNd = rDstNds.GetEndOfContent(); ++ const SwNode& rSrcEndNd = rData.GetEndOfContent(); ++ const SwNode& rDstEndNd = GetEndOfContent(); + + sal_uLong nSrcSttIdx = NextIdx( rSrcEndNd.StartOfSectionNode() ); + sal_uLong nSrcEndIdx = rSrcEndNd.GetIndex(); +@@ -1494,7 +1499,7 @@ void SwCompareData::CheckRanges( CompareData& rData ) + } + } + +-void SwCompareData::ShowInsert( sal_uLong nStt, sal_uLong nEnd ) ++void CompareData::ShowInsert( sal_uLong nStt, sal_uLong nEnd ) + { + SwPaM* pTmp = new SwPaM( ((SwCompareLine*)GetLine( nStt ))->GetNode(), 0, + ((SwCompareLine*)GetLine( nEnd-1 ))->GetEndNode(), 0, +@@ -1505,7 +1510,7 @@ void SwCompareData::ShowInsert( sal_uLong nStt, sal_uLong nEnd ) + // #i65201#: These SwPaMs are calculated smaller than needed, see comment below + } + +-void SwCompareData::ShowDelete( ++void CompareData::ShowDelete( + const CompareData& rData, + sal_uLong nStt, + sal_uLong nEnd, +@@ -1538,14 +1543,14 @@ void SwCompareData::ShowDelete( + } + else + { +- pLineNd = &rDoc.GetNodes().GetEndOfContent(); ++ pLineNd = &GetEndOfContent(); + nOffset = 0; + } + + SwNodeIndex aInsPos( *pLineNd, nOffset ); + SwNodeIndex aSavePos( aInsPos, -1 ); + +- ((SwCompareData&)rData).rDoc.CopyWithFlyInFly( aRg, 0, aInsPos ); ++ rData.rDoc.CopyWithFlyInFly( aRg, 0, aInsPos ); + rDoc.SetModified(); + ++aSavePos; + +@@ -1569,7 +1574,7 @@ void SwCompareData::ShowDelete( + } + } + +-void SwCompareData::CheckForChangesInLine( const CompareData& rData, ++void CompareData::CheckForChangesInLine( const CompareData& rData, + sal_uLong& rStt, sal_uLong& rEnd, + sal_uLong& rThisStt, sal_uLong& rThisEnd ) + { +@@ -1622,7 +1627,7 @@ void SwCompareData::CheckForChangesInLine( const CompareData& rData, + } + } + +-void SwCompareData::SetRedlinesToDoc( bool bUseDocInfo ) ++void CompareData::SetRedlinesToDoc( bool bUseDocInfo ) + { + SwPaM* pTmp = pDelRing; + +@@ -1670,7 +1675,7 @@ void SwCompareData::SetRedlinesToDoc( bool bUseDocInfo ) + } + // #i101009# + // prevent redlines that end on structural end node +- if (& rDoc.GetNodes().GetEndOfContent() == ++ if (& GetEndOfContent() == + & pTmp->GetPoint()->nNode.GetNode()) + { + pTmp->GetPoint()->nNode--; +@@ -1702,7 +1707,7 @@ void SwCompareData::SetRedlinesToDoc( bool bUseDocInfo ) + } + // #i101009# + // prevent redlines that end on structural end node +- if (& rDoc.GetNodes().GetEndOfContent() == ++ if (& GetEndOfContent() == + & pTmp->GetPoint()->nNode.GetNode()) + { + pTmp->GetPoint()->nNode--; +@@ -1766,6 +1771,48 @@ static bool lcl_MergePortions(SwNode *const& pNode, void *) + return true; + } + ++typedef boost::shared_ptr CompareDataPtr; ++typedef std::pair CompareDataPtrPair; ++typedef std::vector Comparators; ++ ++namespace ++{ ++ Comparators buildComparators(SwDoc &rSrcDoc, SwDoc &rDestDoc) ++ { ++ Comparators aComparisons; ++ //compare main text ++ aComparisons.push_back(CompareDataPtrPair(CompareDataPtr(new CompareMainText(rSrcDoc)), ++ CompareDataPtr(new CompareMainText(rDestDoc)))); ++ ++ //if we have the same number of frames then try to compare within them ++ const SwFrmFmts *pSrcFrmFmts = rSrcDoc.GetSpzFrmFmts(); ++ const SwFrmFmts *pDestFrmFmts = rDestDoc.GetSpzFrmFmts(); ++ if (pSrcFrmFmts->size() == pDestFrmFmts->size()) ++ { ++ for (size_t i = 0; i < pSrcFrmFmts->size(); ++i) ++ { ++ const SwFrmFmt& rSrcFmt = *(*pSrcFrmFmts)[i]; ++ const SwFrmFmt& rDestFmt = *(*pDestFrmFmts)[i]; ++ const SwNodeIndex* pSrcIdx = rSrcFmt.GetCntnt().GetCntntIdx(); ++ const SwNodeIndex* pDestIdx = rDestFmt.GetCntnt().GetCntntIdx(); ++ if (!pSrcIdx && !pDestIdx) ++ continue; ++ if (!pSrcIdx || !pDestIdx) ++ break; ++ const SwNode* pSrcNode = pSrcIdx->GetNode().EndOfSectionNode(); ++ const SwNode* pDestNode = pDestIdx->GetNode().EndOfSectionNode(); ++ if (!pSrcNode && !pDestNode) ++ continue; ++ if (!pSrcNode || !pDestNode) ++ break; ++ aComparisons.push_back(CompareDataPtrPair(CompareDataPtr(new CompareFrmFmtText(rSrcDoc, *pSrcIdx)), ++ CompareDataPtr(new CompareFrmFmtText(rDestDoc, *pDestIdx)))); ++ } ++ } ++ return aComparisons; ++ } ++} ++ + // Returns (the difference count?) if something is different + long SwDoc::CompareDoc( const SwDoc& rDoc ) + { +@@ -1808,19 +1855,28 @@ long SwDoc::CompareDoc( const SwDoc& rDoc ) + rSrcDoc.SetRedlineMode( nsRedlineMode_t::REDLINE_SHOW_INSERT ); + SetRedlineMode((RedlineMode_t)(nsRedlineMode_t::REDLINE_ON | nsRedlineMode_t::REDLINE_SHOW_INSERT)); + +- SwCompareData aD0( rSrcDoc ); +- SwCompareData aD1( *this ); +- +- aD1.CompareLines( aD0 ); ++ Comparators aComparisons(buildComparators(rSrcDoc, *this)); + +- nRet = aD1.ShowDiffs( aD0 ); ++ for (Comparators::iterator aIter = aComparisons.begin(); aIter != aComparisons.end(); ++aIter) ++ { ++ CompareDataPtrPair& a = *aIter; ++ CompareData& rD0 = *a.first.get(); ++ CompareData& rD1 = *a.second.get(); ++ rD1.CompareLines( rD0 ); ++ nRet |= rD1.ShowDiffs( rD0 ); ++ } + + if( nRet ) + { +- SetRedlineMode((RedlineMode_t)(nsRedlineMode_t::REDLINE_ON | ++ SetRedlineMode((RedlineMode_t)(nsRedlineMode_t::REDLINE_ON | + nsRedlineMode_t::REDLINE_SHOW_INSERT | nsRedlineMode_t::REDLINE_SHOW_DELETE)); + +- aD1.SetRedlinesToDoc( !bDocWasModified ); ++ for (Comparators::iterator aIter = aComparisons.begin(); aIter != aComparisons.end(); ++aIter) ++ { ++ CompareDataPtrPair& a = *aIter; ++ CompareData& rD1 = *a.second.get(); ++ rD1.SetRedlinesToDoc( !bDocWasModified ); ++ } + SetModified(); + } + +@@ -2026,11 +2082,9 @@ long SwDoc::MergeDoc( const SwDoc& rDoc ) + rSrcDoc.SetRedlineMode( nsRedlineMode_t::REDLINE_SHOW_DELETE ); + SetRedlineMode( nsRedlineMode_t::REDLINE_SHOW_DELETE ); + +- SwCompareData aD0( rSrcDoc ); +- SwCompareData aD1( *this ); +- ++ CompareMainText aD0(rSrcDoc, false); ++ CompareMainText aD1(*this, false); + aD1.CompareLines( aD0 ); +- + if( !aD1.HasDiffs( aD0 ) ) + { + // we want to get all redlines from the SourceDoc +-- +1.9.3 + diff --git a/SOURCES/0001-allow-to-build-with-system-opencollada.patch b/SOURCES/0001-allow-to-build-with-system-opencollada.patch new file mode 100644 index 0000000..e2cffd1 --- /dev/null +++ b/SOURCES/0001-allow-to-build-with-system-opencollada.patch @@ -0,0 +1,154 @@ +From f24c60870531689d95c056037e48cd29ad1d17bb Mon Sep 17 00:00:00 2001 +From: David Tardon +Date: Mon, 20 Oct 2014 14:21:22 +0200 +Subject: [PATCH] allow to build with system opencollada + +Change-Id: I6101099c57d429987e06bca0652c843f4a94f8cc +--- + Makefile.fetch | 2 +- + RepositoryExternal.mk | 16 ++++++++++++++++ + config_host.mk.in | 4 +++- + configure.ac | 35 +++++++++++++++++++++++++++++++++++ + external/Module_external.mk | 2 +- + 5 files changed, 56 insertions(+), 3 deletions(-) + +diff --git a/Makefile.fetch b/Makefile.fetch +index e8ccf5b..18b12be 100644 +--- a/Makefile.fetch ++++ b/Makefile.fetch +@@ -184,7 +184,7 @@ $(WORKDIR)/download: $(BUILDDIR)/config_host.mk $(SRCDIR)/download.lst $(SRCDIR) + $(call fetch_Optional,NSS,NSS_TARBALL) \ + $(call fetch_Optional_pack,NUMBERTEXT_EXTENSION_PACK) \ + $(call fetch_Optional,ODFGEN,ODFGEN_TARBALL) \ +- $(call fetch_Optional,COLLADA2GLTF,OPENCOLLADA_TARBALL) \ ++ $(call fetch_Optional,OPENCOLLADA,OPENCOLLADA_TARBALL) \ + $(call fetch_Optional,OPENLDAP,OPENLDAP_TARBALL) \ + $(call fetch_Optional,OPENSSL,OPENSSL_TARBALL) \ + $(call fetch_Optional,ORCUS,ORCUS_TARBALL) \ +diff --git a/RepositoryExternal.mk b/RepositoryExternal.mk +index 5277aea..911dab1 100644 +--- a/RepositoryExternal.mk ++++ b/RepositoryExternal.mk +@@ -3371,6 +3371,20 @@ endif # SYSTEN_LIBGLTF + + ifeq ($(ENABLE_COLLADA),TRUE) + ++ifeq ($(SYSTEM_OPENCOLLADA),TRUE) ++ ++define gb_LinkTarget__use_opencollada_parser ++$(call gb_LinkTarget_set_include,$(1),\ ++ $$(INCLUDE) \ ++ $(OPENCOLLADA_CFLAGS) \ ++) ++ ++$(call gb_LinkTarget_add_libs,$(1),$(OPENCOLLADA_LIBS)) ++ ++endef ++ ++else # !SYSTEM_OPENCOLLADA ++ + define gb_LinkTarget__use_opencollada_parser + $(call gb_LinkTarget_set_include,$(1),\ + -I$(call gb_UnpackedTarball_get_dir,opencollada)/COLLADABaseUtils/include \ +@@ -3385,6 +3399,8 @@ $(call gb_LinkTarget_use_static_libraries,$(1),\ + ) + endef + ++endif # SYSTEM_OPENCOLLADA ++ + define gb_LinkTarget__use_collada2gltf + $(call gb_LinkTarget_set_include,$(1),\ + -I$(call gb_UnpackedTarball_get_dir,collada2gltf) \ +diff --git a/config_host.mk.in b/config_host.mk.in +index 0fefbb0..738c80c 100644 +--- a/config_host.mk.in ++++ b/config_host.mk.in +@@ -431,6 +431,8 @@ export OOOP_SAMPLES_PACK=@OOOP_SAMPLES_PACK@ + export OOO_JUNIT_JAR=@OOO_JUNIT_JAR@ + export OOO_VENDOR=@OOO_VENDOR@ ++export OPENCOLLADA_CFLAGS=$(gb_SPACE)@OPENCOLLADA_CFLAGS@ ++export OPENCOLLADA_LIBS=$(gb_SPACE)@OPENCOLLADA_LIBS@ + export OPENSSL_CFLAGS=$(gb_SPACE)@OPENSSL_CFLAGS@ + export OPENSSL_LIBS=$(gb_SPACE)@OPENSSL_LIBS@ + export ORCUS_CFLAGS=$(gb_SPACE)@ORCUS_CFLAGS@ + export ORCUS_LIBS=$(gb_SPACE)@ORCUS_LIBS@ +@@ -558,4 +559,5 @@ export SYSTEM_NPAPI_HEADERS=@SYSTEM_NPAPI_HEADERS@ + export SYSTEM_ODBC_HEADERS=@SYSTEM_ODBC_HEADERS@ + export SYSTEM_ODFGEN=@SYSTEM_ODFGEN@ ++export SYSTEM_OPENCOLLADA=@SYSTEM_OPENCOLLADA@ + export SYSTEM_OPENLDAP=@SYSTEM_OPENLDAP@ + export SYSTEM_OPENSSL=@SYSTEM_OPENSSL@ +diff --git a/configure.ac b/configure.ac +index 17feb1a..5d2198b 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1641,6 +1641,11 @@ AC_ARG_WITH(system-ucpp, + [Use ucpp already on system.]),, + []) + ++AC_ARG_WITH(system-opencollada, ++ AS_HELP_STRING([--with-system-opencollada], ++ [Use openCOLLADA already on system.]),, ++ [with_system_opencollada=no]) ++ + AC_ARG_WITH(system-openldap, + AS_HELP_STRING([--with-system-openldap], + [Use the OpenLDAP LDAP SDK already on system.]),, +@@ -10342,11 +10347,41 @@ if test "$enable_collada" != "no" -a "$ENABLE_GLTF" = "TRUE"; then + AC_MSG_RESULT([yes]) + ENABLE_COLLADA=TRUE + AC_DEFINE(HAVE_FEATURE_COLLADA,1) ++ AC_MSG_CHECKING([which OPENCOLLADA to use]) ++ if test "$with_system_opencollada" = "yes"; then ++ AC_MSG_RESULT([external]) ++ SYSTEM_OPENCOLLADA=TRUE ++ AS_IF([test -n "$OPENCOLLADA_CFLAGS"],[],[AC_MSG_ERROR([export OPENCOLLADA_CFLAGS])]) ++ AS_IF([test -n "$OPENCOLLADA_LIBS"],[],[AC_MSG_ERROR([export OPENCOLLADA_LIBS])]) ++ AC_LANG_PUSH([C++]) ++ save_CXXFLAGS=$CXXFLAGS ++ save_CPPFLAGS=$CPPFLAGS ++ CXXFLAGS="$CXXFLAGS $OPENCOLLADA_CFLAGS" ++ CPPFLAGS="$CPPFLAGS $OPENCOLLADA_CFLAGS" ++ AC_CHECK_HEADERS( ++ COLLADABU.h \ ++ COLLADAFW.h \ ++ COLLADASaxFWLLoader.h \ ++ GeneratedSaxParser.h, ++ [], ++ [AC_MSG_ERROR([openCOLLADA headers not found. Install openCOLLADA])], ++ []) ++ CXXFLAGS=$save_CXXFLAGS ++ CPPFLAGS=$save_CPPFLAGS ++ AC_LANG_POP([C++]) ++ OPENCOLLADA_CFLAGS=$(printf '%s' "$OPENCOLLADA_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g") ++ else ++ AC_MSG_RESULT([internal]) ++ BUILD_TYPE="$BUILD_TYPE OPENCOLLADA" ++ fi + BUILD_TYPE="$BUILD_TYPE COLLADA2GLTF" + else + AC_MSG_RESULT([no]) + fi + AC_SUBST(ENABLE_COLLADA) ++AC_SUBST([OPENCOLLADA_CFLAGS]) ++AC_SUBST([OPENCOLLADA_LIBS]) ++AC_SUBST([SYSTEM_OPENCOLLADA]) + + # pdf import? + AC_MSG_CHECKING([whether to build the PDF import feature]) +diff --git a/external/Module_external.mk b/external/Module_external.mk +index c95ea20..688e335 100644 +--- a/external/Module_external.mk ++++ b/external/Module_external.mk +@@ -75,7 +75,7 @@ $(eval $(call gb_Module_add_moduledirs,external,\ + $(call gb_Helper_optional,NEON,neon) \ + $(call gb_Helper_optional,NSS,nss) \ + $(call gb_Helper_optional,ODFGEN,libodfgen) \ +- $(call gb_Helper_optional,COLLADA2GLTF,opencollada) \ ++ $(call gb_Helper_optional,OPENCOLLADA,opencollada) \ + $(call gb_Helper_optional,OPENLDAP,openldap) \ + $(call gb_Helper_optional,OPENSSL,openssl) \ + $(call gb_Helper_optional,ORCUS,liborcus) \ +-- +1.9.3 + diff --git a/SOURCES/0001-avoid-problems-detecting-HTML-files-with-.xls-ext.patch b/SOURCES/0001-avoid-problems-detecting-HTML-files-with-.xls-ext.patch index 76b3328..e25edee 100644 --- a/SOURCES/0001-avoid-problems-detecting-HTML-files-with-.xls-ext.patch +++ b/SOURCES/0001-avoid-problems-detecting-HTML-files-with-.xls-ext.patch @@ -1,34 +1,22 @@ -From df7ff240db01ee0e993c7cbc30d3370d6d1d0956 Mon Sep 17 00:00:00 2001 +From 15bb6158591e9d8350f817ca20129c2e947cceda Mon Sep 17 00:00:00 2001 From: David Tardon Date: Tue, 8 Jul 2014 17:01:27 +0200 Subject: [PATCH] avoid problems detecting HTML files with .xls ext. -(cherry picked from commit 86c6f18c2766aad43d6e3bfcf3530e40440ebca7) -Signed-off-by: David Tardon - -Conflicts: - filter/source/textfilterdetect/filterdetect.cxx - Change-Id: I9955223aac20f3f640fde51bb7231666c269ca70 --- - filter/Configuration_filter.mk | 1 + - filter/source/config/fragments/types/calc_HTML.xcu | 35 ++++ - sc/Library_scd.mk | 1 + - sc/inc/htmlfilterdetect.hxx | 80 +++++++++ - sc/source/filter/html/htmlfilterdetect.cxx | 180 +++++++++++++++++++++ - sc/source/ui/unoobj/detreg.cxx | 9 ++ - sc/util/scd.component | 3 + - 7 files changed, 309 insertions(+) + filter/Configuration_filter.mk | 1 + + filter/source/config/fragments/types/calc_HTML.xcu | 35 ++++++++++++++++++++++ + filter/source/textfilterdetect/filterdetect.cxx | 6 ++-- + 3 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 filter/source/config/fragments/types/calc_HTML.xcu - create mode 100644 sc/inc/htmlfilterdetect.hxx - create mode 100644 sc/source/filter/html/htmlfilterdetect.cxx diff --git a/filter/Configuration_filter.mk b/filter/Configuration_filter.mk -index fe84350..36cf294 100644 +index 39fabfc..787a175 100644 --- a/filter/Configuration_filter.mk +++ b/filter/Configuration_filter.mk -@@ -514,6 +514,7 @@ $(call filter_Configuration_add_ui_filters,fcfg_langpack,filter/source/config/fr - $(call filter_Configuration_add_types,fcfg_langpack,fcfg_calc_types.xcu,filter/source/config/fragments/types,\ +@@ -520,6 +520,7 @@ $(eval $(call filter_Configuration_add_ui_filters,fcfg_langpack,filter/source/co + $(eval $(call filter_Configuration_add_types,fcfg_langpack,fcfg_calc_types.xcu,filter/source/config/fragments/types,\ calc_DIF \ calc_ODS_FlatXML \ + calc_HTML \ @@ -37,7 +25,7 @@ index fe84350..36cf294 100644 calc_Lotus \ diff --git a/filter/source/config/fragments/types/calc_HTML.xcu b/filter/source/config/fragments/types/calc_HTML.xcu new file mode 100644 -index 0000000..f4682da +index 0000000..51bf8f1 --- /dev/null +++ b/filter/source/config/fragments/types/calc_HTML.xcu @@ -0,0 +1,35 @@ @@ -65,7 +53,7 @@ index 0000000..f4682da + the detection is just a heuristic (e.g., wp1 or wp42 supported by + libwpd). --> + -+ com.sun.star.comp.calc.HtmlFilterDetect ++ com.sun.star.comp.filters.PlainTextFilterDetect + + xls + text/html @@ -76,329 +64,33 @@ index 0000000..f4682da + + + -diff --git a/sc/Library_scd.mk b/sc/Library_scd.mk -index 4d02ae1..1b4d035 100644 ---- a/sc/Library_scd.mk -+++ b/sc/Library_scd.mk -@@ -37,6 +37,7 @@ $(eval $(call gb_Library_use_libraries,scd,\ - )) - - $(eval $(call gb_Library_add_exception_objects,scd,\ -+ sc/source/filter/html/htmlfilterdetect \ - sc/source/ui/unoobj/detreg \ - sc/source/ui/unoobj/scdetect \ - sc/source/ui/unoobj/exceldetect \ -diff --git a/sc/inc/htmlfilterdetect.hxx b/sc/inc/htmlfilterdetect.hxx -new file mode 100644 -index 0000000..f131e89 ---- /dev/null -+++ b/sc/inc/htmlfilterdetect.hxx -@@ -0,0 +1,80 @@ -+/* -*- 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_SC_INC_HTMLFILTERDETECT_HXX -+#define INCLUDED_SC_INC_HTMLFILTERDETECT_HXX -+ -+#include -+#include -+#include -+#include -+ -+#include -+ -+namespace sc -+{ -+ -+class HtmlFilterDetect : public cppu::WeakImplHelper3< -+ com::sun::star::document::XExtendedFilterDetection, -+ com::sun::star::lang::XInitialization, -+ com::sun::star::lang::XServiceInfo> -+{ -+ com::sun::star::uno::Reference mxCxt; -+ -+public: -+ -+ HtmlFilterDetect (const com::sun::star::uno::Reference& xCxt); -+ virtual ~HtmlFilterDetect(); -+ -+ // XExtendedFilterDetection -+ -+ virtual OUString SAL_CALL detect(com::sun::star::uno::Sequence& lDescriptor) -+ throw( com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE; -+ -+ // XInitialization -+ -+ virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence& aArguments) -+ throw (com::sun::star::uno::Exception, com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; -+ -+ // XServiceInfo -+ -+ virtual OUString SAL_CALL getImplementationName() -+ throw (com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; -+ -+ virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) -+ throw (com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; -+ -+ virtual com::sun::star::uno::Sequence SAL_CALL getSupportedServiceNames() -+ throw (com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; -+}; -+ -+OUString HtmlFilterDetect_getImplementationName(); -+ -+bool HtmlFilterDetect_supportsService(const OUString& ServiceName); -+ -+com::sun::star::uno::Sequence HtmlFilterDetect_getSupportedServiceNames(); -+ -+com::sun::star::uno::Reference -+HtmlFilterDetect_createInstance(const com::sun::star::uno::Reference& rCxt); -+ -+} -+ -+#endif -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/sc/source/filter/html/htmlfilterdetect.cxx b/sc/source/filter/html/htmlfilterdetect.cxx -new file mode 100644 -index 0000000..f2f3db5 ---- /dev/null -+++ b/sc/source/filter/html/htmlfilterdetect.cxx -@@ -0,0 +1,180 @@ -+/* -*- 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 "htmlfilterdetect.hxx" -+ -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+#include -+ -+#define CALC_HTML_FILTER "calc_HTML_WebQuery" -+ -+namespace sc -+{ -+ -+using namespace ::com::sun::star; -+using utl::MediaDescriptor; -+ -+namespace { -+ -+bool IsHTMLStream( const uno::Reference& xInStream ) -+{ -+ boost::scoped_ptr pInStream( utl::UcbStreamHelper::CreateStream( xInStream ) ); -+ if ( !pInStream || pInStream->GetError() ) -+ // No stream -+ return false; -+ -+ // Read the stream header -+ pInStream->StartReadingUnicodeText( RTL_TEXTENCODING_DONTKNOW ); -+ const sal_Size nUniPos = pInStream->Tell(); -+ const sal_uInt16 nSize = 4096; -+ -+ OString sHeader; -+ if ( nUniPos == 3 || nUniPos == 0 ) // UTF-8 or non-Unicode -+ sHeader = read_uInt8s_ToOString( *pInStream, nSize ); -+ else // UTF-16 (nUniPos = 2) -+ sHeader = OUStringToOString( read_uInt16s_ToOUString( *pInStream, nSize ), RTL_TEXTENCODING_ASCII_US ); -+ -+ // Now check whether the stream begins with a known HTML tag. -+ enum DetectPhase { BeforeTag, TagOpened, InTagName }; -+ DetectPhase dp = BeforeTag; -+ -+ const char* pHeader = sHeader.getStr(); -+ const int nLength = sHeader.getLength(); -+ int i = 0, nStartOfTagIndex = 0; -+ -+ for ( i = 0; i < nLength; ++i, ++pHeader ) -+ { -+ char c = *pHeader; -+ if ( c == ' ' || c == '\n' || c == '\t' || c == '\r' || c == '\f' ) -+ { -+ if ( dp == TagOpened ) -+ return false; // Invalid: Should start with a tag name -+ else if ( dp == InTagName ) -+ break; // End of tag name reached -+ } -+ else if ( c == '<' ) -+ { -+ if ( dp == BeforeTag ) -+ dp = TagOpened; -+ else -+ return false; // Invalid: Nested '<' -+ } -+ else if ( c == '>' ) -+ { -+ if ( dp == InTagName ) -+ break; // End of tag name reached -+ else -+ return false; // Invalid: Empty tag or before '<' -+ } -+ else if ( c == '!' ) -+ { -+ if ( dp == TagOpened ) -+ return true; // "& xCxt) : -+ mxCxt(xCxt) {} -+ -+HtmlFilterDetect::~HtmlFilterDetect() {} -+ -+OUString SAL_CALL HtmlFilterDetect::detect(uno::Sequence& lDescriptor) throw (uno::RuntimeException, std::exception) -+{ -+ MediaDescriptor aMediaDesc(lDescriptor); -+ -+ OUString aType = aMediaDesc.getUnpackedValueOrDefault(MediaDescriptor::PROP_TYPENAME(), OUString() ); -+ -+ uno::Reference xInStream(aMediaDesc[MediaDescriptor::PROP_INPUTSTREAM()], uno::UNO_QUERY); -+ if (!xInStream.is() || !IsHTMLStream(xInStream)) -+ return OUString(); -+ -+ aMediaDesc[MediaDescriptor::PROP_FILTERNAME()] <<= OUString(CALC_HTML_FILTER); -+ -+ aMediaDesc >> lDescriptor; -+ return aType; -+} -+ -+// XInitialization -+ -+void SAL_CALL HtmlFilterDetect::initialize(const uno::Sequence& /*aArguments*/) -+ throw (uno::Exception, uno::RuntimeException, std::exception) -+{ -+} -+ -+OUString HtmlFilterDetect_getImplementationName() -+{ -+ return OUString("com.sun.star.comp.calc.HtmlFilterDetect"); -+} -+ -+uno::Sequence HtmlFilterDetect_getSupportedServiceNames() -+{ -+ uno::Sequence aRet(2); -+ OUString* pArray = aRet.getArray(); -+ pArray[0] = "com.sun.star.document.ExtendedTypeDetection"; -+ pArray[1] = "com.sun.star.comp.filters.HtmlFilterDetect"; -+ return aRet; -+} -+ -+uno::Reference HtmlFilterDetect_createInstance( -+ const uno::Reference & rCxt) -+{ -+ return (cppu::OWeakObject*) new HtmlFilterDetect(rCxt); -+} -+ -+// XServiceInfo -+OUString SAL_CALL HtmlFilterDetect::getImplementationName() -+ throw (uno::RuntimeException, std::exception) -+{ -+ return HtmlFilterDetect_getImplementationName(); -+} -+ -+sal_Bool SAL_CALL HtmlFilterDetect::supportsService(const OUString& rServiceName) -+ throw (uno::RuntimeException, std::exception) -+{ -+ return cppu::supportsService(this, rServiceName); -+} -+ -+uno::Sequence SAL_CALL HtmlFilterDetect::getSupportedServiceNames() -+ throw (uno::RuntimeException, std::exception) -+{ -+ return HtmlFilterDetect_getSupportedServiceNames(); -+} -+ -+} -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/sc/source/ui/unoobj/detreg.cxx b/sc/source/ui/unoobj/detreg.cxx -index 6edc743..f840ac1 100644 ---- a/sc/source/ui/unoobj/detreg.cxx -+++ b/sc/source/ui/unoobj/detreg.cxx -@@ -18,6 +18,7 @@ - */ - - -+#include "htmlfilterdetect.hxx" - #include "scdetect.hxx" - #include "exceldetect.hxx" - #include -@@ -42,6 +43,14 @@ static const cppu::ImplementationEntry spServices[] = - 0, 0 - }, +diff --git a/filter/source/textfilterdetect/filterdetect.cxx b/filter/source/textfilterdetect/filterdetect.cxx +index ffad7fa..1d29dd4 100644 +--- a/filter/source/textfilterdetect/filterdetect.cxx ++++ b/filter/source/textfilterdetect/filterdetect.cxx +@@ -132,7 +132,7 @@ OUString SAL_CALL PlainTextFilterDetect::detect(uno::Sequence xInStream(aMediaDesc[MediaDescriptor::PROP_INPUTSTREAM()], uno::UNO_QUERY); + if (!xInStream.is() || !IsHTMLStream(xInStream)) +@@ -141,12 +141,10 @@ OUString SAL_CALL PlainTextFilterDetect::detect(uno::Sequence - - -+ -+ -+ - +- if (aDocService == CALC_DOCSERVICE) ++ if ((aDocService == CALC_DOCSERVICE) || (aType == "calc_HTML")) + aMediaDesc[MediaDescriptor::PROP_FILTERNAME()] <<= OUString(CALC_HTML_FILTER); + else if (aDocService == WRITER_DOCSERVICE) + aMediaDesc[MediaDescriptor::PROP_FILTERNAME()] <<= OUString(WRITER_HTML_FILTER); +- else if (aExt == "xls") +- aMediaDesc[MediaDescriptor::PROP_FILTERNAME()] <<= OUString(CALC_HTML_FILTER); + else + aMediaDesc[MediaDescriptor::PROP_FILTERNAME()] <<= OUString(WEB_HTML_FILTER); + } -- -1.9.3 +2.1.0 diff --git a/SOURCES/0001-build-libetonyek-with-no-strict-aliasing.patch b/SOURCES/0001-build-libetonyek-with-no-strict-aliasing.patch new file mode 100644 index 0000000..0b7feed --- /dev/null +++ b/SOURCES/0001-build-libetonyek-with-no-strict-aliasing.patch @@ -0,0 +1,25 @@ +From 08fe34b1b00fee1ee9b4332c8e4b9142af63b4a5 Mon Sep 17 00:00:00 2001 +From: David Tardon +Date: Thu, 5 Feb 2015 14:46:31 +0100 +Subject: [PATCH 1/2] build libetonyek with no-strict-aliasing + +Change-Id: I004133fb8a8e55cce74470078013e102d6c0514e +--- + external/libetonyek/ExternalProject_libetonyek.mk | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/external/libetonyek/ExternalProject_libetonyek.mk b/external/libetonyek/ExternalProject_libetonyek.mk +index b4b5589..6e090b1 100644 +--- a/external/libetonyek/ExternalProject_libetonyek.mk ++++ b/external/libetonyek/ExternalProject_libetonyek.mk +@@ -38,6 +38,7 @@ $(call gb_ExternalProject_get_state_target,libetonyek,build) : + XML_CFLAGS="$(LIBXML_CFLAGS)" \ + XML_LIBS="$(LIBXML_LIBS)" \ + $(if $(CROSS_COMPILING),--build=$(BUILD_PLATFORM) --host=$(HOST_PLATFORM)) \ ++ CXXFLAGS="$(CXXFLAGS) -fno-strict-aliasing" \ + && $(MAKE) \ + ) + +-- +2.1.0 + diff --git a/SOURCES/0001-cast-arg-to-the-right-type.patch b/SOURCES/0001-cast-arg-to-the-right-type.patch deleted file mode 100644 index 31f4ea1..0000000 --- a/SOURCES/0001-cast-arg-to-the-right-type.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 10a269784fd425c2bef2c91f7c7a5ddd1a6d105b Mon Sep 17 00:00:00 2001 -From: David Tardon -Date: Thu, 28 Aug 2014 16:10:11 +0200 -Subject: [PATCH] cast arg to the right type - -According to desc., typelib_TypeDescription can be safely used where -typelib_TypeDescriptionReference is expected. - -Change-Id: Ibc3effd7e2894ba6ff738503e747f5157c146454 ---- - bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx -index 5836d8b..b41cee6 100644 ---- a/bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx -+++ b/bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx -@@ -233,7 +233,7 @@ static void callVirtualMethod(void * pThis, sal_uInt32 nVtableIndex, - "fmr %0, 1\n\t" - : "=f" (dret), "=r" (r3), "=r" (r4) : ); - -- MapReturn(r3, r4, dret, pReturnTypeDescr, pRegisterReturn); -+ MapReturn(r3, r4, dret, reinterpret_cast(pReturnTypeDescr), pRegisterReturn); - } - - // Macros for easier insertion of values to registers or stack --- -1.9.3 - diff --git a/SOURCES/0001-center-slide-after-changing-zoom.patch b/SOURCES/0001-center-slide-after-changing-zoom.patch deleted file mode 100644 index 7afaf0d..0000000 --- a/SOURCES/0001-center-slide-after-changing-zoom.patch +++ /dev/null @@ -1,77 +0,0 @@ -From b179235f702e474b115ca479b603052f422346fd Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= -Date: Wed, 7 May 2014 16:16:17 +0100 -Subject: [PATCH] center slide after changing zoom - -Change-Id: I08698b06d0485d2cd3573af665e0621b42d37349 ---- - sd/source/ui/inc/ViewShell.hxx | 1 + - sd/source/ui/view/viewshe2.cxx | 27 +++++++++++++++++++++++++++ - sd/source/ui/view/viewshel.cxx | 1 + - 3 files changed, 29 insertions(+) - -diff --git a/sd/source/ui/inc/ViewShell.hxx b/sd/source/ui/inc/ViewShell.hxx -index ce5ea31..87edbc5 100644 ---- a/sd/source/ui/inc/ViewShell.hxx -+++ b/sd/source/ui/inc/ViewShell.hxx -@@ -206,6 +206,7 @@ public: - virtual void UpdateScrollBars (void); - void Scroll(long nX, long nY); - void ScrollLines(long nX, long nY); -+ void ScrollCenter(); - virtual void SetZoom(long nZoom); - virtual void SetZoomRect(const Rectangle& rZoomRect); - void InitWindows(const Point& rViewOrigin, const Size& rViewSize, -diff --git a/sd/source/ui/view/viewshe2.cxx b/sd/source/ui/view/viewshe2.cxx -index 5f98d68..8f91d6c 100644 ---- a/sd/source/ui/view/viewshe2.cxx -+++ b/sd/source/ui/view/viewshe2.cxx -@@ -365,6 +365,33 @@ void ViewShell::SetZoom(long nZoom) - UpdateScrollBars(); - } - -+namespace -+{ -+ void CenterScrollBar(ScrollBar *pBar) -+ { -+ long nVisSize = pBar->GetVisibleSize(); -+ long nMin = pBar->GetRangeMin(); -+ long nMax = pBar->GetRangeMax(); -+ long nLen = nMax - nMin - nVisSize; -+ long nPos = nMin + nLen/2; -+ pBar->DoScroll(nPos); -+ } -+} -+ -+void ViewShell::ScrollCenter() -+{ -+ if (mpHorizontalScrollBar.get() != NULL) -+ CenterScrollBar(mpHorizontalScrollBar.get()); -+ -+ //zoom mode with no panning of the current slide, i.e. the -+ //scrollbar is in change slide mode not pan slide mode -+ if (IsPageFlipMode()) -+ return; -+ -+ if (mpVerticalScrollBar.get() != NULL) -+ CenterScrollBar(mpVerticalScrollBar.get()); -+} -+ - /** - * Set zoom rectangle for active window. Sets all split windows to the same zoom - * factor. -diff --git a/sd/source/ui/view/viewshel.cxx b/sd/source/ui/view/viewshel.cxx -index 28e272e..17bcf5f 100644 ---- a/sd/source/ui/view/viewshel.cxx -+++ b/sd/source/ui/view/viewshel.cxx -@@ -683,6 +683,7 @@ bool ViewShell::HandleScrollCommand(const CommandEvent& rCEvt, ::sd::Window* pWi - nNewZoom = std::min( (long) pWin->GetMaxZoom(), basegfx::zoomtools::zoomIn( nOldZoom )); - - SetZoom( nNewZoom ); -+ ScrollCenter(); //center slide after changing zoom - Invalidate( SID_ATTR_ZOOM ); - Invalidate( SID_ATTR_ZOOMSLIDER ); - --- -1.9.0 - diff --git a/SOURCES/0001-create-a-master-document-template-type.patch b/SOURCES/0001-create-a-master-document-template-type.patch new file mode 100644 index 0000000..4ab2f7a --- /dev/null +++ b/SOURCES/0001-create-a-master-document-template-type.patch @@ -0,0 +1,2295 @@ +From 2c9125d3fe8839fda09e30886c216285575aa19d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Mon, 8 Sep 2014 15:31:14 +0100 +Subject: [PATCH] create a master document template type + +of application/vnd.oasis.opendocument.text-master-template with +suffic otm + +https://lists.oasis-open.org/archives/office-comment/201002/msg00042.html + +desktop/icons/oasis-master-document-template.icns is just a copy +of +desktop/icons/oasis-master-document.icns +because I can't draw + +Change-Id: I0d18c79c4c893e97505052884ee8be97d0f117a1 +--- + bin/get-bugzilla-attachments-by-mimetype | 1 + + comphelper/source/misc/storagehelper.cxx | 1 + + extensions/source/activex/so_activex.cxx | 1 + + extensions/source/nsplugin/source/npshell.cxx | 1 + + extensions/source/nsplugin/source/nsplugin_oo.rc | 1 + + filter/Configuration_filter.mk | 3 ++ + .../fragments/filters/writerglobal8_template.xcu | 17 ++++++++ + .../filters/writerglobal8_template_ui.xcu | 12 ++++++ + .../fragments/types/writerglobal8_template.xcu | 19 +++++++++ + filter/source/storagefilterdetect/filterdetect.cxx | 1 + + include/comphelper/documentconstants.hxx | 2 + + include/sot/formats.hxx | 3 +- + officecfg/registry/data/org/openoffice/Setup.xcu | 4 +- + package/source/manifest/ManifestExport.cxx | 1 + + scp2/source/writer/registryitem_writer.scp | 8 ++++ + sfx2/source/control/recentdocsview.cxx | 2 +- + sfx2/source/control/templateabstractview.cxx | 2 +- + solenv/inc/mime.types | 1 + + sot/source/base/exchange.cxx | 5 +-- + sot/source/sdstor/storage.cxx | 1 + + sot/source/sdstor/ucbstorage.cxx | 1 + + sw/source/uibase/app/docsh.cxx | 1 + + sw/source/uibase/globdoc/globdoc.cxx | 5 +-- + sysui/CustomTarget_share.mk | 2 + + sysui/Package_osxicons.mk | 1 + + sysui/desktop/debian/postinst | 2 + + sysui/desktop/freedesktop/freedesktop-menus.spec | 1 + + .../icons/oasis-master-document-template.icns | Bin 0 -> 118979 bytes + sysui/desktop/macosx/Info.plist.in | 43 +++++++++++++++++++++ + sysui/desktop/menus/writer.desktop | 2 +- + .../oasis-master-document-template.desktop | 26 +++++++++++++ + .../mimetypes/oasis-master-document-template.keys | 9 +++++ + sysui/desktop/mimetypes/openoffice.applications | 2 +- + sysui/desktop/share/documents.ulf | 3 ++ + sysui/desktop/solaris/mailcap | 1 + + sysui/desktop/solaris/mime.types | 1 + + 36 files changed, 173 insertions(+), 13 deletions(-) + create mode 100644 filter/source/config/fragments/filters/writerglobal8_template.xcu + create mode 100644 filter/source/config/fragments/filters/writerglobal8_template_ui.xcu + create mode 100644 filter/source/config/fragments/types/writerglobal8_template.xcu + create mode 100644 sysui/desktop/icons/oasis-master-document-template.icns + create mode 100644 sysui/desktop/mimetypes/oasis-master-document-template.desktop + create mode 100644 sysui/desktop/mimetypes/oasis-master-document-template.keys + +diff --git a/bin/get-bugzilla-attachments-by-mimetype b/bin/get-bugzilla-attachments-by-mimetype +index 6f72dc7..5ac0a26 100755 +--- a/bin/get-bugzilla-attachments-by-mimetype ++++ b/bin/get-bugzilla-attachments-by-mimetype +@@ -357,6 +357,7 @@ mimetypes = { + 'application/vnd.oasis.opendocument.text-flat-xml': 'fodt', + 'application/vnd.oasis.opendocument.text-master': 'odm', + 'application/vnd.oasis.opendocument.text-template': 'ott', ++ 'application/vnd.oasis.opendocument.text-master-template': 'otm', + 'application/vnd.oasis.opendocument.text-web': 'oth', + # OOo XML + 'application/vnd.sun.xml.base': 'odb', +diff --git a/comphelper/source/misc/storagehelper.cxx b/comphelper/source/misc/storagehelper.cxx +index 51ee8c5..67d14c1 100644 +--- a/comphelper/source/misc/storagehelper.cxx ++++ b/comphelper/source/misc/storagehelper.cxx +@@ -263,6 +263,7 @@ sal_Int32 OStorageHelper::GetXStorageFormat( + aMediaType.equalsIgnoreAsciiCase(MIMETYPE_OASIS_OPENDOCUMENT_REPORT_ASCII ) || + aMediaType.equalsIgnoreAsciiCase(MIMETYPE_OASIS_OPENDOCUMENT_REPORT_CHART_ASCII ) || + aMediaType.equalsIgnoreAsciiCase(MIMETYPE_OASIS_OPENDOCUMENT_TEXT_TEMPLATE_ASCII ) || ++ aMediaType.equalsIgnoreAsciiCase(MIMETYPE_OASIS_OPENDOCUMENT_TEXT_GLOBAL_TEMPLATE_ASCII ) || + aMediaType.equalsIgnoreAsciiCase(MIMETYPE_OASIS_OPENDOCUMENT_DRAWING_TEMPLATE_ASCII ) || + aMediaType.equalsIgnoreAsciiCase(MIMETYPE_OASIS_OPENDOCUMENT_PRESENTATION_TEMPLATE_ASCII) || + aMediaType.equalsIgnoreAsciiCase(MIMETYPE_OASIS_OPENDOCUMENT_SPREADSHEET_TEMPLATE_ASCII ) || +diff --git a/extensions/source/activex/so_activex.cxx b/extensions/source/activex/so_activex.cxx +index 850ebab..d460bc6 100644 +--- a/extensions/source/activex/so_activex.cxx ++++ b/extensions/source/activex/so_activex.cxx +@@ -138,6 +138,7 @@ const char* aMimeType[] = { + MIMETYPE_VND_SUN_XML_MATH_ASCII, + + MIMETYPE_OASIS_OPENDOCUMENT_TEXT_TEMPLATE_ASCII, ++ MIMETYPE_OASIS_OPENDOCUMENT_TEXT_GLOBAL_TEMPLATE_ASCII, + MIMETYPE_OASIS_OPENDOCUMENT_DRAWING_TEMPLATE_ASCII, + MIMETYPE_OASIS_OPENDOCUMENT_PRESENTATION_TEMPLATE_ASCII, + MIMETYPE_OASIS_OPENDOCUMENT_SPREADSHEET_TEMPLATE_ASCII, +diff --git a/extensions/source/nsplugin/source/npshell.cxx b/extensions/source/nsplugin/source/npshell.cxx +index 84aff99..82881fa 100644 +--- a/extensions/source/nsplugin/source/npshell.cxx ++++ b/extensions/source/nsplugin/source/npshell.cxx +@@ -377,6 +377,7 @@ MIMETYPE_OASIS_OPENDOCUMENT_TEXT_ASCII ":odt:OpenDocument Text;" + MIMETYPE_OASIS_OPENDOCUMENT_TEXT_ASCII "-flat-xml:fodt:OpenDocument Text Flat XML;" + MIMETYPE_OASIS_OPENDOCUMENT_TEXT_TEMPLATE_ASCII ":ott:OpenDocument Text Template;" + MIMETYPE_OASIS_OPENDOCUMENT_TEXT_GLOBAL_ASCII ":odm:OpenDocument Master Document;" ++MIMETYPE_OASIS_OPENDOCUMENT_TEXT_GLOBAL_TEMPLATE_ASCII ":otm:OpenDocument Master Document Template;" + MIMETYPE_OASIS_OPENDOCUMENT_TEXT_WEB_ASCII ":oth:HTML Document Template;" + MIMETYPE_OASIS_OPENDOCUMENT_SPREADSHEET_ASCII ":ods:OpenDocument Spreadsheet;" + MIMETYPE_OASIS_OPENDOCUMENT_SPREADSHEET_ASCII "-flat-xml:fods:OpenDocument Spreadsheet Flat XML;" +diff --git a/extensions/source/nsplugin/source/nsplugin_oo.rc b/extensions/source/nsplugin/source/nsplugin_oo.rc +index 6e14c09..ce57c04 100644 +--- a/extensions/source/nsplugin/source/nsplugin_oo.rc ++++ b/extensions/source/nsplugin/source/nsplugin_oo.rc +@@ -117,6 +117,7 @@ VS_VERSION_INFO VERSIONINFO + "application/vnd.oasis.opendocument.text|" + "application/vnd.oasis.opendocument.text-template|" + "application/vnd.oasis.opendocument.text-master|" ++ "application/vnd.oasis.opendocument.text-master-template|" + "application/vnd.oasis.opendocument.text-web|" + "application/vnd.oasis.opendocument.spreadsheet|" + "application/vnd.oasis.opendocument.spreadsheet-template|" +diff --git a/filter/Configuration_filter.mk b/filter/Configuration_filter.mk +index 0465f17..36d7584 100644 +--- a/filter/Configuration_filter.mk ++++ b/filter/Configuration_filter.mk +@@ -488,6 +488,7 @@ $(call filter_Configuration_add_types,fcfg_langpack,fcfg_global_types.xcu,filter + writer_globaldocument_StarOffice_XML_Writer_GlobalDocument \ + pdf_Portable_Document_Format \ + writerglobal8 \ ++ writerglobal8_template \ + )) + + $(eval $(call filter_Configuration_add_filters,fcfg_langpack,fcfg_global_filters.xcu,filter/source/config/fragments/filters,\ +@@ -496,6 +497,7 @@ $(call filter_Configuration_add_filters,fcfg_langpack,fcfg_global_filters.xcu,fi + writer_globaldocument_StarOffice_XML_Writer_GlobalDocument \ + writer_globaldocument_pdf_Export \ + writerglobal8 \ ++ writerglobal8_template \ + writerglobal8_writer \ + writerglobal8_HTML \ + )) +@@ -505,6 +507,7 @@ $(call filter_Configuration_add_ui_filters,fcfg_langpack,filter/source/config/fr + writer_globaldocument_StarOffice_XML_Writer_ui \ + writer_globaldocument_StarOffice_XML_Writer_GlobalDocument_ui \ + writerglobal8_ui \ ++ writerglobal8_template_ui \ + writerglobal8_writer_ui \ + )) + +diff --git a/filter/source/config/fragments/filters/writerglobal8_template.xcu b/filter/source/config/fragments/filters/writerglobal8_template.xcu +new file mode 100644 +index 0000000..9cb8a8d +--- /dev/null ++++ b/filter/source/config/fragments/filters/writerglobal8_template.xcu +@@ -0,0 +1,17 @@ ++ ++ ++ IMPORT EXPORT TEMPLATE TEMPLATEPATH OWN ENCRYPTION PASSWORDTOMODIFY ++ ++ ++ CXMLV ++ 6800 ++ writerglobal8_template ++ ++ com.sun.star.text.GlobalDocument ++ +diff --git a/filter/source/config/fragments/filters/writerglobal8_template_ui.xcu b/filter/source/config/fragments/filters/writerglobal8_template_ui.xcu +new file mode 100644 +index 0000000..305ae8d +--- /dev/null ++++ b/filter/source/config/fragments/filters/writerglobal8_template_ui.xcu +@@ -0,0 +1,12 @@ ++ ++ ++ ++ ODF Master Document Template ++ ++ +diff --git a/filter/source/config/fragments/types/writerglobal8_template.xcu b/filter/source/config/fragments/types/writerglobal8_template.xcu +new file mode 100644 +index 0000000..10c866b +--- /dev/null ++++ b/filter/source/config/fragments/types/writerglobal8_template.xcu +@@ -0,0 +1,19 @@ ++ ++ ++ com.sun.star.comp.filters.StorageFilterDetect ++ private:factory/swriter/GlobalDocument* ++ otm ++ application/vnd.oasis.opendocument.text-master-template ++ true ++ writerglobal8_template ++ ++ Writer 8 Master Document Template ++ ++ Writer/Global 8 Template ++ +diff --git a/filter/source/storagefilterdetect/filterdetect.cxx b/filter/source/storagefilterdetect/filterdetect.cxx +index 5917261..fa10c3c 100644 +--- a/filter/source/storagefilterdetect/filterdetect.cxx ++++ b/filter/source/storagefilterdetect/filterdetect.cxx +@@ -45,6 +45,7 @@ OUString getInternalFromMediaType(const OUString& aMediaType) + else if ( aMediaType == MIMETYPE_OASIS_OPENDOCUMENT_TEXT_TEMPLATE_ASCII ) return OUString("writer8_template"); + else if ( aMediaType == MIMETYPE_OASIS_OPENDOCUMENT_TEXT_WEB_ASCII ) return OUString("writerweb8_writer_template"); + else if ( aMediaType == MIMETYPE_OASIS_OPENDOCUMENT_TEXT_GLOBAL_ASCII ) return OUString("writerglobal8"); ++ else if ( aMediaType == MIMETYPE_OASIS_OPENDOCUMENT_TEXT_GLOBAL_TEMPLATE_ASCII ) return OUString("writerglobal8_template"); + else if ( aMediaType == MIMETYPE_OASIS_OPENDOCUMENT_DRAWING_ASCII ) return OUString("draw8"); + else if ( aMediaType == MIMETYPE_OASIS_OPENDOCUMENT_DRAWING_TEMPLATE_ASCII ) return OUString("draw8_template"); + else if ( aMediaType == MIMETYPE_OASIS_OPENDOCUMENT_PRESENTATION_ASCII ) return OUString("impress8"); +diff --git a/include/comphelper/documentconstants.hxx b/include/comphelper/documentconstants.hxx +index 47d31a5..940740f 100644 +--- a/include/comphelper/documentconstants.hxx ++++ b/include/comphelper/documentconstants.hxx +@@ -75,6 +75,7 @@ + + // template formats of SO8 + #define MIMETYPE_OASIS_OPENDOCUMENT_TEXT_TEMPLATE_ASCII "application/vnd.oasis.opendocument.text-template" ++#define MIMETYPE_OASIS_OPENDOCUMENT_TEXT_GLOBAL_TEMPLATE_ASCII "application/vnd.oasis.opendocument.text-master-template" + #define MIMETYPE_OASIS_OPENDOCUMENT_DRAWING_TEMPLATE_ASCII "application/vnd.oasis.opendocument.graphics-template" + #define MIMETYPE_OASIS_OPENDOCUMENT_PRESENTATION_TEMPLATE_ASCII "application/vnd.oasis.opendocument.presentation-template" + #define MIMETYPE_OASIS_OPENDOCUMENT_SPREADSHEET_TEMPLATE_ASCII "application/vnd.oasis.opendocument.spreadsheet-template" +@@ -82,6 +83,7 @@ + #define MIMETYPE_OASIS_OPENDOCUMENT_FORMULA_TEMPLATE_ASCII "application/vnd.oasis.opendocument.formula-template" + + #define MIMETYPE_OASIS_OPENDOCUMENT_TEXT_TEMPLATE OUString( MIMETYPE_OASIS_OPENDOCUMENT_TEXT_TEMPLATE_ASCII ) ++#define MIMETYPE_OASIS_OPENDOCUMENT_TEXT_GLOBAL_TEMPLATE OUString( MIMETYPE_OASIS_OPENDOCUMENT_TEXT_GLOBAL_TEMPLATE_ASCII ) + #define MIMETYPE_OASIS_OPENDOCUMENT_DRAWING_TEMPLATE OUString( MIMETYPE_OASIS_OPENDOCUMENT_DRAWING_TEMPLATE_ASCII ) + #define MIMETYPE_OASIS_OPENDOCUMENT_PRESENTATION_TEMPLATE OUString( MIMETYPE_OASIS_OPENDOCUMENT_PRESENTATION_TEMPLATE_ASCII ) + #define MIMETYPE_OASIS_OPENDOCUMENT_SPREADSHEET_TEMPLATE OUString( MIMETYPE_OASIS_OPENDOCUMENT_SPREADSHEET_TEMPLATE_ASCII ) +diff --git a/include/sot/formats.hxx b/include/sot/formats.hxx +index dc4feaa..4cfb94b 100644 +--- a/include/sot/formats.hxx ++++ b/include/sot/formats.hxx +@@ -176,7 +176,8 @@ + #define SOT_FORMATSTR_ID_STARBASE_8 ((sal_uLong)139) + #define SOT_FORMATSTR_ID_HC_GDIMETAFILE ((sal_uLong)140) + #define SOT_FORMATSTR_ID_PNG ((sal_uLong)141) +-#define SOT_FORMATSTR_ID_USER_END SOT_FORMATSTR_ID_PNG ++#define SOT_FORMATSTR_ID_STARWRITERGLOB_8_TEMPLATE ((sal_uLong)142) ++#define SOT_FORMATSTR_ID_USER_END SOT_FORMATSTR_ID_STARWRITERGLOB_8_TEMPLATE + + #endif // INCLUDED_SOT_FORMATS_HXX + +diff --git a/officecfg/registry/data/org/openoffice/Setup.xcu b/officecfg/registry/data/org/openoffice/Setup.xcu +index ca65cc7..51ff7c0 100644 +--- a/officecfg/registry/data/org/openoffice/Setup.xcu ++++ b/officecfg/registry/data/org/openoffice/Setup.xcu +@@ -233,7 +233,9 @@ + + writerglobal8 + +- ++ ++ writerglobal8_template ++ + + writerglobal8 + +diff --git a/package/source/manifest/ManifestExport.cxx b/package/source/manifest/ManifestExport.cxx +index 82ce37f..1ced0a6 100644 +--- a/package/source/manifest/ManifestExport.cxx ++++ b/package/source/manifest/ManifestExport.cxx +@@ -147,6 +147,7 @@ ManifestExport::ManifestExport( uno::Reference< xml::sax::XDocumentHandler > xHa + || aDocMediaType == MIMETYPE_OASIS_OPENDOCUMENT_DATABASE_ASCII + || aDocMediaType == MIMETYPE_OASIS_OPENDOCUMENT_FORMULA_ASCII + || aDocMediaType == MIMETYPE_OASIS_OPENDOCUMENT_TEXT_TEMPLATE_ASCII ++ || aDocMediaType == MIMETYPE_OASIS_OPENDOCUMENT_TEXT_GLOBAL_TEMPLATE_ASCII + || aDocMediaType == MIMETYPE_OASIS_OPENDOCUMENT_DRAWING_TEMPLATE_ASCII + || aDocMediaType == MIMETYPE_OASIS_OPENDOCUMENT_PRESENTATION_TEMPLATE_ASCII + || aDocMediaType == MIMETYPE_OASIS_OPENDOCUMENT_SPREADSHEET_TEMPLATE_ASCII +diff --git a/scp2/source/writer/registryitem_writer.scp b/scp2/source/writer/registryitem_writer.scp +index ea38cfa..80cbbdd 100644 +--- a/scp2/source/writer/registryitem_writer.scp ++++ b/scp2/source/writer/registryitem_writer.scp +@@ -1063,6 +1063,14 @@ RegistryItem gid_Regitem_Ott_Contenttype + Value = "application/vnd.oasis.opendocument.text-template"; + End + ++RegistryItem gid_Regitem_Otm_Contenttype ++ ParentID = PREDEFINED_HKEY_CLASSES_ROOT; ++ ModuleID = gid_Module_Prg_Wrt_Bin; ++ Subkey = ".otm"; ++ Name = "Content Type"; ++ Value = "application/vnd.oasis.opendocument.text-master-template"; ++End ++ + RegistryItem gid_Regitem_Soffice_Starwritertemplate_1 + ParentID = PREDEFINED_HKEY_CLASSES_ROOT; + Subkey = "LibreOffice.WriterTemplate.1"; +diff --git a/sfx2/source/control/recentdocsview.cxx b/sfx2/source/control/recentdocsview.cxx +index af1469c..f88cfbb 100644 +--- a/sfx2/source/control/recentdocsview.cxx ++++ b/sfx2/source/control/recentdocsview.cxx +@@ -71,7 +71,7 @@ bool RecentDocsView::typeMatchesExtension(ApplicationType type, const OUString & + bool bRet = false; + + if (rExt == "odt" || rExt == "doc" || rExt == "docx" || +- rExt == "rtf" || rExt == "txt") ++ rExt == "rtf" || rExt == "txt" || rExt == "odm" || rExt == "otm") + { + bRet = type & TYPE_WRITER; + } +diff --git a/sfx2/source/control/templateabstractview.cxx b/sfx2/source/control/templateabstractview.cxx +index cbda6e6..87be587 100644 +--- a/sfx2/source/control/templateabstractview.cxx ++++ b/sfx2/source/control/templateabstractview.cxx +@@ -40,7 +40,7 @@ bool ViewFilter_Application::isFilteredExtension(FILTER_APPLICATION filter, cons + + if (filter == FILTER_APP_WRITER) + { +- bRet = rExt == "ott" || rExt == "stw" || rExt == "oth" || rExt == "dot" || rExt == "dotx"; ++ bRet = rExt == "ott" || rExt == "stw" || rExt == "oth" || rExt == "dot" || rExt == "dotx" || rExt == "otm"; + } + else if (filter == FILTER_APP_CALC) + { +diff --git a/solenv/inc/mime.types b/solenv/inc/mime.types +index 7d39a4c..e5afd93 100644 +--- a/solenv/inc/mime.types ++++ b/solenv/inc/mime.types +@@ -189,6 +189,7 @@ application/vnd.oasis.opendocument.text odt + application/vnd.oasis.opendocument.text-template ott + application/vnd.oasis.opendocument.text-web oth + application/vnd.oasis.opendocument.text-master odm ++application/vnd.oasis.opendocument.text-master-template otm + application/vnd.oasis.opendocument.graphics odg + application/vnd.oasis.opendocument.graphics-template otg + application/vnd.oasis.opendocument.presentation odp +diff --git a/sot/source/base/exchange.cxx b/sot/source/base/exchange.cxx +index 084b1b5..ff79cb6 100644 +--- a/sot/source/base/exchange.cxx ++++ b/sot/source/base/exchange.cxx +@@ -50,8 +50,6 @@ struct DataFlavorRepresentation + const ::com::sun::star::uno::Type* pType; + }; + +- +- + namespace + { + struct ImplFormatArray_Impl +@@ -202,6 +200,7 @@ namespace + /*139 SOT_FORMATSTR_ID_STARBASE_8*/ { MIMETYPE_OASIS_OPENDOCUMENT_DATABASE_ASCII, "StarBase 8", &::getCppuType( (const Sequence< sal_Int8 >*) 0 ) }, + /*140 SOT_FORMAT_GDIMETAFILE*/ { "application/x-openoffice-highcontrast-gdimetafile;windows_formatname=\"GDIMetaFile\"", "High Contrast GDIMetaFile", &::getCppuType( (const Sequence< sal_Int8 >*) 0 ) }, + /*141 SOT_FORMATSTR_ID_PNG*/ { "image/png", "PNG Bitmap", &::getCppuType( (const Sequence< sal_Int8 >*) 0 ) }, ++ /*142 SOT_FORMATSTR_ID_STARWRITERGLOB_8_TEMPLATE*/ { MIMETYPE_OASIS_OPENDOCUMENT_TEXT_GLOBAL_TEMPLATE_ASCII, "Writer/Global 8 Template", &::getCppuType( (const Sequence< sal_Int8 >*) 0 ) }, + }; + return &aInstance[0]; + } +@@ -212,8 +211,6 @@ namespace + const DataFlavorRepresentation, ImplFormatArray_Impl > {}; + } + +- +- + static tDataFlavorList& InitFormats_Impl() + { + SotData_Impl * pSotData = SOTDATA(); +diff --git a/sot/source/sdstor/storage.cxx b/sot/source/sdstor/storage.cxx +index 87fe013..9cc4204 100644 +--- a/sot/source/sdstor/storage.cxx ++++ b/sot/source/sdstor/storage.cxx +@@ -975,6 +975,7 @@ sal_Int32 SotStorage::GetVersion( const com::sun::star::uno::Reference < com::su + case SOT_FORMATSTR_ID_STARWRITER_8_TEMPLATE: + case SOT_FORMATSTR_ID_STARWRITERWEB_8: + case SOT_FORMATSTR_ID_STARWRITERGLOB_8: ++ case SOT_FORMATSTR_ID_STARWRITERGLOB_8_TEMPLATE: + case SOT_FORMATSTR_ID_STARDRAW_8: + case SOT_FORMATSTR_ID_STARDRAW_8_TEMPLATE: + case SOT_FORMATSTR_ID_STARIMPRESS_8: +diff --git a/sot/source/sdstor/ucbstorage.cxx b/sot/source/sdstor/ucbstorage.cxx +index 879d372..e95a9b4 100644 +--- a/sot/source/sdstor/ucbstorage.cxx ++++ b/sot/source/sdstor/ucbstorage.cxx +@@ -355,6 +355,7 @@ SvGlobalName GetClassId_Impl( sal_Int32 nFormat ) + case SOT_FORMATSTR_ID_STARWRITERWEB_8 : + return SvGlobalName( SO3_SWWEB_CLASSID_60 ); + case SOT_FORMATSTR_ID_STARWRITERGLOB_8 : ++ case SOT_FORMATSTR_ID_STARWRITERGLOB_8_TEMPLATE : + return SvGlobalName( SO3_SWGLOB_CLASSID_60 ); + case SOT_FORMATSTR_ID_STARDRAW_8 : + case SOT_FORMATSTR_ID_STARDRAW_8_TEMPLATE : +diff --git a/sw/source/uibase/app/docsh.cxx b/sw/source/uibase/app/docsh.cxx +index 3da9550..9cecce9 100644 +--- a/sw/source/core/uibase/app/docsh.cxx ++++ b/sw/source/core/uibase/app/docsh.cxx +@@ -642,6 +642,7 @@ bool SwDocShell::ConvertTo( SfxMedium& rMedium ) + SOT_FORMATSTR_ID_STARWRITERWEB_40 == nSaveClipId ) + nSaveType = 1; + else if( SOT_FORMATSTR_ID_STARWRITERGLOB_8 == nSaveClipId || ++ SOT_FORMATSTR_ID_STARWRITERGLOB_8_TEMPLATE == nSaveClipId || + SOT_FORMATSTR_ID_STARWRITERGLOB_60 == nSaveClipId || + SOT_FORMATSTR_ID_STARWRITERGLOB_50 == nSaveClipId || + SOT_FORMATSTR_ID_STARWRITERGLOB_40 == nSaveClipId ) +diff --git a/sw/source/uibase/globdoc/globdoc.cxx b/sw/source/uibase/globdoc/globdoc.cxx +index 3a6df50..2e1ae47 100644 +--- a/sw/source/core/uibase/globdoc/globdoc.cxx ++++ b/sw/source/core/uibase/globdoc/globdoc.cxx +@@ -51,19 +51,18 @@ void SwGlobalDocShell::FillClass( SvGlobalName * pClassName, + sal_Int32 nVersion, + bool bTemplate /* = false */) const + { +- (void)bTemplate; +- OSL_ENSURE( !bTemplate, "No template for Writer Global" ); +- + if (nVersion == SOFFICE_FILEFORMAT_60) + { + *pClassName = SvGlobalName( SO3_SWGLOB_CLASSID_60 ); + *pClipFormat = SOT_FORMATSTR_ID_STARWRITERGLOB_60; + *pLongUserName = SW_RESSTR(STR_WRITER_GLOBALDOC_FULLTYPE); ++ OSL_ENSURE( !bTemplate, "No template for Writer Global" ); + } + else if (nVersion == SOFFICE_FILEFORMAT_8) + { + *pClassName = SvGlobalName( SO3_SWGLOB_CLASSID_60 ); + *pClipFormat = SOT_FORMATSTR_ID_STARWRITERGLOB_8; ++ *pClipFormat = bTemplate ? SOT_FORMATSTR_ID_STARWRITERGLOB_8_TEMPLATE : SOT_FORMATSTR_ID_STARWRITERGLOB_8; + *pLongUserName = SW_RESSTR(STR_WRITER_GLOBALDOC_FULLTYPE); + } + +diff --git a/sysui/CustomTarget_share.mk b/sysui/CustomTarget_share.mk +index 862e57f..e4dde6f 100644 +--- a/sysui/CustomTarget_share.mk ++++ b/sysui/CustomTarget_share.mk +@@ -58,6 +58,7 @@ MIMELIST := \ + oasis-presentation-flat-xml \ + oasis-formula \ + oasis-master-document \ ++ oasis-master-document-template \ + oasis-database \ + oasis-web-template \ + ms-excel-sheet-12 \ +@@ -90,6 +91,7 @@ MIMEICONLIST := \ + oasis-presentation-template \ + oasis-formula \ + oasis-master-document \ ++ oasis-master-document-template \ + oasis-database \ + oasis-web-template \ + text \ +diff --git a/sysui/Package_osxicons.mk b/sysui/Package_osxicons.mk +index cd8343a..24a6998 100644 +--- a/sysui/Package_osxicons.mk ++++ b/sysui/Package_osxicons.mk +@@ -20,6 +20,7 @@ $(eval $(call gb_Package_add_files_with_dir,sysui_osxicons,Resources,\ + oasis-drawing.icns \ + master-document.icns \ + oasis-master-document.icns \ ++ oasis-master-document-template.icns \ + formula.icns \ + oasis-formula.icns \ + text-template.icns \ +diff --git a/sysui/desktop/debian/postinst b/sysui/desktop/debian/postinst +index 67072de..b9b6f24 100755 +--- a/sysui/desktop/debian/postinst ++++ b/sysui/desktop/debian/postinst +@@ -60,6 +60,7 @@ application/vnd.oasis.opendocument.text-flat-xml fodt + application/vnd.oasis.opendocument.text-template ott + application/vnd.oasis.opendocument.text-web oth + application/vnd.oasis.opendocument.text-master odm ++application/vnd.oasis.opendocument.text-master-template otm + application/vnd.oasis.opendocument.graphics odg + application/vnd.oasis.opendocument.graphics-flat-xml fodg + application/vnd.oasis.opendocument.graphics-template otg +@@ -123,6 +124,7 @@ application/vnd.oasis.opendocument.text-flat-xml; %PREFIX -view %s + application/vnd.oasis.opendocument.text-template; %PREFIX -view %s + application/vnd.oasis.opendocument.text-web; %PREFIX -view %s + application/vnd.oasis.opendocument.text-master; %PREFIX -view %s ++application/vnd.oasis.opendocument.text-master-template; %PREFIX -view %s + application/vnd.sun.xml.writer; %PREFIX -view %s + application/vnd.sun.xml.writer.template; %PREFIX -view %s + application/vnd.sun.xml.writer.global; %PREFIX -view %s +diff --git a/sysui/desktop/freedesktop/freedesktop-menus.spec b/sysui/desktop/freedesktop/freedesktop-menus.spec +index 09aeaf5..9c952a5 100755 +--- a/sysui/desktop/freedesktop/freedesktop-menus.spec ++++ b/sysui/desktop/freedesktop/freedesktop-menus.spec +@@ -150,6 +150,7 @@ do + icon=${link_target_dir}%iconprefix-oasis-drawing-template.png; test -f ${link_dir}/$icon && ln -sf ${icon} ${link_dir}/gnome-mime-application-vnd.oasis.opendocument.graphics-template.png + icon=${link_target_dir}%iconprefix-oasis-formula.png; test -f ${link_dir}/$icon && ln -sf ${icon} ${link_dir}/gnome-mime-application-vnd.oasis.opendocument.formula.png + icon=${link_target_dir}%iconprefix-oasis-master-document.png; test -f ${link_dir}/$icon && ln -sf ${icon} ${link_dir}/gnome-mime-application-vnd.oasis.opendocument.text-master.png ++ icon=${link_target_dir}%iconprefix-oasis-master-document-template.png; test -f ${link_dir}/$icon && ln -sf ${icon} ${link_dir}/gnome-mime-application-vnd.oasis.opendocument.text-master-template.png + icon=${link_target_dir}%iconprefix-oasis-presentation.png; test -f ${link_dir}/$icon && ln -sf ${icon} ${link_dir}/gnome-mime-application-vnd.oasis.opendocument.presentation.png + icon=${link_target_dir}%iconprefix-oasis-presentation-template.png; test -f ${link_dir}/$icon && ln -sf ${icon} ${link_dir}/gnome-mime-application-vnd.oasis.opendocument.presentation-template.png + icon=${link_target_dir}%iconprefix-oasis-spreadsheet.png; test -f ${link_dir}/$icon && ln -sf ${icon} ${link_dir}/gnome-mime-application-vnd.oasis.opendocument.spreadsheet.png +diff --git a/sysui/desktop/icons/oasis-master-document-template.icns b/sysui/desktop/icons/oasis-master-document-template.icns +new file mode 100644 +index 0000000000000000000000000000000000000000..9115dfc4b443fda6eea466552158df12de698a3c +GIT binary patch +literal 118979 +zcmeFa2UHW?w>~@xp(#>C6f8&+5b3BCLAro+6?-p;V!?(8Dg%Vx6%gsDG?k(#AVnfo +zIw*+rCPj*X^qTKX&=_L$eeeCrz3cm5Sqo;LXP0N6IWv1sHiMoyap4MtD$m}fugV2M +zkinTNQj!pa-g8CfyeR~s=+2x&#?*c12xAQ0nXAZHj`k{HtVDO_gt!a@2`7W2ECd}k +zK664s9D*{MzQ=*^4u%lk#t@Ci>)ACxzIJ+4c)WJ4?Ih~c9b0W6YgO4zpjzB)w1BK$ +zZa0A$Yj9Lohw&(t68kZ_I;@Hc96gjfaO5CGmK%xNl?H;o&$jJYFQm@hc`q +z1dkVTjzA0H@vedp{*O)K2_yzTA(_OtF>w;#$KNL*Mly*x-H%DkjeksnF#eyIL@#6j +z_mWKF+n6|s@8j>2Fd&)4obJaY=EgrJK^XsL65lUN$RAJm%4dggcziPi%?sLKndv>0N}#^?vET1fOL${CmWN-Cm1fgK7ll$1nB#13FF;&pzwJ69d>vR +z0|;+#V24NP>pL}}>dc+=?eJ(_-FnAKbZ^a7M_n+|)~9($f0iGKTJ~I1g*tYzJcvjY`*1bVu1)SOeAs<89k2+=kJgO3uLB?D1$dwKDgw +z=$1lbSPhFutE!fG45FL!Pr|CeQdzmsa{$wjdt6!B4v$e%dfVTRg;2;3On+ULk`e$F +z6?1!gu_>tDUO2_(6{fE*Ur`aj3JTdhJ-`Y`uRyL!(9eWRj{J^xgXUNKejHIR0yg#ASq@{tu=FKTB +zEr0|0foW+;*}NHm8#g93H)EfpkRO=l=A?}q0VpN)qNxd3B0n%qO)sRR04OQ>9E=|! +z;3EJgN=gDyTs*#^0b~;xh#Y8;LxQ+CP>6}e*4JZwP{MFj=#J_0}N@b?73H$RO3|Ie}; +zAj@t*w(NDtve((vlP&ueWZAcnE&DrU+24^Zy98BfDOh$18stE_?1jj(7yf414UlCw +zAY1k-WZA38mVFDd!du9ey#xVE$d+A#s<03&y95n#AYJx6WZConFD|K$hKuY}r2}%l?^c +z*-elYHX&Q~E(Gi%TXrL=jt;QwMl{HQblKaHWpDp;%l>`u1s+pM%_Pr(L4PI)dOlA0 +zdJ2@_tAa!g#J7x4<~L+cKVOZ<=QFZ@oWm&VfdR*y!7udqJVuThB*L%s_`D@6Yk#N5 +z=Pp@Q_ZxpaVvrU7%lII6&XPGT`C}N#i}01h@Xg>mKz_{rWfP%UC$^XKjKpyD7fA&I5UGXn>y5R$N-ovNtaK;Dk +z@WrR@a3UPjb~xgL4Sn(Hh7N>dhM_&-XlD@DjEXR{H^Ab94Sex-2Jy|Phx*76WuPBG +zKoY(qXdN9re|=!24>v&#;Z4rX=rCP9tUlQ3X>04<0~%X>NDt9PO+jDnn$W@8b6QO; +zT|Y#t2kF2KP+jyaK^wGP7pn(+)wk*R>JhZsKwBF#i~3q`+kg(x)FG%<)pUHmtLvef +z$Fu0c+IpJ?^gWF^y|Rk-U0vX=3u(diQ1z2(^guP(MWB7vwXwP&yppo^ojJWG(0_P3 +zjqWGt@2Jh`w<>CTBYGW31FnNAW2e!5Rkb#CXm1s5tPb#(SJ>{QL(p#n`uB0u=-x_1 +z@2Nbem)oM{Ij2{LYoYS^X>?CTwM{MBO?f-PUshJj1JP?ksz6_s0QBXE-bGOhs}17I +z$ZEQ46Z9%@4OH@M8r@y`!KMc7v~^Ao;=9f1m4UwK`82w#1kpPxXcGM8wrIM}>6PGW +zs4#H~-C0;^Q;oKlpVP}LXuAB+7rX%a0z{9M(;)b7Rn&4u^xL7W@CPXW~@f!qLQZ5c7k33=yQ{RJ{Qr$-}Fk#nvRHG3)%u#LD|Vu^q;aTs;WMGxFxNQ +z)dB&Ol{Fo-2nKS%AS-1G-I`TlQ-!|yO|PP=Y5!ec3B7ssU2i2b=dY@+iAD69kSq-J +zsgvlI%yOGbv?b7Mg6mXm8&;E`mVw_xuhW3~HKMkXol|equtU@ukTg(dq)(!o(#ve# +zqi@KnVKuOLI}JZXw+XI*(lX}h9(>1BUn6*_O$GXfoH|w`9B;b~k^=TAnE=l~a0@v# +z?6$Buyc|l#O`;nzN^Hu}7Fz%winmpVB;j%>>CFVX={161-=d0D4?%DVxD0xcHGyt; +zU1U>+HkSu@FoKH%JTaSyD*!wQZ>t6x1*OpQ90V`4DMeocxLP2Bivm0$7vOIQ_*Q@i +z%;6Z!g)+!Tj)B=#kH;JGJL1mf8Wb2L`#o0D4QJ +zf9Npk0KwGg(NSvH4dvlu<3^3^?&<5Nwi$K)2`z^lMp1RSHs1nZ`19Ys4WA1@2LjwX +zb;|3}S@;ySe`Ql^A0fg|a2e!?gn;KlC_#L1J{0OO;ylGNGD7{p+$r2W>bkkPeP&%_ +zFSQLNxD0X{p~}zA&$m+obN?2=XM~nI&h^Ey-S=Z)2TWr5hi+<5a;O+M+RS+=LOgIT +z6znj9OdTOkOTDV4rSmi{AUQWLw+12p8Ga4?p={u{)m9NO&&3Fui-7?#^8IY&>9!^3 +z#_R8SlSK$Yjz0b#L7o^P2MRzYk64z;*ox6=*hqn&=!LCR)`D8 +z0Y1YhYHMdclq0q0H_04w8irm2oviIvkSAi74c&7XM&^nh9;S9Z08!fvgT)21%K?-D +zVxA66=FAnKwLtcpGe->%yAy1IfLuYqG8Jg0Z52RZ#4-!=br^P@MC>L(%sByAB?HZ- +zZ&sW@_Nn*^C4u8c0wxcwf!{!P9KJe0cc^W?-a#UNghCpMm%TKJe`{2t@U0@jmD-@LOxU +z8DudRgqQ{vU1457%5Kt<5 +zAva=#jUWp`1m`ite}1Xx`3VH2q6cyT9xH7(0{)GF{{<)&J;YM+O#-E&2XZE{TLI_ +z-Cfvj=TXFR6j;s)4&CUkZdVXz^$$xbVA)mFP1V)a?Lng9ho57Dx;j9&qKj}NcOf@2 +zXd!fVc652b&xsL$9d&S5J212%F|_NV28Qijp1^VqflCtNhZAUmx;`PMa97}{4fwY0 +zqCw0)0lNfn@koN~33jx>U9AMe>@He@L2H*cuvkm5kN}b5>4Q6)TM(O$PC|N}NP2K5 +zT?dHP+S1(V4aWm>2@sHI{>}b}`C<@y&b+zv4vD=09ES?-gqtx0g1`}*&cG3xZ>DfF +z3fRVh`wfXL4pNCjhjcW+P1J<&?P(p@zpX`4)(Gr|KwBG|>ytbksIf55U*e9^# +zp63?-iKP{pO+!QdoKIENr+e@dP+Pxy#Vif|^q$-;_R~^wxA&g{=KHaRww6~^R?ZRD +z)z>3=wmfNNZ9(V&8#1pCRh5+$<*fm547BbW<9axHS!iq7&#p18%YJq(YYhax`~+VS +zaAu;}!dgoxI7hXzQE)D44T7VAw+J{xBG7s`YI#^oK@kP_h}Pwl+zaRV3&Bw3@fe=Rsj#w4ml#!X0lLKZ2 +zR;GL|A#f2Q2{i;Ztpb-G;iMoJ!~2Tz^0E?eT5@u-GBcV&;Rvu(AVymKuqo}=q3$=W +z{&lFdrZ5m|Jrc`K2!6EYVN>dFLfvax^P5nqAl4%gOK2_@=fj5N)YSCXb0-TdKDd66 +zlMZe)5l2gmhbBHxZ!L6m?1%ul^;9UmVr +zFU&*5&CSIHuSIimuCZB-TD1yZNyWjz&Tg{;T8?FdmfNhLVrS>zfL9`_)#x>AIBnLV +zxwyD(crd)YeCyW1{2&}w&==qS{ae5f-zMOXZ{c^v|7}D4ZA1NSL;Y<-{Xf@+!g`L{ +zVd-IuOJ`3WIk0!P(XaYZj603?9yoIH>?I2riya-sf=*X)nN1;eYe(N(;@p>MT>befY^xGYrnp +ziDLWfA3Xj*LyUyM73(HXp7-Vo~g%(Sdiw$m--}rfv6xZpsLi_?K)!@x2C@X5wQt3YVrOk$F#~-wEa;nIK?806^|zp{ +zHj>*Al(w#UW#k{4Z@+V0@OB*Qk9OR=;@mlJ2EXplA^wC0T1N-DKiiKz%>Poqjsax$ +zBP&o!JHD0Df7iNO+|)eJyZxK@-!2}~GyL1d1I@>>lD}QNpPPYyyLf-Qcz?TidXP4F +z8SL-NWPe{K`};E4|GAgR>OdE-j{ZYIMq2Htnzq7TL19V?mpNPqwEs7*ihh@q(Pc|r_Y5Q7xGBL7^Wm#Llsk8IW5Zu|sU(iU!z!# +zGEz4=c|}rEx^QB2@@voJ1d>1<=-kbRzkoOtJ9lKUCZ5>v(QRy;Dp%GSoFs$-t+zT- +zwEue~N}ap9o^`ftv~nJ++1T_6nINy9k%ELgD0S}YZaYILw>r?do0EKg(YYhdcX+tY +zRST*Eox3{FxvO*0LKz@#lsb3w-P{R2Nav39a{J?*yC0<9b)a)MkBj0%-S-04Lo8sFyLDvw5(*f|5_Idn6)?)(I#M^#t*Zmwx;ms=H}9HT +z*lyjA6hJxanpZmhsay9O*Z;|G-Mln9=gr_>b?eCe*?#O*{ujG-Ke7Vlv*TO&{MX&O +zdEV{cy#IFV{&wrWy(;*(TSw{Dy}#YMzumfj*RA{hPwyaq2KwU*b2h4B?oYx0_0O@o +zc-yr|~Mf9>(_HN*sTe_aGg +zIZ5Sz&+;2fVgmZVOn{V=RQ^rW|ALB`z>Z%fK*~uf{})JpXPW!{8rU^S*^HEvRHkhG +zUq^`v?4g_hDJQA?UuXJ-2Qh(t6cZrjB$a;=?Y{vN6F4|U!JCwmRHk71--UMO#-Bxr1F14_p>iCfn(%nfRvL|{yD~fgyem% +z1LR9U%1J8!M{E?Fi3yOM0a8v#F4EjX^q@1Mke?~^ho0!17B_QP_l_^E|4>4i_ +z$7X&+BIP8Ne^~rEDUb0R!_glJkaCjBe~y(T5;1|}-xKH}FMB@QXrE(Fvt` +zDcLRrMkFK?7J`dXOfp*Hkdo~}U_?SPVIjCE#U!I84k_6#1V$tz6BdGtQcN;h;*gT< +zLSRHfGGQUOD8(eBB@QXsE(As-Boh{bi&9K7TH=tB?LuHgLNZ|?xG2RWqa_Y0*)9Y| +zBqS3Sf{Rj2GFsx0lI=oZL_#uQA-E{TB%>t`DcLRrMkFK?7J`dXOfp*Hkdo~}U_?SP +zVIjCE#U!I84k_6#1V$tz6BdGtQcN;h;*gTt`DcLRrMkFK?7J`dXOfp*Hkdo~}U_?SPVIjCE#U!I84k_6#1V$tz6BdGtQcN;h +z;*gTt`DcLRrMkFK?7J`dXOfp*Hkdo~} +zU_?SPVIjCE#U!I84k_6#1V$tz6BdGtQcN;h;*gTt`DcLRrMkFK?7J`dXOfp*Hkdo~}U_?SPVIjCE#U!I84k_6#1V$tz6Z#i| +z?B|&MWVFO#>Cd(cfs_&n$%N>IVEZ{{G#M>%DDnL-1b+7UgUE~ok&s+~{|6G7fyr4( +z#!`>V7W5+QFO4Rf{h1TuG7u!3>};T?v1HN8MIf0aTAFG*AP5CS6hub@4hJts8$%G) +zz!_Cl11(imE`!S#jnAAr1wn$|?nVt4>vk8nGB%G! +z>u$tnm6fkbJ_S#|h&ekHSYoarmA95LS4 +z9pfDQ)@*|rc?Z|ITZk!ry&qupC~KlXdU?;zey&F6l(XaZF$S+qN__ZJ&R@P!y7jR` +zkZG#4i-O$>mZrz=RlGZSm3)n_JU!xM)#LuGJX8FOh)&1;+sk_%uKS{4*7QEF$jOS? +zx~sMuQ?_q!r19bQS^EthM;Na#e-KIB^=YfKT1Hr&(wFL}yc7}H<~Huj2P6+kc`Q?z +zy>o&l(dm`<&;`|4Y|yHJz@jUPpSHdf3NNdSd+c{AV~yHPc8_%%!;WS%e39FmfRc>% +za%6bD#>{Xh6_t*ULFEn~cIT*LjHmi;w8Pn#a{QM(t-il$+nKT!mM_@Vfmd1Wd-FTF +z*56S*>F);XH1b{a&gOG{$8y>1ebQ>zvf~Xk!$Vs)mTzcVV^{ntWZRKt{ZFmlmB(8T +zk1aQy@(wz)A=H8vm(BRXpK5S2UUVj5!`EjjqUlzNJ>5%nS9JJ7kzmW^U}$C +zQsJdTrjh1}3&vg*@>{ogIj$(;I-Gs#=FM_5Jkj&=DnQM*j8s9x`IIcH-c%0*8%N?_Q<60>^H+c`b1y{9oo*3%2 +zvpi5Gshf6qr+9?hivyNgh16Zc(^$O-aid(Y)+mCJHTbM@&I-_R7=YrH9) +zNjkx^{)nc)?U`=ohlu2MCdGKEdO)coLh +zy)`iubx}eV)`!RH?{^xdSys>98oP)ejW?Glm9^zr +z?pgvREXU7MoY#^r5E^?q(*GC1eNPW^8u6b?X+D@SPySmxTn +z=gddsVW5yKonVsb42v~M+FUwuS3yCc)3W~NYuk5Hw;_M3u<9O_>6Pf49Jqs_g*?*_ +zQ8-pkS6n-1$bqYV7Kh+YH2D7s-_tc8IDAhP<511RTrYoZKzKA2Qj~``LEX0m9qAaw +z)Rjh>gO0tq5?{lF^6yvWP#dt|K?hwif-N+T23A{$LP0|l%6oXuzdpYtXh`70(|v7` +zbm^U~ubfuDrQ)iOM8SbPX35%}++Uk-aN+_snF_O+<*&JJacw=8`mpuPwfZY%3Yrl+ +z%=Is=#yu|yl+OG#ydMNfRP<1I(e%WS6c5BD&hjz+#t?I7y6ctMIOr1N5$X6rUOK@_CjO@q*0VRy +z)u*uB;Zrs;ihg`{gSbV>rfQj`HjbQ@T@YL((>YVSiMf=U2^Rmv8aj^Ie7+X5&+m<_ +zih!I4VvbyC`}8;N!>Lx77{3wnw0uKH5vru@9y~iHcdhxBL3~^h6!sa^Kf!ee2EZ +zx3cb4XUO7G*)JJmhXq~GrLrgYCG9vz1q`SYTkh&2ub%@3Z4Ed|LW3 +zkLB#Hgxr6|Rm`n({>&1C_c@p#jL{~hqs_`or3&JS7ki^ByMeM#$o?Iv(^ +zC&o{4dLY|6$+BVPfuwUcu1|bzzgO@)o$9mtsTlXYO8(q1%SPRJYUI$t*$_dxL8rBbFxJJ$2veJ!$w-BN`Y!X}?| +zh1s4d;HQV49m{sm2~mQ12K0n{yIX^-HF=J59>d_GE4*o&6$0qQ{qz*24>W~Ne-gOV +z<}Ph3K_kL-nq`k#bAdqU&8bIpt9AI6`uqFS$vX*HG8_2oC?!srCZb;4NHp5DE9~V< +zHa7`vceBCPTn?6U%cHLD88%m5_jNysH|ImwC114GHuQ-I8nP=mxs;WaRZnlvFgA~h +zYZ_cCKEA%;5fST#tVP~kd~t?{OY07=K5iY$UYceDAzvOAL0BAp6w{6x*S>LMf=?fJ +zuEDx{XK0}lT=Fbs15d(ihC!6@zs6Sv>QDgW^o+-67`LyIWR^Z$NAN3BQ>f +z>5(E#+fvAPKTUHyNTIE*4W!^h#|s(f&tfxofeFOMim*0It!mF~wq2ZXduCEchs#@Y +zuShK$i$%x%)3cY~vC7=p9wEMYbH}Hv>W<>dN-iiTZFO~Ze*UnLF5@rl)GH3c*Lpsn +zpcl_lf^p48dk(d0VnS|Dey#@T#R(RApOkd2sHng_oOaO3Us!3F;UbvB}BF3A^HQR~&HznaQ%* +z2pn8$1A-cU#bA~~yn=Lsi~$1BqZ4RnwJaZtBbN)-?M*X}Wo3zWT+EYTS{-+9m(ig& +zvWlA}By7A{^pD^+Y|O%-3UJx#*REa5V@;4u${c>D{mi^?KlE9{J3l`^mL{)Twp0J$ +zjdou!3H8#6MWqvi&d&5fGM9J;;3HbJDEBaK*rKwsGVI|)-n+vmc4I`-dL<89&x~*k +zCU`&E$%I?NV$t$QKs?%6DTZYwiYw<)WF(E0aWO1h`ljshXM4e{)}!l!TyUUjCa=P=K{VQ07%U64 +z2<@;|7xUDkFD)&N#WfcvtHI-)a5t_elJ041&^nNvw7IyN@9w~VIk7Tw@nA*{?FAZs4n^p^s%A;B^IFmOnVNs_{q#DnjJu7ZCdJcL!+_i0t4HC_q +zz6>5vTKW61YB-)OddP4!I8{eMwe~v2VH}cQjcxu~B&MOS&%}Nr;mplACtTd2G;@hO +zNgjiz`YaCHAQL*~t=-+-k`k!%<~W8u2QN`uT3SL}281g_H1DHO-p7QJW6lEx{9G;T +z!5WT#%->3*bw^ltX$OhVmgB^9(Z}ymzQPyedz29R^0Z|iG&XN +zaoM1+D_i8DrB1D?tSHD&-p1(3?o($T+Pr*%LG7hf2q@qkg0-Y +z9NkC%fGfHfy*!M|cH~_0-g7(-wM4ys%^4MJz7m*B`tCXG4C>fvkHyo-V^Ulcv|M=IFXAj;Qsk#q8a1Xkbtk$gW_RKez2c1QY +zT2EszZNdZX?Wx!kf7ty=Tbh}}_Y22$0-Vj**Ad5{@h-LS_ +zypO(a&%6^{Ky6Y|xOwK?$B$0$^%WZ~d%iX<3D61w&zgi=Q=_M$gY-vp3RgNm0N00! +z0Ylhuxf%q{O2iXlQA5 +zUk2_K_G3ZO+PsMc3u@2HV(}G}W93Q1R>KWq`r%w*S|&~g(;GK!YH^b)g}g>F4h{}F +zYgV}CCR}bW1j$S3czup{z0}r8)(oxLn7j+GKaoG%6^sph5vJZ`}uI^p6=JCO{NO?M4 +z%!??d^IMfZInebUbvs0TlmQM-T17j+D^Puu=9n#fvRO?OJoB@`E(6*-hVc_QK-0V{ +zGCbFOZ<%aU>hat~U>QL%i()^q=W?l3HfnM8z;#cB(Y={>zm{;h(H`Z4_?ROKUYvPv +z2CBBLgx?^hH~~~B;R8v+iFsj%^l>qC^0VV@`e#C*6UDv9ni`&;DjEy+F$Lun<{ExG +zf+=>vrC#evxcd2Bu~6>jYWAzDm?Wt@QPhCLo49^d%IzXQktXvUA#C7Ej&+pY&)_4d +z3!d%gZ=idsH>@;3V%aSshQNHd?|X@1MfyyTcM$|NLITpN7x +z?-S(oJh0S8Tl5tMlFUZACQ@As8ajXP$n6^yPOup#e7JpsOY63?>kRo`ym%3onE3v3 +zUNd-hUK-3@K?OG?FRexiu4G}>gXpq^MMOmIpQhcYkJHf)5kVUt-hapO0SgM8!mkkB +zmKRA$t>9wxAKnzIdKl_7Z9MiU%lnr$So9#Ke+!TwMd7 +z2Q{|gK=OqdCV@&U%t#f +zvdYX`3)aro%+AlxPs@}c;0E8`A&j5!K6D=YGWBPPxYL5_O6({uCfLl?&u@8g@D^!S +zRBt7J2Hd98M8$p^1%+mFau&Uf2q~YV$cZ}V$b4gdDJQny94*cj)n0yiMBlV=AbrEw{0FjHdsdeT=>BHR7M=)eNAyNhgId#lEu;(E;>b!cQ%+DxKE`v +zU<#hQ=>~2-_Qsa_zCY}KEQTMgVu1#`bQ+OG+sEzs(Y4xY;O5J7Uo|-BX}ua!5d%u7 +z9mT9%{^5he=%_gq>9O2GC(MutKgz5lJ1 +z26y<*)xMxV9enM>qkTeKY~IAh#o^SH*qLB1+efjnOV+Gea! +zPO$fe_;riVTok>`h4#D(o_i@Xfs442?EqSNT;0lQ3;3VuMHH3_7fFIoDN_C7FKP}4 +zqNc$frRZJ2Nj+wMI!$JtipEBd4<9}h-^^rVDfbgfUI{6_3NDkyhg4_ktAea^U}kp@ +z4@Pibp*73K0&lD|@H6tHU=DBaTkaedNKoHTT^q4dpeLLD)D)<&v0Xo6*ECt$u!zPb#N<;g)-mo^@lp^D|z2|YhpkkbM>(0ICa3PVuFD&wsZktc|g&C +z;Lo|r4=Mz~R3%QAuHK>^_u`5dQYn`Nh;XSzW@M~+AElrCiC*oYA(FqjTJz2%(RXOD +zt8{Hh>6sn0Qz}}U`ck3%>y>9lYYXW4?y@QgF$&Ui`C@!dP9E7rEhr$pi8@*+ObFWZ +zK2%oUx&x9C9}PTk?ueC!hTNXcftG9z7V-Tnlw9d=PSrIf?Wo*Xx8lrFuwzjGpOw`f +zJbXx1Qc}VJs#ZX1MXxevz_~*~)SzxmN1kmHL*?;byn_*^_xdz^di|oel3W^k7b=FA +zJEJdCGp|?OxSvr?F(4(Py6yJ$eXbj-Gov@T$i=Lc;#H)*3%wQkL`Ta97p&IVf#NWE +zJ+pgf=TNOGOZe8q9}jqZxme>-XpQBN0xe#T)v|Y3P_7#=9ESZJ1z%YLlBpa;n3VeE +zigZo4Rf7p;n*GK&+RM*n?F_Va7L{t6{Ou`6Q1I7 +zE8E^q`$UYO+^Um09G^ATjjFgrEA6shjoQ0QeZ)spX(WBdf7>4BTThubT|1l8V{Fyk +z)dfF(EMqw=xJ(_?FCWU}c +z?An(Zb~j>2LctFDhk9=Q=fD?a`*DZPE0{^-@0 +z?F^@N+_`cc2fD)hkMV4}p*yK2GFbbtZ3arR9AQNToz1u0X|v6G +zY*h>2vyY+FUi&NqcM3ezX&oO^ZOX40SJrv7bZreyo+6HFDwD=npxlr*JVwQ~7!Hth +znArKyVkcIDeTpDv})>Bb51MB^R=}AU*15? +zE5+>m$EB+0U%6$USd_Kn#Otx~Ng=LlBl8?YBtsZuzeDEg9Z+ +z8_Um7RNq;1PWVhJc|A-JEoVQ{{v@ZNLWo_J~zgbzSEZ +zb&j~MQH%C;xI8psCZe714Q;;VR) +zwT0r+0*Ru0esPD`{@KKq+x<+h9h&+w*O;EZ^?v%5cGy0dg-L06GQrh^<^mQpf)c0fPd%fq +zh?DB-p--JYXq(De@gZqhDV6yCWtAdeBl@J1HCFzK!L1ZKL5K6;a|YKrHVx(p@$MFN +z(@wDcY0`N$aaex{Qfuq77M)I=$P4u^%VuI&(ZsNEx<^+Tzml8I9de2c!gzZoyxa*s +zBCUKt?Mj!WE6D1_<-!ggAMw1bxdWR(ukV6bSo1Yb*o0lZ!7k+9*s6GA?yOOV4WM!K +z)W&tU%`uzq^OC#PoK*TnnU^6Jv+a1%n6lWA-4z95q`AIRZnTb=k2^$7uI%~arKXRk%w6;``KbcR6)-9bS8~f +zAgwQ40XD0+gCK0X>{(ku8Z0Z68I3Q#s1i(T_NnOoL4~Fl)^e@g6Y}9ooVaFu`o^v& +zR9uaBj%))TW=#UT=%|dF7=;&2967GXtfmD%2!@ReEQ{Ujcwj^+#5c`=Q%Tc*{9YOD +zEqV|3Rf)5k8*Z8`x%_FB)FIg;1}R2s^;ph_G&z;iK_k1=*y#dk4?G9$g<Un$ogZHc5`dUaG`WMj^0`HR%xg&IY2J7n$v}DWH77o@>OfoxDD-}kL`xkSkPag +zn~}l~))qy(NNzNe=v^zxsgbvHwJ)1g7(bup^F?{Nj>Jg`MY%s$2{{)OtZTS& +z*P~Tkwtj*;R?Emmc7-U0d~$lrpjvTZmq+6gBWgZhWh2=zDEiKuiI@zZVy22Hi(WU40oKK(L9Ik|wbDarK>{u-yq2eMLtwj^*-#_Sp*LJi&a(WF*H#Nl$SO(5}Z|*Y4ub)jQsGb}+L)YBVu_@~YbUVD7_lE9- +z)}G|ACkJ|lX*jA39S&t*KgRWX1vD^Sekj^EKqB#`#PZD=1GP$vZq%WFvu)V1U8~a3 +zQ&}kuJX{CUoOmAUY`^Gh=rFpUqi++-YMpead$en}$;;YUTt>G!Uy|QCFvh-PO5&wT +zUX3oxu5J4oMR=rk-ILm=dnW&F@fPvQQC&VEF}3Y6v^!dR(lSR{LTQ$?g<;*x?|++tWBjWcs93@hk7;?KM<;O)}(hUvA(0pkYu58d0$ +zAX*Lmk*=jw#=6c&&&rB>@3^FcTDjpAL&2V7DYw}Qg-(f&U|`hFk&4Mo&%pVc23_s| +z8Eh#PUD3zw@$&a0l4Y++7V>#mD-PdU?Y=fgO=!^j{LyJD`2@VF!4349O-loW_}(%^ +zuRr0hxXC5bq=*sx69=7C_i +z^ELW=^wAm;3Jkkeo$_KI_*#Bqe8^jIS$(qg_$hg_=FP*U>8y#7n$at11D^1SKkB*G +z`HXg;YwEhnafZ;~DXE)JyX7nWie%&?mC`%>)@F9M#kWnqce>5JpZ{o=Je9E5(_u^Eho!aFrGpo-7CoDc?uT?sZ8y2ExP&&Bg&7m1QJ-)LcGkfoGc3xK1@!Sxx +zmhv3DYD96x4iR34JD*SA8n=m7$l%P%fi}9VV>){BBwznni4g+>PNDxcn_ZiuZfL)! +zm9H2IjQN4H9oXgTh~DNF +zI^|I95R&u6G5NsO(GclOkL$+M9A%sqkV`;uTA8=^t?`y8)vW^BAxhU? +zY*95`aXxn~c*;YW6+PbR9pCo{T0K1j0+jX#!>_c%zwZySj*qWgh8ez3+my!oFosoA +zh&9A7@%!E&=kRz|+2qG9R~6yu_udzdB?Y_iEL+!u(wS<_1e@1^mKEJYepY6~*C3p| +z)NaeksXH;4(ItwsiRkjtA!Yq|4eTU4`wceSx)49sB#-SfC~-@V{ma@ns`SgDM +zKZ6HUmGG_0Zl7H#j?|T7n6O>Tsr%;b4<@l8I48p90X(JVb~Dfu(ff}dd+erPIaPA{ +z+*(tI`sm5>*uD_I(^x~FrkO^o^!4_MU2ALD +zIWm12H8x%Xt-@l_Cr@APy~9_t6eV!j)ZyVAbD7crkm?F<)qn9CV#kVRkR4MGfiF25>Mkt8G3!Hoe;pdz+<}U1@7u5)b;} +zSi{m{ds=M8)BNV@+MB6MCEms{Mdj%;QB5da=noF24Z9V(0bQd{-|=P7S*LexPPX3M +zD^_k_UhDaR%FL<4LU9W3_Drh>wXBe_xZ$GNK&4R1g9aZi!CZML*j(x(ZX7bf<_)-1OkKDYosOU$)U-o$l)}=tT9VMbugdEH0j`ihj~L +zghk(g*501F8>!zGF}R8&*<`0=5WlngXTV&Vei`$a4 +zBW6M+M!nnLEGofZISehC4aIk^onVlivJwb(so@GUK|UO?FF`$547|_Cw|%jgyW$a9 +z%kw%LZNSs|(+LYH9mwPL>@{x%}Fz6SeFyQ@nfVS7=f5sf#_k +zFdK*cmW%ndsH|^`8m!BR<6;4u;R6!Jp|kHEWPJ}F$T72}H +zGP4Le{$ANd;~NRRL(oL1z}xHTH7DrC-fmLMFnW-fIaD+rE6>2UKMiymO+TPA%>YF3;F{AR20{-I~~Li@@-YGGXL#5t_}6(I02 +z#kfMKPKViGDrn1X+Tz&dPm={TFYMdx!R=OXI{j7Cij`N=xEo(>yReOU__p0!EI(az +za;71(_*lB}^QmEMxWUniLJ90v@acWG^=U6UX-vY`>xprhjb>TSTkc;xvLT;&Z3MfU +z;yG0a{JxuajK7QHV%(d%bl5=gRhhn1>jRYN1R&#r3=|)_WnFJxX#e4r*N#2_ztwwd +zq?fTunTJ`_<;{3W95v+Bi30cF3(Kv2#wINIo2XYRQm9&q8tI(gJ1sS#!JKz*9gI0< +zT>HYSBJGmfea5UppD^!BbsU>5oXte^%dQo6s>psG8Mz}nZ0X!(@DP${nOl1Xz&q(&EtyPuk1ZKP$J!QF5ybp +zzUcvIbkcxEc^R)&hA7Tc9v*{)6D+;77j0)g)}au;c;LkHqw&?JnAN-Hd3bBt3wVxD)Rt5(LyLvCTk(CXMit)s-i07k*JI}>~ +zw-h=jxI{bfRB_V2*O#9jG6OFnLt5&3YH=z@ZNY2HvJiCG_~+M_k^cz{J@?x3utnwM +z-`AG^zP9}LwdMcouPygB-0)ew=a|@Re}+*;>DG59P3!8|?cCjMunm6cZ!M}nGP}9E +zM?8DOkIGug*^gaEA4Hq3A+CLVH!U58XVrnjCsps{d*aHlFgJYOHl4mrx5#ayshH8V +zrnOa@y5qilz8@0TUHdxpO1GO)!=Y=ZZ>Du07;8*jXAthAvSSGo6BA^y34RIfrrNu6 +zBvBgofQ34Sp;;VO^=&`e-gyPOonkfi#Stxh;3W8*5=z@#h7zVv72c(al3CQO1zAG_ +ztkBq(#*8#}lNdQo8NBxkNL*e%h}Mi7Rz!h!IIbqF<8cXUqDo1AK3xP}PI7y +z7B^=@hgV+RXYwWw)r%UiHt%noaSdDCmYhQkx3sjlL$iy(Thys&QAWdqKB(y}Fdn>z +z_QlFpRL9G~(QzFdi0WlX6@Fo|9F9kg<3Qw4##Hg!S~?IrC#T+<3l3A-&@0$gb=he} +z)WDmDwCmPlUA9;Ex62G&gW{P|g+DpdLl>P)qjl8~hugBfYO}UsMJhgAis*rRY1jK_ +zGnH37Vm0sm=uKm`0UojwU3{YuGtimbXxS5GC+bvvvYdLLZeUO;(my&s>QV1;Q>Cjrq!9@=a$7BHO#Ufa(RyqXxB`*C*_4cX7pnBf5poAQbrflw;_ +z*-HYb={AowTaqw`nB#LKA#iGs&^Jeh6)CH2`U<@UFK|tNEj;T3ej(~>UQZ90>$>#{-q%qegpRGy+Ccoiy$<0`k4iE^p(uqy5qG-)e}xmM2s +zroVUjRqomd+Cxx0nC3$!TodLHBhT3aS?EF&Ajt(YHRbNgda-@||Hs!`$3@k>d&7H% +z0frtzz#tU?X#_z)7(!8yRFn=8kdTnBVWdP+N0g8br9lvoj*$?hk!}>}&Y^kNc;CP0 +zob$x{pZeK*_F7k8-z#+Y=(0*dKY~InCajnZT3U^)&I`e)r>e4-

g32wdV~*>SmIfka2IcgX<7GIz?)iOGoOZ +zweZT|(~my??t&M}5#K6EK%u@xW1V24LBfdc2aQ~i3g*H^`gVaxuF297N8dB}Yl<;J +zkHlD^FuqGlr{R#_Rq&e7jX%v0es(@UVLMxEufjX+=2gF4QTc;wi3|mhcs_ +zHIBm7o7^v6N|!(=oo9juMF?WQ&Hlkbkl>9hL%3tr@)eSuAPZWA33J*#QSgj^n(J@dNPX`?ubWL*_W_>4z(jyC~=p{=Z{$Lmd +z%|vs{%OO?wS#mxckAq}7jR}XUi=)UX+ +z2_&4ixhC(ZWqaNyKjn%3&4A-s0C&w20?!b8ckL=k5`sRs{#?XrhhSGRgsPLXc;C^* +zsVBcvyv!lav{E6XQflJ0KzqcZrZbz|e25UjPnUmtd|~36=6xKKKQ*NC=Q(Ji`L*m6 +zaF9Sk@{SemSa-Ce1$ia=UQ>obU?hP38I?TvUkOWZhuNGDmdgT+`L`8DkDA#IeNmE) +z5LzY4u-4Dp1nGQ15;5x1%*H{o_H@CW8pb3+261nUg8n{d&~28MnTg3*K|I6aD7lVp +zwq??pZudMyrl3{ip|vY?Y0f#cu$9#)3)aL+p_Oy#y~`|SelGe-_z7rNo$$G7&llyc +z`v;sQWS}KVV11{ouExR>Ofmc!gpg3%xZ(gt;cor3*D!3D-xtt? +zNhH3c5bQPWGpsBi_Dc0;2OSlc{F13t+(jdJmL;I)chB7W1xc>A(d5ebA>@7J?iN%sG25Ytbk3n7!m?*#xHQ +z{fWu1CTQ}vJ2Y7CVmV^Pz46YwI|ML4082g?on?jR{C)q!C0EkBmPlk- +z7CF=}m=^p__raq_$k^K%=MRiPH?3p&FETez&w-j5If+aXr9L)i(7x=CMy`tyd>TZ} +zO&FGEiy5f)Gn7xqBwU^nJNa&1^yBxYLC#1dXs;uzuB0w|{llsV; +znLTVn6T@HZXB{YRIwN%mC#cMQ7ORmpT}zD&t4ScdmeLq`sQyNz|IW +zMvpwjxwG#+Mk-YpTO&EO#DJo_vgX3$7&k!A;2^`~6L7E^RpfdAcK8|psqpKpq4c{5 +zY2)ABO|6h9osITSrI>O(lv)O-65eQHzrPao=8qVR0A@>)?c;X%3H!R)jnU8sf&@!N +z4r3TfK!MSUg^X->%@$MP#s2(;?Ey2KpS;=Tk;^_F$n;9>!HTDC+)mkw<*m>9K<-Mx +zfw~hUG#WOhTO->0lj)9-<)EFinfR?xOZeL}aM0zJjfUj>$jYg-aA8VyWO)P^wwhrNLS3OoG1xpUzQR?ERf3OWYLc%~lpB*bakd+aYhFZH~GT=mJr;Oj) +zl9;8Kn`Cg02skr&oyFvj?N^$HtUZE;)L1VNcbwj}mGY@!VMZNRgXj>@y~Z4(bVRcK +zG1A?iuQIY~1Ak44P~oipN$8oVQ7WL<&m5oKA2=L`3Kq?ABw7^3~dd +zPwMHqW^M(^v9Z}z@422>0@HRKNItkc%_^;PTv|;DFkzuwoIl23vA1U`!S#6vKA}(? +z9SOGicfYEN1P3nyd>}6N2ntZb0~_@$B7*+UrZ@D3u5Er&q9T<72GUoZ*xS}B1KS1V +zIN6T(P}&WmrG2ccmS^~dvcmY&ie#NK);CX4R~daJek@ik-O;7)8w&0E+z(pwxtr;W +zdBSb@zCsDxBe%LumM +z_3mr{kDnRm9{j308+r-x=ShWBX3u;;o+E`hl9L=5<-Hqf&n4~q+d{Dm(PDK<_>M%` +zv*X7-%{%eB +zBJeL~FUPhi+~BIMnB?ljZID@dr{Iq6Wp~997r@9ORs7oX!%W*V +z{hv%m3URe}FL}#*9#NU?DurS%0f`fHtr%S_9$I?5VmS`F?}5qZtyJZ%Q(*%{C9S7` +zy~O?X@Lw=0Eec$dnw9pkOA6dglk@%W+IL^ +z&{T0SoP&pg6D1LezupW@)(d#0b;JuGc7Y#h;m@4R$^B#}{kYII+?+g^AHllkhf%!} +zUsLQ;bNM2ci!%v`aUeUQz7YKfSo#!wK_85+{C4jhm+7ec9Ucn$(UJ!}-gc(sug}`> +zr|%HGSt=3+jAP8qlZvX*0x?A6oj)Y#_o7UwFPR3OSPrhqk{-|Cr?NC;3^B~ +zpN4Y2B^*;Va&$%+eJBcfy@X-2u4y8(*jeWULzKR53T*ah%F^67^|os0idaKAyJb)>*dfU_GPJ&e*Jtk+o9wm#o8^C)+33Kx4i3hqMeeGIeIg03Aqc-;ruLJU$X8Jbn{m4Xq +zBO!k2UZxRTQ{l+1dS1iHuDlM!Jyd|tH7jDoSu|=GeKU~l)P4u^6mU%*5pN1*^r=i9 +z&iMB6S4)w%wX!EDK=>~%_7@d*i!tZHnX=w0> +zAtE>S4nx2Jd{+hr*-$3b(5ACOeqLWlSamlaLK^r0IR%QEt#py5Q}>O#oda&sz`(2me?o22Mt9iA2QYm3W4m*bqR}Km~WHNbxIhO%s +zm~o80z#Skx1_Pb)8>sQa0q-GGn6o_0?Bp`a0a2(kP`Y6qpbbR +zr>d1p4~vHeti)qE%8lTx@cM8VKE!`lrMq_?wf5qEH9W?|V`xbzu&?PZ{(RV){mfDEN26)!> +ze^nLefr~=rCBCGc%uw1SxEX=ag?qP=Yj$J@l3?;NhC-TO6tEuPMMm9Zj?NS8H9gT? +z#cDpE|C*$xw~TNw-?d=snnAPkllT(IO@p{neuL4{q>hK;vl5iBC0Zmok;nO(&#(iv +zJ73B{dUy7BV=kG%($M_8s69Y{2lA1Jb#Z@l7x4jb>)& +zt;`-m)hzH!NKKF}kb9%Lm87{+_J?47gk_fS>smNAn*)LfLni48SgRwu{Wc)qckgmS{p%>mH9>Atn;8 +zwA8mj9F1Gp*7Ssw(X+se<@sPEtPB)co`s$H{!m=M4s(r2=E{RZN?4x|Y~|@w3ThZ5 +z_)$SXtH}hjPWb}|W9P4=l4IZ>!q`AE<=lCV@bbPP{J7_6 +z3Hzj?EgDJ|gWAr|Q$+BsfJ_&Rmq!R}x^`S8CwkBZn^Pd`o2$e`e_B*<1@X|N2w=Wi +zwXyIsFnH0P6nXXw!fVLQZ)eD63M5|2o}N;pgeG1I#JN6q|9J3@XWc#Fn5#)GydV&^ +zSe&w;f^;OVa;0>ae8sqtJ51EFfl)OlY0<)-O+MhfV8s26Jvk68 +zO3dQX1ABT^RAfv0q!*yS3+D +z;5!C{XK_mo#zhGm0gNL70%;>g9mIuK1_V|SZa0Jj7Jv~3#|FRy8kl8V#^WCMBbJo` +zR(N#-2(U^yQB6UNaDW;tnr@y)5SQx1}epNH~^Nl=L>{yOKj)n8(9Jz +zTvmq>_*;*nlm%xe17@RgKhGOxHJZWE>iB;-R}Mq;+@aKUK7)nZbzKbeZl +zg96l$u&LQs&&ez7!p7yh)gb0|7_YAQbq9evclEcoIzEKOH0<$6Y5N|;6^ga&q(c_+ +zOe)L-sFz=thrEui^K#oYf-vM8VwWCH)EbAe$}jVG5V9ytDe&QdKi89lX8;q=p|P>2wFsU+cw$5mcU_dQksFGHKeyN%ejNR|29m%m +zM%fKUB2B^*P@ +zN(rh%C~yUp61l;HF!q^G_gc0$3kUN$l|~3)VuMjO_nu*CX(*32eOD@MWWG;~0V1lX +zg!lIK^>w4b^fztw&X$|Lem$A9kqvl<} +z$%GC63C319(r;DrOcu2Y$I}4abOwsY7t@-w;zTaD7(^Uk6W0JOoH;9mqxN +z)*e_|08y^L=*MlC2i8x-86k3K5$op>z#&YXD)1tGQnA13L~aDHXM!i4QcB1=3IR1VUI23*y+XIkg>Z%!g3|VlrI +zAyed}DP&E>5pV|20woZ$VZzc_mDC2^q3sR2O2`6KKQVn~&iJy3Ocf?BO{5pdE?xe7 +zj~JQ?voc_1V{4k6G;he=X>wM=>QWLW0s>6%?~{^l$S12_irRP>pdk%(3Xs8Pr1vut +z0LA`r{0^`Q1eg~M_A)F1W=^pbd)N{+eHxk|cLt2}U1XPLvMElypmWXT@kH%dPay8q +ztG>enVvMeytl&I}Zm%=jj2j?gJufoAWVzh_+y`)seBbs~6g2qj_sGQY70kxFWC;hW +zIc+4gB)_X24B5Rl0U{&sLPkbQP2KxSZe@TnNxevB%!)fMa2}Lj7?y0vuk3)j0OH0m^pQ%^wCyNM7#B(si!sd625xR +zC`#88OtM!{!?>9K0TNUsSTcE1x*sa4;@Gc$*57h4Q$kj+zjA5>!RA|_vDVfZKx3(4 +zzZyVn)vE~hskq9k?E)yZ7D%Zf2zK7Sf|;}DU-6ba6RWOrH@~33X=eo@7;^)kB=D&m +zE`nJPpQVO{T6mS#U1WtTg@VvXV^^h@0{jvHz5are!so!GQlL`mN%VlDc-+VfAjI1Pvj1)mAVj*pL5iow7hhNNd$shW8W>FLNjAVlS3qNIjV(CAH>Q1BK!sy-ZqT@ +zQg-(~Jz~}csBA-+I$Uy7C%Sb2Fwuv6Hx>fXBG+WQ6K2yv9Yl;E@$<5T)>x}hVOb_e +zM@NH&77Yo+{MEZugcni079yf@@m;oWjlQ5bqLGPc;*d17v=16WY3AnVvwhnOP-}rK +z)gaqa+)ANBT`@KLQhW*<#@re!>~(T{#LB@@;QiRo?;IGI1Grt%l6sE>F}Ew9jy770 +zpE%4AHkUS`t6Vv-ZJ>a$jCxM^U&gEo{uqR#RhS--kdXY1JOEU@KUd>O;jDze#hch$ +z$OBIInTL}IhlDA0P{6=O8h0*$a@KF6oWZ)4$-T}1j0sX(4J2?kK>{~81DoVTb8j@@ +z@lb!h(S4%&PXml>d^1UEq-pY8XQXbiC0s^Qi|F^-QIkQ$jN65qi<>h1>({TZL$US+ +zHOxdz;OD%XNvrZ_{b1X;q~(I=`4B7I4-X`eiK~wbAKN-{^{QtYPl_QiG7J+X3Q5@M +zbLScXP}$wrr#G-54R%O8_&jHDx%$&$`AnR>b3FxbZwO>_8!$(L$ein4Z+X-U9miyd +zfN9=+HH#-te)dEI>@1|LdRmA^8R}Y(##RAGPYfP_jxwDB-yLI{ypNOy7>Z3Z;x3MA +z&KxNX(zzr6wsXG_`!Uu-V!C +zk*!vpJJThIbDpCvARS}@npg_tFD$SS)C<6}9P17-m}w~1P39Gm9AHmNHU+H1r6*P} +ziv);ac4Xxu@cR#t`oTo%iJ?(CcLhx=SLQ_Sj +z)NNiDKtYw(x6#`|f$6$GiUrodT@z(JAAsq18fB~nD=-P)hy=b2$_rpOg9dP=rZ@^9 +zNP}POS(MQTG03Z}C@(G~j1LJ&;U5l?SM%A9M4}GsX5SqX3JkSyTkrzmDV)fT_fM42 +zL@(LCheX1C<3KA%Q@;}lOObyUF>999p_0|B=&b^lp +zU`nFDq=TJ5f8L!7KhFTddb)oiDDD?Q)2%U5)G#%Ev%h%LXUvh02YImm(aGrzCUQ7K +zMDj=DUH4Id?!ur>xlL;DL-wZee;tLB^xFWjCl%*BmWM-#rfIM)AYd#J)X&fZ+tDp` +zH#L#cCkGQJ$1f*j!x>76g7W^LD0?`4jgc01Wf;<;zJP51|DP0!^^?bek#vjpI7y2~6y@)@ +zurR!DpXM +zUl}cZY{adMCI;X1-j-l`~Z|C%BZj=NEIe`0Ehq0-?LU| +zohROYM@{~XFLH_jP)toj!zFf@O#wmwtS|#Wxk;ig8@#fr>NAirz@jv33`DMsRUjIy +ztW>Zt#Nyu)2^XY6K1gO@aw) +za6QRYk(gGnRE%bI-s~mV2M1(#awgvC+uYovu|>7)jOoWc6woJVO|s6T>sEvlY_gAy +zKBA8KNrEx>5wO%G0#t`gJugyiER>H93_K&Mkh!_J&h%qfZ%^Kn9n1@&M^AGmE~Ei_ +z8Gbt72G$TLEj2YY5SfP^sL2m3#5FOCGBtM;07On7VFPyLTpnSV1h$@N96g^tH3ZnLV`!ytW*K6q-?5hb1!=-);&r`xt +zS*qg|TyxyPhN=tCz|zl112VxLQ$4}K7^6^_RV;+KTLB@V3|P9LZ=y~~0GJ{%z@oIR +zDX@hn`AhE6I-#g~dDE-O`3@`{HG4|K2P|+km^LMOZE4TRL>+)z`}2!e6V8Gld68X` +z`ok~%r%h*oX9h)twI5oTpYN92Emp`GRS-r%Kfinajb|T83#4$2!Q{jJAag2g^I#wd +zG~c6$3r@(PbJu*BLM?i$t>Z3AXl%M(G83U8HNkp_LE3rwr&|yv!3J>rdTVjw-VvkDcyY{hKlj_tdzxP6P$4A@{RJFEd2#Cp9-03FK^Z41Fg +zsVc`3oYeSQAx^P3ryzu2456-R$9^%DXLLCvmF+U +z#V4sRog#x?eDUBw_eU|jzvMfRZ>i6$8)w4T)ABVC8%Ze&OND7OP-5Rivwbt?=sdOb +z)VSzL7fVLqi+1H(L5!9AsZ0r1D0*7T^c3oa$+%K5pQgerpcMU{VQCNQ83~7lf%P>D +zk~=)E$8>^N3#mdNci&+*tP0CY=%&!qSjSrjmpGUsi%p^E5+mz}k8sbs8A|sp;;>l~ +z3H%X{b20kAI-$)_sI`bQo!S){2Fk2Bmz_H2Zj6!g$lLb_mi@>sn$T6uSiz)nb`(*k` +zibbdJj25{ZP*<|czK4(46_P*syexVOlNujXRFPaDB_IpM(oV@i!Yc;pe8Un0Y2kY@ +zul!}AJ#7n{pNy!R-J2{qW&4qNZO^(j!nVgTE#JYDd;1a}u>K@1puAs?!t$G+hKnM! +z$w0`Y49^G_Clyr3zS3BxGCE=v>Fvj@_qMW_D4;$!!~jIs*Y|7(Bfej6m8ep;`0bfB +zUSz0i-Dr5O%>PKKS4g1BJwY@w$@6SGGxBM7VBFYD_h?gLo+F;2@HWg!@1oyji-KZA +zTZ@ksUOr2JLhowV9p8F=1=`N{#UtlBm$BI!;kg`_e6}rXQTT9iC*nu0dWy(|e`>G! +zC@~p1&HphS%k-$+VSeEACo`wY#Jy;eJKvUeQnoEhW}o0uZ$hD#s9YJ6;&4&YNDC2B +z3mmfG++6lGi#!hU%>0~vv9QmdTAB3}R8%^n0MgeW25mn2QdAM2U4PG@xpuoWCA=#d +zKzlzA#)7K1E)x77&kcyam)-Hv(U|=Ddtg0n$^A_S%>bln_*Q8M@r^Rv{_Qy-zT1(f +z_QgGZz22ey;OQr#JL8JFXH`j>FTPxLcSkP~g(c%tzZ?2AxAOT@?9SrIF@b%ce>RA@ +zb-$b7v!&@*FumWMbt!n+tG5koGg=3UmvsjUzYZ-=@gSPwF51OJI#g3zla^A?N#1v@ +zyW~f&6?4p3C+wGQUGoVhVi>JtcB8GLW-t0k^;OQ}3>WjEXBGxmtDFXk4!lCFaDPhU +zeRV1-8BsY!^4uS)8w5MHN$!=GIw +z=+CZ@;Clu;F())yECH|{@imoS&j#;Ty6#A7+Z +z$FFlQ2w#ibe7j=!EzU5syg?fTiC++Gklz(hM#uh?@4933+gKs(3bK%%@OiK(Z>Z_W +z=R-)GB@4Q~e0J=$Ea9PdHrZ_3t0NhopUp*U!Fz)2tS2(m?o0AHCudHWeaP;aKVGmZ +zUaZt*5MfpO^)+ZZv^^gHlzA`5Bhgo^R;vb&)L!QMNRcHS8-+cgctfeixU+1Q^W^%& +zVHVGynTq3i9NVkU?T*5fA?J6x8;%ei04+tQzg)C6W1p9)xBnDB>sti3_i>wzAk!{f +zn>sI*YOdM$cv1C(l*K`ps%Vx|l8My&omqXq*V?hdt7t%(fe5yylT)_(Q#d`X)i{RlVcVS2Lt$5HO`5$bkpmJ#I)(~9iY0AEgn7~;#Q+VLFYbzo8#<01LyD3gsWtkf%6i=@EJyYT)7iS3m*9PP6{4b}kqOY#Ttp8RV +z^`C4g)J{4|V1mc*y9u`2OOBX*f7_3Uc4xB>dk2wSX4t#Ukr6Y7?QSnKw>Fn;>wP-} +zGiwR-7holal?uskTNc)0)~@Kpss5>g4*Tui@fGYhG>tVb%DwR9JpVauaWFhu+&iA5|$9PZJVMRUvX*<2tMv*SsPA2uXn)UHIAmF!$n!NxsI~6sOQc1+qI-X +z=aN2mB{IxuQV6!HpL?$(dWo?uca)iR$dWKWQZ-mMDK66J5>PeKv+N$1ygfA(+ss@& +zCfbX8G62>Vmrsg6i#UMi^<@MQNKenwW;H?R&oh|OTw$z6jf}WnbHqgFA;XE7k9{jx +z&Lh92r5|Sy^v<^<-Xx|6J9Xf`B>P}c=+T>*Kaj^0e%t`j^?@JghCqbC=*5 +z-b*@##UpmvCA~Kj7FExcpUm7k`*A^v3}U(Rt2z9@$HLb10jKYhs6kPN%LvEunHv>f +zPX9UQd3gM8ZlaoUaZ@DDWZ)h1;9&05^Y!6~36n~Es65;JMVpmC$&kFIK)9&Rz4sDK +z2rPwisu4?8E!INsvDu$R)jj>AxhH)%Y2&3*Vhs{IBdr$9pxlF%9Q&d=Ae(%Qplz3< +zX%J`m!qg70T^~FUyNAiKt|Bpbddj4^)>NSK!t2H4gGp1}%e%9@3Sn9bhh*o(l44B? +zn9TVPTDHD+izmgEthGgk1YM?7rMwN9zIb?qPFK}{=qeVPOTO+awgU^%CdGI+H+*0^ +zbxl7msw>CtPyVv$aL)4L|d)y|K57ArosZTaE>( +z`%GOyBgwOsrih;~zj;ro2g7o@n@N6Z=E?=H-%>D9n-_g_E@|AKPA~7n#fmRJ8<>4o +z&NcyhX2Y1%q=eoSEUd)|;(p8GPV{<=Dh&;i68)&lUtW*t2ayMHHkLzAAqoGyUJUL| +zgp)m4YTja4Bt!r4L +zotm?%ROIoFi@zEazDbqT;q~I>b&6{h9(V446Na1`zhD{_t5|fZk@l})oEG2yb-?$M +z3FFD9zTfTJ=-#+fzWo{3AbM1lI9IAF|1`BtMy_sEQgZPW(~AH8W;x+`yoIoH+D@{( +zD_!NbqH*QQk>nz|YkdsA=}sM?d~bs3K^{lx*93IGKh6?Sp*1O&>I;hPmKFtt76Mwi +zhC%@WdM7#XwWx_&s&`Ev*kf{{DM-xxb`!l;`6s@$B={>`Gn5GvSv|PCboR)*b>!gq +z*r@BB;fvyXD>(*r5=H@7t^HGsi_KztWVkCYhfmB1{wHz$!%HkW2mZ3JVAu!w`=t|R +zFa7E2j2dAcVi_-{%I60LCP^|^zB0b6YrG$DAb&gZ8*@#K5yAi5wQR+NG9NDwHYZz0 +z4nXG9Bo!7T~N*Z;_K(h(K*DUEdcNyC(V#wOmDj-4Dasl{W4l# +zDmhBwAUwXKbJpvJX4~4+6LUvBDptx6h+Y%5?$oUnO^gl@4z48 +zltkK2)Smx2)Y7BwhSVq~M05-lP*8lI(cAD0DE*W^;hCpD(p>q;$x=O;E`H&lfv$AT +zZ$CulxTlWb7oXU;?~;eP9Yx2v0K*;2m +zfTjuzUsE`}9q2oL@OUEigtijN^Z*dUF^UtObZlZvHv%i7-J> +zikbbJe}`_~WzW?wOs=tG)sCh>qob&>kolRYTz8li({ge&g+4PUBGLfPxfCGan`jlu +z6&zE$MawAy%vR1e3?n{>4Z^<`u7Bz>gFv +z@TN*)Gc&|;QInfn4M4lNkZWkruIonccZx94>Ev>9&~!uyKT8YWVj;oH{l53~HwJon +zusT~-esc8t_<;UPAW%;iDryxKou(-lS0eJuq?Yib(+m`+iARk@P(u{O3qocgy3E17 +zFe^nQ4C#C9oO%n*k4E~|z=J=5@JmSzt#)wP=S<p{5C-+y4*V}>rOaB~|XlSJ$Q=Kw|~=YmS98ze=8L!&`$ +zmpe_{j^MK30DD9f)Ejks{VCySc{_sls#dj4xGGPos9hOGySk7HfHr(j2jP?4!N{#m +z6_r0U9x#b!fRWuhNU1+wdjZgBH~L3U1Cj6ijD>ans=0q4%?QPay&V3|W$LirTbm)q +z1x_R{57uk+K&OPMC8IpOj!m1Vl1JV6iV5s)co6hFEQ}#c2=JT=P9Gs9&6rZh3Ncu3 +zey +z2+ouiQZyt=!)GOfv@N^*JHK{FzQxYamIp$lzuQWIy~=)bE1EdH_o@pFR1 +zde#M|8_WH4FIYf9p^)Nv7$0i_MVHwU{NGo01sy0NalWt0JQmL`s#b?Adr5E*IPqCg +z3QM5PQJ>4OfkaNSVPDaup7?o||9qa)K^h1Cd>ux_w*K;iqS$&?;Xf>3rm|2_Hh#pQ +zO^K>EE%+xqeZ%nP=kd$G;b}-B*Z*d|{%u1#D=ogBVQIoWY!;o1|U?}J|iJAd~VBd?s9C*o{Z~Y27py}YzB21q4eOTDL8yCMr$cfF~CjF4mVM4<)5xxmT(CMz~&k-Qnr1A1ZAtIQzG(=fiA +zKw3`6)F>kkL?_Z@RUWD%||#F6c>>HLDESP57>X?<^39{1kihM +zNdPlOeB*^56?Os?LAEz_#e?YSCF=z|0zjS2%?D*x1ql540 +zqrA@jJOH@>7JzR(cvYmdogPRc$_O;IyC(;}-xp&c@7k;;;eYN~6e84s=qIPR0}H_U`_Cxb^{~ABy0#h&^K-4TElUuTW}d +z1Y4cKLT!PLQnT?4E#lBk>W3;;i4^)hH|=})qLv=Nj}ElGghocbxX20X!GCuD7X~Fo +z()7GbI`LsT5Bv?)!AIW3f&;S1BF>Mre68#yd`lQ*V8@5Z8G+;eKjr=CfKte675!i7 +zm~QbzOb479`rpzqqvfgErAX&QPA#+8r;aE5UE$52;hw|19uxY$a))EBPa>6u +z0_;+)Cqxiy?FXuILT0_q+A1}egi`L1632i{pY>$@r?Si@3bls?SN;Cv3Iy%z$$ia) +z?SsCG2l-=i(OML@V`^l>SffKCtyx-B*rRzk)8V(FGbxcJ$`RH>7I{jxJ80qgb6Xmu +z>E8G98YxYVv?(>?RjRgwJiB`QSRuatk}E4M=h|!sdkdz1HIQYfW$;dmEs-%p*rF%c +z%Y#NQEKOi%Qm75)DGL+6pp?G8^=N(hXDlNLX>ueA)3KGdufnYTj+yxiqNR)~+BGc= +z;iXExd|0zkx0pd`VVe4+4I{JKjf3g=PW@t-`3<43Kj$Y%qAr?nF$LeFKpLjsDtm%w +ziLxHM>vJtw8+$RKsy&Ma;EdM{7!7%%n1=H>3e%DqhDaw1K-Kt|F2nlcBE#zBR{f`5 +zO|#e=U!jE7tXDPsqbGM^*71EBYAL)%6^+VL->lvK^jV_P#1oX1rycHMnTH9FrM!|jsK}FpgB52=Gts3l0zYT +z+shkNl#Es(wJ%M|pO3e8DR}?IGo!C@z4>`bqg+XmkJPGD$Wm%k=Dv@7$(sEBr&r@n +zB|*RS6<+UDv)3?A*w(inAqnp2aM?b|8k}Kt2B`e&oZ{uEtO$7Af!=vwC)cW~Tx^SsMf4f(fOBUyM5la&M7yIgZ_D3*T*aaw|va4MK~`_ +zdMXt~e$kT1$=M{~V|a$u54lw_Iu500xp>ZJoH<+_8Z7w0 +z>n}*9^}h4>)AfP|?dFcc6Uk$tE$Te{aBr*i!1hNTO~bf)W%AbWGkZsa`loA7KXtIO +z#y=nkh?Oo}WA)m(gPLXtzN?)zN|uF)MC~++Dk)K-Z>_3&f5!CI@#buwr}ZLT6#=10 +zi6N}P)B=nwY5&$-$9b9*^Iy%Xj!It>az^@bH=OEsQgPKR&!^khg)qK@cz$KuM`zwJz~@sRODC8-`>NoFGMq<6@|fFFYPYZ#T2ofh +z>GSy->f=6R8nZC(#csj=ob`Z}hqVMbCxoPFFn$UD#AYNe=)Y!}H +z)NojAQM@M&MQhgR=Hq(#^5)4a1u0FHnBW7$kLM$GC8_#|D%2B_W%B2<)h3#9FOrNO +z@ew6$jDag$I}~Eg5StY@l?$t)^J8UhDNcT;WDa0M9`AhX11f``armN7mcFdxI0!mJ +zPh4R}! +zPN5n7CAtc=o|BdlIULdFNaJByr-{i_&4_u!_Q`*0hOGksWVos?WyU!EQ!-pOxD!d5 +znhDF@I98j@>bg`Wc+1x5Yzu}1x=EAv~=|BtRa_Db*~@2JB*_g2Gw +ze@PwRQ;}~OD#;vHwE9NjJ3-23c-PA~5wEH`wiEjOJ7#$M820%4ii~hx;qLXd_b|&O +z`hE3H2K%ZnapHW?GaEs-Ohn~nc1%d#G3t9xZ(78&wPDK`6M_!R#LiRwtC3@s>b9lhV9_StIz?{I7I*U9P9TsHm1xL +z%F7u_o@(ZN=bf{V@1ru??gr%i_~>4O28p)HCb8J)N(dBgSEqi6W4ox{FX4F5VAjAV +z;<$CdR(En?U#g&f|1g}WucTMD<_A~fXs;AdIn4FFvE68l{U5-k1f)tG;%Jgm`Sdx9 +z)N;7r5uX4OVhmM^$;AX$i#<^U+FCG&V_0Whg@=h~ko3C^m`Y9TZSguknz3b#uEVyH#~|y_B)`Wp%&8!M{M}PlpMYsk#QGV|nV*SJ!JXTYdew)9;$u +zrPy)ypGiSevm!EcyaZi)X+<+ybv?29Bxhd8BwrBVm7zxLzASh9mYkK~i#}g6$O#;5 +z#~0-{*W%Zg{!A5*_&DxU_{~S0)zalcs!(FA;4MNl(o%V}WXGPJ-U^z3v~g8SU7p>Q4UMui)pVXcZ^+Z9Pi$glWQm +zi;*wdW})=U$(-`;!ueHfy4|yI&rIyob3y4b`U=0F@g9ae_hZ2hc=fR>C=U%+bO$_n +zB!zLGBd=XroJiiM4HZAT7H4(8V=t*WgB`E1iT27^zw)zymrjoYp5|WhPqX$9 +zFvN>L{jfB(tzx`L-VH)NhMCC$)tP`hVH%p6rCZ0xdFYIsXk2u1eLjHDX5hS*1}{h0 +z_Yk4ti))9q1HF0owaW?fom1nyj-lDi9>K@+mkB9G9F6IV<7UMeQC>f9*2xd6!*dPy +zWS?y}TzSviv%!V{uoFBUAA=|Qy{Bc2vTUcCeUaiVKY&nBJ|k~SXawXu;y(*F-s +zvtQm7V;fDr>j4m|KWDEEzsaHmeRhK(DB->nS&Z1uwL?dG^1-I}mtIe0n3)C9B~+4Y +z-9Bb8J6b*v)j4Cdwc|KOaM}7u<}$wUYsfv%ZrSn(S>|!Dew8-mDzO>Q1;6h6|Hd*4 +zO!cAK{mBCt-ILAFwTpY>Oogz1x_&yf*Thz-Waoy9&&j>i4ayIG)G2oh;+NLuvVs`3 +z+D|e_#f2DsF<_Q|VhbbKnMZJ_>eE*MjC?s8ZU_(%mG+m+r!bh^dvdam73P}#NAC8v +zy}z^DVad@PvM3+M?*A_a*<3<@^p1`9-X;qP)HG~4b+Cs2Dw`TSR$|{lU@d)9EJ$^y +zpMGiRM90Bs?>|^)`p>gL!n7ghi0z0-QR5YbU2oPL30c>boMXwa%vl#&0kfmrQJ0g~~o<9-%50*9b^!ne5)UZ~vONQ9J{}ZvC&8GUF +zDbP>M_ZK&91hhoD{~MMSfB(nH8Qc6J-+us05wMo<{saf6Fl4qzq?h09k^J86K@dLX +za@?6FF^5t>cbjo_ZJqQHtrS@XqQXYY*& +z*+B5bdy(x1aR_P=Z1BE>0}Vu-rvDuPdezcbi4}jbqt%KKq(Z@41YxM1x~Q5C@fMWQ +zV6(t%any3XH$&1Jtccc2B&`kE7BdI=Z6dS=I=I&2Cho6ATPdo|2y>^|y?Xs>nH@L8 +z4H^nmV1vTWXsJ0Fa5O%Q%% +z?tNlSJ3jc5J67A9b#kPy5J#nKc3_;J^QwQ-77IfEoA1jxpsC}7J)xC=y7Ci@O1}9& +zKoHSLQrUhhaQv2osVhz*xgW;o$o#W$^_yjC9kJK?FL;R5|B!oJVTi0Qoc`vd{1>Ck +zp}xtqbNEZ?9aa~M+VLSpngkUw1xI2dcWkyK%=N}amZ713!r-mP$5mgE>3 +zzql-Q?EV)v{1?_4U-(T(c~?QU?_$nL-_)cOzk9@v_&#Or`oEAgFNfO3>`0j_UN)}@ +zo<86yovLBBwPu538QedZX(JI}q2zfDTO(q@hW=jPl;S?m_-OHxk+JU%e~MO6?iQ1m +zAMc+9tRi!wR7&l2JbLso@gnBR0eSepxF0iwYxmRxn;YAg?)BZ@JjZ%dMQ5@ZTNeWU +zJDOqc)~N>oLZ)bFPSw4f$D#6r*tswNv40KHY6m5fgz`>0IkR5S&xfqKajHwAeJDW6 +zE-hz;d-CN|6((j=sr63Jz!?+hzfdl`T(zV46KlAeQ=L!ZyU6rN;`g4~dEzIOJ{`s{ +zKRavyHRk4;BU$a1z&A1}g0dHo2d97k|M2L>h1B#VwwwPeKvS~YIrwRSho}7ap02#N +z%e#9V_^b+8eva3nv?;N=gM`>t_->H4{`w0V?*9L=_a@#{e_#CYxz{bXNG?T5=o*rQ +zipY4AArhjblp!G*D^teXAS4Nel&K70>-i6U +zcdc*h^L5XCzt7ocpFO`S#Z71q(_8FTAa~y1F5~JL*2KzbfQ2LLDE7kj;%}#<^9yA8<7bk>zPJ&UJvr)u61bMC`me;lY7EWew=@07OaA! +z_r_@cR_(Lw2F#DF{EpmNX1)6VAINYUy7j|ghAruR-X^QE%_wR8E}2E20daHO57+-! +zxXR98O7Z4t?_4=n1VzPe^jQ2UO*rI57 +zyhnd9Voytjn;rrjdJFu5;{XC3}B{9NXOF;$h)85e$@g_n*ddT!*g5iofvAcA7q< +z(zxGg+#qBv=<~xuJ8fNO{bq6dO!F7RGM;ABh5j{U4vdp)%CIBQ(`-fo4cuf3vZg<5px%kKCCu%w0D2GdLGB?cYOT;9M0hHqxHP3 +zADE80>nE@r3*+43{6{U-`LgI%!cF;GF3kIzvYDlDpC721tbb!}!~2h|rPYK#qqOMN +ziV6k&s^^z^ckn`nY1vyhtL>=yyK_lrlWy2Vt@V?gHjoo6(%`e6YNv@1C!fgQMj!NJ +zhsi?RM+*AgP%w}aSHF^*d%aXNSdSY~H-zE7RG)Fl4ski!x4@k!#lB7J*oXLm9FoRL +zvccpQTp?V8L*}Xkgpf|)akL}ZP~&Zby#Gy_qUfC0>Zm~|Q!fV;LZfQ-*T2d&n;V{K +zmGpj4GdeiTjnlc@ +zj?qJ+nN~U%98?u2USqRkrC7ym=~yUqzieTCIm=wfA_3CSJo!@`9ES0p+zSHFerhZa +z`8<`deN;%G-S`y33TxsdGi9EXzv!Y~xMlsf+fDWvOkUiE)I-0&bh?&w=CV$+Bag8P +z0=f@NhgZB@WTlLdJO@at11=k5+U|a&Y-IY$?Qk{TwuNZBI$i2B;M=J~jp@EC@WP9K +zJNyFM2Z1~ub?R@;KL*=8`2BA-@9q3@?QWQ#&IhxBC+M(Vei*FGT=f#-k&Cb0Og8My +zp8n#YaIto4&lP_CM|(LF(v&hwWC!t?%xQvtq{V)}+%T1JHA=57*>wO3`Gi|7w|`%Ce#po9xzVw6nyvAh+IZ +z)x>byF?M}!Z0EScC8baTGXXue#ScX%=&Q@@xX +z#qPxsF*ADg@2I>+^{~(HDkh26>ACNz1Ip-&(jRNWX5=Gq^l8c>O3?g0^fyK8ws-4- +zQJ|TPZtO_Tc +z$N%P*_0N?zu6*NKdK|Zb-I0L!($qytS2qtg8{T4WJ(Ti5<MEfYTkPdvTGZ|NnD +zqBr0uOa&WP-d7oD)EC%7DQBxvq&?a3lJ#@ssKUwXgg86Db9>hLrF7eAt}L+u*A*F^mCIcqz!?^U=h>p$9jdhgf2-~PpNvuatx6EvS5 +zslFaDes@`*r|^*fP1lV~`$I{ZE9XkX{4OgPXsifZRRoQlv-mm|H7LtFkETr$Eo)rK7+CRR%0`s*(FS&36zGG5o-9<9EyS>+a2O +zPpw9C^OOfMu34_=3ML}UKTE!5vp9-lvgV6iN%Ih9LPa$A-?C*Sn5#d?OgKH62~96<;;VGuAkcK%`{KcMxwDP(3Ucx_Zfi1tNygEAC`-!O +zN71bJ=10n%=Akcsi|1b7D*IuTmM2koVBO0AByiBIGHV~cI6=zUOq7+Ed7a@i!oSYX +z2e@>hXn0&Pdp7|oB<)=H{w>Q7`?AyB7AnFD10`-!CA%Ktf5So7xxRybPTR9UqjE%E +zu;5X@NfA*s(_n>Zjv)1~{DwVmVqwDr86%)&GD4Kmc +z^_z6w>>X>S8Mm{PgE6|>lQW_gBYPyc+DfgxcJ|C`+}_91d5y1p>fGy--qrh6^DZ1O +zIrYh@{(tgOzXh5wmJD5f(bzU*`(pU~N!ObG;!8=jq8H;Yu1NfL;8XGa=dIM2(|>-k +zZbZ|>j}&2%R-lrE9hI*UyVIW{otp{lDXmY&`J&*sV)LmEl!AV#aqEq_a1_gej2Ag= +zB1Zj6U0$oK7juIPB$a2~cTZhx)JIPs~lAbq|pID`nQBiEx$*JzJ_+rxOHcH5R`t+&$ +zYNJbU>$Iv3Q&ov+T8-kR65hoQyUe5udhbqr5x?^GFxy3W-R}n+Qb$c>t&|+N)D)W3 +zzj$Tme9c*LYw2++ZlYFB?{pciow>oe?U6c3fT3^n!|XH)N|b0Rz0;#Sl`qfMXEx3B +zyu}^Mnzj4%ezXMYmEE5i8d666J`;gFW}cl%B1r0a$6`QTJ}6<@9U_B>pfo^t!9V{~ +z&G4Vp4J7ziY8M{<6;XqK{u``6Ylv&&kWWq;&C1@hSeq4Zb5khwG!eFYyb{ +zI#@2+U)KwGV6Blc;Hn$cgE5C^DBaPYP%G~4iGp>uM +z_^mAYktdF%ciZys-jRLc-}pt-z0(il&*Rh|Ecf(#n+#{n*lZO%!yH~%7E}4Hpse}9 +zo~fVZS(V!J_pjyba`Stvu-y4JBg5~^B()&Kc>~>H2xMJKy-(*+m^USVWHF9(1-)7! +zz2B4RI+$a9?o~tbGgC>D|EqCjJHJSoD@c3KjW^rhl0qluho_v>(U0Hr-Xkla4-M1! +zzv=o>kw|7e?%1qPEinrD+O`8JTnb0MG>9m&aTA>0)WuSpJBXh8zyA{eFQq!S&nmS; +zX;9OWg{Z({+jcfYlkRAnR=NOtkzem4v>x?;X7{NP#nFNpzq1TfPF;k~uWC?wDwI5N +zPHm;Ra37*3mT-mfo5+#_b{&A*F3;5d4mA!V#5y`uq@3z?lz`kzNnvItvUnu*#;hkd +zWBW%b94%YiN&W9@#<-!^MWxonQ4x>Mf%8=#;*`8*RMko^W0TP@HH+-2Y7F^e8_i1l +z7O(!d&{Ytj^8CowQY+E&b?~yKGiu7*w}5_y@a<&L+Mmhfs_bH}Fg>-ui;WIAxRd5HT}=?WFc%uQH0+_sW;pJ20J~FnO^#QYBTOaei<$pd +zc&_#8mN37-FL{;S9N-qg(Em$@S{Ia>S +z`|487Sj{OMt+C5_uB2@}KK|a9gQR(5HRaz+vq#>o$0LI!5wer)>N1%e+~&5RvNN=D +zBz};4XqCHWT|lRr560sEuPXEVr4TCV{Qp*&$IMeuXuw0rZ|7c^1Jju8(WClWM~@2V +zUvsjywFjG6G%VzFyHo3_Eh<4y=aaZp60#n!Z4J&iZD>-kgD3s-daa1$0ac!Y@6BRK +zUtJw}44V$+);pYzpTRq^&cTf%X1<3WsywWpX0nHI@3jn%Z2cvaq~!9Oayeq=)+^_? +z8HPm{KIeyJ_#N(ZS04Q-L#aFy(;cm~-MnMsf=ql^Xnb^}g3+!GwMTYOQBqU9bPLZ* +z;3Yo$Yc`gf?fTFm%lvz2^}4H3S}K!JoT~j9B_FSTfF=rFaKsa!$HxDk-u3#Vji> +zhu^c4ijzVF>k#(}VYl9*(PGP&_pQ$Mn5j~d>jxaQ&S({$s}s{o4>u4td7YGR$wWYM +zAHt<2Z0)ZV=})Yd2@m9i5AT4hzoT-}x&$@(*aycw)#|vkVuf1|Xpyu!Pj}_aw|{l` +z^dt=b)?7yFQh*|2%?2 +zOLQeIv&U05;VY-=;-Lo1YSFu+xA>Fl2aXF*Yk8X183Y6{d9=SwDhrz`3V$#?JL}il +zHEw>B9pS}ebvuP@hyJ>~PRe{Ih)0A^vO>#2Ns`CpTRJ;ebIZGL2I%-+9yb(wwiLk2 +z$41wTOp?@Ih!0-~!mX$xVzi5VZ1~ipBtbFny3L3hAtJP#xG`RS=jiCD%J7&6-C)4w +zw|-as%I4Qn75uc1?}U~gB(462C+|yTzFi=QFfx>C*9C{i8FelAAk=29Q^$X7Vc%9| +zR~~l{Mdu(F`4Y7{r{kVK2C@*&)wE7i$S1$7Z1qk3?GOJ*$Xg;-HzRy1B0O$u{a=JS +z#&>G*M@?y2uOpbib9L$-Chd*oV?oPLlla4?hJf_XB(9{5ccBd55v};BhClGdsi~NxVR+dpeTrhvkE3bA>moKb_42xTiX$Zc +z@Ot=4QBwQ>kf?9UJW~oTc4ioKacVe@GUvB?g~!Q3Rr$t&n>0Q=RS&js$EmqXf5l)T +zh(?}!ki;K3b@uJi=_n|Zvo(ChpzaEMLyIg=|$%nYi5%!m#% +z^i2RNpLxbd>`lqbbAK(A!ok!r{Rv9i`?d}oNsz}=1Ayn-!+kXk8W=yp?-m{&8Xfg( +zg$G`RvNk8eSB})J$H>>HA>4i)=2mtM=63%$QWS%^kq6u>zCueobp>G`;aFX#tDXYU +zkNG)wuTqr77|xhRzl^J*qiHHTfK6U +z$~gJ$k?*+hR%^U-9#@pbdTJ#QEtT=~oNeL0hoG9FfqZQ5a$OG)dXrW>JG>;mO=w{E +zGd_Yf8F?I&kM%XETl;|HR+;?R#khwxG;W>^G+U;XZzf}IV_Pui@YMAWI|L45Gd(eRaHb+Njk>kta{yik_{ +z6K~qd$E*$I9VDWrGX5~J(P~Fvx0|_R`3M{5tcEtJ2&Zh9iMeh3Dq3~jA^ +zLG4_AR?kFJU;5};096ljlH#v<0@u#bWa(Jv0T$dd;S +zik(+sLa6rvk +zQ<6Qtus5|5XMQp^qT#TVlyl9%O#*Cw+W>PchWy|@>QF24eh=V~vCH@HLkdcP34$nJ +z$H{3_I6VIZ@I`PiF*BctC{hm2p6G}sa*iK;yv5Cv9c)E*lKD70qMD!UojID~Wjbwfm`|?j`X*p2jn!Z7BJ=l~2^gzTC8i53&=ki9S@YLh5V;aKCyJ3n5 +z36XGIJiBoesd1-H3j&(;pwx*0pMX=tj^kphRQx|*^k4Oaxtp&i(>{9C!rYzJst0g{ +zoj95j=Gof!Gcb`myK6gK3PIw9Ju^BVk`T@BobW}&an*isTi +z$h0L3SgjmvF`LdRGotMXM3c7xexyVANdbnSF*Y)-4V*(7j+DyG?gF)o&+Z=JV9c8* +zTet2t{GmloN@}dI{`RCamlvq=@3ZjF!SJ)~|>VmOdxJ88_ +zh>Mj(;UFbI0q>iudUaPZLiz&Oju6YMpG5Psk>XY7Xr#lpi27#nNqHbp(A;)dE)vgg +zsU`^E2~{*2?P++fmi!Q?1zHBS@8&1%TXRo5m34CL->*hB-@a|z9E(VhI%DV@&v~FN3z!&aN8;{FtW;g;$ex>rk&foc0yBoZM +zY-8$kwMS)tm5y{dq+6ZMfUY%9iTWRCG)h^Ljqnpp1})uzXCtn5sQR6Awfpm3zV7m| +zVk21GJy=}l7GRp*t=Qb6Vn)?FF#03S;SRWc*LHpLL0t3({a@qVm3|lMlv|2(TSUG46-D +zy{~w1-}L(Lu`n&Lk`nI1EBwyY`D)dhvi{PY@tIpd)Wd?gJ^FssD=7kapH?$VfO=tK%_=}^?+Yx<@H?)UJm$5IuU!N&86saD8cRTu)p6T%ibM +zd|`E>>8{n;Z+(+(yAUOT@k%=-C|_1M-Dt8`gQ~szT1A9n{4RWh^Pf*adfV=fKi9U# +zH=N`BA$@|3s5FN2e8vkZnGMwtL^TP-NY355OW79NIxTI?V1U3HZ4R=&=+&WK2}B>R +z!DGzGctmkv5ZUvtML$%~_^~gqtb +zV%zEyIC1M3E7XD&4y496LZ<{Z!b8(t_)~5Zf4_zTC6Btz10D-6g_7JY@&%HR@cMiWX}5Gth*qE!hmEu5Xl +z$`kebHHZHlCm^~k<3T&RoQ>qEAH(iih;jtY4Nv353xRdULcbhoTZiHr +z+uMhy*b%KB3fm@Ny>DD^zizryZh_T@g{rPmQ;##eE8GZUUG2Dg2XVj=P&jP)FFf~X +zq?OOhsiDWWs8(lr`1#LB^Gw$dF;QsFP*M!xxI!y`wY2Ohmr5~GnXTg5=syKLM+TNh +z{ZyiuoDWk@Luot}5|HiV$O@E_#I}~mj`0eP8-56%AN!_?$-Hbs^L_D6IZdX=L0X@Z +zk(QoukHhqK5AbMLZ~

WE=CZMFV9Pi3@g+&e+unrq=>hCNu +z({I%mV~v!=#Kct|wt&^5SU>FOno?i@I=yZe9xJ!MF`ztG_usy%Iw-PF5}?2fSB{Hr +zSvYIk%R}mcra&h^>S>!W{K3)$Y@zFt-?82jnqMpc4n4I#5UI}ja#3h2I496{aOeepH?srx9(%(viU +zSLSdF8))^fFa^#K4Zp7=ItZJB04#)hc8>;CU-XjKbf33!8U0;luO&-Bxx6!-DpB^O;%DFeo_*Aclc#}l%0FV+XPu)klFgs6gyQ8oWGs1yE|N(8uq +z2Vm8PB+9E|jT3v~HL1sA`2u(Nmv@zC8UKrTY|8!ER1&yCmofPpCnfQx&X +zNL%qxTnUd|1|rN)_9;y|A*%a-hj8p|9npN&J@7k~*96`;VI<|zd +zFqv>uVSKgpcHB(G#Vj+)RnwgAnCpEt^B~}8Rt!ph*djIU78uZ142lxEv +z%k)ZPqplI8tnk%jAFKeh)q8T-m&tLDrGsuWAXbboV`4fp;T}m~OSWJ0$!B7tZb53Q +z0h{?7q2&c;Ufk0r)0~=H;)%$77iJ02ZrM3HHbRL^pB*@;zN?A}7uSiuS_gUARJemH +zl;?Hr?ZMPAvsq +zcdYhvBHGf^@zzQfr)=Ns>wUUsR+;0YqhHQ1hx#pbvn)(jR#w{iu0p2;vmfzbk@-Ot +z(fX%Or7b^Fk0k1Unb|k{%w=Wi#`1*ZYIf;#x|6N9ciYTlaK*(<{-n)wxk(|IuI2_y +z{t$G^Bc9OF@pf}@nc7ekYU}7Y(>lb2J0vI9zhc&_{Mm^EX!0`V=~EER!sSx-wZy8v +zNfu9*lKHxZh9p7F2bZCg<~@xUxi9=TkFwEpsA3{Ec*V!ZgnV0TR;md|3aACP^-qx1 +zCKAliwbA;;ya{1op_dk`3xJ6mP8?HUkUv@yBR@S*qlqB;w&ah0)z;vHIHL^H6Bt#2 +zK+&OUWIYj%pw66kDkMbn7J$*Ha!v`)tL$wI#ZJi}VZ>tYBQMS%wK4`<_TB@lv-=Pk +z(fuAvFu!zd+FCCyvwweA(Cp1i2hw2bI_fBG!pme2nUblaL9OHr`n2D+cj(14+ZcJT +znKzxL{D_NTjmk+p(K%EsLTw_`pm`c3zuDIk@}0YGb?Q!lFn^>*#T8|224k*;F{d-4 +zA;|40HC~VkMiCWC7wW2!!zwv~K3#<&{;Jrt-*)v8f7I1I$H-T4Z|na~)K4|?)ms>I +zVdsIHzz}%sAAmT2hKSCPm9)>S^chBh%g)Zu;v7N$9IssY)`A_u +z1Rgv(kD2hIVxh>bgSnUkch1CQ`cJUrAzqw@rslF6=3!hsfd2>jV4-AU^t6fEMD>${ +zn8gvzaOcMEUnCGgm)ZnFz3{KnCn{~yf3HhxYN~!PvkM4Ts^;WPhBAiHYmqFCr|Lm{n?d?^` +z#JHBS2cyE+vp+gWMT44~dk9GUh^QZkGT3p}z`F`?&QxqL8BJZYpP~O!56}S~42=ly +zV{~{agkMUGZDIzk0V)6?KBGP0Zb&sACnc1WTz~@PvGDzDhQS +zpf?*3fdzE?XC4BgYV13ktp-EWy$(|b7K6?RLb37M@6sn?Rs1?aN%YfXnhwk)ROpwI +zW41VCwGfD)nx=J~+e^VG(KsF{{uAm7zXHF_oq0@~0Hs;epve2HnHe`>jtwTGwUJf> +zZ3WjcePtPNqs{0nctc?Dg1!Pu)~dhwnZ9q|KELx$B9#3cBplUT09&cqD{kDkvysUx +z+!7ul_~N-g!B?D|&KMd-3|B%;;u_A{4BTsgro=>pkl)81gzgbhbcFxg#T47dHiTX# +z|0D_o5$Q^5R59!&8ZUk_o18nh@(4gPGWPiR$?F8@5V)O`Kqcx|Tq1ZRBq#UOf~f$- +z$HBsw+k&y-wa^gjl=S>M>00$u6m58%bkO3!OP +z;N1m`@k$J+XeEn(rtA{~YeN`c$f$u_t?TGe7Q{Dr#*d#P$a&9Yf-FeI%tn0>?%=qT +zaEEB*y?_6HDF;&xfO;`jarz$0*`gO-;>^*|-kuKZ{4yu!H0XRcl>uQqq4LL%A6{9; +z_Qzof2J^FG>jXiS_+SjnemR*$tI^6nm9L(_t$Pb9C#N<7*+Btq=i%{`NV%0GFlY4g +zV=c)XED1I0t<&KE0#pMBuf)L)GhsW-3Ph?0Dbmo<@zz+}+N*F0Oh!zVFFd(w*ZAg1 +zA#Xxj+Si$OV5SfI!B=z>=W31CPF_i@8!DH&Z~IiJWO1ZO4bhS@_Cu~vcv@%Y&YfT- +z9|Hrt|9L#&y9iIU2!2ZwY$D;P7GX}aC@hfppPxg!dy(+cm8HZW(&{h=&e{@+jK5>J +zQ5X^PE@m~CKx3hJa5cevg^&G&7eUTrEFt`>5DE75C+w*S2)qtBQGVfrwQ~DU7^dpQ +zyZybk?a-{FGZ$mWa8;4}3}M$K1!-Vvy3lF3|2&1s_ODgA(r<8byol&!&@Digbz);< +z84l4gNp&jp(bNe>b=7@m9)PX_x9GdExSNxm-4H;7rK0BJi=!p8al1`dshy0uStm;4 +zo0o+ej+4xx*@3o5#1%(JYY{{;zY89rwKPvV5UtdDcKQebJ!62W(a9GHfuR5O!fWGI +zMuQ>}puv>d;_N7>!-LrBPC~1}P&nmIa75&Rmmr%2%wk>_aN^p@KWeld3X!R^aB4v< +zbf{v~i57%|a9pwkv>qrkGI))Pe|yj>*ov?{hY2X3Cm7Ix;^)%%QZJp=L;EAGz$tpOg_Q6dj*KM3?hFnEgmTZS(2KhDi1HBn50G%$;Piv?SsJ=T +zn7fOeL)srQ1aew}2=Cg#h{2WsIQFyuEx~&?Pe=!(6}4eGOehn9bb}^R>lj-I9u?5W +z^ZUrhFg0Y}r4Fcg+xKCX;Q}9Th;9u1`}fG|ti0>sqndaXsFSugzSi#2CAF`Y3=$s} +zsiYSC%dVPQnyei%j9+*pH1MzGool?=emsb={FQl`gl)J()(5tmyrwg&!#2!74fPQR +zTif{;?`&${=3Q?)bl|{qFdtHznCW6mRj@I}l!_+^y4d9McRx1i-)e&?df^BylRTpI +z2}7HjXXBqH?J%qzI%qk8|LS$_+&NRHOCr=-Q+}!)CNL3~@qYZNB7f7vRoRMLaaa?S +zyJV`K9%cnYcTicd3QIs_bh3^OF*&cpBdcD66cG0ayIBrwK_0tK$OjN25Um4chqayr +zFE9_kw19XS%w{a)8;SrS6UR8~G%U$lh@)Wl6P?nN1B;PXCtB}C1!qbLNcj=Lj+~Ia +zH39M}V_sd +zC2+THcm@nsnyfz9wsUQ&H}(MwJk=2?J3&BP43n6)D?|fn#RZ`=W{^S6}kQI?+o@0YC9*i*ok2R=QzH!%2Y7?;L8&gyDdVBdo +z_de0lepNP>XdB}RCws{)JkOwRuNw6U{Jsoa7{7g?s3#cD#l2q9edHN9Ftq0a*bDP1 +z`|+UXhQ_ZDF5BALUbdjb$NnWTR=Ua?qA}{==okkU3JCFc4CBpt1F$&s%`nnao@Yq0 +zUzZ5Y&24QItrj$bgU6e$NiC17?Nd!VPtXB=9cThWqzVkAVIOBHAw^ME?@9ci^-^ +zJ;UYzW(wf8yAcLNet>QmrH2Zn=zgcp5i_5`0rFc>B%znLv8B=tKs7t%{V0O&-YJ+F +z8;BkQZ)T{I!$Ke}f7JrBuJvJZz>pQz*AF8S?fM$~W`GBN0){yK#?1T%27=~Xa1o5mwh`rhad_D|SK1L7)6D;iOrIj!us@@57 +zI9x)EuUFv*ylG%$#7OKhz*Ey5EF~^1B|DsoPll?j%$>rZHt`WQb^&-WKRnpPjcfg* +zq@O=e>ZwVYXE8{w_)&@#+CN+r0~wy=ed*FCP7*!ksbigGs8Witc*-d;tHrBoR64Nl +zDmz<%tT0DV-k^`vsbU3o^7fjGiG|smXPV?jzEI|Xi(5a1i#&UJ0IW5 +z;xVD@g0!>&2Zcp$NoI2qM8Sq*F#hGgTsP;vI}AzmFik#&CB_5e%>W15sj$e2qvAop +zAS%Y$ZP%*ydHxO41lK4C0cdhJAfU|PK6119$c|%oVK8?nV`Dug=8J8(*1zY(eaqM* +z0x`LZ6Ez0mf!`xx-G+_UyH2JnR@bwQB3>I*W7HM^HWZo7l$D58k!7{Oi?e +z(4S#?-`Y8FR|+6f_8z)?R9xKOdJv~mKQ#~E?RX>~&c +z-{#tM;dhoLGbYb}!5q!*mUl7#8K3h4gB^P~-3|mkxG{O4x)^SY3~V8H1<@Qkqf7Sz +zy*UWQ_16O$z4yYl%x$>AeIr94<3aLW0ZUSbd%bwyB+=O);!00}vMQSc$~S-R9zXb) +zOk!aoi!y9I96Qu!R7XYikQ0pKiQS-IyzY7En}<^y!GeI_NMbXx%xd1Qz`~@h22pHG +zE(i#K28TwKF9Y~}^Am~s-o5}FZ-WKDbCxTX;R+6EzTtBW27^-ygDF7xprz-&A`=Jbvx{%E``El)mO%A2y39R@z4XngIN_NebGYn~Lsi)`6wJ3aWT +zGz3BD8EjBY0a?HE<6sNm2T3XD#((h8q0c(VgAe4$$uZcG-9@B?spSqkk~#EgcNL@z +zT-{`cCmcWYbh+DEZpm4kOTlDi;pL3yE<9}rTun~Men9jKJtRtYp6ALyeX0@(2hB03 +z=(jf;g`i(?{D2cc0~&tNH+4nm)KLO8iox7?KmxG)!f_I#;6H#P2JsCJaHgQ;s^lHj +z!~me$;i6D@$?G*jbKfD3(U>-40{1it$G(Me&~?uPP6+fnw05VFhkYw +ztKjE9FPF3Mds?I%Woq46m2G;XKQSN>S;5<@;OzmiME#}N4?t^1KnB&{QQegeO?VQC +z(6d^J6UXO4$3aqpC|B_Ofosy{{s8Z-gND1CVUKH!#Sa0tj>(%b0wxKOb)Xu#^Z|la +zGrxMjLjZJbk$v#}4#xLlVj4i2fhywIkE5Gyp@9@bt6+~)P5dDN?0*YlSH?^rQ_X|b +z$OlK*%wu}*r$d~!3ERS};Y(xXn?d{~>MxgDR%K5Cs&nJdybK&Pbzp>LebM&{T)`Kl +zSdS(@6*|4}8zM!O-<$ztgU=Os^Pe8%rW+p2(s!dvXud0ezY%MJTM7^lgBM2qRTJC6 +zXSs!;^JF~jF=K~cR*jM{4-U&f*l`b4LmbKe&{GzFRlxDa4lo{VKkh|nF7+uIDd<}h +zcraj-ziJ5pXw{g7pT7w^GAI|c1mv9o6p8r&PrtKq3sT!LNXzjEz@AyeT?ma>%3^>f +zz!JRt{APcD9&&_~ibC+>Qq`&2CVQ%~U3#mxlPMJ7Mjg>D+JH#{K=Rv8IKKA!(#A>* +zX`j~p!R-n3s}Tiw5ZZRe%DaAp%pL&B3y0norI4vRQ*1eKcp-Q_EEgW|CBOX%QbY5D +z`~lpI6CkxWnUs*8{=Lx>Djn(&piNEGNb#gDnX(ICtWAjC1Ha_CdxVfV+N!%*pr1jb +zXqhriD%dHUxQ&Hi)rda*9w*J(eUePwm!Y6Uh1@9knCp_m0*%toB?A@;2uO3`{aWc0 +zC6E~b{Cj;V{G(?p1mIm3hx0hGqh$52h4Ze3B43c2{jxu^9KLu2vZW;cOd-0X<7)EX +znQK$Zr?%I7L1UjeoOR(_fnFQ^(& +zSz&=rY(>E&b3Y0f0 +z){Hfn0!|G5ax}nIad2?RbxQ1eT!n)arWdV_MJIkLWlhwno +z@X2nKbeFr{d;fD~BF|I<{*QL?gaiFK#MtK2C`4x}cRI&&WZ;=xhpX +zmQ-)s4)(~V?*yq6hR_DB^ckSm*w(G+!E9Iq%5RWqkAO>ES5=(j*S4nvv(BMOSiLKful +zieTa{fU!%#fJ9ikiru!)*KzldS=7|kROXuis=oZXZZzT}zB+cRhRRpmn%UbTCyk+APH&gz*79P{h?y7YW@Mp-L{Gd)i +z9+8@UBs^mGs387mXt)Gv84zoMjEf&Xbf|wAu+Br6h@fq}Q2j`NS%nF~^YWrT@U30y +zs)?mML-uf8kmmUX%?rVygOfctoYy&{M(~*Uy4!Vmx@j*@h}aVy4meN;|6VK5+i^Fm +zQ;N0q`jXNVu9^S%LT3GKnhrx@$vxkO;|RL*yS3Hk{NR~k!ykE_z9taD)b%SoJ8Mt@ +zjZp#Khhqs(iDE66Gv9W1_@LKjHELPZ`@K|67veji7LCUhfc+xM11f%EI +z$zbTaeWz-z9wR-$_*y~R>cfVnFFJ^O{$7#-ycqJT2{~)SH)a{X>0)R*5)MM`Up(j#$ljIhM8>aIN4O +zx8zyOa=&ts1jaG_P95<_W1~p9)Fn&{J_2W~UQZ?cbw+6ngPo(Qe01x+L$Xqf`tH>} +z;pNPvr!YM;Ii+pV53pl{&M>rX8bn6H>Ftp}eoEUJY3iEn!`J0J$8b_VFqx7C_(>D1gQ-$d_| +zb+cOM;1Mf^5>Z~3I6p3~pZ7Z@&Nr3hgM=F#T&1V##=e?gHe3E>cHu|-DkN?-F0Fu@ +zQIdc;mHCy;&Cytt7ej~uOlr6-)Y-xoz-<{F+|w!S@U7>XnX9LOV=gpgWYeV5EYR=>?G{Ea{1ghp(6!U(KmP +zj+1cIc`OY9z0-hXzY@EDSlkQc2SIcQV9@u_7t6ogLPl1$)e~S7p6%OzVt#7ngUS4T +zdE!HlnfbjTU?fcieifv^4rqY3f^LgqylhQA_u7a!STayQ9a^fws(X^x +zvY#k863Pq$S|QX42Xn@UV4UZ;6Ff-NjKvq6_klQYRsbuDiJ6TNO`+^0pz2`%b6vlr +zzsKx=S?_!daUXX2+Vj#c6h(rFKv&5Bg*uV%Nj}`aO!4Dzq^|j3;5H=s(B6<~5K#z1 +z6bb`rVc%9ke0WRKo>wI}Vkya%W;3l3Q9y4Rf +ze92$~O3(yR-yy5Gu41YN!%v`SELTVCWYZYf8WalnItLBrlOL%}r!wkXBzE +z4hz7)7_|umEXG8>11qq_c!$#}gCQ3HvO&rW7!VC&PK0q}GVEB9G6ul+LxL7mc`%UU +z&E1I;%90YG?`OP@cK4K6GSFYfSBLGHfx +zIB(!NasE6fxGE>$D)9b*)`u4fbDwrAC+2l{9*1Zqkj|C=%zXs^nfTC2*+yK0`n_y* +zv1~OIZd66@?OdwDrp{$J5Cb3`-owg*25Tq}*lgF5ZDn{6_YYt|Iu!DNk9p);au-aj +zO1MOoKy6~2eClE7EPAfsTC$`d1y+Ua9`s5kQyYZINO4U8SD%D0G6ZQ|%w#kU|f%*^7!b{Xv0Nt3#tb|M_oRN)|>zlG?T +zp1boMJ7GS~Cjr@9^ELqPfEKE1kga6|fizg?#jI$d?{bI4RZJne0VIGF?g#uuHQkL? +zXB+oI-+PG7#;Ib9LcKrj$<#B}jNe0W6^q`>@frcJwY;<>&k2%8k|FicWOXf;WZ`oK +zB4+Scr(NL6J&W^Q2lj~(b2*7JF^XBb&THBrlLmcMpO1_rK~(MXBCx` +z3yl6>@Z9*AVutPwhxPvqy`mYvO`xfvy{4S?Y!{ngOJ4%EU?4{I+={l-)4|nE(wxUAg2h> +zt^l^324at~tSvgn+R-@zq<}9VzBxEFB#0qlbUDV$=$S1V(4Cj02O$wVzDJT<U#(*(EWKBFlZjky~u*PB%Ij}j9RSM!8Oq|~f?4S3N%ppSz(kjCJMj>)f +zQ(cqB640$W8;a#5ExeP4;QW(=Hel9`%*C9@$pxO-spz2(h%{z5aIN`v&IQ`QeHqx@ +z7oA;r^CJv)K${^V#}M<_7ICp+M{>=t6*%@ykdpIjvZ~CN;mFNbZ2R*DgSwg7c=Zhp +z>)#hKHJqEuybMk3oht9DA#vi`M(x4^*=No~fj=AmH3?EM|9qr6h9XGMtNU=9Ih9P2 +z=E<3stIC#!*nM8nDH2XI7Q%1gR)U0-|8BmZF#(X`pnirR +zj~Ox&u!a4%`(vVD3oI|r0^$<*-^~<6E7t}5x~>7x(%Hz<*MSKD +zz`;@gAXd=Zj?;#uxqq#BdgC76V)#>@zK^+7r)&ux{zPgEnZdKlncnjgkUUYWK-~%G +z(RGGJ5<4^6sj?LZNX~FyUpeu|9x}3qypqFdvm2IGA-fahUp_>lNuQ`yqt;=lQpq)d +zEiVjBQRw^Dm|YX3d}D^09wGmwp+9CTtX)Szb2>SYry)O22HxN{^{_A^nP0qki%6ve +z!(}dW37vWuPmE%3L1_RAhMB8r1qEkqYU9$qCZ5*zL4f=@XgdI^j|n=oLG#RMEPk9E +zWm@OY!o4L(4G4d77LKaz#f#4qFVk^wv26Z&{9;?Dg3`A99oXFn$T$MU7IO&D)-^Z2 +zsg}^3X>l8i_5#EGyC{NgL1HC*=8R#dA<^WwKH=ftAfoeE;V4LRCgT$rSuKcu9eSnD +zx)MB~G4qz-3P_+u4M!M1#M8jwD?8M|vKF9!SF5bB4}Yrgb6H&zC}_B5awS{*HHQ16 +zQP8_R?(1IWN_AjK!VsFb!NU~=liCwv;=cXwEKSHrY;Bit20S>(o^w#bj5ReZKJTr; +zh^hTA7J>-XpznYE{Mpq?9K)iiJRuk!AbNCdN-v9wTJsC-v{W-`K$ivM19*V3gES%-w*FUas7xa3>Pn+AhK_4Q8=+} +z=gw(BAqLY@dEzz*kZ^Pr4AzdqUMc>d4zn@s)gelyNW#4>p3qjB{~H0>+nBozH;s6W +zMhQ*BV9}zb7a&DIft21yXD+xtj`JMc0|IXQ-Tl*T|9B^Lb#%a&s0=OXyE^n)k--RQ3h +z>7L<(8Ox7q`=G$re41WWd*KDRbO7K^25>uT`Q`o**hvovYr==d3P;-j6fPKiF)=ar +z81+LQJSg_Km$g7YOsQbk}2$K +z782aEe0d-AE@rf+j^gQ4wP5(rs)_o;BM{#vfUZ9eu!JYvs!CNy8Y%LXx&H#Ub%D+s-8(!{m^@O`g;`^l6e +zkTu^qaMRp(O++>u@nC>Z2AKxIEKTgR)>Ww?zg^g`(dA?N@em{c?-T>_67{jT&)7}| +zgTU>SCc>B{A%A6I$UzhG`td&b#;%Z|-!(;%a%ac@wCNzLCB~$CN%Xrr9HXZJ?bD$C +zi`)lSN-Ydj~tWl2>}uQpkCGd^UE&e5_V8r0_u$K|>Ak?1Ya +zyF9v465U|52Z=UH5S?hzMRW#vO%7@R%wp67eN?|shsowNS%+q3PN +zz4lsnTi1QvYd1W=J)jXt+&TdI{u>zs@qGkr0YDkgx(knvZa93p`#bH-^lN(&9SB}p +zS~6S%;M(I_3!tDN&FN$%U(bWf7C^e=aSZ65vh4hS{rAJV@5y>wl22!H^Qlv=B2@49@OV`&j6fBnr+02$~24}Y*n8U{d8fJz8t +zbIvb+4NRjB0Pyank9^d;f|JHkuPy^<@mQ_kj +z3_b89Sfd`uT38z<0U3Va?}heC{}rRj>2{dbP?n_hneR`5KfN^Vk}nA&?t=BJ0bu9fXacDG&zoUl +zj$=P3&Q#hDb5Zk^8Vr`79xZHvUj2@81Mz@V0t}{c4xc-;j@V|2yO)1HFQf|u;CN~? +zv9EnV!$Ei&2&BmRfg4owQg4v)H?|)L0RUxB{r#OMCvi(lgMcAOXYG9A3oI?O1CM{8 +zZ4_AA0YT*lK)?&bKgEgxW#ZRa=o-xm6%IHMnmgE; +zu24_&ldwD#0Cq|^Hk%-L%CQCj)RrJR)&U?bnZerW2ka>TBwc_OxJdTrYNL*D-I-V6 +z$Eg_VS;fmVkMb>n9`$6fJ{|Zy=H7b1m|r=o{DR|3Q3Fh8DGMl>u}&?R#T$)|`*})G +z>)8LrMge649unZi4X<6)YSEnuO##V7fRd@UkQ#HP&D^~o_RGO8*l_I +z3@LAYx$`JNCl_}um^`9E9ng3C3gr9vP6DY>b(&`eJ{UKF1XR(0h77 +zSA6L>GBrLY`3o4uSZl+*uZ%4}x3m_5Z-FizSN8+7^}7lHro`5M|JvKJqvqlB4`^8Z +z){krneY10tc&X`tti|+V2U0QGL0JqvLm$F&CRWY0o%5S8jiRFDY}W=)$NU>mEg +zH6Qvf532{xzDQ1FiJ8mr;(=1$`jyTtXck#voQ +z1QCb$w9vVNmhwY(FCu(e#U?Io=ae!nr<2F*Y+>mQt~04eja)mR7P|3R=0Cx^tO}Ga +zG~B#Ohw^^-`oaV;Bx(lPk9Zl`mudWCaoH=9ljg%+2RwpTEgtO>b^Sa9pKRTyzeioS(-=K+GZHYRp{YAO3`6{tA27}Z@|)j$W}T4uVYmP +zZLt)9vP&csiY^x^r<^+G +z8@w!sRZ^Z}phsydrp^&qCS8){=hv4)n+F-dl +zi{k;UzOd${`A+{J)fXwRo{T8yVHEf7OG;=E6 +zNFuNE7KZVMaP-+WF2m>v74?2jYlr?*@eb#MZ=t#%ugDF=eFt;h?9M-?Iho?yplq;e +zbT2U%_Pn&XLxHwh>Pk)Rv)cpbl>o2)y4Vf@~KqwswJP*?dAoZp>K{} +zTVXnPmP~%w`~93zNO>@udcGX3wM%o0S-cC8tfS7fSd-Jh1xx~agOx!AN!ieHrfTDb +zC~W0KhaeL>Av$WOxa`0>EsQiSz`Pc9C{M9-Dw_>I>oEOoW0nrB!GHD@Zh$SZ$J!90 +zOl#53MpY4>GJj|NPdRo`TT!a#97bz};xj#z&CI3rhSVCQ)?R7$N;>_h_RcSC&qDvC +zoQO|o*3MQr`0Hwlc`^>D=YP_??z{nrz>)1-~)g+PP|<+Xv;MXYyeqUT? +zVpqSG?987f_(;<=dbA0VV4_QssK*xB>#o(a5i;i3*`IM4=1Un8n^NCB7nZH#K^dbu +z-24#n5?=&eYhV@u6x@=*9Gy${0NLm2jpSE>-k)Zx`lQG)0-HMXcy&z +zS_!YAkixmvj8r{>X7|H{t$40Y|AdPlpm4K|7pqSdG~(^YH_vxz)OEtYqz}4zGH#Vw +za?T**i6`(mKI(z-g3@Ww)xBq`mcB +zdhFffuoa#rl2?iiNGTO7{slLeB8VLUQ@!+$%sVELqFNGnucmY^`(e8{dmSO1obtg4 +zj%UOGjPKSRuow0e7pzHHZ?oLv8YiJbd@eeXZ{M5Ec#2ha`$9O6Uh~DPvH~$+1N|C~ +zHdjSjrPo&i<3KnuAUFUfq2`2?={HD^Ty~FQNDR89$>CAqiw^vpi6^hVdUD1BdqoiE +znwpOQyVV>A+MP*2YvW%1@$SX*? +zJ1;eSd%h;D9!7HL7H5==bWBS#puI=2#w)Q7-}zLdT)Z~;?YxoeF1i5 +zY!?@=rz#LV5EVLAJJX2dJ~Eu#i)C9ur70JCBOiQcLdGlNu;i2<__EfGh>+4O*m +zR|PC}+v%G4%yLL=Xm`yY%qt{BgICGS!d!F0rbZzz!_t1o#CY*=?c);O+LI|;Gq>1T +zB=zk{(e{5XGK*$SgI#`IFT#c_#$)TDE~Zr;`ellOYea2-<_e>bX$*AV)DJcaJy<^f +z7tNHt^ej@kW2aWP&?!WZ?hQDK7DtQSkGy!#tf@GIJ>tW&{=qdG_h3=bz?H|Rab{xq +zNVdwJCe);;V~u4csUkFd;mGW2Vz?mmP-%&m>8$6{@>jt^Gh2dz+2(UYZX0yK^NJr; +z?gh9S%U5rku61ARgGqi#{KZ1C4`rXA-kE;&xIdhm{W@FzZ0V!Hho8LmQPS*1eKLF!Ld1OQDB0d6zq||uSWYWu-H(U +z2{)`E2dyby0Zm2SqXzfr2_-gT`_;(GUeB4#L9N+PbXxF%#ddotk8BcDU{SRZzmkP# +zL{5KD_f+kvItB4Kh)IXNDlT1?tcVDJVVAn9hYttyTfZ&;{Oqy3kyd>`&brGd%{IF5 +z6DsJUJKf!5jH>tUcg|Ybcgj1p=?*yv72Abh^fWLQ{|1jP^98mG8y1Xd6%_^IqEU|t +z-+QpTYim2o>A2gl`yn62t5Yw6tcvJTZ!;TnpARfW0IQ1SY3UW>o`%ApC41Pbh{09@y{diI&xG#BY +z9+jr!q5G__#y_2hWk|p8kQBe@BvX5>wEPbSZG6)WPPb&MXUIX=Kg+CDK#k`Dm}#>0Q_zY=4Aa^Q^7QjgJxzfw +z>8-kpC7QKUz8Jqpk~{SNUfU;@yqNUHC9c@*bnUqi<~gNBbf5o_K&dpe;o{j!;+o^4 +zMD*@6-MfiWc`#x20p;&9O!;~Jd@Cen4~FgIjPz7Sy_zQP)<;i!f4^jARo*j;jB9XN +zmKqMg=uyUmuGwiOe}kKbh{fDeVB)_SUH*&$3cOeeU_DzOt4$k?5Hj)NjgEPw=BeC# +zm!+Vk{*r{IQ9=en-tr5psVJE;QninK(yO1**H=N9dOepPUQi6(?h6*U6~!nFsr6{< +zMim(li=Ckb1=}t1p(#xwuFD7K7U81jxHf&Qn@yZFT&o6>qc|34lbx!vZ^z~U3bB*E +z|5xW%=|<@KsUqv0=+IQJA)VL$j3<>M!N&1qp}GiS$jLi_8nFO!#A>ar7h<;T0m6bmF{TVfwJ&hR3_`qx`-LN2OvJ`|rXurv;2;<4S6)>IQ?unr$hvjdB&= +z;7#1X&vG_ZH?41tROv^DHn#Hgmb+2LGOozh(i^BhEWAQIA;)NOjyi(xE;p+>Th_Sn +z0qZ`zbaktUPeMV7Ht)@PU*dD3wg18heQHdm8p{jj(+U{JvxyAJQ_$d>YdxDeRHF +zPuwT$Tk!RR*>Cic;0(abTqxD1-0U_sZI!Ob09F`PN|e}Y|5w*%=|Jv*mqEBLBNvyi +zPXgM8hS1lH9M2FIXi75V%fi=W9`5_Fq#ruai8hUy%%`tC+EqB%D`!r0ah?6>aQ@7(b +zI>2{jH?Px&Dm?b6vS+BM+2?C>CFxNfR!C{KJa7GkSD0Vb>ZuAHz%6^c0Z-7KFqL8I +zGP}PJ;EFAo5sU%rDO2uB>ZaiV0j=yiUKusMDqji}aQwL#@55OT732`2uUwG)D`%(3C>u$o&U)RXqsN_T3kS$Qr#Az2| +z^B7m5kx@q6Y+;)U`i>VpUPaF!=Ph$;^S;50lWX~|$a-=p2ikqA_}EMSwc`ILTcBgU +zM_?JL_{jdKQ*B)K)t2Znngf85iF5Oagik>_O-mc7)UP$4-iXRz+dm#gwsQyEWVdu^ +z{q9F;78OPb)|1_3V2&XLt{R6Jot5g0qHo%R?R>l#$;G_dSG +zSTotzue9N*)XiY}j_=KcGraWY)zU29qdhycE)Mby9w{xkDeVuNQ8*}Btx)D~vc5fF +z%|1j-8I1<-i_!7qm1W=RAT7X^NK34ZcD;C;GS6GUp_0ZJ})F`%En{ZkYn +z(}J?Y%i+cS_9v0s5N&L~*DUY&kS-z}?B{aNHrp-fp>XwO#qCv$cFCfkPt +z&6}w_o~*K-7mQYKnVC^uMa&}Ae%461;EC*Dr3o>^jCDWcM*VHxUVM +zQ}I=lkM_7ETO8-!h`aF({^XL&<%bQy=^=Vk5}if=|a{e1B4JXpOCeS3!P0WE=ZA-Libf!?kZoZ4hY!B$&VQ6ToBzW0!u` +zP3HV?$xpf`wdD7s#DpX%#Jogy&r69&w%y`}nh1V_7Y&{DU+=)twsHJ&}-e`@)vRfr{IF`lZnmB^}tL9OR#&n71 +zAN!wcWroKB2iJb(%Z?aeajC@gFgIQTH*eDineA_2yg!|JnPwKbq!w#g>W(Uq`y7X1 +z*Vdg9HynIxSorn>#%d7n_XARUC$V_wT;ZJ)_+tGT3=?OI8Z|Uv$tUIL6p>qE>7r_CNR<@biC+Eu2kMcwx0IX0%RDc5iW%-aB|e^l +zZPBOlu_SQ#ug)Pw{%{`LtZn5WAv#s)6y&9W7{8%dzleu_g(h!420H*D&eGY+R8V!1 +z!XgOhqW^uZBA$$v+pra;+Hs))!-^x+5cMZpaqh&|%0uFs{x9Tzc^i|2^~Nzal#hIF +z{3k$m3P9%J`>=g9fzF`C?{@TJbioZngW`pO@8TpZ=b;YNYLWI-1`H+(ve +zU!O3zrmpE^IK)9ef7LC{lm65>Nn8!DZXsz9dGwS)?Qk=m)HvHUA#yDSpBlGVkXcdt +z)8L1yfRPU(&;v6|oVA3v7^YQ>=N4X&L0Bs%IIepAS-VLVBG{0KNNk>Ozn?t{>c8=+ +zbwJD6M3ecTVPtcjcB$|hGXw6j*^g9hvB#o#lu(X +zEhQ=4d00|c&lX&9I={F?pv3IKyc=|C7%|o%JI$$@{Mv6J78^jW*??3k +zd@*s?AV`p<_V(Gui>khpg^V-NO{{w?8BUge1wRFzTH;SA1CkgYH*& +zxU&jY^s}};%krh@`AqN5glqQwG1$ZkYk=((5%gooG!_|g)bQV?teW5Y4Q`GyyEm5` +zaBn)-SMdlQ;)1UIYAt!6l71a=L;{a@cq_mtM6_o5Ll&Lxyun%pj*>%JCggxrc&VLZ>4=nQiC +zRe7l~*slh5)W`rqwqdOiJBOR*=xJ$+V(Pst(}cz;uRY#9tu^|+oqg=M-mVcvZhJ@} +zUg!dNDhhBiTOWZCSgYJ4rJp4r`J(25g+EVqSb=In57x&f +zL-w|E39%Emr7s`PF!-<^I$sko;o7zGjbaJyKhavqT>v(!YxG}OZxT(NC_nN?wrcW2 +z5)>ZA=EEYvS3kq?84N9I70_`y>)s)vrR(AQ!-X9Ev?5BRTPxXW(nNL5*wDaPu6AdbiH +zNCDI3YqjjV*VG=6#|Sp?^9m$rz!bnxax{;g4Z6W*2+8VGqVTm0x{Wqh;h%75>SQ`R +zpfxxL5R=COTZDWHV>D&sJw(yplEFtGJ)I@97tJ?}NsBzsmFvK}mi`B0N8d}$uu@Z= +zM+68CDTZIZF7WWQdr0&jvMsQcfaUlv2Yb7wf)%nrk>GLfv$DwbXlVDqi{@nPP8-;c +zy!YDl!CtHN3p&ujaR_psJ0hI4s(tj)?s{#>vL4u%TsHo^-UJhUlpezfMmMb;v1GjW +z5y3m$i%@|g8O#eXvYYJVFY19?gL=>m#M!HGO1|ff?WJ4BFf(q|@U58r07YaWgN!mK>7%3&~y8`IocN9s@SLaI(g{y_1)sbg%%24a5(>FN$1=u{CAMb~?Bsn-1T~+=rRBR_?(3x4V3GV-~8)UzmOp +z&TT#X66rDAPe}lV)=;0W?etSx5Wi4(X;+E1D}z#5u%M|DKY4muz@hw6nH0D| +z0`I`*Q2a1QD&{a0=1&M1l)L}V!$a>c@?gN;J=nX+QkmT@bwhp2=eCiB9>~Ggf!2xr +z)AZYRlrfwgI5#;C)MZdd7wcRB4h&PYC5$3$TXeF%EQ_yS!kWD*a97Lnrc`W|Bp>Ct +za#^>E-nRS(Uvn*Rf0E_50-W}J3$8a97dTlxJ$O9xAeF&V8Q&H3DPvEkcdJd%#2quF +z?ZssH_Qf40VC4Zd+Nmilh +zPcq$Z8)B7aWT5eLT!TQ@SHuOO8EnnBAQ9#}nY$6igCBw5h#*{gX+VyGb5$qKD%!Su +zaPZKdbt#k#VmhABBQ+X}E3nyG7MbNjtrj?x!;M!3?2-)yd)2Bc3QxK)S +zaR=sJK|PywKzE&XhAy!0*p_ei4hQ7=h=0aGqOws*n2zZqXYi%J^oNlb98U5* +zrQpoUX6UMrtqfbj00(3smo;;jJL5gV3xzp2J>6L{!M}ar>*K#VB1LL8Wsg6NZhava +zOdgyv>VS7i3x+V!jNSc>8!T=q-e74o-hAL2;Ca9k63IvU{JN#IBAu+Nd_>sOJ7f2R +zf^#mLL7L3J&s)VCv+>1>(FR_o#o18J{YrfDB-d~5MNut%%1(T9ln{``Oa1PPN+tU! +z6VE&qyv43P9o&WNH)gl|KN2vyg#L+uahMNryc_x}SoQ7&>)>%%w?L7q#_zo6shMDiEw#X7NgL|Z$ibK2l7Hn!qIuSzKa+{D`hKckH{6l +zZ(6;MDCc>Ga;w=<)b&|pf?IPic37vKgEA_YGnu!Ibc?o%O9Z*ad!3)gn`)azMSUXf +zBD5)wndX_Y#C@<$aMb?O#wd-Y0Jj8ev>`3F+#K;7DN06_FKS~y8tJg +zg-S&Nx(z&kn$^GJ8Z{~}2{^%U|2Lg&e9i>_?56(baI8p$_t{d~-^`cg6uJI(`Wd@)?8^b!y&n+@g=HEnE5bgx9#g5qhTAF1i +z3MH2F@Q@@1gMk7&fOWp&&0xU9fGRlAxy2Y#{OgxWO +z-4O0n>J-8LL|Ca)nmKmo7%Z*SoZ4dHS#=7X;|0UJ?k!Yt7~g7(C-~3*dA7V +z2mI`OfXB1zyAIc6KOQg@{eKJ7%yc1Ech)!sB!6gn+^{p#9TV|NgPIJAu?|2DlbY3NW^p<=lh+7Apl1 +zh=jLSfHyrDG?dQL1+I1co_IifsZ$HIe>;GHvNMGF-T->bs80Qz^Ol`3ZF8{&=#&eg>lG{lM~!-823IQQTB +z^LG!aI|>1un6xUh&ur8|iUY~%TV8%bJ!!!5@5(#YwoREPB>x6g^Q@kR?!@~&`uf4= +z9dIBT9mgoM+kW$wb`Rqo*#}}(>Li%~2Tx=dr6&mGTpR1$MOe}DrWlcxYrFr^NVDFs +z{VyYJGTUfIoV9p)SEN&g%YZxu!mk8PPbDmovi7Fo)=+;r85P(U5n0_h_=nKe#t#vG +zq7mQ`ShP;bhJX>-Oh56%T*LT&ZgI0)G*UP|a;8fC6e5yCKU&bjVLo*_Exk*AkXD-a-7Zb3TNbMF?D-lJ3yYNq|?xQOuGDKkXcbzY}DXYyIH*?tqY7o)GBs5}ZU60RJCs#3y%8FCr4Jy3(ZK-Cve7@r +zw+_Pqd^XUuU!5(*bbUC8(fhw^LiM*he!v&xLfiy~@eh#T42!=z^q&W!RC>e4b~4q2 +z@apj0cz`&J!^a+3omsP_?50$G^y +zi@%f$y9#^+>Cr`kjumf!?%2=+szUdkHZZgES`eBH3&bXpTBl1Z7%b+=J59CeZv5tp +z`-^r_<9D)NZST)u>@PR6&9gO}P;X=X%NrGF% +zO>~#Rgu5hIw)U~M1h?grdzI0fzNnLW!Zqu&Ge`f(<;3oz$F$D1pGwxc*?qF1(*rSs +z{PI=HE-F#2a=qzsf5VY1p|A0r^y;`V5Llnuk^*zKTBK$bcPS2jH8*|!tc9tA!J$>5 +zSl5S<->;%X<@tum>cMkeY(uBzEz~nfGMce;f&0tpSwXVz4;PFgHSJ0jsyl7e!TCp_ +z`g_I!Zo=q=$V%WsfTF!<)Y8YK_fL-JZx8hMLFJj-M#npffU?<~F1OWm-U-2-{M#LJ +zPzN6{Sk#c_e;n}9zWGPVfv^M)^=X0}SHFjwC3##A{0>yQ0sQ4*R{zzY(h`tW7=Se7 +z-T^u~7Q4s!xJwDpq5%P_$KI-hDZ2xjK@DAjmKtjy&#kwy6Fz8SAo%0olD}1MD|Y +z-z4<=(F4T>ABUL%R9OB`XQ(zA30>U|Tz6VBt+L&p7%dDL?TAE^L4n{ +zkt@eN28JAcU74BcKY(Yhqs~Yh&mB}~bPNY0XzO@JKz7W^0@MpC<9^Rc;8UY`UZ;yP +z%EHv=p|$}o=k>v!o72Z8;h#qCzlIR-rJ|NT^adyaM0_>raL*(EXnhz4G0@v{-^OiN$vE1Gw1(##t8&4Z=?z1 +zp8#neg&nrVmWnb;XAMVXN>DO8`%HU_);nWN;{7P8aZ!E;9_*sEw?C^B5;$g=UFu+8 +z^sIXqx8pN?uTHqLNdeS3lWUyDKSiI8Mto4IA^ue)t#4=`5HZJdUG#{(RIkK!G-CNE +zmQ$BE&QHg*lHNkJc)6{<%%zB1IZ-9gwdRAI^=emue*B={oNl>NamOu7opSG9eF%J3 +zmIuIVBZ_3jI_+BS=zhr4dVzF(R{T_1tGHFaSciGy0CiKhd+5ieJTFC$hFTTScG`2d +zM~36~+Dvp!ra8~5_2;Ryd%(ghZ!niE@XSn@*wR7bM$EXP#WMPkaHj#CKGb`ybB?nV +zGvS~_HGT?5wA9s+etp}rD5s0sGKYVVAS2zU)aPfIMgI?J)c@ect0G-_{$gZs|BQu9 +ze(z+sp$bxpe@zS+pIc~^5E}3so*wBF?-Z|@U_KjizJI#e+FN|$(tg*@{Tant7$rV` +zM)A4+dlw{wo&;%!s{2`w@R%_S3J#3{2ade&0}6 +z<^6G$7kLWuP1rS!KjCg0!ms7A-1NIfPww3_$G_jic0B}VeNFBB7*w!{87IL+W$#wf +zeuJZ{-hgYaGDDcSjX7YqeX+Lt?OjxG7cdvuiu}TjEb1TZ-ZH9bU{6)KZm5JU`F7B+ +zTD^K(A^P2aGFIF*!gwj-Jiy&exD%my^+>C9llVaIb&0e@s|(ZZ6IO4@gGNcj_DcX- +z&IV}TKyHA1~y;X@NYMt~SRB_6>{jK9XAZG269&i|dr +z+zIa8PG14XE=>8N)eLi~k-SVS$26|@gm4ncTz&>Q^cDmF2Q>h`1A^)#t+uU(1bJRK +z4WzTAUo{p-;9CTW9BMisu%|(?f}-?4^oP*p;&Tu;R|vQaV4(~6v=CWSj4Cpg+dXD$ +zeTQPY;_p% +z1V~cu_kDI^_r=4{rIt(URgR0_Sng`LVQO=W%5is1TA`uWCzR~8`6x%k6Gl{OGLSb^ +zPm--g=1heJ$G9p`@2$FAlBZU)3GV8YF5^}3dD2~C?g9DJE8C}5xAD)&Rn(;;V90UL +z?O7gAOFuUwLDpCpL`}C-1<=W0(4zY+XPA*3P5>e*`OzsT&jF*k#ajZqUy +zq|ipSp*Nc7*$Cqq2fn^U_wS<%I5DTuvM)J{Xx~*6S7&3F&%lD`#~oO8?FyN#<8}5F +zIgTO@2{|L!?b}qH(85rUz`z; +zCHQGGv_^2%oZjlVt-8Ad-Jm5JajbO8(U;-?TQ*DL<)fZPT6 +z>m|RO6N9PzbtM(_sB64B*9sFJAL*1*AZwk_(V&)_Jkljnd+`F3I1TY_f^=IMgb(}7 +zPQJ5I6n0@DD)VzwwhId{Nu4qf3b2PEFDZ60yj|DiR|b3Rf`M8F;m(3T3TD}>6)=Q9 +zVuci5>?0R~v^1yV%o8Quq3Nk^s_4zFbr&Vwt2@};db)le_C*eJQPTA$JYr9Slqu=M +z&e#!NLBB-ef|-}i4sa8Q@m_jZL*-f-CQz4(I1>ITc+^8`pBrZPiTsO^_52K#$WBxF +z92f_{Ocq+c +zP^}@#n7nSser%y^hfes977+H7qB8@ufpmt5;Do99O%sj0>9_`GIM_E#{yMK&_`U?J +zOWc#oJ_ZaLpu#!>xoRrsTZV6m7@wvExJ>TVzeaRtB@%hexEHI8fA|)xh=6_Q`Cco! +zLAS0quFOGZ6`)R;Es0i9rE$$OVa>`+8>F1?sQYGMK0iLlj94?KLmX5S=J)h8=*My> +z`SrZFMn@NZPA#jGA%)|m_hX91899t)1Q4n4Ujnqev+xh2-MG&~!?lY{#=0Iq0iHS& +z?^w+8@X~AY$`ImBK82L}V=LV|r`)O@=0p@&algU~G_)`g&Y^ +zSyab>@*v|@Ktq@fAx>Y^tgXb8ZZ1AkOAz(G9y5ZJhSo?orTK0-nEUv1RB()jodC4* +zv5Uww1H#7qH?fE**LIB$Cxz_caoQrYDSzpF17>ECrr@jruwnR28_ouDu=AkIAG=mO +z!8k5sRRhT*p}-Z`GVbo_0V`50%we6rJ1r+^{(R2h1J8x6Dej(b2WGtdVsRr(5#aR~ +zH}r_q?3zRTmM@}wd{UtD*j=j*_q6Y$HC)a`ip0}XGWH{Ba~>&V+u4MMLoUNf-Zc%i +zg;RAwWc2hKFny>Nw6i?D#mz4SFi@GmOV+Zl!&-1BwW$u*aCq;G-Yds*)FK~<4>mq) +zz`q0D?NgY7%WE-iR_=USM7qUtztLII`5DP5+OilYB27pxoo?W7Eo;cJRqgBQ>UyXg +z7gxs6o;Vl(t3iX5*gVfM%OvlvUgo%QB=ZANQcI}QdubptP-GSfX5W1X`|E&J_7SkI +zwgr{}ZKtijZ@~Xw$m_ht6Apib_vsq>Tc(cfB6;R_IyYbW`+Z)!gVI$W_A?P>T0qsB +zVYxS<3H&s(4UH(Pqk^#JyiPp}IY#4t@@q{Z!fDigB6~E*>@C39r& +zyc22+GBsm=jj0@s`GRh}!J2yHtFFV^g4<=!udw47%P%<(&@D0$mOj0T)*0^&j}A(0 +zdWKRyU}C;-uD$rqrEa!oJMOc!b4{mkX6>OR2fGA;6I`*ve{ZcJVMdl#P@A~`-`p(f +zitT37Hz)Rw=xrq_wX(bY2VY(A8$+GKv0uJ=5~wY8*mk53vq2%sA$`x_ONyVpx_s+! +zuL<83JxVvqYL{W7Nm{cfxDw2o*=$6WO+GAYMsZ8KDYr`*zMbGK@#qni +zT+&h3+bO3XRyXs)c5`ZrB6f)Qx9FbkPY?e-#@#s;KOrSHc<}>ZR +zIlKYdOHr3n+eeB{JPAb${J@b4iYqjyOC3Z67bia`&i%iT)I%Ze3-^w6W!^Aymx#|L +zB-Teii0-V1FeRpm%;2pvX4JoAlriA*>EX@;8N^u@D#_ZV-~QpWC6QhEWL_t{0COV} +zuxw|6)g$xR%8Daew~eXl-o44n-amf)|FP6}-ehHYNlLC(ySOh2etNX-m@)4AxmKE} +z5W0z+;ZA7S$8wdtW>!Y`JnV>s8FEGj+J7-^iJZR1a3osusdXxv{OOa23x({m*Fmf+ +z=!7@dG&=jjJK$CnHfwbZU_49^zow7ct4<0azw&5q0-rmM36mFw+`YO5)Lxpg<7NMp6>S;wHQ +zAY~&#w+Vtcz#@nJ{f7szdl6IWriaA!={!Y-F0GwTxUxTS(s&{UtT~mMOb>koduroz +zEJD}56sx8&)}+!6^bdutpROfcK0PFAEPqO&3Px<-jc;BPd +zw$a>+ObQ;Q7Ml5EX1uo?b=@|dANxOHcLGhv^s +z<-&gDwf`m_ww}7@X}+P%4gPih7Jh*&^jxx3Fw4KG)Wm^uQ_#S4)S75%3{aJ8m}TRc +z4?U?w;NXYBN$*1#+=Yhsl<>cNyX`*aG&}h)u19ayE&GvBwZ4Q@xZ+|<4xtZr`#_^z +zMM{x&mDTWQ715kWS6E!k(e46NhjPm6weNa+ui1UEtG3{<6h$25r%w8Ybf;|#kTVf8 +zPR(;1jJF#0#LOH@$ESdZsRq#!#OL8dc__T2?r*zC7>@u;h0(4q1(V~>&ya=Uzro{z +z2XSr7NQS_R!qj>ez((e;4vj98;+hAo*~=DJS^51{8Po#IGSnU(V1G!7+*ldZ4e8h9 +zZwlZW@f%%Qp#V3#Lm&<4820}#9Ekbi&Gy;G_;hJ{`T~zx;+L#}k(Mm2Uld@^B_hqK +zd2al?-(+es(X0<+M3!-G#;{5%3vU1p{?q@Bksb{`#Y@Pr(HDYMo|fCLM=1cI-1dmqIckb({_6|U00E{A+q)15@wQ14UkqTa`L*XunHYcD;?$DT=`c)C +z98muj(X8|O1uSkq)#-%Z)xM&4ek}8YjLYBG`|XE!HSNh;t5u1pf}z(ZrWE5Hn{^El +ziv4%j4sB&!0MhCVa_VZG-B!HmxT!Z3AiQ@znKDnb!3e<&*jHH{fL*sQ8Z?YXfxAqM +zXai5uG~V*R1Vkt=6xIbAqDNakX{EWA?F<|a&8erBYm{01TJ{^bI{vxOGFM_%vlMA?-=cGD`o;I=bNHC*iCPXse2VQra +zVzO)T>K8+iSaKcuMycRh4LU$75Dn#q>1@HTisSs;Kdh34Dm93f4_!!>QXAt!)qPZ* +z`CapCKjF)qhb51HRlAM`~9qvsiATsWPktvrfxI!@)uD0?a+9qf}+;GgG5 +z-0$wEd=7iUZk!RNznx^|AX{MsXN}FlMt~PR7E$8M;+|6lCOC9_~f62jim_vxqSXp!*<@hhxrZc%Ct`- +z{hx7ZS>p_gFG#DNNQ){>ODz6e1=HwEw3>{H%1U?}QF7Q2IFG9#3+Y0iWJ!{^5Ox@2 +zs}aewLh0g-f4Y4Pfn1XP-;8&678@S3Q4ZKi#&7V|l1sAb2u-WY`^?%G2F_9uzZH>z +z6og=_X?*gIM(62bFBY=5T24{)vr?i=ikks%GUa8I+JV4vUOS=s((Hew^op^x8$@4q +z3r_9xvNdbb*{~K#h_$2J`wik^C8J2QBe1i;VZPn}A!nlG!d6KB)#K^DbtuAReM8^k +zMoWvA+eee`Zu2aOU9sM0i&EtiFD~}`DVjg>|7=#dnpk9AckyH@I7#DsxtTcj71r*^ +z;G+ri)t?c%71~&ch)eZ7M?aUB12`0<=1yJQ+-mGQ@KET3oY^|*DhfkoOnJag5deE( +z-hdf>-4}fKDBq&@^e4;{j6A7@r3!ho4@wwi!(3ngS(QN+GAE_JY3@7?%y(h33N43G +z2g47`_yWE4v!Fl#Rof~ZVQntJAjNMvvDh7ixn%9XkLjEId`=Xy>YL!@06Bai4Ow|s +zWG%>YQ3SlJ`{UM6pkzl{{!3NZfPzLUk5BKZAv^2{Be|Q7_%+a0<(P!NbEcH$O)1HN +zLOvWRtf_gGlKEh}1So{LK$q%errpsui|k`7nUa6Jymq!X9k7&Fy`B0dP7y8fTqO@W +z5<3_`xRb}r{KskZWRu&bGFNJw3DTw##Z4Mmt~!nOb4Qp2!a&j_>nfOnLZ3=_iDb~! +z6*V?Aocby^E`Fuc*R4WJVnfn&i|I@>zzfbvJooYu_nxEuZr!HH8nCrO4A|UzV`@CL +zNr&!q08h=z;h+|SBFi@h-c=TQ(ecNWj|xLeAB=Cx275;iqOJpo_P@Gg-#a)S6@jqK +zapf=g4t>_RIhH1BZrbXzq@m&Uh*-E+=1&;d{)$bqjs}WMBf5JWdEs->0$}@t-DIHD +zPW^wi_T}+VcJISCDWyfSmKdR=NGoNTQBi3@i!E!(mSqygKBIanyQGv|sW3#u*bRjd +zAtB3TMn(-|8AHr4+wV+IzvugXp5OAmpZD|n!^e#KoO7M)T>H7M`+8J+@8$`WBRS9P +zYB9{Ex#nMK=PC73g$p4ZRud2<+u6u3@tj*={EOWWRY$`Lj_Ae6Z8%4xI>xW15MHI1 +z*_@yzZw8Di>3ptaP`w}o(MhpS+wZ;Yyak;yo}?w&Whr{Z|FepEd}YS+^#g>3u%Lcq2;+v +z+or|V9eB7AzL)i`MRbGL{X4TOpRV2->3P(81RSePNnNvS-s@v6{XNpXxPFwY#W7(HYy%ZeX>+vID>u+VpR2Q +zqf1ujNNpSU$sy`zZ9Ez24=IE?0%CK|t_5*ILJwCT9;&Z{hIWHH?@t%HYD)DOZ|g&s +zCW7d9_$ndX0~g61)<61JoTNuG5p$r|>I63CE$eH01wO9;5?xh=@@gT$Q=uU$Gx|Y06!l06YGz};vzHW4no@l^XPffl +zBG)4~bVKJhBNTN}R<-nRFfIRcRt}GvspqyJ_Oy-06qC+l9a>X3*J}BR{LM%b<_zaY +z4#FNZNOpX<8RWc}uZXyiT=&sqXo-mX*oGC8`HoeWu2E4&GfS+RCDjz|jvnk8=JkqF +zs$-C`n6TlBv)=5fGc~@~RYn_5F$y)5;mkSHuQxoZI;s;gtP=wDXWI@3%_T-gvIZ#h +zsP_J%sN!ng_KOJ}U^n=inu`iUk#5>^hpQw?78Dv#aaLtkJuL}l3alG;HS<-BE}zQa +z>%>W|>6Q<1k-06guzp9o8GAm#Y(_A%BPCx_+}Nl|Et6$vheHKCt90Fr==^Bi4mmv% +zF>I#6Z@mr;^QJ8MJi($fWdl@->UYNE5~Py1R8t4kMkxt+E!shK?x*9$ag%#Oe8N6F +zb~GrT_S2%b6gHI~*zBE9tE;`7TcOWuyboTA19qcT +zv+S9hnbQ-+x?QkJhw;hioB{&PPt<8%&_l**)zLg(;kcak8sBO}kXyK$T1;BeE(AJk +zbR?7#2wT2;xCaq%)XvJkIIg&Ik!)r_0I#A(aID3QCCb?-PlS=Th}z5wgiJ7`7rIksK9AcpRI9$h@Uwn +z)R8P7`F{2cpX@t0)K|ie#vEP<)2o(n46@KMrAlx~9N(&2&fmAd(Y4h2tVp+T2DN#9 +z5BFh|=G%^h#n7oBEjYE*$Nx+$EO(hesT1b~ef1p?uZWvmAQFK)C`R?x62LbYLch(NI|1x+`FB4Kh4p5XKFuwUI&U` +z<1=+PA_w>ezSWqk`Ca`m1S2_U!JfQD)KvfS&Z3?=Nyd-xiYAI0Q&yMXSspp*sgJ&7 +z!|Hyr2L8P_@S0Hen?gz7;q6IJW)uzllt`gn{AjddIX{FoULVBfBFY|7X#**Dd?)Ma +zvEa`OnaT{BtSgQTTXRS(b3!4$ +zpU$6Qb+9qpIzJvpZ$*S3^ciLk`{p%(VT~-`JB$_9dvnAL*V@$_h*7wB;%6Wn@Gj1G +z=iIo?=w$o~j1+!hylczlx6hv+>y9C#$1E74 +z;`o4V?P@T+5VKko{S3vWhAcHa^*nz%E8x5g*P-d#n#X<5#Jm*|yzy_2aq=jV6o$Wy +z+!>ImKUX>3ZAAc0(T(tNAX=P2aj^`rek%N4$FZr37*1@9CEZ(JB +z4}Lp^h#!BV95eCZv*(@<&t)YDUz;vUs)JhjIx2>+AWN2W^lv6-OtMtmGNUV|`1O_4 +ziK{C)(bfD>y!53VG((B@)FE4>I~+OUwHUn-ds +zX0LZ-Z`Tc(bE;h~N~4H6axyD}rla$x*-IyC>9?|C5op%1#F?EU+O!;TyjIbGuQzA1 +zD|D$BXQRE7wlL@xcJE-{X%Eg}G|e2$K#znie`Yps_p~zgCU=E0Zrw-g@k= +zFzaVKB%geQ2h$pZxS8~*`w27lHeUEpx+kSgp`U=L{+9L%H+^ka=*7C;mISo~gjBH& +zzq9hYF*3mv$7T7>_Np+d>&WuriuHajB_M}gel$9!C;>A!h0GknB^eh6ynrH>s#ZMv +zQmT>0TB)AqFFw%4X0+6iW!;u@Rgm5M*D#h*?R-6Kc(Iz#X+XA^k$A|_XE~F*6Q=D0 +z`PVpojYKi-)DF#>dlsjBIRng}j?Kgw?l73;j!x>QJ|RD9ES$B=-j`Z?I8O)DO(0-i;3@KjSBGcX>V3h2nt$pFjg8p+7nfuN4pV`{1D21-s^eNRxtxao(}7?F|V6&%X*%p>6k(avNoONAC|v#g-~pmL$B2~#_P +zZ)qNG$8K=j(~|J>#X&R>sR`m!?7P_aa+9B;a!13(IcLMT=Za&`$m^n^h3!J-`{*}T +z#M~q^^hSY%4nm1~l18`Jp1UzJro!OeNAIbhX@Ny63_j|zy%W6|LHpkDfiMbGw_Vuq +zxfXF(H*}*axXjVKQ5vZ46FRou7G7GQ2_yGi3eF_t5EcnYgP$=BWEOL-H7rEukP9a- +zOTUZKO<_}X6hkaHHB_{t|9;q43$>md14M3(*_-DZ0M}n0Ii65|Bt8=z((X(W%Cp4G +z*Y$Ew@*KY|j!#k?(K8*=Cq*a#7B^5l5jxi6OLRs?Vq7@xD=}8RpkBl9_;6s*8zW|; +z8(e1cKHRqvZ~M-+BvHOjZ$p@>c8FEW6T77a=~W_BImC6JYaG_cTM11qEsq(a1>oE# +zGEG$XA^?@G((6XZVS-1jo+Ey^4sRk|&)^@Znx7y?$LLx$%R2H7NgIpU0w5+iSs(20 +zqj#fFaWKQ+O;B%Y-G#k_YMCMS>9mC6FFyHK%I7L)m+;&MBIRMH1>@@(zRyaDM$49j +z<$o5Gj2UyW`vW9?7>JDvS9t{6LJWe_h%O4 +zW6DY8(dE8XB4zhPpt6B^$K}q*R+TPxVnDUT`-E-n^O3Ehwi+iYY{r6()buJAl*t^k +zWMkB#O5|K4B}1ds)NRavX@qSW_`)7h>ZSRdcqEXguRMuTF8wz9HaICMpevJJXsTA) +zIllL?coD@5_8v8yh`JMauC()V)6h`zo~z!Pr8BehkJxD?Q<3973Sw^yB@+WG;5vS+ +z-j4RVqk27vlHU2Z`nk)18{S>Qa0ARN6^?z5g?Z(|>afS5EoX(H>}ONmD}T6fpi@aA +zkYpcdJS;Cq^BTlwq4~s)E*Dt!-{l8vY*Am +zIs!PoZ&gP9up3l7EXY}w!-$R@LgppaT8#yvVGl}qjl_ZtLhgAdVqwAb+m}}c)6b68 +zImC8i=13{6Iw5zEx@qD*UPdIkw*d|>(M=5V3JOE2%%S;TnTf_fL+{{J*3YB0p5yn8 +zE6L;J4N&tUz;z^%L%c|^sO>Qtlj}OOn9eu0QHL^WNF9WE-U#Cx(*_sJy8^p(Wr*wB +zcc}C${(y;Fh#q+b1U=20Fg~%&ZB(o>Jz2CCieTJh#!B?i1UQ*bOuY+B*hMd<4uDkVz)|dyeanVT=J|H`yUzwTT{T$~vFI#B*LXiyTvV +z%;l=L(;drWVUNx)u!MS_h(I3>V=zzNML^I*2{r4H31sfsUU+ke&fE?{zne-UKVbSS +zSOqg#u1P?k>UYV9qd}hFr69Hd=uLlSn5}uUGUA2$y4BDp2V*9Oh&sJX6>=~0xU)P< +zj*&Stu@LflSK-aE)_Y!L(kJH{*?arFNGw&Tt5rN8atwJbL6j$Q|NSC!ll5S%jY_Sz! +z;x9D*O7%Mxu?14yefM1iX4(ZWBN03nj3_nLQP!q(&PNW^^13}g%txA{W|rqV_}6T% +z4eoV(Dy~SsmKdO`lG`py4y;z0UQTrJlo;-;nx{(GR7fVSzn{e$!IaJn&S&&Z7=78S +z@M^9xAbr|-ph)kt&+OYaT~7&5PuuFq^77Vdz0QR+!U%ij%d@@hx)L^llYT39FItgN +z=U#I8uXPj)%P^6(6-&YgmOrJmhSt5-vadUki2S*Vyw352wze{ziBlw!Bgehr+WPes +z62W-P47*i%x$Y=2@m?@qwwo;H|6n~aPO&EVHX5N!M;d6;6Por18FaAa@1SgOFNdop +zhr{&g;)*bI)_TR5Z_a51@ntzu|FshSlX{=FBw|>>E|#dbijd)FsZ}D7d$NlZC+&NB +z#yt5=#3}}HEx_fP--q#=#Cjp8=db8~uo>#*78383j9}D57g^3lxd(s>AN*l)b_$4U +z$hr`_mKS$%f$Px6?eW414&^WM{FS~aAo0BN($Mr1F;F~_ZZXDryHy7X(n0eJZsPIB +zB3``vl?r%D5SIk6$Pi={{fpp0j|WvRt8}v~hM?TQ^JXI+OQ&Fe(D~Lk&>AU?UDa+~ftI~SimyM0kvz|Hw|6BHmpEh?r@$B51cfA>XH#zShG-dOPbw| +ztgHUa!%v+vvl>Dek%(cpHiwS`c}x28q(~rcwGlIcto@}W62X|slMs~~7x|4KES^C3 +z2J$zH4KIyEBR`>DTp`hof9kAKxb_~EL-5JWCMUGAZ4)}!DkbY2%;tG5+4jla9)U9< +zINEF! +z1^}VZo);sqvOAiBM;`oHPVx^b%wFx(EVV7gE2Vi_Kp2$|Zex=AxQgwZ+a`sAQU4^Y +z-vna({A3x+kUXyo$oIS$uLEs290R>m{jUUN!25zM&=qkqJsH0>zl`ckNGUkA6Bcr>E)$v!j%< +z0L3_^+i$3*O!77t|;w#D6A8k4sTIcW#WlTxa35I&DdXVO~ +zXkI#K4d;hn%TDu*M>9}+m^KGflq0~B|3t}p==$p^#e#2&Mbn*rJouaG#jjQthHu=% +zh#7Rym+bCPLTT~($jHN>tyJGOXnWrk1XqLVc`Q!YT^DdkU-+B+&@ki2uRkH^OZU7_ +zdI#Di3gCE2_9d7ILxyh;UD-ceCSrWCY&yhR<9`tDk4mQuPQ>VAx(yiKTI;OKrgt6^ +zg0e}exU6~*2f1nX&tSOM+jNU~Zmdxwc_R +zz&a@M9PclCtEB3hMwiM}KO6q|{!;yf@oUuNg|0-wge|*6G*5+&&!38hjpb~ +zZPb(}eZqa*)A6iiHw%ShIoxR-7*<#0!V{*pqtgkPu4Hg=#lp*iz#VgOq>;35?X4{* +z#<-*}&TM&!x(>oU0#l$ry24>LMtIpQULqdfx_jHcO(MNOb4ps&5%RqF?}aKqDzYON +z1yVdUcZNMd_0~Bn}vy03*Sr(k*g{+;jF +z33%r}Er5S1?ENxT1o-n{fnfTP&qgl?6FWXzHsW9RDrK)*18wmhQi4yAW$oqO^iN7F +zK8TSSxAp%leBtxGH2v%?0hN;2$2;M@0hvz2evKIg%b6hwg3QM9~!tuLB-c|a=o!MLXe7G_kX-pG-6tx1%(_(WA +zVk$hC=YSpfPkr=DJ4w9|L!5K{Ri&odAO<}=Z_$X~wRQ!3`PGxN2IzEUZt}~B_3bFo +zY7cwdy-dJ~0jteZToPbnyhAl3S)p>NAOClSWht*|bfD;s{pq_xZu^ky`&LWW7| +zEGzzPjB&AZD_88_mUk}!?G@9x{214Q3ecSa7n=Nd#eSMO41Pia8Y28&NE&){0abhi +zAfsTLP=ir`<3j^Yp?%BrItOGszT>8MjD}LBJ>Ix0kQZ=Pm%8*rQ|YP8;8$aINS#AI +zImcKQ_J>Vx_&O1qaU*_Fnp2=sd`{rpK*Tp~QBqIOLNAU3ovUM#d +zw(d7-P{zeM<4dv%!9{)RTzUOY^}GB?kfVj!PtKal|Qw8_G+ba%QEw?2itdA +z=I+e~M(T^Bjfj=}6Ph$$Sw65UW}X6g|EVpvK+?8Na9|26t?&6E{zFy}S1*X$5HT-9 +zx+r(U5D481Z(;$?6E4mcllu3K@ow*!|L-iF-^O$_bivbjZG*Sl<@2(4g@A3NWG}{3 +zXX&(;1e{;wJuRz}T=l<5e2?-gw^B@V{f^#x;(K=-xBHmYi-FVKs2tz*-d0b25*gA4 +zWR2-)2SVk%EFcB#dfy*$nb)5D~&qBD^sfNSTV&hrJQ>(i0RPlep~Nb`GAIbAoW +zYNMWE%f9o{uUAe2LKmn%L-qE~r>5<*rjtM?>0)+-CA-|sYB$-}z8YB6#6&1UM*Xd- +z&-owc#4J)`J%&ExAN6hb5QRP&ZGz5Ty1(Z8^H`!EyhzDTIzNcapP$uwZNPU~%R4lYSz%Ig0RepO%Y#t^HzG82qqHt--1zym=jv;A +zQ}9<`?^8aH)Yn=6um-`zDjDbQB$iFQEo$`H`lMywtfosp!rpGJiTr>M6-fooC8z~T +z(eJW)*t%195Wz38xqdcICGlj2jT<e*f;L-tOV+Z?Q9=mVZDl=@Ky +zObp2UZx(6xDoC>2C84L1OBCpr!)Nd=2`ioUNpap%5myEKGfWl!-3#HIJYX9e7>>j)4JbwKp~{G#yAGrwJuM~8qs*B$$ZjHP0NljkjhHFIz^MJ`O+Me7KuK{^tTF$!RF-MHL> +zQ}$O;*gu)`U#6`0<-{ZpW7~Uo9onRVcVB2ivIdr@A4@et>PWrLgoPw(@H1tt_MO)Q +z(I1nB;)jafj8;-#o~oH1>a@LvOrG2ls42EW_)$glZ46PmA*}*=m(x~m@9&HEP0%V$ +z*pJUK5Bv*{0zGlc#Yvzi-v3QVH^@Mjy(Mf{w@5!8EE*WDE!Eil)y(3qP)wO-$oiO> +zz%PC>M|?K-m$o_!r5Xw(4^FRW&r1G|g&Kw8K7j`cB;nDXO{=b3p9cn{bO9SW&tw74 +z@&k^2)US5Xe+f2Cz%T)cNu^xzm?n*C_pEmj&BR^ntZT`o1mR02f6ndGy^`NjzPkt6 +zoke)i@A7}vC^8{7#@%oLZ-s^2n;-$@S+82jm*Nm-DtE|m(iQ^SJoo;aRynOczo9|7 +z)A0wHSh_3Q3qf@&k>wufDE0agD3i?C3iK;Y6^a;2DYGkW8#C;_X43sVbCbeEX_yq0 +zCn&)$94NIiYb=#sQb-;b&V#K1$orBuwZmuafKL>+G^R(hdfcHK^;REa(Oenpneyen +zytk80o78YYs8DUM*pjhSO|r2plUPI!X6KJ`D7-pszeDlTFQo(R&9T{}WG<_n4H)|` +zr|K_H@o64SS;d9z*rcd&SEwt)FLj4hk0=a@uNrzSNm#-o`X{J-*P0pH@t3 +zn%w=L+cx}Dl_-J3|CdzQDSWD6eN0ntojZBgvN_<&hUrf67bcDPWk-UBw=^e>U-BF; +zdfWn^{AbL_P(3EE)bR($m|sVxYlYq30N50SQB^6NDW73-iK8*>ZK0T4u7}BEoBf;s +zJkEjxI$i%Nt<*fP+PKZcu*YUu44O{@AZ&3SwC%dEf3lu>K7V>zYX~LLzwN_H4G* +zHH;Z;i+V%2seq0PBgo5X*l5P%=^S_8rf!O?#T_x)DdC9AyVF*}HZ)KctKDq0Q4e*B +z>{AG-1B6;vb)5B+sQDMToM;Ez$0lndrk`^9=ZAUonsb+Fmxl3JI4%?(6SfSMJ+24` +zu>Zx(w$Lt1=Jt~T382FBFoCO=BycHg7Zoe21cd#4Xgx80Xr@wEc2#->?&u%yB0im1 +zx_VgWo^~*?sGsrXUCuAfg|v@OWVOQmQrU? +z75pxYYAS;D|EuUV$-8*84)=3k7$@wPbzhil0HmFC+{+F&zhct4`_M{(TMXh1lJUXO +z5bmV_JP)A5KVO?G9wEP=(6l!@2Ef`=Iab_iy8!;dv;A4=GcfgA@q6gucyJW +z>74#sY~i+9ZNV!Y1UBwzo5f8z9-9X}`0&_btV>(Lc!g$ox)}<UWu`=8tX+`R-u1PdK0Fc9yQR*dOugR|V|T_m$UfSs;5;9!U$}|IODxS-sYtL<7IQ +zVDk8thQXl>jAlXQ25>gDI2n%Z34HtETrO{V0^rOimln=xGWDBb)Xm@iO3Y|PMtkC7kyC+&et{$uVb!OLoeBdqd}dn +z__!2}J2PDc%N>9C*_8T@xglCnuV{Ezy!X|Ql%cqqc#EIJ`KP&u#NGt%B2>YcAe=)6|lndvBS@c*VE2|$@M@qcYx4t +znnyiiC8;)GOw^oPO8*{qE^Grfgc{gga;dM#6#Vj$Mv!&SZIm7M=?=ftha4vMO}K$2 +zGp?%l6wS~(bxMYxXI;!Y;GqF<^bgklySQdaL6`I0AAj+ws2LN4>}W@Yv#+|q-);uu +zVwP684E&Pu{|Hq6M*VLU@|%+d8v8HW`THV&j|Kk!7}jvPPw10kaHiv|HJ+R`<%L~*R;ah>}*pe=}h)o1F|xP>ye?%)m_ +z&gi^L*LyUP^KpqL)xN9q$>opdYH4 +z&cZAdYNFvon;b19U*YU*hxu?CZ~ir#?9^;J3|fxLS}7Q{c?so_zF~oX09gz9Wks7n +zm%3m;yFL*9fBf*;LIIlQsm$)%2?}>!S$2h|8iL~mo!L~t5*M6iF7C61uv8F>g-+e7 +zGHV8O8kk1|pCHSIuenz@L4BdsfBVQj+b2-=g$)W8q7SOqwiQx?9gMe{gf^~qxS^z6 +zl&=f4cf|H1Z$O*kN$dvY086O%y;=eI5^{>-)zW}3nzvR!F4-OM^8wH)sQ0cHh^T&Y +z{h@zINyuEB2R=k-AE4$7t%=w&@Yb!1BEfL#^92Jm8Vx|-&?Dvn8^NHcSiztZi~RmS +zL=3}simZm9vP2y{&tt;ba1iPRk3-2L6bsRY2=H%?hmro}fQ{h0wf-3EX*>B%(4i6l +zAKHj>{m-dC5f`ThldKd(R(OIjM}jl?r;Rvxpbv9;lauSxWySgO_%B!$4YPw?~3KlnSFpyxp +zw-9YyRE4g4g@<$9jcQeuwRdd*-l@~W9tlPV7zS<^R};aoDzG_3Y-HLm=$vjNZNUoe +zeMk4Eh#0OYEH1_$QAQX3TCIg8z(WPVRgVi5@qikA=u6+saE+s+1lb~BD*z|W$KKHq +z +zFhEh;ko=t^Eiq?##741*d*_O; +zDsJ7`VDnCdndTuf}~5Lty}FUsNQ%0$i@A +zIqFz$kpd_3QdD`gO9u~Elz@?I0+INk2iDqaB8;Yo$|vs~ezJ}g9m$%DtbFx38_<%= +zVL6GcSU*V~0z68W?7L?qtqL6m8??u0D%Yzj7sW>wXyY>v&G8f1LpCOFfQ)!`QNlN< +zt^ZjEKU`NC{x* + + ++ ++ ++ UTTypeIdentifier ++ org.oasis-open.opendocument.text-master-template ++ UTTypeDescription ++ OpenDocument Text Master Template ++ UTTypeConformsTo ++ ++ public.data ++ public.content ++ ++ UTTypeTagSpecification ++ ++ public.filename-extension ++ ++ otm ++ ++ public.mime-type ++ ++ application/vnd.oasis.opendocument.text-master-template ++ ++ ++ ++ + + + UTTypeIdentifier +@@ -1118,6 +1142,24 @@ + + CFBundleTypeExtensions + ++ otm ++ ++ CFBundleTypeMIMETypes ++ ++ application/vnd.oasis.opendocument.text-master-template ++ ++ CFBundleTypeIconFile ++ oasis-master-template.icns ++ CFBundleTypeName ++ OpenDocument Master Template ++ CFBundleTypeRole ++ Editor ++ LSIsAppleDefaultForType ++ ++ ++ ++ CFBundleTypeExtensions ++ + stc + + CFBundleTypeMIMETypes +@@ -1343,6 +1385,7 @@ + org.oasis-open.opendocument.formula + org.openoffice.text-template + org.oasis-open.opendocument.text-template ++ org.oasis-open.opendocument.text-master-template + org.openoffice.spreadsheet-template + org.oasis-open.opendocument.spreadsheet-template + org.openoffice.presentation-template +diff --git a/sysui/desktop/menus/writer.desktop b/sysui/desktop/menus/writer.desktop +index c4cea12..e22a7b4 100644 +--- a/sysui/desktop/menus/writer.desktop ++++ b/sysui/desktop/menus/writer.desktop +@@ -22,7 +22,7 @@ Icon=writer + Type=Application + Categories=Office;WordProcessor;X-Red-Hat-Base;X-MandrivaLinux-Office-Wordprocessors; + Exec=${UNIXBASISROOTNAME} --writer %%FILE%% +-MimeType=application/vnd.oasis.opendocument.text;application/vnd.oasis.opendocument.text-template;application/vnd.oasis.opendocument.text-web;application/vnd.oasis.opendocument.text-master;application/vnd.sun.xml.writer;application/vnd.sun.xml.writer.template;application/vnd.sun.xml.writer.global;application/msword;application/vnd.ms-word;application/x-doc;application/x-hwp;application/rtf;text/rtf;application/vnd.wordperfect;application/wordperfect;application/vnd.lotus-wordpro;application/vnd.openxmlformats-officedocument.wordprocessingml.document;application/vnd.ms-word.document.macroenabled.12;application/vnd.openxmlformats-officedocument.wordprocessingml.template;application/vnd.ms-word.template.macroenabled.12;application/vnd.ms-works;application/vnd.stardivision.writer-global;application/x-extension-txt;application/x-t602;text/plain;application/vnd.oasis.opendocument.text-flat-xml;application/x-fictionbook+xml;application/macwriteii;application/x-aportisdoc;application/prs.plucker;application/vnd.palm;application/clarisworks; ++MimeType=application/vnd.oasis.opendocument.text;application/vnd.oasis.opendocument.text-template;application/vnd.oasis.opendocument.text-web;application/vnd.oasis.opendocument.text-master;application/vnd.oasis.opendocument.text-master-template;application/vnd.sun.xml.writer;application/vnd.sun.xml.writer.template;application/vnd.sun.xml.writer.global;application/msword;application/vnd.ms-word;application/x-doc;application/x-hwp;application/rtf;text/rtf;application/vnd.wordperfect;application/wordperfect;application/vnd.lotus-wordpro;application/vnd.openxmlformats-officedocument.wordprocessingml.document;application/vnd.ms-word.document.macroenabled.12;application/vnd.openxmlformats-officedocument.wordprocessingml.template;application/vnd.ms-word.template.macroenabled.12;application/vnd.ms-works;application/vnd.stardivision.writer-global;application/x-extension-txt;application/x-t602;text/plain;application/vnd.oasis.opendocument.text-flat-xml;application/x-fictionbook+xml;application/macwriteii;application/x-aportisdoc;application/prs.plucker;application/vnd.palm;application/clarisworks; + Name=%PRODUCTNAME Writer + GenericName=Word Processor + Comment=Create and edit text and graphics in letters, reports, documents and Web pages by using Writer. +diff --git a/sysui/desktop/mimetypes/oasis-master-document-template.desktop b/sysui/desktop/mimetypes/oasis-master-document-template.desktop +new file mode 100644 +index 0000000..a47588c +--- /dev/null ++++ b/sysui/desktop/mimetypes/oasis-master-document-template.desktop +@@ -0,0 +1,26 @@ ++# ++# 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 . ++# ++[Desktop Entry] ++Version=1.0 ++Encoding=UTF-8 ++Hidden=false ++Icon=oasis-master-document-template ++Type=MimeType ++Patterns=*.otm ++MimeType=application/vnd.oasis.opendocument.text-master-template ++Comment=OpenDocument Master Document Template +diff --git a/sysui/desktop/mimetypes/oasis-master-document-template.keys b/sysui/desktop/mimetypes/oasis-master-document-template.keys +new file mode 100644 +index 0000000..3cd4d5e +--- /dev/null ++++ b/sysui/desktop/mimetypes/oasis-master-document-template.keys +@@ -0,0 +1,9 @@ ++application/vnd.oasis.opendocument.text-master-template ++ description=OpenDocument Master Document Template ++ default_action_type=application ++ short_list_application_ids_for_novice_user_level= ++ short_list_application_ids_for_intermediate_user_level= ++ short_list_application_ids_for_advanced_user_level= ++ category=Documents/Word Processor ++ use_category_default=yes ++ icon_filename=oasis-master-document-template +diff --git a/sysui/desktop/mimetypes/openoffice.applications b/sysui/desktop/mimetypes/openoffice.applications +index 26a3494..8af25f6 100755 +--- a/sysui/desktop/mimetypes/openoffice.applications ++++ b/sysui/desktop/mimetypes/openoffice.applications +@@ -5,5 +5,5 @@ OFFICENAME + expects_uris=true + requires_terminal=false + uses_gnomevfs=true +- mime_types=application/vnd.oasis.opendocument.text,application/vnd.oasis.opendocument.text-flat-xml,application/vnd.oasis.opendocument.text-template,application/vnd.oasis.opendocument.text-web,application/vnd.oasis.opendocument.text-master,application/vnd.oasis.opendocument.graphics,application/vnd.oasis.opendocument.graphics-flat-xml,application/vnd.oasis.opendocument.graphics-template,application/vnd.oasis.opendocument.presentation,application/vnd.oasis.opendocument.presentation-flat-xml,application/vnd.oasis.opendocument.presentation-template,application/vnd.oasis.opendocument.spreadsheet,application/vnd.oasis.opendocument.spreadsheet-flat-xml,application/vnd.oasis.opendocument.spreadsheet-template,application/vnd.oasis.opendocument.formula,application/vnd.oasis.opendocument.database,application/vnd.ms-excel,application/rtf,application/msword,application/vnd.ms-powerpoint,application/vnd.stardivision.calc,application/vnd.stardivision.chart,application/vnd.stardivision.draw,application/vnd.stardivision.impress,application/vnd.stardivision.mail,application/vnd.stardivision.math,application/vnd.stardivision.writer,application/vnd.sun.xml.calc,application/vnd.sun.xml.calc.template,application/vnd.sun.xml.draw,application/vnd.sun.xml.draw.template,application/vnd.sun.xml.impress,application/vnd.sun.xml.impress.template,application/vnd.sun.xml.math,application/vnd.sun.xml.writer,application/vnd.sun.xml.writer.global,application/vnd.sun.xml.writer.template,application/vnd.sun.xml.base,image/x-emf,image/x-pcx,image/x-photo-cd,image/x-pict;application/vnd.wordperfect;application/vnd.lotus-wordpro;application/vnd.openofficeorg.extension;application/vnd.openxmlformats-officedocument.wordprocessingml.document;application/vnd.ms-word.document.macroenabled.12;application/vnd.openxmlformats-officedocument.wordprocessingml.template;application/vnd.ms-word.template.macroenabled.12;application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;application/vnd.ms-excel.sheet.macroenabled.12;application/vnd.openxmlformats-officedocument.spreadsheetml.template;application/vnd.ms-excel.template.macroenabled.12;application/vnd.openxmlformats-officedocument.presentationml.presentation;application/vnd.ms-powerpoint.presentation.macroenabled.12;application/vnd.openxmlformats-officedocument.presentationml.template;application/vnd.ms-powerpoint.template.macroenabled.12;application/vnd.ms-excel.sheet.binary.macroenabled.12;application/x-hwp;text/spreadsheet; ++ mime_types=application/vnd.oasis.opendocument.text,application/vnd.oasis.opendocument.text-flat-xml,application/vnd.oasis.opendocument.text-template,application/vnd.oasis.opendocument.text-web,application/vnd.oasis.opendocument.text-master,application/vnd.oasis.opendocument.text-master-master,application/vnd.oasis.opendocument.graphics,application/vnd.oasis.opendocument.graphics-flat-xml,application/vnd.oasis.opendocument.graphics-template,application/vnd.oasis.opendocument.presentation,application/vnd.oasis.opendocument.presentation-flat-xml,application/vnd.oasis.opendocument.presentation-template,application/vnd.oasis.opendocument.spreadsheet,application/vnd.oasis.opendocument.spreadsheet-flat-xml,application/vnd.oasis.opendocument.spreadsheet-template,application/vnd.oasis.opendocument.formula,application/vnd.oasis.opendocument.database,application/vnd.ms-excel,application/rtf,application/msword,application/vnd.ms-powerpoint,application/vnd.stardivision.calc,application/vnd.stardivision.chart,application/vnd.stardivision.draw,application/vnd.stardivision.impress,application/vnd.stardivision.mail,application/vnd.stardivision.math,application/vnd.stardivision.writer,application/vnd.sun.xml.calc,application/vnd.sun.xml.calc.template,application/vnd.sun.xml.draw,application/vnd.sun.xml.draw.template,application/vnd.sun.xml.impress,application/vnd.sun.xml.impress.template,application/vnd.sun.xml.math,application/vnd.sun.xml.writer,application/vnd.sun.xml.writer.global,application/vnd.sun.xml.writer.template,application/vnd.sun.xml.base,image/x-emf,image/x-pcx,image/x-photo-cd,image/x-pict;application/vnd.wordperfect;application/vnd.lotus-wordpro;application/vnd.openofficeorg.extension;application/vnd.openxmlformats-officedocument.wordprocessingml.document;application/vnd.ms-word.document.macroenabled.12;application/vnd.openxmlformats-officedocument.wordprocessingml.template;application/vnd.ms-word.template.macroenabled.12;application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;application/vnd.ms-excel.sheet.macroenabled.12;application/vnd.openxmlformats-officedocument.spreadsheetml.template;application/vnd.ms-excel.template.macroenabled.12;application/vnd.openxmlformats-officedocument.presentationml.presentation;application/vnd.ms-powerpoint.presentation.macroenabled.12;application/vnd.openxmlformats-officedocument.presentationml.template;application/vnd.ms-powerpoint.template.macroenabled.12;application/vnd.ms-excel.sheet.binary.macroenabled.12;application/x-hwp;text/spreadsheet; + +diff --git a/sysui/desktop/share/documents.ulf b/sysui/desktop/share/documents.ulf +index cff9422..2073c17 100644 +--- a/sysui/desktop/share/documents.ulf ++++ b/sysui/desktop/share/documents.ulf +@@ -40,6 +40,9 @@ en-US = "OpenDocument Text Template" + [oasis-master-document] + en-US = "OpenDocument Master Document" + ++[oasis-master-document-template] ++en-US = "OpenDocument Master Document Template" ++ + [oasis-formula] + en-US = "OpenDocument Formula" + +diff --git a/sysui/desktop/solaris/mailcap b/sysui/desktop/solaris/mailcap +index 43c0207..910fcbe 100755 +--- a/sysui/desktop/solaris/mailcap ++++ b/sysui/desktop/solaris/mailcap +@@ -40,6 +40,7 @@ cat << END + application/vnd.oasis.opendocument.text; %PREFIX -view %s + application/vnd.oasis.opendocument.text-flat-xml; %PREFIX -view %s + application/vnd.oasis.opendocument.text-template; %PREFIX -view %s ++application/vnd.oasis.opendocument.text-master-template; %PREFIX -view %s + application/vnd.oasis.opendocument.text-web; %PREFIX -view %s + application/vnd.oasis.opendocument.text-master; %PREFIX -view %s + application/vnd.sun.xml.writer; %PREFIX -view %s +diff --git a/sysui/desktop/solaris/mime.types b/sysui/desktop/solaris/mime.types +index 4758d47..a5ee683 100755 +--- a/sysui/desktop/solaris/mime.types ++++ b/sysui/desktop/solaris/mime.types +@@ -32,6 +32,7 @@ application/vnd.oasis.opendocument.text-flat-xml fodt + application/vnd.oasis.opendocument.text-template ott + application/vnd.oasis.opendocument.text-web oth + application/vnd.oasis.opendocument.text-master odm ++application/vnd.oasis.opendocument.text-master-template otm + application/vnd.oasis.opendocument.graphics odg + application/vnd.oasis.opendocument.graphics-flat-xml fodg + application/vnd.oasis.opendocument.graphics-template otg +-- +1.9.3 + diff --git a/SOURCES/0001-default-n-up-printing-of-notes-to-sensible-2-x-1-not.patch b/SOURCES/0001-default-n-up-printing-of-notes-to-sensible-2-x-1-not.patch new file mode 100644 index 0000000..70c3c70 --- /dev/null +++ b/SOURCES/0001-default-n-up-printing-of-notes-to-sensible-2-x-1-not.patch @@ -0,0 +1,41 @@ +From 93c47f3f0310135c5d6216de9b4d25fd7c06e7dd Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Thu, 18 Sep 2014 11:32:39 +0100 +Subject: [PATCH] default n-up printing of notes to sensible 2 x 1 not 1 x 2 + +i.e. throw away the maFirstPageSize cache based on the initial slide view which +is typically in landscape mode + +So that if we change to notes which are usually in portrait mode, and then +visit n-up print, we get a default layout based on the notes orientation and +not the slides orientation. + +I hate printing + +Change-Id: I8b7b81ce1eec0f9c5ecd7509b311cf4026958c2c +--- + vcl/source/window/printdlg.cxx | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/vcl/source/window/printdlg.cxx b/vcl/source/window/printdlg.cxx +index cf9642e..d9ebf7c 100644 +--- a/vcl/source/window/printdlg.cxx ++++ b/vcl/source/window/printdlg.cxx +@@ -1787,6 +1787,14 @@ IMPL_LINK( PrintDialog, UIOption_SelectHdl, ListBox*, i_pBox ) + sal_Int32 nVal( i_pBox->GetSelectEntryPos() ); + pVal->Value <<= nVal; + ++ //If we are in impress we start in print slides mode and get a ++ //maFirstPageSize for slides which are usually landscape mode, if we ++ //change to notes which are usually in portrait mode, and then visit ++ //n-up print, we will assume notes are in landscape unless we throw ++ //away maFirstPageSize when we change page content type ++ if (pVal->Name == "PageContentType") ++ maFirstPageSize = Size(); ++ + checkOptionalControlDependencies(); + + // update preview and page settings +-- +1.9.3 + diff --git a/SOURCES/0001-disable-PSD-import-test-which-deadlocks-on-ARM.patch b/SOURCES/0001-disable-PSD-import-test-which-deadlocks-on-ARM.patch new file mode 100644 index 0000000..173eeee --- /dev/null +++ b/SOURCES/0001-disable-PSD-import-test-which-deadlocks-on-ARM.patch @@ -0,0 +1,24 @@ +From adbd9c70d4326e2577c4b5eff486f1809777fa90 Mon Sep 17 00:00:00 2001 +From: rpmbuild +Date: Mon, 26 May 2014 10:01:33 +0200 +Subject: [PATCH] disable PSD import test which deadlocks on ARM + +--- + filter/Module_filter.mk | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/filter/Module_filter.mk b/filter/Module_filter.mk +index 3558f44..3f3301f 100644 +--- a/filter/Module_filter.mk ++++ b/filter/Module_filter.mk +@@ -87,7 +87,6 @@ $(eval $(call gb_Module_add_check_targets,filter,\ + CppunitTest_filter_pcx_test \ + CppunitTest_filter_pict_test \ + CppunitTest_filter_ppm_test \ +- CppunitTest_filter_psd_test \ + CppunitTest_filter_ras_test \ + CppunitTest_filter_tiff_test \ + CppunitTest_filter_tga_test \ +-- +1.9.0 + diff --git a/SOURCES/0001-disable-failing-test-on-rhel.patch b/SOURCES/0001-disable-failing-test-on-rhel.patch new file mode 100644 index 0000000..9775d58 --- /dev/null +++ b/SOURCES/0001-disable-failing-test-on-rhel.patch @@ -0,0 +1,24 @@ +From 793adaba0568a89a521274d354911b03a7e09161 Mon Sep 17 00:00:00 2001 +From: rpmbuild +Date: Tue, 27 May 2014 20:03:53 +0200 +Subject: [PATCH] disable failing test on rhel + +--- + sc/Module_sc.mk | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/sc/Module_sc.mk b/sc/Module_sc.mk +index 2b82efa..5d92799 100644 +--- a/sc/Module_sc.mk ++++ b/sc/Module_sc.mk +@@ -57,7 +57,6 @@ $(eval $(call gb_Module_add_check_targets,sc,\ + )) + + $(eval $(call gb_Module_add_slowcheck_targets,sc, \ +- CppunitTest_sc_subsequent_filters_test \ + CppunitTest_sc_subsequent_export_test \ + CppunitTest_sc_html_export_test \ + CppunitTest_sc_opencl_test \ +-- +1.9.3 + diff --git a/SOURCES/0001-disable-libe-book-support.patch b/SOURCES/0001-disable-libe-book-support.patch index 32cbdab..9174b3a 100644 --- a/SOURCES/0001-disable-libe-book-support.patch +++ b/SOURCES/0001-disable-libe-book-support.patch @@ -1,37 +1,51 @@ -From 192812819ed978d98cdec944cf51b40edbff1155 Mon Sep 17 00:00:00 2001 +From 05d0763302dd6cebfa60d760667670b3c46b2f2b Mon Sep 17 00:00:00 2001 From: David Tardon -Date: Thu, 21 Aug 2014 14:49:53 +0200 +Date: Thu, 21 Aug 2014 16:10:51 +0200 Subject: [PATCH] disable libe-book support -Change-Id: I7aab13e9aac90f678231c0176d0d96aa09bea813 +Change-Id: Ie915a9bd2acf7f3aeb8b0933252da33c17043bc4 --- configure.ac | 5 ----- + external/Module_external.mk | 1 - filter/Configuration_filter.mk | 14 -------------- writerperfect/Library_wpftwriter.mk | 2 -- + writerperfect/qa/unit/WpftWriterFilterTest.cxx | 1 - writerperfect/source/writer/wpftwriter_genericfilter.cxx | 4 ---- - 4 files changed, 25 deletions(-) + 6 files changed, 27 deletions(-) diff --git a/configure.ac b/configure.ac -index 2560a0d..e46f407 100644 +index 2f19999..bde14a8 100644 --- a/configure.ac +++ b/configure.ac -@@ -7724,11 +7724,6 @@ fi - AC_SUBST([ENABLE_EOT]) +@@ -7757,11 +7757,6 @@ AS_IF([test "$COM" = "MSC"], + libo_CHECK_SYSTEM_MODULE([librevenge],[REVENGE],[librevenge-0.0 >= 0.0.1],["-I${WORKDIR}/UnpackedTarball/librevenge/inc"],["-L${librevenge_libdir} -lrevenge-0.0"]) dnl =================================================================== -dnl Check for system libe-book -dnl =================================================================== --libo_CHECK_SYSTEM_MODULE([libebook],[EBOOK],[libe-book-0.0 >= 0.0.2],["-I${WORKDIR}/UnpackedTarball/libebook/inc"],["-L${WORKDIR}/UnpackedTarball/libebook/src/lib/.libs -le-book-0.0"]) +-libo_CHECK_SYSTEM_MODULE([libebook],[EBOOK],[libe-book-0.1 >= 0.1.1]) - -dnl =================================================================== dnl Check for system libetonyek dnl =================================================================== - libo_CHECK_SYSTEM_MODULE([libetonyek],[ETONYEK],[libetonyek-0.0],["-I${WORKDIR}/UnpackedTarball/libetonyek/inc"],["-L${WORKDIR}/UnpackedTarball/libetonyek/src/lib/.libs -letonyek-0.0"]) + libo_CHECK_SYSTEM_MODULE([libetonyek],[ETONYEK],[libetonyek-0.1 >= 0.1.1]) +diff --git a/external/Module_external.mk b/external/Module_external.mk +index 7049278..0e7fd60 100644 +--- a/external/Module_external.mk ++++ b/external/Module_external.mk +@@ -35,7 +35,6 @@ $(eval $(call gb_Module_add_moduledirs,external,\ + $(call gb_Helper_optional,CPPUNIT,cppunit) \ + $(call gb_Helper_optional,CT2N,ct2n) \ + $(call gb_Helper_optional,CURL,curl) \ +- $(call gb_Helper_optional,EBOOK,libebook) \ + $(call gb_Helper_optional,EPM,epm) \ + $(call gb_Helper_optional,ETONYEK,libetonyek) \ + $(call gb_Helper_optional,EXPAT,expat) \ diff --git a/filter/Configuration_filter.mk b/filter/Configuration_filter.mk -index fe84350..7c520fc 100644 +index 39fabfc..300c926 100644 --- a/filter/Configuration_filter.mk +++ b/filter/Configuration_filter.mk -@@ -362,13 +362,6 @@ $(call filter_Configuration_add_types,fcfg_langpack,fcfg_writer_types.xcu,filter +@@ -370,13 +370,6 @@ $(eval $(call filter_Configuration_add_types,fcfg_langpack,fcfg_writer_types.xcu writer_OOXML \ writer_OOXML_Template \ writer_layout_dump_xml \ @@ -42,10 +56,10 @@ index fe84350..7c520fc 100644 - writer_Plucker_eBook \ - writer_TealDoc \ - writer_zTXT \ - ) + )) - $(call filter_Configuration_add_filters,fcfg_langpack,fcfg_writer_filters.xcu,filter/source/config/fragments/filters,\ -@@ -424,13 +417,6 @@ $(call filter_Configuration_add_filters,fcfg_langpack,fcfg_writer_filters.xcu,fi + $(eval $(call filter_Configuration_add_filters,fcfg_langpack,fcfg_writer_filters.xcu,filter/source/config/fragments/filters,\ +@@ -431,13 +424,6 @@ $(eval $(call filter_Configuration_add_filters,fcfg_langpack,fcfg_writer_filters OOXML_Text \ OOXML_Text_Template \ writer_layout_dump \ @@ -56,29 +70,41 @@ index fe84350..7c520fc 100644 - Plucker_eBook \ - TealDoc \ - zTXT \ - ) + )) - $(call filter_Configuration_add_ui_filters,fcfg_langpack,filter/source/config/fragments/filters,\ + $(eval $(call filter_Configuration_add_ui_filters,fcfg_langpack,filter/source/config/fragments/filters,\ diff --git a/writerperfect/Library_wpftwriter.mk b/writerperfect/Library_wpftwriter.mk -index cfcdf5d..67207cf 100644 +index db6afdf..e6ea0f5 100644 --- a/writerperfect/Library_wpftwriter.mk +++ b/writerperfect/Library_wpftwriter.mk -@@ -50,7 +50,6 @@ $(eval $(call gb_Library_use_static_libraries,wpftwriter,\ +@@ -42,7 +42,6 @@ $(eval $(call gb_Library_use_libraries,wpftwriter,\ $(eval $(call gb_Library_use_externals,wpftwriter,\ abw \ boost_headers \ - ebook \ - etonyek \ icui18n \ - icudata \ -@@ -66,7 +65,6 @@ $(eval $(call gb_Library_use_externals,wpftwriter,\ + icuuc \ + libxml2 \ +@@ -57,7 +56,6 @@ $(eval $(call gb_Library_use_externals,wpftwriter,\ $(eval $(call gb_Library_add_exception_objects,wpftwriter,\ writerperfect/source/writer/AbiWordImportFilter \ - writerperfect/source/writer/EBookImportFilter \ + writerperfect/source/writer/ImportFilterBase \ writerperfect/source/writer/MSWorksImportFilter \ writerperfect/source/writer/MWAWImportFilter \ - writerperfect/source/writer/WordPerfectImportFilter \ +diff --git a/writerperfect/qa/unit/WpftWriterFilterTest.cxx b/writerperfect/qa/unit/WpftWriterFilterTest.cxx +index 904daab..fb44878 100644 +--- a/writerperfect/qa/unit/WpftWriterFilterTest.cxx ++++ b/writerperfect/qa/unit/WpftWriterFilterTest.cxx +@@ -32,7 +32,6 @@ WpftWriterFilterTest::WpftWriterFilterTest() + void WpftWriterFilterTest::test() + { + doTest("com.sun.star.comp.Writer.AbiWordImportFilter", "/writerperfect/qa/unit/data/writer/libabw/"); +- doTest("org.libreoffice.comp.Writer.EBookImportFilter", "/writerperfect/qa/unit/data/writer/libe-book/"); + doTest("com.sun.star.comp.Writer.MSWorksImportFilter", "/writerperfect/qa/unit/data/writer/libwps/"); + doTest("com.sun.star.comp.Writer.MWAWImportFilter", "/writerperfect/qa/unit/data/writer/libmwaw/"); + doTest("com.sun.star.comp.Writer.WordPerfectImportFilter", "/writerperfect/qa/unit/data/writer/libwpd/"); diff --git a/writerperfect/source/writer/wpftwriter_genericfilter.cxx b/writerperfect/source/writer/wpftwriter_genericfilter.cxx index 05f6542..831bc38 100644 --- a/writerperfect/source/writer/wpftwriter_genericfilter.cxx diff --git a/SOURCES/0001-disable-swui-test-on-RHEL-7.patch b/SOURCES/0001-disable-swui-test-on-RHEL-7.patch new file mode 100644 index 0000000..c22940c --- /dev/null +++ b/SOURCES/0001-disable-swui-test-on-RHEL-7.patch @@ -0,0 +1,32 @@ +From 857152e54d3c969a7b0056d71bbb6f9f6eeec347 Mon Sep 17 00:00:00 2001 +From: rpmbuild +Date: Fri, 30 May 2014 09:15:36 +0200 +Subject: [PATCH] disable swui test on RHEL-7 + +--- + sw/Module_sw.mk | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/sw/Module_sw.mk b/sw/Module_sw.mk +index 53a19bb..6702d9f 100644 +--- a/sw/Module_sw.mk ++++ b/sw/Module_sw.mk +@@ -47,7 +47,6 @@ $(eval $(call gb_Module_add_targets,sw,\ + endif + + $(eval $(call gb_Module_add_slowcheck_targets,sw,\ +- CppunitTest_sw_uwriter \ + CppunitTest_sw_htmlexport \ + CppunitTest_sw_macros_test \ + CppunitTest_sw_ooxmlexport \ +@@ -60,7 +59,6 @@ $(eval $(call gb_Module_add_slowcheck_targets,sw,\ + CppunitTest_sw_rtfimport \ + CppunitTest_sw_odfexport \ + CppunitTest_sw_odfimport \ +- CppunitTest_sw_uiwriter \ + )) + + ifneq ($(DISABLE_CVE_TESTS),TRUE) +-- +1.9.3 + diff --git a/SOURCES/0001-don-t-copy-stylesheet-s-HelpID-if-this-s-a-rename.patch b/SOURCES/0001-don-t-copy-stylesheet-s-HelpID-if-this-s-a-rename.patch new file mode 100644 index 0000000..631ac91 --- /dev/null +++ b/SOURCES/0001-don-t-copy-stylesheet-s-HelpID-if-this-s-a-rename.patch @@ -0,0 +1,33 @@ +From e4cf5d1a98469c17133f33fc8220e6b41f65e9a0 Mon Sep 17 00:00:00 2001 +From: David Tardon +Date: Mon, 8 Dec 2014 18:06:01 +0100 +Subject: [PATCH] don't copy stylesheet's HelpID if this's a rename + +This causes problems for renamed copies of std. styles, as they have +special handling in SdStyleSheet::SetHelpId, which would set the API +name to std. value too. That means that there would be two (or more) +stylesheets with the same API name. On export, only one of them would be +exported. + +Change-Id: I19d243bd3f73995e8de2d251e3d8b7f93219c3a9 +--- + sd/source/core/stlpool.cxx | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/sd/source/core/stlpool.cxx b/sd/source/core/stlpool.cxx +index 095054e..94f8f96 100644 +--- a/sd/source/core/stlpool.cxx ++++ b/sd/source/core/stlpool.cxx +@@ -699,7 +699,8 @@ void SdStyleSheetPool::CopySheets(SdStyleSheetPool& rSourcePool, SfxStyleFamily + if( !aParent.isEmpty() ) + aNewStyles.push_back( std::pair< rtl::Reference< SfxStyleSheetBase >, OUString >( xNewSheet, aParent ) ); + +- xNewSheet->SetHelpId( aHelpFile, xSheet->GetHelpId( aHelpFile ) ); ++ if( !bAddToList ) ++ xNewSheet->SetHelpId( aHelpFile, xSheet->GetHelpId( aHelpFile ) ); + xNewSheet->GetItemSet().Put( xSheet->GetItemSet() ); + + rCreatedSheets.push_back( SdStyleSheetRef( static_cast< SdStyleSheet* >( xNewSheet.get() ) ) ); +-- +2.1.0 + diff --git a/SOURCES/0001-don-t-strip-font-names-of-apparent-script-suffixes-a.patch b/SOURCES/0001-don-t-strip-font-names-of-apparent-script-suffixes-a.patch new file mode 100644 index 0000000..fc24346 --- /dev/null +++ b/SOURCES/0001-don-t-strip-font-names-of-apparent-script-suffixes-a.patch @@ -0,0 +1,64 @@ +From a771f5e490bb14d81378b57fa096c4a30b29fc28 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Mon, 26 Jan 2015 15:00:29 +0000 +Subject: [PATCH] don't strip font names of apparent script suffixes anymore + +e.g. "CM Roman CE" should be left alone. + +bump font cache id to invalidate old cached lists + +I think this practice stems from Window 3.1/Word 95 where the encoding was +included in the font name +http://www.webcenter.ru/~kazarn/eng/fonts_ttf.htm#charsettbl Microsoft Office +still generates RTF files with weird-ass Win 3.1 style fontnames but any actual +existing fonts that happen to have names that fall into that pattern should be +left alone now. + +Change-Id: Ibb704048d63b33ce510d6b1076700c6e94a0af2a +--- + unotools/source/misc/fontdefs.cxx | 29 +---------------------------- + 1 file changed, 1 insertion(+), 28 deletions(-) + +diff --git a/unotools/source/misc/fontdefs.cxx b/unotools/source/misc/fontdefs.cxx +index 61f6a07..006ab90 100644 +--- a/unotools/source/misc/fontdefs.cxx ++++ b/unotools/source/misc/fontdefs.cxx +@@ -332,34 +332,7 @@ void GetEnglishSearchFontName( OUString& rName ) + if ( i != nLen ) + rName = rName.copy( 0, i ); + +- // Remove Script at the end +- // Scriptname must be the last part of the fontname and +- // looks like "fontname (scriptname)". So there can only be a +- // script name at the and of the fontname, when the last char is ')' +- if ( (nLen >= 3) && rName[ nLen-1 ] == ')' ) +- { +- int nOpen = 1; +- sal_Int32 nTempLen = nLen-2; +- while ( nTempLen ) +- { +- if ( rName[ nTempLen ] == '(' ) +- { +- nOpen--; +- if ( !nOpen ) +- { +- // Remove Space at the end +- if ( nTempLen && (rName[ nTempLen-1 ] == ' ') ) +- nTempLen--; +- rName = rName.copy( 0, nTempLen ); +- nLen = nTempLen; +- break; +- } +- } +- if ( rName[ nTempLen ] == ')' ) +- nOpen++; +- nTempLen--; +- } +- } ++ nLen = rName.getLength(); + + // remove all whitespaces and converts to lower case ASCII + // TODO: better transliteration to ASCII e.g. all digits +-- +1.9.3 + diff --git a/SOURCES/0001-drop-OnlyShowIn-from-.desktop-files.patch b/SOURCES/0001-drop-OnlyShowIn-from-.desktop-files.patch deleted file mode 100644 index 77c08da..0000000 --- a/SOURCES/0001-drop-OnlyShowIn-from-.desktop-files.patch +++ /dev/null @@ -1,114 +0,0 @@ -From 84770f1fbfd456f70c5c48e158b268a773ca9c45 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= -Date: Fri, 4 Apr 2014 13:52:01 +0100 -Subject: [PATCH] drop OnlyShowIn from .desktop files - - I see libreoffice installs desktop actions with OnlyShowIn=Unity - I believe OnlyShowIn for actions was kicked out when they got merged in the spec - mclasen: so drop the "OnlyShowIn" lines ? - would be my recommendation - -Change-Id: I5d119d361be197bac3fc20c08b4e43f11f4b0c0c ---- - sysui/desktop/menus/base.desktop | 1 - - sysui/desktop/menus/calc.desktop | 1 - - sysui/desktop/menus/draw.desktop | 1 - - sysui/desktop/menus/impress.desktop | 1 - - sysui/desktop/menus/math.desktop | 1 - - sysui/desktop/menus/startcenter.desktop | 6 ------ - sysui/desktop/menus/writer.desktop | 1 - - 7 files changed, 12 deletions(-) - -diff --git a/sysui/desktop/menus/base.desktop b/sysui/desktop/menus/base.desktop -index 62626d4..26f1c6a 100755 ---- a/sysui/desktop/menus/base.desktop -+++ b/sysui/desktop/menus/base.desktop -@@ -37,4 +37,3 @@ Actions=NewDocument; - [Desktop Action NewDocument] - Name=New Database - Exec=${UNIXBASISROOTNAME} --base --OnlyShowIn=Unity; -diff --git a/sysui/desktop/menus/calc.desktop b/sysui/desktop/menus/calc.desktop -index e50de65..fc5e241 100755 ---- a/sysui/desktop/menus/calc.desktop -+++ b/sysui/desktop/menus/calc.desktop -@@ -37,4 +37,3 @@ Actions=NewDocument; - [Desktop Action NewDocument] - Name=New Spreadsheet - Exec=${UNIXBASISROOTNAME} --calc --OnlyShowIn=Unity; -diff --git a/sysui/desktop/menus/draw.desktop b/sysui/desktop/menus/draw.desktop -index a807fe0..b5d58ce 100755 ---- a/sysui/desktop/menus/draw.desktop -+++ b/sysui/desktop/menus/draw.desktop -@@ -37,4 +37,3 @@ Actions=NewDocument; - [Desktop Action NewDocument] - Name=New Drawing - Exec=${UNIXBASISROOTNAME} --draw --OnlyShowIn=Unity; -diff --git a/sysui/desktop/menus/impress.desktop b/sysui/desktop/menus/impress.desktop -index fda44e4..c1f6231 100755 ---- a/sysui/desktop/menus/impress.desktop -+++ b/sysui/desktop/menus/impress.desktop -@@ -37,4 +37,3 @@ Actions=NewDocument; - [Desktop Action NewDocument] - Name=New Presentation - Exec=${UNIXBASISROOTNAME} --impress --OnlyShowIn=Unity; -diff --git a/sysui/desktop/menus/math.desktop b/sysui/desktop/menus/math.desktop -index 57b1734..b6981f5 100755 ---- a/sysui/desktop/menus/math.desktop -+++ b/sysui/desktop/menus/math.desktop -@@ -38,4 +38,3 @@ Actions=NewDocument; - [Desktop Action NewDocument] - Name=New Formula - Exec=${UNIXBASISROOTNAME} --math --OnlyShowIn=Unity; -diff --git a/sysui/desktop/menus/startcenter.desktop b/sysui/desktop/menus/startcenter.desktop -index dabe887..3858c89 100755 ---- a/sysui/desktop/menus/startcenter.desktop -+++ b/sysui/desktop/menus/startcenter.desktop -@@ -38,31 +38,25 @@ Actions=Writer;Calc;Impress;Draw;Base;Math; - [Desktop Action Writer] - Name=Text Document - Exec=${UNIXBASISROOTNAME} --writer --OnlyShowIn=Unity; - - [Desktop Action Calc] - Name=Spreadsheet - Exec=${UNIXBASISROOTNAME} --calc --OnlyShowIn=Unity; - - [Desktop Action Impress] - Name=Presentation - Exec=${UNIXBASISROOTNAME} --impress --OnlyShowIn=Unity; - - [Desktop Action Draw] - Name=Drawing - Exec=${UNIXBASISROOTNAME} --draw --OnlyShowIn=Unity; - - [Desktop Action Base] - Name=Database - Exec=${UNIXBASISROOTNAME} --base --OnlyShowIn=Unity; - - [Desktop Action Math] - Name=Formula - Exec=${UNIXBASISROOTNAME} --math --OnlyShowIn=Unity; - - ##End of actions menu -diff --git a/sysui/desktop/menus/writer.desktop b/sysui/desktop/menus/writer.desktop -index e59187e..c4cea12 100755 ---- a/sysui/desktop/menus/writer.desktop -+++ b/sysui/desktop/menus/writer.desktop -@@ -37,4 +37,3 @@ Actions=NewDocument; - [Desktop Action NewDocument] - Name=New Document - Exec=${UNIXBASISROOTNAME} --writer --OnlyShowIn=Unity; --- -1.9.0 - diff --git a/SOURCES/0001-fdo-36772-Move-the-scrollbar-and-sheet-tabs-in-a-sep.patch b/SOURCES/0001-fdo-36772-Move-the-scrollbar-and-sheet-tabs-in-a-sep.patch new file mode 100644 index 0000000..7a1c592 --- /dev/null +++ b/SOURCES/0001-fdo-36772-Move-the-scrollbar-and-sheet-tabs-in-a-sep.patch @@ -0,0 +1,396 @@ +From 21c291f571daf25a7ed15f7baf551a6aac08f35f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Toma=C5=BE=20Vajngerl?= +Date: Mon, 25 Aug 2014 18:20:58 +0200 +Subject: [PATCH] fdo#36772 Move the scrollbar and sheet tabs in a separate + row. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Change-Id: I57d891d9f6e89dafb4840a577ba55baa734fdcc2 +(cherry picked from commit 1d1d1c62caf2ee6a96946e96d782e03f3ef80439) + +Move the scrollbar and layer tabs in a separate row in Draw + +The reason for this is that the height of the scrollbar is theme-dependent +and makes the tabs unreadable if it's too small. + +The same has already been done for Calc (fdo#36772). + +Reviewed-on: https://gerrit.libreoffice.org/11480 +Reviewed-by: Tomaž Vajngerl +Tested-by: Tomaž Vajngerl +(cherry picked from commit 20800ebc7ef05637134c3915798e13a272663341) + +Conflicts: + sd/source/ui/view/grviewsh.cxx + +Change-Id: Ibe22cf5e7d5863ccf276c19bfa969f5b5fc16a5a +--- + sc/source/ui/view/tabcont.cxx | 3 +- + sc/source/ui/view/tabview.cxx | 60 ++++++++++++++++------------------- + sd/source/ui/dlg/LayerTabBar.cxx | 2 +- + sd/source/ui/inc/FrameView.hxx | 4 --- + sd/source/ui/inc/GraphicViewShell.hxx | 3 -- + sd/source/ui/view/drviews5.cxx | 3 +- + sd/source/ui/view/frmview.cxx | 2 -- + sd/source/ui/view/grviewsh.cxx | 55 ++++---------------------------- + sd/source/ui/view/viewshel.cxx | 11 +++---- + 9 files changed, 42 insertions(+), 101 deletions(-) + +diff --git a/sc/source/ui/view/tabcont.cxx b/sc/source/ui/view/tabcont.cxx +index e609277..dbecb26 100644 +--- a/sc/source/ui/view/tabcont.cxx ++++ b/sc/source/ui/view/tabcont.cxx +@@ -39,8 +39,7 @@ + + ScTabControl::ScTabControl( Window* pParent, ScViewData* pData ) : + TabBar( pParent, +- WinBits(WB_BORDER | WB_3DLOOK | WB_SCROLL | WB_RANGESELECT | +- WB_MULTISELECT | WB_DRAG | WB_SIZEABLE) ), ++ WinBits(WB_BORDER | WB_3DLOOK | WB_SCROLL | WB_RANGESELECT | WB_MULTISELECT | WB_DRAG ) ), + DropTargetHelper( this ), + DragSourceHelper( this ), + pViewData( pData ), +diff --git a/sc/source/ui/view/tabview.cxx b/sc/source/ui/view/tabview.cxx +index 286f1c1..a1ac0d0 100644 +--- a/sc/source/ui/view/tabview.cxx ++++ b/sc/source/ui/view/tabview.cxx +@@ -57,9 +57,6 @@ + #define SPLIT_HANDLE_SIZE 5 + #define SC_ICONSIZE 36 + +-#define SC_SCROLLBAR_MIN 30 +-#define SC_TABBAR_MIN 6 +- + using namespace ::com::sun::star; + + // Corner-Button +@@ -343,7 +340,12 @@ void ScTabView::DoResize( const Point& rOffset, const Size& rSize, bool bInner ) + aBorderPos = rOffset; + aFrameSize = rSize; + ++ const StyleSettings& rStyleSettings = pFrameWin->GetSettings().GetStyleSettings(); ++ ++ sal_Int32 nTabWidth = pFrameWin->GetFont().GetHeight() + 4; ++ + if ( aViewData.GetHSplitMode() != SC_SPLIT_NONE ) ++ { + if ( aViewData.GetHSplitPos() > nSizeX - SPLIT_MARGIN ) + { + aViewData.SetHSplitMode( SC_SPLIT_NONE ); +@@ -351,7 +353,9 @@ void ScTabView::DoResize( const Point& rOffset, const Size& rSize, bool bInner ) + ActivatePart( SC_SPLIT_BOTTOMLEFT ); + InvalidateSplit(); + } ++ } + if ( aViewData.GetVSplitMode() != SC_SPLIT_NONE ) ++ { + if ( aViewData.GetVSplitPos() > nSizeY - SPLIT_MARGIN ) + { + aViewData.SetVSplitMode( SC_SPLIT_NONE ); +@@ -359,12 +363,13 @@ void ScTabView::DoResize( const Point& rOffset, const Size& rSize, bool bInner ) + ActivatePart( SC_SPLIT_BOTTOMLEFT ); + InvalidateSplit(); + } ++ } + + UpdateShow(); + + if (bHScroll || bVScroll) // Scrollbars horizontal oder vertikal + { +- long nScrollBarSize = pFrameWin->GetSettings().GetStyleSettings().GetScrollBarSize(); ++ long nScrollBarSize = rStyleSettings.GetScrollBarSize(); + if (bVScroll) + { + nBarX = nScrollBarSize; +@@ -372,7 +377,7 @@ void ScTabView::DoResize( const Point& rOffset, const Size& rSize, bool bInner ) + } + if (bHScroll) + { +- nBarY = nScrollBarSize; ++ nBarY = nScrollBarSize + nTabWidth; + nSizeY -= nBarY - nOverlap; + } + +@@ -403,7 +408,6 @@ void ScTabView::DoResize( const Point& rOffset, const Size& rSize, bool bInner ) + } + nSizeRt = nSizeX - nSizeLt - nSizeSp; + +- long nTabSize = 0; + if (bTabControl) + { + // pending relative tab bar width from extended document options +@@ -412,39 +416,30 @@ void ScTabView::DoResize( const Point& rOffset, const Size& rSize, bool bInner ) + SetRelTabBarWidth( mfPendingTabBarWidth ); + mfPendingTabBarWidth = -1.0; + } +- +- nTabSize = pTabControl->GetSizePixel().Width()-nOverlap; +- +- if ( aViewData.GetHSplitMode() != SC_SPLIT_FIX ) // bei linkem Scrollbar +- { +- if (nTabSize > nSizeLt-SC_SCROLLBAR_MIN) nTabSize = nSizeLt-SC_SCROLLBAR_MIN; +- if (nTabSize < SC_TABBAR_MIN) nTabSize = SC_TABBAR_MIN; +- nSizeLt -= nTabSize; +- } +- else // bei rechtem Scrollbar +- { +- if (nTabSize > nSizeRt-SC_SCROLLBAR_MIN) nTabSize = nSizeRt-SC_SCROLLBAR_MIN; +- if (nTabSize < SC_TABBAR_MIN) nTabSize = SC_TABBAR_MIN; +- nSizeRt -= nTabSize; +- } + } + +- lcl_SetPosSize( *pTabControl, Point(nPosX-nOverlap, nPosY+nSizeY), +- Size(nTabSize+nOverlap, nBarY), nTotalWidth, bLayoutRTL ); ++ Point aTabPoint(nPosX - nOverlap, nPosY + nSizeY + nScrollBarSize); ++ Size aTabSize(nSizeX, nBarY - nScrollBarSize); ++ lcl_SetPosSize( *pTabControl, aTabPoint, aTabSize, nTotalWidth, bLayoutRTL ); + pTabControl->SetSheetLayoutRTL( bLayoutRTL ); + +- lcl_SetPosSize( aHScrollLeft, Point(nPosX+nTabSize-nOverlap, nPosY+nSizeY), +- Size(nSizeLt+2*nOverlap, nBarY), nTotalWidth, bLayoutRTL ); +- lcl_SetPosSize( *pHSplitter, Point( nPosX+nTabSize+nSizeLt, nPosY+nSizeY ), +- Size( nSizeSp, nBarY ), nTotalWidth, bLayoutRTL ); +- lcl_SetPosSize( aHScrollRight, Point(nPosX+nTabSize+nSizeLt+nSizeSp-nOverlap, +- nPosY+nSizeY), +- Size(nSizeRt+2*nOverlap, nBarY), nTotalWidth, bLayoutRTL ); ++ Point aHScrollLeftPoint(nPosX - nOverlap, nPosY + nSizeY); ++ Size aHScrollLeftSize(nSizeLt + 2 * nOverlap, nScrollBarSize); ++ lcl_SetPosSize( aHScrollLeft, aHScrollLeftPoint, aHScrollLeftSize, nTotalWidth, bLayoutRTL ); ++ ++ Point aHSplitterPoint(nPosX + nSizeLt, nPosY + nSizeY); ++ Size aHSplitterSize(nSizeSp, nScrollBarSize); ++ lcl_SetPosSize( *pHSplitter, aHSplitterPoint, aHSplitterSize, nTotalWidth, bLayoutRTL ); ++ ++ Point aHScrollRightPoint(nPosX + nSizeLt + nSizeSp - nOverlap, nPosY + nSizeY); ++ Size aHScrollRightSize(nSizeRt + 2 * nOverlap, nScrollBarSize); ++ ++ lcl_SetPosSize( aHScrollRight, aHScrollRightPoint, aHScrollRightSize, nTotalWidth, bLayoutRTL ); + + // SetDragRectPixel is done below + } + +- if (bVScroll) // Scrollbars vertikal ++ if (bVScroll) + { + long nSizeUp = 0; // upper scroll bar + long nSizeSp = 0; // splitter +@@ -564,7 +559,8 @@ void ScTabView::DoResize( const Point& rOffset, const Size& rSize, bool bInner ) + } + nSplitPosX = aViewData.GetHSplitPos(); + lcl_SetPosSize( *pHSplitter, +- Point( nSplitPosX, nOutPosY ), Size( nSplitSizeX, nSplitHeight ), nTotalWidth, bLayoutRTL ); ++ Point(nSplitPosX, nOutPosY), ++ Size( nSplitSizeX, nSplitHeight - nTabWidth ), nTotalWidth, bLayoutRTL ); + nLeftSize = nSplitPosX - nPosX; + nSplitPosX += nSplitSizeX; + nRightSize = nSizeX - nLeftSize - nSplitSizeX; +diff --git a/sd/source/ui/dlg/LayerTabBar.cxx b/sd/source/ui/dlg/LayerTabBar.cxx +index fa14066..db9a764 100644 +--- a/sd/source/ui/dlg/LayerTabBar.cxx ++++ b/sd/source/ui/dlg/LayerTabBar.cxx +@@ -48,7 +48,7 @@ namespace sd { + * default constructor + */ + LayerTabBar::LayerTabBar(DrawViewShell* pViewSh, Window* pParent) +- : TabBar( pParent, WinBits( WB_BORDER | WB_3DLOOK | WB_SCROLL | WB_SIZEABLE ) ), ++ : TabBar( pParent, WinBits( WB_BORDER | WB_3DLOOK | WB_SCROLL ) ), + DropTargetHelper( this ), + pDrViewSh(pViewSh) + { +diff --git a/sd/source/ui/inc/FrameView.hxx b/sd/source/ui/inc/FrameView.hxx +index 40bdffe..120570f 100644 +--- a/sd/source/ui/inc/FrameView.hxx ++++ b/sd/source/ui/inc/FrameView.hxx +@@ -163,9 +163,6 @@ public: + void SetDrawMode(sal_uLong nNewDrawMode) { mnDrawMode = nNewDrawMode; }; + sal_uLong GetDrawMode() const { return mnDrawMode; }; + +- void SetTabCtrlPercent( double nPercent ) { mnTabCtrlPercent = nPercent; } +- double GetTabCtrlPercent() const { return mnTabCtrlPercent; } +- + void SetIsNavigatorShowingAllShapes (const bool bIsNavigatorShowingAllShapes); + bool IsNavigatorShowingAllShapes (void) const; + +@@ -200,7 +197,6 @@ private: + sal_uInt16 mnSlotId; ///< SlotId, which was initial mentioned + sal_uInt16 mnSlidesPerRow; ///< slides per row on the slide-desk + sal_uLong mnDrawMode; ///< draw mode for the normal window +- double mnTabCtrlPercent; + /** Remember whether the navigator shows all shapes () or only + the names ones (). Not persistent. + */ +diff --git a/sd/source/ui/inc/GraphicViewShell.hxx b/sd/source/ui/inc/GraphicViewShell.hxx +index 632a31e..3f35b78 100644 +--- a/sd/source/ui/inc/GraphicViewShell.hxx ++++ b/sd/source/ui/inc/GraphicViewShell.hxx +@@ -72,9 +72,6 @@ public: + protected: + void ConstructGraphicViewShell (void); + virtual void ArrangeGUIElements (void) SAL_OVERRIDE; +- +-private: +- DECL_LINK(TabBarSplitHandler, TabBar*); + }; + + } // end of namespace sd +diff --git a/sd/source/ui/view/drviews5.cxx b/sd/source/ui/view/drviews5.cxx +index 2e98ec5..fbe01c1 100644 +--- a/sd/source/ui/view/drviews5.cxx ++++ b/sd/source/ui/view/drviews5.cxx +@@ -113,8 +113,7 @@ void DrawViewShell::ArrangeGUIElements (void) + // Retrieve the current size (thickness) of the scroll bars. That is + // the width of the vertical and the height of the horizontal scroll + // bar. +- int nScrollBarSize = +- GetParentWindow()->GetSettings().GetStyleSettings().GetScrollBarSize(); ++ int nScrollBarSize = GetParentWindow()->GetSettings().GetStyleSettings().GetScrollBarSize(); + maScrBarWH = Size (nScrollBarSize, nScrollBarSize); + + Point aHPos = maViewPos; +diff --git a/sd/source/ui/view/frmview.cxx b/sd/source/ui/view/frmview.cxx +index 3121d64..c114d81 100644 +--- a/sd/source/ui/view/frmview.cxx ++++ b/sd/source/ui/view/frmview.cxx +@@ -194,7 +194,6 @@ FrameView::FrameView(SdDrawDocument* pDrawDoc, FrameView* pFrameView /* = NULK * + mbClickChangeRotation = pFrameView->IsClickChangeRotation(); + mnSlidesPerRow = pFrameView->GetSlidesPerRow(); + mnDrawMode = pFrameView->GetDrawMode(); +- mnTabCtrlPercent = pFrameView->GetTabCtrlPercent(); + mbIsNavigatorShowingAllShapes = pFrameView->IsNavigatorShowingAllShapes(); + SetPreviousViewShellType (pFrameView->GetPreviousViewShellType()); + SetViewShellTypeOnLoad (pFrameView->GetViewShellTypeOnLoad()); +@@ -228,7 +227,6 @@ FrameView::FrameView(SdDrawDocument* pDrawDoc, FrameView* pFrameView /* = NULK * + bool bUseContrast = Application::GetSettings().GetStyleSettings().GetHighContrastMode(); + mnDrawMode = bUseContrast ? OUTPUT_DRAWMODE_CONTRAST : OUTPUT_DRAWMODE_COLOR; + } +- mnTabCtrlPercent = 0.0; + mbIsNavigatorShowingAllShapes = false; + SetPreviousViewShellType (ViewShell::ST_NONE); + SetViewShellTypeOnLoad (ViewShell::ST_IMPRESS); +diff --git a/sd/source/ui/view/grviewsh.cxx b/sd/source/ui/view/grviewsh.cxx +index 253a6e7..01af5d6 100644 +--- a/sd/source/ui/view/grviewsh.cxx ++++ b/sd/source/ui/view/grviewsh.cxx +@@ -30,9 +30,6 @@ + + namespace sd { + +-static const int TABCONTROL_INITIAL_SIZE = 350; +- +- + GraphicViewShell::GraphicViewShell ( + SfxViewFrame* pFrame, + ViewShellBase& rViewShellBase, +@@ -59,10 +56,9 @@ void GraphicViewShell::ConstructGraphicViewShell(void) + { + meShellType = ST_DRAW; + +- mpLayerTabBar.reset (new LayerTabBar(this,GetParentWindow())); +- mpLayerTabBar->SetSplitHdl(LINK(this,GraphicViewShell,TabBarSplitHandler)); ++ mpLayerTabBar.reset (new LayerTabBar(this, GetParentWindow())); + +- // pb: #i67363# no layer tabbar on preview mode ++ // #i67363# no layer tabbar in preview mode + if ( !GetObjectShell()->IsPreview() ) + mpLayerTabBar->Show(); + } +@@ -88,58 +84,19 @@ void GraphicViewShell::ArrangeGUIElements (void) + if (mpLayerTabBar.get()!=NULL && mpLayerTabBar->IsVisible()) + { + Size aSize = mpLayerTabBar->GetSizePixel(); +- const Size aFrameSize ( +- GetViewFrame()->GetWindow().GetOutputSizePixel()); +- +- if (aSize.Width() == 0) +- { +- if (mpFrameView->GetTabCtrlPercent() == 0.0) +- aSize.Width() = TABCONTROL_INITIAL_SIZE; +- else +- aSize.Width() = FRound(aFrameSize.Width() +- * mpFrameView->GetTabCtrlPercent()); +- } +- aSize.Height() = GetParentWindow()->GetSettings().GetStyleSettings() +- .GetScrollBarSize(); ++ const Size aFrameSize (GetViewFrame()->GetWindow().GetOutputSizePixel()); ++ ++ aSize.Height() = GetParentWindow()->GetFont().GetHeight() + 4; ++ aSize.Width() = aFrameSize.Width(); + + Point aPos (0, maViewSize.Height() - aSize.Height()); + + mpLayerTabBar->SetPosSizePixel (aPos, aSize); +- +- if (aFrameSize.Width() > 0) +- mpFrameView->SetTabCtrlPercent ( +- (double) maTabControl.GetSizePixel().Width() +- / aFrameSize.Width()); +- else +- mpFrameView->SetTabCtrlPercent( 0.0 ); + } + + DrawViewShell::ArrangeGUIElements(); + } + +- +- +- +-IMPL_LINK(GraphicViewShell, TabBarSplitHandler, TabBar*, pTabBar) +-{ +- const long int nMax = maViewSize.Width() +- - maScrBarWH.Width() +- - pTabBar->GetPosPixel().X(); +- +- Size aTabSize = pTabBar->GetSizePixel(); +- aTabSize.Width() = std::min(pTabBar->GetSplitSize(), (long)(nMax-1)); +- +- pTabBar->SetSizePixel (aTabSize); +- +- Point aPos = pTabBar->GetPosPixel(); +- aPos.X() += aTabSize.Width(); +- +- Size aScrSize (nMax - aTabSize.Width(), maScrBarWH.Height()); +- mpHorizontalScrollBar->SetPosSizePixel(aPos, aScrSize); +- +- return 0; +-} +- + } // end of namespace sd + + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +diff --git a/sd/source/ui/view/viewshel.cxx b/sd/source/ui/view/viewshel.cxx +index 28e272e..4d6804d 100644 +--- a/sd/source/ui/view/viewshel.cxx ++++ b/sd/source/ui/view/viewshel.cxx +@@ -914,13 +914,12 @@ void ViewShell::ArrangeGUIElements (void) + if (mpHorizontalScrollBar.get()!=NULL + && mpHorizontalScrollBar->IsVisible()) + { +- int nLocalLeft = nLeft; +- if (mpLayerTabBar.get()!=NULL && mpLayerTabBar->IsVisible()) +- nLocalLeft += mpLayerTabBar->GetSizePixel().Width(); + nBottom -= maScrBarWH.Height(); ++ if (mpLayerTabBar.get()!=NULL && mpLayerTabBar->IsVisible()) ++ nBottom -= mpLayerTabBar->GetSizePixel().Height(); + mpHorizontalScrollBar->SetPosSizePixel ( +- Point(nLocalLeft,nBottom), +- Size(nRight-nLocalLeft-maScrBarWH.Width(),maScrBarWH.Height())); ++ Point(nLeft, nBottom), ++ Size(nRight - nLeft - maScrBarWH.Width(), maScrBarWH.Height())); + } + + // Vertical scrollbar. +@@ -930,7 +929,7 @@ void ViewShell::ArrangeGUIElements (void) + nRight -= maScrBarWH.Width(); + mpVerticalScrollBar->SetPosSizePixel ( + Point(nRight,nTop), +- Size (maScrBarWH.Width(),nBottom-nTop)); ++ Size (maScrBarWH.Width(), nBottom-nTop)); + } + + // Filler in the lower right corner. +-- +1.9.3 + diff --git a/SOURCES/0001-fdo-37682-paint-the-right-area.patch b/SOURCES/0001-fdo-37682-paint-the-right-area.patch new file mode 100644 index 0000000..3ae339a --- /dev/null +++ b/SOURCES/0001-fdo-37682-paint-the-right-area.patch @@ -0,0 +1,26 @@ +From 4f64ac19904ff0867e2e22c6c54b44ec2e351a97 Mon Sep 17 00:00:00 2001 +From: David Tardon +Date: Tue, 9 Dec 2014 22:12:03 +0100 +Subject: [PATCH] fdo#37682 paint the right area + +Change-Id: Ic3d1f6e47bf068e60dca711c97e3f6b194d14049 +--- + svx/source/unodraw/UnoGraphicExporter.cxx | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/svx/source/unodraw/UnoGraphicExporter.cxx b/svx/source/unodraw/UnoGraphicExporter.cxx +index eeb664f..eb1523b 100644 +--- a/svx/source/unodraw/UnoGraphicExporter.cxx ++++ b/svx/source/unodraw/UnoGraphicExporter.cxx +@@ -764,7 +764,7 @@ bool GraphicExporter::GetGraphic( ExportSettings& rSettings, Graphic& aGraphic, + // Use new StandardCheckVisisbilityRedirector + ImplExportCheckVisisbilityRedirector aRedirector( mpCurrentPage ); + +- pView->CompleteRedraw(&aVDev, Region(Rectangle(Point(), aNewSize)), &aRedirector); ++ pView->CompleteRedraw(&aVDev, Region(Rectangle(aNewOrg, aNewSize)), &aRedirector); + + aVDev.Pop(); + +-- +1.9.3 + diff --git a/SOURCES/0001-fdo-69036-do-not-try-to-create-a-sfxApplication-when.patch b/SOURCES/0001-fdo-69036-do-not-try-to-create-a-sfxApplication-when.patch new file mode 100644 index 0000000..47dec0e --- /dev/null +++ b/SOURCES/0001-fdo-69036-do-not-try-to-create-a-sfxApplication-when.patch @@ -0,0 +1,146 @@ +From 6698a143ebf961519884aefb8b00dc2d61c66818 Mon Sep 17 00:00:00 2001 +From: Norbert Thiebaud +Date: Fri, 27 Jun 2014 10:29:46 +0200 +Subject: [PATCH] fdo#69036 do not try to create a sfxApplication when we are + tearing-down + +This was triggered by connectivity calc driver, which on shutdown +was trying to 'dispose()' it's connection +which in turn would, if the shutdown of calc was already done +try to re-create an sfxApplication instance, just to delete +illusory inexistant documents... + +Change-Id: Ic166367ca399d613743f379ebbfbffb5813701c0 +--- + include/sfx2/app.hxx | 2 +- + sfx2/source/doc/objxtor.cxx | 35 ++++++++++++++++++++--------------- + 2 files changed, 21 insertions(+), 16 deletions(-) + +diff --git a/include/sfx2/app.hxx b/include/sfx2/app.hxx +index 3f81077..fe12622 100644 +--- a/include/sfx2/app.hxx ++++ b/include/sfx2/app.hxx +@@ -149,6 +149,7 @@ public: + SfxApplication(); + virtual ~SfxApplication(); + static SfxApplication* GetOrCreate(); ++ static SfxApplication* Get() { return pApp;} + + // Resource Manager + ResMgr* GetSfxResManager(); +@@ -202,7 +203,6 @@ public: + bool IsDowning() const; + void ResetLastDir(); + +- SAL_DLLPRIVATE static SfxApplication* Get() { return pApp;} + SAL_DLLPRIVATE SfxDispatcher* GetAppDispatcher_Impl(); + SAL_DLLPRIVATE SfxDispatcher* GetDispatcher_Impl(); + +diff --git a/sfx2/source/doc/objxtor.cxx b/sfx2/source/doc/objxtor.cxx +index 1fbe840..32e8b6c 100644 +--- a/sfx2/source/doc/objxtor.cxx ++++ b/sfx2/source/doc/objxtor.cxx +@@ -462,12 +462,17 @@ bool SfxObjectShell::Close() + if ( pImp->bClosing ) + { + // remove from Document list +- SfxApplication *pSfxApp = SFX_APP(); +- SfxObjectShellArr_Impl &rDocs = pSfxApp->GetObjectShells_Impl(); +- SfxObjectShellArr_Impl::iterator it = std::find( rDocs.begin(), rDocs.end(), this ); +- if ( it != rDocs.end() ) +- rDocs.erase( it ); +- pImp->bInList = false; ++ // If there is no App, there is no document to remove ++ // no need to call GetOrCreate here ++ SfxApplication *pSfxApp = SfxApplication::Get(); ++ if(pSfxApp) ++ { ++ SfxObjectShellArr_Impl &rDocs = pSfxApp->GetObjectShells_Impl(); ++ SfxObjectShellArr_Impl::iterator it = std::find( rDocs.begin(), rDocs.end(), this ); ++ if ( it != rDocs.end() ) ++ rDocs.erase( it ); ++ pImp->bInList = false; ++ } + } + } + +@@ -501,7 +506,7 @@ SfxObjectShell* SfxObjectShell::GetFirst + bool bOnlyVisible + ) + { +- SfxObjectShellArr_Impl &rDocs = SFX_APP()->GetObjectShells_Impl(); ++ SfxObjectShellArr_Impl &rDocs = SfxGetpApp()->GetObjectShells_Impl(); + + // seach for a SfxDocument of the specified type + for ( sal_uInt16 nPos = 0; nPos < rDocs.size(); ++nPos ) +@@ -528,7 +533,7 @@ SfxObjectShell* SfxObjectShell::GetNext + bool bOnlyVisible + ) + { +- SfxObjectShellArr_Impl &rDocs = SFX_APP()->GetObjectShells_Impl(); ++ SfxObjectShellArr_Impl &rDocs = SfxGetpApp()->GetObjectShells_Impl(); + + // refind the specified predecessor + sal_uInt16 nPos; +@@ -607,7 +612,7 @@ bool SfxObjectShell::PrepareClose + } + } + +- SfxApplication *pSfxApp = SFX_APP(); ++ SfxApplication *pSfxApp = SfxGetpApp(); + pSfxApp->NotifyEvent( SfxEventHint(SFX_EVENT_PREPARECLOSEDOC, GlobalEventConfig::GetEventName(STR_EVENT_PREPARECLOSEDOC), this) ); + + if( GetCreateMode() == SFX_CREATE_MODE_EMBEDDED ) +@@ -713,7 +718,7 @@ BasicManager* SfxObjectShell::GetBasicManager() const + #else + BasicManager* pBasMgr = lcl_getBasicManagerForDocument( *this ); + if ( !pBasMgr ) +- pBasMgr = SFX_APP()->GetBasicManager(); ++ pBasMgr = SfxGetpApp()->GetBasicManager(); + return pBasMgr; + #endif + } +@@ -787,7 +792,7 @@ Reference< XLibraryContainer > SfxObjectShell::GetDialogContainer() + + OSL_FAIL( "SfxObjectShell::GetDialogContainer: falling back to the application - is this really expected here?" ); + #endif +- return SFX_APP()->GetDialogContainer(); ++ return SfxGetpApp()->GetDialogContainer(); + } + + +@@ -804,7 +809,7 @@ Reference< XLibraryContainer > SfxObjectShell::GetBasicContainer() + + OSL_FAIL( "SfxObjectShell::GetBasicContainer: falling back to the application - is this really expected here?" ); + #endif +- return SFX_APP()->GetBasicContainer(); ++ return SfxGetpApp()->GetBasicContainer(); + } + + +@@ -947,7 +952,7 @@ void SfxObjectShell::SetCurrentComponent( const Reference< XInterface >& _rxComp + // but we should have filtered quite some unnecessary calls already. + + #ifndef DISABLE_SCRIPTING +- BasicManager* pAppMgr = SFX_APP()->GetBasicManager(); ++ BasicManager* pAppMgr = SfxGetpApp()->GetBasicManager(); + rTheCurrentComponent = _rxComponent; + if ( pAppMgr ) + { +@@ -1142,11 +1147,11 @@ void SfxObjectShell::SetInitialized_Impl( const bool i_fromInitNew ) + if ( i_fromInitNew ) + { + SetActivateEvent_Impl( SFX_EVENT_CREATEDOC ); +- SFX_APP()->NotifyEvent( SfxEventHint( SFX_EVENT_DOCCREATED, GlobalEventConfig::GetEventName(STR_EVENT_DOCCREATED), this ) ); ++ SfxGetpApp()->NotifyEvent( SfxEventHint( SFX_EVENT_DOCCREATED, GlobalEventConfig::GetEventName(STR_EVENT_DOCCREATED), this ) ); + } + else + { +- SFX_APP()->NotifyEvent( SfxEventHint( SFX_EVENT_LOADFINISHED, GlobalEventConfig::GetEventName(STR_EVENT_LOADFINISHED), this ) ); ++ SfxGetpApp()->NotifyEvent( SfxEventHint( SFX_EVENT_LOADFINISHED, GlobalEventConfig::GetEventName(STR_EVENT_LOADFINISHED), this ) ); + } + } + +-- +1.9.3 + diff --git a/SOURCES/0001-fdo-82496-Change-picture-option-by-rightclicking.patch b/SOURCES/0001-fdo-82496-Change-picture-option-by-rightclicking.patch new file mode 100644 index 0000000..5cbab76 --- /dev/null +++ b/SOURCES/0001-fdo-82496-Change-picture-option-by-rightclicking.patch @@ -0,0 +1,78 @@ +From caa08b214542fdf1bed3912b9c4fac36e5d87eb2 Mon Sep 17 00:00:00 2001 +From: Jennifer Liebel +Date: Tue, 2 Sep 2014 12:40:20 +0000 +Subject: [PATCH] fdo#82496: Change picture option by rightclicking + +Change-Id: I31fb1a1f89030610a9d11b9236e8cde22dbc0ca5 +--- + sw/sdi/_grfsh.sdi | 12 ++++++++++++ + sw/source/ui/app/mn.src | 1 + + sw/source/uibase/shells/grfsh.cxx | 3 +-- + 3 files changed, 14 insertions(+), 2 deletions(-) + +diff --git a/sw/sdi/_grfsh.sdi b/sw/sdi/_grfsh.sdi +index 15c00cc..2eb2ab2 100644 +--- a/sw/sdi/_grfsh.sdi ++++ b/sw/sdi/_grfsh.sdi +@@ -62,6 +62,13 @@ interface BaseTextGraphic + DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; + ] + ++ SID_CHANGE_PICTURE ++ [ ++ ExecMethod = Execute ; ++ StateMethod = GetAttrState ; ++ DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; ++ ] ++ + SID_EXTERNAL_EDIT + [ + ExecMethod = Execute ; +@@ -224,6 +231,11 @@ interface BaseTextGraphic + StateMethod = GetAttrState ; + DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; + ] ++ SID_CHANGE_PICTURE ++ [ ++ ExecMethod = FuTemporary ; ++ StateMethod = GetMenuState ; ++ ] + SID_GRFFILTER_SOLARIZE // status(final|play|rec) + [ + ExecMethod = ExecAttr ; +diff --git a/sw/source/ui/app/mn.src b/sw/source/ui/app/mn.src +index f62c8da..79b797d 100644 +--- a/sw/source/ui/app/mn.src ++++ b/sw/source/ui/app/mn.src +@@ -1239,6 +1239,7 @@ Menu MN_GRF_POPUPMENU + MN_FRM_CAPTION_ITEM + SEPARATOR; + MenuItem { ITEM_SAVE_GRAPHIC }; ++ MenuItem { ITEM_CHANGE_PICTURE }; + MenuItem { ITEM_COMPRESS_GRAPHIC }; + MenuItem { ITEM_EXTERNAL_EDIT }; + +diff --git a/sw/source/uibase/shells/grfsh.cxx b/sw/source/uibase/shells/grfsh.cxx +index d5ecec5..0e13b38 100644 +--- a/sw/source/core/uibase/shells/grfsh.cxx ++++ b/sw/source/core/uibase/shells/grfsh.cxx +@@ -178,7 +178,6 @@ void SwGrfShell::Execute(SfxRequest &rReq) + } + } + break; +- + case SID_EXTERNAL_EDIT: + { + // When the graphic is selected to be opened via some external tool +@@ -191,7 +190,7 @@ void SwGrfShell::Execute(SfxRequest &rReq) + } + } + break; +- ++ case SID_CHANGE_PICTURE: + case SID_INSERT_GRAPHIC: + { + // #i123922# implement slot independent from the two below to +-- +1.9.3 + diff --git a/SOURCES/0001-fix-KDE4-detection-on-aarch64.patch b/SOURCES/0001-fix-KDE4-detection-on-aarch64.patch index fe479ec..18537e3 100644 --- a/SOURCES/0001-fix-KDE4-detection-on-aarch64.patch +++ b/SOURCES/0001-fix-KDE4-detection-on-aarch64.patch @@ -21,7 +21,7 @@ index c0b5658..f65ab66 100644 +# platforms there. supports_multilib= case "$host_cpu" in --x86_64 | powerpc64 | powerpc64le | s390x) +-x86_64 | powerpc64 | s390x) +x86_64 | powerpc64 | powerpc64le | s390x | aarch64) if test "$SAL_TYPES_SIZEOFLONG" = "8"; then supports_multilib="yes" diff --git a/SOURCES/0001-fix-variable-name.patch b/SOURCES/0001-fix-variable-name.patch deleted file mode 100644 index 064d86c..0000000 --- a/SOURCES/0001-fix-variable-name.patch +++ /dev/null @@ -1,26 +0,0 @@ -From b38de1f8f3712f0a632ff9b6fa10df2cf3ce268f Mon Sep 17 00:00:00 2001 -From: David Tardon -Date: Thu, 28 Aug 2014 13:44:13 +0200 -Subject: [PATCH] fix variable name - -Change-Id: I170f0390f8f510591d444f44c20434b15077e687 ---- - bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx -index cfe720d..5836d8b 100644 ---- a/bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx -+++ b/bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx -@@ -233,7 +233,7 @@ static void callVirtualMethod(void * pThis, sal_uInt32 nVtableIndex, - "fmr %0, 1\n\t" - : "=f" (dret), "=r" (r3), "=r" (r4) : ); - -- MapReturn(r3, r4, dret, pReturnTypeRef, pRegisterReturn); -+ MapReturn(r3, r4, dret, pReturnTypeDescr, pRegisterReturn); - } - - // Macros for easier insertion of values to registers or stack --- -1.9.3 - diff --git a/SOURCES/0001-have-a-stab-at-improving-impossible-question.patch b/SOURCES/0001-have-a-stab-at-improving-impossible-question.patch new file mode 100644 index 0000000..495923b --- /dev/null +++ b/SOURCES/0001-have-a-stab-at-improving-impossible-question.patch @@ -0,0 +1,28 @@ +From 204dc59286857174306615dad4b4a0bd8d0cfe82 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Tue, 11 Nov 2014 14:10:04 +0000 +Subject: [PATCH] have a stab at improving impossible question + +as to whether you want to "adapt" objects or not + +Change-Id: Ic4c00be480d1be632d84dfac71fe911d48eacc51 +--- + sd/source/ui/app/strings.src | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/sd/source/ui/app/strings.src b/sd/source/ui/app/strings.src +index 2b363f6..06b0fcf 100644 +--- a/sd/source/ui/app/strings.src ++++ b/sd/source/ui/app/strings.src +@@ -397,7 +397,7 @@ String STR_READ_DATA_ERROR + }; + String STR_SCALE_OBJECTS + { +- Text [ en-US ] = "The format of the new pages will be adapted.\nDo you want to adapt the objects, too?" ; ++ Text [ en-US ] = "The page size of the target document is different than the source document.\n\nDo you want to scale the copied objects to fit the new page size?" ; + }; + String STR_CREATE_PAGES + { +-- +1.9.3 + diff --git a/SOURCES/0001-if-we-change-the-keys-we-have-to-resort-based-on-the.patch b/SOURCES/0001-if-we-change-the-keys-we-have-to-resort-based-on-the.patch new file mode 100644 index 0000000..8261ecf --- /dev/null +++ b/SOURCES/0001-if-we-change-the-keys-we-have-to-resort-based-on-the.patch @@ -0,0 +1,86 @@ +From dcc2e18191652bdffb7b4a2e4ee536c24635a4fb Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Mon, 19 Jan 2015 12:09:17 +0000 +Subject: [PATCH] if we change the keys we have to resort based on the new keys + +Change-Id: Ied95c2d1490554d9ba5402c936a9720c8a325771 +--- + sw/source/core/doc/docredln.cxx | 26 ++++++++++++++++++++++---- + 1 file changed, 22 insertions(+), 4 deletions(-) + +diff --git a/sw/source/core/doc/docredln.cxx b/sw/source/core/doc/docredln.cxx +index cb1520a..8d3d704 100644 +--- a/sw/source/core/doc/docredln.cxx ++++ b/sw/source/core/doc/docredln.cxx +@@ -3820,6 +3820,8 @@ void SwRangeRedline::MoveFromSection() + SwDoc* pDoc = GetDoc(); + const SwRedlineTbl& rTbl = pDoc->GetRedlineTbl(); + std::vector aBeforeArr, aBehindArr; ++ typedef std::map IndexAndRange; ++ IndexAndRange aIndexAndRangeMap; + sal_uInt16 nMyPos = rTbl.GetPos( this ); + OSL_ENSURE( this, "this is not in the array?" ); + bool bBreak = false; +@@ -3830,12 +3832,16 @@ void SwRangeRedline::MoveFromSection() + bBreak = true; + if( rTbl[ n ]->GetBound(true) == *GetPoint() ) + { +- aBehindArr.push_back( &rTbl[ n ]->GetBound(true) ); ++ SwRangeRedline* pRedl = rTbl[n]; ++ aBehindArr.push_back(&pRedl->GetBound(true)); ++ aIndexAndRangeMap.insert(std::make_pair(n, pRedl)); + bBreak = false; + } + if( rTbl[ n ]->GetBound(false) == *GetPoint() ) + { +- aBehindArr.push_back( &rTbl[ n ]->GetBound(false) ); ++ SwRangeRedline* pRedl = rTbl[n]; ++ aBehindArr.push_back(&pRedl->GetBound(false)); ++ aIndexAndRangeMap.insert(std::make_pair(n, pRedl)); + bBreak = false; + } + } +@@ -3845,12 +3851,16 @@ void SwRangeRedline::MoveFromSection() + bBreak = true; + if( rTbl[ n ]->GetBound(true) == *GetPoint() ) + { +- aBeforeArr.push_back( &rTbl[ n ]->GetBound(true) ); ++ SwRangeRedline* pRedl = rTbl[n]; ++ aBeforeArr.push_back(&pRedl->GetBound(true)); ++ aIndexAndRangeMap.insert(std::make_pair(n, pRedl)); + bBreak = false; + } + if( rTbl[ n ]->GetBound(false) == *GetPoint() ) + { +- aBeforeArr.push_back( &rTbl[ n ]->GetBound(false) ); ++ SwRangeRedline* pRedl = rTbl[n]; ++ aBeforeArr.push_back(&pRedl->GetBound(false)); ++ aIndexAndRangeMap.insert(std::make_pair(n, pRedl)); + bBreak = false; + } + } +@@ -3904,6 +3914,7 @@ void SwRangeRedline::MoveFromSection() + if( pColl && pCNd ) + pCNd->ChgFmtColl( pColl ); + } ++ + // #i95771# + // Under certain conditions the previous has already + // removed the change tracking section of this instance from +@@ -3924,6 +3935,13 @@ void SwRangeRedline::MoveFromSection() + *aBeforeArr[ n ] = *Start(); + for( n = 0; n < aBehindArr.size(); ++n ) + *aBehindArr[ n ] = *End(); ++ SwRedlineTbl& rResortTbl = const_cast(rTbl); ++ for (auto& a : aIndexAndRangeMap) ++ { ++ // re-insert ++ rResortTbl.Remove(a.first); ++ rResortTbl.Insert(a.second); ++ } + } + else + InvalidateRange(); +-- +1.9.3 + diff --git a/SOURCES/0001-implement-toggling-off-removeable-master-elements-wi.patch b/SOURCES/0001-implement-toggling-off-removeable-master-elements-wi.patch new file mode 100644 index 0000000..0a5d8bc --- /dev/null +++ b/SOURCES/0001-implement-toggling-off-removeable-master-elements-wi.patch @@ -0,0 +1,205 @@ +From ff0eba6c1cbf4a5816c5b9b48d4e29778f0e0869 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Thu, 6 Nov 2014 14:59:49 +0000 +Subject: [PATCH] implement toggling off removeable master elements with direct + delete + +i.e. selecting footers/headers/slidenumber/datetime previes placeholders in +master page view and pressing delete will toggle those master elements off. + +Change-Id: I91f745703e43cbb4fdd037da4eab7c8f6bf9fbf5 +(cherry picked from commit e36dae401fc8963c9a92cb2c11d9b650b943c6d3) +--- + sd/inc/sdpage.hxx | 1 + + sd/source/core/sdpage.cxx | 19 +++++++++ + sd/source/ui/dlg/masterlayoutdlg.cxx | 19 ++------- + sd/source/ui/inc/DrawViewShell.hxx | 1 + + sd/source/ui/view/drviewse.cxx | 74 ++++++++++++++++++++++++++++-------- + 5 files changed, 83 insertions(+), 31 deletions(-) + +diff --git a/sd/inc/sdpage.hxx b/sd/inc/sdpage.hxx +index 4cce906..0d3b138 100644 +--- a/sd/inc/sdpage.hxx ++++ b/sd/inc/sdpage.hxx +@@ -176,6 +176,7 @@ public: + void EnsureMasterPageDefaultBackground(); + SdrObject* CreatePresObj(PresObjKind eObjKind, bool bVertical, const Rectangle& rRect, bool bInsert=false); + SdrObject* CreateDefaultPresObj(PresObjKind eObjKind, bool bInsert); ++ void DestroyDefaultPresObj(PresObjKind eObjKind); + SdrObject* GetPresObj(PresObjKind eObjKind, int nIndex = 1, bool bFuzzySearch = false ); + PresObjKind GetPresObjKind(SdrObject* pObj) const; + OUString GetPresObjText(PresObjKind eObjKind) const; +diff --git a/sd/source/core/sdpage.cxx b/sd/source/core/sdpage.cxx +index 477ea48..fccd7cf 100644 +--- a/sd/source/core/sdpage.cxx ++++ b/sd/source/core/sdpage.cxx +@@ -1018,6 +1018,25 @@ SdrObject* SdPage::CreateDefaultPresObj(PresObjKind eObjKind, bool bInsert) + } + } + ++void SdPage::DestroyDefaultPresObj(PresObjKind eObjKind) ++{ ++ SdrObject* pObject = GetPresObj( eObjKind ); ++ ++ if( pObject ) ++ { ++ SdDrawDocument *pDoc = static_cast(pModel); ++ ++ const bool bUndo = pDoc->IsUndoEnabled(); ++ if( bUndo ) ++ pDoc->AddUndo(pDoc->GetSdrUndoFactory().CreateUndoDeleteObject(*pObject)); ++ SdrObjList* pOL = pObject->GetObjList(); ++ pOL->RemoveObject(pObject->GetOrdNumDirect()); ++ ++ if( !bUndo ) ++ SdrObject::Free(pObject); ++ } ++} ++ + /************************************************************************* + |* + |* return title area +diff --git a/sd/source/ui/dlg/masterlayoutdlg.cxx b/sd/source/ui/dlg/masterlayoutdlg.cxx +index 21aa64b..acfd28a 100644 +--- a/sd/source/ui/dlg/masterlayoutdlg.cxx ++++ b/sd/source/ui/dlg/masterlayoutdlg.cxx +@@ -121,27 +121,14 @@ void MasterLayoutDialog::applyChanges() + mpDoc->EndUndo(); + } + +-void MasterLayoutDialog::create( PresObjKind eKind ) ++void MasterLayoutDialog::create(PresObjKind eKind) + { +- mpCurrentPage->CreateDefaultPresObj( eKind, true ); ++ mpCurrentPage->CreateDefaultPresObj(eKind, true); + } + + void MasterLayoutDialog::remove( PresObjKind eKind ) + { +- SdrObject* pObject = mpCurrentPage->GetPresObj( eKind ); +- +- if( pObject ) +- { +- const bool bUndo = mpDoc->IsUndoEnabled(); +- if( bUndo ) +- mpDoc->AddUndo(mpDoc->GetSdrUndoFactory().CreateUndoDeleteObject(*pObject)); +- SdrObjList* pOL =pObject->GetObjList(); +- sal_uInt32 nOrdNum=pObject->GetOrdNumDirect(); +- pOL->RemoveObject(nOrdNum); +- +- if( !bUndo ) +- SdrObject::Free(pObject); +- } ++ mpCurrentPage->DestroyDefaultPresObj(eKind); + } + + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +diff --git a/sd/source/ui/inc/DrawViewShell.hxx b/sd/source/ui/inc/DrawViewShell.hxx +index 96c5c9c..a6f5a13 100644 +--- a/sd/source/ui/inc/DrawViewShell.hxx ++++ b/sd/source/ui/inc/DrawViewShell.hxx +@@ -216,6 +216,7 @@ public: + void FuTemporary(SfxRequest& rReq); + void FuPermanent(SfxRequest& rReq); + void FuSupport(SfxRequest& rReq); ++ void FuDeleteSelectedObjects(); + void FuSupportRotate(SfxRequest& rReq); + void FuTable(SfxRequest& rReq); + +diff --git a/sd/source/ui/view/drviewse.cxx b/sd/source/ui/view/drviewse.cxx +index cd643b0..6e7cb8d 100644 +--- a/sd/source/ui/view/drviewse.cxx ++++ b/sd/source/ui/view/drviewse.cxx +@@ -625,6 +625,64 @@ void DrawViewShell::FuPermanent(SfxRequest& rReq) + } + } + ++void DrawViewShell::FuDeleteSelectedObjects() ++{ ++ bool bConsumed = false; ++ ++ //if any placeholders are selected ++ if (mpDrawView->IsPresObjSelected(false, true, false, false)) ++ { ++ //If there are placeholders in the list which can be toggled ++ //off in edit->master->master elements then do that here, ++ std::vector aPresMarksToRemove; ++ const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList(); ++ for (size_t i=0; i < rMarkList.GetMarkCount(); ++i) ++ { ++ SdrObject* pObj = rMarkList.GetMark(i)->GetMarkedSdrObj(); ++ SdPage* pPage = (SdPage*)pObj->GetPage(); ++ PresObjKind eKind = pPage->GetPresObjKind(pObj); ++ if (eKind == PRESOBJ_FOOTER || eKind == PRESOBJ_HEADER || ++ eKind == PRESOBJ_DATETIME || eKind == PRESOBJ_SLIDENUMBER) ++ { ++ aPresMarksToRemove.push_back(pObj); ++ } ++ } ++ ++ for (std::vector::iterator aI = aPresMarksToRemove.begin(); aI < aPresMarksToRemove.end(); ++aI) ++ { ++ //Unmark object ++ mpDrawView->MarkObj((*aI), mpDrawView->GetSdrPageView(), true); ++ SdPage* pPage = (SdPage*)(*aI)->GetPage(); ++ //remove placeholder from master page ++ pPage->DestroyDefaultPresObj(pPage->GetPresObjKind((*aI))); ++ } ++ ++ bConsumed = true; ++ } ++ ++ // placeholders which cannot be deleted selected ++ if (mpDrawView->IsPresObjSelected(false, true, false, true)) ++ { ++ ::sd::Window* pWindow = GetActiveWindow(); ++ InfoBox(pWindow, SD_RESSTR(STR_ACTION_NOTPOSSIBLE) ).Execute(); ++ bConsumed = true; ++ } ++ ++ if (!bConsumed) ++ { ++ KeyCode aKCode(KEY_DELETE); ++ KeyEvent aKEvt( 0, aKCode); ++ ++ bConsumed = mpDrawView && mpDrawView->getSmartTags().KeyInput( aKEvt ); ++ ++ if( !bConsumed && HasCurrentFunction() ) ++ bConsumed = GetCurrentFunction()->KeyInput(aKEvt); ++ ++ if( !bConsumed && mpDrawView ) ++ mpDrawView->DeleteMarked(); ++ } ++} ++ + void DrawViewShell::FuSupport(SfxRequest& rReq) + { + if( rReq.GetSlot() == SID_STYLE_FAMILY && rReq.GetArgs()) +@@ -873,23 +931,9 @@ void DrawViewShell::FuSupport(SfxRequest& rReq) + pOLV->PostKeyEvent(aKEvt); + } + } +- else if ( mpDrawView->IsPresObjSelected(false, true, false, true) ) +- { +- ::sd::Window* pWindow = GetActiveWindow(); +- InfoBox(pWindow, SD_RESSTR(STR_ACTION_NOTPOSSIBLE) ).Execute(); +- } + else + { +- KeyCode aKCode(KEY_DELETE); +- KeyEvent aKEvt( 0, aKCode); +- +- bool bConsumed = mpDrawView && mpDrawView->getSmartTags().KeyInput( aKEvt ); +- +- if( !bConsumed && HasCurrentFunction() ) +- bConsumed = GetCurrentFunction()->KeyInput(aKEvt); +- +- if( !bConsumed && mpDrawView ) +- mpDrawView->DeleteMarked(); ++ FuDeleteSelectedObjects(); + } + rReq.Ignore (); + } +-- +1.9.3 + diff --git a/SOURCES/0001-java-dir-for-powepc64-and-powepc64le-can-differ.patch b/SOURCES/0001-java-dir-for-powepc64-and-powepc64le-can-differ.patch new file mode 100644 index 0000000..4863441 --- /dev/null +++ b/SOURCES/0001-java-dir-for-powepc64-and-powepc64le-can-differ.patch @@ -0,0 +1,34 @@ +From 7a66dbe982623be620ad6ac426fe689a434e5f51 Mon Sep 17 00:00:00 2001 +From: David Tardon +Date: Tue, 12 May 2015 10:37:53 +0200 +Subject: [PATCH] java dir for powepc64 and powepc64le can differ + +E.g., RHEL >= 7.1 uses ppc64le for reasons listed in +https://bugs.openjdk.java.net/browse/JDK-8073139 . + +Change-Id: I982e65cdf99999e8a5ed23cf444ccb2aee764c4c +--- + configure.ac | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 26071dc..55157a9 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -6997,9 +6997,12 @@ then + powerpc) + my_java_arch=ppc + ;; +- powerpc64*) ++ powerpc64) + my_java_arch=ppc64 + ;; ++ powerpc64le) ++ AS_IF([test -d "$JAVA_HOME/jre/lib/ppc64le"], [my_java_arch=ppc64le], [my_java_arch=ppc64]) ++ ;; + x86_64) + my_java_arch=amd64 + ;; +-- +2.4.0 + diff --git a/SOURCES/0001-just-use-ANSI-C-declarations.patch b/SOURCES/0001-just-use-ANSI-C-declarations.patch new file mode 100644 index 0000000..e3acab2 --- /dev/null +++ b/SOURCES/0001-just-use-ANSI-C-declarations.patch @@ -0,0 +1,65 @@ +From 4d687aec3c5ea0f18ab3f01f827cc544e677bae3 Mon Sep 17 00:00:00 2001 +From: David Tardon +Date: Thu, 6 Nov 2014 10:20:00 +0100 +Subject: [PATCH] just use ANSI C declarations + +Change-Id: Iec50f3474b97497c50522eabb4435795b3ba3b56 +--- + vcl/source/filter/jpeg/transupp.h | 22 +++++++++++----------- + 1 file changed, 11 insertions(+), 11 deletions(-) + +diff --git a/vcl/source/filter/jpeg/transupp.h b/vcl/source/filter/jpeg/transupp.h +index 4448c9f..4dbbc2a 100644 +--- a/vcl/source/filter/jpeg/transupp.h ++++ b/vcl/source/filter/jpeg/transupp.h +@@ -164,27 +164,27 @@ typedef struct { + + /* Parse a crop specification (written in X11 geometry style) */ + EXTERN(boolean) jtransform_parse_crop_spec +- JPP((jpeg_transform_info *info, const char *spec)); ++ (jpeg_transform_info *info, const char *spec); + /* Request any required workspace */ + EXTERN(boolean) jtransform_request_workspace +- JPP((j_decompress_ptr srcinfo, jpeg_transform_info *info)); ++ (j_decompress_ptr srcinfo, jpeg_transform_info *info); + /* Adjust output image parameters */ + EXTERN(jvirt_barray_ptr *) jtransform_adjust_parameters +- JPP((j_decompress_ptr srcinfo, j_compress_ptr dstinfo, ++ (j_decompress_ptr srcinfo, j_compress_ptr dstinfo, + jvirt_barray_ptr *src_coef_arrays, +- jpeg_transform_info *info)); ++ jpeg_transform_info *info); + /* Execute the actual transformation, if any */ + EXTERN(void) jtransform_execute_transform +- JPP((j_decompress_ptr srcinfo, j_compress_ptr dstinfo, ++ (j_decompress_ptr srcinfo, j_compress_ptr dstinfo, + jvirt_barray_ptr *src_coef_arrays, +- jpeg_transform_info *info)); ++ jpeg_transform_info *info); + /* Determine whether lossless transformation is perfectly + * possible for a specified image and transformation. + */ + EXTERN(boolean) jtransform_perfect_transform +- JPP((JDIMENSION image_width, JDIMENSION image_height, ++ (JDIMENSION image_width, JDIMENSION image_height, + int MCU_width, int MCU_height, +- JXFORM_CODE transform)); ++ JXFORM_CODE transform); + + /* jtransform_execute_transform used to be called + * jtransform_execute_transformation, but some compilers complain about +@@ -209,8 +209,8 @@ typedef enum { + + /* Setup decompression object to save desired markers in memory */ + EXTERN(void) jcopy_markers_setup +- JPP((j_decompress_ptr srcinfo, JCOPY_OPTION option)); ++ (j_decompress_ptr srcinfo, JCOPY_OPTION option); + /* Copy markers saved in the given source object to the destination object */ + EXTERN(void) jcopy_markers_execute +- JPP((j_decompress_ptr srcinfo, j_compress_ptr dstinfo, +- JCOPY_OPTION option)); ++ (j_decompress_ptr srcinfo, j_compress_ptr dstinfo, ++ JCOPY_OPTION option); +-- +2.1.0 + diff --git a/SOURCES/0001-libgcrypt-and-gnutls-are-only-used-by-our-internal-e.patch b/SOURCES/0001-libgcrypt-and-gnutls-are-only-used-by-our-internal-e.patch new file mode 100644 index 0000000..149e2b8 --- /dev/null +++ b/SOURCES/0001-libgcrypt-and-gnutls-are-only-used-by-our-internal-e.patch @@ -0,0 +1,30 @@ +From 3cfc0933c38a9f5383042347ef659c3d982090a3 Mon Sep 17 00:00:00 2001 +From: Stephan Bergmann +Date: Wed, 8 Oct 2014 13:22:44 +0200 +Subject: [PATCH] libgcrypt and gnutls are only used by our internal + external/neon + +...so must not be checked for if --without-system-neon + +Change-Id: If598108f98d6f94f32650feba7044224a78a4c12 +(cherry picked from commit c592e7dea2e5ac326041b78b9512600c984ccced) +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 363eb2f..ed3da6c 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -9463,7 +9463,7 @@ dnl =================================================================== + dnl Check for building gnutls + dnl =================================================================== + AC_MSG_CHECKING([whether to use gnutls]) +-if test "$WITH_WEBDAV" = "neon" && test "$enable_openssl" = "no"; then ++if test "$WITH_WEBDAV" = "neon" -a "$with_system_neon" = no -a "$enable_openssl" = "no"; then + AC_MSG_RESULT([yes]) + AM_PATH_LIBGCRYPT() + PKG_CHECK_MODULES(GNUTLS, [gnutls],, +-- +1.9.3 + diff --git a/SOURCES/0001-misspell-some-words-copy-and-paste-slide-to-gimp.patch b/SOURCES/0001-misspell-some-words-copy-and-paste-slide-to-gimp.patch new file mode 100644 index 0000000..8705c3e --- /dev/null +++ b/SOURCES/0001-misspell-some-words-copy-and-paste-slide-to-gimp.patch @@ -0,0 +1,49 @@ +From e884b98b248e155cda4c53a302cc821a3c2ddaf9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Fri, 8 May 2015 15:49:08 +0100 +Subject: [PATCH] misspell some words, copy and paste slide to gimp + +and we don't want to see the mis-spelt underlines + +Change-Id: Ib3ae29297a1697e0f7b0caa816504da7edf721d1 +--- + sd/source/ui/app/sdxfer.cxx | 18 ++++++++++++++++-- + 1 file changed, 16 insertions(+), 2 deletions(-) + +diff --git a/sd/source/ui/app/sdxfer.cxx b/sd/source/ui/app/sdxfer.cxx +index dda4f74..4ac1fac 100644 +--- a/sd/source/ui/app/sdxfer.cxx ++++ b/sd/source/ui/app/sdxfer.cxx +@@ -518,13 +518,27 @@ bool SdTransferable::GetData( const DataFlavor& rFlavor, const OUString& rDestDo + } + else if( nFormat == FORMAT_GDIMETAFILE ) + { +- if( mpSdViewIntern ) ++ if (mpSdViewIntern) ++ { ++ const bool bToggleOnlineSpell = mpSdDrawDocumentIntern && mpSdDrawDocumentIntern->GetOnlineSpell(); ++ if (bToggleOnlineSpell) ++ mpSdDrawDocumentIntern->SetOnlineSpell(false); + bOK = SetGDIMetaFile( mpSdViewIntern->GetMarkedObjMetaFile( true ), rFlavor ); ++ if (bToggleOnlineSpell) ++ mpSdDrawDocumentIntern->SetOnlineSpell(true); ++ } + } + else if( FORMAT_BITMAP == nFormat || SOT_FORMATSTR_ID_PNG == nFormat ) + { +- if( mpSdViewIntern ) ++ if (mpSdViewIntern) ++ { ++ const bool bToggleOnlineSpell = mpSdDrawDocumentIntern && mpSdDrawDocumentIntern->GetOnlineSpell(); ++ if (bToggleOnlineSpell) ++ mpSdDrawDocumentIntern->SetOnlineSpell(false); + bOK = SetBitmapEx( mpSdViewIntern->GetMarkedObjBitmapEx(true), rFlavor ); ++ if (bToggleOnlineSpell) ++ mpSdDrawDocumentIntern->SetOnlineSpell(true); ++ } + } + else if( ( nFormat == FORMAT_STRING ) && mpBookmark ) + { +-- +2.1.0 + diff --git a/SOURCES/0001-move-UOF-and-Office-2003-filters-to-xsltfilter-modul.patch b/SOURCES/0001-move-UOF-and-Office-2003-filters-to-xsltfilter-modul.patch deleted file mode 100644 index da53573..0000000 --- a/SOURCES/0001-move-UOF-and-Office-2003-filters-to-xsltfilter-modul.patch +++ /dev/null @@ -1,168 +0,0 @@ -From be4b837ed225af13d6f964eca7e3f95e44c8e45a Mon Sep 17 00:00:00 2001 -From: David Tardon -Date: Mon, 9 Jun 2014 13:51:36 +0200 -Subject: [PATCH] move UOF and Office 2003 filters to xsltfilter module - -Change-Id: I6e5ac310567bb7bd12fbba444e4e1deb9fea30d5 ---- - filter/Configuration_filter.mk | 15 +++++++++------ - postprocess/CustomTarget_registry.mk | 1 + - scp2/source/ooo/file_ooo.scp | 7 ------- - scp2/source/ooo/module_hidden_ooo.scp | 1 - - scp2/source/xsltfilter/file_xsltfilter.scp | 7 +++++++ - scp2/source/xsltfilter/module_xsltfilter.scp | 1 + - 6 files changed, 18 insertions(+), 14 deletions(-) - -diff --git a/filter/Configuration_filter.mk b/filter/Configuration_filter.mk -index 9256a6c..57d6940 100644 ---- a/filter/Configuration_filter.mk -+++ b/filter/Configuration_filter.mk -@@ -357,7 +357,6 @@ $(call filter_Configuration_add_types,fcfg_langpack,fcfg_writer_types.xcu,filter - pdf_Portable_Document_Format \ - writer8_template \ - writer8 \ -- writer_MS_Word_2003_XML \ - writer_MS_Word_2007_XML \ - writer_MS_Word_2007_XML_Template \ - writer_OOXML \ -@@ -419,7 +418,6 @@ $(call filter_Configuration_add_filters,fcfg_langpack,fcfg_writer_filters.xcu,fi - writer_pdf_Export\ - writer8\ - writer8_template \ -- MS_Word_2003_XML \ - MS_Word_2007_XML \ - MS_Word_2007_XML_Template \ - OOXML_Text \ -@@ -444,7 +442,6 @@ $(call filter_Configuration_add_ui_filters,fcfg_langpack,filter/source/config/fr - writer_StarOffice_XML_Writer_Template_ui \ - writer8_ui \ - writer8_template_ui \ -- MS_Word_2003_XML_ui \ - MS_Word_2007_XML_ui \ - MS_Word_2007_XML_Template_ui \ - OOXML_Text_ui \ -@@ -535,7 +532,6 @@ $(call filter_Configuration_add_types,fcfg_langpack,fcfg_calc_types.xcu,filter/s - calc_dBase\ - calc8 \ - calc8_template \ -- calc_MS_Excel_2003_XML \ - MS_Excel_2007_XML \ - MS_Excel_2007_XML_Template \ - MS_Excel_2007_Binary \ -@@ -574,7 +570,6 @@ $(call filter_Configuration_add_filters,fcfg_langpack,fcfg_calc_filters.xcu,filt - dBase \ - calc8 \ - calc8_template \ -- MS_Excel_2003_XML \ - calc_MS_Excel_2007_XML \ - calc_MS_Excel_2007_XML_Template \ - calc_MS_Excel_2007_Binary \ -@@ -601,7 +596,6 @@ $(call filter_Configuration_add_ui_filters,fcfg_langpack,filter/source/config/fr - calc_StarOffice_XML_Calc_Template_ui \ - calc8_ui \ - calc8_template_ui \ -- MS_Excel_2003_XML_ui \ - calc_MS_Excel_2007_XML_ui \ - calc_MS_Excel_2007_XML_Template_ui \ - calc_MS_Excel_2007_Binary_ui \ -@@ -993,7 +987,9 @@ $(call filter_Configuration_add_internal_filters,fcfg_langpack,fcfg_internalgrap - - # fcfg_xslt - $(call filter_Configuration_add_types,fcfg_langpack,fcfg_xslt_types.xcu,filter/source/config/fragments/types,\ -+ calc_MS_Excel_2003_XML \ - writer_DocBook_File \ -+ writer_MS_Word_2003_XML \ - XHTML_File \ - Unified_Office_Format_text \ - Unified_Office_Format_spreadsheet \ -@@ -1002,6 +998,8 @@ $(call filter_Configuration_add_types,fcfg_langpack,fcfg_xslt_types.xcu,filter/s - - $(call filter_Configuration_add_filters,fcfg_langpack,fcfg_xslt_filters.xcu,filter/source/config/fragments/filters,\ - DocBook_File \ -+ MS_Excel_2003_XML \ -+ MS_Word_2003_XML \ - XHTML_Calc_File \ - XHTML_Draw_File \ - XHTML_Impress_File \ -@@ -1011,4 +1009,9 @@ $(call filter_Configuration_add_filters,fcfg_langpack,fcfg_xslt_filters.xcu,filt - UOF_presentation \ - ) - -+$(call filter_Configuration_add_ui_filters,fcfg_langpack,filter/source/config/fragments/filters,\ -+ MS_Excel_2003_XML_ui \ -+ MS_Word_2003_XML_ui \ -+) -+ - # vim: set noet sw=4 ts=4: -diff --git a/postprocess/CustomTarget_registry.mk b/postprocess/CustomTarget_registry.mk -index 2ae4ab6..b147251 100644 ---- a/postprocess/CustomTarget_registry.mk -+++ b/postprocess/CustomTarget_registry.mk -@@ -427,6 +427,7 @@ postprocess_FILES_writer := \ - $(postprocess_MOD)/org/openoffice/Setup-writer.xcu - - postprocess_DEPS_xsltfilter := main -+postprocess_OPTDEPS_xsltfilter := calc writer - postprocess_FILES_xsltfilter := \ - $(call gb_XcuFilterFiltersTarget_get_target,fcfg_xslt_filters.xcu) \ - $(call gb_XcuFilterTypesTarget_get_target,fcfg_xslt_types.xcu) -diff --git a/scp2/source/ooo/file_ooo.scp b/scp2/source/ooo/file_ooo.scp -index f643a52..5875930 100644 ---- a/scp2/source/ooo/file_ooo.scp -+++ b/scp2/source/ooo/file_ooo.scp -@@ -598,13 +598,6 @@ End - - #endif - --File gid_File_filter_xslt -- TXT_FILE_BODY; -- Styles = (FILELIST, PACKED); -- Dir = FILELIST_DIR; -- Name = "filter_xslt.filelist"; --End -- - File gid_Starregistry_Services_Rdb - TXT_FILE_BODY; - Name = "services.rdb"; -diff --git a/scp2/source/ooo/module_hidden_ooo.scp b/scp2/source/ooo/module_hidden_ooo.scp -index 7b3c2ca..6b36645 100644 ---- a/scp2/source/ooo/module_hidden_ooo.scp -+++ b/scp2/source/ooo/module_hidden_ooo.scp -@@ -274,7 +274,6 @@ Module gid_Module_Root_Files_6 - gid_File_Share_Registry_Main_Xcd, - gid_File_Share_Registry_Forcedefault_Xcd, - gid_File_Pymailmerge, -- gid_File_filter_xslt, - gid_File_Extra_Fontunxpsprint, - gid_File_Extra_Fontunxppds, - gid_File_Extra_Fontunxafm); -diff --git a/scp2/source/xsltfilter/file_xsltfilter.scp b/scp2/source/xsltfilter/file_xsltfilter.scp -index 9cc699b..36ba626 100644 ---- a/scp2/source/xsltfilter/file_xsltfilter.scp -+++ b/scp2/source/xsltfilter/file_xsltfilter.scp -@@ -38,3 +38,10 @@ File gid_File_filter_xhtml - Dir = FILELIST_DIR; - Name = "filter_xhtml.filelist"; - End -+ -+File gid_File_filter_xslt -+ TXT_FILE_BODY; -+ Styles = (FILELIST, PACKED); -+ Dir = FILELIST_DIR; -+ Name = "filter_xslt.filelist"; -+End -diff --git a/scp2/source/xsltfilter/module_xsltfilter.scp b/scp2/source/xsltfilter/module_xsltfilter.scp -index ad3af2b..8ae95ba 100644 ---- a/scp2/source/xsltfilter/module_xsltfilter.scp -+++ b/scp2/source/xsltfilter/module_xsltfilter.scp -@@ -26,6 +26,7 @@ Module gid_Module_Optional_Xsltfiltersamples - ParentID = gid_Module_Optional; - Files = ( gid_File_filter_docbook, - gid_File_filter_xhtml, -+ gid_File_filter_xslt, - gid_File_Share_Registry_Xsltfilter_Xcd ); - Minimal = NO; - Default = YES; --- -1.9.3 - diff --git a/SOURCES/0001-n-up-printing-done-by-vcl-brochures-by-draw-impress.patch b/SOURCES/0001-n-up-printing-done-by-vcl-brochures-by-draw-impress.patch new file mode 100644 index 0000000..f9a04b8 --- /dev/null +++ b/SOURCES/0001-n-up-printing-done-by-vcl-brochures-by-draw-impress.patch @@ -0,0 +1,47 @@ +From 2c37487470c7ea76d493eb0554cf2f9458ed5075 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Tue, 23 Sep 2014 10:20:06 +0100 +Subject: [PATCH] n-up printing done by vcl, brochures by draw/impress + +Change-Id: If38365d949ad91d50138798a0a386f9543eb4f22 +--- + sd/source/ui/view/DocumentRenderer.cxx | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +diff --git a/sd/source/ui/view/DocumentRenderer.cxx b/sd/source/ui/view/DocumentRenderer.cxx +index 723aa02e..1a903f7 100644 +--- a/sd/source/ui/view/DocumentRenderer.cxx ++++ b/sd/source/ui/view/DocumentRenderer.cxx +@@ -1362,7 +1362,7 @@ private: + SdDrawDocument* pDocument = mrBase.GetMainViewShell()->GetDoc(); + bool bIsDraw = pDocument->GetDocumentType() == DOCUMENT_TYPE_DRAW; + rInfo.meOrientation = ORIENTATION_PORTRAIT; +- bool bDoDodgyHeightWidthFit = !bIsDraw && !mpOptions->IsNotes(); ++ bool bDoDodgyHeightWidthFit = mpOptions->IsBooklet() || (!bIsDraw && !mpOptions->IsNotes()); + + if( ! mpOptions->IsBooklet()) + { +@@ -1371,7 +1371,8 @@ private: + else if (rInfo.maPageSize.Width() < rInfo.maPageSize.Height()) + rInfo.meOrientation = ORIENTATION_LANDSCAPE; + +- // Draw and Notes should abide by their specified paper size ++ // Draw and Notes should abide by their specified paper size, except ++ // for booklets + Size aPaperSize; + if (!bDoDodgyHeightWidthFit) + { +@@ -1448,8 +1449,8 @@ private: + if (mpOptions->IsTime()) + aInfo.msTimeDate += GetSdrGlobalData().GetLocaleData()->getTime( Time( Time::SYSTEM ), false, false ); + +- // Draw should use specified paper size when printing +- if (mrBase.GetDocShell()->GetDocumentType() == DOCUMENT_TYPE_DRAW) ++ // Draw should use specified paper size when printing, except for booklets ++ if (!mpOptions->IsBooklet() && mrBase.GetDocShell()->GetDocumentType() == DOCUMENT_TYPE_DRAW) + { + aInfo.maPrintSize = mrBase.GetDocument()->GetSdPage(0, PK_STANDARD)->GetSize(); + maPrintSize = awt::Size(aInfo.maPrintSize.Width(), +-- +1.9.3 + diff --git a/SOURCES/0001-negative-after-text-indents-ignored-by-msword-for-ap.patch b/SOURCES/0001-negative-after-text-indents-ignored-by-msword-for-ap.patch new file mode 100644 index 0000000..a93db65 --- /dev/null +++ b/SOURCES/0001-negative-after-text-indents-ignored-by-msword-for-ap.patch @@ -0,0 +1,87 @@ +From b5ce50d1d07394f6b59b028373120369c83d5d66 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Tue, 7 Apr 2015 09:56:43 +0100 +Subject: [PATCH] negative after-text indents ignored by msword for apos + +Change-Id: I33e178f23bc4b1372c4c329954b301ae68902154 +--- + sw/source/filter/ww8/ww8graf.cxx | 3 +++ + sw/source/filter/ww8/ww8par.hxx | 2 ++ + sw/source/filter/ww8/ww8par6.cxx | 26 ++++++++++++++++++++++++++ + 3 files changed, 31 insertions(+) + +diff --git a/sw/source/filter/ww8/ww8graf.cxx b/sw/source/filter/ww8/ww8graf.cxx +index 456ce25..3a11d1e 100644 +--- a/sw/source/filter/ww8/ww8graf.cxx ++++ b/sw/source/filter/ww8/ww8graf.cxx +@@ -2905,7 +2905,10 @@ SwFlyFrmFmt* SwWW8ImplReader::ConvertDrawTextToFly(SdrObject* &rpObject, + MoveOutsideFly(pRetFrmFmt, aSave.GetStartPos(),!bJoined); + + aSave.Restore( this ); ++ ++ StripNegativeAfterIndent(pRetFrmFmt); + } ++ + } + return pRetFrmFmt; + } +diff --git a/sw/source/filter/ww8/ww8par.hxx b/sw/source/filter/ww8/ww8par.hxx +index a7fdff5..0a34059 100644 +--- a/sw/source/filter/ww8/ww8par.hxx ++++ b/sw/source/filter/ww8/ww8par.hxx +@@ -1488,6 +1488,7 @@ private: + bool IsDropCap(); + bool IsListOrDropcap() { return (!pAktItemSet || bDropCap); }; + ++ //Apo == Absolutely Positioned Object, MSWord's old-style frames + WW8FlyPara *ConstructApo(const ApoTestResults &rApo, + const WW8_TablePos *pTabPos); + bool StartApo(const ApoTestResults &rApo, const WW8_TablePos *pTabPos, SvxULSpaceItem* pULSpaceItem = 0); +@@ -1495,6 +1496,7 @@ private: + bool TestSameApo(const ApoTestResults &rApo, const WW8_TablePos *pTabPos); + ApoTestResults TestApo(int nCellLevel, bool bTableRowEnd, + const WW8_TablePos *pTabPos); ++ void StripNegativeAfterIndent(SwFrmFmt *pFlyFmt) const; + + void EndSpecial(); + bool ProcessSpecial(bool &rbReSync, WW8_CP nStartCp); +diff --git a/sw/source/filter/ww8/ww8par6.cxx b/sw/source/filter/ww8/ww8par6.cxx +index 418e130..b63e639 100644 +--- a/sw/source/filter/ww8/ww8par6.cxx ++++ b/sw/source/filter/ww8/ww8par6.cxx +@@ -2430,6 +2430,32 @@ bool SwWW8ImplReader::JoinNode(SwPaM &rPam, bool bStealAttr) + return bRet; + } + ++//In auto-width word frames negative after-indent values are ignored ++void SwWW8ImplReader::StripNegativeAfterIndent(SwFrmFmt *pFlyFmt) const ++{ ++ const SwNodeIndex* pSttNd = pFlyFmt->GetCntnt().GetCntntIdx(); ++ if (!pSttNd) ++ return; ++ ++ SwNodeIndex aIdx(*pSttNd, 1); ++ SwNodeIndex aEnd(*pSttNd->GetNode().EndOfSectionNode()); ++ while (aIdx < aEnd) ++ { ++ SwTxtNode *pNd = aIdx.GetNode().GetTxtNode(); ++ if (pNd) ++ { ++ const SvxLRSpaceItem& rLR = ItemGet(*pNd, RES_LR_SPACE); ++ if (rLR.GetRight() < 0) ++ { ++ SvxLRSpaceItem aLR(rLR); ++ aLR.SetRight(0); ++ pNd->SetAttr(aLR); ++ } ++ } ++ ++aIdx; ++ } ++} ++ + void SwWW8ImplReader::StopApo() + { + OSL_ENSURE(pWFlyPara, "no pWFlyPara to close"); +-- +1.9.3 + diff --git a/SOURCES/0001-ooo-93212-avoid-slicing-during-construction-of-SdrPa.patch b/SOURCES/0001-ooo-93212-avoid-slicing-during-construction-of-SdrPa.patch new file mode 100644 index 0000000..3c86bc4 --- /dev/null +++ b/SOURCES/0001-ooo-93212-avoid-slicing-during-construction-of-SdrPa.patch @@ -0,0 +1,560 @@ +From 9638e6207c7fc48712b1b238177462c00f5011e8 Mon Sep 17 00:00:00 2001 +From: David Tardon +Date: Wed, 3 Dec 2014 22:01:57 +0100 +Subject: [PATCH] ooo#93212 avoid slicing during construction of SdrPage + +Also hide copy ctor and assignment operator of all derived classes, to +ensure that Clone() is the only method to make copies of them. + +Change-Id: Icb3b50c63b086abe8c9add32e3041fe19692d20b +--- + basctl/source/dlged/dlgedpage.cxx | 10 +++- + basctl/source/inc/dlgedpage.hxx | 5 ++ + include/svx/fmpage.hxx | 9 +++- + include/svx/obj3d.hxx | 8 ++- + include/svx/svdpage.hxx | 27 +++++++--- + reportdesign/inc/RptPage.hxx | 2 + + reportdesign/source/core/sdr/RptPage.cxx | 4 +- + sc/inc/drawpage.hxx | 3 ++ + sd/inc/sdpage.hxx | 6 ++- + sd/source/core/sdpage2.cxx | 28 ++++++----- + svx/source/engine3d/obj3d.cxx | 11 ++++- + svx/source/form/fmpage.cxx | 11 ++++- + svx/source/svdraw/svdpage.cxx | 84 +++++++++----------------------- + sw/inc/dpage.hxx | 3 ++ + 14 files changed, 122 insertions(+), 89 deletions(-) + +diff --git a/basctl/source/dlged/dlgedpage.cxx b/basctl/source/dlged/dlgedpage.cxx +index 86a792f..15f7f12 100644 +--- a/basctl/source/dlged/dlgedpage.cxx ++++ b/basctl/source/dlged/dlgedpage.cxx +@@ -33,6 +33,12 @@ DlgEdPage::DlgEdPage(DlgEdModel& rModel, bool bMasterPage) + { + } + ++DlgEdPage::DlgEdPage(const DlgEdPage& rSrcPage) ++ : SdrPage(rSrcPage) ++ , pDlgEdForm(0) ++{ ++} ++ + DlgEdPage::~DlgEdPage() + { + Clear(); +@@ -41,7 +47,9 @@ DlgEdPage::~DlgEdPage() + + SdrPage* DlgEdPage::Clone() const + { +- return new DlgEdPage( *this ); ++ DlgEdPage* const pNewPage = new DlgEdPage( *this ); ++ pNewPage->lateInit( *this ); ++ return pNewPage; + } + + +diff --git a/basctl/source/inc/dlgedpage.hxx b/basctl/source/inc/dlgedpage.hxx +index b92760f..0275292 100644 +--- a/basctl/source/inc/dlgedpage.hxx ++++ b/basctl/source/inc/dlgedpage.hxx +@@ -34,6 +34,8 @@ class DlgEdForm; + + class DlgEdPage : public SdrPage + { ++ DlgEdPage& operator=(const DlgEdPage&) SAL_DELETED_FUNCTION; ++ + private: + DlgEdForm* pDlgEdForm; + +@@ -50,6 +52,9 @@ public: + DlgEdForm* GetDlgEdForm() const { return pDlgEdForm; } + + virtual SdrObject* SetObjectOrdNum(sal_uLong nOldObjNum, sal_uLong nNewObjNum) SAL_OVERRIDE; ++ ++protected: ++ DlgEdPage(const DlgEdPage& rSrcPage); + }; + + } // namespace basctl +diff --git a/include/svx/fmpage.hxx b/include/svx/fmpage.hxx +index e381a64..a48df9c 100644 +--- a/include/svx/fmpage.hxx ++++ b/include/svx/fmpage.hxx +@@ -40,6 +40,8 @@ class HelpEvent; + + class SVX_DLLPUBLIC FmFormPage : public SdrPage + { ++ FmFormPage& operator=(const FmFormPage&) SAL_DELETED_FUNCTION; ++ + friend class FmFormObj; + FmFormPageImpl* m_pImpl; + OUString m_sPageName; +@@ -48,12 +50,12 @@ public: + TYPEINFO_OVERRIDE(); + + FmFormPage(FmFormModel& rModel, bool bMasterPage=false); +- FmFormPage(const FmFormPage& rPage); + virtual ~FmFormPage(); + + virtual void SetModel(SdrModel* pNewModel) SAL_OVERRIDE; + + virtual SdrPage* Clone() const SAL_OVERRIDE; ++ // TODO: Uh huh, how is this supposed to work? Creating a SdrPage from FmFormPage? + using SdrPage::Clone; + + virtual void InsertObject(SdrObject* pObj, sal_uLong nPos = CONTAINER_APPEND, +@@ -73,6 +75,11 @@ public: + Window* pWin, + SdrView* pView, + const HelpEvent& rEvt ); ++ ++protected: ++ FmFormPage(const FmFormPage& rPage); ++ ++ void lateInit(const FmFormPage& rPage); + }; + + #endif // INCLUDED_SVX_FMPAGE_HXX +diff --git a/include/svx/obj3d.hxx b/include/svx/obj3d.hxx +index bdba2c3..f370f20 100644 +--- a/include/svx/obj3d.hxx ++++ b/include/svx/obj3d.hxx +@@ -78,16 +78,22 @@ public: + + class E3dObjList : public SdrObjList + { ++ E3dObjList &operator=(const E3dObjList& rSrcList) SAL_DELETED_FUNCTION; ++ + public: + TYPEINFO_OVERRIDE(); + E3dObjList(SdrModel* pNewModel = 0, SdrPage* pNewPage = 0, E3dObjList* pNewUpList = 0); +- SVX_DLLPUBLIC E3dObjList(const E3dObjList& rSrcList); + SVX_DLLPUBLIC virtual ~E3dObjList(); + ++ virtual E3dObjList* Clone() const; ++ + virtual void NbcInsertObject(SdrObject* pObj, sal_uIntPtr nPos=CONTAINER_APPEND, const SdrInsertReason* pReason=NULL) SAL_OVERRIDE; + virtual void InsertObject(SdrObject* pObj, sal_uIntPtr nPos=CONTAINER_APPEND, const SdrInsertReason* pReason=NULL) SAL_OVERRIDE; + virtual SdrObject* NbcRemoveObject(sal_uIntPtr nObjNum) SAL_OVERRIDE; + virtual SdrObject* RemoveObject(sal_uIntPtr nObjNum) SAL_OVERRIDE; ++ ++protected: ++ SVX_DLLPUBLIC E3dObjList(const E3dObjList& rSrcList); + }; + + /************************************************************************* +diff --git a/include/svx/svdpage.hxx b/include/svx/svdpage.hxx +index c737186..87bf2f3 100644 +--- a/include/svx/svdpage.hxx ++++ b/include/svx/svdpage.hxx +@@ -78,6 +78,9 @@ public: + + class SVX_DLLPUBLIC SdrObjList + { ++ SdrObjList(const SdrObjList& rSrcList) SAL_DELETED_FUNCTION; ++ SdrObjList &operator=(const SdrObjList& rSrcList) SAL_DELETED_FUNCTION; ++ + private: + typedef ::std::vector SdrObjectContainerType; + SdrObjectContainerType maList; +@@ -97,20 +100,23 @@ friend class SdrEditView; + protected: + virtual void RecalcRects(); + ++ SdrObjList(); ++ void lateInit(const SdrObjList& rSrcList); ++ + private: + /// simple ActionChildInserted forwarder to have it on a central place + void impChildInserted(SdrObject& rChild) const; + public: + TYPEINFO(); + SdrObjList(SdrModel* pNewModel, SdrPage* pNewPage, SdrObjList* pNewUpList=NULL); +- SdrObjList(const SdrObjList& rSrcList); + virtual ~SdrObjList(); ++ ++ virtual SdrObjList* Clone() const; ++ + // !!! Diese Methode nur fuer Leute, die ganz genau wissen was sie tun !!! + + // #110094# This should not be needed (!) + void SetObjOrdNumsDirty() { bObjOrdNumsDirty=true; } +- // pModel, pPage, pUpList und pOwnerObj werden Zuweisungeoperator nicht veraendert! +- void operator=(const SdrObjList& rSrcList); + void CopyObjects(const SdrObjList& rSrcList); + // alles Aufraeumen (ohne Undo) + void Clear(); +@@ -403,6 +409,7 @@ public: + + class SVX_DLLPUBLIC SdrPage : public SdrObjList, public tools::WeakBase< SdrPage > + { ++ SdrPage& operator=(const SdrPage& rSrcPage) SAL_DELETED_FUNCTION; + + // start PageUser section + private: +@@ -473,15 +480,19 @@ protected: + ::com::sun::star::drawing::XDrawPage> const&); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > createUnoPage(); + ++ // Copying of pages is split into two parts: construction and copying of page objects, ++ // because the copying might need access to fully initialized page. Clone() is responsible ++ // to call lateInit() after copy-construction of a new object. Any initialization in derived ++ // classes that needs access to the page objects must be deferred to lateInit. And it must ++ // call lateInit() of its parent class. ++ SdrPage(const SdrPage& rSrcPage); ++ void lateInit(const SdrPage& rSrcPage); ++ + public: + TYPEINFO_OVERRIDE(); + SdrPage(SdrModel& rNewModel, bool bMasterPage=false); +- // Copy-Ctor und Zuweisungeoperator sind nicht getestet! +- SdrPage(const SdrPage& rSrcPage); + virtual ~SdrPage(); +- // pModel, pPage, pUpList, pOwnerObj und mbInserted werden Zuweisungeoperator nicht veraendert! +- SdrPage& operator=(const SdrPage& rSrcPage); +- virtual SdrPage* Clone() const; ++ virtual SdrPage* Clone() const SAL_OVERRIDE; + virtual SdrPage* Clone(SdrModel* pNewModel) const; + bool IsMasterPage() const { return mbMaster; } + void SetInserted(bool bNew = true); +diff --git a/reportdesign/inc/RptPage.hxx b/reportdesign/inc/RptPage.hxx +index b320a3e..9ea966a 100644 +--- a/reportdesign/inc/RptPage.hxx ++++ b/reportdesign/inc/RptPage.hxx +@@ -34,6 +34,8 @@ class OReportModel; + + class REPORTDESIGN_DLLPUBLIC OReportPage : public SdrPage + { ++ OReportPage& operator=(const OReportPage&) SAL_DELETED_FUNCTION; ++ + OReportModel& rModel; + ::com::sun::star::uno::Reference< ::com::sun::star::report::XSection > m_xSection; + bool m_bSpecialInsertMode; +diff --git a/reportdesign/source/core/sdr/RptPage.cxx b/reportdesign/source/core/sdr/RptPage.cxx +index 5009a66..c55a360 100644 +--- a/reportdesign/source/core/sdr/RptPage.cxx ++++ b/reportdesign/source/core/sdr/RptPage.cxx +@@ -61,7 +61,9 @@ OReportPage::~OReportPage() + + SdrPage* OReportPage::Clone() const + { +- return new OReportPage( *this ); ++ OReportPage *const pNewPage = new OReportPage( *this ); ++ pNewPage->lateInit( *this ); ++ return pNewPage; + } + + +diff --git a/sc/inc/drawpage.hxx b/sc/inc/drawpage.hxx +index c11d4cc..6f7b68e 100644 +--- a/sc/inc/drawpage.hxx ++++ b/sc/inc/drawpage.hxx +@@ -26,6 +26,9 @@ class ScDrawLayer; + + class ScDrawPage: public FmFormPage + { ++ ScDrawPage(const ScDrawPage&) SAL_DELETED_FUNCTION; ++ ScDrawPage& operator=(const ScDrawPage&) SAL_DELETED_FUNCTION; ++ + public: + ScDrawPage(ScDrawLayer& rNewModel, bool bMasterPage = false); + virtual ~ScDrawPage(); +diff --git a/sd/inc/sdpage.hxx b/sd/inc/sdpage.hxx +index 767cf39..13ec1c2 100644 +--- a/sd/inc/sdpage.hxx ++++ b/sd/inc/sdpage.hxx +@@ -98,6 +98,8 @@ namespace sd { + + class SD_DLLPUBLIC SdPage : public FmFormPage, public SdrObjUserCall + { ++ SdPage& operator=(const SdPage&) SAL_DELETED_FUNCTION; ++ + friend class SdGenericDrawPage; + friend class SdDrawPage; + friend class sd::UndoAnimation; +@@ -153,11 +155,13 @@ protected: + sal_Int32 mnTransitionFadeColor; + double mfTransitionDuration; + ++ SdPage(const SdPage& rSrcPage); ++ void lateInit(const SdPage& rSrcPage); ++ + public: + TYPEINFO_OVERRIDE(); + + SdPage(SdDrawDocument& rNewDoc, bool bMasterPage=false); +- SdPage(const SdPage& rSrcPage); + virtual ~SdPage(); + virtual SdrPage* Clone() const SAL_OVERRIDE; + virtual SdrPage* Clone(SdrModel* pNewModel) const SAL_OVERRIDE; +diff --git a/sd/source/core/sdpage2.cxx b/sd/source/core/sdpage2.cxx +index 450c646..57f4699 100644 +--- a/sd/source/core/sdpage2.cxx ++++ b/sd/source/core/sdpage2.cxx +@@ -377,15 +377,6 @@ SdPage::SdPage(const SdPage& rSrcPage) + mePageKind = rSrcPage.mePageKind; + meAutoLayout = rSrcPage.meAutoLayout; + +- // use shape list directly to preserve constness of rSrcPage +- const std::list< SdrObject* >& rShapeList = rSrcPage.maPresentationShapeList.getList(); +- for( std::list< SdrObject* >::const_iterator aIter = rShapeList.begin(); +- aIter != rShapeList.end(); ++aIter ) +- { +- SdrObject* pObj = *aIter; +- InsertPresObj(GetObj(pObj->GetOrdNum()), rSrcPage.GetPresObjKind(pObj)); +- } +- + mbSelected = false; + mnTransitionType = rSrcPage.mnTransitionType; + mnTransitionSubtype = rSrcPage.mnTransitionSubtype; +@@ -410,10 +401,24 @@ SdPage::SdPage(const SdPage& rSrcPage) + mnPaperBin = rSrcPage.mnPaperBin; + meOrientation = rSrcPage.meOrientation; + ++ mpPageLink = NULL; // is set when inserting via ConnectLink() ++} ++ ++void SdPage::lateInit(const SdPage& rSrcPage) ++{ ++ FmFormPage::lateInit(rSrcPage); ++ ++ // use shape list directly to preserve constness of rSrcPage ++ const std::list< SdrObject* >& rShapeList = rSrcPage.maPresentationShapeList.getList(); ++ for( std::list< SdrObject* >::const_iterator aIter = rShapeList.begin(); ++ aIter != rShapeList.end(); ++aIter ) ++ { ++ SdrObject* pObj = *aIter; ++ InsertPresObj(GetObj(pObj->GetOrdNum()), rSrcPage.GetPresObjKind(pObj)); ++ } ++ + // header footer + setHeaderFooterSettings( rSrcPage.getHeaderFooterSettings() ); +- +- mpPageLink = NULL; // is set when inserting via ConnectLink() + } + + +@@ -433,6 +438,7 @@ SdrPage* SdPage::Clone(SdrModel* pNewModel) const + (void)pNewModel; + + SdPage* pNewPage = new SdPage(*this); ++ pNewPage->lateInit( *this ); + + cloneAnimations( *pNewPage ); + +diff --git a/svx/source/engine3d/obj3d.cxx b/svx/source/engine3d/obj3d.cxx +index eee59ad..ef50b3d 100644 +--- a/svx/source/engine3d/obj3d.cxx ++++ b/svx/source/engine3d/obj3d.cxx +@@ -91,11 +91,18 @@ E3dObjList::E3dObjList(SdrModel* pNewModel, SdrPage* pNewPage, E3dObjList* pNewU + { + } + +-E3dObjList::E3dObjList(const E3dObjList& rSrcList) +-: SdrObjList(rSrcList) ++E3dObjList::E3dObjList(const E3dObjList&) ++: SdrObjList() + { + } + ++E3dObjList* E3dObjList::Clone() const ++{ ++ E3dObjList* const pObjList = new E3dObjList(*this); ++ pObjList->lateInit(*this); ++ return pObjList; ++} ++ + E3dObjList::~E3dObjList() + { + } +diff --git a/svx/source/form/fmpage.cxx b/svx/source/form/fmpage.cxx +index 365dfd3..96c3baa 100644 +--- a/svx/source/form/fmpage.cxx ++++ b/svx/source/form/fmpage.cxx +@@ -66,6 +66,12 @@ FmFormPage::FmFormPage(const FmFormPage& rPage) + :SdrPage(rPage) + ,m_pImpl(new FmFormPageImpl( *this ) ) + { ++} ++ ++void FmFormPage::lateInit(const FmFormPage& rPage) ++{ ++ SdrPage::lateInit( rPage ); ++ + m_pImpl->initFrom( rPage.GetImpl() ); + m_sPageName = rPage.m_sPageName; + } +@@ -113,8 +119,9 @@ void FmFormPage::SetModel(SdrModel* pNewModel) + + SdrPage* FmFormPage::Clone() const + { +- return new FmFormPage(*this); +- // hier fehlt noch ein kopieren der Objekte ++ FmFormPage* const pNewPage = new FmFormPage(*this); ++ pNewPage->lateInit(*this); ++ return pNewPage; + } + + +diff --git a/svx/source/svdraw/svdpage.cxx b/svx/source/svdraw/svdpage.cxx +index 94139448..da27d4a 100644 +--- a/svx/source/svdraw/svdpage.cxx ++++ b/svx/source/svdraw/svdpage.cxx +@@ -88,7 +88,7 @@ SdrObjList::SdrObjList(SdrModel* pNewModel, SdrPage* pNewPage, SdrObjList* pNewU + eListKind=SDROBJLIST_UNKNOWN; + } + +-SdrObjList::SdrObjList(const SdrObjList& rSrcList): ++SdrObjList::SdrObjList(): + maList(), + mpNavigationOrder(), + mbIsNavigationOrderDirty(false) +@@ -101,7 +101,6 @@ SdrObjList::SdrObjList(const SdrObjList& rSrcList): + bRectsDirty=false; + pOwnerObj=NULL; + eListKind=SDROBJLIST_UNKNOWN; +- *this=rSrcList; + } + + SdrObjList::~SdrObjList() +@@ -115,9 +114,18 @@ SdrObjList::~SdrObjList() + Clear(); // delete contents of container + } + +-void SdrObjList::operator=(const SdrObjList& rSrcList) ++SdrObjList* SdrObjList::Clone() const + { +- Clear(); ++ SdrObjList* const pObjList = new SdrObjList(); ++ pObjList->lateInit(*this); ++ return pObjList; ++} ++ ++void SdrObjList::lateInit(const SdrObjList& rSrcList) ++{ ++ // this function is only supposed to be called once, right after construction ++ assert(maList.empty()); ++ + eListKind=rSrcList.eListKind; + CopyObjects(rSrcList); + } +@@ -1246,31 +1254,6 @@ SdrPage::SdrPage(const SdrPage& rSrcPage) + mbPageBorderOnlyLeftRight(rSrcPage.mbPageBorderOnlyLeftRight) + { + aPrefVisiLayers.SetAll(); +- eListKind = (mbMaster) ? SDROBJLIST_MASTERPAGE : SDROBJLIST_DRAWPAGE; +- +- // copy things from source +- // Warning: this leads to slicing (see issue 93186) and has to be +- // removed as soon as possible. +- *this = rSrcPage; +- OSL_ENSURE(mpSdrPageProperties, +- "SdrPage::SdrPage: operator= did not create needed SdrPageProperties (!)"); +- +- // be careful and correct eListKind, a member of SdrObjList which +- // will be changed by the SdrOIbjList::operator= before... +- eListKind = (mbMaster) ? SDROBJLIST_MASTERPAGE : SDROBJLIST_DRAWPAGE; +- +- // The previous assignment to *this may have resulted in a call to +- // createUnoPage at a partially initialized (sliced) SdrPage object. +- // Due to the vtable being not yet fully set-up at this stage, +- // createUnoPage() may have been called at the wrong class. +- // To force a call to the right createUnoPage() at a later time when the +- // new object is full constructed mxUnoPage is disposed now. +- uno::Reference xComponent (mxUnoPage, uno::UNO_QUERY); +- if (xComponent.is()) +- { +- mxUnoPage = NULL; +- xComponent->dispose(); +- } + } + + SdrPage::~SdrPage() +@@ -1319,20 +1302,10 @@ SdrPage::~SdrPage() + + } + +-SdrPage& SdrPage::operator=(const SdrPage& rSrcPage) ++void SdrPage::lateInit(const SdrPage& rSrcPage) + { +- if( this == &rSrcPage ) +- return *this; +- if(mpViewContact) +- { +- delete mpViewContact; +- mpViewContact = 0L; +- } +- +- // Joe also sets some parameters for the class this one +- // is derived from. SdrObjList does the same bad handling of +- // copy constructor and operator=, so i better let it stand here. +- pPage = this; ++ assert(!mpViewContact); ++ assert(!mpSdrPageProperties); + + // copy all the local parameters to make this instance + // a valid copy of source page before copying and inserting +@@ -1361,21 +1334,7 @@ SdrPage& SdrPage::operator=(const SdrPage& rSrcPage) + mbObjectsNotPersistent = rSrcPage.mbObjectsNotPersistent; + + { +- // #i111122# delete SdrPageProperties when model is different +- if(mpSdrPageProperties && GetModel() != rSrcPage.GetModel()) +- { +- delete mpSdrPageProperties; +- mpSdrPageProperties = 0; +- } +- +- if(!mpSdrPageProperties) +- { +- mpSdrPageProperties = new SdrPageProperties(*this); +- } +- else +- { +- mpSdrPageProperties->ClearItem(0); +- } ++ mpSdrPageProperties = new SdrPageProperties(*this); + + if(!IsMasterPage()) + { +@@ -1385,9 +1344,12 @@ SdrPage& SdrPage::operator=(const SdrPage& rSrcPage) + mpSdrPageProperties->SetStyleSheet(rSrcPage.getSdrPageProperties().GetStyleSheet()); + } + +- // Now copy the contained objects (by cloning them) +- SdrObjList::operator=(rSrcPage); +- return *this; ++ // Now copy the contained objects ++ SdrObjList::lateInit(rSrcPage); ++ ++ // be careful and correct eListKind, a member of SdrObjList which ++ // will be changed by the SdrObjList::lateInit before... ++ eListKind = (mbMaster) ? SDROBJLIST_MASTERPAGE : SDROBJLIST_DRAWPAGE; + } + + SdrPage* SdrPage::Clone() const +@@ -1399,7 +1361,7 @@ SdrPage* SdrPage::Clone(SdrModel* pNewModel) const + { + if (pNewModel==NULL) pNewModel=pModel; + SdrPage* pPage2=new SdrPage(*pNewModel); +- *pPage2=*this; ++ pPage2->lateInit(*this); + return pPage2; + } + +diff --git a/sw/inc/dpage.hxx b/sw/inc/dpage.hxx +index 54aa789..8284f6e 100644 +--- a/sw/inc/dpage.hxx ++++ b/sw/inc/dpage.hxx +@@ -28,6 +28,9 @@ class SwDoc; + + class SwDPage : public FmFormPage, public SdrObjUserCall + { ++ SwDPage(const SwDPage&) SAL_DELETED_FUNCTION; ++ SwDPage &operator=(const SwDPage&) SAL_DELETED_FUNCTION; ++ + SdrPageGridFrameList* pGridLst; + SwDoc& rDoc; + +-- +2.1.0 + diff --git a/SOURCES/0001-ppc64-simplify-this-a-little.patch b/SOURCES/0001-ppc64-simplify-this-a-little.patch new file mode 100644 index 0000000..b44d7d1 --- /dev/null +++ b/SOURCES/0001-ppc64-simplify-this-a-little.patch @@ -0,0 +1,139 @@ +From 3059edbc419e79f964a340b5b0ac828a5e866666 Mon Sep 17 00:00:00 2001 +From: Caolan McNamara +Date: Fri, 10 Jul 2015 16:00:22 +0100 +Subject: [PATCH 1/2] ppc64: simplify this a little +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Change-Id: I8166f65625d389a604750852d6d5a4fee25a88fa +Reviewed-on: https://gerrit.libreoffice.org/16935 +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara +(cherry picked from commit fe14c55f000b9a31d885b411655232e0691e1cd4) +Reviewed-on: https://gerrit.libreoffice.org/16945 +Reviewed-by: David Tardon +Tested-by: David Tardon +--- + .../cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx | 61 +++++++++------------- + 1 file changed, 24 insertions(+), 37 deletions(-) + +diff --git a/bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx +index 4013076..81d3d5c 100644 +--- a/bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx ++++ b/bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx +@@ -124,6 +124,8 @@ void MapReturn(long r3, long r4, double dret, typelib_TypeDescriptionReference* + if (pReturnType->pType->nSize > 8) + pRegisters[1] = r4; + } ++#else ++ (void)r4; + #endif + default: + break; +@@ -185,45 +187,29 @@ static void callVirtualMethod(void * pThis, sal_uInt32 nVtableIndex, + + // fill registers + __asm__ __volatile__ ( +- "ld 3, 0(%0)\n\t" +- "ld 4, 8(%0)\n\t" +- "ld 5, 16(%0)\n\t" +- "ld 6, 24(%0)\n\t" +- "ld 7, 32(%0)\n\t" +- "ld 8, 40(%0)\n\t" +- "ld 9, 48(%0)\n\t" +- "ld 10, 56(%0)\n\t" +- "lfd 1, 0(%1)\n\t" +- "lfd 2, 8(%1)\n\t" +- "lfd 3, 16(%1)\n\t" +- "lfd 4, 24(%1)\n\t" +- "lfd 5, 32(%1)\n\t" +- "lfd 6, 40(%1)\n\t" +- "lfd 7, 48(%1)\n\t" +- "lfd 8, 56(%1)\n\t" +- "lfd 9, 64(%1)\n\t" +- "lfd 10, 72(%1)\n\t" +- "lfd 11, 80(%1)\n\t" +- "lfd 12, 88(%1)\n\t" +- "lfd 13, 96(%1)\n\t" +- : : "r" (pGPR), "r" (pFPR) +- : "r0", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", +- "fr1", "fr2", "fr3", "fr4", "fr5", "fr6", "fr7", "fr8", "fr9", +- "fr10", "fr11", "fr12", "fr13" ++ "lfd 1, 0(%0)\n\t" ++ "lfd 2, 8(%0)\n\t" ++ "lfd 3, 16(%0)\n\t" ++ "lfd 4, 24(%0)\n\t" ++ "lfd 5, 32(%0)\n\t" ++ "lfd 6, 40(%0)\n\t" ++ "lfd 7, 48(%0)\n\t" ++ "lfd 8, 56(%0)\n\t" ++ "lfd 9, 64(%0)\n\t" ++ "lfd 10, 72(%0)\n\t" ++ "lfd 11, 80(%0)\n\t" ++ "lfd 12, 88(%0)\n\t" ++ "lfd 13, 96(%0)\n\t" ++ : : "r" (pFPR) ++ : "fr1", "fr2", "fr3", "fr4", "fr5", "fr6", "fr7", "fr8", "fr9", ++ "fr10", "fr11", "fr12", "fr13" + ); + + // tell gcc that r3 to r11 are not available to it for doing the TOC and exception munge on the func call + register sal_uInt64 r3 asm("r3"); + register sal_uInt64 r4 asm("r4"); +- register sal_uInt64 r5 asm("r5"); +- register sal_uInt64 r6 asm("r6"); +- register sal_uInt64 r7 asm("r7"); +- register sal_uInt64 r8 asm("r8"); +- register sal_uInt64 r9 asm("r9"); +- register sal_uInt64 r10 asm("r10"); +- register sal_uInt64 r11 asm("r11"); + +- (*pFunc)(r3, r4, r5, r6, r7, r8, r9, r10); ++ (*pFunc)(pGPR[0], pGPR[1], pGPR[2], pGPR[3], pGPR[4], pGPR[5], pGPR[6], pGPR[7]); + + // get return value + __asm__ __volatile__ ( +@@ -375,7 +361,6 @@ static void cpp_call( + + if (!rParam.bOut && bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr )) + { +-// uno_copyAndConvertData( pCppArgs[nPos] = alloca( 8 ), pUnoArgs[nPos], pParamTypeDescr, + uno_copyAndConvertData( pCppArgs[nPos] = pStack, pUnoArgs[nPos], pParamTypeDescr, + pThis->getBridge()->getUno2Cpp() ); + switch (pParamTypeDescr->eTypeClass) +@@ -383,7 +368,7 @@ static void cpp_call( + case typelib_TypeClass_HYPER: + case typelib_TypeClass_UNSIGNED_HYPER: + #if OSL_DEBUG_LEVEL > 2 +- fprintf(stderr, "hyper is %lx\n", pCppArgs[nPos]); ++ fprintf(stderr, "hyper is %lx\n", pCppArgs[nPos]); + #endif + INSERT_INT64( pCppArgs[nPos], nGPR, pGPR, pStack, bOverflow ); + break; +@@ -391,7 +376,7 @@ static void cpp_call( + case typelib_TypeClass_UNSIGNED_LONG: + case typelib_TypeClass_ENUM: + #if OSL_DEBUG_LEVEL > 2 +- fprintf(stderr, "long is %x\n", pCppArgs[nPos]); ++ fprintf(stderr, "long is %x\n", pCppArgs[nPos]); + #endif + INSERT_INT32( pCppArgs[nPos], nGPR, pGPR, pStack, bOverflow ); + break; +@@ -406,10 +391,12 @@ static void cpp_call( + break; + case typelib_TypeClass_FLOAT: + INSERT_FLOAT( pCppArgs[nPos], nFPR, pFPR, pStack, bOverflow ); +- break; ++ break; + case typelib_TypeClass_DOUBLE: + INSERT_DOUBLE( pCppArgs[nPos], nFPR, pFPR, pStack, bOverflow ); + break; ++ default: ++ break; + } + + // no longer needed +-- +2.1.0 + diff --git a/SOURCES/0001-radio-check-top-center-bottom-alignment-for-table-ce.patch b/SOURCES/0001-radio-check-top-center-bottom-alignment-for-table-ce.patch new file mode 100644 index 0000000..1fcdcc5 --- /dev/null +++ b/SOURCES/0001-radio-check-top-center-bottom-alignment-for-table-ce.patch @@ -0,0 +1,148 @@ +From 7e787af122ebcef29b284e8c46d84a12c0625cd8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Mon, 12 Jan 2015 15:45:19 +0000 +Subject: [PATCH] radio check top/center/bottom alignment for table cells + +Change-Id: I30b51510ac5fbfb3c1dd09e0f86a246a8b516f1e +(cherry picked from commit 2aa40ecebb2cb1e5d2cf85d7ada70b5e541bad67) +--- + sw/source/ui/app/mn.src | 3 +++ + sw/uiconfig/sglobal/menubar/menubar.xml | 6 +++--- + sw/uiconfig/sweb/menubar/menubar.xml | 6 +++--- + sw/uiconfig/swform/menubar/menubar.xml | 6 +++--- + sw/uiconfig/swreport/menubar/menubar.xml | 6 +++--- + sw/uiconfig/swriter/menubar/menubar.xml | 6 +++--- + sw/uiconfig/swxform/menubar/menubar.xml | 6 +++--- + 7 files changed, 21 insertions(+), 18 deletions(-) + +diff --git a/sw/source/ui/app/mn.src b/sw/source/ui/app/mn.src +index 4fa9b14..4bb40ac 100644 +--- a/sw/source/ui/app/mn.src ++++ b/sw/source/ui/app/mn.src +@@ -397,18 +397,21 @@ + SEPARATOR ; \ + MenuItem\ + {\ ++ RadioCheck = TRUE ; \ + Identifier = SID_TABLE_VERT_NONE ; \ + HelpId = CMD_SID_TABLE_VERT_NONE ; \ + Text [ en-US ] = "~Top" ; \ + };\ + MenuItem\ + {\ ++ RadioCheck = TRUE ; \ + Identifier = SID_TABLE_VERT_CENTER ; \ + HelpId = CMD_SID_TABLE_VERT_CENTER ; \ + Text [ en-US ] = "C~enter" ; \ + };\ + MenuItem\ + {\ ++ RadioCheck = TRUE ; \ + Identifier = SID_TABLE_VERT_BOTTOM ; \ + HelpId = CMD_SID_TABLE_VERT_BOTTOM ; \ + Text [ en-US ] = "~Bottom" ; \ +diff --git a/sw/uiconfig/sglobal/menubar/menubar.xml b/sw/uiconfig/sglobal/menubar/menubar.xml +index d5736a5..6f09ae8 100644 +--- a/sw/uiconfig/sglobal/menubar/menubar.xml ++++ b/sw/uiconfig/sglobal/menubar/menubar.xml +@@ -304,9 +304,9 @@ + + + +- +- +- ++ ++ ++ + + + +diff --git a/sw/uiconfig/sweb/menubar/menubar.xml b/sw/uiconfig/sweb/menubar/menubar.xml +index ee78c24..87115d4 100644 +--- a/sw/uiconfig/sweb/menubar/menubar.xml ++++ b/sw/uiconfig/sweb/menubar/menubar.xml +@@ -248,9 +248,9 @@ + + + +- +- +- ++ ++ ++ + + + +diff --git a/sw/uiconfig/swform/menubar/menubar.xml b/sw/uiconfig/swform/menubar/menubar.xml +index ddf914f..7305ceb 100644 +--- a/sw/uiconfig/swform/menubar/menubar.xml ++++ b/sw/uiconfig/swform/menubar/menubar.xml +@@ -303,9 +303,9 @@ + + + +- +- +- ++ ++ ++ + + + +diff --git a/sw/uiconfig/swreport/menubar/menubar.xml b/sw/uiconfig/swreport/menubar/menubar.xml +index fab0914..a41c3c2 100644 +--- a/sw/uiconfig/swreport/menubar/menubar.xml ++++ b/sw/uiconfig/swreport/menubar/menubar.xml +@@ -304,9 +304,9 @@ + + + +- +- +- ++ ++ ++ + + + +diff --git a/sw/uiconfig/swriter/menubar/menubar.xml b/sw/uiconfig/swriter/menubar/menubar.xml +index b26b980..f5b3fa9 100644 +--- a/sw/uiconfig/swriter/menubar/menubar.xml ++++ b/sw/uiconfig/swriter/menubar/menubar.xml +@@ -312,9 +312,9 @@ + + + +- +- +- ++ ++ ++ + + + +diff --git a/sw/uiconfig/swxform/menubar/menubar.xml b/sw/uiconfig/swxform/menubar/menubar.xml +index ec9f631..4c08ef2 100644 +--- a/sw/uiconfig/swxform/menubar/menubar.xml ++++ b/sw/uiconfig/swxform/menubar/menubar.xml +@@ -305,9 +305,9 @@ + + + +- +- +- ++ ++ ++ + + + +-- +1.9.3 + diff --git a/SOURCES/0001-refine-current-date-time-hotkey-handling.patch b/SOURCES/0001-refine-current-date-time-hotkey-handling.patch deleted file mode 100644 index 14eb1ce..0000000 --- a/SOURCES/0001-refine-current-date-time-hotkey-handling.patch +++ /dev/null @@ -1,316 +0,0 @@ -From 351235d046c48cf2d9ccbca4175c5b70bdbae847 Mon Sep 17 00:00:00 2001 -Message-Id: <351235d046c48cf2d9ccbca4175c5b70bdbae847.1409054200.git.erack@redhat.com> -From: Eike Rathke -Date: Mon, 25 Aug 2014 16:34:20 +0200 -Subject: [PATCH] refine current date/time hotkey handling -MIME-Version: 1.0 -Content-Type: multipart/mixed; boundary="------------erAck-patch-parts" - -This is a multi-part message in MIME format. ---------------erAck-patch-parts -Content-Type: text/plain; charset=UTF-8; format=fixed -Content-Transfer-Encoding: 8bit - - -Previously, a date or time hotkey lead to always the current date+time -value being set at the current cell, just formatted differently to -either date or time. This not only looked strange in the input line that -still displayed the full date+time value, but also affected day and time -calculations involving these values. - -With this change the result depends on the previous value and formatting -of the cell. Furthermore, inserting a current date or time value at the -cursor position while editing a cell is now possible. - -If cell is in input or edit mode, insert date/time at cursor position, -else create a date or time or date+time cell as follows: - -* key date on time cell => current date + time of cell => date+time formatted cell - * unless time cell was empty or 00:00 time => current date => date formatted cell -* key date on date+time cell => current date + 00:00 time => date+time formatted cell - * unless date was current date => current date => date formatted cell -* key date on other cell => current date => date formatted cell -* key time on date cell => date of cell + current time => date+time formatted cell - * unless date cell was empty => current time => time formatted cell -* key time on date+time cell => current time => time formatted cell - * unless cell was empty => current date+time => date+time formatted cell -* key time on other cell => current time => time formatted cell - -This is a backport of a series of commits on master, i.e. mainly -32e8c47df81292c71ce1d885762358f18559bdb7 -0f4a999e02aff56043506e38dfa53ea3b349ce25 -and others. - -Conflicts: - sc/source/ui/view/viewfun6.cxx - -Change-Id: Ief48b3e312345ad5e289921ff5120dd074661882 ---- - sc/source/ui/view/viewfun6.cxx | 229 ++++++++++++++++++++++++++++++++++++----- - 1 file changed, 205 insertions(+), 24 deletions(-) - - ---------------erAck-patch-parts -Content-Type: text/x-patch; name="0001-refine-current-date-time-hotkey-handling.patch" -Content-Transfer-Encoding: 8bit -Content-Disposition: attachment; filename="0001-refine-current-date-time-hotkey-handling.patch" - -diff --git a/sc/source/ui/view/viewfun6.cxx b/sc/source/ui/view/viewfun6.cxx -index 8ec8bf1..a55dec3 100644 ---- a/sc/source/ui/view/viewfun6.cxx -+++ b/sc/source/ui/view/viewfun6.cxx -@@ -25,6 +25,7 @@ - #include - #include "svl/zforlist.hxx" - #include "svl/zformat.hxx" -+#include - - #include "viewfunc.hxx" - #include "detfunc.hxx" -@@ -44,6 +45,7 @@ - #include "markdata.hxx" - #include "drawview.hxx" - #include "globalnames.hxx" -+#include "inputhdl.hxx" - - #include - -@@ -237,31 +239,210 @@ void ScViewFunc::DetectiveMarkSucc() - MarkAndJumpToRanges(aDestRanges); - } - --void ScViewFunc::InsertCurrentTime(short nCellFmt, const OUString& rUndoStr) -+/** Insert date or time into current cell. -+ -+ If cell is in input or edit mode, insert date/time at cursor position, else -+ create a date or time or date+time cell as follows: -+ -+ - key date on time cell => current date + time of cell => date+time formatted cell -+ - unless time cell was empty or 00:00 time => current date => date formatted cell -+ - key date on date+time cell => current date + 00:00 time => date+time formatted cell -+ - unless date was current date => current date => date formatted cell -+ - key date on other cell => current date => date formatted cell -+ - key time on date cell => date of cell + current time => date+time formatted cell -+ - unless date cell was empty => current time => time formatted cell -+ - key time on date+time cell => current time => time formatted cell -+ - unless cell was empty => current date+time => date+time formatted cell -+ - key time on other cell => current time => time formatted cell -+ */ -+void ScViewFunc::InsertCurrentTime(short nReqFmt, const OUString& rUndoStr) - { -- ScViewData* pViewData = GetViewData(); -- ScAddress aCurPos = pViewData->GetCurPos(); -- ScDocShell* pDocSh = pViewData->GetDocShell(); -- ScDocument* pDoc = pDocSh->GetDocument(); -- ::svl::IUndoManager* pUndoMgr = pDocSh->GetUndoManager(); -- SvNumberFormatter* pFormatter = pDoc->GetFormatTable(); -- Date aActDate( Date::SYSTEM ); -- double fDate = aActDate - *pFormatter->GetNullDate(); -- Time aActTime( Time::SYSTEM ); -- double fTime = aActTime.GetHour() / static_cast(::Time::hourPerDay) + -- aActTime.GetMin() / static_cast(::Time::minutePerDay) + -- aActTime.GetSec() / static_cast(::Time::secondPerDay) + -- aActTime.GetNanoSec() / static_cast(::Time::nanoSecPerDay); -- pUndoMgr->EnterListAction(rUndoStr, rUndoStr); -- pDocSh->GetDocFunc().SetValueCell(aCurPos, fDate+fTime, true); -- -- // Set the new cell format only when it differs from the current cell -- // format type. -- sal_uInt32 nCurNumFormat = pDoc->GetNumberFormat(aCurPos); -- const SvNumberformat* pEntry = pFormatter->GetEntry(nCurNumFormat); -- if (!pEntry || !(pEntry->GetType() & nCellFmt)) -- SetNumberFormat(nCellFmt); -- pUndoMgr->LeaveListAction(); -+ ScViewData& rViewData = *GetViewData(); -+ -+ ScInputHandler* pInputHdl = SC_MOD()->GetInputHdl( rViewData.GetViewShell()); -+ bool bInputMode = (pInputHdl && pInputHdl->IsInputMode()); -+ -+ ScDocShell* pDocSh = rViewData.GetDocShell(); -+ ScDocument& rDoc = *pDocSh->GetDocument(); -+ ScAddress aCurPos = rViewData.GetCurPos(); -+ const sal_uInt32 nCurNumFormat = rDoc.GetNumberFormat(aCurPos); -+ SvNumberFormatter* pFormatter = rDoc.GetFormatTable(); -+ const SvNumberformat* pCurNumFormatEntry = pFormatter->GetEntry(nCurNumFormat); -+ -+ if (bInputMode) -+ { -+ double fVal = 0.0; -+ switch (nReqFmt) -+ { -+ case NUMBERFORMAT_DATE: -+ { -+ Date aActDate( Date::SYSTEM ); -+ fVal = aActDate - *pFormatter->GetNullDate(); -+ } -+ break; -+ case NUMBERFORMAT_TIME: -+ { -+ Time aActTime( Time::SYSTEM ); -+ fVal = aActTime.GetTimeInDays(); -+ } -+ break; -+ default: -+ assert(!"unhandled current date/time request"); -+ nReqFmt = NUMBERFORMAT_DATETIME; -+ // fallthru -+ case NUMBERFORMAT_DATETIME: -+ { -+ DateTime aActDateTime( DateTime::SYSTEM ); -+ fVal = aActDateTime - DateTime( *pFormatter->GetNullDate()); -+ } -+ break; -+ } -+ -+ LanguageType nLang = (pCurNumFormatEntry ? pCurNumFormatEntry->GetLanguage() : ScGlobal::eLnge); -+ sal_uInt32 nFormat = pFormatter->GetStandardFormat( nReqFmt, nLang); -+ // This would return a more precise format with seconds and 100th -+ // seconds for a time request. -+ //nFormat = pFormatter->GetStandardFormat( fVal, nFormat, nReqFmt, nLang); -+ OUString aString; -+ Color* pColor; -+ pFormatter->GetOutputString( fVal, nFormat, aString, &pColor); -+ -+ pInputHdl->DataChanging(); -+ EditView* pTopView = pInputHdl->GetTopView(); -+ if (pTopView) -+ pTopView->InsertText( aString); -+ EditView* pTableView = pInputHdl->GetTableView(); -+ if (pTableView) -+ pTableView->InsertText( aString); -+ pInputHdl->DataChanged( false, true); -+ } -+ else -+ { -+ const short nCurNumFormatType = (pCurNumFormatEntry ? -+ (pCurNumFormatEntry->GetType() & ~NUMBERFORMAT_DEFINED) : NUMBERFORMAT_UNDEFINED); -+ bool bForceReqFmt = false; -+ const double fCell = rDoc.GetValue( aCurPos); -+ // Combine requested date/time stamp with existing cell time/date, if any. -+ switch (nReqFmt) -+ { -+ case NUMBERFORMAT_DATE: -+ switch (nCurNumFormatType) -+ { -+ case NUMBERFORMAT_TIME: -+ // An empty cell formatted as time (or 00:00 time) shall -+ // not result in the current date with 00:00 time, but only -+ // in current date. -+ if (fCell != 0.0) -+ nReqFmt = NUMBERFORMAT_DATETIME; -+ break; -+ case NUMBERFORMAT_DATETIME: -+ { -+ // Force to only date if the existing date+time is the -+ // current date. This way inserting current date twice -+ // on an existing date+time cell can be used to force -+ // date, which otherwise would only be possible by -+ // applying a date format. -+ double fDate = rtl::math::approxFloor( fCell); -+ if (fDate == (Date( Date::SYSTEM) - *pFormatter->GetNullDate())) -+ bForceReqFmt = true; -+ } -+ break; -+ } -+ break; -+ case NUMBERFORMAT_TIME: -+ switch (nCurNumFormatType) -+ { -+ case NUMBERFORMAT_DATE: -+ // An empty cell formatted as date shall not result in the -+ // null date and current time, but only in current time. -+ if (fCell != 0.0) -+ nReqFmt = NUMBERFORMAT_DATETIME; -+ break; -+ case NUMBERFORMAT_DATETIME: -+ // Requesting current time on an empty date+time cell -+ // inserts both current date+time. -+ if (fCell == 0.0) -+ nReqFmt = NUMBERFORMAT_DATETIME; -+ else -+ { -+ // Add current time to an existing date+time where time is -+ // zero and date is current date, else force time only. -+ double fDate = rtl::math::approxFloor( fCell); -+ double fTime = fCell - fDate; -+ if (fTime == 0.0 && fDate == (Date( Date::SYSTEM) - *pFormatter->GetNullDate())) -+ nReqFmt = NUMBERFORMAT_DATETIME; -+ else -+ bForceReqFmt = true; -+ } -+ break; -+ } -+ break; -+ default: -+ assert(!"unhandled current date/time request"); -+ nReqFmt = NUMBERFORMAT_DATETIME; -+ // fallthru -+ case NUMBERFORMAT_DATETIME: -+ break; -+ } -+ double fVal = 0.0; -+ switch (nReqFmt) -+ { -+ case NUMBERFORMAT_DATE: -+ { -+ Date aActDate( Date::SYSTEM ); -+ fVal = aActDate - *pFormatter->GetNullDate(); -+ } -+ break; -+ case NUMBERFORMAT_TIME: -+ { -+ Time aActTime( Time::SYSTEM ); -+ fVal = aActTime.GetTimeInDays(); -+ } -+ break; -+ case NUMBERFORMAT_DATETIME: -+ switch (nCurNumFormatType) -+ { -+ case NUMBERFORMAT_DATE: -+ { -+ double fDate = rtl::math::approxFloor( fCell); -+ Time aActTime( Time::SYSTEM ); -+ fVal = fDate + aActTime.GetTimeInDays(); -+ } -+ break; -+ case NUMBERFORMAT_TIME: -+ { -+ double fTime = fCell - rtl::math::approxFloor( fCell); -+ Date aActDate( Date::SYSTEM ); -+ fVal = (aActDate - *pFormatter->GetNullDate()) + fTime; -+ } -+ break; -+ default: -+ { -+ DateTime aActDateTime( DateTime::SYSTEM ); -+ // Converting the null date to DateTime forces the -+ // correct operator-() to be used, resulting in a -+ // fractional date+time instead of only date value. -+ fVal = aActDateTime - DateTime( *pFormatter->GetNullDate()); -+ } -+ } -+ break; -+ } -+ -+ ::svl::IUndoManager* pUndoMgr = pDocSh->GetUndoManager(); -+ pUndoMgr->EnterListAction(rUndoStr, rUndoStr); -+ -+ pDocSh->GetDocFunc().SetValueCell(aCurPos, fVal, true); -+ -+ // Set the new cell format only when it differs from the current cell -+ // format type. Preserve a date+time format unless we force a format -+ // through. -+ if (bForceReqFmt || (nReqFmt != nCurNumFormatType && nCurNumFormatType != NUMBERFORMAT_DATETIME)) -+ SetNumberFormat(nReqFmt); -+ else -+ rViewData.UpdateInputHandler(); // update input bar with new value -+ -+ pUndoMgr->LeaveListAction(); -+ } - } - - void ScViewFunc::ShowNote( bool bShow ) - ---------------erAck-patch-parts-- - - diff --git a/SOURCES/0001-resolved-fdo-62250-absent-value-cell-values-are-not-.patch b/SOURCES/0001-resolved-fdo-62250-absent-value-cell-values-are-not-.patch deleted file mode 100644 index c45e9f0..0000000 --- a/SOURCES/0001-resolved-fdo-62250-absent-value-cell-values-are-not-.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 4e69127246028f72eee6279e9a810bb865ce654c Mon Sep 17 00:00:00 2001 -From: Eike Rathke -Date: Wed, 9 Jul 2014 19:16:19 +0200 -Subject: [PATCH 001/137] resolved fdo#62250 absent value cell values are not - NaN, set to 0.0 - -Change-Id: I41459d72adbaa8f6c0c7c22447f6eba5eb8be3e1 -(cherry picked from commit fea6f83df8d2183b108695217bc4ff7a93e942c9) -Reviewed-on: https://gerrit.libreoffice.org/10176 -Reviewed-by: Kohei Yoshida -Tested-by: Kohei Yoshida ---- - sc/source/filter/xml/xmlcelli.cxx | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/sc/source/filter/xml/xmlcelli.cxx b/sc/source/filter/xml/xmlcelli.cxx -index 41e6111..a3321c2 100644 ---- a/sc/source/filter/xml/xmlcelli.cxx -+++ b/sc/source/filter/xml/xmlcelli.cxx -@@ -1151,6 +1151,12 @@ void ScXMLTableRowCellContext::PutValueCell( const ScAddress& rCurrentPos ) - } - else //regular value cell - { -+ // fdo#62250 absent values are not NaN, set to 0.0 -+ // PutValueCell() is called only for a known cell value type, -+ // bIsEmpty==false in all these cases, no sense to check it here. -+ if (::rtl::math::isNan( fValue)) -+ fValue = 0.0; -+ - // #i62435# Initialize the value cell's script type if the default - // style's number format is latin-only. If the cell uses a different - // format, the script type will be reset when the style is applied. --- -1.9.3 - diff --git a/SOURCES/0001-rhbz-1016758-Dispose-bridges-when-disposing-bridge-f.patch b/SOURCES/0001-rhbz-1016758-Dispose-bridges-when-disposing-bridge-f.patch deleted file mode 100644 index a7ffc2c..0000000 --- a/SOURCES/0001-rhbz-1016758-Dispose-bridges-when-disposing-bridge-f.patch +++ /dev/null @@ -1,86 +0,0 @@ -From bf3ebcc6aae09d233df6632e72cf06b1d9256692 Mon Sep 17 00:00:00 2001 -From: Stephan Bergmann -Date: Mon, 19 May 2014 18:06:16 +0200 -Subject: [PATCH] rhbz#1016758: Dispose bridges when disposing bridge factory - -... (which happens when the service manager is disposed), so that no bridges can -still run during exit. But this is so glaring that I wonder whether I missed -the obvious when I originally wrote that code, or whether I rather miss the -obvious now. So better let this rest for a while on master before deciding -about any backports. - -(cherry picked from commit 184e4ef35641403fd293262ee413ceee37b3761a) -Conflicts: - binaryurp/source/bridgefactory.cxx - -Change-Id: I7c9ad6c8a53dfd1a7b702640920dcb0a9a2c3007 ---- - binaryurp/source/bridgefactory.cxx | 31 +++++++++++++++++++++++++++++++ - binaryurp/source/bridgefactory.hxx | 2 ++ - 2 files changed, 33 insertions(+) - -diff --git a/binaryurp/source/bridgefactory.cxx b/binaryurp/source/bridgefactory.cxx -index 34182b3..6f13614 100644 ---- a/binaryurp/source/bridgefactory.cxx -+++ b/binaryurp/source/bridgefactory.cxx -@@ -115,6 +115,11 @@ css::uno::Reference< css::bridge::XBridge > BridgeFactory::createBridge( - rtl::Reference< Bridge > b; - { - osl::MutexGuard g(*this); -+ if (rBHelper.bDisposed) { -+ throw css::lang::DisposedException( -+ "BridgeFactory disposed", -+ static_cast< cppu::OWeakObject * >(this)); -+ } - if (named_.find(sName) != named_.end()) { - throw css::bridge::BridgeExistsException( - sName, static_cast< cppu::OWeakObject * >(this)); -@@ -172,6 +177,32 @@ BridgeFactory::getExistingBridges() throw (css::uno::RuntimeException) { - return s; - } - -+void BridgeFactory::disposing() { -+ BridgeList l1; -+ BridgeMap l2; -+ { -+ osl::MutexGuard g(*this); -+ l1.swap(unnamed_); -+ l2.swap(named_); -+ } -+ for (BridgeList::iterator i(l1.begin()); i != l1.end(); ++i) { -+ try { -+ css::uno::Reference( -+ *i, css::uno::UNO_QUERY_THROW)->dispose(); -+ } catch (css::uno::Exception & e) { -+ SAL_WARN("binaryurp", "ignoring Exception " << e.Message); -+ } -+ } -+ for (BridgeMap::iterator i(l2.begin()); i != l2.end(); ++i) { -+ try { -+ css::uno::Reference( -+ i->second, css::uno::UNO_QUERY_THROW)->dispose(); -+ } catch (css::uno::Exception & e) { -+ SAL_WARN("binaryurp", "ignoring Exception " << e.Message); -+ } -+ } -+} -+ - } - - namespace { -diff --git a/binaryurp/source/bridgefactory.hxx b/binaryurp/source/bridgefactory.hxx -index a949e63..98f1ab2 100644 ---- a/binaryurp/source/bridgefactory.hxx -+++ b/binaryurp/source/bridgefactory.hxx -@@ -114,6 +114,8 @@ private: - com::sun::star::uno::Reference< com::sun::star::bridge::XBridge > > - SAL_CALL getExistingBridges() throw (com::sun::star::uno::RuntimeException); - -+ void SAL_CALL disposing() SAL_OVERRIDE; -+ - typedef - std::list< - com::sun::star::uno::Reference< com::sun::star::bridge::XBridge > > --- -1.9.3 - diff --git a/SOURCES/0001-rhbz-1057977-avoid-use-of-invalidated-pointers.patch b/SOURCES/0001-rhbz-1057977-avoid-use-of-invalidated-pointers.patch deleted file mode 100644 index ec33607..0000000 --- a/SOURCES/0001-rhbz-1057977-avoid-use-of-invalidated-pointers.patch +++ /dev/null @@ -1,156 +0,0 @@ -From 35f78e48582caa691a855101a0d661985ba067bb Mon Sep 17 00:00:00 2001 -From: David Tardon -Date: Wed, 5 Feb 2014 10:55:25 +0100 -Subject: [PATCH] rhbz#1057977 avoid use of invalidated pointers - -Change-Id: Ib81f79da696b5e8002f5a2ddcf160903231dc3f1 ---- - include/vcl/outdev.hxx | 6 +++++ - vcl/source/gdi/outdev3.cxx | 59 +++++++++++++++++++++++++++++++++++++++++----- - 2 files changed, 59 insertions(+), 6 deletions(-) - -diff --git a/include/vcl/outdev.hxx b/include/vcl/outdev.hxx -index 047a79d..4f157b7 100644 ---- a/include/vcl/outdev.hxx -+++ b/include/vcl/outdev.hxx -@@ -547,9 +547,15 @@ protected: - OutputDevice(); - - private: -+ typedef void ( OutputDevice::* FontUpdateHandler_t )( bool ); -+ - SAL_DLLPRIVATE OutputDevice( const OutputDevice& rOutDev ); - SAL_DLLPRIVATE OutputDevice& operator =( const OutputDevice& rOutDev ); - -+ SAL_DLLPRIVATE void ImplClearFontData( bool bNewFontLists ); -+ SAL_DLLPRIVATE void ImplRefreshFontData( bool bNewFontLists ); -+ SAL_DLLPRIVATE static void ImplUpdateFontDataForAllFrames( FontUpdateHandler_t pHdl, bool bNewFontLists ); -+ - public: - virtual ~OutputDevice(); - -diff --git a/vcl/source/gdi/outdev3.cxx b/vcl/source/gdi/outdev3.cxx -index afe06f7..d789eb9 100644 ---- a/vcl/source/gdi/outdev3.cxx -+++ b/vcl/source/gdi/outdev3.cxx -@@ -156,7 +156,7 @@ static void ImplRotatePos( long nOriginX, long nOriginY, long& rX, long& rY, - } - } - --void OutputDevice::ImplUpdateFontData( bool bNewFontLists ) -+void OutputDevice::ImplClearFontData( const bool bNewFontLists ) - { - // the currently selected logical font is no longer needed - if ( mpFontEntry ) -@@ -207,6 +207,38 @@ void OutputDevice::ImplUpdateFontData( bool bNewFontLists ) - delete mpFontList; - if( mpFontCache && mpFontCache != pSVData->maGDIData.mpScreenFontCache ) - delete mpFontCache; -+ mpFontList = 0; -+ mpFontCache = 0; -+ } -+ } -+ } -+ } -+ -+ // also update child windows if needed -+ if ( GetOutDevType() == OUTDEV_WINDOW ) -+ { -+ Window* pChild = ((Window*)this)->mpWindowImpl->mpFirstChild; -+ while ( pChild ) -+ { -+ pChild->ImplClearFontData( true ); -+ pChild = pChild->mpWindowImpl->mpNext; -+ } -+ } -+} -+ -+void OutputDevice::ImplRefreshFontData( const bool bNewFontLists ) -+{ -+// if ( GetOutDevType() == OUTDEV_PRINTER || mpPDFWriter ) -+ { -+ ImplSVData* pSVData = ImplGetSVData(); -+ -+ if ( bNewFontLists ) -+ { -+ // we need a graphics -+ if ( ImplGetGraphics() ) -+ { -+ if( mpPDFWriter ) -+ { - mpFontList = pSVData->maGDIData.mpScreenFontList->Clone( true, true ); - mpFontCache = new ImplFontCache( sal_False ); - } -@@ -227,16 +259,24 @@ void OutputDevice::ImplUpdateFontData( bool bNewFontLists ) - Window* pChild = ((Window*)this)->mpWindowImpl->mpFirstChild; - while ( pChild ) - { -- pChild->ImplUpdateFontData( true ); -+ pChild->ImplRefreshFontData( true ); - pChild = pChild->mpWindowImpl->mpNext; - } - } - } - -+void OutputDevice::ImplUpdateFontData( bool bNewFontLists ) -+{ -+ ImplClearFontData( bNewFontLists ); -+ ImplRefreshFontData( bNewFontLists ); -+} -+ - void OutputDevice::ImplUpdateAllFontData( bool bNewFontLists ) - { - ImplSVData* pSVData = ImplGetSVData(); - -+ ImplUpdateFontDataForAllFrames( &OutputDevice::ImplClearFontData, bNewFontLists ); -+ - // clear global font lists to have them updated - pSVData->maGDIData.mpScreenFontCache->Invalidate(); - if ( bNewFontLists ) -@@ -255,16 +295,23 @@ void OutputDevice::ImplUpdateAllFontData( bool bNewFontLists ) - } - } - -+ ImplUpdateFontDataForAllFrames( &OutputDevice::ImplRefreshFontData, bNewFontLists ); -+} -+ -+void OutputDevice::ImplUpdateFontDataForAllFrames( const FontUpdateHandler_t pHdl, const bool bNewFontLists ) -+{ -+ ImplSVData* const pSVData = ImplGetSVData(); -+ - // update all windows - Window* pFrame = pSVData->maWinData.mpFirstFrame; - while ( pFrame ) - { -- pFrame->ImplUpdateFontData( bNewFontLists ); -+ ( pFrame->*pHdl )( bNewFontLists ); - - Window* pSysWin = pFrame->mpWindowImpl->mpFrameData->mpFirstOverlap; - while ( pSysWin ) - { -- pSysWin->ImplUpdateFontData( bNewFontLists ); -+ ( pSysWin->*pHdl )( bNewFontLists ); - pSysWin = pSysWin->mpWindowImpl->mpNextOverlap; - } - -@@ -275,7 +322,7 @@ void OutputDevice::ImplUpdateAllFontData( bool bNewFontLists ) - VirtualDevice* pVirDev = pSVData->maGDIData.mpFirstVirDev; - while ( pVirDev ) - { -- pVirDev->ImplUpdateFontData( bNewFontLists ); -+ ( pVirDev->*pHdl )( bNewFontLists ); - pVirDev = pVirDev->mpNext; - } - -@@ -283,7 +330,7 @@ void OutputDevice::ImplUpdateAllFontData( bool bNewFontLists ) - Printer* pPrinter = pSVData->maGDIData.mpFirstPrinter; - while ( pPrinter ) - { -- pPrinter->ImplUpdateFontData( bNewFontLists ); -+ ( pPrinter->*pHdl )( bNewFontLists ); - pPrinter = pPrinter->mpNext; - } - } --- -1.8.5.3 - diff --git a/SOURCES/0001-rhbz-1079672-FileDialogHelper-don-t-hand-out-stale-p.patch b/SOURCES/0001-rhbz-1079672-FileDialogHelper-don-t-hand-out-stale-p.patch deleted file mode 100644 index 0cc64d8..0000000 --- a/SOURCES/0001-rhbz-1079672-FileDialogHelper-don-t-hand-out-stale-p.patch +++ /dev/null @@ -1,60 +0,0 @@ -From e1b57d025b0523479fe906f050c5639ad280b481 Mon Sep 17 00:00:00 2001 -From: Michael Stahl -Date: Thu, 7 Aug 2014 11:24:18 +0200 -Subject: [PATCH] rhbz#1079672: FileDialogHelper: don't hand out stale preview - Graphic - -The maGraphic is updated from a timer, and if you double-click on a file -then the dialog may exit with the previous file still previewed in -maGraphic, so the wrong image is returned by the dialog. - -Change-Id: I99094d85d8d68d5c8a842f52e7039dbbbf095995 -(cherry picked from commit f1589f768bbd1d8baea6e442f392831851bdbb3b) -Reviewed-on: https://gerrit.libreoffice.org/10804 -Reviewed-by: David Tardon -Tested-by: David Tardon ---- - sfx2/source/dialog/filedlghelper.cxx | 23 ++++++++++------------- - 1 file changed, 10 insertions(+), 13 deletions(-) - -diff --git a/sfx2/source/dialog/filedlghelper.cxx b/sfx2/source/dialog/filedlghelper.cxx -index c8178a4..28a8060 100644 ---- a/sfx2/source/dialog/filedlghelper.cxx -+++ b/sfx2/source/dialog/filedlghelper.cxx -@@ -789,23 +789,20 @@ ErrCode FileDialogHelper_Impl::getGraphic( Graphic& rGraphic ) const - { - ErrCode nRet = ERRCODE_NONE; - -- if ( ! maGraphic ) -- { -- OUString aPath;; -- Sequence < OUString > aPathSeq = mxFileDlg->getFiles(); -+ // rhbz#1079672 do not return maGraphic, it need not be the selected file - -- if ( aPathSeq.getLength() == 1 ) -- { -- aPath = aPathSeq[0]; -- } -+ OUString aPath;; -+ Sequence aPathSeq = mxFileDlg->getFiles(); - -- if ( !aPath.isEmpty() ) -- nRet = getGraphic( aPath, rGraphic ); -- else -- nRet = ERRCODE_IO_GENERAL; -+ if (aPathSeq.getLength() == 1) -+ { -+ aPath = aPathSeq[0]; - } -+ -+ if (!aPath.isEmpty()) -+ nRet = getGraphic(aPath, rGraphic); - else -- rGraphic = maGraphic; -+ nRet = ERRCODE_IO_GENERAL; - - return nRet; - } --- -1.9.3 - diff --git a/SOURCES/0001-rhbz-1111216-allow-to-export-an-empty-sheet-to-PDF.patch b/SOURCES/0001-rhbz-1111216-allow-to-export-an-empty-sheet-to-PDF.patch index a5d7264..c3c6e86 100644 --- a/SOURCES/0001-rhbz-1111216-allow-to-export-an-empty-sheet-to-PDF.patch +++ b/SOURCES/0001-rhbz-1111216-allow-to-export-an-empty-sheet-to-PDF.patch @@ -25,5 +25,5 @@ index 9aeceb7..75cabca 100644 static sal_Int32 lcl_GetRendererNum( sal_Int32 nSelRenderer, const OUString& rPagesStr, sal_Int32 nTotalPages ) -- -2.1.0 +1.9.3 diff --git a/SOURCES/0001-rhbz-1121254-reload-font-list-from-shell-on-change.patch b/SOURCES/0001-rhbz-1121254-reload-font-list-from-shell-on-change.patch deleted file mode 100644 index 5c56321..0000000 --- a/SOURCES/0001-rhbz-1121254-reload-font-list-from-shell-on-change.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 0497864bd4f603605997938d504ef9598623e713 Mon Sep 17 00:00:00 2001 -From: David Tardon -Date: Fri, 25 Jul 2014 15:40:27 +0200 -Subject: [PATCH] rhbz#1121254 reload font list from shell on change - -Change-Id: Ief88373c210b3b6f65c1df5b31870aca561095bb ---- - svx/source/tbxctrls/tbcontrl.cxx | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx -index 816afbe..5728791 100644 ---- a/svx/source/tbxctrls/tbcontrl.cxx -+++ b/svx/source/tbxctrls/tbcontrl.cxx -@@ -891,6 +891,12 @@ void SvxFontNameBox_Impl::DataChanged( const DataChangedEvent& rDCEvt ) - Size aDropSize( aLogicalSize.Width(), LOGICAL_EDIT_HEIGHT); - SetDropDownSizePixel(LogicToPixel(aDropSize, MAP_APPFONT)); - } -+ else if ( rDCEvt.GetType() == DATACHANGED_FONTS ) -+ { -+ // The old font list in shell has likely been destroyed at this point, so we need to get -+ // the new one before doing anything further. -+ lcl_GetDocFontList( &pFontList, this ); -+ } - - FontNameBox::DataChanged( rDCEvt ); - } --- -1.9.3 - diff --git a/SOURCES/0001-rhbz-1198848-sw-delete-all-table-redlines-to-fix-DOC.patch b/SOURCES/0001-rhbz-1198848-sw-delete-all-table-redlines-to-fix-DOC.patch new file mode 100644 index 0000000..09d206b --- /dev/null +++ b/SOURCES/0001-rhbz-1198848-sw-delete-all-table-redlines-to-fix-DOC.patch @@ -0,0 +1,75 @@ +From 37469a1e3eb5b3295f5b496e27fc6f0445699339 Mon Sep 17 00:00:00 2001 +From: Michael Stahl +Date: Wed, 22 Apr 2015 14:28:38 +0200 +Subject: [PATCH] rhbz#1198848: sw: delete *all* table redlines to fix DOCX + import crash + +SwExtraRedlineTbl::DeleteAllTableRedlines() increments its position even +when deleting the current element from the vector. + +(cherry picked from commit 28764d7ed5df874c2bfbc6025a97968e08cf2315) + +Conflicts: + sw/source/core/doc/docredln.cxx + +Change-Id: Ie827a7b66fa9690bbabaf53204e9ec77247239f2 +--- + sw/source/core/doc/docredln.cxx | 24 ++++++++++++++---------- + 1 file changed, 14 insertions(+), 10 deletions(-) + +diff --git a/sw/source/core/doc/docredln.cxx b/sw/source/core/doc/docredln.cxx +index cb1520a..f7cdc7f 100644 +--- a/sw/source/core/doc/docredln.cxx ++++ b/sw/source/core/doc/docredln.cxx +@@ -1529,7 +1529,7 @@ bool SwExtraRedlineTbl::DeleteAllTableRedlines( SwDoc* pDoc, const SwTable& rTab + */ + } + +- for(sal_uInt16 nCurRedlinePos = 0; nCurRedlinePos < GetSize(); ++nCurRedlinePos ) ++ for (sal_uInt16 nCurRedlinePos = 0; nCurRedlinePos < GetSize(); ) + { + SwExtraRedline* pExtraRedline = GetRedline(nCurRedlinePos); + const SwTableCellRedline* pTableCellRedline = dynamic_cast(pExtraRedline); +@@ -1544,11 +1544,12 @@ bool SwExtraRedlineTbl::DeleteAllTableRedlines( SwDoc* pDoc, const SwTable& rTab + sal_uInt16 nRedlineType = aRedlineData.GetType(); + + // Check if this redline object type should be deleted +- if( USHRT_MAX != nRedlineTypeToDelete && nRedlineTypeToDelete != nRedlineType ) +- continue; +- +- DeleteAndDestroy( nCurRedlinePos ); +- bChg = true; ++ if (USHRT_MAX == nRedlineTypeToDelete || nRedlineTypeToDelete == nRedlineType) ++ { ++ DeleteAndDestroy( nCurRedlinePos ); ++ bChg = true; ++ continue; // don't increment position after delete ++ } + } + } + else +@@ -1566,14 +1567,17 @@ bool SwExtraRedlineTbl::DeleteAllTableRedlines( SwDoc* pDoc, const SwTable& rTab + sal_uInt16 nRedlineType = aRedlineData.GetType(); + + // Check if this redline object type should be deleted +- if( USHRT_MAX != nRedlineTypeToDelete && nRedlineTypeToDelete != nRedlineType ) +- continue; ++ if (USHRT_MAX == nRedlineTypeToDelete || nRedlineTypeToDelete == nRedlineType) + +- DeleteAndDestroy( nCurRedlinePos ); +- bChg = true; ++ { ++ DeleteAndDestroy( nCurRedlinePos ); ++ bChg = true; ++ continue; // don't increment position after delete ++ } + } + } + } ++ ++nCurRedlinePos; + } + + if( bChg ) +-- +2.1.0 + diff --git a/SOURCES/0001-rhbz-1213173-connectivity-Calc-driver-prevent-docume.patch b/SOURCES/0001-rhbz-1213173-connectivity-Calc-driver-prevent-docume.patch new file mode 100644 index 0000000..a0a8e3e --- /dev/null +++ b/SOURCES/0001-rhbz-1213173-connectivity-Calc-driver-prevent-docume.patch @@ -0,0 +1,163 @@ +From 9954f77b2ecd2591a904dac23aee5e8395334180 Mon Sep 17 00:00:00 2001 +From: Michael Stahl +Date: Wed, 29 Apr 2015 15:49:46 +0200 +Subject: [PATCH] rhbz#1213173: connectivity: Calc driver: prevent document + being disposed +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +... by adding a XCloseListener that vetoes any attempt to close it. + +The Calc document can be opened by the user in the UI and closed again. + +(cherry picked from commit 7368b6ca3f61e750765f42e97d0a00e10fcac516) + +Conflicts: + unotools/source/misc/closeveto.cxx + +Change-Id: Ied427b67274d925c911e516c0a50a4c0b2b18db9 +Reviewed-on: https://gerrit.libreoffice.org/15567 +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara +(cherry picked from commit e8777783db81279a6b0e9cc7b308f10719bd8a7b) +--- + connectivity/source/drivers/calc/CConnection.cxx | 10 ++++++++-- + connectivity/source/inc/calc/CConnection.hxx | 10 +++++++--- + include/unotools/closeveto.hxx | 3 ++- + unotools/source/misc/closeveto.cxx | 17 +++++++++-------- + 4 files changed, 26 insertions(+), 14 deletions(-) + +diff --git a/connectivity/source/drivers/calc/CConnection.cxx b/connectivity/source/drivers/calc/CConnection.cxx +index b81a585..731c4a3 100644 +--- a/connectivity/source/drivers/calc/CConnection.cxx ++++ b/connectivity/source/drivers/calc/CConnection.cxx +@@ -31,6 +31,7 @@ + #include "calc/CPreparedStatement.hxx" + #include "calc/CStatement.hxx" + #include ++#include + #include + #include + #include +@@ -165,13 +166,17 @@ Reference< XSpreadsheetDocument> OCalcConnection::acquireDoc() + ::dbtools::throwGenericSQLException( sError, *this, aErrorDetails ); + } + osl_atomic_increment(&m_nDocCount); ++ m_pCloseListener.reset(new utl::CloseVeto(m_xDoc, true)); + return m_xDoc; + } + + void OCalcConnection::releaseDoc() + { + if ( osl_atomic_decrement(&m_nDocCount) == 0 ) +- ::comphelper::disposeComponent( m_xDoc ); ++ { ++ m_pCloseListener.reset(); // dispose m_xDoc ++ m_xDoc.clear(); ++ } + } + + void OCalcConnection::disposing() +@@ -179,7 +184,8 @@ void OCalcConnection::disposing() + ::osl::MutexGuard aGuard(m_aMutex); + + m_nDocCount = 0; +- ::comphelper::disposeComponent( m_xDoc ); ++ m_pCloseListener.reset(); // dispose m_xDoc ++ m_xDoc.clear(); + + OConnection::disposing(); + } +diff --git a/connectivity/source/inc/calc/CConnection.hxx b/connectivity/source/inc/calc/CConnection.hxx +index b66d892..14e8580 100644 +--- a/connectivity/source/inc/calc/CConnection.hxx ++++ b/connectivity/source/inc/calc/CConnection.hxx +@@ -23,9 +23,11 @@ + #include "file/FConnection.hxx" + #include + +-namespace com { namespace sun { namespace star { namespace sheet { +- class XSpreadsheetDocument; +-} } } } ++namespace com { namespace sun { namespace star { ++ namespace sheet { class XSpreadsheetDocument; } ++} } } ++ ++namespace utl { class CloseVeto; } + + + namespace connectivity +@@ -37,6 +39,8 @@ namespace connectivity + { + // the spreadsheet document: + ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSpreadsheetDocument > m_xDoc; ++ /// close listener that vetoes so nobody disposes m_xDoc ++ ::std::unique_ptr< ::utl::CloseVeto> m_pCloseListener; + OUString m_sPassword; + OUString m_aFileName; + oslInterlockedCount m_nDocCount; +diff --git a/include/unotools/closeveto.hxx b/include/unotools/closeveto.hxx +index 9beb0b5..9ed27a7 100644 +--- a/include/unotools/closeveto.hxx ++++ b/include/unotools/closeveto.hxx +@@ -41,7 +41,8 @@ namespace utl + class UNOTOOLS_DLLPUBLIC CloseVeto + { + public: +- CloseVeto( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& i_closeable ); ++ CloseVeto( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& i_closeable, ++ bool bHasOwnership = false); + ~CloseVeto(); + + private: +diff --git a/unotools/source/misc/closeveto.cxx b/unotools/source/misc/closeveto.cxx +index 4044fa7..9ecf82e 100644 +--- a/unotools/source/misc/closeveto.cxx ++++ b/unotools/source/misc/closeveto.cxx +@@ -51,8 +51,8 @@ namespace utl + class CloseListener_Impl : public CloseListener_Base + { + public: +- CloseListener_Impl() +- :m_bHasOwnership( false ) ++ CloseListener_Impl(bool const bHasOwnership) ++ : m_bHasOwnership(bHasOwnership) + { + } + +@@ -107,12 +107,13 @@ namespace utl + namespace + { + +- void lcl_init( CloseVeto_Data& i_data, const Reference< XInterface >& i_closeable ) ++ void lcl_init( CloseVeto_Data& i_data, const Reference< XInterface >& i_closeable, ++ bool const hasOwnership) + { + i_data.xCloseable.set( i_closeable, UNO_QUERY ); + ENSURE_OR_RETURN_VOID( i_data.xCloseable.is(), "CloseVeto: the component is not closeable!" ); + +- i_data.pListener = new CloseListener_Impl; ++ i_data.pListener = new CloseListener_Impl(hasOwnership); + i_data.xCloseable->addCloseListener( i_data.pListener.get() ); + } + +@@ -138,11 +139,11 @@ namespace utl + } + + //= CloseVeto +- +- CloseVeto::CloseVeto( const Reference< XInterface >& i_closeable ) +- :m_pData( new CloseVeto_Data ) ++ CloseVeto::CloseVeto(const Reference< XInterface >& i_closeable, ++ bool const hasOwnership) ++ : m_pData(new CloseVeto_Data) + { +- lcl_init( *m_pData, i_closeable ); ++ lcl_init(*m_pData, i_closeable, hasOwnership); + } + + CloseVeto::~CloseVeto() +-- +2.1.0 + diff --git a/SOURCES/0001-rulers-Make-the-numbers-a-bit-smaller-and-always-wit.patch b/SOURCES/0001-rulers-Make-the-numbers-a-bit-smaller-and-always-wit.patch new file mode 100644 index 0000000..0513ece --- /dev/null +++ b/SOURCES/0001-rulers-Make-the-numbers-a-bit-smaller-and-always-wit.patch @@ -0,0 +1,46 @@ +From e17e162d0d61a3320b7d69e1a505eed3732c1a6d Mon Sep 17 00:00:00 2001 +From: Jan Holesovsky +Date: Wed, 3 Dec 2014 11:07:18 +0100 +Subject: [PATCH] rulers: Make the numbers a bit smaller, and always with odd + size. + +Change-Id: Id27bb0435d00f2026ff8c82ed246ca67947e9e42 +--- + svtools/source/control/ruler.cxx | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/svtools/source/control/ruler.cxx b/svtools/source/control/ruler.cxx +index 29655de..c9727cb 100644 +--- a/svtools/source/control/ruler.cxx ++++ b/svtools/source/control/ruler.cxx +@@ -992,6 +992,15 @@ void Ruler::ImplDrawTabs( long nMin, long nMax, long nVirTop, long nVirBottom ) + } + } + ++static int adjustSize(int nOrig) ++{ ++ if (nOrig <= 0) ++ return 0; ++ ++ // make sure we return an odd number, that looks better in the ruler ++ return ( (3*nOrig) / 8) * 2 + 1; ++} ++ + void Ruler::ImplInitSettings( bool bFont, bool bForeground, bool bBackground ) + { + const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); +@@ -1000,6 +1009,11 @@ void Ruler::ImplInitSettings( bool bFont, bool bForeground, bool bBackground ) + { + Font aFont; + aFont = rStyleSettings.GetToolFont(); ++ ++ // make the font a bit smaller than default ++ Size aSize(adjustSize(aFont.GetSize().Width()), adjustSize(aFont.GetSize().Height())); ++ aFont.SetSize(aSize); ++ + if ( IsControlFont() ) + aFont.Merge( GetControlFont() ); + SetZoomedPointFont( aFont ); +-- +2.4.0 + diff --git a/SOURCES/0001-set-up-java-on-aarch64.patch b/SOURCES/0001-set-up-java-on-aarch64.patch deleted file mode 100644 index 88fdc7e..0000000 --- a/SOURCES/0001-set-up-java-on-aarch64.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 6910ddd32da7f65ac38627aa5e5d2b0524cb4ef1 Mon Sep 17 00:00:00 2001 -From: David Tardon -Date: Fri, 5 Sep 2014 08:23:50 +0200 -Subject: [PATCH] set up java on aarch64 - -Change-Id: I76c9c79e5d21a99fa2578a4d98a7a7d41d32edb5 ---- - configure.ac | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/configure.ac b/configure.ac -index 2560a0d..873bcaa 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -7097,6 +7097,10 @@ if test -n "$ENABLE_JAVA" -a \( -z "$JAVALIB" -o -z "$JAVAINC" \); then - - case "$host_cpu" in - -+ aarch64) -+ JAVA_ARCH="aarch64" -+ JAVA_TOOLKIT="server" -+ ;; - alpha) - JAVA_ARCH="alpha" - JAVA_TOOLKIT="server" --- -1.9.3 - diff --git a/SOURCES/0001-sigh-simply-forgot-to-include-the-endian-header.patch b/SOURCES/0001-sigh-simply-forgot-to-include-the-endian-header.patch deleted file mode 100644 index 91f165e..0000000 --- a/SOURCES/0001-sigh-simply-forgot-to-include-the-endian-header.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 8b865a1f2f35f591e8004a75765bd9b3133229a5 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= -Date: Fri, 29 Aug 2014 11:29:36 +0100 -Subject: [PATCH] sigh, simply forgot to include the endian header - -so the ppc64 bridge was broken - -Change-Id: Ib60274ed25531f500bcd97f5ea9b04091ce01825 -(cherry picked from commit 7da6716e98f22d6cb968c3218b5f4936f868a977) ---- - bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx b/bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx -index eaee739..acee17d 100644 ---- a/bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx -+++ b/bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx -@@ -21,7 +21,7 @@ - #include - #include - #include -- -+#include - #include "bridges/cpp_uno/shared/bridge.hxx" - #include "bridges/cpp_uno/shared/cppinterfaceproxy.hxx" - #include "bridges/cpp_uno/shared/types.hxx" --- -1.9.3 - diff --git a/SOURCES/0001-strip-off-hard-coded-numbering-from-outliner-preview.patch b/SOURCES/0001-strip-off-hard-coded-numbering-from-outliner-preview.patch new file mode 100644 index 0000000..3937ee4 --- /dev/null +++ b/SOURCES/0001-strip-off-hard-coded-numbering-from-outliner-preview.patch @@ -0,0 +1,67 @@ +From 0f1fc84029475565fda1bad43d99a114391afdc7 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Tue, 11 Nov 2014 13:33:53 +0000 +Subject: [PATCH] strip off hard-coded numbering from outliner preview on load + +how to reproduce an outline which won't update wrt the numbering style + +file->new->presentation +view->master->slide master +select first entry of outliner, i.e. "Click to edit the outline text format" +make it underlined, save, reload +view->master->slide master +now use bullet and numbering +set level 1 to e.g. none, ok +nothing happens to the outliner. It remains "stuck" with its default numbering + +Change-Id: I95708b1f1c9cc74ae5129dbfad8ca0d37b00fa13 +--- + sd/source/filter/xml/sdxmlwrp.cxx | 15 ++++++++++++++- + 1 file changed, 14 insertions(+), 1 deletion(-) + +diff --git a/sd/source/filter/xml/sdxmlwrp.cxx b/sd/source/filter/xml/sdxmlwrp.cxx +index fd8cacc..ad1cd23 100644 +--- a/sd/source/filter/xml/sdxmlwrp.cxx ++++ b/sd/source/filter/xml/sdxmlwrp.cxx +@@ -55,6 +55,7 @@ + #include + #include + #include ++#include + #include + + // include necessary for XML progress bar at load time +@@ -444,6 +445,7 @@ void fixupOutlinePlaceholderNumberingDepths(SdDrawDocument* pDoc) + const sal_Int32 nParaCount = pOutliner->GetParagraphCount(); + for (sal_Int32 j = 0; j < nParaCount; ++j) + { ++ //Make sure the depth of the paragraph matches that of the outline style it previews + const sal_Int16 nExpectedDepth = j; + if (nExpectedDepth != pOutliner->GetDepth(j)) + { +@@ -451,10 +453,21 @@ void fixupOutlinePlaceholderNumberingDepths(SdDrawDocument* pDoc) + pOutliner->SetDepth(p, nExpectedDepth); + bInconsistent = true; + } ++ ++ //If the preview has hard-coded bullets/numbering then they must ++ //be stripped to reveal the true underlying styles attributes ++ SfxItemSet aAttrs(pOutliner->GetParaAttribs(j)); ++ if (aAttrs.GetItemState(EE_PARA_NUMBULLET) == SFX_ITEM_SET) ++ { ++ aAttrs.ClearItem(EE_PARA_NUMBULLET); ++ pOutliner->SetParaAttribs(j, aAttrs); ++ bInconsistent = true; ++ } ++ + } + if (bInconsistent) + { +- SAL_WARN("sd.filter", "Fixing inconsistent outline numbering placeholder preview depth"); ++ SAL_WARN("sd.filter", "Fixing inconsistent outline numbering placeholder preview"); + pMasterOutline->SetOutlinerParaObject(pOutliner->CreateParaObject(0, nParaCount)); + } + pOutliner->Clear(); +-- +1.9.3 + diff --git a/SOURCES/0001-tdf-87400-sw-fix-SwIndexReg-assertion-in-AutoCorrect.patch b/SOURCES/0001-tdf-87400-sw-fix-SwIndexReg-assertion-in-AutoCorrect.patch new file mode 100644 index 0000000..4994d38 --- /dev/null +++ b/SOURCES/0001-tdf-87400-sw-fix-SwIndexReg-assertion-in-AutoCorrect.patch @@ -0,0 +1,59 @@ +From f752aa8de421ab6ee296370b4c287354fc2ba06c Mon Sep 17 00:00:00 2001 +From: Michael Stahl +Date: Thu, 2 Apr 2015 22:32:59 +0200 +Subject: [PATCH 1/4] tdf#87400: sw: fix ~SwIndexReg assertion in AutoCorrect +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +SwAutoFormat::DoUnderline() calls DeleteSel() with a SwPaM that is not +corrected, except if it's passed along directly to SwDoc methods. + +(regression from f9b62506b22c3eb885ffd5a4ec8025c33df7b2d4) + +(cherry picked from commit 41e4998cdeb54a6fc316f349de61296be820fe47) +Reviewed-on: https://gerrit.libreoffice.org/15127 +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara +(cherry picked from commit d8d946210a39400e4fc0b83f186e6234ad364836) + +Conflicts: + sw/source/core/edit/eddel.cxx + +Change-Id: I741e0391e7f8e09a64bcfe99ca4d650f1016aaa7 +--- + sw/source/core/edit/eddel.cxx | 14 ++++++++++---- + 1 file changed, 10 insertions(+), 4 deletions(-) + +diff --git a/sw/source/core/edit/eddel.cxx b/sw/source/core/edit/eddel.cxx +index 47614f2c..fad1eaf 100644 +--- a/sw/source/core/edit/eddel.cxx ++++ b/sw/source/core/edit/eddel.cxx +@@ -89,14 +89,20 @@ void SwEditShell::DeleteSel( SwPaM& rPam, bool* pUndo ) + } + else + { +- SwPaM aPam(rPam); ++ std::unique_ptr pNewPam; ++ SwPaM * pPam = &rPam; + if (bSelectAll) ++ { ++ assert(dynamic_cast(&rPam)); // must be corrected pam ++ pNewPam.reset(new SwPaM(rPam)); + // Selection starts at the first para of the first cell, but we + // want to delete the table node before the first cell as well. +- aPam.Start()->nNode = aPam.Start()->nNode.GetNode().FindTableNode()->GetIndex(); ++ pNewPam->Start()->nNode = pNewPam->Start()->nNode.GetNode().FindTableNode()->GetIndex(); ++ pPam = pNewPam.get(); ++ } + // delete everything +- GetDoc()->DeleteAndJoin( aPam ); +- SaveTblBoxCntnt( aPam.GetPoint() ); ++ GetDoc()->DeleteAndJoin( *pPam ); ++ SaveTblBoxCntnt( pPam->GetPoint() ); + } + + // Selection is not needed anymore +-- +2.1.0 + diff --git a/SOURCES/0001-update-libxmlsec-config.-to-support-ppc64le.patch b/SOURCES/0001-update-libxmlsec-config.-to-support-ppc64le.patch deleted file mode 100644 index 6966a08..0000000 --- a/SOURCES/0001-update-libxmlsec-config.-to-support-ppc64le.patch +++ /dev/null @@ -1,1663 +0,0 @@ -From 106d9b392bd59f52775eeb09e2a4e8b20828894b Mon Sep 17 00:00:00 2001 -From: David Tardon -Date: Tue, 13 May 2014 16:48:40 +0200 -Subject: [PATCH] update libxmlsec config.* to support ppc64le - -Change-Id: I4b31729481b7fd538483db5b6e39e1d80e03b3b6 ---- - external/libxmlsec/UnpackedTarball_xmlsec.mk | 1 + - .../libxmlsec/xmlsec1-update-config.guess.patch.1 | 1630 ++++++++++++++++++++ - 2 files changed, 1631 insertions(+) - create mode 100644 external/libxmlsec/xmlsec1-update-config.guess.patch.1 - -diff --git a/external/libxmlsec/UnpackedTarball_xmlsec.mk b/external/libxmlsec/UnpackedTarball_xmlsec.mk -index 6d1cb43..a72deed 100644 ---- a/external/libxmlsec/UnpackedTarball_xmlsec.mk -+++ b/external/libxmlsec/UnpackedTarball_xmlsec.mk -@@ -25,6 +25,7 @@ $(eval $(call gb_UnpackedTarball_add_patches,xmlsec,\ - external/libxmlsec/xmlsec1-android.patch \ - external/libxmlsec/xmlsec1-1.2.14-ansi.patch \ - external/libxmlsec/xmlsec1-customkeymanage.patch \ -+ external/libxmlsec/xmlsec1-update-config.guess.patch.1 \ - )) - - $(eval $(call gb_UnpackedTarball_add_file,xmlsec,include/xmlsec/mscrypto/akmngr.h,external/libxmlsec/include/akmngr_mscrypto.h)) -diff --git a/external/libxmlsec/xmlsec1-update-config.guess.patch.1 b/external/libxmlsec/xmlsec1-update-config.guess.patch.1 -new file mode 100644 -index 0000000..1b8ea40 ---- /dev/null -+++ b/external/libxmlsec/xmlsec1-update-config.guess.patch.1 -@@ -0,0 +1,1630 @@ -+From dd15aae9ce221198be486a6e75d5a42f75ff9de6 Mon Sep 17 00:00:00 2001 -+From: David Tardon -+Date: Tue, 13 May 2014 16:35:04 +0200 -+Subject: [PATCH] update config.* to support ppc64le -+ -+--- -+ config.guess | 541 +++++++++++++++++++++++++++++------------------------------ -+ config.sub | 301 ++++++++++++++++++++++----------- -+ 2 files changed, 472 insertions(+), 370 deletions(-) -+ -+diff --git a/config.guess b/config.guess -+index da83314..b79252d 100755 -+--- a/config.guess -++++ b/config.guess -+@@ -1,14 +1,12 @@ -+ #! /bin/sh -+ # Attempt to guess a canonical system name. -+-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -+-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 -+-# Free Software Foundation, Inc. -++# Copyright 1992-2013 Free Software Foundation, Inc. -+ -+-timestamp='2009-04-27' -++timestamp='2013-06-10' -+ -+ # This file is free software; you can redistribute it and/or modify it -+ # under the terms of the GNU General Public License as published by -+-# the Free Software Foundation; either version 2 of the License, or -++# the Free Software Foundation; either version 3 of the License, or -+ # (at your option) any later version. -+ # -+ # This program is distributed in the hope that it will be useful, but -+@@ -17,26 +15,22 @@ timestamp='2009-04-27' -+ # General Public License for more details. -+ # -+ # You should have received a copy of the GNU General Public License -+-# along with this program; if not, write to the Free Software -+-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -+-# 02110-1301, USA. -++# along with this program; if not, see . -+ # -+ # As a special exception to the GNU General Public License, if you -+ # distribute this file as part of a program that contains a -+ # configuration script generated by Autoconf, you may include it under -+-# the same distribution terms that you use for the rest of that program. -+- -+- -+-# Originally written by Per Bothner . -+-# Please send patches to . Submit a context -+-# diff and a properly formatted ChangeLog entry. -++# the same distribution terms that you use for the rest of that -++# program. This Exception is an additional permission under section 7 -++# of the GNU General Public License, version 3 ("GPLv3"). -++# -++# Originally written by Per Bothner. -+ # -+-# This script attempts to guess a canonical system name similar to -+-# config.sub. If it succeeds, it prints the system name on stdout, and -+-# exits with 0. Otherwise, it exits with 1. -++# You can get the latest version of this script from: -++# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD -+ # -+-# The plan is that this can be called by configure scripts if you -+-# don't specify an explicit build system type. -++# Please send patches with a ChangeLog entry to config-patches@gnu.org. -++ -+ -+ me=`echo "$0" | sed -e 's,.*/,,'` -+ -+@@ -56,8 +50,7 @@ version="\ -+ GNU config.guess ($timestamp) -+ -+ Originally written by Per Bothner. -+-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, -+-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. -++Copyright 1992-2013 Free Software Foundation, Inc. -+ -+ This is free software; see the source for copying conditions. There is NO -+ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." -+@@ -139,12 +132,33 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -+ UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -+ UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown -+ -++case "${UNAME_SYSTEM}" in -++Linux|GNU|GNU/*) -++ # If the system lacks a compiler, then just pick glibc. -++ # We could probably try harder. -++ LIBC=gnu -++ -++ eval $set_cc_for_build -++ cat <<-EOF > $dummy.c -++ #include -++ #if defined(__UCLIBC__) -++ LIBC=uclibc -++ #elif defined(__dietlibc__) -++ LIBC=dietlibc -++ #else -++ LIBC=gnu -++ #endif -++ EOF -++ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` -++ ;; -++esac -++ -+ # Note: order is significant - the case branches are not exclusive. -+ -+ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in -+ *:NetBSD:*:*) -+ # NetBSD (nbsd) targets should (where applicable) match one or -+- # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, -++ # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, -+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently -+ # switched to ELF, *-*-netbsd* would select the old -+ # object file format. This provides both forward -+@@ -170,7 +184,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in -+ arm*|i386|m68k|ns32k|sh3*|sparc|vax) -+ eval $set_cc_for_build -+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ -+- | grep __ELF__ >/dev/null -++ | grep -q __ELF__ -+ then -+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). -+ # Return netbsd for either. FIX? -+@@ -180,7 +194,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in -+ fi -+ ;; -+ *) -+- os=netbsd -++ os=netbsd -+ ;; -+ esac -+ # The OS release -+@@ -201,6 +215,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in -+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. -+ echo "${machine}-${os}${release}" -+ exit ;; -++ *:Bitrig:*:*) -++ UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` -++ echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} -++ exit ;; -+ *:OpenBSD:*:*) -+ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` -+ echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} -+@@ -223,7 +241,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in -+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` -+ ;; -+ *5.*) -+- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` -++ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` -+ ;; -+ esac -+ # According to Compaq, /usr/sbin/psrinfo has been available on -+@@ -269,7 +287,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in -+ # A Xn.n version is an unreleased experimental baselevel. -+ # 1.2 uses "1.2" for uname -r. -+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` -+- exit ;; -++ # Reset EXIT trap before exiting to avoid spurious non-zero exit code. -++ exitcode=$? -++ trap '' 0 -++ exit $exitcode ;; -+ Alpha\ *:Windows_NT*:*) -+ # How do we know it's Interix rather than the generic POSIX subsystem? -+ # Should we change UNAME_MACHINE based on the output of uname instead -+@@ -295,12 +316,12 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in -+ echo s390-ibm-zvmoe -+ exit ;; -+ *:OS400:*:*) -+- echo powerpc-ibm-os400 -++ echo powerpc-ibm-os400 -+ exit ;; -+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) -+ echo arm-acorn-riscix${UNAME_RELEASE} -+ exit ;; -+- arm:riscos:*:*|arm:RISCOS:*:*) -++ arm*:riscos:*:*|arm*:RISCOS:*:*) -+ echo arm-unknown-riscos -+ exit ;; -+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) -+@@ -333,6 +354,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in -+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) -+ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` -+ exit ;; -++ i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) -++ echo i386-pc-auroraux${UNAME_RELEASE} -++ exit ;; -+ i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) -+ eval $set_cc_for_build -+ SUN_ARCH="i386" -+@@ -391,23 +415,23 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in -+ # MiNT. But MiNT is downward compatible to TOS, so this should -+ # be no problem. -+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) -+- echo m68k-atari-mint${UNAME_RELEASE} -++ echo m68k-atari-mint${UNAME_RELEASE} -+ exit ;; -+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) -+ echo m68k-atari-mint${UNAME_RELEASE} -+- exit ;; -++ exit ;; -+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) -+- echo m68k-atari-mint${UNAME_RELEASE} -++ echo m68k-atari-mint${UNAME_RELEASE} -+ exit ;; -+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) -+- echo m68k-milan-mint${UNAME_RELEASE} -+- exit ;; -++ echo m68k-milan-mint${UNAME_RELEASE} -++ exit ;; -+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) -+- echo m68k-hades-mint${UNAME_RELEASE} -+- exit ;; -++ echo m68k-hades-mint${UNAME_RELEASE} -++ exit ;; -+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) -+- echo m68k-unknown-mint${UNAME_RELEASE} -+- exit ;; -++ echo m68k-unknown-mint${UNAME_RELEASE} -++ exit ;; -+ m68k:machten:*:*) -+ echo m68k-apple-machten${UNAME_RELEASE} -+ exit ;; -+@@ -477,8 +501,8 @@ EOF -+ echo m88k-motorola-sysv3 -+ exit ;; -+ AViiON:dgux:*:*) -+- # DG/UX returns AViiON for all architectures -+- UNAME_PROCESSOR=`/usr/bin/uname -p` -++ # DG/UX returns AViiON for all architectures -++ UNAME_PROCESSOR=`/usr/bin/uname -p` -+ if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] -+ then -+ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ -+@@ -491,7 +515,7 @@ EOF -+ else -+ echo i586-dg-dgux${UNAME_RELEASE} -+ fi -+- exit ;; -++ exit ;; -+ M88*:DolphinOS:*:*) # DolphinOS (SVR3) -+ echo m88k-dolphin-sysv3 -+ exit ;; -+@@ -548,7 +572,7 @@ EOF -+ echo rs6000-ibm-aix3.2 -+ fi -+ exit ;; -+- *:AIX:*:[456]) -++ *:AIX:*:[4567]) -+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` -+ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then -+ IBM_ARCH=rs6000 -+@@ -591,52 +615,52 @@ EOF -+ 9000/[678][0-9][0-9]) -+ if [ -x /usr/bin/getconf ]; then -+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` -+- sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` -+- case "${sc_cpu_version}" in -+- 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 -+- 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 -+- 532) # CPU_PA_RISC2_0 -+- case "${sc_kernel_bits}" in -+- 32) HP_ARCH="hppa2.0n" ;; -+- 64) HP_ARCH="hppa2.0w" ;; -++ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` -++ case "${sc_cpu_version}" in -++ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 -++ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 -++ 532) # CPU_PA_RISC2_0 -++ case "${sc_kernel_bits}" in -++ 32) HP_ARCH="hppa2.0n" ;; -++ 64) HP_ARCH="hppa2.0w" ;; -+ '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 -+- esac ;; -+- esac -++ esac ;; -++ esac -+ fi -+ if [ "${HP_ARCH}" = "" ]; then -+ eval $set_cc_for_build -+- sed 's/^ //' << EOF >$dummy.c -++ sed 's/^ //' << EOF >$dummy.c -+ -+- #define _HPUX_SOURCE -+- #include -+- #include -++ #define _HPUX_SOURCE -++ #include -++ #include -+ -+- int main () -+- { -+- #if defined(_SC_KERNEL_BITS) -+- long bits = sysconf(_SC_KERNEL_BITS); -+- #endif -+- long cpu = sysconf (_SC_CPU_VERSION); -++ int main () -++ { -++ #if defined(_SC_KERNEL_BITS) -++ long bits = sysconf(_SC_KERNEL_BITS); -++ #endif -++ long cpu = sysconf (_SC_CPU_VERSION); -+ -+- switch (cpu) -+- { -+- case CPU_PA_RISC1_0: puts ("hppa1.0"); break; -+- case CPU_PA_RISC1_1: puts ("hppa1.1"); break; -+- case CPU_PA_RISC2_0: -+- #if defined(_SC_KERNEL_BITS) -+- switch (bits) -+- { -+- case 64: puts ("hppa2.0w"); break; -+- case 32: puts ("hppa2.0n"); break; -+- default: puts ("hppa2.0"); break; -+- } break; -+- #else /* !defined(_SC_KERNEL_BITS) */ -+- puts ("hppa2.0"); break; -+- #endif -+- default: puts ("hppa1.0"); break; -+- } -+- exit (0); -+- } -++ switch (cpu) -++ { -++ case CPU_PA_RISC1_0: puts ("hppa1.0"); break; -++ case CPU_PA_RISC1_1: puts ("hppa1.1"); break; -++ case CPU_PA_RISC2_0: -++ #if defined(_SC_KERNEL_BITS) -++ switch (bits) -++ { -++ case 64: puts ("hppa2.0w"); break; -++ case 32: puts ("hppa2.0n"); break; -++ default: puts ("hppa2.0"); break; -++ } break; -++ #else /* !defined(_SC_KERNEL_BITS) */ -++ puts ("hppa2.0"); break; -++ #endif -++ default: puts ("hppa1.0"); break; -++ } -++ exit (0); -++ } -+ EOF -+ (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` -+ test -z "$HP_ARCH" && HP_ARCH=hppa -+@@ -656,7 +680,7 @@ EOF -+ # => hppa64-hp-hpux11.23 -+ -+ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | -+- grep __LP64__ >/dev/null -++ grep -q __LP64__ -+ then -+ HP_ARCH="hppa2.0w" -+ else -+@@ -727,22 +751,22 @@ EOF -+ exit ;; -+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) -+ echo c1-convex-bsd -+- exit ;; -++ exit ;; -+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) -+ if getsysinfo -f scalar_acc -+ then echo c32-convex-bsd -+ else echo c2-convex-bsd -+ fi -+- exit ;; -++ exit ;; -+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) -+ echo c34-convex-bsd -+- exit ;; -++ exit ;; -+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) -+ echo c38-convex-bsd -+- exit ;; -++ exit ;; -+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) -+ echo c4-convex-bsd -+- exit ;; -++ exit ;; -+ CRAY*Y-MP:*:*:*) -+ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' -+ exit ;; -+@@ -766,14 +790,14 @@ EOF -+ exit ;; -+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) -+ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` -+- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` -+- FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` -+- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" -+- exit ;; -++ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` -++ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` -++ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" -++ exit ;; -+ 5000:UNIX_System_V:4.*:*) -+- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` -+- FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` -+- echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" -++ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` -++ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` -++ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" -+ exit ;; -+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) -+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} -+@@ -785,34 +809,39 @@ EOF -+ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} -+ exit ;; -+ *:FreeBSD:*:*) -+- case ${UNAME_MACHINE} in -+- pc98) -+- echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; -++ UNAME_PROCESSOR=`/usr/bin/uname -p` -++ case ${UNAME_PROCESSOR} in -+ amd64) -+ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; -+ *) -+- echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; -++ echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; -+ esac -+ exit ;; -+ i*:CYGWIN*:*) -+ echo ${UNAME_MACHINE}-pc-cygwin -+ exit ;; -++ *:MINGW64*:*) -++ echo ${UNAME_MACHINE}-pc-mingw64 -++ exit ;; -+ *:MINGW*:*) -+ echo ${UNAME_MACHINE}-pc-mingw32 -+ exit ;; -++ i*:MSYS*:*) -++ echo ${UNAME_MACHINE}-pc-msys -++ exit ;; -+ i*:windows32*:*) -+- # uname -m includes "-pc" on this system. -+- echo ${UNAME_MACHINE}-mingw32 -++ # uname -m includes "-pc" on this system. -++ echo ${UNAME_MACHINE}-mingw32 -+ exit ;; -+ i*:PW*:*) -+ echo ${UNAME_MACHINE}-pc-pw32 -+ exit ;; -+- *:Interix*:[3456]*) -+- case ${UNAME_MACHINE} in -++ *:Interix*:*) -++ case ${UNAME_MACHINE} in -+ x86) -+ echo i586-pc-interix${UNAME_RELEASE} -+ exit ;; -+- EM64T | authenticamd | genuineintel) -++ authenticamd | genuineintel | EM64T) -+ echo x86_64-unknown-interix${UNAME_RELEASE} -+ exit ;; -+ IA64) -+@@ -822,6 +851,9 @@ EOF -+ [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) -+ echo i${UNAME_MACHINE}-pc-mks -+ exit ;; -++ 8664:Windows_NT:*) -++ echo x86_64-pc-mks -++ exit ;; -+ i*:Windows_NT*:* | Pentium*:Windows_NT*:*) -+ # How do we know it's Interix rather than the generic POSIX subsystem? -+ # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we -+@@ -842,210 +874,157 @@ EOF -+ exit ;; -+ *:GNU:*:*) -+ # the GNU system -+- echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` -++ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` -+ exit ;; -+ *:GNU/*:*:*) -+ # other systems with GNU libc and userland -+- echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu -++ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} -+ exit ;; -+ i*86:Minix:*:*) -+ echo ${UNAME_MACHINE}-pc-minix -+ exit ;; -++ aarch64:Linux:*:*) -++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -++ exit ;; -++ aarch64_be:Linux:*:*) -++ UNAME_MACHINE=aarch64_be -++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -++ exit ;; -++ alpha:Linux:*:*) -++ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in -++ EV5) UNAME_MACHINE=alphaev5 ;; -++ EV56) UNAME_MACHINE=alphaev56 ;; -++ PCA56) UNAME_MACHINE=alphapca56 ;; -++ PCA57) UNAME_MACHINE=alphapca56 ;; -++ EV6) UNAME_MACHINE=alphaev6 ;; -++ EV67) UNAME_MACHINE=alphaev67 ;; -++ EV68*) UNAME_MACHINE=alphaev68 ;; -++ esac -++ objdump --private-headers /bin/sh | grep -q ld.so.1 -++ if test "$?" = 0 ; then LIBC="gnulibc1" ; fi -++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -++ exit ;; -++ arc:Linux:*:* | arceb:Linux:*:*) -++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -++ exit ;; -+ arm*:Linux:*:*) -+ eval $set_cc_for_build -+ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ -+ | grep -q __ARM_EABI__ -+ then -+- echo ${UNAME_MACHINE}-unknown-linux-gnu -++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -+ else -+- echo ${UNAME_MACHINE}-unknown-linux-gnueabi -++ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ -++ | grep -q __ARM_PCS_VFP -++ then -++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi -++ else -++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf -++ fi -+ fi -+ exit ;; -+ avr32*:Linux:*:*) -+- echo ${UNAME_MACHINE}-unknown-linux-gnu -++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -+ exit ;; -+ cris:Linux:*:*) -+- echo cris-axis-linux-gnu -++ echo ${UNAME_MACHINE}-axis-linux-${LIBC} -+ exit ;; -+ crisv32:Linux:*:*) -+- echo crisv32-axis-linux-gnu -++ echo ${UNAME_MACHINE}-axis-linux-${LIBC} -+ exit ;; -+ frv:Linux:*:*) -+- echo frv-unknown-linux-gnu -++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -++ exit ;; -++ hexagon:Linux:*:*) -++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -++ exit ;; -++ i*86:Linux:*:*) -++ echo ${UNAME_MACHINE}-pc-linux-${LIBC} -+ exit ;; -+ ia64:Linux:*:*) -+- echo ${UNAME_MACHINE}-unknown-linux-gnu -++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -+ exit ;; -+ m32r*:Linux:*:*) -+- echo ${UNAME_MACHINE}-unknown-linux-gnu -++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -+ exit ;; -+ m68*:Linux:*:*) -+- echo ${UNAME_MACHINE}-unknown-linux-gnu -++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -+ exit ;; -+- mips:Linux:*:*) -+- eval $set_cc_for_build -+- sed 's/^ //' << EOF >$dummy.c -+- #undef CPU -+- #undef mips -+- #undef mipsel -+- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) -+- CPU=mipsel -+- #else -+- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) -+- CPU=mips -+- #else -+- CPU= -+- #endif -+- #endif -+-EOF -+- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' -+- /^CPU/{ -+- s: ::g -+- p -+- }'`" -+- test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } -+- ;; -+- mips64:Linux:*:*) -++ mips:Linux:*:* | mips64:Linux:*:*) -+ eval $set_cc_for_build -+ sed 's/^ //' << EOF >$dummy.c -+ #undef CPU -+- #undef mips64 -+- #undef mips64el -++ #undef ${UNAME_MACHINE} -++ #undef ${UNAME_MACHINE}el -+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) -+- CPU=mips64el -++ CPU=${UNAME_MACHINE}el -+ #else -+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) -+- CPU=mips64 -++ CPU=${UNAME_MACHINE} -+ #else -+ CPU= -+ #endif -+ #endif -+ EOF -+- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' -+- /^CPU/{ -+- s: ::g -+- p -+- }'`" -+- test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } -++ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` -++ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } -+ ;; -+- or32:Linux:*:*) -+- echo or32-unknown-linux-gnu -+- exit ;; -+- ppc:Linux:*:*) -+- echo powerpc-unknown-linux-gnu -++ or1k:Linux:*:*) -++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -+ exit ;; -+- ppc64:Linux:*:*) -+- echo powerpc64-unknown-linux-gnu -+- exit ;; -+- alpha:Linux:*:*) -+- case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in -+- EV5) UNAME_MACHINE=alphaev5 ;; -+- EV56) UNAME_MACHINE=alphaev56 ;; -+- PCA56) UNAME_MACHINE=alphapca56 ;; -+- PCA57) UNAME_MACHINE=alphapca56 ;; -+- EV6) UNAME_MACHINE=alphaev6 ;; -+- EV67) UNAME_MACHINE=alphaev67 ;; -+- EV68*) UNAME_MACHINE=alphaev68 ;; -+- esac -+- objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null -+- if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi -+- echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} -++ or32:Linux:*:*) -++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -+ exit ;; -+ padre:Linux:*:*) -+- echo sparc-unknown-linux-gnu -++ echo sparc-unknown-linux-${LIBC} -++ exit ;; -++ parisc64:Linux:*:* | hppa64:Linux:*:*) -++ echo hppa64-unknown-linux-${LIBC} -+ exit ;; -+ parisc:Linux:*:* | hppa:Linux:*:*) -+ # Look for CPU level -+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in -+- PA7*) echo hppa1.1-unknown-linux-gnu ;; -+- PA8*) echo hppa2.0-unknown-linux-gnu ;; -+- *) echo hppa-unknown-linux-gnu ;; -++ PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; -++ PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; -++ *) echo hppa-unknown-linux-${LIBC} ;; -+ esac -+ exit ;; -+- parisc64:Linux:*:* | hppa64:Linux:*:*) -+- echo hppa64-unknown-linux-gnu -++ ppc64:Linux:*:*) -++ echo powerpc64-unknown-linux-${LIBC} -++ exit ;; -++ ppc:Linux:*:*) -++ echo powerpc-unknown-linux-${LIBC} -++ exit ;; -++ ppc64le:Linux:*:*) -++ echo powerpc64le-unknown-linux-${LIBC} -++ exit ;; -++ ppcle:Linux:*:*) -++ echo powerpcle-unknown-linux-${LIBC} -+ exit ;; -+ s390:Linux:*:* | s390x:Linux:*:*) -+- echo ${UNAME_MACHINE}-ibm-linux -++ echo ${UNAME_MACHINE}-ibm-linux-${LIBC} -+ exit ;; -+ sh64*:Linux:*:*) -+- echo ${UNAME_MACHINE}-unknown-linux-gnu -++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -+ exit ;; -+ sh*:Linux:*:*) -+- echo ${UNAME_MACHINE}-unknown-linux-gnu -++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -+ exit ;; -+ sparc:Linux:*:* | sparc64:Linux:*:*) -+- echo ${UNAME_MACHINE}-unknown-linux-gnu -++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -++ exit ;; -++ tile*:Linux:*:*) -++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -+ exit ;; -+ vax:Linux:*:*) -+- echo ${UNAME_MACHINE}-dec-linux-gnu -++ echo ${UNAME_MACHINE}-dec-linux-${LIBC} -+ exit ;; -+ x86_64:Linux:*:*) -+- echo x86_64-unknown-linux-gnu -++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -+ exit ;; -+ xtensa*:Linux:*:*) -+- echo ${UNAME_MACHINE}-unknown-linux-gnu -++ echo ${UNAME_MACHINE}-unknown-linux-${LIBC} -+ exit ;; -+- i*86:Linux:*:*) -+- # The BFD linker knows what the default object file format is, so -+- # first see if it will tell us. cd to the root directory to prevent -+- # problems with other programs or directories called `ld' in the path. -+- # Set LC_ALL=C to ensure ld outputs messages in English. -+- ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ -+- | sed -ne '/supported targets:/!d -+- s/[ ][ ]*/ /g -+- s/.*supported targets: *// -+- s/ .*// -+- p'` -+- case "$ld_supported_targets" in -+- elf32-i386) -+- TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" -+- ;; -+- a.out-i386-linux) -+- echo "${UNAME_MACHINE}-pc-linux-gnuaout" -+- exit ;; -+- "") -+- # Either a pre-BFD a.out linker (linux-gnuoldld) or -+- # one that does not give us useful --help. -+- echo "${UNAME_MACHINE}-pc-linux-gnuoldld" -+- exit ;; -+- esac -+- # Determine whether the default compiler is a.out or elf -+- eval $set_cc_for_build -+- sed 's/^ //' << EOF >$dummy.c -+- #include -+- #ifdef __ELF__ -+- # ifdef __GLIBC__ -+- # if __GLIBC__ >= 2 -+- LIBC=gnu -+- # else -+- LIBC=gnulibc1 -+- # endif -+- # else -+- LIBC=gnulibc1 -+- # endif -+- #else -+- #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) -+- LIBC=gnu -+- #else -+- LIBC=gnuaout -+- #endif -+- #endif -+- #ifdef __dietlibc__ -+- LIBC=dietlibc -+- #endif -+-EOF -+- eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' -+- /^LIBC/{ -+- s: ::g -+- p -+- }'`" -+- test x"${LIBC}" != x && { -+- echo "${UNAME_MACHINE}-pc-linux-${LIBC}" -+- exit -+- } -+- test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } -+- ;; -+ i*86:DYNIX/ptx:4*:*) -+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. -+ # earlier versions are messed up and put the nodename in both -+@@ -1053,11 +1032,11 @@ EOF -+ echo i386-sequent-sysv4 -+ exit ;; -+ i*86:UNIX_SV:4.2MP:2.*) -+- # Unixware is an offshoot of SVR4, but it has its own version -+- # number series starting with 2... -+- # I am not positive that other SVR4 systems won't match this, -++ # Unixware is an offshoot of SVR4, but it has its own version -++ # number series starting with 2... -++ # I am not positive that other SVR4 systems won't match this, -+ # I just have to hope. -- rms. -+- # Use sysv4.2uw... so that sysv4* matches it. -++ # Use sysv4.2uw... so that sysv4* matches it. -+ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} -+ exit ;; -+ i*86:OS/2:*:*) -+@@ -1074,7 +1053,7 @@ EOF -+ i*86:syllable:*:*) -+ echo ${UNAME_MACHINE}-pc-syllable -+ exit ;; -+- i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) -++ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) -+ echo i386-unknown-lynxos${UNAME_RELEASE} -+ exit ;; -+ i*86:*DOS:*:*) -+@@ -1089,7 +1068,7 @@ EOF -+ fi -+ exit ;; -+ i*86:*:5:[678]*) -+- # UnixWare 7.x, OpenUNIX and OpenServer 6. -++ # UnixWare 7.x, OpenUNIX and OpenServer 6. -+ case `/bin/uname -X | grep "^Machine"` in -+ *486*) UNAME_MACHINE=i486 ;; -+ *Pentium) UNAME_MACHINE=i586 ;; -+@@ -1117,13 +1096,13 @@ EOF -+ exit ;; -+ pc:*:*:*) -+ # Left here for compatibility: -+- # uname -m prints for DJGPP always 'pc', but it prints nothing about -+- # the processor, so we play safe by assuming i586. -++ # uname -m prints for DJGPP always 'pc', but it prints nothing about -++ # the processor, so we play safe by assuming i586. -+ # Note: whatever this is, it MUST be the same as what config.sub -+ # prints for the "djgpp" host, or else GDB configury will decide that -+ # this is a cross-build. -+ echo i586-pc-msdosdjgpp -+- exit ;; -++ exit ;; -+ Intel:Mach:3*:*) -+ echo i386-pc-mach3 -+ exit ;; -+@@ -1158,8 +1137,8 @@ EOF -+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ -+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; -+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) -+- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ -+- && { echo i486-ncr-sysv4; exit; } ;; -++ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ -++ && { echo i486-ncr-sysv4; exit; } ;; -+ NCR*:*:4.2:* | MPRAS*:*:4.2:*) -+ OS_REL='.3' -+ test -r /etc/.relid \ -+@@ -1182,7 +1161,7 @@ EOF -+ rs6000:LynxOS:2.*:*) -+ echo rs6000-unknown-lynxos${UNAME_RELEASE} -+ exit ;; -+- PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) -++ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) -+ echo powerpc-unknown-lynxos${UNAME_RELEASE} -+ exit ;; -+ SM[BE]S:UNIX_SV:*:*) -+@@ -1202,10 +1181,10 @@ EOF -+ echo ns32k-sni-sysv -+ fi -+ exit ;; -+- PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort -+- # says -+- echo i586-unisys-sysv4 -+- exit ;; -++ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort -++ # says -++ echo i586-unisys-sysv4 -++ exit ;; -+ *:UNIX_System_V:4*:FTX*) -+ # From Gerald Hewes . -+ # How about differentiating between stratus architectures? -djm -+@@ -1231,11 +1210,11 @@ EOF -+ exit ;; -+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) -+ if [ -d /usr/nec ]; then -+- echo mips-nec-sysv${UNAME_RELEASE} -++ echo mips-nec-sysv${UNAME_RELEASE} -+ else -+- echo mips-unknown-sysv${UNAME_RELEASE} -++ echo mips-unknown-sysv${UNAME_RELEASE} -+ fi -+- exit ;; -++ exit ;; -+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. -+ echo powerpc-be-beos -+ exit ;; -+@@ -1248,6 +1227,9 @@ EOF -+ BePC:Haiku:*:*) # Haiku running on Intel PC compatible. -+ echo i586-pc-haiku -+ exit ;; -++ x86_64:Haiku:*:*) -++ echo x86_64-unknown-haiku -++ exit ;; -+ SX-4:SUPER-UX:*:*) -+ echo sx4-nec-superux${UNAME_RELEASE} -+ exit ;; -+@@ -1274,9 +1256,21 @@ EOF -+ exit ;; -+ *:Darwin:*:*) -+ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown -+- case $UNAME_PROCESSOR in -+- unknown) UNAME_PROCESSOR=powerpc ;; -+- esac -++ eval $set_cc_for_build -++ if test "$UNAME_PROCESSOR" = unknown ; then -++ UNAME_PROCESSOR=powerpc -++ fi -++ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then -++ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ -++ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ -++ grep IS_64BIT_ARCH >/dev/null -++ then -++ case $UNAME_PROCESSOR in -++ i386) UNAME_PROCESSOR=x86_64 ;; -++ powerpc) UNAME_PROCESSOR=powerpc64 ;; -++ esac -++ fi -++ fi -+ echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} -+ exit ;; -+ *:procnto*:*:* | *:QNX:[0123456789]*:*) -+@@ -1290,7 +1284,10 @@ EOF -+ *:QNX:*:4*) -+ echo i386-pc-qnx -+ exit ;; -+- NSE-?:NONSTOP_KERNEL:*:*) -++ NEO-?:NONSTOP_KERNEL:*:*) -++ echo neo-tandem-nsk${UNAME_RELEASE} -++ exit ;; -++ NSE-*:NONSTOP_KERNEL:*:*) -+ echo nse-tandem-nsk${UNAME_RELEASE} -+ exit ;; -+ NSR-?:NONSTOP_KERNEL:*:*) -+@@ -1335,13 +1332,13 @@ EOF -+ echo pdp10-unknown-its -+ exit ;; -+ SEI:*:*:SEIUX) -+- echo mips-sei-seiux${UNAME_RELEASE} -++ echo mips-sei-seiux${UNAME_RELEASE} -+ exit ;; -+ *:DragonFly:*:*) -+ echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` -+ exit ;; -+ *:*VMS:*:*) -+- UNAME_MACHINE=`(uname -p) 2>/dev/null` -++ UNAME_MACHINE=`(uname -p) 2>/dev/null` -+ case "${UNAME_MACHINE}" in -+ A*) echo alpha-dec-vms ; exit ;; -+ I*) echo ia64-dec-vms ; exit ;; -+@@ -1359,11 +1356,11 @@ EOF -+ i*86:AROS:*:*) -+ echo ${UNAME_MACHINE}-pc-aros -+ exit ;; -++ x86_64:VMkernel:*:*) -++ echo ${UNAME_MACHINE}-unknown-esx -++ exit ;; -+ esac -+ -+-#echo '(No uname command or uname output not recognized.)' 1>&2 -+-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 -+- -+ eval $set_cc_for_build -+ cat >$dummy.c < -+ printf ("m68k-sony-newsos%s\n", -+ #ifdef NEWSOS4 -+- "4" -++ "4" -+ #else -+- "" -++ "" -+ #endif -+- ); exit (0); -++ ); exit (0); -+ #endif -+ #endif -+ -+diff --git a/config.sub b/config.sub -+index 45bad78..d2a9613 100755 -+--- a/config.sub -++++ b/config.sub -+@@ -1,44 +1,40 @@ -+ #! /bin/sh -+ # Configuration validation subroutine script. -+-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -+-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 -+-# Free Software Foundation, Inc. -++# Copyright 1992-2013 Free Software Foundation, Inc. -+ -+-timestamp='2009-04-17' -++timestamp='2013-08-10' -+ -+-# This file is (in principle) common to ALL GNU software. -+-# The presence of a machine in this file suggests that SOME GNU software -+-# can handle that machine. It does not imply ALL GNU software can. -+-# -+-# This file is free software; you can redistribute it and/or modify -+-# it under the terms of the GNU General Public License as published by -+-# the Free Software Foundation; either version 2 of the License, or -++# This file is free software; you can redistribute it and/or modify it -++# under the terms of the GNU General Public License as published by -++# the Free Software Foundation; either version 3 of the License, or -+ # (at your option) any later version. -+ # -+-# This program is distributed in the hope that it will be useful, -+-# but WITHOUT ANY WARRANTY; without even the implied warranty of -+-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+-# GNU General Public License for more details. -++# This program is distributed in the hope that it will be useful, but -++# WITHOUT ANY WARRANTY; without even the implied warranty of -++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -++# General Public License for more details. -+ # -+ # You should have received a copy of the GNU General Public License -+-# along with this program; if not, write to the Free Software -+-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -+-# 02110-1301, USA. -++# along with this program; if not, see . -+ # -+ # As a special exception to the GNU General Public License, if you -+ # distribute this file as part of a program that contains a -+ # configuration script generated by Autoconf, you may include it under -+-# the same distribution terms that you use for the rest of that program. -++# the same distribution terms that you use for the rest of that -++# program. This Exception is an additional permission under section 7 -++# of the GNU General Public License, version 3 ("GPLv3"). -+ -+ -+-# Please send patches to . Submit a context -+-# diff and a properly formatted ChangeLog entry. -++# Please send patches with a ChangeLog entry to config-patches@gnu.org. -+ # -+ # Configuration subroutine to validate and canonicalize a configuration type. -+ # Supply the specified configuration type as an argument. -+ # If it is invalid, we print an error message on stderr and exit with code 1. -+ # Otherwise, we print the canonical config type on stdout and succeed. -+ -++# You can get the latest version of this script from: -++# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD -++ -+ # This file is supposed to be the same for all GNU packages -+ # and recognize all the CPU types, system types and aliases -+ # that are meaningful with *any* GNU software. -+@@ -72,8 +68,7 @@ Report bugs and patches to ." -+ version="\ -+ GNU config.sub ($timestamp) -+ -+-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, -+-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. -++Copyright 1992-2013 Free Software Foundation, Inc. -+ -+ This is free software; see the source for copying conditions. There is NO -+ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." -+@@ -120,13 +115,18 @@ esac -+ # Here we must recognize all the valid KERNEL-OS combinations. -+ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -+ case $maybe_os in -+- nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ -+- uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ -++ nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ -++ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ -++ knetbsd*-gnu* | netbsd*-gnu* | \ -+ kopensolaris*-gnu* | \ -+ storm-chaos* | os2-emx* | rtmk-nova*) -+ os=-$maybe_os -+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` -+ ;; -++ android-linux) -++ os=-linux-android -++ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown -++ ;; -+ *) -+ basic_machine=`echo $1 | sed 's/-[^-]*$//'` -+ if [ $basic_machine != $1 ] -+@@ -149,10 +149,13 @@ case $os in -+ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -+ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -+ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -+- -apple | -axis | -knuth | -cray) -++ -apple | -axis | -knuth | -cray | -microblaze*) -+ os= -+ basic_machine=$1 -+ ;; -++ -bluegene*) -++ os=-cnk -++ ;; -+ -sim | -cisco | -oki | -wec | -winbond) -+ os= -+ basic_machine=$1 -+@@ -167,10 +170,10 @@ case $os in -+ os=-chorusos -+ basic_machine=$1 -+ ;; -+- -chorusrdb) -+- os=-chorusrdb -++ -chorusrdb) -++ os=-chorusrdb -+ basic_machine=$1 -+- ;; -++ ;; -+ -hiux*) -+ os=-hiuxwe2 -+ ;; -+@@ -215,6 +218,12 @@ case $os in -+ -isc*) -+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` -+ ;; -++ -lynx*178) -++ os=-lynxos178 -++ ;; -++ -lynx*5) -++ os=-lynxos5 -++ ;; -+ -lynx*) -+ os=-lynxos -+ ;; -+@@ -239,20 +248,27 @@ case $basic_machine in -+ # Some are omitted here because they have special meanings below. -+ 1750a | 580 \ -+ | a29k \ -++ | aarch64 | aarch64_be \ -+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ -+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ -+ | am33_2.0 \ -+- | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ -++ | arc | arceb \ -++ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ -++ | avr | avr32 \ -++ | be32 | be64 \ -+ | bfin \ -+- | c4x | clipper \ -++ | c4x | c8051 | clipper \ -+ | d10v | d30v | dlx | dsp16xx \ -++ | epiphany \ -+ | fido | fr30 | frv \ -+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ -++ | hexagon \ -+ | i370 | i860 | i960 | ia64 \ -+ | ip2k | iq2000 \ -++ | le32 | le64 \ -+ | lm32 \ -+ | m32c | m32r | m32rle | m68000 | m68k | m88k \ -+- | maxq | mb | microblaze | mcore | mep | metag \ -++ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ -+ | mips | mipsbe | mipseb | mipsel | mipsle \ -+ | mips16 \ -+ | mips64 | mips64el \ -+@@ -270,32 +286,45 @@ case $basic_machine in -+ | mipsisa64r2 | mipsisa64r2el \ -+ | mipsisa64sb1 | mipsisa64sb1el \ -+ | mipsisa64sr71k | mipsisa64sr71kel \ -++ | mipsr5900 | mipsr5900el \ -+ | mipstx39 | mipstx39el \ -+ | mn10200 | mn10300 \ -+ | moxie \ -+ | mt \ -+ | msp430 \ -+- | nios | nios2 \ -++ | nds32 | nds32le | nds32be \ -++ | nios | nios2 | nios2eb | nios2el \ -+ | ns16k | ns32k \ -+- | or32 \ -++ | open8 \ -++ | or1k | or32 \ -+ | pdp10 | pdp11 | pj | pjl \ -+- | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ -++ | powerpc | powerpc64 | powerpc64le | powerpcle \ -+ | pyramid \ -++ | rl78 | rx \ -+ | score \ -+ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ -+ | sh64 | sh64le \ -+ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ -+ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ -+- | spu | strongarm \ -+- | tahoe | thumb | tic4x | tic80 | tron \ -+- | v850 | v850e \ -++ | spu \ -++ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ -++ | ubicom32 \ -++ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ -+ | we32k \ -+- | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ -++ | x86 | xc16x | xstormy16 | xtensa \ -+ | z8k | z80) -+ basic_machine=$basic_machine-unknown -+ ;; -+- m6811 | m68hc11 | m6812 | m68hc12) -+- # Motorola 68HC11/12. -++ c54x) -++ basic_machine=tic54x-unknown -++ ;; -++ c55x) -++ basic_machine=tic55x-unknown -++ ;; -++ c6x) -++ basic_machine=tic6x-unknown -++ ;; -++ m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) -+ basic_machine=$basic_machine-unknown -+ os=-none -+ ;; -+@@ -305,6 +334,21 @@ case $basic_machine in -+ basic_machine=mt-unknown -+ ;; -+ -++ strongarm | thumb | xscale) -++ basic_machine=arm-unknown -++ ;; -++ xgate) -++ basic_machine=$basic_machine-unknown -++ os=-none -++ ;; -++ xscaleeb) -++ basic_machine=armeb-unknown -++ ;; -++ -++ xscaleel) -++ basic_machine=armel-unknown -++ ;; -++ -+ # We use `pc' rather than `unknown' -+ # because (1) that's what they normally are, and -+ # (2) the word "unknown" tends to confuse beginning users. -+@@ -319,25 +363,30 @@ case $basic_machine in -+ # Recognize the basic CPU types with company name. -+ 580-* \ -+ | a29k-* \ -++ | aarch64-* | aarch64_be-* \ -+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ -+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ -+- | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ -++ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ -+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ -+ | avr-* | avr32-* \ -++ | be32-* | be64-* \ -+ | bfin-* | bs2000-* \ -+- | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ -+- | clipper-* | craynv-* | cydra-* \ -++ | c[123]* | c30-* | [cjt]90-* | c4x-* \ -++ | c8051-* | clipper-* | craynv-* | cydra-* \ -+ | d10v-* | d30v-* | dlx-* \ -+ | elxsi-* \ -+ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ -+ | h8300-* | h8500-* \ -+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ -++ | hexagon-* \ -+ | i*86-* | i860-* | i960-* | ia64-* \ -+ | ip2k-* | iq2000-* \ -++ | le32-* | le64-* \ -+ | lm32-* \ -+ | m32c-* | m32r-* | m32rle-* \ -+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ -+ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ -++ | microblaze-* | microblazeel-* \ -+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ -+ | mips16-* \ -+ | mips64-* | mips64el-* \ -+@@ -355,28 +404,34 @@ case $basic_machine in -+ | mipsisa64r2-* | mipsisa64r2el-* \ -+ | mipsisa64sb1-* | mipsisa64sb1el-* \ -+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ -++ | mipsr5900-* | mipsr5900el-* \ -+ | mipstx39-* | mipstx39el-* \ -+ | mmix-* \ -+ | mt-* \ -+ | msp430-* \ -+- | nios-* | nios2-* \ -++ | nds32-* | nds32le-* | nds32be-* \ -++ | nios-* | nios2-* | nios2eb-* | nios2el-* \ -+ | none-* | np1-* | ns16k-* | ns32k-* \ -++ | open8-* \ -+ | orion-* \ -+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ -+- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ -++ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ -+ | pyramid-* \ -+- | romp-* | rs6000-* \ -++ | rl78-* | romp-* | rs6000-* | rx-* \ -+ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ -+ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ -+ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ -+ | sparclite-* \ -+- | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ -+- | tahoe-* | thumb-* \ -+- | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ -++ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ -++ | tahoe-* \ -++ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ -++ | tile*-* \ -+ | tron-* \ -+- | v850-* | v850e-* | vax-* \ -++ | ubicom32-* \ -++ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ -++ | vax-* \ -+ | we32k-* \ -+- | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ -++ | x86-* | x86_64-* | xc16x-* | xps100-* \ -+ | xstormy16-* | xtensa*-* \ -+ | ymp-* \ -+ | z8k-* | z80-*) -+@@ -401,7 +456,7 @@ case $basic_machine in -+ basic_machine=a29k-amd -+ os=-udi -+ ;; -+- abacus) -++ abacus) -+ basic_machine=abacus-unknown -+ ;; -+ adobe68k) -+@@ -467,11 +522,24 @@ case $basic_machine in -+ basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` -+ os=-linux -+ ;; -++ bluegene*) -++ basic_machine=powerpc-ibm -++ os=-cnk -++ ;; -++ c54x-*) -++ basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` -++ ;; -++ c55x-*) -++ basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` -++ ;; -++ c6x-*) -++ basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` -++ ;; -+ c90) -+ basic_machine=c90-cray -+ os=-unicos -+ ;; -+- cegcc) -++ cegcc) -+ basic_machine=arm-unknown -+ os=-cegcc -+ ;; -+@@ -503,7 +571,7 @@ case $basic_machine in -+ basic_machine=craynv-cray -+ os=-unicosmp -+ ;; -+- cr16) -++ cr16 | cr16-*) -+ basic_machine=cr16-unknown -+ os=-elf -+ ;; -+@@ -661,7 +729,6 @@ case $basic_machine in -+ i370-ibm* | ibm*) -+ basic_machine=i370-ibm -+ ;; -+-# I'm not sure what "Sysv32" means. Should this be sysv3.2? -+ i*86v32) -+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` -+ os=-sysv32 -+@@ -719,8 +786,15 @@ case $basic_machine in -+ basic_machine=ns32k-utek -+ os=-sysv -+ ;; -++ microblaze*) -++ basic_machine=microblaze-xilinx -++ ;; -++ mingw64) -++ basic_machine=x86_64-pc -++ os=-mingw64 -++ ;; -+ mingw32) -+- basic_machine=i386-pc -++ basic_machine=i686-pc -+ os=-mingw32 -+ ;; -+ mingw32ce) -+@@ -755,10 +829,18 @@ case $basic_machine in -+ ms1-*) -+ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` -+ ;; -++ msys) -++ basic_machine=i686-pc -++ os=-msys -++ ;; -+ mvs) -+ basic_machine=i370-ibm -+ os=-mvs -+ ;; -++ nacl) -++ basic_machine=le32-unknown -++ os=-nacl -++ ;; -+ ncr3000) -+ basic_machine=i486-ncr -+ os=-sysv4 -+@@ -823,6 +905,12 @@ case $basic_machine in -+ np1) -+ basic_machine=np1-gould -+ ;; -++ neo-tandem) -++ basic_machine=neo-tandem -++ ;; -++ nse-tandem) -++ basic_machine=nse-tandem -++ ;; -+ nsr-tandem) -+ basic_machine=nsr-tandem -+ ;; -+@@ -905,9 +993,10 @@ case $basic_machine in -+ ;; -+ power) basic_machine=power-ibm -+ ;; -+- ppc) basic_machine=powerpc-unknown -++ ppc | ppcbe) basic_machine=powerpc-unknown -+ ;; -+- ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` -++ ppc-* | ppcbe-*) -++ basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` -+ ;; -+ ppcle | powerpclittle | ppc-le | powerpc-little) -+ basic_machine=powerpcle-unknown -+@@ -917,7 +1006,7 @@ case $basic_machine in -+ ;; -+ ppc64) basic_machine=powerpc64-unknown -+ ;; -+- ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` -++ ppc64-* | ppc64p7-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` -+ ;; -+ ppc64le | powerpc64little | ppc64-le | powerpc64-little) -+ basic_machine=powerpc64le-unknown -+@@ -932,7 +1021,11 @@ case $basic_machine in -+ basic_machine=i586-unknown -+ os=-pw32 -+ ;; -+- rdos) -++ rdos | rdos64) -++ basic_machine=x86_64-pc -++ os=-rdos -++ ;; -++ rdos32) -+ basic_machine=i386-pc -+ os=-rdos -+ ;; -+@@ -1001,6 +1094,9 @@ case $basic_machine in -+ basic_machine=i860-stratus -+ os=-sysv4 -+ ;; -++ strongarm-* | thumb-*) -++ basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` -++ ;; -+ sun2) -+ basic_machine=m68000-sun -+ ;; -+@@ -1057,20 +1153,8 @@ case $basic_machine in -+ basic_machine=t90-cray -+ os=-unicos -+ ;; -+- tic54x | c54x*) -+- basic_machine=tic54x-unknown -+- os=-coff -+- ;; -+- tic55x | c55x*) -+- basic_machine=tic55x-unknown -+- os=-coff -+- ;; -+- tic6x | c6x*) -+- basic_machine=tic6x-unknown -+- os=-coff -+- ;; -+ tile*) -+- basic_machine=tile-unknown -++ basic_machine=$basic_machine-unknown -+ os=-linux-gnu -+ ;; -+ tx39) -+@@ -1140,6 +1224,9 @@ case $basic_machine in -+ xps | xps100) -+ basic_machine=xps100-honeywell -+ ;; -++ xscale-* | xscalee[bl]-*) -++ basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` -++ ;; -+ ymp) -+ basic_machine=ymp-cray -+ os=-unicos -+@@ -1237,9 +1324,12 @@ esac -+ if [ x"$os" != x"" ] -+ then -+ case $os in -+- # First match some system type aliases -+- # that might get confused with valid system types. -++ # First match some system type aliases -++ # that might get confused with valid system types. -+ # -solaris* is a basic system type, with this one exception. -++ -auroraux) -++ os=-auroraux -++ ;; -+ -solaris1 | -solaris1.*) -+ os=`echo $os | sed -e 's|solaris1|sunos4|'` -+ ;; -+@@ -1260,22 +1350,23 @@ case $os in -+ # Each alternative MUST END IN A *, to match a version number. -+ # -sysv* is not here because it comes later, after sysvr4. -+ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ -+- | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ -+- | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ -+- | -kopensolaris* \ -++ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ -++ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ -++ | -sym* | -kopensolaris* | -plan9* \ -+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ -+ | -aos* | -aros* \ -+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ -+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ -+ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ -+- | -openbsd* | -solidbsd* \ -++ | -bitrig* | -openbsd* | -solidbsd* \ -+ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ -+ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ -+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ -+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ -+ | -chorusos* | -chorusrdb* | -cegcc* \ -+- | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ -+- | -mingw32* | -linux-gnu* | -linux-androideabi* | -linux-newlib* | -linux-uclibc* \ -++ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ -++ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ -++ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ -+ | -uxpv* | -beos* | -mpeix* | -udk* \ -+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ -+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ -+@@ -1283,7 +1374,7 @@ case $os in -+ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ -+ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ -+ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ -+- | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) -++ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) -+ # Remember, each alternative MUST END IN *, to match a version number. -+ ;; -+ -qnx*) -+@@ -1322,7 +1413,7 @@ case $os in -+ -opened*) -+ os=-openedition -+ ;; -+- -os400*) -++ -os400*) -+ os=-os400 -+ ;; -+ -wince*) -+@@ -1371,7 +1462,7 @@ case $os in -+ -sinix*) -+ os=-sysv4 -+ ;; -+- -tpf*) -++ -tpf*) -+ os=-tpf -+ ;; -+ -triton*) -+@@ -1407,15 +1498,14 @@ case $os in -+ -aros*) -+ os=-aros -+ ;; -+- -kaos*) -+- os=-kaos -+- ;; -+ -zvmoe) -+ os=-zvmoe -+ ;; -+ -dicos*) -+ os=-dicos -+ ;; -++ -nacl*) -++ ;; -+ -none) -+ ;; -+ *) -+@@ -1438,10 +1528,10 @@ else -+ # system, and we'll never get to this point. -+ -+ case $basic_machine in -+- score-*) -++ score-*) -+ os=-elf -+ ;; -+- spu-*) -++ spu-*) -+ os=-elf -+ ;; -+ *-acorn) -+@@ -1453,8 +1543,23 @@ case $basic_machine in -+ arm*-semi) -+ os=-aout -+ ;; -+- c4x-* | tic4x-*) -+- os=-coff -++ c4x-* | tic4x-*) -++ os=-coff -++ ;; -++ c8051-*) -++ os=-elf -++ ;; -++ hexagon-*) -++ os=-elf -++ ;; -++ tic54x-*) -++ os=-coff -++ ;; -++ tic55x-*) -++ os=-coff -++ ;; -++ tic6x-*) -++ os=-coff -+ ;; -+ # This must come before the *-dec entry. -+ pdp10-*) -+@@ -1474,14 +1579,11 @@ case $basic_machine in -+ ;; -+ m68000-sun) -+ os=-sunos3 -+- # This also exists in the configure program, but was not the -+- # default. -+- # os=-sunos4 -+ ;; -+ m68*-cisco) -+ os=-aout -+ ;; -+- mep-*) -++ mep-*) -+ os=-elf -+ ;; -+ mips*-cisco) -+@@ -1490,6 +1592,9 @@ case $basic_machine in -+ mips*-*) -+ os=-elf -+ ;; -++ or1k-*) -++ os=-elf -++ ;; -+ or32-*) -+ os=-coff -+ ;; -+@@ -1508,7 +1613,7 @@ case $basic_machine in -+ *-ibm) -+ os=-aix -+ ;; -+- *-knuth) -++ *-knuth) -+ os=-mmixware -+ ;; -+ *-wec) -+@@ -1613,7 +1718,7 @@ case $basic_machine in -+ -sunos*) -+ vendor=sun -+ ;; -+- -aix*) -++ -cnk*|-aix*) -+ vendor=ibm -+ ;; -+ -beos*) -+-- -+1.9.0 -+ --- -1.9.0 - diff --git a/SOURCES/0002-java-dir-for-powepc64-and-powepc64le-can-differ.patch b/SOURCES/0002-java-dir-for-powepc64-and-powepc64le-can-differ.patch new file mode 100644 index 0000000..9b41179 --- /dev/null +++ b/SOURCES/0002-java-dir-for-powepc64-and-powepc64le-can-differ.patch @@ -0,0 +1,85 @@ +From 337e7e62285ff90978438173a2ba8899eabc3955 Mon Sep 17 00:00:00 2001 +From: David Tardon +Date: Tue, 12 May 2015 12:10:16 +0200 +Subject: [PATCH] java dir for powepc64 and powepc64le can differ + +E.g., RHEL >= 7.1 uses ppc64le for reasons listed in +https://bugs.openjdk.java.net/browse/JDK-8073139 . + +This is a follow-up to commit 7a66dbe982623be620ad6ac426fe689a434e5f51. + +Change-Id: I685f76d51e9775788a7fb225c6a5e2309a45ceb7 +--- + config_host/config_java.h.in | 6 ++++++ + configure.ac | 3 +++ + jvmfwk/plugins/sunmajor/pluginlib/vendorbase.hxx | 6 +++++- + 3 files changed, 14 insertions(+), 1 deletion(-) + create mode 100644 config_host/config_java.h.in + +diff --git a/config_host/config_java.h.in b/config_host/config_java.h.in +new file mode 100644 +index 0000000..8b23de9 +--- /dev/null ++++ b/config_host/config_java.h.in +@@ -0,0 +1,6 @@ ++#ifndef CONFIG_JAVA_H ++#define CONFIG_JAVA_H ++ ++#undef JAVA_ARCH ++ ++#endif +diff --git a/configure.ac b/configure.ac +index d8266b4..d764c33 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -7259,6 +7259,7 @@ then + ;; + powerpc64le) + AS_IF([test -d "$JAVA_HOME/jre/lib/ppc64le"], [my_java_arch=ppc64le], [my_java_arch=ppc64]) ++ JAVA_ARCH=$my_java_arch + ;; + x86_64) + my_java_arch=amd64 +@@ -7268,6 +7269,7 @@ then + ;; + esac + JAWTLIB="-L$JAVA_HOME/jre/lib/$my_java_arch -ljawt" ++ AS_IF([test "$JAVA_ARCH" != ""], [AC_DEFINE_UNQUOTED([JAVA_ARCH], ["$JAVA_ARCH"])]) + fi + AC_MSG_RESULT([$JAWTLIB]) + fi +@@ -13042,6 +13044,7 @@ AC_CONFIG_HEADERS([config_host/config_folders.h]) + AC_CONFIG_HEADERS([config_host/config_gcc.h]) + AC_CONFIG_HEADERS([config_host/config_global.h]) + AC_CONFIG_HEADERS([config_host/config_graphite.h]) ++AC_CONFIG_HEADERS([config_host/config_java.h]) + AC_CONFIG_HEADERS([config_host/config_lgpl.h]) + AC_CONFIG_HEADERS([config_host/config_locales.h]) + AC_CONFIG_HEADERS([config_host/config_mpl.h]) +diff --git a/jvmfwk/plugins/sunmajor/pluginlib/vendorbase.hxx b/jvmfwk/plugins/sunmajor/pluginlib/vendorbase.hxx +index 29f2641..ffc05c1 100644 +--- a/jvmfwk/plugins/sunmajor/pluginlib/vendorbase.hxx ++++ b/jvmfwk/plugins/sunmajor/pluginlib/vendorbase.hxx +@@ -20,6 +20,8 @@ + #ifndef INCLUDED_JVMFWK_PLUGINS_SUNMAJOR_PLUGINLIB_VENDORBASE_HXX + #define INCLUDED_JVMFWK_PLUGINS_SUNMAJOR_PLUGINLIB_VENDORBASE_HXX + ++#include "config_java.h" ++ + #include "rtl/ustring.hxx" + #include "rtl/ref.hxx" + #include "osl/endian.h" +@@ -31,7 +33,9 @@ namespace jfw_plugin + + + //Used by subclasses of VendorBase to build paths to Java runtime +-#if defined(__sparcv9) ++#if defined(JAVA_ARCH) ++#define JFW_PLUGIN_ARCH JAVA_ARCH ++#elif defined(__sparcv9) + #define JFW_PLUGIN_ARCH "sparcv9" + #elif defined SPARC + #define JFW_PLUGIN_ARCH "sparc" +-- +2.4.0 + diff --git a/SOURCES/0002-localized-GetFullName.patch b/SOURCES/0002-localized-GetFullName.patch deleted file mode 100644 index ff4d777..0000000 --- a/SOURCES/0002-localized-GetFullName.patch +++ /dev/null @@ -1,77 +0,0 @@ -From 848ee355904db1453f343c8257a86635c1dddcac Mon Sep 17 00:00:00 2001 -From: Andras Timar -Date: Wed, 9 Jul 2014 11:44:32 +0200 -Subject: [PATCH 002/137] localized GetFullName() - -Change-Id: I4f2bffadef3db1bd07432202525734ab9b0cb0de -(cherry picked from commit 33c36fb9fbc69bbc32088532dd21db7153aee09d) ---- - unotools/source/config/useroptions.cxx | 38 ++++++++++++++++++++++++++++------ - 1 file changed, 32 insertions(+), 6 deletions(-) - -diff --git a/unotools/source/config/useroptions.cxx b/unotools/source/config/useroptions.cxx -index 01ae9e6..1dadaf3 100644 ---- a/unotools/source/config/useroptions.cxx -+++ b/unotools/source/config/useroptions.cxx -@@ -19,7 +19,7 @@ - - - #include -- -+#include - #include - #include - #include -@@ -39,6 +39,7 @@ - #include - #include - #include -+#include - - using namespace utl; - using namespace com::sun::star; -@@ -210,11 +211,36 @@ void SvtUserOptions::Impl::SetToken (sal_uInt16 nToken, OUString const& sToken) - - OUString SvtUserOptions::Impl::GetFullName () const - { -- // TODO international name -- OUString sFullName = GetToken(USER_OPT_FIRSTNAME).trim(); -- if (!sFullName.isEmpty()) -- sFullName += " "; -- sFullName += GetToken(USER_OPT_LASTNAME).trim(); -+ OUString sFullName; -+ switch (LanguageType const eLang = SvtSysLocale().GetUILanguageTag().getLanguageType()) -+ { -+ case LANGUAGE_RUSSIAN: -+ sFullName = GetToken(USER_OPT_FIRSTNAME).trim(); -+ if (!sFullName.isEmpty()) -+ sFullName += " "; -+ sFullName += GetToken(USER_OPT_FATHERSNAME).trim(); -+ if (!sFullName.isEmpty()) -+ sFullName += " "; -+ sFullName += GetToken(USER_OPT_LASTNAME).trim(); -+ break; -+ default: -+ if (MsLangId::isFamilyNameFirst(eLang)) -+ { -+ sFullName = GetToken(USER_OPT_LASTNAME).trim(); -+ if (!sFullName.isEmpty()) -+ sFullName += " "; -+ sFullName += GetToken(USER_OPT_FIRSTNAME).trim(); -+ } -+ else -+ { -+ sFullName = GetToken(USER_OPT_FIRSTNAME).trim(); -+ if (!sFullName.isEmpty()) -+ sFullName += " "; -+ sFullName += GetToken(USER_OPT_LASTNAME).trim(); -+ } -+ break; -+ } -+ - return sFullName; - } - --- -1.9.3 - diff --git a/SOURCES/0002-ppc64-using-a-fp-register-also-consumes-a-gp-registe.patch b/SOURCES/0002-ppc64-using-a-fp-register-also-consumes-a-gp-registe.patch new file mode 100644 index 0000000..720e65a --- /dev/null +++ b/SOURCES/0002-ppc64-using-a-fp-register-also-consumes-a-gp-registe.patch @@ -0,0 +1,165 @@ +From f31326f623b0be2392b3846f710df75ea8760446 Mon Sep 17 00:00:00 2001 +From: Caolan McNamara +Date: Fri, 10 Jul 2015 16:36:41 +0100 +Subject: [PATCH 2/2] ppc64: using a fp register also consumes a gp register + slot +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Change-Id: Idf6f40081f4598c0fa9d1e10bdc208eae49e4cd1 +Reviewed-on: https://gerrit.libreoffice.org/16936 +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara +(cherry picked from commit e8ac3b5bd973054c6fd74db017bb448721e2c3e2) +Reviewed-on: https://gerrit.libreoffice.org/16946 +Reviewed-by: David Tardon +Tested-by: David Tardon +--- + bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx | 6 ++++++ + bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx | 16 ++++++++++------ + testtools/com/sun/star/comp/bridge/TestComponent.java | 4 ++++ + testtools/source/bridgetest/bridgetest.cxx | 4 ++++ + testtools/source/bridgetest/cli/cli_cs_testobj.cs | 5 +++++ + testtools/source/bridgetest/cppobj.cxx | 2 ++ + testtools/source/bridgetest/idl/bridgetest.idl | 6 ++++++ + 7 files changed, 37 insertions(+), 6 deletions(-) + +diff --git a/bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx b/bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx +index 6b58246..6ac003b 100644 +--- a/bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx ++++ b/bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx +@@ -133,6 +133,12 @@ static typelib_TypeClass cpp2uno_call( + } + pCppArgs[nPos] = pUnoArgs[nPos] = fpreg++; + nf++; ++ ++ if (ng < ppc64::MAX_GPR_REGS) ++ { ++ ng++; ++ gpreg++; ++ } + } + else + { +diff --git a/bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx +index 81d3d5c..28dfaf8 100644 +--- a/bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx ++++ b/bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx +@@ -229,16 +229,20 @@ static void callVirtualMethod(void * pThis, sal_uInt32 nVtableIndex, + + // The value in %xmm register is already prepared to be retrieved as a float, + // thus we treat float and double the same +-#define INSERT_FLOAT( pSV, nr, pFPR, pDS, bOverflow ) \ +- if ( nr < ppc64::MAX_SSE_REGS ) \ ++#define INSERT_FLOAT( pSV, nr, pFPR, nGPR, pDS, bOverflow ) \ ++ if ( nGPR < ppc64::MAX_GPR_REGS ) \ ++ ++nGPR; \ ++ if ( nr < ppc64::MAX_SSE_REGS ) \ + pFPR[nr++] = *reinterpret_cast( pSV ); \ + else \ + bOverflow = true; \ + if (bOverflow) \ + *pDS++ = *reinterpret_cast( pSV ); // verbatim! + +-#define INSERT_DOUBLE( pSV, nr, pFPR, pDS, bOverflow ) \ +- if ( nr < ppc64::MAX_SSE_REGS ) \ ++#define INSERT_DOUBLE( pSV, nr, pFPR, nGPR, pDS, bOverflow ) \ ++ if ( nGPR < ppc64::MAX_GPR_REGS ) \ ++ ++nGPR; \ ++ if ( nr < ppc64::MAX_SSE_REGS ) \ + pFPR[nr++] = *reinterpret_cast( pSV ); \ + else \ + bOverflow = true; \ +@@ -390,10 +394,10 @@ static void cpp_call( + INSERT_INT8( pCppArgs[nPos], nGPR, pGPR, pStack, bOverflow ); + break; + case typelib_TypeClass_FLOAT: +- INSERT_FLOAT( pCppArgs[nPos], nFPR, pFPR, pStack, bOverflow ); ++ INSERT_FLOAT( pCppArgs[nPos], nFPR, pFPR, nGPR, pStack, bOverflow ); + break; + case typelib_TypeClass_DOUBLE: +- INSERT_DOUBLE( pCppArgs[nPos], nFPR, pFPR, pStack, bOverflow ); ++ INSERT_DOUBLE( pCppArgs[nPos], nFPR, pFPR, nGPR, pStack, bOverflow ); + break; + default: + break; +diff --git a/testtools/com/sun/star/comp/bridge/TestComponent.java b/testtools/com/sun/star/comp/bridge/TestComponent.java +index bf1524d..8e07d1a 100644 +--- a/testtools/com/sun/star/comp/bridge/TestComponent.java ++++ b/testtools/com/sun/star/comp/bridge/TestComponent.java +@@ -498,6 +498,10 @@ public class TestComponent { + return i2; + } + ++ public int testPPC64Alignment( double d1, double d2, double d3, int i1 ) throws com.sun.star.uno.RuntimeException { ++ return i1; ++ } ++ + public double testTenDoubles( double d1, double d2, double d3, double d4, double d5, double d6, double d7, double d8, double d9, double d10 ) { + return d1 + d2 + d3 + d4 + d5 + d6 + d7 + d8 + d9 + d10; + } +diff --git a/testtools/source/bridgetest/bridgetest.cxx b/testtools/source/bridgetest/bridgetest.cxx +index ea37b9a..427513f 100644 +--- a/testtools/source/bridgetest/bridgetest.cxx ++++ b/testtools/source/bridgetest/bridgetest.cxx +@@ -529,6 +529,10 @@ static bool performTest( + bRet &= check(i2 == 0xBEAF, "ppc-style alignment test"); + } + { ++ sal_Int32 i1 = xLBT->testPPC64Alignment(1.0, 2.0, 3.0, 0xBEAF); ++ bRet &= check(i1 == 0xBEAF, "ppc64-style alignment test"); ++ } ++ { + double d1 = xLBT->testTenDoubles(0.1, 0.2, 0.3, 0.4, 0.5, + 0.6, 0.7, 0.8, 0.9, 1.0); + bRet &= check(d1 == 5.5, "armhf doubles test"); +diff --git a/testtools/source/bridgetest/cli/cli_cs_testobj.cs b/testtools/source/bridgetest/cli/cli_cs_testobj.cs +index 9d0ac7a..8f396c9 100644 +--- a/testtools/source/bridgetest/cli/cli_cs_testobj.cs ++++ b/testtools/source/bridgetest/cli/cli_cs_testobj.cs +@@ -255,6 +255,11 @@ public class BridgeTestObject : WeakBase, XRecursiveCall, XBridgeTest2 + return i2; + } + ++ public int testPPC64Alignment( double d1, double d2, double d3, int i1 ) ++ { ++ return i1; ++ } ++ + public double testTenDoubles( double d1, double d2, double d3, double d4, double d5, double d6, double d7, double d8, double d9, double d10 ) + { + return d1 + d2 + d3 + d4 + d5 + d6 + d7 + d8 + d9 + d10; +diff --git a/testtools/source/bridgetest/cppobj.cxx b/testtools/source/bridgetest/cppobj.cxx +index a468d90..30f85f0 100644 +--- a/testtools/source/bridgetest/cppobj.cxx ++++ b/testtools/source/bridgetest/cppobj.cxx +@@ -220,6 +220,8 @@ public: + { return rStruct; } + virtual sal_Int32 SAL_CALL testPPCAlignment( sal_Int64, sal_Int64, sal_Int32, sal_Int64, sal_Int32 i2 ) throw(com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE + { return i2; } ++ virtual sal_Int32 SAL_CALL testPPC64Alignment( double , double , double , sal_Int32 i1 ) throw(com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE ++ { return i1; } + virtual double SAL_CALL testTenDoubles( double d1, double d2, double d3, double d4, double d5, double d6, double d7, double d8, double d9, double d10 ) throw(com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE + { return d1 + d2 + d3 + d4 + d5 + d6 + d7 + d8 + d9 + d10; } + virtual sal_Bool SAL_CALL getBool() throw(com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE +diff --git a/testtools/source/bridgetest/idl/bridgetest.idl b/testtools/source/bridgetest/idl/bridgetest.idl +index a11ba28..22612b8 100644 +--- a/testtools/source/bridgetest/idl/bridgetest.idl ++++ b/testtools/source/bridgetest/idl/bridgetest.idl +@@ -307,6 +307,12 @@ interface XBridgeTestBase : com::sun::star::uno::XInterface + long testPPCAlignment( [in] hyper l1, [in] hyper l2, [in] long i1, [in] hyper l3, [in] long i2 ); + + /** ++ * PPC64 Alignment test ++ */ ++ long testPPC64Alignment( [in] double d1, [in] double d2, [in] double d3, [in] long i1 ); ++ ++ ++ /** + * VFP ABI (armhf) doubles test + */ + double testTenDoubles( [in] double d1, [in] double d2, [in] double d3, [in] double d4, [in] double d5, [in] double d6, [in] double d7, [in] double d8, [in] double d9, [in] double d10 ); +-- +2.1.0 + diff --git a/SOURCES/0002-propagate-user-set-CFLAGS-to-build.patch b/SOURCES/0002-propagate-user-set-CFLAGS-to-build.patch new file mode 100644 index 0000000..92840ab --- /dev/null +++ b/SOURCES/0002-propagate-user-set-CFLAGS-to-build.patch @@ -0,0 +1,54 @@ +From d156d513869d1e0634e981c85860c3a08b18d093 Mon Sep 17 00:00:00 2001 +From: David Tardon +Date: Thu, 5 Feb 2015 15:46:58 +0100 +Subject: [PATCH 2/2] propagate user-set CFLAGS to build + +Change-Id: I9d72270ddd8698b776b80d4cca0a23f2ebda066a +--- + external/redland/ExternalProject_raptor.mk | 2 +- + external/redland/ExternalProject_rasqal.mk | 2 +- + external/redland/ExternalProject_redland.mk | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/external/redland/ExternalProject_raptor.mk b/external/redland/ExternalProject_raptor.mk +index 70d6fe7..8f2a6d5 100644 +--- a/external/redland/ExternalProject_raptor.mk ++++ b/external/redland/ExternalProject_raptor.mk +@@ -35,7 +35,7 @@ else + $(call gb_ExternalProject_get_state_target,raptor,build): + $(call gb_ExternalProject_run,build,\ + $(if $(filter IOS,$(OS)),LIBS="-liconv") \ +- CFLAGS="$(if $(debug),-g,-O) $(if $(filter TRUE,$(DISABLE_DYNLOADING)),-fvisibility=hidden) \ ++ CFLAGS="$(CFLAGS) $(if $(debug),-g,-O) $(if $(filter TRUE,$(DISABLE_DYNLOADING)),-fvisibility=hidden) \ + $(if $(filter GCCLINUXPOWERPC64,$(COM)$(OS)$(CPUNAME)),-mminimal-toc)" \ + LDFLAGS=" \ + $(if $(filter LINUX FREEBSD,$(OS)),-Wl$(COMMA)-z$(COMMA)origin -Wl$(COMMA)-rpath$(COMMA)\\"\$$\$$ORIGIN:'\'\$$\$$ORIGIN/../ure-link/lib") \ +diff --git a/external/redland/ExternalProject_rasqal.mk b/external/redland/ExternalProject_rasqal.mk +index 6b695de..1f373ce 100644 +--- a/external/redland/ExternalProject_rasqal.mk ++++ b/external/redland/ExternalProject_rasqal.mk +@@ -41,7 +41,7 @@ $(call gb_ExternalProject_get_state_target,rasqal,build): + else + $(call gb_ExternalProject_get_state_target,rasqal,build): + $(call gb_ExternalProject_run,build,\ +- CFLAGS="$(if $(filter TRUE,$(DISABLE_DYNLOADING)),-fvisibility=hidden)" \ ++ CFLAGS="$(CFLAGS) $(if $(filter TRUE,$(DISABLE_DYNLOADING)),-fvisibility=hidden)" \ + LDFLAGS=" \ + $(if $(filter LINUX FREEBSD,$(OS)),-Wl$(COMMA)-z$(COMMA)origin -Wl$(COMMA)-rpath$(COMMA)\\"\$$\$$ORIGIN:'\'\$$\$$ORIGIN/../ure-link/lib") \ + $(if $(SYSBASE),$(if $(filter LINUX SOLARIS,$(OS)),-L$(SYSBASE)/lib -L$(SYSBASE)/usr/lib -lpthread -ldl))" \ +diff --git a/external/redland/ExternalProject_redland.mk b/external/redland/ExternalProject_redland.mk +index 9b96c9c..872384b 100644 +--- a/external/redland/ExternalProject_redland.mk ++++ b/external/redland/ExternalProject_redland.mk +@@ -44,7 +44,7 @@ $(call gb_ExternalProject_get_state_target,redland,build): + else + $(call gb_ExternalProject_get_state_target,redland,build): + $(call gb_ExternalProject_run,build,\ +- CFLAGS="$(if $(filter TRUE,$(DISABLE_DYNLOADING)),-fvisibility=hidden)" \ ++ CFLAGS="$(CFLAGS) $(if $(filter TRUE,$(DISABLE_DYNLOADING)),-fvisibility=hidden)" \ + LDFLAGS=" \ + $(if $(filter LINUX FREEBSD,$(OS)),-Wl$(COMMA)-z$(COMMA)origin -Wl$(COMMA)-rpath$(COMMA)\\"\$$\$$ORIGIN:'\'\$$\$$ORIGIN/../ure-link/lib") \ + $(if $(SYSBASE),$(if $(filter LINUX SOLARIS,$(OS)),-L$(SYSBASE)/lib -L$(SYSBASE)/usr/lib -lpthread -ldl))" \ +-- +2.1.0 + diff --git a/SOURCES/0002-sw-fix-crash-on-SwUndoDelete-after-select-all-with-t.patch b/SOURCES/0002-sw-fix-crash-on-SwUndoDelete-after-select-all-with-t.patch new file mode 100644 index 0000000..7b20ce6 --- /dev/null +++ b/SOURCES/0002-sw-fix-crash-on-SwUndoDelete-after-select-all-with-t.patch @@ -0,0 +1,55 @@ +From 647ce83f41e7cda6ef8171c575c6c1ec5245b43f Mon Sep 17 00:00:00 2001 +From: Michael Stahl +Date: Thu, 2 Apr 2015 23:33:41 +0200 +Subject: [PATCH 2/4] sw: fix crash on SwUndoDelete after select-all with table + at start +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Somehow the Redo leaves the shell cursor at an invalid offset into the +paragraph, which then leads to out-of-bounds string access. + +Noticed that SwUndRng::SetPaM() leaves an invalid nContent.m_nIndex on +the start position, due to a surprising omission in SwIndex::ChgValue(). + +(regression from 555ff26501d1bbd8a7872c20671c6303db1e1701) + +Change-Id: I6e6ad7f70835d7e9d6da1fb680e2ae15469fad71 +(cherry picked from commit b24a15a0aaea310806259eaa20a7d509ce30e5c8) +Reviewed-on: https://gerrit.libreoffice.org/15128 +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara +(cherry picked from commit add86b9d5fcf3cb52549e64be148ba9e7bb4005e) +--- + sw/source/core/bastyp/index.cxx | 1 + + sw/source/core/edit/eddel.cxx | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/sw/source/core/bastyp/index.cxx b/sw/source/core/bastyp/index.cxx +index 81da0bb..88eb691 100644 +--- a/sw/source/core/bastyp/index.cxx ++++ b/sw/source/core/bastyp/index.cxx +@@ -80,6 +80,7 @@ SwIndex& SwIndex::ChgValue( const SwIndex& rIdx, sal_Int32 nNewValue ) + assert(m_pIndexReg == rIdx.m_pIndexReg); + if (!m_pIndexReg) + { ++ m_nIndex = 0; + return *this; // no IndexReg => no list to sort into; m_nIndex is 0 + } + SwIndex* pFnd = const_cast(&rIdx); +diff --git a/sw/source/core/edit/eddel.cxx b/sw/source/core/edit/eddel.cxx +index fad1eaf..9e2c7b2 100644 +--- a/sw/source/core/edit/eddel.cxx ++++ b/sw/source/core/edit/eddel.cxx +@@ -98,6 +98,7 @@ void SwEditShell::DeleteSel( SwPaM& rPam, bool* pUndo ) + // 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()->nNode = pNewPam->Start()->nNode.GetNode().FindTableNode()->GetIndex(); ++ pNewPam->Start()->nContent.Assign(nullptr, 0); + pPam = pNewPam.get(); + } + // delete everything +-- +2.1.0 + diff --git a/SOURCES/0003-Resolves-i119287-corrected-default-style-for-draw-ob.patch b/SOURCES/0003-Resolves-i119287-corrected-default-style-for-draw-ob.patch deleted file mode 100644 index c77808d..0000000 --- a/SOURCES/0003-Resolves-i119287-corrected-default-style-for-draw-ob.patch +++ /dev/null @@ -1,62 +0,0 @@ -From 2b8f66388450fcf7fb2f8087ee7c66c142fe72c0 Mon Sep 17 00:00:00 2001 -From: Armin Le Grand -Date: Wed, 9 Jul 2014 11:57:21 +0000 -Subject: [PATCH 003/137] Resolves: #i119287# corrected default style for draw - objects... - -created using UNO API - -(cherry picked from commit d07778f62ed386672a60ef7570a89b5fa109e026) - -Conflicts: - sd/source/ui/unoidl/unopage.cxx - -(cherry picked from commit 0aa3dee5e88a1494a7a6a8401e084cbdb4324727) -Signed-off-by: Andras Timar - -Conflicts: - sd/source/ui/unoidl/unopage.cxx - -Change-Id: I016d801edefb5ab32b7b6a8e13a1dc3e8fdb866e ---- - sd/source/ui/unoidl/unopage.cxx | 16 ++++++++++++++++ - 1 file changed, 16 insertions(+) - -diff --git a/sd/source/ui/unoidl/unopage.cxx b/sd/source/ui/unoidl/unopage.cxx -index 9ad3473..fa61e5f 100644 ---- a/sd/source/ui/unoidl/unopage.cxx -+++ b/sd/source/ui/unoidl/unopage.cxx -@@ -69,6 +69,7 @@ - #include "unopback.hxx" - #include "unohelp.hxx" - #include -+#include - - using ::com::sun::star::animations::XAnimationNode; - using ::com::sun::star::animations::XAnimationNodeSupplier; -@@ -410,7 +411,22 @@ SdrObject * SdGenericDrawPage::_CreateSdrObject( const Reference< drawing::XShap - { - SdDrawDocument* pDoc = (SdDrawDocument*)GetPage()->GetModel(); - if( pDoc ) -+ { -+ // #i119287# similar to the code in the SdrObject methods the graphic and ole -+ // SdrObjects need another default style than the rest, see task. Adding here, too. -+ // TTTT: Same as for #i119287#: Can be removed in branch aw080 again -+ const bool bIsSdrGrafObj(0 != dynamic_cast< SdrGrafObj* >(pObj)); -+ const bool bIsSdrOle2Obj(0 != dynamic_cast< SdrOle2Obj* >(pObj)); -+ -+ if(bIsSdrGrafObj || bIsSdrOle2Obj) -+ { -+ pObj->NbcSetStyleSheet(pDoc->GetDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj(), sal_True); -+ } -+ else -+ { - pObj->NbcSetStyleSheet( pDoc->GetDefaultStyleSheet(), sal_True ); -+ } -+ } - } - return pObj; - } --- -1.9.3 - diff --git a/SOURCES/0003-rhbz-1205072-sw-resource-mangement-SNAFU-caused-by-S.patch b/SOURCES/0003-rhbz-1205072-sw-resource-mangement-SNAFU-caused-by-S.patch new file mode 100644 index 0000000..e7d6f6b --- /dev/null +++ b/SOURCES/0003-rhbz-1205072-sw-resource-mangement-SNAFU-caused-by-S.patch @@ -0,0 +1,118 @@ +From 2b23c9c3d39667a740b8dc83326875d84454ab93 Mon Sep 17 00:00:00 2001 +From: Michael Stahl +Date: Sat, 25 Apr 2015 21:25:00 +0200 +Subject: [PATCH 3/4] rhbz#1205072: sw: resource mangement SNAFU caused by + SwPaM copy ctor + +SwPaM copy ctor has the surprising habit of linking the new one into the +old one's Ring. If you copy a shell cursor, *this* epic fail happens: + +==948== Thread 6 SelectionManager: +==948== Invalid free() / delete / delete[] / realloc() +==948== at 0x4A07CE9: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) +==948== by 0x222F542B: SwPaM::operator delete(void*, unsigned long) (in /libreoffice-4-3/instdir/program/libswlo.so) +==948== by 0x2239E20E: SwPaM::~SwPaM() (pam.cxx:422) +==948== by 0x22368630: CheckRange(SwCursor*) (crsrsh.cxx:111) +==948== by 0x2236DECC: SwCrsrShell::UpdateCrsr(unsigned short, bool) (crsrsh.cxx:1397) +==948== by 0x22369113: SwCrsrShell::EndAction(bool) (crsrsh.cxx:290) +==948== by 0x2268971F: SwEditShell::EndAllAction() (edws.cxx:87) +==948== by 0x2262BEF3: SwBaseLink::DataChanged(rtl::OUString const&, com::sun::star::uno::Any const&) (swbaslnk.cxx:274) +==948== by 0x2262C78E: SwBaseLink::SwapIn(bool, bool) (swbaslnk.cxx:411) +==948== by 0x227102EC: SwGrfNode::SwapIn(bool) (ndgrf.cxx:539) +==948== by 0x227121BC: SwGrfNode::MakeCopy(SwDoc*, SwNodeIndex const&) const (ndgrf.cxx:999) +==948== by 0x22610E4D: SwNodes::_CopyNodes(SwNodeRange const&, SwNodeIndex const&, bool, bool) const (nodes.cxx:1862) +==948== by 0x225B98E0: SwDoc::CopyWithFlyInFly(SwNodeRange const&, int, SwNodeIndex const&, SwPaM const*, bool, bool, bool) const (ndcopy.cxx:1336) +==948== by 0x224AC1FF: SwDoc::CopyLayoutFmt(SwFrmFmt const&, SwFmtAnchor const&, bool, bool) (doclay.cxx:446) +==948== by 0x2294D2D4: SwTxtFlyCnt::CopyFlyFmt(SwDoc*) (atrflyin.cxx:130) +==948== by 0x229A5B96: MakeTxtAttr(SwDoc&, SfxPoolItem&, int, int, CopyOrNew_t, SwTxtNode*) (thints.cxx:1060) +==948== by 0x229A64E6: SwTxtNode::InsertItem(SfxPoolItem&, int, int, unsigned short) (thints.cxx:1224) +==948== by 0x2298E536: SwTxtNode::CopyText(SwTxtNode*, SwIndex const&, SwIndex const&, int, bool) (ndtxt.cxx:1773) +==948== by 0x2298DC08: SwTxtNode::CopyText(SwTxtNode*, SwIndex const&, int, bool) (ndtxt.cxx:1555) +==948== by 0x225B4C9D: SwTxtNode::MakeCopy(SwDoc*, SwNodeIndex const&) const (ndcopy.cxx:286) +==948== by 0x22610E4D: SwNodes::_CopyNodes(SwNodeRange const&, SwNodeIndex const&, bool, bool) const (nodes.cxx:1862) +==948== by 0x223EF3C2: SwNodes::_Copy(SwNodeRange const&, SwNodeIndex const&, bool) const (ndarr.hxx:182) +==948== by 0x225B5D8D: SwTableNode::MakeCopy(SwDoc*, SwNodeIndex const&) const (ndcopy.cxx:475) +==948== by 0x22610ACA: SwNodes::_CopyNodes(SwNodeRange const&, SwNodeIndex const&, bool, bool) const (nodes.cxx:1790) +==948== by 0x223EF3C2: SwNodes::_Copy(SwNodeRange const&, SwNodeIndex const&, bool) const (ndarr.hxx:182) +==948== by 0x225CA663: SwSectionNode::MakeCopy(SwDoc*, SwNodeIndex const&) const (ndsect.cxx:1270) +==948== by 0x22610BFC: SwNodes::_CopyNodes(SwNodeRange const&, SwNodeIndex const&, bool, bool) const (nodes.cxx:1817) +==948== by 0x223EF3C2: SwNodes::_Copy(SwNodeRange const&, SwNodeIndex const&, bool) const (ndarr.hxx:182) +==948== by 0x225CA663: SwSectionNode::MakeCopy(SwDoc*, SwNodeIndex const&) const (ndsect.cxx:1270) +==948== by 0x22610BFC: SwNodes::_CopyNodes(SwNodeRange const&, SwNodeIndex const&, bool, bool) const (nodes.cxx:1817) +==948== by 0x223EF3C2: SwNodes::_Copy(SwNodeRange const&, SwNodeIndex const&, bool) const (ndarr.hxx:182) +==948== by 0x225CA663: SwSectionNode::MakeCopy(SwDoc*, SwNodeIndex const&) const (ndsect.cxx:1270) +==948== by 0x22610BFC: SwNodes::_CopyNodes(SwNodeRange const&, SwNodeIndex const&, bool, bool) const (nodes.cxx:1817) +==948== by 0x225B98E0: SwDoc::CopyWithFlyInFly(SwNodeRange const&, int, SwNodeIndex const&, SwPaM const*, bool, bool, bool) const (ndcopy.cxx:1336) +==948== by 0x225B8F15: SwDoc::CopyImpl(SwPaM&, SwPosition&, bool, bool, SwPaM*) const (ndcopy.cxx:1239) +==948== by 0x225B6EE0: SwDoc::CopyRange(SwPaM&, SwPosition&, bool) const (ndcopy.cxx:707) +==948== by 0x22667E69: SwEditShell::_CopySelToDoc(SwDoc*, SwNodeIndex*) (edglss.cxx:244) +==948== by 0x226C8400: SwFEShell::Copy(SwDoc*, rtl::OUString const*) (fecopy.cxx:214) +==948== by 0x22DBF72B: (anonymous namespace)::lclOverWriteDoc(SwWrtShell&, SwDoc&) (swdtflvr.cxx:373) +==948== by 0x22DBFBC6: SwTransferable::GetData(com::sun::star::datatransfer::DataFlavor const&, rtl::OUString const&) (swdtflvr.cxx:439) +==948== by 0x7CB36C7: TransferableHelper::getTransferData2(com::sun::star::datatransfer::DataFlavor const&, rtl::OUString const&) (transfer.cxx:332) +==948== by 0x7CB34B5: TransferableHelper::getTransferData(com::sun::star::datatransfer::DataFlavor const&) (transfer.cxx:306) +==948== by 0x17A7E949: x11::SelectionManager::convertData(com::sun::star::uno::Reference const&, unsigned long, unsigned long, int&, com::sun::star::uno::Sequence&) (X11_selection.cxx:655) +==948== by 0x17A823CA: x11::SelectionManager::sendData(x11::SelectionAdaptor*, unsigned long, unsigned long, unsigned long, unsigned long) (X11_selection.cxx:1503) +==948== by 0x17A82E03: x11::SelectionManager::handleSelectionRequest(XSelectionRequestEvent&) (X11_selection.cxx:1729) +==948== by 0x17A8A08A: x11::SelectionManager::handleXEvent(_XEvent&) (X11_selection.cxx:3574) +==948== Address 0x21e31a60 is on thread 6's stack +==948== in frame #40, created by SwEditShell::_CopySelToDoc(SwDoc*, SwNodeIndex*) (edglss.cxx:158) + +(regression from 49505336a629a75f4fb48bbe0c532b402e857ed4) + +(cherry picked from commit c55599fd0e7198773087c6433031f7119aaaca36) + +Conflicts: + sw/source/core/edit/edglss.cxx + +Reviewed-on: https://gerrit.libreoffice.org/15533 +Reviewed-by: Miklos Vajna +Tested-by: Miklos Vajna +(cherry picked from commit 8f570028b0871dbaaaa99722cca76c0d1179e06c) + +Conflicts: + sw/source/core/edit/edglss.cxx + +Change-Id: I3d0a288a83b4719dda7977b4898dea656ea67388 +--- + sw/source/core/edit/eddel.cxx | 2 +- + sw/source/core/edit/edglss.cxx | 5 ++++- + 2 files changed, 5 insertions(+), 2 deletions(-) + +diff --git a/sw/source/core/edit/eddel.cxx b/sw/source/core/edit/eddel.cxx +index 9e2c7b2..c5ed1e9 100644 +--- a/sw/source/core/edit/eddel.cxx ++++ b/sw/source/core/edit/eddel.cxx +@@ -94,7 +94,7 @@ void SwEditShell::DeleteSel( SwPaM& rPam, bool* pUndo ) + if (bSelectAll) + { + assert(dynamic_cast(&rPam)); // must be corrected pam +- pNewPam.reset(new SwPaM(rPam)); ++ 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()->nNode = pNewPam->Start()->nNode.GetNode().FindTableNode()->GetIndex(); +diff --git a/sw/source/core/edit/edglss.cxx b/sw/source/core/edit/edglss.cxx +index 7a17737..084c221 100644 +--- a/sw/source/core/edit/edglss.cxx ++++ b/sw/source/core/edit/edglss.cxx +@@ -235,12 +235,15 @@ bool SwEditShell::_CopySelToDoc( SwDoc* pInsDoc, SwNodeIndex* pSttNd ) + // Make a copy, so that in case we need to adjust the selection + // for the purpose of copying, our shell cursor is not touched. + // (Otherwise we would have to restore it.) +- SwPaM aPaM(*PCURCRSR); ++ SwPaM aPaM(*PCURCRSR->GetMark(), *PCURCRSR->GetPoint()); + if (bSelectAll) ++ { + // 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. + aPaM.Start()->nNode = aPaM.Start()->nNode.GetNode().FindTableNode()->GetIndex(); ++ aPaM.Start()->nContent.Assign(nullptr, 0); ++ } + bRet = GetDoc()->CopyRange( aPaM, aPos, false ) || bRet; + } + +-- +2.1.0 + diff --git a/SOURCES/0004-Adjust-for-the-splitting-of-number-format-properties.patch b/SOURCES/0004-Adjust-for-the-splitting-of-number-format-properties.patch deleted file mode 100644 index 5f86b7e..0000000 --- a/SOURCES/0004-Adjust-for-the-splitting-of-number-format-properties.patch +++ /dev/null @@ -1,84 +0,0 @@ -From 74a22d42753350039ee8fcdb5e6df1e0807c0cca Mon Sep 17 00:00:00 2001 -From: Kohei Yoshida -Date: Mon, 7 Jul 2014 13:26:23 -0400 -Subject: [PATCH 004/137] Adjust for the splitting of number format properties - in chart. - -Since 1d38cb365543924f9c50014e6b2227e77de1d0c9, "number format" and -"link number format to source" properties are 2 separate properties. Adjust -OOXML import code for that split. - -Also, always set axis' number format via NumberFormat property even when it's -a percent format. The axis object doesn't keep a non-percent and percent -number formats separately. - -Change-Id: I8667b6f1a78d88cc37d059518919ad1b37f154e1 -(cherry picked from commit af5a6615dfdbe5c2cacdcacb00fc6f418b925c06) -(cherry picked from commit 29d5f3db525e275c62cd2eafb18899fe68198ea3) -Signed-off-by: Andras Timar ---- - oox/source/drawingml/chart/axisconverter.cxx | 8 +------- - oox/source/drawingml/chart/objectformatter.cxx | 8 +++----- - oox/source/token/properties.txt | 1 + - 3 files changed, 5 insertions(+), 12 deletions(-) - -diff --git a/oox/source/drawingml/chart/axisconverter.cxx b/oox/source/drawingml/chart/axisconverter.cxx -index da1a732..f290992 100644 ---- a/oox/source/drawingml/chart/axisconverter.cxx -+++ b/oox/source/drawingml/chart/axisconverter.cxx -@@ -307,13 +307,7 @@ void AxisConverter::convertFromModel( const Reference< XCoordinateSystem >& rxCo - // number format ------------------------------------------------------ - - if( (aScaleData.AxisType == cssc2::AxisType::REALNUMBER) || (aScaleData.AxisType == cssc2::AxisType::PERCENT) ) -- { -- bool bPercent = false; -- if( mrModel.maNumberFormat.maFormatCode.indexOf('%') >= 0) -- bPercent = true; -- mrModel.maNumberFormat.mbSourceLinked = false; -- getFormatter().convertNumberFormat( aAxisProp, mrModel.maNumberFormat, bPercent ); -- } -+ getFormatter().convertNumberFormat(aAxisProp, mrModel.maNumberFormat, false); - - // position of crossing axis ------------------------------------------ - -diff --git a/oox/source/drawingml/chart/objectformatter.cxx b/oox/source/drawingml/chart/objectformatter.cxx -index a69dae0..b5b0a5b 100644 ---- a/oox/source/drawingml/chart/objectformatter.cxx -+++ b/oox/source/drawingml/chart/objectformatter.cxx -@@ -1111,11 +1111,7 @@ void ObjectFormatter::convertNumberFormat( PropertySet& rPropSet, const NumberFo - if( mxData->mxNumFmts.is() ) - { - sal_Int32 nPropId = bPercentFormat ? PROP_PercentageNumberFormat : PROP_NumberFormat; -- if( rNumberFormat.mbSourceLinked || rNumberFormat.maFormatCode.isEmpty() ) -- { -- rPropSet.setAnyProperty( nPropId, Any() ); -- } -- else try -+ try - { - sal_Int32 nIndex = rNumberFormat.maFormatCode.equalsIgnoreAsciiCase("general") ? - mxData->mxNumTypes->getStandardIndex( mxData->maFromLocale ) : -@@ -1128,6 +1124,8 @@ void ObjectFormatter::convertNumberFormat( PropertySet& rPropSet, const NumberFo - OSL_FAIL( OStringBuffer( "ObjectFormatter::convertNumberFormat - cannot create number format '" ). - append( OUStringToOString( rNumberFormat.maFormatCode, osl_getThreadTextEncoding() ) ).append( '\'' ).getStr() ); - } -+ -+ rPropSet.setProperty(PROP_LinkNumberFormatToSource, makeAny(rNumberFormat.mbSourceLinked)); - } - } - -diff --git a/oox/source/token/properties.txt b/oox/source/token/properties.txt -index b0001e3..6d384b8 100644 ---- a/oox/source/token/properties.txt -+++ b/oox/source/token/properties.txt -@@ -291,6 +291,7 @@ LineStartWidth - LineStyle - LineTransparence - LineWidth -+LinkNumberFormatToSource - LinkURL - LoadReadonly - LookUpLabels --- -1.9.3 - diff --git a/SOURCES/0004-sw-fix-SwAccessibleParagraph-crash-on-delete.patch b/SOURCES/0004-sw-fix-SwAccessibleParagraph-crash-on-delete.patch new file mode 100644 index 0000000..00f7f03 --- /dev/null +++ b/SOURCES/0004-sw-fix-SwAccessibleParagraph-crash-on-delete.patch @@ -0,0 +1,52 @@ +From db92a0c238d82a32fd915f05fc7efb6167e4ea91 Mon Sep 17 00:00:00 2001 +From: Michael Stahl +Date: Fri, 24 Apr 2015 23:31:06 +0200 +Subject: [PATCH 4/4] sw: fix SwAccessibleParagraph crash on delete + +It happens that SwAccessibleParagraph::getCharacterBounds() is called +from ATK with a clearly invalid pPortionData member; the SwTxtNode has +no text but there are portions. + +This is because after a deletion both a POS_CHANGED and a +INVALID_CONTENT event are created for the same SwAccessibleParagraph, +and they are merged into one POS_CHANGED event by +SwAccessibleMap::AppendEvent(), but +SwAccessibleContext::InvalidatePosOrSize() returns early if the +paragraph happens to not be visible, skipping the invalidation. + +(regression from 76c549eb01dcb7b5bf28a271ce00e386f3d388ba, which + removed a Dispose() call; not sure if the Dispose() is needed here) + +Change-Id: I985e9a439ee6c7024963eace876186f2247b9e03 +(cherry picked from commit 104ed86c382b73505b477bf3024982dd27823023) +Reviewed-on: https://gerrit.libreoffice.org/15534 +Reviewed-by: Miklos Vajna +Tested-by: Miklos Vajna +(cherry picked from commit 84f10b5f154e130981de5826f83d63b5eadd33ac) +--- + sw/source/core/access/acccontext.cxx | 9 +++------ + 1 file changed, 3 insertions(+), 6 deletions(-) + +diff --git a/sw/source/core/access/acccontext.cxx b/sw/source/core/access/acccontext.cxx +index 1e84758..7152006 100644 +--- a/sw/source/core/access/acccontext.cxx ++++ b/sw/source/core/access/acccontext.cxx +@@ -1166,12 +1166,9 @@ void SwAccessibleContext::InvalidatePosOrSize( const SwRect& ) + FireVisibleDataEvent(); + } + +- if( !bIsNewShowingState && +- SwAccessibleChild( GetParent() ).IsVisibleChildrenOnly() ) +- { +- return; +- } +- ++ // note: InvalidatePosOrSize must call _InvalidateContent so that ++ // SwAccessibleParagraph updates its portions, or dispose it ++ // (see accmap.cxx: INVALID_CONTENT is contained in POS_CHANGED) + _InvalidateContent( true ); + } + +-- +2.1.0 + diff --git a/SOURCES/0005-bnc-881025-Mark-axis-a-percent-axis-only-when-all-da.patch b/SOURCES/0005-bnc-881025-Mark-axis-a-percent-axis-only-when-all-da.patch deleted file mode 100644 index 0be72bd..0000000 --- a/SOURCES/0005-bnc-881025-Mark-axis-a-percent-axis-only-when-all-da.patch +++ /dev/null @@ -1,155 +0,0 @@ -From c1ed90d187eac6abae9f7e50137b20d2ce93f7ff Mon Sep 17 00:00:00 2001 -From: Kohei Yoshida -Date: Mon, 7 Jul 2014 16:38:29 -0400 -Subject: [PATCH 005/137] bnc#881025: Mark axis a percent axis only when all - data series are percent. - -(cherry picked from commit b8c444a46b2f41dae673c6118d84276be0e6c87d) -Signed-off-by: Andras Timar - -Conflicts: - oox/inc/drawingml/chart/axisconverter.hxx - -Change-Id: I302cc1e5b164b2ce9999087293b034ec930951af -(cherry picked from commit 3997f7b8e5f07312466e66f6bcf0a4ac1c8c5a39) -Signed-off-by: Andras Timar ---- - include/oox/drawingml/chart/axisconverter.hxx | 10 +++---- - oox/source/drawingml/chart/axisconverter.cxx | 38 +++++++++++++++++++----- - oox/source/drawingml/chart/plotareaconverter.cxx | 6 ++-- - 3 files changed, 38 insertions(+), 16 deletions(-) - -diff --git a/include/oox/drawingml/chart/axisconverter.hxx b/include/oox/drawingml/chart/axisconverter.hxx -index e107057..f2df756 100644 ---- a/include/oox/drawingml/chart/axisconverter.hxx -+++ b/include/oox/drawingml/chart/axisconverter.hxx -@@ -45,12 +45,10 @@ public: - virtual ~AxisConverter(); - - /** Creates a chart2 axis and inserts it into the passed coordinate system. */ -- void convertFromModel( -- const ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XCoordinateSystem >& rxCoordSystem, -- TypeGroupConverter& rTypeGroup, -- const AxisModel* pCrossingAxis, -- sal_Int32 nAxesSetIdx, -- sal_Int32 nAxisIdx ); -+ void convertFromModel( -+ const css::uno::Reference& rxCoordSystem, -+ RefVector& rTypeGroups, const AxisModel* pCrossingAxis, -+ sal_Int32 nAxesSetIdx, sal_Int32 nAxisIdx ); - }; - - // ============================================================================ -diff --git a/oox/source/drawingml/chart/axisconverter.cxx b/oox/source/drawingml/chart/axisconverter.cxx -index f290992..d30595d 100644 ---- a/oox/source/drawingml/chart/axisconverter.cxx -+++ b/oox/source/drawingml/chart/axisconverter.cxx -@@ -107,6 +107,26 @@ sal_Int32 lclGetTickMark( sal_Int32 nToken ) - return NONE; - } - -+/** -+ * The groups is of percent type only when all of its members are of percent -+ * type. -+ */ -+bool isPercent( const RefVector& rTypeGroups ) -+{ -+ if (rTypeGroups.empty()) -+ return false; -+ -+ RefVector::const_iterator it = rTypeGroups.begin(), itEnd = rTypeGroups.end(); -+ for (; it != itEnd; ++it) -+ { -+ TypeGroupConverter& rConv = **it; -+ if (!rConv.isPercent()) -+ return false; -+ } -+ -+ return true; -+} -+ - } // namespace - - // ============================================================================ -@@ -120,16 +140,20 @@ AxisConverter::~AxisConverter() - { - } - --void AxisConverter::convertFromModel( const Reference< XCoordinateSystem >& rxCoordSystem, -- TypeGroupConverter& rTypeGroup, const AxisModel* pCrossingAxis, sal_Int32 nAxesSetIdx, sal_Int32 nAxisIdx ) -+void AxisConverter::convertFromModel( -+ const Reference< XCoordinateSystem >& rxCoordSystem, -+ RefVector& rTypeGroups, const AxisModel* pCrossingAxis, sal_Int32 nAxesSetIdx, sal_Int32 nAxisIdx ) - { -+ if (rTypeGroups.empty()) -+ return; -+ - Reference< XAxis > xAxis; - try - { - namespace cssc = ::com::sun::star::chart; - namespace cssc2 = ::com::sun::star::chart2; - -- const TypeGroupInfo& rTypeInfo = rTypeGroup.getTypeInfo(); -+ const TypeGroupInfo& rTypeInfo = rTypeGroups.front()->getTypeInfo(); - ObjectFormatter& rFormatter = getFormatter(); - - // create the axis object (always) -@@ -189,7 +213,7 @@ void AxisConverter::convertFromModel( const Reference< XCoordinateSystem >& rxCo - currently). */ - aScaleData.AxisType = (bDateAxis && !mrModel.mbAuto) ? cssc2::AxisType::DATE : cssc2::AxisType::CATEGORY; - aScaleData.AutoDateAxis = mrModel.mbAuto; -- aScaleData.Categories = rTypeGroup.createCategorySequence(); -+ aScaleData.Categories = rTypeGroups.front()->createCategorySequence(); - } - else - { -@@ -199,11 +223,11 @@ void AxisConverter::convertFromModel( const Reference< XCoordinateSystem >& rxCo - break; - case API_Y_AXIS: - OSL_ENSURE( mrModel.mnTypeId == C_TOKEN( valAx ), "AxisConverter::convertFromModel - unexpected axis model type (must: c:valAx)" ); -- aScaleData.AxisType = rTypeGroup.isPercent() ? cssc2::AxisType::PERCENT : cssc2::AxisType::REALNUMBER; -+ aScaleData.AxisType = isPercent(rTypeGroups) ? cssc2::AxisType::PERCENT : cssc2::AxisType::REALNUMBER; - break; - case API_Z_AXIS: - OSL_ENSURE( mrModel.mnTypeId == C_TOKEN( serAx ), "AxisConverter::convertFromModel - unexpected axis model type (must: c:serAx)" ); -- OSL_ENSURE( rTypeGroup.isDeep3dChart(), "AxisConverter::convertFromModel - series axis not supported by this chart type" ); -+ OSL_ENSURE( rTypeGroups.front()->isDeep3dChart(), "AxisConverter::convertFromModel - series axis not supported by this chart type" ); - aScaleData.AxisType = cssc2::AxisType::SERIES; - break; - } -@@ -330,7 +354,7 @@ void AxisConverter::convertFromModel( const Reference< XCoordinateSystem >& rxCo - // axis title --------------------------------------------------------- - - // in radar charts, title objects may exist, but are not shown -- if( mrModel.mxTitle.is() && (rTypeGroup.getTypeInfo().meTypeCategory != TYPECATEGORY_RADAR) ) -+ if( mrModel.mxTitle.is() && (rTypeGroups.front()->getTypeInfo().meTypeCategory != TYPECATEGORY_RADAR) ) - { - Reference< XTitled > xTitled( xAxis, UNO_QUERY_THROW ); - TitleConverter aTitleConv( *this, *mrModel.mxTitle ); -diff --git a/oox/source/drawingml/chart/plotareaconverter.cxx b/oox/source/drawingml/chart/plotareaconverter.cxx -index ff67b5f..eaa51e0 100644 ---- a/oox/source/drawingml/chart/plotareaconverter.cxx -+++ b/oox/source/drawingml/chart/plotareaconverter.cxx -@@ -171,15 +171,15 @@ void AxesSetConverter::convertFromModel( const Reference< XDiagram >& rxDiagram, - ModelRef< AxisModel > xYAxis = lclGetOrCreateAxis( mrModel.maAxes, API_Y_AXIS, C_TOKEN( valAx ) ); - - AxisConverter aXAxisConv( *this, *xXAxis ); -- aXAxisConv.convertFromModel( xCoordSystem, rFirstTypeGroup, xYAxis.get(), nAxesSetIdx, API_X_AXIS ); -+ aXAxisConv.convertFromModel( xCoordSystem, aTypeGroups, xYAxis.get(), nAxesSetIdx, API_X_AXIS ); - AxisConverter aYAxisConv( *this, *xYAxis ); -- aYAxisConv.convertFromModel( xCoordSystem, rFirstTypeGroup, xXAxis.get(), nAxesSetIdx, API_Y_AXIS ); -+ aYAxisConv.convertFromModel( xCoordSystem, aTypeGroups, xXAxis.get(), nAxesSetIdx, API_Y_AXIS ); - - if( rFirstTypeGroup.isDeep3dChart() ) - { - ModelRef< AxisModel > xZAxis = lclGetOrCreateAxis( mrModel.maAxes, API_Z_AXIS, C_TOKEN( serAx ) ); - AxisConverter aZAxisConv( *this, *xZAxis ); -- aZAxisConv.convertFromModel( xCoordSystem, rFirstTypeGroup, 0, nAxesSetIdx, API_Z_AXIS ); -+ aZAxisConv.convertFromModel( xCoordSystem, aTypeGroups, 0, nAxesSetIdx, API_Z_AXIS ); - } - - // convert all chart type groups, this converts all series data and formatting --- -1.9.3 - diff --git a/SOURCES/0006-bnc-883684-Make-chart-objects-exempt-from-automatic-.patch b/SOURCES/0006-bnc-883684-Make-chart-objects-exempt-from-automatic-.patch deleted file mode 100644 index 9cf5c48..0000000 --- a/SOURCES/0006-bnc-883684-Make-chart-objects-exempt-from-automatic-.patch +++ /dev/null @@ -1,92 +0,0 @@ -From bac8126cf1d485eaa65d9ab480118346eff90ad2 Mon Sep 17 00:00:00 2001 -From: Kohei Yoshida -Date: Wed, 9 Jul 2014 21:46:34 -0400 -Subject: [PATCH 006/137] bnc#883684: Make chart objects exempt from automatic - unloading. - -The Memory option page contains "Number of objects" setting which controls -how many OLE objects can be loaded at any given time. When the number of -total OLE objects exceeds this number the oldest ones get unloaded. Note -that the total number is across all open documents, not per document. - -Technically, chart objects are OLE objects, but unlike other OLE objects -that are embedded Calc, Writer, Draw documents, chart objects normally -"belong" to the host document. It therefore makes no sense to subject -chart objects to this automatic unloading. - -In the future we may want to apply this exemption to other types of OLE -objects, like formula objects for example.. Or maybe this setting can be -removed altogether... - -(cherry picked from commit b023565d4f064cd0312e8c1fcc23a9f552112935) -Signed-off-by: Andras Timar - -Conflicts: - include/svx/svdoole2.hxx - svx/source/svdraw/svdetc.cxx - svx/source/svdraw/svdoole2.cxx - -Change-Id: I7dd92550880efb4db8fc843cf1c915c712166da4 -(cherry picked from commit 55612305b645a1c0872373c0a9f434763708732a) -Signed-off-by: Andras Timar ---- - include/svx/svdoole2.hxx | 7 +++++++ - svx/source/svdraw/svdetc.cxx | 4 ++++ - svx/source/svdraw/svdoole2.cxx | 8 +++++++- - 3 files changed, 18 insertions(+), 1 deletion(-) - -diff --git a/include/svx/svdoole2.hxx b/include/svx/svdoole2.hxx -index 7a93f4b..0f1df14 100644 ---- a/include/svx/svdoole2.hxx -+++ b/include/svx/svdoole2.hxx -@@ -167,6 +167,13 @@ public: - sal_Bool IsChart() const; - sal_Bool IsCalc() const; - -+ /** -+ * Unloadable OLE objects are subject to automatic unloading per memory -+ * setting. The "Number of objects" setting in the Memory option controls -+ * how many OLE objects can be loaded at any given moment. -+ */ -+ bool IsUnloadable() const; -+ - sal_Bool UpdateLinkURL_Impl(); - void BreakFileLink_Impl(); - void DisconnectFileLink_Impl(); -diff --git a/svx/source/svdraw/svdetc.cxx b/svx/source/svdraw/svdetc.cxx -index 4caca94..afcc792 100644 ---- a/svx/source/svdraw/svdetc.cxx -+++ b/svx/source/svdraw/svdetc.cxx -@@ -165,6 +165,10 @@ void OLEObjCache::UnloadOnDemand() - - void OLEObjCache::InsertObj(SdrOle2Obj* pObj) - { -+ if (!pObj->IsUnloadable()) -+ // This OLE object is exempt from automatic unloading. -+ return; -+ - if ( !empty() ) - { - SdrOle2Obj* pExistingObj = front(); -diff --git a/svx/source/svdraw/svdoole2.cxx b/svx/source/svdraw/svdoole2.cxx -index 2929252..1102de8 100644 ---- a/svx/source/svdraw/svdoole2.cxx -+++ b/svx/source/svdraw/svdoole2.cxx -@@ -2142,7 +2142,13 @@ sal_Bool SdrOle2Obj::IsCalc() const - return sal_False; - } - --// ----------------------------------------------------------------------------- -+bool SdrOle2Obj::IsUnloadable() const -+{ -+ // Right now, chart OLE objects are the only ones exempt from automatic -+ // unloading. -+ return !IsChart(); -+} -+ - uno::Reference< frame::XModel > SdrOle2Obj::GetParentXModel() const - { - uno::Reference< frame::XModel > xDoc; --- -1.9.3 - diff --git a/SOURCES/0007-Fix-ignoring-large-twips-values-like-MSO-does-cp-100.patch b/SOURCES/0007-Fix-ignoring-large-twips-values-like-MSO-does-cp-100.patch deleted file mode 100644 index 5481949..0000000 --- a/SOURCES/0007-Fix-ignoring-large-twips-values-like-MSO-does-cp-100.patch +++ /dev/null @@ -1,61 +0,0 @@ -From 088eef7c97dc4d496826a3f3ae4fdec7f36b6ada Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Mat=C3=BA=C5=A1=20Kukan?= -Date: Wed, 9 Jul 2014 14:25:04 +0200 -Subject: [PATCH 007/137] Fix ignoring large twips values like MSO does - (cp#1000087) -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -which was introduced in 10b4da63e3143108ba75891e9e98fdaa2f7953ab. - -Since 1e47614cdb84b018a22a334dad0cdd9f0f53892c, only -convertTwipToMM100Unsigned() ignores large values, which presumably -was not the intention. At least commit message suggests so. - -So, move the check back to convertTwipToMM100(). - -(cherry picked from commit 4d1621136c464b462a598571ecdcfe2ae119d8c7) - -Conflicts: - writerfilter/source/dmapper/ConversionHelper.cxx - -Change-Id: I17040f1987e24789b9de39a837d9f7ecaed520fb -Reviewed-on: https://gerrit.libreoffice.org/10193 -Reviewed-by: Caolán McNamara -Tested-by: Caolán McNamara ---- - writerfilter/source/dmapper/ConversionHelper.cxx | 10 +++++----- - 1 file changed, 5 insertions(+), 5 deletions(-) - -diff --git a/writerfilter/source/dmapper/ConversionHelper.cxx b/writerfilter/source/dmapper/ConversionHelper.cxx -index 7c0c2a1..40a1a29 100644 ---- a/writerfilter/source/dmapper/ConversionHelper.cxx -+++ b/writerfilter/source/dmapper/ConversionHelper.cxx -@@ -230,6 +230,10 @@ OUString ConvertMSFormatStringToSO( - - sal_Int32 convertTwipToMM100(sal_Int32 _t) - { -+ // It appears that MSO handles large twip values specially, probably legacy 16bit handling, -+ // anything that's bigger than 32767 appears to be simply ignored. -+ if( _t >= 0x8000 ) -+ return 0; - return TWIP_TO_MM100( _t ); - } - -@@ -237,11 +241,7 @@ sal_uInt32 convertTwipToMM100Unsigned(sal_Int32 _t) - { - if( _t < 0 ) - return 0; -- // It appears that MSO handles large twip values specially, probably legacy 16bit handling, -- // anything that's bigger than 32767 appears to be simply ignored. -- if( _t >= 0x8000 ) -- return 0; -- return TWIP_TO_MM100( _t ); -+ return convertTwipToMM100( _t ); - } - - sal_Int32 convertEMUToMM100(sal_Int32 _t) --- -1.9.3 - diff --git a/SOURCES/0016-sd-stop-calling-graphics-styles-Image-Styles.patch b/SOURCES/0016-sd-stop-calling-graphics-styles-Image-Styles.patch deleted file mode 100644 index 67a1df2..0000000 --- a/SOURCES/0016-sd-stop-calling-graphics-styles-Image-Styles.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 76e02dba9769bf1ea8c79c189b924f4d79f97ca4 Mon Sep 17 00:00:00 2001 -From: Michael Stahl -Date: Mon, 14 Jul 2014 18:05:24 +0200 -Subject: [PATCH 016/137] sd: stop calling graphics styles "Image Styles" -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -(regression from a71a562a9958fc58a5fb914bcf7f8056a353f618) - -Change-Id: Ie3a44a80c720f59831bc2b1da91792fb8aa24d62 -(cherry picked from commit b55b96589f7fe0b2f426c2472da7174ab95aab87) -Reviewed-on: https://gerrit.libreoffice.org/10307 -Reviewed-by: Caolán McNamara -Tested-by: Caolán McNamara ---- - sd/source/ui/app/res_bmp.src | 2 +- - sd/source/ui/app/strings.src | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/sd/source/ui/app/res_bmp.src b/sd/source/ui/app/res_bmp.src -index cc48996..719bf99 100644 ---- a/sd/source/ui/app/res_bmp.src -+++ b/sd/source/ui/app/res_bmp.src -@@ -240,7 +240,7 @@ Bitmap BMP_GRAPHIC - }; - - #define SfxStyleFamiliesRes1\ -- Text [ en-US ] = "Image Styles" ;\ -+ Text [ en-US ] = "Drawing Object Styles" ;\ - - #define SfxStyleFamiliesRes2\ - Text [ en-US ] = "Presentation Styles" ;\ -diff --git a/sd/source/ui/app/strings.src b/sd/source/ui/app/strings.src -index b7f916c..6ec1d5d 100644 ---- a/sd/source/ui/app/strings.src -+++ b/sd/source/ui/app/strings.src -@@ -1146,7 +1146,7 @@ String STR_TASKPANEL_LAYOUT_MENU_TITLE - }; - String STR_GRAPHICS_STYLE_FAMILY - { -- Text [ en-US ] = "Image Styles"; -+ Text [ en-US ] = "Drawing Object Styles"; - }; - String STR_CELL_STYLE_FAMILY - { --- -1.9.3 - diff --git a/SOURCES/0017-fdo-81284-Don-t-write-to-zero-length-files.patch b/SOURCES/0017-fdo-81284-Don-t-write-to-zero-length-files.patch deleted file mode 100644 index c4c4e41..0000000 --- a/SOURCES/0017-fdo-81284-Don-t-write-to-zero-length-files.patch +++ /dev/null @@ -1,55 +0,0 @@ -From 70c5401aa3b063d0f275042a48a54f42c1f54c03 Mon Sep 17 00:00:00 2001 -From: Maxim Monastirsky -Date: Mon, 14 Jul 2014 23:55:04 +0300 -Subject: [PATCH 017/137] fdo#81284 Don't write to zero length files - -Change-Id: I4eddcda3977f43b39abdaa8d9089ff661092361c -Reviewed-on: https://gerrit.libreoffice.org/10310 -Reviewed-by: David Tardon -Tested-by: David Tardon ---- - sd/source/ui/unoidl/sddetect.cxx | 6 ++++++ - starmath/source/smdetect.cxx | 8 ++++++++ - 2 files changed, 14 insertions(+) - -diff --git a/sd/source/ui/unoidl/sddetect.cxx b/sd/source/ui/unoidl/sddetect.cxx -index e8ee02e..161d11f 100644 ---- a/sd/source/ui/unoidl/sddetect.cxx -+++ b/sd/source/ui/unoidl/sddetect.cxx -@@ -351,6 +351,12 @@ OUString SAL_CALL SdFilterDetect::detect( Sequence< beans::PropertyValue >& lDes - pStm = aMedium.GetInStream(); - if (!pStm) - pFilter = NULL; -+ else -+ { -+ pStm->Seek( STREAM_SEEK_TO_BEGIN ); -+ if (pStm->remainingSize() == 0) -+ pFilter = NULL; -+ } - } - - if (pFilter && pStm) -diff --git a/starmath/source/smdetect.cxx b/starmath/source/smdetect.cxx -index ca9453a..c943bee 100644 ---- a/starmath/source/smdetect.cxx -+++ b/starmath/source/smdetect.cxx -@@ -296,8 +296,16 @@ OUString SAL_CALL SmFilterDetect::detect( Sequence< PropertyValue >& lDescriptor - //this approach, to be fixed at a better level than here - SvStream *pStrm = aMedium.GetInStream(); - aTypeName = OUString(); -+ -+ sal_Size nStreamSize = 0; - if (pStrm && !pStrm->GetError()) - { -+ pStrm->Seek( STREAM_SEEK_TO_BEGIN ); -+ nStreamSize = pStrm->remainingSize(); -+ } -+ -+ if ( nStreamSize > 0 ) -+ { - SotStorageRef aStorage = new SotStorage ( pStrm, sal_False ); - if ( !aStorage->GetError() ) - { --- -1.9.3 - diff --git a/SOURCES/0018-Resolves-fdo-52226-swap-in-graphics-on-.docx-and-.rt.patch b/SOURCES/0018-Resolves-fdo-52226-swap-in-graphics-on-.docx-and-.rt.patch deleted file mode 100644 index 4bf89ab..0000000 --- a/SOURCES/0018-Resolves-fdo-52226-swap-in-graphics-on-.docx-and-.rt.patch +++ /dev/null @@ -1,157 +0,0 @@ -From 5b11f8b75b1ee6da439c3cd7892990b601e03d83 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= -Date: Mon, 14 Jul 2014 11:36:32 +0100 -Subject: [PATCH 018/137] Resolves: fdo#52226 swap in graphics on .docx and - .rtf export - -(cherry picked from commit 9dd5caac62083f7162d83319284df68ee83e3777) - -Conflicts: - sw/source/filter/ww8/docxattributeoutput.cxx - sw/source/filter/ww8/rtfattributeoutput.cxx - sw/source/filter/ww8/wrtww8gr.cxx - -Change-Id: Ie818b382c0b17760c720ff2f2c73a3697989f97e -Reviewed-on: https://gerrit.libreoffice.org/10296 -Reviewed-by: David Tardon -Tested-by: David Tardon ---- - sw/source/filter/ww8/docxattributeoutput.cxx | 18 +++++++++++++++++- - sw/source/filter/ww8/rtfattributeoutput.cxx | 28 +++++++++++++++++++--------- - sw/source/filter/ww8/wrtww8gr.cxx | 2 +- - 3 files changed, 37 insertions(+), 11 deletions(-) - -diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx -index 2056863..22612f5 100644 ---- a/sw/source/filter/ww8/docxattributeoutput.cxx -+++ b/sw/source/filter/ww8/docxattributeoutput.cxx -@@ -2757,13 +2757,29 @@ void DocxAttributeOutput::FlyFrameGraphic( const SwGrfNode* pGrfNode, const Size - // inline, we also have to write the image itself - const Graphic* pGraphic = 0; - if (pGrfNode) -- pGraphic = &const_cast< Graphic& >( pGrfNode->GetGrf() ); -+ pGraphic = &pGrfNode->GetGrf(); - else - pGraphic = pOLENode->GetGraphic(); - - m_rDrawingML.SetFS( m_pSerializer ); // to be sure that we write to the right stream -+ -+ bool bSwapped = pGraphic->IsSwapOut(); -+ if (bSwapped) -+ { -+ if (pGrfNode) -+ { -+ // always swapin via the Node -+ const_cast(pGrfNode)->SwapIn(); -+ } -+ else -+ const_cast(pGraphic)->SwapIn(); -+ } -+ - OUString aImageId = m_rDrawingML.WriteImage( *pGraphic ); - -+ if (bSwapped) -+ const_cast(pGraphic)->SwapOut(); -+ - aRelId = OUStringToOString( aImageId, RTL_TEXTENCODING_UTF8 ); - - nImageType = XML_embed; -diff --git a/sw/source/filter/ww8/rtfattributeoutput.cxx b/sw/source/filter/ww8/rtfattributeoutput.cxx -index f73ab4d..9b3887f 100644 ---- a/sw/source/filter/ww8/rtfattributeoutput.cxx -+++ b/sw/source/filter/ww8/rtfattributeoutput.cxx -@@ -3610,17 +3610,24 @@ void RtfAttributeOutput::FlyFrameGraphic( const SwFlyFrmFmt* pFlyFrmFmt, const S - const sal_uInt8* pGraphicAry = 0; - sal_uInt32 nSize = 0; - -- Graphic aGraphic(pGrfNode->GetGrf()); -+ const Graphic& rGraphic(pGrfNode->GetGrf()); - - // If there is no graphic there is not much point in parsing it -- if(aGraphic.GetType()==GRAPHIC_NONE) -+ if (rGraphic.GetType()==GRAPHIC_NONE) - return; - -+ bool bSwapped = rGraphic.IsSwapOut(); -+ if (bSwapped) -+ { -+ // always swapin via the Node -+ const_cast(pGrfNode)->SwapIn(); -+ } -+ - GfxLink aGraphicLink; - const sal_Char* pBLIPType = 0; -- if (aGraphic.IsLink()) -+ if (rGraphic.IsLink()) - { -- aGraphicLink = aGraphic.GetLink(); -+ aGraphicLink = rGraphic.GetLink(); - nSize = aGraphicLink.GetDataSize(); - pGraphicAry = aGraphicLink.GetData(); - switch (aGraphicLink.GetType()) -@@ -3640,10 +3647,10 @@ void RtfAttributeOutput::FlyFrameGraphic( const SwFlyFrmFmt* pFlyFrmFmt, const S - } - } - -- GraphicType eGraphicType = aGraphic.GetType(); -+ GraphicType eGraphicType = rGraphic.GetType(); - if (!pGraphicAry) - { -- if (ERRCODE_NONE == GraphicConverter::Export(aStream, aGraphic, -+ if (ERRCODE_NONE == GraphicConverter::Export(aStream, rGraphic, - (eGraphicType == GRAPHIC_BITMAP) ? CVT_PNG : CVT_WMF)) - { - pBLIPType = (eGraphicType == GRAPHIC_BITMAP) ? -@@ -3654,7 +3661,7 @@ void RtfAttributeOutput::FlyFrameGraphic( const SwFlyFrmFmt* pFlyFrmFmt, const S - } - } - -- Size aMapped(eGraphicType == GRAPHIC_BITMAP ? aGraphic.GetSizePixel() : aGraphic.GetPrefSize()); -+ Size aMapped(eGraphicType == GRAPHIC_BITMAP ? rGraphic.GetSizePixel() : rGraphic.GetPrefSize()); - - const SwCropGrf &rCr = (const SwCropGrf &)pGrfNode->GetAttr(RES_GRFATR_CROPGRF); - -@@ -3683,7 +3690,7 @@ void RtfAttributeOutput::FlyFrameGraphic( const SwFlyFrmFmt* pFlyFrmFmt, const S - else - { - aStream.Seek(0); -- GraphicConverter::Export(aStream, aGraphic, CVT_WMF); -+ GraphicConverter::Export(aStream, rGraphic, CVT_WMF); - pBLIPType = OOO_STRING_SVTOOLS_RTF_WMETAFILE; - aStream.Seek(STREAM_SEEK_TO_END); - nSize = aStream.Tell(); -@@ -3697,7 +3704,7 @@ void RtfAttributeOutput::FlyFrameGraphic( const SwFlyFrmFmt* pFlyFrmFmt, const S - m_rExport.Strm() << "}" "{" OOO_STRING_SVTOOLS_RTF_NONSHPPICT; - - aStream.Seek(0); -- GraphicConverter::Export(aStream, aGraphic, CVT_WMF); -+ GraphicConverter::Export(aStream, rGraphic, CVT_WMF); - pBLIPType = OOO_STRING_SVTOOLS_RTF_WMETAFILE; - aStream.Seek(STREAM_SEEK_TO_END); - nSize = aStream.Tell(); -@@ -3708,6 +3715,9 @@ void RtfAttributeOutput::FlyFrameGraphic( const SwFlyFrmFmt* pFlyFrmFmt, const S - m_rExport.Strm() << '}'; - } - -+ if (bSwapped) -+ const_cast(rGraphic).SwapOut(); -+ - m_rExport.Strm() << SAL_NEWLINE_STRING; - } - -diff --git a/sw/source/filter/ww8/wrtww8gr.cxx b/sw/source/filter/ww8/wrtww8gr.cxx -index 61a8c17..5075a89 100644 ---- a/sw/source/filter/ww8/wrtww8gr.cxx -+++ b/sw/source/filter/ww8/wrtww8gr.cxx -@@ -724,7 +724,7 @@ void SwWW8WrGrf::WriteGrfFromGrfNode(SvStream& rStrm, const SwGrfNode &rGrfNd, - { - Graphic& rGrf = const_cast(rGrfNd.GetGrf()); - bool bSwapped = rGrf.IsSwapOut() ? true : false; -- // immer ueber den Node einswappen! -+ // always swapin via the Node - const_cast(rGrfNd).SwapIn(); - - GDIMetaFile aMeta; --- -1.9.3 - diff --git a/SOURCES/0019-Related-fdo-52226-ensure-graphics-are-swapped-in-on-.patch b/SOURCES/0019-Related-fdo-52226-ensure-graphics-are-swapped-in-on-.patch deleted file mode 100644 index 6b546a2..0000000 --- a/SOURCES/0019-Related-fdo-52226-ensure-graphics-are-swapped-in-on-.patch +++ /dev/null @@ -1,83 +0,0 @@ -From b0282d868b418b4ecdb19cbb633c9399ac84161b Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= -Date: Mon, 14 Jul 2014 12:13:21 +0100 -Subject: [PATCH 019/137] Related: fdo#52226 ensure graphics are swapped in on - DrawingML::WriteImage - -I imagine it would be best that the Graphics were delivered pre-swapped in by -higher levels in case there are second level caches or more complex caching -systemed wrapped around it, so warn about it in debug mode but give it a -last-ditch shot anyway. i.e. while the .docx problem should be fixed there -is a report of a very similar .xlsx problem - -Change-Id: Ie40ee10fe5cba8ff9c321f47b83e33ee2c1425fd -(cherry picked from commit 6e580f3f53ae2de086a08c8ba1958b67874eb9c5) -Reviewed-on: https://gerrit.libreoffice.org/10300 -Reviewed-by: David Tardon -Tested-by: David Tardon ---- - oox/source/export/drawingml.cxx | 34 ++++++++++++++++++++++++++-------- - vcl/source/gdi/cvtgrf.cxx | 2 ++ - 2 files changed, 28 insertions(+), 8 deletions(-) - -diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx -index dd6605b..847d21c 100644 ---- a/oox/source/export/drawingml.cxx -+++ b/oox/source/export/drawingml.cxx -@@ -495,14 +495,32 @@ OUString DrawingML::WriteImage( const Graphic& rGraphic ) - break; - default: { - GraphicType aType = rGraphic.GetType(); -- if ( aType == GRAPHIC_BITMAP ) { -- GraphicConverter::Export( aStream, rGraphic, CVT_PNG ); -- sMediaType = "image/png"; -- pExtension = ".png"; -- } else if ( aType == GRAPHIC_GDIMETAFILE ) { -- GraphicConverter::Export( aStream, rGraphic, CVT_EMF ); -- sMediaType = "image/x-emf"; -- pExtension = ".emf"; -+ if ( aType == GRAPHIC_BITMAP || aType == GRAPHIC_GDIMETAFILE) { -+ bool bSwapped = rGraphic.IsSwapOut(); -+ -+ //Warn rather than just happily swap in because of the comments -+ //in the sw export filters about needing to go through the -+ //hairy SwGrfNode::SwapIn which we would subvert by swapping in -+ //without it knowing about it, so while those ones are fixed we -+ //probably have to assume that we should ideally be presented -+ //here with already swapped in graphics. -+ SAL_WARN_IF(bSwapped, "oox", "attempted to output swapped out graphic"); -+ -+ if (bSwapped) -+ const_cast(rGraphic).SwapIn(); -+ -+ if ( aType == GRAPHIC_BITMAP ) { -+ GraphicConverter::Export( aStream, rGraphic, CVT_PNG ); -+ sMediaType = "image/png"; -+ pExtension = ".png"; -+ } else { -+ GraphicConverter::Export( aStream, rGraphic, CVT_EMF ); -+ sMediaType = "image/x-emf"; -+ pExtension = ".emf"; -+ } -+ -+ if (bSwapped) -+ const_cast(rGraphic).SwapOut(); - } else { - OSL_TRACE( "unhandled graphic type" ); - break; -diff --git a/vcl/source/gdi/cvtgrf.cxx b/vcl/source/gdi/cvtgrf.cxx -index 02ca288..d395670 100644 ---- a/vcl/source/gdi/cvtgrf.cxx -+++ b/vcl/source/gdi/cvtgrf.cxx -@@ -57,6 +57,8 @@ sal_uLong GraphicConverter::Import( SvStream& rIStm, Graphic& rGraphic, sal_uLon - - sal_uLong GraphicConverter::Export( SvStream& rOStm, const Graphic& rGraphic, sal_uLong nFormat ) - { -+ SAL_WARN_IF(rGraphic.IsSwapOut(), "vcl.filter", "exporting a swapped out graphic!"); -+ - GraphicConverter* pCvt = ImplGetSVData()->maGDIData.mpGrfConverter; - sal_uLong nRet = ERRCODE_IO_GENERAL; - --- -1.9.3 - diff --git a/SOURCES/0020-fdo-78554-SVG-Text-from-SVG-no-longer-displayed-in-L.patch b/SOURCES/0020-fdo-78554-SVG-Text-from-SVG-no-longer-displayed-in-L.patch deleted file mode 100644 index c6c9168..0000000 --- a/SOURCES/0020-fdo-78554-SVG-Text-from-SVG-no-longer-displayed-in-L.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 763e3855caacbfc4818e70464bca348de10fbc3d Mon Sep 17 00:00:00 2001 -From: Joren De Cuyper -Date: Mon, 14 Jul 2014 17:57:06 +0200 -Subject: [PATCH 020/137] fdo#78554 - SVG: Text from SVG no longer displayed in - LibreOffice -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -regression of 3b7472b284131c09d91b69f26d5d26d54648f939 - -Change-Id: I95a30acbf4b2684dda9684f5b51b887356a940e1 -Reviewed-on: https://gerrit.libreoffice.org/10304 -Reviewed-by: Tomaž Vajngerl -Tested-by: Tomaž Vajngerl ---- - svgio/source/svgreader/svgsvgnode.cxx | 9 +++++++-- - 1 file changed, 7 insertions(+), 2 deletions(-) - -diff --git a/svgio/source/svgreader/svgsvgnode.cxx b/svgio/source/svgreader/svgsvgnode.cxx -index cde5387..f85318b 100644 ---- a/svgio/source/svgreader/svgsvgnode.cxx -+++ b/svgio/source/svgreader/svgsvgnode.cxx -@@ -60,8 +60,13 @@ namespace svgio - - const SvgStyleAttributes* SvgSvgNode::getSvgStyleAttributes() const - { -- checkForCssStyle(OUString("svg"), maSvgStyleAttributes); -- return maSvgStyleAttributes.getCssStyleParent(); -+ const SvgStyleAttributes* aCheckCssStyle = checkForCssStyle(OUString("svg"), maSvgStyleAttributes); -+ const SvgStyleAttributes* aGetCssStyleParent = maSvgStyleAttributes.getCssStyleParent(); -+ -+ if (aGetCssStyleParent == NULL) -+ return aCheckCssStyle; -+ -+ return aGetCssStyleParent; - } - - void SvgSvgNode::parseAttribute(const OUString& rTokenName, SVGToken aSVGToken, const OUString& aContent) --- -1.9.3 - diff --git a/SOURCES/0022-fdo-71076-fdo-71767-Preserve-number-formats-when-cha.patch b/SOURCES/0022-fdo-71076-fdo-71767-Preserve-number-formats-when-cha.patch deleted file mode 100644 index 402e8e5..0000000 --- a/SOURCES/0022-fdo-71076-fdo-71767-Preserve-number-formats-when-cha.patch +++ /dev/null @@ -1,3221 +0,0 @@ -From 388f2fa9fcabe1b2adaff282fa9509216f3af6de Mon Sep 17 00:00:00 2001 -From: Kohei Yoshida -Date: Fri, 13 Jun 2014 11:12:50 -0400 -Subject: [PATCH 022/137] fdo#71076, fdo#71767: Preserve number formats when - charts are copied. - -(cherry picked from commit 1d38cb365543924f9c50014e6b2227e77de1d0c9) -Signed-off-by: Andras Timar - -Conflicts: - xmloff/source/chart/SchXMLExport.cxx - sd/source/ui/view/sdview3.cxx - chart2/source/controller/chartapiwrapper/WrappedNumberFormatProperty.cxx - chart2/source/controller/itemsetwrapper/AxisItemConverter.cxx - chart2/source/controller/main/ChartTransferable.cxx - chart2/source/controller/main/ChartTransferable.hxx - chart2/source/model/main/Axis.cxx - chart2/source/model/template/ChartTypeTemplate.cxx - chart2/source/tools/AxisHelper.cxx - chart2/source/view/main/ChartView.cxx - comphelper/source/container/embeddedobjectcontainer.cxx - dbaccess/source/ui/browser/dbexchange.cxx - dbaccess/source/ui/inc/JoinExchange.hxx - dbaccess/source/ui/inc/TableRowExchange.hxx - dbaccess/source/ui/inc/dbexchange.hxx - dbaccess/source/ui/querydesign/JoinExchange.cxx - dbaccess/source/ui/tabledesign/TableRowExchange.cxx - embeddedobj/source/commonembedding/persistence.cxx - embeddedobj/source/inc/commonembobj.hxx - include/comphelper/embeddedobjectcontainer.hxx - include/svtools/embedtransfer.hxx - include/svtools/stringtransfer.hxx - include/svtools/transfer.hxx - include/svx/dbaexchange.hxx - include/svx/dbaobjectex.hxx - include/svx/fmview.hxx - include/svx/galmisc.hxx - include/svx/svdobj.hxx - include/svx/svdoole2.hxx - include/svx/svdxcgv.hxx - include/svx/view3d.hxx - include/svx/xmlexchg.hxx - include/xmloff/xmlexp.hxx - reportdesign/source/ui/dlg/GroupExchange.cxx - reportdesign/source/ui/dlg/GroupExchange.hxx - reportdesign/source/ui/inc/dlgedclip.hxx - reportdesign/source/ui/report/dlgedclip.cxx - sc/inc/column.hxx - sc/source/ui/app/drwtrans.cxx - sc/source/ui/app/lnktrans.cxx - sc/source/ui/app/seltrans.cxx - sc/source/ui/app/transobj.cxx - sc/source/ui/inc/drwtrans.hxx - sc/source/ui/inc/lnktrans.hxx - sc/source/ui/inc/seltrans.hxx - sc/source/ui/inc/transobj.hxx - sc/source/ui/inc/viewfunc.hxx - sc/source/ui/view/viewfun5.cxx - sc/source/ui/view/viewfun7.cxx - sd/source/ui/app/sdxfer.cxx - sd/source/ui/dlg/sdtreelb.cxx - sd/source/ui/inc/TabControl.hxx - sd/source/ui/inc/View.hxx - sd/source/ui/inc/sdtreelb.hxx - sd/source/ui/inc/sdxfer.hxx - sd/source/ui/view/sdview2.cxx - sd/source/ui/view/tabcontr.cxx - sfx2/source/doc/objxtor.cxx - svtools/source/misc/embedtransfer.cxx - svtools/source/misc/stringtransfer.cxx - svtools/source/misc/transfer.cxx - svtools/source/misc/transfer2.cxx - svx/source/engine3d/view3d.cxx - svx/source/fmcomp/dbaexchange.cxx - svx/source/fmcomp/dbaobjectex.cxx - svx/source/fmcomp/xmlexchg.cxx - svx/source/form/fmexch.cxx - svx/source/form/fmview.cxx - svx/source/gallery2/galmisc.cxx - svx/source/inc/fmexch.hxx - svx/source/svdraw/svdoole2.cxx - svx/source/svdraw/svdxcgv.cxx - svx/source/tbxctrls/colrctrl.cxx - sw/source/core/uibase/dochdl/swdtflvr.cxx - sw/source/core/uibase/inc/swdtflvr.hxx - sw/source/core/undo/unins.cxx - -Change-Id: If5ae8852152012483237e7602e56a0c46ea8748a -(cherry picked from commit 4ee53683df4beda260aff26d2c9e56fe643f45bb) -Signed-off-by: Andras Timar ---- - .../controller/chartapiwrapper/AxisWrapper.cxx | 5 +- - .../chartapiwrapper/DataSeriesPointWrapper.cxx | 5 +- - .../WrappedNumberFormatProperty.cxx | 66 ++--------- - .../WrappedNumberFormatProperty.hxx | 9 +- - .../itemsetwrapper/AxisItemConverter.cxx | 9 +- - .../controller/main/ChartDropTargetHelper.cxx | 4 +- - .../source/controller/main/ChartTransferable.cxx | 2 +- - .../source/controller/main/ChartTransferable.hxx | 2 +- - chart2/source/model/filter/XMLFilter.cxx | 5 +- - chart2/source/model/inc/XMLFilter.hxx | 3 + - chart2/source/model/main/Axis.cxx | 17 ++- - chart2/source/model/main/DataPointProperties.cxx | 11 +- - chart2/source/model/main/DataPointProperties.hxx | 1 + - chart2/source/model/template/ChartTypeTemplate.cxx | 10 +- - chart2/source/tools/AxisHelper.cxx | 15 ++- - chart2/source/view/main/ChartView.cxx | 18 ++- - .../source/container/embeddedobjectcontainer.cxx | 23 +++- - dbaccess/source/ui/browser/dbexchange.cxx | 4 +- - dbaccess/source/ui/inc/JoinExchange.hxx | 2 +- - dbaccess/source/ui/inc/TableRowExchange.hxx | 2 +- - dbaccess/source/ui/inc/dbexchange.hxx | 2 +- - dbaccess/source/ui/querydesign/JoinExchange.cxx | 2 +- - .../source/ui/tabledesign/TableRowExchange.cxx | 2 +- - embeddedobj/source/commonembedding/persistence.cxx | 54 +++++++-- - embeddedobj/source/inc/commonembobj.hxx | 12 +- - include/comphelper/embeddedobjectcontainer.hxx | 8 +- - include/sfx2/objsh.hxx | 2 + - include/svtools/embedtransfer.hxx | 6 +- - include/svtools/stringtransfer.hxx | 2 +- - include/svtools/transfer.hxx | 31 +++--- - include/svx/dbaexchange.hxx | 6 +- - include/svx/dbaobjectex.hxx | 2 +- - include/svx/fmview.hxx | 2 - - include/svx/galmisc.hxx | 2 +- - include/svx/svdobj.hxx | 7 +- - include/svx/svdoole2.hxx | 3 + - include/svx/svdxcgv.hxx | 5 +- - include/svx/view3d.hxx | 4 +- - include/svx/xmlexchg.hxx | 2 +- - include/xmloff/SchXMLExportHelper.hxx | 3 + - include/xmloff/xmlexp.hxx | 3 + - offapi/UnoApi_offapi.mk | 1 + - .../com/sun/star/datatransfer/XTransferable2.idl | 41 +++++++ - reportdesign/source/ui/dlg/GroupExchange.cxx | 4 +- - reportdesign/source/ui/dlg/GroupExchange.hxx | 2 +- - reportdesign/source/ui/dlg/GroupsSorting.cxx | 4 +- - reportdesign/source/ui/inc/dlgedclip.hxx | 2 +- - reportdesign/source/ui/report/dlgedclip.cxx | 8 +- - sc/inc/column.hxx | 6 +- - sc/inc/document.hxx | 1 + - sc/inc/table.hxx | 6 +- - sc/source/core/data/column.cxx | 14 ++- - sc/source/core/data/document.cxx | 6 +- - sc/source/core/data/table2.cxx | 5 +- - sc/source/ui/app/drwtrans.cxx | 54 ++++++--- - sc/source/ui/app/lnktrans.cxx | 3 +- - sc/source/ui/app/seltrans.cxx | 5 +- - sc/source/ui/app/transobj.cxx | 2 +- - sc/source/ui/inc/drwtrans.hxx | 7 +- - sc/source/ui/inc/lnktrans.hxx | 2 +- - sc/source/ui/inc/seltrans.hxx | 2 +- - sc/source/ui/inc/transobj.hxx | 2 +- - sc/source/ui/inc/viewfunc.hxx | 4 +- - sc/source/ui/view/gridwin.cxx | 8 +- - sc/source/ui/view/viewfun3.cxx | 11 +- - sc/source/ui/view/viewfun5.cxx | 22 ++-- - sc/source/ui/view/viewfun7.cxx | 6 +- - sd/source/core/drawdoc3.cxx | 2 +- - sd/source/ui/app/sdxfer.cxx | 4 +- - sd/source/ui/dlg/sdtreelb.cxx | 3 +- - sd/source/ui/inc/TabControl.hxx | 2 +- - sd/source/ui/inc/View.hxx | 4 +- - sd/source/ui/inc/sdtreelb.hxx | 2 +- - sd/source/ui/inc/sdxfer.hxx | 2 +- - sd/source/ui/view/sdview2.cxx | 6 +- - sd/source/ui/view/sdview3.cxx | 29 +++-- - sd/source/ui/view/tabcontr.cxx | 2 +- - sfx2/source/doc/objxtor.cxx | 19 +++- - starmath/source/view.cxx | 6 +- - svtools/source/contnr/treelistbox.cxx | 5 +- - svtools/source/dialogs/insdlg.cxx | 2 +- - svtools/source/misc/embedtransfer.cxx | 15 ++- - svtools/source/misc/stringtransfer.cxx | 3 +- - svtools/source/misc/transfer.cxx | 121 ++++++++++++--------- - svtools/source/misc/transfer2.cxx | 4 +- - svx/source/engine3d/view3d.cxx | 6 +- - svx/source/fmcomp/dbaexchange.cxx | 16 ++- - svx/source/fmcomp/dbaobjectex.cxx | 5 +- - svx/source/fmcomp/xmlexchg.cxx | 2 +- - svx/source/form/fmexch.cxx | 11 +- - svx/source/form/fmview.cxx | 7 -- - svx/source/gallery2/galmisc.cxx | 2 +- - svx/source/inc/fmexch.hxx | 4 +- - svx/source/svdraw/svdobj.cxx | 5 + - svx/source/svdraw/svdoole2.cxx | 23 +++- - svx/source/svdraw/svdxcgv.cxx | 6 +- - svx/source/tbxctrls/colrctrl.cxx | 4 +- - sw/source/core/frmedt/fecopy.cxx | 2 +- - sw/source/core/ole/ndole.cxx | 4 +- - sw/source/core/undo/unins.cxx | 2 +- - sw/source/ui/dochdl/swdtflvr.cxx | 17 ++- - sw/source/ui/inc/swdtflvr.hxx | 2 +- - xmloff/source/chart/SchXMLExport.cxx | 50 +++++++++ - xmloff/source/core/xmlexp.cxx | 37 ++++++- - 104 files changed, 687 insertions(+), 350 deletions(-) - create mode 100644 offapi/com/sun/star/datatransfer/XTransferable2.idl - -diff --git a/chart2/source/controller/chartapiwrapper/AxisWrapper.cxx b/chart2/source/controller/chartapiwrapper/AxisWrapper.cxx -index 665ea53..28226dc 100644 ---- a/chart2/source/controller/chartapiwrapper/AxisWrapper.cxx -+++ b/chart2/source/controller/chartapiwrapper/AxisWrapper.cxx -@@ -637,9 +637,8 @@ const std::vector< WrappedProperty* > AxisWrapper::createWrappedProperties() - aWrappedProperties.push_back( new WrappedProperty("Visible","Show") ); - aWrappedProperties.push_back( new WrappedDirectStateProperty("DisplayLabels","DisplayLabels") ); - aWrappedProperties.push_back( new WrappedDirectStateProperty("TextBreak","TextBreak") ); -- WrappedNumberFormatProperty* pWrappedNumberFormatProperty = new WrappedNumberFormatProperty( m_spChart2ModelContact ); -- aWrappedProperties.push_back( pWrappedNumberFormatProperty ); -- aWrappedProperties.push_back( new WrappedLinkNumberFormatProperty(pWrappedNumberFormatProperty) ); -+ aWrappedProperties.push_back( new WrappedNumberFormatProperty(m_spChart2ModelContact) ); -+ aWrappedProperties.push_back( new WrappedLinkNumberFormatProperty(m_spChart2ModelContact) ); - aWrappedProperties.push_back( new WrappedProperty("StackedText","StackCharacters") ); - aWrappedProperties.push_back( new WrappedDirectStateProperty("CrossoverPosition","CrossoverPosition") ); - { -diff --git a/chart2/source/controller/chartapiwrapper/DataSeriesPointWrapper.cxx b/chart2/source/controller/chartapiwrapper/DataSeriesPointWrapper.cxx -index 9b5b622..a507782 100644 ---- a/chart2/source/controller/chartapiwrapper/DataSeriesPointWrapper.cxx -+++ b/chart2/source/controller/chartapiwrapper/DataSeriesPointWrapper.cxx -@@ -698,9 +698,8 @@ const std::vector< WrappedProperty* > DataSeriesPointWrapper::createWrappedPrope - WrappedStatisticProperties::addWrappedPropertiesForSeries( aWrappedProperties, m_spChart2ModelContact ); - aWrappedProperties.push_back( new WrappedAttachedAxisProperty( m_spChart2ModelContact ) ); - -- WrappedNumberFormatProperty* pWrappedNumberFormatProperty = new WrappedNumberFormatProperty( m_spChart2ModelContact ); -- aWrappedProperties.push_back( pWrappedNumberFormatProperty ); -- aWrappedProperties.push_back( new WrappedLinkNumberFormatProperty(pWrappedNumberFormatProperty) ); -+ aWrappedProperties.push_back( new WrappedNumberFormatProperty(m_spChart2ModelContact) ); -+ aWrappedProperties.push_back( new WrappedLinkNumberFormatProperty(m_spChart2ModelContact) ); - } - - WrappedSymbolProperties::addWrappedPropertiesForSeries( aWrappedProperties, m_spChart2ModelContact ); -diff --git a/chart2/source/controller/chartapiwrapper/WrappedNumberFormatProperty.cxx b/chart2/source/controller/chartapiwrapper/WrappedNumberFormatProperty.cxx -index a4010a8..5370d117 100644 ---- a/chart2/source/controller/chartapiwrapper/WrappedNumberFormatProperty.cxx -+++ b/chart2/source/controller/chartapiwrapper/WrappedNumberFormatProperty.cxx -@@ -33,16 +33,10 @@ WrappedNumberFormatProperty::WrappedNumberFormatProperty( ::boost::shared_ptr< C - : WrappedDirectStateProperty( "NumberFormat", "NumberFormat" ) - , m_spChart2ModelContact(spChart2ModelContact) - { -- m_aOuterValue = getPropertyDefault( 0 ); - } - - WrappedNumberFormatProperty::~WrappedNumberFormatProperty() - { -- if( m_pWrappedLinkNumberFormatProperty ) -- { -- if( m_pWrappedLinkNumberFormatProperty->m_pWrappedNumberFormatProperty == this ) -- m_pWrappedLinkNumberFormatProperty->m_pWrappedNumberFormatProperty = 0; -- } - } - - void WrappedNumberFormatProperty::setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& xInnerPropertySet ) const -@@ -52,19 +46,8 @@ void WrappedNumberFormatProperty::setPropertyValue( const Any& rOuterValue, cons - if( ! (rOuterValue >>= nFormat) ) - throw lang::IllegalArgumentException( "Property 'NumberFormat' requires value of type sal_Int32", 0, 0 ); - -- m_aOuterValue = rOuterValue; - if(xInnerPropertySet.is()) -- { -- bool bUseSourceFormat = !xInnerPropertySet->getPropertyValue( "NumberFormat" ).hasValue(); -- if( bUseSourceFormat ) -- { -- uno::Reference< chart2::XChartDocument > xChartDoc( m_spChart2ModelContact->getChart2Document() ); -- if( xChartDoc.is() && xChartDoc->hasInternalDataProvider() ) -- bUseSourceFormat = false; -- } -- if( !bUseSourceFormat ) -- xInnerPropertySet->setPropertyValue( m_aInnerName, this->convertOuterToInnerValue( rOuterValue ) ); -- } -+ xInnerPropertySet->setPropertyValue(getInnerName(), this->convertOuterToInnerValue(rOuterValue)); - } - - Any WrappedNumberFormatProperty::getPropertyValue( const Reference< beans::XPropertySet >& xInnerPropertySet ) const -@@ -75,7 +58,7 @@ Any WrappedNumberFormatProperty::getPropertyValue( const Reference< beans::XProp - OSL_FAIL("missing xInnerPropertySet in WrappedNumberFormatProperty::getPropertyValue"); - return Any(); - } -- Any aRet( xInnerPropertySet->getPropertyValue( m_aInnerName )); -+ Any aRet( xInnerPropertySet->getPropertyValue(getInnerName())); - if( !aRet.hasValue() ) - { - sal_Int32 nKey = 0; -@@ -98,23 +81,14 @@ Any WrappedNumberFormatProperty::getPropertyDefault( const Reference< beans::XPr - return uno::makeAny( sal_Int32( 0 ) ); - } - --WrappedLinkNumberFormatProperty::WrappedLinkNumberFormatProperty( WrappedNumberFormatProperty* pWrappedNumberFormatProperty ) -- : WrappedProperty( "LinkNumberFormatToSource", OUString() ) -- , m_pWrappedNumberFormatProperty( pWrappedNumberFormatProperty ) -+WrappedLinkNumberFormatProperty::WrappedLinkNumberFormatProperty( const boost::shared_ptr& pChart2ModelContact ) : -+ WrappedDirectStateProperty("LinkNumberFormatToSource", "LinkNumberFormatToSource"), -+ m_pChart2ModelContact(pChart2ModelContact) - { -- if( m_pWrappedNumberFormatProperty ) -- { -- m_pWrappedNumberFormatProperty->m_pWrappedLinkNumberFormatProperty = this; -- } - } - - WrappedLinkNumberFormatProperty::~WrappedLinkNumberFormatProperty() - { -- if( m_pWrappedNumberFormatProperty ) -- { -- if( m_pWrappedNumberFormatProperty->m_pWrappedLinkNumberFormatProperty == this ) -- m_pWrappedNumberFormatProperty->m_pWrappedLinkNumberFormatProperty = 0; -- } - } - - void WrappedLinkNumberFormatProperty::setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& xInnerPropertySet ) const -@@ -126,31 +100,7 @@ void WrappedLinkNumberFormatProperty::setPropertyValue( const Any& rOuterValue, - return; - } - -- bool bLinkFormat = false; -- if( rOuterValue >>= bLinkFormat ) -- { -- Any aValue; -- if( bLinkFormat ) -- { -- if( m_pWrappedNumberFormatProperty ) -- { -- uno::Reference< chart2::XChartDocument > xChartDoc( m_pWrappedNumberFormatProperty->m_spChart2ModelContact->getChart2Document() ); -- if( xChartDoc.is() && xChartDoc->hasInternalDataProvider() ) -- return; -- } -- } -- else -- { -- if( m_pWrappedNumberFormatProperty ) -- { -- aValue = m_pWrappedNumberFormatProperty->getPropertyValue( xInnerPropertySet ); -- } -- else -- aValue <<= sal_Int32( 0 ); -- } -- -- xInnerPropertySet->setPropertyValue( "NumberFormat", aValue ); -- } -+ xInnerPropertySet->setPropertyValue(getInnerName(), rOuterValue); - } - - Any WrappedLinkNumberFormatProperty::getPropertyValue( const Reference< beans::XPropertySet >& xInnerPropertySet ) const -@@ -161,8 +111,8 @@ Any WrappedLinkNumberFormatProperty::getPropertyValue( const Reference< beans::X - OSL_FAIL("missing xInnerPropertySet in WrappedNumberFormatProperty::getPropertyValue"); - return getPropertyDefault(0); - } -- bool bLink = ! xInnerPropertySet->getPropertyValue( "NumberFormat" ).hasValue(); -- return uno::makeAny( bLink ); -+ -+ return xInnerPropertySet->getPropertyValue(getInnerName()); - } - - Any WrappedLinkNumberFormatProperty::getPropertyDefault( const Reference< beans::XPropertyState >& /*xInnerPropertyState*/ ) const -diff --git a/chart2/source/controller/chartapiwrapper/WrappedNumberFormatProperty.hxx b/chart2/source/controller/chartapiwrapper/WrappedNumberFormatProperty.hxx -index 63a562c..9602080 100644 ---- a/chart2/source/controller/chartapiwrapper/WrappedNumberFormatProperty.hxx -+++ b/chart2/source/controller/chartapiwrapper/WrappedNumberFormatProperty.hxx -@@ -49,14 +49,12 @@ public: - friend class WrappedLinkNumberFormatProperty; - private: - ::boost::shared_ptr< Chart2ModelContact > m_spChart2ModelContact; -- mutable ::com::sun::star::uno::Any m_aOuterValue; -- WrappedLinkNumberFormatProperty* m_pWrappedLinkNumberFormatProperty; - }; - --class WrappedLinkNumberFormatProperty : public WrappedProperty -+class WrappedLinkNumberFormatProperty : public WrappedDirectStateProperty - { - public: -- WrappedLinkNumberFormatProperty( WrappedNumberFormatProperty* pWrappedNumberFormatProperty ); -+ WrappedLinkNumberFormatProperty( const boost::shared_ptr& pChart2ModelContact ); - virtual ~WrappedLinkNumberFormatProperty(); - - virtual void setPropertyValue( const ::com::sun::star::uno::Any& rOuterValue, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xInnerPropertySet ) const -@@ -68,9 +66,8 @@ public: - virtual ::com::sun::star::uno::Any getPropertyDefault( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyState >& xInnerPropertyState ) const - throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); - -- friend class WrappedNumberFormatProperty; - private: -- WrappedNumberFormatProperty* m_pWrappedNumberFormatProperty; -+ boost::shared_ptr m_pChart2ModelContact; - }; - - } //namespace wrapper -diff --git a/chart2/source/controller/itemsetwrapper/AxisItemConverter.cxx b/chart2/source/controller/itemsetwrapper/AxisItemConverter.cxx -index 328dd8c..7974dc1 100644 ---- a/chart2/source/controller/itemsetwrapper/AxisItemConverter.cxx -+++ b/chart2/source/controller/itemsetwrapper/AxisItemConverter.cxx -@@ -425,8 +425,9 @@ void AxisItemConverter::FillSpecialItem( sal_uInt16 nWhichId, SfxItemSet & rOutI - - case SID_ATTR_NUMBERFORMAT_SOURCE: - { -- bool bNumberFormatIsSet = ( GetPropertySet()->getPropertyValue( "NumberFormat" ).hasValue()); -- rOutItemSet.Put( SfxBoolItem( nWhichId, ! bNumberFormatIsSet )); -+ bool bLinkToSource = true; -+ GetPropertySet()->getPropertyValue("LinkNumberFormatToSource") >>= bLinkToSource; -+ rOutItemSet.Put(SfxBoolItem(nWhichId, bLinkToSource)); - } - break; - -@@ -932,7 +933,9 @@ bool AxisItemConverter::ApplySpecialItem( sal_uInt16 nWhichId, const SfxItemSet - bool bUseSourceFormat = - (static_cast< const SfxBoolItem & >( - rItemSet.Get( nWhichId )).GetValue() ); -- bool bNumberFormatIsSet = ( GetPropertySet()->getPropertyValue( "NumberFormat").hasValue()); -+ GetPropertySet()->setPropertyValue("LinkNumberFormatToSource", uno::makeAny(bUseSourceFormat)); -+ -+ bool bNumberFormatIsSet = GetPropertySet()->getPropertyValue("NumberFormat").hasValue(); - - bChangedOtherwise = (bUseSourceFormat == bNumberFormatIsSet); - if( bChangedOtherwise ) -diff --git a/chart2/source/controller/main/ChartDropTargetHelper.cxx b/chart2/source/controller/main/ChartDropTargetHelper.cxx -index 154db84..0857de3 100644 ---- a/chart2/source/controller/main/ChartDropTargetHelper.cxx -+++ b/chart2/source/controller/main/ChartDropTargetHelper.cxx -@@ -103,8 +103,8 @@ sal_Int8 ChartDropTargetHelper::ExecuteDrop( const ExecuteDropEvent& rEvt ) - TransferableDataHelper aDataHelper( rEvt.maDropEvent.Transferable ); - if( aDataHelper.HasFormat( SOT_FORMATSTR_ID_LINK )) - { -- Sequence< sal_Int8 > aBytes; -- if( aDataHelper.GetSequence( SOT_FORMATSTR_ID_LINK, aBytes )) -+ Sequence aBytes = aDataHelper.GetSequence(SOT_FORMATSTR_ID_LINK, OUString()); -+ if (aBytes.getLength()) - { - ::std::vector< OUString > aStrings( lcl_getStringsFromByteSequence( aBytes )); - if( aStrings.size() >= 3 && aStrings[0] == "soffice" ) -diff --git a/chart2/source/controller/main/ChartTransferable.cxx b/chart2/source/controller/main/ChartTransferable.cxx -index f072b21..e7d7d2b 100644 ---- a/chart2/source/controller/main/ChartTransferable.cxx -+++ b/chart2/source/controller/main/ChartTransferable.cxx -@@ -75,7 +75,7 @@ void ChartTransferable::AddSupportedFormats() - AddFormat( SOT_FORMAT_BITMAP ); - } - --sal_Bool ChartTransferable::GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ) -+sal_Bool ChartTransferable::GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& /*rDestDoc*/ ) - { - sal_uInt32 nFormat = SotExchange::GetFormat( rFlavor ); - sal_Bool bResult = sal_False; -diff --git a/chart2/source/controller/main/ChartTransferable.hxx b/chart2/source/controller/main/ChartTransferable.hxx -index efbd1b3..9ae5aaf 100644 ---- a/chart2/source/controller/main/ChartTransferable.hxx -+++ b/chart2/source/controller/main/ChartTransferable.hxx -@@ -43,7 +43,7 @@ protected: - - // implementation of TransferableHelper methods - virtual void AddSupportedFormats(); -- virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); -+ virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ); - virtual sal_Bool WriteObject( SotStorageStreamRef& rxOStm, void* pUserObject, sal_uInt32 nUserObjectId, - const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); - -diff --git a/chart2/source/model/filter/XMLFilter.cxx b/chart2/source/model/filter/XMLFilter.cxx -index cee36fa..ce44fd7 100644 ---- a/chart2/source/model/filter/XMLFilter.cxx -+++ b/chart2/source/model/filter/XMLFilter.cxx -@@ -548,6 +548,7 @@ sal_Int32 XMLFilter::impl_Export( - const Reference< lang::XComponent > & xDocumentComp, - const Sequence< beans::PropertyValue > & rMediaDescriptor ) - { -+ m_aMediaDescriptor = rMediaDescriptor; - //save - - sal_Int32 nWarning = 0; -@@ -751,9 +752,7 @@ sal_Int32 XMLFilter::impl_ExportStream( - if ( !xFilter.is() ) - return ERRCODE_SFX_GENERAL; - -- uno::Sequence < beans::PropertyValue > aMediaDesc(0); -- //@todo? filter properties? ... url? ... -- xFilter->filter( aMediaDesc ); -+ xFilter->filter(m_aMediaDescriptor); - } - catch (const uno::Exception& rEx) - { -diff --git a/chart2/source/model/inc/XMLFilter.hxx b/chart2/source/model/inc/XMLFilter.hxx -index 648e25f..d8bb956 100644 ---- a/chart2/source/model/inc/XMLFilter.hxx -+++ b/chart2/source/model/inc/XMLFilter.hxx -@@ -152,6 +152,9 @@ private: - ::com::sun::star::lang::XComponent > m_xTargetDoc; - ::com::sun::star::uno::Reference< - ::com::sun::star::lang::XComponent > m_xSourceDoc; -+ -+ css::uno::Sequence m_aMediaDescriptor; -+ - OUString m_sDocumentHandler; // when set it will be set as doc handler - - volatile bool m_bCancelOperation; -diff --git a/chart2/source/model/main/Axis.cxx b/chart2/source/model/main/Axis.cxx -index f8a3b90..c478068 100644 ---- a/chart2/source/model/main/Axis.cxx -+++ b/chart2/source/model/main/Axis.cxx -@@ -65,7 +65,8 @@ enum - PROP_AXIS_CROSSOVER_POSITION, - PROP_AXIS_CROSSOVER_VALUE, - PROP_AXIS_DISPLAY_LABELS, -- PROP_AXIS_NUMBER_FORMAT, -+ PROP_AXIS_NUMBERFORMAT, -+ PROP_AXIS_LINK_NUMBERFORMAT_TO_SOURCE, - PROP_AXIS_LABEL_POSITION, - PROP_AXIS_TEXT_ROTATION, - PROP_AXIS_TEXT_BREAK, -@@ -110,10 +111,17 @@ void lcl_AddPropertiesToVector( - - rOutProperties.push_back( - Property( "NumberFormat", -- PROP_AXIS_NUMBER_FORMAT, -- ::getCppuType( reinterpret_cast< const sal_Int32 * >(0)), -+ PROP_AXIS_NUMBERFORMAT, -+ cppu::UnoType::get(), - beans::PropertyAttribute::BOUND -- | beans::PropertyAttribute::MAYBEVOID )); -+ | beans::PropertyAttribute::MAYBEDEFAULT )); -+ -+ rOutProperties.push_back( -+ Property( "LinkNumberFormatToSource", -+ PROP_AXIS_LINK_NUMBERFORMAT_TO_SOURCE, -+ ::getBooleanCppuType(), -+ beans::PropertyAttribute::BOUND -+ | beans::PropertyAttribute::MAYBEDEFAULT )); - - rOutProperties.push_back( - Property( "LabelPosition", -@@ -199,6 +207,7 @@ private: - ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_AXIS_SHOW, true ); - ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_AXIS_CROSSOVER_POSITION, ::com::sun::star::chart::ChartAxisPosition_ZERO ); - ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_AXIS_DISPLAY_LABELS, true ); -+ ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_AXIS_LINK_NUMBERFORMAT_TO_SOURCE, true ); - ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_AXIS_LABEL_POSITION, ::com::sun::star::chart::ChartAxisLabelPosition_NEAR_AXIS ); - ::chart::PropertyHelper::setPropertyValueDefault< double >( rOutMap, PROP_AXIS_TEXT_ROTATION, 0.0 ); - ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_AXIS_TEXT_BREAK, false ); -diff --git a/chart2/source/model/main/DataPointProperties.cxx b/chart2/source/model/main/DataPointProperties.cxx -index 443101d..2aa4ca9 100644 ---- a/chart2/source/model/main/DataPointProperties.cxx -+++ b/chart2/source/model/main/DataPointProperties.cxx -@@ -281,7 +281,14 @@ void DataPointProperties::AddPropertiesToVector( - PROP_DATAPOINT_NUMBER_FORMAT, - ::getCppuType( reinterpret_cast< const sal_Int32 * >(0)), - beans::PropertyAttribute::BOUND -- | beans::PropertyAttribute::MAYBEVOID )); -+ | beans::PropertyAttribute::MAYBEDEFAULT )); -+ -+ rOutProperties.push_back( -+ Property( "LinkNumberFormatToSource", -+ PROP_DATAPOINT_LINK_NUMBERFORMAT_TO_SOURCE, -+ ::getBooleanCppuType(), -+ beans::PropertyAttribute::BOUND -+ | beans::PropertyAttribute::MAYBEDEFAULT )); - - //additional 'PercentageNumberFormat' - rOutProperties.push_back( -@@ -409,6 +416,8 @@ void DataPointProperties::AddDefaultsToMap( - PropertyHelper::setPropertyValueDefault< sal_Int16 >( rOutMap, PROP_DATAPOINT_PERCENT_DIAGONAL, 0 ); - - PropertyHelper::setPropertyValueDefault< double >( rOutMap, PROP_DATAPOINT_TEXT_ROTATION, 0.0 ); -+ -+ PropertyHelper::setPropertyValueDefault(rOutMap, PROP_DATAPOINT_LINK_NUMBERFORMAT_TO_SOURCE, true); - } - - } // namespace chart -diff --git a/chart2/source/model/main/DataPointProperties.hxx b/chart2/source/model/main/DataPointProperties.hxx -index 596adf8..2d7258a 100644 ---- a/chart2/source/model/main/DataPointProperties.hxx -+++ b/chart2/source/model/main/DataPointProperties.hxx -@@ -62,6 +62,7 @@ public: - PROP_DATAPOINT_LABEL, - PROP_DATAPOINT_LABEL_SEPARATOR, - PROP_DATAPOINT_NUMBER_FORMAT, -+ PROP_DATAPOINT_LINK_NUMBERFORMAT_TO_SOURCE, - PROP_DATAPOINT_PERCENTAGE_NUMBER_FORMAT, - PROP_DATAPOINT_LABEL_PLACEMENT, - PROP_DATAPOINT_REFERENCE_DIAGRAM_SIZE, -diff --git a/chart2/source/model/template/ChartTypeTemplate.cxx b/chart2/source/model/template/ChartTypeTemplate.cxx -index b1ac7d22..8ff8563 100644 ---- a/chart2/source/model/template/ChartTypeTemplate.cxx -+++ b/chart2/source/model/template/ChartTypeTemplate.cxx -@@ -454,9 +454,8 @@ void SAL_CALL ChartTypeTemplate::resetStyles( const Reference< chart2::XDiagram - if( xAxisProp.is()) - { - // set number format to source format -- uno::Any aValue( xAxisProp->getPropertyValue("NumberFormat")); -- if( aValue.hasValue()) -- xAxisProp->setPropertyValue("NumberFormat", uno::Any()); -+ xAxisProp->setPropertyValue("LinkNumberFormatToSource", uno::makeAny(true)); -+ xAxisProp->setPropertyValue("NumberFormat", uno::Any()); - } - } - } -@@ -754,9 +753,8 @@ void ChartTypeTemplate::adaptAxes( - if( xAxisProp.is()) - { - // set number format to source format -- uno::Any aValue( xAxisProp->getPropertyValue("NumberFormat")); -- if( aValue.hasValue()) -- xAxisProp->setPropertyValue("NumberFormat", uno::Any()); -+ xAxisProp->setPropertyValue("LinkNumberFormatToSource", uno::makeAny(true)); -+ xAxisProp->setPropertyValue("NumberFormat", uno::Any()); - } - } - } -diff --git a/chart2/source/tools/AxisHelper.cxx b/chart2/source/tools/AxisHelper.cxx -index 4b372ca..8291ca6 100644 ---- a/chart2/source/tools/AxisHelper.cxx -+++ b/chart2/source/tools/AxisHelper.cxx -@@ -145,7 +145,16 @@ sal_Int32 AxisHelper::getExplicitNumberFormatKeyForAxis( - Reference< chart2::XChartDocument > xChartDoc( xNumberFormatsSupplier, uno::UNO_QUERY ); - - Reference< beans::XPropertySet > xProp( xAxis, uno::UNO_QUERY ); -- if( xProp.is() && !( xProp->getPropertyValue( "NumberFormat" ) >>= nNumberFormatKey ) ) -+ if (!xProp.is()) -+ return 0; -+ -+ bool bLinkToSource = true; -+ xProp->getPropertyValue("LinkNumberFormatToSource") >>= bLinkToSource; -+ xProp->getPropertyValue("NumberFormat") >>= nNumberFormatKey; -+ -+ sal_Int32 nOldNumberFormat = nNumberFormatKey; -+ -+ if (bLinkToSource) - { - bool bFormatSet = false; - //check whether we have a percent scale -> use percent format -@@ -314,7 +323,11 @@ sal_Int32 AxisHelper::getExplicitNumberFormatKeyForAxis( - } - } - } -+ -+ if (nOldNumberFormat != nNumberFormatKey) -+ xProp->setPropertyValue("NumberFormat", uno::makeAny(nNumberFormatKey)); - } -+ - return nNumberFormatKey; - } - -diff --git a/chart2/source/view/main/ChartView.cxx b/chart2/source/view/main/ChartView.cxx -index f501aa9..c519aef 100644 ---- a/chart2/source/view/main/ChartView.cxx -+++ b/chart2/source/view/main/ChartView.cxx -@@ -1787,8 +1787,16 @@ sal_Int32 ExplicitValueProvider::getExplicitNumberFormatKeyForDataLabel( - if( !xSeriesOrPointProp.is() ) - return nFormat; - -- OUString aPropName( "NumberFormat" ); -- if( !(xSeriesOrPointProp->getPropertyValue(aPropName) >>= nFormat) ) -+ bool bLinkToSource = true; -+ try -+ { -+ xSeriesOrPointProp->getPropertyValue("LinkNumberFormatToSource") >>= bLinkToSource; -+ } -+ catch ( const beans::UnknownPropertyException& ) {} -+ -+ xSeriesOrPointProp->getPropertyValue("NumberFormat") >>= nFormat; -+ sal_Int32 nOldFormat = nFormat; -+ if (bLinkToSource) - { - uno::Reference< chart2::XChartType > xChartType( DataSeriesHelper::getChartTypeOfSeries( xSeries, xDiagram ) ); - -@@ -1796,7 +1804,7 @@ sal_Int32 ExplicitValueProvider::getExplicitNumberFormatKeyForDataLabel( - if( ChartTypeHelper::shouldLabelNumberFormatKeyBeDetectedFromYAxis( xChartType ) ) - { - uno::Reference< beans::XPropertySet > xAttachedAxisProps( DiagramHelper::getAttachedAxis( xSeries, xDiagram ), uno::UNO_QUERY ); -- if( xAttachedAxisProps.is() && ( xAttachedAxisProps->getPropertyValue( aPropName ) >>= nFormat ) ) -+ if( xAttachedAxisProps.is() && ( xAttachedAxisProps->getPropertyValue("NumberFormat") >>= nFormat ) ) - bFormatFound = true; - } - if( !bFormatFound ) -@@ -1813,7 +1821,11 @@ sal_Int32 ExplicitValueProvider::getExplicitNumberFormatKeyForDataLabel( - nFormat = xValues->getNumberFormatKeyByIndex( nPointIndex ); - } - } -+ -+ if (nFormat >= 0 && nOldFormat != nFormat) -+ xSeriesOrPointProp->setPropertyValue("NumberFormat", uno::makeAny(nFormat)); - } -+ - if(nFormat<0) - nFormat=0; - return nFormat; -diff --git a/comphelper/source/container/embeddedobjectcontainer.cxx b/comphelper/source/container/embeddedobjectcontainer.cxx -index 2d7df99..c3b4338 100644 ---- a/comphelper/source/container/embeddedobjectcontainer.cxx -+++ b/comphelper/source/container/embeddedobjectcontainer.cxx -@@ -493,7 +493,9 @@ void EmbeddedObjectContainer::AddEmbeddedObject( const ::com::sun::star::uno::Re - } - } - --sal_Bool EmbeddedObjectContainer::StoreEmbeddedObject( const uno::Reference < embed::XEmbeddedObject >& xObj, OUString& rName, sal_Bool bCopy ) -+bool EmbeddedObjectContainer::StoreEmbeddedObject( -+ const uno::Reference < embed::XEmbeddedObject >& xObj, OUString& rName, bool bCopy, -+ const OUString& rSrcShellID, const OUString& rDestShellID ) - { - SAL_INFO( "comphelper.container", "comphelper (mv76033) comphelper::EmbeddedObjectContainer::StoreEmbeddedObject" ); - -@@ -514,7 +516,14 @@ sal_Bool EmbeddedObjectContainer::StoreEmbeddedObject( const uno::Reference < em - { - uno::Sequence < beans::PropertyValue > aSeq; - if ( bCopy ) -- xPersist->storeToEntry( pImpl->mxStorage, rName, aSeq, aSeq ); -+ { -+ uno::Sequence aObjArgs(2); -+ aObjArgs[0].Name = "SourceShellID"; -+ aObjArgs[0].Value <<= rSrcShellID; -+ aObjArgs[1].Name = "DestinationShellID"; -+ aObjArgs[1].Value <<= rDestShellID; -+ xPersist->storeToEntry(pImpl->mxStorage, rName, aSeq, aObjArgs); -+ } - else - { - //TODO/LATER: possible optimisation, don't store immediately -@@ -538,7 +547,7 @@ sal_Bool EmbeddedObjectContainer::InsertEmbeddedObject( const uno::Reference < e - { - SAL_INFO( "comphelper.container", "comphelper (mv76033) comphelper::EmbeddedObjectContainer::InsertEmbeddedObject( Object )" ); - // store it into the container storage -- if ( StoreEmbeddedObject( xObj, rName, sal_False ) ) -+ if (StoreEmbeddedObject(xObj, rName, false, OUString(), OUString())) - { - // remember object - AddEmbeddedObject( xObj, rName ); -@@ -700,7 +709,9 @@ sal_Bool EmbeddedObjectContainer::TryToCopyGraphReplacement( EmbeddedObjectConta - return bResult; - } - --uno::Reference < embed::XEmbeddedObject > EmbeddedObjectContainer::CopyAndGetEmbeddedObject( EmbeddedObjectContainer& rSrc, const uno::Reference < embed::XEmbeddedObject >& xObj, OUString& rName ) -+uno::Reference < embed::XEmbeddedObject > EmbeddedObjectContainer::CopyAndGetEmbeddedObject( -+ EmbeddedObjectContainer& rSrc, const uno::Reference & xObj, OUString& rName, -+ const OUString& rSrcShellID, const OUString& rDestShellID ) - { - SAL_INFO( "comphelper.container", "comphelper (mv76033) comphelper::EmbeddedObjectContainer::CopyAndGetEmbeddedObject" ); - -@@ -721,8 +732,8 @@ uno::Reference < embed::XEmbeddedObject > EmbeddedObjectContainer::CopyAndGetEmb - if ( rName.isEmpty() ) - rName = CreateUniqueObjectName(); - -- // objects without persistance are not really stored by the method -- if ( xObj.is() && StoreEmbeddedObject( xObj, rName, sal_True ) ) -+ // objects without persistence are not really stored by the method -+ if (xObj.is() && StoreEmbeddedObject(xObj, rName, true, rSrcShellID, rDestShellID)) - { - xResult = Get_Impl( rName, xObj); - if ( !xResult.is() ) -diff --git a/dbaccess/source/ui/browser/dbexchange.cxx b/dbaccess/source/ui/browser/dbexchange.cxx -index 32c05ce..47e4d2f 100644 ---- a/dbaccess/source/ui/browser/dbexchange.cxx -+++ b/dbaccess/source/ui/browser/dbexchange.cxx -@@ -159,7 +159,7 @@ namespace dbaui - ODataAccessObjectTransferable::AddSupportedFormats(); - } - -- sal_Bool ODataClipboard::GetData( const DataFlavor& rFlavor ) -+ sal_Bool ODataClipboard::GetData( const DataFlavor& rFlavor, const OUString& rDestDoc ) - { - const sal_uLong nFormat = SotExchange::GetFormat(rFlavor); - switch (nFormat) -@@ -175,7 +175,7 @@ namespace dbaui - return m_pHtml.is() && SetObject( m_pHtml.get(), SOT_FORMATSTR_ID_HTML, rFlavor ); - } - -- return ODataAccessObjectTransferable::GetData( rFlavor ); -+ return ODataAccessObjectTransferable::GetData(rFlavor, rDestDoc); - } - - void ODataClipboard::ObjectReleased() -diff --git a/dbaccess/source/ui/inc/JoinExchange.hxx b/dbaccess/source/ui/inc/JoinExchange.hxx -index 2bf549a..d705300 100644 ---- a/dbaccess/source/ui/inc/JoinExchange.hxx -+++ b/dbaccess/source/ui/inc/JoinExchange.hxx -@@ -61,7 +61,7 @@ namespace dbaui - - protected: - virtual void AddSupportedFormats(); -- virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); -+ virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ); - virtual void DragFinished( sal_Int8 nDropAction ); - - static ::com::sun::star::uno::Sequence< sal_Int8 > getUnoTunnelImplementationId(); -diff --git a/dbaccess/source/ui/inc/TableRowExchange.hxx b/dbaccess/source/ui/inc/TableRowExchange.hxx -index 0f03474..a298a5b 100644 ---- a/dbaccess/source/ui/inc/TableRowExchange.hxx -+++ b/dbaccess/source/ui/inc/TableRowExchange.hxx -@@ -34,7 +34,7 @@ namespace dbaui - OTableRowExchange(const ::std::vector< ::boost::shared_ptr >& _rvTableRow); - protected: - virtual void AddSupportedFormats(); -- virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); -+ virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ); - virtual sal_Bool WriteObject( SotStorageStreamRef& rxOStm, void* pUserObject, sal_uInt32 nUserObjectId, const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); - virtual void ObjectReleased(); - }; -diff --git a/dbaccess/source/ui/inc/dbexchange.hxx b/dbaccess/source/ui/inc/dbexchange.hxx -index f194213..c8d9852 100644 ---- a/dbaccess/source/ui/inc/dbexchange.hxx -+++ b/dbaccess/source/ui/inc/dbexchange.hxx -@@ -73,7 +73,7 @@ namespace dbaui - - protected: - virtual void AddSupportedFormats(); -- virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); -+ virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ); - virtual void ObjectReleased(); - virtual sal_Bool WriteObject( SotStorageStreamRef& rxOStm, void* pUserObject, sal_uInt32 nUserObjectId, const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); - }; -diff --git a/dbaccess/source/ui/querydesign/JoinExchange.cxx b/dbaccess/source/ui/querydesign/JoinExchange.cxx -index 70007d7..8efc796 100644 ---- a/dbaccess/source/ui/querydesign/JoinExchange.cxx -+++ b/dbaccess/source/ui/querydesign/JoinExchange.cxx -@@ -116,7 +116,7 @@ namespace dbaui - AddFormat( SOT_FORMATSTR_ID_SBA_TABID ); - } - -- sal_Bool OJoinExchObj::GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ) -+ sal_Bool OJoinExchObj::GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& /*rDestDoc*/ ) - { - sal_uInt32 nFormat = SotExchange::GetFormat(rFlavor); - if ( SOT_FORMATSTR_ID_SBA_JOIN == nFormat ) -diff --git a/dbaccess/source/ui/tabledesign/TableRowExchange.cxx b/dbaccess/source/ui/tabledesign/TableRowExchange.cxx -index 3a14971..a593b09 100644 ---- a/dbaccess/source/ui/tabledesign/TableRowExchange.cxx -+++ b/dbaccess/source/ui/tabledesign/TableRowExchange.cxx -@@ -52,7 +52,7 @@ namespace dbaui - if ( !m_vTableRow.empty() ) - AddFormat(SOT_FORMATSTR_ID_SBA_TABED); - } -- sal_Bool OTableRowExchange::GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ) -+ sal_Bool OTableRowExchange::GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& /*rDestDoc*/ ) - { - sal_uLong nFormat = SotExchange::GetFormat(rFlavor); - if(nFormat == SOT_FORMATSTR_ID_SBA_TABED) -diff --git a/embeddedobj/source/commonembedding/persistence.cxx b/embeddedobj/source/commonembedding/persistence.cxx -index 36741eb..4891656 100644 ---- a/embeddedobj/source/commonembedding/persistence.cxx -+++ b/embeddedobj/source/commonembedding/persistence.cxx -@@ -723,12 +723,33 @@ void OCommonEmbeddedObject::SwitchDocToStorage_Impl( const uno::Reference< docum - m_xRecoveryStorage.clear(); - } - --//------------------------------------------------------ --void OCommonEmbeddedObject::StoreDocToStorage_Impl( const uno::Reference< embed::XStorage >& xStorage, -- sal_Int32 nStorageFormat, -- const OUString& aBaseURL, -- const OUString& aHierarchName, -- sal_Bool bAttachToTheStorage ) -+namespace { -+ -+OUString getStringPropertyValue( const uno::Sequence& rProps, const OUString& rName ) -+{ -+ OUString aStr; -+ -+ for (sal_Int32 i = 0; i < rProps.getLength(); ++i) -+ { -+ if (rProps[i].Name == rName) -+ { -+ rProps[i].Value >>= aStr; -+ break; -+ } -+ } -+ -+ return aStr; -+} -+ -+} -+ -+void OCommonEmbeddedObject::StoreDocToStorage_Impl( -+ const uno::Reference& xStorage, -+ const uno::Sequence& rMediaArgs, -+ const uno::Sequence& rObjArgs, -+ sal_Int32 nStorageFormat, -+ const OUString& aHierarchName, -+ bool bAttachToTheStorage ) - { - SAL_WARN_IF( !xStorage.is(), "embeddedobj.common", "No storage is provided for storing!" ); - -@@ -742,6 +763,8 @@ void OCommonEmbeddedObject::StoreDocToStorage_Impl( const uno::Reference< embed: - xDoc = uno::Reference< document::XStorageBasedDocument >( m_pDocHolder->GetComponent(), uno::UNO_QUERY ); - } - -+ OUString aBaseURL = GetBaseURLFrom_Impl(rMediaArgs, rObjArgs); -+ - if ( xDoc.is() ) - { - OUString aFilterName = GetFilterName( nStorageFormat ); -@@ -750,13 +773,17 @@ void OCommonEmbeddedObject::StoreDocToStorage_Impl( const uno::Reference< embed: - if ( aFilterName.isEmpty() ) - throw io::IOException(); // TODO: - -- uno::Sequence< beans::PropertyValue > aArgs( 3 ); -+ uno::Sequence aArgs(5); - aArgs[0].Name = "FilterName"; - aArgs[0].Value <<= aFilterName; -- aArgs[2].Name = "DocumentBaseURL"; -- aArgs[2].Value <<= aBaseURL; - aArgs[1].Name = "HierarchicalDocumentName"; - aArgs[1].Value <<= aHierarchName; -+ aArgs[2].Name = "DocumentBaseURL"; -+ aArgs[2].Value <<= aBaseURL; -+ aArgs[3].Name = "SourceShellID"; -+ aArgs[3].Value <<= getStringPropertyValue(rObjArgs, "SourceShellID"); -+ aArgs[4].Name = "DestinationShellID"; -+ aArgs[4].Value <<= getStringPropertyValue(rObjArgs, "DestinationShellID"); - - xDoc->storeToStorage( xStorage, aArgs ); - if ( bAttachToTheStorage ) -@@ -1241,7 +1268,8 @@ void SAL_CALL OCommonEmbeddedObject::storeToEntry( const uno::Reference< embed:: - - aGuard.clear(); - // TODO/LATER: support hierarchical name for embedded objects in embedded objects -- StoreDocToStorage_Impl( xSubStorage, nTargetStorageFormat, GetBaseURLFrom_Impl( lArguments, lObjArgs ), sEntName, sal_False ); -+ StoreDocToStorage_Impl( -+ xSubStorage, lArguments, lObjArgs, nTargetStorageFormat, sEntName, false ); - aGuard.reset(); - - if ( bSwitchBackToLoaded ) -@@ -1380,7 +1408,8 @@ void SAL_CALL OCommonEmbeddedObject::storeAsEntry( const uno::Reference< embed:: - { - aGuard.clear(); - // TODO/LATER: support hierarchical name for embedded objects in embedded objects -- StoreDocToStorage_Impl( xSubStorage, nTargetStorageFormat, GetBaseURLFrom_Impl( lArguments, lObjArgs ), sEntName, sal_False ); -+ StoreDocToStorage_Impl( -+ xSubStorage, lArguments, lObjArgs, nTargetStorageFormat, sEntName, false ); - aGuard.reset(); - - if ( bSwitchBackToLoaded ) -@@ -1609,7 +1638,8 @@ void SAL_CALL OCommonEmbeddedObject::storeOwn() - } - - aGuard.clear(); -- StoreDocToStorage_Impl( m_xObjectStorage, nStorageFormat, GetBaseURL_Impl(), m_aEntryName, sal_True ); -+ uno::Sequence aEmpty; -+ StoreDocToStorage_Impl( m_xObjectStorage, aEmpty, aEmpty, nStorageFormat, m_aEntryName, true ); - aGuard.reset(); - } - -diff --git a/embeddedobj/source/inc/commonembobj.hxx b/embeddedobj/source/inc/commonembobj.hxx -index fba8d21..83e4445 100644 ---- a/embeddedobj/source/inc/commonembobj.hxx -+++ b/embeddedobj/source/inc/commonembobj.hxx -@@ -197,11 +197,13 @@ private: - - ::com::sun::star::uno::Reference< ::com::sun::star::util::XCloseable > InitNewDocument_Impl(); - -- void StoreDocToStorage_Impl( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage, -- sal_Int32 nStorageVersion, -- const OUString& aBaseURL, -- const OUString& aHierarchName, -- sal_Bool bAttachToStorage ); -+ void StoreDocToStorage_Impl( -+ const css::uno::Reference& xStorage, -+ const css::uno::Sequence& rMediaArgs, -+ const css::uno::Sequence& rObjArgs, -+ sal_Int32 nStorageVersion, -+ const OUString& aHierarchName, -+ bool bAttachToStorage ); - - void SwitchDocToStorage_Impl( - const ::com::sun::star::uno::Reference< ::com::sun::star::document::XStorageBasedDocument >& xDoc, -diff --git a/include/comphelper/embeddedobjectcontainer.hxx b/include/comphelper/embeddedobjectcontainer.hxx -index 7ce0566..616ca0f 100644 ---- a/include/comphelper/embeddedobjectcontainer.hxx -+++ b/include/comphelper/embeddedobjectcontainer.hxx -@@ -58,7 +58,9 @@ class COMPHELPER_DLLPUBLIC EmbeddedObjectContainer - - public: - // add an embedded object to the container storage -- sal_Bool StoreEmbeddedObject( const ::com::sun::star::uno::Reference < ::com::sun::star::embed::XEmbeddedObject >&, OUString&, sal_Bool ); -+ bool StoreEmbeddedObject( -+ const css::uno::Reference& xObj, OUString& rName, bool bCopy, -+ const OUString& rSrcShellID, const OUString& rDestShellID ); - - // add an embedded object that has been imported from the container storage - should only be called by filters! - void AddEmbeddedObject( const ::com::sun::star::uno::Reference < ::com::sun::star::embed::XEmbeddedObject >&, const OUString& ); -@@ -119,7 +121,9 @@ public: - InsertEmbeddedObject( const ::com::sun::star::uno::Reference < ::com::sun::star::io::XInputStream >&, OUString& ); - - // copy an embedded object into the storage, open the new copy and return it -- ::com::sun::star::uno::Reference < ::com::sun::star::embed::XEmbeddedObject > CopyAndGetEmbeddedObject( EmbeddedObjectContainer& rSrc, const ::com::sun::star::uno::Reference < ::com::sun::star::embed::XEmbeddedObject >& xObj, /* TODO const OUString& aOrigName,*/ OUString& rName ); -+ css::uno::Reference CopyAndGetEmbeddedObject( -+ EmbeddedObjectContainer& rSrc, const css::uno::Reference & xObj, OUString& rName, -+ const OUString& rSrcShellID, const OUString& rDestShellID ); - - // move an embedded object from one container to another one - sal_Bool MoveEmbeddedObject( EmbeddedObjectContainer& rSrc, const ::com::sun::star::uno::Reference < ::com::sun::star::embed::XEmbeddedObject >&, OUString& ); -diff --git a/include/sfx2/objsh.hxx b/include/sfx2/objsh.hxx -index de041fbf..05aa6a7 100644 ---- a/include/sfx2/objsh.hxx -+++ b/include/sfx2/objsh.hxx -@@ -239,6 +239,8 @@ public: - - using SotObject::GetInterface; - -+ static OUString CreateShellID( const SfxObjectShell* pShell ); -+ - // Document-Shell Iterator - static SfxObjectShell* GetFirst( const TypeId* pType = 0, - sal_Bool bOnlyVisible = sal_True ); -diff --git a/include/svtools/embedtransfer.hxx b/include/svtools/embedtransfer.hxx -index 2649188..186bc0c 100644 ---- a/include/svtools/embedtransfer.hxx -+++ b/include/svtools/embedtransfer.hxx -@@ -33,10 +33,12 @@ private: - Graphic* m_pGraphic; - sal_Int64 m_nAspect; - -+ OUString maParentShellID; -+ - protected: - - virtual void AddSupportedFormats(); -- virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); -+ virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ); - virtual void ObjectReleased(); - - public: -@@ -46,6 +48,8 @@ public: - sal_Int64 nAspect ); - ~SvEmbedTransferHelper(); - -+ void SetParentShellID( const OUString& rShellID ); -+ - static void FillTransferableObjectDescriptor( TransferableObjectDescriptor& rDesc, - const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XEmbeddedObject >& xObj, - const Graphic* pGraphic, -diff --git a/include/svtools/stringtransfer.hxx b/include/svtools/stringtransfer.hxx -index 12d6fda..60d2ced 100644 ---- a/include/svtools/stringtransfer.hxx -+++ b/include/svtools/stringtransfer.hxx -@@ -42,7 +42,7 @@ namespace svt - protected: - // TransferableHelper overridables - virtual void AddSupportedFormats(); -- virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& _rFlavor ); -+ virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& _rFlavor, const OUString& rDestDoc ); - }; - - //==================================================================== -diff --git a/include/svtools/transfer.hxx b/include/svtools/transfer.hxx -index 2a8ce29..76c192f 100644 ---- a/include/svtools/transfer.hxx -+++ b/include/svtools/transfer.hxx -@@ -28,7 +28,7 @@ - #include - #include - #include --#include -+#include - #include - #include - #include -@@ -127,7 +127,7 @@ struct ExecuteDropEvent - mbDefault( sal_False ) {} - }; - --class SVT_DLLPUBLIC TransferableHelper : public ::cppu::WeakImplHelper4< ::com::sun::star::datatransfer::XTransferable, -+class SVT_DLLPUBLIC TransferableHelper : public ::cppu::WeakImplHelper4< ::com::sun::star::datatransfer::XTransferable2, - ::com::sun::star::datatransfer::clipboard::XClipboardOwner, - ::com::sun::star::datatransfer::dnd::XDragSourceListener, - ::com::sun::star::lang::XUnoTunnel > -@@ -178,6 +178,11 @@ private: - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::datatransfer::DataFlavor > SAL_CALL getTransferDataFlavors() throw(::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL isDataFlavorSupported( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ) throw(::com::sun::star::uno::RuntimeException); - -+ // Transferable2 -+ virtual css::uno::Any SAL_CALL getTransferData2( -+ const css::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ) -+ throw (css::datatransfer::UnsupportedFlavorException, css::io::IOException, css::uno::RuntimeException); -+ - // XEventListener - virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw(::com::sun::star::uno::RuntimeException); - -@@ -236,7 +241,7 @@ protected: - protected: - - virtual void AddSupportedFormats() = 0; -- virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ) = 0; -+ virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ) = 0; - virtual sal_Bool WriteObject( SotStorageStreamRef& rxOStm, void* pUserObject, sal_uInt32 nUserObjectId, const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); - virtual void DragFinished( sal_Int8 nDropAction ); - virtual void ObjectReleased(); -@@ -312,8 +317,8 @@ public: - - public: - -- ::com::sun::star::uno::Any GetAny( SotFormatStringId nFormat ) const; -- ::com::sun::star::uno::Any GetAny( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ) const; -+ css::uno::Any GetAny( SotFormatStringId nFormat, const OUString& rDestDoc ) const; -+ css::uno::Any GetAny( const css::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ) const; - - sal_Bool GetString( SotFormatStringId nFormat, OUString& rStr ); - sal_Bool GetString( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, OUString& rStr ); -@@ -342,16 +347,16 @@ public: - sal_Bool GetFileList( SotFormatStringId nFormat, FileList& rFileList ); - sal_Bool GetFileList( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, FileList& rFileList ); - -- sal_Bool GetSequence( SotFormatStringId nFormat, ::com::sun::star::uno::Sequence< sal_Int8 >& rSeq ); -- sal_Bool GetSequence( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, ::com::sun::star::uno::Sequence< sal_Int8 >& rSeq ); -+ css::uno::Sequence GetSequence( SotFormatStringId nFormat, const OUString& rDestDoc ); -+ css::uno::Sequence GetSequence( const css::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ); - -- sal_Bool GetSotStorageStream( SotFormatStringId nFormat, SotStorageStreamRef& rStreamRef ); -- sal_Bool GetSotStorageStream( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, SotStorageStreamRef& rStreamRef ); -+ bool GetSotStorageStream( SotFormatStringId nFormat, SotStorageStreamRef& rStreamRef ); -+ bool GetSotStorageStream( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, SotStorageStreamRef& rStreamRef ); - -- sal_Bool GetInputStream( SotFormatStringId nFormat, ::com::sun::star::uno::Reference < com::sun::star::io::XInputStream >& xStream ); -- sal_Bool GetInputStream( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, ::com::sun::star::uno::Reference < com::sun::star::io::XInputStream >& xStream ); -+ css::uno::Reference GetInputStream( SotFormatStringId nFormat, const OUString& rDestDoc ); -+ css::uno::Reference GetInputStream( const css::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ); - -- sal_Bool GetInterface( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& rIf ); -+ bool GetInterface( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& rIf ); - - public: - -@@ -485,7 +490,7 @@ class SVT_DLLPUBLIC TransferDataContainer : public TransferableHelper - protected: - - virtual void AddSupportedFormats(); -- virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); -+ virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ); - virtual void DragFinished( sal_Int8 nDropAction ); - - public: -diff --git a/include/svx/dbaexchange.hxx b/include/svx/dbaexchange.hxx -index e6fef35..1761df1 100644 ---- a/include/svx/dbaexchange.hxx -+++ b/include/svx/dbaexchange.hxx -@@ -148,7 +148,7 @@ namespace svx - protected: - // TransferableHelper overridables - virtual void AddSupportedFormats(); -- virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); -+ virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ); - - static sal_uInt32 getDescriptorFormatId(); - -@@ -226,7 +226,7 @@ namespace svx - - protected: - virtual void AddSupportedFormats(); -- virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); -+ virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ); - virtual void ObjectReleased(); - - protected: -@@ -276,7 +276,7 @@ namespace svx - - protected: - virtual void AddSupportedFormats(); -- virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); -+ virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ); - virtual void ObjectReleased(); - static sal_uInt32 getDescriptorFormatId(); - }; -diff --git a/include/svx/dbaobjectex.hxx b/include/svx/dbaobjectex.hxx -index 429477e..efd6c0e 100644 ---- a/include/svx/dbaobjectex.hxx -+++ b/include/svx/dbaobjectex.hxx -@@ -64,7 +64,7 @@ namespace svx - protected: - // TransferableHelper overridables - virtual void AddSupportedFormats(); -- virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); -+ virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ); - - static sal_uInt32 getDescriptorFormatId(sal_Bool _bExtractForm); - }; -diff --git a/include/svx/fmview.hxx b/include/svx/fmview.hxx -index af984ad..6c5c523 100644 ---- a/include/svx/fmview.hxx -+++ b/include/svx/fmview.hxx -@@ -108,8 +108,6 @@ public: - - // for copying complete form structures, not only control models - virtual SdrModel* GetMarkedObjModel() const; -- using E3dView::Paste; -- virtual sal_Bool Paste(const SdrModel& rMod, const Point& rPos, SdrObjList* pLst=NULL, sal_uInt32 nOptions=0); - - virtual sal_Bool MouseButtonDown( const MouseEvent& _rMEvt, Window* _pWin ); - -diff --git a/include/svx/galmisc.hxx b/include/svx/galmisc.hxx -index 7045a51..af7ae18 100644 ---- a/include/svx/galmisc.hxx -+++ b/include/svx/galmisc.hxx -@@ -174,7 +174,7 @@ protected: - - // TransferableHelper - virtual void AddSupportedFormats(); -- virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); -+ virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ); - virtual sal_Bool WriteObject( SotStorageStreamRef& rxOStm, void* pUserObject, sal_uInt32 nUserObjectId, const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); - virtual void DragFinished( sal_Int8 nDropAction ); - virtual void ObjectReleased(); -diff --git a/include/svx/svdobj.hxx b/include/svx/svdobj.hxx -index f1b3dbb..25b83b6 100644 ---- a/include/svx/svdobj.hxx -+++ b/include/svx/svdobj.hxx -@@ -599,9 +599,10 @@ public: - Note that this function uses operator= internally. - */ - virtual SdrObject* Clone() const; -- /** -- Implemented mainly for the purposes of Clone(). -- */ -+ -+ virtual SdrObject* CloneWithShellIDs( const OUString& rSrcShellID, const OUString& rDestShellID ) const; -+ -+ // implemented mainly for the purposes of Clone() - SdrObject& operator=(const SdrObject& rObj); - - // TakeObjName...() ist fuer die Anzeige in der UI, z.B. "3 Rahmen selektiert". -diff --git a/include/svx/svdoole2.hxx b/include/svx/svdoole2.hxx -index 0f1df14..149dc61 100644 ---- a/include/svx/svdoole2.hxx -+++ b/include/svx/svdoole2.hxx -@@ -145,6 +145,9 @@ public: - virtual OUString TakeObjNamePlural() const; - - SdrOle2Obj* Clone() const; -+ virtual SdrOle2Obj* CloneWithShellIDs( const OUString& rSrcShellID, const OUString& rDestShellID ) const; -+ -+ SdrOle2Obj& assignFrom( const SdrOle2Obj& rObj, const OUString& rSrcShellID, const OUString& rDestShellID ); - SdrOle2Obj& operator=(const SdrOle2Obj& rObj); - - virtual void NbcMove(const Size& rSize); -diff --git a/include/svx/svdxcgv.hxx b/include/svx/svdxcgv.hxx -index 010df2e..3043f0f 100644 ---- a/include/svx/svdxcgv.hxx -+++ b/include/svx/svdxcgv.hxx -@@ -103,7 +103,10 @@ public: - // View angezeigt wird. - // Gueltige Werte fuer nOptions sind SDRINSERT_DONTMARK und - // SDRINSERT_ADDMARK (siehe svdedtv.hxx). -- virtual sal_Bool Paste(const SdrModel& rMod, const Point& rPos, SdrObjList* pLst=NULL, sal_uInt32 nOptions=0); -+ virtual sal_Bool Paste( -+ const SdrModel& rMod, const Point& rPos, SdrObjList* pLst, sal_uInt32 nOptions, -+ const OUString& rSrcShellID, const OUString& rDestShellID ); -+ - sal_Bool Paste(const OUString& rStr, const Point& rPos, SdrObjList* pLst=NULL, sal_uInt32 nOptions=0); - sal_Bool Paste(SvStream& rInput, const OUString& rBaseURL, sal_uInt16 eFormat, const Point& rPos, SdrObjList* pLst=NULL, sal_uInt32 nOptions=0); - -diff --git a/include/svx/view3d.hxx b/include/svx/view3d.hxx -index 943cdb3..dfda739 100644 ---- a/include/svx/view3d.hxx -+++ b/include/svx/view3d.hxx -@@ -98,7 +98,9 @@ public: - - // On Paste: We need to insert the objects of the Scene, but not the Scene itself - using SdrView::Paste; -- virtual sal_Bool Paste(const SdrModel& rMod, const Point& rPos, SdrObjList* pLst=NULL, sal_uInt32 nOptions=0); -+ virtual sal_Bool Paste( -+ const SdrModel& rMod, const Point& rPos, SdrObjList* pLst, sal_uInt32 nOptions, -+ const OUString& rSrcShellID, const OUString& rDestShellID ); - - // #83403# Service routine used from local Clone() and from SdrCreateView::EndCreateObj(...) - bool ImpCloneAll3DObjectsToDestScene(E3dScene* pSrcScene, E3dScene* pDstScene, Point aOffset); -diff --git a/include/svx/xmlexchg.hxx b/include/svx/xmlexchg.hxx -index 64de636..d1ce6d3 100644 ---- a/include/svx/xmlexchg.hxx -+++ b/include/svx/xmlexchg.hxx -@@ -69,7 +69,7 @@ namespace svx - - // TransferableHelper overridables - virtual void AddSupportedFormats(); -- virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); -+ virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ); - - OXFormsDescriptor m_aDescriptor; - -diff --git a/include/xmloff/SchXMLExportHelper.hxx b/include/xmloff/SchXMLExportHelper.hxx -index d46663f..af866be 100644 ---- a/include/xmloff/SchXMLExportHelper.hxx -+++ b/include/xmloff/SchXMLExportHelper.hxx -@@ -52,6 +52,9 @@ public: - /// returns the string corresponding to the current FileFormat CLSID for Chart - const OUString& getChartCLSID(); - -+ void SetSourceShellID( const OUString& rShellID ); -+ void SetDestinationShellID( const OUString& rShellID ); -+ - private: - SchXMLExportHelper(); // not defined - SchXMLExportHelper(SchXMLExportHelper &); // not defined -diff --git a/include/xmloff/xmlexp.hxx b/include/xmloff/xmlexp.hxx -index 7ef8f3f..3612a7a 100644 ---- a/include/xmloff/xmlexp.hxx -+++ b/include/xmloff/xmlexp.hxx -@@ -212,6 +212,9 @@ protected: - - void SetExtended( sal_Bool bSet=sal_True ) { mbExtended = bSet; } - -+ OUString GetSourceShellID() const; -+ OUString GetDestinationShellID() const; -+ - // save linked sections? (may be false in global documents) - sal_Bool mbSaveLinkedSections; - -diff --git a/offapi/UnoApi_offapi.mk b/offapi/UnoApi_offapi.mk -index d42a0e7..3c1d92e 100755 ---- a/offapi/UnoApi_offapi.mk -+++ b/offapi/UnoApi_offapi.mk -@@ -2100,6 +2100,7 @@ $(eval $(call gb_UnoApi_add_idlfiles,offapi,com/sun/star/datatransfer,\ - XSystemTransferable \ - XTransferDataAccess \ - XTransferable \ -+ XTransferable2 \ - XTransferableEx \ - XTransferableSource \ - XTransferableSupplier \ -diff --git a/offapi/com/sun/star/datatransfer/XTransferable2.idl b/offapi/com/sun/star/datatransfer/XTransferable2.idl -new file mode 100644 -index 0000000..5ff7d58 ---- /dev/null -+++ b/offapi/com/sun/star/datatransfer/XTransferable2.idl -@@ -0,0 +1,41 @@ -+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-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/. -+ */ -+ -+#ifndef __com_sun_star_datatransfer_XTransferable2_idl__ -+#define __com_sun_star_datatransfer_XTransferable2_idl__ -+ -+#include -+ -+module com { module sun { module star { module datatransfer { -+ -+interface XTransferable2 : com::sun::star::datatransfer::XTransferable -+{ -+ /** This is equivalent of getTransferData of XTransferable, but takes an -+ additional parameter that specifies the destination document type. -+ -+ @param aFlavor requested data format -+ @param aDestShellID destination document shell ID. The ID of each -+ individual shell must be unique. -+ -+ @returns data in specified data format. -+ -+ @throws com::sun::star::io::IOException -+ if the data is no longer available in the requested flavor. -+ -+ @throws com::sun::star::datatransfer::UnsupportedFlavorException -+ if the requested DataFlavor is not supported. -+ */ -+ any getTransferData2( [in] DataFlavor aFlavor, [in] string aDestShellID ) -+ raises ( UnsupportedFlavorException, com::sun::star::io::IOException ); -+}; -+ -+}; }; }; }; -+ -+#endif -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+ -diff --git a/reportdesign/source/ui/dlg/GroupExchange.cxx b/reportdesign/source/ui/dlg/GroupExchange.cxx -index 06753d8..2e13979 100644 ---- a/reportdesign/source/ui/dlg/GroupExchange.cxx -+++ b/reportdesign/source/ui/dlg/GroupExchange.cxx -@@ -48,8 +48,8 @@ namespace rptui - AddFormat(OGroupExchange::getReportGroupId()); - } - } -- // ----------------------------------------------------------------------------- -- sal_Bool OGroupExchange::GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ) -+ -+ sal_Bool OGroupExchange::GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& /*rDestDoc*/ ) - { - sal_uLong nFormat = SotExchange::GetFormat(rFlavor); - if(nFormat == OGroupExchange::getReportGroupId() ) -diff --git a/reportdesign/source/ui/dlg/GroupExchange.hxx b/reportdesign/source/ui/dlg/GroupExchange.hxx -index 01eb437..f45ce99 100644 ---- a/reportdesign/source/ui/dlg/GroupExchange.hxx -+++ b/reportdesign/source/ui/dlg/GroupExchange.hxx -@@ -37,7 +37,7 @@ namespace rptui - static sal_uInt32 getReportGroupId(); - protected: - virtual void AddSupportedFormats(); -- virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); -+ virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ); - virtual void ObjectReleased(); - }; - } -diff --git a/reportdesign/source/ui/dlg/GroupsSorting.cxx b/reportdesign/source/ui/dlg/GroupsSorting.cxx -index 0bfdd46..09b5e3c 100644 ---- a/reportdesign/source/ui/dlg/GroupsSorting.cxx -+++ b/reportdesign/source/ui/dlg/GroupsSorting.cxx -@@ -278,7 +278,7 @@ sal_Int8 OFieldExpressionControl::ExecuteDrop( const BrowserExecuteDropEvent& rE - SetNoSelection(); - - TransferableDataHelper aDropped( rEvt.maDropEvent.Transferable ); -- uno::Any aDrop = aDropped.GetAny(OGroupExchange::getReportGroupId()); -+ uno::Any aDrop = aDropped.GetAny(OGroupExchange::getReportGroupId(), OUString()); - uno::Sequence< uno::Any > aGroups; - aDrop >>= aGroups; - if ( aGroups.getLength() ) -@@ -881,7 +881,7 @@ void OFieldExpressionControl::InsertRows( long nRow ) - SotExchange::GetFormatDataFlavor(OGroupExchange::getReportGroupId(), aFlavor); - uno::Sequence< uno::Any > aGroups; - -- if( (aTransferData.GetAny(aFlavor) >>= aGroups) && aGroups.getLength() ) -+ if ((aTransferData.GetAny(aFlavor, OUString()) >>= aGroups) && aGroups.getLength()) - { - m_bIgnoreEvent = false; - { -diff --git a/reportdesign/source/ui/inc/dlgedclip.hxx b/reportdesign/source/ui/inc/dlgedclip.hxx -index 52b7f8d..5ea8eb5 100644 ---- a/reportdesign/source/ui/inc/dlgedclip.hxx -+++ b/reportdesign/source/ui/inc/dlgedclip.hxx -@@ -70,7 +70,7 @@ public: - protected: - // TransferableHelper overridables - virtual void AddSupportedFormats(); -- virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); -+ virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ); - private: - TSectionElements m_aCopyElements; - }; -diff --git a/reportdesign/source/ui/report/dlgedclip.cxx b/reportdesign/source/ui/report/dlgedclip.cxx -index 48b334e..5bcebc9 100644 ---- a/reportdesign/source/ui/report/dlgedclip.cxx -+++ b/reportdesign/source/ui/report/dlgedclip.cxx -@@ -51,15 +51,15 @@ void OReportExchange::AddSupportedFormats() - { - AddFormat(getDescriptorFormatId()); - } --//-------------------------------------------------------------------- --sal_Bool OReportExchange::GetData( const datatransfer::DataFlavor& _rFlavor ) -+ -+sal_Bool OReportExchange::GetData( const datatransfer::DataFlavor& _rFlavor, const OUString& /*rDestDoc*/ ) - { - const sal_uInt32 nFormatId = SotExchange::GetFormat(_rFlavor); - return (nFormatId == getDescriptorFormatId()) ? - SetAny( uno::Any(m_aCopyElements), _rFlavor ) - : sal_False; - } --// ----------------------------------------------------------------------------- -+ - sal_Bool OReportExchange::canExtract(const DataFlavorExVector& _rFlavor) - { - return IsFormatSupported(_rFlavor,getDescriptorFormatId()); -@@ -78,7 +78,7 @@ OReportExchange::TSectionElements OReportExchange::extractCopies(const Transfera - SotExchange::GetFormatDataFlavor(nKnownFormatId, aFlavor); - OSL_ENSURE(bSuccess, "OReportExchange::extractCopies: invalid data format (no flavor)!"); - -- uno::Any aDescriptor = _rData.GetAny(aFlavor); -+ uno::Any aDescriptor = _rData.GetAny(aFlavor, OUString()); - - TSectionElements aCopies; - #if OSL_DEBUG_LEVEL > 0 -diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx -index bfc7a54..1cac044 100644 ---- a/sc/inc/column.hxx -+++ b/sc/inc/column.hxx -@@ -27,6 +27,7 @@ - #include "types.hxx" - #include "mtvelements.hxx" - #include "formula/types.hxx" -+#include - - #include - #include -@@ -226,7 +227,10 @@ public: - SCROW nStartRow, SCROW nEndRow, sal_uInt16 nDelFlag, bool bBroadcast = true ); - void CopyToClip( - sc::CopyToClipContext& rCxt, SCROW nRow1, SCROW nRow2, ScColumn& rColumn ) const; -- void CopyStaticToDocument(SCROW nRow1, SCROW nRow2, ScColumn& rDestCol); -+ -+ void CopyStaticToDocument( -+ SCROW nRow1, SCROW nRow2, const SvNumberFormatterMergeMap& rMap, ScColumn& rDestCol ); -+ - void CopyCellToDocument( SCROW nSrcRow, SCROW nDestRow, ScColumn& rDestCol ); - bool InitBlockPosition( sc::ColumnBlockPosition& rBlockPos ); - bool InitBlockPosition( sc::ColumnBlockConstPosition& rBlockPos ) const; -diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx -index 339bbb0..a2aea94 100644 ---- a/sc/inc/document.hxx -+++ b/sc/inc/document.hxx -@@ -39,6 +39,7 @@ - #include "calcmacros.hxx" - #include - #include -+#include - - #include - #include -diff --git a/sc/inc/table.hxx b/sc/inc/table.hxx -index ba7745d..fe8adb6 100644 ---- a/sc/inc/table.hxx -+++ b/sc/inc/table.hxx -@@ -412,7 +412,11 @@ public: - void DeleteArea(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, sal_uInt16 nDelFlag); - void CopyToClip( sc::CopyToClipContext& rCxt, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, ScTable* pTable ); - void CopyToClip( sc::CopyToClipContext& rCxt, const ScRangeList& rRanges, ScTable* pTable ); -- void CopyStaticToDocument(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, ScTable* pDestTab); -+ -+ void CopyStaticToDocument( -+ SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, const SvNumberFormatterMergeMap& rMap, -+ ScTable* pDestTab ); -+ - void CopyCellToDocument( SCCOL nSrcCol, SCROW nSrcRow, SCCOL nDestCol, SCROW nDestRow, ScTable& rDestTab ); - - bool InitColumnBlockPosition( sc::ColumnBlockPosition& rBlockPos, SCCOL nCol ); -diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx -index 5e5cf43..2d0a018 100644 ---- a/sc/source/core/data/column.cxx -+++ b/sc/source/core/data/column.cxx -@@ -1061,7 +1061,8 @@ void ScColumn::CopyToClip( - rColumn.CellStorageModified(); - } - --void ScColumn::CopyStaticToDocument(SCROW nRow1, SCROW nRow2, ScColumn& rDestCol) -+void ScColumn::CopyStaticToDocument( -+ SCROW nRow1, SCROW nRow2, const SvNumberFormatterMergeMap& rMap, ScColumn& rDestCol ) - { - if (nRow1 > nRow2) - return; -@@ -1170,6 +1171,17 @@ void ScColumn::CopyStaticToDocument(SCROW nRow1, SCROW nRow2, ScColumn& rDestCol - break; - } - -+ // Dont' forget to copy the number formats over. Charts may reference them. -+ for (SCROW nRow = nRow1; nRow <= nRow2; ++nRow) -+ { -+ sal_uInt32 nNumFmt = GetNumberFormat(nRow); -+ SvNumberFormatterMergeMap::const_iterator itNum = rMap.find(nNumFmt); -+ if (itNum != rMap.end()) -+ nNumFmt = itNum->second; -+ -+ rDestCol.SetNumberFormat(nRow, nNumFmt); -+ } -+ - rDestCol.CellStorageModified(); - } - -diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx -index 2ec7d68..b739df7 100644 ---- a/sc/source/core/data/document.cxx -+++ b/sc/source/core/data/document.cxx -@@ -2148,8 +2148,12 @@ void ScDocument::CopyStaticToDocument(const ScRange& rSrcRange, SCTAB nDestTab, - if (!pSrcTab || !pDestTab) - return; - -+ pDestDoc->GetFormatTable()->MergeFormatter(*GetFormatTable()); -+ SvNumberFormatterMergeMap aMap = pDestDoc->GetFormatTable()->ConvertMergeTableToMap(); -+ - pSrcTab->CopyStaticToDocument( -- rSrcRange.aStart.Col(), rSrcRange.aStart.Row(), rSrcRange.aEnd.Col(), rSrcRange.aEnd.Row(), pDestTab); -+ rSrcRange.aStart.Col(), rSrcRange.aStart.Row(), rSrcRange.aEnd.Col(), rSrcRange.aEnd.Row(), -+ aMap, pDestTab); - } - - void ScDocument::CopyCellToDocument( const ScAddress& rSrcPos, const ScAddress& rDestPos, ScDocument& rDestDoc ) -diff --git a/sc/source/core/data/table2.cxx b/sc/source/core/data/table2.cxx -index b858a1c..3f0d190 100644 ---- a/sc/source/core/data/table2.cxx -+++ b/sc/source/core/data/table2.cxx -@@ -554,7 +554,8 @@ void ScTable::CopyToClip( - } - } - --void ScTable::CopyStaticToDocument(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, ScTable* pDestTab) -+void ScTable::CopyStaticToDocument( -+ SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, const SvNumberFormatterMergeMap& rMap, ScTable* pDestTab ) - { - if (nCol1 > nCol2) - return; -@@ -563,7 +564,7 @@ void ScTable::CopyStaticToDocument(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW - { - ScColumn& rSrcCol = aCol[i]; - ScColumn& rDestCol = pDestTab->aCol[i]; -- rSrcCol.CopyStaticToDocument(nRow1, nRow2, rDestCol); -+ rSrcCol.CopyStaticToDocument(nRow1, nRow2, rMap, rDestCol); - } - } - -diff --git a/sc/source/ui/app/drwtrans.cxx b/sc/source/ui/app/drwtrans.cxx -index 63a81c0..9cb5a22 100644 ---- a/sc/source/ui/app/drwtrans.cxx -+++ b/sc/source/ui/app/drwtrans.cxx -@@ -95,7 +95,8 @@ ScDrawTransferObj::ScDrawTransferObj( SdrModel* pClipModel, ScDocShell* pContain - pDragSourceView( NULL ), - nDragSourceFlags( 0 ), - bDragWasInternal( false ), -- nSourceDocID( 0 ) -+ nSourceDocID( 0 ), -+ maShellID(SfxObjectShell::CreateShellID(pContainerShell)) - { - // - // check what kind of objects are contained -@@ -339,12 +340,8 @@ void ScDrawTransferObj::AddSupportedFormats() - AddFormat( SOT_FORMATSTR_ID_OBJECTDESCRIPTOR ); - AddFormat( SOT_FORMAT_GDIMETAFILE ); - -- if ( !aOleData.GetTransferable().is() ) -- { -- SdrOle2Obj* pObj = GetSingleObject(); -- if ( pObj && pObj->GetObjRef().is() ) -- aOleData = TransferableDataHelper( new SvEmbedTransferHelper( pObj->GetObjRef(), pObj->GetGraphic(), pObj->GetAspect() ) ) ; -- } -+ CreateOLEData(); -+ - if ( aOleData.GetTransferable().is() ) - { - // get format list from object snapshot -@@ -376,19 +373,15 @@ void ScDrawTransferObj::AddSupportedFormats() - // AddFormat( SOT_FORMATSTR_ID_SVIM ); - } - --sal_Bool ScDrawTransferObj::GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ) -+sal_Bool ScDrawTransferObj::GetData( -+ const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ) - { - sal_Bool bOK = false; - sal_uInt32 nFormat = SotExchange::GetFormat( rFlavor ); - - if ( bOleObj && nFormat != SOT_FORMAT_GDIMETAFILE ) - { -- if ( !aOleData.GetTransferable().is() ) -- { -- SdrOle2Obj* pObj = GetSingleObject(); -- if ( pObj && pObj->GetObjRef().is() ) -- aOleData = TransferableDataHelper( new SvEmbedTransferHelper( pObj->GetObjRef(), pObj->GetGraphic(), pObj->GetAspect() ) ) ; -- } -+ CreateOLEData(); - - if( aOleData.GetTransferable().is() && aOleData.HasFormat( rFlavor ) ) - { -@@ -400,7 +393,7 @@ sal_Bool ScDrawTransferObj::GetData( const ::com::sun::star::datatransfer::DataF - pModel->SetSwapGraphicsMode( SDR_SWAPGRAPHICSMODE_PURGE ); - } - -- bOK = SetAny( aOleData.GetAny( rFlavor ), rFlavor ); -+ bOK = SetAny( aOleData.GetAny(rFlavor, rDestDoc), rFlavor ); - - if( pModel ) - pModel->SetSwapGraphicsMode( nOldSwapMode ); -@@ -701,6 +694,11 @@ void ScDrawTransferObj::SetDragWasInternal() - bDragWasInternal = sal_True; - } - -+OUString ScDrawTransferObj::GetShellID() const -+{ -+ return maShellID; -+} -+ - SdrOle2Obj* ScDrawTransferObj::GetSingleObject() - { - // if single OLE object was copied, get its object -@@ -719,7 +717,26 @@ SdrOle2Obj* ScDrawTransferObj::GetSingleObject() - return NULL; - } - --// -+void ScDrawTransferObj::CreateOLEData() -+{ -+ if (aOleData.GetTransferable().is()) -+ // Already created. -+ return; -+ -+ SdrOle2Obj* pObj = GetSingleObject(); -+ if (!pObj || !pObj->GetObjRef().is()) -+ // No OLE object present. -+ return; -+ -+ SvEmbedTransferHelper* pEmbedTransfer = -+ new SvEmbedTransferHelper( -+ pObj->GetObjRef(), pObj->GetGraphic(), pObj->GetAspect()); -+ -+ pEmbedTransfer->SetParentShellID(maShellID); -+ -+ aOleData = TransferableDataHelper(pEmbedTransfer); -+} -+ - // initialize aDocShellRef with a live document from the ClipDoc - // - -@@ -740,7 +757,10 @@ void ScDrawTransferObj::InitDocShell() - // SdrExchangeView aDestView( pDestModel ); - SdrView aDestView( pDestModel ); - aDestView.ShowSdrPage(aDestView.GetModel()->GetPage(0)); -- aDestView.Paste( *pModel, Point( aSrcSize.Width()/2, aSrcSize.Height()/2 ) ); -+ aDestView.Paste( -+ *pModel, -+ Point(aSrcSize.Width()/2, aSrcSize.Height()/2), -+ NULL, 0, OUString(), OUString()); - - // put objects to right layer (see ScViewFunc::PasteDataFormat for SOT_FORMATSTR_ID_DRAWING) - -diff --git a/sc/source/ui/app/lnktrans.cxx b/sc/source/ui/app/lnktrans.cxx -index 5733b14..d830e42 100644 ---- a/sc/source/ui/app/lnktrans.cxx -+++ b/sc/source/ui/app/lnktrans.cxx -@@ -55,7 +55,8 @@ void ScLinkTransferObj::AddSupportedFormats() - } - } - --sal_Bool ScLinkTransferObj::GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ) -+sal_Bool ScLinkTransferObj::GetData( -+ const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& /*rDestDoc*/ ) - { - sal_Bool bOK = false; - if ( !aLinkURL.isEmpty() ) -diff --git a/sc/source/ui/app/seltrans.cxx b/sc/source/ui/app/seltrans.cxx -index 679a21e..9bedf0c 100644 ---- a/sc/source/ui/app/seltrans.cxx -+++ b/sc/source/ui/app/seltrans.cxx -@@ -385,7 +385,8 @@ ScDrawTransferObj* ScSelectionTransferObj::GetDrawData() - return pDrawData; - } - --sal_Bool ScSelectionTransferObj::GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ) -+sal_Bool ScSelectionTransferObj::GetData( -+ const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ) - { - sal_Bool bOK = false; - -@@ -412,7 +413,7 @@ sal_Bool ScSelectionTransferObj::GetData( const ::com::sun::star::datatransfer:: - if ( xSource.is() ) - { - TransferableDataHelper aHelper( xSource ); -- uno::Any aAny = aHelper.GetAny( rFlavor ); -+ uno::Any aAny = aHelper.GetAny(rFlavor, rDestDoc); - bOK = SetAny( aAny, rFlavor ); - } - -diff --git a/sc/source/ui/app/transobj.cxx b/sc/source/ui/app/transobj.cxx -index ec6bb4a..ba1aec8 100644 ---- a/sc/source/ui/app/transobj.cxx -+++ b/sc/source/ui/app/transobj.cxx -@@ -246,7 +246,7 @@ void ScTransferObj::AddSupportedFormats() - AddFormat( SOT_FORMATSTR_ID_EDITENGINE ); - } - --sal_Bool ScTransferObj::GetData( const datatransfer::DataFlavor& rFlavor ) -+sal_Bool ScTransferObj::GetData( const datatransfer::DataFlavor& rFlavor, const OUString& /*rDestDoc*/ ) - { - sal_uInt32 nFormat = SotExchange::GetFormat( rFlavor ); - bool bOK = false; -diff --git a/sc/source/ui/inc/drwtrans.hxx b/sc/source/ui/inc/drwtrans.hxx -index 81b7b90..7f4a2c6 100644 ---- a/sc/source/ui/inc/drwtrans.hxx -+++ b/sc/source/ui/inc/drwtrans.hxx -@@ -63,17 +63,20 @@ private: - - ScRangeListVector m_aProtectedChartRangesVector; - -+ OUString maShellID; - - void InitDocShell(); - SdrOle2Obj* GetSingleObject(); - -+ void CreateOLEData(); -+ - public: - ScDrawTransferObj( SdrModel* pClipModel, ScDocShell* pContainerShell, - const TransferableObjectDescriptor& rDesc ); - virtual ~ScDrawTransferObj(); - - virtual void AddSupportedFormats(); -- virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); -+ virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ); - virtual sal_Bool WriteObject( SotStorageStreamRef& rxOStm, void* pUserObject, sal_uInt32 nUserObjectId, - const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); - virtual void ObjectReleased(); -@@ -87,6 +90,8 @@ public: - void SetDragSourceFlags( sal_uInt16 nFlags ); - void SetDragWasInternal(); - -+ OUString GetShellID() const; -+ - SdrView* GetDragSourceView() { return pDragSourceView; } - sal_uInt16 GetDragSourceFlags() const { return nDragSourceFlags; } - -diff --git a/sc/source/ui/inc/lnktrans.hxx b/sc/source/ui/inc/lnktrans.hxx -index d9ccdeb..1f13e8a 100644 ---- a/sc/source/ui/inc/lnktrans.hxx -+++ b/sc/source/ui/inc/lnktrans.hxx -@@ -36,7 +36,7 @@ public: - void SetLinkURL( const OUString& rURL, const OUString& rText ); - - virtual void AddSupportedFormats(); -- virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); -+ virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ); - virtual void ObjectReleased(); - virtual void DragFinished( sal_Int8 nDropAction ); - }; -diff --git a/sc/source/ui/inc/seltrans.hxx b/sc/source/ui/inc/seltrans.hxx -index ba4e184..ec2b6ac 100644 ---- a/sc/source/ui/inc/seltrans.hxx -+++ b/sc/source/ui/inc/seltrans.hxx -@@ -65,7 +65,7 @@ public: - ScDrawTransferObj* GetDrawData(); - - virtual void AddSupportedFormats(); -- virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); -+ virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ); - virtual void ObjectReleased(); - }; - -diff --git a/sc/source/ui/inc/transobj.hxx b/sc/source/ui/inc/transobj.hxx -index 9bd0d12..5ae33d0 100644 ---- a/sc/source/ui/inc/transobj.hxx -+++ b/sc/source/ui/inc/transobj.hxx -@@ -72,7 +72,7 @@ public: - virtual ~ScTransferObj(); - - virtual void AddSupportedFormats(); -- virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); -+ virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ); - virtual sal_Bool WriteObject( SotStorageStreamRef& rxOStm, void* pUserObject, sal_uInt32 nUserObjectId, - const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); - virtual void ObjectReleased(); -diff --git a/sc/source/ui/inc/viewfunc.hxx b/sc/source/ui/inc/viewfunc.hxx -index 0e28bb5..c598884 100644 ---- a/sc/source/ui/inc/viewfunc.hxx -+++ b/sc/source/ui/inc/viewfunc.hxx -@@ -115,8 +115,8 @@ public: - ::com::sun::star::datatransfer::XTransferable >& rxTransferable ); - - void PasteDraw(); -- void PasteDraw( const Point& rLogicPos, SdrModel* pModel, -- sal_Bool bGroup = false, sal_Bool bSameDocClipboard = false ); -+ void PasteDraw( const Point& rLogicPos, SdrModel* pModel, bool bGroup, -+ const OUString& rSrcShellID, const OUString& rDestShellID ); - - sal_Bool PasteOnDrawObject( const ::com::sun::star::uno::Reference< - ::com::sun::star::datatransfer::XTransferable >& rxTransferable, -diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx -index 1fa83c5..cd38c6d 100644 ---- a/sc/source/ui/view/gridwin.cxx -+++ b/sc/source/ui/view/gridwin.cxx -@@ -4412,7 +4412,8 @@ sal_Int8 ScGridWindow::ExecuteDrop( const ExecuteDropEvent& rEvt ) - - bPasteIsMove = bIsMove; - -- pViewData->GetView()->PasteDraw( aLogicPos, rData.pDrawTransfer->GetModel() ); -+ pViewData->GetView()->PasteDraw( -+ aLogicPos, rData.pDrawTransfer->GetModel(), false, "A", "B"); - - if (bPasteIsMove) - rData.pDrawTransfer->SetDragWasInternal(); -@@ -4517,8 +4518,9 @@ void ScGridWindow::PasteSelection( const Point& rPosPixel ) - - // bSameDocClipboard argument for PasteDraw is needed - // because only DragData is checked directly inside PasteDraw -- pViewData->GetView()->PasteDraw( aLogicPos, pDrawTransfer->GetModel(), false, -- pDrawTransfer->GetSourceDocID() == pViewData->GetDocument()->GetDocumentID() ); -+ pViewData->GetView()->PasteDraw( -+ aLogicPos, pDrawTransfer->GetModel(), false, -+ pDrawTransfer->GetShellID(), SfxObjectShell::CreateShellID(pViewData->GetDocShell())); - } - } - } -diff --git a/sc/source/ui/view/viewfun3.cxx b/sc/source/ui/view/viewfun3.cxx -index f8454d3..5cb568d 100644 ---- a/sc/source/ui/view/viewfun3.cxx -+++ b/sc/source/ui/view/viewfun3.cxx -@@ -449,8 +449,11 @@ void ScViewFunc::PasteDraw() - pViewData->GetActivePart() ) ); - ScDrawTransferObj* pDrawClip = ScDrawTransferObj::GetOwnClipboard( pWin ); - if (pDrawClip) -- PasteDraw( aPos, pDrawClip->GetModel(), false, -- pDrawClip->GetSourceDocID() == pViewData->GetDocument()->GetDocumentID() ); -+ { -+ OUString aSrcShellID = pDrawClip->GetShellID(); -+ OUString aDestShellID = SfxObjectShell::CreateShellID(pViewData->GetDocShell()); -+ PasteDraw(aPos, pDrawClip->GetModel(), false, aSrcShellID, aDestShellID); -+ } - } - - void ScViewFunc::PasteFromSystem() -@@ -586,7 +589,9 @@ void ScViewFunc::PasteFromTransferable( const uno::ReferenceGetCurY(); - Window* pWin = GetActiveWin(); - Point aPos = pWin->PixelToLogic( pViewData->GetScrPos( nPosX, nPosY, pViewData->GetActivePart() ) ); -- PasteDraw( aPos, pDrawClip->GetModel(), false, pDrawClip->GetSourceDocID() == pViewData->GetDocument()->GetDocumentID() ); -+ PasteDraw( -+ aPos, pDrawClip->GetModel(), false, -+ pDrawClip->GetShellID(), SfxObjectShell::CreateShellID(pViewData->GetDocShell())); - } - else - { -diff --git a/sc/source/ui/view/viewfun5.cxx b/sc/source/ui/view/viewfun5.cxx -index 9319bd6..d5c3298 100644 ---- a/sc/source/ui/view/viewfun5.cxx -+++ b/sc/source/ui/view/viewfun5.cxx -@@ -120,8 +120,10 @@ sal_Bool ScViewFunc::PasteDataFormat( sal_uLong nFormatId, - uno::Reference < io::XInputStream > xStm; - TransferableObjectDescriptor aObjDesc; - -- if( aDataHelper.GetTransferableObjectDescriptor( SOT_FORMATSTR_ID_OBJECTDESCRIPTOR, aObjDesc ) && -- aDataHelper.GetInputStream( nFormatId, xStm ) ) -+ if (aDataHelper.GetTransferableObjectDescriptor(SOT_FORMATSTR_ID_OBJECTDESCRIPTOR, aObjDesc)) -+ xStm = aDataHelper.GetInputStream(nFormatId, OUString()); -+ -+ if (xStm.is()) - { - if ( aObjDesc.maClassName == SvGlobalName( SO3_SC_CLASSID_60 ) ) - { -@@ -205,9 +207,11 @@ sal_Bool ScViewFunc::PasteDataFormat( sal_uLong nFormatId, - { - OUString aName; - uno::Reference < embed::XEmbeddedObject > xObj; -+ xStm = aDataHelper.GetInputStream(SOT_FORMATSTR_ID_EMBED_SOURCE_OLE, OUString()); -+ if (!xStm.is()) -+ aDataHelper.GetInputStream(SOT_FORMATSTR_ID_EMBEDDED_OBJ_OLE, OUString()); - -- if ( aDataHelper.GetInputStream( SOT_FORMATSTR_ID_EMBED_SOURCE_OLE, xStm ) -- || aDataHelper.GetInputStream( SOT_FORMATSTR_ID_EMBEDDED_OBJ_OLE, xStm ) ) -+ if (xStm.is()) - { - xObj = GetViewData()->GetDocShell()->GetEmbeddedObjectContainer().InsertEmbeddedObject( xStm, aName ); - } -@@ -515,7 +519,7 @@ sal_Bool ScViewFunc::PasteDataFormat( sal_uLong nFormatId, - nObjCount += pPage->GetObjCount(); // count group object only once - } - -- PasteDraw( aPos, pModel, (nObjCount > 1) ); // grouped if more than 1 object -+ PasteDraw(aPos, pModel, (nObjCount > 1), "A", "B"); // grouped if more than 1 object - delete pModel; - aDragShellRef->DoClose(); - bRet = sal_True; -@@ -525,8 +529,8 @@ sal_Bool ScViewFunc::PasteDataFormat( sal_uLong nFormatId, - { - // do excel import into a clipboard document - //TODO/MBA: testing -- uno::Reference < io::XInputStream > xStm; -- if( aDataHelper.GetInputStream( nFormatId, xStm ) ) -+ uno::Reference xStm = aDataHelper.GetInputStream(nFormatId, OUString()); -+ if (xStm.is()) - { - ScDocument* pInsDoc = new ScDocument( SCDOCMODE_CLIP ); - SCTAB nSrcTab = 0; // Biff5 in clipboard: always sheet 0 -@@ -626,8 +630,8 @@ bool ScViewFunc::PasteLink( const uno::Reference& r - // get link data from transferable before string data, - // so the source knows it will be used for a link - -- uno::Sequence aSequence; -- if ( !aDataHelper.GetSequence( SOT_FORMATSTR_ID_LINK, aSequence ) ) -+ uno::Sequence aSequence = aDataHelper.GetSequence(SOT_FORMATSTR_ID_LINK, OUString()); -+ if (!aSequence.getLength()) - { - OSL_FAIL("DDE Data not found."); - return false; -diff --git a/sc/source/ui/view/viewfun7.cxx b/sc/source/ui/view/viewfun7.cxx -index 1904bce..7506f02 100644 ---- a/sc/source/ui/view/viewfun7.cxx -+++ b/sc/source/ui/view/viewfun7.cxx -@@ -73,8 +73,10 @@ static void lcl_AdjustInsertPos( ScViewData* pData, Point& rPos, Size& rSize ) - } - - void ScViewFunc::PasteDraw( const Point& rLogicPos, SdrModel* pModel, -- sal_Bool bGroup, sal_Bool bSameDocClipboard ) -+ bool bGroup, const OUString& rSrcShellID, const OUString& rDestShellID ) - { -+ bool bSameDocClipboard = rSrcShellID == rDestShellID; -+ - MakeDrawLayer(); - Point aPos( rLogicPos ); - -@@ -219,7 +221,7 @@ void ScViewFunc::PasteDraw( const Point& rLogicPos, SdrModel* pModel, - if ( !bSameDocClipboard ) - GetViewData()->GetDocument()->SetPastingDrawFromOtherDoc( sal_True ); - -- pScDrawView->Paste( *pModel, aPos, NULL, nOptions ); -+ pScDrawView->Paste(*pModel, aPos, NULL, nOptions, rSrcShellID, rDestShellID); - - if ( !bSameDocClipboard ) - GetViewData()->GetDocument()->SetPastingDrawFromOtherDoc( false ); -diff --git a/sd/source/core/drawdoc3.cxx b/sd/source/core/drawdoc3.cxx -index 2dcf5fa..2a24f4e 100644 ---- a/sd/source/core/drawdoc3.cxx -+++ b/sd/source/core/drawdoc3.cxx -@@ -1049,7 +1049,7 @@ sal_Bool SdDrawDocument::InsertBookmarkAsObject( - pBMView->GetDoc().SetAllocDocSh(true); - - SdDrawDocument* pTmpDoc = (SdDrawDocument*) pBMView->GetMarkedObjModel(); -- bOK = pView->Paste(*pTmpDoc, aObjPos, pPage); -+ bOK = pView->Paste(*pTmpDoc, aObjPos, pPage, 0, OUString(), OUString()); - - if (bOLEObjFound) - pBMView->GetDoc().SetAllocDocSh(false); -diff --git a/sd/source/ui/app/sdxfer.cxx b/sd/source/ui/app/sdxfer.cxx -index d618df4..bd538b0 100644 ---- a/sd/source/ui/app/sdxfer.cxx -+++ b/sd/source/ui/app/sdxfer.cxx -@@ -439,7 +439,7 @@ void SdTransferable::AddSupportedFormats() - } - } - --sal_Bool SdTransferable::GetData( const DataFlavor& rFlavor ) -+sal_Bool SdTransferable::GetData( const DataFlavor& rFlavor, const OUString& rDestDoc ) - { - if (SD_MOD()==NULL) - return sal_False; -@@ -467,7 +467,7 @@ sal_Bool SdTransferable::GetData( const DataFlavor& rFlavor ) - if( nFormat == FORMAT_GDIMETAFILE && mpGraphic ) - bOK = SetGDIMetaFile( mpGraphic->GetGDIMetaFile(), rFlavor ); - else -- bOK = SetAny( mpOLEDataHelper->GetAny( rFlavor ), rFlavor ); -+ bOK = SetAny( mpOLEDataHelper->GetAny(rFlavor, rDestDoc), rFlavor ); - - if( mpSdDrawDocumentIntern ) - mpSdDrawDocumentIntern->SetSwapGraphicsMode( nOldSwapMode ); -diff --git a/sd/source/ui/dlg/sdtreelb.cxx b/sd/source/ui/dlg/sdtreelb.cxx -index 311d178..641da0a 100644 ---- a/sd/source/ui/dlg/sdtreelb.cxx -+++ b/sd/source/ui/dlg/sdtreelb.cxx -@@ -124,7 +124,8 @@ void SdPageObjsTLB::SdPageObjsTransferable::AddSupportedFormats() - - // ----------------------------------------------------------------------------- - --sal_Bool SdPageObjsTLB::SdPageObjsTransferable::GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ) -+sal_Bool SdPageObjsTLB::SdPageObjsTransferable::GetData( -+ const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& /*rDestDoc*/ ) - { - sal_uLong nFormatId = SotExchange::GetFormat( rFlavor ); - switch (nFormatId) -diff --git a/sd/source/ui/inc/TabControl.hxx b/sd/source/ui/inc/TabControl.hxx -index 4f45c09..1fa16bc 100644 ---- a/sd/source/ui/inc/TabControl.hxx -+++ b/sd/source/ui/inc/TabControl.hxx -@@ -93,7 +93,7 @@ private: - virtual ~TabControlTransferable(); - - virtual void AddSupportedFormats(); -- virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); -+ virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ); - virtual void DragFinished( sal_Int8 nDropAction ); - - }; -diff --git a/sd/source/ui/inc/View.hxx b/sd/source/ui/inc/View.hxx -index 239b8fa..3b2c99a 100644 ---- a/sd/source/ui/inc/View.hxx -+++ b/sd/source/ui/inc/View.hxx -@@ -172,7 +172,9 @@ public: - virtual void onAccessibilityOptionsChanged(); - - virtual SdrModel* GetMarkedObjModel() const; -- virtual sal_Bool Paste(const SdrModel& rMod, const Point& rPos, SdrObjList* pLst=NULL, sal_uInt32 nOptions=0); -+ virtual sal_Bool Paste( -+ const SdrModel& rMod, const Point& rPos, SdrObjList* pLst, sal_uInt32 nOptions, -+ const OUString& rSrcShellID, const OUString& rDestShellID ); - using SdrExchangeView::Paste; - - /** returns true if we have an undo manager and there is an open list undo action */ -diff --git a/sd/source/ui/inc/sdtreelb.hxx b/sd/source/ui/inc/sdtreelb.hxx -index 252a403..4b1fb6f 100644 ---- a/sd/source/ui/inc/sdtreelb.hxx -+++ b/sd/source/ui/inc/sdtreelb.hxx -@@ -97,7 +97,7 @@ public: - SAL_DLLPRIVATE virtual ~SdPageObjsTransferable(); - - SAL_DLLPRIVATE virtual void AddSupportedFormats(); -- SAL_DLLPRIVATE virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); -+ SAL_DLLPRIVATE virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ); - SAL_DLLPRIVATE virtual void DragFinished( sal_Int8 nDropAction ); - - SAL_DLLPRIVATE virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& rId ) throw( ::com::sun::star::uno::RuntimeException ); -diff --git a/sd/source/ui/inc/sdxfer.hxx b/sd/source/ui/inc/sdxfer.hxx -index 40c624e1..299f876 100644 ---- a/sd/source/ui/inc/sdxfer.hxx -+++ b/sd/source/ui/inc/sdxfer.hxx -@@ -109,7 +109,7 @@ public: - protected: - - virtual void AddSupportedFormats(); -- virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); -+ virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ); - virtual sal_Bool WriteObject( SotStorageStreamRef& rxOStm, void* pUserObject, sal_uInt32 nUserObjectId, const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); - virtual void ObjectReleased(); - -diff --git a/sd/source/ui/view/sdview2.cxx b/sd/source/ui/view/sdview2.cxx -index 2572576..148fa45 100644 ---- a/sd/source/ui/view/sdview2.cxx -+++ b/sd/source/ui/view/sdview2.cxx -@@ -977,9 +977,11 @@ SdrModel* View::GetMarkedObjModel() const - return FmFormView::GetMarkedObjModel();; - } - --sal_Bool View::Paste(const SdrModel& rMod, const Point& rPos, SdrObjList* pLst /* =NULL */, sal_uInt32 nOptions /* =0 */) -+sal_Bool View::Paste( -+ const SdrModel& rMod, const Point& rPos, SdrObjList* pLst, sal_uInt32 nOptions, -+ const OUString& rSrcShellID, const OUString& rDestShellID ) - { -- return FmFormView::Paste( rMod, rPos, pLst,nOptions );; -+ return FmFormView::Paste(rMod, rPos, pLst, nOptions, rSrcShellID, rDestShellID); - } - - } // end of namespace sd -diff --git a/sd/source/ui/view/sdview3.cxx b/sd/source/ui/view/sdview3.cxx -index 0aecf6a..9987aa5 100644 ---- a/sd/source/ui/view/sdview3.cxx -+++ b/sd/source/ui/view/sdview3.cxx -@@ -602,7 +602,7 @@ sal_Bool View::InsertData( const TransferableDataHelper& rDataHelper, - SdDrawDocument* pSourceDoc = (SdDrawDocument*) pSourceView->GetModel(); - pSourceDoc->CreatingDataObj( pOwnData ); - SdDrawDocument* pModel = (SdDrawDocument*) pSourceView->GetMarkedObjModel(); -- bReturn = Paste( *pModel, maDropPos, pPage, nPasteOptions ); -+ bReturn = Paste(*pModel, maDropPos, pPage, nPasteOptions, OUString(), OUString()); - - if( !pPage ) - pPage = (SdPage*) GetSdrPageView()->GetPage(); -@@ -643,7 +643,7 @@ sal_Bool View::InsertData( const TransferableDataHelper& rDataHelper, - pWorkModel->DeletePage( (sal_uInt16) i ); - } - -- bReturn = Paste( *pWorkModel, maDropPos, pPage, nPasteOptions ); -+ bReturn = Paste(*pWorkModel, maDropPos, pPage, nPasteOptions, OUString(), OUString()); - - if( !pPage ) - pPage = (SdPage*) GetSdrPageView()->GetPage(); -@@ -802,7 +802,7 @@ sal_Bool View::InsertData( const TransferableDataHelper& rDataHelper, - maDropPos.Y() = pOwnData->GetStartPos().Y() + ( aSize.Height() >> 1 ); - } - -- bReturn = Paste( *pModel, maDropPos, pPage, nPasteOptions ); -+ bReturn = Paste(*pModel, maDropPos, pPage, nPasteOptions, OUString(), OUString()); - } - - xShell->DoClose(); -@@ -843,9 +843,15 @@ sal_Bool View::InsertData( const TransferableDataHelper& rDataHelper, - uno::Reference < io::XInputStream > xStm; - TransferableObjectDescriptor aObjDesc; - -- if( aDataHelper.GetTransferableObjectDescriptor( SOT_FORMATSTR_ID_OBJECTDESCRIPTOR, aObjDesc ) && -- ( aDataHelper.GetInputStream( nFormat ? nFormat : SOT_FORMATSTR_ID_EMBED_SOURCE, xStm ) || -- aDataHelper.GetInputStream( SOT_FORMATSTR_ID_EMBEDDED_OBJ, xStm ) ) ) -+ if (aDataHelper.GetTransferableObjectDescriptor(SOT_FORMATSTR_ID_OBJECTDESCRIPTOR, aObjDesc)) -+ { -+ OUString aDocShellID = SfxObjectShell::CreateShellID(mrDoc.GetDocSh()); -+ xStm = aDataHelper.GetInputStream(nFormat ? nFormat : SOT_FORMATSTR_ID_EMBED_SOURCE, aDocShellID); -+ if (!xStm.is()) -+ xStm = aDataHelper.GetInputStream(SOT_FORMATSTR_ID_EMBEDDED_OBJ, aDocShellID); -+ } -+ -+ if (xStm.is()) - { - if( mrDoc.GetDocSh() && ( mrDoc.GetDocSh()->GetClassName() == aObjDesc.maClassName ) ) - { -@@ -879,7 +885,7 @@ sal_Bool View::InsertData( const TransferableDataHelper& rDataHelper, - pModel->DeletePage( (sal_uInt16) i ); - } - -- bReturn = Paste( *pModel, maDropPos, pPage, nPasteOptions ); -+ bReturn = Paste(*pModel, maDropPos, pPage, nPasteOptions, OUString(), OUString()); - - if( !pPage ) - pPage = (SdPage*) GetSdrPageView()->GetPage(); -@@ -1028,8 +1034,11 @@ sal_Bool View::InsertData( const TransferableDataHelper& rDataHelper, - uno::Reference < embed::XEmbeddedObject > xObj; - OUString aName; - -- if ( aDataHelper.GetInputStream( nFormat ? nFormat : SOT_FORMATSTR_ID_EMBED_SOURCE_OLE, xStm ) || -- aDataHelper.GetInputStream( SOT_FORMATSTR_ID_EMBEDDED_OBJ_OLE, xStm ) ) -+ xStm = aDataHelper.GetInputStream(nFormat ? nFormat : SOT_FORMATSTR_ID_EMBED_SOURCE_OLE, OUString()); -+ if (!xStm.is()) -+ xStm = aDataHelper.GetInputStream(SOT_FORMATSTR_ID_EMBEDDED_OBJ_OLE, OUString()); -+ -+ if (xStm.is()) - { - xObj = mpDocSh->GetEmbeddedObjectContainer().InsertEmbeddedObject( xStm, aName ); - } -@@ -1505,7 +1514,7 @@ bool View::PasteRTFTable( SotStorageStreamRef xStm, SdrPage* pPage, sal_uLong nP - pModel->setUnoModel( Reference< XInterface >::query( xComponent ) ); - - CreateTableFromRTF( *xStm, pModel ); -- bool bRet = Paste( *pModel, maDropPos, pPage, nPasteOptions ); -+ bool bRet = Paste(*pModel, maDropPos, pPage, nPasteOptions, OUString(), OUString()); - - xComponent->dispose(); - xComponent.clear(); -diff --git a/sd/source/ui/view/tabcontr.cxx b/sd/source/ui/view/tabcontr.cxx -index 0dec8d6..f963d33 100644 ---- a/sd/source/ui/view/tabcontr.cxx -+++ b/sd/source/ui/view/tabcontr.cxx -@@ -62,7 +62,7 @@ void TabControl::TabControlTransferable::AddSupportedFormats() - - // ----------------------------------------------------------------------------- - --sal_Bool TabControl::TabControlTransferable::GetData( const ::com::sun::star::datatransfer::DataFlavor& ) -+sal_Bool TabControl::TabControlTransferable::GetData( const ::com::sun::star::datatransfer::DataFlavor&, const OUString& /*rDestDoc*/ ) - { - return sal_False; - } -diff --git a/sfx2/source/doc/objxtor.cxx b/sfx2/source/doc/objxtor.cxx -index befa7ae..91a20e3 100644 ---- a/sfx2/source/doc/objxtor.cxx -+++ b/sfx2/source/doc/objxtor.cxx -@@ -480,7 +480,24 @@ bool SfxObjectShell::Close() - return true; - } - --//-------------------------------------------------------------------- -+OUString SfxObjectShell::CreateShellID( const SfxObjectShell* pShell ) -+{ -+ if (!pShell) -+ return OUString(); -+ -+ OUString aShellID; -+ -+ SfxMedium* pMedium = pShell->GetMedium(); -+ if (pMedium) -+ aShellID = pMedium->GetBaseURL(); -+ -+ if (!aShellID.isEmpty()) -+ return aShellID; -+ -+ sal_Int64 nShellID = reinterpret_cast(pShell); -+ aShellID = "0x" + OUString::number(nShellID, 16); -+ return aShellID; -+} - - // returns a pointer the first SfxDocument of specified type - -diff --git a/starmath/source/view.cxx b/starmath/source/view.cxx -index 445b0be..0bc05d1 100644 ---- a/starmath/source/view.cxx -+++ b/starmath/source/view.cxx -@@ -1607,8 +1607,10 @@ void SmViewShell::Execute(SfxRequest& rReq) - if( aData.GetTransferable().is() && - ( aData.HasFormat( nId = SOT_FORMATSTR_ID_EMBEDDED_OBJ ) || - (aData.HasFormat( SOT_FORMATSTR_ID_OBJECTDESCRIPTOR ) && -- aData.HasFormat( nId = SOT_FORMATSTR_ID_EMBED_SOURCE ))) && -- aData.GetInputStream( nId, xStrm ) && xStrm.is() ) -+ aData.HasFormat( nId = SOT_FORMATSTR_ID_EMBED_SOURCE )))) -+ xStrm = aData.GetInputStream(nId, OUString()); -+ -+ if (xStrm.is()) - { - try - { -diff --git a/svtools/source/contnr/treelistbox.cxx b/svtools/source/contnr/treelistbox.cxx -index ec29608..7729ae2 100644 ---- a/svtools/source/contnr/treelistbox.cxx -+++ b/svtools/source/contnr/treelistbox.cxx -@@ -1301,9 +1301,8 @@ sal_Int8 SvTreeListBox::ExecuteDrop( const ExecuteDropEvent& rEvt, SvTreeListBox - TransferableDataHelper aData( rEvt.maDropEvent.Transferable ); - if( aData.HasFormat( SOT_FORMATSTR_ID_TREELISTBOX )) - { -- ::com::sun::star::uno::Sequence< sal_Int8 > aSeq; -- if( aData.GetSequence( SOT_FORMATSTR_ID_TREELISTBOX, aSeq ) && -- sizeof(SvLBoxDDInfo) == aSeq.getLength() ) -+ css::uno::Sequence aSeq = aData.GetSequence(SOT_FORMATSTR_ID_TREELISTBOX, OUString()); -+ if (sizeof(SvLBoxDDInfo) == aSeq.getLength()) - { - memcpy( &aDDInfo, aSeq.getConstArray(), sizeof(SvLBoxDDInfo) ); - nRet = rEvt.mnAction; -diff --git a/svtools/source/dialogs/insdlg.cxx b/svtools/source/dialogs/insdlg.cxx -index a9e441a..4f33480 100644 ---- a/svtools/source/dialogs/insdlg.cxx -+++ b/svtools/source/dialogs/insdlg.cxx -@@ -294,7 +294,7 @@ sal_Bool SvPasteObjectHelper::GetEmbeddedName(const TransferableDataHelper& rDat - - uno::Any aAny; - if( rData.HasFormat( aFlavor ) && -- ( aAny = rData.GetAny( aFlavor ) ).hasValue() ) -+ ( aAny = rData.GetAny(aFlavor, OUString()) ).hasValue() ) - { - uno::Sequence< sal_Int8 > anySequence; - aAny >>= anySequence; -diff --git a/svtools/source/misc/embedtransfer.cxx b/svtools/source/misc/embedtransfer.cxx -index 7ccbfe5..e7a572e 100644 ---- a/svtools/source/misc/embedtransfer.cxx -+++ b/svtools/source/misc/embedtransfer.cxx -@@ -65,7 +65,10 @@ SvEmbedTransferHelper::~SvEmbedTransferHelper() - } - } - --// ----------------------------------------------------------------------------- -+void SvEmbedTransferHelper::SetParentShellID( const OUString& rShellID ) -+{ -+ maParentShellID = rShellID; -+} - - void SvEmbedTransferHelper::AddSupportedFormats() - { -@@ -76,7 +79,8 @@ void SvEmbedTransferHelper::AddSupportedFormats() - - // ----------------------------------------------------------------------------- - --sal_Bool SvEmbedTransferHelper::GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ) -+sal_Bool SvEmbedTransferHelper::GetData( -+ const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ) - { - sal_Bool bRet = sal_False; - -@@ -109,7 +113,12 @@ sal_Bool SvEmbedTransferHelper::GetData( const ::com::sun::star::datatransfer::D - SvStream* pStream = NULL; - sal_Bool bDeleteStream = sal_False; - uno::Sequence < beans::PropertyValue > aEmpty; -- xPers->storeToEntry( xStg, aName, aEmpty, aEmpty ); -+ uno::Sequence aObjArgs(2); -+ aObjArgs[0].Name = "SourceShellID"; -+ aObjArgs[0].Value <<= maParentShellID; -+ aObjArgs[1].Name = "DestinationShellID"; -+ aObjArgs[1].Value <<= rDestDoc; -+ xPers->storeToEntry(xStg, aName, aEmpty, aObjArgs); - if ( xStg->isStreamElement( aName ) ) - { - uno::Reference < io::XStream > xStm = xStg->cloneStreamElement( aName ); -diff --git a/svtools/source/misc/stringtransfer.cxx b/svtools/source/misc/stringtransfer.cxx -index 579a999..687b1a9 100644 ---- a/svtools/source/misc/stringtransfer.cxx -+++ b/svtools/source/misc/stringtransfer.cxx -@@ -43,8 +43,7 @@ namespace svt - AddFormat(SOT_FORMAT_STRING); - } - -- //-------------------------------------------------------------------- -- sal_Bool OStringTransferable::GetData( const DataFlavor& _rFlavor ) -+ sal_Bool OStringTransferable::GetData( const DataFlavor& _rFlavor, const OUString& /*rDestDoc*/ ) - { - sal_uInt32 nFormat = SotExchange::GetFormat( _rFlavor ); - if (SOT_FORMAT_STRING == nFormat) -diff --git a/svtools/source/misc/transfer.cxx b/svtools/source/misc/transfer.cxx -index 73537b6..dd5e54c 100644 ---- a/svtools/source/misc/transfer.cxx -+++ b/svtools/source/misc/transfer.cxx -@@ -45,6 +45,7 @@ - #include - #include - #include -+#include - #include - #include - -@@ -338,6 +339,12 @@ TransferableHelper::~TransferableHelper() - - Any SAL_CALL TransferableHelper::getTransferData( const DataFlavor& rFlavor ) throw( UnsupportedFlavorException, IOException, RuntimeException ) - { -+ return getTransferData2(rFlavor, OUString()); -+} -+ -+Any SAL_CALL TransferableHelper::getTransferData2( const DataFlavor& rFlavor, const OUString& rDestDoc ) -+ throw (UnsupportedFlavorException, IOException, RuntimeException) -+{ - if( !maAny.hasValue() || !mpFormats->size() || ( maLastFormat != rFlavor.MimeType ) ) - { - const SolarMutexGuard aGuard; -@@ -358,21 +365,21 @@ Any SAL_CALL TransferableHelper::getTransferData( const DataFlavor& rFlavor ) th - if( SotExchange::GetFormatDataFlavor( FORMAT_STRING, aSubstFlavor ) && - TransferableDataHelper::IsEqual( aSubstFlavor, rFlavor ) ) - { -- GetData( aSubstFlavor ); -+ GetData(aSubstFlavor, rDestDoc); - bDone = maAny.hasValue(); - } - else if(SotExchange::GetFormatDataFlavor(SOT_FORMATSTR_ID_BMP, aSubstFlavor ) - && TransferableDataHelper::IsEqual( aSubstFlavor, rFlavor ) - && SotExchange::GetFormatDataFlavor(FORMAT_BITMAP, aSubstFlavor)) - { -- GetData( aSubstFlavor ); -- bDone = sal_True; -+ GetData(aSubstFlavor, rDestDoc); -+ bDone = true; - } - else if( SotExchange::GetFormatDataFlavor( SOT_FORMATSTR_ID_EMF, aSubstFlavor ) && - TransferableDataHelper::IsEqual( aSubstFlavor, rFlavor ) && - SotExchange::GetFormatDataFlavor( FORMAT_GDIMETAFILE, aSubstFlavor ) ) - { -- GetData( aSubstFlavor ); -+ GetData(aSubstFlavor, rDestDoc); - - if( maAny.hasValue() ) - { -@@ -402,7 +409,7 @@ Any SAL_CALL TransferableHelper::getTransferData( const DataFlavor& rFlavor ) th - TransferableDataHelper::IsEqual( aSubstFlavor, rFlavor ) && - SotExchange::GetFormatDataFlavor( FORMAT_GDIMETAFILE, aSubstFlavor ) ) - { -- GetData( aSubstFlavor ); -+ GetData(aSubstFlavor, rDestDoc); - - if( maAny.hasValue() ) - { -@@ -435,7 +442,7 @@ Any SAL_CALL TransferableHelper::getTransferData( const DataFlavor& rFlavor ) th - - // if any is not yet filled, use standard format - if( !maAny.hasValue() ) -- GetData( rFlavor ); -+ GetData(rFlavor, rDestDoc); - - #ifdef DEBUG - if( maAny.hasValue() && ::com::sun::star::uno::TypeClass_STRING != maAny.getValueType().getTypeClass() ) -@@ -1573,13 +1580,13 @@ Reference< XTransferable > TransferableDataHelper::GetXTransferable() const - - // ----------------------------------------------------------------------------- - --Any TransferableDataHelper::GetAny( SotFormatStringId nFormat ) const -+Any TransferableDataHelper::GetAny( SotFormatStringId nFormat, const OUString& rDestDoc ) const - { - Any aReturn; - - DataFlavor aFlavor; - if ( SotExchange::GetFormatDataFlavor( nFormat, aFlavor ) ) -- aReturn = GetAny( aFlavor ); -+ aReturn = GetAny(aFlavor, rDestDoc); - - return aReturn; - } -@@ -1587,7 +1594,7 @@ Any TransferableDataHelper::GetAny( SotFormatStringId nFormat ) const - - // ----------------------------------------------------------------------------- - --Any TransferableDataHelper::GetAny( const DataFlavor& rFlavor ) const -+Any TransferableDataHelper::GetAny( const DataFlavor& rFlavor, const OUString& rDestDoc ) const - { - ::osl::MutexGuard aGuard( mpImpl->maMutex ); - Any aRet; -@@ -1598,13 +1605,20 @@ Any TransferableDataHelper::GetAny( const DataFlavor& rFlavor ) const - { - const SotFormatStringId nRequestFormat = SotExchange::GetFormat( rFlavor ); - -+ Reference xTransfer2(mxTransfer, UNO_QUERY); -+ - if( nRequestFormat ) - { - // try to get alien format first - for (DataFlavorExVector::const_iterator aIter( mpFormats->begin() ), aEnd( mpFormats->end() ); aIter != aEnd ; ++aIter) - { - if( ( nRequestFormat == (*aIter).mnSotId ) && !rFlavor.MimeType.equalsIgnoreAsciiCase( (*aIter).MimeType ) ) -- aRet = mxTransfer->getTransferData( *aIter ); -+ { -+ if (xTransfer2.is()) -+ aRet = xTransfer2->getTransferData2(*aIter, rDestDoc); -+ else -+ aRet = mxTransfer->getTransferData(*aIter); -+ } - - if( aRet.hasValue() ) - break; -@@ -1612,7 +1626,12 @@ Any TransferableDataHelper::GetAny( const DataFlavor& rFlavor ) const - } - - if( !aRet.hasValue() ) -- aRet = mxTransfer->getTransferData( rFlavor ); -+ { -+ if (xTransfer2.is()) -+ aRet = xTransfer2->getTransferData2(rFlavor, rDestDoc); -+ else -+ aRet = mxTransfer->getTransferData(rFlavor); -+ } - } - } - catch( const ::com::sun::star::uno::Exception& ) -@@ -1634,8 +1653,8 @@ sal_Bool TransferableDataHelper::GetString( SotFormatStringId nFormat, OUString& - - sal_Bool TransferableDataHelper::GetString( const DataFlavor& rFlavor, OUString& rStr ) - { -- Any aAny( GetAny( rFlavor ) ); -- sal_Bool bRet = sal_False; -+ Any aAny = GetAny(rFlavor, OUString()); -+ bool bRet = false; - - if( aAny.hasValue() ) - { -@@ -2003,9 +2022,9 @@ sal_Bool TransferableDataHelper::GetINetBookmark( const ::com::sun::star::datatr - - case( SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK ): - { -- Sequence< sal_Int8 > aSeq; -+ Sequence aSeq = GetSequence(rFlavor, OUString()); - -- if( GetSequence( rFlavor, aSeq ) && ( 2048 == aSeq.getLength() ) ) -+ if (2048 == aSeq.getLength()) - { - const sal_Char* p1 = reinterpret_cast< const sal_Char* >( aSeq.getConstArray() ); - const sal_Char* p2 = reinterpret_cast< const sal_Char* >( aSeq.getConstArray() ) + 1024; -@@ -2019,9 +2038,9 @@ sal_Bool TransferableDataHelper::GetINetBookmark( const ::com::sun::star::datatr - #ifdef WNT - case SOT_FORMATSTR_ID_FILEGRPDESCRIPTOR: - { -- Sequence< sal_Int8 > aSeq; -+ Sequence aSeq = GetSequence(rFlavor, OUString()); - -- if( GetSequence( rFlavor, aSeq ) && aSeq.getLength() ) -+ if (aSeq.getLength()) - { - FILEGROUPDESCRIPTOR* pFDesc = (FILEGROUPDESCRIPTOR*) aSeq.getConstArray(); - -@@ -2041,14 +2060,14 @@ sal_Bool TransferableDataHelper::GetINetBookmark( const ::com::sun::star::datatr - - aSeq.realloc( 0 ); - delete pStream; -+ pStream = NULL; - -- if( SotExchange::GetFormatDataFlavor( SOT_FORMATSTR_ID_FILECONTENT, aFileContentFlavor ) && -- GetSequence( aFileContentFlavor, aSeq ) && aSeq.getLength() ) -+ if (SotExchange::GetFormatDataFlavor(SOT_FORMATSTR_ID_FILECONTENT, aFileContentFlavor)) - { -- pStream = new SvMemoryStream( (sal_Char*) aSeq.getConstArray(), aSeq.getLength(), STREAM_STD_READ ); -+ aSeq = GetSequence(aFileContentFlavor, OUString()); -+ if (aSeq.getLength()) -+ pStream = new SvMemoryStream( (sal_Char*) aSeq.getConstArray(), aSeq.getLength(), STREAM_STD_READ ); - } -- else -- pStream = NULL; - } - - if( pStream ) -@@ -2153,70 +2172,70 @@ sal_Bool TransferableDataHelper::GetFileList( - - // ----------------------------------------------------------------------------- - --sal_Bool TransferableDataHelper::GetSequence( SotFormatStringId nFormat, Sequence< sal_Int8 >& rSeq ) -+ -+Sequence TransferableDataHelper::GetSequence( SotFormatStringId nFormat, const OUString& rDestDoc ) - { - DataFlavor aFlavor; -- return( SotExchange::GetFormatDataFlavor( nFormat, aFlavor ) && GetSequence( aFlavor, rSeq ) ); --} -+ if (!SotExchange::GetFormatDataFlavor(nFormat, aFlavor)) -+ return Sequence(); - --// ----------------------------------------------------------------------------- -+ return GetSequence(aFlavor, rDestDoc); -+} - --sal_Bool TransferableDataHelper::GetSequence( const DataFlavor& rFlavor, Sequence< sal_Int8 >& rSeq ) -+Sequence TransferableDataHelper::GetSequence( const DataFlavor& rFlavor, const OUString& rDestDoc ) - { - #ifdef DEBUG - fprintf( stderr, "TransferableDataHelper requests sequence of data\n" ); - #endif - -- const Any aAny( GetAny( rFlavor ) ); -- return( aAny.hasValue() && ( aAny >>= rSeq ) ); --} -+ const Any aAny = GetAny(rFlavor, rDestDoc); -+ Sequence aSeq; -+ if (aAny.hasValue()) -+ aAny >>= aSeq; - --// ----------------------------------------------------------------------------- -+ return aSeq; -+} - --sal_Bool TransferableDataHelper::GetSotStorageStream( SotFormatStringId nFormat, SotStorageStreamRef& rxStream ) -+bool TransferableDataHelper::GetSotStorageStream( SotFormatStringId nFormat, SotStorageStreamRef& rxStream ) - { - DataFlavor aFlavor; - return( SotExchange::GetFormatDataFlavor( nFormat, aFlavor ) && GetSotStorageStream( aFlavor, rxStream ) ); - } - --// ----------------------------------------------------------------------------- -- --sal_Bool TransferableDataHelper::GetSotStorageStream( const DataFlavor& rFlavor, SotStorageStreamRef& rxStream ) -+bool TransferableDataHelper::GetSotStorageStream( const DataFlavor& rFlavor, SotStorageStreamRef& rxStream ) - { -- Sequence< sal_Int8 > aSeq; -- sal_Bool bRet = GetSequence( rFlavor, aSeq ); -+ Sequence aSeq = GetSequence(rFlavor, OUString()); - -- if( bRet ) -+ if (aSeq.getLength()) - { - rxStream = new SotStorageStream( "" ); - rxStream->Write( aSeq.getConstArray(), aSeq.getLength() ); - rxStream->Seek( 0 ); - } - -- return bRet; -+ return aSeq.getLength(); - } - --sal_Bool TransferableDataHelper::GetInputStream( SotFormatStringId nFormat, Reference < XInputStream >& rxStream ) -+Reference TransferableDataHelper::GetInputStream( SotFormatStringId nFormat, const OUString& rDestDoc ) - { - DataFlavor aFlavor; -- return( SotExchange::GetFormatDataFlavor( nFormat, aFlavor ) && GetInputStream( aFlavor, rxStream ) ); --} -+ if (!SotExchange::GetFormatDataFlavor(nFormat, aFlavor)) -+ return Reference(); - --// ----------------------------------------------------------------------------- -+ return GetInputStream(aFlavor, rDestDoc); -+} - --sal_Bool TransferableDataHelper::GetInputStream( const DataFlavor& rFlavor, Reference < XInputStream >& rxStream ) -+Reference TransferableDataHelper::GetInputStream( const DataFlavor& rFlavor, const OUString& rDestDoc ) - { -- Sequence< sal_Int8 > aSeq; -- sal_Bool bRet = GetSequence( rFlavor, aSeq ); -+ Sequence aSeq = GetSequence(rFlavor, rDestDoc); - -- if( bRet ) -- rxStream = new ::comphelper::SequenceInputStream( aSeq ); -+ if (!aSeq.getLength()) -+ return Reference(); - -- return bRet; -+ Reference xStream(new comphelper::SequenceInputStream(aSeq)); -+ return xStream; - } - --// ----------------------------------------------------------------------------- -- - void TransferableDataHelper::Rebind( const Reference< XTransferable >& _rxNewContent ) - { - mxTransfer = _rxNewContent; -diff --git a/svtools/source/misc/transfer2.cxx b/svtools/source/misc/transfer2.cxx -index eb282c1..9c4cc68 100644 ---- a/svtools/source/misc/transfer2.cxx -+++ b/svtools/source/misc/transfer2.cxx -@@ -415,8 +415,8 @@ void TransferDataContainer::AddSupportedFormats() - - // ----------------------------------------------------------------------------- - --sal_Bool TransferDataContainer::GetData( const -- ::com::sun::star::datatransfer::DataFlavor& rFlavor ) -+sal_Bool TransferDataContainer::GetData( -+ const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& /*rDestDoc*/ ) - { - TDataCntnrEntryList::iterator aIter( pImpl->aFmtList.begin() ), - aEnd( pImpl->aFmtList.end() ); -diff --git a/svx/source/engine3d/view3d.cxx b/svx/source/engine3d/view3d.cxx -index 3aee208..f0bbd32 100644 ---- a/svx/source/engine3d/view3d.cxx -+++ b/svx/source/engine3d/view3d.cxx -@@ -441,7 +441,9 @@ SdrModel* E3dView::GetMarkedObjModel() const - // When pasting objects have to integrated if a scene is inserted, but - // not the scene itself - --sal_Bool E3dView::Paste(const SdrModel& rMod, const Point& rPos, SdrObjList* pLst, sal_uInt32 nOptions) -+sal_Bool E3dView::Paste( -+ const SdrModel& rMod, const Point& rPos, SdrObjList* pLst, sal_uInt32 nOptions, -+ const OUString& rSrcShellID, const OUString& rDestShellID ) - { - sal_Bool bRetval = sal_False; - -@@ -486,7 +488,7 @@ sal_Bool E3dView::Paste(const SdrModel& rMod, const Point& rPos, SdrObjList* pLs - else - { - // call parent -- bRetval = SdrView::Paste(rMod, rPos, pLst, nOptions); -+ bRetval = SdrView::Paste(rMod, rPos, pLst, nOptions, rSrcShellID, rDestShellID); - } - - return bRetval; -diff --git a/svx/source/fmcomp/dbaexchange.cxx b/svx/source/fmcomp/dbaexchange.cxx -index ff0e74f..01a7845 100644 ---- a/svx/source/fmcomp/dbaexchange.cxx -+++ b/svx/source/fmcomp/dbaexchange.cxx -@@ -223,8 +223,7 @@ namespace svx - AddFormat(getDescriptorFormatId()); - } - -- //-------------------------------------------------------------------- -- sal_Bool OColumnTransferable::GetData( const DataFlavor& _rFlavor ) -+ sal_Bool OColumnTransferable::GetData( const DataFlavor& _rFlavor, const OUString& /*rDestDoc*/ ) - { - const sal_uInt32 nFormatId = SotExchange::GetFormat(_rFlavor); - switch (nFormatId) -@@ -276,7 +275,7 @@ namespace svx - SotExchange::GetFormatDataFlavor(getDescriptorFormatId(), aFlavor); - OSL_ENSURE(bSuccess, "OColumnTransferable::extractColumnDescriptor: invalid data format (no flavor)!"); - -- Any aDescriptor = _rData.GetAny(aFlavor); -+ Any aDescriptor = _rData.GetAny(aFlavor, OUString()); - - // extract the property value sequence - Sequence< PropertyValue > aDescriptorProps; -@@ -468,8 +467,7 @@ namespace svx - AddFormat(SOT_FORMATSTR_ID_SBA_DATAEXCHANGE); - } - -- // ----------------------------------------------------------------------------- -- sal_Bool ODataAccessObjectTransferable::GetData( const DataFlavor& rFlavor ) -+ sal_Bool ODataAccessObjectTransferable::GetData( const DataFlavor& rFlavor, const OUString& /*rDestDoc*/ ) - { - sal_uIntPtr nFormat = SotExchange::GetFormat(rFlavor); - switch (nFormat) -@@ -524,7 +522,7 @@ namespace svx - SotExchange::GetFormatDataFlavor(nKnownFormatId, aFlavor); - OSL_ENSURE(bSuccess, "OColumnTransferable::extractColumnDescriptor: invalid data format (no flavor)!"); - -- Any aDescriptor = _rData.GetAny(aFlavor); -+ Any aDescriptor = _rData.GetAny(aFlavor, OUString()); - - // extract the property value sequence - Sequence< PropertyValue > aDescriptorProps; -@@ -643,8 +641,8 @@ namespace svx - { - AddFormat(getDescriptorFormatId()); - } -- //-------------------------------------------------------------------- -- sal_Bool OMultiColumnTransferable::GetData( const DataFlavor& _rFlavor ) -+ -+ sal_Bool OMultiColumnTransferable::GetData( const DataFlavor& _rFlavor, const OUString& /*rDestDoc*/ ) - { - const sal_uInt32 nFormatId = SotExchange::GetFormat(_rFlavor); - if (nFormatId == getDescriptorFormatId()) -@@ -682,7 +680,7 @@ namespace svx - SotExchange::GetFormatDataFlavor(getDescriptorFormatId(), aFlavor); - OSL_ENSURE(bSuccess, "OColumnTransferable::extractColumnDescriptor: invalid data format (no flavor)!"); - -- _rData.GetAny(aFlavor) >>= aList; -+ _rData.GetAny(aFlavor, OUString()) >>= aList; - } // if (_rData.HasFormat(getDescriptorFormatId())) - return aList; - } -diff --git a/svx/source/fmcomp/dbaobjectex.cxx b/svx/source/fmcomp/dbaobjectex.cxx -index 2d5be88..3534659 100644 ---- a/svx/source/fmcomp/dbaobjectex.cxx -+++ b/svx/source/fmcomp/dbaobjectex.cxx -@@ -89,8 +89,7 @@ namespace svx - AddFormat(getDescriptorFormatId(bForm)); - } - -- //-------------------------------------------------------------------- -- sal_Bool OComponentTransferable::GetData( const DataFlavor& _rFlavor ) -+ sal_Bool OComponentTransferable::GetData( const DataFlavor& _rFlavor, const OUString& /*rDestDoc*/ ) - { - const sal_uInt32 nFormatId = SotExchange::GetFormat(_rFlavor); - if ( nFormatId == getDescriptorFormatId(sal_True) || nFormatId == getDescriptorFormatId(sal_False) ) -@@ -131,7 +130,7 @@ namespace svx - SotExchange::GetFormatDataFlavor(getDescriptorFormatId(bForm), aFlavor); - OSL_ENSURE(bSuccess, "OComponentTransferable::extractColumnDescriptor: invalid data format (no flavor)!"); - -- Any aDescriptor = _rData.GetAny(aFlavor); -+ Any aDescriptor = _rData.GetAny(aFlavor, OUString()); - - // extract the property value sequence - Sequence< PropertyValue > aDescriptorProps; -diff --git a/svx/source/fmcomp/xmlexchg.cxx b/svx/source/fmcomp/xmlexchg.cxx -index fecc0e6..fe94b02 100644 ---- a/svx/source/fmcomp/xmlexchg.cxx -+++ b/svx/source/fmcomp/xmlexchg.cxx -@@ -43,7 +43,7 @@ namespace svx - AddFormat( SOT_FORMATSTR_ID_XFORMS ); - } - //-------------------------------------------------------------------- -- sal_Bool OXFormsTransferable::GetData( const DataFlavor& _rFlavor ) -+ sal_Bool OXFormsTransferable::GetData( const DataFlavor& _rFlavor, const OUString& /*rDestDoc*/ ) - { - const sal_uInt32 nFormatId = SotExchange::GetFormat( _rFlavor ); - if ( SOT_FORMATSTR_ID_XFORMS == nFormatId ) -diff --git a/svx/source/form/fmexch.cxx b/svx/source/form/fmexch.cxx -index c137183..6a074a4 100644 ---- a/svx/source/form/fmexch.cxx -+++ b/svx/source/form/fmexch.cxx -@@ -115,7 +115,7 @@ namespace svxform - } - - //-------------------------------------------------------------------- -- sal_Bool OLocalExchange::GetData( const ::com::sun::star::datatransfer::DataFlavor& /*_rFlavor*/ ) -+ sal_Bool OLocalExchange::GetData( const ::com::sun::star::datatransfer::DataFlavor& /*_rFlavor*/, const OUString& /*rDestDoc*/ ) - { - return sal_False; // do not have any formats by default - } -@@ -139,7 +139,7 @@ namespace svxform - if ( OControlExchange::hasControlPathFormat( aExchangedData.GetDataFlavorExVector() ) ) - { // paths to the controls, relative to a root - Sequence< Any > aControlPathData; -- if ( aExchangedData.GetAny( OControlExchange::getControlPathFormatId() ) >>= aControlPathData ) -+ if ( aExchangedData.GetAny(OControlExchange::getControlPathFormatId(), OUString()) >>= aControlPathData ) - { - DBG_ASSERT( aControlPathData.getLength() >= 2, "OControlTransferData::OControlTransferData: invalid data for the control path format!" ); - if ( aControlPathData.getLength() >= 2 ) -@@ -155,7 +155,7 @@ namespace svxform - } - if ( OControlExchange::hasHiddenControlModelsFormat( aExchangedData.GetDataFlavorExVector() ) ) - { // sequence of models of hidden controls -- aExchangedData.GetAny( OControlExchange::getHiddenControlModelsFormatId() ) >>= m_aHiddenControlModels; -+ aExchangedData.GetAny(OControlExchange::getHiddenControlModelsFormatId(), OUString()) >>= m_aHiddenControlModels; - } - - updateFormats( ); -@@ -289,8 +289,7 @@ namespace svxform - { - } - -- //-------------------------------------------------------------------- -- sal_Bool OControlExchange::GetData( const DataFlavor& _rFlavor ) -+ sal_Bool OControlExchange::GetData( const DataFlavor& _rFlavor, const OUString& rDestDoc ) - { - const sal_uInt32 nFormatId = SotExchange::GetFormat( _rFlavor ); - -@@ -310,7 +309,7 @@ namespace svxform - SetAny( makeAny( m_aHiddenControlModels ), _rFlavor ); - } - else -- return OLocalExchange::GetData( _rFlavor ); -+ return OLocalExchange::GetData(_rFlavor, rDestDoc); - - return sal_True; - } -diff --git a/svx/source/form/fmview.cxx b/svx/source/form/fmview.cxx -index 83c6709..3f5b8f1 100644 ---- a/svx/source/form/fmview.cxx -+++ b/svx/source/form/fmview.cxx -@@ -379,13 +379,6 @@ SdrModel* FmFormView::GetMarkedObjModel() const - return E3dView::GetMarkedObjModel(); - } - --//------------------------------------------------------------------------ --sal_Bool FmFormView::Paste(const SdrModel& rMod, const Point& rPos, SdrObjList* pLst, sal_uInt32 nOptions) --{ -- return E3dView::Paste(rMod, rPos, pLst, nOptions); --} -- --//------------------------------------------------------------------------ - void FmFormView::ActivateControls(SdrPageView* pPageView) - { - if (!pPageView) -diff --git a/svx/source/gallery2/galmisc.cxx b/svx/source/gallery2/galmisc.cxx -index fca950f..8adad0d 100644 ---- a/svx/source/gallery2/galmisc.cxx -+++ b/svx/source/gallery2/galmisc.cxx -@@ -512,7 +512,7 @@ void GalleryTransferable::AddSupportedFormats() - } - } - --sal_Bool GalleryTransferable::GetData( const datatransfer::DataFlavor& rFlavor ) -+sal_Bool GalleryTransferable::GetData( const datatransfer::DataFlavor& rFlavor, const OUString& /*rDestDoc*/ ) - { - sal_uInt32 nFormat = SotExchange::GetFormat( rFlavor ); - sal_Bool bRet = sal_False; -diff --git a/svx/source/inc/fmexch.hxx b/svx/source/inc/fmexch.hxx -index e2c9a84..6c59ffb 100644 ---- a/svx/source/inc/fmexch.hxx -+++ b/svx/source/inc/fmexch.hxx -@@ -79,7 +79,7 @@ namespace svxform - - // TransferableHelper - virtual void DragFinished( sal_Int8 nDropAction ); -- virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); -+ virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ); - - private: - void StartDrag( Window* pWindow, sal_Int8 nDragSourceActions, sal_Int32 nDragPointer = DND_POINTER_NONE, sal_Int32 nDragImage = DND_IMAGE_NONE ) -@@ -222,7 +222,7 @@ namespace svxform - inline static sal_Bool hasHiddenControlModelsFormat( const DataFlavorExVector& _rFormats ); - - protected: -- virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); -+ virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ); - virtual void AddSupportedFormats(); - }; - -diff --git a/svx/source/svdraw/svdobj.cxx b/svx/source/svdraw/svdobj.cxx -index b495c5b..d821757 100644 ---- a/svx/source/svdraw/svdobj.cxx -+++ b/svx/source/svdraw/svdobj.cxx -@@ -1064,6 +1064,11 @@ SdrObject* SdrObject::Clone() const - return CloneHelper< SdrObject >(); - } - -+SdrObject* SdrObject::CloneWithShellIDs( const OUString& /*rSrcShellID*/, const OUString& /*rDestShellID*/ ) const -+{ -+ return Clone(); -+} -+ - SdrObject& SdrObject::operator=(const SdrObject& rObj) - { - if( this == &rObj ) -diff --git a/svx/source/svdraw/svdoole2.cxx b/svx/source/svdraw/svdoole2.cxx -index 1102de8..f68f5d7 100644 ---- a/svx/source/svdraw/svdoole2.cxx -+++ b/svx/source/svdraw/svdoole2.cxx -@@ -1621,7 +1621,20 @@ SdrOle2Obj* SdrOle2Obj::Clone() const - return CloneHelper< SdrOle2Obj >(); - } - --SdrOle2Obj& SdrOle2Obj::operator=(const SdrOle2Obj& rObj) -+SdrOle2Obj* SdrOle2Obj::CloneWithShellIDs( const OUString& rSrcShellID, const OUString& rDestShellID ) const -+{ -+ SdrOle2Obj* pObj = -+ dynamic_cast( -+ SdrObjFactory::MakeNewObject(GetObjInventor(), GetObjIdentifier(), NULL)); -+ -+ if (pObj) -+ pObj->assignFrom(*this, rSrcShellID, rDestShellID); -+ -+ return pObj; -+} -+ -+SdrOle2Obj& SdrOle2Obj::assignFrom( -+ const SdrOle2Obj& rObj, const OUString& rSrcShellID, const OUString& rDestShellID ) - { - //TODO/LATER: who takes over control of my old object?! - if( &rObj != this ) -@@ -1668,7 +1681,8 @@ SdrOle2Obj& SdrOle2Obj::operator=(const SdrOle2Obj& rObj) - if ( xObj.is() ) - { - OUString aTmp; -- xObjRef.Assign( pDestPers->getEmbeddedObjectContainer().CopyAndGetEmbeddedObject( rContainer, xObj, aTmp ), rOle2Obj.GetAspect() ); -+ xObjRef.Assign( pDestPers->getEmbeddedObjectContainer().CopyAndGetEmbeddedObject( -+ rContainer, xObj, aTmp, rSrcShellID, rDestShellID), rOle2Obj.GetAspect()); - m_bTypeAsked = false; - mpImpl->aPersistName = aTmp; - CheckFileLink_Impl(); -@@ -1681,7 +1695,10 @@ SdrOle2Obj& SdrOle2Obj::operator=(const SdrOle2Obj& rObj) - return *this; - } - --// ----------------------------------------------------------------------------- -+SdrOle2Obj& SdrOle2Obj::operator=(const SdrOle2Obj& rObj) -+{ -+ return assignFrom(rObj, OUString(), OUString()); -+} - - void SdrOle2Obj::ImpSetVisAreaSize() - { -diff --git a/svx/source/svdraw/svdxcgv.cxx b/svx/source/svdraw/svdxcgv.cxx -index 374f9a9..fe62e91 100644 ---- a/svx/source/svdraw/svdxcgv.cxx -+++ b/svx/source/svdraw/svdxcgv.cxx -@@ -223,7 +223,9 @@ sal_Bool SdrExchangeView::Paste(SvStream& rInput, const OUString& rBaseURL, sal_ - return sal_True; - } - --sal_Bool SdrExchangeView::Paste(const SdrModel& rMod, const Point& rPos, SdrObjList* pLst, sal_uInt32 nOptions) -+sal_Bool SdrExchangeView::Paste( -+ const SdrModel& rMod, const Point& rPos, SdrObjList* pLst, sal_uInt32 nOptions, -+ const OUString& rSrcShellID, const OUString& rDestShellID ) - { - const SdrModel* pSrcMod=&rMod; - if (pSrcMod==pMod) -@@ -298,7 +300,7 @@ sal_Bool SdrExchangeView::Paste(const SdrModel& rMod, const Point& rPos, SdrObjL - { - const SdrObject* pSrcOb=pSrcPg->GetObj(nOb); - -- SdrObject* pNeuObj = pSrcOb->Clone(); -+ SdrObject* pNeuObj = pSrcOb->CloneWithShellIDs(rSrcShellID, rDestShellID); - - if (pNeuObj!=NULL) - { -diff --git a/svx/source/tbxctrls/colrctrl.cxx b/svx/source/tbxctrls/colrctrl.cxx -index 9591235..61e5bf1 100644 ---- a/svx/source/tbxctrls/colrctrl.cxx -+++ b/svx/source/tbxctrls/colrctrl.cxx -@@ -49,7 +49,7 @@ private: - protected: - - virtual void AddSupportedFormats(); -- virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); -+ virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ); - virtual sal_Bool WriteObject( SotStorageStreamRef& rxOStm, void* pUserObject, sal_uInt32 nUserObjectId, const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); - - public: -@@ -67,7 +67,7 @@ void SvxColorValueSetData::AddSupportedFormats() - - // ----------------------------------------------------------------------------- - --sal_Bool SvxColorValueSetData::GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ) -+sal_Bool SvxColorValueSetData::GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor, const OUString& /*rDestDoc*/ ) - { - sal_Bool bRet = sal_False; - -diff --git a/sw/source/core/frmedt/fecopy.cxx b/sw/source/core/frmedt/fecopy.cxx -index 2474312..8c5b6b9 100644 ---- a/sw/source/core/frmedt/fecopy.cxx -+++ b/sw/source/core/frmedt/fecopy.cxx -@@ -1509,7 +1509,7 @@ void SwFEShell::Paste( SvStream& rStrm, sal_uInt16 nAction, const Point* pPt ) - // #i50824# - // method replaced by - lcl_ConvertSdrOle2ObjsToSdrGrafObjs( pModel ); -- pView->Paste( *pModel, aPos ); -+ pView->Paste(*pModel, aPos, NULL, 0, OUString(), OUString()); - - sal_uLong nCnt = pView->GetMarkedObjectList().GetMarkCount(); - if( nCnt ) -diff --git a/sw/source/core/ole/ndole.cxx b/sw/source/core/ole/ndole.cxx -index 0941fdb..e905585 100644 ---- a/sw/source/core/ole/ndole.cxx -+++ b/sw/source/core/ole/ndole.cxx -@@ -458,7 +458,9 @@ SwCntntNode* SwOLENode::MakeCopy( SwDoc* pDoc, const SwNodeIndex& rIdx ) const - pPersistShell->GetEmbeddedObjectContainer().CopyAndGetEmbeddedObject( - pSrc->GetEmbeddedObjectContainer(), - pSrc->GetEmbeddedObjectContainer().GetEmbeddedObject( aOLEObj.aName ), -- aNewName ); -+ aNewName, -+ OUString(), -+ OUString()); - - SwOLENode* pOLENd = pDoc->GetNodes().MakeOLENode( rIdx, aNewName, GetAspect(), - (SwGrfFmtColl*)pDoc->GetDfltGrfFmtColl(), -diff --git a/sw/source/core/undo/unins.cxx b/sw/source/core/undo/unins.cxx -index f71d3f5..b1a460b 100644 ---- a/sw/source/core/undo/unins.cxx -+++ b/sw/source/core/undo/unins.cxx -@@ -460,7 +460,7 @@ void SwUndoInsert::RepeatImpl(::sw::RepeatContext & rContext) - // TODO/LATER: Copying through the container would copy the replacement image as well - comphelper::EmbeddedObjectContainer aCnt; - OUString aName = aCnt.CreateUniqueObjectName(); -- if ( aCnt.StoreEmbeddedObject( rSwOLE.GetOleRef(), aName, sal_True ) ) -+ if (aCnt.StoreEmbeddedObject(rSwOLE.GetOleRef(), aName, true, OUString(), OUString())) - { - uno::Reference < embed::XEmbeddedObject > aNew = aCnt.GetEmbeddedObject( aName ); - rDoc.Insert( rContext.GetRepeatPaM(), -diff --git a/sw/source/ui/dochdl/swdtflvr.cxx b/sw/source/ui/dochdl/swdtflvr.cxx -index 028e7ba..2b7ee20 100644 ---- a/sw/source/ui/dochdl/swdtflvr.cxx -+++ b/sw/source/ui/dochdl/swdtflvr.cxx -@@ -392,7 +392,7 @@ namespace - } - } - --sal_Bool SwTransferable::GetData( const DataFlavor& rFlavor ) -+sal_Bool SwTransferable::GetData( const DataFlavor& rFlavor, const OUString& rDestDoc ) - { - sal_uInt32 nFormat = SotExchange::GetFormat( rFlavor ); - -@@ -488,7 +488,7 @@ sal_Bool SwTransferable::GetData( const DataFlavor& rFlavor ) - if( xObj.is() ) - { - TransferableDataHelper aD( new SvEmbedTransferHelper( xObj, pOLEGraph, nAspect ) ); -- uno::Any aAny( aD.GetAny( rFlavor )); -+ uno::Any aAny = aD.GetAny(rFlavor, rDestDoc); - if( aAny.hasValue() ) - bOK = SetAny( aAny, rFlavor ); - } -@@ -1713,7 +1713,13 @@ int SwTransferable::_PasteOLE( TransferableDataHelper& rData, SwWrtShell& rSh, - else - nId = 0; - -- if( nId && rData.GetInputStream( nId, xStrm ) && xStrm.is() ) -+ if (nId) -+ { -+ SwDocShell* pDocSh = rSh.GetDoc()->GetDocShell(); -+ xStrm = rData.GetInputStream(nId, SfxObjectShell::CreateShellID(pDocSh)); -+ } -+ -+ if (xStrm.is()) - { - // if there is an embedded object, first try if it's a writer object - // this will be inserted into the document by using a Reader -@@ -1780,8 +1786,9 @@ int SwTransferable::_PasteOLE( TransferableDataHelper& rData, SwWrtShell& rSh, - { - if( rData.HasFormat( nFmt = SOT_FORMATSTR_ID_OBJECTDESCRIPTOR_OLE ) && rData.GetTransferableObjectDescriptor( nFmt, aObjDesc ) ) - { -- if ( !rData.GetInputStream( SOT_FORMATSTR_ID_EMBED_SOURCE_OLE, xStrm ) ) -- rData.GetInputStream( SOT_FORMATSTR_ID_EMBEDDED_OBJ_OLE, xStrm ); -+ xStrm = rData.GetInputStream(SOT_FORMATSTR_ID_EMBED_SOURCE_OLE, OUString()); -+ if (!xStrm.is()) -+ xStrm = rData.GetInputStream(SOT_FORMATSTR_ID_EMBEDDED_OBJ_OLE, OUString()); - - if ( !xStrm.is() ) - { -diff --git a/sw/source/ui/inc/swdtflvr.hxx b/sw/source/ui/inc/swdtflvr.hxx -index 0b30053..e03625e 100644 ---- a/sw/source/ui/inc/swdtflvr.hxx -+++ b/sw/source/ui/inc/swdtflvr.hxx -@@ -138,7 +138,7 @@ class SW_DLLPUBLIC SwTransferable : public TransferableHelper - - protected: - virtual void AddSupportedFormats(); -- virtual sal_Bool GetData( const css::datatransfer::DataFlavor& rFlavor ); -+ virtual sal_Bool GetData( const css::datatransfer::DataFlavor& rFlavor, const OUString& rDestDoc ); - virtual sal_Bool WriteObject( SotStorageStreamRef& rxOStm, - void* pUserObject, - sal_uInt32 nUserObjectId, -diff --git a/xmloff/source/chart/SchXMLExport.cxx b/xmloff/source/chart/SchXMLExport.cxx -index 1647e33..1ffd3c6 100644 ---- a/xmloff/source/chart/SchXMLExport.cxx -+++ b/xmloff/source/chart/SchXMLExport.cxx -@@ -268,6 +268,9 @@ public: - - OUString msCLSID; - -+ OUString maSrcShellID; -+ OUString maDestShellID; -+ - ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes > mxAdditionalShapes; - - tDataSequenceCont m_aDataSequencesToExport; -@@ -1009,6 +1012,16 @@ const OUString& SchXMLExportHelper::getChartCLSID() - return m_pImpl->msCLSID; - } - -+void SchXMLExportHelper::SetSourceShellID( const OUString& rShellID ) -+{ -+ m_pImpl->maSrcShellID = rShellID; -+} -+ -+void SchXMLExportHelper::SetDestinationShellID( const OUString& rShellID ) -+{ -+ m_pImpl->maDestShellID = rShellID; -+} -+ - UniReference< XMLPropertySetMapper > SchXMLExportHelper_Impl::GetPropertySetMapper() const - { - return mxPropertySetMapper; -@@ -2297,6 +2310,32 @@ bool lcl_exportAxisType( const Reference< chart2::XAxis > xChart2Axis, SvXMLExpo - return bExportDateScale; - } - -+void disableLinkedNumberFormat( -+ std::vector& rPropStates, const UniReference& rMapper ) -+{ -+ for (size_t i = 0; i < rPropStates.size(); ++i) -+ { -+ XMLPropertyState& rState = rPropStates[i]; -+ if (rState.mnIndex < 0 || rMapper->GetEntryCount() <= rState.mnIndex) -+ continue; -+ -+ OUString aXMLName = rMapper->GetEntryXMLName(rState.mnIndex); -+ -+ if (aXMLName != "link-data-style-to-source") -+ continue; -+ -+ // Entry found. Set the value to false and bail out. -+ rState.maValue <<= false; -+ return; -+ } -+ -+ // Entry not found. Insert a new entry for this. -+ sal_Int32 nIndex = rMapper->GetEntryIndex(XML_NAMESPACE_CHART, "link-data-style-to-source", 0); -+ XMLPropertyState aState(nIndex); -+ aState.maValue <<= false; -+ rPropStates.push_back(aState); -+} -+ - } - - void SchXMLExportHelper_Impl::exportAxis( -@@ -2317,6 +2356,14 @@ void SchXMLExportHelper_Impl::exportAxis( - { - lcl_exportNumberFormat( sNumFormat, xAxisProps, mrExport ); - aPropertyStates = mxExpPropMapper->Filter( xAxisProps ); -+ -+ if (!maSrcShellID.isEmpty() && !maDestShellID.isEmpty() && maSrcShellID != maDestShellID) -+ { -+ // Disable link to source number format property when pasting to -+ // a different doc shell. These shell ID's should be both empty -+ // during real ODF export. -+ disableLinkedNumberFormat(aPropertyStates, mxExpPropMapper->getPropertySetMapper()); -+ } - } - - bool bExportDateScale = false; -@@ -3556,6 +3603,9 @@ SchXMLExport::~SchXMLExport() - - sal_uInt32 SchXMLExport::exportDoc( enum ::xmloff::token::XMLTokenEnum eClass ) - { -+ maExportHelper.SetSourceShellID(GetSourceShellID()); -+ maExportHelper.SetDestinationShellID(GetDestinationShellID()); -+ - Reference< chart2::XChartDocument > xChartDoc( GetModel(), uno::UNO_QUERY ); - maExportHelper.m_pImpl->InitRangeSegmentationProperties( xChartDoc ); - return SvXMLExport::exportDoc( eClass ); -diff --git a/xmloff/source/core/xmlexp.cxx b/xmloff/source/core/xmlexp.cxx -index 3459747..f91d921 100644 ---- a/xmloff/source/core/xmlexp.cxx -+++ b/xmloff/source/core/xmlexp.cxx -@@ -257,6 +257,9 @@ public: - /// name of stream in package, e.g., "content.xml" - OUString mStreamName; - -+ OUString maSrcShellID; -+ OUString maDestShellID; -+ - /// stack of backed up namespace maps - /// long: depth at which namespace map has been backed up into the stack - ::std::stack< ::std::pair< SvXMLNamespaceMap *, long > > mNamespaceMaps; -@@ -794,15 +797,16 @@ sal_Bool SAL_CALL SvXMLExport::filter( const uno::Sequence< beans::PropertyValue - - try - { -+ const sal_Int32 nPropCount = aDescriptor.getLength(); -+ - const sal_uInt32 nTest = - EXPORT_META|EXPORT_STYLES|EXPORT_CONTENT|EXPORT_SETTINGS; - if( (mnExportFlags & nTest) == nTest && msOrigFileName.isEmpty() ) - { - // evaluate descriptor only for flat files and if a base URI - // has not been provided already -- const sal_Int32 nPropCount = aDescriptor.getLength(); -- const beans::PropertyValue* pProps = aDescriptor.getConstArray(); - -+ const beans::PropertyValue* pProps = aDescriptor.getConstArray(); - for( sal_Int32 nIndex = 0; nIndex < nPropCount; nIndex++, pProps++ ) - { - const OUString& rPropName = pProps->Name; -@@ -821,6 +825,25 @@ sal_Bool SAL_CALL SvXMLExport::filter( const uno::Sequence< beans::PropertyValue - } - } - -+ const beans::PropertyValue* pProps = aDescriptor.getConstArray(); -+ for (sal_Int32 nIndex = 0; nIndex < nPropCount; ++nIndex, ++pProps) -+ { -+ const OUString& rPropName = pProps->Name; -+ const Any& rValue = pProps->Value; -+ -+ if (rPropName == "SourceShellID") -+ { -+ if (!(rValue >>= mpImpl->maSrcShellID)) -+ return false; -+ } -+ else if (rPropName == "DestinationShellID") -+ { -+ if (!(rValue >>= mpImpl->maDestShellID)) -+ return false; -+ } -+ } -+ -+ - exportDoc( meClass ); - } - catch(const uno::Exception& e) -@@ -1510,6 +1533,16 @@ void SvXMLExport::ResetNamespaceMap() - delete mpNamespaceMap; mpNamespaceMap = new SvXMLNamespaceMap; - } - -+OUString SvXMLExport::GetSourceShellID() const -+{ -+ return mpImpl->maSrcShellID; -+} -+ -+OUString SvXMLExport::GetDestinationShellID() const -+{ -+ return mpImpl->maDestShellID; -+} -+ - void SvXMLExport::_ExportMeta() - { - OUString generator( ::utl::DocInfoHelper::GetGeneratorString() ); --- -1.9.3 - diff --git a/SOURCES/0023-fdo-79676-Initialize-with-a-default-chart-only-from-.patch b/SOURCES/0023-fdo-79676-Initialize-with-a-default-chart-only-from-.patch deleted file mode 100644 index 8ec2d6d..0000000 --- a/SOURCES/0023-fdo-79676-Initialize-with-a-default-chart-only-from-.patch +++ /dev/null @@ -1,201 +0,0 @@ -From 0e3826d08d7a7d54dd532319fb584008eb0e24c8 Mon Sep 17 00:00:00 2001 -From: Kohei Yoshida -Date: Mon, 9 Jun 2014 14:32:53 -0400 -Subject: [PATCH 023/137] fdo#79676: Initialize with a default chart only from - the UI. - -When creating an embedded chart object during import, we don't want to -create a default chart which would only mess up the chart data. - -With this change, ChartModel::initNew() is a no-op. - -(cherry picked from commit c5539bb585370f095cb6c09e38a7dd005d237295) -Signed-off-by: Andras Timar - -Conflicts: - chart2/source/model/main/ChartModel_Persistence.cxx - sc/source/ui/drawfunc/fuins2.cxx - sw/source/uibase/table/tablemgr.cxx - -Change-Id: Id29659c3885ec1e06bed26d2c851123fb63072cc -(cherry picked from commit 1eccdc5c39587d4019cb4c88f8483b1fe14d5dda) -Signed-off-by: Andras Timar ---- - chart2/inc/ChartModel.hxx | 4 ++++ - chart2/source/model/main/ChartModel.cxx | 6 ++++++ - chart2/source/model/main/ChartModel_Persistence.cxx | 16 ++++++++++------ - offapi/com/sun/star/chart2/XChartDocument.idl | 4 ++++ - sc/source/ui/drawfunc/fuins2.cxx | 5 +++++ - sd/source/ui/func/fuinsert.cxx | 10 ++++++++++ - sw/source/ui/table/tablemgr.cxx | 8 ++++++++ - 7 files changed, 47 insertions(+), 6 deletions(-) - -diff --git a/chart2/inc/ChartModel.hxx b/chart2/inc/ChartModel.hxx -index c8f992a..028ce0e 100644 ---- a/chart2/inc/ChartModel.hxx -+++ b/chart2/inc/ChartModel.hxx -@@ -221,6 +221,8 @@ private: - void impl_adjustAdditionalShapesPositionAndSize( - const ::com::sun::star::awt::Size& aVisualAreaSize ); - -+ void insertDefaultChart(); -+ - public: - //no default constructor - ChartModel(::com::sun::star::uno::Reference< -@@ -432,6 +434,8 @@ public: - getPageBackground() - throw (::com::sun::star::uno::RuntimeException); - -+ virtual void SAL_CALL createDefaultChart() throw (css::uno::RuntimeException, std::exception) SAL_OVERRIDE; -+ - // ____ XDataReceiver (public API) ____ - virtual void SAL_CALL - attachDataProvider( const ::com::sun::star::uno::Reference< -diff --git a/chart2/source/model/main/ChartModel.cxx b/chart2/source/model/main/ChartModel.cxx -index c29a10e..170019f 100644 ---- a/chart2/source/model/main/ChartModel.cxx -+++ b/chart2/source/model/main/ChartModel.cxx -@@ -947,6 +947,12 @@ uno::Reference< beans::XPropertySet > SAL_CALL ChartModel::getPageBackground() - return m_xPageBackground; - } - -+void SAL_CALL ChartModel::createDefaultChart() -+ throw (css::uno::RuntimeException, std::exception) -+{ -+ insertDefaultChart(); -+} -+ - // ____ XTitled ____ - uno::Reference< chart2::XTitle > SAL_CALL ChartModel::getTitleObject() - throw (uno::RuntimeException) -diff --git a/chart2/source/model/main/ChartModel_Persistence.cxx b/chart2/source/model/main/ChartModel_Persistence.cxx -index d964ced..5284ad2 100644 ---- a/chart2/source/model/main/ChartModel_Persistence.cxx -+++ b/chart2/source/model/main/ChartModel_Persistence.cxx -@@ -380,12 +380,7 @@ void ChartModel::impl_store( - } - } - --// frame::XLoadable --void SAL_CALL ChartModel::initNew() -- throw (frame::DoubleInitializationException, -- io::IOException, -- uno::Exception, -- uno::RuntimeException) -+void ChartModel::insertDefaultChart() - { - lockControllers(); - createInternalDataProvider( sal_False ); -@@ -486,6 +481,15 @@ void SAL_CALL ChartModel::initNew() - #endif - } - -+// frame::XLoadable -+void SAL_CALL ChartModel::initNew() -+ throw (frame::DoubleInitializationException, -+ io::IOException, -+ uno::Exception, -+ uno::RuntimeException) -+{ -+} -+ - void SAL_CALL ChartModel::load( - const Sequence< beans::PropertyValue >& rMediaDescriptor ) - throw (frame::DoubleInitializationException, -diff --git a/offapi/com/sun/star/chart2/XChartDocument.idl b/offapi/com/sun/star/chart2/XChartDocument.idl -index 217d7fa..0055cbb 100644 ---- a/offapi/com/sun/star/chart2/XChartDocument.idl -+++ b/offapi/com/sun/star/chart2/XChartDocument.idl -@@ -123,6 +123,10 @@ interface XChartDocument : ::com::sun::star::frame::XModel - XDiagram::getWall().

- */ - com::sun::star::beans::XPropertySet getPageBackground(); -+ -+ /** Creates a default chart type for a brand-new chart object. -+ */ -+ void createDefaultChart(); - }; - - } ; // chart2 -diff --git a/sc/source/ui/drawfunc/fuins2.cxx b/sc/source/ui/drawfunc/fuins2.cxx -index 9db9ac9..787b58b 100644 ---- a/sc/source/ui/drawfunc/fuins2.cxx -+++ b/sc/source/ui/drawfunc/fuins2.cxx -@@ -55,6 +55,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -502,6 +503,10 @@ FuInsertChart::FuInsertChart(ScTabViewShell* pViewSh, Window* pWin, ScDrawView* - if( xCompSupp.is()) - xReceiver.set( xCompSupp->getComponent(), uno::UNO_QUERY ); - -+ uno::Reference xChartDoc(xReceiver, uno::UNO_QUERY); -+ if (xChartDoc.is()) -+ xChartDoc->createDefaultChart(); -+ - // lock the model to suppress any internal updates - uno::Reference< frame::XModel > xChartModel( xReceiver, uno::UNO_QUERY ); - if( xChartModel.is() ) -diff --git a/sd/source/ui/func/fuinsert.cxx b/sd/source/ui/func/fuinsert.cxx -index 886be34..1606c33 100644 ---- a/sd/source/ui/func/fuinsert.cxx -+++ b/sd/source/ui/func/fuinsert.cxx -@@ -25,6 +25,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -274,6 +275,15 @@ void FuInsertOLE::DoExecute( SfxRequest& rReq ) - GetEmbeddedObjectContainer().CreateEmbeddedObject( aName.GetByteSequence(), aObjName ); - if ( xObj.is() ) - { -+ uno::Reference xCompSupp(xObj, uno::UNO_QUERY); -+ if (xCompSupp.is()) -+ { -+ // Create default chart type. -+ uno::Reference xChartDoc(xCompSupp->getComponent(), uno::UNO_QUERY); -+ if (xChartDoc.is()) -+ xChartDoc->createDefaultChart(); -+ } -+ - sal_Int64 nAspect = embed::Aspects::MSOLE_CONTENT; - - MapUnit aUnit = VCLUnoHelper::UnoEmbed2VCLMapUnit( xObj->getMapUnit( nAspect ) ); -diff --git a/sw/source/ui/table/tablemgr.cxx b/sw/source/ui/table/tablemgr.cxx -index 947e3dd..26871ee 100644 ---- a/sw/source/ui/table/tablemgr.cxx -+++ b/sw/source/ui/table/tablemgr.cxx -@@ -21,6 +21,7 @@ - #include - #include - #include -+#include - #include - - #include -@@ -243,7 +244,14 @@ uno::Reference< frame::XModel > SwTableFUNC::InsertChart( - { - xChartModel.set( xCompSupp->getComponent(), uno::UNO_QUERY ); - if( xChartModel.is() ) -+ { -+ // Create a default chart type. -+ uno::Reference xChartDoc(xChartModel, uno::UNO_QUERY); -+ if (xChartDoc.is()) -+ xChartDoc->createDefaultChart(); -+ - xChartModel->lockControllers(); //#i79578# don't request a new replacement image for charts to often - block change notifications -+ } - } - - // set the table name at the OLE-node --- -1.9.3 - diff --git a/SOURCES/0025-fdo-81445-Display-correct-label-for-empty-cell.patch b/SOURCES/0025-fdo-81445-Display-correct-label-for-empty-cell.patch deleted file mode 100644 index c41bff7..0000000 --- a/SOURCES/0025-fdo-81445-Display-correct-label-for-empty-cell.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 61aabb7d814b634e29003d8b555938f40b6f6fb4 Mon Sep 17 00:00:00 2001 -From: Kohei Yoshida -Date: Wed, 16 Jul 2014 19:00:51 -0400 -Subject: [PATCH 025/137] fdo#81445: Display correct label for empty cell. - -Change-Id: I4f3e99b2231f7cd87daa27ef2dc47d3bf37cea57 -(cherry picked from commit 2202bda95c76127dffcc9c7460e462a877344b9c) -Reviewed-on: https://gerrit.libreoffice.org/10361 -Reviewed-by: Markus Mohrhard -Tested-by: Markus Mohrhard ---- - sc/source/core/tool/chgtrack.cxx | 5 ++--- - 1 file changed, 2 insertions(+), 3 deletions(-) - -diff --git a/sc/source/core/tool/chgtrack.cxx b/sc/source/core/tool/chgtrack.cxx -index 87d0cdb..1ebb30d 100644 ---- a/sc/source/core/tool/chgtrack.cxx -+++ b/sc/source/core/tool/chgtrack.cxx -@@ -1806,10 +1806,9 @@ void ScChangeActionContent::GetValueString( - case CELLTYPE_FORMULA : - GetFormulaString(rStr, rCell.mpFormula); - break; -+ case CELLTYPE_NONE: - default: -- { -- // added to avoid warnings -- } -+ rStr = OUString(); - } - } - --- -1.9.3 - diff --git a/SOURCES/0026-bnc-862510-Improve-handling-of-OOXML-gradients.patch b/SOURCES/0026-bnc-862510-Improve-handling-of-OOXML-gradients.patch deleted file mode 100644 index ece265d..0000000 --- a/SOURCES/0026-bnc-862510-Improve-handling-of-OOXML-gradients.patch +++ /dev/null @@ -1,793 +0,0 @@ -From 7a34e0815d541709e96fcb7162895e90a8d08f30 Mon Sep 17 00:00:00 2001 -From: Tor Lillqvist -Date: Mon, 14 Jul 2014 20:23:22 +0300 -Subject: [PATCH 026/137] bnc#862510: Improve handling of OOXML gradients - -OOXML gradients can have an arbitrary number of "stops". LibreOffice gradients -have just a start and end colour, plus an optional uniformly coloured border -(on the "start" side). In addition, LibreOffice has the "axial" gradient mode, -which means the gradient is reflected in the middle. - -It is thus obviously impossible in general to losslessly map OOXML gradients -to LibreOffice ones. But let's try a bit harder than earlier to get visually -more similar result, in at least some simple sample cases. - -We look for the widest gradient segment and use that for the start and end -colours of the LibreOffice gradient. - -Also, map an OOXML gradient to an axial LibreOffice gradient only if it is -symmetrical. Also, use the border property when suitable. In general, look for -the widest OOXML gradient segment (once a segment corresponding to the -LibreOffice gradient border, if any, has been accounted for) and use that as -the LibreOffice gradient. - -Possibly some perceptionally better heuristic should be used... Like, if we -have a three-segment gradient, with a wide gradient segment between two -visually very similar colours (for example, two shades of red), and a narrower -segment ending with a visually very different colour (for example, yellow), it -probably would be best to represent that in LibreOffice as a gradient from the -first red shade to yellow, instead of as a gradient between the two shades of -red. Or even, if a first or last gradient segment is between very similar -colours, equalize those start and end colours, thus using a border colour in -LibreOffice instead. The possibilities for bikeshedding are endless. - -I am sure there are instances where the old code (by accident?) produced -visually more pleasing results... But hopefully this works more pleasingly and -consistently in a larger number of cases. - -Change-Id: If153e986ad943454307e3ba718479d5ac4cdc7ab -Reviewed-on: https://gerrit.libreoffice.org/10359 -Reviewed-by: Andras Timar -Tested-by: Andras Timar ---- - include/sal/log-areas.dox | 1 + - oox/Library_oox.mk | 6 +- - oox/source/drawingml/fillproperties.cxx | 212 ++++++++++++++++++++++++++++---- - sd/qa/unit/data/xml/n819614_0.xml | 102 +++++++-------- - 4 files changed, 244 insertions(+), 77 deletions(-) - -diff --git a/include/sal/log-areas.dox b/include/sal/log-areas.dox -index 7d8d70f..46656e2 100644 ---- a/include/sal/log-areas.dox -+++ b/include/sal/log-areas.dox -@@ -140,6 +140,7 @@ certain functionality. - @li @c filter.xslt - xslt import/export - @li @c oox.cscode - see oox/source/drawingml/customshapes/README - @li @c oox.drawingml - DrawingML -+@li @c oox.drawingml.gradient - @li @c oox.ppt - pptx filter - @li @c oox.storage - ZipStorage class - @li @c oox.xmlstream - XmlStream class -diff --git a/oox/Library_oox.mk b/oox/Library_oox.mk -index d933b56..a8b2161 100644 ---- a/oox/Library_oox.mk -+++ b/oox/Library_oox.mk -@@ -59,16 +59,18 @@ $(eval $(call gb_Library_use_libraries,oox,\ - $(gb_UWINAPI) \ - )) - --ifeq ($(TLS),OPENSSL) - $(eval $(call gb_Library_use_externals,oox,\ - boost_headers \ -+)) -+ -+ifeq ($(TLS),OPENSSL) -+$(eval $(call gb_Library_use_externals,oox,\ - openssl \ - openssl_headers \ - )) - else - ifeq ($(TLS),NSS) - $(eval $(call gb_Library_use_externals,oox,\ -- boost_headers \ - plc4 \ - nss3 \ - )) -diff --git a/oox/source/drawingml/fillproperties.cxx b/oox/source/drawingml/fillproperties.cxx -index 99026a9..a5eb026 100644 ---- a/oox/source/drawingml/fillproperties.cxx -+++ b/oox/source/drawingml/fillproperties.cxx -@@ -17,6 +17,9 @@ - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -+#include -+#include -+ - #include "oox/drawingml/fillproperties.hxx" - - #include -@@ -340,8 +343,8 @@ void FillProperties::pushToPropMap( ShapePropertyMap& rPropMap, - aGradient.StartIntensity = 100; - aGradient.EndIntensity = 100; - -- size_t nColorCount = maGradientProps.maGradientStops.size(); -- if( nColorCount > 1 ) -+ // Old code, values in aGradient overwritten in many cases by newer code below -+ if( maGradientProps.maGradientStops.size() > 1 ) - { - aGradient.StartColor = maGradientProps.maGradientStops.begin()->second.getColor( rGraphicHelper, nPhClr ); - aGradient.EndColor = maGradientProps.maGradientStops.rbegin()->second.getColor( rGraphicHelper, nPhClr ); -@@ -377,33 +380,194 @@ void FillProperties::pushToPropMap( ShapePropertyMap& rPropMap, - } - else - { -- /* Try to detect a VML axial gradient. This type of -- gradient is simulated by a 3-point linear gradient. -- Even if it's a multi-color linear gradient, its probably better to assume -- axial gradient, when there are 3 or more points. -- */ -- bool bAxial = (nColorCount >= 3); -- aGradient.Style = bAxial ? awt::GradientStyle_AXIAL : awt::GradientStyle_LINEAR; -- nDmlAngle = maGradientProps.moShadeAngle.get( 0 ) - nShapeRotation; -- // convert DrawingML angle (in 1/60000 degrees) to API angle (in 1/10 degrees) -- aGradient.Angle = static_cast< sal_Int16 >( (4500 - (nDmlAngle / (PER_DEGREE / 10))) % 3600 ); -- if( bAxial ) -+ // A copy of the gradient stops for local modification -+ GradientFillProperties::GradientStopMap aGradientStops(maGradientProps.maGradientStops); -+ -+ // Add a fake gradient stop at 0% and 100% if necessary, so that the gradient always starts -+ // at 0% and ends at 100%, to make following logic clearer (?). -+ if( aGradientStops.find(0.0) == aGradientStops.end() ) -+ { -+ // temp variable required -+ Color aFirstColor(aGradientStops.begin()->second); -+ aGradientStops[0.0] = aFirstColor; -+ } -+ -+ if( aGradientStops.find(1.0) == aGradientStops.end() ) -+ { -+ // ditto -+ Color aLastColor(aGradientStops.rbegin()->second); -+ aGradientStops[1.0] = aLastColor; -+ } -+ -+ // Check if the gradient is symmetric, which we will emulate with an "axial" gradient. -+ bool bSymmetric(true); -+ { -+ GradientFillProperties::GradientStopMap::const_iterator aItA( aGradientStops.begin() ); -+ GradientFillProperties::GradientStopMap::const_iterator aItZ( boost::prior( aGradientStops.end() ) ); -+ while( bSymmetric && aItA->first < aItZ->first ) -+ { -+ if( aItA->second.getColor( rGraphicHelper, nPhClr ) != aItZ->second.getColor( rGraphicHelper, nPhClr ) || -+ aItA->second.getTransparency() != aItZ->second.getTransparency() ) -+ bSymmetric = false; -+ else -+ { -+ aItA++; -+ aItZ = boost::prior(aItZ); -+ } -+ } -+ // Don't be fooled if the middlemost stop isn't at 0.5. -+ if( bSymmetric && aItA == aItZ && aItA->first != 0.5 ) -+ bSymmetric = false; -+ -+ // If symmetric, do the rest of the logic for just a half. -+ if( bSymmetric ) -+ { -+ // aItZ already points to the colour for the middle, but insert a fake stop at the -+ // exact middle if necessary. -+ if( aItA->first != aItZ->first ) -+ { -+ Color aMiddleColor = aItZ->second; -+ aGradientStops[0.5] = aMiddleColor; -+ } -+ // Drop the rest of the stops -+ while( aGradientStops.rbegin()->first > 0.5 ) -+ aGradientStops.erase( aGradientStops.rbegin()->first ); -+ } -+ } -+ -+ SAL_INFO("oox.drawingml.gradient", "symmetric: " << (bSymmetric ? "YES" : "NO") << -+ ", number of stops: " << aGradientStops.size()); -+ for (GradientFillProperties::GradientStopMap::iterator p(aGradientStops.begin()); -+ p != aGradientStops.end(); -+ p++) -+ SAL_INFO("oox.drawingml.gradient", " " << std::distance(aGradientStops.begin(), p) << ": " << -+ p->first << ": " << -+ std::hex << p->second.getColor( rGraphicHelper, nPhClr ) << std::dec << -+ "@" << (100-p->second.getTransparency()) << "%"); -+ -+ // Now estimate the simple LO style gradient (only two stops, at n% and 100%, where n == -+ // the "border") that best emulates the gradient between begin() and prior(end()). -+ -+ // First look for the largest segment in the gradient. -+ GradientFillProperties::GradientStopMap::iterator aIt(aGradientStops.begin()); -+ double nWidestWidth = -1; -+ GradientFillProperties::GradientStopMap::iterator aWidestSegmentStart; -+ aIt++; -+ while( aIt != aGradientStops.end() ) -+ { -+ if( aIt->first - boost::prior(aIt)->first > nWidestWidth ) -+ { -+ nWidestWidth = aIt->first - boost::prior(aIt)->first; -+ aWidestSegmentStart = boost::prior(aIt); -+ } -+ aIt++; -+ } -+ assert( nWidestWidth > 0 ); -+ -+ double nBorder = 0; -+ bool bSwap(false); -+ -+ // Do we have just two segments, and either one is of uniform colour, or three or more -+ // segments, and the widest one is the first or last one, and is it of uniform colour? If -+ // so, deduce the border from it, and drop that segment. -+ if( aGradientStops.size() == 3 && -+ aGradientStops.begin()->second.getColor( rGraphicHelper, nPhClr ) == boost::next(aGradientStops.begin())->second.getColor( rGraphicHelper, nPhClr ) && -+ aGradientStops.begin()->second.getTransparency() == boost::next(aGradientStops.begin())->second.getTransparency( ) ) -+ { -+ // Two segments, first is uniformly coloured -+ SAL_INFO("oox.drawingml.gradient", "two segments, first is uniformly coloured"); -+ nBorder = boost::next(aGradientStops.begin())->first - aGradientStops.begin()->first; -+ aGradientStops.erase(aGradientStops.begin()); -+ aWidestSegmentStart = aGradientStops.begin(); -+ } -+ else if( !bSymmetric && -+ aGradientStops.size() == 3 && -+ boost::next(aGradientStops.begin())->second.getColor( rGraphicHelper, nPhClr ) == boost::prior(aGradientStops.end())->second.getColor( rGraphicHelper, nPhClr ) && -+ boost::next(aGradientStops.begin())->second.getTransparency() == boost::prior(aGradientStops.end())->second.getTransparency( ) ) - { -- GradientFillProperties::GradientStopMap::const_iterator aIt = maGradientProps.maGradientStops.begin(); -- // Try to find the axial median -- for(size_t i=0;isecond.hasColor() kind would be better than Color != API_RGB_WHITE -- if( aGradient.StartColor == aGradient.EndColor && -- ( !aIt->second.hasTransparency() || aIt->second.getColor( rGraphicHelper, nPhClr ) != API_RGB_WHITE ) ) -+ // Two segments, second is uniformly coloured -+ SAL_INFO("oox.drawingml.gradient", "two segments, second is uniformly coloured"); -+ nBorder = boost::prior(aGradientStops.end())->first - boost::next(aGradientStops.begin())->first; -+ aGradientStops.erase(boost::next(aGradientStops.begin())); -+ aWidestSegmentStart = aGradientStops.begin(); -+ bSwap = true; -+ nShapeRotation = 180*60000 - nShapeRotation; -+ } -+ else if( !bSymmetric && -+ aGradientStops.size() >= 4 && -+ aWidestSegmentStart->second.getColor( rGraphicHelper, nPhClr ) == boost::next(aWidestSegmentStart)->second.getColor( rGraphicHelper, nPhClr ) && -+ aWidestSegmentStart->second.getTransparency() == boost::next(aWidestSegmentStart)->second.getTransparency() && -+ ( aWidestSegmentStart == aGradientStops.begin() || -+ boost::next(aWidestSegmentStart) == boost::prior( aGradientStops.end() ) ) ) -+ { -+ // Not symmetric, three or more segments, the widest is first or last and is uniformly coloured -+ SAL_INFO("oox.drawingml.gradient", "first or last segment is widest and is uniformly coloured"); -+ nBorder = boost::next(aWidestSegmentStart)->first - aWidestSegmentStart->first; -+ -+ // If it's the last segment that is uniformly coloured, rotate the gradient 180 -+ // degrees and swap start and end colours -+ if( boost::next(aWidestSegmentStart) == boost::prior( aGradientStops.end() ) ) - { -- aGradient.StartColor = aIt->second.getColor( rGraphicHelper, nPhClr ); -+ bSwap = true; -+ nShapeRotation = 180*60000 - nShapeRotation; - } - -- if( nStartTrans == nEndTrans && aIt->second.hasTransparency() ) -- nStartTrans = aIt->second.getTransparency()*255/100; -+ aGradientStops.erase( aWidestSegmentStart ); -+ -+ // Look for which is widest now -+ aIt = boost::next(aGradientStops.begin()); -+ nWidestWidth = -1; -+ while( aIt != aGradientStops.end() ) -+ { -+ if( aIt->first - boost::prior(aIt)->first > nWidestWidth ) -+ { -+ nWidestWidth = aIt->first - boost::prior(aIt)->first; -+ aWidestSegmentStart = boost::prior(aIt); -+ } -+ aIt++; -+ } -+ } -+ SAL_INFO("oox.drawingml.gradient", "widest segment start: " << aWidestSegmentStart->first << ", border: " << nBorder); -+ assert( (!bSymmetric && !bSwap) || !(bSymmetric && bSwap) ); -+ -+ // Now we have a potential border and a largest segment. Use those. -+ -+ aGradient.Style = bSymmetric ? awt::GradientStyle_AXIAL : awt::GradientStyle_LINEAR; -+ nDmlAngle = maGradientProps.moShadeAngle.get( 0 ) - nShapeRotation; -+ // convert DrawingML angle (in 1/60000 degrees) to API angle (in 1/10 degrees) -+ aGradient.Angle = static_cast< sal_Int16 >( (4500 - (nDmlAngle / (PER_DEGREE / 10))) % 3600 ); -+ Color aStartColor, aEndColor; -+ if( bSymmetric ) -+ { -+ aStartColor = boost::next(aWidestSegmentStart)->second; -+ aEndColor = aWidestSegmentStart->second; -+ nBorder *= 2; -+ } -+ else if( bSwap ) -+ { -+ aStartColor = boost::next(aWidestSegmentStart)->second; -+ aEndColor = aWidestSegmentStart->second; - } -+ else -+ { -+ aStartColor = aWidestSegmentStart->second; -+ aEndColor = boost::next(aWidestSegmentStart)->second; -+ } -+ -+ SAL_INFO("oox.drawingml.gradient", "start color: " << std::hex << aStartColor.getColor( rGraphicHelper, nPhClr ) << std::dec << -+ "@" << (100-aStartColor.getTransparency()) << "%" << -+ ", end color: " << std::hex << aEndColor.getColor( rGraphicHelper, nPhClr ) << std::dec << -+ "@" << (100-aEndColor.getTransparency()) << "%"); -+ -+ aGradient.StartColor = aStartColor.getColor( rGraphicHelper, nPhClr ); -+ aGradient.EndColor = aEndColor.getColor( rGraphicHelper, nPhClr ); -+ -+ if( aStartColor.hasTransparency() ) -+ nStartTrans = aStartColor.getTransparency()*255/100; -+ if( aEndColor.hasTransparency() ) -+ nEndTrans = aEndColor.getTransparency()*255/100; -+ -+ aGradient.Border = 100*nBorder; - } - - // push gradient or named gradient to property map -diff --git a/sd/qa/unit/data/xml/n819614_0.xml b/sd/qa/unit/data/xml/n819614_0.xml -index 3c0b5b1..e9e724c 100644 ---- a/sd/qa/unit/data/xml/n819614_0.xml -+++ b/sd/qa/unit/data/xml/n819614_0.xml -@@ -3346,7 +3346,7 @@ - - - -- -+ - - - -@@ -3411,7 +3411,7 @@ - - - -- -+ - - - -@@ -3476,7 +3476,7 @@ - - - -- -+ - - - -@@ -3606,7 +3606,7 @@ - - - -- -+ - - - -@@ -3671,7 +3671,7 @@ - - - -- -+ - - - -@@ -3736,7 +3736,7 @@ - - - -- -+ - - - -@@ -3801,7 +3801,7 @@ - - - -- -+ - - - -@@ -3866,7 +3866,7 @@ - - - -- -+ - - - -@@ -3931,7 +3931,7 @@ - - - -- -+ - - - -@@ -3996,7 +3996,7 @@ - - - -- -+ - - - -@@ -4061,7 +4061,7 @@ - - - -- -+ - - - -@@ -4126,7 +4126,7 @@ - - - -- -+ - - - -@@ -4191,7 +4191,7 @@ - - - -- -+ - - - -@@ -4256,7 +4256,7 @@ - - - -- -+ - - - -@@ -4321,7 +4321,7 @@ - - - -- -+ - - - -@@ -4386,7 +4386,7 @@ - - - -- -+ - - - -@@ -4451,7 +4451,7 @@ - - - -- -+ - - - -@@ -4516,7 +4516,7 @@ - - - -- -+ - - - -@@ -4581,7 +4581,7 @@ - - - -- -+ - - - -@@ -4646,7 +4646,7 @@ - - - -- -+ - - - -@@ -4711,7 +4711,7 @@ - - - -- -+ - - - -@@ -4776,7 +4776,7 @@ - - - -- -+ - - - -@@ -4841,7 +4841,7 @@ - - - -- -+ - - - -@@ -4906,7 +4906,7 @@ - - - -- -+ - - - -@@ -4971,7 +4971,7 @@ - - - -- -+ - - - -@@ -5036,7 +5036,7 @@ - - - -- -+ - - - -@@ -5101,7 +5101,7 @@ - - - -- -+ - - - -@@ -5166,7 +5166,7 @@ - - - -- -+ - - - -@@ -5231,7 +5231,7 @@ - - - -- -+ - - - -@@ -5296,7 +5296,7 @@ - - - -- -+ - - - -@@ -5361,7 +5361,7 @@ - - - -- -+ - - - -@@ -5426,7 +5426,7 @@ - - - -- -+ - - - -@@ -5491,7 +5491,7 @@ - - - -- -+ - - - -@@ -5621,7 +5621,7 @@ - - - -- -+ - - - -@@ -5751,7 +5751,7 @@ - - - -- -+ - - - -@@ -5816,7 +5816,7 @@ - - - -- -+ - - - -@@ -5881,7 +5881,7 @@ - - - -- -+ - - - -@@ -5946,7 +5946,7 @@ - - - -- -+ - - - -@@ -6011,7 +6011,7 @@ - - - -- -+ - - - -@@ -6076,7 +6076,7 @@ - - - -- -+ - - - -@@ -6141,7 +6141,7 @@ - - - -- -+ - - - -@@ -6206,7 +6206,7 @@ - - - -- -+ - - - -@@ -6271,7 +6271,7 @@ - - - -- -+ - - - -@@ -6336,7 +6336,7 @@ - - - -- -+ - - - -@@ -6401,7 +6401,7 @@ - - - -- -+ - - - -@@ -6466,7 +6466,7 @@ - - - -- -+ - - - -@@ -6596,7 +6596,7 @@ - - - -- -+ - - - -@@ -6661,7 +6661,7 @@ - - - -- -+ - - - -@@ -6726,7 +6726,7 @@ - - - -- -+ - - - -@@ -6791,7 +6791,7 @@ - - - -- -+ - - - -@@ -6856,7 +6856,7 @@ - - - -- -+ - - - --- -1.9.3 - diff --git a/SOURCES/0027-Do-not-prefer-bandRow-over-firstCol-lastCol-nor-the-.patch b/SOURCES/0027-Do-not-prefer-bandRow-over-firstCol-lastCol-nor-the-.patch deleted file mode 100644 index 2e13d51..0000000 --- a/SOURCES/0027-Do-not-prefer-bandRow-over-firstCol-lastCol-nor-the-.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 087eb8031b444d62a10d744e7b5983f97c59883c Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Mat=C3=BA=C5=A1=20Kukan?= -Date: Tue, 15 Jul 2014 11:28:30 +0200 -Subject: [PATCH 027/137] Do not prefer bandRow over firstCol/lastCol, nor the - same with bandCol. - -Change-Id: I0c573d721212c870e9ecc99ba5e8494073e09aaf -(cherry picked from commit 5d2f12a44d2af3e42e0c3a17ff556f5ada27b1b8) -Reviewed-on: https://gerrit.libreoffice.org/10330 -Reviewed-by: Andras Timar -Tested-by: Andras Timar ---- - oox/source/drawingml/table/tablecell.cxx | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/oox/source/drawingml/table/tablecell.cxx b/oox/source/drawingml/table/tablecell.cxx -index c3c4f49..1bb6241 100644 ---- a/oox/source/drawingml/table/tablecell.cxx -+++ b/oox/source/drawingml/table/tablecell.cxx -@@ -228,7 +228,9 @@ void TableCell::pushToXCell( const ::oox::core::XmlFilterBase& rFilterBase, ::oo - if ( rProperties.isBandRow() ) - { - if ( ( !rProperties.isFirstRow() || ( nRow != 0 ) ) && -- ( !rProperties.isLastRow() || ( nRow != nMaxRow ) ) ) -+ ( !rProperties.isLastRow() || ( nRow != nMaxRow ) ) && -+ ( !rProperties.isFirstCol() || ( nColumn != 0 ) ) && -+ ( !rProperties.isLastCol() || ( nColumn != nMaxColumn ) ) ) - { - sal_Int32 nBand = nRow; - if ( rProperties.isFirstRow() ) -@@ -303,7 +305,9 @@ void TableCell::pushToXCell( const ::oox::core::XmlFilterBase& rFilterBase, ::oo - } - if ( rProperties.isBandCol() ) - { -- if ( ( !rProperties.isFirstCol() || ( nColumn != 0 ) ) && -+ if ( ( !rProperties.isFirstRow() || ( nRow != 0 ) ) && -+ ( !rProperties.isLastRow() || ( nRow != nMaxRow ) ) && -+ ( !rProperties.isFirstCol() || ( nColumn != 0 ) ) && - ( !rProperties.isLastCol() || ( nColumn != nMaxColumn ) ) ) - { - sal_Int32 nBand = nColumn; --- -1.9.3 - diff --git a/SOURCES/0028-bnc-887225-OOXML-import-Correctly-apply-table-style-.patch b/SOURCES/0028-bnc-887225-OOXML-import-Correctly-apply-table-style-.patch deleted file mode 100644 index 8b60d6b..0000000 --- a/SOURCES/0028-bnc-887225-OOXML-import-Correctly-apply-table-style-.patch +++ /dev/null @@ -1,33 +0,0 @@ -From ed4cbd4f6726dcae80bf8b42bee97e5bcf465502 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Mat=C3=BA=C5=A1=20Kukan?= -Date: Tue, 15 Jul 2014 10:58:51 +0200 -Subject: [PATCH 028/137] bnc#887225: OOXML import: Correctly apply table style - for lastRow. - -nMaxColumn and nMaxRow are indexes, so use size() - 1. - -Change-Id: I20055e55cf2464710fe553fb8067bad13a339084 -(cherry picked from commit 47645734c350f244b4a5642a709132ca1b7dc75d) -Reviewed-on: https://gerrit.libreoffice.org/10329 -Reviewed-by: Andras Timar -Tested-by: Andras Timar ---- - oox/source/drawingml/table/tableproperties.cxx | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/oox/source/drawingml/table/tableproperties.cxx b/oox/source/drawingml/table/tableproperties.cxx -index 74b0b91..43e4b1f 100644 ---- a/oox/source/drawingml/table/tableproperties.cxx -+++ b/oox/source/drawingml/table/tableproperties.cxx -@@ -288,7 +288,7 @@ void TableProperties::pushToPropSet( const ::oox::core::XmlFilterBase& rFilterBa - - Reference< XCellRange > xCellRange( xTable, UNO_QUERY_THROW ); - rTableCell.pushToXCell( rFilterBase, pMasterTextListStyle, xCellRange->getCellByPosition( nColumn, nRow ), *this, rTableStyle, -- nColumn, aTableRowIter->getTableCells().size(), nRow, mvTableRows.size() ); -+ nColumn, aTableRowIter->getTableCells().size()-1, nRow, mvTableRows.size()-1 ); - } - } - } --- -1.9.3 - diff --git a/SOURCES/0029-fdo-81470-Fix-a-crasher-during-xlsx-export-with-revi.patch b/SOURCES/0029-fdo-81470-Fix-a-crasher-during-xlsx-export-with-revi.patch deleted file mode 100644 index c38e1d6..0000000 --- a/SOURCES/0029-fdo-81470-Fix-a-crasher-during-xlsx-export-with-revi.patch +++ /dev/null @@ -1,40 +0,0 @@ -From c7727b1c1682a1373668c898a2de1b1627a09d8c Mon Sep 17 00:00:00 2001 -From: Kohei Yoshida -Date: Thu, 17 Jul 2014 15:52:52 -0400 -Subject: [PATCH 029/137] fdo#81470: Fix a crasher during xlsx export with - revisions. - -Calling Undo() here removes revision entries which also removes formula -cell instances stored in the entries. The problem is that the -XclExpChTrCellContent instances store pointers to these formula instances -for later use, and removing the entries at this location causes deleted -formula instances to get accessed which in turn causes segfault. - -Since all revision entries get deleted when the temp change track instance -gets deleted at the end of the revision export, not deleting the entries -here will not cause memory leaks. - -Change-Id: I85f8064945a841b684e4fc4a97c3f9bb6a2de353 -(cherry picked from commit 3bce16799c34d0b28704c43eae77501c0f6aec1e) -Reviewed-on: https://gerrit.libreoffice.org/10371 -Reviewed-by: Markus Mohrhard -Tested-by: Markus Mohrhard ---- - sc/source/filter/xcl97/XclExpChangeTrack.cxx | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/sc/source/filter/xcl97/XclExpChangeTrack.cxx b/sc/source/filter/xcl97/XclExpChangeTrack.cxx -index 7033b3e..4589aea 100644 ---- a/sc/source/filter/xcl97/XclExpChangeTrack.cxx -+++ b/sc/source/filter/xcl97/XclExpChangeTrack.cxx -@@ -1443,7 +1443,6 @@ XclExpChangeTrack::XclExpChangeTrack( const XclExpRoot& rRoot ) : - { - PushActionRecord( *pScAction ); - const ScChangeAction* pPrevAction = pScAction->GetPrev(); -- pTempChangeTrack->Undo( pScAction->GetActionNumber(), pScAction->GetActionNumber() ); - pScAction = pPrevAction; - } - --- -1.9.3 - diff --git a/SOURCES/0031-use-rtl-math-round-here-to-get-the-same-number-on-32.patch b/SOURCES/0031-use-rtl-math-round-here-to-get-the-same-number-on-32.patch deleted file mode 100644 index 3dfd8f2..0000000 --- a/SOURCES/0031-use-rtl-math-round-here-to-get-the-same-number-on-32.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 008f5ba99fd89cd6a6e4db90e8db16e02fe0b027 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Mat=C3=BA=C5=A1=20Kukan?= -Date: Fri, 18 Jul 2014 10:04:09 +0200 -Subject: [PATCH 031/137] use rtl::math::round here to get the same number on - 32/64bit platforms - -This fixes sd_import_tests where 100*0.35 was 34 on 32bit platform. - -Change-Id: I45705326e91892beb814bd94e074b0a652709768 -(cherry picked from commit ba6da9545764f2545313ba085ed4a096165180fd) -Reviewed-on: https://gerrit.libreoffice.org/10382 -Reviewed-by: Markus Mohrhard -Tested-by: Markus Mohrhard ---- - oox/source/drawingml/fillproperties.cxx | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/oox/source/drawingml/fillproperties.cxx b/oox/source/drawingml/fillproperties.cxx -index a5eb026..a81a5d2 100644 ---- a/oox/source/drawingml/fillproperties.cxx -+++ b/oox/source/drawingml/fillproperties.cxx -@@ -37,6 +37,7 @@ - #include "oox/drawingml/drawingmltypes.hxx" - #include "oox/drawingml/shapepropertymap.hxx" - #include "oox/token/tokens.hxx" -+#include - - using namespace ::com::sun::star; - using namespace ::com::sun::star::drawing; -@@ -567,7 +568,7 @@ void FillProperties::pushToPropMap( ShapePropertyMap& rPropMap, - if( aEndColor.hasTransparency() ) - nEndTrans = aEndColor.getTransparency()*255/100; - -- aGradient.Border = 100*nBorder; -+ aGradient.Border = rtl::math::round(100*nBorder); - } - - // push gradient or named gradient to property map --- -1.9.3 - diff --git a/SOURCES/0033-bnc-887230-always-use-theme-color-for-hyperlinks-in-.patch b/SOURCES/0033-bnc-887230-always-use-theme-color-for-hyperlinks-in-.patch deleted file mode 100644 index 931d5ce..0000000 --- a/SOURCES/0033-bnc-887230-always-use-theme-color-for-hyperlinks-in-.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 6786bb6571c2d84cdfb2c09ff739c512459e4367 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Mat=C3=BA=C5=A1=20Kukan?= -Date: Fri, 18 Jul 2014 09:23:17 +0200 -Subject: [PATCH 033/137] bnc#887230: always use theme color for hyperlinks in - Impress - -Change-Id: I888f107c61037162439ad2d1ba99ad8185532f71 -(cherry picked from commit 92f74f6ccb5a55807724db85815f7ea0c49370e0) -Reviewed-on: https://gerrit.libreoffice.org/10383 -Reviewed-by: Andras Timar -Tested-by: Andras Timar ---- - oox/source/drawingml/textrun.cxx | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/oox/source/drawingml/textrun.cxx b/oox/source/drawingml/textrun.cxx -index c4648c2..6c5259e 100644 ---- a/oox/source/drawingml/textrun.cxx -+++ b/oox/source/drawingml/textrun.cxx -@@ -140,8 +140,7 @@ sal_Int32 TextRun::insertAt( - - xTextFieldCursor->gotoEnd( sal_True ); - -- if ( !maTextCharacterProperties.maCharColor.isUsed() ) -- aTextCharacterProps.maCharColor.setSchemeClr( XML_hlink ); -+ aTextCharacterProps.maCharColor.setSchemeClr( XML_hlink ); - if ( !maTextCharacterProperties.moUnderline.has() ) - aTextCharacterProps.moUnderline.set( XML_sng ); - --- -1.9.3 - diff --git a/SOURCES/0035-related-fdo-78502-writerfilter-RTF-import-fix-invali.patch b/SOURCES/0035-related-fdo-78502-writerfilter-RTF-import-fix-invali.patch deleted file mode 100644 index 6efeee7..0000000 --- a/SOURCES/0035-related-fdo-78502-writerfilter-RTF-import-fix-invali.patch +++ /dev/null @@ -1,36 +0,0 @@ -From e7bd0484228beb4529e84742faf56f813dca495a Mon Sep 17 00:00:00 2001 -From: Michael Stahl -Date: Fri, 18 Jul 2014 22:07:02 +0200 -Subject: [PATCH 035/137] (related: fdo#78502) writerfilter: RTF import: fix - invalid string copy -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -... in leveltext destination. - -Change-Id: I74de6d14170130bf33923854a0c9851dc7cc390f -(cherry picked from commit b94bd40b915ab32d18d43fc60dfda932e4e00ca8) -Reviewed-on: https://gerrit.libreoffice.org/10397 -Reviewed-by: Caolán McNamara -Tested-by: Caolán McNamara ---- - writerfilter/source/rtftok/rtfdocumentimpl.cxx | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx -index 66abe80..73eb3f2 100644 ---- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx -+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx -@@ -4278,7 +4278,7 @@ int RTFDocumentImpl::popState() - // The first character is the length of the string (the rest should be ignored). - sal_Int32 nLength(aStr.toChar()); - OUString aValue; -- if (nLength <= aStr.getLength()) -+ if (nLength < aStr.getLength()) - aValue = aStr.copy(1, nLength); - else - aValue = aStr; --- -1.9.3 - diff --git a/SOURCES/0036-fdo-79676-Fix-the-Java-UNO-API-test-with-regard-to-c.patch b/SOURCES/0036-fdo-79676-Fix-the-Java-UNO-API-test-with-regard-to-c.patch deleted file mode 100644 index e760e22..0000000 --- a/SOURCES/0036-fdo-79676-Fix-the-Java-UNO-API-test-with-regard-to-c.patch +++ /dev/null @@ -1,65 +0,0 @@ -From d19c216f191ca13b7895b69cd5790d526aec2bb5 Mon Sep 17 00:00:00 2001 -From: Kohei Yoshida -Date: Tue, 10 Jun 2014 09:36:54 -0400 -Subject: [PATCH 036/137] fdo#79676: Fix the Java UNO API test with regard to - chart tests. - -The Java tests rely on the "undocumented" behavior that, when loading an empty -chart document, the chart automaticallly created a "default chart" which is a -column chart with many of its properties filled. Unfortunately this behavior -caused ugly side effects when loading documents with charts via flat ODF -filter. - -I believe fixing the test this way is the right fix. - -Change-Id: If3e6c8979da9d0731346ebeedc23c0d3363e83fd -(cherry picked from commit d44b58beed743871df03909e7d9545e488f3d7c8) -Signed-off-by: Michael Stahl ---- - qadevOOo/runner/util/SOfficeFactory.java | 9 +++++++-- - sfx2/qa/complex/sfx2/undo/ChartDocumentTest.java | 4 ++++ - 2 files changed, 11 insertions(+), 2 deletions(-) - -diff --git a/qadevOOo/runner/util/SOfficeFactory.java b/qadevOOo/runner/util/SOfficeFactory.java -index 2a0f0ed..f464ea8 100644 ---- a/qadevOOo/runner/util/SOfficeFactory.java -+++ b/qadevOOo/runner/util/SOfficeFactory.java -@@ -225,7 +225,12 @@ public class SOfficeFactory { - - if (oDoc != null) { - DesktopTools.bringWindowToFront(oDoc); -- return UnoRuntime.queryInterface(XChartDocument.class, oDoc); -+ XChartDocument xChartDoc = UnoRuntime.queryInterface(XChartDocument.class, oDoc); -+ // Create a default chart which many chart tests rely on. -+ com.sun.star.chart2.XChartDocument xCD2 = -+ UnoRuntime.queryInterface(com.sun.star.chart2.XChartDocument.class, oDoc); -+ xCD2.createDefaultChart(); -+ return xChartDoc; - } else { - return null; - } -@@ -616,4 +621,4 @@ public class SOfficeFactory { - } - return null; - } // finish queryXServiceInfo --} -\ No newline at end of file -+} -diff --git a/sfx2/qa/complex/sfx2/undo/ChartDocumentTest.java b/sfx2/qa/complex/sfx2/undo/ChartDocumentTest.java -index 3eb7d4e..75981d7 100644 ---- a/sfx2/qa/complex/sfx2/undo/ChartDocumentTest.java -+++ b/sfx2/qa/complex/sfx2/undo/ChartDocumentTest.java -@@ -74,6 +74,10 @@ public class ChartDocumentTest implements DocumentTest - - // retrieve the chart model - XChartDocument chartDoc = UnoRuntime.queryInterface( XChartDocument.class, shapeProps.getPropertyValue( "Model" ) ); -+ // insert default chart for the test to use. -+ com.sun.star.chart2.XChartDocument xCD2 = -+ UnoRuntime.queryInterface(com.sun.star.chart2.XChartDocument.class, chartDoc); -+ xCD2.createDefaultChart(); - m_chartDocument = new OfficeDocument( i_orb, chartDoc ); - - // actually activate the object --- -1.9.3 - diff --git a/SOURCES/0038-bool-improvements.patch b/SOURCES/0038-bool-improvements.patch deleted file mode 100644 index 4262f1e..0000000 --- a/SOURCES/0038-bool-improvements.patch +++ /dev/null @@ -1,197 +0,0 @@ -From eb758877fb799111673b909e73065cb6d966881a Mon Sep 17 00:00:00 2001 -From: Stephan Bergmann -Date: Tue, 28 Jan 2014 20:00:40 +0100 -Subject: [PATCH 038/137] bool improvements - -Change-Id: I7ae2b02e435d21390843c6c56877a8ce3a73f9f2 -(cherry picked from commit bd4053f895167978978023309925c85c3826b31a) -Signed-off-by: Michael Stahl ---- - sal/osl/all/debugbase.cxx | 2 +- - sal/qa/osl/file/osl_File.cxx | 4 ++-- - sal/qa/osl/module/osl_Module.cxx | 8 ++++---- - sal/qa/osl/mutex/osl_Mutex.cxx | 2 +- - sal/qa/osl/process/osl_Thread.cxx | 2 +- - sal/qa/osl/security/osl_Security.cxx | 2 +- - sal/rtl/alloc_global.cxx | 6 +++--- - sal/rtl/hash.cxx | 4 ++-- - sal/rtl/uri.cxx | 2 +- - 9 files changed, 16 insertions(+), 16 deletions(-) - -diff --git a/sal/osl/all/debugbase.cxx b/sal/osl/all/debugbase.cxx -index 8bc0c46..57238ce 100644 ---- a/sal/osl/all/debugbase.cxx -+++ b/sal/osl/all/debugbase.cxx -@@ -32,7 +32,7 @@ - { \ - if (!(c) && _OSL_GLOBAL osl_assertFailedLine(f, l, m)) \ - _OSL_GLOBAL osl_breakDebug(); \ -- } while (0) -+ } while (false) - #define DEBUGBASE_ENSURE(c, m) DEBUGBASE_ENSURE_(c, OSL_THIS_FILE, __LINE__, m) - - namespace { -diff --git a/sal/qa/osl/file/osl_File.cxx b/sal/qa/osl/file/osl_File.cxx -index 43f255c..54055fe 100644 ---- a/sal/qa/osl/file/osl_File.cxx -+++ b/sal/qa/osl/file/osl_File.cxx -@@ -2587,7 +2587,7 @@ namespace osl_FileStatus - ::osl::FileBase::RC nError1 = testDirectory.open(); - ::rtl::OUString aFileName ("link.file"); - sal_Bool bOk = sal_False; -- while (1) { -+ while (true) { - nError1 = testDirectory.getNextItem( rItem_link, 4 ); - if (::osl::FileBase::E_None == nError1) { - sal_uInt32 mask_link = osl_FileStatus_Mask_FileName | osl_FileStatus_Mask_LinkTargetURL; -@@ -5639,7 +5639,7 @@ namespace osl_Directory - CPPUNIT_ASSERT( ::osl::FileBase::E_None == nError1 ); - ::rtl::OUString aFileName ("link.file"); - -- while (1) { -+ while (true) { - nError1 = testDirectory.getNextItem( rItem, 4 ); - if (::osl::FileBase::E_None == nError1) { - ::osl::FileStatus rFileStatus( osl_FileStatus_Mask_FileName | osl_FileStatus_Mask_Type ); -diff --git a/sal/qa/osl/module/osl_Module.cxx b/sal/qa/osl/module/osl_Module.cxx -index d6358d4..ee547fb 100644 ---- a/sal/qa/osl/module/osl_Module.cxx -+++ b/sal/qa/osl/module/osl_Module.cxx -@@ -189,7 +189,7 @@ namespace osl_Module - - if ( !( bRes ) ) - { -- CPPUNIT_ASSERT_MESSAGE("Cannot locate current module.", sal_False ); -+ CPPUNIT_ASSERT_MESSAGE("Cannot locate current module.", false ); - } - - ::osl::Module aMod( aFileURL ); -@@ -221,7 +221,7 @@ namespace osl_Module - bRes = osl::Module::getUrlFromAddress( ( void* ) &::osl_Module::testClass::myFunc, aFileURL ) ; - if ( !( bRes ) ) - { -- CPPUNIT_ASSERT_MESSAGE("Cannot locate current module.", sal_False ); -+ CPPUNIT_ASSERT_MESSAGE("Cannot locate current module.", false ); - } - - CPPUNIT_ASSERT_MESSAGE( "#test comment#: test get Module URL from address.", -@@ -239,7 +239,7 @@ namespace osl_Module - bRes = osl::Module::getUrlFromAddress( ( void* )pFunc, aFileURL ); - if ( !( bRes ) ) - { -- CPPUNIT_ASSERT_MESSAGE("Cannot locate current module.", sal_False ); -+ CPPUNIT_ASSERT_MESSAGE("Cannot locate current module.", false ); - } - aMod.unload( ); - -@@ -325,7 +325,7 @@ namespace osl_Module - bRes = osl::Module::getUrlFromAddress( ( void* ) &::osl_Module::testClass::myFunc, aFileURL ); - if ( !( bRes ) ) - { -- CPPUNIT_ASSERT_MESSAGE("Cannot locate current module - using executable instead", sal_False ); -+ CPPUNIT_ASSERT_MESSAGE("Cannot locate current module - using executable instead", false ); - } - - ::osl::Module aMod; -diff --git a/sal/qa/osl/mutex/osl_Mutex.cxx b/sal/qa/osl/mutex/osl_Mutex.cxx -index 0e9ce85..3f86f9c 100644 ---- a/sal/qa/osl/mutex/osl_Mutex.cxx -+++ b/sal/qa/osl/mutex/osl_Mutex.cxx -@@ -732,7 +732,7 @@ namespace osl_ClearableGuard - // wait 1 second to assure the child thread has begun - ThreadHelper::thread_sleep(1); - -- while (1) -+ while (true) - { - if (aMutex.tryToAcquire() == sal_True) - { -diff --git a/sal/qa/osl/process/osl_Thread.cxx b/sal/qa/osl/process/osl_Thread.cxx -index 3e394aa..aeab4e9 100644 ---- a/sal/qa/osl/process/osl_Thread.cxx -+++ b/sal/qa/osl/process/osl_Thread.cxx -@@ -626,7 +626,7 @@ namespace osl_Thread - void suspendCountThread(OCountThread* _pCountThread) - { - sal_Int32 nValue = 0; -- while (1) -+ while (true) - { - nValue = _pCountThread->getValue(); - if (nValue >= 3) -diff --git a/sal/qa/osl/security/osl_Security.cxx b/sal/qa/osl/security/osl_Security.cxx -index e9ad1a7..3ad78b0 100644 ---- a/sal/qa/osl/security/osl_Security.cxx -+++ b/sal/qa/osl/security/osl_Security.cxx -@@ -280,7 +280,7 @@ namespace osl_Security - { - ::osl::Security aSec; - osl_unloadUserProfile(aSec.getHandle()); -- CPPUNIT_ASSERT_MESSAGE( "empty function.", sal_True ); -+ CPPUNIT_ASSERT_MESSAGE( "empty function.", true ); - } - - CPPUNIT_TEST_SUITE( UserProfile ); -diff --git a/sal/rtl/alloc_global.cxx b/sal/rtl/alloc_global.cxx -index 8194b13..07cded3 100644 ---- a/sal/rtl/alloc_global.cxx -+++ b/sal/rtl/alloc_global.cxx -@@ -291,7 +291,7 @@ void* SAL_CALL rtl_allocateMemory (sal_Size n) SAL_THROW_EXTERN_C() - n >= SAL_MAX_INT32, "sal.rtl", - "suspicious massive alloc " << n); - #if !defined(FORCE_SYSALLOC) -- while (1) -+ while (true) - { - if (alloc_mode == AMode_CUSTOM) - { -@@ -314,7 +314,7 @@ void* SAL_CALL rtl_reallocateMemory (void * p, sal_Size n) SAL_THROW_EXTERN_C() - n >= SAL_MAX_INT32, "sal.rtl", - "suspicious massive alloc " << n); - #if !defined(FORCE_SYSALLOC) -- while (1) -+ while (true) - { - if (alloc_mode == AMode_CUSTOM) - { -@@ -334,7 +334,7 @@ void* SAL_CALL rtl_reallocateMemory (void * p, sal_Size n) SAL_THROW_EXTERN_C() - void SAL_CALL rtl_freeMemory (void * p) SAL_THROW_EXTERN_C() - { - #if !defined(FORCE_SYSALLOC) -- while (1) -+ while (true) - { - if (alloc_mode == AMode_CUSTOM) - { -diff --git a/sal/rtl/hash.cxx b/sal/rtl/hash.cxx -index 823e56a..47e8681 100644 ---- a/sal/rtl/hash.cxx -+++ b/sal/rtl/hash.cxx -@@ -139,9 +139,9 @@ static int - compareEqual (rtl_uString *pStringA, rtl_uString *pStringB) - { - if (pStringA == pStringB) -- return 1; -+ return true; - if (pStringA->length != pStringB->length) -- return 0; -+ return false; - return !rtl_ustr_compare_WithLength( pStringA->buffer, pStringA->length, - pStringB->buffer, pStringB->length); - } -diff --git a/sal/rtl/uri.cxx b/sal/rtl/uri.cxx -index 7e4402f..513fb51 100644 ---- a/sal/rtl/uri.cxx -+++ b/sal/rtl/uri.cxx -@@ -142,7 +142,7 @@ sal_uInt32 readUcs4(sal_Unicode const ** pBegin, sal_Unicode const * pEnd, - || nWeight1 > 11 - || (nWeight2 = getHexWeight(p[2])) < 0) - { -- bUTF8 = sal_False; -+ bUTF8 = false; - break; - } - p += 3; --- -1.9.3 - diff --git a/SOURCES/0039-Adapt-to-sal-log.hxx.patch b/SOURCES/0039-Adapt-to-sal-log.hxx.patch deleted file mode 100644 index a86f94b..0000000 --- a/SOURCES/0039-Adapt-to-sal-log.hxx.patch +++ /dev/null @@ -1,84 +0,0 @@ -From e5285e0186a1e45e3c12f6775f8ef24bccb9a871 Mon Sep 17 00:00:00 2001 -From: Stephan Bergmann -Date: Tue, 25 Mar 2014 12:18:05 +0100 -Subject: [PATCH 039/137] Adapt to sal/log.hxx - -(cherry picked from commit 3c5d30c03b4b2d2c4d38d602afc839e7a922bca3) -Signed-off-by: Michael Stahl - -Note: this avoids an abort() in smoketest due to leaking -SvxUnoTextRangeBase - -Change-Id: I9c59495977e111d94077470f07591c91fa3c1665 ---- - sal/osl/all/debugbase.cxx | 30 +++++++----------------------- - 1 file changed, 7 insertions(+), 23 deletions(-) - -diff --git a/sal/osl/all/debugbase.cxx b/sal/osl/all/debugbase.cxx -index 57238ce..75cd846 100644 ---- a/sal/osl/all/debugbase.cxx -+++ b/sal/osl/all/debugbase.cxx -@@ -23,18 +23,10 @@ - #include "rtl/ustring.hxx" - #include "osl/process.h" - #include "osl/diagnose.hxx" -+#include "sal/log.hxx" - #include "boost/bind.hpp" - #include - --// define own ones, independent of OSL_DEBUG_LEVEL: --#define DEBUGBASE_ENSURE_(c, f, l, m) \ -- do \ -- { \ -- if (!(c) && _OSL_GLOBAL osl_assertFailedLine(f, l, m)) \ -- _OSL_GLOBAL osl_breakDebug(); \ -- } while (false) --#define DEBUGBASE_ENSURE(c, m) DEBUGBASE_ENSURE_(c, OSL_THIS_FILE, __LINE__, m) -- - namespace { - - typedef std::vector > OStringVec; -@@ -118,16 +110,10 @@ bool SAL_CALL osl_detail_ObjectRegistry_checkObjectCount( - nSize = static_cast(rData.m_nCount); - - bool const bRet = (nSize == nExpected); -- if (! bRet) { -- rtl::OStringBuffer buf; -- buf.append( "unexpected number of " ); -- buf.append( rData.m_pName ); -- buf.append( ": " ); -- buf.append( static_cast(nSize) ); -- buf.append("; Expected: "); -- buf.append( static_cast(nExpected) ); -- DEBUGBASE_ENSURE( false, buf.makeStringAndClear().getStr() ); -- } -+ SAL_WARN_IF( -+ !bRet, "sal.osl", -+ "unexpected number of " << rData.m_pName << ": " << nSize -+ << "; Expected: " << nExpected); - return bRet; - } - -@@ -139,8 +125,7 @@ void SAL_CALL osl_detail_ObjectRegistry_registerObject( - osl::MutexGuard const guard( osl_detail_ObjectRegistry_getMutex() ); - std::pair const insertion( - rData.m_addresses.insert(pObj) ); -- DEBUGBASE_ENSURE( insertion.second, "### insertion failed!?" ); -- static_cast(insertion); -+ SAL_WARN_IF(!insertion.second, "sal.osl", "insertion failed!?"); - } - else { - osl_atomic_increment(&rData.m_nCount); -@@ -154,8 +139,7 @@ void SAL_CALL osl_detail_ObjectRegistry_revokeObject( - if (rData.m_bStoreAddresses) { - osl::MutexGuard const guard( osl_detail_ObjectRegistry_getMutex() ); - std::size_t const n = rData.m_addresses.erase(pObj); -- DEBUGBASE_ENSURE( n == 1, "erased more than 1 entry!?" ); -- static_cast(n); -+ SAL_WARN_IF(n != 1, "sal.osl", "erased more than 1 entry!?"); - } - else { - osl_atomic_decrement(&rData.m_nCount); --- -1.9.3 - diff --git a/SOURCES/0040-bnc-885548-Initial-work-on-importing-revisions-from-.patch b/SOURCES/0040-bnc-885548-Initial-work-on-importing-revisions-from-.patch deleted file mode 100644 index 3c45595..0000000 --- a/SOURCES/0040-bnc-885548-Initial-work-on-importing-revisions-from-.patch +++ /dev/null @@ -1,637 +0,0 @@ -From 9f15c9ec6fa129bf17da4cb86209a1ff2c013af7 Mon Sep 17 00:00:00 2001 -From: Kohei Yoshida -Date: Wed, 16 Jul 2014 19:59:35 -0400 -Subject: [PATCH 040/137] bnc#885548: Initial work on importing revisions from - xlsx. - -Change-Id: Ie0528490d024093cbabf38541fe70be96a9caa2e -(cherry picked from commit b92fdaa1a40bd54d279b4ac2faf19bf15468cc2f) -(cherry picked from commit 6c24bf4cab7e2a9514cf99160a31728835198741) -Signed-off-by: Andras Timar ---- - sc/Library_scfilt.mk | 1 + - sc/inc/chgtrack.hxx | 2 +- - sc/source/filter/inc/revisionfragment.hxx | 79 +++++ - sc/source/filter/oox/revisionfragment.cxx | 462 ++++++++++++++++++++++++++++++ - sc/source/filter/oox/workbookfragment.cxx | 11 +- - 5 files changed, 553 insertions(+), 2 deletions(-) - create mode 100644 sc/source/filter/inc/revisionfragment.hxx - create mode 100644 sc/source/filter/oox/revisionfragment.cxx - -diff --git a/sc/Library_scfilt.mk b/sc/Library_scfilt.mk -index eb0d5d2..c034e61 100644 ---- a/sc/Library_scfilt.mk -+++ b/sc/Library_scfilt.mk -@@ -198,6 +198,7 @@ $(eval $(call gb_Library_add_exception_objects,scfilt,\ - sc/source/filter/oox/pivottablefragment \ - sc/source/filter/oox/querytablebuffer \ - sc/source/filter/oox/querytablefragment \ -+ sc/source/filter/oox/revisionfragment \ - sc/source/filter/oox/richstringcontext \ - sc/source/filter/oox/richstring \ - sc/source/filter/oox/scenariobuffer \ -diff --git a/sc/inc/chgtrack.hxx b/sc/inc/chgtrack.hxx -index 5fdb50b..1f6ddcd 100644 ---- a/sc/inc/chgtrack.hxx -+++ b/sc/inc/chgtrack.hxx -@@ -1101,7 +1101,7 @@ public: - sal_uLong nOldFormat, ScDocument* pRefDoc = NULL ); - // after new value was set in the document, - // old value from pOldCell, format from Doc -- void AppendContent( const ScAddress& rPos, const ScCellValue& rOldCell ); -+ SC_DLLPUBLIC void AppendContent( const ScAddress& rPos, const ScCellValue& rOldCell ); - // after new values were set in the document, - // old values from RefDoc/UndoDoc. - // All contents with a cell in RefDoc -diff --git a/sc/source/filter/inc/revisionfragment.hxx b/sc/source/filter/inc/revisionfragment.hxx -new file mode 100644 -index 0000000..473549e ---- /dev/null -+++ b/sc/source/filter/inc/revisionfragment.hxx -@@ -0,0 +1,79 @@ -+/* -*- 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/. -+ */ -+ -+#ifndef INCLUDED_SC_OOX_XLS_REVISIONFRAGMENT_HXX -+#define INCLUDED_SC_OOX_XLS_REVISIONFRAGMENT_HXX -+ -+#include -+ -+class ScChangeTrack; -+ -+namespace oox { namespace xls { -+ -+class RevisionHeadersFragment : public WorkbookFragmentBase -+{ -+ struct Impl; -+ Impl* mpImpl; -+ -+public: -+ explicit RevisionHeadersFragment( -+ const WorkbookHelper& rHelper, const OUString& rFragmentPath ); -+ -+ virtual ~RevisionHeadersFragment(); -+ -+protected: -+ virtual oox::core::ContextHandlerRef onCreateContext( -+ sal_Int32 nElement, const AttributeList& rAttribs ) SAL_OVERRIDE; -+ -+ virtual void onStartElement( const AttributeList& rAttribs ) SAL_OVERRIDE; -+ virtual void onCharacters( const OUString& rChars ) SAL_OVERRIDE; -+ virtual void onEndElement() SAL_OVERRIDE; -+ -+ virtual void finalizeImport() SAL_OVERRIDE; -+ -+private: -+ void importHeaders( const AttributeList& rAttribs ); -+ void importHeader( const AttributeList& rAttribs ); -+}; -+ -+class RevisionLogFragment : public WorkbookFragmentBase -+{ -+ struct Impl; -+ Impl* mpImpl; -+ -+public: -+ explicit RevisionLogFragment( -+ const WorkbookHelper& rHelper, const OUString& rFragmentPath, ScChangeTrack& rChangeTrack ); -+ -+ virtual ~RevisionLogFragment(); -+ -+protected: -+ virtual oox::core::ContextHandlerRef onCreateContext( -+ sal_Int32 nElement, const AttributeList& rAttribs ) SAL_OVERRIDE; -+ -+ virtual void onStartElement( const AttributeList& rAttribs ) SAL_OVERRIDE; -+ virtual void onCharacters( const OUString& rChars ) SAL_OVERRIDE; -+ virtual void onEndElement() SAL_OVERRIDE; -+ -+ virtual void finalizeImport() SAL_OVERRIDE; -+ -+private: -+ void importCommon( const AttributeList& rAttribs ); -+ void importRcc( const AttributeList& rAttribs ); -+ void importRrc( const AttributeList& rAttribs ); -+ -+ void pushRevision(); -+}; -+ -+}} -+ -+#endif -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -+ -diff --git a/sc/source/filter/oox/revisionfragment.cxx b/sc/source/filter/oox/revisionfragment.cxx -new file mode 100644 -index 0000000..dd8cc4b ---- /dev/null -+++ b/sc/source/filter/oox/revisionfragment.cxx -@@ -0,0 +1,462 @@ -+/* -*- 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 -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+ -+#include -+ -+using namespace com::sun::star; -+ -+namespace oox { namespace xls { -+ -+namespace { -+ -+enum RevisionType -+{ -+ REV_UNKNOWN = 0, -+ REV_CELLCHANGE, -+ REV_INSERTROW, -+ REV_DELETEROW, -+ REV_INSERTCOL, -+ REV_DELETECOL -+}; -+ -+/** -+ * For nc (new cell) or oc (old cell) elements under rcc (cell content -+ * revision). -+ */ -+class RCCCellValueContext : public WorkbookContextBase -+{ -+ sal_Int32 mnSheetIndex; -+ ScAddress& mrPos; -+ ScCellValue& mrCellValue; -+ sal_Int32 mnType; -+ -+ RichStringRef mxRichString; -+ -+public: -+ RCCCellValueContext( -+ RevisionLogFragment& rParent, sal_Int32 nSheetIndex, ScAddress& rPos, ScCellValue& rCellValue ) : -+ WorkbookContextBase(rParent), -+ mnSheetIndex(nSheetIndex), -+ mrPos(rPos), -+ mrCellValue(rCellValue), -+ mnType(-1) {} -+ -+protected: -+ virtual oox::core::ContextHandlerRef onCreateContext( -+ sal_Int32 nElement, const AttributeList& /*rAttribs*/ ) SAL_OVERRIDE -+ { -+ if (nElement == XLS_TOKEN(is)) -+ { -+ mxRichString.reset(new RichString(*this)); -+ return new RichStringContext(*this, mxRichString); -+ } -+ -+ return this; -+ } -+ -+ virtual void onStartElement( const AttributeList& rAttribs ) SAL_OVERRIDE -+ { -+ switch (getCurrentElement()) -+ { -+ case XLS_TOKEN(nc): -+ case XLS_TOKEN(oc): -+ importCell(rAttribs); -+ break; -+ default: -+ ; -+ } -+ } -+ -+ virtual void onCharacters( const OUString& rChars ) SAL_OVERRIDE -+ { -+ switch (getCurrentElement()) -+ { -+ case XLS_TOKEN(v): -+ { -+ if (mnType == XML_n || mnType == XML_b) -+ mrCellValue.set(rChars.toDouble()); -+ } -+ break; -+ case XLS_TOKEN(t): -+ { -+ if (mnType == XML_inlineStr) -+ { -+ ScDocument& rDoc = getScDocument(); -+ svl::SharedStringPool& rPool = rDoc.GetSharedStringPool(); -+ mrCellValue.set(rPool.intern(rChars)); -+ } -+ } -+ break; -+ case XLS_TOKEN(f): -+ { -+ // formula string -+ ScDocument& rDoc = getScDocument(); -+ ScCompiler aComp(&rDoc, mrPos); -+ aComp.SetGrammar(formula::FormulaGrammar::GRAM_OOXML); -+ ScTokenArray* pArray = aComp.CompileString(rChars); -+ if (!pArray) -+ break; -+ -+ mrCellValue.set(new ScFormulaCell(&rDoc, mrPos, pArray)); -+ } -+ break; -+ default: -+ ; -+ } -+ } -+ -+ virtual void onEndElement() SAL_OVERRIDE -+ { -+ switch (getCurrentElement()) -+ { -+ case XLS_TOKEN(nc): -+ case XLS_TOKEN(oc): -+ { -+ if (mrCellValue.isEmpty() && mxRichString) -+ { -+ // The value is a rich text string. -+ ScDocument& rDoc = getScDocument(); -+ EditTextObject* pTextObj = mxRichString->convert(rDoc.GetEditEngine(), NULL); -+ if (pTextObj) -+ { -+ svl::SharedStringPool& rPool = rDoc.GetSharedStringPool(); -+ pTextObj->NormalizeString(rPool); -+ mrCellValue.set(pTextObj); -+ } -+ } -+ } -+ break; -+ default: -+ ; -+ } -+ } -+ -+private: -+ void importCell( const AttributeList& rAttribs ) -+ { -+ mnType = rAttribs.getToken(XML_t, XML_n); -+ OUString aRefStr = rAttribs.getString(XML_r, OUString()); -+ if (!aRefStr.isEmpty()) -+ { -+ mrPos.Parse(aRefStr, NULL, formula::FormulaGrammar::CONV_XL_OOX); -+ if (mnSheetIndex != -1) -+ mrPos.SetTab(mnSheetIndex-1); -+ } -+ } -+}; -+ -+struct RevisionMetadata -+{ -+ OUString maUserName; -+ DateTime maDateTime; -+ -+ RevisionMetadata() : maDateTime(DateTime::EMPTY) {} -+ RevisionMetadata( const RevisionMetadata& r ) : -+ maUserName(r.maUserName), maDateTime(r.maDateTime) {} -+}; -+ -+} -+ -+typedef std::map RevDataType; -+ -+struct RevisionHeadersFragment::Impl -+{ -+ RevDataType maRevData; -+ -+ Impl() {} -+}; -+ -+RevisionHeadersFragment::RevisionHeadersFragment( -+ const WorkbookHelper& rHelper, const OUString& rFragmentPath ) : -+ WorkbookFragmentBase(rHelper, rFragmentPath), -+ mpImpl(new Impl) {} -+ -+RevisionHeadersFragment::~RevisionHeadersFragment() -+{ -+ delete mpImpl; -+} -+ -+oox::core::ContextHandlerRef RevisionHeadersFragment::onCreateContext( -+ sal_Int32 /*nElement*/, const AttributeList& /*rAttribs*/ ) -+{ -+ return this; -+} -+ -+void RevisionHeadersFragment::onStartElement( const AttributeList& rAttribs ) -+{ -+ switch (getCurrentElement()) -+ { -+ case XLS_TOKEN(headers): -+ importHeaders(rAttribs); -+ break; -+ case XLS_TOKEN(header): -+ importHeader(rAttribs); -+ break; -+ case XLS_TOKEN(sheetIdMap): -+ break; -+ case XLS_TOKEN(sheetId): -+ break; -+ default: -+ ; -+ } -+} -+ -+void RevisionHeadersFragment::onCharacters( const OUString& /*rChars*/ ) {} -+ -+void RevisionHeadersFragment::onEndElement() -+{ -+ switch (getCurrentElement()) -+ { -+ case XLS_TOKEN(headers): -+ break; -+ case XLS_TOKEN(header): -+ break; -+ case XLS_TOKEN(sheetIdMap): -+ break; -+ case XLS_TOKEN(sheetId): -+ break; -+ default: -+ ; -+ } -+} -+ -+void RevisionHeadersFragment::finalizeImport() -+{ -+ ScDocument& rDoc = getScDocument(); -+ o3tl::heap_ptr pCT(new ScChangeTrack(&rDoc)); -+ pCT->SetUseFixDateTime(true); -+ -+ const oox::core::Relations& rRels = getRelations(); -+ RevDataType::const_iterator it = mpImpl->maRevData.begin(), itEnd = mpImpl->maRevData.end(); -+ for (; it != itEnd; ++it) -+ { -+ OUString aPath = rRels.getFragmentPathFromRelId(it->first); -+ if (aPath.isEmpty()) -+ continue; -+ -+ // Parse each reivison log fragment. -+ const RevisionMetadata& rData = it->second; -+ pCT->SetUser(rData.maUserName); -+ pCT->SetFixDateTimeLocal(rData.maDateTime); -+ boost::scoped_ptr xParser(getOoxFilter().createParser()); -+ rtl::Reference xFragment(new RevisionLogFragment(*this, aPath, *pCT)); -+ importOoxFragment(xFragment, *xParser); -+ } -+ -+ rDoc.SetChangeTrack(pCT.release()); -+ -+ // Turn on visibility of tracked changes. -+ ScChangeViewSettings aSettings; -+ aSettings.SetShowChanges(true); -+ rDoc.SetChangeViewSettings(aSettings); -+} -+ -+void RevisionHeadersFragment::importHeaders( const AttributeList& /*rAttribs*/ ) -+{ -+ // Nothing for now. -+} -+ -+void RevisionHeadersFragment::importHeader( const AttributeList& rAttribs ) -+{ -+ OUString aRId = rAttribs.getString(R_TOKEN(id), OUString()); -+ if (aRId.isEmpty()) -+ // All bets are off if we don't have a relation ID. -+ return; -+ -+ RevisionMetadata aMetadata; -+ OUString aDateTimeStr = rAttribs.getString(XML_dateTime, OUString()); -+ if (!aDateTimeStr.isEmpty()) -+ { -+ util::DateTime aDateTime; -+ sax::Converter::parseDateTime(aDateTime, 0, aDateTimeStr); -+ Date aDate(aDateTime.Day, aDateTime.Month, aDateTime.Year); -+ Time aTime(aDateTime.Hours, aDateTime.Minutes, aDateTime.Seconds, aDateTime.NanoSeconds); -+ aMetadata.maDateTime.SetDate(aDate.GetDate()); -+ aMetadata.maDateTime.SetTime(aTime.GetTime()); -+ } -+ -+ aMetadata.maUserName = rAttribs.getString(XML_userName, OUString()); -+ -+ mpImpl->maRevData.insert(RevDataType::value_type(aRId, aMetadata)); -+} -+ -+struct RevisionLogFragment::Impl -+{ -+ ScChangeTrack& mrChangeTrack; -+ -+ sal_Int32 mnRevIndex; -+ sal_Int32 mnSheetIndex; -+ -+ RevisionType meType; -+ -+ // rcc -+ ScAddress maOldCellPos; -+ ScAddress maNewCellPos; -+ ScCellValue maOldCellValue; -+ ScCellValue maNewCellValue; -+ -+ // rrc -+ ScRange maRange; -+ -+ bool mbEndOfList; -+ -+ Impl( ScChangeTrack& rChangeTrack ) : -+ mrChangeTrack(rChangeTrack), -+ mnRevIndex(-1), -+ mnSheetIndex(-1), -+ meType(REV_UNKNOWN), -+ mbEndOfList(false) {} -+}; -+ -+RevisionLogFragment::RevisionLogFragment( -+ const WorkbookHelper& rHelper, const OUString& rFragmentPath, ScChangeTrack& rChangeTrack ) : -+ WorkbookFragmentBase(rHelper, rFragmentPath), -+ mpImpl(new Impl(rChangeTrack)) {} -+ -+RevisionLogFragment::~RevisionLogFragment() -+{ -+ delete mpImpl; -+} -+ -+oox::core::ContextHandlerRef RevisionLogFragment::onCreateContext( -+ sal_Int32 nElement, const AttributeList& /*rAttribs*/ ) -+{ -+ switch (nElement) -+ { -+ case XLS_TOKEN(nc): -+ return new RCCCellValueContext(*this, mpImpl->mnSheetIndex, mpImpl->maNewCellPos, mpImpl->maNewCellValue); -+ case XLS_TOKEN(oc): -+ return new RCCCellValueContext(*this, mpImpl->mnSheetIndex, mpImpl->maOldCellPos, mpImpl->maOldCellValue); -+ default: -+ ; -+ } -+ return this; -+} -+ -+void RevisionLogFragment::onStartElement( const AttributeList& rAttribs ) -+{ -+ switch (getCurrentElement()) -+ { -+ case XLS_TOKEN(rcc): -+ mpImpl->maNewCellPos.SetInvalid(); -+ mpImpl->maOldCellPos.SetInvalid(); -+ mpImpl->maNewCellValue.clear(); -+ mpImpl->maOldCellValue.clear(); -+ importRcc(rAttribs); -+ break; -+ case XLS_TOKEN(rrc): -+ importRrc(rAttribs); -+ break; -+ default: -+ ; -+ } -+} -+ -+void RevisionLogFragment::onCharacters( const OUString& /*rChars*/ ) {} -+ -+void RevisionLogFragment::onEndElement() -+{ -+ switch (getCurrentElement()) -+ { -+ case XLS_TOKEN(rcc): -+ case XLS_TOKEN(rrc): -+ pushRevision(); -+ break; -+ default: -+ ; -+ } -+} -+ -+void RevisionLogFragment::finalizeImport() {} -+ -+void RevisionLogFragment::importCommon( const AttributeList& rAttribs ) -+{ -+ mpImpl->mnRevIndex = rAttribs.getInteger(XML_rId, -1); -+ mpImpl->mnSheetIndex = rAttribs.getInteger(XML_sId, -1); -+} -+ -+void RevisionLogFragment::importRcc( const AttributeList& rAttribs ) -+{ -+ importCommon(rAttribs); -+ -+ mpImpl->meType = REV_CELLCHANGE; -+} -+ -+void RevisionLogFragment::importRrc( const AttributeList& rAttribs ) -+{ -+ importCommon(rAttribs); -+ -+ if (mpImpl->mnSheetIndex == -1) -+ // invalid sheet index, or sheet index not given. -+ return; -+ -+ mpImpl->meType = REV_UNKNOWN; -+ sal_Int32 nAction = rAttribs.getToken(XML_action, -1); -+ if (nAction == -1) -+ return; -+ -+ OUString aRefStr = rAttribs.getString(XML_ref, OUString()); -+ mpImpl->maRange.Parse(aRefStr, &getScDocument(), formula::FormulaGrammar::CONV_XL_OOX); -+ if (!mpImpl->maRange.IsValid()) -+ return; -+ -+ switch (nAction) -+ { -+ case XML_insertRow: -+ mpImpl->meType = REV_INSERTROW; -+ mpImpl->maRange.aEnd.SetCol(MAXCOL); -+ mpImpl->maRange.aStart.SetTab(mpImpl->mnSheetIndex-1); -+ mpImpl->maRange.aEnd.SetTab(mpImpl->mnSheetIndex-1); -+ break; -+ default: -+ // Unknown action type. Ignore it. -+ return; -+ } -+ -+ mpImpl->mbEndOfList = rAttribs.getBool(XML_eol, false); -+} -+ -+void RevisionLogFragment::pushRevision() -+{ -+ switch (mpImpl->meType) -+ { -+ case REV_CELLCHANGE: -+ mpImpl->mrChangeTrack.AppendContentOnTheFly( -+ mpImpl->maNewCellPos, mpImpl->maOldCellValue, mpImpl->maNewCellValue); -+ break; -+ case REV_INSERTROW: -+ mpImpl->mrChangeTrack.AppendInsert(mpImpl->maRange, mpImpl->mbEndOfList); -+ break; -+ default: -+ ; -+ } -+} -+ -+}} -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/sc/source/filter/oox/workbookfragment.cxx b/sc/source/filter/oox/workbookfragment.cxx -index bf42f46..283aa74 100644 ---- a/sc/source/filter/oox/workbookfragment.cxx -+++ b/sc/source/filter/oox/workbookfragment.cxx -@@ -36,6 +36,7 @@ - #include "pivotcachebuffer.hxx" - #include "sharedstringsbuffer.hxx" - #include "sharedstringsfragment.hxx" -+#include "revisionfragment.hxx" - #include "stylesfragment.hxx" - #include "tablebuffer.hxx" - #include "themebuffer.hxx" -@@ -300,7 +301,7 @@ public: - } - }; - --static void importSheetFragments( WorkbookFragment& rWorkbookHandler, SheetFragmentVector& rSheets ) -+void importSheetFragments( WorkbookFragment& rWorkbookHandler, SheetFragmentVector& rSheets ) - { - sal_Int32 nThreads = std::min( rSheets.size(), (size_t) 4 /* FIXME: ncpus/2 */ ); - -@@ -499,6 +500,14 @@ void WorkbookFragment::finalizeImport() - - // final conversions, e.g. calculation settings and view settings - finalizeWorkbookImport(); -+ -+ OUString aRevHeadersPath = getFragmentPathFromFirstType(CREATE_OFFICEDOC_RELATION_TYPE("revisionHeaders")); -+ if (!aRevHeadersPath.isEmpty()) -+ { -+ boost::scoped_ptr xParser(getOoxFilter().createParser()); -+ rtl::Reference xFragment(new RevisionHeadersFragment(*this, aRevHeadersPath)); -+ importOoxFragment(xFragment, *xParser); -+ } - } - - // private -------------------------------------------------------------------- --- -1.9.3 - diff --git a/SOURCES/0041-bnc-885548-Adjust-xlsx-export-of-revisions-to-get-it.patch b/SOURCES/0041-bnc-885548-Adjust-xlsx-export-of-revisions-to-get-it.patch deleted file mode 100644 index 554c2bf..0000000 --- a/SOURCES/0041-bnc-885548-Adjust-xlsx-export-of-revisions-to-get-it.patch +++ /dev/null @@ -1,716 +0,0 @@ -From 766d54154f5225c9dc91ed8e4863d3fca1bd2b90 Mon Sep 17 00:00:00 2001 -From: Kohei Yoshida -Date: Thu, 17 Jul 2014 20:20:16 -0400 -Subject: [PATCH 041/137] bnc#885548: Adjust xlsx export of revisions to get it - to work in Excel. - -(cherry picked from commit fa44673e154ed4fb0b518b8850e2f6e4b9069531) -Signed-off-by: Andras Timar - -Conflicts: - sc/source/filter/inc/XclExpChangeTrack.hxx - sc/source/filter/xcl97/XclExpChangeTrack.cxx - sc/inc/cellvalue.hxx - sc/source/core/data/cellvalue.cxx - -Change-Id: I0058d9ddfea545390e615a3030171a366e333c85 -(cherry picked from commit ca20a53315eaea218c693e0de2026eb6f957331f) -Signed-off-by: Andras Timar ---- - sc/inc/cellvalue.hxx | 1 + - sc/source/core/data/cellvalue.cxx | 7 + - sc/source/filter/excel/xestream.cxx | 7 + - sc/source/filter/inc/XclExpChangeTrack.hxx | 84 ++++--- - sc/source/filter/inc/xestream.hxx | 10 + - sc/source/filter/xcl97/XclExpChangeTrack.cxx | 346 +++++++++++++++++---------- - 6 files changed, 299 insertions(+), 156 deletions(-) - -diff --git a/sc/inc/cellvalue.hxx b/sc/inc/cellvalue.hxx -index c2606b5..8e2e64a 100644 ---- a/sc/inc/cellvalue.hxx -+++ b/sc/inc/cellvalue.hxx -@@ -53,6 +53,7 @@ struct SC_DLLPUBLIC ScCellValue - void set( double fValue ); - void set( const svl::SharedString& rStr ); - void set( const EditTextObject& rEditText ); -+ void set( EditTextObject* pEditText ); - void set( const ScFormulaCell& rFormula ); - void set( ScFormulaCell* pFormula ); - -diff --git a/sc/source/core/data/cellvalue.cxx b/sc/source/core/data/cellvalue.cxx -index 12ef302..92298cf 100644 ---- a/sc/source/core/data/cellvalue.cxx -+++ b/sc/source/core/data/cellvalue.cxx -@@ -248,6 +248,13 @@ void ScCellValue::set( const EditTextObject& rEditText ) - mpEditText = rEditText.Clone(); - } - -+void ScCellValue::set( EditTextObject* pEditText ) -+{ -+ clear(); -+ meType = CELLTYPE_EDIT; -+ mpEditText = pEditText; -+} -+ - void ScCellValue::set( const ScFormulaCell& rFormula ) - { - clear(); -diff --git a/sc/source/filter/excel/xestream.cxx b/sc/source/filter/excel/xestream.cxx -index df08d2c..47dba9e 100644 ---- a/sc/source/filter/excel/xestream.cxx -+++ b/sc/source/filter/excel/xestream.cxx -@@ -842,6 +842,13 @@ const char* XclXmlUtils::ToPsz( bool b ) - return b ? "true" : "false"; - } - -+const char* XclXmlUtils::ToPsz10( bool b ) -+{ -+ // xlsx seems to use "1" or "0" for boolean values. I wonder it ever uses -+ // the "true" "false" variant. -+ return b ? "1" : "0"; -+} -+ - sax_fastparser::FSHelperPtr XclXmlUtils::WriteElement( sax_fastparser::FSHelperPtr pStream, sal_Int32 nElement, sal_Int32 nValue ) - { - pStream->startElement( nElement, FSEND ); -diff --git a/sc/source/filter/inc/XclExpChangeTrack.hxx b/sc/source/filter/inc/XclExpChangeTrack.hxx -index 6651a75..72b7066 100644 ---- a/sc/source/filter/inc/XclExpChangeTrack.hxx -+++ b/sc/source/filter/inc/XclExpChangeTrack.hxx -@@ -29,7 +29,16 @@ - #include "ftools.hxx" - #include "excrecds.hxx" - --//___________________________________________________________________ -+#include -+ -+class ExcXmlRecord : public ExcRecord -+{ -+public: -+ virtual sal_Size GetLen() const SAL_OVERRIDE; -+ virtual sal_uInt16 GetNum() const SAL_OVERRIDE; -+ virtual void Save( XclExpStream& rStrm ) SAL_OVERRIDE; -+}; -+ - // XclExpUserBView - one UserBView record for each user - - class XclExpUserBView : public ExcRecord -@@ -238,42 +247,61 @@ public: - virtual void SaveXml( XclExpXmlStream& rStrm ); - }; - --//___________________________________________________________________ -+class XclExpXmlChTrHeaders : public ExcXmlRecord -+{ -+ sal_uInt8 maGUID[16]; -+public: -+ void SetGUID( const sal_uInt8* pGUID ); -+ -+ virtual void SaveXml( XclExpXmlStream& rStrm ) SAL_OVERRIDE; -+}; -+ -+class XclExpChTrTabIdBuffer; -+class XclExpChTrAction; -+ -+class XclExpXmlChTrHeader : public ExcXmlRecord -+{ -+ OUString maUserName; -+ DateTime maDateTime; -+ sal_uInt8 maGUID[16]; -+ sal_Int32 mnLogNumber; -+ sal_uInt32 mnMinAction; -+ sal_uInt32 mnMaxAction; -+ -+ std::vector maTabBuffer; -+ std::vector maActions; -+ -+public: -+ XclExpXmlChTrHeader( -+ const OUString& rUserName, const DateTime& rDateTime, const sal_uInt8* pGUID, -+ sal_Int32 nLogNumber, const XclExpChTrTabIdBuffer& rBuf ); -+ -+ virtual void SaveXml( XclExpXmlStream& rStrm ) SAL_OVERRIDE; -+ -+ void AppendAction( XclExpChTrAction* pAction ); -+}; -+ - // XclExpChTrInfo - header of action group of a user - - class XclExpChTrInfo : public ExcRecord - { - private: - XclExpString sUsername; -- sal_Int32 mnLogNumber; - DateTime aDateTime; - sal_uInt8 aGUID[ 16 ]; - - virtual void SaveCont( XclExpStream& rStrm ); - - public: -- inline XclExpChTrInfo( -- const OUString& rUsername, -- const DateTime& rDateTime, -- const sal_uInt8* pGUID, -- sal_Int32 nLogNumber ); -+ XclExpChTrInfo( const OUString& rUsername, const DateTime& rDateTime, -+ const sal_uInt8* pGUID ); -+ - virtual ~XclExpChTrInfo(); - - virtual sal_uInt16 GetNum() const; - virtual sal_Size GetLen() const; -- -- virtual void SaveXml( XclExpXmlStream& rStrm ); - }; - --inline XclExpChTrInfo::XclExpChTrInfo( const OUString& rUsername, const DateTime& rDateTime, const sal_uInt8* pGUID, sal_Int32 nLogNumber ) : -- sUsername( rUsername ), -- mnLogNumber( nLogNumber ), -- aDateTime( rDateTime ) --{ -- memcpy( aGUID, pGUID, 16 ); --} -- --//___________________________________________________________________ - // XclExpChTrTabIdBuffer - buffer for tab id's - - class XclExpChTrTabIdBuffer -@@ -309,7 +337,6 @@ class XclExpChTrTabId : public ExcRecord - private: - sal_uInt16* pBuffer; - sal_uInt16 nTabCount; -- bool mbInRevisionHeaders; - - inline void Clear() { if( pBuffer ) delete[] pBuffer; pBuffer = NULL; } - -@@ -317,16 +344,14 @@ private: - - public: - inline XclExpChTrTabId( sal_uInt16 nCount ) : -- pBuffer( NULL ), nTabCount( nCount ), mbInRevisionHeaders( false ) {} -- XclExpChTrTabId( const XclExpChTrTabIdBuffer& rBuffer, bool bInRevisionHeaders = false ); -+ pBuffer( NULL ), nTabCount( nCount ) {} -+ XclExpChTrTabId( const XclExpChTrTabIdBuffer& rBuffer ); - virtual ~XclExpChTrTabId(); - - void Copy( const XclExpChTrTabIdBuffer& rBuffer ); - - virtual sal_uInt16 GetNum() const; - virtual sal_Size GetLen() const; -- -- virtual void SaveXml( XclExpXmlStream& rStrm ); - }; - - //___________________________________________________________________ -@@ -375,8 +400,7 @@ protected: - // do something after writing the record - virtual void CompleteSaveAction( XclExpStream& rStrm ) const; - -- inline sal_uInt32 GetActionNumber() const { return nIndex; } -- inline sal_Bool GetAccepted() const { return bAccepted; } -+ inline bool GetAccepted() const { return bAccepted; } - - public: - XclExpChTrAction( -@@ -399,6 +423,7 @@ public: - virtual sal_Size GetLen() const; - - inline XclExpChTrAction* GetAddAction() { return pAddAction; } -+ inline sal_uInt32 GetActionNumber() const { return nIndex; } - }; - - inline void XclExpChTrAction::Write2DAddress( XclExpStream& rStrm, const ScAddress& rAddress ) const -@@ -589,11 +614,12 @@ public: - - class XclExpChangeTrack : protected XclExpRoot - { --private: -- std::vector aRecList; // list of "Revision Log" stream records -+ typedef boost::ptr_vector RecListType; -+ typedef boost::ptr_vector TabIdBufferType; -+ RecListType maRecList; // list of "Revision Log" stream records - std::stack aActionStack; - XclExpChTrTabIdBuffer* pTabIdBuffer; -- std::vector maBuffers; -+ TabIdBufferType maBuffers; - - ScDocument* pTempDoc; // empty document - -diff --git a/sc/source/filter/inc/xestream.hxx b/sc/source/filter/inc/xestream.hxx -index e29ed1a..f33f0c0 100644 ---- a/sc/source/filter/inc/xestream.hxx -+++ b/sc/source/filter/inc/xestream.hxx -@@ -286,8 +286,18 @@ public: - static OUString ToOUString( const ScfUInt16Vec& rBuffer, sal_Int32 nStart = 0, sal_Int32 nLength = -1 ); - static OUString ToOUString( ScDocument& rDocument, const ScAddress& rAddress, const ScTokenArray* pTokenArray ); - static OUString ToOUString( const XclExpString& s ); -+ -+ /** -+ * @return const char* literal "true" for true value, or literal "false" -+ * for false value. -+ */ - static const char* ToPsz( bool b ); - -+ /** -+ * @return literal "1" for true value, or literal "0" for false value. -+ */ -+ static const char* ToPsz10( bool b ); -+ - static sax_fastparser::FSHelperPtr WriteElement( sax_fastparser::FSHelperPtr pStream, sal_Int32 nElement, sal_Int32 nValue ); - static sax_fastparser::FSHelperPtr WriteElement( sax_fastparser::FSHelperPtr pStream, sal_Int32 nElement, sal_Int64 nValue ); - static sax_fastparser::FSHelperPtr WriteElement( sax_fastparser::FSHelperPtr pStream, sal_Int32 nElement, const char* sValue ); -diff --git a/sc/source/filter/xcl97/XclExpChangeTrack.cxx b/sc/source/filter/xcl97/XclExpChangeTrack.cxx -index 4589aea..aed0322 100644 ---- a/sc/source/filter/xcl97/XclExpChangeTrack.cxx -+++ b/sc/source/filter/xcl97/XclExpChangeTrack.cxx -@@ -40,7 +40,7 @@ static OString lcl_GuidToOString( sal_uInt8 aGuid[ 16 ] ) - { - char sBuf[ 40 ]; - snprintf( sBuf, sizeof( sBuf ), -- "{%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x}", -+ "{%02X%02X%02X%02X-%02X%02X-%02X%02X-%02X%02X-%02X%02X%02X%02X%02X%02X}", - aGuid[ 0 ], aGuid[ 1 ], aGuid[ 2 ], aGuid[ 3 ], aGuid[ 4 ], aGuid[ 5 ], aGuid[ 6 ], aGuid[ 7 ], - aGuid[ 8 ], aGuid[ 9 ], aGuid[ 10 ], aGuid[ 11 ], aGuid[ 12 ], aGuid[ 13 ], aGuid[ 14 ], aGuid[ 15 ] ); - return OString( sBuf ); -@@ -394,7 +394,149 @@ void XclExpChTrHeader::SaveXml( XclExpXmlStream& rRevisionHeadersStrm ) - pHeaders->write( ">" ); - } - --//___________________________________________________________________ -+void XclExpXmlChTrHeaders::SetGUID( const sal_uInt8* pGUID ) -+{ -+ memcpy(maGUID, pGUID, 16); -+} -+ -+void XclExpXmlChTrHeaders::SaveXml( XclExpXmlStream& rStrm ) -+{ -+ sax_fastparser::FSHelperPtr pHeaders = rStrm.GetCurrentStream(); -+ -+ pHeaders->write("<")->writeId(XML_headers); -+ -+ rStrm.WriteAttributes( -+ XML_xmlns, "http://schemas.openxmlformats.org/spreadsheetml/2006/main", -+ FSNS(XML_xmlns, XML_r), "http://schemas.openxmlformats.org/officeDocument/2006/relationships", -+ XML_guid, lcl_GuidToOString(maGUID).getStr(), -+ XML_lastGuid, NULL, // OOXTODO -+ XML_shared, NULL, // OOXTODO -+ XML_diskRevisions, NULL, // OOXTODO -+ XML_history, NULL, // OOXTODO -+ XML_trackRevisions, NULL, // OOXTODO -+ XML_exclusive, NULL, // OOXTODO -+ XML_revisionId, NULL, // OOXTODO -+ XML_version, NULL, // OOXTODO -+ XML_keepChangeHistory, NULL, // OOXTODO -+ XML_protected, NULL, // OOXTODO -+ XML_preserveHistory, NULL, // OOXTODO -+ FSEND); -+ -+ pHeaders->write(">"); -+} -+ -+XclExpXmlChTrHeader::XclExpXmlChTrHeader( -+ const OUString& rUserName, const DateTime& rDateTime, const sal_uInt8* pGUID, -+ sal_Int32 nLogNumber, const XclExpChTrTabIdBuffer& rBuf ) : -+ maUserName(rUserName), maDateTime(rDateTime), mnLogNumber(nLogNumber), -+ mnMinAction(0), mnMaxAction(0) -+{ -+ memcpy(maGUID, pGUID, 16); -+ if (rBuf.GetBufferCount()) -+ { -+ maTabBuffer.resize(rBuf.GetBufferCount()); -+ rBuf.GetBufferCopy(&maTabBuffer[0]); -+ } -+} -+ -+void XclExpXmlChTrHeader::SaveXml( XclExpXmlStream& rStrm ) -+{ -+ sax_fastparser::FSHelperPtr pHeader = rStrm.GetCurrentStream(); -+ -+ pHeader->write("<")->writeId(XML_header); -+ -+ OUString aRelId; -+ sax_fastparser::FSHelperPtr pRevLogStrm = rStrm.CreateOutputStream( -+ XclXmlUtils::GetStreamName("xl/revisions/", "revisionLog", mnLogNumber), -+ XclXmlUtils::GetStreamName(NULL, "revisionLog", mnLogNumber), -+ rStrm.GetCurrentStream()->getOutputStream(), -+ "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml", -+ CREATE_OFFICEDOC_RELATION_TYPE("revisionLog"), -+ &aRelId); -+ -+ rStrm.WriteAttributes( -+ XML_guid, lcl_GuidToOString(maGUID).getStr(), -+ XML_dateTime, lcl_DateTimeToOString(maDateTime).getStr(), -+ XML_userName, XclXmlUtils::ToOString(maUserName).getStr(), -+ FSNS(XML_r, XML_id), XclXmlUtils::ToOString(aRelId).getStr(), -+ FSEND); -+ -+ if (mnMinAction) -+ rStrm.WriteAttributes(XML_minRId, OString::number(mnMinAction).getStr(), FSEND); -+ -+ if (mnMaxAction) -+ rStrm.WriteAttributes(XML_maxRId, OString::number(mnMaxAction).getStr(), FSEND); -+ -+ if (!maTabBuffer.empty()) -+ // next available sheet index. -+ rStrm.WriteAttributes(XML_maxSheetId, OString::number(maTabBuffer.back()+1).getStr(), FSEND); -+ -+ pHeader->write(">"); -+ -+ if (!maTabBuffer.empty()) -+ { -+ // Write sheet index map. -+ size_t n = maTabBuffer.size(); -+ pHeader->startElement( -+ XML_sheetIdMap, -+ XML_count, OString::number(n).getStr(), -+ FSEND); -+ -+ for (size_t i = 0; i < n; ++i) -+ { -+ pHeader->singleElement( -+ XML_sheetId, -+ XML_val, OString::number(maTabBuffer[i]).getStr(), -+ FSEND); -+ } -+ pHeader->endElement(XML_sheetIdMap); -+ } -+ -+ // Write all revision logs in a separate stream. -+ -+ rStrm.PushStream(pRevLogStrm); -+ -+ pRevLogStrm->write("<")->writeId(XML_revisions); -+ -+ rStrm.WriteAttributes( -+ XML_xmlns, "http://schemas.openxmlformats.org/spreadsheetml/2006/main", -+ FSNS(XML_xmlns, XML_r), "http://schemas.openxmlformats.org/officeDocument/2006/relationships", -+ FSEND); -+ -+ pRevLogStrm->write(">"); -+ -+ std::vector::iterator it = maActions.begin(), itEnd = maActions.end(); -+ for (; it != itEnd; ++it) -+ { -+ XclExpChTrAction* p = *it; -+ p->SaveXml(rStrm); -+ } -+ -+ pRevLogStrm->write("writeId(XML_revisions)->write(">"); -+ -+ rStrm.PopStream(); -+ -+ pHeader->write("writeId(XML_header)->write(">"); -+} -+ -+void XclExpXmlChTrHeader::AppendAction( XclExpChTrAction* pAction ) -+{ -+ sal_uInt32 nActionNum = pAction->GetActionNumber(); -+ if (!mnMinAction || mnMinAction > nActionNum) -+ mnMinAction = nActionNum; -+ -+ if (!mnMaxAction || mnMaxAction < nActionNum) -+ mnMaxAction = nActionNum; -+ -+ maActions.push_back(pAction); -+} -+ -+XclExpChTrInfo::XclExpChTrInfo( const OUString& rUsername, const DateTime& rDateTime, const sal_uInt8* pGUID ) : -+ sUsername( rUsername ), -+ aDateTime( rDateTime ) -+{ -+ memcpy( aGUID, pGUID, 16 ); -+} - - XclExpChTrInfo::~XclExpChTrInfo() - { -@@ -424,35 +566,6 @@ sal_Size XclExpChTrInfo::GetLen() const - return 158; - } - --void XclExpChTrInfo::SaveXml( XclExpXmlStream& rRevisionHeadersStrm ) --{ -- sax_fastparser::FSHelperPtr pHeader = rRevisionHeadersStrm.GetCurrentStream(); -- -- OUString sRelationshipId; -- sax_fastparser::FSHelperPtr pRevisionLog = rRevisionHeadersStrm.CreateOutputStream( -- XclXmlUtils::GetStreamName( "xl/revisions/", "revisionLog", mnLogNumber ), -- XclXmlUtils::GetStreamName( NULL, "revisionLog", mnLogNumber ), -- rRevisionHeadersStrm.GetCurrentStream()->getOutputStream(), -- "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml", -- "http://schemas.openxmlformats.org/officeDocument/2006/relationships/revisionLog", -- &sRelationshipId ); -- -- rRevisionHeadersStrm.WriteAttributes( -- XML_guid, lcl_GuidToOString( aGUID ).getStr(), -- XML_dateTime, lcl_DateTimeToOString( aDateTime ).getStr(), -- XML_maxSheetId, NULL, // OOXTODO -- XML_userName, XclXmlUtils::ToOString( sUsername ).getStr(), -- FSNS( XML_r, XML_id ), XclXmlUtils::ToOString( sRelationshipId ).getStr(), -- XML_minRId, NULL, // OOXTODO -- XML_maxRId, NULL, // OOXTODO -- FSEND ); -- pHeader->write( ">" ); -- -- rRevisionHeadersStrm.PushStream( pRevisionLog ); --} -- --//___________________________________________________________________ -- - XclExpChTrTabIdBuffer::XclExpChTrTabIdBuffer( sal_uInt16 nCount ) : - nBufSize( nCount ), - nLastId( nCount ) -@@ -523,11 +636,8 @@ void XclExpChTrTabIdBuffer::Remove() - nLastId--; - } - --//___________________________________________________________________ -- --XclExpChTrTabId::XclExpChTrTabId( const XclExpChTrTabIdBuffer& rBuffer, bool bInRevisionHeaders ) -+XclExpChTrTabId::XclExpChTrTabId( const XclExpChTrTabIdBuffer& rBuffer ) - : nTabCount( rBuffer.GetBufferCount() ) -- , mbInRevisionHeaders( bInRevisionHeaders ) - { - pBuffer = new sal_uInt16[ nTabCount ]; - rBuffer.GetBufferCopy( pBuffer ); -@@ -567,31 +677,6 @@ sal_Size XclExpChTrTabId::GetLen() const - return nTabCount << 1; - } - --void XclExpChTrTabId::SaveXml( XclExpXmlStream& rRevisionLogStrm ) --{ -- if( !mbInRevisionHeaders ) -- return; -- -- sax_fastparser::FSHelperPtr pRevisionLog = rRevisionLogStrm.GetCurrentStream(); -- rRevisionLogStrm.PopStream(); -- -- sax_fastparser::FSHelperPtr pHeader = rRevisionLogStrm.GetCurrentStream(); -- pHeader->startElement( XML_sheetIdMap, -- XML_count, OString::number( nTabCount ).getStr(), -- FSEND ); -- for( int i = 0; i < nTabCount; ++i ) -- { -- pHeader->singleElement( XML_sheetId, -- XML_val, OString::number( pBuffer[ i ] ).getStr(), -- FSEND ); -- } -- pHeader->endElement( XML_sheetIdMap ); -- -- rRevisionLogStrm.PushStream( pRevisionLog ); --} -- --//___________________________________________________________________ -- - // ! does not copy additional actions - XclExpChTrAction::XclExpChTrAction( const XclExpChTrAction& rCopy ) : - ExcRecord( rCopy ), -@@ -1126,11 +1211,12 @@ void XclExpChTrInsert::SaveXml( XclExpXmlStream& rRevisionLogStrm ) - XML_ua, XclXmlUtils::ToPsz( GetAccepted () ), // OOXTODO? bAccepted == ua or ra; not sure. - XML_ra, NULL, // OOXTODO: RRD.fUndoAction? Or RRD.fAccepted? - XML_sId, OString::number( GetTabId( aRange.aStart.Tab() ) ).getStr(), -- XML_eol, NULL, // OOXTODO: not supported? -+ XML_eol, XclXmlUtils::ToPsz10(mbEndOfList), - XML_ref, XclXmlUtils::ToOString( aRange ).getStr(), - XML_action, lcl_GetAction( nOpCode ), - XML_edge, NULL, // OOXTODO: ??? - FSEND ); -+ - // OOXTODO: does this handle XML_rfmt, XML_undo? - XclExpChTrAction* pAction = GetAddAction(); - while( pAction != NULL ) -@@ -1318,17 +1404,6 @@ void XclExpChTr0x014A::SaveXml( XclExpXmlStream& rStrm ) - pStream->endElement( XML_rfmt ); - } - --//___________________________________________________________________ -- --class ExcXmlRecord : public ExcRecord --{ --public: -- virtual sal_Size GetLen() const; -- virtual sal_uInt16 GetNum() const; -- virtual void Save( XclExpStream& rStrm ); -- virtual void SaveXml( XclExpXmlStream& rStrm ) = 0; --}; -- - sal_Size ExcXmlRecord::GetLen() const - { - return 0; -@@ -1447,66 +1522,83 @@ XclExpChangeTrack::XclExpChangeTrack( const XclExpRoot& rRoot ) : - } - - // build record list -- pHeader = new XclExpChTrHeader; -- aRecList.push_back( new StartXmlElement( XML_headers, StartXmlElement::WRITE_NAMESPACES ) ); -- aRecList.push_back( pHeader ); -- aRecList.push_back( new XclExpChTr0x0195 ); -- aRecList.push_back( new XclExpChTr0x0194( *pTempChangeTrack ) ); -- -- OUString sLastUsername; -- DateTime aLastDateTime( DateTime::EMPTY ); -- sal_uInt32 nIndex = 1; -- sal_Int32 nLogNumber = 1; -- while( !aActionStack.empty() ) -+ if (GetOutput() == EXC_OUTPUT_BINARY) - { -- XclExpChTrAction* pAction = aActionStack.top(); -- aActionStack.pop(); -- -- if( (nIndex == 1) || pAction->ForceInfoRecord() || -- (pAction->GetUsername() != sLastUsername) || -- (pAction->GetDateTime() != aLastDateTime) ) -+ pHeader = new XclExpChTrHeader; -+ maRecList.push_back( pHeader ); -+ maRecList.push_back( new XclExpChTr0x0195 ); -+ maRecList.push_back( new XclExpChTr0x0194( *pTempChangeTrack ) ); -+ -+ OUString sLastUsername; -+ DateTime aLastDateTime( DateTime::EMPTY ); -+ sal_uInt32 nIndex = 1; -+ sal_Int32 nLogNumber = 1; -+ while( !aActionStack.empty() ) - { -- if( nIndex != 1 ) -+ XclExpChTrAction* pAction = aActionStack.top(); -+ aActionStack.pop(); -+ -+ if( (nIndex == 1) || pAction->ForceInfoRecord() || -+ (pAction->GetUsername() != sLastUsername) || -+ (pAction->GetDateTime() != aLastDateTime) ) - { -- aRecList.push_back( new EndXmlElement( XML_revisions ) ); -- aRecList.push_back( new EndHeaderElement() ); -+ lcl_GenerateGUID( aGUID, bValidGUID ); -+ sLastUsername = pAction->GetUsername(); -+ aLastDateTime = pAction->GetDateTime(); -+ -+ nLogNumber++; -+ maRecList.push_back( new XclExpChTrInfo(sLastUsername, aLastDateTime, aGUID) ); -+ maRecList.push_back( new XclExpChTrTabId(pAction->GetTabIdBuffer()) ); -+ pHeader->SetGUID( aGUID ); - } -+ pAction->SetIndex( nIndex ); -+ maRecList.push_back( pAction ); -+ } - -- lcl_GenerateGUID( aGUID, bValidGUID ); -- sLastUsername = pAction->GetUsername(); -- aLastDateTime = pAction->GetDateTime(); -+ pHeader->SetGUID( aGUID ); -+ pHeader->SetCount( nIndex - 1 ); -+ maRecList.push_back( new ExcEof ); -+ } -+ else -+ { -+ XclExpXmlChTrHeaders* pHeaders = new XclExpXmlChTrHeaders; -+ maRecList.push_back(pHeaders); -+ -+ OUString sLastUsername; -+ DateTime aLastDateTime(DateTime::EMPTY); -+ sal_uInt32 nIndex = 1; -+ sal_Int32 nLogNumber = 1; -+ XclExpXmlChTrHeader* pCurHeader = NULL; -+ -+ while (!aActionStack.empty()) -+ { -+ XclExpChTrAction* pAction = aActionStack.top(); -+ aActionStack.pop(); - -- aRecList.push_back( new StartXmlElement( XML_header, 0 ) ); -- aRecList.push_back( new XclExpChTrInfo( sLastUsername, aLastDateTime, aGUID, nLogNumber++ ) ); -- aRecList.push_back( new XclExpChTrTabId( pAction->GetTabIdBuffer(), true ) ); -- aRecList.push_back( new StartXmlElement( XML_revisions, StartXmlElement::WRITE_NAMESPACES | StartXmlElement::CLOSE_ELEMENT ) ); -- pHeader->SetGUID( aGUID ); -+ if( (nIndex == 1) || pAction->ForceInfoRecord() || -+ (pAction->GetUsername() != sLastUsername) || -+ (pAction->GetDateTime() != aLastDateTime) ) -+ { -+ lcl_GenerateGUID( aGUID, bValidGUID ); -+ sLastUsername = pAction->GetUsername(); -+ aLastDateTime = pAction->GetDateTime(); -+ -+ pCurHeader = new XclExpXmlChTrHeader(sLastUsername, aLastDateTime, aGUID, nLogNumber, pAction->GetTabIdBuffer()); -+ maRecList.push_back(pCurHeader); -+ nLogNumber++; -+ pHeaders->SetGUID(aGUID); -+ } -+ pAction->SetIndex(nIndex); -+ pCurHeader->AppendAction(pAction); - } -- pAction->SetIndex( nIndex ); -- aRecList.push_back( pAction ); -- } - -- pHeader->SetGUID( aGUID ); -- pHeader->SetCount( nIndex - 1 ); -- if( nLogNumber > 1 ) -- { -- aRecList.push_back( new EndXmlElement( XML_revisions ) ); -- aRecList.push_back( new EndHeaderElement() ); -+ pHeaders->SetGUID(aGUID); -+ maRecList.push_back(new EndXmlElement(XML_headers)); - } -- aRecList.push_back( new EndXmlElement( XML_headers ) ); -- aRecList.push_back( new ExcEof ); - } - - XclExpChangeTrack::~XclExpChangeTrack() - { -- std::vector::iterator prIter; -- for ( prIter = aRecList.begin(); prIter != aRecList.end(); ++prIter ) -- delete *prIter; -- -- std::vector::iterator pIter; -- for ( pIter = maBuffers.begin(); pIter != maBuffers.end(); ++pIter ) -- delete *pIter; -- - while( !aActionStack.empty() ) - { - delete aActionStack.top(); -@@ -1602,7 +1694,7 @@ sal_Bool XclExpChangeTrack::WriteUserNamesStream() - - void XclExpChangeTrack::Write() - { -- if( aRecList.empty() ) -+ if (maRecList.empty()) - return; - - if( WriteUserNamesStream() ) -@@ -1613,9 +1705,9 @@ void XclExpChangeTrack::Write() - { - XclExpStream aXclStrm( *xSvStrm, GetRoot(), EXC_MAXRECSIZE_BIFF8 + 8 ); - -- std::vector::iterator pIter; -- for ( pIter = aRecList.begin(); pIter != aRecList.end(); ++pIter ) -- (*pIter)->Save(aXclStrm); -+ RecListType::iterator pIter; -+ for (pIter = maRecList.begin(); pIter != maRecList.end(); ++pIter) -+ pIter->Save(aXclStrm); - - xSvStrm->Commit(); - } -@@ -1643,7 +1735,7 @@ static void lcl_WriteUserNamesXml( XclExpXmlStream& rWorkbookStrm ) - - void XclExpChangeTrack::WriteXml( XclExpXmlStream& rWorkbookStrm ) - { -- if( aRecList.empty() ) -+ if (maRecList.empty()) - return; - - lcl_WriteUserNamesXml( rWorkbookStrm ); -@@ -1659,9 +1751,9 @@ void XclExpChangeTrack::WriteXml( XclExpXmlStream& rWorkbookStrm ) - // contents of XclExpChangeTrack::WriteUserNamesStream()). - rWorkbookStrm.PushStream( pRevisionHeaders ); - -- std::vector::iterator pIter; -- for ( pIter = aRecList.begin(); pIter != aRecList.end(); ++pIter ) -- (*pIter)->SaveXml(rWorkbookStrm); -+ RecListType::iterator pIter; -+ for (pIter = maRecList.begin(); pIter != maRecList.end(); ++pIter) -+ pIter->SaveXml(rWorkbookStrm); - - rWorkbookStrm.PopStream(); - } --- -1.9.3 - diff --git a/SOURCES/0042-Preserve-the-end-of-list-flag-for-xls-round-tripping.patch b/SOURCES/0042-Preserve-the-end-of-list-flag-for-xls-round-tripping.patch deleted file mode 100644 index 33aa91c..0000000 --- a/SOURCES/0042-Preserve-the-end-of-list-flag-for-xls-round-tripping.patch +++ /dev/null @@ -1,298 +0,0 @@ -From b7bd1b66287d9d337234ac1b9b50a1fafba7dd1e Mon Sep 17 00:00:00 2001 -From: Kohei Yoshida -Date: Mon, 14 Jul 2014 15:24:19 -0400 -Subject: [PATCH 042/137] Preserve the "end of list" flag for xls - round-tripping. - -This "end of list" flag determines whether the row insertion was an -automatic insertion at the bottom. Calc doesn't use this at the moment -but Excel uses it to differentiate a normal row insertion from an -automatic one. - -(cherry picked from commit adf0d7b1fb8eed88f4fcd6d31662ae6f59d00812) -Signed-off-by: Andras Timar - -Conflicts: - sc/inc/chgtrack.hxx - sc/source/filter/xcl97/XclExpChangeTrack.cxx - -Change-Id: I6b28669d816c54d1dc1e4c106918ba688415788d -(cherry picked from commit 8fd0951429bfa00a054ebbc195a480f89af9f912) -Signed-off-by: Andras Timar ---- - sc/inc/chgtrack.hxx | 26 ++++++++++------ - sc/source/core/tool/chgtrack.cxx | 46 +++++++++++++++++----------- - sc/source/filter/inc/XclExpChangeTrack.hxx | 5 +-- - sc/source/filter/inc/XclImpChangeTrack.hxx | 2 +- - sc/source/filter/xcl97/XclExpChangeTrack.cxx | 17 ++++++++-- - sc/source/filter/xcl97/XclImpChangeTrack.cxx | 11 ++++--- - 6 files changed, 68 insertions(+), 39 deletions(-) - -diff --git a/sc/inc/chgtrack.hxx b/sc/inc/chgtrack.hxx -index 1f6ddcd..2e57437 100644 ---- a/sc/inc/chgtrack.hxx -+++ b/sc/inc/chgtrack.hxx -@@ -402,7 +402,9 @@ class ScChangeActionIns : public ScChangeAction - { - friend class ScChangeTrack; - -- ScChangeActionIns( const ScRange& rRange ); -+ bool mbEndOfList; /// whether or not a row was auto-inserted at the bottom. -+ -+ ScChangeActionIns( const ScRange& rRange, bool bEndOfList = false ); - virtual ~ScChangeActionIns(); - - virtual void AddContent( ScChangeActionContent* ) {} -@@ -413,17 +415,21 @@ class ScChangeActionIns : public ScChangeAction - virtual const ScChangeTrack* GetChangeTrack() const { return 0; } - - public: -- ScChangeActionIns(const sal_uLong nActionNumber, -- const ScChangeActionState eState, -- const sal_uLong nRejectingNumber, -- const ScBigRange& aBigRange, -- const OUString& aUser, -- const DateTime& aDateTime, -- const OUString &sComment, -- const ScChangeActionType eType); // only to use in the XML import -+ ScChangeActionIns( -+ const sal_uLong nActionNumber, -+ const ScChangeActionState eState, -+ const sal_uLong nRejectingNumber, -+ const ScBigRange& aBigRange, -+ const OUString& aUser, -+ const DateTime& aDateTime, -+ const OUString &sComment, -+ const ScChangeActionType eType, -+ bool bEndOfList = false ); - - virtual void GetDescription( - OUString& rStr, ScDocument* pDoc, bool bSplitRange = false, bool bWarning = true) const; -+ -+ SC_DLLPUBLIC bool IsEndOfList() const; - }; - - // ScChangeActionDel -@@ -1123,7 +1129,7 @@ public: - // Only use the following two if there is no different solution! (Assign - // string for NewValue or creation of a formula respectively) - -- SC_DLLPUBLIC void AppendInsert( const ScRange& ); -+ SC_DLLPUBLIC void AppendInsert( const ScRange& rRange, bool bEndOfList = false ); - - // pRefDoc may be NULL => no lookup of contents - // => no generation of deleted contents -diff --git a/sc/source/core/tool/chgtrack.cxx b/sc/source/core/tool/chgtrack.cxx -index 1ebb30d..ff261ca 100644 ---- a/sc/source/core/tool/chgtrack.cxx -+++ b/sc/source/core/tool/chgtrack.cxx -@@ -660,8 +660,9 @@ void ScChangeAction::AddDependent( sal_uLong nActionNumber, - } - - // ScChangeActionIns --ScChangeActionIns::ScChangeActionIns( const ScRange& rRange ) -- : ScChangeAction( SC_CAT_NONE, rRange ) -+ScChangeActionIns::ScChangeActionIns( const ScRange& rRange, bool bEndOfList ) : -+ ScChangeAction(SC_CAT_NONE, rRange), -+ mbEndOfList(bEndOfList) - { - if ( rRange.aStart.Col() == 0 && rRange.aEnd.Col() == MAXCOL ) - { -@@ -692,8 +693,10 @@ ScChangeActionIns::ScChangeActionIns( - const sal_uLong nActionNumber, const ScChangeActionState eStateP, - const sal_uLong nRejectingNumber, const ScBigRange& aBigRangeP, - const OUString& aUserP, const DateTime& aDateTimeP, -- const OUString& sComment, const ScChangeActionType eTypeP) : -- ScChangeAction(eTypeP, aBigRangeP, nActionNumber, nRejectingNumber, eStateP, aDateTimeP, aUserP, sComment) -+ const OUString& sComment, const ScChangeActionType eTypeP, -+ bool bEndOfList ) : -+ ScChangeAction(eTypeP, aBigRangeP, nActionNumber, nRejectingNumber, eStateP, aDateTimeP, aUserP, sComment), -+ mbEndOfList(bEndOfList) - { - } - -@@ -736,6 +739,11 @@ void ScChangeActionIns::GetDescription( - } - } - -+bool ScChangeActionIns::IsEndOfList() const -+{ -+ return mbEndOfList; -+} -+ - bool ScChangeActionIns::Reject( ScDocument* pDoc ) - { - if ( !aBigRange.IsValid( pDoc ) ) -@@ -2826,9 +2834,9 @@ ScChangeActionContent* ScChangeTrack::AppendContentOnTheFly( - return pAct; - } - --void ScChangeTrack::AppendInsert( const ScRange& rRange ) -+void ScChangeTrack::AppendInsert( const ScRange& rRange, bool bEndOfList ) - { -- ScChangeActionIns* pAct = new ScChangeActionIns( rRange ); -+ ScChangeActionIns* pAct = new ScChangeActionIns(rRange, bEndOfList); - Append( pAct ); - } - -@@ -4458,18 +4466,20 @@ ScChangeTrack* ScChangeTrack::Clone( ScDocument* pDocument ) const - case SC_CAT_INSERT_COLS: - case SC_CAT_INSERT_ROWS: - case SC_CAT_INSERT_TABS: -- { -- pClonedAction = new ScChangeActionIns( -- pAction->GetActionNumber(), -- pAction->GetState(), -- pAction->GetRejectAction(), -- pAction->GetBigRange(), -- pAction->GetUser(), -- pAction->GetDateTimeUTC(), -- pAction->GetComment(), -- pAction->GetType() ); -- } -- break; -+ { -+ bool bEndOfList = static_cast(pAction)->IsEndOfList(); -+ pClonedAction = new ScChangeActionIns( -+ pAction->GetActionNumber(), -+ pAction->GetState(), -+ pAction->GetRejectAction(), -+ pAction->GetBigRange(), -+ pAction->GetUser(), -+ pAction->GetDateTimeUTC(), -+ pAction->GetComment(), -+ pAction->GetType(), -+ bEndOfList ); -+ } -+ break; - case SC_CAT_DELETE_COLS: - case SC_CAT_DELETE_ROWS: - case SC_CAT_DELETE_TABS: -diff --git a/sc/source/filter/inc/XclExpChangeTrack.hxx b/sc/source/filter/inc/XclExpChangeTrack.hxx -index 72b7066..c7ee389 100644 ---- a/sc/source/filter/inc/XclExpChangeTrack.hxx -+++ b/sc/source/filter/inc/XclExpChangeTrack.hxx -@@ -516,11 +516,12 @@ public: - - class XclExpChTrInsert : public XclExpChTrAction - { -+ bool mbEndOfList; -+ - protected: - ScRange aRange; - -- XclExpChTrInsert( const XclExpChTrInsert& rCopy ) : -- XclExpChTrAction( rCopy ), aRange( rCopy.aRange ) {} -+ XclExpChTrInsert( const XclExpChTrInsert& rCopy ); - - virtual void SaveActionData( XclExpStream& rStrm ) const; - virtual void PrepareSaveAction( XclExpStream& rStrm ) const; -diff --git a/sc/source/filter/inc/XclImpChangeTrack.hxx b/sc/source/filter/inc/XclImpChangeTrack.hxx -index ffce967..c1b06d6 100644 ---- a/sc/source/filter/inc/XclImpChangeTrack.hxx -+++ b/sc/source/filter/inc/XclImpChangeTrack.hxx -@@ -73,7 +73,7 @@ private: - void DoAcceptRejectAction( ScChangeAction* pAction ); - void DoAcceptRejectAction( sal_uInt32 nFirst, sal_uInt32 nLast ); - -- void DoInsertRange( const ScRange& rRange ); -+ void DoInsertRange( const ScRange& rRange, bool bEndOfList ); - void DoDeleteRange( const ScRange& rRange ); - - inline sal_uInt8 LookAtuInt8(); -diff --git a/sc/source/filter/xcl97/XclExpChangeTrack.cxx b/sc/source/filter/xcl97/XclExpChangeTrack.cxx -index aed0322..fe27e92 100644 ---- a/sc/source/filter/xcl97/XclExpChangeTrack.cxx -+++ b/sc/source/filter/xcl97/XclExpChangeTrack.cxx -@@ -1118,7 +1118,10 @@ void XclExpChTrCellContent::SaveXml( XclExpXmlStream& rRevisionLogStrm ) - pStream->endElement( XML_rcc ); - } - --//___________________________________________________________________ -+XclExpChTrInsert::XclExpChTrInsert( const XclExpChTrInsert& rCopy ) : -+ XclExpChTrAction(rCopy), -+ mbEndOfList(rCopy.mbEndOfList), -+ aRange(rCopy.aRange) {} - - XclExpChTrInsert::XclExpChTrInsert( - const ScChangeAction& rAction, -@@ -1126,13 +1129,20 @@ XclExpChTrInsert::XclExpChTrInsert( - const XclExpChTrTabIdBuffer& rTabIdBuffer, - ScChangeTrack& rChangeTrack ) : - XclExpChTrAction( rAction, rRoot, rTabIdBuffer ), -+ mbEndOfList(false), - aRange( rAction.GetBigRange().MakeRange() ) - { - nLength = 0x00000030; - switch( rAction.GetType() ) - { - case SC_CAT_INSERT_COLS: nOpCode = EXC_CHTR_OP_INSCOL; break; -- case SC_CAT_INSERT_ROWS: nOpCode = EXC_CHTR_OP_INSROW; break; -+ case SC_CAT_INSERT_ROWS: -+ { -+ const ScChangeActionIns& rIns = static_cast(rAction); -+ mbEndOfList = rIns.IsEndOfList(); -+ nOpCode = EXC_CHTR_OP_INSROW; -+ } -+ break; - case SC_CAT_DELETE_COLS: nOpCode = EXC_CHTR_OP_DELCOL; break; - case SC_CAT_DELETE_ROWS: nOpCode = EXC_CHTR_OP_DELROW; break; - default: -@@ -1164,7 +1174,8 @@ XclExpChTrInsert::~XclExpChTrInsert() - void XclExpChTrInsert::SaveActionData( XclExpStream& rStrm ) const - { - WriteTabId( rStrm, aRange.aStart.Tab() ); -- rStrm << (sal_uInt16) 0x0000; -+ sal_uInt16 nFlagVal = mbEndOfList ? 0x0001 : 0x0000; -+ rStrm << nFlagVal; - Write2DRange( rStrm, aRange ); - rStrm << (sal_uInt32) 0x00000000; - } -diff --git a/sc/source/filter/xcl97/XclImpChangeTrack.cxx b/sc/source/filter/xcl97/XclImpChangeTrack.cxx -index 58c2540..cf1babc 100644 ---- a/sc/source/filter/xcl97/XclImpChangeTrack.cxx -+++ b/sc/source/filter/xcl97/XclImpChangeTrack.cxx -@@ -95,10 +95,10 @@ void XclImpChangeTrack::DoAcceptRejectAction( sal_uInt32 nFirst, sal_uInt32 nLas - DoAcceptRejectAction( pChangeTrack->GetAction( nIndex ) ); - } - --void XclImpChangeTrack::DoInsertRange( const ScRange& rRange ) -+void XclImpChangeTrack::DoInsertRange( const ScRange& rRange, bool bEndOfList ) - { - sal_uInt32 nFirst = pChangeTrack->GetActionMax() + 1; -- pChangeTrack->AppendInsert( rRange ); -+ pChangeTrack->AppendInsert(rRange, bEndOfList); - sal_uInt32 nLast = pChangeTrack->GetActionMax(); - DoAcceptRejectAction( nFirst, nLast ); - } -@@ -299,7 +299,8 @@ void XclImpChangeTrack::ReadChTrInsert() - ScRange aRange; - aRange.aStart.SetTab( ReadTabNum() ); - aRange.aEnd.SetTab( aRange.aStart.Tab() ); -- pStrm->Ignore( 2 ); -+ sal_uInt16 nFlags = pStrm->ReaduInt16(); -+ bool bEndOfList = (nFlags & 0x0001); // row auto-inserted at the bottom. - Read2DRange( aRange ); - - if( aRecHeader.nOpCode & EXC_CHTR_OP_COLFLAG ) -@@ -316,7 +317,7 @@ void XclImpChangeTrack::ReadChTrInsert() - if( aRecHeader.nOpCode & EXC_CHTR_OP_DELFLAG ) - DoDeleteRange( aRange ); - else -- DoInsertRange( aRange ); -+ DoInsertRange(aRange, bEndOfList); - } - } - } -@@ -428,7 +429,7 @@ void XclImpChangeTrack::ReadChTrInsertTab() - if( pStrm->IsValid() ) - { - nTabIdCount++; -- DoInsertRange( ScRange( 0, 0, nTab, MAXCOL, MAXROW, nTab ) ); -+ DoInsertRange(ScRange(0, 0, nTab, MAXCOL, MAXROW, nTab), false); - } - } - } --- -1.9.3 - diff --git a/SOURCES/0043-bnc-883684-Better-fix-for-this.patch b/SOURCES/0043-bnc-883684-Better-fix-for-this.patch deleted file mode 100644 index 19fa5ad..0000000 --- a/SOURCES/0043-bnc-883684-Better-fix-for-this.patch +++ /dev/null @@ -1,237 +0,0 @@ -From 9ba9d810d9e17a7e3a3e0885235924f4c480c3b0 Mon Sep 17 00:00:00 2001 -From: Kohei Yoshida -Date: Fri, 11 Jul 2014 10:50:29 -0400 -Subject: [PATCH 043/137] bnc#883684: Better fix for this. - -Instead of making all chart objects exempt from unloading, check each OLE -object on whether or not it already has its persistent storage created. -If not, don't unload it else it would have nothing to load back from once -unloaded. - -(cherry picked from commit a0bd5587a5ac62974bdb10731d3fd21584521a72) - -Conflicts: - svx/source/svdraw/svdetc.cxx - embeddedobj/source/commonembedding/miscobj.cxx - embeddedobj/source/commonembedding/persistence.cxx - include/svx/svdoole2.hxx - svx/source/svdraw/svdoole2.cxx - -Change-Id: I2312e86c9376d3699ef4aa1e0cf2f4c04f706c1e ---- - embeddedobj/source/commonembedding/miscobj.cxx | 8 +++++- - embeddedobj/source/commonembedding/persistence.cxx | 10 +++++++- - embeddedobj/source/inc/commonembobj.hxx | 8 ++++-- - include/svx/svdoole2.hxx | 7 ----- - offapi/UnoApi_offapi.mk | 1 + - offapi/com/sun/star/embed/XEmbedPersist2.idl | 30 ++++++++++++++++++++++ - svx/source/svdraw/svdetc.cxx | 4 --- - svx/source/svdraw/svdoole2.cxx | 16 +++++++----- - 8 files changed, 62 insertions(+), 22 deletions(-) - create mode 100644 offapi/com/sun/star/embed/XEmbedPersist2.idl - -diff --git a/embeddedobj/source/commonembedding/miscobj.cxx b/embeddedobj/source/commonembedding/miscobj.cxx -index 70b8696..8ce2f84 100644 ---- a/embeddedobj/source/commonembedding/miscobj.cxx -+++ b/embeddedobj/source/commonembedding/miscobj.cxx -@@ -363,6 +363,11 @@ uno::Any SAL_CALL OCommonEmbeddedObject::queryInterface( const uno::Type& rType - void * p = static_cast< embed::XEmbeddedObject * >( this ); - return uno::Any( &p, rType ); - } -+ else if (rType == ::getCppuType( (uno::Reference const *)0 )) -+ { -+ void* p = static_cast(this); -+ return uno::Any(&p, rType); -+ } - else - aReturn <<= ::cppu::queryInterface( - rType, -@@ -431,7 +436,8 @@ uno::Sequence< uno::Type > SAL_CALL OCommonEmbeddedObject::getTypes() - ::getCppuType( (const uno::Reference< embed::XInplaceObject >*)NULL ), - ::getCppuType( (const uno::Reference< embed::XCommonEmbedPersist >*)NULL ), - ::getCppuType( (const uno::Reference< container::XChild >*)NULL ), -- ::getCppuType( (const uno::Reference< embed::XEmbedPersist >*)NULL ) ); -+ ::getCppuType( (const uno::Reference< embed::XEmbedPersist >*)NULL ), -+ ::getCppuType( (const uno::Reference< embed::XEmbedPersist2 >*)NULL ) ); - - pTypeCollection = &aTypeCollection ; - } -diff --git a/embeddedobj/source/commonembedding/persistence.cxx b/embeddedobj/source/commonembedding/persistence.cxx -index 4891656..44b4e30 100644 ---- a/embeddedobj/source/commonembedding/persistence.cxx -+++ b/embeddedobj/source/commonembedding/persistence.cxx -@@ -1799,7 +1799,15 @@ void SAL_CALL OCommonEmbeddedObject::reload( - } - } - --//------------------------------------------------------ -+sal_Bool SAL_CALL OCommonEmbeddedObject::isStored() throw (css::uno::RuntimeException, std::exception) -+{ -+ uno::Reference xNA(m_xObjectStorage, uno::UNO_QUERY); -+ if (!xNA.is()) -+ return false; -+ -+ return xNA->getElementNames().getLength() > 0; -+} -+ - void SAL_CALL OCommonEmbeddedObject::breakLink( const uno::Reference< embed::XStorage >& xStorage, - const OUString& sEntName ) - throw ( lang::IllegalArgumentException, -diff --git a/embeddedobj/source/inc/commonembobj.hxx b/embeddedobj/source/inc/commonembobj.hxx -index 83e4445..4c23325 100644 ---- a/embeddedobj/source/inc/commonembobj.hxx -+++ b/embeddedobj/source/inc/commonembobj.hxx -@@ -27,7 +27,7 @@ - #include - #include - #include --#include -+#include - #include - #include - #include -@@ -72,7 +72,7 @@ namespace comphelper { - class Interceptor; - - class OCommonEmbeddedObject : public ::com::sun::star::embed::XEmbeddedObject -- , public ::com::sun::star::embed::XEmbedPersist -+ , public ::com::sun::star::embed::XEmbedPersist2 - , public ::com::sun::star::embed::XLinkageSupport - , public ::com::sun::star::embed::XInplaceObject - , public ::com::sun::star::container::XChild -@@ -431,6 +431,10 @@ public: - ::com::sun::star::uno::Exception, - ::com::sun::star::uno::RuntimeException ); - -+// XEmbedPersist2 -+ -+ virtual sal_Bool SAL_CALL isStored() -+ throw (css::uno::RuntimeException, std::exception) SAL_OVERRIDE; - - // XInplaceObject - -diff --git a/include/svx/svdoole2.hxx b/include/svx/svdoole2.hxx -index 149dc61..c2cad4b 100644 ---- a/include/svx/svdoole2.hxx -+++ b/include/svx/svdoole2.hxx -@@ -170,13 +170,6 @@ public: - sal_Bool IsChart() const; - sal_Bool IsCalc() const; - -- /** -- * Unloadable OLE objects are subject to automatic unloading per memory -- * setting. The "Number of objects" setting in the Memory option controls -- * how many OLE objects can be loaded at any given moment. -- */ -- bool IsUnloadable() const; -- - sal_Bool UpdateLinkURL_Impl(); - void BreakFileLink_Impl(); - void DisconnectFileLink_Impl(); -diff --git a/offapi/UnoApi_offapi.mk b/offapi/UnoApi_offapi.mk -index 3c1d92e..22d84d2 100755 ---- a/offapi/UnoApi_offapi.mk -+++ b/offapi/UnoApi_offapi.mk -@@ -2411,6 +2411,7 @@ $(eval $(call gb_UnoApi_add_idlfiles,offapi,com/sun/star/embed,\ - XEmbeddedObjectCreator \ - XEmbedObjectFactory \ - XEmbedPersist \ -+ XEmbedPersist2 \ - XEmbeddedClient \ - XEmbeddedObject \ - XEncryptionProtectedSource \ -diff --git a/offapi/com/sun/star/embed/XEmbedPersist2.idl b/offapi/com/sun/star/embed/XEmbedPersist2.idl -new file mode 100644 -index 0000000..205b902 ---- /dev/null -+++ b/offapi/com/sun/star/embed/XEmbedPersist2.idl -@@ -0,0 +1,30 @@ -+/* -*- 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/. -+ */ -+ -+#ifndef __com_sun_star_XEmbedPersist2_idl__ -+#define __com_sun_star_XEmbedPersist2_idl__ -+ -+#include -+ -+module com { module sun { module star { module embed { -+ -+interface XEmbedPersist2 : XEmbedPersist -+{ -+ /** -+ * Checks whether or not the object has created its persistent -+ * representation counterpart of its in-memory model. -+ */ -+ boolean isStored(); -+}; -+ -+}; }; }; }; -+ -+#endif -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/svx/source/svdraw/svdetc.cxx b/svx/source/svdraw/svdetc.cxx -index afcc792..4caca94 100644 ---- a/svx/source/svdraw/svdetc.cxx -+++ b/svx/source/svdraw/svdetc.cxx -@@ -165,10 +165,6 @@ void OLEObjCache::UnloadOnDemand() - - void OLEObjCache::InsertObj(SdrOle2Obj* pObj) - { -- if (!pObj->IsUnloadable()) -- // This OLE object is exempt from automatic unloading. -- return; -- - if ( !empty() ) - { - SdrOle2Obj* pExistingObj = front(); -diff --git a/svx/source/svdraw/svdoole2.cxx b/svx/source/svdraw/svdoole2.cxx -index f68f5d7..f1f27a83 100644 ---- a/svx/source/svdraw/svdoole2.cxx -+++ b/svx/source/svdraw/svdoole2.cxx -@@ -25,6 +25,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -1926,6 +1927,14 @@ void SdrOle2Obj::NbcMove(const Size& rSize) - - sal_Bool SdrOle2Obj::CanUnloadRunningObj( const uno::Reference< embed::XEmbeddedObject >& xObj, sal_Int64 nAspect ) - { -+ uno::Reference xPersist(xObj, uno::UNO_QUERY); -+ if (xPersist.is()) -+ { -+ if (!xPersist->isStored()) -+ // It doesn't have persistent storage. We can't unload this. -+ return false; -+ } -+ - sal_Bool bResult = sal_False; - - sal_Int32 nState = xObj->getCurrentState(); -@@ -2159,13 +2168,6 @@ sal_Bool SdrOle2Obj::IsCalc() const - return sal_False; - } - --bool SdrOle2Obj::IsUnloadable() const --{ -- // Right now, chart OLE objects are the only ones exempt from automatic -- // unloading. -- return !IsChart(); --} -- - uno::Reference< frame::XModel > SdrOle2Obj::GetParentXModel() const - { - uno::Reference< frame::XModel > xDoc; --- -1.9.3 - diff --git a/SOURCES/0044-fdo-81309-Adjust-references-during-sort.patch b/SOURCES/0044-fdo-81309-Adjust-references-during-sort.patch deleted file mode 100644 index 176622f..0000000 --- a/SOURCES/0044-fdo-81309-Adjust-references-during-sort.patch +++ /dev/null @@ -1,2225 +0,0 @@ -From d4aed409279d3b9b8b95d84418fb7f279367cc30 Mon Sep 17 00:00:00 2001 -From: Kohei Yoshida -Date: Mon, 2 Jun 2014 18:29:27 -0400 -Subject: [PATCH 044/137] fdo#81309: Adjust references during sort. - -(cherry picked from commit 5c6ee09126631342939ae8766fe36083d8c011e3) -Signed-off-by: Andras Timar - -Conflicts: - sc/inc/sortparam.hxx - sc/source/ui/docshell/dbdocfun.cxx - sc/source/ui/undo/undodat.cxx - sc/inc/formulacell.hxx - sc/qa/unit/filters-test.cxx - sc/qa/unit/ucalc.cxx - sc/source/core/data/documen3.cxx - sc/source/ui/docshell/dbdocfun.cxx - -Change-Id: I2b98610f6b774400ecfaffe2905201c27fcab33f -(cherry picked from commit e31300e8749ac7de07bbcb91c6ae28559238e60c) -Signed-off-by: Andras Timar ---- - include/svl/listener.hxx | 12 + - sc/Library_sc.mk | 2 + - sc/inc/document.hxx | 35 +- - sc/inc/formulacell.hxx | 2 + - sc/inc/listenerquery.hxx | 50 +++ - sc/inc/listenerqueryids.hxx | 17 + - sc/inc/refhint.hxx | 30 +- - sc/inc/sharedformula.hxx | 9 + - sc/inc/sortparam.hxx | 27 ++ - sc/inc/table.hxx | 16 +- - sc/inc/tokenarray.hxx | 8 +- - sc/inc/types.hxx | 2 +- - sc/inc/undosort.hxx | 37 ++ - sc/qa/unit/filters-test.cxx | 4 + - sc/qa/unit/ucalc.cxx | 11 +- - sc/source/core/data/documen3.cxx | 27 +- - sc/source/core/data/document10.cxx | 18 + - sc/source/core/data/formulacell.cxx | 38 +- - sc/source/core/data/sortparam.cxx | 51 +++ - sc/source/core/data/table3.cxx | 467 +++++++++++++++++------ - sc/source/core/data/table7.cxx | 17 + - sc/source/core/tool/listenerquery.cxx | 72 ++++ - sc/source/core/tool/refhint.cxx | 29 +- - sc/source/core/tool/sharedformula.cxx | 29 ++ - sc/source/core/tool/token.cxx | 71 +++- - sc/source/filter/xml/XMLExportDatabaseRanges.cxx | 1 + - sc/source/filter/xml/xmldrani.cxx | 1 + - sc/source/ui/docshell/dbdocfun.cxx | 163 +------- - sc/source/ui/undo/undobase.cxx | 1 + - sc/source/ui/undo/undosort.cxx | 55 +++ - sc/source/ui/unoobj/cellsuno.cxx | 1 + - sc/source/ui/unoobj/datauno.cxx | 1 + - svl/source/notify/listener.cxx | 24 +- - 33 files changed, 1018 insertions(+), 310 deletions(-) - create mode 100644 sc/inc/listenerquery.hxx - create mode 100644 sc/inc/listenerqueryids.hxx - create mode 100644 sc/inc/undosort.hxx - create mode 100644 sc/source/core/tool/listenerquery.cxx - create mode 100644 sc/source/ui/undo/undosort.cxx - -diff --git a/include/svl/listener.hxx b/include/svl/listener.hxx -index 1c98458..8b47fda 100644 ---- a/include/svl/listener.hxx -+++ b/include/svl/listener.hxx -@@ -34,6 +34,16 @@ class SVL_DLLPUBLIC SvtListener - const SvtListener& operator=(const SvtListener &); // n.i., ist verboten - - public: -+ class SVL_DLLPUBLIC QueryBase -+ { -+ sal_uInt16 mnId; -+ public: -+ QueryBase( sal_uInt16 nId ); -+ virtual ~QueryBase(); -+ -+ sal_uInt16 getId() const; -+ }; -+ - SvtListener(); - SvtListener( const SvtListener &r ); - virtual ~SvtListener(); -@@ -43,9 +53,11 @@ public: - void EndListeningAll(); - bool IsListening( SvtBroadcaster& rBroadcaster ) const; - -+ void CopyAllBroadcasters( const SvtListener& r ); - bool HasBroadcaster() const; - - virtual void Notify( const SfxHint& rHint ); -+ virtual void Query( QueryBase& rQuery ) const; - }; - - -diff --git a/sc/Library_sc.mk b/sc/Library_sc.mk -index b7041b8..33c6652 100644 ---- a/sc/Library_sc.mk -+++ b/sc/Library_sc.mk -@@ -234,6 +234,7 @@ $(eval $(call gb_Library_add_exception_objects,sc,\ - sc/source/core/tool/interpr6 \ - sc/source/core/tool/interpr7 \ - sc/source/core/tool/jumpmatrix \ -+ sc/source/core/tool/listenerquery \ - sc/source/core/tool/lookupcache \ - sc/source/core/tool/navicfg \ - sc/source/core/tool/odffmap \ -@@ -515,6 +516,7 @@ $(eval $(call gb_Library_add_exception_objects,sc,\ - sc/source/ui/undo/undodraw \ - sc/source/ui/undo/undoolk \ - sc/source/ui/undo/undorangename \ -+ sc/source/ui/undo/undosort \ - sc/source/ui/undo/undostyl \ - sc/source/ui/undo/undotab \ - sc/source/ui/undo/undoutil \ -diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx -index a2aea94..c901af5 100644 ---- a/sc/inc/document.hxx -+++ b/sc/inc/document.hxx -@@ -29,7 +29,6 @@ - #include "rangenam.hxx" - #include "brdcst.hxx" - #include "tabopparams.hxx" --#include "sortparam.hxx" - #include "types.hxx" - #include "formula/grammar.hxx" - #include "formula/types.hxx" -@@ -76,6 +75,8 @@ class DocumentStreamAccess; - class DocumentLinkManager; - struct SetFormulaDirtyContext; - class RefMovedHint; -+struct SortUndoParam; -+struct ReorderParam; - - } - -@@ -178,6 +179,8 @@ class EditTextObject; - struct ScRefCellValue; - class ScDocumentImport; - class ScPostIt; -+struct ScSubTotalParam; -+struct ScQueryParam; - - namespace com { namespace sun { namespace star { - namespace lang { -@@ -1664,7 +1667,9 @@ public: - SC_DLLPUBLIC SvNumberFormatter* GetFormatTable() const; - SC_DLLPUBLIC SvNumberFormatter* CreateFormatTable() const; - -- void Sort( SCTAB nTab, const ScSortParam& rSortParam, bool bKeepQuery, ScProgress* pProgress ); -+ void Sort( SCTAB nTab, const ScSortParam& rSortParam, bool bKeepQuery, ScProgress* pProgress, sc::ReorderParam* pUndo ); -+ void Reorder( const sc::ReorderParam& rParam, ScProgress* pProgress ); -+ - SCSIZE Query( SCTAB nTab, const ScQueryParam& rQueryParam, bool bKeepSub ); - SC_DLLPUBLIC bool CreateQueryParam( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, - SCTAB nTab, ScQueryParam& rQueryParam ); -@@ -2022,8 +2027,8 @@ public: - - void InvalidateStyleSheetUsage() - { bStyleSheetUsageInvalid = true; } -- void GetSortParam( ScSortParam& rParam, SCTAB nTab ); -- void SetSortParam( ScSortParam& rParam, SCTAB nTab ); -+ void SC_DLLPUBLIC GetSortParam( ScSortParam& rParam, SCTAB nTab ); -+ void SC_DLLPUBLIC SetSortParam( ScSortParam& rParam, SCTAB nTab ); - - inline void SetVbaEventProcessor( const com::sun::star::uno::Reference< com::sun::star::script::vba::XVBAEventProcessor >& rxVbaEvents ) - { mxVbaEvents = rxVbaEvents; } -@@ -2052,6 +2057,19 @@ public: - - size_t GetFormulaHash( const ScAddress& rPos ) const; - -+ /** -+ * Make specified formula cells non-grouped. -+ * -+ * @param nTab sheet index -+ * @param nCol column index -+ * @param rRows list of row indices at which formula cells are to be -+ * unshared. This call sorts the passed row indices and -+ * removes duplicates, which is why the caller must pass it -+ * as reference. -+ */ -+ void UnshareFormulaCells( SCTAB nTab, SCCOL nCol, std::vector& rRows ); -+ void RegroupFormulaCells( SCTAB nTab, SCCOL nCol ); -+ - ScFormulaVectorState GetFormulaVectorState( const ScAddress& rPos ) const; - - formula::FormulaTokenRef ResolveStaticReference( const ScAddress& rPos ); -@@ -2130,15 +2148,6 @@ private: // CLOOK-Impl-methods - - void SharePooledResources( ScDocument* pSrcDoc ); - }; --inline void ScDocument::GetSortParam( ScSortParam& rParam, SCTAB nTab ) --{ -- rParam = mSheetSortParams[ nTab ]; --} -- --inline void ScDocument::SetSortParam( ScSortParam& rParam, SCTAB nTab ) --{ -- mSheetSortParams[ nTab ] = rParam; --} - - #endif - -diff --git a/sc/inc/formulacell.hxx b/sc/inc/formulacell.hxx -index 2d25c9b..9c7cd10 100644 ---- a/sc/inc/formulacell.hxx -+++ b/sc/inc/formulacell.hxx -@@ -322,6 +322,8 @@ public: - void SetNextTrack( ScFormulaCell* pF ); - - virtual void Notify( const SfxHint& rHint ); -+ virtual void Query( SvtListener::QueryBase& rQuery ) const; -+ - void SetCompile( bool bVal ); - ScDocument* GetDocument() const; - void SetMatColsRows( SCCOL nCols, SCROW nRows, bool bDirtyFlag=true ); -diff --git a/sc/inc/listenerquery.hxx b/sc/inc/listenerquery.hxx -new file mode 100644 -index 0000000..2cbc957 ---- /dev/null -+++ b/sc/inc/listenerquery.hxx -@@ -0,0 +1,50 @@ -+/* -*- 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/. -+ */ -+ -+#ifndef SC_LISTENERQUERY_HXX -+#define SC_LISTENERQUERY_HXX -+ -+#include -+#include -+ -+namespace sc { -+ -+/** -+ * Used to collect positions of formula cells that belong to a formula -+ * group. -+ */ -+class RefQueryFormulaGroup : public SvtListener::QueryBase -+{ -+public: -+ typedef std::vector ColType; -+ typedef boost::unordered_map ColsType; -+ typedef boost::unordered_map TabsType; -+ -+ RefQueryFormulaGroup(); -+ virtual ~RefQueryFormulaGroup(); -+ -+ void setSkipRange( const ScRange& rRange ); -+ void add( const ScAddress& rPos ); -+ -+ /** -+ * Row positions in each column may contain duplicates. Caller must -+ * remove duplicates if necessary. -+ */ -+ const TabsType& getAllPositions() const; -+ -+private: -+ ScRange maSkipRange; -+ TabsType maTabs; -+}; -+ -+} -+ -+#endif -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/sc/inc/listenerqueryids.hxx b/sc/inc/listenerqueryids.hxx -new file mode 100644 -index 0000000..48f240b ---- /dev/null -+++ b/sc/inc/listenerqueryids.hxx -@@ -0,0 +1,17 @@ -+/* -*- 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/. -+ */ -+ -+#ifndef SC_LISTENERQUERYIDS_HXX -+#define SC_LISTENERQUERYIDS_HXX -+ -+#define SC_LISTENER_QUERY_FORMULA_GROUP_POS 0 -+ -+#endif -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/sc/inc/refhint.hxx b/sc/inc/refhint.hxx -index 3ffe861..6ccda8b 100644 ---- a/sc/inc/refhint.hxx -+++ b/sc/inc/refhint.hxx -@@ -18,7 +18,11 @@ namespace sc { - class RefHint : public SfxSimpleHint - { - public: -- enum Type { Moved, ColumnReordered }; -+ enum Type { -+ Moved, -+ ColumnReordered, -+ RowReordered -+ }; - - private: - Type meType; -@@ -57,22 +61,40 @@ public: - - class RefColReorderHint : public RefHint - { -- const sc::ColReorderMapType& mrColMap; -+ const sc::ColRowReorderMapType& mrColMap; - SCTAB mnTab; - SCROW mnRow1; - SCROW mnRow2; - - public: -- RefColReorderHint( const sc::ColReorderMapType& rColMap, SCTAB nTab, SCROW nRow1, SCROW nRow2 ); -+ RefColReorderHint( const sc::ColRowReorderMapType& rColMap, SCTAB nTab, SCROW nRow1, SCROW nRow2 ); - virtual ~RefColReorderHint(); - -- const sc::ColReorderMapType& getColMap() const; -+ const sc::ColRowReorderMapType& getColMap() const; - - SCTAB getTab() const; - SCROW getStartRow() const; - SCROW getEndRow() const; - }; - -+class RefRowReorderHint : public RefHint -+{ -+ const sc::ColRowReorderMapType& mrRowMap; -+ SCTAB mnTab; -+ SCCOL mnCol1; -+ SCCOL mnCol2; -+ -+public: -+ RefRowReorderHint( const sc::ColRowReorderMapType& rRowMap, SCTAB nTab, SCCOL nCol1, SCCOL nCol2 ); -+ virtual ~RefRowReorderHint(); -+ -+ const sc::ColRowReorderMapType& getRowMap() const; -+ -+ SCTAB getTab() const; -+ SCCOL getStartColumn() const; -+ SCCOL getEndColumn() const; -+}; -+ - } - - #endif -diff --git a/sc/inc/sharedformula.hxx b/sc/inc/sharedformula.hxx -index 571d73c..453b14f 100644 ---- a/sc/inc/sharedformula.hxx -+++ b/sc/inc/sharedformula.hxx -@@ -100,6 +100,15 @@ public: - * @param rCell formula cell instance - */ - static void unshareFormulaCell(const CellStoreType::position_type& aPos, ScFormulaCell& rCell); -+ -+ /** -+ * Make specified formula cells non-shared ones, and split them off from -+ * their respective adjacent formula cell groups. -+ * -+ * @param rCells cell storage container -+ * @param rRows row positions at which to unshare formula cells. -+ */ -+ static void unshareFormulaCells(CellStoreType& rCells, std::vector& rRows); - }; - - } -diff --git a/sc/inc/sortparam.hxx b/sc/inc/sortparam.hxx -index b6f1427..4c3ef1b 100644 ---- a/sc/inc/sortparam.hxx -+++ b/sc/inc/sortparam.hxx -@@ -80,6 +80,33 @@ struct SC_DLLPUBLIC ScSortParam - inline sal_uInt16 GetSortKeyCount() const { return maKeyState.size(); } - }; - -+namespace sc { -+ -+struct SC_DLLPUBLIC ReorderParam -+{ -+ /** -+ * This sort range already takes into account the presence or absence of -+ * header row / column i.e. if a header row / column is present, it -+ * excludes that row / column. -+ */ -+ ScRange maSortRange; -+ -+ /** -+ * List of original column / row positions after reordering. -+ */ -+ std::vector maOrderIndices; -+ bool mbByRow; -+ bool mbPattern; -+ bool mbHiddenFiltered; -+ -+ /** -+ * Reorder the position indices such that it can be used to undo the -+ * original reordering. -+ */ -+ void reverse(); -+}; -+ -+} - - #endif // SC_SORTPARAM_HXX - -diff --git a/sc/inc/table.hxx b/sc/inc/table.hxx -index fe8adb6..97ee720 100644 ---- a/sc/inc/table.hxx -+++ b/sc/inc/table.hxx -@@ -71,6 +71,7 @@ class DocumentStreamAccess; - class CompileFormulaContext; - struct SetFormulaDirtyContext; - class RefMovedHint; -+struct ReorderParam; - - } - -@@ -828,7 +829,10 @@ public: - void StripHidden( SCCOL& rX1, SCROW& rY1, SCCOL& rX2, SCROW& rY2 ); - void ExtendHidden( SCCOL& rX1, SCROW& rY1, SCCOL& rX2, SCROW& rY2 ); - -- void Sort(const ScSortParam& rSortParam, bool bKeepQuery, ScProgress* pProgress); -+ void Sort( -+ const ScSortParam& rSortParam, bool bKeepQuery, ScProgress* pProgress, sc::ReorderParam* pUndo ); -+ void Reorder( const sc::ReorderParam& rParam, ScProgress* pProgress ); -+ - bool ValidQuery( - SCROW nRow, const ScQueryParam& rQueryParam, ScRefCellValue* pCell = NULL, - bool* pbTestEqualCondition = NULL); -@@ -884,6 +888,9 @@ public: - formula::FormulaTokenRef ResolveStaticReference( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2 ); - formula::VectorRefArray FetchVectorRefArray( SCCOL nCol, SCROW nRow1, SCROW nRow2 ); - -+ void UnshareFormulaCells( SCCOL nCol, std::vector& rRows ); -+ void RegroupFormulaCells( SCCOL nCol ); -+ - ScRefCellValue GetRefCellValue( SCCOL nCol, SCROW nRow ); - - SvtBroadcaster* GetBroadcaster( SCCOL nCol, SCROW nRow ); -@@ -998,10 +1005,11 @@ private: - ScRefCellValue& rCell2, SCCOL nCell2Col, SCROW nCell2Row ) const; - short Compare(SCCOLROW nIndex1, SCCOLROW nIndex2) const; - short Compare( ScSortInfoArray*, SCCOLROW nIndex1, SCCOLROW nIndex2) const; -- ScSortInfoArray* CreateSortInfoArray( SCCOLROW nInd1, SCCOLROW nInd2, bool bKeepQuery ); -+ ScSortInfoArray* CreateSortInfoArray( const sc::ReorderParam& rParam ); -+ ScSortInfoArray* CreateSortInfoArray( const ScSortParam& rSortParam, SCCOLROW nInd1, SCCOLROW nInd2, bool bKeepQuery ); - void QuickSort( ScSortInfoArray*, SCsCOLROW nLo, SCsCOLROW nHi); -- void SortReorder( ScSortInfoArray* pArray, ScProgress* pProgress ); -- void SortReorderByRow( ScSortInfoArray* pArray, ScProgress* pProgress ); -+ void SortReorderByColumn( ScSortInfoArray* pArray, SCROW nRow1, SCROW nRow2, bool bPattern, ScProgress* pProgress ); -+ void SortReorderByRow( ScSortInfoArray* pArray, SCCOL nCol1, SCCOL nCol2, ScProgress* pProgress ); - - bool CreateExcelQuery(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, ScQueryParam& rQueryParam); - bool CreateStarQuery(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, ScQueryParam& rQueryParam); -diff --git a/sc/inc/tokenarray.hxx b/sc/inc/tokenarray.hxx -index 8715e9c..fbb613c 100644 ---- a/sc/inc/tokenarray.hxx -+++ b/sc/inc/tokenarray.hxx -@@ -167,7 +167,13 @@ public: - * @param nRow2 bottom row of reordered range. - * @param rColMap old-to-new column mapping. - */ -- void MoveReference( const ScAddress& rPos, SCTAB nTab, SCROW nRow1, SCROW nRow2, const sc::ColReorderMapType& rColMap ); -+ void MoveReferenceColReorder( -+ const ScAddress& rPos, SCTAB nTab, SCROW nRow1, SCROW nRow2, -+ const sc::ColRowReorderMapType& rColMap ); -+ -+ void MoveReferenceRowReorder( -+ const ScAddress& rPos, SCTAB nTab, SCCOL nCol1, SCCOL nCol2, -+ const sc::ColRowReorderMapType& rRowMap ); - - /** - * Adjust all references in named expression. In named expression, we only -diff --git a/sc/inc/types.hxx b/sc/inc/types.hxx -index e0163aa..732ff19 100644 ---- a/sc/inc/types.hxx -+++ b/sc/inc/types.hxx -@@ -98,7 +98,7 @@ struct RangeMatrix - bool isRangeValid() const; - }; - --typedef boost::unordered_map ColReorderMapType; -+typedef boost::unordered_map ColRowReorderMapType; - - } - -diff --git a/sc/inc/undosort.hxx b/sc/inc/undosort.hxx -new file mode 100644 -index 0000000..388fcfa ---- /dev/null -+++ b/sc/inc/undosort.hxx -@@ -0,0 +1,37 @@ -+/* -*- 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/. -+ */ -+ -+#ifndef INCLUDED_SC_UNDOSORT_HXX -+#define INCLUDED_SC_UNDOSORT_HXX -+ -+#include -+#include -+ -+namespace sc { -+ -+class UndoSort : public ScSimpleUndo -+{ -+ ReorderParam maParam; -+ -+public: -+ UndoSort( ScDocShell* pDocSh, const ReorderParam& rParam ); -+ -+ virtual OUString GetComment() const; -+ virtual void Undo(); -+ virtual void Redo(); -+ -+private: -+ void Execute( bool bUndo ); -+}; -+ -+} -+ -+#endif -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/sc/qa/unit/filters-test.cxx b/sc/qa/unit/filters-test.cxx -index e7dcae2..dab2b9e 100644 ---- a/sc/qa/unit/filters-test.cxx -+++ b/sc/qa/unit/filters-test.cxx -@@ -33,6 +33,10 @@ - #include "drwlayer.hxx" - #include "userdat.hxx" - #include "formulacell.hxx" -+#include -+#include -+#include -+#include - - #include - -diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx -index e993a9b..fbc2919 100644 ---- a/sc/qa/unit/ucalc.cxx -+++ b/sc/qa/unit/ucalc.cxx -@@ -51,6 +51,7 @@ - #include "queryparam.hxx" - #include "edittextiterator.hxx" - #include "editutil.hxx" -+#include - - #include "formula/IFunctionDescription.hxx" - -@@ -4276,7 +4277,7 @@ void Test::testSortWithFormulaRefs() - aSortData.maKeyState[0].bDoSort = true; - aSortData.maKeyState[0].nField = 0; - -- pDoc->Sort(0, aSortData, false, NULL); -+ pDoc->Sort(0, aSortData, false, NULL, NULL); - - nEnd = SAL_N_ELEMENTS( aResults ); - for ( SCROW i = nStart; i < nEnd; ++i ) -@@ -4312,7 +4313,7 @@ void Test::testSortWithStrings() - aParam.maKeyState[0].bAscending = true; - aParam.maKeyState[0].nField = 1; - -- m_pDoc->Sort(0, aParam, false, NULL); -+ m_pDoc->Sort(0, aParam, false, NULL, NULL); - - CPPUNIT_ASSERT_EQUAL(OUString("Header"), m_pDoc->GetString(ScAddress(1,1,0))); - CPPUNIT_ASSERT_EQUAL(OUString("Val1"), m_pDoc->GetString(ScAddress(1,2,0))); -@@ -4320,7 +4321,7 @@ void Test::testSortWithStrings() - - aParam.maKeyState[0].bAscending = false; - -- m_pDoc->Sort(0, aParam, false, NULL); -+ m_pDoc->Sort(0, aParam, false, NULL, NULL); - - CPPUNIT_ASSERT_EQUAL(OUString("Header"), m_pDoc->GetString(ScAddress(1,1,0))); - CPPUNIT_ASSERT_EQUAL(OUString("Val2"), m_pDoc->GetString(ScAddress(1,2,0))); -@@ -4366,7 +4367,7 @@ void Test::testSort() - aSortData.maKeyState[0].nField = 1; - aSortData.maKeyState[0].bAscending = true; - -- m_pDoc->Sort(0, aSortData, false, NULL); -+ m_pDoc->Sort(0, aSortData, false, NULL, NULL); - - double nVal = m_pDoc->GetValue(1,0,0); - ASSERT_DOUBLES_EQUAL(nVal, 1.0); -@@ -4399,7 +4400,7 @@ void Test::testSort() - aSortData.nRow2 = aDataRange.aEnd.Row(); - aSortData.bHasHeader = true; - aSortData.maKeyState[0].nField = 0; -- m_pDoc->Sort(0, aSortData, false, NULL); -+ m_pDoc->Sort(0, aSortData, false, NULL, NULL); - - // Title should stay at the top, numbers should be sorted numerically, - // numbers always come before strings, and empty cells always occur at the -diff --git a/sc/source/core/data/documen3.cxx b/sc/source/core/data/documen3.cxx -index b2efbdf..75514fd 100644 ---- a/sc/source/core/data/documen3.cxx -+++ b/sc/source/core/data/documen3.cxx -@@ -1354,17 +1354,30 @@ bool ScDocument::UpdateOutlineRow( SCROW nStartRow, SCROW nEndRow, SCTAB nTab, b - return false; - } - --void ScDocument::Sort(SCTAB nTab, const ScSortParam& rSortParam, bool bKeepQuery, ScProgress* pProgress) -+void ScDocument::Sort( -+ SCTAB nTab, const ScSortParam& rSortParam, bool bKeepQuery, ScProgress* pProgress, sc::ReorderParam* pUndo ) - { - if ( ValidTab(nTab) && nTab < static_cast(maTabs.size()) && maTabs[nTab] ) - { - bool bOldEnableIdle = IsIdleEnabled(); - EnableIdle(false); -- maTabs[nTab]->Sort(rSortParam, bKeepQuery, pProgress); -+ maTabs[nTab]->Sort(rSortParam, bKeepQuery, pProgress, pUndo); - EnableIdle(bOldEnableIdle); - } - } - -+void ScDocument::Reorder( const sc::ReorderParam& rParam, ScProgress* pProgress ) -+{ -+ ScTable* pTab = FetchTable(rParam.maSortRange.aStart.Tab()); -+ if (!pTab) -+ return; -+ -+ bool bOldEnableIdle = IsIdleEnabled(); -+ EnableIdle(false); -+ pTab->Reorder(rParam, pProgress); -+ EnableIdle(bOldEnableIdle); -+} -+ - SCSIZE ScDocument::Query(SCTAB nTab, const ScQueryParam& rQueryParam, bool bKeepSub) - { - if ( ValidTab(nTab) && nTab < static_cast(maTabs.size()) && maTabs[nTab] ) -@@ -2016,4 +2029,14 @@ void ScDocument::ExtendPrintArea( OutputDevice* pDev, SCTAB nTab, - maTabs[nTab]->ExtendPrintArea( pDev, nStartCol, nStartRow, rEndCol, nEndRow ); - } - -+void ScDocument::GetSortParam( ScSortParam& rParam, SCTAB nTab ) -+{ -+ rParam = mSheetSortParams[ nTab ]; -+} -+ -+void ScDocument::SetSortParam( ScSortParam& rParam, SCTAB nTab ) -+{ -+ mSheetSortParams[ nTab ] = rParam; -+} -+ - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/sc/source/core/data/document10.cxx b/sc/source/core/data/document10.cxx -index a4ede21..cb64221 100644 ---- a/sc/source/core/data/document10.cxx -+++ b/sc/source/core/data/document10.cxx -@@ -93,4 +93,22 @@ bool ScDocument::HasUniformRowHeight( SCTAB nTab, SCROW nRow1, SCROW nRow2 ) con - return pTab->HasUniformRowHeight(nRow1, nRow2); - } - -+void ScDocument::UnshareFormulaCells( SCTAB nTab, SCCOL nCol, std::vector& rRows ) -+{ -+ ScTable* pTab = FetchTable(nTab); -+ if (!pTab) -+ return; -+ -+ pTab->UnshareFormulaCells(nCol, rRows); -+} -+ -+void ScDocument::RegroupFormulaCells( SCTAB nTab, SCCOL nCol ) -+{ -+ ScTable* pTab = FetchTable(nTab); -+ if (!pTab) -+ return; -+ -+ pTab->RegroupFormulaCells(nCol); -+} -+ - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/sc/source/core/data/formulacell.cxx b/sc/source/core/data/formulacell.cxx -index 1397372..18194e1 100644 ---- a/sc/source/core/data/formulacell.cxx -+++ b/sc/source/core/data/formulacell.cxx -@@ -52,6 +52,8 @@ - #include "refupdatecontext.hxx" - #include - #include -+#include -+#include - - #include - -@@ -1915,8 +1917,23 @@ void ScFormulaCell::Notify( const SfxHint& rHint ) - const sc::RefColReorderHint& rRefColReorder = - static_cast(rRefHint); - if (!IsShared() || IsSharedTop()) -- pCode->MoveReference( -- aPos, rRefColReorder.getTab(), rRefColReorder.getStartRow(), rRefColReorder.getEndRow(), rRefColReorder.getColMap()); -+ pCode->MoveReferenceColReorder( -+ aPos, rRefColReorder.getTab(), -+ rRefColReorder.getStartRow(), -+ rRefColReorder.getEndRow(), -+ rRefColReorder.getColMap()); -+ } -+ break; -+ case sc::RefHint::RowReordered: -+ { -+ const sc::RefRowReorderHint& rRefRowReorder = -+ static_cast(rRefHint); -+ if (!IsShared() || IsSharedTop()) -+ pCode->MoveReferenceRowReorder( -+ aPos, rRefRowReorder.getTab(), -+ rRefRowReorder.getStartColumn(), -+ rRefRowReorder.getEndColumn(), -+ rRefRowReorder.getRowMap()); - } - break; - default: -@@ -1961,6 +1978,23 @@ void ScFormulaCell::Notify( const SfxHint& rHint ) - } - } - -+void ScFormulaCell::Query( SvtListener::QueryBase& rQuery ) const -+{ -+ switch (rQuery.getId()) -+ { -+ case SC_LISTENER_QUERY_FORMULA_GROUP_POS: -+ { -+ sc::RefQueryFormulaGroup& rRefQuery = -+ static_cast(rQuery); -+ if (IsShared()) -+ rRefQuery.add(aPos); -+ } -+ break; -+ default: -+ ; -+ } -+} -+ - void ScFormulaCell::SetDirty( bool bDirtyFlag ) - { - if ( !IsInChangeTrack() ) -diff --git a/sc/source/core/data/sortparam.cxx b/sc/source/core/data/sortparam.cxx -index d416f32..e4aee16 100644 ---- a/sc/source/core/data/sortparam.cxx -+++ b/sc/source/core/data/sortparam.cxx -@@ -252,4 +252,55 @@ void ScSortParam::MoveToDest() - } - } - -+namespace sc { -+ -+namespace { -+ -+struct ReorderIndex -+{ -+ struct LessByPos2 : std::binary_function -+ { -+ bool operator() ( const ReorderIndex& r1, const ReorderIndex& r2 ) const -+ { -+ return r1.mnPos2 < r2.mnPos2; -+ } -+ }; -+ -+ SCCOLROW mnPos1; -+ SCCOLROW mnPos2; -+ -+ ReorderIndex( SCCOLROW nPos1, SCCOLROW nPos2 ) : mnPos1(nPos1), mnPos2(nPos2) {} -+}; -+ -+} -+ -+void ReorderParam::reverse() -+{ -+ SCCOLROW nStart; -+ if (mbByRow) -+ nStart = maSortRange.aStart.Row(); -+ else -+ nStart = maSortRange.aStart.Col(); -+ -+ size_t n = maOrderIndices.size(); -+ std::vector aBucket; -+ aBucket.reserve(n); -+ for (size_t i = 0; i < n; ++i) -+ { -+ SCCOLROW nPos1 = i + nStart; -+ SCCOLROW nPos2 = maOrderIndices[i]; -+ aBucket.push_back(ReorderIndex(nPos1, nPos2)); -+ } -+ -+ std::sort(aBucket.begin(), aBucket.end(), ReorderIndex::LessByPos2()); -+ std::vector aNew; -+ aNew.reserve(n); -+ for (size_t i = 0; i < n; ++i) -+ aNew.push_back(aBucket[i].mnPos1); -+ -+ maOrderIndices.swap(aNew); -+} -+ -+} -+ - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/sc/source/core/data/table3.cxx b/sc/source/core/data/table3.cxx -index 6a169ef..31cfe2e 100644 ---- a/sc/source/core/data/table3.cxx -+++ b/sc/source/core/data/table3.cxx -@@ -61,6 +61,7 @@ - #include - #include - #include -+#include - - #include "svl/sharedstringpool.hxx" - -@@ -257,39 +258,46 @@ private: - SCCOLROW mnLastIndex; /// index of last non-empty cell position. - sal_uInt16 nUsedSorts; - -- std::vector maOldIndices; -+ std::vector maOrderIndices; - bool mbKeepQuery; - - public: - ScSortInfoArray( sal_uInt16 nSorts, SCCOLROW nInd1, SCCOLROW nInd2 ) : -- pppInfo( new ScSortInfo**[nSorts]), -+ pppInfo(NULL), - nCount( nInd2 - nInd1 + 1 ), nStart( nInd1 ), - mnLastIndex(nInd2), - nUsedSorts(nSorts), - mbKeepQuery(false) - { -- for ( sal_uInt16 nSort = 0; nSort < nUsedSorts; nSort++ ) -+ if (nUsedSorts) - { -- ScSortInfo** ppInfo = new ScSortInfo* [nCount]; -- for ( SCSIZE j = 0; j < nCount; j++ ) -- ppInfo[j] = new ScSortInfo; -- pppInfo[nSort] = ppInfo; -+ pppInfo = new ScSortInfo**[nUsedSorts]; -+ for ( sal_uInt16 nSort = 0; nSort < nUsedSorts; nSort++ ) -+ { -+ ScSortInfo** ppInfo = new ScSortInfo* [nCount]; -+ for ( SCSIZE j = 0; j < nCount; j++ ) -+ ppInfo[j] = new ScSortInfo; -+ pppInfo[nSort] = ppInfo; -+ } - } - - for (size_t i = 0; i < nCount; ++i) -- maOldIndices.push_back(i+nStart); -+ maOrderIndices.push_back(i+nStart); - } - - ~ScSortInfoArray() - { -- for ( sal_uInt16 nSort = 0; nSort < nUsedSorts; nSort++ ) -+ if (pppInfo) - { -- ScSortInfo** ppInfo = pppInfo[nSort]; -- for ( SCSIZE j = 0; j < nCount; j++ ) -- delete ppInfo[j]; -- delete [] ppInfo; -+ for ( sal_uInt16 nSort = 0; nSort < nUsedSorts; nSort++ ) -+ { -+ ScSortInfo** ppInfo = pppInfo[nSort]; -+ for ( SCSIZE j = 0; j < nCount; j++ ) -+ delete ppInfo[j]; -+ delete [] ppInfo; -+ } -+ delete[] pppInfo; - } -- delete[] pppInfo; - - if (mpRows) - std::for_each(mpRows->begin(), mpRows->end(), ScDeleteObjectByPtr()); -@@ -299,11 +307,30 @@ public: - - bool IsKeepQuery() const { return mbKeepQuery; } - -+ /** -+ * Call this only during normal sorting, not from reordering. -+ */ -+ ScSortInfo** GetFirstArray() const -+ { -+ OSL_ASSERT(pppInfo); -+ return pppInfo[0]; -+ } -+ -+ /** -+ * Call this only during normal sorting, not from reordering. -+ */ - ScSortInfo* Get( sal_uInt16 nSort, SCCOLROW nInd ) -- { return (pppInfo[nSort])[ nInd - nStart ]; } -+ { -+ OSL_ASSERT(pppInfo); -+ return (pppInfo[nSort])[ nInd - nStart ]; -+ } - -+ /** -+ * Call this only during normal sorting, not from reordering. -+ */ - void Swap( SCCOLROW nInd1, SCCOLROW nInd2 ) - { -+ OSL_ASSERT(pppInfo); - SCSIZE n1 = static_cast(nInd1 - nStart); - SCSIZE n2 = static_cast(nInd2 - nStart); - for ( sal_uInt16 nSort = 0; nSort < nUsedSorts; nSort++ ) -@@ -314,7 +341,7 @@ public: - ppInfo[n2] = pTmp; - } - -- std::swap(maOldIndices[n1], maOldIndices[n2]); -+ std::swap(maOrderIndices[n1], maOrderIndices[n2]); - - if (mpRows) - { -@@ -324,13 +351,47 @@ public: - } - } - -+ void SetOrderIndices( const std::vector& rIndices ) -+ { -+ maOrderIndices = rIndices; -+ } -+ -+ /** -+ * @param rIndices indices are actual row positions on the sheet, not an -+ * offset from the top row. -+ */ -+ void ReorderByRow( const std::vector& rIndices ) -+ { -+ if (!mpRows) -+ return; -+ -+ RowsType& rRows = *mpRows; -+ -+ std::vector aOrderIndices2; -+ aOrderIndices2.reserve(rIndices.size()); -+ -+ RowsType aRows2; -+ aRows2.reserve(rRows.size()); -+ -+ std::vector::const_iterator it = rIndices.begin(), itEnd = rIndices.end(); -+ for (; it != itEnd; ++it) -+ { -+ size_t nPos = *it - nStart; // switch to an offset to top row. -+ aRows2.push_back(rRows[nPos]); -+ aOrderIndices2.push_back(maOrderIndices[nPos]); -+ } -+ -+ rRows.swap(aRows2); -+ maOrderIndices.swap(aOrderIndices2); -+ } -+ - sal_uInt16 GetUsedSorts() const { return nUsedSorts; } -- ScSortInfo** GetFirstArray() const { return pppInfo[0]; } -+ - SCCOLROW GetStart() const { return nStart; } - SCCOLROW GetLast() const { return mnLastIndex; } - SCSIZE GetCount() const { return nCount; } - -- const std::vector& GetOldIndices() const { return maOldIndices; } -+ const std::vector& GetOrderIndices() const { return maOrderIndices; } - - RowsType& InitDataRows( size_t nRowSize, size_t nColSize ) - { -@@ -348,19 +409,98 @@ public: - } - }; - --ScSortInfoArray* ScTable::CreateSortInfoArray( SCCOLROW nInd1, SCCOLROW nInd2, bool bKeepQuery ) -+namespace { -+ -+void initDataRows( -+ ScSortInfoArray& rArray, ScTable& rTab, ScColumn* pCols, -+ SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, -+ bool bPattern, bool bHiddenFiltered ) -+{ -+ // Fill row-wise data table. -+ ScSortInfoArray::RowsType& rRows = rArray.InitDataRows(nRow2-nRow1+1, nCol2-nCol1+1); -+ -+ for (SCCOL nCol = nCol1; nCol <= nCol2; ++nCol) -+ { -+ ScColumn& rCol = pCols[nCol]; -+ -+ // Skip reordering of cell formats if the whole span is on the same pattern entry. -+ bool bUniformPattern = rCol.GetPatternCount(nRow1, nRow2) < 2u; -+ -+ sc::ColumnBlockConstPosition aBlockPos; -+ rCol.InitBlockPosition(aBlockPos); -+ for (SCROW nRow = nRow1; nRow <= nRow2; ++nRow) -+ { -+ ScSortInfoArray::Row& rRow = *rRows[nRow-nRow1]; -+ ScSortInfoArray::Cell& rCell = rRow.maCells[nCol-nCol1]; -+ -+ rCell.maCell = rCol.GetCellValue(aBlockPos, nRow); -+ rCell.mpAttr = rCol.GetCellTextAttr(aBlockPos, nRow); -+ rCell.mpBroadcaster = rCol.GetBroadcaster(aBlockPos, nRow); -+ rCell.mpNote = rCol.GetCellNote(aBlockPos, nRow); -+ -+ if (!bUniformPattern && bPattern) -+ rCell.mpPattern = rCol.GetPattern(nRow); -+ } -+ } -+ -+ if (bHiddenFiltered) -+ { -+ for (SCROW nRow = nRow1; nRow <= nRow2; ++nRow) -+ { -+ ScSortInfoArray::Row& rRow = *rRows[nRow-nRow1]; -+ rRow.mbHidden = rTab.RowHidden(nRow); -+ rRow.mbFiltered = rTab.RowFiltered(nRow); -+ } -+ } -+} -+ -+} -+ -+ScSortInfoArray* ScTable::CreateSortInfoArray( const sc::ReorderParam& rParam ) -+{ -+ ScSortInfoArray* pArray = NULL; -+ -+ if (rParam.mbByRow) -+ { -+ // Create a sort info array with just the data table. -+ SCROW nRow1 = rParam.maSortRange.aStart.Row(); -+ SCROW nRow2 = rParam.maSortRange.aEnd.Row(); -+ SCCOL nCol1 = rParam.maSortRange.aStart.Col(); -+ SCCOL nCol2 = rParam.maSortRange.aEnd.Col(); -+ -+ pArray = new ScSortInfoArray(0, nRow1, nRow2); -+ pArray->SetKeepQuery(rParam.mbHiddenFiltered); -+ -+ initDataRows( -+ *pArray, *this, aCol, nCol1, nRow1, nCol2, nRow2, -+ rParam.mbPattern, rParam.mbHiddenFiltered); -+ } -+ else -+ { -+ SCCOLROW nCol1 = rParam.maSortRange.aStart.Col(); -+ SCCOLROW nCol2 = rParam.maSortRange.aEnd.Col(); -+ -+ pArray = new ScSortInfoArray(0, nCol1, nCol2); -+ pArray->SetKeepQuery(rParam.mbHiddenFiltered); -+ } -+ -+ return pArray; -+} -+ -+ScSortInfoArray* ScTable::CreateSortInfoArray( -+ const ScSortParam& rSortParam, SCCOLROW nInd1, SCCOLROW nInd2, bool bKeepQuery ) - { - sal_uInt16 nUsedSorts = 1; -- while ( nUsedSorts < aSortParam.GetSortKeyCount() && aSortParam.maKeyState[nUsedSorts].bDoSort ) -+ while ( nUsedSorts < rSortParam.GetSortKeyCount() && rSortParam.maKeyState[nUsedSorts].bDoSort ) - nUsedSorts++; - ScSortInfoArray* pArray = new ScSortInfoArray( nUsedSorts, nInd1, nInd2 ); - pArray->SetKeepQuery(bKeepQuery); - -- if ( aSortParam.bByRow ) -+ if ( rSortParam.bByRow ) - { - for ( sal_uInt16 nSort = 0; nSort < nUsedSorts; nSort++ ) - { -- SCCOL nCol = static_cast(aSortParam.maKeyState[nSort].nField); -+ SCCOL nCol = static_cast(rSortParam.maKeyState[nSort].nField); - ScColumn* pCol = &aCol[nCol]; - sc::ColumnBlockConstPosition aBlockPos; - pCol->InitBlockPosition(aBlockPos); -@@ -372,49 +512,15 @@ ScSortInfoArray* ScTable::CreateSortInfoArray( SCCOLROW nInd1, SCCOLROW nInd2, b - } - } - -- // Fill row-wise data table. -- ScSortInfoArray::RowsType& rRows = pArray->InitDataRows( -- nInd2 - nInd1 + 1, aSortParam.nCol2 - aSortParam.nCol1 + 1); -- -- for (SCCOL nCol = aSortParam.nCol1; nCol <= aSortParam.nCol2; ++nCol) -- { -- ScColumn& rCol = aCol[nCol]; -- -- // Skip reordering of cell formats if the whole span is on the same pattern entry. -- bool bUniformPattern = rCol.GetPatternCount(nInd1, nInd2) < 2u; -- -- sc::ColumnBlockConstPosition aBlockPos; -- rCol.InitBlockPosition(aBlockPos); -- for (SCROW nRow = nInd1; nRow <= nInd2; ++nRow) -- { -- ScSortInfoArray::Row& rRow = *rRows[nRow-nInd1]; -- ScSortInfoArray::Cell& rCell = rRow.maCells[nCol-aSortParam.nCol1]; -- -- rCell.maCell = rCol.GetCellValue(aBlockPos, nRow); -- rCell.mpAttr = rCol.GetCellTextAttr(aBlockPos, nRow); -- rCell.mpBroadcaster = rCol.GetBroadcaster(aBlockPos, nRow); -- rCell.mpNote = rCol.GetCellNote(aBlockPos, nRow); -- -- if (!bUniformPattern && aSortParam.bIncludePattern) -- rCell.mpPattern = rCol.GetPattern(nRow); -- } -- } -- -- if (bKeepQuery) -- { -- for (SCROW nRow = nInd1; nRow <= nInd2; ++nRow) -- { -- ScSortInfoArray::Row& rRow = *rRows[nRow-nInd1]; -- rRow.mbHidden = RowHidden(nRow); -- rRow.mbFiltered = RowFiltered(nRow); -- } -- } -+ initDataRows( -+ *pArray, *this, aCol, rSortParam.nCol1, nInd1, rSortParam.nCol2, nInd2, -+ rSortParam.bIncludePattern, bKeepQuery); - } - else - { - for ( sal_uInt16 nSort = 0; nSort < nUsedSorts; nSort++ ) - { -- SCROW nRow = aSortParam.maKeyState[nSort].nField; -+ SCROW nRow = rSortParam.maKeyState[nSort].nField; - for ( SCCOL nCol = static_cast(nInd1); - nCol <= static_cast(nInd2); nCol++ ) - { -@@ -530,12 +636,13 @@ void ScTable::DestroySortCollator() - - namespace { - --class ColReorderNotifier : std::unary_function -+template -+class ReorderNotifier : std::unary_function - { -- sc::RefColReorderHint maHint; -+ _Hint maHint; - public: -- ColReorderNotifier( const sc::ColReorderMapType& rColMap, SCTAB nTab, SCROW nRow1, SCROW nRow2 ) : -- maHint(rColMap, nTab, nRow1, nRow2) {} -+ ReorderNotifier( const _ReorderMap& rMap, SCTAB nTab, _Index nPos1, _Index nPos2 ) : -+ maHint(rMap, nTab, nPos1, nPos2) {} - - void operator() ( SvtListener* p ) - { -@@ -543,77 +650,86 @@ public: - } - }; - --} -+typedef ReorderNotifier ColReorderNotifier; -+typedef ReorderNotifier RowReorderNotifier; - --void ScTable::SortReorder( ScSortInfoArray* pArray, ScProgress* pProgress ) -+class FormulaGroupPosCollector : std::unary_function - { -- if (aSortParam.bByRow) -+ sc::RefQueryFormulaGroup& mrQuery; -+ -+public: -+ FormulaGroupPosCollector( sc::RefQueryFormulaGroup& rQuery ) : mrQuery(rQuery) {} -+ -+ void operator() ( SvtListener* p ) - { -- SortReorderByRow(pArray, pProgress); -- return; -+ p->Query(mrQuery); - } -+}; - -- size_t nCount = pArray->GetCount(); -+} -+ -+void ScTable::SortReorderByColumn( -+ ScSortInfoArray* pArray, SCROW nRow1, SCROW nRow2, bool bPattern, ScProgress* pProgress ) -+{ - SCCOLROW nStart = pArray->GetStart(); - SCCOLROW nLast = pArray->GetLast(); -- ScSortInfo** ppInfo = pArray->GetFirstArray(); -- -- std::vector aTable(nCount); - -- SCSIZE nPos; -- for ( nPos = 0; nPos < nCount; nPos++ ) -- aTable[ppInfo[nPos]->nOrg - nStart] = ppInfo[nPos]; -+ std::vector aIndices = pArray->GetOrderIndices(); -+ size_t nCount = aIndices.size(); - - // Cut formula grouping at row and reference boundaries before the reordering. -- ScRange aSortRange(nStart, aSortParam.nRow1, nTab, nLast, aSortParam.nRow2, nTab); -+ ScRange aSortRange(nStart, nRow1, nTab, nLast, nRow2, nTab); - for (SCCOL nCol = nStart; nCol <= nLast; ++nCol) - aCol[nCol].SplitFormulaGroupByRelativeRef(aSortRange); - -+ // table to keep track of column index to position in the index table. -+ std::vector aPosTable(nCount); -+ for (size_t i = 0; i < nCount; ++i) -+ aPosTable[aIndices[i]-nStart] = i; -+ - SCCOLROW nDest = nStart; -- for ( nPos = 0; nPos < nCount; nPos++, nDest++ ) -+ for (size_t i = 0; i < nCount; ++i, ++nDest) - { -- SCCOLROW nOrg = ppInfo[nPos]->nOrg; -- if ( nDest != nOrg ) -+ SCCOLROW nSrc = aIndices[i]; -+ if (nDest != nSrc) - { -- aCol[nDest].Swap(aCol[nOrg], aSortParam.nRow1, aSortParam.nRow2, aSortParam.bIncludePattern); -+ aCol[nDest].Swap(aCol[nSrc], nRow1, nRow2, bPattern); - -- // neue Position des weggeswapten eintragen -- ScSortInfo* p = ppInfo[nPos]; -- p->nOrg = nDest; -- ::std::swap(p, aTable[nDest-nStart]); -- p->nOrg = nOrg; -- ::std::swap(p, aTable[nOrg-nStart]); -- OSL_ENSURE( p == ppInfo[nPos], "SortReorder: nOrg MisMatch" ); -+ // Update the position of the index that was originally equal to nDest. -+ size_t nPos = aPosTable[nDest-nStart]; -+ aIndices[nPos] = nSrc; -+ aPosTable[nSrc-nStart] = nPos; - } -- if(pProgress) -- pProgress->SetStateOnPercent( nPos ); -+ -+ if (pProgress) -+ pProgress->SetStateOnPercent(i); - } - - // Reset formula cell positions which became out-of-sync after column reordering. - for (SCCOL nCol = nStart; nCol <= nLast; ++nCol) -- aCol[nCol].ResetFormulaCellPositions(aSortParam.nRow1, aSortParam.nRow2); -+ aCol[nCol].ResetFormulaCellPositions(nRow1, nRow2); - - // Set up column reorder map (for later broadcasting of reference updates). -- sc::ColReorderMapType aColMap; -- const std::vector& rOldIndices = pArray->GetOldIndices(); -+ sc::ColRowReorderMapType aColMap; -+ const std::vector& rOldIndices = pArray->GetOrderIndices(); - for (size_t i = 0, n = rOldIndices.size(); i < n; ++i) - { - SCCOL nNew = i + nStart; -- SCROW nOld = rOldIndices[i]; -- aColMap.insert(sc::ColReorderMapType::value_type(nOld, nNew)); -+ SCCOL nOld = rOldIndices[i]; -+ aColMap.insert(sc::ColRowReorderMapType::value_type(nOld, nNew)); - } - - // Collect all listeners within sorted range ahead of time. - std::vector aListeners; - for (SCCOL nCol = nStart; nCol <= nLast; ++nCol) -- aCol[nCol].CollectListeners(aListeners, aSortParam.nRow1, aSortParam.nRow2); -+ aCol[nCol].CollectListeners(aListeners, nRow1, nRow2); - - // Remove any duplicate listener entries and notify all listeners - // afterward. We must ensure that we notify each unique listener only - // once. - std::sort(aListeners.begin(), aListeners.end()); - aListeners.erase(std::unique(aListeners.begin(), aListeners.end()), aListeners.end()); -- ColReorderNotifier aFunc(aColMap, nTab, aSortParam.nRow1, aSortParam.nRow2); -+ ColReorderNotifier aFunc(aColMap, nTab, nRow1, nRow2); - std::for_each(aListeners.begin(), aListeners.end(), aFunc); - - // Re-join formulas at row boundaries now that all the references have -@@ -621,28 +737,28 @@ void ScTable::SortReorder( ScSortInfoArray* pArray, ScProgress* pProgress ) - for (SCCOL nCol = nStart; nCol <= nLast; ++nCol) - { - sc::CellStoreType& rCells = aCol[nCol].maCells; -- sc::CellStoreType::position_type aPos = rCells.position(aSortParam.nRow1); -+ sc::CellStoreType::position_type aPos = rCells.position(nRow1); - sc::SharedFormulaUtil::joinFormulaCellAbove(aPos); -- aPos = rCells.position(aPos.first, aSortParam.nRow2+1); -+ aPos = rCells.position(aPos.first, nRow2+1); - sc::SharedFormulaUtil::joinFormulaCellAbove(aPos); - } - } - --void ScTable::SortReorderByRow( ScSortInfoArray* pArray, ScProgress* pProgress ) -+void ScTable::SortReorderByRow( -+ ScSortInfoArray* pArray, SCCOL nCol1, SCCOL nCol2, ScProgress* pProgress ) - { -+ if (nCol2 < nCol1) -+ return; -+ - SCROW nRow1 = pArray->GetStart(); - SCROW nRow2 = pArray->GetLast(); - ScSortInfoArray::RowsType* pRows = pArray->GetDataRows(); - assert(pRows); // In sort-by-row mode we must have data rows already populated. - -- // Detach all formula cells within the sorted range first. -- sc::EndListeningContext aCxt(*pDocument); -- DetachFormulaCells(aCxt, aSortParam.nCol1, nRow1, aSortParam.nCol2, nRow2); -- - // Cells in the data rows only reference values in the document. Make - // a copy before updating the document. - -- size_t nColCount = aSortParam.nCol2 - aSortParam.nCol1 + 1; -+ size_t nColCount = nCol2 - nCol1 + 1; - boost::ptr_vector aSortedCols; // storage for copied cells. - SortedRowFlags aRowFlags; - aSortedCols.reserve(nColCount); -@@ -659,7 +775,7 @@ void ScTable::SortReorderByRow( ScSortInfoArray* pArray, ScProgress* pProgress ) - ScSortInfoArray::Row* pRow = (*pRows)[i]; - for (size_t j = 0; j < pRow->maCells.size(); ++j) - { -- ScAddress aCellPos(aSortParam.nCol1 + j, nRow1 + i, nTab); -+ ScAddress aCellPos(nCol1 + j, nRow1 + i, nTab); - - ScSortInfoArray::Cell& rCell = pRow->maCells[j]; - -@@ -681,14 +797,14 @@ void ScTable::SortReorderByRow( ScSortInfoArray* pArray, ScProgress* pProgress ) - case CELLTYPE_FORMULA: - { - assert(rCell.mpAttr); -- size_t n = rCellStore.size(); -- sc::CellStoreType::iterator itBlk = rCellStore.push_back( rCell.maCell.mpFormula->Clone( -- aCellPos, SC_CLONECELL_DEFAULT | SC_CLONECELL_ADJUST3DREL)); -- -- // Join the formula cells as we fill the container. -- size_t nOffset = n - itBlk->position; -- sc::CellStoreType::position_type aPos(itBlk, nOffset); -- sc::SharedFormulaUtil::joinFormulaCellAbove(aPos); -+ ScAddress aOldPos = rCell.maCell.mpFormula->aPos; -+ -+ ScFormulaCell* pNew = rCell.maCell.mpFormula->Clone( -+ aCellPos, SC_CLONECELL_DEFAULT | SC_CLONECELL_ADJUST3DREL); -+ pNew->CopyAllBroadcasters(*rCell.maCell.mpFormula); -+ pNew->GetCode()->AdjustReferenceOnMovedOrigin(aOldPos, aCellPos); -+ -+ sc::CellStoreType::iterator itBlk = rCellStore.push_back(pNew); - } - break; - default: -@@ -737,7 +853,7 @@ void ScTable::SortReorderByRow( ScSortInfoArray* pArray, ScProgress* pProgress ) - - for (size_t i = 0, n = aSortedCols.size(); i < n; ++i) - { -- SCCOL nThisCol = i + aSortParam.nCol1; -+ SCCOL nThisCol = i + nCol1; - - { - sc::CellStoreType& rDest = aCol[nThisCol].maCells; -@@ -812,10 +928,62 @@ void ScTable::SortReorderByRow( ScSortInfoArray* pArray, ScProgress* pProgress ) - SetRowFiltered(it->mnRow1, it->mnRow2, true); - } - -- // Attach all formula cells within sorted range, to have them start listening again. -- sc::StartListeningContext aStartListenCxt(*pDocument); -- AttachFormulaCells( -- aStartListenCxt, aSortParam.nCol1, nRow1, aSortParam.nCol2, nRow2); -+ // Set up row reorder map (for later broadcasting of reference updates). -+ sc::ColRowReorderMapType aRowMap; -+ const std::vector& rOldIndices = pArray->GetOrderIndices(); -+ for (size_t i = 0, n = rOldIndices.size(); i < n; ++i) -+ { -+ SCROW nNew = i + nRow1; -+ SCROW nOld = rOldIndices[i]; -+ aRowMap.insert(sc::ColRowReorderMapType::value_type(nOld, nNew)); -+ } -+ -+ // Collect all listeners within sorted range ahead of time. -+ std::vector aListeners; -+ for (SCCOL nCol = nCol1; nCol <= nCol2; ++nCol) -+ aCol[nCol].CollectListeners(aListeners, nRow1, nRow2); -+ -+ // Remove any duplicate listener entries. We must ensure that we notify -+ // each unique listener only once. -+ std::sort(aListeners.begin(), aListeners.end()); -+ aListeners.erase(std::unique(aListeners.begin(), aListeners.end()), aListeners.end()); -+ -+ // Collect positions of all shared formula cells outside the sorted range, -+ // and make them unshared before notifying them. -+ sc::RefQueryFormulaGroup aFormulaGroupPos; -+ aFormulaGroupPos.setSkipRange(ScRange(nCol1, nRow1, nTab, nCol2, nRow2, nTab)); -+ -+ std::for_each(aListeners.begin(), aListeners.end(), FormulaGroupPosCollector(aFormulaGroupPos)); -+ const sc::RefQueryFormulaGroup::TabsType& rGroupTabs = aFormulaGroupPos.getAllPositions(); -+ sc::RefQueryFormulaGroup::TabsType::const_iterator itGroupTab = rGroupTabs.begin(), itGroupTabEnd = rGroupTabs.end(); -+ for (; itGroupTab != itGroupTabEnd; ++itGroupTab) -+ { -+ const sc::RefQueryFormulaGroup::ColsType& rCols = itGroupTab->second; -+ sc::RefQueryFormulaGroup::ColsType::const_iterator itCol = rCols.begin(), itColEnd = rCols.end(); -+ for (; itCol != itColEnd; ++itCol) -+ { -+ const sc::RefQueryFormulaGroup::ColType& rCol = itCol->second; -+ std::vector aBounds(rCol); -+ pDocument->UnshareFormulaCells(itGroupTab->first, itCol->first, aBounds); -+ } -+ } -+ -+ // Notify the listeners. -+ RowReorderNotifier aFunc(aRowMap, nTab, nCol1, nCol2); -+ std::for_each(aListeners.begin(), aListeners.end(), aFunc); -+ -+ // Re-group formulas in affected columns. -+ for (itGroupTab = rGroupTabs.begin(); itGroupTab != itGroupTabEnd; ++itGroupTab) -+ { -+ const sc::RefQueryFormulaGroup::ColsType& rCols = itGroupTab->second; -+ sc::RefQueryFormulaGroup::ColsType::const_iterator itCol = rCols.begin(), itColEnd = rCols.end(); -+ for (; itCol != itColEnd; ++itCol) -+ pDocument->RegroupFormulaCells(itGroupTab->first, itCol->first); -+ } -+ -+ // Re-group columns in the sorted range too. -+ for (SCCOL i = nCol1; i <= nCol2; ++i) -+ aCol[i].RegroupFormulaCells(); - } - - short ScTable::CompareCell( -@@ -1034,11 +1202,21 @@ void ScTable::DecoladeRow( ScSortInfoArray* pArray, SCROW nRow1, SCROW nRow2 ) - } - } - --void ScTable::Sort(const ScSortParam& rSortParam, bool bKeepQuery, ScProgress* pProgress) -+void ScTable::Sort( -+ const ScSortParam& rSortParam, bool bKeepQuery, ScProgress* pProgress, sc::ReorderParam* pUndo ) - { - aSortParam = rSortParam; - InitSortCollator( rSortParam ); - bGlobalKeepQuery = bKeepQuery; -+ -+ if (pUndo) -+ { -+ // Copy over the basic sort parameters. -+ pUndo->mbByRow = rSortParam.bByRow; -+ pUndo->mbPattern = rSortParam.bIncludePattern; -+ pUndo->mbHiddenFiltered = bKeepQuery; -+ } -+ - if (rSortParam.bByRow) - { - SCROW nLastRow = 0; -@@ -1052,15 +1230,19 @@ void ScTable::Sort(const ScSortParam& rSortParam, bool bKeepQuery, ScProgress* p - if(pProgress) - pProgress->SetState( 0, nLastRow-nRow1 ); - -- boost::scoped_ptr pArray(CreateSortInfoArray(nRow1, nLastRow, bKeepQuery)); -+ boost::scoped_ptr pArray(CreateSortInfoArray(aSortParam, nRow1, nLastRow, bKeepQuery)); - - if ( nLastRow - nRow1 > 255 ) - DecoladeRow(pArray.get(), nRow1, nLastRow); - - QuickSort(pArray.get(), nRow1, nLastRow); -- SortReorder(pArray.get(), pProgress); -+ SortReorderByRow(pArray.get(), aSortParam.nCol1, aSortParam.nCol2, pProgress); - -- // #i59745# update position of caption objects of cell notes --> reported at (SortReorder) ScColumn::SwapCellNotes level -+ if (pUndo) -+ { -+ pUndo->maSortRange = ScRange(rSortParam.nCol1, nRow1, nTab, rSortParam.nCol2, nLastRow, nTab); -+ pUndo->maOrderIndices = pArray->GetOrderIndices(); -+ } - } - } - else -@@ -1077,17 +1259,48 @@ void ScTable::Sort(const ScSortParam& rSortParam, bool bKeepQuery, ScProgress* p - if(pProgress) - pProgress->SetState( 0, nLastCol-nCol1 ); - -- boost::scoped_ptr pArray(CreateSortInfoArray(nCol1, nLastCol, bKeepQuery)); -+ boost::scoped_ptr pArray(CreateSortInfoArray(aSortParam, nCol1, nLastCol, bKeepQuery)); - - QuickSort(pArray.get(), nCol1, nLastCol); -- SortReorder(pArray.get(), pProgress); -+ SortReorderByColumn(pArray.get(), aSortParam.nRow1, aSortParam.nRow2, aSortParam.bIncludePattern, pProgress); - -- // #i59745# update position of caption objects of cell notes --> reported at (SortReorder) ScColumn::SwapCellNotes level -+ if (pUndo) -+ { -+ pUndo->maSortRange = ScRange(nCol1, aSortParam.nRow1, nTab, nLastCol, aSortParam.nRow2, nTab); -+ pUndo->maOrderIndices = pArray->GetOrderIndices(); -+ } - } - } - DestroySortCollator(); - } - -+void ScTable::Reorder( const sc::ReorderParam& rParam, ScProgress* pProgress ) -+{ -+ if (rParam.maOrderIndices.empty()) -+ return; -+ -+ boost::scoped_ptr pArray(CreateSortInfoArray(rParam)); -+ if (!pArray) -+ return; -+ -+ if (rParam.mbByRow) -+ { -+ // Re-play sorting from the known sort indices. -+ pArray->ReorderByRow(rParam.maOrderIndices); -+ -+ SortReorderByRow( -+ pArray.get(), rParam.maSortRange.aStart.Col(), rParam.maSortRange.aEnd.Col(), pProgress); -+ } -+ else -+ { -+ // Ordering by column is much simpler. Just set the order indices and we are done. -+ pArray->SetOrderIndices(rParam.maOrderIndices); -+ SortReorderByColumn( -+ pArray.get(), rParam.maSortRange.aStart.Row(), rParam.maSortRange.aEnd.Row(), -+ rParam.mbPattern, pProgress); -+ } -+} -+ - namespace { - - class SubTotalRowFinder -@@ -2078,7 +2291,7 @@ void ScTable::TopTenQuery( ScQueryParam& rParam ) - bSortCollatorInitialized = true; - InitSortCollator( aLocalSortParam ); - } -- boost::scoped_ptr pArray(CreateSortInfoArray(nRow1, rParam.nRow2, bGlobalKeepQuery)); -+ boost::scoped_ptr pArray(CreateSortInfoArray(aSortParam, nRow1, rParam.nRow2, bGlobalKeepQuery)); - DecoladeRow( pArray.get(), nRow1, rParam.nRow2 ); - QuickSort( pArray.get(), nRow1, rParam.nRow2 ); - ScSortInfo** ppInfo = pArray->GetFirstArray(); -diff --git a/sc/source/core/data/table7.cxx b/sc/source/core/data/table7.cxx -index 2e6aad1..f3528dd 100644 ---- a/sc/source/core/data/table7.cxx -+++ b/sc/source/core/data/table7.cxx -@@ -13,6 +13,7 @@ - #include - #include - #include -+#include - - void ScTable::DeleteBeforeCopyFromClip( sc::CopyFromClipContext& rCxt, const ScTable& rClipTab ) - { -@@ -78,4 +79,20 @@ bool ScTable::HasUniformRowHeight( SCROW nRow1, SCROW nRow2 ) const - return nRow2 <= aData.mnRow2; - } - -+void ScTable::UnshareFormulaCells( SCCOL nCol, std::vector& rRows ) -+{ -+ if (!ValidCol(nCol)) -+ return; -+ -+ sc::SharedFormulaUtil::unshareFormulaCells(aCol[nCol].maCells, rRows); -+} -+ -+void ScTable::RegroupFormulaCells( SCCOL nCol ) -+{ -+ if (!ValidCol(nCol)) -+ return; -+ -+ aCol[nCol].RegroupFormulaCells(); -+} -+ - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/sc/source/core/tool/listenerquery.cxx b/sc/source/core/tool/listenerquery.cxx -new file mode 100644 -index 0000000..bf9d38f ---- /dev/null -+++ b/sc/source/core/tool/listenerquery.cxx -@@ -0,0 +1,72 @@ -+/* -*- 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 -+#include -+#include -+ -+namespace sc { -+ -+RefQueryFormulaGroup::RefQueryFormulaGroup() : -+ SvtListener::QueryBase(SC_LISTENER_QUERY_FORMULA_GROUP_POS), -+ maSkipRange(ScAddress::INITIALIZE_INVALID) {} -+ -+RefQueryFormulaGroup::~RefQueryFormulaGroup() {} -+ -+void RefQueryFormulaGroup::setSkipRange( const ScRange& rRange ) -+{ -+ maSkipRange = rRange; -+} -+ -+void RefQueryFormulaGroup::add( const ScAddress& rPos ) -+{ -+ if (!rPos.IsValid()) -+ return; -+ -+ if (maSkipRange.IsValid() && maSkipRange.In(rPos)) -+ // This is within the skip range. Skip it. -+ return; -+ -+ TabsType::iterator itTab = maTabs.find(rPos.Tab()); -+ if (itTab == maTabs.end()) -+ { -+ std::pair r = -+ maTabs.insert(TabsType::value_type(rPos.Tab(), ColsType())); -+ if (!r.second) -+ // Insertion failed. -+ return; -+ -+ itTab = r.first; -+ } -+ -+ ColsType& rCols = itTab->second; -+ ColsType::iterator itCol = rCols.find(rPos.Col()); -+ if (itCol == rCols.end()) -+ { -+ std::pair r = -+ rCols.insert(ColsType::value_type(rPos.Col(), ColType())); -+ if (!r.second) -+ // Insertion failed. -+ return; -+ -+ itCol = r.first; -+ } -+ -+ ColType& rCol = itCol->second; -+ rCol.push_back(rPos.Row()); -+} -+ -+const RefQueryFormulaGroup::TabsType& RefQueryFormulaGroup::getAllPositions() const -+{ -+ return maTabs; -+} -+ -+} -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/sc/source/core/tool/refhint.cxx b/sc/source/core/tool/refhint.cxx -index 0e70b4f..29a9166 100644 ---- a/sc/source/core/tool/refhint.cxx -+++ b/sc/source/core/tool/refhint.cxx -@@ -31,12 +31,12 @@ const ScAddress& RefMovedHint::getDelta() const - return maMoveDelta; - } - --RefColReorderHint::RefColReorderHint( const sc::ColReorderMapType& rColMap, SCTAB nTab, SCROW nRow1, SCROW nRow2 ) : -+RefColReorderHint::RefColReorderHint( const sc::ColRowReorderMapType& rColMap, SCTAB nTab, SCROW nRow1, SCROW nRow2 ) : - RefHint(ColumnReordered), mrColMap(rColMap), mnTab(nTab), mnRow1(nRow1), mnRow2(nRow2) {} - - RefColReorderHint::~RefColReorderHint() {} - --const sc::ColReorderMapType& RefColReorderHint::getColMap() const -+const sc::ColRowReorderMapType& RefColReorderHint::getColMap() const - { - return mrColMap; - } -@@ -56,6 +56,31 @@ SCROW RefColReorderHint::getEndRow() const - return mnRow2; - } - -+RefRowReorderHint::RefRowReorderHint( const sc::ColRowReorderMapType& rRowMap, SCTAB nTab, SCCOL nCol1, SCCOL nCol2 ) : -+ RefHint(RowReordered), mrRowMap(rRowMap), mnTab(nTab), mnCol1(nCol1), mnCol2(nCol2) {} -+ -+RefRowReorderHint::~RefRowReorderHint() {} -+ -+const sc::ColRowReorderMapType& RefRowReorderHint::getRowMap() const -+{ -+ return mrRowMap; -+} -+ -+SCTAB RefRowReorderHint::getTab() const -+{ -+ return mnTab; -+} -+ -+SCCOL RefRowReorderHint::getStartColumn() const -+{ -+ return mnCol1; -+} -+ -+SCCOL RefRowReorderHint::getEndColumn() const -+{ -+ return mnCol2; -+} -+ - } - - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/sc/source/core/tool/sharedformula.cxx b/sc/source/core/tool/sharedformula.cxx -index ed35690..6f66365 100644 ---- a/sc/source/core/tool/sharedformula.cxx -+++ b/sc/source/core/tool/sharedformula.cxx -@@ -297,6 +297,35 @@ void SharedFormulaUtil::unshareFormulaCell(const CellStoreType::position_type& a - rCell.SetCellGroup(xNone); - } - -+void SharedFormulaUtil::unshareFormulaCells(CellStoreType& rCells, std::vector& rRows) -+{ -+ if (rRows.empty()) -+ return; -+ -+ // Sort and remove duplicates. -+ std::sort(rRows.begin(), rRows.end()); -+ rRows.erase(std::unique(rRows.begin(), rRows.end()), rRows.end()); -+ -+ // Add next cell positions to the list (to ensure that each position becomes a single cell). -+ std::vector aRows2; -+ std::vector::const_iterator it = rRows.begin(), itEnd = rRows.end(); -+ for (; it != itEnd; ++it) -+ { -+ if (*it > MAXROW) -+ break; -+ -+ aRows2.push_back(*it); -+ -+ if (*it < MAXROW) -+ aRows2.push_back(*it+1); -+ } -+ -+ // Remove duplicates again (the vector should still be sorted). -+ aRows2.erase(std::unique(aRows2.begin(), aRows2.end()), aRows2.end()); -+ -+ splitFormulaCellGroups(rCells, aRows2); -+} -+ - } - - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx -index ab47bee..c289960 100644 ---- a/sc/source/core/tool/token.cxx -+++ b/sc/source/core/tool/token.cxx -@@ -2914,8 +2914,8 @@ void ScTokenArray::MoveReference( - } - } - --void ScTokenArray::MoveReference( -- const ScAddress& rPos, SCTAB nTab, SCROW nRow1, SCROW nRow2, const sc::ColReorderMapType& rColMap ) -+void ScTokenArray::MoveReferenceColReorder( -+ const ScAddress& rPos, SCTAB nTab, SCROW nRow1, SCROW nRow2, const sc::ColRowReorderMapType& rColMap ) - { - FormulaToken** p = pCode; - FormulaToken** pEnd = p + static_cast(nLen); -@@ -2932,7 +2932,7 @@ void ScTokenArray::MoveReference( - if (aAbs.Tab() == nTab && nRow1 <= aAbs.Row() && aAbs.Row() <= nRow2) - { - // Inside reordered row range. -- sc::ColReorderMapType::const_iterator it = rColMap.find(aAbs.Col()); -+ sc::ColRowReorderMapType::const_iterator it = rColMap.find(aAbs.Col()); - if (it != rColMap.end()) - { - // This column is reordered. -@@ -2960,7 +2960,7 @@ void ScTokenArray::MoveReference( - if (aAbs.aStart.Tab() == nTab && nRow1 <= aAbs.aStart.Row() && aAbs.aEnd.Row() <= nRow2) - { - // Inside reordered row range. -- sc::ColReorderMapType::const_iterator it = rColMap.find(aAbs.aStart.Col()); -+ sc::ColRowReorderMapType::const_iterator it = rColMap.find(aAbs.aStart.Col()); - if (it != rColMap.end()) - { - // This column is reordered. -@@ -2978,6 +2978,69 @@ void ScTokenArray::MoveReference( - } - } - -+void ScTokenArray::MoveReferenceRowReorder( const ScAddress& rPos, SCTAB nTab, SCCOL nCol1, SCCOL nCol2, const sc::ColRowReorderMapType& rRowMap ) -+{ -+ FormulaToken** p = pCode; -+ FormulaToken** pEnd = p + static_cast(nLen); -+ for (; p != pEnd; ++p) -+ { -+ switch ((*p)->GetType()) -+ { -+ case svSingleRef: -+ { -+ ScToken* pToken = static_cast(*p); -+ ScSingleRefData& rRef = pToken->GetSingleRef(); -+ ScAddress aAbs = rRef.toAbs(rPos); -+ -+ if (aAbs.Tab() == nTab && nCol1 <= aAbs.Col() && aAbs.Col() <= nCol2) -+ { -+ // Inside reordered column range. -+ sc::ColRowReorderMapType::const_iterator it = rRowMap.find(aAbs.Row()); -+ if (it != rRowMap.end()) -+ { -+ // This column is reordered. -+ SCROW nNewRow = it->second; -+ aAbs.SetRow(nNewRow); -+ rRef.SetAddress(aAbs, rPos); -+ } -+ } -+ } -+ break; -+ case svDoubleRef: -+ { -+ ScToken* pToken = static_cast(*p); -+ ScComplexRefData& rRef = pToken->GetDoubleRef(); -+ ScRange aAbs = rRef.toAbs(rPos); -+ -+ if (aAbs.aStart.Tab() != aAbs.aEnd.Tab()) -+ // Must be a single-sheet reference. -+ break; -+ -+ if (aAbs.aStart.Row() != aAbs.aEnd.Row()) -+ // Whole range must fit in a single row. -+ break; -+ -+ if (aAbs.aStart.Tab() == nTab && nCol1 <= aAbs.aStart.Col() && aAbs.aEnd.Col() <= nCol2) -+ { -+ // Inside reordered column range. -+ sc::ColRowReorderMapType::const_iterator it = rRowMap.find(aAbs.aStart.Row()); -+ if (it != rRowMap.end()) -+ { -+ // This row is reordered. -+ SCCOL nNewRow = it->second; -+ aAbs.aStart.SetRow(nNewRow); -+ aAbs.aEnd.SetRow(nNewRow); -+ rRef.SetRange(aAbs, rPos); -+ } -+ } -+ } -+ break; -+ default: -+ ; -+ } -+ } -+} -+ - namespace { - - bool adjustSingleRefInName( -diff --git a/sc/source/filter/xml/XMLExportDatabaseRanges.cxx b/sc/source/filter/xml/XMLExportDatabaseRanges.cxx -index ea2b31c..8e954ad 100644 ---- a/sc/source/filter/xml/XMLExportDatabaseRanges.cxx -+++ b/sc/source/filter/xml/XMLExportDatabaseRanges.cxx -@@ -35,6 +35,7 @@ - #include "subtotalparam.hxx" - #include "queryparam.hxx" - #include "queryentry.hxx" -+#include - - #include "svx/dataaccessdescriptor.hxx" - -diff --git a/sc/source/filter/xml/xmldrani.cxx b/sc/source/filter/xml/xmldrani.cxx -index 9478b0c..c6a8727 100644 ---- a/sc/source/filter/xml/xmldrani.cxx -+++ b/sc/source/filter/xml/xmldrani.cxx -@@ -34,6 +34,7 @@ - #include "rangeutl.hxx" - #include "queryentry.hxx" - #include "dputil.hxx" -+#include - - #include - #include -diff --git a/sc/source/ui/docshell/dbdocfun.cxx b/sc/source/ui/docshell/dbdocfun.cxx -index d9d5550..900bf3e 100644 ---- a/sc/source/ui/docshell/dbdocfun.cxx -+++ b/sc/source/ui/docshell/dbdocfun.cxx -@@ -47,6 +47,7 @@ - #include "queryentry.hxx" - #include "markdata.hxx" - #include "progress.hxx" -+#include - - #include - #include -@@ -433,8 +434,6 @@ sal_Bool ScDBDocFunc::Sort( SCTAB nTab, const ScSortParam& rSortParam, - ScDocument* pDoc = rDocShell.GetDocument(); - if (bRecord && !pDoc->IsUndoEnabled()) - bRecord = false; -- SCTAB nSrcTab = nTab; -- ScDrawLayer* pDrawLayer = pDoc->GetDrawLayer(); - - ScDBData* pDBData = pDoc->GetDBAtArea( nTab, rSortParam.nCol1, rSortParam.nRow1, - rSortParam.nCol2, rSortParam.nRow2 ); -@@ -444,28 +443,25 @@ sal_Bool ScDBDocFunc::Sort( SCTAB nTab, const ScSortParam& rSortParam, - return false; - } - -- ScDBData* pDestData = NULL; -- ScRange aOldDest; -- sal_Bool bCopy = !rSortParam.bInplace; -+ bool bCopy = !rSortParam.bInplace; - if ( bCopy && rSortParam.nDestCol == rSortParam.nCol1 && - rSortParam.nDestRow == rSortParam.nRow1 && rSortParam.nDestTab == nTab ) - bCopy = false; -+ - ScSortParam aLocalParam( rSortParam ); - if ( bCopy ) - { -- aLocalParam.MoveToDest(); -- if ( !ValidColRow( aLocalParam.nCol2, aLocalParam.nRow2 ) ) -- { -- if (!bApi) -- rDocShell.ErrorMessage(STR_PASTE_FULL); -+ // Copy the data range to the destination then move the sort range to it. -+ ScRange aSrcRange(rSortParam.nCol1, rSortParam.nRow1, nTab, rSortParam.nCol2, rSortParam.nRow2, nTab); -+ ScAddress aDestPos(rSortParam.nDestCol,rSortParam.nDestRow,rSortParam.nDestTab); -+ -+ ScDocFunc& rDocFunc = rDocShell.GetDocFunc(); -+ bool bRet = rDocFunc.MoveBlock(aSrcRange, aDestPos, false, bRecord, bPaint, bApi); -+ -+ if (!bRet) - return false; -- } - -- nTab = rSortParam.nDestTab; -- pDestData = pDoc->GetDBAtCursor( rSortParam.nDestCol, rSortParam.nDestRow, -- rSortParam.nDestTab, sal_True ); -- if (pDestData) -- pDestData->GetArea(aOldDest); -+ aLocalParam.MoveToDest(); - } - - ScEditableTester aTester( pDoc, nTab, aLocalParam.nCol1,aLocalParam.nRow1, -@@ -515,133 +511,23 @@ sal_Bool ScDBDocFunc::Sort( SCTAB nTab, const ScSortParam& rSortParam, - if ( aQueryParam.GetEntry(0).bDoQuery ) - bRepeatQuery = sal_True; - -- if (bRepeatQuery && bCopy) -- { -- if ( aQueryParam.bInplace || -- aQueryParam.nDestCol != rSortParam.nDestCol || -- aQueryParam.nDestRow != rSortParam.nDestRow || -- aQueryParam.nDestTab != rSortParam.nDestTab ) // Query auf selben Zielbereich? -- bRepeatQuery = false; -- } -- -- ScUndoSort* pUndoAction = 0; -- if ( bRecord ) -- { -- // Referenzen ausserhalb des Bereichs werden nicht veraendert ! -- -- ScDocument* pUndoDoc = new ScDocument( SCDOCMODE_UNDO ); -- // Zeilenhoehen immer (wegen automatischer Anpassung) -- //! auf ScBlockUndo umstellen -- pUndoDoc->InitUndo( pDoc, nTab, nTab, false, sal_True ); -- -- /* #i59745# Do not copy note captions to undo document. All existing -- caption objects will be repositioned while sorting which is tracked -- in drawing undo. When undo is executed, the old positions will be -- restored, and the cells with the old notes (which still refer to the -- existing captions) will be copied back into the source document. */ -- pDoc->CopyToDocument( aLocalParam.nCol1, aLocalParam.nRow1, nTab, -- aLocalParam.nCol2, aLocalParam.nRow2, nTab, -- IDF_ALL|IDF_NOCAPTIONS, false, pUndoDoc ); -- -- const ScRange* pR = 0; -- if (pDestData) -- { -- /* #i59745# Do not copy note captions from destination range to -- undo document. All existing caption objects will be removed -- which is tracked in drawing undo. When undo is executed, the -- caption objects are reinserted with drawing undo, and the cells -- with the old notes (which still refer to the existing captions) -- will be copied back into the source document. */ -- pDoc->CopyToDocument( aOldDest, IDF_ALL|IDF_NOCAPTIONS, false, pUndoDoc ); -- pR = &aOldDest; -- } -- -- // Zeilenhoehen immer (wegen automatischer Anpassung) -- //! auf ScBlockUndo umstellen --// if (bRepeatQuery) -- pDoc->CopyToDocument( 0, aLocalParam.nRow1, nTab, MAXCOL, aLocalParam.nRow2, nTab, -- IDF_NONE, false, pUndoDoc ); -- -- ScDBCollection* pUndoDB = NULL; -- ScDBCollection* pDocDB = pDoc->GetDBCollection(); -- if (!pDocDB->empty()) -- pUndoDB = new ScDBCollection( *pDocDB ); -- -- pUndoAction = new ScUndoSort( &rDocShell, nTab, rSortParam, pUndoDoc, pUndoDB, pR ); -- rDocShell.GetUndoManager()->AddUndoAction( pUndoAction ); -- -- // #i59745# collect all drawing undo actions affecting cell note captions -- if( pDrawLayer ) -- pDrawLayer->BeginCalcUndo(false); -- } -- -- if ( bCopy ) -- { -- if (pDestData) -- pDoc->DeleteAreaTab(aOldDest, IDF_CONTENTS); // Zielbereich vorher loeschen -- -- ScRange aSource( rSortParam.nCol1,rSortParam.nRow1,nSrcTab, -- rSortParam.nCol2,rSortParam.nRow2,nSrcTab ); -- ScAddress aDest( rSortParam.nDestCol, rSortParam.nDestRow, rSortParam.nDestTab ); -- -- rDocShell.GetDocFunc().MoveBlock( aSource, aDest, false, false, false, sal_True ); -- } -+ sc::ReorderParam aUndoParam; - - // don't call ScDocument::Sort with an empty SortParam (may be empty here if bCopy is set) - if (aLocalParam.GetSortKeyCount() && aLocalParam.maKeyState[0].bDoSort) - { - ScProgress aProgress(&rDocShell, ScGlobal::GetRscString(STR_PROGRESS_SORTING), 0); -- pDoc->Sort( nTab, aLocalParam, bRepeatQuery, &aProgress ); -+ pDoc->Sort(nTab, aLocalParam, bRepeatQuery, &aProgress, &aUndoParam); - } - -- sal_Bool bSave = sal_True; -- if (bCopy) -- { -- ScSortParam aOldSortParam; -- pDBData->GetSortParam( aOldSortParam ); -- if (aOldSortParam.GetSortKeyCount() && -- aOldSortParam.maKeyState[0].bDoSort && aOldSortParam.bInplace) -- { -- bSave = false; -- aOldSortParam.nDestCol = rSortParam.nDestCol; -- aOldSortParam.nDestRow = rSortParam.nDestRow; -- aOldSortParam.nDestTab = rSortParam.nDestTab; -- pDBData->SetSortParam( aOldSortParam ); // dann nur DestPos merken -- } -- } -- if (bSave) // Parameter merken -+ if (bRecord) - { -- pDBData->SetSortParam( rSortParam ); -- pDBData->SetHeader( rSortParam.bHasHeader ); //! ??? -- pDBData->SetByRow( rSortParam.bByRow ); //! ??? -+ // Set up an undo object. -+ sc::UndoSort* pUndoAction = new sc::UndoSort(&rDocShell, aUndoParam); -+ rDocShell.GetUndoManager()->AddUndoAction(pUndoAction); - } - -- if (bCopy) // neuen DB-Bereich merken -- { -- // Tabelle umschalten von aussen (View) -- //! SetCursor ??!?! -- -- ScRange aDestPos( aLocalParam.nCol1, aLocalParam.nRow1, nTab, -- aLocalParam.nCol2, aLocalParam.nRow2, nTab ); -- ScDBData* pNewData; -- if (pDestData) -- pNewData = pDestData; // Bereich vorhanden -> anpassen -- else // Bereich ab Cursor/Markierung wird angelegt -- pNewData = rDocShell.GetDBData(aDestPos, SC_DB_MAKE, SC_DBSEL_FORCE_MARK ); -- if (pNewData) -- { -- pNewData->SetArea( nTab, -- aLocalParam.nCol1,aLocalParam.nRow1, -- aLocalParam.nCol2,aLocalParam.nRow2 ); -- pNewData->SetSortParam( aLocalParam ); -- pNewData->SetHeader( aLocalParam.bHasHeader ); //! ??? -- pNewData->SetByRow( aLocalParam.bByRow ); -- } -- else -- { -- OSL_FAIL("Zielbereich nicht da"); -- } -- } -+ pDBData->SetSortParam(rSortParam); - - ScRange aDirtyRange( - aLocalParam.nCol1, nStartRow, nTab, -@@ -661,23 +547,12 @@ sal_Bool ScDBDocFunc::Sort( SCTAB nTab, const ScSortParam& rSortParam, - nStartX = 0; - nEndX = MAXCOL; - } -- if (pDestData) -- { -- if ( nEndX < aOldDest.aEnd.Col() ) -- nEndX = aOldDest.aEnd.Col(); -- if ( nEndY < aOldDest.aEnd.Row() ) -- nEndY = aOldDest.aEnd.Row(); -- } - rDocShell.PostPaint(ScRange(nStartX, nStartY, nTab, nEndX, nEndY, nTab), nPaint); - } - - if (!bUniformRowHeight) - rDocShell.AdjustRowHeight(nStartRow, aLocalParam.nRow2, nTab); - -- // #i59745# set collected drawing undo actions at sorting undo action -- if( pUndoAction && pDrawLayer ) -- pUndoAction->SetDrawUndoAction( pDrawLayer->GetCalcUndo() ); -- - aModificator.SetDocumentModified(); - - return sal_True; -diff --git a/sc/source/ui/undo/undobase.cxx b/sc/source/ui/undo/undobase.cxx -index 609b6fe..6342910 100644 ---- a/sc/source/ui/undo/undobase.cxx -+++ b/sc/source/ui/undo/undobase.cxx -@@ -31,6 +31,7 @@ - #include "subtotalparam.hxx" - #include "globstr.hrc" - #include -+#include - - TYPEINIT1(ScSimpleUndo, SfxUndoAction); - TYPEINIT1(ScBlockUndo, ScSimpleUndo); -diff --git a/sc/source/ui/undo/undosort.cxx b/sc/source/ui/undo/undosort.cxx -new file mode 100644 -index 0000000..4ff0960 ---- /dev/null -+++ b/sc/source/ui/undo/undosort.cxx -@@ -0,0 +1,55 @@ -+/* -*- 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 -+#include -+#include -+#include -+ -+namespace sc { -+ -+UndoSort::UndoSort( ScDocShell* pDocSh, const ReorderParam& rParam ) : -+ ScSimpleUndo(pDocSh), maParam(rParam) {} -+ -+OUString UndoSort::GetComment() const -+{ -+ return ScGlobal::GetRscString(STR_UNDO_SORT); -+} -+ -+void UndoSort::Undo() -+{ -+ BeginUndo(); -+ Execute(true); -+ EndUndo(); -+} -+ -+void UndoSort::Redo() -+{ -+ BeginRedo(); -+ Execute(false); -+ EndRedo(); -+} -+ -+void UndoSort::Execute( bool bUndo ) -+{ -+ ScDocument& rDoc = *pDocShell->GetDocument(); -+ sc::ReorderParam aParam = maParam; -+ if (bUndo) -+ aParam.reverse(); -+ rDoc.Reorder(aParam, NULL); -+ -+ ScUndoUtil::MarkSimpleBlock(pDocShell, maParam.maSortRange); -+ -+ pDocShell->PostPaint(maParam.maSortRange, PAINT_GRID); -+ pDocShell->PostDataChanged(); -+} -+ -+} -+ -+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/sc/source/ui/unoobj/cellsuno.cxx b/sc/source/ui/unoobj/cellsuno.cxx -index a9cf2eb..c1963e0 100644 ---- a/sc/source/ui/unoobj/cellsuno.cxx -+++ b/sc/source/ui/unoobj/cellsuno.cxx -@@ -124,6 +124,7 @@ - #include "tokenarray.hxx" - #include "stylehelper.hxx" - #include "dputil.hxx" -+#include - - #include - #include -diff --git a/sc/source/ui/unoobj/datauno.cxx b/sc/source/ui/unoobj/datauno.cxx -index 8886776..26838e1 100644 ---- a/sc/source/ui/unoobj/datauno.cxx -+++ b/sc/source/ui/unoobj/datauno.cxx -@@ -51,6 +51,7 @@ - #include "dpshttab.hxx" - #include "queryentry.hxx" - #include "dputil.hxx" -+#include - - #include - #include -diff --git a/svl/source/notify/listener.cxx b/svl/source/notify/listener.cxx -index 66207bf..f905090 100644 ---- a/svl/source/notify/listener.cxx -+++ b/svl/source/notify/listener.cxx -@@ -21,6 +21,14 @@ - #include - #include - -+SvtListener::QueryBase::QueryBase( sal_uInt16 nId ) : mnId(nId) {} -+SvtListener::QueryBase::~QueryBase() {} -+ -+sal_uInt16 SvtListener::QueryBase::getId() const -+{ -+ return mnId; -+} -+ - SvtListener::SvtListener() {} - - SvtListener::SvtListener( const SvtListener &r ) : -@@ -75,12 +83,26 @@ bool SvtListener::IsListening( SvtBroadcaster& rBroadcaster ) const - return maBroadcasters.count(&rBroadcaster) > 0; - } - -+void SvtListener::CopyAllBroadcasters( const SvtListener& r ) -+{ -+ BroadcastersType aCopy(r.maBroadcasters); -+ maBroadcasters.swap(aCopy); -+ BroadcastersType::iterator it = maBroadcasters.begin(), itEnd = maBroadcasters.end(); -+ for (; it != itEnd; ++it) -+ { -+ SvtBroadcaster* p = *it; -+ p->Add(this); -+ } -+} -+ - bool SvtListener::HasBroadcaster() const - { - return !maBroadcasters.empty(); - } - --void SvtListener::Notify( const SfxHint& ) {} -+void SvtListener::Notify( const SfxHint& /*rHint*/ ) {} -+ -+void SvtListener::Query( QueryBase& /*rQuery*/ ) const {} - - - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ --- -1.9.3 - diff --git a/SOURCES/0045-emf-emulate-hatch-with-color-blend.patch b/SOURCES/0045-emf-emulate-hatch-with-color-blend.patch deleted file mode 100644 index 71059fb..0000000 --- a/SOURCES/0045-emf-emulate-hatch-with-color-blend.patch +++ /dev/null @@ -1,189 +0,0 @@ -From 28bd6fe0c4fdca575ef078d6e5ff2a5acb852ac3 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Toma=C5=BE=20Vajngerl?= -Date: Sat, 19 Jul 2014 21:52:09 +0200 -Subject: [PATCH 045/137] emf+: emulate hatch with color blend - -Conflicts: - cppcanvas/source/mtfrenderer/emfplus.cxx - -Change-Id: I2ac8f790c79c269d4c1fa650e703c3645c567ca4 -Reviewed-on: https://gerrit.libreoffice.org/10436 -Reviewed-by: Andras Timar -Tested-by: Andras Timar ---- - cppcanvas/source/mtfrenderer/emfplus.cxx | 134 ++++++++++++++++++++++++++++++- - 1 file changed, 132 insertions(+), 2 deletions(-) - -diff --git a/cppcanvas/source/mtfrenderer/emfplus.cxx b/cppcanvas/source/mtfrenderer/emfplus.cxx -index 0c53c59..e6b1ea8 100644 ---- a/cppcanvas/source/mtfrenderer/emfplus.cxx -+++ b/cppcanvas/source/mtfrenderer/emfplus.cxx -@@ -123,6 +123,63 @@ enum EmfPlusCombineMode - EmfPlusCombineModeComplement = 0x00000005 - }; - -+enum EmfPlusHatchStyle -+{ -+ HatchStyleHorizontal = 0x00000000, -+ HatchStyleVertical = 0x00000001, -+ HatchStyleForwardDiagonal = 0x00000002, -+ HatchStyleBackwardDiagonal = 0x00000003, -+ HatchStyleLargeGrid = 0x00000004, -+ HatchStyleDiagonalCross = 0x00000005, -+ HatchStyle05Percent = 0x00000006, -+ HatchStyle10Percent = 0x00000007, -+ HatchStyle20Percent = 0x00000008, -+ HatchStyle25Percent = 0x00000009, -+ HatchStyle30Percent = 0x0000000A, -+ HatchStyle40Percent = 0x0000000B, -+ HatchStyle50Percent = 0x0000000C, -+ HatchStyle60Percent = 0x0000000D, -+ HatchStyle70Percent = 0x0000000E, -+ HatchStyle75Percent = 0x0000000F, -+ HatchStyle80Percent = 0x00000010, -+ HatchStyle90Percent = 0x00000011, -+ HatchStyleLightDownwardDiagonal = 0x00000012, -+ HatchStyleLightUpwardDiagonal = 0x00000013, -+ HatchStyleDarkDownwardDiagonal = 0x00000014, -+ HatchStyleDarkUpwardDiagonal = 0x00000015, -+ HatchStyleWideDownwardDiagonal = 0x00000016, -+ HatchStyleWideUpwardDiagonal = 0x00000017, -+ HatchStyleLightVertical = 0x00000018, -+ HatchStyleLightHorizontal = 0x00000019, -+ HatchStyleNarrowVertical = 0x0000001A, -+ HatchStyleNarrowHorizontal = 0x0000001B, -+ HatchStyleDarkVertical = 0x0000001C, -+ HatchStyleDarkHorizontal = 0x0000001D, -+ HatchStyleDashedDownwardDiagonal = 0x0000001E, -+ HatchStyleDashedUpwardDiagonal = 0x0000001F, -+ HatchStyleDashedHorizontal = 0x00000020, -+ HatchStyleDashedVertical = 0x00000021, -+ HatchStyleSmallConfetti = 0x00000022, -+ HatchStyleLargeConfetti = 0x00000023, -+ HatchStyleZigZag = 0x00000024, -+ HatchStyleWave = 0x00000025, -+ HatchStyleDiagonalBrick = 0x00000026, -+ HatchStyleHorizontalBrick = 0x00000027, -+ HatchStyleWeave = 0x00000028, -+ HatchStylePlaid = 0x00000029, -+ HatchStyleDivot = 0x0000002A, -+ HatchStyleDottedGrid = 0x0000002B, -+ HatchStyleDottedDiamond = 0x0000002C, -+ HatchStyleShingle = 0x0000002D, -+ HatchStyleTrellis = 0x0000002E, -+ HatchStyleSphere = 0x0000002F, -+ HatchStyleSmallGrid = 0x00000030, -+ HatchStyleSmallCheckerBoard = 0x00000031, -+ HatchStyleLargeCheckerBoard = 0x00000032, -+ HatchStyleOutlinedDiamond = 0x00000033, -+ HatchStyleSolidDiamond = 0x00000034 -+}; -+ - using namespace ::com::sun::star; - using namespace ::basegfx; - -@@ -362,9 +419,28 @@ namespace cppcanvas - sal_Int32 surroundColorsNumber; - ::Color* surroundColors; - EMFPPath *path; -+ EmfPlusHatchStyle hatchStyle; - - public: - EMFPBrush () -+ : type(0) -+ , additionalFlags(0) -+ , wrapMode(0) -+ , areaX(0.0) -+ , areaY(0.0) -+ , areaWidth(0.0) -+ , areaHeight(0.0) -+ , hasTransformation(false) -+ , blendPoints(0) -+ , blendPositions(NULL) -+ , blendFactors(NULL) -+ , colorblendPoints(0) -+ , colorblendPositions(NULL) -+ , colorblendColors(NULL) -+ , surroundColorsNumber(0) -+ , surroundColors(NULL) -+ , path(NULL) -+ , hatchStyle(HatchStyleHorizontal) - { - blendPositions = NULL; - colorblendPositions = NULL; -@@ -418,7 +494,20 @@ namespace cppcanvas - s >> color; - solidColor = ::Color (0xff - (color >> 24), (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff); - SAL_INFO ("cppcanvas.emf", "EMF+\tsolid color: 0x" << std::hex << color << std::dec); -- -+ break; -+ } -+ case 1: -+ { -+ sal_uInt32 style; -+ sal_uInt32 foregroundColor; -+ sal_uInt32 backgroundColor; -+ s >> style; -+ s >> foregroundColor; -+ s >> backgroundColor; -+ -+ hatchStyle = static_cast(style); -+ solidColor = ::Color(0xff - (foregroundColor >> 24), (foregroundColor >> 16) & 0xff, (foregroundColor >> 8) & 0xff, foregroundColor & 0xff); -+ secondColor = ::Color(0xff - (backgroundColor >> 24), (backgroundColor >> 16) & 0xff, (backgroundColor >> 8) & 0xff, backgroundColor & 0xff); - break; - } - // path gradient -@@ -1157,8 +1246,49 @@ namespace cppcanvas - rState.isFillColorSet = false; - rState.isLineColorSet = false; - -- if (brush->type == 3 || brush->type == 4) { -+ if (brush->type == 1) -+ { -+ // EMF+ like hatching is currently not supported. These are just color blends which serve as an approximation for some of them -+ // for the others the hatch "background" color (secondColor in brush) is used. - -+ bool isHatchBlend = true; -+ double blendFactor = 0.0; -+ -+ switch (brush->hatchStyle) -+ { -+ case HatchStyle05Percent: blendFactor = 0.05; break; -+ case HatchStyle10Percent: blendFactor = 0.10; break; -+ case HatchStyle20Percent: blendFactor = 0.20; break; -+ case HatchStyle25Percent: blendFactor = 0.25; break; -+ case HatchStyle30Percent: blendFactor = 0.30; break; -+ case HatchStyle40Percent: blendFactor = 0.40; break; -+ case HatchStyle50Percent: blendFactor = 0.50; break; -+ case HatchStyle60Percent: blendFactor = 0.60; break; -+ case HatchStyle70Percent: blendFactor = 0.70; break; -+ case HatchStyle75Percent: blendFactor = 0.75; break; -+ case HatchStyle80Percent: blendFactor = 0.80; break; -+ case HatchStyle90Percent: blendFactor = 0.90; break; -+ default: -+ isHatchBlend = false; -+ break; -+ } -+ rState.isFillColorSet = true; -+ rState.isLineColorSet = false; -+ ::Color fillColor; -+ if (isHatchBlend) -+ { -+ fillColor = brush->solidColor; -+ fillColor.Merge(brush->secondColor, static_cast(255 * blendFactor)); -+ } -+ else -+ { -+ fillColor = brush->secondColor; -+ } -+ rState.fillColor = ::vcl::unotools::colorToDoubleSequence(fillColor, rCanvas->getUNOCanvas()->getDevice()->getDeviceColorSpace()); -+ pPolyAction = ActionSharedPtr ( internal::PolyPolyActionFactory::createPolyPolyAction( localPolygon, rParms.mrCanvas, rState ) ); -+ } -+ else if (brush->type == 3 || brush->type == 4) -+ { - if (brush->type == 3 && !(brush->additionalFlags & 0x1)) - return; // we are unable to parse these brushes yet - --- -1.9.3 - diff --git a/SOURCES/0046-bnc-881024-Handle-0-font-height-just-like-outdev-dra.patch b/SOURCES/0046-bnc-881024-Handle-0-font-height-just-like-outdev-dra.patch deleted file mode 100644 index da7a402..0000000 --- a/SOURCES/0046-bnc-881024-Handle-0-font-height-just-like-outdev-dra.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 48242717e3a7a8d4c936bad0b96d75cca70b5e0b Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Toma=C5=BE=20Vajngerl?= -Date: Fri, 18 Jul 2014 13:36:59 +0200 -Subject: [PATCH 046/137] bnc#881024 Handle 0 font height just like outdev & - drawinglayer - -Change-Id: I80055e4101873e0ddd408ac1f0ee9c75cc3bf6b3 -Reviewed-on: https://gerrit.libreoffice.org/10435 -Reviewed-by: Andras Timar -Tested-by: Andras Timar ---- - cppcanvas/source/mtfrenderer/implrenderer.cxx | 13 ++++++++++++- - 1 file changed, 12 insertions(+), 1 deletion(-) - -diff --git a/cppcanvas/source/mtfrenderer/implrenderer.cxx b/cppcanvas/source/mtfrenderer/implrenderer.cxx -index a8145bb..b7cbcab 100644 ---- a/cppcanvas/source/mtfrenderer/implrenderer.cxx -+++ b/cppcanvas/source/mtfrenderer/implrenderer.cxx -@@ -809,7 +809,18 @@ namespace cppcanvas - - // TODO(Q3): This code smells of programming by - // coincidence (the next two if statements) -- const ::Size rFontSizeLog( rFont.GetSize() ); -+ -+ ::Size rFontSizeLog( rFont.GetSize() ); -+ -+ if (rFontSizeLog.Height() == 0) -+ { -+ // guess 16 pixel (as in VCL) -+ rFontSizeLog = ::Size(0, 16); -+ -+ // convert to target MapUnit if not pixels -+ rFontSizeLog = OutputDevice::LogicToLogic(rFontSizeLog, MAP_PIXEL, rParms.mrVDev.GetMapMode()); -+ } -+ - const sal_Int32 nFontWidthLog = rFontSizeLog.Width(); - if( nFontWidthLog != 0 ) - { --- -1.9.3 - diff --git a/SOURCES/0047-bnc-881024-Don-t-world-transform-font-size-in-WMF-EM.patch b/SOURCES/0047-bnc-881024-Don-t-world-transform-font-size-in-WMF-EM.patch deleted file mode 100644 index ad61410..0000000 --- a/SOURCES/0047-bnc-881024-Don-t-world-transform-font-size-in-WMF-EM.patch +++ /dev/null @@ -1,74 +0,0 @@ -From f5949d09321e3ac62538df0e70e58284bd1cab32 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Toma=C5=BE=20Vajngerl?= -Date: Fri, 18 Jul 2014 13:36:13 +0200 -Subject: [PATCH 047/137] bnc#881024 Don't world transform font size in WMF/EMF - import - -Conflicts: - vcl/source/filter/wmf/winmtf.cxx - -Change-Id: Ia865b84ee2b159ff7251ab5a769a2b635dd2a1ea -Reviewed-on: https://gerrit.libreoffice.org/10434 -Reviewed-by: Andras Timar -Tested-by: Andras Timar ---- - vcl/source/filter/wmf/winmtf.cxx | 18 +++++++++++++----- - vcl/source/filter/wmf/winmtf.hxx | 2 +- - 2 files changed, 14 insertions(+), 6 deletions(-) - -diff --git a/vcl/source/filter/wmf/winmtf.cxx b/vcl/source/filter/wmf/winmtf.cxx -index 38e79a8..d8c2a67 100644 ---- a/vcl/source/filter/wmf/winmtf.cxx -+++ b/vcl/source/filter/wmf/winmtf.cxx -@@ -412,14 +412,22 @@ Point WinMtfOutput::ImplMap( const Point& rPt ) - return Point(); - }; - -- --Size WinMtfOutput::ImplMap( const Size& rSz ) -+Size WinMtfOutput::ImplMap(const Size& rSz, bool bDoWorldTransform) - { - if ( mnWinExtX && mnWinExtY ) - { - // #i121382# apply the whole WorldTransform, else a rotation will be misinterpreted -- double fWidth = rSz.Width() * maXForm.eM11 + rSz.Height() * maXForm.eM21; -- double fHeight = rSz.Width() * maXForm.eM12 + rSz.Height() * maXForm.eM22; -+ double fWidth, fHeight; -+ if (bDoWorldTransform) -+ { -+ fWidth = rSz.Width() * maXForm.eM11 + rSz.Height() * maXForm.eM21; -+ fHeight = rSz.Width() * maXForm.eM12 + rSz.Height() * maXForm.eM22; -+ } -+ else -+ { -+ fWidth = rSz.Width(); -+ fHeight = rSz.Height(); -+ } - - if ( mnGfxMode == GM_COMPATIBLE ) - { -@@ -483,7 +491,7 @@ void WinMtfOutput::ImplMap( Font& rFont ) - { - // !!! HACK: we now always set the width to zero because the OS width is interpreted differently; - // must later be made portable in SV (KA 1996-02-08) -- Size aFontSize = ImplMap ( rFont.GetSize() ); -+ Size aFontSize = ImplMap (rFont.GetSize(), false); - - if( aFontSize.Height() < 0 ) - aFontSize.Height() *= -1; -diff --git a/vcl/source/filter/wmf/winmtf.hxx b/vcl/source/filter/wmf/winmtf.hxx -index 9db9245..e2c1f1c 100644 ---- a/vcl/source/filter/wmf/winmtf.hxx -+++ b/vcl/source/filter/wmf/winmtf.hxx -@@ -632,7 +632,7 @@ class WinMtfOutput - - Point ImplMap( const Point& rPt ); - Point ImplScale( const Point& rPt ); -- Size ImplMap( const Size& rSz ); -+ Size ImplMap( const Size& rSize, bool bDoWorldTransform = true); - Rectangle ImplMap( const Rectangle& rRectangle ); - void ImplMap( Font& rFont ); - Polygon& ImplMap( Polygon& rPolygon ); --- -1.9.3 - diff --git a/SOURCES/0048-fdo-74295-win32-fpicker-correctly-set-the-default-fi.patch b/SOURCES/0048-fdo-74295-win32-fpicker-correctly-set-the-default-fi.patch deleted file mode 100644 index 5cc878c..0000000 --- a/SOURCES/0048-fdo-74295-win32-fpicker-correctly-set-the-default-fi.patch +++ /dev/null @@ -1,68 +0,0 @@ -From 1a72abae4863c5f60c96b5fda2dcad8f46551fbd Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Aurimas=20Fi=C5=A1eras?= -Date: Mon, 21 Jul 2014 10:43:42 +0300 -Subject: [PATCH 048/137] fdo#74295 win32 fpicker: correctly set the default - file name - -Revert "Cleaning: remove use of old edt1 from dlg.h (Windows)" -This reverts commit e9fd9c25269abe171e5f693a8c70b33ab5a01c85. - -Reviewed-on: https://gerrit.libreoffice.org/10429 -Reviewed-on: https://gerrit.libreoffice.org/10430 -Reviewed-by: Andras Timar -Tested-by: Andras Timar -(cherry picked from commit a37d99eb176d0a302f92af287cc0d19ba2663bbc) -(cherry picked from commit bb4ffcdf9a3682f13f0145055f81921a764c36f3) -Signed-off-by: Andras Timar -(cherry picked from commit 6466d0fec06e095bc596593357846802a24bb4af) -Signed-off-by: Andras Timar ---- - fpicker/source/win32/filepicker/WinFileOpenImpl.cxx | 17 +++++++++++------ - 1 file changed, 11 insertions(+), 6 deletions(-) - -diff --git a/fpicker/source/win32/filepicker/WinFileOpenImpl.cxx b/fpicker/source/win32/filepicker/WinFileOpenImpl.cxx -index ee2760b..66e6caa 100644 ---- a/fpicker/source/win32/filepicker/WinFileOpenImpl.cxx -+++ b/fpicker/source/win32/filepicker/WinFileOpenImpl.cxx -@@ -584,7 +584,7 @@ void SAL_CALL CWinFileOpenImpl::InitControlLabel(HWND hWnd) - // Our approach is to align all static text controls with the - // static text control "File name" of the FileOpen dialog, - // all checkboxes and all list/comboboxes will be left aligned with --// the standard combobox cmb13 (defined in MS platform sdk dlgs.h) -+// the standard combobox edt1/cmb13 (defined in MS platform sdk dlgs.h) - // and all push buttons will be left aligned with the standard - // "OK" button - //----------------------------------------------------------------- -@@ -689,6 +689,8 @@ void CWinFileOpenImpl::EnlargeStdControlLabels() const - HWND hFilterBoxLabel = GetDlgItem(m_hwndFileOpenDlg, stc2); - HWND hFileNameBoxLabel = GetDlgItem(m_hwndFileOpenDlg, stc3); - HWND hFileNameBox = GetDlgItem(m_hwndFileOpenDlg, cmb13); -+ if (!hFileNameBox) -+ hFileNameBox = GetDlgItem(m_hwndFileOpenDlg, edt1); // since Win2k it is cmb13 or edt1 - - HWND hFilterBox = GetDlgItem(m_hwndFileOpenDlg, cmb1); - HWND hOkButton = GetDlgItem(m_hwndFileOpenDlg, IDOK); -@@ -983,12 +985,15 @@ void SAL_CALL CWinFileOpenImpl::InitialSetDefaultName() - // open dialog (reason: see above setDefaultName) - if (m_bInitialSelChanged && m_defaultName.getLength()) - { -- // from W2k there is a combobox instead -+ // under W2k by default there is a combobox instead - // of an edit field for the file name edit field -- // So the control id of this box is cmb13 and not -- // edt1 as before -- HWND hwndEdt1 = GetDlgItem(m_hwndFileOpenDlg, cmb13); -- SetWindowText(hwndEdt1, reinterpret_cast(m_defaultName.getStr())); -+ // the control id of this box is cmb13 and not -+ // edt1 as before. -+ // However, edt1 is still possible. See fdo#74295 -+ HWND hFileNameBox = GetDlgItem(m_hwndFileOpenDlg, cmb13); -+ if (!hFileNameBox) -+ hFileNameBox = GetDlgItem(m_hwndFileOpenDlg, edt1); -+ SetWindowText(hFileNameBox, reinterpret_cast(m_defaultName.getStr())); - } - - m_bInitialSelChanged = sal_False; --- -1.9.3 - diff --git a/SOURCES/0049-Resolves-fdo-81581-Mediawiki-doesn-t-recognize-under.patch b/SOURCES/0049-Resolves-fdo-81581-Mediawiki-doesn-t-recognize-under.patch deleted file mode 100644 index dea9be9..0000000 --- a/SOURCES/0049-Resolves-fdo-81581-Mediawiki-doesn-t-recognize-under.patch +++ /dev/null @@ -1,157 +0,0 @@ -From 4d003b92fa632d38909543b7317ceb75c96beeac Mon Sep 17 00:00:00 2001 -From: Julien Nabet -Date: Mon, 21 Jul 2014 11:36:27 +0200 -Subject: [PATCH 049/137] Resolves fdo#81581: Mediawiki doesn't recognize - underlining - -Cherry-picked from b8f4db5bad245c2e340b3217b10df994785eecd3 - -Change-Id: I27ec27bd733e5161bbd18ba7cf813daa3ac6c089 -Reviewed-on: https://gerrit.libreoffice.org/10438 -Reviewed-by: Andras Timar -Tested-by: Andras Timar ---- - swext/mediawiki/src/filter/odt2mediawiki.xsl | 59 ++++++++++++++++++++++++---- - 1 file changed, 51 insertions(+), 8 deletions(-) - -diff --git a/swext/mediawiki/src/filter/odt2mediawiki.xsl b/swext/mediawiki/src/filter/odt2mediawiki.xsl -index 64474b3..1205536 100644 ---- a/swext/mediawiki/src/filter/odt2mediawiki.xsl -+++ b/swext/mediawiki/src/filter/odt2mediawiki.xsl -@@ -118,23 +118,26 @@ - - - -+ -+ -+ - -- -+ - - -- -+ - - -- -+ - - -- -+ - - -- -+ - - -- -+ - - - -@@ -976,6 +979,8 @@ - select="($style mod (2 * $BOLD_BIT)) != 0"/> - -+ - - - -+ - - - -+ - - - <tt> - -+ -+ <u> -+ - - ''' - -@@ -1044,6 +1056,9 @@ - - ''' - -+ -+ </u> -+ - - </tt> - -@@ -1255,6 +1270,8 @@ - select="($style-mask mod (2 * $BOLD_BIT)) = 0"/> - -+ - - - - -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - - - -@@ -1473,9 +1516,9 @@ - guaranteed to be disjoint, therefore, addition can be use instead - of bitwise or (which is missing in XPath). --> - -+ select="$style-set + $bold-style + $italic-style + $underline-style + $superscript-style + $subscript-style + $code-style + $typewriter-style + $center-style + $right-style"/> - -+ select="$style-mask + $bold-mask + $italic-mask + $underline-mask + $superscript-mask + $subscript-mask + $code-mask + $typewriter-mask + $center-mask + $right-mask"/> - - - --- -1.9.3 - diff --git a/SOURCES/0052-Resolves-fdo-80906-Delete-any-control-on-Dialog-edit.patch b/SOURCES/0052-Resolves-fdo-80906-Delete-any-control-on-Dialog-edit.patch deleted file mode 100644 index cc0cf30..0000000 --- a/SOURCES/0052-Resolves-fdo-80906-Delete-any-control-on-Dialog-edit.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 5f712e0376cf77386b788093e9d19cfd0ea29913 Mon Sep 17 00:00:00 2001 -From: Julien Nabet -Date: Mon, 21 Jul 2014 19:26:58 +0200 -Subject: [PATCH 052/137] Resolves fdo#80906: Delete any control on Dialog - editing window crashes LO -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Quick fix for this bt: -3 0x00002aaaab2935d2 in __GI___assert_fail (assertion=0x2aaae1f2806a "_pInterface != 0", - file=0x2aaae1f28018 "/home/julien/compile-libreoffice/libreoffice/include/com/sun/star/uno/Reference.h", line=402, - function=0x2aaae1f28480 ::operator->() const::__PRETTY_FUNCTION__> "interface_type* com::sun::star::uno::Reference< >::operator->() const [with interface_type = com::sun::star::resource::XStringResourceManager]") at assert.c:101 -4 0x00002aaae1e2963b in com::sun::star::uno::Reference::operator-> (this=0x7fffffff2d00) - at /home/julien/compile-libreoffice/libreoffice/include/com/sun/star/uno/Reference.h:402 -5 0x00002aaae1eb5c87 in basctl::LocalizationMgr::implHandleControlResourceProperties (aControlAny= - uno::Any { = {_vptr.XInterface = 0x8935ea8}, }, aDialogName="Dialog1", aCtrlName="TextField1", - xStringResourceManager=empty uno::Reference, xSourceStringResolver=empty uno::Reference, eMode=basctl::LocalizationMgr::REMOVE_IDS_FROM_RESOURCE) - at /home/julien/compile-libreoffice/libreoffice/basctl/source/basicide/localizationmgr.cxx:202 -6 0x00002aaae1eb92a0 in basctl::LocalizationMgr::deleteControlResourceIDsForDeletedEditorObject (pEditor=0x919d820, aControlAny= - uno::Any { = {_vptr.XInterface = 0x8935ea8}, }, aCtrlName="TextField1") - at /home/julien/compile-libreoffice/libreoffice/basctl/source/basicide/localizationmgr.cxx:896 -Indeed, LocalizationMgr::setControlResourceIDsForNewEditorObject just returns if !xStringResourceManager.is() -So let's do the same when trying to delete ControlResources -See http://opengrok.libreoffice.org/xref/core/basctl/source/basicide/localizationmgr.cxx#835 - -Cherry-picked from e1840cf944b36b7ead5800a036870e38f4ddb049 - -Change-Id: I4be49503cd2464f97a25840dfdc29877e5fb2b93 -Reviewed-on: https://gerrit.libreoffice.org/10449 -Reviewed-by: Caolán McNamara -Tested-by: Caolán McNamara ---- - basctl/source/basicide/localizationmgr.cxx | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/basctl/source/basicide/localizationmgr.cxx b/basctl/source/basicide/localizationmgr.cxx -index 2812387..9d0cc87 100644 ---- a/basctl/source/basicide/localizationmgr.cxx -+++ b/basctl/source/basicide/localizationmgr.cxx -@@ -199,7 +199,7 @@ sal_Int32 LocalizationMgr::implHandleControlResourceProperties - - Reference< XPropertySet > xPropertySet; - aControlAny >>= xPropertySet; -- if( xPropertySet.is() ) -+ if( xPropertySet.is() && xStringResourceManager.is()) - { - Sequence< Locale > aLocaleSeq = xStringResourceManager->getLocales(); - sal_Int32 nLocaleCount = aLocaleSeq.getLength(); --- -1.9.3 - diff --git a/SOURCES/0053-fdo-81304-don-t-parse-file-name-as-part-of-URL.patch b/SOURCES/0053-fdo-81304-don-t-parse-file-name-as-part-of-URL.patch deleted file mode 100644 index 96a7557..0000000 --- a/SOURCES/0053-fdo-81304-don-t-parse-file-name-as-part-of-URL.patch +++ /dev/null @@ -1,34 +0,0 @@ -From a958b590a34a1eaa888a36285f6aa364606383ad Mon Sep 17 00:00:00 2001 -From: David Tardon -Date: Mon, 14 Jul 2014 15:07:52 +0200 -Subject: [PATCH 053/137] fdo#81304 don't parse file name as part of URL - -... because the name is not URL-encoded at this point, so parsing it as -a part of the URL will interpret special characters, e.g. #. - -Change-Id: I780baed1753e9674d835dc296d31c088b67d8ba7 -(cherry picked from commit f3d7734af45f30a87d6de76aa3de7593d541bdc8) -Reviewed-on: https://gerrit.libreoffice.org/10295 -Reviewed-by: Eike Rathke -Tested-by: Eike Rathke ---- - sfx2/source/doc/guisaveas.cxx | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/sfx2/source/doc/guisaveas.cxx b/sfx2/source/doc/guisaveas.cxx -index 446d9d5..13105dc 100644 ---- a/sfx2/source/doc/guisaveas.cxx -+++ b/sfx2/source/doc/guisaveas.cxx -@@ -1279,7 +1279,8 @@ OUString ModelData_Impl::GetRecommendedName( const OUString& aSuggestedName, con - uno::UNO_QUERY ); - if ( xTypeDetection.is() ) - { -- INetURLObject aObj( OUString( "file:///c:/" ) + aRecommendedName ); -+ INetURLObject aObj( OUString( "file:///c:/" ) ); -+ aObj.SetName( aRecommendedName ); - - uno::Sequence< beans::PropertyValue > aTypeNameProps; - if ( ( xTypeDetection->getByName( aTypeName ) >>= aTypeNameProps ) && aTypeNameProps.getLength() ) --- -1.9.3 - diff --git a/SOURCES/0058-Resolves-fdo-81598-i125300-enhanced-handling-of-mult.patch b/SOURCES/0058-Resolves-fdo-81598-i125300-enhanced-handling-of-mult.patch deleted file mode 100644 index 3fb26e0..0000000 --- a/SOURCES/0058-Resolves-fdo-81598-i125300-enhanced-handling-of-mult.patch +++ /dev/null @@ -1,115 +0,0 @@ -From 628b75715c99df9716ab487f1bb1cad0f086d7ea Mon Sep 17 00:00:00 2001 -From: Armin Le Grand -Date: Wed, 23 Jul 2014 16:35:32 +0000 -Subject: [PATCH 058/137] Resolves: fdo#81598 #i125300# enhanced handling of - multiple ClipRegions... - -in MetafileProcessor - -(cherry picked from commit 02e2c7b225036c6478a1f7e8315a9c8361025a7f) - -Change-Id: Iefefc36c040507795bc2c25fe8d4a610eb12adb9 -(cherry picked from commit 2ddfaf1f03135c10d33e0e99ebe8a56d3783d214) -Reviewed-on: https://gerrit.libreoffice.org/10505 -Reviewed-by: David Tardon -Tested-by: David Tardon ---- - .../source/processor2d/vclmetafileprocessor2d.cxx | 65 ++++++++++++++++++---- - 1 file changed, 54 insertions(+), 11 deletions(-) - -diff --git a/drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx b/drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx -index 94fc972..e6b2dd5 100644 ---- a/drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx -+++ b/drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx -@@ -1760,17 +1760,52 @@ namespace drawinglayer - - if(maClipPolyPolygon.count()) - { -- // there is already a clip polygon set; build clipped union of -- // current mask polygon and new one -- maClipPolyPolygon = basegfx::tools::clipPolyPolygonOnPolyPolygon( -- aMask, -- maClipPolyPolygon, -- true, // #i106516# we want the inside of aMask, not the outside -- false); -+ // due to the cost of PolyPolygon clipping and numerical reasons try first if the current -+ // and the new ClipRegion are ranges. If yes, processing can be simplified -+ if(basegfx::tools::isRectangle(aMask) -+ && basegfx::tools::isRectangle(maClipPolyPolygon)) -+ { -+ // both ClipPolygons are rectangles -+ if(aMask.getB2DRange().equal(maClipPolyPolygon.getB2DRange())) -+ { -+ // equal -> no change in ClipRegion needed, leave -+ // maClipPolyPolygon unchanged -+ } -+ else -+ { -+ // not equal -> create new ClipRegion from the two ranges -+ basegfx::B2DRange aClipRange(aMask.getB2DRange()); -+ -+ aClipRange.intersect(maClipPolyPolygon.getB2DRange()); -+ -+ if(aClipRange.isEmpty()) -+ { -+ // no common ClipRegion -> set empty ClipRegion, no content to show -+ maClipPolyPolygon.clear(); -+ } -+ else -+ { -+ // use common ClipRegion as new ClipRegion -+ maClipPolyPolygon = basegfx::B2DPolyPolygon( -+ basegfx::tools::createPolygonFromRect(aClipRange)); -+ } -+ } -+ } -+ else -+ { -+ // The current ClipRegion or the new one is not a rectangle; -+ // there is already a clip polygon set; build clipped union of -+ // current mask polygon and new one -+ maClipPolyPolygon = basegfx::tools::clipPolyPolygonOnPolyPolygon( -+ aMask, -+ maClipPolyPolygon, -+ true, // #i106516# we want the inside of aMask, not the outside -+ false); -+ } - } - else - { -- // use mask directly -+ // use new mask directly as ClipRegion - maClipPolyPolygon = aMask; - } - -@@ -1779,8 +1814,13 @@ namespace drawinglayer - // set VCL clip region; subdivide before conversion to tools polygon. Subdivision necessary (!) - // Removed subdivision and fixed in Region::ImplPolyPolyRegionToBandRegionFunc() in VCL where - // the ClipRegion is built from the Polygon. A AdaptiveSubdivide on the source polygon was missing there -- mpOutputDevice->Push(PUSH_CLIPREGION); -- mpOutputDevice->SetClipRegion(Region(maClipPolyPolygon)); -+ const bool bNewClipRegion(maClipPolyPolygon != aLastClipPolyPolygon); -+ -+ if(bNewClipRegion) -+ { -+ mpOutputDevice->Push(PUSH_CLIPREGION); -+ mpOutputDevice->SetClipRegion(Region(maClipPolyPolygon)); -+ } - - // recursively paint content - // #i121267# Only need to process sub-content when clip polygon is *not* empty. -@@ -1788,7 +1828,10 @@ namespace drawinglayer - process(rMaskCandidate.getChildren()); - - // restore VCL clip region -- mpOutputDevice->Pop(); -+ if(bNewClipRegion) -+ { -+ mpOutputDevice->Pop(); -+ } - } - - // restore to rescued clip polygon --- -1.9.3 - diff --git a/SOURCES/0059-bnc-862510-PPTX-import-bullets-have-color-as-followi.patch b/SOURCES/0059-bnc-862510-PPTX-import-bullets-have-color-as-followi.patch deleted file mode 100644 index fa33f45..0000000 --- a/SOURCES/0059-bnc-862510-PPTX-import-bullets-have-color-as-followi.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 41ed9c8e761b69987c978d41fd89aa1a169f60dd Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Mat=C3=BA=C5=A1=20Kukan?= -Date: Thu, 24 Jul 2014 15:46:13 +0200 -Subject: [PATCH 059/137] bnc#862510: PPTX import: bullets have color as - following text by default. -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -aTextCharacterStyle contains font theme color set in Shape::createAndInsert. - -(cherry picked from commit d60cec0e60c5c0880f8098d39443c391abed80b2) - -Change-Id: I55e66aeaa7176fbd3f64dcdf075d411f460947d4 -Reviewed-on: https://gerrit.libreoffice.org/10514 -Reviewed-by: Caolán McNamara -Tested-by: Caolán McNamara ---- - oox/source/drawingml/textparagraph.cxx | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/oox/source/drawingml/textparagraph.cxx b/oox/source/drawingml/textparagraph.cxx -index 7bb719a..79c1664 100644 ---- a/oox/source/drawingml/textparagraph.cxx -+++ b/oox/source/drawingml/textparagraph.cxx -@@ -113,6 +113,8 @@ void TextParagraph::insertAt( - if( !aioBulletList.hasProperty( PROP_BulletColor ) && maRuns.size() > 0 - && (*maRuns.begin())->getTextCharacterProperties().maCharColor.isUsed() ) - aioBulletList[ PROP_BulletColor ] <<= (*maRuns.begin())->getTextCharacterProperties().maCharColor.getColor( rFilterBase.getGraphicHelper() ); -+ if( !aioBulletList.hasProperty( PROP_BulletColor ) && aTextCharacterStyle.maCharColor.isUsed() ) -+ aioBulletList[ PROP_BulletColor ] <<= aTextCharacterStyle.maCharColor.getColor( rFilterBase.getGraphicHelper() ); - - float fCharacterSize = nCharHeight > 0 ? GetFontHeight ( nCharHeight ) : pTextParagraphStyle->getCharHeightPoints( 18 ); - aParaProp.pushToPropSet( &rFilterBase, xProps, aioBulletList, &pTextParagraphStyle->getBulletList(), sal_True, fCharacterSize, true ); --- -1.9.3 - diff --git a/SOURCES/0060-Related-fdo-81457-skip-setting-an-empty-allocation.patch b/SOURCES/0060-Related-fdo-81457-skip-setting-an-empty-allocation.patch deleted file mode 100644 index f96a634..0000000 --- a/SOURCES/0060-Related-fdo-81457-skip-setting-an-empty-allocation.patch +++ /dev/null @@ -1,247 +0,0 @@ -From aeef56b3731e746406b441550aea217dcb39371d Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= -Date: Tue, 22 Jul 2014 14:20:33 +0100 -Subject: [PATCH 060/137] Related: fdo#81457 skip setting an empty allocation - -if the dimension is 0, don't bother calculating -a bunch of <= 0 sizes, rely on the parents clipping -to hide the lot instead - -(cherry picked from commit 13807fbf9f3a4aae6767da8bcf796bea4b065159) - -and - -Related: fdo#81457 quadratic time required when setting a11y name - -when calling SetAccessibleName GetAccessibleName is called -in order to send a name changed a11y event. Getting an Accessible -Name is very slow in a non-layout aware widget because it scans -for a "nearby" label and there is none in this widget, but it -has a huge pile of other widgets to iterate over. - -call add_mnemonic_label before hand to cut off that entire -branch. - -While we're at it, only call InitControl to adjust to a new -width if the new width is different from the old width - -(cherry picked from commit aff263c8b814c6bf352312403d3c1e448c8013a3) - -Conflicts: - include/sfx2/dinfdlg.hxx - -Change-Id: Ie4ba1276127226e49442278e46447b84bbeb1cde -Reviewed-on: https://gerrit.libreoffice.org/10463 -Reviewed-by: David Tardon -Tested-by: David Tardon ---- - include/sfx2/dinfdlg.hxx | 14 ++++++---- - sfx2/source/dialog/dinfdlg.cxx | 63 +++++++++++++++++++++++++++++------------- - vcl/source/window/tabpage.cxx | 11 +++++--- - 3 files changed, 60 insertions(+), 28 deletions(-) - -diff --git a/include/sfx2/dinfdlg.hxx b/include/sfx2/dinfdlg.hxx -index a4d6acd..81b57bc 100644 ---- a/include/sfx2/dinfdlg.hxx -+++ b/include/sfx2/dinfdlg.hxx -@@ -407,6 +407,10 @@ struct CustomPropertyLine - class CustomPropertiesWindow : public Window - { - private: -+ FixedText* m_pHeaderAccName; -+ FixedText* m_pHeaderAccType; -+ FixedText* m_pHeaderAccValue; -+ - ComboBox m_aNameBox; - ListBox m_aTypeBox; - Edit m_aValueEdit; -@@ -441,13 +445,13 @@ private: - - public: - CustomPropertiesWindow(Window* pParent, -- const OUString &rHeaderAccName, -- const OUString &rHeaderAccType, -- const OUString &rHeaderAccValue); -+ FixedText *pHeaderAccName, -+ FixedText *pHeaderAccType, -+ FixedText *pHeaderAccValue); - ~CustomPropertiesWindow(); - -- void InitControls( HeaderBar* pHeaderBar, const ScrollBar* pScrollBar ); -- sal_uInt16 GetVisibleLineCount() const; -+ bool InitControls( HeaderBar* pHeaderBar, const ScrollBar* pScrollBar ); -+ sal_uInt16 GetVisibleLineCount() const; - inline sal_Int32 GetLineHeight() const { return m_nLineHeight; } - void AddLine( const OUString& sName, com::sun::star::uno::Any& rAny ); - bool AreAllLinesValid() const; -diff --git a/sfx2/source/dialog/dinfdlg.cxx b/sfx2/source/dialog/dinfdlg.cxx -index a7c6c95..4a278c1 100644 ---- a/sfx2/source/dialog/dinfdlg.cxx -+++ b/sfx2/source/dialog/dinfdlg.cxx -@@ -1401,10 +1401,13 @@ void CustomPropertyLine::SetRemoved() - } - - CustomPropertiesWindow::CustomPropertiesWindow(Window* pParent, -- const OUString &rHeaderAccName, -- const OUString &rHeaderAccType, -- const OUString &rHeaderAccValue) : -+ FixedText *pHeaderAccName, -+ FixedText *pHeaderAccType, -+ FixedText *pHeaderAccValue) : - Window(pParent), -+ m_pHeaderAccName(pHeaderAccName), -+ m_pHeaderAccType(pHeaderAccType), -+ m_pHeaderAccValue(pHeaderAccValue), - m_aNameBox ( this, SfxResId( SFX_CB_PROPERTY_NAME ) ), - m_aTypeBox ( this, SfxResId( SFX_LB_PROPERTY_TYPE ) ), - m_aValueEdit ( this, SfxResId( SFX_ED_PROPERTY_VALUE ) ), -@@ -1424,9 +1427,12 @@ CustomPropertiesWindow::CustomPropertiesWindow(Window* pParent, - m_aBoxLoseFocusTimer.SetTimeout( 300 ); - m_aBoxLoseFocusTimer.SetTimeoutHdl( LINK( this, CustomPropertiesWindow, BoxTimeoutHdl ) ); - -- m_aNameBox.SetAccessibleName(rHeaderAccName); -- m_aTypeBox.SetAccessibleName(rHeaderAccType); -- m_aValueEdit.SetAccessibleName(rHeaderAccValue); -+ m_aNameBox.add_mnemonic_label(m_pHeaderAccName); -+ m_aNameBox.SetAccessibleName(m_pHeaderAccName->GetText()); -+ m_aTypeBox.add_mnemonic_label(m_pHeaderAccType); -+ m_aTypeBox.SetAccessibleName(m_pHeaderAccType->GetText()); -+ m_aValueEdit.add_mnemonic_label(m_pHeaderAccValue); -+ m_aValueEdit.SetAccessibleName(m_pHeaderAccValue->GetText()); - - m_aNameBox.Hide(); - m_aTypeBox.Hide(); -@@ -1592,8 +1598,10 @@ void CustomPropertiesWindow::ValidateLine( CustomPropertyLine* pLine, bool bIsFr - } - } - --void CustomPropertiesWindow::InitControls( HeaderBar* pHeaderBar, const ScrollBar* pScrollBar ) -+bool CustomPropertiesWindow::InitControls( HeaderBar* pHeaderBar, const ScrollBar* pScrollBar ) - { -+ bool bChanged = false; -+ - DBG_ASSERT( pHeaderBar, "CustomPropertiesWindow::InitControls(): invalid headerbar" ); - DBG_ASSERT( pScrollBar, "CustomPropertiesWindow::InitControls(): invalid scrollbar" ); - -@@ -1614,14 +1622,21 @@ void CustomPropertiesWindow::InitControls( HeaderBar* pHeaderBar, const ScrollBa - while ( *pCurrent ) - { - Rectangle aRect = pHeaderBar->GetItemRect( pHeaderBar->GetItemId( nPos++ ) ); -- Size aSize = (*pCurrent)->GetSizePixel(); -- Point aPos = (*pCurrent)->GetPosPixel(); -+ Size aOrigSize = (*pCurrent)->GetSizePixel(); -+ Point aOrigPos = (*pCurrent)->GetPosPixel(); -+ Size aSize(aOrigSize); -+ Point aPos(aOrigPos); - long nWidth = aRect.GetWidth() - nOffset; - if ( *pCurrent == &m_aRemoveButton ) - nWidth -= pScrollBar->GetSizePixel().Width(); - aSize.Width() = nWidth; - aPos.X() = aRect.getX() + ( nOffset / 2 ); -- (*pCurrent)->SetPosSizePixel( aPos, aSize ); -+ -+ if (aOrigSize != aSize || aOrigPos != aPos) -+ { -+ (*pCurrent)->SetPosSizePixel(aPos, aSize); -+ bChanged = true; -+ } - - if ( *pCurrent == &m_aValueEdit ) - { -@@ -1646,6 +1661,7 @@ void CustomPropertiesWindow::InitControls( HeaderBar* pHeaderBar, const ScrollBa - - pCurrent++; - } -+ return bChanged; - } - - sal_uInt16 CustomPropertiesWindow::GetVisibleLineCount() const -@@ -1705,9 +1721,12 @@ void CustomPropertiesWindow::AddLine( const OUString& sName, Any& rAny ) - - pNewLine->m_aTypeBox.SetLoseFocusHdl( LINK( this, CustomPropertiesWindow, BoxLoseFocusHdl ) ); - -- pNewLine->m_aNameBox.SetAccessibleName(m_aNameBox.GetAccessibleName()); -- pNewLine->m_aTypeBox.SetAccessibleName(m_aTypeBox.GetAccessibleName()); -- pNewLine->m_aValueEdit.SetAccessibleName(m_aValueEdit.GetAccessibleName()); -+ pNewLine->m_aNameBox.add_mnemonic_label(m_pHeaderAccName); -+ pNewLine->m_aNameBox.SetAccessibleName(m_pHeaderAccName->GetText()); -+ pNewLine->m_aTypeBox.add_mnemonic_label(m_pHeaderAccType); -+ pNewLine->m_aTypeBox.SetAccessibleName(m_pHeaderAccType->GetText()); -+ pNewLine->m_aValueEdit.add_mnemonic_label(m_pHeaderAccValue); -+ pNewLine->m_aValueEdit.SetAccessibleName(m_pHeaderAccValue->GetText()); - - long nPos = GetVisibleLineCount() * GetLineHeight(); - m_aCustomPropertiesLines.push_back( pNewLine ); -@@ -1967,10 +1986,13 @@ void CustomPropertiesControl::Init(VclBuilderContainer& rBuilder) - { - m_pHeaderBar = new HeaderBar(this, WB_BUTTONSTYLE | WB_BOTTOMBORDER); - m_pBody = new VclHBox(this); -- OUString sName = rBuilder.get("name")->GetText(); -- OUString sType = rBuilder.get("type")->GetText(); -- OUString sValue = rBuilder.get("value")->GetText(); -- m_pPropertiesWin = new CustomPropertiesWindow(m_pBody, sName, sType, sValue); -+ FixedText* pName = rBuilder.get("name"); -+ FixedText* pType = rBuilder.get("type"); -+ FixedText* pValue = rBuilder.get("value"); -+ OUString sName = pName->GetText(); -+ OUString sType = pType->GetText(); -+ OUString sValue = pValue->GetText(); -+ m_pPropertiesWin = new CustomPropertiesWindow(m_pBody, pName, pType, pValue); - m_pVertScroll = new ScrollBar(m_pBody, WB_VERT); - - set_hexpand(true); -@@ -2018,12 +2040,15 @@ void CustomPropertiesControl::setAllocation(const Size &rAllocation) - { - VclVBox::setAllocation(rAllocation); - -- m_pPropertiesWin->InitControls( m_pHeaderBar, m_pVertScroll ); -+ bool bWidgetsResized = m_pPropertiesWin->InitControls( m_pHeaderBar, m_pVertScroll ); - sal_Int32 nScrollOffset = m_pPropertiesWin->GetLineHeight(); - sal_Int32 nVisibleEntries = m_pPropertiesWin->GetSizePixel().Height() / nScrollOffset; - m_pVertScroll->SetPageSize( nVisibleEntries - 1 ); - m_pVertScroll->SetVisibleSize( nVisibleEntries ); -- m_pPropertiesWin->updateLineWidth(); -+ if (bWidgetsResized) -+ { -+ m_pPropertiesWin->updateLineWidth(); -+ } - } - - extern "C" SAL_DLLPUBLIC_EXPORT Window* SAL_CALL makeCustomPropertiesControl(Window *pParent, -diff --git a/vcl/source/window/tabpage.cxx b/vcl/source/window/tabpage.cxx -index 67225ea..8d472c1 100644 ---- a/vcl/source/window/tabpage.cxx -+++ b/vcl/source/window/tabpage.cxx -@@ -210,22 +210,25 @@ Size TabPage::GetOptimalSize() const - void TabPage::SetPosSizePixel(const Point& rAllocPos, const Size& rAllocation) - { - Window::SetPosSizePixel(rAllocPos, rAllocation); -- if (isLayoutEnabled(this)) -+ if (isLayoutEnabled(this) && rAllocation.Width() && rAllocation.Height()) - VclContainer::setLayoutAllocation(*GetWindow(WINDOW_FIRSTCHILD), Point(0, 0), rAllocation); - } - - void TabPage::SetSizePixel(const Size& rAllocation) - { - Window::SetSizePixel(rAllocation); -- if (isLayoutEnabled(this)) -+ if (isLayoutEnabled(this) && rAllocation.Width() && rAllocation.Height()) - VclContainer::setLayoutAllocation(*GetWindow(WINDOW_FIRSTCHILD), Point(0, 0), rAllocation); - } - - void TabPage::SetPosPixel(const Point& rAllocPos) - { - Window::SetPosPixel(rAllocPos); -- if (isLayoutEnabled(this)) -- VclContainer::setLayoutAllocation(*GetWindow(WINDOW_FIRSTCHILD), Point(0, 0), GetOutputSizePixel()); -+ Size aAllocation(GetOutputSizePixel()); -+ if (isLayoutEnabled(this) && aAllocation.Width() && aAllocation.Height()) -+ { -+ VclContainer::setLayoutAllocation(*GetWindow(WINDOW_FIRSTCHILD), Point(0, 0), aAllocation); -+ } - } - - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ --- -1.9.3 - diff --git a/SOURCES/0061-Fix-for-Footer-is-missing-if-fisrt-page-different-he.patch b/SOURCES/0061-Fix-for-Footer-is-missing-if-fisrt-page-different-he.patch deleted file mode 100644 index 8ff23f9..0000000 --- a/SOURCES/0061-Fix-for-Footer-is-missing-if-fisrt-page-different-he.patch +++ /dev/null @@ -1,301 +0,0 @@ -From b9dcc06bf04c7a60fee2d5612caf3ca9a4d2d273 Mon Sep 17 00:00:00 2001 -From: Rohit Deshmukh -Date: Wed, 22 Jan 2014 18:03:21 +0530 -Subject: [PATCH 061/137] Fix for Footer is missing if fisrt page different - header/footer is set -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Reviewed on: - https://gerrit.libreoffice.org/7589 - -Signed-off-by: Luboš Luňák - -Conflicts: - sw/qa/extras/ooxmlexport/ooxmlexport.cxx - -Change-Id: I2a2f2abc0dcf5542b7b950f9a232d7155a055fdd ---- - sw/qa/extras/ooxmlexport/data/testTitlePage.docx | Bin 0 -> 16479 bytes - sw/qa/extras/ooxmlexport/ooxmlexport.cxx | 8 ++++++++ - sw/source/filter/ww8/wrtw8sty.cxx | 2 +- - 3 files changed, 9 insertions(+), 1 deletion(-) - create mode 100644 sw/qa/extras/ooxmlexport/data/testTitlePage.docx - -diff --git a/sw/qa/extras/ooxmlexport/data/testTitlePage.docx b/sw/qa/extras/ooxmlexport/data/testTitlePage.docx -new file mode 100644 -index 0000000000000000000000000000000000000000..72bfdf81f886b6156144eda28ccb66ffd2ed394b -GIT binary patch -literal 16479 -zcmeHvWpLffvbEVUGc(7`%*@Qp%#1N(%xuS$nC+NiW@ct)j2$z^{O!XzIp^K_e!i-A -zRi&+xMyqF}>F#OGtlkRJpkSy#5I}E$fPjdA%$?uTrvd{3y@dh-LIHXMqAhH1=VEH- -zqOaoVVCt+(=V5C@mO4+Em;UC2w&RQ;lq(%XXGq1;$g -z9E%6w_bf58wvrNw3mfjZ+@F$2*<@wdAUw@Zo0yqWLU&x_A*CJon7PcJiw8g^r;BAK -zjBi=r!4PO}Dq4^^;5!`dj1k%K+ -zO8U7nX5`kQbPUhhSXAN}?pN`59;>^X^k=!#w*8>QXfB2y)$D4k0+-Cq>3k#Du_dDf -zZL1>J7Nyxg0F`rHRw>)n#sw;DKBT%UKsD?lRP@uce@=X%-b#6bf3P2_?050oyLa!j -z=k?o;(1h3JC@#Q}CCuto;GK9yZeS{kOX76w_u^Vw<6mCKTQhZ)fYWwJ%X*nPjv#&K -z=BKa@jam$9)82LvP|emr)=8K6WCV6HF#d)9X{wQ;7W`{nn)cKm-v%{*uh*mf*y;h49MW3A=rQlG4V$rlYxX=$B1t(M6sd{! -zegYdJ{(E@ZSSQLJmB{U05sW1<<;1KpX-!_Xqw2z4nlJOmbjG=PD+z6H$WmU>_E5a$ -zaV%eGGyX5B%(QW_-Rsr5y(&kEjZD#2ls7ckHVpJ+nej$t(Aej#Q%7ET9YuW+Av92* -zpd#oWeav)_wO$V1?_=?^oe^o)>TlWOWa9BD8%_kYQ6Tu+e@1 -zhR4UJS{%&g`~IjUNR%(ChHl1*;dyF!YQVOVQxDZHkf9|hw#`5cJg5_)l@irzPS1`& -z$}m{48J*B6fe>ml^X>B(H4E+uk@8#?lnsU@W(i^og_NwG;D~H7SKO`SCzp|_l;(WA -z34RYKmWW)|xfy&?-fvjPU?g4?Wq$MS4wCk&sIKr6RIfII+fm@ONkWtLBnxDOB*J)M -z^+=ztUM_|yfR<|S8zxRI!s_ZX(Qms$l0eMPv@<92guPoQRqbTvn+44^VVJnGW&MbpG-WP9rY}NCupS68nJ1--#!wDRC{?;I -zBr5dLVO-=D&P^ruono-4g`I*9x`<8EJLMK1X|UsNK9SBxvAN-3-E61_;e@bN9RtOF -z%Hg6A!@KGUSM(4Or3#fAj{ -zP|^h(qa+0%Y=!J75@-hjvtx9Es%soFEv1x$S6f!f@|)YNsfdY-#ET%hY4dD1$Crab -zWo3G2Ra=R@HZcQ~Xzw7!MQ)ghEHc<3&bX)gr=@taaHX>P=n0ihpxgboVN1)dUc0;M -z5nH4lF(@v?JrIo(s>0S(jR9CnlE~+V6-9S(DjZP{Igo7Z-Y!ARDoQn#>FVNB1|DvY -zLwZec)hZuZwV~Xp158Dks;IsXhsxtDMLfdVi60y+yqavX(1B+Pn9)Dd3TznaHlbn` -zXsqqPQh#^dN}(O@?T(NN?lx|#LemD1-&VLVstBSUSwD_;5NhiK_wXHYqljL1ANLk8OoDNzZQBIDeq8^5fJ>j`xEDYOs)oK})UOgrTHQ;Q7 -zJh*3LLHpUHsY*GhbN@*%AzO*v9GdaUphyR?=s)aFZ1?Ju&Ng*Y4(drFu-t -z-+)jehp^{+SsgKj>KnGa*+?m?(;_V>Nc>?2w2zcY1;`2Yo6uawl;76NK#AH0g6~#s -znkc+8edR%^;qX&7Sr9Cm;pSG`*xUkLMuNN)>!7(!YWn;GGFiq=yn9VhQH87ZCVjDp -zS2;Z&<5fQ~@qbR%eix3+{afo+!a6*!OpmvscDwxM*Wp8`IHMm7LU{8fRC<^Mww>V;24)Vm) -zyjXYvv*zF3nSL@g%BHrvK$s==Uc_{GDi9Ops0M4v?w$Bh7E_U#Kh`~-8BpyCGgcsa^O6h@#}G{&eI`KW;s6r^@1W}&7>3Y5Q7(oV@G2Foxw*6c#NF(yl6 -zUf(qwjp`0mK#3LRSI5Cw%@!=^sslja6# -zE)XmWMl}SrVLD_a7cH2P48uHuWlb=#E{19Ah8t>09)+VuTlh2xd61egO2}Ho%_$?7v^^+0=>Ym;NhLU9rm$Kzvs@ -z>nHGN2U>Ab|CU4Qq;XgqwSk~2bT9W0TbNN2LHDygl$Y|Q<W9Nz?1N -z9CT4kWfYjvJ;8>Hdt*q*bdpIudsn3dkL7qatg~5)!?A)?q^YE>Bp@l|rjpE%vm!tQ -zY1@U4prI#1@QIoW**5lh8n}CJ_j#kBC4rf~5{h{Xx=Kw#AEoet(rwu)t5H#bCDt3d -z1USxq%pY>%O}bEIaWUhS@T>?|I_ImHez|VOD)U!sg!NAyj9nq^(%w5jdUqBWF^l*Z -zB~6O!d@BVuwkPoPX&#qlA*T(&;1XM)XaVkky;umr;@;H);nFi!)&9ucz*U%!W=w~| -zEKxCW39{vMHiuPn(=acKs#BQC7aGdyynUj`gTb{>yf}L1#^!cp -z14o_a6L#kFbE_g(PdbIxZGc8 -zNmXuL?~G!B6e@lt(7K9=!WwIE?CIKM-puqGs?>H+i^55%?<Rdu -z;7}n=Dk4jm_K)T?rq3BygeGs&j$&3qA(=Ku<*_*|9jn3YJ$gUsEA~8lpO8zq^OP1$ -zQ&q%|Rfxgv=HIg6ASRZ7l1s3Kg)>z7E_`W63WHb|&vuJdl8Vji50~uJV*8XDnmG5y -z(sxC~_`0#e^{~&8Rl{T5Xb~9Ui@uGBn0@A}oXiq1+99HL9}#-{K5iCf#WCGQM~vB- -z!^}tr@OV4u>QUo1k4N!ZOkqqO@A4h(=ayMN131z34K0rGQRzOsbpevB`HW!Mari%gV$yQMkKo_-b|t-*u^uG6vW_Y@mpsg3iz9cTadjsZ|UMRiY-!Dc9aWgrtvPBP7{-NnY?5HOqBW_NFIn -zgA05Ew*%IL*pOuz7Ek;WwT`GVhnkMgql_muR`=|*umr5ufcHfW+;Azp>cwxg(GBPF -z&b1TAuD3;Gj}Rc>G8smh5K=Z%MwywUwYY<%eWorSqk0#^a#Gb-45sXCMZ1oM{dk&S -zv_F5hs%t$ZbZ3JdXNUor3P;o1+(Cp4lL}3sP1)IQhkvhm5->UTA?6g%cybAEY5e2! -zE#thCxxEUGxMwl$kQ1k6X8lm@st#o; -zB~;~JZf;d$b*R8Rtg4X -zvYjf`beJj4#8nb$75gr6KXf5+85jrw=ti3A(cF<2SwG8#LZGpMw=qXPpWwT(>6L7z -zGp6rSNwY9~C}AI1zr2NI!<@SomNN;1atYQP0p$edKTT{I7KW7u$DysX;?pyIG%6r8 -zvVyXWs4(Z_)RjYwItrBw4hpQAx3tatrP)4jcM8&fHDE+*&t|0-Fup(Z>3r%RFr> -zuxZZ?xX)SlzE@8_jzX^mla|0Y5A=9SLgDcWjx8LZjWqI3SXD|>b+Mdc(UT#%$Y^0C^(R&8T4R-A(HMhTJsx%Iz=m>y#RYiqzV{8bOgEx{B9p5sbo|&t -zRXw>tk+wJW#lhCd`#i-TeG^0vf8z@(UsSJ#BILOhs&*&uxMl`Sk*s=MSv5w#7&@1qgc>NV -zjE`I-bKuKtJ|O9SV(c~DRzlpiy*E2Uw{qS$>X44HAyol4qe}_av}=tTfF6*Gb{riZ -zwAK)%BSWC*Zos8O6X7C_%Ci&5cbQs6M3G+mjOi86eC%z5ydv@G>tIN0C?`FM`+YIW -z7KiJROk#1=vqTJ`DC6?Ma0yrgwa5e!JclOssdkdamanVrM*gRQX&S-nag9c)K!+B5 -z3Y+i -z?gzR&a<@>Z!JrTAoE`S#ulM_{W!V$$WE0I*oPqKP%b~KZ*R#C&QFx_LBn$b68_1(D -zUR4(4p~W1#MM$vDj_7o#i&62LM<}JaJ#UH#3(ZJ_nauG36PHlxFg3@!smnr35NQI^mqlQ4CR -zCfhEY;+9P+gf&x~cI8%&q4{F|6|>fAJ_G;KarrXTVKvY&6NJA+8_mpc`qC#k<8s(2 -zn|(1WrS3>6h!&|N&I)7XZ61?0Cz7<;!$Jn!NmvbI=Tx-XjFD~LEqWb8tdqr%gM?3= -zi7DII-FFQnM@;Ymi_ZRSprCaw)vj!RDG${&of#BhG%Gg)Gj(4*@T-pd-MIiw?5$Rc -zL*y*2w63wn$*xhUBeWXMwT($sxV_Lb8Yi3Kc2G6PoDnxwQvs(w@Ed -zG~JE52b^A1as2jA_F^v#a~g6*|ZYKEPnJqw!^A**`u3<;E^vi$oA2O_)L= -z)j>xg4$JJIxNayZVK8J^LV9z!Z1+oEiV5>j%H -zFStuYT#y|RuZiZ!jHPoj3y=4)=jdVL9apJ{oTp>xfv*EyDX9e8o2}m!*?645C5g2P -zsW|Xl!E1Qt*!jJlnB`EFu@;vAD>x)qJMG)nRVZ($@1Zm2SBOM&`dbrWO`lV;^9f%z -zm4p=-uukU_CVdSe02kbLWii@kO(??ai;Gu+CYxVQ%QtExCp-1c40#IQm^UFB4mGSO -z7uPp}W_(jopRX1Z{Y-=7uPt8vsEEuhmbK0Y%NKX5H+VF*O|pd*r1c(|8XTdw7$)vK -zZ|8zLmwiKhvqgGJDZmqRamI4@!jB}J?hWd*1UYRjX^2R5c_JO0T45{>9VyjY6|#J0 -z|L|7rw=wj}nOR8AWTwy17 -zy3seL1ah@W`5-;uHw$;~)S<6P?Q5&-h)S2)*^87$eZ0ztXhH1|C~PFgZmuIo6Q*aT -zhwfMI*}PLco~c9p02AFYG(#UAq{3{ES>I0I%Le&6jed2sHUK`+G&_}vRZr5Di5*fC -zM#dE`)}U?{--^dB(1jGl&W}Sxt!Q{f7)?q*FKui<&x`ABKlAO)k&u+q7KO5P6Q4q6 -zSH|A%T+;A?m?cP5eS$AhAOX04)5Q~7^Uk5d4lK! -zbY99+erOiGL!Psp;!bwpIi-PGknYaZVHG_s<0vaaDc+h}$f~__Y0Z9D`pNS6T!VPU -zQ4Qm2>u$9cMoek~O_2G_mAm!TNCdn@W@2k=r}~>FmGg|3N61mL?TQh~IFA&YHXb$# -zoIcvqP&Gjx`BBxNkz(W$g35G;jQ$51-KM1z$E-1v8c0) -zr_FDxF~?cD?ipO@p=ajh_XsrlV>)HnW4(Ei%y%e2C -zMSJEDv2pT)2G6m1nTHPDtx-Cy23a97+T7L4R#(^IpwW9iRL+cuG{3kDrX5ey?K_xk -zs@&0$CXFPxlM;jzN%W!II7WKux*1KaD<<+wG&3Jqf%I?~&0)>lj+)W4Y!R-cigeICr7S*;&Eo92YuUSVgBK-v4qiAPJX9*%(x_xVNMsuvw)lILj -zQz1<+pE@mC;FctGd(}+R4!s;r6$*WZf+>*wC&d$Y1=`AmkbmGv?`#~=c=~+Dv%tDZVmvq9Lj%1u -z8-Lj$`*pLV)P^L5^u72S8jm^}9$w^x8StEozyro285^$R3a~t%bXh1T=Pvv~4IcUM -zmP(=oSm@8eYByIp86t?JuKn9W@b(`}Om=!G6yeXP;Ud=QXOd99*jXx#R)sD=Krpwm -zFr;lI2Xw*G!{Uw=HxEvSdks&AbBzK*pz?9~Qr{Yu+~4-vt!Fp-(plJx(=y}L*VQ#s -zs+*GIu9LLzu*?#u&hwsVUUTfVFM+(MHjJ^?5r=MNEfb3;t*JxKF7l2t+VREvH{_yp -zb9#|JoUOv_7ApH%7vaZs+elb8eK>YsCagY`QCJXI9;FXCY1Mt0kMl}*>z+2{{e*YQ -zrUo}rRR>%ls+h3!5l=d?N^5zme?Mj-fupoTiDZw -z%OPMb77%g_&XT4h#?P`S?*{H-T6w%~Pbd$)4-R!xKYwtiK%*d*)2J_|zyn)X+SyLT -z_IqO{9C~N3_U4^l_^`?yDZ@dnVN>SI_|BH_T6vVjIP5!3wf(2O^rH_JT&w4n-4J%) -zQM-yu;1Rg|pxoR**?r8}9aOlz)2pjd*QJZQcuLo7J!T)dTff)vqz@a_%N%l50VmuT -zfRcU_N~f!7&0jU{Az3x-$y?X&PGaNP5;V&&nfwkfB8_Ly0|m&qC%+P;v3_lUrT$&2K>hx@q~ -z`4=S5X=Y@*D;M`&uas6K&-q_YTqh)UW}*k__#khG}Y0|1GU*# -zk|jP5)}!)#8_tFMEP~-!R*5d)`rz45ura~&;t>`3gc_Cgl(gP{Nzx2^oBWFSFc^cy -zGIp!hk-fOS8lNt5ht27yJ^ax6+z(##!tT0O9HFdtS)A-V``SI%|90nWV7(`rV9I;- -zg2W3!z*nR)eh?=HI{_fkI1z9;?vi9O4~>U-Q;Zrj7N^|6XV3zik|=M^U(+8@%C#x} -zF&Y}lA`d=|@;lPoyufq9JR#`iV#EM8DiJ^lg#kxiw@0R;p-;FX5m|3>T;Oll0SFVyhA^0Jv2_417ya -zECjVy@%Kx0?Q;yP#SHl7DwqTS2oxh#{%=kDy`o>+^Uo$)(V@dLP(=-3q4kGhqA3YQ -zK~w(Ow%;JXoDLTg@(ljfdfj_Vdc_A{GyeXZo9h>&j@JU}mEy|N@>RN{V*XOggfqPtvz~Z=AA1g$CEFK~WXB(Q#wOZ^8qGl!WCIQ=^yCAgKpoEA@#)^Z% -zs2~)qY<4TCCI^v}wKG^6PO(c#SS4-tTp=_W8@WnJ7)0$T0Mdk>T*oRLIt4qoJ3lm$ -zyKFYj|F=@1xLF_+I#v;I0MJk=hzg6AmDJ!@k#RrDOP$@P84jI&8OWoq>a -zn2MaPlU0Vq*$Kir4B)Z%>_bPQl3W@Mq}7%A)seD6C*VC^k>rSWRN0?x`)&^kUnQU65=HF=`^7)C~ -z-p3FEn%=;#hVe%HahpNjZ$Un|LA|PtvSe*?dTsvzRoHuZqaLoMOv{)czIhG%kvzN^ -zCtb*I$_!$CN?yw*Wg%aBFG=@tG67$d(nT(94jx_(VO%bQak~ARtZ6kC$n1t0FR#aJ -zjLx7E!g1w^#eSJFsb2Zze(}p%O3L(QC-?3u`ygH=pT`E_f_Z0nYQeBDbCfMb(2V5@ -z@~pn-H~6*bPp+*O#nsYC`gg`Pht0lM1Gg267=Z@WCFIZi8463gF3a^`H|oMQLr0H7 -zOC~v=4e$l4+W2uMbUH~>Ku;2NTVidv6KxfgJoIi$5Z0X28S!k^w+`vTN9KyW2-GT% -zaaV>aABV@i(y#W%0wf#Px^#!(#>Cl$9fTfKAN3E<+~ik>_b;$lo{xAuL9b`1N~!lw -zY@B%sAlg{?+O4P{rdR9jBXv6nZr$teCb;ovGN11RU$WO5iM5O5y2& -z7);%%1a)-04!g@v6f^a1;$DS%H=PA_vx##`Xjk2H2Wj7+xZ#QoCJ{8sAuf~qsR!lS -zY>)JGp75`Hm>s+>M0jaaeMrGw%uueT#UsZQ%Zkf^MbU$jM{ -z1t>~TnU%-CoUZecmtLrs_h!h08wm<+W6$wCz -z25?aooa`N(>5c83On+fs01^lO%Yz2!RAz#rG#~+HU<15Ec*r{=UpW2KiGZm*JQ&4$ -zd!i=SE^;_Yod$dRWxK2(-g`Iq*VpI9mVAw4*Tmya&$$oCQ&AtmqAUuSTqD*OMqFZ$ -z2^!;DE#Z>B0^!q^u4D*lkZVC!R@7|MLg4BpPL<>>zsfGj?RtN5Wf+|!7q%(Vklx6|GHgTXmE(=q8~lOwba0`mx3G -zj*(psL`5K=&J -zKcS6GhH73jcs(DrWAAHm;&l3$h9#I;?CCJV3QMcYAg|1TD=UoF#rJmU*T9l7=8SBI -zT4^E<9OyVSKp96p7S}PRHh$$fNNSs@O_Jf{=Vy`e&r@^jgIQ@(O>IQ$9iPht-~Lvp;4zlgP}XO3tOM~dgGL1jCr1LX6S6o{F{ -z>JV~H0SPJu3dzT=ksejVa)h|JJYo7rUV^Z -zmKC*~t@7K(yw7s_C_Uc_KP2o)zfE$BVZO%iL6a{kR?LMhAdI5WCadV!t1MPcC=av_ -z@yapl&B_sNn{b2mVYYdL8|SfoS)zguhIEQlTd||R(ed(hQLZ}-ocHFgi!)&3mT%Z% -zlD|JZNlrhcSXaDS7!?6x#_s+xJog1lgjGBC!b!x~LOL^iSi3W>-ViWHa-bM7@Ti#X -ze`yxyX5yyU#7&Ugf8YeqOqULauZiX}o4}IJNs0^_55}f&#IERshP3nUm4w&?9PgD8 -z8}2<9F@03%w4Iq0+Y0LOS^elst{>K&|ot*{M1Bl`flhxntvGjwqHue$^Ix!<=;C0XfS2E;a) -zm$2zaHeE%ebTJc*i%krhHQq3jWr!J4QccI#Hs#NCM`PJ$>!UpD-f%i?H{{-Zh;=op -z?KHzY!qi#Q_2rib4`z<>=8RCEgB{U7Klw9uY!8T^qh=1ovGhm1wJE!#Bl8>5NW!}% -zMrWyKvDEo0n#)!@${L;0=;pMMCwrVvGlA7kRtr7XEgyV8=yCtyMY=Q-_qxya-Fff8 -zr~Y-E_&9#p)ItTin@)06tJL5U*VtB4535bdTFiUoMUBpJaI~15qz{8%D&)qFuE0n(MdR#C0DG$vc=i7AZGe2yN5XFypcX=Mvu} -z`a}6^KVWsi9=lj;tLSt4K??h?9MwjQ{O|Z5SmZyWe`YQJg*F0^nE$N(cMkK< -z=%2Zef1%$4M!Fx+zw$W#|It!_(Dn!Pue{2i(f{*vL!C-yna12bq2c|MW%jvxL8g;(y_RfIwM*fc_Df{|x^*qWVjK -zH{0(GFaxCb{~2HXjQ{({_!k-o=!)Zq>VF?66{Nud9^se24L|{^1uQ!!bN_Po{{U_w -B@YDbR - -literal 0 -HcmV?d00001 - -diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx -index bd8051a..e740174 100644 ---- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx -+++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx -@@ -2085,6 +2085,14 @@ DECLARE_OOXMLEXPORT_TEST(testBnc884615, "bnc884615.docx") - CPPUNIT_ASSERT_EQUAL(false, bool(getProperty(getShape(1), "Opaque"))); - } - -+DECLARE_OOXMLEXPORT_TEST(testTestTitlePage, "testTitlePage.docx") -+{ -+ xmlDocPtr pXmlDoc = parseExport("word/document.xml"); -+ if (!pXmlDoc) -+ return; -+ assertXPathChildren(pXmlDoc, "/w:document/w:body/w:sectPr/w:titlePg", 0); -+} -+ - #endif - - CPPUNIT_PLUGIN_IMPLEMENT(); -diff --git a/sw/source/filter/ww8/wrtw8sty.cxx b/sw/source/filter/ww8/wrtw8sty.cxx -index 2675cc5..a4edf4b 100644 ---- a/sw/source/filter/ww8/wrtw8sty.cxx -+++ b/sw/source/filter/ww8/wrtw8sty.cxx -@@ -1748,7 +1748,7 @@ void MSWordExportBase::SectionProperties( const WW8_SepInfo& rSepInfo, WW8_PdAtt - { - const SwPageDesc *pFollow = pPd->GetFollow(); - const SwFrmFmt& rFollowFmt = pFollow->GetMaster(); -- if ( sw::util::IsPlausableSingleWordSection( *pPdFirstPgFmt, rFollowFmt ) ) -+ if ( sw::util::IsPlausableSingleWordSection( *pPdFirstPgFmt, rFollowFmt ) || titlePage ) - { - if (rSepInfo.pPDNd) - pPdFirstPgFmt = pPd->GetPageFmtOfNode( *rSepInfo.pPDNd ); --- -1.9.3 - diff --git a/SOURCES/0062-fix-build-of-last-commit.patch b/SOURCES/0062-fix-build-of-last-commit.patch deleted file mode 100644 index ea8fd2e..0000000 --- a/SOURCES/0062-fix-build-of-last-commit.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 9b2e8ef138a7c287bfd4534e4c115003c3c56575 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Lubo=C5=A1=20Lu=C5=88=C3=A1k?= -Date: Sun, 27 Jul 2014 18:22:09 +0200 -Subject: [PATCH 062/137] fix build of last commit - -Change-Id: I3c2e4763f25580c3418d476479a81efe65414b40 ---- - sw/qa/extras/ooxmlexport/ooxmlexport.cxx | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx -index e740174..4db47e5 100644 ---- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx -+++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx -@@ -2090,7 +2090,7 @@ DECLARE_OOXMLEXPORT_TEST(testTestTitlePage, "testTitlePage.docx") - xmlDocPtr pXmlDoc = parseExport("word/document.xml"); - if (!pXmlDoc) - return; -- assertXPathChildren(pXmlDoc, "/w:document/w:body/w:sectPr/w:titlePg", 0); -+// assertXPathChildren(pXmlDoc, "/w:document/w:body/w:sectPr/w:titlePg", 0); - } - - #endif --- -1.9.3 - diff --git a/SOURCES/0063-fdo-81617-Split-formula-groups-at-sort-range-boundar.patch b/SOURCES/0063-fdo-81617-Split-formula-groups-at-sort-range-boundar.patch deleted file mode 100644 index d8f6563..0000000 --- a/SOURCES/0063-fdo-81617-Split-formula-groups-at-sort-range-boundar.patch +++ /dev/null @@ -1,73 +0,0 @@ -From 290d0d779551b84dfa42e0c026ce4d7c0f00ea7a Mon Sep 17 00:00:00 2001 -From: Kohei Yoshida -Date: Sun, 27 Jul 2014 14:35:37 -0400 -Subject: [PATCH 063/137] fdo#81617: Split formula groups at sort range - boundaries. - -Otherwise, partially sorting a range may crash, or at best incorrectly -update formula references. - -Change-Id: Iefcb86d205d83ccc5b684048bfd9aadabf6e13eb -(cherry picked from commit a3fc7f20089062afa4f778e70ba8be84032a30a7) -Reviewed-on: https://gerrit.libreoffice.org/10583 -Reviewed-by: Eike Rathke -Tested-by: Eike Rathke ---- - sc/inc/table.hxx | 1 + - sc/source/core/data/table3.cxx | 8 ++++++++ - sc/source/core/data/table7.cxx | 8 ++++++++ - 3 files changed, 17 insertions(+) - -diff --git a/sc/inc/table.hxx b/sc/inc/table.hxx -index 97ee720..f8928de 100644 ---- a/sc/inc/table.hxx -+++ b/sc/inc/table.hxx -@@ -888,6 +888,7 @@ public: - formula::FormulaTokenRef ResolveStaticReference( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2 ); - formula::VectorRefArray FetchVectorRefArray( SCCOL nCol, SCROW nRow1, SCROW nRow2 ); - -+ void SplitFormulaGroups( SCCOL nCol, std::vector& rRows ); - void UnshareFormulaCells( SCCOL nCol, std::vector& rRows ); - void RegroupFormulaCells( SCCOL nCol ); - -diff --git a/sc/source/core/data/table3.cxx b/sc/source/core/data/table3.cxx -index 31cfe2e..3b63f7e 100644 ---- a/sc/source/core/data/table3.cxx -+++ b/sc/source/core/data/table3.cxx -@@ -755,6 +755,14 @@ void ScTable::SortReorderByRow( - ScSortInfoArray::RowsType* pRows = pArray->GetDataRows(); - assert(pRows); // In sort-by-row mode we must have data rows already populated. - -+ // Split formula groups at the sort range boundaries (if applicable). -+ std::vector aRowBounds; -+ aRowBounds.reserve(2); -+ aRowBounds.push_back(nRow1); -+ aRowBounds.push_back(nRow2+1); -+ for (SCCOL nCol = nCol1; nCol <= nCol2; ++nCol) -+ SplitFormulaGroups(nCol, aRowBounds); -+ - // Cells in the data rows only reference values in the document. Make - // a copy before updating the document. - -diff --git a/sc/source/core/data/table7.cxx b/sc/source/core/data/table7.cxx -index f3528dd..b427617 100644 ---- a/sc/source/core/data/table7.cxx -+++ b/sc/source/core/data/table7.cxx -@@ -79,6 +79,14 @@ bool ScTable::HasUniformRowHeight( SCROW nRow1, SCROW nRow2 ) const - return nRow2 <= aData.mnRow2; - } - -+void ScTable::SplitFormulaGroups( SCCOL nCol, std::vector& rRows ) -+{ -+ if (!ValidCol(nCol)) -+ return; -+ -+ sc::SharedFormulaUtil::splitFormulaCellGroups(aCol[nCol].maCells, rRows); -+} -+ - void ScTable::UnshareFormulaCells( SCCOL nCol, std::vector& rRows ) - { - if (!ValidCol(nCol)) --- -1.9.3 - diff --git a/SOURCES/0064-fdo-79578-Properly-update-formulas-upon-change-in-db.patch b/SOURCES/0064-fdo-79578-Properly-update-formulas-upon-change-in-db.patch deleted file mode 100644 index 0f94b96..0000000 --- a/SOURCES/0064-fdo-79578-Properly-update-formulas-upon-change-in-db.patch +++ /dev/null @@ -1,628 +0,0 @@ -From 155af162b260ee49e1c6603baa2c2a96d6e93b67 Mon Sep 17 00:00:00 2001 -From: Kohei Yoshida -Date: Mon, 28 Jul 2014 21:34:40 -0400 -Subject: [PATCH 064/137] fdo#79578: Properly update formulas upon change in db - collection. - -Update it to handle formula groups correctly. - -(cherry picked from commit 300845922eec7a28bc1da337acd21f138685d759) - -Conflicts: - sc/source/ui/docshell/dbdocfun.cxx - sc/source/ui/docshell/docfunc.cxx - sc/source/ui/docshell/docsh5.cxx - sc/source/ui/undo/undocell.cxx - sc/source/ui/undo/undodat.cxx - sc/source/ui/unoobj/nameuno.cxx - sc/source/ui/view/viewfunc.cxx - sc/source/ui/view/dbfunc.cxx - -Change-Id: I009a7fcf3d3fb17ef6951c50534ca6bc1fffc259 -Reviewed-on: https://gerrit.libreoffice.org/10605 -Reviewed-by: Eike Rathke -Tested-by: Eike Rathke ---- - sc/inc/column.hxx | 6 +++-- - sc/inc/document.hxx | 8 ++---- - sc/inc/formulacell.hxx | 1 - - sc/inc/table.hxx | 6 +++-- - sc/source/core/data/column2.cxx | 22 ---------------- - sc/source/core/data/column4.cxx | 43 +++++++++++++++++++++---------- - sc/source/core/data/documen4.cxx | 11 -------- - sc/source/core/data/document10.cxx | 17 +++++++++++-- - sc/source/core/data/formulacell.cxx | 51 ------------------------------------- - sc/source/core/data/table4.cxx | 6 ----- - sc/source/core/data/table7.cxx | 11 ++++++-- - sc/source/ui/docshell/dbdocfun.cxx | 14 +++++----- - sc/source/ui/docshell/docfunc.cxx | 4 +-- - sc/source/ui/docshell/docsh5.cxx | 4 +-- - sc/source/ui/undo/undocell.cxx | 2 +- - sc/source/ui/undo/undodat.cxx | 8 +++--- - sc/source/ui/undo/undorangename.cxx | 2 +- - sc/source/ui/unoobj/nameuno.cxx | 2 +- - sc/source/ui/view/dbfunc.cxx | 4 +-- - sc/source/ui/view/viewfunc.cxx | 2 +- - 20 files changed, 85 insertions(+), 139 deletions(-) - -diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx -index 1cac044..8962422 100644 ---- a/sc/inc/column.hxx -+++ b/sc/inc/column.hxx -@@ -373,9 +373,12 @@ public: - void PreprocessRangeNameUpdate( - sc::EndListeningContext& rEndListenCxt, sc::CompileFormulaContext& rCompileCxt ); - -- void PostprocessRangeNameUpdate( -+ void CompileHybridFormula( - sc::StartListeningContext& rStartListenCxt, sc::CompileFormulaContext& rCompileCxt ); - -+ void PreprocessDBDataUpdate( -+ sc::EndListeningContext& rEndListenCxt, sc::CompileFormulaContext& rCompileCxt ); -+ - const SfxPoolItem* GetAttr( SCROW nRow, sal_uInt16 nWhich ) const; - const ScPatternAttr* GetPattern( SCROW nRow ) const; - const ScPatternAttr* GetMostUsedPattern( SCROW nStartRow, SCROW nEndRow ) const; -@@ -480,7 +483,6 @@ public: - void CollectListeners( std::vector& rListeners, SCROW nRow1, SCROW nRow2 ); - - void CompileDBFormula( sc::CompileFormulaContext& rCxt ); -- void CompileDBFormula( sc::CompileFormulaContext& rCxt, bool bCreateFormulaString ); - void CompileColRowNameFormula( sc::CompileFormulaContext& rCxt ); - - sal_Int32 GetMaxStringLen( SCROW nRowStart, SCROW nRowEnd, rtl_TextEncoding eCharSet ) const; -diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx -index c901af5..9d365cc 100644 ---- a/sc/inc/document.hxx -+++ b/sc/inc/document.hxx -@@ -516,11 +516,8 @@ public: - * Call this immediately before updating all named ranges. - */ - SC_DLLPUBLIC void PreprocessRangeNameUpdate(); -- -- /** -- * Call this immediately after all named ranges have been updated. -- */ -- SC_DLLPUBLIC void PostprocessRangeNameUpdate(); -+ SC_DLLPUBLIC void PreprocessDBDataUpdate(); -+ SC_DLLPUBLIC void CompileHybridFormula(); - - SCTAB GetMaxTableNumber() { return static_cast(maTabs.size()) - 1; } - void SetMaxTableNumber(SCTAB nNumber) { nMaxTableNumber = nNumber; } -@@ -1967,7 +1964,6 @@ public: - void StartTrackTimer(); - - void CompileDBFormula(); -- void CompileDBFormula( bool bCreateFormulaString ); - void CompileColRowNameFormula(); - - /** Maximum string length of a column, e.g. for dBase export. -diff --git a/sc/inc/formulacell.hxx b/sc/inc/formulacell.hxx -index 9c7cd10..0a43f49 100644 ---- a/sc/inc/formulacell.hxx -+++ b/sc/inc/formulacell.hxx -@@ -310,7 +310,6 @@ public: - bool IsRunning() const; - void SetRunning( bool bVal ); - void CompileDBFormula( sc::CompileFormulaContext& rCxt ); -- void CompileDBFormula( sc::CompileFormulaContext& rCxt, bool bCreateFormulaString ); - void CompileColRowNameFormula( sc::CompileFormulaContext& rCxt ); - ScFormulaCell* GetPrevious() const; - ScFormulaCell* GetNext() const; -diff --git a/sc/inc/table.hxx b/sc/inc/table.hxx -index f8928de..9d36a1e 100644 ---- a/sc/inc/table.hxx -+++ b/sc/inc/table.hxx -@@ -864,9 +864,12 @@ public: - void PreprocessRangeNameUpdate( - sc::EndListeningContext& rEndListenCxt, sc::CompileFormulaContext& rCompileCxt ); - -- void PostprocessRangeNameUpdate( -+ void CompileHybridFormula( - sc::StartListeningContext& rStartListenCxt, sc::CompileFormulaContext& rCompileCxt ); - -+ void PreprocessDBDataUpdate( -+ sc::EndListeningContext& rEndListenCxt, sc::CompileFormulaContext& rCompileCxt ); -+ - ScConditionalFormatList* GetCondFormList(); - const ScConditionalFormatList* GetCondFormList() const; - void SetCondFormList( ScConditionalFormatList* pList ); -@@ -1029,7 +1032,6 @@ private: - bool GetNextMarkedCell( SCCOL& rCol, SCROW& rRow, const ScMarkData& rMark ) const; - bool TestTabRefAbs(SCTAB nTable) const; - void CompileDBFormula( sc::CompileFormulaContext& rCxt ); -- void CompileDBFormula( sc::CompileFormulaContext& rCxt, bool bCreateFormulaString ); - void CompileColRowNameFormula( sc::CompileFormulaContext& rCxt ); - void RebuildFormulaGroups(); - -diff --git a/sc/source/core/data/column2.cxx b/sc/source/core/data/column2.cxx -index 63c5e0f..a8ba063 100644 ---- a/sc/source/core/data/column2.cxx -+++ b/sc/source/core/data/column2.cxx -@@ -3218,21 +3218,6 @@ public: - } - }; - --class CompileDBFormula2Handler --{ -- sc::CompileFormulaContext& mrCxt; -- bool mbCreateFormulaString; -- --public: -- CompileDBFormula2Handler( sc::CompileFormulaContext& rCxt, bool bCreateFormulaString ) : -- mrCxt(rCxt), mbCreateFormulaString(bCreateFormulaString) {} -- -- void operator() (size_t, ScFormulaCell* p) -- { -- p->CompileDBFormula(mrCxt, mbCreateFormulaString); -- } --}; -- - struct CompileColRowNameFormulaHandler - { - sc::CompileFormulaContext& mrCxt; -@@ -3254,13 +3239,6 @@ void ScColumn::CompileDBFormula( sc::CompileFormulaContext& rCxt ) - RegroupFormulaCells(); - } - --void ScColumn::CompileDBFormula( sc::CompileFormulaContext& rCxt, bool bCreateFormulaString ) --{ -- CompileDBFormula2Handler aFunc(rCxt, bCreateFormulaString); -- sc::ProcessFormula(maCells, aFunc); -- RegroupFormulaCells(); --} -- - void ScColumn::CompileColRowNameFormula( sc::CompileFormulaContext& rCxt ) - { - CompileColRowNameFormulaHandler aFunc(rCxt); -diff --git a/sc/source/core/data/column4.cxx b/sc/source/core/data/column4.cxx -index 9a3ef12..bf3b817 100644 ---- a/sc/source/core/data/column4.cxx -+++ b/sc/source/core/data/column4.cxx -@@ -135,15 +135,19 @@ void ScColumn::DeleteBeforeCopyFromClip( sc::CopyFromClipContext& rCxt, const Sc - - namespace { - --class PreRangeNameUpdateHandler -+class RecompileByOpcodeHandler - { - ScDocument* mpDoc; -+ const boost::unordered_set& mrOps; - sc::EndListeningContext& mrEndListenCxt; - sc::CompileFormulaContext& mrCompileFormulaCxt; - - public: -- PreRangeNameUpdateHandler( ScDocument* pDoc, sc::EndListeningContext& rEndListenCxt, sc::CompileFormulaContext& rCompileCxt ) : -+ RecompileByOpcodeHandler( -+ ScDocument* pDoc, const boost::unordered_set& rOps, -+ sc::EndListeningContext& rEndListenCxt, sc::CompileFormulaContext& rCompileCxt ) : - mpDoc(pDoc), -+ mrOps(rOps), - mrEndListenCxt(rEndListenCxt), - mrCompileFormulaCxt(rCompileCxt) {} - -@@ -163,12 +167,7 @@ public: - pTop = rEntry.mpCell; - - ScTokenArray* pCode = pTop->GetCode(); -- -- boost::unordered_set aOps; -- aOps.insert(ocBad); -- aOps.insert(ocColRowName); -- aOps.insert(ocName); -- bool bRecompile = pCode->HasOpCodes(aOps); -+ bool bRecompile = pCode->HasOpCodes(mrOps); - - if (bRecompile) - { -@@ -204,14 +203,14 @@ public: - } - }; - --class PostRangeNameUpdateHandler -+class CompileHybridFormulaHandler - { - ScDocument* mpDoc; - sc::StartListeningContext& mrStartListenCxt; - sc::CompileFormulaContext& mrCompileFormulaCxt; - - public: -- PostRangeNameUpdateHandler( ScDocument* pDoc, sc::StartListeningContext& rStartListenCxt, sc::CompileFormulaContext& rCompileCxt ) : -+ CompileHybridFormulaHandler( ScDocument* pDoc, sc::StartListeningContext& rStartListenCxt, sc::CompileFormulaContext& rCompileCxt ) : - mpDoc(pDoc), - mrStartListenCxt(rStartListenCxt), - mrCompileFormulaCxt(rCompileCxt) {} -@@ -277,17 +276,35 @@ void ScColumn::PreprocessRangeNameUpdate( - // Collect all formula groups. - std::vector aGroups = GetFormulaGroupEntries(); - -- PreRangeNameUpdateHandler aFunc(pDocument, rEndListenCxt, rCompileCxt); -+ boost::unordered_set aOps; -+ aOps.insert(ocBad); -+ aOps.insert(ocColRowName); -+ aOps.insert(ocName); -+ RecompileByOpcodeHandler aFunc(pDocument, aOps, rEndListenCxt, rCompileCxt); -+ std::for_each(aGroups.begin(), aGroups.end(), aFunc); -+} -+ -+void ScColumn::PreprocessDBDataUpdate( -+ sc::EndListeningContext& rEndListenCxt, sc::CompileFormulaContext& rCompileCxt ) -+{ -+ // Collect all formula groups. -+ std::vector aGroups = GetFormulaGroupEntries(); -+ -+ boost::unordered_set aOps; -+ aOps.insert(ocBad); -+ aOps.insert(ocColRowName); -+ aOps.insert(ocDBArea); -+ RecompileByOpcodeHandler aFunc(pDocument, aOps, rEndListenCxt, rCompileCxt); - std::for_each(aGroups.begin(), aGroups.end(), aFunc); - } - --void ScColumn::PostprocessRangeNameUpdate( -+void ScColumn::CompileHybridFormula( - sc::StartListeningContext& rStartListenCxt, sc::CompileFormulaContext& rCompileCxt ) - { - // Collect all formula groups. - std::vector aGroups = GetFormulaGroupEntries(); - -- PostRangeNameUpdateHandler aFunc(pDocument, rStartListenCxt, rCompileCxt); -+ CompileHybridFormulaHandler aFunc(pDocument, rStartListenCxt, rCompileCxt); - std::for_each(aGroups.begin(), aGroups.end(), aFunc); - } - -diff --git a/sc/source/core/data/documen4.cxx b/sc/source/core/data/documen4.cxx -index 8a4e3ec..03ee3ef 100644 ---- a/sc/source/core/data/documen4.cxx -+++ b/sc/source/core/data/documen4.cxx -@@ -548,17 +548,6 @@ void ScDocument::CompileDBFormula() - } - } - --void ScDocument::CompileDBFormula( bool bCreateFormulaString ) --{ -- sc::CompileFormulaContext aCxt(this); -- TableContainer::iterator it = maTabs.begin(); -- for (;it != maTabs.end(); ++it) -- { -- if (*it) -- (*it)->CompileDBFormula(aCxt, bCreateFormulaString); -- } --} -- - void ScDocument::CompileColRowNameFormula() - { - sc::CompileFormulaContext aCxt(this); -diff --git a/sc/source/core/data/document10.cxx b/sc/source/core/data/document10.cxx -index cb64221..26f34db 100644 ---- a/sc/source/core/data/document10.cxx -+++ b/sc/source/core/data/document10.cxx -@@ -57,7 +57,20 @@ void ScDocument::PreprocessRangeNameUpdate() - } - } - --void ScDocument::PostprocessRangeNameUpdate() -+void ScDocument::PreprocessDBDataUpdate() -+{ -+ sc::EndListeningContext aEndListenCxt(*this); -+ sc::CompileFormulaContext aCompileCxt(this); -+ -+ TableContainer::iterator it = maTabs.begin(), itEnd = maTabs.end(); -+ for (; it != itEnd; ++it) -+ { -+ ScTable* p = *it; -+ p->PreprocessDBDataUpdate(aEndListenCxt, aCompileCxt); -+ } -+} -+ -+void ScDocument::CompileHybridFormula() - { - sc::StartListeningContext aStartListenCxt(*this); - sc::CompileFormulaContext aCompileCxt(this); -@@ -65,7 +78,7 @@ void ScDocument::PostprocessRangeNameUpdate() - for (; it != itEnd; ++it) - { - ScTable* p = *it; -- p->PostprocessRangeNameUpdate(aStartListenCxt, aCompileCxt); -+ p->CompileHybridFormula(aStartListenCxt, aCompileCxt); - } - } - -diff --git a/sc/source/core/data/formulacell.cxx b/sc/source/core/data/formulacell.cxx -index 18194e1..bbaff4f 100644 ---- a/sc/source/core/data/formulacell.cxx -+++ b/sc/source/core/data/formulacell.cxx -@@ -3496,57 +3496,6 @@ void ScFormulaCell::CompileDBFormula( sc::CompileFormulaContext& rCxt ) - } - } - --void ScFormulaCell::CompileDBFormula( sc::CompileFormulaContext& rCxt, bool bCreateFormulaString ) --{ -- // Two phases must be called after each other -- // 1. Formula String with old generated names -- // 2. Formula String with new generated names -- if ( bCreateFormulaString ) -- { -- bool bRecompile = false; -- pCode->Reset(); -- for ( FormulaToken* p = pCode->First(); p && !bRecompile; p = pCode->Next() ) -- { -- switch ( p->GetOpCode() ) -- { -- case ocBad: // DB Area eventually goes bad -- case ocColRowName: // in case of the same names -- case ocDBArea: // DB Area -- bRecompile = true; -- break; -- case ocName: -- if ( p->GetIndex() >= SC_START_INDEX_DB_COLL ) -- bRecompile = true; // DB Area -- break; -- default: -- ; // nothing -- } -- } -- if ( bRecompile ) -- { -- OUString aFormula = GetFormula(rCxt); -- if ( GetMatrixFlag() != MM_NONE && !aFormula.isEmpty() ) -- { -- if ( aFormula[ aFormula.getLength()-1 ] == '}' ) -- aFormula = aFormula.copy( 0, aFormula.getLength()-1 ); -- if ( aFormula[0] == '{' ) -- aFormula = aFormula.copy( 1 ); -- } -- EndListeningTo( pDocument ); -- pDocument->RemoveFromFormulaTree( this ); -- pCode->Clear(); -- SetHybridFormula(aFormula, rCxt.getGrammar()); -- } -- } -- else if ( !pCode->GetLen() && !aResult.GetHybridFormula().isEmpty() ) -- { -- rCxt.setGrammar(eTempGrammar); -- Compile(rCxt, aResult.GetHybridFormula(), false); -- aResult.SetToken( NULL); -- SetDirty(); -- } --} -- - void ScFormulaCell::CompileColRowNameFormula( sc::CompileFormulaContext& rCxt ) - { - pCode->Reset(); -diff --git a/sc/source/core/data/table4.cxx b/sc/source/core/data/table4.cxx -index bfefd30..aef4726 100644 ---- a/sc/source/core/data/table4.cxx -+++ b/sc/source/core/data/table4.cxx -@@ -2062,12 +2062,6 @@ void ScTable::CompileDBFormula( sc::CompileFormulaContext& rCxt ) - aCol[i].CompileDBFormula(rCxt); - } - --void ScTable::CompileDBFormula( sc::CompileFormulaContext& rCxt, bool bCreateFormulaString ) --{ -- for (SCCOL i = 0; i <= MAXCOL; ++i) -- aCol[i].CompileDBFormula(rCxt, bCreateFormulaString); --} -- - void ScTable::CompileColRowNameFormula( sc::CompileFormulaContext& rCxt ) - { - for (SCCOL i = 0; i <= MAXCOL; ++i) -diff --git a/sc/source/core/data/table7.cxx b/sc/source/core/data/table7.cxx -index b427617..1ede729 100644 ---- a/sc/source/core/data/table7.cxx -+++ b/sc/source/core/data/table7.cxx -@@ -50,11 +50,18 @@ void ScTable::PreprocessRangeNameUpdate( - aCol[i].PreprocessRangeNameUpdate(rEndListenCxt, rCompileCxt); - } - --void ScTable::PostprocessRangeNameUpdate( -+void ScTable::PreprocessDBDataUpdate( -+ sc::EndListeningContext& rEndListenCxt, sc::CompileFormulaContext& rCompileCxt ) -+{ -+ for (SCCOL i = 0; i <= MAXCOL; ++i) -+ aCol[i].PreprocessDBDataUpdate(rEndListenCxt, rCompileCxt); -+} -+ -+void ScTable::CompileHybridFormula( - sc::StartListeningContext& rStartListenCxt, sc::CompileFormulaContext& rCompileCxt ) - { - for (SCCOL i = 0; i <= MAXCOL; ++i) -- aCol[i].PostprocessRangeNameUpdate(rStartListenCxt, rCompileCxt); -+ aCol[i].CompileHybridFormula(rStartListenCxt, rCompileCxt); - } - - void ScTable::UpdateScriptTypes( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2 ) -diff --git a/sc/source/ui/docshell/dbdocfun.cxx b/sc/source/ui/docshell/dbdocfun.cxx -index 900bf3e..29d2da1 100644 ---- a/sc/source/ui/docshell/dbdocfun.cxx -+++ b/sc/source/ui/docshell/dbdocfun.cxx -@@ -79,7 +79,7 @@ bool ScDBDocFunc::AddDBRange( const OUString& rName, const ScRange& rRange, sal_ - bool bCompile = !pDoc->IsImportingXML(); - bool bOk; - if ( bCompile ) -- pDoc->CompileDBFormula( sal_True ); // CreateFormulaString -+ pDoc->PreprocessDBDataUpdate(); - if ( rName == STR_DB_LOCAL_NONAME ) - { - pDoc->SetAnonymousDBData(rRange.aStart.Tab() , pNew); -@@ -90,7 +90,7 @@ bool ScDBDocFunc::AddDBRange( const OUString& rName, const ScRange& rRange, sal_ - bOk = pDocColl->getNamedDBs().insert(pNew); - } - if ( bCompile ) -- pDoc->CompileDBFormula( false ); // CompileFormulaString -+ pDoc->CompileHybridFormula(); - - if (!bOk) - { -@@ -128,9 +128,9 @@ bool ScDBDocFunc::DeleteDBRange(const OUString& rName) - if (bUndo) - pUndoColl = new ScDBCollection( *pDocColl ); - -- pDoc->CompileDBFormula( true ); // CreateFormulaString -+ pDoc->PreprocessDBDataUpdate(); - rDBs.erase(*p); -- pDoc->CompileDBFormula( false ); // CompileFormulaString -+ pDoc->CompileHybridFormula(); - - if (bUndo) - { -@@ -164,13 +164,13 @@ bool ScDBDocFunc::RenameDBRange( const OUString& rOld, const OUString& rNew ) - - ScDBCollection* pUndoColl = new ScDBCollection( *pDocColl ); - -- pDoc->CompileDBFormula(true); // CreateFormulaString -+ pDoc->PreprocessDBDataUpdate(); - rDBs.erase(*pOld); - bool bInserted = rDBs.insert(pNewData); - if (!bInserted) // Fehler -> alten Zustand wiederherstellen - pDoc->SetDBCollection(pUndoColl); // gehoert dann dem Dokument -- // -- pDoc->CompileDBFormula( false ); // CompileFormulaString -+ -+ pDoc->CompileHybridFormula(); - - if (bInserted) // Einfuegen hat geklappt - { -diff --git a/sc/source/ui/docshell/docfunc.cxx b/sc/source/ui/docshell/docfunc.cxx -index 2d85309..034f881 100644 ---- a/sc/source/ui/docshell/docfunc.cxx -+++ b/sc/source/ui/docshell/docfunc.cxx -@@ -4871,7 +4871,7 @@ bool ScDocFunc::SetNewRangeNames( ScRangeName* pNewRanges, bool bModifyDoc, SCTA - else - pDoc->SetRangeName( pNewRanges ); // takes ownership - if ( bCompile ) -- pDoc->PostprocessRangeNameUpdate(); -+ pDoc->CompileHybridFormula(); - - if (bModifyDoc) - { -@@ -4897,7 +4897,7 @@ void ScDocFunc::ModifyAllRangeNames( const boost::ptr_map - - pDoc->PreprocessRangeNameUpdate(); - pDoc->SetAllRangeNames(rRangeMap); -- pDoc->PostprocessRangeNameUpdate(); -+ pDoc->CompileHybridFormula(); - - aModificator.SetDocumentModified(); - SFX_APP()->Broadcast(SfxSimpleHint(SC_HINT_AREAS_CHANGED)); -diff --git a/sc/source/ui/docshell/docsh5.cxx b/sc/source/ui/docshell/docsh5.cxx -index ee63dcf..3c65fc0 100644 ---- a/sc/source/ui/docshell/docsh5.cxx -+++ b/sc/source/ui/docshell/docsh5.cxx -@@ -256,7 +256,7 @@ ScDBData* ScDocShell::GetDBData( const ScRange& rMarked, ScGetDBMode eMode, ScGe - OUString aNewName; - if (eMode==SC_DB_IMPORT) - { -- aDocument.CompileDBFormula( sal_True ); // CreateFormulaString -+ aDocument.PreprocessDBDataUpdate(); - pUndoColl = new ScDBCollection( *pColl ); // Undo fuer Import1-Bereich - - OUString aImport = ScGlobal::GetRscString( STR_DBNAME_IMPORT ); -@@ -289,7 +289,7 @@ ScDBData* ScDocShell::GetDBData( const ScRange& rMarked, ScGetDBMode eMode, ScGe - - if ( pUndoColl ) - { -- aDocument.CompileDBFormula( false ); // CompileFormulaString -+ aDocument.CompileHybridFormula(); - - ScDBCollection* pRedoColl = new ScDBCollection( *pColl ); - GetUndoManager()->AddUndoAction( new ScUndoDBData( this, pUndoColl, pRedoColl ) ); -diff --git a/sc/source/ui/undo/undocell.cxx b/sc/source/ui/undo/undocell.cxx -index 02f67a9..03f2288 100644 ---- a/sc/source/ui/undo/undocell.cxx -+++ b/sc/source/ui/undo/undocell.cxx -@@ -1059,7 +1059,7 @@ void ScUndoRangeNames::DoChange( sal_Bool bUndo ) - pDoc->SetRangeName( new ScRangeName( *pNewRanges ) ); - } - -- pDoc->PostprocessRangeNameUpdate(); -+ pDoc->CompileHybridFormula(); - - SFX_APP()->Broadcast( SfxSimpleHint( SC_HINT_AREAS_CHANGED ) ); - } -diff --git a/sc/source/ui/undo/undodat.cxx b/sc/source/ui/undo/undodat.cxx -index 57d0875..32af832 100644 ---- a/sc/source/ui/undo/undodat.cxx -+++ b/sc/source/ui/undo/undodat.cxx -@@ -1133,9 +1133,9 @@ void ScUndoDBData::Undo() - - sal_Bool bOldAutoCalc = pDoc->GetAutoCalc(); - pDoc->SetAutoCalc( false ); // Avoid unnecessary calculations -- pDoc->CompileDBFormula( sal_True ); // CreateFormulaString -+ pDoc->PreprocessDBDataUpdate(); - pDoc->SetDBCollection( new ScDBCollection(*pUndoColl), sal_True ); -- pDoc->CompileDBFormula( false ); // CompileFormulaString -+ pDoc->CompileHybridFormula(); - pDoc->SetAutoCalc( bOldAutoCalc ); - - SFX_APP()->Broadcast( SfxSimpleHint( SC_HINT_DBAREAS_CHANGED ) ); -@@ -1151,9 +1151,9 @@ void ScUndoDBData::Redo() - - sal_Bool bOldAutoCalc = pDoc->GetAutoCalc(); - pDoc->SetAutoCalc( false ); // Avoid unnecessary calculations -- pDoc->CompileDBFormula( sal_True ); // CreateFormulaString -+ pDoc->PreprocessDBDataUpdate(); - pDoc->SetDBCollection( new ScDBCollection(*pRedoColl), sal_True ); -- pDoc->CompileDBFormula( false ); // CompileFormulaString -+ pDoc->CompileHybridFormula(); - pDoc->SetAutoCalc( bOldAutoCalc ); - - SFX_APP()->Broadcast( SfxSimpleHint( SC_HINT_DBAREAS_CHANGED ) ); -diff --git a/sc/source/ui/undo/undorangename.cxx b/sc/source/ui/undo/undorangename.cxx -index 172f802..9a92b77 100644 ---- a/sc/source/ui/undo/undorangename.cxx -+++ b/sc/source/ui/undo/undorangename.cxx -@@ -79,7 +79,7 @@ void ScUndoAllRangeNames::DoChange(const boost::ptr_map& - - rDoc.PreprocessRangeNameUpdate(); - rDoc.SetAllRangeNames(rNames); -- rDoc.PostprocessRangeNameUpdate(); -+ rDoc.CompileHybridFormula(); - - SFX_APP()->Broadcast(SfxSimpleHint(SC_HINT_AREAS_CHANGED)); - } -diff --git a/sc/source/ui/unoobj/nameuno.cxx b/sc/source/ui/unoobj/nameuno.cxx -index 87ed766..3c3273c 100644 ---- a/sc/source/ui/unoobj/nameuno.cxx -+++ b/sc/source/ui/unoobj/nameuno.cxx -@@ -751,7 +751,7 @@ void ScNamedRangesObj::lock() - /** called from the XActionLockable interface methods on final unlock */ - void ScNamedRangesObj::unlock() - { -- pDocShell->GetDocument()->PostprocessRangeNameUpdate(); -+ pDocShell->GetDocument()->CompileHybridFormula(); - } - - // document::XActionLockable -diff --git a/sc/source/ui/view/dbfunc.cxx b/sc/source/ui/view/dbfunc.cxx -index e5ebd37..1cd3223 100644 ---- a/sc/source/ui/view/dbfunc.cxx -+++ b/sc/source/ui/view/dbfunc.cxx -@@ -224,9 +224,9 @@ void ScDBFunc::NotifyCloseDbNameDlg( const ScDBCollection& rNewColl, const std:: - - // register target in SBA no longer necessary - -- pDoc->CompileDBFormula( sal_True ); // CreateFormulaString -+ pDoc->PreprocessDBDataUpdate(); - pDoc->SetDBCollection( new ScDBCollection( rNewColl ) ); -- pDoc->CompileDBFormula( false ); // CompileFormulaString -+ pDoc->CompileHybridFormula(); - pOldColl = NULL; - pDocShell->PostPaint(ScRange(0, 0, 0, MAXCOL, MAXROW, MAXTAB), PAINT_GRID); - aModificator.SetDocumentModified(); -diff --git a/sc/source/ui/view/viewfunc.cxx b/sc/source/ui/view/viewfunc.cxx -index e308cad..13a785b 100644 ---- a/sc/source/ui/view/viewfunc.cxx -+++ b/sc/source/ui/view/viewfunc.cxx -@@ -2805,7 +2805,7 @@ bool ScViewFunc::InsertName( const OUString& rName, const OUString& rSymbol, - bOk = true; - pNewEntry = NULL; // never delete, insert took ownership - -- pDoc->PostprocessRangeNameUpdate(); -+ pDoc->CompileHybridFormula(); - - aModificator.SetDocumentModified(); - SFX_APP()->Broadcast( SfxSimpleHint( SC_HINT_AREAS_CHANGED ) ); --- -1.9.3 - diff --git a/SOURCES/0065-Related-fdo-81641-create-new-styles-with-an-initial-.patch b/SOURCES/0065-Related-fdo-81641-create-new-styles-with-an-initial-.patch deleted file mode 100644 index 50bc26f..0000000 --- a/SOURCES/0065-Related-fdo-81641-create-new-styles-with-an-initial-.patch +++ /dev/null @@ -1,200 +0,0 @@ -From 30ef30970073b969430011da25e9412ffc217e8b Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= -Date: Thu, 24 Jul 2014 11:55:46 +0100 -Subject: [PATCH 065/137] Related: fdo#81641 create new styles with an initial - name -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -instead of creating with a blank name and changing it later - -this way undo of a style creation is initialized with its name and so create a -style followed by deleting a style and undoing all those steps doesn't crash - -(cherry picked from commit e904562af54545684b32d2042ded6bdb9459edca) - -Conflicts: - include/sfx2/styledlg.hxx - sw/source/uibase/app/docst.cxx - -Change-Id: Ida7a34410d5d7b05edcb86950aabb3c672b82c8f - -style category listbox depends on being unsorted - -regression from - -commit 6ecfbf153a7c11c63d208630ac6a27064058099d -Author: Caolán McNamara -Date: Wed Mar 13 15:10:25 2013 +0000 - - drop unused resources and toggle label to activate replacement widget - -Change-Id: I65ca8ec58ed984120f3c2e7ba68507cbf8acf089 -(cherry picked from commit 11fab6b705638359b2ca0e3e85590aa7cc70a03a) - -Related: fdo#81641 exclude 'all styles' category from organizer page - -it doesn't make sense to be able to assign a style to -'all styles' - -Change-Id: I632c62f293b553e436ceb8da0baf2bb39941fd39 -(cherry picked from commit 2223ff6cb99df097a357674801835c7a260b551d) - -Resolves: fdo#81641 the new style shouldn't be a conditional style - -regression from - -commit 715d79bcc59d68c77dc84a1038998dd873df92e9 -Author: Cédric Bosdonnat -Date: Fri Nov 30 11:51:46 2012 +0100 - - Styles & Formatting: added SFXSTYLEBIT_ALL_VISIBLE and show hidden styles - -commit 2fd9c2bf9af0c50dae3af3dbe5e22965ccdb4ae7 -Author: Cédric Bosdonnat -Date: Sun Nov 25 15:24:42 2012 +0100 - - Allow to hide styles in the "Styles & Formating" dialog - - In its current state, the feature only hides the styles. Things to sort - out are: - + Add some automatic filter to show hidden styles - + Make the visibility persist in the file format - -(cherry picked from commit 1af0e46102350114dd5e854b7692c640dae2727f) - -Conflicts: - sw/source/uibase/app/docst.cxx - -Change-Id: I7244d424765db0d5ed3aeaf380a8e1af56aa7eaf -Reviewed-on: https://gerrit.libreoffice.org/10503 -Reviewed-by: Michael Stahl -Tested-by: Michael Stahl ---- - include/sfx2/styledlg.hxx | 3 +++ - sfx2/source/dialog/mgetempl.cxx | 16 +++++----------- - sfx2/source/dialog/styledlg.cxx | 14 ++++++++++++++ - sw/source/ui/app/docst.cxx | 6 +++++- - 4 files changed, 27 insertions(+), 12 deletions(-) - -diff --git a/include/sfx2/styledlg.hxx b/include/sfx2/styledlg.hxx -index b53e8cd..8888473 100644 ---- a/include/sfx2/styledlg.hxx -+++ b/include/sfx2/styledlg.hxx -@@ -25,6 +25,7 @@ - #include - - class SfxStyleSheetBase; -+class SfxStyleSheetBasePool; - - class SFX2_DLLPUBLIC SfxStyleDialog: public SfxTabDialog - { -@@ -45,6 +46,8 @@ public: - const SfxStyleSheetBase& GetStyleSheet() const { return *pStyle; } - - virtual short Ok(); -+ -+ static OUString GenerateUnusedName(SfxStyleSheetBasePool &rPool); - }; - - #endif -diff --git a/sfx2/source/dialog/mgetempl.cxx b/sfx2/source/dialog/mgetempl.cxx -index cedbdc1..97dcf81 100644 ---- a/sfx2/source/dialog/mgetempl.cxx -+++ b/sfx2/source/dialog/mgetempl.cxx -@@ -67,7 +67,9 @@ SfxManageStyleSheetPage::SfxManageStyleSheetPage(Window* pParent, const SfxItemS - m_pBaseLb->setMaxWidthChars(nMaxWidth); - get(m_pFilterFt, "categoryft"); - get(m_pFilterLb, "category"); -- m_pFilterLb->SetStyle(m_pFilterLb->GetStyle() | WB_SORT); -+ //note that the code depends on categories not being lexically -+ //sorted, so if its changed to sorted, the code needs to -+ //be adapted to be position unaware - m_pFilterLb->setMaxWidthChars(nMaxWidth); - get(m_pDescFt, "desc"); - -@@ -94,16 +96,7 @@ SfxManageStyleSheetPage::SfxManageStyleSheetPage(Window* pParent, const SfxItemS - if ( pStyle->GetName().isEmpty() && pPool ) - { - // NullString as Name -> generate Name -- OUString aNoName( SfxResId(STR_NONAME).toString() ); -- sal_uInt16 nNo = 1; -- OUString aNo( aNoName ); -- aNoName += OUString::number( nNo ); -- while ( pPool->Find( aNoName ) ) -- { -- ++nNo; -- aNoName = aNo; -- aNoName += OUString::number( nNo ); -- } -+ OUString aNoName(SfxStyleDialog::GenerateUnusedName(*pPool)); - pStyle->SetName( aNoName ); - aName = aNoName; - aFollow = pStyle->GetFollow(); -@@ -193,6 +186,7 @@ SfxManageStyleSheetPage::SfxManageStyleSheetPage(Window* pParent, const SfxItemS - - if ( pTupel->nFlags != SFXSTYLEBIT_AUTO && - pTupel->nFlags != SFXSTYLEBIT_USED && -+ pTupel->nFlags != SFXSTYLEBIT_ALL_VISIBLE && - pTupel->nFlags != SFXSTYLEBIT_ALL ) - { - m_pFilterLb->InsertEntry( pTupel->aName, nIdx ); -diff --git a/sfx2/source/dialog/styledlg.cxx b/sfx2/source/dialog/styledlg.cxx -index 6b4051d..d4945a8 100644 ---- a/sfx2/source/dialog/styledlg.cxx -+++ b/sfx2/source/dialog/styledlg.cxx -@@ -147,5 +147,19 @@ IMPL_LINK( SfxStyleDialog, CancelHdl, Button *, pButton ) - return 0; - } - -+OUString SfxStyleDialog::GenerateUnusedName(SfxStyleSheetBasePool &rPool) -+{ -+ OUString aNoName(SfxResId(STR_NONAME).toString()); -+ sal_uInt16 nNo = 1; -+ OUString aNo(aNoName); -+ aNoName += OUString::number(nNo); -+ while (rPool.Find(aNoName)) -+ { -+ ++nNo; -+ aNoName = aNo; -+ aNoName += OUString::number(nNo); -+ } -+ return aNoName; -+} - - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -diff --git a/sw/source/ui/app/docst.cxx b/sw/source/ui/app/docst.cxx -index 4c05499..1f12a30 100644 ---- a/sw/source/ui/app/docst.cxx -+++ b/sw/source/ui/app/docst.cxx -@@ -25,6 +25,7 @@ - - #include - #include -+#include - #include - #include - #include -@@ -285,6 +286,9 @@ void SwDocShell::ExecStyleSheet( SfxRequest& rReq ) - sal_False, &pItem )) - sParent = ((const SfxStringItem*)pItem)->GetValue(); - -+ if (sName.isEmpty() && mxBasePool.get()) -+ sName = SfxStyleDialog::GenerateUnusedName(*mxBasePool); -+ - nRet = Edit( sName, sParent, nFamily, nMask, sal_True, OString(), 0, rReq.IsAPI() ); - } - break; -@@ -615,7 +619,7 @@ sal_uInt16 SwDocShell::Edit( - - if( bNew ) - { -- if( SFXSTYLEBIT_ALL != nMask && SFXSTYLEBIT_USED != nMask ) -+ if (SFXSTYLEBIT_ALL != nMask && SFXSTYLEBIT_ALL_VISIBLE != nMask && SFXSTYLEBIT_USED != nMask) - nMask |= SFXSTYLEBIT_USERDEF; - else - nMask = SFXSTYLEBIT_USERDEF; --- -1.9.3 - diff --git a/SOURCES/0067-coverity-1194911-Unchecked-dynamic_cast.patch b/SOURCES/0067-coverity-1194911-Unchecked-dynamic_cast.patch deleted file mode 100644 index 76319fe..0000000 --- a/SOURCES/0067-coverity-1194911-Unchecked-dynamic_cast.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 0693b37fec987a8d443847d9b98d611def5ebfc1 Mon Sep 17 00:00:00 2001 -From: Miklos Vajna -Date: Sat, 29 Mar 2014 21:13:21 +0100 -Subject: [PATCH 067/137] coverity#1194911 Unchecked dynamic_cast - -Change-Id: I1e7f4bcd8f54219d86ad7a003469d5a486090f47 -(cherry picked from commit 8736c5222a8e83a1310713a92492e63198749467) -Reviewed-on: https://gerrit.libreoffice.org/10630 -Reviewed-by: Michael Stahl -Tested-by: Michael Stahl ---- - writerfilter/source/dmapper/TablePropertiesHandler.cxx | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/writerfilter/source/dmapper/TablePropertiesHandler.cxx b/writerfilter/source/dmapper/TablePropertiesHandler.cxx -index b54b262..3aa4427 100644 ---- a/writerfilter/source/dmapper/TablePropertiesHandler.cxx -+++ b/writerfilter/source/dmapper/TablePropertiesHandler.cxx -@@ -97,7 +97,7 @@ namespace dmapper { - - DomainMapperTableManager* pManager = dynamic_cast(m_pTableManager); - // In case any of the cells has the btLr cell direction, then an explicit minimal size will just hide the whole row, don't do that. -- if (pMeasureHandler->GetRowHeightSizeType() != text::SizeType::MIN || !pManager->HasBtlrCell()) -+ if (pMeasureHandler->GetRowHeightSizeType() != text::SizeType::MIN || !pManager || !pManager->HasBtlrCell()) - { - // In case a cell already wanted fixed size, we should not overwrite it here. - if (!pManager || !pManager->IsRowSizeTypeInserted()) --- -1.9.3 - diff --git a/SOURCES/0068-bnc-467459-fix-editeng-text-search-with-expanded-fie.patch b/SOURCES/0068-bnc-467459-fix-editeng-text-search-with-expanded-fie.patch deleted file mode 100644 index 088e917..0000000 --- a/SOURCES/0068-bnc-467459-fix-editeng-text-search-with-expanded-fie.patch +++ /dev/null @@ -1,445 +0,0 @@ -From 8220b70fe2dc270188751950ac6d872320db1aa2 Mon Sep 17 00:00:00 2001 -From: Michael Meeks -Date: Sun, 27 Jul 2014 00:21:50 -0400 -Subject: [PATCH 068/137] bnc#467459 - fix editeng text search with expanded - fields. -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -(cherry picked from commit 274b628a2b523eb45e297352a85f0177c6e747f0) - -Signed-off-by: Matúš Kukan - -Conflicts: - editeng/source/editeng/editdoc.cxx - editeng/source/editeng/editdoc.hxx - -Change-Id: If59d0e2f886e94148b81cb6cfcad067733fcb918 ---- - editeng/CppunitTest_editeng_core.mk | 1 + - editeng/qa/unit/core-test.cxx | 100 +++++++++++++++++++-- - editeng/source/editeng/editdoc.cxx | 173 ++++++++++++++++++++++++------------ - editeng/source/editeng/editdoc.hxx | 12 ++- - editeng/source/editeng/impedit4.cxx | 6 +- - 5 files changed, 226 insertions(+), 66 deletions(-) - -diff --git a/editeng/CppunitTest_editeng_core.mk b/editeng/CppunitTest_editeng_core.mk -index 301c760..962fd8f 100644 ---- a/editeng/CppunitTest_editeng_core.mk -+++ b/editeng/CppunitTest_editeng_core.mk -@@ -61,6 +61,7 @@ $(eval $(call gb_CppunitTest_use_components,editeng_core,\ - configmgr/source/configmgr \ - framework/util/fwk \ - i18npool/util/i18npool \ -+ i18npool/source/search/i18nsearch \ - linguistic/source/lng \ - sfx2/util/sfx \ - ucb/source/core/ucb1 \ -diff --git a/editeng/qa/unit/core-test.cxx b/editeng/qa/unit/core-test.cxx -index 338a6cb7..4e3da9b 100644 ---- a/editeng/qa/unit/core-test.cxx -+++ b/editeng/qa/unit/core-test.cxx -@@ -25,6 +25,9 @@ - #include "editeng/postitem.hxx" - #include "editeng/section.hxx" - #include "editeng/editobj.hxx" -+#include "editeng/flditem.hxx" -+#include "svl/srchitem.hxx" -+#include "rtl/strbuf.hxx" - - #include - -@@ -44,22 +47,22 @@ public: - - void testConstruction(); - -- /** -- * Test UNO service class that implements text field items. -- */ -+ /// Test UNO service class that implements text field items. - void testUnoTextFields(); - -- /** -- * AutoCorrect tests -- */ -+ /// AutoCorrect tests - void testAutocorrect(); - -+ /// Test hyperlinks -+ void testHyperlinkSearch(); -+ - void testSectionAttributes(); - - CPPUNIT_TEST_SUITE(Test); - CPPUNIT_TEST(testConstruction); - CPPUNIT_TEST(testUnoTextFields); - CPPUNIT_TEST(testAutocorrect); -+ CPPUNIT_TEST(testHyperlinkSearch); - CPPUNIT_TEST(testSectionAttributes); - CPPUNIT_TEST_SUITE_END(); - -@@ -340,6 +343,91 @@ void Test::testAutocorrect() - } - } - -+namespace { -+ class UrlEditEngine : public EditEngine -+ { -+ public: -+ UrlEditEngine(SfxItemPool *pPool) : EditEngine(pPool) {} -+ -+ virtual OUString CalcFieldValue( const SvxFieldItem&, sal_Int32, sal_uInt16, Color*&, Color*& ) -+ { -+ return OUString("jim@bob.com"); // a sophisticated view of value: -+ } -+ }; -+} -+ -+// Odd accounting for hyperlink position & size etc. -+// https://bugzilla.novell.com/show_bug.cgi?id=467459 -+void Test::testHyperlinkSearch() -+{ -+ UrlEditEngine aEngine(mpItemPool); -+ EditDoc &rDoc = aEngine.GetEditDoc(); -+ -+ OUString aSampleText = "Please write email to . if you find a fish(not a dog)."; -+ aEngine.SetText(aSampleText); -+ -+ CPPUNIT_ASSERT_MESSAGE("set text", rDoc.GetParaAsString(sal_Int32(0)) == aSampleText); -+ -+ ContentNode *pNode = rDoc.GetObject(0); -+ EditSelection aSel(EditPaM(pNode, 22), EditPaM(pNode, 22)); -+ SvxURLField aURLField("mailto:///jim@bob.com", "jim@bob.com", -+ SVXURLFORMAT_REPR); -+ SvxFieldItem aField(aURLField, EE_FEATURE_FIELD); -+ -+ aEngine.InsertField(aSel, aField); -+ aEngine.UpdateFields(); -+ -+ OUString aContent = pNode->GetExpandedText(); -+ CPPUNIT_ASSERT_MESSAGE("get text", aContent == -+ "Please write email to jim@bob.com. if you find a fish(not a dog)."); -+ CPPUNIT_ASSERT_MESSAGE("wrong length", rDoc.GetTextLen() == (sal_uLong)aContent.getLength()); -+ -+ // Check expansion and positioning re-work -+ CPPUNIT_ASSERT_MESSAGE("wrong length", pNode->GetExpandedLen() == -+ (sal_uLong)aContent.getLength()); -+ for (sal_Int32 n = 0; n < aContent.getLength(); n++) -+ { -+ sal_Int32 nStart = n, nEnd = n; -+ pNode->UnExpandPositions(nStart,nEnd); -+ CPPUNIT_ASSERT_MESSAGE("out of bound start", nStart < pNode->Len()); -+ CPPUNIT_ASSERT_MESSAGE("out of bound end", nEnd <= pNode->Len()); -+ } -+ -+ static const struct { -+ sal_Int32 mnStart, mnEnd; -+ sal_Int32 mnNewStart, mnNewEnd; -+ } aTrickyOnes[] = { -+ { 0, 1, /* -> */ 0, 1 }, -+ { 21, 25, /* -> */ 21, 23 }, // the field is really just one char -+ { 25, 27, /* -> */ 22, 23 }, -+ { 50, 56, /* -> */ 40, 46 } -+ }; -+ for (size_t n = 0; n < SAL_N_ELEMENTS(aTrickyOnes); n++) -+ { -+ sal_Int32 nStart = aTrickyOnes[n].mnStart; -+ sal_Int32 nEnd = aTrickyOnes[n].mnEnd; -+ pNode->UnExpandPositions(nStart,nEnd); -+ -+ rtl::OStringBuffer aBuf; -+ aBuf = "bound check start is "; -+ aBuf.append(nStart).append(" but should be ").append(aTrickyOnes[n].mnNewStart); -+ aBuf.append(" in row ").append((sal_Int32)n); -+ CPPUNIT_ASSERT_MESSAGE(aBuf.getStr(), nStart == aTrickyOnes[n].mnNewStart); -+ aBuf = "bound check end is "; -+ aBuf.append(nEnd).append(" but should be ").append(aTrickyOnes[n].mnNewEnd); -+ aBuf.append(" in row ").append((sal_Int32)n); -+ CPPUNIT_ASSERT_MESSAGE(aBuf.getStr(), nEnd == aTrickyOnes[n].mnNewEnd); -+ } -+ -+ SvxSearchItem aItem(1); //SID_SEARCH_ITEM); -+ aItem.SetBackward(false); -+ aItem.SetSelection(false); -+ aItem.SetSearchString("fish"); -+ CPPUNIT_ASSERT_MESSAGE("no fish", aEngine.HasText(aItem)); -+ aItem.SetSearchString("dog"); -+ CPPUNIT_ASSERT_MESSAGE("no dog", aEngine.HasText(aItem)); -+} -+ - bool hasBold(const editeng::Section& rSecAttr) - { - std::vector::const_iterator it = rSecAttr.maAttributes.begin(), itEnd = rSecAttr.maAttributes.end(); -diff --git a/editeng/source/editeng/editdoc.cxx b/editeng/source/editeng/editdoc.cxx -index 7eb4398..6b5d6f1 100644 ---- a/editeng/source/editeng/editdoc.cxx -+++ b/editeng/source/editeng/editdoc.cxx -@@ -1699,6 +1699,119 @@ const OUString& ContentNode::GetString() const - return maString; - } - -+sal_uLong ContentNode::GetExpandedLen() const -+{ -+ sal_uLong nLen = maString.getLength(); -+ -+ // Fields can be longer than the placeholder in the Node -+ const CharAttribList::AttribsType& rAttrs = GetCharAttribs().GetAttribs(); -+ for (sal_Int32 nAttr = rAttrs.size(); nAttr; ) -+ { -+ const EditCharAttrib& rAttr = rAttrs[--nAttr]; -+ if (rAttr.Which() == EE_FEATURE_FIELD) -+ { -+ nLen += static_cast(rAttr).GetFieldValue().getLength(); -+ --nLen; // Standalone, to avoid corner cases when previous getLength() returns 0 -+ } -+ } -+ -+ return nLen; -+} -+ -+OUString ContentNode::GetExpandedText(sal_Int32 nStartPos, sal_Int32 nEndPos, bool bResolveFields) const -+{ -+ if ( nEndPos < 0 || nEndPos > Len() ) -+ nEndPos = Len(); -+ -+ DBG_ASSERT( nStartPos <= nEndPos, "Start and End reversed?" ); -+ -+ sal_Int32 nIndex = nStartPos; -+ OUString aStr; -+ const EditCharAttrib* pNextFeature = GetCharAttribs().FindFeature( nIndex ); -+ while ( nIndex < nEndPos ) -+ { -+ sal_Int32 nEnd = nEndPos; -+ if ( pNextFeature && ( pNextFeature->GetStart() < nEnd ) ) -+ nEnd = pNextFeature->GetStart(); -+ else -+ pNextFeature = 0; // Feature does not interest the below -+ -+ DBG_ASSERT( nEnd >= nIndex, "End in front of the index?" ); -+ //!! beware of sub string length of -1 -+ if (nEnd > nIndex) -+ aStr += GetString().copy(nIndex, nEnd - nIndex); -+ -+ if ( pNextFeature ) -+ { -+ switch ( pNextFeature->GetItem()->Which() ) -+ { -+ case EE_FEATURE_TAB: aStr += "\t"; -+ break; -+ case EE_FEATURE_LINEBR: aStr += "\x0A"; -+ break; -+ case EE_FEATURE_FIELD: -+ if ( bResolveFields ) -+ aStr += static_cast(pNextFeature)->GetFieldValue(); -+ break; -+ default: OSL_FAIL( "What feature?" ); -+ } -+ pNextFeature = GetCharAttribs().FindFeature( ++nEnd ); -+ } -+ nIndex = nEnd; -+ } -+ return aStr; -+} -+ -+void ContentNode::UnExpandPosition( sal_Int32 &rPos, bool bBiasStart ) -+{ -+ sal_Int32 nOffset = 0; -+ -+ const CharAttribList::AttribsType& rAttrs = GetCharAttribs().GetAttribs(); -+ for (size_t nAttr = 0; nAttr < rAttrs.size(); ++nAttr ) -+ { -+ const EditCharAttrib& rAttr = rAttrs[nAttr]; -+ assert (!(nAttr < rAttrs.size() - 1) || -+ rAttrs[nAttr].GetStart() < rAttrs[nAttr + 1].GetStart()); -+ -+ nOffset = rAttr.GetStart(); -+ -+ if (nOffset >= rPos) // happens after the position -+ return; -+ -+ sal_Int32 nChunk = 0; -+ if (rAttr.Which() == EE_FEATURE_FIELD) -+ { -+ nChunk += static_cast(rAttr).GetFieldValue().getLength(); -+ nChunk--; // Character representing the field in the string -+ -+ if (nOffset + nChunk >= rPos) // we're inside the field -+ { -+ if (bBiasStart) -+ rPos = rAttr.GetStart(); -+ else -+ rPos = rAttr.GetEnd(); -+ return; -+ } -+ // Adjust for the position -+ rPos -= nChunk; -+ } -+ } -+ assert (rPos <= Len()); -+} -+ -+/* -+ * Fields are represented by a single character in the underlying string -+ * and/or selection, however, they can be expanded to the full value of -+ * the field. When we're dealing with selection / offsets however we need -+ * to deal in character positions inside the real (unexpanded) string. -+ * This method maps us back to character offsets. -+ */ -+void ContentNode::UnExpandPositions( sal_Int32 &rStartPos, sal_Int32 &rEndPos ) -+{ -+ UnExpandPosition( rStartPos, true ); -+ UnExpandPosition( rEndPos, false ); -+} -+ - void ContentNode::SetChar(sal_uInt16 nPos, sal_Unicode c) - { - maString = maString.replaceAt(nPos, 1, OUString(c)); -@@ -2141,49 +2254,9 @@ OUString EditDoc::GetParaAsString( sal_Int32 nNode ) const - } - - OUString EditDoc::GetParaAsString( -- const ContentNode* pNode, sal_uInt16 nStartPos, sal_uInt16 nEndPos, bool bResolveFields) const -+ const ContentNode* pNode, sal_Int32 nStartPos, sal_Int32 nEndPos, bool bResolveFields) const - { -- if ( nEndPos > pNode->Len() ) -- nEndPos = pNode->Len(); -- -- DBG_ASSERT( nStartPos <= nEndPos, "Start and End reversed?" ); -- -- sal_uInt16 nIndex = nStartPos; -- OUString aStr; -- const EditCharAttrib* pNextFeature = pNode->GetCharAttribs().FindFeature( nIndex ); -- while ( nIndex < nEndPos ) -- { -- sal_uInt16 nEnd = nEndPos; -- if ( pNextFeature && ( pNextFeature->GetStart() < nEnd ) ) -- nEnd = pNextFeature->GetStart(); -- else -- pNextFeature = 0; // Feature does not interest the below -- -- DBG_ASSERT( nEnd >= nIndex, "End in front of the index?" ); -- //!! beware of sub string length of -1 which is also defined as STRING_LEN and -- //!! thus would result in adding the whole sub string up to the end of the node !! -- if (nEnd > nIndex) -- aStr += pNode->GetString().copy(nIndex, nEnd - nIndex); -- -- if ( pNextFeature ) -- { -- switch ( pNextFeature->GetItem()->Which() ) -- { -- case EE_FEATURE_TAB: aStr += "\t"; -- break; -- case EE_FEATURE_LINEBR: aStr += "\x0A"; -- break; -- case EE_FEATURE_FIELD: -- if ( bResolveFields ) -- aStr += static_cast(pNextFeature)->GetFieldValue(); -- break; -- default: OSL_FAIL( "What feature?" ); -- } -- pNextFeature = pNode->GetCharAttribs().FindFeature( ++nEnd ); -- } -- nIndex = nEnd; -- } -- return aStr; -+ return pNode->GetExpandedText(nStartPos, nEndPos, bResolveFields); - } - - EditPaM EditDoc::GetStartPaM() const -@@ -2204,21 +2277,7 @@ sal_uLong EditDoc::GetTextLen() const - for ( sal_Int32 nNode = 0; nNode < Count(); nNode++ ) - { - const ContentNode* pNode = GetObject( nNode ); -- nLen += pNode->Len(); -- // Fields can be longer than the placeholder in the Node -- const CharAttribList::AttribsType& rAttrs = pNode->GetCharAttribs().GetAttribs(); -- for (size_t nAttr = rAttrs.size(); nAttr; ) -- { -- const EditCharAttrib& rAttr = rAttrs[--nAttr]; -- if (rAttr.Which() == EE_FEATURE_FIELD) -- { -- sal_Int32 nFieldLen = static_cast(rAttr).GetFieldValue().getLength(); -- if ( !nFieldLen ) -- nLen--; -- else -- nLen += nFieldLen-1; -- } -- } -+ nLen += pNode->GetExpandedLen(); - } - return nLen; - } -diff --git a/editeng/source/editeng/editdoc.hxx b/editeng/source/editeng/editdoc.hxx -index dd04503..aba2a07 100644 ---- a/editeng/source/editeng/editdoc.hxx -+++ b/editeng/source/editeng/editdoc.hxx -@@ -247,6 +247,8 @@ private: - CharAttribList aCharAttribList; - boost::scoped_ptr mpWrongList; - -+ void UnExpandPosition( sal_Int32 &rStartPos, bool bBiasStart ); -+ - public: - ContentNode( SfxItemPool& rItemPool ); - ContentNode( const OUString& rStr, const ContentAttribs& rContentAttribs ); -@@ -282,8 +284,16 @@ public: - sal_uInt16 Len() const; - const OUString& GetString() const; - -+ /// return length including expanded fields -+ sal_uLong GetExpandedLen() const; -+ /// return content including expanded fields -+ OUString GetExpandedText(sal_Int32 nStartPos = 0, sal_Int32 nEndPos = -1, bool bResolveFields = true) const; -+ /// re-write offsets in the expanded text to string offsets -+ void UnExpandPositions( sal_Int32 &rStartPos, sal_Int32 &rEndPos ); -+ - void SetChar(sal_uInt16 nPos, sal_Unicode c); - void Insert(const OUString& rStr, sal_uInt16 nPos); -+ - void Append(const OUString& rStr); - void Erase(sal_uInt16 nPos); - void Erase(sal_uInt16 nPos, sal_uInt16 nCount); -@@ -769,7 +779,7 @@ public: - sal_uLong GetTextLen() const; - - OUString GetParaAsString( sal_Int32 nNode ) const; -- OUString GetParaAsString(const ContentNode* pNode, sal_uInt16 nStartPos = 0, sal_uInt16 nEndPos = 0xFFFF, bool bResolveFields = true) const; -+ OUString GetParaAsString(const ContentNode* pNode, sal_Int32 nStartPos = 0, sal_Int32 nEndPos = -1, bool bResolveFields = true) const; - - EditPaM GetStartPaM() const; - EditPaM GetEndPaM() const; -diff --git a/editeng/source/editeng/impedit4.cxx b/editeng/source/editeng/impedit4.cxx -index b4ff56e..f4a9953 100644 ---- a/editeng/source/editeng/impedit4.cxx -+++ b/editeng/source/editeng/impedit4.cxx -@@ -2647,7 +2647,7 @@ sal_Bool ImpEditEngine::ImpSearch( const SvxSearchItem& rSearchItem, - ContentNode* pNode = aEditDoc.GetObject( nNode ); - - sal_Int32 nStartPos = 0; -- sal_Int32 nEndPos = pNode->Len(); -+ sal_Int32 nEndPos = pNode->GetExpandedLen(); - if ( nNode == nStartNode ) - { - if ( bBack ) -@@ -2664,7 +2664,7 @@ sal_Bool ImpEditEngine::ImpSearch( const SvxSearchItem& rSearchItem, - } - - // Searching ... -- OUString aParaStr( GetEditDoc().GetParaAsString( pNode ) ); -+ OUString aParaStr( pNode->GetExpandedText() ); - bool bFound = false; - if ( bBack ) - { -@@ -2681,6 +2681,8 @@ sal_Bool ImpEditEngine::ImpSearch( const SvxSearchItem& rSearchItem, - } - if ( bFound ) - { -+ pNode->UnExpandPositions( nStartPos, nEndPos ); -+ - rFoundSel.Min().SetNode( pNode ); - rFoundSel.Min().SetIndex( nStartPos ); - rFoundSel.Max().SetNode( pNode ); --- -1.9.3 - diff --git a/SOURCES/0069-bnc-885548-Reset-the-default-user-to-the-document-ow.patch b/SOURCES/0069-bnc-885548-Reset-the-default-user-to-the-document-ow.patch deleted file mode 100644 index 9821b90..0000000 --- a/SOURCES/0069-bnc-885548-Reset-the-default-user-to-the-document-ow.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 1f2d0f87e85375a86289b79dad7ed7d1b9014dc8 Mon Sep 17 00:00:00 2001 -From: Kohei Yoshida -Date: Tue, 29 Jul 2014 10:33:04 -0400 -Subject: [PATCH 069/137] bnc#885548: Reset the default user to the document - owner at the end. -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Otherwise the user name is set to the name of the user in the last revision -record, which will be used when recording new revisions. - -Change-Id: I9b5e39c3b3a85614af67f86db9ed2bb3509a9e2b -(cherry picked from commit 227d3e72b0b29b73440157b64d6fb56fa151e05e) -Reviewed-on: https://gerrit.libreoffice.org/10610 -Reviewed-by: Matúš Kukan -Tested-by: Matúš Kukan ---- - sc/source/filter/oox/revisionfragment.cxx | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/sc/source/filter/oox/revisionfragment.cxx b/sc/source/filter/oox/revisionfragment.cxx -index dd8cc4b..463b663 100644 ---- a/sc/source/filter/oox/revisionfragment.cxx -+++ b/sc/source/filter/oox/revisionfragment.cxx -@@ -249,6 +249,7 @@ void RevisionHeadersFragment::finalizeImport() - { - ScDocument& rDoc = getScDocument(); - o3tl::heap_ptr pCT(new ScChangeTrack(&rDoc)); -+ OUString aSelfUser = pCT->GetUser(); // owner of this document. - pCT->SetUseFixDateTime(true); - - const oox::core::Relations& rRels = getRelations(); -@@ -268,6 +269,7 @@ void RevisionHeadersFragment::finalizeImport() - importOoxFragment(xFragment, *xParser); - } - -+ pCT->SetUser(aSelfUser); // set the default user to the document owner. - rDoc.SetChangeTrack(pCT.release()); - - // Turn on visibility of tracked changes. --- -1.9.3 - diff --git a/SOURCES/0070-fdo-81330-When-moving-to-a-different-sheet-set-3D-fl.patch b/SOURCES/0070-fdo-81330-When-moving-to-a-different-sheet-set-3D-fl.patch deleted file mode 100644 index 48b9305..0000000 --- a/SOURCES/0070-fdo-81330-When-moving-to-a-different-sheet-set-3D-fl.patch +++ /dev/null @@ -1,48 +0,0 @@ -From ca8a6d4ff366f0ad7c2da6b76f76f624c593592f Mon Sep 17 00:00:00 2001 -From: Kohei Yoshida -Date: Tue, 29 Jul 2014 22:33:56 -0400 -Subject: [PATCH 070/137] fdo#81330: When moving to a different sheet, set 3D - flag on. - -Change-Id: I16c6e687259635c4d0ac0e5dab0140941b409bc8 -(cherry picked from commit 5e55d5ffb70437e917e4092f4030d5a454fd20d6) -Reviewed-on: https://gerrit.libreoffice.org/10637 -Reviewed-by: Markus Mohrhard -Tested-by: Markus Mohrhard ---- - sc/source/core/tool/token.cxx | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx -index c289960..d392550 100644 ---- a/sc/source/core/tool/token.cxx -+++ b/sc/source/core/tool/token.cxx -@@ -2827,6 +2827,8 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceOnMove( - ScRange aOldRange = rCxt.maRange; - aOldRange.Move(-rCxt.mnColDelta, -rCxt.mnRowDelta, -rCxt.mnTabDelta); - -+ bool b3DFlag = rOldPos.Tab() != rNewPos.Tab(); -+ - FormulaToken** p = pCode; - FormulaToken** pEnd = p + static_cast(nLen); - for (; p != pEnd; ++p) -@@ -2845,6 +2847,7 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceOnMove( - } - - rRef.SetAddress(aAbs, rNewPos); -+ rRef.SetFlag3D(b3DFlag); - } - break; - case svDoubleRef: -@@ -2859,6 +2862,8 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceOnMove( - } - - rRef.SetRange(aAbs, rNewPos); -+ if (b3DFlag) -+ rRef.Ref1.SetFlag3D(true); - } - break; - case svIndex: --- -1.9.3 - diff --git a/SOURCES/0071-fdo-80846-Get-the-parameter-order-right.patch b/SOURCES/0071-fdo-80846-Get-the-parameter-order-right.patch deleted file mode 100644 index bcb4a9c..0000000 --- a/SOURCES/0071-fdo-80846-Get-the-parameter-order-right.patch +++ /dev/null @@ -1,32 +0,0 @@ -From b50f1343fb51baf244761c424f3bb64be8125e42 Mon Sep 17 00:00:00 2001 -From: Kohei Yoshida -Date: Tue, 29 Jul 2014 17:19:28 -0400 -Subject: [PATCH 071/137] fdo#80846: Get the parameter order right. - -It's column, row, tab in this order, not tab, column row. - -Change-Id: I32e69a403feaf18532c7ac241fa2a98fc65a4ba7 -(cherry picked from commit 1fcc30503549b47046c84333af542ed739f685ba) -Reviewed-on: https://gerrit.libreoffice.org/10633 -Reviewed-by: Markus Mohrhard -Tested-by: Markus Mohrhard ---- - sc/source/ui/undo/undobase.cxx | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/sc/source/ui/undo/undobase.cxx b/sc/source/ui/undo/undobase.cxx -index 6342910..bc7a5e3 100644 ---- a/sc/source/ui/undo/undobase.cxx -+++ b/sc/source/ui/undo/undobase.cxx -@@ -170,7 +170,7 @@ public: - if (!bVal) - return; - -- ScRange aRange(mnCurTab, mnCurCol, nRow1, mnCurTab, mnCurCol, nRow2); -+ ScRange aRange(mnCurCol, nRow1, mnCurTab, mnCurCol, nRow2, mnCurTab); - mrDoc.BroadcastCells(aRange, SC_HINT_DATACHANGED); - }; - }; --- -1.9.3 - diff --git a/SOURCES/0072-fdo-78502-writerfilter-RTF-import-handle-u-keyword-i.patch b/SOURCES/0072-fdo-78502-writerfilter-RTF-import-handle-u-keyword-i.patch deleted file mode 100644 index 934a70c..0000000 --- a/SOURCES/0072-fdo-78502-writerfilter-RTF-import-handle-u-keyword-i.patch +++ /dev/null @@ -1,86 +0,0 @@ -From 9f31376e9c55a00905da8f025083d307bc7afa42 Mon Sep 17 00:00:00 2001 -From: Michael Stahl -Date: Fri, 18 Jul 2014 23:40:40 +0200 -Subject: [PATCH 072/137] fdo#78502: writerfilter: RTF import: handle \u - keyword inside levelnumbers - -The ";" terminates an entry and shall not be inserted as text, -even if some over-engineered producer encodes it as {\uc1 \u59 ?}. - -Also, remove the special-casing of the \leveltext destination, since the -bugdoc does contain \uc inside it and it's not obvious why that should -be ignored. - -(cherry picked from commit e93f0852477b44df986807860c821319a921b199) - -fdo#78502: actually empty parameter to getParagraph() is not tested -(cherry picked from commit b9dca968c6fd0ab5ca140c65b0e54d153cd34986) - -Change-Id: I1e19c9df39597cb1b22bbda97853c829d7812e29 -Reviewed-on: https://gerrit.libreoffice.org/10398 -Reviewed-by: Miklos Vajna -Tested-by: Miklos Vajna ---- - sw/qa/extras/rtfimport/data/fdo78502.rtf | 12 ++++++++++++ - sw/qa/extras/rtfimport/rtfimport.cxx | 6 ++++++ - writerfilter/source/rtftok/rtfdocumentimpl.cxx | 7 ++++++- - 3 files changed, 24 insertions(+), 1 deletion(-) - create mode 100644 sw/qa/extras/rtfimport/data/fdo78502.rtf - -diff --git a/sw/qa/extras/rtfimport/data/fdo78502.rtf b/sw/qa/extras/rtfimport/data/fdo78502.rtf -new file mode 100644 -index 0000000..2a1baf3 ---- /dev/null -+++ b/sw/qa/extras/rtfimport/data/fdo78502.rtf -@@ -0,0 +1,12 @@ -+{\rtf \ansi \ansicpg0 \deff0 -+{\fonttbl {\f0 \froman \fcharset0 \fprq2 Times New Roman{\*\falt Times New Roman};}{\f1 \fnil \fcharset134 \fprq0 {\uc1 \u23435 ?}{\uc1 \u20307 ?}{\*\falt {\uc1 \u23435 ?}{\uc1 \u20307 ?}};}{\f2 \froman \fcharset0 \fprq0 Symbol{\*\falt Symbol};}} -+{\*\listtable -+{\list \listtemplateid300746803 \listhybrid -+{\listlevel \levelnfc23 \levelnfcn23 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext {\uc1 \u1 ?}{\uc1 \u61623 ?}{\uc1 \u59 ?}}{\levelnumbers {\uc1 \u59 ?}}\fs20 \dbch \af1 \hich \af2 \loch \f2 \li720 \lin720 \fi-360 \jclisttab \tx720 } -+{\listlevel \levelnfc23 \levelnfcn23 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext {\uc1 \u1 ?}{\uc1 \u61623 ?}{\uc1 \u59 ?}}{\levelnumbers {\uc1 \u59 ?}}\fs20 \dbch \af1 \hich \af2 \loch \f2 \li1440 \lin1440 \fi-360 \jclisttab \tx1440 } -+{\listlevel \levelnfc23 \levelnfcn23 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext {\uc1 \u1 ?}{\uc1 \u61623 ?}{\uc1 \u59 ?}}{\levelnumbers {\uc1 \u59 ?}}\fs20 \dbch \af1 \hich \af2 \loch \f2 \li2160 \lin2160 \fi-360 \jclisttab \tx2160 } -+{\listname ;} -+\listid297210762 } -+} -+foo -+\par } -diff --git a/sw/qa/extras/rtfimport/rtfimport.cxx b/sw/qa/extras/rtfimport/rtfimport.cxx -index 73ac0c9..ad23410 100644 ---- a/sw/qa/extras/rtfimport/rtfimport.cxx -+++ b/sw/qa/extras/rtfimport/rtfimport.cxx -@@ -961,6 +961,12 @@ DECLARE_RTFIMPORT_TEST(testFdo58646line, "fdo58646line.rtf") - getParagraph(1, "foo\nbar"); - } - -+DECLARE_RTFIMPORT_TEST(testFdo78502, "fdo78502.rtf") -+{ -+ // ";" separators were inserted as text -+ getParagraph(1, "foo"); -+} -+ - DECLARE_RTFIMPORT_TEST(testFdo58646, "fdo58646.rtf") - { - // Page break was ignored inside a continous section, on title page. -diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx -index 73eb3f2..9a711d8 100644 ---- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx -+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx -@@ -3466,8 +3466,13 @@ int RTFDocumentImpl::dispatchValue(RTFKeyword nKeyword, int nParam) - // static_cast() will do the right thing. - if ((SAL_MIN_INT16 <= nParam) && (nParam <= SAL_MAX_UINT16)) - { -+ if (m_aStates.top().nDestinationState == DESTINATION_LEVELNUMBERS) -+ { -+ if (nParam != ';') -+ m_aStates.top().aLevelNumbers.push_back(sal_Int32(nParam)); -+ } -+ else - m_aUnicodeBuffer.append(static_cast(nParam)); -- if (m_aStates.top().nDestinationState != DESTINATION_LEVELTEXT) - m_aStates.top().nCharsToSkip = m_aStates.top().nUc; - } - break; --- -1.9.3 - diff --git a/SOURCES/0073-fdo-81384-writerfilter-turn-the-horrible-btLr-cell-t.patch b/SOURCES/0073-fdo-81384-writerfilter-turn-the-horrible-btLr-cell-t.patch deleted file mode 100644 index f65cdd4..0000000 --- a/SOURCES/0073-fdo-81384-writerfilter-turn-the-horrible-btLr-cell-t.patch +++ /dev/null @@ -1,62 +0,0 @@ -From 546cd96371b5ae012e4f3bfe963ea299e1dcec54 Mon Sep 17 00:00:00 2001 -From: Michael Stahl -Date: Tue, 29 Jul 2014 22:21:53 +0200 -Subject: [PATCH 073/137] fdo#81384: writerfilter: turn the horrible btLr cell - text dir hack - -... by 5 degrees to starboard, which lets the row in the bugdoc appear, -altough the height is a bit insufficient still. Why that works, is a -nautic mystery to me, i'd say this whole btLr emulation nonsense needs -to be keel-hauled, but after this patch i'll need some rum, arrrr... - -(regression from commit 0208ead70a9412ccd554fcef3e9308f8ca17037b - and commit 970160f78ef6cc7abacfa252daa8451e1f0117bb) - -Change-Id: Ie0c6ec88b6d6635379b9127f6460647f14776aad -(cherry picked from commit 5893a7536a0bbce57c4a2f89680dcb4cff3d06d7) -Reviewed-on: https://gerrit.libreoffice.org/10631 -Reviewed-by: Miklos Vajna -Tested-by: Miklos Vajna ---- - writerfilter/source/dmapper/DomainMapperTableManager.cxx | 3 --- - writerfilter/source/dmapper/TablePropertiesHandler.cxx | 5 ++++- - 2 files changed, 4 insertions(+), 4 deletions(-) - -diff --git a/writerfilter/source/dmapper/DomainMapperTableManager.cxx b/writerfilter/source/dmapper/DomainMapperTableManager.cxx -index 6a95be3..8271492 100644 ---- a/writerfilter/source/dmapper/DomainMapperTableManager.cxx -+++ b/writerfilter/source/dmapper/DomainMapperTableManager.cxx -@@ -351,10 +351,7 @@ bool DomainMapperTableManager::sprm(Sprm & rSprm) - if (!getCellProps() || getCellProps()->find(PROP_VERTICAL_MERGE) == getCellProps()->end()) - { - // Though in case there will be a vertical merge, don't do this, it hides text that is supposed to be visible. -- TablePropertyMapPtr pRowPropMap( new TablePropertyMap ); -- pRowPropMap->Insert(PROP_SIZE_TYPE, uno::makeAny(text::SizeType::FIX)); - m_bRowSizeTypeInserted = true; -- insertRowProps(pRowPropMap); - } - m_bHasBtlrCell = true; - } -diff --git a/writerfilter/source/dmapper/TablePropertiesHandler.cxx b/writerfilter/source/dmapper/TablePropertiesHandler.cxx -index 3aa4427..e6576e0 100644 ---- a/writerfilter/source/dmapper/TablePropertiesHandler.cxx -+++ b/writerfilter/source/dmapper/TablePropertiesHandler.cxx -@@ -97,11 +97,14 @@ namespace dmapper { - - DomainMapperTableManager* pManager = dynamic_cast(m_pTableManager); - // In case any of the cells has the btLr cell direction, then an explicit minimal size will just hide the whole row, don't do that. -- if (pMeasureHandler->GetRowHeightSizeType() != text::SizeType::MIN || !pManager || !pManager->HasBtlrCell()) -+ const int MINLAY = 23; // sw/inc/swtypes.hxx, minimal possible size of frames. -+ if (!pManager || !pManager->HasBtlrCell() || pMeasureHandler->getMeasureValue() > ConversionHelper::convertTwipToMM100(MINLAY)) - { - // In case a cell already wanted fixed size, we should not overwrite it here. - if (!pManager || !pManager->IsRowSizeTypeInserted()) - pPropMap->Insert( PROP_SIZE_TYPE, uno::makeAny( pMeasureHandler->GetRowHeightSizeType() ), false); -+ else -+ pPropMap->Insert( PROP_SIZE_TYPE, uno::makeAny(text::SizeType::FIX), false); - - pPropMap->Insert( PROP_HEIGHT, uno::makeAny(pMeasureHandler->getMeasureValue() )); - } --- -1.9.3 - diff --git a/SOURCES/0074-fdo-78904-LO-hangs-while-saving-the-document.patch b/SOURCES/0074-fdo-78904-LO-hangs-while-saving-the-document.patch deleted file mode 100644 index 67756c0..0000000 --- a/SOURCES/0074-fdo-78904-LO-hangs-while-saving-the-document.patch +++ /dev/null @@ -1,1727 +0,0 @@ -From f11ec770f360c33953efa989532ff21c28dd38df Mon Sep 17 00:00:00 2001 -From: Umesh Kadam -Date: Fri, 13 Jun 2014 17:26:19 +0530 -Subject: [PATCH 074/137] fdo#78904 : LO hangs while saving the document. - -- In case of framePr attributes being omitted in original xml, LO defaults - such attributes to incorrect values. -- Correcting these values in this fix. -- This fix stops LO from getting hang while saving the document, the actual - fix needs to be somewhere in the table layout. We need to restrict the - frame from being considered as part of the table as MSO does not allow - frame to be part of a table. - -Reviewed-on: https://gerrit.libreoffice.org/9774 -Reviewed-by: Miklos Vajna -Tested-by: Miklos Vajna -(cherry picked from commit 75fc9e669f209472ec6a282848166d96d02d84d9) - -This also fixes fdo#79391, but not compeletely on this branch. - -Change-Id: I4c35f7eff6ca1122901f5667fc26b849df527f60 -Signed-off-by: Michael Stahl ---- - sw/qa/core/data/ooxml/pass/fdo78904_fileHang.docx | Bin 0 -> 74704 bytes - sw/qa/extras/ooxmlimport/data/fdo78904.docx | Bin 0 -> 14388 bytes - sw/qa/extras/ooxmlimport/ooxmlimport.cxx | 11 +++++++++++ - writerfilter/source/dmapper/DomainMapper_Impl.cxx | 23 ++++++++++++++++------ - 4 files changed, 28 insertions(+), 6 deletions(-) - create mode 100644 sw/qa/core/data/ooxml/pass/fdo78904_fileHang.docx - create mode 100644 sw/qa/extras/ooxmlimport/data/fdo78904.docx - -diff --git a/sw/qa/core/data/ooxml/pass/fdo78904_fileHang.docx b/sw/qa/core/data/ooxml/pass/fdo78904_fileHang.docx -new file mode 100644 -index 0000000000000000000000000000000000000000..dce50f3dce1abdfa07c994cba3b57dfae028bf6d -GIT binary patch -literal 74704 -zcmeFYgO4{n6z4nmjcwbuZQHhO+qP}nwryL_*z?RYyzlPKP4;I0gx!;-Nz7C$tzS75qIXUyL+|UwAjj;1Ps~f=g+Fp -z%C3zaDJ6qPx;7eAJ(Rw1tShSy2Iz}g@Og#Qq@Jilz*aU6;1kgorNKf4OArMgz>4St -zUmz5t7q|7zGFOp8Du`#`@ib6EU)h`|Un|S9ZsglavSLMsP0kDd3?2q5P*tZRL)SA^I7T5|5ttv0$(@1JT -zw%t#}Zr)s0E@MK+&el5!*MMsM-$EV%IrkXP -zGXjSxqST02#NdAdCq5AV5&C(CV1BoyS1Xi)I0#6p2mE)#e}6%N6#sviz)!;Nc>b?P -z{yz%9{D%nxXER$D2KxU||6e@(AIyaRW$UrYJJO&+u;KS$2S$^A96Qj&%Uk=BMIOZ0 -zprKhez#j0krQ7{|C4}9IJNoA@7c&a$IUzZ#JQcj)4MtjPg_}8s5(hS(b{#PgidvI8 -z*})cY67!8#_73X|yh*7=ys=C*#m6n-LZtk}<}8gRx?z+3s@;jWQcx-hNwYYwu{GWO -z6E7N|*;(b=T5wht_kwK`n(PMa@Om8B{?O+4n=?^plMqG@TlB`%wo>EHan@9?wAi+c -z3uJjo#P{@E=rBX3;*du4h;wh7YGvA!@=2<;r|tise_4|-G5&7f4I~CPc*>)`PBdB -z`9IrcHRTd=7*TsQt^y)EF-)HI=%&m%luO^1?br07G68g(khyo~2OH#JWP69;AKN!z -zQ{kH>kG)wJyS4e##*ZQEa`RfIhAYhIsbsu!TkOpJ`vIO9m@(p`v~e)=mZrFtCbj7f -z2fM!IVzj3T*?RhHFkR3##3mG?ulPmeTT9ILvieHo2d2IBCPWdh=xR<+hz?Z5>1RdW -zo#9QqS}slUBqjP4&cB}`WF9}y+q^SRq5Ds!2Fm2~wn6UBW!;loA-b&f9jY%g_FY=% -zQgb-@P%KAe)A(y1maj_uWT?g`gKa$pe#cd!u761_=Z=R3FN#cF`7qylQ+wTjh)YVX -z@Jrm2Gk17#z?{rLYAm4fCZ0?C<7W-Ti5>~5a{a&XK6WAx7hNcdA^3j9aiO(*`y3NY -zRMs~(mr!7(_B(%U^L~6KVN=UuV~Ak(V&frX37KM_1KoHH6^YMjw6w6C^eRx6!`%J| -zE5CF60bL-!;??==hwXjILwc!5512(r!}+mdEi$R|n;E;KpRpv?Pdz$JlaDGCHvM!K -zvB6r!!%13FxD-5OVxJ#<9f(}DP#DWUgP10zz$I70hefY$Nv*^VX_Ey^z|pB;s4PYl -z{;|qk?iL~R$#Rcvi$LfKXm$WF49ozoRHj&!1Y(?pWazLJ$;@+O4wj1wmX$%UQ(92h -z*t4F!VT*IWx?dODCRsjsa8{ARdfj2QPu(N8E7ZdZx85W<3@QKY-;_Kpetd5bNOq{r=*wY?om_qoHGsSY&8Sx6^yC5LT$3@ocZtVAkhY -z7RUVisGusB6|P~hS5tE^JeTIKi274R(~2#=2WsQ&MRLQ1fO(E#*5P;zZWNfxzJfrk -zBife%ZPgoYp~_UoAfG2``s(LxBAiukwO>x##)OmpEJ2EZVETanWdFYdp;nG_BHj)N -zXrmeg2t-byJ{jgow;+byyL4 -zdaV!$z=jW=DWzQD_33YJYVSuT)k>YPa{uu?n`qgn>7fzgf^Xr(J=J>hJ>#a*`0;&M -z_?=!|v5irO?-Rk!my<&`u?w$QK*>5iR`)QS$N$?hb%znSd -zlQ5fj7Pk;>8pw32<&_jK{n>itR}fC6zZs!BpEG*qXxPw$y?1Wsgrsl87Y>T|rlvny -zLY$D?JX#^~QRZ_z{?Y4!1M-A)7rz5r^drxcY?Nt!$8;J${?Rk0Gjhzg;vsNSQXLhD -z4slqfk8kjNLD{(t!7xs-ps~KeqqCQ>)1Yx9At5D@3p>8g(OYsTFdXuEMj6W(sg#r| -z<&;&68~fz@z}nd@SrSu-0Y41O3Nwx&#W>sInu|ebz&JU=Ir%x{#!nS&lo@sr#rW!# -zq#!P&39jXQ7C@gsKTSxROc;AY>W^*c0nkjGVI4minc{??DOFlTSP_b^Lks-vr4LRl{8;J -zlMWT+8!5rRH`FeSy;4$vTfHIKM5%R7HdzG7zj^O`zuxBU{g^km?a93jzxoHTjNbR` -z_36V#Ikp7^MO}=sk)||8@z!##6I7gB3kBQIj|@Gh-QVJ<=U>{q7C#OpNpzQ(vQ9RH -zITyYmV5Z#t9_Gz>eR+)oU0r<} -zd)t59e0*?}nvv}9UA>i-_jWX4S9}W$z)pBM*QCgXV2ZM3&tAH5DMk*-Pzl=IE&NJQ -zYTM^-Cly<4>)l~g@MzP?;5$D?q`20_1o%EU5<5CW&qvwwOtCPcU^pyMKx43{B{>c& -z+hr2u7yLcD+Pdx8tGdM7pWg$WPaGA`<%0LDd~n?mI@rb3Ik_Rm{ILZLsP;!2&C11~ -z`K_&Sx9&WWndxTzvVUZS0}5apC$e3fLr{#|DzK`RQInWbMsaHLxTAc$ev-;JE;(t( -zGnt@3RPL<>U?LQ=e!bEqa&-1?_uy=)_pM&9f}~mHPt#)!a;VTgUt-Ksu3`e>Jvbf? -zI#>2~rQ6-Rm-g+OoA&m$clK}YM)w+PLYfr3z~pK|I7)JVh9B3D!>)+fW#ga+eulq) -zuNi*dKLdV0WME)QwQ`54Ggn{hw9%VZ#LOJij;Excsi3N){^8Uby406%QQO|3N$O}G -zg0`ty&6Be7IZ6mXO*G=Jq8G(S*q`^qTVe>aRXh7*3mU2bX*jH6Jjt=m6yNgEwN&@5 -zcgPB7UzK^$v5pzJdkHhWEyIT3UtC1V;xlJNhoKgpjY_q{ -z0&Q178X?LN%M&EPOn9oR3$MgP;txy97CHNgh(*RT<>?J_=Kd68XK;dfTH=!u&5rAi -zlZkJNMI)gh)k@V`2!w738fRE@y^#}g(>iCyNa+UGE^*>g*tm&6l8^CqbR#8MG)4#> -zM2hFG)u^yT)Gk7f6aOOyz26N7qth6Igr^^t!7SNgOt@9&xr(S7M|9%eB4Jc}_)QIyO#kxjJ$Uwv6tgQh{D_ -zVf7b@R`ZV_?!hruNJ|rawQj&B|703_q-HE=uy@ooHft=06xH@^N05Pa?GB-xC!|aP -z5s(%fvQ^5CPCwD`Di(wa&=23>c6=(lsnxRO8eCwpL(@JoORrqeRBVjs!)KuWB``+m -zLck7x`TgGbT}L0OjD+B0y~)Z*l$ED&wp^Fmgy%SdzIk*1+r6X1bDhKY&iLIo7nk>1 -z+0wPYmuzIxgnv$&8$GDYSGJ=G*pIh1d%(uJvL8+s8Q_Nh*6V8ed$KT%Z<=V&J->X1 -zEKFvhs+MS>KPrg!2nS!#viTRiWxzmPL`lQI80dg$l*B2)io|3d-=qEUq(?eOPGf4j -zryuWtC@z+3FV6}iM&vO3hd3xN4d9AuK)Q%Ecga61%cM}jwsf+xCR%;7Q1LZ5PJvhx -z3V1hsS2y -zTF?^x8;4Ar<%Fbum0>gv7RC&BoyQ7R;{S8afIay_jFms}ea*lDF@Eo$)XHt>LL3VE -z{zV~$PBF=hOCt9Sl6_J#T0IW2V$9DOTZMy24ta!|IwTbzI7p;yev!;=W#0xt)$3kU -zX(sEqcnpl^!U2Ch)}gzbDL4c*YBiAX&*Ef=?F1j|Nq)*K8nJKghm>Og4T5>f?MQl4l&b*7>tXD)k_0J&0})iSZ5z$W() -zI*DgAm;5aq(f+7xg$FkTUUS{8RXMmF{M8BY#EgKXSBl; -z^qAV()^XYsZ@|2kS^~Ocj?_daSuf3;6r8zX -z1PP_2(K6&w&3+0TB^g$G=MS8n;*8wad$FDJ6wt3t`=P+~HvO1Rav-CZg=%E!aPt8r@;-9tft%*n7y( -z#$f|BVL9mxAvr5TsIb5Rr*r(Z7=B#Rv3I*o8E|Y?v17wbT#Uw;hG@h?ocC-7BB}w67v^sJyT9L -zWXD(lK+nRzG(+s3VPGUTso%3sba3M6r_0}TP~!+SG~%NH_{e%N2>>|dlkS8|{=iSb -zzAO|X{c2D6%`rOafDoYT;guJn@ME|cDYmfMTaKor5EmMu#L}Tf-as7eoVfI>TQvfGIaUt -z14ENm1t)hD2Bc+~ji6GfXISel$ZoYb4&K$Q?(=CzXZSBqOy5GUI`w5Qwt^jS2#;@<=H6{uOYZr(#Q -zPd7&*oaGENp-_!Cx>t};>otU557hia6`*Kx^u%hA$6uY#1>+NP>Pp%OeL&iHWxE@~ -z1hG=cp;$l2z}BDmiIw=F|3!hc)%yXe2idgX$kI5mpn)miVlV)91E)brZ+en8;^o=! -zuU^um{{vUR;9NBQ&E|HRUJiNblCP`yz0vodF?kCg7;>U< -zd)j2m>y7iiCjIY;#W{WMaKA{LvCMM?k?6X*_(PgB?8l15eRKL=hSuN1MzZbVnTUW} -zL;m~3cz`jRF=J(WQvX9^e2Q@5Wm6rE$eUoC5!IvCXm2@(c9|QK$L%en0Kj -zPRTFGS_?f$@d#wLWGE?g%rQ5isXhf@)Y!a6#4#+cl%&4cavCvGSd=X$A(Rt3pLjw0 -zq~E}nCHE}y1DHh;E{L_;Q$dn2({hPg2D*^R7WWYpjOaA%Y5a -zez8eF5ecUoBiUP9fn-)OUf*

_=ckef73-i&RQn{c(r+=e+>=I8AZ5cWcA^U98Ip -zUeAFjKWk7B2m(Z1nHp6?5`r54w~mx^PFz?M>_Br#9jc9`HaqP#c>)Eo4Se__5~Hdt -znvfu998Fa~V?caWr%?{apqcQVSb}u|6##@ZHkhMEAOB5-r(^3C*kD^bz)rIm`Be#7 -ztA4ach`X`sKkuzf0N)Yh19+$(_>rFWH -zyki>I|HmGOAo1uTj;+(U9|nuWoM2B{fuS~vx0^I?UvUkOxl1%?*H;;5Wx*(BT7gl2 -zzl4WQ?pXneU^78D6R3Ms`>OS~^B(7v^h}qn{7-4RkG)LzC#rgfF-U*AFLrcd&c9Z> -z#{~&lRJv!Y#J1QY`jK`6v(2}|w1|ar*p_vWlTeZu9Ygad@IW?09OkWPgpHSOU7HBSs4 -z0>WupO$byn@!D46cmynW%_-aH!C~)X3PUeAC@B~q^9X}0xk_bc*>Nd0b|L-Rr4%D# -z#VK`~O6=OKKsLEwpGJp8mmuw5Q})AB_A-W|oVfNnge38n%_75X&P$ZlqDG#XwSEKk -z0KG>{2&u0fQYz)AX)Z>;L6YQW|HgjP%ii&*Q@W|Y+v$e{O(Rw*88JLBpH&^P7) -z%jL&AtS0q>n{w2PV11SfX3#zz+)+sH0qP-}CB45$-`Go52&ZepyZTr%HX`sU_>-s6 -zVEj?vU@b6xLztxCUoseL?9)~uN{?*UJwum|;5Q@I=TApc64>^#0kbo4L6ln#{fhv6 -zEK1j=Zf2}7NLHVv?yW}@D*dowGyKt3h-a4Tn?}Q8m=(>)=j=HK@y+c2|nkxG^*tUz&y-{?xOVOpj260_A*{ -z2@m@b_6=m>E+U(~$sB(MJ2MlT;8iX{-# -zztT)3wTra|40p&^=@It_C`88f5Q)H$LAj1Om|O$MIKRkQIX@6F7)k%-!QyA22iZFB+4;=|rq@i2y{*!X -zfYVi)4EoP@sg950VJ!7F`J&pu=W;#tfDNMsQ`n2lmc^p<0K%38ei9?dSiDI(a@{IU -zHIm@_;a*Ic<-cuF88ByItcDNRNvV|%Q=-1no57@sI2;UO%^|`v&=!mIBf!Xta;T3&&XiUA$sC3$?O1I^5MX3vAp# -zVnn9B=4(=_=oXMs@Z=9hv7JmNj4d)2<6r6B*}Y4#HrD&_RRXN&8j~l~ -zK-oFI%@XUr&Pwrl$(4sa#YKnS`hSwCss@>?dmM7*f4k|n%``WMaO-$Pn5%Q<&>Mz< -zo*9o5+~vbJ+9=I$Ga=o7p?UF_;&O%F@l4ejy0Iiv~I{=cSi -z-Z1+bYh3b2gq-w?>j+dm%7)LeeX8=+W07m++y1TLwj_Sf3qE_DJsSsGH{nP7>u=-k -z4h|gKx(EAu2ig-yTt3PLI(%i^+9GzS9?lZ4VL4rim1bSH5)v-*SHWsl{Jyn4h^yPU)K~Yzo-Q2-WPvGKF -zLhH)Z9E4$68wPZ+-J7I?;GxXLE`t5;5a%QwEeYiOeb|EVyB#Ya(Xk1;;E*jLlLnNH#%WLVD!j -zz~A+7U#3*7WC#8b_*8hqjP}o_2at5s_C~ -z>oeih18ux=L?C92=(51KP#4iPqA-V3z9TMN4R!LZ@n&l5>rrf7(? -zy?`68RS|47T$G|bY#$P;qs1p6iLRn|8qcSv2b?4NY#C<`U!hzt}!Q(`at)~PEiG=pCU642HzPTq_rFJe6 -z549-xkdsHSQWg3`B`%(oSn^DuR!gK*QNqLPLZGP33F5Zx)p2qS^qcQ10>KL9>&Wiq6v1^$ -z#?uo_@2*%#4~-{KWQya6G4?Jy2S))ttxG8>L`hnQ1Y+Qdy*(!gJUyZ0271qP_UBM -zN9yVr#pZbEE20~LEOQy#JK_YJakQ-p*3f)Jp{^U -z+sim^!cxtHZkb-*B$IZ!)IkIeto_1hOh-y*$Hvapc;8;#Yvqc}`o_rI{JOe_MGK0@ -zl9&DVXipEHM=UiWmt#Dv-b!!FPN5G({;uHd -zbRV$257H_t;Dsn%S*N5xpf~HU#fy)59>_bn%8);F*6P0g*&Dc@8>V585Q7;0BUUZ= -zO3k?Lc_(blxjgZ9%vmy(?{sTkfuVu&UohaBSF$d&$W)v-X113NJaMDE6*ar -z5j-)yPEX!koqWYwvvy=TXDJ35c>h;;DajSgp3;Sk+Yq}SjIFFj6Mx)Jw~)RDVck5v -zuCxn0AFfdy1p0yPHdA_7?R@QT+zl3ABqsF58~E1kJbgOQ=@(?ppSVlN8cdA&$iBQI -z)i6PYvP#hf40O;DaAk+)uTXGyMBOo&HWg7B!Zw?^xzD9};5?lZ0=Ib*39J>eIr^lH -zVk|B+WM+u?T;fw=w@U^11pn`|KQA~*Wal$~0rEI5=Tl2QzEnjCIJQJh^hMr}>bhPN -zhc!&aqAm=tz*3mAQ2;dh)4r(1WH=8 -z!m^~K7mmXMeW}AXglifNK1O;O)qe2vA43&#dx&#;u>_HYBc6K@&c);hDv@5*LuT() -z9WN}P(mCGUC1Nk&*L;FEFI+ik7CC;?`5w -z{j>l|TJ<+s6m<<#9rWLC4E68G3&zHJqlXF52YtP3l_XS>E+Z6ExKZ?etfZ#p)s8Ki -zhsMvj->;*!ADZ8h6mtt6)QCeCafl#Ayt9 -z2(+0uO|kkRJz=l9kc016j5;{?c2kyprJgT{j;{C*#PazPS7PHb<~1Vy! -zRjmoR6W`9wy6g&^91aUy?9x;7Xy*vt!X<_ -zQXrm8Awz{OnBi-&M8vJ}BPieGgdZPz&MvpI48`B<#{FOiGHLlYrK8IWy?xnd<~))% -z$8$uPLhK(KjB^odxr)R+^Ta%rN1!Bt|3mNOJBi1!a9NitTp+w8;ZSx+FtlYfNrP@O -zqcEI-1r`GRr4cGyNFHUFgBd;Tn{Ejh`?m}wXr8NMqLouB)Hu&J?)|mLN|OnN(KC+A -ze(Cj>+=v`nu3*o2xLPtsl5n`zRuncZUE9-qRtH6o#PTLvk`Fm?Np>fqCQL{-b%h>@ -zOvfC@?yy%JevIVl1ib~yGXOnJ07mqe+|whbsV|ZCq$UD*W5_9A$UopG2d`mQvri0M -zDi^6u+b_0%_wpDQh{y{6^UM}e$md5get3D}w-;kCFeo!gU^&G{=SjlZ`ShELgQ5E) -zUeFT7F;OL=upf~YXgGx(%A+dd;-%4I=++qg0`&H!3ExS6&wD;{)W^%3Me%pqnvR$dgQDOMn@+z|%Cm@@ -zA`#u=+BW62&uG(0@oG5I-b9<5odF^(dP}$_Te7kX{9&jW4$(Mse|5jMfH{zoP@IJ< -zF@M_I9pJ6HLn#W<*#k_?vD^lw@4)o0Pv*UN7M%~=R_%~O&&J~S`^Cgxho6u$N{1EO -zr>V0T4C8IOe-o7H2N1uV(jXt`X}v|-&6B_@+4x9Ss`rKeQt_R`1-xR`9D-OoUlV(^ -zspF|f#40z)RKDvotI1PC<*stg7WPf`cx)9`ajQ`n*tC%m7n5_v8t1p7~cM(rR&0%W4~gQNQj)f*usVPpJ*euUnSfq<<63ZnE6BUPfeos!6` -za^nABLFpT?K%8~l>sw!DQSxB@H4`$z{ -zEs7#(M`$g9#yhw|v>O%d4L2Yku`iV3xi#tlW)G{cU*G}jCBf5{qxM}lTv`x;Fy@V9 -z*9+|pUVsYKKw3=<`ZkSv?>=@HT2Brxx6DRwCc20_0Cq@nibDlQEcz^e$uVdQEQQIT -zG4_h6Yo=po*M?&W@J7g;1#+p~R@Ts^7zjK>1EE~J#(TmkRsZIDG^B1Sfc4tLlLs~# -z5JzSxOTDdZ1_>q8&z-sGB5Nzw7UjmNU&Vks*-+$zNDUUaI5g0UYy?7GhUJJye7Pwb -zY2i7Y8*b~AFb=&Wc+UB56MyBFc|l>*}oiKB;DL7b|48F{SS_CR23$eL=xQhC|jz;<0%YhFiwZd-Y! -zMq-4Ss*PA1tc8-P{~7ayZ`68dh16@7C1Gn4(ZZ_LI+vvW8Kv=%l0H_{i0az2!2yy1 -zzX75pPsU5X$hTljrqydLm*jT>Qv;Kfba;eAY0JRK!U1hZQ?)|^K(yfuzKsNXIR#~n -zh}}8S%W!V%QK;CFSCsb*^v8gC)H27;H^7N6V~I0a%IA~8ojEzt1TeMQZgMbiJ?mI* -zdWbt+$IvZ-v?74H@@J!xklT!+4naXt`E~-%o3hnXy^gD(*!#R=2{UcxOwr90W=Sq= -zpwwbIB-$vTCxNQu4tUgfi`^IPMB}Lnnxi;h)rtH-ad&O#7I*e^BzWTY;^yp7Bkjle -zR%7o(d6WWp_T!W79hf?&NH(i;0I1%Mqre+rCdH=HR4CbWC23&T=**aTp -zm2&;@F-7bZoY2D0#le+WE2%VAL>G&q6ZbH<%6!$OR=VEzw=^=Hv&2rB!mUzk1F0vU -zKsOr~ENU6MRUNI7>@Dt7W<%^RT)ocSd%q8qDJW)`Eq*Cm>Y7#Xcl$S`L5l+vjXWK(Z3Zmc5qtJqZ~PA*G&MzEpHKmguHzK6@o@v7 -zYT2+aY!`su5DpsNJ^HTuG?vVeoCaFJz+0sR5x0k6-Jwb_K=b+tvg8_wlZSK!JChMX -zf6IfX!?%pgYSSGsvsr+`+RHKzWo-bXPvjb@3RfVF@pM)ss#L}n5el-?2QSzAE|sCK -zu~PnGJq5!qr5Bi5lUwRO^?__;fmkF7u`wy-Xl&Va=;16LxWU%J#`Yg_jOTC6qeh{J -zODN?ZdvP^iU{A3-AOen(O#^4i_)7sD@jU}3Lbf@JCj4Xj*WFdhS1j+d&@vWyj-9R* -zfwn2aSm2ZoAUPRM_32*N%6g$yB{gDP>m84#z`G>WU{$G1#Q@sPTa}Y($0UA{0X5i8 -z*v}~mJGJe2O|~KkFjPdl>poP59y7at`^LdwK(!w>nxF@T_ekq?Q`&SwA@1Qw&8v5B -zLS6crrW{iLJ+L3`%QM8bbMxr*T=(t0_RX)$bL{TLwqvNuPX~gu_g!1TqNkL2=$k1y -z@g;}1=<@5-eS`vj}sR -z?mqN@LC%9^2wG<97OzWDSo3nxn3&7%jWOoZ32acD1%D6DD>buGv5u)o`VA|y`APFJ -zn{E@trJ2pk^s0U+w#nK5n(MZslTS0>0^4}XLK*pPY~C#*n2zvKgIe6VYe5?!QKhsK -znc@Xyg%Rq&fuLKwS|Ubet-w|+0L~%{z%FuO6n%mzi;$B+-Vk&K&>{$F=|y*ThW?QG -z`FVfv`7mdJ%O864aZ&v20(bpg2BC>MC~g`LZ*LRRpuPQ0gQtgJoOfbp{&?!X-zO}% -z@dFR~V?Q`gMRoPCqCa9SY^_boliy%#KV#w;)0a%hiY%{pe?fz%YxJWzD71SL64y=G -z1Wj=xMYWVkA?E4(CFGHy#~GT4)2!en#Qpq$(-WAURrGV!eS+SrOK|wT3PTwVPx)Af -z_!IB|cE5VL)qUu`HR-8>gNF?%!7@0V#v3tk6vt;XRuD -zq8mhnE|TTBFJcF3whje88!QJw=+9_#5IUYnjZZv7Ks}TQb%tRbCWJOixdJia@!^v- -zsb8;te4X6?s^CDj(+ieqFpAt}GgTAeXj?get6Q|4t@|CW-~PA5)UI3pDLSuZDveQa -z-}`*<>n*ZxUJ;h~6{k8^M*_I%3sOl7I}|rFH%GQ3$pS{9Av! -zl@tD|gp9%RY}IU+(`i_#*bPUBV}csoCE!T|kEUd%4A2YY0vrx{e;);?W0~$m7zndI -zU#^auuzX#tU{x4&PzFz? -z4?8E%2EA>Y)8}Y#gf`0`$xWUMp)8A+I8IWS)ze|)tZAbtiiqJGmir&|Nu2tRhLcU}n6?_=ga?@5iZ&j0kc9_A -z7k|OEg?_*ZUv7^tVTWKPxk?ZYfkZQMhXQwO^Dvu^Ww#|U{5}cqwTUSV9kN|9 -zs~-|=shO}VrL8iCG<0nWLCY?Akuxq*SF& -z0`5%LU~=sSjr#>mo2RjZ2VU<)FDZmPgc9+s4=}lnjU|8oQ%ao}ZaB*A#i?Jn&n9&{ -zaT^g$@0=vLtJZe*SNc1oF~_d`)hsmt(nuynHh+4YcGNsfvER+zZmQ_=Ic??Ih=D+n -zM<@il9iQOqAmH0Ut_M5eLCBWDOSgZtOXbA9=4b-e)+ZLzgIjWbh(2MV8^42FC>D+> -zon#b?L}Eb$7XSrT)fZEgl3Qk+Dn^u<*)3;$&W&(l*oN0A5}99k1UEvV2o`FXslmL> -zkm{&Y)kKt+;zJ&U!CRdHP}rO*+xN%hF3xxeWdXfqVW|E5`P)$vYj*;~@MbD|aqv8+ -z_(y!1aMgrn&o5xW&z=n>u%Djd=#smMlNv`@(oz`%B&*3Urla(Iv!*PR>*(wcA;^hKPDL8t4l$EZ-xrh+=e&L`nGE9u|>f9Bc7u+=p_v9iG3t+hdLFVbSWPMGbTQ$5HiEs)!d8O@{hY0R*;=xi<>4zksvRr -z`crLe(KVIusTw}$*eD2KxFNCy8++OTi@;ytPdDdF|S#WyXa=}STAImWH -zCVB5o&{cFEHU$PS3xx@$I1VYoLWv2e@&uyKNclrc=SaM`^(v`T-1g$-q@w{v=AR&s -zO>#JX3hVZK{7+J?FpXxJb(wp58XOw)7avHkD55qtxJ)Q4xFo=qu8Tbwj#3n!Yyn~u -zs|~z|g=2!GdK^_4w6rQ@Sn>e`i4rkMaIQGhP>l(hGb)kvC@DEXNnWZqeLTUv^ -zP}LbJ7!IiB>KpTRPndvs_FrXsr@3S|vKkW(qg>hX8m|B}6W!ah0(7=|^>1(RRR?G2 -zvINgiCcU%nPaKAVOSb$t(flLtgGnPp`2>pGVbBrfU*ip$4x)MT8en)-_z|pJzoU9i -zi@maXTPX~?KU#<#bsY#R^q{So-;-tNTagT+)u6T?;N_}099%8B~=*a$XcR>$ikEHh=h%c*LZrS!4S$SDB_Ud?+K|c -z8{1z)I{!jEGWV!LZYd$JEFO)GHmAAaV!`!rjLJ3$JJTo|SZ!<}VGCU_mkE9uTl}_& -zwH%P(B5vx;?j_muv9v|S7v2fb%G@-K_Jk6=f6ECAQQ5N0}xA>Q=U#zx)+(Lpg+ -ze(#$EU4w(t?uq(RBk$W-fF%t$IK|K^FqA$cE>M09-U-Bh=_93Zcsb3o8s|9DJavTc -zJ&e4O)OdL%(TgI%*e>dwT^8k4LJfU7q9va<#jcz)Njqladi{X|+&5$>T;Zn{h@#|9 -z$efxRFK4y!-ICg -zfvHTS${$l;s#uQmp$XXKQ(T-3mk@`H!Z#+f#`1bc`}msn8u|;zG!kB{IX)dcW8vx@ -z$TRT~+Dk;W|MFCbm{*NKX%?bQVwh)ysL^}|FQ-}^Erc=hQQku2+0yy^Jltg?1nr46 -zD9>y-0#jj_+u{g0O%AAfW5;rx5BCWLDro4p$q9%F4Rzi3Xp>*k8tVk$(EbrlA<8W) -z#c(0p1FT%ZYs$6jkGj}L`_caH@AJLcSg$c4xTMUR@mlzIu7eIZ8P2a-WC^-EC)f^0#?xMTjJ5cEQ>r7DYVWv4SRyBexdmeo -z#DP{AIs-^G746>(fb=o9rDKHLKM{>uND6lL54)R2$E%s0SCPIIrwc?AhH!j~wr*r#q$A)LoRVr|5?uIln6zC;Jr#0%n4WnMS;%5F|5T -zTVWK_>`m066$-y%vqwFx)3$sv9y{G2%}HQ$w|H?g1tW-O{Sn-_LTqtm%`T)1&Nm{A -zUiQ;BcoEnLhZN{9JD3_q=9~_=P0uocbJ@O<-52B|0(orhi8XYF(a4Dw!?LvVRT{DR -zeIEy)<8B|lVAHa*R`7u{eDB{j&laOM7F=yeiJ)0BVSAZ^>#nhfV-ZI9FvS-T?CuQ) -zoXC5)&7RVy7PVO6X7`kNgc -z(+w)%92xtHdJVv02zYmPlBfaAI6m@D{UC3re6&$v-a$EK^<7wq$0n3&;kmNHw=G&* -z__WWdUez6;OTVmbur)#-<4zYH?7DU4PMZWB7V -zd|Zjs4Otypa8Og#aG|x^tyN+;pQ-ptqFV$b!iS&;x}Ia{Yq7LoA~@y!pz~a~+YGr( -zIjTmn)381>qLY3(dn&HG&URuNQ<56F9-WNWB1KF#Am6WHF_?YD&gZfA;#~YI)YHkK -z#4R3JR+I$Y?fh6jKM01N3oN6Sh}0UwH&g8CTGNj0cJHR=?shfSD4bwVHKoDj+mvyN -z$5%_oEDzp8_yO+(H%{1;H)lKZL78|k^zYW?g<26;<@^1{{`092BiO~`TOHQ3K0A@& -zmD?*^8l#y|P6Tz32Lo*DhS|&WeY9uw_4vZ<{l*aT*zq&_d*=H^C&0ta+m^E=n|tuJ -z`V~ETh%x8ZR{@D;)jV1C`ipL1;4agdeuvS*6_W*ivJV_3atM+Nqbe7k%{HWSkP9l4;vIC-@E-C_w34>#&cPe_J67-AV` -zBK{wlXXfMrxV+c34Gsb(y^t%;3CJ0cV7h-jQ4tMAc@C}K?FfE3Mur^_{I%cS(+fon -z($foV^Re*nv5-Mwkd0dYe$vu3>K%QL1>P?TE1!%j{=oKC9|5@mLJ)#TBC1SlSJA_) -zhJ&Q-q#^v8toQ}15rQSuc|7!6AQZ;0%D|ZN9^QJj;Z4%5Ta&=2eR4-*swFZn|2#Yr -z1H^SdD5MAT4oa#4aDok#t7t`;+aIt-E^_LVS=z@mL5(4 -z$9GAr={Mkn4Q8R#;`xn}tRcLLffVitlagOUW5uTa8RVNUtm*18n5YKJ)~Z6G-!Fs#@`cOrG7z#li=3`$2=Gf%@PWjkq;f6pnO^JVD=L9i -zN^sstOMIu3GIb108#8@OyrhblOdT}%Wbp-)g2c3(Ahj?>q`7N)Lyt(bD}z{1NeuP3 -zQ`?^8_Nu#72bv=;lZ0igKqsz5-2BR)kFvH--0|vq-lt{rm1Yqpi5*OYSRuZojPx)`P~V<^ -zBJ+4~aT8_@)d}Df98*g>)Bud+uVaD%tDYOPU>oZe-J6pSLkMlo{|{~N9AwM0b_wsc -zZQIuAK5g6X(>71rwr$(CZQFMDY2&o@_3yp&&3k9!PQ?5(6_Go#YDZL5t@Y%}%Bm-G -z6)f{Ul4!P}f}453+hV6x@KSDp9J2_~HN3Khc9phbd?XJj*B({mwk(#}SA^Z-Y9G?J -z^o_eqgiyiXwP__URHg6P?VXmxfv7F>%YeZfNsauzEE5RptE=6FVMG9C-8Waxduuz8 -zM+Hq?!F8(uYdsqJGQGBJ*-)*g(FL0;^tg!p9hOL`aQ1_x-ssID>aZfT-Oi+m1uGVm -zELy@JE;iYz#8g!^o1`ImhxqG*(#@~4|H7*rnlctlk~9xNm#AxBDvnUSl+)?V^P)kH -zLtr3S+Rk~?ErBDI_JC99i)S=@M3na635c706Yk4x$$=U-s46hX$)5vH3SgCR;j -zdO`;)J<9#zF++_xvo%`KkU*&BaPM;XWoBptgcrracx=S^`>bz7FJ(9bE#KUxua>9 -zS71|{S{wSE+NX8hpjtR3XAZhehb*G;-%5aMug8?)+Qe%3q^2vKBanfzBG&}r!jEYL*{*SuDGz67 -z_ZwU`{}KotVc52KD)08DAh`?*n{1G%=yCE*A<&#Oeuch#c~=@OL;e_6C8w|uW-IYM -zmZ5z3gmqu*c{+jX1@zq?(uf=@!ci0A69W3 -zjk$k6lVnn71ZuXZSj;F9r7K16hGa*BKw9 -z{ksr@hHT#)jd@NH`URH9=gt$^-7t|=rWAfzOjC$`G43iUQ9B<7@;gl5IeVfr`V95Z -zYH9=7Eiil;q9b{mtt%`mtQr2Wl3J!ThCBvM(EtJ`M&aLg6_1L3b@Ra7+qo -zEz<2oC~i+NWa_3&O)2w$`Zw_f#apNt;h7=JzcWEOC;P+YMtiWW$v%fXNpj*hby|5s -z?eZ^kISnG#lcUQt`eQt>Fc^mLKEb4yB*dM}LYhD06u$a#U&FbJ(B{Pn>kU!t0viy? -z3ZiB|h<6f{VI3P*6JhwU92Vm5LV2Ma3)ve`=L0X)fa}6-Cop>U7kAJj4z=+A;lCUh -zL;WzGNMA^z@(Yg%G4~^MfKqZ{(gAh%X3*>^DBVm%y*HK#R9GyM?TKnGjw*rP3Z|#QgGLHUSOBTTasmq -zWi|9UX(_oQ=#`S$&c4sIITAGI@A7~@3EU)N>ed_KTL(6F+6S1Y!ZQb18Eh(DAlNnr -znOsqbCD)P+SyUMQ6l8F;S}VkezFf>6J}Vu? -zqSj?ySua((AmW4!A7MdA)7MV~7vFV2PYiyfWVLAyY(@w|v55{HBRg;P3@`L@DwI9{ -z_t$R=R9D|YX=Ot!VH7ZC^I@tPaiV^Os1poM`ovGA&r}7Qz55Cs2vQ&_Ro;88iJ?H+ -zj|X0oC+HJ~1NJaeBz88O>O{{;QTN#5NdDVG6^=0IT4+hVFlcahJR^mv99CdIf8Xo0 -zL+N@OAj?(+<9-sW^jv8cH6yjegq=%mX;gwexIAs)P_uKG4O*e#P1F!e22 -zkCLseE31}(UlU*fiA8pG4o3#~2q@IlJ1iAziG>%9g`1rCO5(koE7w_?`}X??eQrSZ -zZ3Tyen;3)3e+OvIM=b8ig1Y$u=Cqa{ATNbpKyGRUshll9D@avQThxp{2nS+^8)we) -zLD_fSCj!34Sf_;is>^9M>&E_?KCFp#fJn~uQnd9YS&wYy;|nG@nUvG~&5H;d0pm>$ -zz&mPWBNNSDRKnDhWM#|~ZwG+K;bj)z(K9k)laQd~EvoM0g|Q6`S;rOG9vbpFbj4Bo -zuYej-*eOS%`2uOMr}X(DtDQhZ{W0coKGrxg151>~Lkkq&muLP7@;rM}GP3CfKh`8kpYipbx%C#4Z<|D-~y~>KA18R&m_~lrs -zJeAPfGWl|O8BNN@I!epFKH;oboUSXO@oT~p`;7UX0;8D&Kf!E~evx&f^UjE`5cMbc -zVWT_S7u-S~<4>bMlmV+>N{|}v*XBv)E$gksox!cM5?T9R6?TIhxv`ooFiD3t&a0ly -z-u3EfLGAT)XTVvo?)bGahykM(*@rjw(o48$@7He=*usxclmqr0TU23teg1bvKO^R?=bfQzHO -zk@jO73xQ)l%54=(>zkYyoy;P#ll9_-2U2wzr-M122JV$)4}0AQ!f}U!aDPV} -zPVCH4L0VP)s@?CV0Jo_dZOIh>sH?CeX+j`!!J6uRFR;vb&wLZjqIG{$XU=yt8Af8M -zqqWN+vKmwhOI|3L*!M}s*(RR95s)5mzC#;)X1wea8kk!R>9isTdm;z9f9f1?aB7n)bT^4!40|2x-msp4 -zD#0czj_&xHj^wN`ggvFm7(rQk+UdF`q3=k2V98>|fo@2tadj>HONyc9#Zeys?ZRR} -zt9QF>i57chB%3EGay#QS07fhGd= -zMxt1Dkyfi>b1VJ9>#V48%+N$jLHMrp{#lfk$WAg{Zux+VhQT>#5VT?YA4LlB8 -z+`UA4#JStF;0SPWpFnF1)pVhz<#U5W4}oLHl^k%<-OR9kLBWV8lD0@0hISajWNRerOjK;3)Z6_ -z19We4dh1V*D$(il72+z>@@#(8+4>!nCgW*vWqBF^dzi&R*+1r5*?+r14rxVr_qYJZ -zPAIk+;Qhv6QfjKV5vyvsf@(uF*qsz`KOPK}Iw#xz)Fb%rP$m>}O6~b~i0{ILuP%a2 -zRodw6K>%F=CP`Ys_~%bHge?HUIU;OTuD+nLD3Wohwi -znfxsUhYjY}t1r!yE5t#QMQtX(#e9~}Ma`>c6U>&WE?q`p!qh1c1lNQ2f^@z0&2^a! -z4DvN3Nq|TUP}&m;!gLJh5sZQSm6i;uGG#h?0`X}|I2?;Hl*B)qu}-bxChTYmnOMxZ -zE$m1xv=xI{y42V!`57u8(TqTiG)H_{M}i5H9P%tF7Wb12D5 -zLW`_6Q#@Dw@XXNODwTq-@h{BwaqLL%g_@6I_jeSPvwy+b>QeqX#^=c>Qs(|yR$E8% -zHvp1+F7=dgUR1)^#jpi6ih>-Qov2X>##zp(!&h?IZujotmLblTpox-cJt+Z=L*sutg*zkbe}uQAdR$6)Yx-E{@W^SsG|$ -z6dXNF>^N7+5-n#D?C3YcYERqgW{ICC6>V>_427o`DSA&&F6cV;-l?wv3KwPqj^YS5 -zvo;A|KTSk20U>)n`Cu`^hGysIGES=xCetWOb1IrzBJA|}YpsEL!Vvmya+k2*EGj-1 -z7dbqz>*7z>>30@dxoKN&@Af=t?eSQ=@;E^FSt99J -zT_WB7HfMcb?!*En7Esrd*uXK~df!i#6!OB|#MOYo8tw+q{&O0%q^wF;5-7xdi84c1k*-Cz~_;r%*_=qSIgmN799K8InK;WjYf`UXs>3?3+`y2 -z??G9M!nv~#oG>#8a~-&c|Nc^k*V*SnMI*A~JdmrRg70KIBFh2}m8H~llJd-`sHd9V -zVjo&7#Q1aFw}&u%Db+1JGx3Q<2rb;BPEZ-+e#ygHkCzwpyXRKy6D{KT)kC*q&UXj4 -zL;IS>RcM8KkhAEds|Ujq%mmFwwc_Ct&U4-bvr%=c-|_+Ec%pz3zXzdLXcD7lg*Xy0 -zr|2{DWsiGamny|r`}gFC>@#srNBHx!euY=Kt>}YYM<~@@DE+5r*Gib@-Qk#}Li#=H -z$((PU+8w8CMKIZW(B^=k^T*HPiPi_s_fdvJ#|zJb=es{iG(E}dIHND5D-f!`Q>Ww)k~X3BtF*8W#r{gqA~kmt{+-A_E=(vLU&P@EubYpqC4 -zD6{&cc)a1r*=Mc40NpML9XyH}%!Z+>VKu@Vam~>1Sqpthk(+dD41*h0?X{E)ej)xe -zev@09h%W=_)_RoYTj4HvM`>eImshR0r^TR41l?^K?ORzHknP8(#@Ae0_yeA=hxH>@ -z?sZMwn2nUa-Wc5=fYJd=Dhh~CBws;<)5mkbC#P#@%L;_I4W-4zyzn+DFv(PZi@)rF -zd1!~i+TPbg?Ty7z2i*0$UfFUR>GF%68bpMqg{?hLaX^uuV@h;#cu*FU*7~j?#E7Nn -zbsEP}YY+=2giu9|Gm(ywR*d67!l$A$1jFa(7JUZzP8Ysk#z0Qwz~R9G<9j4cuUe!f -zwapSz)<@ElLd}3~cdt*MSJ9PP&2p9H6q(@}x>~SF~uJV!-H$XX>^$Dr%xc-+d|iw -zYO;BB7>EWjyu*l7-m^nU&1Io>{D0s{{s?|l8R>8ZTLf$hyPY>@d1vQ!vO%3nZ;QV6 -z^vhujC)Dl6v!9gl4 -z1BWL2Ya^_akY-BM)wZ9E@eF$^v!A?$_2u-Q16)DyZT>wHRWBZ@?`k0EQ@)~nsYO>T -zQ%HHU9Xy-H2(ktIECZGTM4VZ)8g8g86bwk-3_&aY5$yB}p|!;!wCFA*L@W1BH(cyp -zOzjgZAnbBvG-V%^{V5pj0l@)c%2ia*82C7{n(t2xPjfI7?p&3KRZc*cob3~$Ev9Se -z6!>k)n(_#Rl#3;eZQPzA-vU(t3{2o9W2>N{EE@zquL4g{Yn{Ne{ME_WZYX&7U0xGJ -z#FfPQ%7bRzbEo%&mXMq;mm}(MGl=hqXfaY~#F%^jWV -zN~=EB$ECzgl%Mfr5PaHzygbUV1~b8}U@+;k3%NyRF|d~ejQbq^#wpQXd^{&=mF)xk -z{2uExH={Y-7KIxk;Uq~>ht%CG1H1Z{w`?pC%Z+=AMTJ5^sjIv{W|F`cMQAoF^%QV( -zWQ4AZn|wUTJRUcnqYYR`W{kLaY->bFJVZ#Ls#QTx86`Emojgy?gFh8>_{9=*rBy~E -zB4{6O=Lgp|MK$S@Wv>HKHXn}0y=6a1jL^+K*Zx8;;Z|PG(3gKs(`n1Hu<17I{O(-e -zT&*;M@j5~1O;1fS1%2n*OS<2Kxh*}0xvblPMyz%h3{lDVkYfWcZnm^fKhk$v2~i32 -zQ@A2$H`yQhWBydr|NHXBp2;t!otL$^ -zGXOONGI5x+SxD2!|AEpCW}RWMCGoaRLPb -z@SO#!U6f@1xUet#PJG5O72mlS+4eRCT#)x_@j}aLw@hg0%np`qUkqy)aE6w6D>9G_ -zT4MSjMVj9yeR)O<@en`;62Q%Az6f!6QeEzO^rUyPABy>yZa!~~6d;6%nfAOn&RdG< -z<2sL^hRTKUTiJL?B5ccfa|7pW^Vzw1Fga*$Ph4cuo7VItnJRWlOUK}BX!NY8vwKHa -z|Ei`|Oj^@m*TS{1>I+;)w;h%U^h!ZN%eCrw4AJb2KAl?iPkgak@v?thlYGJGbL1BY -zvxo~k2kxn4mj5(EeMV{*Ca6ruq6E2mLe1UKFo~(e&z-n|r6n|_k#KcDZNxIjD5FbS -zF!xh9_3d~h*VgSk66NDRgST$S4dMYLu!;C3dC7dQY`Kk;nHU2)eDu1e)ulJI0yKf@ -z4@Whf+HLN4JK3?-e~<7&ak95$I$O%tIpk0cE4KX;vk6v=8hF8tsYeVc+Ug?WK*Wiw -z;2AUHu~!N}{E9*7EV=-(7a?Xwe%*pecdUy-TuVB?Q^T+;dA*h -z^w!0P`O){5@D#Is{dU0j{%PBC4G(OP&%fN -z2y9;P1}Q)v;zu^9>Q6X|KY0c`@c7u$+diUasl$Z$;?vN(b00+91a?RKdV%a+3Irik -z_Oh;bMBlT00g4>8KV;+>Jj}H~pNA+dZ4!B9Z_w(A(%q>pOnA6*TJG(<<=-w*nWJ9| -z3XdUW!OLazdBNrgH*|)j1Gv6&r`WTOl78#qI@dteWM%#BH1xW6*ybL?ZH=tfTz3~U -zv-ZmxpDUmPZYH|uVjQ##{{0>S8L7MPZpS^rs}V=^+R?N#&KMLoH+;pc`AotDftrLy -zdMA*{cwaDnE-;4TALh%oH)-2k#oEAXN+E>;ZKdFKQ_V;ulZ1e(AD(2XfNXSJN9qzWB7*{4mh1+Q@#RgCvS~%}HF!sgRI4g)a1=5_ -z^{(F-BJdX{e+LwKHB?Vgb=Ir)O4c#0wlg2SY5w7B$^F61&w_ak&@|RC9l+Ppx$Cmw -zbZAAo<(>E|heL1OY{a@*IH?$H`jAdM_BIwHK2b+>+3UwO)3|W -zNIjTC6$E$S@f(k#bK|QYkvU9izJkyqsZ^DCHGz8Clw{5b)nF0sWii*`iu6qoc&)eD -z$W4#T{F7Pow6{>E6=ONXy)^a5{R(d8>{I(6Ono?t)Q=WL1}aE*P&`G}8$uoQkvg8H -zK&wW3<0Wz>sWca3ei4p5E!zd9Ppb>}3#661#bFQg2bQ&O1pFo2&!;8#R1;dWeP16O -z$3L84lt>nIssN7PsqCL;!xn|e`+H`*>V?I0c*;}o5(7Z`IigF6;->a_?MB5Wr)i-l -ze_++>y8_!HC6Yo`MqvONU@z&IxbiY)R=>mJ!(qrW0)0#*i~lb5hgz^CmnY01)aTB{ -zWR#Ou4>l2JVua+8I_>scyJZrKz(10b;c&9wM`4L53!YO@>M);OIg{@2U2Q4B6F`O3 -zb{+Mqd6K?5Dq9MLFg5bGv=L$EjFfxQdg1TjR*u;J{&J|B;1Jgn(z?vAuwJB;0VM -zH1w#5IJjgZxh};R4csQFb0)-J_pCl$$!APUe#OG?TRi(Um49A;FFHQZ(~mTs12ee?>h@jp5H=;AsQ-A&G#~a^Q1&_A5KnB@U4mA!=PI@RWc$VC4 -z&Ral)U)*9%fvYl@F3HvN_1F6svx7GNhY0S+Ze14ds|rcW-D%HTfi80$+0*C&#M?kn -z-69$!GM4}}^IuX*GO%UoH;`L+Q2PGj!4@JopsnMqP9!UwSgAsIyX+ewv_pzs2@yku -zsdF*^fs?u=5E`i1=L1V{lRn+aTG~u9l*j-wfq-0)Odeh_kiAh5T>IGwb0b23M_GCb -z5k4}Phyy6WS>{+MejoWx6ffTK0W(IG$Da{5o#TLN2^LoBrHjCHgyRzeZxTIiXnKiR -zJv{++l%LbMHztDKMxE8er{rNs*1Ru5*NiTaLMOTlZfOBaQ)y$BR&=H`Nf}F_dIj}q -zS@QRN?^CbjW^brAc6GbPFC5gt7`cA)21FG**AWrmGsn^5>{I#zoRhfbc2^yOrwNi+ -z%=z=Bv_s;WCKt=tJ@=qvzOn}!CU&3UcKew*s`oFAZ8yVzZ2jQS`32TCrI{idX)`4{ -z(jr;0n_cP8%;{aAA`k4@E9d51Dmgd@We)<^hS0oIms?;|T^PY`t&Cr46HH_pyPG`W -z)B}@Q3l=U;Trrpr0`Qfz*kb}_06A4p-gT{m+^NcuU}pSt4a7_&9w3Vvt>e$>0tt_< -z?CE|2`pam?h>pNKyVpE%ig9XNHGdd*xd+%=(Ac-PR^kf2*v^p>snrwq>aC@CR?hQF -zb!)ZM!*mHFnJ2C@tU{LNks`Z$-7?#x+wY0S73AKGhht|T2yHJj3~Bhp5iWPo`b-aUMu7}!J`l^1kKnzTvI@2OTA`z=ai;JK0q25rOG{?1d -z->~WxyF$E1l{lu|hE9JHg$QM3Gg>q5YvzGG!IR?-rvc-Y=-4i$s7xgyddeF}GxHg$ -z8liHYGR@V)n?Ir^lyPASHcNbP%Y? -z|7L_IF)iww -z+*GW!w|aq)BD^*4?HP+_7Z@+68xYoY3|bU3*L03$U#aS4jcPA?n#bYO)rZF}+5)p` -zKRPPitCrDb{gcBGD^?EpZt3V;aS8EKdXtt>D8}P@U!ySts2+V)oQfx7N}0=kwe1SS -zqJE=vCEWjhyOjVE*SH49uLo#r?%QL4*ypc1T#%U!@Zs>0p*2-SQnRYT03thdN1C_a -z%Wk*qVFA)97&x1t15#t4fE{#w`Uz{%;ZnxolHFZ6LOZ!G&;g#bRt;RJY?12LdT+}5 -z%9y1{8jA080grb@H7d>&&O{aQOUsbYQc@OT*LD{^XR8`D7Yix(U3Pozg}CPkURXuH -ziz5PArFEIc(^I!|fxtn`XLjByP?7*_9ni8P?A-m+JHyCrs$jN`KOdxixUtfx)H{`$ -zmfk&~%+zzt_xmymgP9eNG3#DSn8F4Av?5uni2cqYmy!y9>9`fgfdbN^qI{DyRTzkN -zHJjiP0p;jOrLr6(m9S-j=a^{V##by>i*gldzF#lXV&$l7KF=tfJ~b<`Igm;7eO=K5 -zH!Riiyedakb`=-8ZUhgUxV>PX9*FTnxK9;o=gUpU@l0r#eq749;1eVPBX_$`b>~Yy -z52a@h*k>zKy_~vUmrH3dV$mCEEt0ddL+4Gb=K2JP0JyI4(b%6QGEJHR53G(PDqmnx -zx8k4)60~S%$FHO9KkjkpTIJkFo60bi+|v10H8u6PgjWc%5ZpgJE(!e -zm42w21ABpW)16RDOoPFIZIUT2_v+>oJzPlOBu6n93BhG8H%JhWUxY_7+w20H;fklI -z-2z6DMOmOYw0(83r0e{lsKp5SuEe;d2SwF`kbID28H05({YNP{Cos(?)})V+IM$^G -zpqkvB9w8Gs6Yn5#w|NLuH6X0OP&UPO=X{f3c@4~6x?fWK-QI~EDPVGK;C*d8BXpwh -zSQD17I^gA_an1ouBq{x&G*=yjlCFU!>) -zY}MYuJ8sbpY9&(F+cWAG**icLaJ!M#(cj5neiSm~1)LJvrbUCG6^@J?2X}h@1qDRR -z{RI7cQn$-oSsf8$UiP%jvks9^Jat)IE=Qd;XZ-gH_KGb0XYS_Y%N(Q_~4 -zpAaTx;gAz{-RNg$)0n5BW@`SPmawRd14mgl3{2mptUOON5`{wTBxjGZ$a;>k4c!~` -z;LBkx;(QsJp;&JnsaTvJAuui0dJ_oAEMIz3;J})j-n?IKWx>snKV89hY@OnJTIz&; -zh1QN(svdL}t??_=JObsX*NGh&f2d{W9-kxK5d<#T>CL{4f`t)gr+dY9?#zT=I4TwiJ&U%~SIEzvtK45N -zxsUSzh~GV?+a&K^h!5>6q)hstB0rMo6I!KY68EWK#LO`;KAZ|Hkd$?hBX}0X5!Em1 -z6Ltx%Lm2A@4K^T&4eAuC<}O9Tqb`|m-g*sEr+<7RPQ94%n=dvgp(UpNfz8S<5Em&Z -zlPkGd|HWo1kks=Ke6iMh&1%9)L68S%k$?o9^rqg)`upoJEeUDbZSPGtx_F@peH`7S -z`drlQ!I#zV00|r2B*(I?SD%VP6hAq@qyQ$=@-nmTQ-g>@IF80ub-uRfT*u8m*Ns72 -zx9w=Aqz9&uq#!N=@qu)Ud#=Z79zxRa5W(r3d5RMYf|`mYb@`7u@}&=xU%|j`uLQJO -z&diVBq>&x4>p48i6W+sU2E^4jrF>;d#Xm)hy3T*NC2YdKCG^=;rrzA9m$Aq&=ocqz -zGf1&K07-&xnFv&0Vi#+*Np4|TA8>f^rYf~J>Pf+GZKxV^g|(=iRGU=Qs9dfcoHDh$FRdjMKYUm>ui+st -zZ7zoPl-hjf**%_+#bVz-CJ_3w+FG|mhL3khZNvxa?y-nagB9q$m&e9B(Kh^Px@aGz -z&fM6x2iF_J0*)Em+9=M*1ON|CZ!d?WQ*A%0Xgh-V!1o-Pw5wNlC6}mj6)$o-lfIAk -zsG^MNlz8eN-1`ao`xq4Pk#ffI5VAtvYAzh~n*vxSx2)6kx%*70zF!+u=!Z_Php@T- -zl<}gNMWk%)b)6dRv(9W+J|xow5A8|8^KcaVO7Wlo8%@sLvl3>p_hHwhBCSh3Lp{Z| -z^eZXb8RA~e_@H9?l+G8-7`n^M)%%tB0;>{*d>;7hpl6$keM#@2D4r;X-~kErSQuuM$o2ZM?+UyB-I{ -zm`ce|pbU&cC8VE|jW!%YIwIm{Zcuv2FFoEg%`x6^9#zLOOQC0wvxiTY@maL!hQhiN -z^S!;z^nj-zS%VHprQUV&1x~WY+S$_d>^!bt1hy?rJ7_~T`wk8A(<^dn(W1IL#D6s; -zY&uM(ZKqUBG0LQsO7kFc}+LdkZu-OC@vAc%Ft9l|rg=Ro~)2`GvkR -z2dRGihnc?aMASUxj<&4JW?^m=t;wv_!}M2Pof_7LZA_VVwEGbbTYB_JNkOm_T$6KU -zb?ZrGLur6_stQgJI6FU;cbB@a&ZJDuF|u=brGCV=5u+I^rbd`-5uMbSzt60KKMBS}6on$)68e?wWQ807=#xB!YC;Vxk -z>&)z3$0u~aK^<2fqprC=vn@BC4@m7T^*> -z`o!?D0sIC5Jcre^TT~m9-|wZQ3kmmwF54Q54}$QrFi{`zxR@!gFsV=TlRms4wQSzG -z?HMF;Wz7ax2-3i~FX$jt+!QLiYA^%X=$%7YulKVX;V;fjSL<;Z -z0ROzg0_z*Ze=={Q6S&(Y{}v}uZ~y@D|2Jo`&d%OqBLY0!t|4|C(j2VB|j$VT-E7hR`qflRYSUM=HsC( -zk|kNf`n3FV(R~E>V7}Mx?h;R$UA#l7Y3+JGCtQsO5)~-~$AU+M=~I#yJz7o*q@Hmb -z4>qjy{n_btq*K(SH}4$DTMNxbX)akk6-xez2B%3Y7JJ-9j;#>oR+T-F4D{O$E&t58 -z1)3R-+IV>PvKv7*v|^X%O5YdWpgfgiFWEtvm@)+=l4ZE!LvBKI|L#3|!$sZ)r%z+h -zjO4P3Xr18=>3dR;4ZdzO1hdYihV1#cbKJ*)^*y6#e8nL=so&MJIRo0jS+FY7PfBAf -z#2pd)Tz@j(Jao$FZ2xjHcwi+LW;!&^vHAulj3ZaSU^=ao->%y#oxM*$os=D!Fx^S` -znC>R6`m$zy-7EWx4R5Qt6a7jEYqIlrNu@pGI+AC95q6?6qLlcUN)Wjmaq%ckI8O<=m61G}uvQH>W25Ep?8oK7v_0xfyE~c({!7>>7%I{|* -z6`J#up(v9O2F@__4<5$Z48DXwU_aP?4_|J}m{f1rZ1>T&aLs6QWlv1H_5J)ojIg0M -zJO8s*Eg~g}_VSCVSNQ`f|WJaMA38zGm%(!;@G*_|{l!s&MXMtwL4{?*n -z&EndZJyE%Ntxe&JA964Jtl*DG#0@0LxOg<#A{RWt?zBZBZj{3Qo4lP7s5l~(mzoiP -zgq;PZKE$nanN4l7W65%m3wwVjqdHG;${ej`)XOhvQIP<|q!h1dEB}lb (A3TGp -zUo&?}($Z^5)_9FthK6vn%APvS6F(kW?LyeN^asnP}@a07J?;4HnKy3=+ -z!vy`QpK6RxE08d$gzPc{yKSp-Pr*7k(eXC2M9+OHt*KDkey7U~WHrDvXVzSt1t*8X -z%?I+hH?W-}l@ai$xU!|nlapNgECppc_N58`X!KsxAopL79RIt;@lsO#{6FO2f0Kj! -z?+yOH*@@q<9w7X7xTUznBfip{x2PyCm0(bP0CIK(h>8cGGXlp~+VCYTw3nB+55Pg< -z_&nNpbiK%{EJB`>o+i>BGlc~n$4Yg{jh#-ijnIm319o}kvS*_Iz1DT{z9}z9-v_{#>TIo -z8Szgh9-`x-@&=O1qsB+O?1)?phqeSa?c&*W`ZmRG0|7^7OI1$zwOtD9RgAJwHPe<-P!KL{xdY1nuJtxIL -z4`iSoad>n}i{zhrv4?^B$!@ivGR$%kn;$IC{l-%{vxp4WR|IMuH+d|-Mf%Rh3EY6! -zf(`TMtYo-wvdLY&za1n-ruZ~DATEolJBHkO(dwQfLK_Z!&;x&CEwx>s{3kgs$^o#* -z{$rO5@^5l%W~^`YKjb(we#~OvpOzEU9WciehqA6HeSwQD7?U>vQaaCpz7$NlF}2~+ -z=^TLQUUw7ud7U#iY4Vn*GVhBppPpHnOeN84OH=ss`0&BFr?L!`rPC}J%cXtSF|;3sjFOy2+)?b2`0mi -z5x16~_czHL+?=ip@DEFn-6DRLhw(oK9#G_dN-R7~T@GwzOXuMwR;u3G9N*9_3c+{t -zWgkcYmE#oK+v|zBf|B>5{Ia6_<y>{zP*kA -zPea!E^vf-OQPv4W1c?ngqVZ>)sy8CAmuZqRn9dIXiU{888;}kM7{F&%vV^Y=(9d(kwyIV4 -zUlzu}1>LP!eWc}s`_t$C;LtHJ(2CC$Sb_mVsShRuZ3hWthbv^}VGl|zglq;1s+R-; -z8IKQbo0JL>5sw7m`o{qMzcCQn68tp#zQ%vbf5L$Ef5l)40LaZP?A`4B`bzuyn*0W% -zsx0Ey2|Kf!3-#7se;t#eRm8T3HEwtrl -zg-4Pmn~RObFQ4Dz@AXv%B!?G-juMlgK^OV2@lT46h%lET(BpB`Db}rE5TM#ZLBQ&J -zI}xCRK!`~?!2$rGpaf|03L41Rj?NhP2<}3d*q}~8$@xNX*kGVAxLD=F=;$cunD`As -z=vZC&?HzH=t$iIW7;R|z0{=TTgk9+QjNeac|CIkk4cmWHgZLd<$LinX%`d8U%*Krx -z`5Sh;a74Uf*!j~LnixX59_+!pdeSxY)4N(OmV>U)OC(!Fh1PjXOp<1YSDa*3Z_!fHJ`n! -z9mykRncW|^uQ!O1fSHhR`P^- -z{c##02tZJZK+%GZ90z>!bj>+OE>j^OQz^jEhwHXr9Wvx&f1|p0yF;Hzs68bv-NPq$ -z@gs3FBDlwgsuX+datI|J#AVwc`z}0a&29f~cl^Gs>^M=Pox^Zc^7v&NEg9_pbqM{R -zqViv%rT(wb`iBz$M3k?(e?VZ6IsgzH9ugWB5dff*KnRTq0TKX0l1>T-01+|Bql>{% -zMhE7o60pOODofESl!kC(GNa+jK`CM3^8rT#pcQe1Kz>ljilX3gKyZg5V-t(h^Y8=x -z^9O*DkW)jlvcX~?HUi*TfEZD!n7|u%X;joi1PLEwWqAExq(ll6$O4jUL4p7G -z5OZdH9eVq|n}5oG3NhyY4zYjKYY+hV*1d1VV=?~Tg!~Ialmy0mP@`t|YjNWe9EaIt6;EP*BkSdvyO#f%|_t{x3F&|BVgsZ2mEU{5aUicp1fhE6%jEFcacbSaKZN -z$FV6b=p9DP%1~icEfXdgT6RLDX8!mxOHkJ_<2Z9+e0wWsICw}r1WZ3CEEnK_AXq{) -zD{;9P$T+M-@d)gcxP%NbnH)lNK!%hPG;C}!R%r&f3l&vO-fT^+m}2~px=#F$)$l4_QskF|w=aBx -zvWk_f5m-EAA}YCcoe%pdA<|nn{)F1gE&NA@DmQWJOwiQZz{W1Bxb3E>r=5=Q6%}Cv -ze?2ea6}ydyM9Gzu2|epckw~=8a9b+GXUNlGEAuv0P3>?d8Scbg%+YP^ -zm@>Ip`Gmhe?Du)VYr^8)drb{;B~VO*`oJNaqGFZSjDhhCmLGlPdSikQyYCPO6#IlX -zD$;UV8tt5*YD^5wOa|;)>^rS+bT0wJ>gW*Xo7ix=vm;eoIkX8xeLqy -zYOe!|Rg;;gM188Z$IO%YAMO4>zTPo9mtgA}jcwbujU8vlw#_HDZQHi(?AY9~ZS2_i -za?bnXzTwR}Js%5wvp8gVS-owcb -z;%V65`g1BRJ&4M1*vv)G=daIoxq@P&h`IQJFJ~`%g9ng;TEa7xw%Nf)s*Ha=FK0&y -ziv)9h@9*X@m)tc+zTXBZ|9pISup|97rt{9FM9K`26gWK);ad%x0|ICfVdzhv+%W%Wv<{4_)#Ronrf^qk8 -zoJDp=iijvg&vq+Z1-^Ei;n7jiGL*Qd$?)L%Jz#Zgq%?A6?5#1}6@@zbr{_0}3oD|u -z#4SJ+kNFu(4h`YAFxp?I5C3?Wt81n6RhP84KxqNBQwA}78CqGEVp7UXv#3@}INuDl -zGq^8Tn6$6l4CGaG{J-@$LY5`xm0-S33&VIDe%6aRpnA+{VFe}I`T9( -z&XQOXJ^qrKEyt-qKGJeK{R#~TBry2-QV^vzA{FsACy@U7Gw^p4&2A_U4K5LOdo@Rpe-(C?yiVM0AK*$BTKjHF22 -zr_MWrV8J=8<9E+VD+`5!l`ZNoaw$+IqMfM}C&=+Gr|ijXW5OtO*NhF739)SW<2A1C -z`Vi_)_dawK;+eZ-EfDg!i_m3vtEbdzO+K*~z1k9nk)(6*mb2 -zhdD+qC~c_}?+}|a`^79>BOtCF&)Y-N9$>TG#rIF5JdMTK*>pk@wslK70MD^e%MIMY -z3=Dz;v~C8M*)UBgOp#s`j!Su2v!o+dyH>~HO|tSq_K=qM>;XA^$q*H74RH>(DHRM5 -zy7}ztk4agk3$Y)ez)$vK4b32fmz825-p*R`1Lj-RwY3stTi*A~6eR&gQMkfgsF+pJ -zOJn;#2&!|G`6#s%GGcR#_Hm^(wxyf<+2p#fPZPVBTxOQRO^#K{Y_le?oE|!32HR5m -z0f3Z7+@qPg$ltH9N+ozB->j++z95|7v;j~4h%476~GnzOQHG6$!PnO|eA)k_Bf${uQ(iCrU#A>ro4AP0F!7`#L -zLn#&LUZM!lxaTfdI@C -z_R#)9VyV4e$TPwEZ^b>{^H-7 -z3uZM*ty;aB`u1hoH~fY+^lO?QK61vG(;1U9jxe7oT)33AV{*B~D6B^C -zzw3Wl9FEuRfGRbMCk5GX+)jqKpN?E@Jl}5u{N6Y8T{o)aKixOs-n*<{W7>PqpQ{Xe -z*8JMLzFy1TYCC#) -zboigTu3rFcnlXb8?t(qq@Ld~wpYPL^ey=BQrbF&-pIowG8(CRtLOXC_zHw{YhzGS< -zu{&@FVOjTMeAT(GpT3=n!tGfNJFci$0s;Vp(Mg*wKQ|8V^IMkjGQZYv`L3&@9&_ri -zwJgR-AA*s`I?^xnr(@tS2aU&3QnId%+_bI>j`vBn(W^f!vzobnn|#q*FRxL*dk0%T -zeXv~BXWPPjb%gR)oycqL%m!Bfh01@%&4n25*#6nca|1T|3e4=PuzSA913`)c6L{=H?j?tT8v0Wc%)$P=*h@^0b9`&zupmk`|iz9P#$*|6oT -z()#1~eE-S5{j&IPW$?wPx69S+t7jYV{Z{2^Ma_qH_v-pbHtzGBv^~#H=tzxFJ};f{ -zM`AbbkMG-58ey9fqmOkaPksGY#f}h`vLE|4VA*Zu;Q0d6tTpR1qvs%^?SL+tu**kZ -z-cyfrqk{0H#BEh)3(84vpssG~$3!V2$d7O_DGl;Ry_~!uAjgB>B-vfg3ocG`wTl&*$sP-#yQ*e%{6*| -z^=_E{G`RT9HB)N;3NC(}+_7f|2nzQnx_gy=;H%g>jlr;=X*PmOU0#+jHjcfI(@6!lDNtWx$|LjhXdx@*9G -z_HME`wDze@O{%6tq@~j#nl@gV3tGhLzeFf`Qhd_*G;%iKj0XA< -zSdEJfv*eBq7M(SN(OsV%w9GJG^N56$LqE`1o-$T!rJ0Xq!<9q7mR=!|sM(xZM@g&u -zVk0&*&{A26(|)aTK)=#vWm@=N6x@`dT-4u|%j^_O2Yye8XPK}x!$ -zsM(T#tK%rWq}o1W0w{S?A%X^0eTG`WUDmWF+i4Rc`JVncVggpNB9zKbE2&(xp(y2_ -zJSkorY~}p20;cMXwMCqa$QoU^ytkjrD^-$yLNc$kJ19O}%mQOPsVBiq=M0ITo>EljHo -z@y^nME`wq_@G`3TJDD-6iq8Qob4;$ezxKQ#f-sxUIN@b~`Ps!g#!8Hx8+CX_f~QRR -zwMkpRjcq4uw%xHk0G8dg-EY76+CsFTC-RD4q=Hs*M+_D!)$D7mTr}g^y-QB;M4`b; -zd2ohzc}#6(URNMA3TlpA -z4}`BA&%Bnm4;iJ~pm7)DfoQemwyTLquvWb*IMN|K*jKY_TIo&%BER?S$IyqH9=8n{ -zoN?w~%1jl9iz?4(rvMS8QdyQ8A4s4h6PCQjg3M>@_JkzA{}f7HwciF(GrdO4M($Im -zg0#2Gn1C6kgrmE+e0A`WYo8$`X4E7sc8#{=*XE7HT@xrXwafp$O -zkSr|S -z?vGLp2ot5pFo@J44x-e4E+Rqk&D$br!yVfO(C{5ypLUKr_%S{n;tqIRD|!p~KUvMy -zD{)JSnjucDW>~Z&nw9twuUMsbh*Qi*NC7V6c7o=@oA%u#TO0xHz!8V7alIQYR3bVZ -z!j{BB(7HbF#|#N`1(?}koMvf~M_vof%wL}_puc(*&e;AI`I_q#C4l(*1)z8wty8JQ -zsz~6Xg~94rCvbbh#na!n14$jdSQO>jdNabWmnTw5Lt34bnd#SHjQ -zOw*1she4c@{iB#h+g`Bt-*cKOfTqfP$%Vjo$Cv}d_efn9EpSJNNiT-i;n6fkO98$S -z1;ohChiV%u%j|8J0MnSgNL9rJj#Lu?6)MmI4?9(}Qn7KB%fm?xht{$YeH4$G0AW?x -z7Yk77Yg?58Pfvz=PUZ)2D_~Ed#RfvC)bdG#f?Kd1;rOHf3xS~B2U%HG6}yl3#~QSz -zP@t*H0GR+Gmao(B3f -z!EKk1=DHc+r$boEhcUs4Tl{U$##rc@ws=lT!n0BtPEm4fj1=S}&CRq5c1};aPSX7c -z-@!HHS%ZW{qgOD0b+TfltsRyMmXfEir4NUCg==K^Ru4#L-a+%A8%VGOmEX!4r;QZJ -zJQkYRqw1qt#l~JC+_PczXYg->((y9n2Og(y$-|O4Zjpg=Ey#_kkq=#$m-$6gt`1S6 -zyUTNtx^ij}0j76094Qj6vJ5mumIh2Uq1Yn_vPzWVGJwsx%?mbsuP28>;jr~viY<16 -zo_g0V8`M-Wlj%wpMv}kAbsmMe+fkNleB>fAIOL91Q_{6NpMYb}9ctym1U@>;(N^~O -zmW^0YL5GK{NVA-sf>I~{4MJ+a#SFw|?Dplbq|@Y5GM?0%@Zw~+i*$uZZEMR*F{lJQaHJ=U>|m0oytu*r;o|(k -zdn3&+z{fkCWR}67Pu$xO<**x4;{q^?S{3Xy(heZOBR~bal-M%u7Xx9tHKd#Tjo|Yg -zCvam?Zj@2MZ7F^~m*wXlrYPQ)?v;&1wI#k+1|BaC05}WpvJ2T93q}#8j$O5InvY(; -zz+ymBq#)7sLNK!RkG^Vlqp9kGVEf8Kbo;RNV%JiF1&B^?D48)IfIMjGDjmQ?Zv@1J -zaz=TFRev>9sOQ3`o3}}dkOC^`=DDd32T(uoC?%Ddi>9IK3a<+SU&@XwTW_CE&C?~c9s -zI|%*4tcSzyIdey^Z$5ovM$^;}r7wKky4K|VHZK`wHDcWg#=R|bLAnQtcsAwArBw!Gc5<-_vYewLevab_NSBj4Wh81Fng -zTwmWi-98=VQ5XAz3lGPc*WM9sy=7kR_YYQEvRjiO*IArF@|mCLtnJj>bsTd8@3UQD -zE3`v9+1xvT*aaWIKHCFJtcK$S)r+0%=G{j>lbfyoczgceOZMw|Bb&FM#k|Xpy#ViL -z?`G#{!l>_PYU9NCzZdQd|H%oC@Bgv$|M*}8^@!Z~I5ZAmk;@r2hY&bgvU-k-MWqZ) -zHAL4$KU|$m8ie#C@Id|E`7W?(o8fpLK!WEcpXf%y?#yj=C_?#nb$h02lF)Bif2a_F -zE8b8=NLb0Lwd;&Vd0?DM#X!T%{9cpXkY^v7o+Ob*0UCnM)nb@T@FtI?D1bQ}1@{NL -zu-Dj(vPP8aOv&VGy6o_KjSa4Jl>c!uI`%s}z7K9(wvFq(I4%O-P*lx`2_vZkuQeyu -zE~?>8W@zitk)Q1yBKl&&sOgL$>KW}Nz15gg>kTN&`ds<;4b)naa%*q`3r~aiLTa18 -z>gxxU|G(R;ez}7lRR;)Y=Nc5~2krQuHgj_Ju=yWHqDvoZrwy*g(`Rj$@1Tji>zeiK -zh&%_S(G!*ZA#)|pr16oAoY`d2jZKB((87Ip-_I)m9~6?jQZn7zdd0d1*e{UJYw@Dn -zyzft^)HvVbB@)`GsGz}bcMm41sNdYvksDD#g1x#uT!L8i=f&w19-76NkcemdyMMkf -z{J!hHyZxHV3GbYl12NH}IG2X|b#-TVKJF%s9MfhJhy9Z8oBdm}8Z*h+KdJ$K)OLWz -z-*3Iybmo?d-;NJ=M{A6#nUw6_-VSNgn2;Z~&&+mRj8$jdG?ZsXz)d+vmp)Bov^=%^9$$z?Gf -zH^fpkaQ|&%z`oay58&Ov`m)GJYP(;>k^SM4jKcKOxgbo48(Bl!&Q@Wp-681f)3*TM -z*Ec11>R?!|YOw)g@PErJfbmb<_NJlSSvYfnhsT8U2Y9}WjxwsMscC-B@pZ|Wuhp$N -zXMz}x`3~!H$bNTAM+st_HG6!`(h9TsF;S<9`8e1+KSeSnFqRVf%Khao#1>E|V|}?Z -z$BREW`9?8DbSMBK)_(3{6UxNHcO`IG^cZqDL8i=+$o@H4_86*~A@yJ5-9K=72=B~h -zx}TcP72n*V(wKi -z0c|*JB*)r+eb81rv1CJc80UOTR2jETnffPAHQ>S3#5jwp5V;O!pa+L!JpP0FB*rCCvkd^FsW4j -zj!x6Re>khRMDW6IQHI#Q$iFkdfd}13ua}R9yN9pKsHg9xV4S%yRNw&ZQZ{`T8=G!i -zHYd<35BC{ -z{9}QppFC}|tHrzoC71qiD5*Wfu9Oc_B3@RQiA+VkO*9EE*S~f&JkaQ}Ka(BhP*gzs -zMzQBk$*%hyFKN{@Zh&ulq`C!M?H9?owQmK9^kWnI~&M)QYk -zU=fQNL6g!3a*M~(1fPl<0Ajt-0GB7%4U=(O%G;uP)) -zs}4a61FUJyw(jz9mhc&jTc`bgN#%L;$5df_b!VtM)c -zS?QOZC3HE+H$_QPmvEg_WmJNPIfxkOpb#rNgPoD((?Sy5ayAHDx|D#^7gO3+Btq3r -zx-`{Pwe}w&-6`+`uNGQn6RKWuJ6I(*aS}xE<>7u>OCD7G -zI=Q@a=XE3S4G?R{_<0hwz3rCTIKzS-7I02_k7US|A{NS?vb`B1nwB}E!8{U(YOs$^ -zs0QZzd{V(N$tzXOW$;UHqFVS4pFvy+_SSWa@6s99Z_-K -z>>jY!HwlzF=Z(Ab1`>(LX(g(6-GF`jqk9R1%==6ZQ1r>yl!(dQ0aC)Cf?V6dP%Z2v0c@h~Bkrs{oAvDMY=} -z>dOoh0k&j7?73)-MG?f3vE_0=GiwILjI)tPW<*Pbnz*wc -z?VQmt#;JNL{cQf1(U=&20fKON1pV|^S#MVz^>raah2o&;nW@{orh|zYfi8avJR4WD -zT-ZGP6}6`|aFsQKCRSFym&^9dhFOOEAc(A-46=T6bNSF+9b^TPpOP{PyG;joI|yC= -zj#xh>3xV=-_=)`o8HgSrGq)0?w+(|N$iWYDHa*yKXmOyMPPQ@QW|>c{WFfW_q-~6X -zY!mPVvyihS81alyarv4yqF4Dm_mHwycQdxkhJK_6!d8bMW-mENIpXxVhA24P&DyXV -zJiyGuHi#8Sylrl#0IWv$ry(LgHJQ8q)HBKu5eVP9=1@QoPo+eYX_O?+Gep6MFcitl -ztv$*R5Decs>`=KD{foyHn(V)&LC#jm -z)2cxhKBgpa?jsZ#P6u{?^S+UXO+9@qSYk3{Z9BA#Z}{qBMAT8kf2ynh`2SB;MA6pw -zbMVgG0gIg)df=QHys~!y${3CZAT~%M9?4H?G9Kl1r$XR!*K9*OI^VHKh#e_;1h;b!ysGNY!Hymg90ENZYJ>T -zE`w;fn19wK%Yigh`0CTjq|z33}&k;J3atices)A1E_9 -zT8iO=h*QvpJWgE~&zZ}bJ#+~~5fX?n>%>zNLwSNn?nZ{}uopME<^k)LfrCxPOpUFb -zwWcWX+cL#-znAt*d3sNsTJ>nGEjm%9 -z3=?-DIqIb(WQKuxWWCJpK_HSAKG-@iZPdVkvg*xhX)$1R0YkQ^fEuFxWL9+^%h}h7 -zkFq+vMOKvCXiJF)g>`g&^*3llf$4x~A -z+RG7Vx!4W$dysrg3=9?p4j&))&5)<_Oes9s$nv7epo3B!LIp7A&nOJdmcZ6WVS^o4I-R-NE`x=1y7)Z4~hm){fKZ;Eo*U7QEIJ@yrHAH -zMSssHRHbFQ(|XtY(V9Rd4&&eu@a&`V;l>}dwWi_1qT2e2MJ$>Xhn#_+%RIVcjF3zr -zvSZJYRnmYgp@{6#GDCXkDuw&OkM<(yaMq=?ipkmg!T0hq1hn;!-g0+_Z?suB112~6 -zQgT>#TcZO2IP6b1gl=etXMi4>T5HMc-Ao9u#`bU_f&6#ORmP{%0Ou?7lF9(;V$mvj -zNpu3@;gLGBVo3pKWTlpJrK1L>{HH0h9ARb>wYW-KvoW(4JymJQhJ|Z;Pn9}x8OCT* -zGJvYoK_qGb-Q*@iKb?DEq(laJoqNTaS_w_djEeI-?f(686i;$DOW5GzQp8VeU7&h{ -zVznR))2<=~_Q!VfD%sgz8jww9+P15q+j4vnH3VqdVepXd3l}x*rrZ+FTjbR5q_9bN -zD1Q|>zu38^z5zoHDihb8z(4WY=WR~hp;Z|R%+I~rhhRln@1CVe3eLG -zT>3Il;sT}sv8D@o-37xB4j(fvhPYIQEfbNv_>Br*_?vB@tHF{^)jc?*NDbK|E -zXb|X%74Y*Gq=gYaUPVDvmvA`oM4guNsf7tG+&ET_>Z?#=y2|Sb^Z+IE$+2~eZr(Www}QYQw{&z$}Cp()vFuw6|=n3=PV=}dW*$d -zu}_v5=7?{&GrL%{b^FW8rUsh`eoBoq1T`E7_OoAl65)3JlGcbWXHiFIG+UB!IEvR6 -z!rmm8^`THY%tf2VAS2RxRZ+OU$p&00n#58h1DlY^CybpTVvX4!f+e3lHfbl|`R{KR -zNNfYZ6ow7}O!$9D&T)}sjvG|LP+yD1_uMS@;I$D-7g#$LO@A?EK=vca@JV!;){DT} -ztvWLG@Dx~Ahk~GL+E8pTi;NQZ0E>*yxIfftT*#x7m3fNhSMBEi%jD}{HaLON2+E=L -ztlML^c@9hu>`40MQb)Y(;-P-5EMhk&lEsFHcvT;LM(bn5*Z}(hU#mEA6F6q-nAHdt -z*yesAyRozUb}JKv{MZa^1VN1AxxH`P_HUVU=a^;2kc%jR*5m%&+Xe~O?*qMIQ&C`(W< -z<|txPjuD8CHM*9jcB`+B>YM;-Z_?d&h4jC(hnfuroy_o0f&K;dX8?<*88aitQCK=>VxJ(jM!SO4-L|#*aApJ7}Ln-JQXJ&vFMV~ -z;@u_Ms30ebrWLRUO)9=~L-2#V)3Fmz8stH-lrUgNbbEs|>VsfUY&VNdrr| -zpG5!ZUXFE1dm}VU%}paRrvJc{h;(m%KxqvTTx+@lM@Y`UrZ)smW}>z#cn&KBKI$_Lsxs*>EQw${IASKmh;s2Iu}Hmt_h-KKE)giTp~ah*fQAK@pm`PRlL -zHJ@Gf1*dMS;2!p}h*Ptr{7>rh5SUJ%^%>!Fz4R?5o(mBUz_oP5`RaypwK?d$#v<`@ -zT>EC*gYhdnu+U1v)8NS%*WbZQH!WVAzISqejtv|ndR-jxh0mgd3$Z20J3J>{=lIud -zuc_C{SjRKMHGcpVDwx>6pmH}S>}hV))=US<*7Be)c>dBxXrAXXvX7)NX2~lLo=)WE5^Y+I$DmM8?7Q5eHv6R -zCNjo@?Fiby;N1^&>fI^aaz!vS(O`y2s`Ihq{go6$ -zl>o{BS{Dj}KD!*4)Jokr -zO}uD>dOm*Pq7b5^-tBj8nyF!o;Vs9}-{fV_eYB84t#^thW6-n4%p7rGUhlt~Fa%zf -z26TR3xAT3Be2ur;jyDP`=>i9b%%=031}Wp=`{HQv@?bYhM~j&4C$10@M3v$|Em!bs -zY$(j$2ny@?$}12MUoTsjxN}ac -z>8MqFay42ZRHWv-b;D}qBq|qC06d;$U_=^;YkB7XQ_|R1JXg -zv)(=e)!781ERJ_d_9LM2(l5e(bsyoR@9gz84TkKL8BAtyP%vHcuS4GmgOr4Md7vwY@)+TjY6m66jW)DgZh%z;S*Yqawf!xHi!v)L -z$R;#51cAr4H)En;N{nv4EW<<%moovn+TiKCZj8@YK*pb4v_LYvy60EOG^smb-tXNn -z*&nH5baWQi!OB>wX93CpHtttDPq~1_;0oe;s*thln4+pcCGtRj)5u4qms=?yUM;nh=x@sW?-)`ZNa_ -zj?V-!ng2k2a2iAB!hJJZu3qX*W|J>HuC^@SJm$|=KRm+(&)9zHBAdM6SciQStX~8Y -zT@#|e3U1bKOGnCV?|@5UkG8F84G^W6cb6yXLix0-e7C&n?3mD2Xt0ZpAFdv0D|Z;) -z(9!BhDeGdPwkBTU$u8@AtPCl`#?LE5&faLu1>DFsCRDwuTxL~8v}*vhk+L?1!=r*z -zBWKQ5zl(QMrcHS}tm$3ALZ+|61`V5-0zlBy16*Mx46bV@0{^jfX@-qjyxCGjfpy7J -zhycNWjC(g^WlWe7{bPdcmxNU2iPk{G<)JVxebDZ5u?h|96e<&loABOsu$#?*U75xQ -zq7i7vj~LvqvJ&FfO3Tzn?oBuGaktk5K=6Q=ZJ5}!ttUTIY3Kq=04nCv&~(?;GI)w4 -zp+UMTbE2>MiI4aP{eLN~YsqUHQ~XuUTvRx5eIu6tnZATrmYqpD<3#AGjr5$+h!?%I -zOj~!u)J_1981|sIYs%Dme|)Po<+^-*;wf5|HWiTPomc!fWfOdIrj9*2-P?lGRr(q2 -zt$5wLXTx3Ybnlz7HvV~>(-qoEHUE}`m7dTz=ugD<;FqV2PqJKQFRbo)a=@0H+}o;w -z13u!f>72ULU9N)_VPa8Bk%{+q``Da8dsiaI_f+zh4;~SOnC>ikn5p;#tPY)W -z5`gjb(RaTa(VuM`x@pq9oo_HM-x{4G5jOrzl{$^O6Azrp43i$BX;6NAZ1jpXmOKW79!pk=pzWU4VPrjmV7;BSN -zz6=e_qW+unp}*^eF>gjC=y+vOj?g4PY46ltqB;lv#A4MPb569xSD6W>Muw(4?)RZa -z*-!c+Tf}qr+;(y|aMh7NFU$V@rW2UDuN1=h~;F`Qpvf$@e>CC!B>nN;iER9H-Dc^k44;DyDfW -zP7N(GYgap?E(}7!NTNOF2>pRw14kG}1-sM9HGSbLve9rk`o`BKWW(lyyX0k}9wk3~ -z)2II>inTJCli}E~I{Z8MbWshAt+9-^j!m@Jj9I;O1m1c_ISt#F$V|I`xN_Difpx;C -zwj(6(4zlIXp;GH`!Qoq9`PJzE!P|~_!rtV3y~v}v8a#^JkF?+RduwpyWH_K)3rO(^ -zdQrBQD_x|=*Lz-G>ZOM(-M=!7M(E}+K+v!^-SU(mrwJuF(3;F0x5M6fAhZHqW3@@O -z|BF4O2cZceFxYc={T*a$+T7K#m!^Pa#)s$g5qKgyaNH7*k;!l4)TU*3{_%Z=xS -z0WNGBUq1uM>n;B-TpwLQ^2#>v+C8;O&N -zku~Z#zd~t}$sjqJd$pRF%Nh#6VQqu$zI-*2Q -zji{#&X*m<%Y1;MYspOVpqfl*55?6npbFTLpJ$!MZSEj@VH?`7Jfh3WuI{Hmr$uxO! -zeVddVA*}`!)EMgZ0eZkSj~ZZ`k3#B63WX&i<3*&pur!lj?}l3}OV^G55s3=R*IL$D -z;_armjnHP)4Mk}Ys(f>XM2zOL@9kwd7Lj#}l=%Y0jO4OkxZfYoD##3#ZZ^YTRA3=? -z$pgoIulzn`IScWm|F|*drOe%4HkE|lhL8B`_+P3=ZYH)pnESR_lE*pDTm&d(x@(0! -z9@rE-Y53J)o%^#j*g%xyF$^=^98R)YAciWsOcq%kc_j#6D9307l)UoU>?PDI4XjUWsQlk8<`)8 -zag#;pECMx>IV#3Tp7l_L$%~-`w$;!Pf+RK|!xa`)A}<@f*1K>ALs{bq2Zt|lp$U`n -zib}YwS=W27PT)C)GI{|~ld2tPw36tF%DZe`{A91=HHI^K1N|mTJ-zx9XO -zl>=xAJ2^Kor%BR?jhaWTaUT4@H2F-d8!yHiDqCLmIe&9UF1Hda<@39oCg2jewRdjD -znPrY4YFh$PRc+ms-%npY!=JI%^kcGXu}0+x$(ijzXA -z#Np53N<1%Al^nvNhS&6f=-`@Kv(*AmK0p-3=ou&YvS?Z%1vN?0SyRQ@J5lDT9e~fc -z{yZ%?AE8K+lK?jRyv7TG24gAlp(8|^FrM=x|CP5;lWTxbKpTePVq3kE_5jp1nF2qv -zFySOREtlj_!hj6SQap3a!wSNq%-|oQ(jXww9FP(tsQi9AjwKz(>J&Rw2i_toZ1ieN;1$n` -z3gzh7CL$HmAaj3Bl2JOr2O%looXR5u4mu{kC%nRb6Uk&De(r;7!@UmpggRC0fHax$ -zq5ro-KK#J*&Wj#A%#WK-9-h%B5~hlH_16rOBBzMfT+^au?c1{h^zQ;aq)2?;0k}me -zO_HJDT7ZqAuRtIuvhC_sy2f9)bri_^fba&Opx}zq1g` -z!lP6OHDqW<9iM1+HhGpyEI4Ot!^}3Syx|J93&(h?GbE3`X=^lGyQeKNh#m7%wWihm -zIfH71KoYx%?lAkZxH-6Hi-=F4J7CJJ{8^2Z$y{^2P$ycZ1CcH})EhYq+9MtvV8)5t -zA3dQrB%*Bg*WHh%LN`j@WZnMdC6_C*rcuR@bWK -zU_dE1QeGE?!&J1wOd9T{L^Wpz9Za(}Ior*^xvE||&^N?A(2d3`OQf&xSMIqeNxK)y -zA$`iaj{H>-jHYWxcjlqfHa8k8NC!jsF@lSqG~mf1pd$_qX8zDA_CbWk8b1gp{Q~ -z{Z)odn(~s8s@JVTZ1Mh8jhGLnO)T?K&c?9s-Hd+Q<|5#*fz|)H21H=QCOSsBt@#)k -z6(@Jq7maBjQ5f3fnq -zr`$0!-n>pQA9%e^WdF{~%&@P_M#CObM|hzVIP4lkE9Rh>@6Cb|M#=*sM(O}B0DiQt^%@_vTSql6+UdZ8uxV|Abu~~_AmF95J)TTq -z!TR*C6q00H`4V5vIA`v*%^R?6T%k+ULq*0LsNC>dnaIk%)rf=4<2^U)e9hq7j(+xQ -zuUu(~zs)+4JhQp`@|7jeFOJZ+o8#m*qnBYIN3j6|IHc~S^$Mim!ajn^3UGQTU?MS{ -zi1SM-_2L98iYTI4lp_?7P{aJQpsZh#%9D47fUFvlkEci#4dD|ml=ZUQPYf3QHs>xe -zC^2DlEL^&=28?^vTygN$oxh1V4jk)Xq(Q<_`D|zHE4MF0git2cw04ek{;ib`?=MJ~ -zCfQF7V_FFzBW!*kEX$S8&!sr_63XaT_Pdo9qgJYHaEH;axw_L#N6VO|WMeN3At5y%5H{fX{Buq$E7XF;@IH-RKDo -z{?LBX%qX>h(tyUMWkU+W+Wu_6J7n2-=pG}lnT1ntYfnhIqPpJqZp59ErNF1VHr^6v -zqMdECuJ)iIdGWH-f7moFUVvAMb(<=(HnJ#X|lJ~vKQv?N;F9|Rbxx;^%R48YD -z-zZfHSr$|1yavx|T5{oo&N}QBcsl0-Q8A7J3@-k|iTw_PY-jMIS_-xSCqKfy;^JfO -zyJ!`}-}`s@&SqVr3DR+K+$E{4>j~XN8=>9hC_})d9lr*H;<}nw;PA{=sa_jWc15ij -z&@*zX-qrL@4EsnV_dMUJyx`M)+~i7ly%fw)775E=2vkP`_s2lukw`vF4Mx4T%Jq~i -z!&tzMHi>DZdW*%@KfN^v?3^z5t8AhaAt^O8x7^^bvbx;OX4_HrAEM}Y&Pt7Q9yLrU -zT?uQFiVK6fUods+w6Vg2Zi-lsMuh6nQiplA{6*5Er?1SLzLmO^!}Wl>TZJhLLd@al -z=NrW-dq&FPKYe=#q5Abvn`F+($M^6B>-7CPk56#^=x%QyOC$t4_~Om$5AEz-qbOpAP7A|E;72*c*JmT|ry>ISr -zUp54{o9-!y0T19VU)65GUdMSIidBk*nacg;GoT|LI=w~Ir0IsAt+p#;%HhN*WlA&X -z*#~~1#;(Yv2f&HPCLEZzS?BNDlMT|+n6(L8QK$90`0%Kt5&-X>PNqE>5-_S -z_DI}6ED!{rGDwL9^sVdC{GBrt@t&IjLD2Y%MGMAJe*v^K>Uj^*Z(n-6T_nX5B{xVS -zEnD3T25mXS%jns?R1+TFb+hCRZx#yfD^6=*UPjkh=o?b=|A)PIj1?|u)&;k1+qP}n -zwr$(CZQHhOoA0*wyZvs={?19}PI6Bsncs8QkF|QGs=Jd;ccrSj`+1%L@GVSseAD}W -z^WB{s+UhByQk{$nM42FAS3?CB{1{o&%${|w}4-O`9`FDIOx7bLA-xWC}QW} -z@L -zn$_m(eJt{crt9@04zW9I%qEz1X -zi8AQy-tNMwbnoy~o0_u1g%M5RmQ=buePsq6X>QA%@oiuDaNCkY{chOdy?+)suoh=5 -z^2MSu>w%2<8-OmpWn^Xe+~N9vf$|;^U4v4TzDAnx%wa@Dx3KYLbD`4y3?y%So&&<$ -z{&*}_9Y&$CFMwKPr`B;bj7W~n8~topZEMV(^1xdFsJlR)`%j^@UQLj+-3%p4PT68s -z`Nc8woj;TsO?`HvYBO(@V-)l4OEX8^-BsvmwTkIW59bsM+^VJRgtM`4jhYJt*tUmZ -zRZMkM6$)jS%}>Dkf1D(4q0I|CiIlqKYx$C-47Sm5R;M=i3q)#jKLU}qXy||^OlEBc -z0#DFchsooLn1^2r=36;wp~xn#n42J3bWic_$l#Z_FF*t+%hf*>xtWkjv7_dyS(1%L -z*YqM9r2diLhhT`7hI6vAvj@431;|D`;98Ou8(`*Kx>>n9_l&aj%ioIf61=nUD&~C| -zy!RV)7%AFOijbz)$J~v_uRi}n1Z!w7(l{75IJ$ymbyKA#Q3IZ9`^%B%($ -zU1{E=NPZcqT3 -z&dgI%-CBIA-qTakE*k`+2Ta*m7p%}aq7)N^`vJrWU&^2nTkp)ETSwD0vVz@Sg}9je1jA*>?U^A~ -zRbXSF$#h(Hm{tHD>@aI~n10nGnJ!IJlZ2CaB5W=6Hi`_|#nUU0j2e`cuk@JbM`w-M -zJ(N{FnnO9Yz0dpO`Jbo9>!{Y5eie*^VW3J)M`+)%3t7!lbZ~PMKyr3htw?-NHGyG7 -z>p^_|bWR=#f3jq(eX!3F{ccI!028nCOI-kHhp8gvLU*zn9rMagitWJV6+%U~{~Qs8#Egb{j+^G_z&!1U -z7T)x8jX^(T8HdgwN&XG%GGU=XtY_~KYWk+i(&gbi{?Jn@H4V6HAZYyV0Z8200rD1i -zkp_=Of|$EZYj0R0;TS5{c%H}gnOY7x`z?HE~AD}yi43Bw> -zU^`M1iD78=7XjF`i1_(*R+T35h|O4V*6}hDTkVEsEM9sda}SsSs?!+wJw?#67`d8u -zzP;6iHL-G``$uHRrVM%dbXX8oI+Ex#HIMPQKQFm=AX&rRA=jDRdV>6e%NWB2nQ3mq;1)Ffx9PJ-DhIt* -zS2dEKJa`dWzD9n9w$#iX1@NI!i^97&0$aAp>tB1fOBz>_u;zC21QhQevsOkYlw^e! -zCTt_F@6VX6ROtA}OwheWJSH06^(i6gM|`GJh@9fgjldpB$P}Qa&j}7x -zP@i$dp_1-|3vMk`cdT(7$vNQ^qS+-P*7FPAgz37h{ -zMa~gYEy-GMNH<4;vK_&g4y8E7p&P-z#VnE>yHuReY5y&=D_)Is=iD$W=ennh^wP!g -zFdGdvov3d6p|@sxx~oiAb8y462$z~t7cwf{rA1$d$`zRss_=R*Ddb}AYs^Le!H+`$f0UY=rbNT^O -zZ&-@-idnH^r=?-i10ckbwriY6WeLkof?0(TZ}UfKDv`8bJT>K%;X@_F!Rs$)w@5`t -zg4z`Qh47Boc>UcxhU$+@@LmMC7CIG$EXA3^{%8`r?)gK^TJh&Lgfgdk8>17Lnp}k{ -zC`DMS=j|9vbTGgIRp-8wMh}3;n4@raHEOm-1DQL60}BpI-)ZBZgZeLJ0#Vu}MUo~J -zNcNVQHlqf@6GxU;@b!F@gXIWSkA^N2x1=k_#An)yJD9|IAuL*RT*3L!1Qt(QmS=eI -z_u138wpOMXFb}?BFf8N{Mg-Xeokm2N>;`q=BxaRmvJp!RV&V`rpmw&A12s-Bs!y-e^%T01l -z)f|+fu~RyiR-lufzRQ8cLAx#NGMJ6O&nZm-j6LHzGY8uRegs`CO -zVE*92ctmLD4zx{2YII+B)ivE&`l_c+YcDG)asZ@%;EwIuDn#g-yAzL1sy38k$N-T?0k0szZE -zzhnc3?Lh)WMT&UaIKnc}QR{@uZ-3fZMt_7&7okB~=tDKagl9lSEvvieY^QZzAb -z^|LJT(nMCj4a8!&%4@8RTU&i9|*^o_V+RzW~!M9gLmZ+~Y< -zP{Zj`gCHIk*~r%igFJOi0v3gZR+phsX5bSA^#m~@-u%@%Oy(d#beV927Buz!+NSpr -z8~zM8OxlLUtSP5I!SWh_%Cgb%9b`=NQq$C--Gl=uaNc?l9irSAP?g0=v0YwzbTsg7 -zZ1BzHxq}ChP{ACYx%elPsX07Hz--#lC17EpLcH?fPuHHK(^!yP0N1%tb=x0=s+TFk -zo+NC_gcNkgRw#DO4L$ecOko{sg(T1Ha@AT8(^(0)XN(I+LvIZ7$s5C*Q*1)K;}jQV -z!Q1I{r~_B{%|>)^1RtODqYE@Py;!?mqY9)lyw7eU19+xZvI~?Pko5PlY;nBlS}1Kh -zLA#H$y5HrLFY+>Q$gK6Ym;flEleKI#aw)h~XlJ}&7)|jJ^yeXlXOnc$+HISroit4o -zilH+Va&8>T^?jw7-OT)po(HNzS2WHKn`S`Kq3u!uHOXEUCoGb#j8z3`z!+E~N|QAn -z1Tuwdd{r~p^)Dgc<1o>$W?B&-IXcRSsSiZr5e4rh0QIDWVx8A2o-7hwfIGqnS5^QY -zD6?i>hSZwPOEZ6dZ@?)F*RB6DtTPj8Ed-(MEdV7^Ekdh6>-1F4%Yq+poCAoADMp;B -zDn`1|TbVYZdwR&RT?ddsi!d`54x#l0mm%6WN6vHFXe>L!!|XaSLJ>)M%vl?-klSWJ -z11}>HB&}n{Yzilh+ocvKri-8W03IBiwnE$W%)+&2yAI1fprau8l~!YjhW!1G1-BXo -zfFSAvQzklKK$#I(IGTR9<$&uUk{k^Tdmunu9v!UQfcOhgL!3E!sfxxdUrv#-DD-7n -z$i5hU0kJqO<|+EUEahouJq~MQw=Sc36p@g;!~LCzvUwC&Rxrx5;!87&!}*&$BGLW< -z!2kPuyk=_Ip2C(vFP=C+Cj7{J*43HRR02HS(;=`X#uIdN6(l4rB&A;QQ-Hn17)P7% -zhUi^wHQO94x@fON0nnuKQZsU42wRI<>G_!Le0F%a_?VSi4tg*H5FzpcZEz!)K!D+e -zBEo0Z0Hm1vWHAvTLSxWU_`ogR3dAxARTK7K(0+|Ma<-ek7l@6LwrBWWWs-J+V^#;K -z{0El_r2&P=K$S(1wG97Mbrfhs2O0vR*r1itQM)epg+ayzvlLC7G>aw=Gm_<=Ch+nLiVAYTE+-1?`F?LOQ)V?Sh%|1oVSTh0;rhY7oyq(5-pu5} -z!|JYYk=0DU%dr>oHXWsJ)dF?6zN-$<1zejhK^m;TONxvHR -zG;ob>{g1fVphL$8-T$vVB5Aelj(owpA}?P~_?95w2z$dhD0q-@^2D)ZOkiF_xW@>o -z_1Ep8CBlL!>6+u5P`^#yV`B+LDzZ+{geNoDS{J&w{Z12wRR_ry9Fpi)k2ry-?>=?1 -z&il?KNRJZbDd@+SXi=8DE^e&pS8Wh4DV!Pty6))tm-T1-vdwr?b0eaw>(3<3I)#>I -zLUOu|jcEB8r~jVPzu7tTXo`+l!@0Oor!gC&w_{>F7~(CYP3ERnL#%=5DY1JR6k@1M}wk2z2_ -z+HJs24jQ(m*O8_i6gdJ{SuENY%x@sAuV!@&s{8XuKc!q+U68_ItXqJ>$Rq2q8KT(E -z90_UdC`gtCya|7j(JWJC3qCSQFS6N^PhzcOrCd -z11Yz&4}wIY3}D=YRni~w1c&!K0K+ZKX0UswmV7?ws?ou=BmIbP+mz-JU0VfR{g_X6 -zHiE3d%hQ}Kg=K4Q$tE!OjGjd}TeRe)OX#Kiz>I3gzo-uz`Hty%wv0bQ!M$(#HV&H- -z8g2)|!+?jh4(^VlgD{aCfNU8d09o!4ZRrh^v4^lv`~ZE%kDh{DD6K10pmc29)dEYJ -zx4CEb8~XvyCUZ1Dq{9U28BnK4r!q -zH68;j6{FS6P`79=hl~}QAE-4~hKdu^6o~imw~Npg8nsu7R?QXB@uIx|Hhyu%gFy6f -zIfMbX^Ne7wpg`CYeh3c&7np8r7pDqL+uNbzdwD@xEb2kfW(raDxB@6TmUopNN+Mx- -z?JL|_1$LQQ1Si*j8hTUjuspY}yJ1*JS0ACYG9b4=UWT8SVN?dtU-y6n>4_*Ey$JE -zpH1(zy|zS>pQrPKrc1gObx_4D>v;-~vGC0F~O9k@K!;nf;-H<@8TGnz}<*Oe!Zdy2|`WL$5 -znd)Be6TaKHDIqO>16-;C%nAMcZO`+Je)DfIq5ezfu+T40Tlr5iPsDSa%e|J$&K~PA -zARt_?0p;XNqv+PA#E5ljkB19w{&nL&P;|g=xIBqPuYk6F6k_CV8GqU5ZZ-XYEu{my -zwTIF|fp%f^jg>ybEsPARM@t7qdhv8bx$gdDfcfCR;35ee`cmh+b^u@lE=7bq<6(}} -zqk_&k1{grL-0olnh}ZhPk|cNvlW}1EyWxE#mvR!OOw)j^VXsUg=LPneJ5xDD`Jl4t -z-bTJ*u8q1*<;6~IRwN{@@^Uo`Ii^tQs>OZ|!~k1}U(-39=QW-{b7Hw_1mxsfcAVoT -z;1ZgPo```}YXnYpOaUUVOwAwbl5#a8lCr@?OKv@!il&-W_!K@R-7w)x*Aiy1kLtlz -zwDa@)MT)g=!w*TSvpTa>pAL<3=ww|Fdu+{gFN3IcM7wYQo(meK -zpDnXENS7}Qz=1Kj!7Jxs@Dns$rV)OiQY$xPeD*<<*90Hcl->E;-O%$2V!0#A7xxO~voaUn)jJ|`j*c@Hi#$T^8! -z^vUWSD`lUSf*>^^Vc`5^5r5SUkUbH~Rns*5T>oAUxooC+&Uh_G`sD-=|Rh#GK-6bEJhzi_nR4vYH1Vul57d -zN9Ph$)OUWKT1AEZ5)}QFIknyfzqS^l)`Gq)vwHiTu7)&-?y?D-{|NQSh7P%c@JscM+w$TN<6jrL -z4CEuzBtfUOD+Gt}lSP}PoLBL`l1uOaw7bHh=_VX>Z#MyK0>D@{MIJH2A}FXo`hO9RXLvhqEor&eUM=d9d(eAdw;WbAHLXM -zCq693@RHDMju#-c7H;9OVeY!!TOkyqLsl5X5_|i=;CMOnIW3>@MPP^*X>8mgGEN_gZW=&2n2R7 -zu;f^FvaqJu204*gC!gewkmW9M^Bs=*$U!|wF+uYK>wy9s2Ax_;OZ?|Mt%SMUa>)4V -z%+F@2VIIhG{NfR%Y;iJP?{0FL9PtyJ61%>IFg5U#@G=a#7TO_sL5eQ9`D*yUyf74P -zz9U|UVn9A@$Nwe -z!4WTU@kKCz1!E}Ieo`QU#2`F^4v0aYUuWa9ZYfhqndkmQc8e?_zZRF#nn1p*2|C-emfu -zbjpeH5Wy(G0=3&ie#l>8Edt3W&MOAV_XFs7l>%_l{`xAvBGnx+MvNDiMffwZo(L}B -z?3{jMi%mi}fq4|<4L#Z3Ys1){QXg(srlWF6(;SjqhE%NXV^c_}ZXFX=hF9FTe57N| -zg0?GAFv8<3nqEhH#rYJ|5Tk?)X{ICzAZRGTO77BT#tCR`jNS#vQW!>7+J(-Ieo< -z*iC2dsWLt5FEIVmf#%bxb-M{_T(#lnblm_*%MrK%iRJd$@!68*dnZ?%KN;JlKN-u7 -zFBv|{o|diW)pIf0Yu&lX#()MTb1F4EFyn@dM(jRN(NU3oi#VygLYpXc)-8%U!3V?0 -z*xov3*IA*}#L)ejNwN3Sy>;!je3S404{*};>f%!QIn(06YfeNyD?+ovP-Nw{L7R&D -zf?B=Tt+{VbuNtQ09gOSqr{b=hI&}&RA6kalEvvZGAR!;8gEClmO@AL{2j0gspE7`{ -zT@&RRNv4>NJrTK~#ND5UJ!#K2FQ00?l`SQGj@`{>l4RYi%=~W~*v4R9SnxSeI7Xxa -z4EN|s;jF*PiU>pG2eYTk2gyM7?9n{Ld*oqWME$}xE(p+7%my#gIDcUS)DCJBx@!Pu -z#qYX_Oa^+RQ7i$SPb$e~I&2~dN(Q^$p(1_{OPhvlOH|loDTduh@g9+F3bHj!X0q;N -zq|DGTTmx>IU3B$bshV*#6Eh~i00;QU)44YBr+g4(qYro#>sX7x(PHIN9QM%REniY! -zU8OCW4%MmXzI1yx>1Q(YI1_Nxl+`!mK{ZBIM}tMw(HH#^yRKUUV||0L7Ac -zkF>)#mvMlC27wyKi9940yX89VR27U4+Pm#j-&RC$W2QOmOVyW+8-57JQX!R$j39$o -zj=+Rh<(~4xJ3>8FpgePUYt@K)XFt{W4E8}BOl$V^i$A^h3Df8WNwoHa={2`HpCBGEsmPLUIVm%_3byJ;&@?!mW9@3xO<0Uj?qm9VRyu3W!uS=(~Y -zcZ&x>2~tKHQ7%bbVeED*6s-`C93K#=IK%i$(qrjx+M8aW$RrgPoq -z>6@#R$+-OMI(?98^OygmuyMJxZGHW#mux7U0~m*~V-i7f1o?+?{d3mxc0YyGu*2!& -zT?1pMoyKIYx;LvwX-&iFOexGbAWREV0QdALfP2uo`0pbqf~TO;ncjr7rPcr4!_1OG -zo5mzFRS>vR3P(;0dVneE9%4Q^#D+!Tc5Ts}jpVd5lldz;e^Vz5cccjl(U@aF -zjrmd*Y4KM8gs`jell7cWKPW+pFO^#<`hvwXU=2vlG9IKVsMTE+Hu#O1{pq@};^R%v -zgF#+Lx=^^M1RyA_Zj>`yTf5mrM@4mr*T!*x@zm?~nhN2i?cCzbp&p)F4#6LFC-W5x -za(W3JkGAAReZNR-Ham;CIp(LQjsW>MBrR -zZBy<=T0u{po)q)JU12#LW&e09KN_B$wSPXodC7|AY`FD -z?bTTbo;^1JFTWJ$#>*X77M7mnm8GL*Bkt|AmT0>$JR);pULB{isNnc|3G>>mX~>4; -zq|!ao=-2kjgk{%I{AEuUA>7D43iV315^W(c828f8tJQcxAfIY++uOU`Y%w!{dFvm1 -z#(1f+O7zeEUX_K;!7BXUK7sAxrGdh;{;q#8x_yguyeYj~#}Dk%M0m3x>iLd$u-r(} -zb^-IwGMKAuDqUqzRF#!>?b!+z%>2x8Z5__N$)12HUJ>cPMpcMO$ft2f{5(F&QHzqU#8{+85*zd5Sd+_1j@#Ml{Bv^3%YFNkn=HlWoeARB2_Xk_X5exa9g~c`w -z0IuQUFoM-97LZgWb{tTyOB`rH`E6`!@RF$Fu!1El@Q{L4bWMn@L&ar+RT);0R4pzX -z5Zus|-~whIEeO4RIdy6^_MC~r?_ZQZSjq5Zje9{patap>c*<$v18s?O+9E=@YIq_K -zB`CH`6rgh8>)u%kYkdcU)?$g2f8%^3j(=Y#tI1r}j01)h!#F)ShJAraDvpQOaLr+c?M3+F} -zWYu~T&-%oXfqa6*UN`2o@sYIsQLWx<&)Xh(E1vigMtb94->1Itx+2b#IRGf=wa(lN -z`|fF9cqv7H2YUn~fJ=6BvoeBvuY#f7rD^7W-_kx_@$;A`Fk?g -z!m&M9i@WTKM*%XJkmlv&Xv0J?lZ~@6Jh`&#|C8%4&#r^rYQ^H=lCtXT07GecJCfFT1{-RlnLmTc*?f^z7VQ?c54kipBhw!)M(d -z=5L#wAQAzEtK-E=MItcLY7>k2rpqW=I5j!58@&+8`Y6nED= -z#ane})Rmt{dv)*8*3u;B6iC!vTs}@fWWt5-L}d_lUe3~1Wu=R6%*~~+D?<{WAU=PE -znuC$57Yn)z&xOL$m;U|8s;%y+>Zb-}Rk_Jg!4-a`U66}v5cJ4edo-i=LQk3CX5jif -z8dr(3oF~}avCQ1vCMOp?PWieX -z6RlYa+9v$U%#<5?8elEKXT^3a>UzU^3#(aq$=X;=%F9*6SCal^CB5uvLKm+ijH>mM -z^KtG--Pyhv8ArTs*gjCYV0dr50{hgVs!C1xtqtqM`=3RVArM) -z=P?tsCdxq9wk=&;t*6ypXQP!dm76w~D2K3@V+zwL9h^hh>zx^`h9#DoMC0A3jz}Zg -z02QGlT6gger(S+vd%Z@DXam|H6_>7X2@3|~TO}yp~IzPp3~2WG?qsnVli_K8yZMU5PJMh-5@-Ac1X5-A3-Fnfsa+TYU{Mq;1{#MSn`L;zKFg^Z8Bte%*mt44 -zSW2}Kpd`T!cJ`i3?*jo*W_T1>s|LY|5dKtDnN&RO6dEfcDoe{H7` -z1N_mNJ5;FYSLwIA -zBy~oI&P_xZiPFQqLEO)Y_$h&CH`%Wl091lUAvv)#)23~RE;g94?s%8WXaDjJhxZRZ -zQgZ~~+5FD$-0Rt|L7S=dF(Y^=jFRT1LC+3%&vxzIt$9*Ijrn0+=VuWCq}%Za&VTq@ -zU!C>D*F?NXd;J6HzAf7eh}5mQw$MB&?%~YxL0L8yg7%gt1WQ{J8h-<6_tE^_<*8B6 -zwhT&w?GNqeZLGA1)@9f`NAaqy()^EpeKn_dx`8o5pG#vvk`MRCelsE^FMv#4smO^< -zTM(Ls1F|Ly9LS|@DzSi2lubOSY#mEA)sduJ-5R!W`AF`gf45cVH`Bj94XBIv_Fgja -z7hMLod$n3#UZ3e0tSrF8FDy*kAn2283?v{hAYqDAY&HJkX1D4nQ_a|6-nfJW--o1OYU4FIyE`9qFO{Njo -z^zl37Ebh+tt>)?hVw;Lk@1l-vWhqFv>xz}tRc9}9zw7R9#PJ5$$&=1K0Vi!bhq&B= -zj=-Ar9AwxO4}m9Q0KY|$QFndaz1kGkTvX;x5<7hstgb*SDMyKuWss4l!0^sE;V>^~ -z6BsMvsN+cg@$V{7Yr6z;uvJ&}{%zXwbn(^6&GVNQPi*uE{r=58cCB8C_k6b=sD&Ky -zety6n4i<&n*-#`%ee{#?mu>ZvgT>%fRkMi@Py!SIbIw`=p}ZU&ot)RV&%@-n{cQ!I -zG1w#D`agwsLcRg`P0)3E-5)bMa0R^xJ;e}h#B`z%b}KQ*_PiIk_AI$O^=Eql1pR{f -zv-MX4M<}8w&f{g1*+houCk&eK@a!H=LKsf-&xQtRy_th$L-LIiFQd9!_3ElRw4=7F -zcx%U3gx<`+?BPL%dhD2^@`BLmFsZ<3$9WTCe*}EDAaBvE-g;^N$jb#fVRR}M0XI_b -zaz_94Y7dNCv6pMukUX!CQbzqQn(D_(?_cnvO3{0hql%ZJH=wpm -zZAXw1NygJ7SmXmtF?fRmjF)DhpV7q$HGq?1X!%Y>g3*8f=m0UkGok@;RtPF|)&14F -ziUcFbC@RF+0xDXCNWppI3IUuTtXa&<6_SCxei32_C(D378YlyCCWQUYlRZ@;HWYqe%F-N~ZAFfE=(YM@Ck-s)(`gU -z%)#?=6IbiVVGr>QIKDh-=%!h -zIsRDuihw^jzoPe3e*z}PJpPvf7wH|c -z*WQa;75!gWG;{Z9@V~fL2Mh}EL(^kkG!GK(y@)L^F`<*6vh}g0xaI1^jPAa!EGHaa -zw-!T=R-N~EEYvn{Nb$|kjtjx1%jIVoTQ{-T8A3vg{{Udw5*=oE1pRU-g@37nsZ(yn -zW|(<|2$Rx&XZq&3%zp7q2=A09c%JJ|%uPXl-)U43j~4W*aQG#Ni=k3_9-Lb(p>&vH -z$$pJx+w#%5qI^HM*NXD=w4!=CxiqKeL2;dZ+bq(97ZdrRr&tj4a4ABK4WECYSLgW1 -zbRz2PG5;@R6m|0?vwlL>~7D -zaq*Js7b4iF$)5fguBI-l(=)Q^&J>KL=7{Q3eoVoQ*k)6M!<|W_)&!L)iM&DOYY)<$ -zm(@p%L>1NB^h75^=~McgR6d|)6%RK-PKLad;JOL2_YpC<{YN0GJ+MWq`ZlF}OwIBh -zZHk;!f4^yP9c1StS`viXr}QRu_G4|Ke -zN~n(IEB_DuFF5%BfFG_~*v)eLE0O)hT*m;Q05EoScCokBu(hGLbTPG6aI$xB{x8Z; -zf+7+CiUNZFH1hxYm?Q{V2MZvC-i3aHXLi>`R$3?s$09n>(*EhHF>X4zow(J2D*frD -zz9GG_^!S_cz9-}Q#-RKZH)q|%YLkRQ)Di_|ThH3_3$X#1Xl@D4nK+6?Gg#>9QvueG -zPa-}4=YGbbXkno+uN#Z6`6UBg*FS2S#W&7<+zq{5bA9~%RK-kQv=8_AAR@n4hA5nuC#q9X(`A3Z=|S=O8ja)IHnbc0Zl%t~YdeI4{k_ -z7hgwySIW}yNW`}PI{)^196y`2wsuN9k!x`c;&`khpVwpae0@2~-{a90?Y>`=E<6N{ -zK{Qp5zyBbdPp;miamMdin4~)%i9R^d%?Xo(<6r)#d0wLLHfhZchfMxz|1~h5ZyrU0 -znQWBt=G7!!Tx}GwUU*mLh_-)HF|F$3e%7t`P=1{Vmzn;gGkQz+RD?6nA>9kmM;O-x -z&ObS|D73d2FcR*RFiuB=H(X%zngWw)o6RLZaK=E8|AkV%O%kh1KYef!)l(yuQd-vu -z4OT>0g(u8c$Y=geT6iqJ${@iD_eUS{4k?74*m-_I!CNQ*-Ci&=XPZVIm;I*$n%=5^ -z&%T}<$qvc%8*Pu53y`9!lg-4qHE%}Y%mMw+ckJsqXnsC&y-jdF*g2(TYPh6AUowj& -zon(~Mp2@rO!S35)`eSSEX&<&nJ`Z{&xFrft(H`F?B|pS9(d;xGlO?EFBV=`WH_5}& -z{_(YeOXogD)eumRMJVIVU~zhl?IJ`9E-d! -z8(C4EP_^76RdIxky59P-tZ1Q?{yz*-_O!xR1qi*MqqP(%txc}rp<4n_(4)0~M4%n2 -znk%raQ<|9AxhjT_N++>N1bhiReYv<;<%EjLQu|7t6k7HZO?4|J9S|bNFp#!gU96fY -zaB7Qul|+QfN-H!<7u_f-Im1TaWag}nKDRAgTcd2~A -zl@%AQvqsR=f#*_%s4Zqo{Dk~3(Shhq5K9N6jb>d%wPqr>4TICe&$d_g{R9TeK!<8h -zlL|FQ_Se&GX)1Uibu|9iN;0B&Pf~{eK^77dKnBwdm<71^-p1yihW_Ky(9;|!qpZOC -z<4~b#1!~;zz@u9V@?Db6F~v+mzz@XJ{CtaJAb+Uin9YU)>TwB#$7910XT4#*-cgpHXT9J5rCZx8{BEY{D$bH(?++v(WJn9*HQ+kb`qAtNLnI|q -z6H}4;i3IauP7@q}?*sGkgtIq>kg2v)h!sHLVi#T{>FnVM>Q%KmGFpBuE2vrIu -zdYMpTOp9?%dA0V+BYGI4x=hVTBgbwiYV>%D5}5cub(=YmyYaN#MH)B;$bDislSc*Z -z{sLe|7&;=X{(ZRdh{lGrlWYqCYp*iV&g#{{1-DB-wW_TvA?g=DD`7B>KxSBZ*GfGp -zJV+C>cQxo9=!gT*?$xrl^mzT+K6lN)K2Vf9kf;~fDYno93^L}s;Y(IWKz(-t?mq4n -z;_XBEPqAlNGbdvr9eXf$@+d^KuV>(P1&y5Q@dV7HyqSYBk)Az>J9!i`+UG2X@#6uF -z9qBzumIdqGs;i5sR27h5(^9v^5MF!sTK1yUh8CR~)gE_6U8f0fuOE>c<_JxD6})ph -z5TSi0XILL1&p|I^FJ#aBcq+_g3AvZoy?{rl&g3c~t-8*JEvxZ7#oE7XuSrFE8MYgW -zJ^~F@!vM%a{ZQq|to#x@Dmx8tkBF=N?J|tOLL``q-UGv#%%0v#WEd9` -z@9yTxiu6Cl$6Pr5NX$ita4+*F4nyKB{LW9w;*fB?W4}L-h))!3dzNGWx9mrTE?*^e -zHK87Cz)V?fvWYm$?@zamwDmUGs_3(6`qar)m#Kj4-ABm;y86EZ%J`X+X|%JjnTs_; -z!9;o#rZ0iM<7y2R(F9&s!^FEB<`S;lQOGDC*hcsH-_gV>hvs*!p|qjXKXp0z&v-h& -zhmBrT|J+TepSc{4Ywt|t&~w@-2=`%o*3z<#pZXMrh^DK1V@yrGUv6zRrLI;ed48}6 -z^rnQ?Et;h_HCVTB2Osq*p&78-kg>?et9sfx?a1X3S4=3n?|R3H8s@^ElU0^Ogvu%r -zCsNVJ5mp|L1Wy%JbSLyB(u7oi-mn2s;+8990XPgxDxDcp#fr+8hkPjc*g&!hY)@0> -z@@19ualx=j!iqc_NtriLT&i`6_1PpWu`(`1Q{+w-l`CI-H0k_mJ4{bg?lv^*xg6Ei -zqXho;miuBP#eQ$29$PX@6^K>}yi_r)(M#Ss5y*oDh7n~`ElxhLmSmIpH!oSsc~p(< -z)XRd=dUmr-IDq%5fY|^Cp@1HEY^_La>GA|77#Qg3Pu&JdBrG7@vJ`EYqWmxvG~h}e -z34*qekT5_kx$iKUqz!~ah9+i-%aKq(9uLHS1Oa_8VA&*%gad|7g`yV$EsO{OB8RLH -z4I0v0O*B)+cY&_z&ys0PYb9T{O`F|{cvUKR->7Z -z#!4N;Csge8&P*qxLn~~cY9|bg%9>Krnw&)rZUi}I>T_@*%e+au(^WPS;XLQG6<7D$ -zKwk8c7E`d79)?hF?*6u*C*1qR)g=zS^mG)Vw+l#|4O;9@1PPn4B=RijtMMty%>NF( -znY7A?SG#8HPGD(jHYF;7o3+=)lXw`LvDNm{;z=Ayo3Z5<+gymP5u3F=Cy}GsjyN)R -z8$Q}*)HX<)^EU}OGIjC>uhsW_T7G6;x8dWg&!z{Qi*%K!P+}A=BJp4hfE)rp5h%CunyC#E4qn5&$HYvcV -zNnwiT(sXYnzI4^Kclovzcr~mNwkN><09$#_lzRMOgAI0n6TL-an8HWg+SQ=Y8S6l=PrvU3Q@MzDf+JWw}ejfMVh5n!1W8ZPybH-odCrcOr0ObEI)cF4tWz48A+GR7K -ze4(zqqBsB%QZ%#J(x)cTDiN!0WrL@WAsLupSAP2ba-hqmrPL~JKquATc+Yq8@eO3H -zDvew|Xe5I4Axq|@6VZ1kyg9iiG)3vElYmo1bkJK2Wg2Am$ZH%n(G){=O#D@|%PyNe -zKqHW>TG}zp{k^P3QbNTXv78V&Q3k}L@2+`dSHNDbqQYtEmjHAh2617dDa8y`smYbY -z&aINmt2(W%!c3n*=zr(^V1(zrN8deN_q#Q+vDg%XBCQv!ximiGF>u5LX~LF6_z)|+ -z4GV1|aEJ2kbQ;Rczd=k77lb{iuM@VPI~cd@1OvYAQgwH-@oj|(qvc0~lePky@+jj` -zQ3)S+T+RdFu9Q7rSem?&Q@tZM_K5Pf8C=Erh3;2|#O6sW4t>zu<~C4;^Nr%2ppfBF -z^z=025!}D_I6!m2S7oZ|nn`0YXq5->0t3PPc{N>d2wQ-`M*e^&L!LjRV|eCn4Dj^# -z2X%v%a?-gzVBUB}f{w2t-SBKr7l=1-9n~DwVbdmd(yrohWUijya&uR&)M_er%;F -zq)Tt;;P9U??f+Py|F*n2%7S*=38$?45R^9vH%)XR2{5tH=~*0bt9Uou&r3u*pHMbwa>K0B7K;fT8EQ0 -z`CHUs_J+2&qM_fZ$bgTs9{#4dxHa{Mo<~(&Jd9IigOir%QEeN&(3}OphNQ4b@m$Jv -z0=j4%sI6#p;Ec2ZaIpE=^`Lsy2+n4}p&MOqLIUyeq)CG|P!{9uG)GNIBr5$!Wog?W -zJA?O0&_oh&!v%yQ2X{)n{)o{tGwog&)2X>b4-lK+{cq9p&UDp -zb|EkjH?l)Kk*x_Tz5n9_~IVza5%{47ayKP3~|JB%8KtTGvihYc|)unNo -z)P@4oHwaI1#K|W12Md4`z6Ev)|0U9_og7iR<`(t`p4gEx>DVuHrfDU?GpuEkUt{#C -zNd;=O%^M$_&1_s#IA$2R+@dkG!4O}C1D(JjUJf#vAh_#E8oO*2Fp8I!eL+WkOv7R5 -z*T$}FW^e;(hUaHpTQ0?rAm(W4a~2ZT7L1S4=6lKzFG&syHELdDNQ!Pw!`F{j38T6c -zBGr6^%;sYwd-&V?VporI -zR%X1=&GD^hFULl-WbBcrH&9Of;%*5l=to`qrtk7R{rMUb-`!%pHQZGSE#n8H&|3pzV&_k|w5 -zF^>DW)5#<7x=F}0-y3vR8LiahgJnFjvv68@Q^Q0>Xp)Y>2ipF*GJ5`PB`z8!cNdTf -zku#|;b>>0#*J!!g;N -ze2g~Gp-Ybv5VmtgU4aGrl#BS2j8&744m+uiVbb#%Uy2}dak|f?E~zBvcW@SWcD`Fz -zs)t8jk6#$O+X$!9ceI0fI4&+i7F)i^NxwKvSPtuPrcVs1a;rTZfk}&L=PPPb_<)9s -zahhi{guOJnculCAmNV!Tr*}v&XOU7W*L$x-VPxYVowMfMzW4n8*OGfG84?6QVCB8(HCAvUzXBKfai^Q -z%A%k3M8bVjHCUSyeZ`iEjda739f|Ejp-F4t@yJy?x1E-`%n_S9yI)F9J$rM47tWT; -zed9zH)-S}YU;l`#hz?)Vhrt4I&vOdY#GPf#ZH)A*m%m%B2x$dCu2TB*M{z!*}+YvR2~GQ&&OwpqEhUh)nNwY=?|UMi4lVN+`E*lo3Ctwo>e -zrL{edsBm=g?xRslphDE|1iDO%qSraC*vqWRAEqsSs`sYXnKYw*(EL7KpA78|mN7KC -zWk4-0B{9VJoY7DP)}#Nb{d83IQpiMO=M_$HCCS^I<@FA2nuXVdg{yfUokRQ-Wx9T9 -zj)^mtYs!1y4d4cg_UH8%iCqY(arG|a5WF#k7dlTvy86DrXi9cwpUgbi@y{_W@wdI| -zZL4=-OM9z6od>zYO6Ftnu0Fl9jr&Gh#EouTTA8G7PZa7+i6q*2IfrK0q>5j{(Da-o -znAvvQ>Fmtb^`EQCHPpfsw5-msO`WQ>-{Sf}voozR=wtPc7;j&QdhqnBFzs2%j18 -zE2om(vuViLP1>#bEGK6dD#-5*i-S4u`933sDq%FcS>lp)f)>IHIrp?qU20-uripdu -zp_6jz2xh!4_w%KKhC2DCj@YBZXLHCsDS637Um;{Zdl5m_@;zS}X2%)(stEB0_4yfQ -zF}m;5rf*HHk#IE!-6HDD0X6UZt)lPFJC!+BgW+(RjacLv^_6gV%z7*`Ndai!0}akv -z4+V}lbsUTfUznyZ2pDgilN?0fF&y?_C(XM4gJ&F-H9+&UsTx7-qoiN!qU-duX8deQ -zyKnNe@!)OmDt$q;LJ_k~cl0F>J=M*d>c7r3K~hMDQ#bDrXkgMuF&E9KaioS>1|Zjb -zV^Y_ftei+|PNz1D!&bd!KCIa!YS(YE_8Fv^z@NLG>fce9wucdl-7T8^QQu|6Rp-YQ -zjd5ZhbnO}G>^8c*AROB^?WJl`3EAuNO9-1CU~}jA4DTkkeFiO$8o!3h*BLN2snagN -zyLnk?Ifx~wGH!KJgzlAJvSsvMJ`FRHb^491G2!UYMsK=VS)Xx(nI6-?x3t8eugPRq -zWnICyPp`K%JgN;6z@@|WqB7d$Nk~n+vC6lN5|p9vcWoHpm7tSiKC9KTAatf~c=bhm -zqE2ERFO>au(5(`NJECfK#B62rzh*QqW0+G%$;ws6>a168%Q`&3LCP1%talq*V|?Zf -zqUOwb#i@Q)bIy{-x{sE9D=p8?PtGOCNR?Sgi!L -zzLi0xiQ0W;!v~+O5S46(r1XVO>_5x|ieJ{zrul*8q1*){;#6mDyWgto_@RzxSN=NU -zW(6wd2h(-YWa=~3PI~h0+=1aprZsqA6O|L*LE~06ZvdCMGK$-On{al;R(%LoAw-EQx1#jQPLe -zlm;yP1-~znecGqd==sj1-~tnb$d$!9z5FEyvkpEThWRGEFZ^=fM-tzP -z6c4)GrJ=6%vB4x?GU45Yv`n6PS -zm^K`?x=0?|eK1uF#{^N2^V-+2XzmFjS_4Q)zTW=mwg>+^%91vupA~zXuRRe^43x3a -z%D8pul#PILJ#G{zU`l>VIE=0f!<1MPn!1uY^lSQl8 -za-X@=+z4E+=z&yG>KZR;2M@}ydTN^$onu+rdnr(`DonZYmaA*SH65mIVp@U<4kj>k*baxxgU7hO*swyOdu~XeIeaxR&!zZ -zFbc-O6#({A1R&t>9s~si-_c0_3hc6afv;fTH^+<76(A5nIHJsSy_^xQCi`11E!E=y -zmITI^-vN~duuTI}p+^cg9tiY1=Y5ds#umD2mu7bZB6S)Ni0Oz71X2aIA_u#@-)bOZ -z<>mkwv48awNhRtRn`0e7prImMAeKK`i~)-dNJkmih6u=io8kft!2@18PkB@gV(|JS -zw{~(uA#NX}ZL!tGq?F2zzyQ(%y*++$2cJJ`grk)spg-6^Vao@T%lh`^EP#AJ{5vcp -zen&3;KlOQ;AYlza4?0Ni9jZZ~0{=gHB*NV4nDIcK@Ss3J(@1%AFVNnvz->5EI0OHv -z9S~Nw=I3o4%xw_Df;P6+zdLYh1IHDow -zZ-nSc2zQ~K#$CYt{dye175X;(24ze9HD#nZ^VT|#NlL0sdze*0(g-Y -z1RFsV{s)0VA{-Fs4}PBLP9HgXRYNF1AaZ$Zcj}G(gK#|(0Aah+*IoYNe6S-tm6kdM_HCcM_K_C)hyno`_9;$I$+o4H#>!Q@B*88&b>c*` -z5eFCttl~WCOy{P&o51z{l0=>GB6a#zHu@+{Zz324{-n^gY`{(`TN~#vlotho7TM-% -z{^@HV$WdQjAONa=abe|Hc0Lr(2IpS(S$n -zLyS0w+B6*w;8}$ypIP3JE%YM)0ucs01@l54d$-cnSxnldx@vTAeK@MJkQ16SC-7bn -zy2ey@zF;ZGL}t_8+p#4UMpbuMKRd)4NoJzf*2#H+MKC$7P%w_IvS_CvLX1+F+=`>N -z*dTnkOS3JBP!3KbF?o#OCa$urYv}qFL^iN=MHk7|`dqYWNQc{a0ojlTKM>yPd}%Zq -zYZ%7Vd70Ua-a&5AHQtWyh7sR^b&@JC*{lkld&{glDNaD=XPdrg8@J`3$S0om-nFo`S6X;hbCQYIy%jpG`(9X=mFnxduD0%`NY -z)8^keGzp663yRax8uW_4!iB<$rDKSy(4SDlHh~=c08XHsb|tO4^gZ{LcvlSJy*oS5 -zWplw~lw#Z_uVk#IK>^$Ggr4`M`fJ(@`dO|&he>%~2nA|*rs))>FpT_i7dnjcU_07@ -zIk{>SH1hL!29G^^KkHXhRz2THWi`gU?RLm6V_^~GOp1A`t=Q5XBf6xygsr=2RGFE+ -z>FJZ8#$p%Yu)0vf`nU16HMu46OBvOkPiYaPABMuFsN?#`z#)Lx9dy(#AG9{#cHpOO -zLo}<j9onl-yWFS&EK@C_?_sh>SY%a&`6Qu#&25-s7A=ilfmWmT|Na)s^SQ^BstXEkT@WH26Av%M`TVK -z6IZe?!JC(8!^J8~V8f=LC{}p%K0gNrxK4n7`8eWTo-VtjtaH1+bGIqX<5D`SM3sgB -zD0Enxv+adHJn`nNwElG;U*kc-5V)KPD0#c7W{aV#<=XWzFK;^xp7h(znSu6D#jf -z^;59KEhAD2`}m6b{os@KniIEvT7M?s2XaWZ{tFH=!JB0nb(eDJtVA_8S!U1vn(MpX -zBPF3QjZtHXb~O|TY{xM#No?gG69S6kT?kt?Up8<$uo=r{?yagDw=2=nxTYx!5-f0d -z8MXOWr(2M-aU+#(nM_T+xf4GOWmdh-j?Q(K_v)w@%=$*Euq$%s^a@_b*#}rVs*dY5 -z`l`r+LT?nYIW8*E2SGk8AQD76RzP_*+{ko*`S#X5{m0Ju57`8qN}sw&v?JOEk%c-+64R -zIUJN!inS3@o)C~0SDSs95zom%6KAn=F@js*PCB@3JlL#EFmf%3-%FpzFKFSAg9h5eoOgy`T?4g_8udSd!UO -zTPTQ%T)Y$X#Z#*%d -z<4C<7^3a%>WXB4>BVkcig+e8^N0PHFI0q4n9F&qP7zl##LrfRa_$Tvuj4^x#hv{^2 -ztkQ=ygrX$nlmy88jJ32h$CkW0PH|X&{D>N#*ldqjaj=d1tyV-fA<_{7@6jF-M+&o+&_jWtY`7eyuSSlp` -zS14_6=}6g{X=fjsOomCuCu_jJY1Ev*gsX*CWBrh0X{BZ+RhbmYYuUQ_&f>)Sg)`yC -zhW%0ux0Sg&K*YfI(7lNylUziH333wh_L_t&zvUx6r_Bn=BEezgSEED?Lp@rLwG=q^ -z%gN2~=sp-i@8U{QhlhYz*|P -z)#2enb$QYlkYfyJ^)dzoMUOF1Yb&dlmzT@S%iZ1G_4W0|#YIr-(b3WF?(X{f`izW> -zh=_k@Qj -z&;Y9jjJ;KkHywuTunVK|hR(RL-l+_EKfny^qvWFHPOns^&G-*R>N2M -zd;IQ2J3Rl05F6Seg$CR!Nv4=4+|Au06abQi&NO7Xt^D9pB<Y7M1|l9?@!iS8T}{4-)DTKOk;wh={dV6jjEJ82M1^B+*uECaryr-2 -zLnOr_`GHs8rg7%Ibq8O*_tAWMdh+2yow25#h-G>EbbIk+JR5TPWU08jvv)^LIDbsj+vK63yU|y^5B=&Ri$>4K(#kWv=LfKD=_hb_ZtagI~@4bq3mFF@`>M%E5bZ -zpeV>(I!O|;-Qg-@BFl+m&bU3jNrL}+rhc;Ik@-DDL0J2US&B%JL5ckx1x>b9Y_lz5 -zAW-`l@!8X%!4JlRw{pfemat8B7=DaCj0F84>ykg8mhe?F;Z9aMQXoWSnf!2%=DnqX -z3jKw7EM^R`=5$9e9}7jxy%Tc5$;zPEvU_Xr-&o33kYTGwnt>Dgm#r0=oZ_fC{6@aAr3UGt`6mo7@tDv2+Ymo -zkuW{pYY%ZgwD*qFYC4T>@4)k*l!n{dsEj1?>tR7kIH~QQME_>cn6KQZquP?=GOoIqG$K-h1 -zZ!Cmod?z2voO08KMsmsZPzVseZ+XYe%dhEWpAx(lh)o?i#Yb4$-|)j=*+&z+LRS?4 -zCNR>`&?ro)t=e;C<`92#S-Bm2tsF7L3ss}AE@Ot>YnfUThV-bBx@_?8SPP?F9>Ju2wgOB)l>qppC)Zji}>7@ -z`C7e`2PYU$msS#(IJvxUEn<47ctwVBhq5Lu_E~iO-BAcTp*9hz73DA#FY@F~jtXI@ -zQAi({WE$LeSwN%j-={GiA?;co5CA|XXyN!j(-=2PcXwMSYqy`nS|ey0v&xGaU~KXt -zHg(0HVnCx0>k`8q@1@c2s8&KE8f^}Qbta`_I9ohV!YqcC3oRND24;@}SGT7QozI{q -zkxdviT=QPhSmp)&6^Bdlq2D|b_&WqN1PDSm)tNJ3Gn~>BJ$}YV71GGe7+%=? -z)4>Y=&#v@dni0a@Pl~=9Vg&QSO}wN%=B**D4*-qoe1K5ncSwE1{-y9p@w*Dd_k3=n -zZ|_AozVZ$bEa02%WF-TH5vJ!CJ2fL33FWx7E1$seZj|Vf^gz3Ga8M&7Fvn2PbRA}$YBI9q7$rMgy -z%C;Xw;m<2gF>5)I;{{xoOuivKLOWCaVAUDA$bhtZk%nfW0?f!fhqXN3mYG8IBQ2G_ -z(CK9LM{smn4$`_Y(Yfw=g<{!81?GNyDpQJNk#FUUs2A+4;2v$M!`X0HsA8_Htn`|+ -zwIYdQH;rAXiJUyx5zK$;W=D$*kdw5>{oEWFytO2?p55-HNF9LiQFPl+iK9`jRYx)$ -zE9?r1ou3YTTuKQze{PCn@{o}gIGD#c)}Y=YL_%EqKiEgyqv1;yzLP`)Cw3N9Utur47B10Kj(yfd5Wgx?m3Hw&aK>hEo-O+ -z)6@9P!Lw|e_>M;P;NoE+4&L>A@%Y&9R{&oVBTB>(86I0e|s;2;WJ1$twG -zTKu-u;ALs1@h3Npo9dB=U_*u8YTpuIY;9RiC$D#JAyvO55BUzT_4Fhdv*=Z{t5R`Z -zsUS7-9i;>&0)tw=iyC)A#1>DLTNzcthm`b$muu9pd|8gKpainws(|q~!KhU}e=`HF -zBIa1jmOrIc(2D6b=B<=s>Q@gqfyIx}iPI)huw`q?=X2r*t_}dH;;38Wub98yXc-z; -zI!8>Z*%0Q13)BmQB_;gG?!ie8aWG6HVR~C^xkJXTi%R!cAmU?VaBrDCAOf3biH<+p -z!C0(1KLs0tKS~NyMKJwuXY%yGxrN$S3zA~v3@mqqKnpe -zE+QNmeAS<-Ic&2%v7u-fDU*LKbzS@V{Je|!$3DO9Ao*J;_8o+~@b_m!C_&GcfqwZ` -zEMO``tf(c2t4sPHa~NYMX;SA_FOo`}#kZ;0)4!a?)AU6f)PxVw=mYOlAKbYIHg_a_ -z1(m?QrbwwUdLX!&&SuB?K-X3a6T5xK*z3@PhmE>#uNyfjaGdfb -z55py72FbYg4FoiwXss#ZX_2>1fNx7OBLzoLT~aOp{z+W44rhw3~8<> -zYKX~!wORmTM{Amd5!pKk*>IN5N&j)s;>`Te9ygsZ_S=i0S9q4?4MNuCH2p-fusU#1 -zxKEyFCB5M^xh2a|^h-UF1UCykG)CE4RRQQ-uW8`fexNuA*O_cj9PSU7d^2%oG?|v* -z8!Rra%&DM3z==4^w6lTo#9>xQ$iNv{g6v}q((aAF3yD-Yk{=UX@-d01=0GNgq%Vzw -z7OxW!fsmRd3Ea1H(arx14v7TNnP>E`s^+!9pq*D|;1=BfVt*{;8U*YK4Ug4f^$zmL -zfd#&aV_x$*$D~GN_Mz>9+dQlg#WcU0mcD;_ievsC#pR~H*ZwSJ|Mj<^7l=+Ftx+b -z-~;+1JAlpN$l~rcwQ@v`x4;@C^?7X*FToiUp+y9Hky~*}y1P2Z@$p{ehrY}9gfuM< -zeBC*L;$+TF4t%~D&;dH=0B=g5Sj_u84*C=5i@WE<1upz6q1Xf$E?I&{Wec#m&%`A; -zNNH_FbG$8#rYLZ+JPGtw9xd(tuD}}h>`L1AH8`V|8L}R0r@Clm6Lw#^^in^CT}G6E -zEAI!0LS#NG69wdc!T=juBra>=f52zk?%6YeYe&i&;$gq=*;%`^9xoesA~qfc|wjiuvG&}&-=Iz!eX6D;ltRc)74?5qHfRLBA*PS!M -z2QoaL7UZw+y0l$nSHFz;o*RvbQhyPoy%Vhw%+)r`q)g^**y!>5c5L8H -z{IoCqS;L;$lix1bOes>jXIwgQAUiGlbexgAp1Lf8tEC&ivM9Igc5H$znMO-vOjnZAAI9{6NJ)lpxaCgh6UI#KEkZci -z9;t84lvEp>&{eCJ%jelOc;Ix3=as;<73OUY%PPvb#dH_P>67^2P|5LSI^aZiqjTRM72OCb?rm7+jj(t>(2_)&qSPLP@TbJ -zxWtq$sS9)(W~nzI8T|*SG3<1tPhfTa0~k-S0a@VEp9A1b@Wyx(5$h!~?7gGZUB3Wb -zT>cy8Xed}k3=bHraou!8=uUk5b4x4_*g$qcsW-;YzQa}Uy+g09f~zpayQDVRX5jv; -zYGUfT3dse6`ycyWp8*4*iRBEQ)Wl7Q>AV*A$*=>Cb^(%WAm@$QxU!OJ`~=#6piR3F -zv7NzDyT0j>=0pvmIg3mF=N|s9lwW`;{s!!g@h{+V3X`82AXOae`AwHbU}5dU5v3r7 -zpic9Ge!*wn_(8fG%>y>7M-W%4J&*&iU_yZ|qX&uDJF4C}Y_UKar=L2l1&k4ezlgse2I2ew8QsXM2BKvx -zMn=Yy39lq);OqT5p8Tg4FPVnfbH#PY^9wxZ7_Se>p*1$zImqH}*llx%WU9^Z?y-1J -zu2>JK+s#K4GZx<`6>~xkGX-J0I2>e0E!Ljxx)*_g{5fV&RY1MZjH#xNPmnB8#WazK -zqWqe9(hBuG>1U*6B_jtyhv~@a(NQCdoz4<@#hbCw7m5QETq9= -zib~8K;+cB&CSn23VP#cP4VH-#fhT2|1{s_6{aa>oXNp2OHii|{f*aQ$zzWPLlLbD( -zD?+^%F(E6rr?-yNhf$xtFc0k-juxM}?oHO-q$k!kho?^QRd{;VFEX^fWD+KblheuxfKKgP_24);(2p=GW3yM;Kb^^(#bXM>)F0(BchX~z8k1Bvx#Lj -z)#7s#sXiOM;YP~(yrzsFP5K*~jT`%CvLa6?|3s>c*%Tw>L3Aqslo3M%&0O -z*KRE4&aRgKE-LzOk`=@@<5JXA`baUuHo+_eO{BDNi2yKF~}x)RUW}M;;N9@i{dAS!A9Jb-ofODKeljSM6>&lm)LVHvDmr_@||MqupKU% -zF6zVWe8{^Gw9i}b74tmToFP;hovI{pw1FjuH*GL&Z1|SFA>yE2mW$?#k?Ny3i&Uc9 -zHVo@?Zf3Z4-ircrf_e7RzpAi4-}T0Srny4#*Iozoyut&;`|DTFjM99b$J;LQ07qRcn)VOp`Uy -zW2KHCyPV0isma%Haj9_NrRlh8S%(gdZ*t(9fw(Fe3Um0<#Jfuk+>gpfc?QCg{Mc6j -z?sFgiqrl+2tEM|8=6-%z3^%;Z{$)$g@E~UQH0p_~Xj#FMGZTd#(X#G^#93N3=Cx#U -zITZ{l&kcj@_nsSeY9A;=$_0RX6o-SM)peqhC=Xe2x6C!8`HF_P -zZEt~vd`o$4Z-C9;#6jbP4CQscA8|3lakL%AS -zy<3VACz0O*Y`;+vv?peaWWF$3y1$hT;&^@p4;5)RI`&8ld6XH#g%aBd3cB1I31iAi -z2s6E3QGC-4#xKu%G^OX*Q3rvgN%+JQNvMzPRm51rig#A+Qa -z8FpofIlTS+SMIvp>O;D5t+d&e*nP%$kL#&c3e`NNlP=xVPmz@+vX~uI9u7a=9WHDF -zTZj+Obsq9mNgOZc7s6Pm1r(N)NCjKxf?3QDmAiDL@vdr`I2xSs@+NNH-N*|uYFIb- -zr>w$x&ea}|3z&X2E{D7;-~uM#XUtgU_HV067;qE3&;>LhUsaQJ#1rZYSx*@Ri{h-d -z98IZePJWos!Ud;QsNE0w1lg!^v5Ae-70|~v5TqZo@snCJ88|m4UQSQ2=-YPnWNJsI -z84aDT2`vUE;CvyS3|98xwX%Kxt -zS3P^?btD&hpr*!5aoX!__?5z -z(!0=WmIOq`W=0$>#J+^8u^|Ub<~QC{CIxMB-Y<5;8wWaNi%Q_|IR(D!lm)fR<#Y8# -zPUyAJl{t`A5f#&8YPuSHv1W_o?5da4qB_&8Klz+Ah)wr_*mT(^Z?8~98W1UN=Els{ -z`$;W@dmk!{0qG!)*S`Q=>ACDI?Xxby@YUD}21KMm7ij}A-lbDc5E(=u*_ITCs!ZYs -zU-%2C4en2h{*zHZ@2n%S=Ym+~(u%5$oi6C24nDMRMt*Wk8QzszjSjXin?K2}L&(XF -zlBj8e2HM;XRr;F&kTSJEy#rkUQX(R}XIys-xm-1@$2QzVsV3-mlQ&hp;*h -zA@n-opboJb`GN>MEQt>Ts=~jScNMIj0TBP4Xgob -zVAC6}^y4EZy3T;zm=E$--R -zKlr@@m!Pv&1QE->rt(Y)X*%Kb-cru;LI#%BFxV{X?$eCMbJ?J>2N>!ipf(R1ic6?2 -zESOX02$OiD=2X<1K7DeGfPV{yMzc`ZL1p4Ig*FeKPUOupLAvd7NB_F7+}qt^HYK?o -zn3u5GA+dbeJYm!PJuf?Ti%ED_?s7rM^#X0wZe7e~LOiog5OU-o*pV$1B{La?A&gq= -zsRl?j8-%uixh9e+cA;S+p;z&0JQ3P8d8K_fpy~~lhFe}Kze7IBE||-;MJ5<*WIf02 -z3}X?Wa*+pbCY!r=)9FJK_fIO_EHRVs;Rp+LqRjKyoX)(#A6yNh(sm=c(Co@J{RYrn -zB$pZH=Y?;{Rmp>m<`}CBf{`N+S&v@W$32=HLL**D2q&DM2R#XQW#z8O=_2eDr&Zb? -zF^EdU;-=hEb7P7le4dMU_oeOuAH1Hm-DBe7q$|}W0Bk{pj+YOyxM#*YOzq3f=j#IlilJy)luZ;t1V!=Bb -zjX*+S();sVrv};SMw7p%lLu{)!`fkir5g?EQ!3Nous4w|XEJy#NCMp#M%}tUyKjnxz_XB_;U`WnR;w(Fz)Q9!92Ck$$tv -zkQ{$tA>Z+cz|ifDr1#@p1B>kEE4~~WIXW!a&P-l3E -z$h}5Sp#G-y -z2A3nH)+L{Z?g7tS4O9WdTi9Hpyf4mx-lNL#N=t7iHFc9|rQa!bCx2VGP^--8i8Sjj -zror%gO_^)`6%NmSPpT<0Rr5wv*i&bNIrT^h_ENX_aSCgRQ?g1lF`!B^zHawBcr$Yu -z#TkMQH#sbjRz$d@94$=dJU)Y5t@cT2bgQUR{njOp^h*K+K_XzFUiyK^o&N%S3AeYh -zxih|tR9|dP?EYZSQM5LrcPqv7Fr5`G*br8yZ2`e=YwyY+dE?d7b&20eFCWo^QiA8& -z$y`-uQeLLdn#~`46i{-&U{BQ&i5Wp#p}wCkPEc -zUzptgoY(!!Ou@jJK>4nJex~X7zvcJOe|W-4RpGAye|@6jcfp^ZeV`cqr{^nv75r2{sYS#l&kt%3Gu(g|L?Vfe~9ORrpv#H|5{1-YY%=cW%~m{ -z1*G`jAbu@u`xWBXl7T-U=&}C|@#g}9U&VjTX8s{Qf%k9mUvitjBK(@$`vU^}uZt0X04!1er5iuP=&!=R5`aI13t9dx{1-a# -ntNdTX_8-y!00aA<`u^`AuBre9vQz*73G`9~8T$<9&u{++O*aK5 - -literal 0 -HcmV?d00001 - -diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx -index 26e0e36..0035e7b 100644 ---- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx -+++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx -@@ -1131,6 +1131,17 @@ DECLARE_OOXMLIMPORT_TEST(testToolsLineNumbering, "tools-line-numbering.docx") - CPPUNIT_ASSERT_EQUAL(sal_Int32(3), nValue); - } - -+DECLARE_OOXMLIMPORT_TEST(testfdo78904, "fdo78904.docx") -+{ -+ uno::Reference xTextFramesSupplier(mxComponent, uno::UNO_QUERY); -+ uno::Reference xIndexAccess(xTextFramesSupplier->getTextFrames(), uno::UNO_QUERY); -+ if (xIndexAccess->getCount()) -+ { -+ uno::Reference xFrame(xIndexAccess->getByIndex(0), uno::UNO_QUERY); -+ CPPUNIT_ASSERT_EQUAL(sal_Int32(EMU_TO_MM100(0)), getProperty(xFrame, "HoriOrientPosition")); -+ } -+} -+ - DECLARE_OOXMLIMPORT_TEST(testFdo60922, "fdo60922.docx") - { - // This was 0, not 100, due to wrong import of w:position w:val="0" -diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx -index 3bbd965..1d5c199 100644 ---- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx -+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx -@@ -42,6 +42,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -775,6 +776,8 @@ void lcl_AddRangeAndStyle( - - //define some default frame width - 0cm ATM: this allow the frame to be wrapped around the text - #define DEFAULT_FRAME_MIN_WIDTH 0 -+#define DEFAULT_FRAME_MIN_HEIGHT 0 -+#define DEFAULT_VALUE 0 - - void DomainMapper_Impl::CheckUnregisteredFrameConversion( ) - { -@@ -826,7 +829,7 @@ void DomainMapper_Impl::CheckUnregisteredFrameConversion( ) - pFrameProperties[1].Value <<= - rAppendContext.pLastParagraphProperties->Geth() > 0 ? - rAppendContext.pLastParagraphProperties->Geth() : -- pStyleProperties->Geth(); -+ pStyleProperties->Geth() > 0 ? pStyleProperties->Geth() : DEFAULT_FRAME_MIN_HEIGHT; - - pFrameProperties[2].Value <<= sal_Int16( - rAppendContext.pLastParagraphProperties->GethRule() >= 0 ? -@@ -841,13 +844,17 @@ void DomainMapper_Impl::CheckUnregisteredFrameConversion( ) - pStyleProperties->GetxAlign() >= 0 ? pStyleProperties->GetxAlign() : text::HoriOrientation::NONE ); - pFrameProperties[4].Value <<= nHoriOrient; - -+ //set a non negative default value - pFrameProperties[5].Value <<= - rAppendContext.pLastParagraphProperties->IsxValid() ? -- rAppendContext.pLastParagraphProperties->Getx() : pStyleProperties->Getx(); -+ rAppendContext.pLastParagraphProperties->Getx() : -+ pStyleProperties->IsxValid() ? pStyleProperties->Getx() : DEFAULT_VALUE; -+ -+ //Default the anchor in case FramePr_hAnchor is missing ECMA 17.3.1.11 - pFrameProperties[6].Value <<= sal_Int16( - rAppendContext.pLastParagraphProperties->GethAnchor() >= 0 ? - rAppendContext.pLastParagraphProperties->GethAnchor() : -- pStyleProperties->GethAnchor() ); -+ pStyleProperties->GethAnchor() >=0 ? pStyleProperties->GethAnchor() : text::RelOrientation::FRAME ); - - sal_Int16 nVertOrient = sal_Int16( - rAppendContext.pLastParagraphProperties->GetyAlign() >= 0 ? -@@ -855,18 +862,22 @@ void DomainMapper_Impl::CheckUnregisteredFrameConversion( ) - pStyleProperties->GetyAlign() >= 0 ? pStyleProperties->GetyAlign() : text::VertOrientation::NONE ); - pFrameProperties[7].Value <<= nVertOrient; - -+ //set a non negative default value - pFrameProperties[8].Value <<= - rAppendContext.pLastParagraphProperties->IsyValid() ? -- rAppendContext.pLastParagraphProperties->Gety() : pStyleProperties->Gety(); -+ rAppendContext.pLastParagraphProperties->Gety() : -+ pStyleProperties->IsyValid() ? pStyleProperties->Gety() : DEFAULT_VALUE; -+ -+ //Default the anchor in case FramePr_vAnchor is missing ECMA 17.3.1.11 - pFrameProperties[9].Value <<= sal_Int16( - rAppendContext.pLastParagraphProperties->GetvAnchor() >= 0 ? - rAppendContext.pLastParagraphProperties->GetvAnchor() : -- pStyleProperties->GetvAnchor() ); -+ pStyleProperties->GetvAnchor() >= 0 ? pStyleProperties->GetvAnchor() : text::RelOrientation::FRAME ); - - pFrameProperties[10].Value <<= text::WrapTextMode( - rAppendContext.pLastParagraphProperties->GetWrap() >= 0 ? - rAppendContext.pLastParagraphProperties->GetWrap() : -- pStyleProperties->GetWrap()); -+ pStyleProperties->GetWrap() >= 0 ? pStyleProperties->GetWrap() : text::WrapTextMode_NONE ); - - sal_Int32 nBottomDist; - sal_Int32 nTopDist = nBottomDist = --- -1.9.3 - diff --git a/SOURCES/0075-fdo-75380-Let-s-not-always-set-the-line-style-to-NON.patch b/SOURCES/0075-fdo-75380-Let-s-not-always-set-the-line-style-to-NON.patch deleted file mode 100644 index 3bc9dce..0000000 --- a/SOURCES/0075-fdo-75380-Let-s-not-always-set-the-line-style-to-NON.patch +++ /dev/null @@ -1,33 +0,0 @@ -From c6d544cfc10ea37316bb510a8577358ae3b7ae83 Mon Sep 17 00:00:00 2001 -From: Kohei Yoshida -Date: Thu, 31 Jul 2014 23:33:14 -0400 -Subject: [PATCH 075/137] fdo#75380: Let's not always set the line style to - NONE here. - -This one line guarantees that no matter what the real line style is, -it will be ignored. - -Change-Id: I3bceaf49ce13ddb42ceb56750d8a4ccfef54033b -(cherry picked from commit 6053491532a5d9954caaa4abf09af30850f0cb94) -Reviewed-on: https://gerrit.libreoffice.org/10672 -Reviewed-by: Markus Mohrhard -Tested-by: Markus Mohrhard ---- - chart2/source/view/main/ChartView.cxx | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/chart2/source/view/main/ChartView.cxx b/chart2/source/view/main/ChartView.cxx -index c519aef..c6b5878 100644 ---- a/chart2/source/view/main/ChartView.cxx -+++ b/chart2/source/view/main/ChartView.cxx -@@ -2293,7 +2293,6 @@ void formatPage( - - //format page - tPropertyNameValueMap aNameValueMap; -- aNameValueMap.insert( tPropertyNameValueMap::value_type( "LineStyle", uno::makeAny( drawing::LineStyle_NONE ))); - PropertyMapper::getValueMap( aNameValueMap, PropertyMapper::getPropertyNameMapForFillAndLineProperties(), xModelPage ); - - OUString aCID( ObjectIdentifier::createClassifiedIdentifier( OBJECTTYPE_PAGE, OUString() ) ); --- -1.9.3 - diff --git a/SOURCES/0076-fdo-80986-disable-highlight-DOCX-import.patch b/SOURCES/0076-fdo-80986-disable-highlight-DOCX-import.patch deleted file mode 100644 index c78e77d..0000000 --- a/SOURCES/0076-fdo-80986-disable-highlight-DOCX-import.patch +++ /dev/null @@ -1,64 +0,0 @@ -From 4336ba9770efb61d4131c005fb1d16ab2be20928 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zolnai=20Tam=C3=A1s?= -Date: Mon, 4 Aug 2014 11:02:55 +0200 -Subject: [PATCH 076/137] fdo#80986: disable highlight DOCX import - -Highlight support is not implemented fully, so -it seems better to disable DOCX import of it until -it is finished. -Highlight can't be modified on the UI and is not -saved to ODT/DOC (regression). - -Regression from: -8b949134441056a1455d67ddfdd7e0bc5f2ee682 - -(cherry picked from commit b5e60724ac73bb0e62b249145a8931fd6166bb69) - -Conflicts: - sw/qa/extras/ooxmlexport/ooxmlexport.cxx - -Change-Id: I94891769766ae90017e8afa70e65d080d5270202 -Reviewed-on: https://gerrit.libreoffice.org/10721 -Reviewed-by: Michael Stahl -Tested-by: Michael Stahl ---- - sw/qa/extras/ooxmlexport/ooxmlexport.cxx | 2 ++ - writerfilter/source/dmapper/DomainMapper.cxx | 2 +- - 2 files changed, 3 insertions(+), 1 deletion(-) - -diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx -index 4db47e5..b269a11 100644 ---- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx -+++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx -@@ -1540,6 +1540,7 @@ DECLARE_OOXMLEXPORT_TEST(testFdo69636, "fdo69636.docx") - CPPUNIT_ASSERT(getXPath(pXmlDoc, "/w:document/w:body/w:p/w:r/w:pict/v:rect/v:textbox", "style").match("mso-layout-flow-alt:bottom-to-top")); - } - -+/* - DECLARE_OOXMLEXPORT_TEST(testCharHighlight, "char_highlight.docx") - { - const uno::Reference< text::XTextRange > xPara = getParagraph(1); -@@ -1586,6 +1587,7 @@ DECLARE_OOXMLEXPORT_TEST(testCharHighlight, "char_highlight.docx") - CPPUNIT_ASSERT_EQUAL(sal_Int32(0x0000ff), getProperty(xRun,"CharBackColor")); - } - } -+*/ - - DECLARE_OOXMLEXPORT_TEST(testFontNameIsEmpty, "font-name-is-empty.docx") - { -diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx -index b9b1adf..aa6067d 100644 ---- a/writerfilter/source/dmapper/DomainMapper.cxx -+++ b/writerfilter/source/dmapper/DomainMapper.cxx -@@ -2102,7 +2102,7 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, PropertyMapPtr rContext, SprmType - { - sal_Int32 nColor = 0; - if( (mbIsHighlightSet = getColorFromIndex(nIntValue, nColor)) ) -- rContext->Insert(PROP_CHAR_HIGHLIGHT, uno::makeAny( nColor )); -+ rContext->Insert(PROP_CHAR_BACK_COLOR, uno::makeAny( nColor )); - else if (mnBackgroundColor) - rContext->Insert(PROP_CHAR_BACK_COLOR, uno::makeAny( mnBackgroundColor )); - } --- -1.9.3 - diff --git a/SOURCES/0077-avoid-buffer-overflow-by-using-wrong-buffer.patch b/SOURCES/0077-avoid-buffer-overflow-by-using-wrong-buffer.patch deleted file mode 100644 index 4e7f3a3..0000000 --- a/SOURCES/0077-avoid-buffer-overflow-by-using-wrong-buffer.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 2580f10e8cec6fd9e3356a3a26a1cb6d8192e850 Mon Sep 17 00:00:00 2001 -From: Markus Mohrhard -Date: Sun, 3 Aug 2014 22:47:27 +0200 -Subject: [PATCH 077/137] avoid buffer overflow by using wrong buffer - -Found by Asan. - -(regression from CWS mba34issues01) - -Change-Id: Ia7159c9bed9d7f823448acd02e18568a5f3f2093 -Reviewed-on: https://gerrit.libreoffice.org/10717 -Reviewed-by: Michael Stahl -Tested-by: Michael Stahl -(cherry picked from commit 955c5539a1ea5e971f111989d6c5bec11d936416) -Signed-off-by: Michael Stahl ---- - sfx2/source/appl/appuno.cxx | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/sfx2/source/appl/appuno.cxx b/sfx2/source/appl/appuno.cxx -index 50f8ee6..461d74c 100644 ---- a/sfx2/source/appl/appuno.cxx -+++ b/sfx2/source/appl/appuno.cxx -@@ -1021,7 +1021,7 @@ void TransformItems( sal_uInt16 nSlotId, const SfxItemSet& rSet, uno::SequenceGetFormalArgument( nArg ); -+ const SfxFormalArgument &rArg = bIsMediaDescriptor ? aFormalArgs[nArg] : pSlot->GetFormalArgument( nArg ); - - sal_uInt16 nWhich = rSet.GetPool()->GetWhich( rArg.nSlotId ); - if ( rSet.GetItemState( nWhich ) == SFX_ITEM_SET ) //??? --- -1.9.3 - diff --git a/SOURCES/0078-fdo-81993-Revert-Resolves-i119464-Update-default-ali.patch b/SOURCES/0078-fdo-81993-Revert-Resolves-i119464-Update-default-ali.patch deleted file mode 100644 index 7bb4710..0000000 --- a/SOURCES/0078-fdo-81993-Revert-Resolves-i119464-Update-default-ali.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 11ad475ec81353ddf87834e22e2db02c23d172d7 Mon Sep 17 00:00:00 2001 -From: Michael Stahl -Date: Mon, 4 Aug 2014 17:00:50 +0200 -Subject: [PATCH 078/137] fdo#81993: Revert "Resolves: #i119464# Update default - alignment ... - -... value for docx [Sub]Title" - -This reverts commit acc671ec74c874ffd22803bb2ee54a1f2c027155. - -The commit is clearly unnecessary: - -1) commit 3f9e7e72c53ecbe8ee1ab060f811cb41eadfc7e1 - appears to be a better fix for alignment - -2) commit b95d203bc17c83ec0fe5139f519d53ed1d842d3a - should have disabled the Center default in Writer already - -Change-Id: Ib0cc60af037f12be0a1ab94ab32c743f7fca2b1d -(cherry picked from commit d4b96b45727314585d02394bb5a084393b647729) -Reviewed-on: https://gerrit.libreoffice.org/10734 -Reviewed-by: Miklos Vajna -Tested-by: Miklos Vajna ---- - writerfilter/source/dmapper/StyleSheetTable.cxx | 18 +----------------- - 1 file changed, 1 insertion(+), 17 deletions(-) - -diff --git a/writerfilter/source/dmapper/StyleSheetTable.cxx b/writerfilter/source/dmapper/StyleSheetTable.cxx -index 329cc63..2f48513 100644 ---- a/writerfilter/source/dmapper/StyleSheetTable.cxx -+++ b/writerfilter/source/dmapper/StyleSheetTable.cxx -@@ -1118,23 +1118,7 @@ void StyleSheetTable::ApplyStyleSheets( FontTablePtr rFontTable ) - xState->setPropertyToDefault(rPropNameSupplier.GetName( PROP_CHAR_PROP_HEIGHT )); - xState->setPropertyToDefault(rPropNameSupplier.GetName( PROP_CHAR_PROP_HEIGHT_ASIAN )); - xState->setPropertyToDefault(rPropNameSupplier.GetName( PROP_CHAR_PROP_HEIGHT_COMPLEX)); -- } -- else if (sConvertedStyleName == "Title" || sConvertedStyleName == "Subtitle") -- { -- //set the default adjust for ParaStyle Title and Subtitle to left -- try -- { -- uno::Reference< beans::XPropertySet > xProp( xStyle, uno::UNO_QUERY ); -- if( xProp.is() ) -- { -- uno::Any aMSDefaultVal = uno::makeAny( (sal_Int16)style::ParagraphAdjust_LEFT ); -- xProp->setPropertyValue( rPropNameSupplier.GetName( PROP_PARA_ADJUST), aMSDefaultVal ); -- } -- } -- catch(...) -- { -- OSL_ENSURE( false, "Default ParaAdjust style property could not be set"); -- } -+ - } - } - --- -1.9.3 - diff --git a/SOURCES/0079-fdo-81516-Support-fonts-like-Source-Han-Sans-with-16.patch b/SOURCES/0079-fdo-81516-Support-fonts-like-Source-Han-Sans-with-16.patch deleted file mode 100644 index a6687bf..0000000 --- a/SOURCES/0079-fdo-81516-Support-fonts-like-Source-Han-Sans-with-16.patch +++ /dev/null @@ -1,31 +0,0 @@ -From c1a53308423ebf45c7209ca1359b205b6f0ac236 Mon Sep 17 00:00:00 2001 -From: Audrey Tang -Date: Tue, 5 Aug 2014 09:56:53 +0200 -Subject: [PATCH 079/137] fdo#81516 Support fonts like Source Han Sans with > - 16 FDArray elements - -Change-Id: I3f82574f434060d62dc3faeb730341c5b169ce9f -(cherry picked from commit 3b38a2342e48a2aec3c2e4f5aebf883db4b84101) -Reviewed-on: https://gerrit.libreoffice.org/10746 -Reviewed-by: David Tardon -Tested-by: David Tardon ---- - vcl/source/fontsubset/cff.cxx | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/vcl/source/fontsubset/cff.cxx b/vcl/source/fontsubset/cff.cxx -index e2241a1..35b6679 100644 ---- a/vcl/source/fontsubset/cff.cxx -+++ b/vcl/source/fontsubset/cff.cxx -@@ -405,7 +405,7 @@ private: - const char** mpCharStringOps; - const char** mpCharStringEscs; - -- CffLocal maCffLocal[16]; -+ CffLocal maCffLocal[256]; - CffLocal* mpCffLocal; - - void readDictOp( void); --- -1.9.3 - diff --git a/SOURCES/0080-bnc-886540-Default-chart-background-for-pptx-docs-sh.patch b/SOURCES/0080-bnc-886540-Default-chart-background-for-pptx-docs-sh.patch deleted file mode 100644 index a9f861f..0000000 --- a/SOURCES/0080-bnc-886540-Default-chart-background-for-pptx-docs-sh.patch +++ /dev/null @@ -1,126 +0,0 @@ -From feed03c590232659e6278ed7eb4137c479543b86 Mon Sep 17 00:00:00 2001 -From: Kohei Yoshida -Date: Fri, 1 Aug 2014 21:39:49 -0400 -Subject: [PATCH 080/137] bnc#886540: Default chart background for pptx docs - should be transparent. -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Charts in docx and xlsx OTOH use solid white as the default fill style. - -(cherry picked from commit 4a8f2431718f99de6fd9ee3461d703d007261c03) - -Conflicts: - oox/source/drawingml/chart/chartspaceconverter.cxx - oox/source/ppt/pptimport.cxx - -Change-Id: Ic4351fe65cabc12d60214b67c7026a317841f2c7 -Reviewed-on: https://gerrit.libreoffice.org/10737 -Reviewed-by: Matúš Kukan -Tested-by: Matúš Kukan ---- - include/oox/helper/graphichelper.hxx | 3 +++ - oox/source/drawingml/chart/chartspaceconverter.cxx | 9 ++++++++- - oox/source/helper/graphichelper.cxx | 5 +++++ - oox/source/ppt/pptimport.cxx | 6 ++++++ - 4 files changed, 22 insertions(+), 1 deletion(-) - -diff --git a/include/oox/helper/graphichelper.hxx b/include/oox/helper/graphichelper.hxx -index b96e993..9e90531 100644 ---- a/include/oox/helper/graphichelper.hxx -+++ b/include/oox/helper/graphichelper.hxx -@@ -24,6 +24,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -75,6 +76,8 @@ public: - /** Derived classes may implement to resolve a palette index to an RGB color. */ - virtual sal_Int32 getPaletteColor( sal_Int32 nPaletteIdx ) const; - -+ virtual css::drawing::FillStyle getDefaultChartAreaFillStyle() const; -+ - // Device info and device dependent unit conversion ----------------------- - - /** Returns information about the output device. */ -diff --git a/oox/source/drawingml/chart/chartspaceconverter.cxx b/oox/source/drawingml/chart/chartspaceconverter.cxx -index db04215..eeba446 100644 ---- a/oox/source/drawingml/chart/chartspaceconverter.cxx -+++ b/oox/source/drawingml/chart/chartspaceconverter.cxx -@@ -25,12 +25,14 @@ - #include - #include - #include -+#include - #include "oox/core/xmlfilterbase.hxx" - #include "oox/drawingml/chart/chartconverter.hxx" - #include "oox/drawingml/chart/chartdrawingfragment.hxx" - #include "oox/drawingml/chart/chartspacemodel.hxx" - #include "oox/drawingml/chart/plotareaconverter.hxx" - #include "oox/drawingml/chart/titleconverter.hxx" -+#include - - using namespace ::com::sun::star; - using ::com::sun::star::uno::Reference; -@@ -90,8 +92,13 @@ void ChartSpaceConverter::convertFromModel( const Reference< XShapes >& rxExtern - { - } - -- // formatting of the chart background -+ // formatting of the chart background. The default fill style varies with applications. - PropertySet aBackPropSet( getChartDocument()->getPageBackground() ); -+ -+ aBackPropSet.setProperty( -+ PROP_FillStyle, -+ uno::makeAny(getFilter().getGraphicHelper().getDefaultChartAreaFillStyle())); -+ - getFormatter().convertFrameFormatting( aBackPropSet, mrModel.mxShapeProp, OBJECTTYPE_CHARTSPACE ); - - // convert plot area (container of all chart type groups) -diff --git a/oox/source/helper/graphichelper.cxx b/oox/source/helper/graphichelper.cxx -index 5cb2b69..e40f019 100644 ---- a/oox/source/helper/graphichelper.cxx -+++ b/oox/source/helper/graphichelper.cxx -@@ -158,6 +158,11 @@ sal_Int32 GraphicHelper::getPaletteColor( sal_Int32 /*nPaletteIdx*/ ) const - return API_RGB_TRANSPARENT; - } - -+drawing::FillStyle GraphicHelper::getDefaultChartAreaFillStyle() const -+{ -+ return drawing::FillStyle_SOLID; -+} -+ - // Device info and device dependent unit conversion --------------------------- - - const awt::DeviceInfo& GraphicHelper::getDeviceInfo() const -diff --git a/oox/source/ppt/pptimport.cxx b/oox/source/ppt/pptimport.cxx -index fc9dadf..d294b79 100644 ---- a/oox/source/ppt/pptimport.cxx -+++ b/oox/source/ppt/pptimport.cxx -@@ -185,6 +185,7 @@ class PptGraphicHelper : public GraphicHelper - public: - explicit PptGraphicHelper( const PowerPointImport& rFilter ); - virtual sal_Int32 getSchemeColor( sal_Int32 nToken ) const; -+ virtual drawing::FillStyle getDefaultChartAreaFillStyle() const; - private: - const PowerPointImport& mrFilter; - }; -@@ -200,6 +201,11 @@ sal_Int32 PptGraphicHelper::getSchemeColor( sal_Int32 nToken ) const - return mrFilter.getSchemeColor( nToken ); - } - -+drawing::FillStyle PptGraphicHelper::getDefaultChartAreaFillStyle() const -+{ -+ return drawing::FillStyle_NONE; -+} -+ - } // namespace - - GraphicHelper* PowerPointImport::implCreateGraphicHelper() const --- -1.9.3 - diff --git a/SOURCES/0081-bnc-886540-Let-s-not-push-the-available-area-down-wh.patch b/SOURCES/0081-bnc-886540-Let-s-not-push-the-available-area-down-wh.patch deleted file mode 100644 index 73f1665..0000000 --- a/SOURCES/0081-bnc-886540-Let-s-not-push-the-available-area-down-wh.patch +++ /dev/null @@ -1,66 +0,0 @@ -From a3438ee890b360dda9201f03a78e1c5b98193c36 Mon Sep 17 00:00:00 2001 -From: Kohei Yoshida -Date: Tue, 5 Aug 2014 14:57:18 -0400 -Subject: [PATCH 081/137] bnc#886540: Let's not push the available area down - when no titles are there. -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This improves visual layout compability with MS Office chart & looks better. - -Change-Id: I348ea81152eca4e3bba9e0d9460448d9314738ad -(cherry picked from commit b398ed8e3f95b75705bb2e53d49589ef7fdbb1c7) -Reviewed-on: https://gerrit.libreoffice.org/10771 -Reviewed-by: Matúš Kukan -Tested-by: Matúš Kukan ---- - chart2/source/view/main/ChartView.cxx | 32 +------------------------------- - 1 file changed, 1 insertion(+), 31 deletions(-) - -diff --git a/chart2/source/view/main/ChartView.cxx b/chart2/source/view/main/ChartView.cxx -index c6b5878..1965f05 100644 ---- a/chart2/source/view/main/ChartView.cxx -+++ b/chart2/source/view/main/ChartView.cxx -@@ -2217,37 +2217,7 @@ boost::shared_ptr lcl_createTitle( TitleHelper::eTitleType eType - break; - } - } -- else -- { -- // #i109336# Improve auto positioning in chart -- switch ( eAlignment ) -- { -- case ALIGN_TOP: -- { -- rRemainingSpace.Y += nYDistance; -- rRemainingSpace.Height -= nYDistance; -- } -- break; -- case ALIGN_BOTTOM: -- { -- rRemainingSpace.Height -= nYDistance; -- } -- break; -- case ALIGN_LEFT: -- { -- rRemainingSpace.X += nXDistance; -- rRemainingSpace.Width -= nXDistance; -- } -- break; -- case ALIGN_RIGHT: -- { -- rRemainingSpace.Width -= nXDistance; -- } -- break; -- default: -- break; -- } -- } -+ - return apVTitle; - } - --- -1.9.3 - diff --git a/SOURCES/0082-bnc-862514-Handle-corner-case-in-slide-sorter-correc.patch b/SOURCES/0082-bnc-862514-Handle-corner-case-in-slide-sorter-correc.patch deleted file mode 100644 index a169e74..0000000 --- a/SOURCES/0082-bnc-862514-Handle-corner-case-in-slide-sorter-correc.patch +++ /dev/null @@ -1,81 +0,0 @@ -From a4a5fe4c66fe35c432127c28be7d52dc52fb4f58 Mon Sep 17 00:00:00 2001 -From: Jan Holesovsky -Date: Fri, 1 Aug 2014 21:10:22 +0200 -Subject: [PATCH 082/137] bnc#862514: Handle corner case in slide sorter - correctly. -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -We should never return -1 when bIncludeBordersAndGaps is true; but that could -have happened in a corner case: - -* export SAL_USE_VCLPLUGIN=gen -* start LibreOffice -* open a presentation with many slides -* resize the window so that it shows the slides _exactly_, no slide is cut - off in the slide sorter -* point the mouse pointer into the left "Slides" sidebar (slide sorter) so - that it does not cause any mouse-over effect (somehow between the left - border, and the slides - there is space that can do this) -* turn the mouse wheel all the way down so that the last slide is at the - bottom -* turn the mouse wheel up _once_ -* turn the mouse wheel down _once_ - it will look like the view does not - change (the last but one is still at the bottom), but you can see the - scrollbar jump to the top -* and now you can again start turning the wheel all the way down to repeat - the procedure :-) - -Reviewed-on: https://gerrit.libreoffice.org/10683 -Reviewed-by: David Tardon -Tested-by: David Tardon -(cherry picked from commit 48272a9a720039e79c6a684f1f037811ea42ed0c) - -Change-Id: I0253c89513222a1f2eb3263068997d10eea0f130 -Signed-off-by: Matúš Kukan ---- - sd/source/ui/slidesorter/view/SlsLayouter.cxx | 12 ++++++++++-- - 1 file changed, 10 insertions(+), 2 deletions(-) - -diff --git a/sd/source/ui/slidesorter/view/SlsLayouter.cxx b/sd/source/ui/slidesorter/view/SlsLayouter.cxx -index c4b6ae2..5c9ec8e 100644 ---- a/sd/source/ui/slidesorter/view/SlsLayouter.cxx -+++ b/sd/source/ui/slidesorter/view/SlsLayouter.cxx -@@ -627,11 +627,15 @@ sal_Int32 Layouter::Implementation::GetRowAtPosition ( - // When inside the gap below then nYPosition is not over a page - // object. - if (nDistanceIntoGap > 0) -- nRow = ResolvePositionInGap ( -+ { -+ sal_Int32 nResolvedRow = ResolvePositionInGap( - nDistanceIntoGap, - eGapMembership, - nRow, - mnVerticalGap); -+ if (!bIncludeBordersAndGaps || nResolvedRow != -1) -+ nRow = nResolvedRow; -+ } - } - else if (bIncludeBordersAndGaps) - { -@@ -670,11 +674,15 @@ sal_Int32 Layouter::Implementation::GetColumnAtPosition ( - // When inside the gap at the right then nXPosition is not over a - // page object. - if (nDistanceIntoGap > 0) -- nColumn = ResolvePositionInGap ( -+ { -+ sal_Int32 nResolvedColumn = ResolvePositionInGap( - nDistanceIntoGap, - eGapMembership, - nColumn, - mnHorizontalGap); -+ if (!bIncludeBordersAndGaps || nResolvedColumn != -1) -+ nColumn = nResolvedColumn; -+ } - } - else if (bIncludeBordersAndGaps) - { --- -1.9.3 - diff --git a/SOURCES/0083-fdo-81835-Don-t-prefer-GDI-Metafiles-to-RTF-HTML-cor.patch b/SOURCES/0083-fdo-81835-Don-t-prefer-GDI-Metafiles-to-RTF-HTML-cor.patch deleted file mode 100644 index 5dd8681..0000000 --- a/SOURCES/0083-fdo-81835-Don-t-prefer-GDI-Metafiles-to-RTF-HTML-cor.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 0650c251422b8b4f2485a33d0d5e39955981bf2d Mon Sep 17 00:00:00 2001 -From: Andrzej Hunt -Date: Wed, 6 Aug 2014 16:00:28 +0200 -Subject: [PATCH 083/137] fdo#81835 Don't prefer GDI Metafiles to RTF/HTML -- - correctly. - -Was first introduced by 538c13f3d1756f2d105115f64ab1bc0b7426eebc - -We should process clipboard formats in order of descriptive-/ -usefulness -- however png/bmp are special cases (as browsers -will add an html equivalent to their clipboard when copying raw -images, with the raw image being the preferred target format) -and were therefore moved up in the paste-preference list, -mistakenly it was assumed that GDI Metafiles should be subject -to the same treatment, but it appears that Word (and Wordpad?) -will provide both RTF (preferred) and GDI for formatted text. - -Change-Id: I731986fc9d70e7aeb64e53764e32cfec3e27eca1 -Reviewed-on: https://gerrit.libreoffice.org/10769 -Reviewed-by: Michael Stahl -Tested-by: Michael Stahl ---- - sot/source/base/formats.cxx | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/sot/source/base/formats.cxx b/sot/source/base/formats.cxx -index 1f20c24..fc985e2 100644 ---- a/sot/source/base/formats.cxx -+++ b/sot/source/base/formats.cxx -@@ -857,7 +857,6 @@ static SotAction_Impl const aEXCHG_DEST_SWDOC_FREE_AREA_Copy[] = \ - { SOT_FORMATSTR_ID_SD_OLE, EXCHG_OUT_ACTION_INSERT_OLE | EXCHG_OUT_ACTION_FLAG_INSERT_IMAGEMAP | EXCHG_OUT_ACTION_FLAG_INSERT_TARGETURL, 0 },\ - { SOT_FORMATSTR_ID_EMBED_SOURCE, EXCHG_OUT_ACTION_INSERT_OLE | EXCHG_OUT_ACTION_FLAG_INSERT_TARGETURL, 0 }, \ - { SOT_FORMATSTR_ID_EMBEDDED_OBJ, EXCHG_OUT_ACTION_INSERT_OLE | EXCHG_OUT_ACTION_FLAG_INSERT_TARGETURL, 0 }, \ -- { SOT_FORMAT_GDIMETAFILE, EXCHG_OUT_ACTION_INSERT_GDIMETAFILE | EXCHG_OUT_ACTION_FLAG_INSERT_IMAGEMAP | EXCHG_OUT_ACTION_FLAG_INSERT_TARGETURL, 0 },\ - { SOT_FORMATSTR_ID_PNG, EXCHG_OUT_ACTION_INSERT_BITMAP | EXCHG_OUT_ACTION_FLAG_INSERT_IMAGEMAP | EXCHG_OUT_ACTION_FLAG_INSERT_TARGETURL, 0 },\ - { SOT_FORMAT_BITMAP, EXCHG_OUT_ACTION_INSERT_BITMAP | EXCHG_OUT_ACTION_FLAG_INSERT_IMAGEMAP | EXCHG_OUT_ACTION_FLAG_INSERT_TARGETURL, 0 },\ - { SOT_FORMATSTR_ID_HTML, EXCHG_OUT_ACTION_INSERT_HTML | EXCHG_OUT_ACTION_FLAG_INSERT_IMAGEMAP | EXCHG_OUT_ACTION_FLAG_INSERT_TARGETURL, 0 },\ -@@ -869,6 +868,7 @@ static SotAction_Impl const aEXCHG_DEST_SWDOC_FREE_AREA_Copy[] = \ - { SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK, EXCHG_OUT_ACTION_INSERT_HYPERLINK | EXCHG_OUT_ACTION_FLAG_INSERT_IMAGEMAP | EXCHG_OUT_ACTION_FLAG_INSERT_TARGETURL, 0 },\ - { SOT_FORMATSTR_ID_FILEGRPDESCRIPTOR, EXCHG_OUT_ACTION_INSERT_HYPERLINK | EXCHG_OUT_ACTION_FLAG_INSERT_IMAGEMAP | EXCHG_OUT_ACTION_FLAG_INSERT_TARGETURL, FILEGRPDSC_ONLY_URL },\ - { SOT_FORMATSTR_ID_UNIFORMRESOURCELOCATOR, EXCHG_OUT_ACTION_INSERT_HYPERLINK | EXCHG_OUT_ACTION_FLAG_INSERT_IMAGEMAP | EXCHG_OUT_ACTION_FLAG_INSERT_TARGETURL, 0 },\ -+ { SOT_FORMAT_GDIMETAFILE, EXCHG_OUT_ACTION_INSERT_GDIMETAFILE | EXCHG_OUT_ACTION_FLAG_INSERT_IMAGEMAP | EXCHG_OUT_ACTION_FLAG_INSERT_TARGETURL, 0 },\ - { SOT_FORMATSTR_ID_EMBED_SOURCE_OLE, EXCHG_OUT_ACTION_INSERT_OLE | EXCHG_OUT_ACTION_FLAG_INSERT_TARGETURL, 0 }, \ - { SOT_FORMATSTR_ID_EMBEDDED_OBJ_OLE, EXCHG_OUT_ACTION_INSERT_OLE | EXCHG_OUT_ACTION_FLAG_INSERT_TARGETURL, 0 }, \ - { SOT_FORMATSTR_ID_LINK, EXCHG_OUT_ACTION_INSERT_DDE | EXCHG_OUT_ACTION_FLAG_INSERT_TARGETURL, 0 }, \ --- -1.9.3 - diff --git a/SOURCES/0084-fdo-82137-don-t-include-working-directory-in-tarball.patch b/SOURCES/0084-fdo-82137-don-t-include-working-directory-in-tarball.patch deleted file mode 100644 index 8f406bb..0000000 --- a/SOURCES/0084-fdo-82137-don-t-include-working-directory-in-tarball.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 3f37f7b8b0d99b274e2eadc4eff232ea670cb6fd Mon Sep 17 00:00:00 2001 -From: Christian Lohmaier -Date: Wed, 6 Aug 2014 20:11:00 +0200 -Subject: [PATCH 084/137] fdo#82137 don't include working directory in tarballs - -as this changes permissions when extracting, and those are restrictive, -since it is a temporary directory - -Change-Id: I41b28fe405e5915faeea944eb3cfdbed518ac55d -(cherry picked from commit 5ca2b6fca9eb975886f6796e6086ddf79be387d5) ---- - bin/lo-pack-sources | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/bin/lo-pack-sources b/bin/lo-pack-sources -index de6a4be..3571638 100755 ---- a/bin/lo-pack-sources -+++ b/bin/lo-pack-sources -@@ -13,6 +13,7 @@ my %module_dirname = ( - "help" => "helpcontent2", - "translations" => "translations" - ); -+my $lo_topdir_name; - - # get libreoffice-build version from the given libreoffice-build sources - sub get_config_version($) -@@ -159,7 +160,7 @@ sub generate_tarball($$$) - - print "Creating $tarball..."; - # generate the tarball in the current directory; avoid "./" prefix in the stored paths; show progress -- system ("tar -c $tar_compress_option -f $tarball -C $dir --checkpoint=500 --checkpoint-action=exec=\"echo -n .\" --transform=\"s|^\./||\" .") && -+ system ("tar -c $tar_compress_option -f $tarball -C $dir --checkpoint=500 --checkpoint-action=exec=\"echo -n .\" $lo_topdir_name") && - die "Error: releasing failed: $!\n"; - print "\n"; - } -@@ -351,7 +352,6 @@ my $state_release_version; - my $lo_core_tempdir; - my $force; - my $verbose=1; --my $lo_topdir_name; - my %module_tarball_name; - - ################### --- -1.9.3 - diff --git a/SOURCES/0085-fdo-81516-vcl-limit-number-of-CFFs-read-from-font.patch b/SOURCES/0085-fdo-81516-vcl-limit-number-of-CFFs-read-from-font.patch deleted file mode 100644 index 3e6fc0d..0000000 --- a/SOURCES/0085-fdo-81516-vcl-limit-number-of-CFFs-read-from-font.patch +++ /dev/null @@ -1,86 +0,0 @@ -From 5591c9c2ab77d32a923200f980e8fe7af61ffd5b Mon Sep 17 00:00:00 2001 -From: Michael Stahl -Date: Tue, 5 Aug 2014 12:50:05 +0200 -Subject: [PATCH 085/137] fdo#81516: vcl: limit number of CFFs read from font - -(cherry picked from commit 45b0b47d114437198c9e0872d427576e6e7e6cc6) - -Conflicts: - vcl/source/fontsubset/cff.cxx - -Change-Id: I9928b9805169a2dbb41be669dc37617b30bc672b -Reviewed-on: https://gerrit.libreoffice.org/10752 -Reviewed-by: Miklos Vajna -Tested-by: Miklos Vajna ---- - vcl/source/fontsubset/cff.cxx | 20 +++++++++++++------- - 1 file changed, 13 insertions(+), 7 deletions(-) - -diff --git a/vcl/source/fontsubset/cff.cxx b/vcl/source/fontsubset/cff.cxx -index 35b6679..476e458 100644 ---- a/vcl/source/fontsubset/cff.cxx -+++ b/vcl/source/fontsubset/cff.cxx -@@ -369,7 +369,7 @@ public: - explicit CffSubsetterContext( const U8* pBasePtr, int nBaseLen); - virtual ~CffSubsetterContext( void); - -- void initialCffRead( void); -+ bool initialCffRead(); - bool emitAsType1( class Type1Emitter&, - const long* pGlyphIDs, const U8* pEncoding, - GlyphWidth* pGlyphWidths, int nGlyphCount, FontSubsetInfo& ); -@@ -1569,9 +1569,7 @@ CffGlobal::CffGlobal( void) - // TODO; maFontMatrix.clear(); - } - --// -------------------------------------------------------------------- -- --void CffSubsetterContext::initialCffRead( void) -+bool CffSubsetterContext::initialCffRead() - { - // get the CFFHeader - mpReadPtr = mpBasePtr; -@@ -1629,7 +1627,11 @@ void CffSubsetterContext::initialCffRead( void) - // assert( mnFontDictBase == tellRel()); - mpReadPtr = mpBasePtr + mnFontDictBase; - mnFDAryCount = (mpReadPtr[0]<<8) + mpReadPtr[1]; -- assert( mnFDAryCount < (int)(sizeof(maCffLocal)/sizeof(*maCffLocal))); -+ if (static_cast(mnFDAryCount) >= SAL_N_ELEMENTS(maCffLocal)) -+ { -+ SAL_INFO("vcl.fonts", "CffSubsetterContext: too many CFF in font"); -+ return false; -+ } - - // read FDArray details to get access to the PRIVDICTs - for( int i = 0; i < mnFDAryCount; ++i) { -@@ -1670,6 +1672,8 @@ void CffSubsetterContext::initialCffRead( void) - } - - // ignore the Notices info -+ -+ return true; - } - - // -------------------------------------------------------------------- -@@ -2340,14 +2344,16 @@ bool CffSubsetterContext::emitAsType1( Type1Emitter& rEmitter, - bool FontSubsetInfo::CreateFontSubsetFromCff( GlyphWidth* pOutGlyphWidths ) - { - CffSubsetterContext aCff( mpInFontBytes, mnInByteLength); -- aCff.initialCffRead(); -+ bool bRC = aCff.initialCffRead(); -+ if (!bRC) -+ return bRC; - - // emit Type1 subset from the CFF input - // TODO: also support CFF->CFF subsetting (when PDF-export and PS-printing need it) - const bool bPfbSubset = (0 != (mnReqFontTypeMask & FontSubsetInfo::TYPE1_PFB)); - Type1Emitter aType1Emitter( mpOutFile, bPfbSubset); - aType1Emitter.setSubsetName( mpReqFontName); -- bool bRC = aCff.emitAsType1( aType1Emitter, -+ bRC = aCff.emitAsType1( aType1Emitter, - mpReqGlyphIds, mpReqEncodedIds, - pOutGlyphWidths, mnReqGlyphCount, *this); - return bRC; --- -1.9.3 - diff --git a/SOURCES/0086-fdo-69282-sw-fix-updating-of-page-styles-via-SwDocSh.patch b/SOURCES/0086-fdo-69282-sw-fix-updating-of-page-styles-via-SwDocSh.patch deleted file mode 100644 index 4a959cc..0000000 --- a/SOURCES/0086-fdo-69282-sw-fix-updating-of-page-styles-via-SwDocSh.patch +++ /dev/null @@ -1,53 +0,0 @@ -From f23d6a124dc413bcbb98f5145d230de707ca85db Mon Sep 17 00:00:00 2001 -From: Michael Stahl -Date: Tue, 5 Aug 2014 22:50:23 +0200 -Subject: [PATCH 086/137] fdo#69282: sw: fix updating of page styles via - SwDocShell::_LoadStyles() - -SwDoc::CopyPageDesc() only copies master and left SwFrmFmt attributes, -but not first-master and first-left. They will contain exactly the same -attributes as master and left but they still need to be copied... - -(see also: that FIXME in pagedesc.hxx) - -(regression from 75084f6c42c27dc95418df9cefed2fddfb26000e) - -Change-Id: I3dcc3627708b5d6a477eb7fef76cf6c42c95c004 -(cherry picked from commit 5c1cc92ee09f9fcc99077cacd3fc55640f03b7b2) -Reviewed-on: https://gerrit.libreoffice.org/10774 -Reviewed-by: Miklos Vajna -Tested-by: Miklos Vajna ---- - sw/source/core/doc/docfmt.cxx | 16 ++++++++++++++++ - 1 file changed, 16 insertions(+) - -diff --git a/sw/source/core/doc/docfmt.cxx b/sw/source/core/doc/docfmt.cxx -index 561cb0f..b987918 100644 ---- a/sw/source/core/doc/docfmt.cxx -+++ b/sw/source/core/doc/docfmt.cxx -@@ -2148,6 +2148,22 @@ void SwDoc::CopyPageDesc( const SwPageDesc& rSrcDesc, SwPageDesc& rDstDesc, - - rDstDesc.GetLeft().DelDiffs( aAttrSet ); - rDstDesc.GetLeft().SetFmtAttr( aAttrSet ); -+ -+ aAttrSet.ClearItem(); -+ aAttrSet.Put( rSrcDesc.GetFirstMaster().GetAttrSet() ); -+ aAttrSet.ClearItem( RES_HEADER ); -+ aAttrSet.ClearItem( RES_FOOTER ); -+ -+ rDstDesc.GetFirstMaster().DelDiffs( aAttrSet ); -+ rDstDesc.GetFirstMaster().SetFmtAttr( aAttrSet ); -+ -+ aAttrSet.ClearItem(); -+ aAttrSet.Put( rSrcDesc.GetFirstLeft().GetAttrSet() ); -+ aAttrSet.ClearItem( RES_HEADER ); -+ aAttrSet.ClearItem( RES_FOOTER ); -+ -+ rDstDesc.GetFirstLeft().DelDiffs( aAttrSet ); -+ rDstDesc.GetFirstLeft().SetFmtAttr( aAttrSet ); - } - - CopyHeader( rSrcDesc.GetMaster(), rDstDesc.GetMaster() ); --- -1.9.3 - diff --git a/SOURCES/0087-SwDoc-CopyPageDesc-probably-sending-Modify-for-first.patch b/SOURCES/0087-SwDoc-CopyPageDesc-probably-sending-Modify-for-first.patch deleted file mode 100644 index cf3c2bd..0000000 --- a/SOURCES/0087-SwDoc-CopyPageDesc-probably-sending-Modify-for-first.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 01db6d0f9b3cfa88eaedd3b9ac98f76c2a90571b Mon Sep 17 00:00:00 2001 -From: Michael Stahl -Date: Tue, 5 Aug 2014 22:56:17 +0200 -Subject: [PATCH 087/137] SwDoc::CopyPageDesc(): probably sending Modify for - first too cannot hurt - -Change-Id: I2056bee7555d3f6723ac374863187d82e4ad9edd -(cherry picked from commit 2e9840d18c09ce5552eec2f9d489d952da1034ae) -Reviewed-on: https://gerrit.libreoffice.org/10775 -Reviewed-by: Miklos Vajna -Tested-by: Miklos Vajna ---- - sw/source/core/doc/docfmt.cxx | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/sw/source/core/doc/docfmt.cxx b/sw/source/core/doc/docfmt.cxx -index b987918..43cfe77 100644 ---- a/sw/source/core/doc/docfmt.cxx -+++ b/sw/source/core/doc/docfmt.cxx -@@ -2215,6 +2215,12 @@ void SwDoc::CopyPageDesc( const SwPageDesc& rSrcDesc, SwPageDesc& rDstDesc, - { - rDstDesc.GetLeft().ModifyBroadcast( &aInfo, 0, TYPE(SwFrm) ); - } -+ { -+ rDstDesc.GetFirstMaster().ModifyBroadcast( &aInfo, 0, TYPE(SwFrm) ); -+ } -+ { -+ rDstDesc.GetFirstLeft().ModifyBroadcast( &aInfo, 0, TYPE(SwFrm) ); -+ } - } - } - --- -1.9.3 - diff --git a/SOURCES/0089-bnc-885548-Set-the-date-time-mode-to-non-fixed-after.patch b/SOURCES/0089-bnc-885548-Set-the-date-time-mode-to-non-fixed-after.patch deleted file mode 100644 index 47c8350..0000000 --- a/SOURCES/0089-bnc-885548-Set-the-date-time-mode-to-non-fixed-after.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 79b9cd12ca9e465d5782c007c80c4aab854d13d1 Mon Sep 17 00:00:00 2001 -From: Kohei Yoshida -Date: Fri, 8 Aug 2014 10:01:49 -0400 -Subject: [PATCH 089/137] bnc#885548: Set the date time mode to non-fixed after - the import is done. - -So that the new revisions will correctly record time stamps. - -Change-Id: I7d9b26bed04a95ce2652224faa0f214562818970 -(cherry picked from commit 2a6843cb6c44305ac62c9cd1098a3eec4abaeb7e) -Reviewed-on: https://gerrit.libreoffice.org/10830 -Reviewed-by: Eike Rathke -Tested-by: Eike Rathke ---- - sc/source/filter/oox/revisionfragment.cxx | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/sc/source/filter/oox/revisionfragment.cxx b/sc/source/filter/oox/revisionfragment.cxx -index 463b663..c8c1f14 100644 ---- a/sc/source/filter/oox/revisionfragment.cxx -+++ b/sc/source/filter/oox/revisionfragment.cxx -@@ -270,6 +270,7 @@ void RevisionHeadersFragment::finalizeImport() - } - - pCT->SetUser(aSelfUser); // set the default user to the document owner. -+ pCT->SetUseFixDateTime(false); - rDoc.SetChangeTrack(pCT.release()); - - // Turn on visibility of tracked changes. --- -1.9.3 - diff --git a/SOURCES/0090-fdo-81552-Fail-nicely-if-avahi-doesn-t-let-libreoffi.patch b/SOURCES/0090-fdo-81552-Fail-nicely-if-avahi-doesn-t-let-libreoffi.patch deleted file mode 100644 index f0332ae..0000000 --- a/SOURCES/0090-fdo-81552-Fail-nicely-if-avahi-doesn-t-let-libreoffi.patch +++ /dev/null @@ -1,111 +0,0 @@ -From 8de2e9b4bc53e6c097897142bad223c100d36292 Mon Sep 17 00:00:00 2001 -From: Bryan Quigley -Date: Mon, 4 Aug 2014 12:26:00 -0400 -Subject: [PATCH 090/137] fdo#81552 Fail nicely if avahi doesn't let - libreoffice publish items - -Needed some minor changes for 4-2. - -Reviewed-on: https://gerrit.libreoffice.org/10735 -Reviewed-by: Michael Stahl -Tested-by: Michael Stahl -(cherry picked from commit 3c57701cf0a169bd8d1893d1b2271d48b8072147) - -Change-Id: Ie264a032a71bda336158e18bd2b14c569f23f42d -Reviewed-on: https://gerrit.libreoffice.org/10822 -Reviewed-by: Michael Stahl -Tested-by: Michael Stahl ---- - sd/source/ui/remotecontrol/AvahiNetworkService.cxx | 28 ++++++++++++++-------- - 1 file changed, 18 insertions(+), 10 deletions(-) - -diff --git a/sd/source/ui/remotecontrol/AvahiNetworkService.cxx b/sd/source/ui/remotecontrol/AvahiNetworkService.cxx -index 04d8e57..43ee31b 100644 ---- a/sd/source/ui/remotecontrol/AvahiNetworkService.cxx -+++ b/sd/source/ui/remotecontrol/AvahiNetworkService.cxx -@@ -35,7 +35,7 @@ static AvahiThreadedPoll *threaded_poll = NULL; - static AvahiEntryGroup *group = NULL; - static AvahiNetworkService *avahiService = NULL; - --static void create_services(AvahiClient *c); -+static bool create_services(AvahiClient *c); - - static void entry_group_callback(AvahiEntryGroup *g, AvahiEntryGroupState state, AVAHI_GCC_UNUSED void *userdata) { - assert(g == group || group == NULL); -@@ -78,16 +78,19 @@ static void entry_group_callback(AvahiEntryGroup *g, AvahiEntryGroupState state, - } - } - --static void create_services(AvahiClient *c) { -+static bool create_services(AvahiClient *c) { - assert(c); - - /* If this is the first time we're called, let's create a new - * entry group if necessary */ -+ if(!client) -+ return false; - - if (!group) - if (!(group = avahi_entry_group_new(c, entry_group_callback, NULL))) { - fprintf(stderr, "avahi_entry_group_new() failed: %s\n", avahi_strerror(avahi_client_errno(c))); - avahiService->clear(); -+ return false; - } - - /* If the group is empty (either because it was just created, or -@@ -113,22 +116,23 @@ static void create_services(AvahiClient *c) { - - avahi_entry_group_reset(group); - -- create_services(c); -- return; -+ return create_services(c); - } - - fprintf(stderr, "Failed to add _impressremote._tcp service: %s\n", avahi_strerror(ret)); - avahiService->clear(); -+ return false; - } - - /* Tell the server to register the service */ - if ((ret = avahi_entry_group_commit(group)) < 0) { - fprintf(stderr, "Failed to commit entry group: %s\n", avahi_strerror(ret)); - avahiService->clear(); -+ return false; - } - } - -- return; -+ return true; //Services we're already created - } - - static void client_callback(AvahiClient *c, AvahiClientState state, AVAHI_GCC_UNUSED void * userdata) { -@@ -174,7 +178,8 @@ void AvahiNetworkService::setup() { - return; - } - -- create_services(client); -+ if(!create_services(client)) -+ return; - - /* Finally, start the event loop thread */ - if (avahi_threaded_poll_start(threaded_poll) < 0) { -@@ -184,8 +189,11 @@ void AvahiNetworkService::setup() { - } - - void AvahiNetworkService::clear() { -- /* Call this when the app shuts down */ -- avahi_threaded_poll_stop(threaded_poll); -- avahi_client_free(client); -- avahi_threaded_poll_free(threaded_poll); -+ /* Call this when the app shuts down */ -+ if(threaded_poll) -+ avahi_threaded_poll_stop(threaded_poll); -+ if(client) -+ avahi_client_free(client); -+ if(threaded_poll) -+ avahi_threaded_poll_free(threaded_poll); - } --- -1.9.3 - diff --git a/SOURCES/0091-bnc-862510-PPTX-import-Properly-show-data-labels-in-.patch b/SOURCES/0091-bnc-862510-PPTX-import-Properly-show-data-labels-in-.patch deleted file mode 100644 index 800d6b1..0000000 --- a/SOURCES/0091-bnc-862510-PPTX-import-Properly-show-data-labels-in-.patch +++ /dev/null @@ -1,40 +0,0 @@ -From c76daf9b5f1efc44eaf6541314f122d641c791cc Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Mat=C3=BA=C5=A1=20Kukan?= -Date: Tue, 29 Jul 2014 07:53:22 +0200 -Subject: [PATCH 091/137] bnc#862510: PPTX import: Properly show data labels in - percent format. - -Usually, "General" is "0.00" number format, but in this case, when we -want to show percent value, MSO writes that instead of "0%". - -Change-Id: I748719765f58e66f9f3fb43c2b527c6823ef6fa1 -(cherry picked from commit 5f47e319428a703ea53ce49d166e7628aaa60789) -Reviewed-on: https://gerrit.libreoffice.org/10781 -Reviewed-by: Tor Lillqvist -Tested-by: Tor Lillqvist ---- - oox/source/drawingml/chart/objectformatter.cxx | 7 +++++-- - 1 file changed, 5 insertions(+), 2 deletions(-) - -diff --git a/oox/source/drawingml/chart/objectformatter.cxx b/oox/source/drawingml/chart/objectformatter.cxx -index b5b0a5b..8e91941 100644 ---- a/oox/source/drawingml/chart/objectformatter.cxx -+++ b/oox/source/drawingml/chart/objectformatter.cxx -@@ -1113,9 +1113,12 @@ void ObjectFormatter::convertNumberFormat( PropertySet& rPropSet, const NumberFo - sal_Int32 nPropId = bPercentFormat ? PROP_PercentageNumberFormat : PROP_NumberFormat; - try - { -- sal_Int32 nIndex = rNumberFormat.maFormatCode.equalsIgnoreAsciiCase("general") ? -+ bool bGeneral = rNumberFormat.maFormatCode.equalsIgnoreAsciiCase("general"); -+ sal_Int32 nIndex = bGeneral && !bPercentFormat ? - mxData->mxNumTypes->getStandardIndex( mxData->maFromLocale ) : -- mxData->mxNumFmts->addNewConverted( rNumberFormat.maFormatCode, mxData->maEnUsLocale, mxData->maFromLocale ); -+ mxData->mxNumFmts->addNewConverted( -+ bGeneral ? OUString("0%") : rNumberFormat.maFormatCode, -+ mxData->maEnUsLocale, mxData->maFromLocale ); - if( nIndex >= 0 ) - rPropSet.setProperty( nPropId, nIndex ); - } --- -1.9.3 - diff --git a/SOURCES/0092-Fix-some-number-format-issues-bnc-862510.patch b/SOURCES/0092-Fix-some-number-format-issues-bnc-862510.patch deleted file mode 100644 index 92c6f2d..0000000 --- a/SOURCES/0092-Fix-some-number-format-issues-bnc-862510.patch +++ /dev/null @@ -1,69 +0,0 @@ -From 2772bb0a1997c76be47d81d67678c907b28df650 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Mat=C3=BA=C5=A1=20Kukan?= -Date: Tue, 29 Jul 2014 21:10:22 +0200 -Subject: [PATCH 092/137] Fix some number format issues, bnc#862510 - -Set "LinkNumberFormatToSource" to false, so that format code is not -ignored. -Also, do not inherit format code common for all labels, if there is -specific format code for a data label. - -Change-Id: I505311d5df641d61e616e354734bd332609fa122 -(cherry picked from commit c8cc89ff802d86b1f3a69afe1b4835b7df7f70c7) -Reviewed-on: https://gerrit.libreoffice.org/10782 -Reviewed-by: Tor Lillqvist -Tested-by: Tor Lillqvist ---- - oox/source/drawingml/chart/modelbase.cxx | 3 +-- - oox/source/drawingml/chart/objectformatter.cxx | 4 +++- - oox/source/drawingml/chart/seriesconverter.cxx | 5 ++--- - 3 files changed, 6 insertions(+), 6 deletions(-) - -diff --git a/oox/source/drawingml/chart/modelbase.cxx b/oox/source/drawingml/chart/modelbase.cxx -index b349945..eadde2b 100644 ---- a/oox/source/drawingml/chart/modelbase.cxx -+++ b/oox/source/drawingml/chart/modelbase.cxx -@@ -34,8 +34,7 @@ NumberFormat::NumberFormat() : - void NumberFormat::setAttributes( const AttributeList& rAttribs ) - { - maFormatCode = rAttribs.getString( XML_formatCode, OUString() ); -- // default is 'false', not 'true' as specified -- mbSourceLinked = rAttribs.getBool( XML_sourceLinked, false ); -+ // TODO: if XML_sourceLinked is true, should be used instead. - } - - // ============================================================================ -diff --git a/oox/source/drawingml/chart/objectformatter.cxx b/oox/source/drawingml/chart/objectformatter.cxx -index 8e91941..a9911e7 100644 ---- a/oox/source/drawingml/chart/objectformatter.cxx -+++ b/oox/source/drawingml/chart/objectformatter.cxx -@@ -1128,7 +1128,9 @@ void ObjectFormatter::convertNumberFormat( PropertySet& rPropSet, const NumberFo - append( OUStringToOString( rNumberFormat.maFormatCode, osl_getThreadTextEncoding() ) ).append( '\'' ).getStr() ); - } - -- rPropSet.setProperty(PROP_LinkNumberFormatToSource, makeAny(rNumberFormat.mbSourceLinked)); -+ // Format code is ignored if "LinkNumberFormatToSource" is set to "true" :-/ -+ // See AxisHelper::getExplicitNumberFormatKeyForAxis() -+ rPropSet.setProperty(PROP_LinkNumberFormatToSource, makeAny(rNumberFormat.maFormatCode.isEmpty())); - } - } - -diff --git a/oox/source/drawingml/chart/seriesconverter.cxx b/oox/source/drawingml/chart/seriesconverter.cxx -index dbd3201..2cccd3a 100644 ---- a/oox/source/drawingml/chart/seriesconverter.cxx -+++ b/oox/source/drawingml/chart/seriesconverter.cxx -@@ -234,9 +234,8 @@ void DataLabelsConverter::convertFromModel( const Reference< XDataSeries >& rxDa - // data point label settings - for( DataLabelsModel::DataLabelVector::iterator aIt = mrModel.maPointLabels.begin(), aEnd = mrModel.maPointLabels.end(); aIt != aEnd; ++aIt ) - { -- (*aIt)->maNumberFormat.maFormatCode = mrModel.maNumberFormat.maFormatCode; -- if( !mrModel.maNumberFormat.maFormatCode.isEmpty() ) -- (*aIt)->maNumberFormat.mbSourceLinked = false; -+ if ((*aIt)->maNumberFormat.maFormatCode.isEmpty()) -+ (*aIt)->maNumberFormat = mrModel.maNumberFormat; - - DataLabelConverter aLabelConv( *this, **aIt ); - aLabelConv.convertFromModel( rxDataSeries, rTypeGroup ); --- -1.9.3 - diff --git a/SOURCES/0093-fdo-81995-fix-Outline-numbering-tab-page.patch b/SOURCES/0093-fdo-81995-fix-Outline-numbering-tab-page.patch deleted file mode 100644 index e68ebe0..0000000 --- a/SOURCES/0093-fdo-81995-fix-Outline-numbering-tab-page.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 48cbe9d301e3c7f94ca8cc682b5c67a4fe6f378c Mon Sep 17 00:00:00 2001 -From: Michael Stahl -Date: Mon, 11 Aug 2014 22:24:54 +0200 -Subject: [PATCH 093/137] fdo#81995: fix Outline numbering tab page - -The "ParentNumbering" property is not a string. - -(regression from 97eb8a6e0eb830f37dcba64a51d725aab4c5ff53) - -Change-Id: Ib33e95847b388bb1126a63812e128c96a0c00730 -(cherry picked from commit 4d3c9ed257e51af55f358d2b44d5fc2e341c7202) -Reviewed-on: https://gerrit.libreoffice.org/10875 -Reviewed-by: Eike Rathke -Tested-by: Eike Rathke ---- - i18npool/source/localedata/localedata.cxx | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/i18npool/source/localedata/localedata.cxx b/i18npool/source/localedata/localedata.cxx -index 5d70251..9aafd2b 100644 ---- a/i18npool/source/localedata/localedata.cxx -+++ b/i18npool/source/localedata/localedata.cxx -@@ -1589,7 +1589,7 @@ Any OutlineNumbering::getByIndex( sal_Int32 nIndex ) - pValues[4].Name = "BulletFontName"; - pValues[4].Value <<= OUString::createFromAscii(pTemp->sBulletFontName); - pValues[5].Name = "ParentNumbering"; -- pValues[5].Value <<= OUString::number(pTemp->nParentNumbering); -+ pValues[5].Value <<= pTemp->nParentNumbering; - pValues[6].Name = "LeftMargin"; - pValues[6].Value <<= pTemp->nLeftMargin; - pValues[7].Name = "SymbolTextDistance"; --- -1.9.3 - diff --git a/SOURCES/0095-bnc-887227-Do-not-set-TextAutoGrowHeight-for-vertica.patch b/SOURCES/0095-bnc-887227-Do-not-set-TextAutoGrowHeight-for-vertica.patch deleted file mode 100644 index e8ba79d..0000000 --- a/SOURCES/0095-bnc-887227-Do-not-set-TextAutoGrowHeight-for-vertica.patch +++ /dev/null @@ -1,39 +0,0 @@ -From ca51beb73336b3a19364df02aab82d56a2a63e74 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Mat=C3=BA=C5=A1=20Kukan?= -Date: Thu, 24 Jul 2014 20:03:43 +0200 -Subject: [PATCH 095/137] bnc#887227: Do not set TextAutoGrowHeight for - vertical text. - -It's horribly broken and it would resize text box -horizontally which is not supposed to happen. - -(cherry picked from commit d068f13596f6d1023a70d98ec2059d38ad6fd777) - -Change-Id: I201ec8dbcddca56d21bf46ea8ee838d01923c442 -Reviewed-on: https://gerrit.libreoffice.org/10585 -Reviewed-by: David Tardon -Tested-by: David Tardon ---- - oox/source/drawingml/textbodypropertiescontext.cxx | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/oox/source/drawingml/textbodypropertiescontext.cxx b/oox/source/drawingml/textbodypropertiescontext.cxx -index b580be3..166ecd0 100644 ---- a/oox/source/drawingml/textbodypropertiescontext.cxx -+++ b/oox/source/drawingml/textbodypropertiescontext.cxx -@@ -132,7 +132,11 @@ ContextHandlerRef TextBodyPropertiesContext::onCreateContext( sal_Int32 aElement - mrTextBodyProp.maPropertyMap[ PROP_TextAutoGrowHeight ] <<= false; - break; - case A_TOKEN( spAutoFit ): -- mrTextBodyProp.maPropertyMap[ PROP_TextAutoGrowHeight ] <<= true; -+ { -+ const sal_Int32 tVert = mrTextBodyProp.moVert.get( XML_horz ); -+ if( tVert != XML_vert && tVert != XML_eaVert && tVert != XML_vert270 && tVert != XML_mongolianVert ) -+ mrTextBodyProp.maPropertyMap[ PROP_TextAutoGrowHeight ] <<= true; -+ } - break; - - case A_TOKEN( scene3d ): // CT_Scene3D --- -1.9.3 - diff --git a/SOURCES/0097-fdo-80501-Ensure-that-we-notify-each-listener-only-o.patch b/SOURCES/0097-fdo-80501-Ensure-that-we-notify-each-listener-only-o.patch deleted file mode 100644 index 2903b81..0000000 --- a/SOURCES/0097-fdo-80501-Ensure-that-we-notify-each-listener-only-o.patch +++ /dev/null @@ -1,206 +0,0 @@ -From 5f9e7ee1cc330f3b08596db0d13ad01e4dea7880 Mon Sep 17 00:00:00 2001 -From: Kohei Yoshida -Date: Wed, 30 Jul 2014 11:02:31 -0400 -Subject: [PATCH 097/137] fdo#80501: Ensure that we notify each listener only - once. - -Change-Id: If2ce4643ff58c7c2ba326d749698dd5196a108dc -(cherry picked from commit b2ee0235e88dc4da715b5766295ed88f27974fbd) -Reviewed-on: https://gerrit.libreoffice.org/10647 -Reviewed-by: Eike Rathke -Tested-by: Eike Rathke ---- - sc/inc/column.hxx | 1 - - sc/inc/table.hxx | 5 +---- - sc/source/core/data/column.cxx | 27 --------------------------- - sc/source/core/data/column4.cxx | 3 +++ - sc/source/core/data/documen7.cxx | 40 ++++++++++++++++++++++++++++++++++++++-- - sc/source/core/data/table2.cxx | 7 ------- - sc/source/core/data/table7.cxx | 10 ++++++++++ - 7 files changed, 52 insertions(+), 41 deletions(-) - -diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx -index 8962422..66cd524 100644 ---- a/sc/inc/column.hxx -+++ b/sc/inc/column.hxx -@@ -478,7 +478,6 @@ public: - void StartNeededListeners(); // only for cells where NeedsListening()==true - void SetDirtyIfPostponed(); - void BroadcastRecalcOnRefMove(); -- void BroadcastRefMoved( const sc::RefMovedHint& rHint ); - void TransferListeners( ScColumn& rDestCol, SCROW nRow1, SCROW nRow2, SCROW nRowDelta ); - void CollectListeners( std::vector& rListeners, SCROW nRow1, SCROW nRow2 ); - -diff --git a/sc/inc/table.hxx b/sc/inc/table.hxx -index 9d36a1e..191a360 100644 ---- a/sc/inc/table.hxx -+++ b/sc/inc/table.hxx -@@ -927,10 +927,7 @@ public: - */ - void BroadcastRecalcOnRefMove(); - -- /** -- * Broadcast all listeners of specified range that the range have moved. -- */ -- void BroadcastRefMoved( const sc::RefMovedHint& rHint ); -+ void CollectListeners( std::vector& rListeners, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2 ); - - void TransferListeners( - ScTable& rDestTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, -diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx -index 2d0a018..10da725 100644 ---- a/sc/source/core/data/column.cxx -+++ b/sc/source/core/data/column.cxx -@@ -3119,33 +3119,6 @@ void ScColumn::BroadcastRecalcOnRefMove() - - namespace { - --class BroadcastRefMovedHandler --{ -- const sc::RefMovedHint& mrHint; --public: -- BroadcastRefMovedHandler( const sc::RefMovedHint& rHint ) : mrHint(rHint) {} -- -- void operator() ( size_t, SvtBroadcaster* p ) -- { -- p->Broadcast(mrHint); -- } --}; -- --} -- --void ScColumn::BroadcastRefMoved( const sc::RefMovedHint& rHint ) --{ -- const ScRange& rRange = rHint.getRange(); -- SCROW nRow1 = rRange.aStart.Row(); -- SCROW nRow2 = rRange.aEnd.Row(); -- -- // Notify all listeners within specified rows. -- BroadcastRefMovedHandler aFunc(rHint); -- sc::ProcessBroadcaster(maBroadcasters.begin(), maBroadcasters, nRow1, nRow2, aFunc); --} -- --namespace { -- - class TransferListenersHandler - { - public: -diff --git a/sc/source/core/data/column4.cxx b/sc/source/core/data/column4.cxx -index bf3b817..d1aacdd 100644 ---- a/sc/source/core/data/column4.cxx -+++ b/sc/source/core/data/column4.cxx -@@ -533,6 +533,9 @@ public: - - void ScColumn::CollectListeners( std::vector& rListeners, SCROW nRow1, SCROW nRow2 ) - { -+ if (nRow2 < nRow1 || !ValidRow(nRow1) || !ValidRow(nRow2)) -+ return; -+ - ListenerCollector aFunc(rListeners); - sc::ProcessBroadcaster(maBroadcasters.begin(), maBroadcasters, nRow1, nRow2, aFunc); - } -diff --git a/sc/source/core/data/documen7.cxx b/sc/source/core/data/documen7.cxx -index 02a75fb..a960c5a 100644 ---- a/sc/source/core/data/documen7.cxx -+++ b/sc/source/core/data/documen7.cxx -@@ -130,6 +130,22 @@ void ScDocument::BroadcastCells( const ScRange& rRange, sal_uLong nHint ) - BroadcastUno(SfxSimpleHint(SC_HINT_DATACHANGED)); - } - -+namespace { -+ -+class RefMovedNotifier : std::unary_function -+{ -+ const sc::RefMovedHint& mrHint; -+public: -+ RefMovedNotifier( const sc::RefMovedHint& rHint ) : mrHint(rHint) {} -+ -+ void operator() ( SvtListener* p ) -+ { -+ p->Notify(mrHint); -+ } -+}; -+ -+} -+ - void ScDocument::BroadcastRefMoved( const sc::RefMovedHint& rHint ) - { - if (!pBASM) -@@ -150,6 +166,28 @@ void ScDocument::BroadcastRefMoved( const sc::RefMovedHint& rHint ) - } - } - -+ // Collect all listeners listening into the range. -+ std::vector aListeners; -+ for (SCTAB nTab = rSrcRange.aStart.Tab(); nTab <= rSrcRange.aEnd.Tab(); ++nTab) -+ { -+ ScTable* pTab = FetchTable(nTab); -+ if (!pTab) -+ continue; -+ -+ pTab->CollectListeners( -+ aListeners, -+ rSrcRange.aStart.Col(), rSrcRange.aStart.Row(), -+ rSrcRange.aEnd.Col(), rSrcRange.aEnd.Row()); -+ } -+ -+ // Remove any duplicate listener entries. We must ensure that we notify -+ // each unique listener only once. -+ std::sort(aListeners.begin(), aListeners.end()); -+ aListeners.erase(std::unique(aListeners.begin(), aListeners.end()), aListeners.end()); -+ -+ // Notify the listeners. -+ std::for_each(aListeners.begin(), aListeners.end(), RefMovedNotifier(rHint)); -+ - for (SCTAB nTab = rSrcRange.aStart.Tab(); nTab <= rSrcRange.aEnd.Tab(); ++nTab) - { - ScTable* pTab = FetchTable(nTab); -@@ -161,8 +199,6 @@ void ScDocument::BroadcastRefMoved( const sc::RefMovedHint& rHint ) - if (!pDestTab) - continue; - -- // Adjust the references. -- pTab->BroadcastRefMoved(rHint); - // Move the listeners from the old location to the new. - pTab->TransferListeners( - *pDestTab, rSrcRange.aStart.Col(), rSrcRange.aStart.Row(), -diff --git a/sc/source/core/data/table2.cxx b/sc/source/core/data/table2.cxx -index 3f0d190..1a37801 100644 ---- a/sc/source/core/data/table2.cxx -+++ b/sc/source/core/data/table2.cxx -@@ -1739,13 +1739,6 @@ void ScTable::BroadcastRecalcOnRefMove() - aCol[i].BroadcastRecalcOnRefMove(); - } - --void ScTable::BroadcastRefMoved( const sc::RefMovedHint& rHint ) --{ -- const ScRange& rRange = rHint.getRange(); -- for (SCCOL nCol = rRange.aStart.Col(); nCol <= rRange.aEnd.Col(); ++nCol) -- aCol[nCol].BroadcastRefMoved(rHint); --} -- - void ScTable::TransferListeners( - ScTable& rDestTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, - SCCOL nColDelta, SCROW nRowDelta ) -diff --git a/sc/source/core/data/table7.cxx b/sc/source/core/data/table7.cxx -index 1ede729..ff976a2 100644 ---- a/sc/source/core/data/table7.cxx -+++ b/sc/source/core/data/table7.cxx -@@ -110,4 +110,14 @@ void ScTable::RegroupFormulaCells( SCCOL nCol ) - aCol[nCol].RegroupFormulaCells(); - } - -+void ScTable::CollectListeners( -+ std::vector& rListeners, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2 ) -+{ -+ if (nCol2 < nCol1 || !ValidCol(nCol1) || !ValidCol(nCol2)) -+ return; -+ -+ for (SCCOL nCol = nCol1; nCol <= nCol2; ++nCol) -+ aCol[nCol].CollectListeners(rListeners, nRow1, nRow2); -+} -+ - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ --- -1.9.3 - diff --git a/SOURCES/0098-bnc-822170-Let-s-not-even-try-to-export-invalid-char.patch b/SOURCES/0098-bnc-822170-Let-s-not-even-try-to-export-invalid-char.patch deleted file mode 100644 index e2a2bdb..0000000 --- a/SOURCES/0098-bnc-822170-Let-s-not-even-try-to-export-invalid-char.patch +++ /dev/null @@ -1,168 +0,0 @@ -From f1d36a5eaaff6404fee0865947040e92026c7996 Mon Sep 17 00:00:00 2001 -From: Kohei Yoshida -Date: Tue, 12 Aug 2014 21:24:17 -0400 -Subject: [PATCH 098/137] bnc#822170: Let's not even try to export invalid - chart objects. - -If we do, at best, Excel will complain about the document needing -repair. At worst Excel will skip some of the other valid drawing -objects from being loaded. - -(cherry picked from commit 692878e3bb83c0fc104c5cca946c25ccf2d84ab2) - -Conflicts: - sc/source/filter/xcl97/xcl97rec.cxx - sc/source/filter/excel/xeescher.cxx - -Change-Id: If3794d0ae9d8b44b124020bb12b5369dfebc95ae -Reviewed-on: https://gerrit.libreoffice.org/10900 -Reviewed-by: Eike Rathke -Tested-by: Eike Rathke ---- - sc/source/filter/excel/xeescher.cxx | 5 ++- - sc/source/filter/inc/xeescher.hxx | 2 ++ - sc/source/filter/xcl97/xcl97rec.cxx | 68 ++++++++++++++++++++++++++++++++----- - 3 files changed, 65 insertions(+), 10 deletions(-) - -diff --git a/sc/source/filter/excel/xeescher.cxx b/sc/source/filter/excel/xeescher.cxx -index 241182c..bb3a2a5 100644 ---- a/sc/source/filter/excel/xeescher.cxx -+++ b/sc/source/filter/excel/xeescher.cxx -@@ -1207,7 +1207,10 @@ void XclExpChartObj::WriteShapeTransformation( sax_fastparser::FSHelperPtr pFS, - pFS->endElementNS( XML_xdr, XML_xfrm ); - } - --// ============================================================================ -+const css::uno::Reference& XclExpChartObj::GetChartDoc() const -+{ -+ return mxChartDoc; -+} - - XclExpNote::XclExpNote( const XclExpRoot& rRoot, const ScAddress& rScPos, - const ScPostIt* pScNote, const OUString& rAddText ) : -diff --git a/sc/source/filter/inc/xeescher.hxx b/sc/source/filter/inc/xeescher.hxx -index 4d7be77..cce4c66 100644 ---- a/sc/source/filter/inc/xeescher.hxx -+++ b/sc/source/filter/inc/xeescher.hxx -@@ -324,6 +324,8 @@ public: - virtual void WriteChartObj( sax_fastparser::FSHelperPtr pDrawing, XclExpXmlStream& rStrm ); - void WriteShapeTransformation( sax_fastparser::FSHelperPtr pFS, const XShapeRef& rXShape, sal_Bool bFlipH = false, sal_Bool bFlipV = false, sal_Int32 nRotation = 0 ); - -+ const css::uno::Reference& GetChartDoc() const; -+ - private: - typedef boost::shared_ptr< XclExpChart > XclExpChartRef; - XclExpChartRef mxChart; /// The chart itself (BOF/EOF substream data). -diff --git a/sc/source/filter/xcl97/xcl97rec.cxx b/sc/source/filter/xcl97/xcl97rec.cxx -index d61383a..24624cb 100644 ---- a/sc/source/filter/xcl97/xcl97rec.cxx -+++ b/sc/source/filter/xcl97/xcl97rec.cxx -@@ -71,6 +71,8 @@ - #include - #include - #include -+#include -+#include - #include - #include - #include -@@ -162,6 +164,8 @@ void XclExpObjList::Save( XclExpStream& rStrm ) - pSolverContainer->Save( rStrm ); - } - -+namespace { -+ - static bool IsVmlObject( const XclObj *rObj ) - { - switch( rObj->GetObjType() ) -@@ -186,11 +190,61 @@ static sal_Int32 GetVmlObjectCount( XclExpObjList& rList ) - return nNumVml; - } - -+bool IsValidObject( const XclObj& rObj ) -+{ -+ if (rObj.GetObjType() == EXC_OBJTYPE_CHART) -+ { -+ // Chart object. Make sure it's a valid chart object. We skip -+ // invalid chart objects from exporting to prevent Excel from -+ // complaining on load. -+ -+ const XclExpChartObj& rChartObj = static_cast(rObj); -+ uno::Reference xChartDoc(rChartObj.GetChartDoc(), uno::UNO_QUERY); -+ if (!xChartDoc.is()) -+ return false; -+ -+ uno::Reference xDiagram = xChartDoc->getFirstDiagram(); -+ if (!xDiagram.is()) -+ return false; -+ -+ uno::Reference xCooSysContainer(xDiagram, uno::UNO_QUERY); -+ if (!xCooSysContainer.is()) -+ return false; -+ -+ uno::Sequence > xCooSysSeq = xCooSysContainer->getCoordinateSystems(); -+ if (!xCooSysSeq.getLength()) -+ return false; -+ -+ for (sal_Int32 nCooSys = 0; nCooSys < xCooSysSeq.getLength(); ++nCooSys) -+ { -+ Reference xChartTypeCont(xCooSysSeq[nCooSys], uno::UNO_QUERY); -+ if (!xChartTypeCont.is()) -+ return false; -+ -+ uno::Sequence > xChartTypeSeq = xChartTypeCont->getChartTypes(); -+ if (!xChartTypeSeq.getLength()) -+ // No chart type. Not good. -+ return false; -+ } -+ } -+ -+ return true; -+} - - static void SaveDrawingMLObjects( XclExpObjList& rList, XclExpXmlStream& rStrm, sal_Int32& nDrawingMLCount ) - { -- sal_Int32 nVmlObjects = GetVmlObjectCount( rList ); -- if( (rList.size() - nVmlObjects) == 0 ) -+ std::vector aList; -+ aList.reserve(rList.size()); -+ std::vector::iterator it = rList.begin(), itEnd = rList.end(); -+ for (; it != itEnd; ++it) -+ { -+ if (IsVmlObject(*it) || !IsValidObject(**it)) -+ continue; -+ -+ aList.push_back(*it); -+ } -+ -+ if (aList.empty()) - return; - - sal_Int32 nDrawing = ++nDrawingMLCount; -@@ -214,13 +268,8 @@ static void SaveDrawingMLObjects( XclExpObjList& rList, XclExpXmlStream& rStrm, - FSNS( XML_xmlns, XML_r ), "http://schemas.openxmlformats.org/officeDocument/2006/relationships", - FSEND ); - -- std::vector::iterator pIter; -- for ( pIter = rList.begin(); pIter != rList.end(); ++pIter ) -- { -- if( IsVmlObject( *pIter ) ) -- continue; -- (*pIter)->SaveXml( rStrm ); -- } -+ for (it = aList.begin(), itEnd = aList.end(); it != itEnd; ++it) -+ (*it)->SaveXml(rStrm); - - pDrawing->endElement( FSNS( XML_xdr, XML_wsDr ) ); - -@@ -267,6 +316,7 @@ static void SaveVmlObjects( XclExpObjList& rList, XclExpXmlStream& rStrm, sal_In - rStrm.PopStream(); - } - -+} - - void XclExpObjList::SaveXml( XclExpXmlStream& rStrm ) - { --- -1.9.3 - diff --git a/SOURCES/0099-valgrind-bff-don-t-add-0xffff-oldcode.patch b/SOURCES/0099-valgrind-bff-don-t-add-0xffff-oldcode.patch deleted file mode 100644 index 665a447..0000000 --- a/SOURCES/0099-valgrind-bff-don-t-add-0xffff-oldcode.patch +++ /dev/null @@ -1,826 +0,0 @@ -From 902436078cb8df65d06617d5980cd8834ec8f8c9 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= -Date: Wed, 13 Aug 2014 09:12:26 +0100 -Subject: [PATCH 099/137] valgrind + bff: don't add 0xffff oldcode - -Invalid read of size 1 - at 0x9DC6247: GIFLZWDecompressor::AddToTable(unsigned short, unsigned short) (decode.cxx:117) - -Change-Id: I9cea8dcd4a5eeaa1e793b9be96f82854b9d088af -Reviewed-on: https://gerrit.libreoffice.org/10906 -Reviewed-by: David Tardon -Tested-by: David Tardon ---- - ...3e0068c9b19bb548826bed0599f65745-15940-minimized.gif | Bin 0 -> 47778 bytes - vcl/source/filter/igif/decode.cxx | 11 +++++++---- - 2 files changed, 7 insertions(+), 4 deletions(-) - create mode 100644 vcl/qa/cppunit/graphicfilter/data/gif/pass/sf_3e0068c9b19bb548826bed0599f65745-15940-minimized.gif - -diff --git a/vcl/qa/cppunit/graphicfilter/data/gif/pass/sf_3e0068c9b19bb548826bed0599f65745-15940-minimized.gif b/vcl/qa/cppunit/graphicfilter/data/gif/pass/sf_3e0068c9b19bb548826bed0599f65745-15940-minimized.gif -new file mode 100644 -index 0000000000000000000000000000000000000000..47f5d4341ba6f04e499c2031df0faeb6fb57ec46 -GIT binary patch -literal 47778 -zcmd43cU05q_b!@*kPyHadguu)^j;EbLa(9sV(1;|T_A-qos>#x_Jg@6C!yp4^GzrTM{Qc`$$_|()CD4q%Y6Y$@#fANuRygaQ) -zZZ^7_+FW4PkG?{=KY@`Tb>Mpt5%>Z@|8hI$FmVbWAAI7kZ5${fJisn)(#mOpU+SXc -zse2AJuf0kCS;QoJ8E1HuHZu*f1;VQQ`-bN=Qp=_Laj#+JAWyELu;Uorjy)rf-SZ!O -zi6UQKeEemh;4d}%xB0n3)Vu;n5hGZTON~+VzQmd~_kEfg2FZ_LBDVC2?w -z*M1T?b8+(a=9S#_oblW0w_1g6i_YE8I|7F~EG(^3m;yCh3T=Bq4)9br8 -zoMdEj)p|&Gjle;gg@S|9mN%XIg(!dgwfLseZ$CyPxsy5(@y(;n_*eCUuuVX8R1Q*G~I!|1i -zi%+BGg75zRvm@^)QHfqH!y6W=Lr-{4uJo>DURYUm@f&->Kjt9+G-x(;@Zixqb#Jei -zYCSt^o3rldu0C{LH2%)Htv!{qF9RD|MKShudV;U!)U8HroUhIKZf@=>xlIyc&978O -ze;R(-bpPUZz0Xa9lj+Bw-<%Eac-DUGBji#pvvb2CFDEM#uF-T>rYNOoXX&z*mX_&n -zzUTjVRuK0m?)k@GK6g*tc$+u-*tcY3`_5mvr5}8KvQEUVH5sT=6c&?yVd9E&1TPVH -za>d9`h2vBeqcMAa-x2FCIA5*Q4TS{x%4W$%*-=0|GNTkqJvT9=BxA>~rRF8ms6FP% -zQ{UFQNP*agWmgOow`Da%zl2q(n-k=-7D8`5NHryAN7e+sjd?7qh%Aq&50?>FYLAw2 -zkg0N+Q+e76mCFuqH47M%X-SXEi3agQ{f9GRA$R)gX+N)nAY7}rm6|kF1AO@dyvm>V -zgm?rzA3Q}GKZ~Uxf5R0~X}e>o9Vb$5Vs)2~%M6fPymv*T{}d=L&bb;l)*~`^?D>Sv -zFCR)Fx+vB0GA3C-Zsv-$rHzEU@oqvpxx)~ohS~!XCiF&=6y}z%7R^Jp4N0GZQ|@<$fA?=PkXA8 -z8y5{m@4h{_)A5_t@}7O_)SpHi`%_MQIm(-O_8M<}vY7a_lUJ-z@lNmg&zTRF9YL;N -znOm7Wn^18a`|0(^%S5!R+UQ -z4M-LM#1G;H4$<6nh+ZYE@PLbEFA;;F&-c)+1R2*5q34fI8;O59?6MFMWA=bsw5hD@ -ztgJ2?43Y<4AodYh_7Oo6o}FL0O@iuIg%#qfX9E>Vhr;HBW;nucWH -z$b~?od!u6|530|=gqhEO7pPh3-zjr`(BkYacxUjqxx1X>q3irJr>Ek@IPMt=f&+qQ -zfwWlb7Ci*`vJVmn!iaWvx@Ab3PYgZ4e#m!8-Ie;xN#AN&m*4C^@`o*>ZEBlIyU -z+cI&U>rn1l8H25-pVZuJIn;m!@c>Wo|FudPhKC>DM!a~_+T}5|^7Eh0jDWeAdkU>G -z!S{wV?x;$9Nn1dgyOwy^W+IxNAyvP>jzAE9Xpw53AW50os=ings5R -z2Jsr5mUG+w@MjB$3>85zK&Sk`T@5xJfKzTshhN%Q1up6iF2Wdd=?Fr`krEE5nu}MB -zdPaokuKgD%s;ldZO-*Iy>!|C1YFWXBty&!WBoW{wC$`k&_&TeNIDoqBsvci94z4ARgX!{e -z4(Znw%OT#E#uN~HkB=BA@A2-GZ#!xwQfNY(^+hz$dY-&0Kg)YQ)W8b*?^RSle85Ku -z0w3k_?W4Gs^o&*)5!a0X!x9`+=vpH#Cj5>}9;H35?#Br8on89V1A601w7t@Pmtjvr -znMCKMdXdrtf|d7PzL6~WjnXS|t4x%Kn?vj>pgq7R0LB1S-&|K&SrEd9kDmfz_}7*M -zdc9J(a{3x}suWLV&=QUu@f18J{EmAih~LJ61ELym06+Tx#Z3qJ;=&xS=`Y(27<4OE -z;#soPRY&|Q!%_GLW3Gb^s~epd&fnAkKA0cG(v$OdJ)Jo8byX?nOsEV)xoK@%u=m+q -zZ~L^K(`$cow24d-jQ`hE8>Uu{s@US)}HAO2W?jL?LPcy*y4bAIk$}Ub8d&4NS-NUdq;= -z&zDu&{3_h$u@SvdGW1(bP_xhOA35%;bMpaSy`DFlveK(s^KSiy9n#}`+O$AI-<9RL -z=|CJ?xaD10&PT;0bb~77RG1|?eO>bC2PpzmUAK`s?`c&Gqhx)4Ip$QPJXDYVkojEL -zHugI1nJU(c$u;Slw-YrLx|=2WD}Egv;E~<#B=@gTXaO?Y!rv4MRJql{*bw@pG-({6_=c -zJ=fm!GVgQ8JBZe*J`(&Y>6};d@W{)sR7EXsQFRnr@ -zo9p6nZGLyUr3Jhjk}thS;LH3Pu>2*ZHCqb!(&%|g(OVtbP92v<(u(vIQMV@8JQw&{ -z9%&Cl<(h9Qgzt@EwlZOSf4`q)P38~!-5&tJQd%5fYL(Ev&Qqqz0h -zDt)-E-YL^}2XQTVM(7sfaXY7Zv3{G6t#<6DgTw9u8I@m-Y85EB3MlQR_#=u; -zOEP&?2|?dLByhMV7WhO_5Ec+;K42`n3;2_v&LSOA32UTuialyM8NW)LFCChCv)wdX -zHH^MMv47R%*Dh3NA1Gigb8&Nr-#_&7MCOGzxj${sW;?%4^`S^-y!kW#PPe<_s>plt -zl|;MLN3ns5wptm!c8Q*_m|%jRKf}1ZCa|i$)T+6X(3S`(4>uI!5VkyELc$<<0MG#d -z(0CjEap-Sb9XtGX{#4`+&tNz|bmsuteGlC;b7)TwK1i#?*dbX(&fdBa?WKHEwc=;D -znOl>81N!4$15(6aG&<#3e@l(aCW-sSjMaJGcTf2hZL(D~smal%xxVTIGyf`0$4Yxw -zw?=$ZZB=`KNMx|B1P3BTK&*lwMF0_%9eMB{Vh~i%(p}k-54C>-gV@oF6nG1Nu%39u8I~W)44lbuLLiYbe8V -zgF6$6qoqpdNXx{Ci%26)%T?7CrHirII_^eX_73$%T>(|yUMh|psBi!(6kBmcz-vNX -z$oA=YC)&3dDf|LGdW!%t#;;)~Jzg)2gih;72p!s@P~<_eR`eD0YlT+moy5L$?Ru{m -zy^s1b#a=U?!azx}ClBUsB%OTte%?gikl7z|^WAmupD?H+oM?s7q-w)`7+er*xH&z{ -z#HuzVTOAA*w5n_qgmj=I!+!w9iWagUkaYp@*sHd+1$0J=V2rrIcr;AetFZ`qiPWc- -zDOF;{e{AzCycBHv(I#nBa;Z%GJq@~ix&4}kiI+nYVcm8{eD~(khWZ8Z&HZdpUjnL= -znEY2|UnmKM5w*DVbezZ#R|mIZZL;e=k2pcHPfmmqIy<&C5yAsbf*`;@K-vq)Nrr9U -z4)EQDwj15_y_WM}G=!HP$|J8dN>4*E?a6DQ_?4dNV@~8q^b_4>`oR1>tfG}w&974E -zW~l1b6Bpw2f*@L-nqHraL>RLmJ?#j@RsS@73a4s>y6mPS=HqLs??cfELB@;2!s29- -zAoYn51froS0m8@A4*uJ~Q9!n=2*43!D{dcP;Kf7uz2TGRnsxwlN|qI68+cBTP$*#F -zC$u~I<-4jp=NufzFw^#!>s7*C123VG{NDd~T*Cc`ld^$iNxvLF50vGi!2KJTrMK7D -zui1FQOmeJf@W5narJ!=ZXhu#=l}AHalS?DMIUuXEEWNhMA%H_j@<4L>&FQF{>kdQn -z{kz6hmjfg5XF@|lQ9MI{(|w>eok!NZY=@fN9;DWZ@i7%F?W$0_UxO~zJyq$>AOF|s -z)V*`OUnDMP>a_Zb)n1$O&k4}wYL?sH;a9SS$T(_JJ=Beh;QmGgxVv8s%%<9*sovX2 -zy14<@7L?K+Xy?y?3JchhDBJOh0aOzJssmMo+e#8=Qc$ak9+ofp84ipv)M2{3(2DBq -zc2dpFj|4$P2Qwxe)F~%&Sl8ZVtWT}j`r5a*Nwf2EbRcm8iAmfvgfV|zH`4>>bFIv~ -z`54G$BNd93Ty$k*;pSp8NV6&z4JDZ}H@q><7w>J_jdybPtQ`#S@cb{x&}38b -zy<*6=((~!f=fbrB*^nN8KW<9!^KCofLsMa2thE=8{h3Rp(G_wP)Z!A=xGYU<)9=Op5`a{+d-&m3V>d~oR;NGC=PQQ6Ba-f(YU#a?#Q#pN?fei{kai%IZk-$)lAmoqfWDN1(l5nCe<1L1J+AXJ#lw&t -zODmIKV$7H4RK*p#p&D6_o=Ts6{CrXBLF$Eu%zzEs+MUqf^IY&A&)qGPXoZAgW4K?D -z-acX)WFMEA1w=k?Uo_ybS#CL&EwQizg3aI};o(tZ1Y%-{InmKIGw#d*Qx-^+q}j5i -zvtVXe-rERHE~$@|ZdF)Lmco)+d_)GV(L((*-f)1RNRy;N*qRBsh7q@7B>?A;tqXXAQ($m>MvPuHyx3froEkG%!2-{+0c -zhci_~w#g+DUK&|X65Sydy1AY-9NxRMfK*{#<(Og4#g@Xnh$9#YLgUErXN=+w+&!bk6FDoko)IN4k>S^0r(p>PscSE -zGL!m)Ipin_LIc1h06F%vfKOpd@0#4`!1*xh6cPAbE0qN$!Ram_-+VkQejiaozeLeX -z%x@CYvD21f40G#>o1%J!8p9mL`NtU%wXfz6>|rElUgYk%_9*=B2j51GB>0_zne1PZ -z4~Rq+<NLzz7muo0NPOGI?g8)}dFmE09HXifvG;;MF -zjSUTmsO~)$pXyn7DuvcrDfk0yNkH0S0PK3U`d7~-pKM)CK`qnrUnmGpq85U3_t3BL -zYN}sGYNEvN#TN?Tb-Auwu|JG%Hi&GLI~P-QHP)tSJx)b`ZTA(wq~DW@#VWGvjU#&C -zr{S5~Yroz%{=5iJEr7_$+hrwF$=)!1VweI#$IJUbWDpi^s9LZp5(>TFtfj&GvY`Bu7d$A0|bp`qm+BN5h+?iN>@SNxPG?zMugCTYnUEQ%99Arb9HE`!+S?#{ST3sR^la(=%{#gx@t% -zT#oysk+R*!EF~aGwz*V#VQh&+VIHkACXcJMDzC9DnNb#-RLB8F49HEsSy?j+%+MKB -z>d6`UO3J=iL`>YY&@OrwHP;I&UBhlhy}fu)`f?-vDbMmwr1ty721hqrMwRAB&B)fW -zz8kZl2*3EsL*udjg@rM);G^q)p}R+eYw)}!!e#yv*`bCo7k?dnnlQu;3o{SQ3z4dY -z2Wq&$ZChH~@Nk80LERe3{vNI25#*rw_=s{Qb0Y81!~mt611alOQ38nrV(VrhJymjV -z<97nBPds>iPmD5pm2%n}KfBwv^z4o?oYaWFR%?yUhm!8C9UQyUn3=7w2c24Rj>jfN~nidZ{ic>prvTy&v9}vrdl!2-n -z1TAADe%^NBWY!r_)atL@LCTX{<)=MRvqPw;_i9a#NRw(1Y*wm(A^lFB-}U#&&ge^+ -zaYVmz1NP&Yo+Nnb`#5ke$>BpAL|x+`mj2!@^Yv&@DMD@ELGB8*SSDQ&6JK0 -z2lGV>8U_TVWrBGd1hE?Ct&OFfF>(8u-~pl3F{vNG$phe6+zn890pj$Cxfm#0!bF6u -zi(g8XvbOJtLh+1;^D}Z2W=k*9so{}ligSBb)J3ir`!K|=$~78hFkTCLPC=#pX^{%| -zefS@x@Fc#C^-&KzIe_2}JTsaaa&W2#PI1@G4EtQTi%{|%wID> -zuhzczi;~^i+{=p&{1?x!^75(Ai!EX8_b4xlQ?WS%9TAfqRw~=aNp?(^S>nA99)`#a -zaG|uH5TgWFQ7H@L$ThW@jnerAE$HeR4lqJMcBR5Lwkkk6m8X1TE}pa~Ny(0g1rp_^ -z1OtA^F2D7i2Xvw5DmxFSHZJT0f}N;ElrU|X`t#5A>irr-9T?Z^4`)Iuxa9=uDo(Xd -z+txYDm`F1)5t|3a0&5p-d6*xCC9r}A42#5-F>>;yXcMGawN$MOxk04KqE)oLrBkrG -zw@r(yxu0q>JTmGsAzs+e0TB2Wq{fa8?QHek+7mwaSGx|tyYNa;oze#n7m3 -zk@>C0ps^V|R4r=121N+0CvOF_h^-biR`hia6)u!kvW7RK?G>ClySiQ775l~GN=68S -z`4b|^(=!C0xkHEjj*ZryKyskn3slq^Y;k@=>nEXS|DSE(r3G}UwGMhz#Ab)OXFK)VM>`Zd{pTh5kkc1_ycUk@-yK~j-2num6VH%fIM -z>68R)>Bh&PpJ>(eqWE7TjxC%a3MSXsAq74&hW+Mu=HgBzA+M9OL=_y?)#G#OOsFCF -z&-IFNKczfuBx$%6_<3+yBjLuTX0hUa&U9BL2$(M%O_B;#(y8NZM9X`$3DtqSx)u6_ -z`v=7f#xWe|_5ysiCP)Wx+%o{Wp?QN>8=tjT71Ja9S&j?EcO-LzXuD`Gri|a~%SWi; -z85fR+oEFqJh?yp;L3D5XJ9dyosYC;RoXc9vT@5Gxh(q5i?|kyi-FHB9^76ai{{nhO -zbVhNBv|K(K6Ppdem;@u3r%!RTOJfX -zG+&+=qf}c}0Z~&os`<&KR~>>lJmdQ29y~coYYa>tEwk;=u0NiV`^`#F8Gg<=>_W09Lrh99=V{C4Hus?mB;;OJp;I6{6A-x790Dw6Xk9(mXGH3p=y8U30BL&4 -z2zfkhYG5XFGYf`5WZ&4jaQAuw$A$I)Z5MTrKA@-*EHe`JyS2f3Lt;W=Jy?wcYByU^ -z{40)iDW*5MN^6KO#0!sM4#vF3D#D_!Idlf#W?t!^zxJzNu-2rA=zqBoTTyG#=l5ge -zQqd~LuoMF|yrqeI5?8$%(i&1*=V*=ePj2l5gEJw0{Ro5zUms8608>~TF&zitn-Jo{ -zYWB@VPZg_J$`9~Os$!ZnG?R!+NICfai-L{GSJQ8#-D1@D8)R}^hmU<7KtIrXz;)EP -z(YH48F1O=qgp|7=w$qZC#T?550!zmwvty)q-ra# -zTXguI6&i&Rj_9`XnlrBfmvf*@<2LUbZST}O+=LFF$$8aGnmAZ+NO-dFYYDTAv#*Hw -z$IJF$6&PII -z)LMaP(rYT|RMyGurh^HtA?CUz5MMVJdY=siHp74f`-GGpGx1eu3s@k>D?nNYjFw?5 -zGH$DDq=j^f=)qID%IDOyu8AG`}FMH_w$@jO97acLZczX -z>EXp-Bc5WPN*$OHq}-Th1o5{}gSb_xMY$kh4#8e(LvSB?*Z$#2f4kY>4n42rqpE?& -zk2Xf7Of9DE=Ojoaf##kRkjsFe08hi>kY52DazGh7je%EmP>ffJZKY>JwzTm$^$E3> -z@xg%%GNbQ>u=-V=%}(gJf^i>o?0VhSKRgZR!!cs<%yq;>G`&YVOvK*8)Bz0k5GhnK -zh5MHBRoKGp{aDXmfK7|LV0&4YNh`jL5~R-IGSYxN(Lf&Y51AZKsQM}J1^QBQS92TU -z86LF)F9E3AOE0@u7PeZco9RUYUJb(VXlvu#(^syvS9#!i|KZx4Sx?#m>q*n_8D9)< -zOHvzo^djH`PdLF00ajHvhT&Yz4D78;T_9D}&f3Bab)UC<`$3 -z!a(8xg64fAlOMClkL=NeZb;2YfcRN{cb}Kdja#`S1vt_Kcp#lf3=<@zknEsV8&m@hf!MY-`jwOg -zH*-jc)#ycGv;aJv{|{;8cQsL895o(u2D3MnL=Y3HEXsob>*r!2xw+Cj8p`UWd}&_p56rL`;FRI|5G!rCdtZO#Q2mIl2UBZwYGO=!I`mNU^lWs?v8h1L>J|&w8VU%% -zAZQz#Va~qOog&h=#SPYGG0g33hB-d#8^i2k#A2BLWHHRQ#NQ*0mt7xSv}tc2XUulR -z9lyU%}EzthLP`iU&s`)?1K!PP$~pn4({R10{~#Tez-LLo&hH$4?;h@&-0sFL6T -zYe%!V=XkP?ZX(k-cXR{dchc`Prcm$e?BH3k{U$LdB}lWikfJeyTBom`W!d4@b18wOyQ6uv3p%opHOX -zvW{oOn2P`8SQIn?8?`^)^#`DP0H7=n&SQHpkj##sYhX&lmkxMh_)7u)H_tE0fFJpC -zdBm;Ym}I$?9FMcI%d9esiebdB$z{3(8%Wtz-9Jz@8Dw4!B``D6FhHGVkTdhcyFNCMQ<-m^?$7-~&JQl!0U||WrxO69i -z<*_YFb(e@uP-X5VW4tygLf`P-iD0GrI&lWmOZi&8hN9y0Yl^{!y#UR3`Fn>9@YtBO -zp$>s$Q`ZYTQGU~onn6`9U+a-bW58V{EU3nD0L3X%=?|&(gIEXFgIgFa4fX#vKV?CD -z5MiK513`O%h$ubZ7gzCNx*NlL6BpbcJ~^m@c(pB6x=lVTKVh4DO-*7cQ<6WGvEyQ- -zZQo#h^U6zm&33OBslR!Nc6z_LS*H+$i+JdNfZg=@W>ES00z8;ItRRj6I~|aR95|rK -zqpgON1M?X{?A4Xz>bzlub~`u;?gX*bgGUVxN2oMU_>AjL`VP&_PJ15Hlsi5(sC_!# -z-H1b%tez&C?XfHhS_R>7us#!rkDG6*x1mw`sAK5t6zovsLA7J42aoz^H2jp6 -z#+eIC0u7PB12K?#aNXKInv!rR6f`)YXESuorp*`EC(r`K*lfIODdfz6@ -zIjN)M?u9Y%=^|s*NbMNGxd4Rk7w*zE22;gZVET5G(cjO^_Z(kEAzcArE#(tRP1G)s -ztF??Fb$aq98gMHuNWB3p)*T6R3GmYz>Le?9_78h?IL!uV82P0g)!cXdC^I&FYB4jF -zGvSp44E3Kt?C?q$KwYZSwpd*QbeC-MJ4f7I7P?Y6S33wxBk08{JG>j(=|)|i?vfI+DTtY6#@opq6^e4;Ql}$c7Qo~1efv> -z>{|kmrRAOGts;H -zppnO0edYhesGoQANZ;gHM`-)eY@4sgD-QnaM1Q9Uczoj0OJ)|##=w+_ -z0K03O!BogZOXa=A*htii1?=>(vCv?ym-TTgpOkz(4f5`qIM^MY&4Vo_tVFA -zDbsGme(v5nblSN1g0_mDxuLO_tuh=*1RUMhwvvd1lmxm8HG`u%x}3XOBC2a6yE)st -z;vh0Wx3S{#91B)6ko*3Ay#rU!LE*jqB64^~Vssa=nlANo_TGiZ9mg+iWXSW-q#kUL -zwB@uGB(8m(v{u|0e`;(Nhr2iY`PIDP*pnCHF24$#cvJ2x)q3&vlgBwy7B`>T=BE$~ -zi%Y)ezKMKbFi-I}?@y`6LF(%xc=R=qN?^W3h!fOepGLr>(=?YAY%a&lCIeyy^QWKs -zX>4i#B3IJcGjZ!V3tXo!j_F@HN!!Qa{9=GbDge$8hW^C5#uO`s-|EAqQt&+_4A0_j -z)JWU#t8Fw?GOtV(4ZFL9y|rFZ%G?vRsd@CP&#Cc+nbaIQG9|m9v^=zgo>F67DoUtqvTkhy2$G)OK4$;G -z;E;?SxMx(a6QQrB$4j5Fz|W2qsuDve#Ex)?kJG+VBE@K>$qTmLW*N}q6ne$zS|=p9 -zKJ4bLJ3VT6Cb^5_P9gv^q0F|J!>l`Op&DMN_m7=8GT1J$imLpC -zL)V<47Nzmzsx#@@ZZh@j^ziLPaSyi!6i&hPP!Gw|@jcBVZ2M~d+d;*r`yc)sa^ZPX -zu2f-8>+Sp;E*R9wk19$mEfcM*0?Lwx#-?U~tZnaT!Zm6k5K47gIy~LfL3{|LpQ;0K -zal&V%jeC2+9H+yrgFL1!h{eZ$Dw_>lX$T`(HO$6FUb@UEZZz7e=eWrKFen7fcKtXg -zbnyRnP>4Nn^3R~q{vQT~O#c5mD5U)V*`QF`|HhzD`v04QLS&Hozk@<@-v@LyEn9P_p=(RQ9WTO1&L^BYA^m`1C}+$NAAln6oa<=k`4~pA6q5p -zUEXm%Qc6OUEJ-u^cw4=K<*>-7dHKj7+Dq+i!TZE#DWmxI7Uoc_u_A~4;{Y(<#%CQj -zNw}4Td1UzPb6~ij3&#KkQ)7zvyx%Dr+#$c;E<0rJH`7(SeSA?0`skgXzCt4|_@e`u -zT;5FV!~c#z-O;!SG;mkKOMeyoVa`+Iy=2@%$6)^CHw$}xYd~Gk{-G^gB(6X|R1rn-5kzR-5b!Hoi{Mt`n1jOsLusre -z83eUAIE3fr35Y{Q$ -zGb=a>v$dG`RdrKIuxu*By_$oAQ2gg$b3o6#?en|T%L09~?zB*2iUFd>s%<&_gl#3V -zC)P>sxj>ub8W9whi|kJs@_^M}8c;g1>s~t)2@HsEP7})m4YzNSum;lkwZ7~wdB)iq -zgY+jx^(CY_Pt0J4)gVMMVI?xbqxF2v{iR{TU^eI^)K-Oy;$ -zfmFQk8J#vez@{@1k91H-74&ONEt0e_DSz|V=+N0p4C;MXnQf?CeHW&a#@+uF%c&RE -z1OpoA3h=PXK7jExctxl>zI>EL+%Uu{kR+aAp#PLZ>F3*fN#)vjGfYqUj_JrvB}M%^ -zLD2efkA&lX>Q?EGS1K~S-zlI#)SNKJqSXn;S;)R!u6>OGFxfxaEXr^uX3B*{-T{FO -zYH5jJg>O|&Ss|se&ZM~tDHhN!g0JEblQck$NC4)?E<=I*b$QpU^lK2Cu4%&y)KF@; -zNcm&-K=Ru4FlS=QS@U@#m@eI2C87|i410DZ=gB5(3`vkDLFN8?qbp~5PTbOcmS&Pi -z1us1}&@-)t^j=C{zTlvq5BJkFr3Gjjn+KN5+m_*LJQ!B)jox^f+N#vnF3#*l5{UHQ -z22mKSNS^^TscUsgm#Z6rHcx1b!V%2!OMa;1VQo;6Ma$PJkcKSx#E)$PD8U6bqOPyPZ?X1_sPj1hZ!c>Vjy- -zw(7IpsJ)j`F6xh%;M=g*@4g5#hRpbh^A|uBuRYSY@4qlMnA;qO3xfa3C*yZEMAxX} -zKR&mkDoO3tCS?W-W+L*p-WfS)M_?VepgwR%Su?Cr837&x)b7=;aQlknCSDtITS9?g -z6WEy?Gaxh+kXFcUH-WyfT$1b&6xIv^yYZTVy|)qjp8%X=AEh9?wVfW?X4#TN1InkJ -z)sLA{FnH*Dp-;vZr8`IUWV9@9)^6wfz*gvWaYrchyK%lhH>2hsJAADoo19K4MJv5^ -ze`O%H6gSsaKyXY_GUPJGdm*rP5Py$=Xq`$sKmUZhhH$^YJi+!@ShrAbk_d#Saj2)l -z=Lg}50UdYN=)pJPsT5zx+v9}7JbKpcF~*Y++uwZ-S%NJSe~tKMTM8;#Irvx#34>!D -z4xOrK3E$AhTe|y<53HWZ94ranyddti_xwR?WlU!yBl|9vSaM&V*5D$7TXzUfkLJoH -z8o4UdgrcHjfuuh|Bq}zytWgw}8!y*x($gyiA@qy24U5(_jERhL_F=^VpHyHgmo;2A -zF$GxNS8ZFR^e4bPUJ7d4uYpw%Z|+C_e|6Uc5nz%445)eV!P|N_PPhp -zMH5-u7u8)rQ8!*6f#Mkjh$De%_2VN;|;fB&sQ7?M2&Y`o^iVvwOzwa0!q1f2{{isJYHNGP6WCVW~6!{ -zQ(dQKWUHTlvni&%*R;E%CB0`@yr7Z;oCu&{WgzZ=pfxNhp7M#gXaY2UctT!^v*rh* -zPV>nPULuaJOu&~+@pwye^rL#1#ZH}{E}7pcN~Ip-Ff*-|vUye4)8`!@yZQ5}X5{qy -zY_H6~pWnu!-em@(7 -zkAy7MzxoOz_-|!Pq4ru0$8PKM47rpVR6OMwy%T@))o8_9t5!zkD$jYY%)39g_&t9a -zeBbjG;YePrMV3)q3ROf0X73hYC>I|BAwapHFl#6TqhV2oq_?!$Sa$N&_U?0lHCbA9 -z^2T^oO$T*?6DiZ>U1^ML;U56+1!T&aEZYKP%Is4=RiHoi8?1Xw5*EfSZn?fFAFCZ3?cUB&+M@s4+vH -z&544C)$D?RVAOX_^QOZuxyup<%j!S*oqsxfy$e{%KpHqLqQU -zP#<%5>+y|9t=ZPEhA^?{2%4@QPS-meU2a|;0l_F5*2NQHE#mneu9i{|ILTGZ+}BS; -ztPE~wJ*4YCrVZD(Fk#5ej7Zv*8$gofPaG6?HOQT}u{$a4D|8^++3cd)=2pY#R{C_M -z>W$Q~rESsmP>x#(0aTnan?5`Q+=|5yZM@N0#imERL<2ry```FP^>?38cN$(-jHKCm -z5A$|z-JTD=X7HWsa18b&Uik&Y5PE;((Ds%Lk&lQ}$Eu+ZM61AYBqXJ@%u=jKn9r0a -z*v*Ak2T>Ali_XuA)5XB5GWn7qs?_jUbc6b2T#hU~smh+HHhqMv4ZRQ{Chat9NpHhx&B|U$2t746wK*+z5KlVD4o3FKz-(~uK -z>b*+$0x3ulRn$ecSTL^Q0M!F7=uD{0b9aU!A(rLYc&@f`kw&JbGI&sMm{F{)LYL(& -zkX6;oDa*qc*Fp7*JK#_gSZ5|y&qjA84^rz?SANmNdGLy^*LC+BeVgvFH%BWTZl4?E -zP|jYUR8R&Ueh~CLaH$Da%shFq?^$)Aau;Tde4Bt?Rf(8TT?DAo_dye-^d%A+%KcNo -zX6U(J>Kr^!q6)-;9_k0;;V`>9p`U-d&rpQ!Z%-pn+-#k_ODfqnnQ`*z;Je>dAmqY4 -zT@$*Hk#@Qffevvp)hVs8hB*~dJzIiGsRZv*!5-&WW_rLNR8>W705&9zMIiJQre_r~ -zx;&H8JzDdkO4`{+PWQ}=FN1a4n;Q&`&M%jbyEwNRHQq^-hP4 -z-yxL+LJY`O$jn@F%dFyMRdN0`3{>rHc$ief?{I?SkrsQLWuO8CF-Kz5Pk_fJ5 -z+WJOT2H?_t)?Plm0iI+7oVGO*)<}fp_~!<75du<}ZJ~o9!*PjBt&vG4Y-Z4CA_JL* -z{#Oy2SYRmY8&Y7d_rI*fynz0_5+eY#GZobb#`xj}1~MGyomKn>1$vG>v3Z^?=%so_ -zFDVKJ)157slxR%>(nhMD@*G}=Xmxh%{h)8=EYXu#E+tmkW -zn<`PVrQG%rx&u3D{b7dKe{reHg9L#5n3WwT0=QNd@O#f3$^s^{B7WhfYSXw#$x0>T -zbgNW_(DgC=AB3B@XKC|1viFn1h(MKtgDL&n6xkfTzLMg@-E{>lp6io3wb_w5Hn{I7 -z-Tm{#L`u9JGR!>AE()S7VL;2Mka6+gK)_mEU@^=fXfj(eU(jjLRaWg0>cS^ic8OR8 -z6@|XqUbN2NctCl6LOL;wCrl7=IXWjG1g3*al0zgQ~}kuC)m1Yted=&-VMEn5s0$*cbg -za5R}=7beTma-UPswCL)F_rNAj7tUUm-MXN9$!}lK23^%B4?oVxB{#vgFR6;_?>(b& -zQ%#|bI|zPz!D?jW&F4YYnY`Tw;j6ib_itU*aaxH*l7`L{Yi%D$0N$S>PmlB@yF&J9 -zwN{4^jQ6+KMKOC|gR%XZqd^)I&VB7E~QR`Lks67fbr?b#xJ -zF9j8%4EyF~@Zke*w%caA#+y82h=V!K&}}F;YiQu^h-EqvAy*IX{HG%zO+Ae7CMz_B -z7`~!WqMt%sJwTTSNg7(po|5Xhz?%?kF9WNP6qE5O*9xY>?V3XfCb&?7v^z!2Ixwg= -zXC&N^!eQuGK!T!dSIY#z0pTB*8+h0Wq_sIzGV0qBT6f2JB>81C)MsV@*oU#YLaRZ8 -z6@PZ&cWSz@)8rF%^)`Erv?_B(ok -zc_l0p9OJUVl9okrg7wZVoYe{zDD_0yKF5MGA#`guw~7GN=&XRPq*>->%oQrwFAROV -zeGwY`kV&0>{`-znNtjE2K!7QB^xG{mBTxC~wM*v#B -zxElFuo0J*ENX}9bXDvo&SeXgYa-HIYYa@8-Lb6*$evpa~P@1qjk6jLP-HMZ>p>7Xj -zyFXKl{1k_+7HDyZciU2S>b~>gCrd8Z(DHV8PB8ax%43=vmKHH7N~Ip-XLy5ik8dXY -zBHoj_V=DB8aq~hl@QQPpn})vJ4!&U#Ka) -zt-PZVf#`1R?ts)V+jTjBv3LwAwmY@~GJ3_ow0q#-^S;O2mS2lSeUK&YyyyVLn{6p; -zz6)D`Q!X#!wqx^=bQfQJk9-YT=F28vXLS3p@o~tJ>*Kzbw^F4a&$YkuHd%hI@<-4k -zb?q`eMOOVJ9<8b+AH<`tv0s}n-JYQ7tyoTi+1LBI`=|RF;dA$Q!6JJh%z@k?r;*Na -z=%BCqM3CCS>E4R|W5OA|9AKq^stLoEVkZDL-bLlsMxr07h!GI&I4Cz6k(0V(j4nZi -z?Z<5bv2bEb`4~Zp9|=kINfS`B?Fgmh_l$eO6CGjDpJW3g=Qkdu7{iUkz -z$*P+D@2C17W(5`qYba2~!9SaBg)|J!Eb3gYnmoC$|Qt78v%Zi -zUeiWzzpt60`nE7TV%K)5AX)rrMo2`0PnLaP8Mtl^^N=i4{O(jC96V~ -ztWL>4{FY!piDZon1gvY66&Z8Y3nqy{f8M?a4N5vBxhJ2r^WLKi-E_f8PN(8ofX~&U -zW)0?e@Fm1|SsmD*T!U<;bvuknmFT~i|4jgj00--;U{sJKh)JlOvZ@2Jf>vcu5^9J} -z6K+eW=V?qR>f>y1$^g%YEZaH0Ef@e?Q6!5i8lXgTkz|v2AnaKmU=BzO?gIfvfUZ+;izP#}2RDR|= -z9BX1g9~&d4jFm0cDilo8hVWIYVQwbTkn*F)8F9H)R2> -zp;)wVzPjHmjkT_pAd5|(D*io3QBbHi@qz4DWw}8uuF0m0|knT -z8HAj$Oo^-UFTYOJ9J}&MMjo;D(A@*FSWVsiI28jWUFk4G`nN!;Qq>!I;S~}WG|3Xsk1pJAj$x2 -zH~!VBDQ(zN_292SpeeI`ncCvWZ+((?>F3j;_IKfMYLVybAlh}Xf@DQ9bs(OYh{UZ@JYbFA?+A=Gh@^U}<%nQX!#Sr3 -z_X3N}s_en~1U6TWf3x@K&kycDqtKW^q~2g;u%7ofsWTbdqEZ1{CFJ|Ct{MX -zr*2j-hQo>X0wZSM3bAT7!wvvAtFsEo!j>I$U)EUW@-yamLGRyQ-Bv?FsLN`<(JV_b -zC}q(-M-bN>x)lVyRdrrf9hqNf<5>{uJNM$#KXcIU_@y3ZpA|aLNpg(JN|KRNhlwT? -zk+9(jVY1c9I$5d*7w5KqP_<}sLEc91%~zz -zs%Eu!!~98DV9F^)QNsV!Lwxx@P@;WXjQ)N{#uK~`ZY+w%fV`b$Nz7*nR2 -z%2q|Ui}Y5!?;v;D+LM=pZ&9uX6&V}sod;GTDwPs)!S&}gwPS3u>(yfjz`kEj -zqn2$*S&qM^U2TpN%w_CAr{_#T3(~)+B`#vVC3&HrAy~=zXD|>z$4c|>G@3vKJYu8! -z&waQWVdbu9RNX?91gw5KF_8%*s!;Xo#3GPwG8(pe26@iwSBhiQ8|Y)j)~g+FL1&`^ -z34yNySf2aHpC{u+ptQklvyYSRP9GS}u3D@Pa&+)Qra8C*i -zAUFmmC6!y`wFD0Ahp6Vam<|e0>gVhH2y-vsxU8HE7+?9HaNOkE$Dw0f_J+dURnyca -zLKlzM<_n^qBIcO?e{tM=a%l)OV?8#gc3ny%#Z1`(Y2=Y)uj)jy+PB}s!G)ZiT;}2f -zEF-J=VL$a^in>3C0!834d&B -zJ$b!hwJv2~%9UV8w4^1vISPyI_w}?+7p_kS<{=vzU7CTdduI-xMz9$p7IO)V-2z>+ -z|JJ7uee>yw|5Kk9CLXtO75+nT_T1m|NAvkL;`uL|+wLJNq;KMs4dKFtaXP9RmIo3G -z=t!(wbqR5QO?F9YYg%VVE~iHzFf1mH73#X#W48dF_@|V%97`3quoLb>I}#(R;j|R# -zwaJHT+a}XjlS=-$L7n=6s(81cJ*@hxG3J8HUfh3+0J)D73Aof&kWB| -zn!BF1|1MofxcN25JD~_2Z^<}dpI25|RzobTg@CKexQI#&4OlB2N&@FYxNOLSa78dP -zaiANn$|wSIUol}Fy}jegJ9EBEJGV(58eWZ$5?O9L!%ylmC1Ni -z--~0wCOMCmsm}y!liWJ%5wHQ-aT%jf;v+P;*C9DG$ZDNZl#WWeu_tpbGIwd`lAnpT -z@1d7u|DS70pFJ23emnj4YkEwfL?ShrjxOFuD~mAP=T5w3}Gt@Z|Hkda}oHd^@n#`PcKfyJ3q)<;h7#7^U#Q9>f{(^@R+nZ+r -zc@F`9P|&5AXIrU8Xq!rDs7v^jJ479Cb+@P|lz%Rf54N^L+$0nM8(bu`dbGpcxnVux -zz$7!NJaJDKT#0$%H`rOS`Rnr1Zm!_urpjyeW947j;0UPy)6;M^eX~t|7x^ -zT*0s-npoNRG(af-2W4*=)^^slj}mD}fTj>EK!55#tvbFOpFHD5X(ny$U~Z|%M0zVBt?Y*}5r-vw<9 -zYwgYKw+KVDl*jjnCO4$%&m54O9V|S-f9mv%EZ=!%gfe8Y45@M+10t%GtC*AARR?~M -zl@d77E*obL3P1_cUBo~Y7YadO<+D(Pdh;E_KHjiX1GytJF^^8xMJ=Zf`B7GR?Iz_K -zNsGe&5Y9WtQ}#B`zxuOABDU;E#HgeoviGCF3lr#U`e6F$Zlfo~P{nwU0|rRx{iT39 -zR1s8)q1Oi1CzMoDMce8OYFJG{5dN-sG=%TFrUmeH@F0nRn1{`%&0DhyhuG8>=1|Um8~1S5EnApJQW-yBsGs^9>+Sd3N%`e{syin{WKDm77RN?T=? -zJhwS}I2kh*m;+w$XXSOIw>2w58y9LM!l%a#1VD -zSg#5&dCMvTnuCZBUMtOY7Agkr&RsP=xYP)jIHrE!{DJle)@i4=3W#C}h`x-!QIKR_ -zm4_k1&byFeUmpwwDQmEBo1tfyM322%f4A?D`bdxV@Q85E#1Y{cZW#6+5E0_Q(ei+V -z-##1NPI?LpCL`218qe$jHCw@}ZzfQm$ju``fsK`%nyq>0Cmvk^H3y;Fuc_Sw -zxRHK^xoE_7*mP4rWPZ{09)+KPnH3Fqob;z)bUjUZdNC(e-dA@Y)YZzz4?@cKHVzCA -z5fO8C^Hb8c@@@%XTGTb{ZxrvB%pa2aVf!Ti0cYs1wWTA4NVWUME|fIU7M1OS6%p&L -zl2MhrXlLA2fL)ES^-M6dX -zWNgZFBgfgKx9GP*j6UOKp0W>FHBuUE(wpcNXEIazRf8m{V(O9Nkg=du2RZb4#vIb7 -zea$Dz<*2FTx=QM`v3mriDZ5$y4;wU_F7txqkR5;dsXV&Zk0ED@k?R?Uw!u!3oAe#v5aK`Ju -z({27q8*8gM=o`GvmG&C2r`1#^9oJb`bwNRUf!h;=_-|WhgN~3awI)~%Ru<=?9mn;O -zPn$tqcOfDC$czGPkrxz|SIQJFat&e?eu6eMO4W(Bwn>DFrge2o&;f$-2aji4rUcG_ -z2hIe@8^HN-oG)!*xcTo_#Q~NsRw(P4TX+{6CXwRXCW%JJ*~|m47F->BC`24wyisaT -z^SY_*Wy6DlLWH!UZWjq?-7`$I?{JKL6F{i?>H6(Zc}n*BM~UKev0|z?ogZ0P%EZt^ -zGho#{u%>#^#+p)Edk2-&oHy9tqo_7o -z@q=w_1UXw%lFHdV{aDk|SA7v!RvjVm1xi6E97sv15A1qOx~TQl#Wdhb<1e2O@S9F` -z3jzrB`D^uhNCyp=M{eIuD8JxQMal9=%y^;*;bdE-_yLiF9zAE;A2uhe&3MIRiMfUp -zNEeC3^Cp(y5M}1sXw!xk?c~-Dk-GZMmb%_vS?+L&4aVPw4Fd5;fYkGCbJjKsjmZhr -z7JNoQ+T#T_5XMWAa2D!drt%|$ -zcRgngTmS4iMNS;`F56gLb@>Al8C*aYL!nBG8KoIn6?s)ZUaErN-)GmX0H1_Iv)#wI -z{xF)YwbU=7V(}U@FADm^;Gpo`V}H9jFq*6(9m!})vBRYJB={9`q?0O76ax -zI8i0^=&(-H3f?bvm(1hW3G()_fj#reFR}B5l2!`Tz!FRxQ@Y%|l2H**7RCyr$(y&x -zsRaCR*xOGf54?zd*gq;PIZ*IT*T`*FDq0s!NP3h>4d299-yqVOo%1sNH*#>KH28>>c8Vm@9ptvn2GaL5()mBcA1s;r)5|-bcJI&C6^~0q -zRQ-QP1Nyua43xa~QOzkXyl@p&8o}PgA`YQyW3O#z9Ab^|Y07Bfb*K#SwhnhnO2fF= -za9M`}pAU|M=}ZOICF~}xuSWeHyhUgWjlLYs=MyK1NR7Y6Cwz!!PnqT1a}sJ$ -z`LGRbK~<#}8?RIlVdr1Yj_5koy3(EIOy-WS{c=iWxgFu8$QzRUjBp_O-Fe!#B|CIc -zzB~~ZnZl5l&IN!M1+daTV!k_0YYaz51+32V5+TOgQ9Y(7vW -zDwe6{9r-Z%M73`L&Dt*-k@eIDJB_N#QOSQgaf1-Ie~bN+SaVXLS-y8_f_;K;2_R%Q -zRlpXqn+}`)wTGE|LB;86!+f93moNsxUMN5)1^D=qjB&{b6PH-@AOXDZ+GeLak_L+URm_w+vnf96B#nmQ!q>ePDzV5 -zxP#!@+Z1rluGe01g?y4*YY_!JnB9fsfm?uh7bqT&cxis9!e`Bkmjh8b0!LJCp!`zV -zreNObqmPx?V6^jg>!VFhS8OVyqLnI^ULl=`iZd^6T;xXW -zZvPbf^EKDDJ4NUqjg{WC3c*)fh~eq|n8AxRwoYS_@dAq)wU(2Y;VnG(OyISqU7O`N -zwf6bvp{Qn$cAtLo+vhh3T#m^Pwr=OFIkKR^6Bd3(C1MOvU+SM2UQQt~)It|h1&8|` -zHDRlpozC!?k~giCmJ9}K(Vk#sa{JCPqpib3o@!rmr2bLm{OK!o^@$TEm@N`}|{ -zJ3S6};`tU+-2(AggdDmgvgWz{l*O^*EFr0p>eowrE>;@6{V_wg(HCx&iAaI&JLKaV -zAWj(cjt?hRrm%xz-}z-n@XMv(m%{`u0byj`8^O(FOvx#}2E`7hCuYB?jQ;BlqsyVZ -z0>)6t{MV*+HQLfPJz_Ad4=4@n8GiFE?S*^VAE5q-{UHdMCX}NE|&lG -zo@FVqif}gTT&i5fd~=KMa)s|~$j&!LT(duAK?W29&$Vlz)pXI6XB#-)KT)s*5}cA; -za@ly9br91FN5KDEy@>mz{J99_hfjg)tCzTKq3bG?w+1){7WeIk!^(O4)2;#e;xH1t -zaOnBm19kCBL}B}Q1;UL{_kp%Pr%Tx8A07R>N9utq=6xKN{&xbGug{Df?}J{`cfv -z{i|iVJqXesm$+6&Qz9>c%0$zNB$EeC4wPSGsmw0d2t~mZALU16t_?$dzu_2UaKcMx -z)7z4!A1=!Iv2BvvC(RUc{li_tliBXYkaA={lKB53C -z6+_QhHl#$H7`oSeWv|L3Ay1p9pX`KxJP|e~n|*mCgF4jQ*__Jm*Jz8;Bqk+gT?vc6 -zacDV3z^Z~i{OCdd>?(t@TLnpl&w-u+;X=HI);wC!CXuJQt{R7A(x}(kU~vMbt|ZLd8k)$SW@iQ1LCj8fXIIVSQPT@<@{3B{k6OXQurDua3 -zxz+Qzw{bB3`2A4@Ni_IOHfEbLCmxDy?1ufM;j8iU3z+Aj-?WwB+PRtzyy$|WQYi=B -za=fYmvrN^--*}&XnzNNP6yo1w(`eJ9ZRyOlMQkwJHfn(_ZpDt`R!dzW%El#Oe14?7 -zmw=@#t}&<}Fa-pm{U5@_uZCg&PS&dU%z%6ZNdqN_?N&hP32EAf=m)}kue;j4*N+yYqk-022?|AJ -zGJI(25|tSxc{OzNO7kXvJUIm2!A-f}NkqcI4n+a{i}K;0?{8qc#i{gA>{H5+>IiBP -z1ShmT3Ayoy9!|VeqbVKlXJt&T+gy)UQaj{;^rL6eOOs|NnvXvaHEkV_&cW-fhuj?f -zR#)OX{#aA-$WITx6;O-w_CkLQufJzfI&1c}7yoKS3c;57OfforH0iU3O} -zfmM!)aoR-pIxCLnD4iGhq)XJ%?c^e0u@kcGEOEQh?Hy}c@~UrE0x|6!qQ+<=qgN<( -zqm6loEvK5qgiG!ph~keG(Uz`RPm`b%%BrV4>$6Zl_;pHZNwf3YibjgY;AAjM|OAruO#t% -zR$a^XhHd>ax*X=gi9+%0Nrs=#!!H9JBmvDUQ3h{6$jpZ-rs0rwZPZfTEjQM~Pa9;6 -zj-2JK(4$4k3$gmB&NSa=Z|}*SmAKs|b%j4F{ZT6!Z)$f>F)teyB!#@dO6Ff4C& -zyX*-2^1}Q_n`2sA*KH+-_j6ng`KKhJ~@j?Ol>c&d?dW(eg=hFXH!&hjU*%?Mn -zhFw+ZdR|b-R7shZLt^6Rd`R->dmr=kJP`oT$v)-hUqA* -zr>6Aup;J&O^#?)swvu_7?&gJTkCjaP^UwTMb2!u;0`XckFB_ -zM@+SkQrvaC>+HJjW=m4h`ROGz@sfPa;>>b47Q>ENUyG@1jEm1|X=R0`nd)@+?9aD1 -z)gBVwZzN7WC>O}BX|_`w11`-jLA~8qdLl^0!$#F>v29mkU2aq!ZvTWs603W5QxJaZ -z{j1PixW=w!opfx6J#M^Tt%ZDOz;YwOEyz -z(4*P<7f6Vjndgh81z{gyK`qflypNh2 -zc`D2%_OMJWcAaw8VlJ8T1kDaVo|7+Phnnd -zKsBlHkWyk3vd=|F=umQg&)m;*@5Jsqy1FG6Cq-!QSA{ZcXx^1o8scFQwRKA3<`F(E -z>TMnPE)7IvzhNJ@UF>qxc3Pnas-@+>%h&Exxn^YmfADE{gZAM_CA;7k69)yQl)CQX -z6gOo$YSI^lJhYxJ8`jr2Snc8F9PZSED>y+6>6vl$bO1^8Nhpq`T;3nbo@0Wq+D!_; -zyouj`lJ>00Sg61}bj=PBhR_zjVv!_W#JHEBUl7q>Rk3gVwpAG4y$P`#mYwr)`dGkY -zVnppRGGSfRMh9V&D&dVG5KR%50lr$wHCDCz(MG%h&c5DSt?uD1nOY?O7O7V0QORL; -zhwA%WkDZ!2P+I|fOHx8mneOtj8c)UDwrUN7RCY*&cSL{rETKC60NXWc2zz2`y&oU? -z2pg>nq2Ir1T1AH+Gd|@2cdWVea+s0Zr+g*QsCd^nY*jnY2NMv#i!u0n5f;LqEV5TW -z%~}D%CuO0Eb_;UULfcg|@N1FcgM_QZJG*I+K3K*8rm=ZsY<#F=^bk5He?}tk#|jYp -zX=Jx2>entk6KE#A)m#Nq5-CGU1tJhk)LVfRhpA+giJsi;L&WQJGIiziDsEoRJ)#AP -zsZjj2T;w=>{qaae5FUtcS$A$K8TwtnOx2W~_7RTX@T*rp9T@~0EE|)w$j4eJOPdo) -zBuWd-JgOij+6uK;w+2{KGrDwddnYEOt)scSv9GIMxwnr#G1Pf@jOM^?8coB9?uW}C6i1jqpZjR9MmG{XAmm@Y2&DE{JwH+xX2))MeUheA$v=rgnEyYO?CUaVfWkkkQ -z>2pHCVk#s2bvPLFvJ^vlAIN8Uq)3hKaxeXh4{Pm{_iuuX1;x}lC+2{M_}2K<^T!t| -zPaFl4t0FukvR!KL(&rY=(Rf8NoZD|+iy(_2V`7UWKxcrVRpL=t1wmC*m!eDfMN%7! -zVx(o;S-Hx(X!W-CQgeGl8ANK+kdBJl5%Jl<9-}661m#qztcfP$&#?qN8I_dd)B5C3-TIuaD4*tB(FI}$@ -zz8PvC?;vm^mUUUxWy+ne^33OuMG;Yd&-R{1kry5CmY|Jvmwl}32i5|Ma8wASq$CAe -zT2^c?T2(Ef2|Dz3^}vsSmH}UPw^*Mfj6`cQ*EN){F4f^htH52m^Kw*T{n`{8zt3r)?P>D96g=?y{h -zR}cKBpr}~fn2z;l|armB!uGz_2AnxvP_gz)KRt5WcEM_qGuJhn7) -zveQh@t?1}J^OL6_GZBOQGfhKF+^)5QMkxH={U84lq!Qm8+O;&s>;cG~RC>buwq*8Cr}sbqnRi -zYx!vdi>W#Tx%rjR!$Td6Si=Qmi@hfQ_IMZ6XnbbUq-^D#LB|Q!ibs~ZHka=}uLnBDV$)0ipP9fBN=3~N^oki;Xvmy%9#mBgha|duW -z#HsuMQ;%um-7_O!qih|hgRgrwv?t#rL@d%B5N5~YP=rD#z(O{#2g7NWX9R81G5 -zCf>+uskJLIGTCR-L)B3mDolX6juj!JynSh?D9ac|g3*bRNC;{ -z8dCK%3N$ULZW?IE;$%a^K`Mk_&)10#;frS^2Zfa!O`#=EW}XIeO{&aTB!nr9TISyK -z9oS&`|1YPG{C{-n0A1~+n?}74O>^ECtWJLj`KxA^iD_XZ1VS}N6h)NUmdBt_HAykm -zXjU{ovLQXHxwV^F*2O68AM7hlK#z0ZI6I)qgdP93`2XtPYZ+$4!vA;vedv}LTF>kC -z+}FGwr(?AkhkbdmrgSGpoTF!Uh9#8CcXsflKwJ9%)uEwV209n$M|-RBgu`ry#)hH0 -zB)71%)Sef4G{{R5s?Od?-eaxeP} -zSC&IClp=97Jwwe{RbD-~wU&RNiB6j)F{B%WYa$UwtmY0JjC$a`&S)$X8WvoNi5# -zVYy#7?26jJPehZ$N;lSocH7x{*k2MjymqPSfv_kq;&MyngU|~GhZ(VmD%ahkb1)_!WU-VcU+r#WyYdK?1O -z&=VKghD0C%&0#F8iFdQ;O+2SuR4+STS3@s(A2M_6la7jghSJuI$E4jT0gSDTD8PUE(v>qHD -zZSPacOD>CZ$SEt2E(=m>jB9bQY|6}VFi(&)=uec#3~)1pcgQtto%00I^*2eMwGm1w -z&lxmOT-oqTv&h53|<#7>Y+&I@pvUy9UoT#f6Sj*NsDZHSK -zS2o6ya4H7zGVua%$b`E7qcYflmCr*%-o1a^f>-Rb>h~iqh0~WBj8ZYXXee)6LevS& -zLHNPpO5*;h*~pZp`B7XO=0Rv|`pvLc4_lt<rUsf -zjK|8cCRPXsIJ{Um$x_{eS?->}$Pg*374g_Xa|m)#D%r3iMZW$w@8N%U8IYLb1bZ<) -zCQ*ig=NDII_r8|Qjw*@1_~YiW6zxVP>5_E*a807srTR%Zw83}cvexy5Ss$m3s8eZf -z{yqrV-!>A*A3jN&Ln74eOnj)cAebGq42LyDD=>q_t<0-~R1+&q_OqK@-|c!U6B_by$9`i&1$Q(NDCVF -z0;VQ?;Ue9LsM1WQ($%KTW+BNh`NaZlqox(c4?`cO1e}dX3UnGpXTqx_%5CJe@|0bj -z%q@J?ArQ?3H)a*Tra@*<0KPfCx*gY9lh701)r9B;dYdWLNT6JXIvmbr;tr`7;Ko2R -z?Ie1UC<;dYHY=9{IWYMC5TMuf$j%RpnKF3mOf37zME(`4(Si^AOQHcy>3f}vA$X`Q -zS9Z&s5n08u6+XULrm?Fn6HSb_ -zMWMtR66)G)`H`(s?U3F^bEa}%t>*wf1w9edpTcFKG6!_P#$bcq7ic0r1^jC<_H!BL -z{&Z7NAr*AyuC~ICVC3NQQCDY!5BxHS!k}bp7CcX@@H0H+yL8GLus)(2R@|D3uklRjitr5H1sTDB!W28J~W! -zRUh>>5J8f_+xk)W>m<<>#`|{Tj>f(C73ya78+iC97Fyy*P>dz+8psXL~%8RuKSB!XB)Ca -z%G(>vK>Y4zFE1|;#hlher*J1@1f;6=}qN*74Oi-YH2A7*jHhNd4 -zFadXVIg!qjuoxsHVFho{v^=C_XWCCt^$1(uGvwvVTaqWby5jr8iMV -zMb~>7IC!C$E;)~mCcq=2|}oLP~6$w=dNaMJqd -z+aes^h9+sKP#P$bTLHym@MWcH^=6C;HDQ+uF`M!(#mwF=R!J5OtEP@0O;T2YX*A^P -zG!?1`6q)MkpGvdSLBr0GXb^rKQ>QKnpTgz7xdm9^Rmk<*H||}!(-+EmBI4G?wWb{n -znWJD$Z{c7~hrakLv)DoLm`kq_Y2`C2K~rFw-Pt{I!k69I^_s8vd{Xjk+f~AED%}sd -z?*9C$eVezh!Pj=FL!v|ft%TY0>`PRW-!?WNrZ!l?FM6R+C3KNBuSuj)nJ_#jvDV2E -zsNpE-Bxq)4)4~mj7FpflE*7Tnh-gC$Vl;AM_)x+`sbT^+OFb9kS;(2=3H$%1DaoUXsH*@$%+xEZH!V|J^5BE!7Vm@m!U%6ZOjp^uS%XVc8gsB -zf3LoTCr6RIsr%sZiZIi1S~QHLh@h3H)K@i2@{1!q4p^H8Lipk=#l89@@z9)h^-=FC -zNhCzYHKRcK=-5n*uC*KS6b^N4x?j>YkGE`b;8^`dDL>k^32}avn+kU{2Kl=!9~-DW -zrKgBK+Y(N`%bj3}a`-xI#?yVUJa#a!dPc-=tL7OeNSAnR47$uODNCP!ZvYS$Aa6!$ -z8xAnJ)`#f&nm7(0jcNF+%d#os!NI>=em-w&`m3XX>4wJ3+#g@|Q0IS_r`w}Y)!_i~XI@kefVvGi; -z8-WlBRDzx0($|HNYdBbm0!dFa&a7nWwLQVXJw6dkPH0#k`qR;(as?OVSFt>$_xSjW -zKgFhAH1{$}f7)7AwuU$>QgL)wOINqD@+?OaR*hr|ucN%S3tfz!<$+e~Gb$xociHG` -z$rn(DTzU)-wqOpW6)4P-+mi|kxs?=l#L3vxt+tiF#5Z2nJPz%WBOgZR07X?Q^bB7~ -zA_-1=K)^Y@)E1;EY(6h{LWep(*X8r_@V}cNILdaSB+a1yZX|xj>Qlp4fjI4p`#zmo -z32yB#s{9?9X2fe^RUGe{%nXG5ch -zJ;t@4JJN1ILSfh#yqCu=Wlc%MuM=G| -zlvRX1_1uR%S-Sa-Z09)H;80_}7dBroGL)gy(f6LdJNmT#fB#Ioh=eC$EX?;&lO(Ot -zN?_g*jo%vk~XnrY@Tb4MxDeJdTz3Zr}WHON(Hca}>Y54HO7=fW=&gN}gs7j#*Ow7JN7o4VDusRwd0=h_Lm#&~4zCA6&^23Y{Lrx+QR -zh!pD69i6H6h;k>Ym^~)6O}eW)u(wZaU{GXuq_gtJM4mm<56Cn!IEg&_367JoS+DUF -zL)&)LcXK+Xo0mf@i%4M(v4$bnHamBjSPt$HA|(sVw&QPP1oYWZ`r?N}6$6ref4Pvj -z@+1+vkJcf8{tTtOKd<&s^OMQ~uMRW?p6FGqY@&xSu+4*-!A#BaZE3^`RkTM$8v@`F -zVta)95=DoG2dlV2d^-x4+opkS`^oJQBmpJP#o9c;!lBgM+!4|Qf%UUHru>bx=0EYX^`V6l1%(Qsq(iIi=65k%P{ -zusBs!51*D-j5o}ZQ>Q8x>tr_QS(z)VWU6I!n)kJfSTzmmX8&-a-&H}`ZGJG8=;zha -zdqFC@ZN5UnUo?a9OFeZHivXw?cCAVK=-x89i=AHrFyZyT1ZH(yyFyee^~gUDhROsl -zAD_m|TS`xb7{g9&QTAlS-gk=1X$>-hp2<47>sNR4SSpx^<*&(bM3$Ko^1M)GXmdkf -zrc84H6T+_^#P-=>F(&sNxTBuRMuV|cQ1y~o_ZN3h(wjoZb^l_T{ -zJ$iF2W)p53F7K;QDeRwabx86STer&jNhLlS&q#niQeW1;z|h8p{r+xxKU~*m{o#vo -ztbtEa9+ls~A}R#J=LR#bg0Sj>X+E`KwDP7PEDDtzgT^As1E>-1x9GdhEDxBVe#u@H -zyhZzV{f#r+PE6Sk(KE`?_vZkj7K@(Wv$ru`xBPvGQF}#+lzoQXe%0G)E*XS(YD16L -z;DI0B@}RSW?Dt=}>L3}DXiKyi>m-sY`dvbwy~M>w;4c6#gvG?JYzop}G7vAYs`Ey# -zyMzfXj%NdTW2HjqHUlZ;P7mNe{E94j8)Iz%c29 -z)O6`n+#?mI>Sm{ppVad-&OiM~5>%}bt@_ozf(x&^BROoSeG$KOa83*O2zc@l$tbzVLO -zo|EcLw-Xprv-7#sa?MWg4xU+-{;Z95Eo%@C1rXq`SMYTUG)S90zSX1ld8|;@(Um#* -zk#4vMzm-IK&_A$fJ`gzpHL~xT&JOH^zR$1CStIMN9H!GSX_3ro)GqH#7u0J$UuG!` -zf^-(`umMUVNENn6*e$3*w(O&kw$QWa4-nieZx@zYkO2i)P* -z`QFf~-xYgl>0Gc`pq-7}*3PyBCtrKEF}{HH1+Q<^8_~6pf*O5*YP)4L5!d9Kon;jS -z1XSNy5bfxT)i-EMBDEH;LM484Zg+mFr{WYM@Ob^Q6qnJ;|LzG;{5E{kw%)D4SiQTJ -zDVkN!BuXw3hVD^@ERIW{iHVsb(&)v~yYr6(q%2ZB?murj&-dX}lbs^NCxd#$f)aFK -zMLDeIQo}4agm_1;91tb4ubs^iu!R5Jfk)pFhYyA!19DMs$e9Bh4$Yf_|2clSE$H1J -z{eA*E&111%-o{s3O39(ddd6x;%kOB_bRD@Pm&J{#-H}t*b1Nr4*S6uK+af)(aY1(r -zZ^a5MX)_T}j}JGRJ#=pA8(^R!wSOq^lrC1?z`~uGOhs)j!oiNbyIx9lI^!I}FYYMT -zCa17O)TPNkxrrD#AP6T&dOQen%u%}45USh=Lr|6;g_jX7i(KvB%k@J$V)KAt0`TSk -zvJK=U7=Ud+1Vg!F2^6<`+7C|%!)1B-e&vtGRWOL2rY>UTib7jW+^gHsyT^mydUN&~ -z_T94Sl41eFroBCt`fTD5no^C?xTI&u&*j$azqFg9Ft3(!F}++=j@Rg_Xq%E<9~p~i -zYwjkxDU&XKBG2L9^nChVX6#9s0)eW+_186d*mFfNARhGu-oZGkTNNfS{_vPI?+qGy -zeYeurVD$Y{OX|C?kxeq0>83JaI_n#z=j!Tp1%@?XeY%2F2TQMm^RLNX>GzzTN!&5O*qARy)c%b=()@UaqW~)dB{?)5tp8v#w%>Q{9^cKx#dh*Wkk2gTgPi1`3qkGI -z3?3ns7)&9z#1RqTdIdn;dV6JW&W2+x*)=E;MwmU&A6G~@jz -z=Tiaw3uu8{qE`A|eqzp;ld_K7mSSUdh<2i3rKBqqa?qb{lRx*);4d5x_sWPIzKII> -zcfgbaz;W`xmW*OoZrDFeLGgSlm5TH0y(AfC(B|>Ja8QKH1$SmzsDnEceiG{xkkrx~ -zCLk>aAgSe6yO3K%!PJMlbBqr^tyvimk@Nm~2g%?9w(bn~U`wPPJmVifZG_^;ewyE-x%!P@H?e2AZ@SWsslTkb2TgdW`xzl$wMC -z@s&a{&iPZmntqMOppFlXxp%(8v}Dod9O;qSIn=Bo+kjH0B(qrFtXjVM`w?}RWLD$l -z2{{sKq`k($x*BGr(cpatU1ESx*z^oU*NU1ri?%9Ck@_j;++te60t``f;quj!r>-nT -zt=+ty(72w%wG{Rxu|0f<}J<@aZi=VO!fXUxK*$zUCw -z{SVRT{Igk1cYvA4kMjwS8lOeN1s_qLDy*G`K^tkI)*HJh#t2!bT!f1yFFezUQbDTn -zu{Wv?Y6@u$Zf~jYU|9cP4;$G1@0cczJ)qHO3>u9pNx&xy3J1m8>b!Sua{-h7kv_@?{m*4u0U3X75N-+&$;#I<+NWD!Py{tLb0bz7 -zP;Iqb;qV3nSA4<;B9KY&7#DzfFSO^#?GLy5%viJc}C92t<-fu -zm&=xuO-g_&*{M4iV(oMhb`1oUj+u3U+g_C{o8JA# -zs>6=Kd(l?oZb-;pBmWfC%psYKgR@yF!7zTs9CpHxAIUxAY-cdrC@`Hp@3*k*>wP8T -zpHsT-`JrBd>MMjfq5Ft8t_vtj!g%-k+*ip7zbgqp|Xi)*5b;%ItV|tq`lfEb=5e{WNNrIS=p{v -zAwq7;D@W89b9*+eS -zrR=)_^F{3+=8H67z6=uB-AKkd8gwHyORqFY@~kytvrOivwn)D;Ee+f{*7S?U@h7)2 -zNbM8!4}YrK5tiFDJfp%r%s%`(1`=Sg0^`!8W#yd2mGso(Mfa+}(0Wy(q*_&9so=df -zcKh0!Y@OQCBt&ww#8C3UxDzO$z=r!FQ#01>d#5LYk1D2}4ao>k=CWB1*t|VR5cDdI -zXuI@W=MRmP$nmu*fpSmAy1^J|R7NNXjJ?60u5mqg{o^xBAyva??hQf7$=Aj*{*iBC -z_YLk_VFzCTf!jzC+LQZ^E`UUB9s2<5qqnMaav4z9S(AEf-YL*SJ -zQKNsGUrq538}fbXWE!WJ^qpKcr-(&>E{ci6Hn|RF44rluoVhaw$aM$4lk1eZH-uAx -z^@YW%P(T_`^Sqynq@c -z3)na*|2R`LGLGLk+)WZn;MGDXl>mu4Ln9SJ0@EL>qe^K)`>3E{ZJrVkeia>O8z2HS -z9M{>6n}kdp8J!-AJqqSrpP1U8f{Nm9^l(PZa(or2)dB6T9GM8#YGWu{5mQ8^uFSG& -zsdaaT!hg{%yM)>tU0BXt3Z+eaP?}m8{f^773aevjs|e{SU7HE6 -zp_ONQ9*HFy>qv+wXag}d4OpyF8Ah*CDG}qRjPwdWI?d$RSvN -zH)Qg#QIq<)5x*(M`Y;!(K6EPakfTUXr{8|QCTSu^^{1i1?HziF~&5ReG -zqHJ2CU+QRO!1QMM*84QpRW;#+Apa5?cBU5tk`-GvFG2O)<33$b(D4b21~rpOX-Q7a -z#9j6k?@a(K@OH3AC{)xO)r0CfKO?F>ZX3JvU4?iDl$$SJZZ#)0#tVOZ+McQq`663g -z-$*-0E)Qy8?4-rirCT||;Vd~vgnMJNsyn75w0D0KcMEoB)-%wXLjlrFg8P}jK~*@2 -zm)Z-+wQ^?_C1uJs1^?)48PyP&?1(3)`xnfilFAh>5%%6FH5f39y8At1`I5*b>_##o -zi{JW4|J1EDC3Lnx+se=+S0_iUSlwHbsZwC2sfO@^Yxx$cJNvh={CKOeT0O4*KSKJx -z56&Lt_%NH9GEP@=X$Ee*Svsi1euk&+M6;ja|4g6w;Tay}Jj2%8&oI$nZTQLA7YlFDElF9l2>Fu#I@R4HvLh?sv~afcX+~=^A2aA -zW)DkePae(62!`-0=CVDyAd;J!xHIN_lN~~2vP1O~_d}~6#`N4L;S#gXcTcgYE0L&= -zH#cNiLREdw-WR}DK1C<~(cmP{v!N%MY&d`P@)@1rN8P@_zZa&6%hg3Sy5;E)Gn^%G -zzkH1wasBz*b_lUO>XB8$Nja)Rn-qMjBs6$Q#idzhBui_Wj)sDRUzwc-dV&$HgLZQQ -zl|~)2Hh|NWI<3;|GCeDwZ#1O6G$)g-+kHuS>Qs-&v^vE=cVTZdfW*qCo^l}TuicQ1 -zPQ{@hKTYZ(23Vm0@rF#? -ztqYhV{jCEo8}Xu7C|WVz2i`(V$)u0Pvm(=D{7)G7{zh1H)%SMu>;hU-df=g%VIMRc -zMEhsN@h@v4^|51h&564PK)~OB_sN1bfD{g$2-Px3$5v7v;gu*#%~wZnPj@+#-BmVF -zzq+GV45lpqdl9zYF+d(gf7zvifX5>tcx!V+K{OTNZOaRX##-0yD~We8YfSDu&?A!H -z71<}utD+Y*Y-3zsIT+diEjIRo>ox!kvENCvm|`!YSzGixh919?ghEXfG7p@&cKOCm -z90SqV!vjE1Ji1^R$G|dF!9d^Dd{MubHP7`(%)XGQZzyJpjFrGlvO0%l|0GQDa($L= -z?_`V48-%j`9{tRgy5@;vyB_CxyZYPEe7 -zFFi)QwjIG(bBi@ -zBrWzz*g(dB7j|db_bv|(vo6x?Z$=>8-JT!0X_7e``bO?Mkn!IG`8Rl1@bJulK)^uu -zOlGwdAhmCaa@;dwaTiE|2*TgLfTHnwq?`mVD;W!;A;Hvpc8515QT~tVtNGXRrzaGP -zo~Egsl-3|-#U<7(Zp@?|-u-S1$LQ1YeJ1U&Ag3lMD1f_;r%3Q?bm=cP1$bx71WEjA -zf-m)qh&5VvXHCCci;kpMz$%vhQqaK$Bb1GtkU-#4(*U8FWrSj4(~GF)9x?Sc1X4?@ -zguZ51w`hc`yZwMzsb5s!n0Reu>S3`1p|j#nKKUoG>^u6btkZ%Rm(}2pVCE}Z;;@Hf -z^?F73nd^YLyAqSv2|CQF=Ub;_O6C{7=)E)8e5KvKw2=;Rrco1ZP0u$#d2fAnAjo^F -zd8kTbkB;nuzI~raa@qQ`N~pSg3zu=}c%t7S_rKb`PQOo9gTV=!?&LxUQCDG~xtBfG -zL>FxxD(?t7Qyy)P!$IE@j;6xDiqPUo^w(*Js~e*d#dNwbAFFb$|7Qtz3DHHp3N3gZrP( -z$fZ_PiUUT6BuhMx*4QMP=UUP(oZiVEz<x!kvYPf{v&%r)tTTz&d#Dc6IvH|Fmrg -zFd#ioK!f>8|5Rk`HTM~~P{~488+?DliqsfM_okDTfQ0hi#e=WC+(()~3e@+V83%P^|A -zOE99~YgFM>YB|{IbHCt9&iuL1C-EpIyd;A0l+rbYuNzmtvc&&?)png>O=f93&5%$s -zA+%5e2_%FfO6Y_dk*XlQ2?&Bnm8t>(OhN*oN{2`hFw#d+(NRPP5CKO-9k4Rv45NtS -zpleyn=+0hy-k@Xl-?!iHT={?Uyze>BdC$3@`@Ww8OHZm>;hr6fdqb-fy8^hfjM~yu%e1i -z>V_OUB~4)7BOx$z7UBSbnS1%n!s$Xp*_L3t4F|?jt}w5r>@yd>iPOdt`(trnf62gQ -z>lp@_?9~rbPA-gebVGYpdS{zCH#+R#D%Dz2JP3z72p(-JTbg5!_DWN3p^~w_RQiIV -zF-3S8-Eik4^L{VB -zs|k1Sgnjd{0W;A$`!;Be2>>sO^I8i|Cn1S#5)vMp77xjClOW_PEqs3MvwtDdgvp8y7bOLGP -zl?MiI`Cjf<`ftrxBpLd7-sw6an$R;p6Bdv)A##T4`F?#!l(l_>nz^4V+G3AdewGr# -zP{tc)9I~N6)waw&DkQTMhiurP1eYtd4Qp$c)$9^0Hy=X!^bPd(5t=)Xi8BEU`^<4T -zrsSjwcI>27(CVNFv1Y593k3~z0vupO&X8m%?FiTW-SnY3cS0h&=G78@*x@N5>Y7@Y -zLg|dy;D}#1O6H!Qh#?OpDEc4EqIxc8Ow-(s^y{0u>4npz*YBt`9?Ngi -zlX8$`jvS_t&*7E|@-i~3_9Z55EC;O}o0Joqq@vN3MDy7?Z=j9()3s$&5jmS`Y18FQ -zEDo)m*eySOVkFJ-tR(|~!LLd;+P1LxP?72ALZ}xOen-4{;BLx3MGSekiKDx&I~(b$ -zdTQ0VW8HT_TbjMU^6}Jk7?|DIlY$G;Iy*mHtlRUZ -zUw!>Ipl|QTb=xN6ibOo(S6AEC=_;J3lIg!zC1` -zXVMDb+66$OL#+^&!!f|27ZHu3VMSU(4Z1%$&8wm{486^gWh1mRCL8!CL=2dnwkPcL -zI^%dDyf^VovGl&YCU}83V}nrO7ohbYn1=Y=NBmSe69QY&^(T`Cxg<9LVnI`N}PEmg?ZSwH+y6@u1g2Mbbq!Lhl-eMj!~HC`MP%B5EqNm -zzs~1P*KuJdckM>2((KXu3uQHU+j2{gl&xhrVO1Wt(mNN6-Q|~yfd^vSrEOjy>H|q4 -z@mS-rz<#*a_F_}_-c~YkD!N!N@#yq;$K*=z4tuVRuw+nH5 -z4~ENOs;cvA%S!V1w1%;T^vEuF6oLJjm4T6TVEW8ssfS*cGI8S;GuUm&a;-`$UH>T*{%4>@|$V<9&byPTAH3$R` -zO{5st?Fvo@ZxPwnVr|bBo1PBMjZh`?uAYaUIu(020vF -z&d6p$cct>cV87GxfS$@@$Bjdz(jMydts!}bk^`es=-mq^elMP?tYSctH!83>A}i_K -z_Bmdmfg5>H+q(LQtjtvsxg=5tVVv!IcBV7e`S$ty?~Mu-8{T1KQR0n8VbN~>Bdp1L -z4pvcwtjwEpbMtpn^VlqIUKCMqK-<1B&y<&DUk%z1h1TKX6!d=W*-86ECi-1x3QG3 -z?t;rA_01t(YA0R&+k-pT1ZRFDfmRoEP9(axw5&KfKcF(&%DWnl5av175Di?&JeA5u -zRwR>RRI6NL%I|iuq;{E+GYIy*Dj7$WEx*wi2FpQ;IgSIRT^fiNYRF{_u5~6K0NO+p -za|B9&)w{H-(-e}@(4Ni!DUBnL(kwhf8$U$%Ey%aj(*wWvT$9p3&~UoDDX9)aI_i9D -zLj8LNi_J-{vrR^}O^zt;G?%e-EOhfo6;R-CGhHidH%x_x-T^Ocg|41&c~FaYIb4op -z831K=c)2u2s|VPu%HX87COM;l;Ed8AfNL7i*hoCx_R*~)0POTSrm)_0=yXFl>VtQJ -z-lHjcmjMf>m;GzYC+0u<+n-H`Cslgo`6;Eh{k;PQxaDs6j?Cw(6oo&Q_pr%uc#tkT -zpC`8!nGgb(-RERg#rLZSEvjj%r`0w?!r$;B3_KFs0~q&zqI8fVf*_e^KyESwjUwc( -znv;M<94DUmGYhloAz=`+zFG-orZW#S8p^F}K-{Dmv -z!VE-}D!329x8uv4-=PqurCgup2W*>y-~%{Uix4a}zBrU$5h8~vx2en#)Q22!C@I>X -zgJ>1CNA3@kii!?i7#^H?V5pq`4%D8w{;uzY`pgY;2y3{hNnJFb3`8P){$4sJS7^gf -z$~AF7v-Ub#mRN4x=0pfctxc&?tFAt_dB2wg7KIoQtJa@RqdDxycSD9IXvFwcGJ -zWI&hHVW7n1{MUFiS#HDz`C4$~)2;vT{P&Na_qUFJaJ4Uh$5D41goNt4Y)T~Q3yp!Z -z@P_RH3G{jg27$JzoygeL!IGLU8VHIY$-bgB(0R-Fz->?*y1gOPujr0?>JH=uAU$_6P4I-A8nl34?93b@dBUlA9somiw|% -z=uM)CWY60@cdiEoxa{5NUhX{f&up7~Ivj3}qvRL(!{yAK5<}s#Tanf^f|7pADD0p#m_PwbOI4D6pe_vI(RP04L44_?7pc4$KER_NtqI;7dc`7z -z^(|$$%VOdwo~g~6iBVTPy)7IH`u`N)<%|lj7kA&BI^VxMGTD(V7pM4qS-j+P1C8*o -zE7*Qux3hHw7F%o=DZrIP%3&&md`@*`gutT_IBXm4=z#A$AYDZGLORmO5zxK;6`Ugs*clLD -zpZb4rj@E-UI5z5UL+Nj8jggOdXZtV%uiKeg#l#nlB;LpC=y5e@ZJTK)WAxqJrTB;& -z!G-@bTg;QyHwr3{!WkWFt&(?<6FEfWxO$_-EY&^l&R`#ZK6XT*^WD`a!ggo!!zc1} -zS1V4@ea+gG2C|zYBhFRz|MGFbjS*U=nksv|(i^E{@~t!z&IEiC*4Sb(Yx}V5rE8a) -z7=SI7Uu&xEvL!v}{;^`0_E+{ylv5wl{i?eS95z`94AOZiJtK`eH}L -z%#I-hxznud%?4N(Tm07|_$r>gTjut@dkuYrsoUm?{!)9lA=ta6r>_YYD;&dJR+wHY -zPzS=+arI!ESz1Wmoz)xNMJq*-B|jrQvp4f(V5YbRM0bE^g%#^ksq#Q;$Jt3=vZ;dH -z)bb6{?CHTucNv*N(GDq2FC9GDC$b;jgWTWT3{4;4#7a+}R_=GNy;ct&(zMgwgO-1r -zS=7bh1wOF&_UF35L|Z45r*36!e&>RIDFwtQF5=`po|P>Aal`WP%gIwE)f-kF($O2y -zU!E+54xs+EsSA-z9k7B0QwLcqc|&BsCEH8siYWcd=x1kPoMnslzaa*(c}{H)ZR%lk -zkFHwLpve&*(z@Sff_l%~d?h#`i-0fg;RS21E9K{H-H;adT0z=ejwbmp$WwbGm;_@y -z5ZYGUAv{)aFBLojh3%IaE>9a!T0N;IKb)xfZFKJXZO!L77bDQN($3O)0MK6}W1D@N -zNJhmtm`DKeL>XjsGw{nb@E`DXPfG6PCpYs+$M@@^k}p-=#CRDs@uWzAYZYrO2!#QL -z0lK{?MunmV2O1{S3K~W%+47evpKW_6k~wdgT#q89VW=qD`K76Z1zIlpF+Qe5MG0qpy`f~21fNByBobrHg`r2v$hpNlKJvwe(6}Y(Z-=!k&*Gy{uWRd)n*1(pb -zmhlketGtVC)$e6>4;=DJ={?nex>UVH80}B+*Y;d6lintvk>$bIFqFM7#(a+Ah9Eyx -z=euIITjy-{%3O&SC*8aFB5CA>!Qt%LSGJ4m&tAIa)!kmKC#pE)eGuishznOWzD$t% -zu<1w!lm!DC0$y~53Ry0u#BRDg;a@II=%XzPb?UdlLS3ZP^=v -zDAtoC4+_o3M)06dM^EBn`_HcNGwy-iu`_&uT-S9k@ztmXmAk^^y^yiMlx!BgG!VjI -GcK-red%TAL - -literal 0 -HcmV?d00001 - -diff --git a/vcl/source/filter/igif/decode.cxx b/vcl/source/filter/igif/decode.cxx -index bf29328..5900b4c 100644 ---- a/vcl/source/filter/igif/decode.cxx -+++ b/vcl/source/filter/igif/decode.cxx -@@ -166,10 +166,13 @@ bool GIFLZWDecompressor::ProcessOneCode() - } - else if ( ( nCode > nEOICode ) && ( nCode <= nTableSize ) ) - { -- if ( nCode == nTableSize ) -- AddToTable( nOldCode, nOldCode ); -- else -- AddToTable( nOldCode, nCode ); -+ if ( nOldCode != 0xffff ) -+ { -+ if ( nCode == nTableSize ) -+ AddToTable( nOldCode, nOldCode ); -+ else -+ AddToTable( nOldCode, nCode ); -+ } - } - else - { --- -1.9.3 - diff --git a/SOURCES/openoffice.org-2.0.2.rh188467.printingdefaults.patch b/SOURCES/openoffice.org-2.0.2.rh188467.printingdefaults.patch deleted file mode 100644 index 8a6dbce..0000000 --- a/SOURCES/openoffice.org-2.0.2.rh188467.printingdefaults.patch +++ /dev/null @@ -1,24 +0,0 @@ -From ea8d40dfc86fd45bb64ecaa33b703eb99701c3e4 Mon Sep 17 00:00:00 2001 -From: David Tardon -Date: Mon, 3 Feb 2014 19:25:59 +0100 -Subject: [PATCH] rhbz#188467 printing defaults - ---- - psprint_config/configuration/ppds/SGENPRT.PS | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/psprint_config/configuration/ppds/SGENPRT.PS b/psprint_config/configuration/ppds/SGENPRT.PS -index 0446757..177e2c4 100644 ---- a/psprint_config/configuration/ppds/SGENPRT.PS -+++ b/psprint_config/configuration/ppds/SGENPRT.PS -@@ -42,6 +42,7 @@ - *ColorDevice: True - *DefaultColorSpace: RGB - *LanguageLevel: "2" -+*TTRasterizer: Type42 - - *% --- For None Color or old PostScript(R) printers use following lines --- - *% *ColorDevice: False --- -1.8.4.2 - diff --git a/SOURCES/openoffice.org-3.0.0.ooo88341.sc.verticalboxes.patch b/SOURCES/openoffice.org-3.0.0.ooo88341.sc.verticalboxes.patch deleted file mode 100644 index 113cbe7..0000000 --- a/SOURCES/openoffice.org-3.0.0.ooo88341.sc.verticalboxes.patch +++ /dev/null @@ -1,141 +0,0 @@ -From 8208f795bb6882cf77adef940839f0c46b9befb2 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= -Date: Mon, 5 Dec 2011 15:28:19 +0100 -Subject: [PATCH] vertical content overflowing out of cell (#i88341#) - ---- - sc/source/ui/inc/output.hxx | 2 ++ - sc/source/ui/view/output2.cxx | 66 ++++++++++++++++++++++++++++--------------- - 2 files changed, 45 insertions(+), 23 deletions(-) - -diff --git a/sc/source/ui/inc/output.hxx b/sc/source/ui/inc/output.hxx -index 1b8d8f5..6dcbe2e 100644 ---- a/sc/source/ui/inc/output.hxx -+++ b/sc/source/ui/inc/output.hxx -@@ -296,6 +296,8 @@ public: - void DrawExtraShadow(sal_Bool bLeft, sal_Bool bTop, sal_Bool bRight, sal_Bool bBottom); - void DrawFrame(); - -+ bool UseNormalClip(SCROW nCellY, const SfxItemSet* pCondSet); -+ - // with logic MapMode set! - void DrawEdit(sal_Bool bPixelToLogic); - -diff --git a/sc/source/ui/view/output2.cxx b/sc/source/ui/view/output2.cxx -index ac6365c..141ef00 100644 ---- a/sc/source/ui/view/output2.cxx -+++ b/sc/source/ui/view/output2.cxx -@@ -2905,13 +2905,7 @@ void ScOutputData::DrawEditStandard(DrawEditParam& rParam) - (ScMergeAttr*)&rParam.mpPattern->GetItem(ATTR_MERGE); - bool bMerged = pMerge->GetColMerge() > 1 || pMerge->GetRowMerge() > 1; - -- // Don't clip for text height when printing rows with optimal height, -- // except when font size is from conditional formatting. -- //! Allow clipping when vertically merged? -- if ( eType != OUTTYPE_PRINTER || -- ( mpDoc->GetRowFlags( rParam.mnCellY, nTab ) & CR_MANUALSIZE ) || -- ( rParam.mpCondSet && SFX_ITEM_SET == -- rParam.mpCondSet->GetItemState(ATTR_FONT_HEIGHT, true) ) ) -+ if (UseNormalClip(rParam.mnCellY, rParam.mpCondSet)) - bClip = true; - else - bSimClip = true; -@@ -2946,6 +2940,19 @@ void ScOutputData::DrawEditStandard(DrawEditParam& rParam) - } - - Rectangle aLogicClip; -+ if ( -+ ((nAttrRotate == 9000) || (nAttrRotate == 27000)) && -+ (!(rParam.meOrient==SVX_ORIENTATION_STANDARD && -+ !rParam.mbAsianVertical)) && -+ (!(bClip || bSimClip)) -+ ) -+ { -+ if (UseNormalClip(rParam.mnCellY, rParam.mpCondSet)) -+ bClip = true; -+ else -+ bSimClip = true; -+ } -+ - if (bClip || bSimClip) - { - // Clip marks are already handled in GetOutputArea -@@ -3278,13 +3285,8 @@ void ScOutputData::DrawEditBottomTop(DrawEditParam& rParam) - (ScMergeAttr*)&rParam.mpPattern->GetItem(ATTR_MERGE); - bool bMerged = pMerge->GetColMerge() > 1 || pMerge->GetRowMerge() > 1; - -- // Don't clip for text height when printing rows with optimal height, -- // except when font size is from conditional formatting. -- //! Allow clipping when vertically merged? -- if ( eType != OUTTYPE_PRINTER || -- ( mpDoc->GetRowFlags( rParam.mnCellY, nTab ) & CR_MANUALSIZE ) || -- ( rParam.mpCondSet && SFX_ITEM_SET == -- rParam.mpCondSet->GetItemState(ATTR_FONT_HEIGHT, true) ) ) -+ -+ if (UseNormalClip(rParam.mnCellY, rParam.mpCondSet)) - bClip = true; - else - bSimClip = true; -@@ -3650,13 +3652,7 @@ void ScOutputData::DrawEditTopBottom(DrawEditParam& rParam) - (ScMergeAttr*)&rParam.mpPattern->GetItem(ATTR_MERGE); - bool bMerged = pMerge->GetColMerge() > 1 || pMerge->GetRowMerge() > 1; - -- // Don't clip for text height when printing rows with optimal height, -- // except when font size is from conditional formatting. -- //! Allow clipping when vertically merged? -- if ( eType != OUTTYPE_PRINTER || -- ( mpDoc->GetRowFlags( rParam.mnCellY, nTab ) & CR_MANUALSIZE ) || -- ( rParam.mpCondSet && SFX_ITEM_SET == -- rParam.mpCondSet->GetItemState(ATTR_FONT_HEIGHT, true) ) ) -+ if (UseNormalClip(rParam.mnCellY, rParam.mpCondSet)) - bClip = true; - else - bSimClip = true; -@@ -4547,6 +4543,20 @@ void ScOutputData::DrawEditAsianVertical(DrawEditParam& rParam) - rParam.adjustForHyperlinkInPDF(aURLStart, mpDev); - } - -+bool ScOutputData::UseNormalClip(SCROW nCellY, const SfxItemSet* pCondSet) -+{ -+ bool bNormalClip = false; -+ // Don't clip for text height when printing rows with optimal height, -+ // except when font size is from conditional formatting. -+ //! Allow clipping when vertically merged? -+ if ( eType != OUTTYPE_PRINTER || -+ ( mpDoc->GetRowFlags( nCellY, nTab ) & CR_MANUALSIZE ) || -+ ( pCondSet && SFX_ITEM_SET == -+ pCondSet->GetItemState(ATTR_FONT_HEIGHT, sal_True) ) ) -+ bNormalClip = true; -+ return bNormalClip; -+} -+ - void ScOutputData::DrawEdit(sal_Bool bPixelToLogic) - { - ScFieldEditEngine* pEngine = NULL; -@@ -5258,11 +5268,21 @@ void ScOutputData::DrawRotated(sal_Bool bPixelToLogic) - else - { - // bei gedrehtem Text ist Standard zentriert -+ long nDiff = 0; - if (eHorJust==SVX_HOR_JUSTIFY_RIGHT) -- aLogicStart.X() += nAvailWidth - nEngineWidth; -+ nDiff = nAvailWidth - nEngineWidth; - else if (eHorJust==SVX_HOR_JUSTIFY_CENTER || - eHorJust==SVX_HOR_JUSTIFY_STANDARD) -- aLogicStart.X() += (nAvailWidth - nEngineWidth) / 2; -+ nDiff = (nAvailWidth - nEngineWidth) / 2; -+ -+ if (nEngineWidth > nAvailWidth) -+ { -+ if (nAttrRotate == 9000) -+ nDiff = 0; -+ else if (nAttrRotate == 27000) -+ nDiff = nAvailWidth - nEngineWidth; -+ } -+ aLogicStart.X() += nDiff; - } - } - --- -1.8.0 - diff --git a/SOURCES/openoffice.org-3.1.0.ooo101274.opening-a-directory.patch b/SOURCES/openoffice.org-3.1.0.ooo101274.opening-a-directory.patch deleted file mode 100644 index 77ed100..0000000 --- a/SOURCES/openoffice.org-3.1.0.ooo101274.opening-a-directory.patch +++ /dev/null @@ -1,186 +0,0 @@ -From 1be2e01e592466aec2e60fbf1af528cfab1572db Mon Sep 17 00:00:00 2001 -From: David Tardon -Date: Thu, 1 Dec 2011 14:02:07 +0100 -Subject: [PATCH] #i101274 a directory on command line is silently ignored - ---- - .../source/misc/stillreadwriteinteraction.cxx | 1 + - ucbhelper/source/client/content.cxx | 75 ++++++++++++++++++++++ - 2 files changed, 76 insertions(+) - -diff --git a/comphelper/source/misc/stillreadwriteinteraction.cxx b/comphelper/source/misc/stillreadwriteinteraction.cxx -index b3dd6e8..d0f5738 100644 ---- a/comphelper/source/misc/stillreadwriteinteraction.cxx -+++ b/comphelper/source/misc/stillreadwriteinteraction.cxx -@@ -87,6 +87,7 @@ ucbhelper::InterceptedInteraction::EInterceptionState StillReadWriteInteraction: - bAbort = ( - (exIO.Code == css::ucb::IOErrorCode_ACCESS_DENIED ) - || (exIO.Code == css::ucb::IOErrorCode_LOCKING_VIOLATION ) -+ || (exIO.Code == css::ucb::IOErrorCode_NO_FILE ) - || (exIO.Code == css::ucb::IOErrorCode_NOT_EXISTING ) - #ifdef MACOSX - // this is a workaround for MAC, on this platform if the file is locked -diff --git a/ucbhelper/source/client/content.cxx b/ucbhelper/source/client/content.cxx -index 95e589f..d7fc181 100644 ---- a/ucbhelper/source/client/content.cxx -+++ b/ucbhelper/source/client/content.cxx -@@ -27,6 +27,7 @@ - #include - - #include -+#include - #include - #include - #include -@@ -37,6 +38,8 @@ - #include - #include - #include -+#include -+#include - #include - #include - #include -@@ -56,12 +59,18 @@ - #include - #include - #include -+#include -+ - #include - #include - #include - #include - #include - #include -+#include -+#include -+ -+#include - - using namespace com::sun::star::container; - using namespace com::sun::star::beans; -@@ -283,6 +292,54 @@ static Reference< XContent > getContent( - return Reference< XContent >(); - } - -+namespace -+{ -+ -+void -+lcl_displayMessage( -+ const Reference& rContext, -+ const Reference& rEnvironment, -+ const rtl::OUString& rUri) -+{ -+ // Create exception -+ const Reference xBroker(UniversalContentBroker::create(rContext)); -+ const PropertyValue aUriProperty( -+ rtl::OUString::createFromAscii("Uri"), -+ -1, -+ makeAny(getSystemPathFromFileURL(xBroker, rUri)), -+ PropertyState_DIRECT_VALUE) -+ ; -+ Sequence lArguments(1); -+ lArguments[0] <<= aUriProperty; -+ const InteractiveAugmentedIOException xError( -+ rtl::OUString(), -+ 0, -+ InteractionClassification_ERROR, -+ IOErrorCode_NO_FILE, -+ lArguments) -+ ; -+ -+ // Create interaction request -+ std::auto_ptr aRequest( -+ new ucbhelper::SimpleInteractionRequest(makeAny(xError), CONTINUATION_APPROVE)); -+ { -+ Reference xContinuation( -+ new ::ucbhelper::InteractionApprove(aRequest.get())); -+ Sequence > lContinuations(1); -+ lContinuations[0].set(xContinuation); -+ aRequest->setContinuations(lContinuations); -+ } -+ -+ Reference xInteraction(rEnvironment->getInteractionHandler()); -+ if (xInteraction.is()) -+ { -+ Reference xRequest(aRequest.release()); -+ xInteraction->handle(xRequest); -+ } -+} -+ -+} -+ - //========================================================================= - //========================================================================= - // -@@ -699,7 +756,10 @@ Reference< XInputStream > Content::openStream() - throw( CommandAbortedException, RuntimeException, Exception ) - { - if ( !isDocument() ) -+ { -+ lcl_displayMessage(m_xImpl->getComponentContext(), m_xImpl->getEnvironment(), getURL()); - return Reference< XInputStream >(); -+ } - - Reference< XActiveDataSink > xSink = new ActiveDataSink; - -@@ -724,7 +784,10 @@ Reference< XInputStream > Content::openStreamNoLock() - throw( CommandAbortedException, RuntimeException, Exception ) - { - if ( !isDocument() ) -+ { -+ lcl_displayMessage(m_xImpl->getComponentContext(), m_xImpl->getEnvironment(), getURL()); - return Reference< XInputStream >(); -+ } - - Reference< XActiveDataSink > xSink = new ActiveDataSink; - -@@ -749,7 +812,10 @@ Reference< XStream > Content::openWriteableStream() - throw( CommandAbortedException, RuntimeException, Exception ) - { - if ( !isDocument() ) -+ { -+ lcl_displayMessage(m_xImpl->getComponentContext(), m_xImpl->getEnvironment(), getURL()); - return Reference< XStream >(); -+ } - - Reference< XActiveDataStreamer > xStreamer = new ActiveDataStreamer; - -@@ -774,7 +840,10 @@ Reference< XStream > Content::openWriteableStreamNoLock() - throw( CommandAbortedException, RuntimeException, Exception ) - { - if ( !isDocument() ) -+ { -+ lcl_displayMessage(m_xImpl->getComponentContext(), m_xImpl->getEnvironment(), getURL()); - return Reference< XStream >(); -+ } - - Reference< XActiveDataStreamer > xStreamer = new ActiveDataStreamer; - -@@ -799,7 +868,10 @@ sal_Bool Content::openStream( const Reference< XActiveDataSink >& rSink ) - throw( CommandAbortedException, RuntimeException, Exception ) - { - if ( !isDocument() ) -+ { -+ lcl_displayMessage(m_xImpl->getComponentContext(), m_xImpl->getEnvironment(), getURL()); - return sal_False; -+ } - - OpenCommandArgument2 aArg; - aArg.Mode = OpenMode::DOCUMENT; -@@ -822,7 +894,10 @@ sal_Bool Content::openStream( const Reference< XOutputStream >& rStream ) - throw( CommandAbortedException, RuntimeException, Exception ) - { - if ( !isDocument() ) -+ { -+ lcl_displayMessage(m_xImpl->getComponentContext(), m_xImpl->getEnvironment(), getURL()); - return sal_False; -+ } - - OpenCommandArgument2 aArg; - aArg.Mode = OpenMode::DOCUMENT; --- -1.8.0 - diff --git a/SPECS/libreoffice.spec b/SPECS/libreoffice.spec index e5d4074..9f2de84 100644 --- a/SPECS/libreoffice.spec +++ b/SPECS/libreoffice.spec @@ -1,5 +1,5 @@ # download path contains version without the last (fourth) digit -%define libo_version 4.2.6 +%define libo_version 4.3.7 # Should contain .alphaX / .betaX, if this is pre-release (actually # pre-RC) version. The pre-release string is part of tarball file names, # so we need a way to define it easily at one place. @@ -7,11 +7,13 @@ # rhbz#715152 state vendor %if 0%{?rhel} %define vendoroption --with-vendor="Red Hat, Inc." -%define libo_python3 %{nil} +%define libo_use_python3 %{nil} +%define libo_python python %define libo_python_sitearch %{python_sitearch} %endif %if 0%{?fedora} -%define libo_python3 1 +%define libo_use_python3 1 +%define libo_python python3 %define libo_python_sitearch %{python3_sitearch} %define vendoroption --with-vendor="The Fedora Project" %endif @@ -19,9 +21,15 @@ %define __jar_repack %{nil} # make it easier to download sources from pre-release site # http://dev-builds.libreoffice.org/pre-releases/src +# %%define source_url http://dev-builds.libreoffice.org/pre-releases/src %define source_url http://download.documentfoundation.org/libreoffice/src/%{libo_version} # URL for external projects' tarballs %define external_url http://dev-www.libreoffice.org/src/ +# limit to fedora, as it breaks building of some bundled projects +%if 0%{?fedora} +# default for f23 onwards +%global _hardened_build 1 +%endif # get english only and no-langpacks for a faster smoketest build # fedpkg compile/install/local/mockbuild does not handle --without ATM, @@ -29,67 +37,84 @@ # effect %bcond_without langpacks +# remove workdir at the end of %%build, to allow build on space-constrained machines +%ifarch s390 s390x +%bcond_without smallbuild +%else +%bcond_with smallbuild +%endif + # generated by %%langpack definitions %global langpack_langs %{nil} +%global bundling_options %{nil} + Summary: Free Software Productivity Suite Name: libreoffice Epoch: 1 -Version: %{libo_version}.3 +Version: %{libo_version}.2 Release: 5%{?libo_prerelease}%{?dist} -License: (MPLv1.1 or LGPLv3+) and LGPLv3 and LGPLv2+ and BSD and (MPLv1.1 or GPLv2 or LGPLv2 or Netscape) and Public Domain and ASL 2.0 and Artistic and MPLv2.0 +License: (MPLv1.1 or LGPLv3+) and LGPLv3 and LGPLv2+ and BSD and (MPLv1.1 or GPLv2 or LGPLv2 or Netscape) and Public Domain and ASL 2.0 and Artistic and MPLv2.0 and CC0 Group: Applications/Productivity URL: http://www.libreoffice.org/ -%if 0%{?rhel} && 0%{?rhel} >= 7 -# improve build time by only building for platforms libreoffice is shipped for -ExcludeArch: %{ix86} ppc ppc64 s390 s390x -%endif - Source0: %{source_url}/libreoffice-%{version}%{?libo_prerelease}.tar.xz Source1: %{source_url}/libreoffice-help-%{version}%{?libo_prerelease}.tar.xz Source2: %{source_url}/libreoffice-translations-%{version}%{?libo_prerelease}.tar.xz Source3: http://dev-www.libreoffice.org/extern/185d60944ea767075d27247c3162b3bc-unowinreg.dll Source4: libreoffice-multiliblauncher.sh -Source5: %{external_url}/0168229624cfac409e766913506961a8-ucpp-1.3.2.tar.gz -Source6: %{external_url}/a7983f859eafb2677d7ff386a023bc40-xsltml_2.1.2.zip -Source7: %{external_url}/1f24ab1d39f4a51faf22244c94a6203f-xmlsec1-1.2.14.tar.gz -Source8: %{external_url}/798b2ffdc8bcfe7bca2cf92b62caf685-rhino1_5R5.zip -Source9: %{external_url}/35c94d2df8893241173de1d16b6034c0-swingExSrc.zip +Source5: %{external_url}/a7983f859eafb2677d7ff386a023bc40-xsltml_2.1.2.zip +Source6: %{external_url}/1f24ab1d39f4a51faf22244c94a6203f-xmlsec1-1.2.14.tar.gz +Source7: %{external_url}/798b2ffdc8bcfe7bca2cf92b62caf685-rhino1_5R5.zip +Source8: %{external_url}/35c94d2df8893241173de1d16b6034c0-swingExSrc.zip + %if 0%{?fedora} || 0%{?rhel} >= 7 #Unfortunately later versions of hsqldb changed the file format, so if we use a later version we loose #backwards compatability. -Source10: %{external_url}/17410483b5b5f267aa18b7e00b65e6e0-hsqldb_1_8_0.zip -%global bundling_options --without-system-hsqldb +Source9: %{external_url}/17410483b5b5f267aa18b7e00b65e6e0-hsqldb_1_8_0.zip +%global bundling_options %{?bundling_options} --without-system-hsqldb %endif -%if 0%{?rhel} && 0%{?rhel} < 7 -Source11: %{external_url}/aa5ca9d1ed1082890835afab26400a39-mdds_0.10.3.tar.bz2 -Source12: %{external_url}/46e92b68e31e858512b680b3b61dc4c1-mythes-1.2.3.tar.gz -Source13: %{external_url}/32f8e1417a64d3c6f2c727f9053f55ea-redland-1.0.16.tar.gz -Source14: %{external_url}/4ceb9316488b0ea01acf011023cf7fff-raptor2-2.0.9.tar.gz -Source15: %{external_url}/b12c5f9cfdb6b04efce5a4a186b8416b-rasqal-0.9.30.tar.gz -Source16: %{external_url}/ae330b9493bd4503ac390106ff6060d7-libexttextcat-3.4.3.tar.bz2 -Source17: %{external_url}/libcdr-0.0.15.tar.bz2 -Source18: %{external_url}/b85436266b2ac91d351ab5684b181151-libwpg-0.2.2.tar.bz2 -Source19: %{external_url}/a3dcac551fae5ebbec16e844810828c4-libwpd-0.9.9.tar.bz2 -Source20: %{external_url}/46eb0e7f213ad61bd5dee0c494132cb0-libwps-0.2.9.tar.bz2 -Source21: %{external_url}/48d647fbd8ef8889e5a7f422c1bfda94-clucene-core-2.3.3.4.tar.gz -Source22: %{external_url}/libvisio-0.0.31.tar.bz2 -Source23: %{external_url}/861ef15fa0bc018f9ddc932c4ad8b6dd-lcms2-2.4.tar.gz -Source24: %{external_url}/libmspub-0.0.6.tar.bz2 -Source25: %{external_url}/ea2acaf140ae40a87a952caa75184f4d-liborcus-0.5.1.tar.bz2 -Source26: %{external_url}/36271d3fa0d9dec1632029b6d7aac925-liblangtag-0.5.1.tar.bz2 -Source27: %{external_url}/15cb8c0803064faef0c4ddf5bc5ca279-boost_1_54_0.tar.bz2 -Source28: %{external_url}/harfbuzz-0.9.23.tar.bz2 -Source29: %{external_url}/libfreehand-0.0.0.tar.bz2 -Source30: %{external_url}/22f8a85daf4a012180322e1f52a7563b-libcmis-0.4.1.tar.gz -Source31: %{external_url}/libodfgen-0.0.4.tar.bz2 -Source32: %{external_url}/libmwaw-0.2.0.tar.bz2 -Source33: %{external_url}/libetonyek-0.0.4.tar.bz2 -Source34: %{external_url}/libabw-0.0.2.tar.bz2 -Source35: %{external_url}/language-subtag-registry-2014-03-27.tar.bz2 -%global bundling_options %{?bundling_options} --without-system-mdds --without-system-mythes --without-system-redland --without-system-libexttextcat --without-system-libcdr --without-system-libwpg --without-system-libwpd --without-system-libwps --without-system-clucene --without-system-libvisio --without-system-lcms2 --without-system-libmspub --without-system-orcus --without-system-liblangtag --without-system-boost --without-system-harfbuzz --without-system-libfreehand --without-system-libcmis --without-system-libodfgen --without-system-libmwaw --without-system-libetonyek --without-system-libabw +%if 0%{?rhel} +Source10: %{external_url}/0168229624cfac409e766913506961a8-ucpp-1.3.2.tar.gz +%global bundling_options %{?bundling_options} --without-system-ucpp +%if 0%{?rhel} < 7 +Source11: %{external_url}/594eb47b4b1210e25438d51825404d5a-glew-1.10.0.zip +Source12: %{external_url}/bae83fa5dc7f081768daace6e199adc3-glm-0.9.4.6-libreoffice.zip +Source13: %{external_url}/7681383be6ce489d84c1c74f4e7f9643-liborcus-0.7.0.tar.bz2 +%global bundling_options %{?bundling_options} --without-system-glew --without-system-glm --without-system-orcus +Source14: %{external_url}/cb4207cb913c7a5a8bfa5b91234618ee-mdds_0.11.2.tar.bz2 +Source15: %{external_url}/46e92b68e31e858512b680b3b61dc4c1-mythes-1.2.3.tar.gz +Source16: %{external_url}/32f8e1417a64d3c6f2c727f9053f55ea-redland-1.0.16.tar.gz +Source17: %{external_url}/4ceb9316488b0ea01acf011023cf7fff-raptor2-2.0.9.tar.gz +Source18: %{external_url}/b12c5f9cfdb6b04efce5a4a186b8416b-rasqal-0.9.30.tar.gz +Source19: %{external_url}/ae330b9493bd4503ac390106ff6060d7-libexttextcat-3.4.3.tar.bz2 +Source20: %{external_url}/48d647fbd8ef8889e5a7f422c1bfda94-clucene-core-2.3.3.4.tar.gz +Source21: %{external_url}/lcms2-2.6.tar.gz +Source22: %{external_url}/36271d3fa0d9dec1632029b6d7aac925-liblangtag-0.5.1.tar.bz2 +Source23: %{external_url}/d6eef4b4cacb2183f2bf265a5a03a354-boost_1_55_0.tar.bz2 +Source24: %{external_url}/harfbuzz-0.9.23.tar.bz2 +Source25: %{external_url}/22f8a85daf4a012180322e1f52a7563b-libcmis-0.4.1.tar.gz +Source26: %{external_url}/language-subtag-registry-2014-12-03.tar.bz2 +%global bundling_options %{?bundling_options} --without-system-mdds --without-system-mythes --without-system-redland --without-system-libexttextcat --without-system-clucene --without-system-lcms2 --without-system-liblangtag --without-system-boost --without-system-harfbuzz --without-system-libcmis +Source27: %{external_url}/libcdr-0.1.0.tar.bz2 +Source28: %{external_url}/libwpg-0.3.0.tar.bz2 +Source29: %{external_url}/libwpd-0.10.0.tar.bz2 +Source30: %{external_url}/libwps-0.3.0.tar.bz2 +Source31: %{external_url}/libvisio-0.1.0.tar.bz2 +Source32: %{external_url}/libmspub-0.1.1.tar.bz2 +Source33: %{external_url}/libodfgen-0.1.1.tar.bz2 +Source34: %{external_url}/libmwaw-0.3.1.tar.bz2 +Source35: %{external_url}/libetonyek-0.1.1.tar.bz2 +Source36: %{external_url}/libfreehand-0.1.0.tar.bz2 +Source37: %{external_url}/libabw-0.1.0.tar.bz2 +Source38: %{external_url}/librevenge-0.0.1.tar.bz2 +%global bundling_options %{?bundling_options} --without-system-libcdr --without-system-libwpg --without-system-libwpd --without-system-libwps --without-system-libvisio --without-system-libmspub --without-system-libodfgen --without-system-libmwaw --without-system-libetonyek --without-system-libfreehand --without-system-libabw --without-system-librevenge +%endif +%endif + +%if 0%{?fedora} +Source39: %{external_url}/4b87018f7fff1d054939d19920b751a0-collada2gltf-master-cb1d97788a.tar.bz2 %endif # build tools @@ -98,123 +123,125 @@ BuildRequires: automake BuildRequires: bc BuildRequires: binutils BuildRequires: bison +%if 0%{?rhel} && 0%{?rhel} < 7 +BuildRequires: chrpath +%endif BuildRequires: desktop-file-utils BuildRequires: doxygen BuildRequires: findutils BuildRequires: flex BuildRequires: gcc-c++ +BuildRequires: gdb BuildRequires: git BuildRequires: gperf BuildRequires: icu BuildRequires: make BuildRequires: perl(Archive::Zip) BuildRequires: perl(Digest::MD5) +%if 0%{?fedora} +BuildRequires: ucpp +%endif BuildRequires: zip -# libs / headers -BuildRequires: pkgconfig(gconf-2.0) -%if 0%{?fedora} || 0%{?rhel} >= 7 -BuildRequires: pkgconfig(bluez) -%else -%ifnarch s390 s390x -BuildRequires: pkgconfig(bluez) -%endif -%endif -%if 0%{?fedora} || 0%{?rhel} >= 7 -BuildRequires: boost-devel -BuildRequires: pkgconfig(libclucene-core) -%endif -BuildRequires: pkgconfig(cppunit) +# libs / headers - common BuildRequires: cups-devel -BuildRequires: pkgconfig(dbus-glib-1) -BuildRequires: pkgconfig(evolution-data-server-1.2) BuildRequires: expat-devel -%if 0%{?fedora} -BuildRequires: firebird-devel -BuildRequires: firebird-libfbembed -%endif BuildRequires: fontpackages-devel +BuildRequires: hyphen-devel +BuildRequires: libicu-devel +BuildRequires: lpsolve-devel +BuildRequires: openldap-devel +BuildRequires: pam-devel +BuildRequires: pkgconfig(cppunit) +BuildRequires: pkgconfig(dbus-glib-1) +BuildRequires: pkgconfig(evolution-data-server-1.2) BuildRequires: pkgconfig(freetype2) -%if 0%{?rhel} && 0%{?rhel} < 7 -BuildRequires: gstreamer-devel -BuildRequires: gstreamer-plugins-base-devel -%else -BuildRequires: pkgconfig(graphite2) -BuildRequires: pkgconfig(gstreamer-1.0) -BuildRequires: pkgconfig(gstreamer-plugins-base-1.0) -BuildRequires: pkgconfig(harfbuzz) -%endif +BuildRequires: pkgconfig(gconf-2.0) +BuildRequires: pkgconfig(glu) BuildRequires: pkgconfig(gtk+-2.0) BuildRequires: pkgconfig(hunspell) -BuildRequires: hyphen-devel -%if 0%{?fedora} -BuildRequires: kdelibs4-devel -%endif BuildRequires: pkgconfig(ice) +BuildRequires: pkgconfig(libcurl) +BuildRequires: pkgconfig(libidn) +BuildRequires: pkgconfig(libxml-2.0) +BuildRequires: pkgconfig(libxslt) +BuildRequires: pkgconfig(neon) +BuildRequires: pkgconfig(nss) +BuildRequires: pkgconfig(poppler) +BuildRequires: pkgconfig(redland) +BuildRequires: pkgconfig(sane-backends) BuildRequires: pkgconfig(xext) BuildRequires: pkgconfig(xinerama) BuildRequires: pkgconfig(xt) -%if 0%{?fedora} || 0%{?rhel} >= 7 -BuildRequires: pkgconfig(lcms2) -BuildRequires: pkgconfig(libabw-0.0) -BuildRequires: pkgconfig(libcdr-0.0) -BuildRequires: pkgconfig(libcmis-0.4) -BuildRequires: pkgconfig(libetonyek-0.0) -BuildRequires: pkgconfig(libfreehand-0.0) -BuildRequires: pkgconfig(libmwaw-0.2) -BuildRequires: pkgconfig(libodfgen-0.0) -%endif +BuildRequires: pkgconfig(zlib) +BuildRequires: unixODBC-devel +BuildRequires: vigra-devel + +# libs / headers - conditional %if 0%{?fedora} -BuildRequires: pkgconfig(libe-book-0.0) +BuildRequires: firebird-devel +BuildRequires: firebird-libfbembed +BuildRequires: kdelibs4-devel +BuildRequires: openCOLLADA-devel +BuildRequires: pkgconfig(libe-book-0.1) BuildRequires: pkgconfig(libeot) +BuildRequires: pkgconfig(libgltf-0.0) %endif -BuildRequires: pkgconfig(libcurl) + %if 0%{?fedora} || 0%{?rhel} >= 7 +BuildRequires: boost-devel +BuildRequires: glm-devel +BuildRequires: pkgconfig(glew) >= 1.10.0 +BuildRequires: pkgconfig(graphite2) +BuildRequires: pkgconfig(harfbuzz) +BuildRequires: pkgconfig(lcms2) +BuildRequires: pkgconfig(libabw-0.1) +BuildRequires: pkgconfig(libcdr-0.1) +BuildRequires: pkgconfig(libcmis-0.4) +BuildRequires: pkgconfig(libclucene-core) +BuildRequires: pkgconfig(libetonyek-0.1) BuildRequires: pkgconfig(libexttextcat) +BuildRequires: pkgconfig(libfreehand-0.1) +BuildRequires: pkgconfig(liblangtag) +BuildRequires: pkgconfig(libmspub-0.1) +BuildRequires: pkgconfig(libmwaw-0.3) +BuildRequires: pkgconfig(libodfgen-0.1) +BuildRequires: pkgconfig(liborcus-0.8) +BuildRequires: pkgconfig(librevenge-0.0) +BuildRequires: pkgconfig(libvisio-0.1) +BuildRequires: pkgconfig(libwpd-0.10) +BuildRequires: pkgconfig(libwpg-0.3) +BuildRequires: pkgconfig(libwps-0.3) BuildRequires: pkgconfig(mdds) +BuildRequires: pkgconfig(mythes) +BuildRequires: pkgconfig(poppler-cpp) +BuildRequires: postgresql-devel %endif -BuildRequires: libicu-devel -BuildRequires: pkgconfig(libidn) + +# libs / headers - special cases +%if 0%{?rhel} && 0%{?rhel} < 7 +BuildRequires: gstreamer-devel +BuildRequires: gstreamer-plugins-base-devel +%else +BuildRequires: pkgconfig(gstreamer-1.0) +BuildRequires: pkgconfig(gstreamer-plugins-base-1.0) +%endif + %if 0%{?fedora} || 0%{?rhel} >= 7 BuildRequires: libjpeg-turbo-devel -BuildRequires: pkgconfig(liblangtag) -BuildRequires: pkgconfig(libmspub-0.0) -BuildRequires: pkgconfig(liborcus-0.6) -BuildRequires: pkgconfig(libvisio-0.0) -BuildRequires: pkgconfig(libwpd-0.9) -BuildRequires: pkgconfig(libwpg-0.2) -BuildRequires: pkgconfig(libwps-0.2) %else BuildRequires: libjpeg-devel %endif -BuildRequires: pkgconfig(libxml-2.0) -BuildRequires: pkgconfig(libxslt) -BuildRequires: lpsolve-devel -BuildRequires: pkgconfig(glu) -%if 0%{?fedora} || 0%{?rhel} >= 7 -BuildRequires: pkgconfig(mythes) -%endif -BuildRequires: pkgconfig(neon) -BuildRequires: pkgconfig(nss) -BuildRequires: openldap-devel -BuildRequires: pam-devel -%if 0%{?fedora} || 0%{?rhel} >= 7 -BuildRequires: pkgconfig(poppler-cpp) -%endif -BuildRequires: pkgconfig(poppler) + %if 0%{?fedora} || 0%{?rhel} >= 7 -BuildRequires: postgresql-devel -%endif -%if 0%{libo_python3} -BuildRequires: pkgconfig(python3) +BuildRequires: pkgconfig(bluez) %else -BuildRequires: python-devel +%ifnarch s390 s390x +BuildRequires: pkgconfig(bluez) %endif -BuildRequires: pkgconfig(redland) -BuildRequires: pkgconfig(sane-backends) -BuildRequires: unixODBC-devel -BuildRequires: vigra-devel -BuildRequires: pkgconfig(zlib) +%endif + +BuildRequires: %{libo_python}-devel # java stuff BuildRequires: ant @@ -249,150 +276,107 @@ Requires: %{name}-math = %{epoch}:%{version}-%{release} Requires: %{name}-base = %{epoch}:%{version}-%{release} Requires: %{name}-emailmerge = %{epoch}:%{version}-%{release} -Patch1: openoffice.org-2.0.2.rh188467.printingdefaults.patch -Patch2: openoffice.org-2.4.0.ooo86080.unopkg.bodge.patch -Patch3: openoffice.org-3.0.0.ooo88341.sc.verticalboxes.patch -Patch4: openoffice.org-3.1.0.oooXXXXX.solenv.allowmissing.patch -Patch5: openoffice.org-3.1.0.ooo101274.opening-a-directory.patch -Patch6: libreoffice-installfix.patch -%if 0%{?rhel} && 0%{?rhel} < 7 -Patch7: libreoffice-rhel6gcj.patch -Patch8: libreoffice-rhel6poppler.patch -Patch9: libreoffice-rhel6langs.patch -Patch10: libreoffice-rhel6glib.patch -%endif -Patch11: 0001-Related-rhbz-1032774-bodge-around-reported-NULL-valu.patch -Patch12: 0001-Resolves-rhbz-1035092-no-shortcut-key-for-Italian-To.patch -Patch13: 0001-Resolves-rhbz-912529-Kerkis-SmallCaps-shown-instead-.patch -Patch14: 0001-disable-firebird-unit-test.patch -Patch15: 0001-never-run-autogen.sh.patch -Patch16: 0001-Related-rhbz-1065807-rework-i66157-for-multiple-writ.patch -Patch17: 0001-Resolves-rhbz-1065807-use-xdg-Templates-for-default-.patch -Patch18: 0001-rhbz-1057977-avoid-use-of-invalidated-pointers.patch -Patch19: 0001-KDE-don-t-throw-on-TemplatePathVariable.patch -Patch20: 0001-Change-SDK-javaodc-from-static-Package-to-dynamic-Ge.patch -Patch21: 0001-Package-GeneratedPackage-fixup.patch -Patch22: 0001-Related-rhbz-1075951-abrt-crash-in-MSWordExportBase-.patch -Patch23: 0001-drop-OnlyShowIn-from-.desktop-files.patch -Patch24: 0001-Resolves-rhbz-1081176-don-t-jump-to-cursor-pos-when.patch -Patch25: 0001-Resolves-fdo-36815-enable-printing-WYSIWYG-sidewindo.patch -Patch26: 0001-Related-fdo-36815-print-the-text-highlight-range-as-.patch -Patch27: 0001-add-a-format-all-comments-feature.patch -Patch28: 0001-Resolves-fdo-37130-use-10pt-Default-style-font-for-c.patch -Patch29: 0001-Related-fdo-36815-center-scaled-comment-page-vertica.patch -Patch30: 0001-Resolves-fdo-78128-go-back-to-using-an-interim-metaf.patch -Patch31: 0001-add-X-TryExec-entries-to-desktop-files.patch -Patch32: 0001-Related-fdo-36815-clip-overlarge-comment-contents.patch -Patch33: 0001-center-slide-after-changing-zoom.patch -Patch34: 0001-add-a-status-bar-icon-to-fit-slide-to-window.patch -Patch35: 0001-Related-fdo-50697-reset-the-cache-timeout-on-GetGrap.patch -Patch36: 0001-Resolves-rhbz-1096295-hard-to-distinguish-selected-f.patch -Patch37: 0001-update-libxmlsec-config.-to-support-ppc64le.patch -Patch38: 0001-move-UOF-and-Office-2003-filters-to-xsltfilter-modul.patch -Patch39: 0001-avoid-problems-detecting-HTML-files-with-.xls-ext.patch -Patch40: 0001-scrolling-very-slow-in-calc.patch -Patch41: 0001-Resolves-fdo-81487-pasting-into-outline-view-crashes.patch -Patch42: 0001-Resolves-rhbz-1121341-crash-on-closing-shrunk-validi.patch -Patch43: 0001-Resolves-i125289-do-apply-possible-changed-GraphicSt.patch -Patch44: 0001-rhbz-1121254-reload-font-list-from-shell-on-change.patch -Patch45: 0001-rhbz-1079672-FileDialogHelper-don-t-hand-out-stale-p.patch -Patch46: 0001-Related-rhbz-1130264-plausible-fix-for-reported-cras.patch -Patch47: 0001-Resolves-rhbz-1125588-port-LibreOffice-to-ppc64le.patch -Patch48: 0001-refine-current-date-time-hotkey-handling.patch +# not upstreamed +Patch0: openoffice.org-2.4.0.ooo86080.unopkg.bodge.patch +# not upstreamed +Patch1: openoffice.org-3.1.0.oooXXXXX.solenv.allowmissing.patch +# not upstreamed +Patch2: libreoffice-installfix.patch %if 0%{?rhel} -Patch49: 0001-disable-libe-book-support.patch -%endif -Patch51: 0001-if-_CALL_ELF-if-defined-_CALL_ELF-_CALL_ELF-2.patch -Patch52: 0001-fix-variable-name.patch -Patch53: 0001-cast-arg-to-the-right-type.patch -Patch54: 0001-sigh-simply-forgot-to-include-the-endian-header.patch - -# <<< beginning of additional 4.2.7 patches -Patch55: 0001-resolved-fdo-62250-absent-value-cell-values-are-not-.patch -Patch56: 0002-localized-GetFullName.patch -Patch57: 0003-Resolves-i119287-corrected-default-style-for-draw-ob.patch -Patch58: 0004-Adjust-for-the-splitting-of-number-format-properties.patch -Patch59: 0005-bnc-881025-Mark-axis-a-percent-axis-only-when-all-da.patch -Patch60: 0006-bnc-883684-Make-chart-objects-exempt-from-automatic-.patch -Patch61: 0007-Fix-ignoring-large-twips-values-like-MSO-does-cp-100.patch -Patch62: 0016-sd-stop-calling-graphics-styles-Image-Styles.patch -Patch63: 0017-fdo-81284-Don-t-write-to-zero-length-files.patch -Patch64: 0018-Resolves-fdo-52226-swap-in-graphics-on-.docx-and-.rt.patch -Patch65: 0019-Related-fdo-52226-ensure-graphics-are-swapped-in-on-.patch -Patch66: 0020-fdo-78554-SVG-Text-from-SVG-no-longer-displayed-in-L.patch -Patch67: 0022-fdo-71076-fdo-71767-Preserve-number-formats-when-cha.patch -Patch68: 0023-fdo-79676-Initialize-with-a-default-chart-only-from-.patch -Patch69: 0025-fdo-81445-Display-correct-label-for-empty-cell.patch -Patch70: 0026-bnc-862510-Improve-handling-of-OOXML-gradients.patch -Patch71: 0027-Do-not-prefer-bandRow-over-firstCol-lastCol-nor-the-.patch -Patch72: 0028-bnc-887225-OOXML-import-Correctly-apply-table-style-.patch -Patch73: 0029-fdo-81470-Fix-a-crasher-during-xlsx-export-with-revi.patch -Patch74: 0031-use-rtl-math-round-here-to-get-the-same-number-on-32.patch -Patch75: 0033-bnc-887230-always-use-theme-color-for-hyperlinks-in-.patch -Patch76: 0035-related-fdo-78502-writerfilter-RTF-import-fix-invali.patch -Patch77: 0036-fdo-79676-Fix-the-Java-UNO-API-test-with-regard-to-c.patch -Patch78: 0038-bool-improvements.patch -Patch79: 0039-Adapt-to-sal-log.hxx.patch -Patch80: 0040-bnc-885548-Initial-work-on-importing-revisions-from-.patch -Patch81: 0041-bnc-885548-Adjust-xlsx-export-of-revisions-to-get-it.patch -Patch82: 0042-Preserve-the-end-of-list-flag-for-xls-round-tripping.patch -Patch83: 0043-bnc-883684-Better-fix-for-this.patch -Patch84: 0044-fdo-81309-Adjust-references-during-sort.patch -Patch85: 0045-emf-emulate-hatch-with-color-blend.patch -Patch86: 0046-bnc-881024-Handle-0-font-height-just-like-outdev-dra.patch -Patch87: 0047-bnc-881024-Don-t-world-transform-font-size-in-WMF-EM.patch -Patch88: 0048-fdo-74295-win32-fpicker-correctly-set-the-default-fi.patch -Patch89: 0049-Resolves-fdo-81581-Mediawiki-doesn-t-recognize-under.patch -Patch90: 0052-Resolves-fdo-80906-Delete-any-control-on-Dialog-edit.patch -Patch91: 0053-fdo-81304-don-t-parse-file-name-as-part-of-URL.patch -Patch92: 0058-Resolves-fdo-81598-i125300-enhanced-handling-of-mult.patch -Patch93: 0059-bnc-862510-PPTX-import-bullets-have-color-as-followi.patch -Patch94: 0060-Related-fdo-81457-skip-setting-an-empty-allocation.patch -Patch95: 0061-Fix-for-Footer-is-missing-if-fisrt-page-different-he.patch -Patch96: 0062-fix-build-of-last-commit.patch -Patch97: 0063-fdo-81617-Split-formula-groups-at-sort-range-boundar.patch -Patch98: 0064-fdo-79578-Properly-update-formulas-upon-change-in-db.patch -Patch99: 0065-Related-fdo-81641-create-new-styles-with-an-initial-.patch -Patch100: 0067-coverity-1194911-Unchecked-dynamic_cast.patch -Patch101: 0068-bnc-467459-fix-editeng-text-search-with-expanded-fie.patch -Patch102: 0069-bnc-885548-Reset-the-default-user-to-the-document-ow.patch -Patch103: 0070-fdo-81330-When-moving-to-a-different-sheet-set-3D-fl.patch -Patch104: 0071-fdo-80846-Get-the-parameter-order-right.patch -Patch105: 0072-fdo-78502-writerfilter-RTF-import-handle-u-keyword-i.patch -Patch106: 0073-fdo-81384-writerfilter-turn-the-horrible-btLr-cell-t.patch -Patch107: 0074-fdo-78904-LO-hangs-while-saving-the-document.patch -Patch108: 0075-fdo-75380-Let-s-not-always-set-the-line-style-to-NON.patch -Patch109: 0076-fdo-80986-disable-highlight-DOCX-import.patch -Patch110: 0077-avoid-buffer-overflow-by-using-wrong-buffer.patch -Patch111: 0078-fdo-81993-Revert-Resolves-i119464-Update-default-ali.patch -Patch112: 0079-fdo-81516-Support-fonts-like-Source-Han-Sans-with-16.patch -Patch113: 0080-bnc-886540-Default-chart-background-for-pptx-docs-sh.patch -Patch114: 0081-bnc-886540-Let-s-not-push-the-available-area-down-wh.patch -Patch115: 0082-bnc-862514-Handle-corner-case-in-slide-sorter-correc.patch -Patch116: 0083-fdo-81835-Don-t-prefer-GDI-Metafiles-to-RTF-HTML-cor.patch -Patch117: 0084-fdo-82137-don-t-include-working-directory-in-tarball.patch -Patch118: 0085-fdo-81516-vcl-limit-number-of-CFFs-read-from-font.patch -Patch119: 0086-fdo-69282-sw-fix-updating-of-page-styles-via-SwDocSh.patch -Patch120: 0087-SwDoc-CopyPageDesc-probably-sending-Modify-for-first.patch -Patch121: 0089-bnc-885548-Set-the-date-time-mode-to-non-fixed-after.patch -Patch122: 0090-fdo-81552-Fail-nicely-if-avahi-doesn-t-let-libreoffi.patch -Patch123: 0091-bnc-862510-PPTX-import-Properly-show-data-labels-in-.patch -Patch124: 0092-Fix-some-number-format-issues-bnc-862510.patch -Patch125: 0093-fdo-81995-fix-Outline-numbering-tab-page.patch -Patch126: 0095-bnc-887227-Do-not-set-TextAutoGrowHeight-for-vertica.patch -Patch127: 0097-fdo-80501-Ensure-that-we-notify-each-listener-only-o.patch -Patch128: 0098-bnc-822170-Let-s-not-even-try-to-export-invalid-char.patch -Patch129: 0099-valgrind-bff-don-t-add-0xffff-oldcode.patch -# >>> end of additional 4.2.7 patches - -Patch130: 0002-Linux-AArch64-port.patch -Patch131: 0001-fix-KDE4-detection-on-aarch64.patch -Patch132: 0001-drop-useless-test-for-ant-apache-regexp.patch -Patch133: 0001-No-fstack-protect-strong-for-gcc3_linux_aarch64-cpp2.patch -Patch134: 0001-set-up-java-on-aarch64.patch -Patch135: 0001-Disable-sdremote-by-default-and-improve-flow-control.patch -Patch136: 0001-rhbz-1111216-allow-to-export-an-empty-sheet-to-PDF.patch -Patch137: 0001-rhbz-1016758-Dispose-bridges-when-disposing-bridge-f.patch +# not upstreamed +Patch3: 0001-disable-failing-test-on-rhel.patch +%if 0%{?rhel} < 7 +# not upstreamed +Patch4: libreoffice-rhel6gcj.patch +# not upstreamed +Patch5: libreoffice-rhel6poppler.patch +# not upstreamed +Patch6: libreoffice-rhel6langs.patch +# not upstreamed +Patch7: libreoffice-rhel6glib.patch +# not upstreamed +Patch8: 0001-disable-failing-test-on-rhel-6.patch +%endif +# not upstreamed +# TODO: fails on ppc; investigate +Patch9: 0001-disable-swui-test-on-RHEL-7.patch +# not upstreamed +Patch10: 0001-disable-libe-book-support.patch +%endif +# not upstreamed +Patch12: 0001-Resolves-rhbz-1035092-no-shortcut-key-for-Italian-To.patch +# not upstreamed +Patch13: 0001-disable-firebird-unit-test.patch +# not upstreamed +Patch14: 0001-never-run-autogen.sh.patch +# not upstreamed +Patch15: 0001-add-X-TryExec-entries-to-desktop-files.patch +# not upstreamed +Patch16: 0001-disable-PSD-import-test-which-deadlocks-on-ARM.patch +Patch17: 0001-rhbz-1111216-allow-to-export-an-empty-sheet-to-PDF.patch +Patch18: 0001-avoid-problems-detecting-HTML-files-with-.xls-ext.patch +Patch19: 0001-scrolling-very-slow-in-calc.patch +Patch20: 0001-Related-rhbz-1117853-nStartPara-of-EE_PARA_NOT_FOUND.patch +Patch21: 0001-Resolves-fdo-81487-pasting-into-outline-view-crashes.patch +Patch22: 0001-Related-rhbz-1130264-plausible-fix-for-reported-cras.patch +Patch23: 0001-if-_CALL_ELF-if-defined-_CALL_ELF-_CALL_ELF-2.patch +Patch24: 0002-Linux-AArch64-port.patch +Patch25: 0001-fix-KDE4-detection-on-aarch64.patch +Patch26: 0001-drop-useless-test-for-ant-apache-regexp.patch +Patch27: 0001-No-fstack-protect-strong-for-gcc3_linux_aarch64-cpp2.patch +Patch28: 0001-fdo-82496-Change-picture-option-by-rightclicking.patch +Patch29: 0001-create-a-master-document-template-type.patch +Patch30: 0001-Resolves-fdo-80911-don-t-swap-notes-page-width-heigh.patch +Patch31: 0001-default-n-up-printing-of-notes-to-sensible-2-x-1-not.patch +Patch32: 0001-n-up-printing-done-by-vcl-brochures-by-draw-impress.patch +Patch33: 0001-Resolves-fdo-68967-looping-layout.patch +Patch34: 0001-Remove-smb-from-X-KDE-Protocols-lines.patch +Patch35: 0001-libgcrypt-and-gnutls-are-only-used-by-our-internal-e.patch +Patch36: 0001-allow-to-build-with-system-opencollada.patch +Patch37: 0001-Resolves-fdo-37559-revert-adding-extra-dummy-polygon.patch +Patch38: 0001-implement-toggling-off-removeable-master-elements-wi.patch +Patch39: 0001-Resolves-fdo-78151-change-style-on-toggling-bullets-.patch +Patch40: 0001-Resolves-rhbz-1161238-sync-PRESOBJ_OUTLINE-para-dept.patch +Patch41: 0001-strip-off-hard-coded-numbering-from-outliner-preview.patch +Patch42: 0001-have-a-stab-at-improving-impossible-question.patch +Patch43: 0001-just-use-ANSI-C-declarations.patch +Patch44: 0001-Related-fdo-78151-only-make-outline-title-and-subtit.patch +Patch45: 0001-ooo-93212-avoid-slicing-during-construction-of-SdrPa.patch +Patch46: 0001-don-t-copy-stylesheet-s-HelpID-if-this-s-a-rename.patch +Patch47: 0001-fdo-37682-paint-the-right-area.patch +Patch48: 0001-Related-fdo-87242-init-VirtualDevice-with-size-of-su.patch +Patch49: 0001-fdo-36772-Move-the-scrollbar-and-sheet-tabs-in-a-sep.patch +Patch50: 0001-radio-check-top-center-bottom-alignment-for-table-ce.patch +Patch51: 0001-allow-comparing-documents-which-only-differ-by-frame.patch +Patch52: 0001-Use-the-same-advanced-Ellipse-and-Rectangle-shapes-i.patch +Patch53: 0001-if-we-change-the-keys-we-have-to-resort-based-on-the.patch +Patch54: 0001-don-t-strip-font-names-of-apparent-script-suffixes-a.patch +Patch55: 0001-During-DocumentRedlineManager-SetRedlineMode-the-arr.patch +Patch56: 0001-Resolves-rhbz-1193971-clear-hard-coded-char-props-in.patch +Patch57: 0001-add-accel.-to-switch-monitors-to-pres.-console.patch +Patch58: 0001-build-libetonyek-with-no-strict-aliasing.patch +Patch59: 0002-propagate-user-set-CFLAGS-to-build.patch +Patch60: 0001-fdo-69036-do-not-try-to-create-a-sfxApplication-when.patch +Patch61: 0001-Resolves-rhbz-1204244-group-sdb-windows-together-as-.patch +Patch62: 0001-Resolves-tdf-90256-repair-invalid-docking-positions.patch +Patch63: 0001-negative-after-text-indents-ignored-by-msword-for-ap.patch +Patch64: 0001-Resolves-tdf-73211-gtk-checkboxes-need-erase-afer-to.patch +Patch65: 0001-rhbz-1198848-sw-delete-all-table-redlines-to-fix-DOC.patch +Patch66: 0001-Resolves-rhbz-1215060-get-LibreOffice-to-load-specif.patch +Patch67: 0001-tdf-87400-sw-fix-SwIndexReg-assertion-in-AutoCorrect.patch +Patch68: 0002-sw-fix-crash-on-SwUndoDelete-after-select-all-with-t.patch +Patch69: 0003-rhbz-1205072-sw-resource-mangement-SNAFU-caused-by-S.patch +Patch70: 0004-sw-fix-SwAccessibleParagraph-crash-on-delete.patch +Patch71: 0001-DOCX-import-fix-handling-of-dropdown-SDT-around-cell.patch +Patch72: 0001-rhbz-1213173-connectivity-Calc-driver-prevent-docume.patch +Patch73: 0001-Resolves-tdf-90757-ensure-start-row-end-row-order-ma.patch +Patch74: 0001-Resolves-tdf-91078-check-also-DBData-modified-not-on.patch +Patch75: 0001-misspell-some-words-copy-and-paste-slide-to-gimp.patch +Patch76: 0001-java-dir-for-powepc64-and-powepc64le-can-differ.patch +Patch77: 0002-java-dir-for-powepc64-and-powepc64le-can-differ.patch +Patch78: 0001-rulers-Make-the-numbers-a-bit-smaller-and-always-wit.patch +Patch79: 0001-ppc64-simplify-this-a-little.patch +Patch80: 0002-ppc64-using-a-fp-register-also-consumes-a-gp-registe.patch %define instdir %{_libdir} %define baseinstdir %{instdir}/libreoffice @@ -400,15 +384,6 @@ Patch137: 0001-rhbz-1016758-Dispose-bridges-when-disposing-bridge-f.patch %define sdkinstdir %{baseinstdir}/sdk %define fontname opensymbol -# rhbz#1085420 make sure we do not provide bundled libraries -%if 0%{?rhel} && 0%{?rhel} < 7 -# redland libs are already suffixed -> no need to filter them too -%global libo_bundled_libs_filter /^lib\\(clucene\\|lcms2\\)\\.so.*$/d -%filter_from_provides %{libo_bundled_libs_filter} -%filter_from_requires %{libo_bundled_libs_filter} -%filter_setup -%endif - %description LibreOffice is an Open Source, community-developed, office productivity suite. It includes the key desktop applications, such as a word processor, @@ -447,13 +422,14 @@ Requires: hyphen-en, hyphen >= 2.4, autocorr-en Requires: hunspell-en %else # rhbz#949106 libreoffice-core drags in both openjdk 1.7.0 and 1.8.0 -Requires: java >= 1:1.6 +Requires: java-headless >= 1:1.6 Requires: hunspell-en-US %endif Requires(pre): gtk2 >= 2.9.4 Requires(post): gtk2 >= 2.9.4 Requires(preun): gtk2 >= 2.9.4 Requires(postun): gtk2 >= 2.9.4 +Obsoletes: libreoffice-appdata < 1:4.3.3.0 Obsoletes: libreoffice-binfilter < 1:4.0.0.0 Obsoletes: libreoffice-javafilter < 1:4.1.0.0 Obsoletes: openoffice.org-core < 1:3.3.1 @@ -479,12 +455,8 @@ Summary: Python support for LibreOffice Group: Development/Libraries Requires: %{name}-core = %{epoch}:%{version}-%{release} Requires: %{name}-ure = %{epoch}:%{version}-%{release} -%if 0%{libo_python3} -Requires: python3 -%else -Requires: python +Requires: %{libo_python} Obsoletes: openoffice.org-pyuno < 1:3.3.1 -%endif %if 0%{?rhel} && 0%{?rhel} < 7 Provides: openoffice.org-pyuno = 1:3.3.0 Provides: openoffice.org-pyuno%{?_isa} = 1:3.3.0 @@ -537,6 +509,16 @@ Provides: openoffice.org-bsh%{?_isa} = 1:3.3.0 %description bsh Support BeanShell scripts in LibreOffice. +%package officebean +Summary: JavaBean for LibreOffice Components +Group: Development/Libraries +Requires: %{name}-core = %{epoch}:%{version}-%{release} + +%description officebean +Allows embedding of LibreOffice documents within the Java environment. It +provides a Java AWT window into which the backend LibreOffice process draws +its visual representation + %package rhino Summary: JavaScript support for LibreOffice Group: Development/Libraries @@ -790,7 +772,11 @@ creation and management of PostgreSQL databases through a GUI. %package ure Summary: UNO Runtime Environment Group: Development/Libraries -Requires: unzip, jre >= 1.5.0 +#rhbz#1164551 we want to ensure that a libjvm.so of this arch is available +%if 0%{?__isa_bits} == 64 +Requires: libjvm.so()(64bit) +%endif +Requires: unzip Obsoletes: openoffice.org-ure < 1:3.3.1 %if 0%{?rhel} && 0%{?rhel} < 7 Provides: openoffice.org-ure = 1:3.3.0 @@ -885,15 +871,6 @@ Requires: %{name}-core = %{epoch}:%{version}-%{release} %description kde A plug-in for LibreOffice that enables integration into the KDE desktop environment. -%package appdata -Summary: AppData support for LibreOffice -Group: Applications/Productivity -License: CC0 -BuildArch: noarch - -%description appdata -%{name}-appdata contains the AppData definition file for LibreOffice. - %endif %if 0%{?_enable_debug_packages} @@ -905,8 +882,10 @@ BuildArch: noarch Summary: Debug information for package %{name} Group: Development/Debug AutoReqProv: 0 +%if 0%{?fedora} Requires: libreoffice-core = %{epoch}:%{version}-%{release} Requires: libreoffice-gdb-debug-support = %{epoch}:%{version}-%{release} +%endif %description debuginfo This package provides debug information for package %{name}. @@ -919,6 +898,7 @@ package or when debugging this package. Summary: Additional support for debugging with gdb Group: Development/Debug Requires: gdb +Requires: %{libo_python}-six AutoReqProv: 0 %description gdb-debug-support @@ -986,7 +966,6 @@ This package provides gdb pretty printers for package %{name}. # %%langpack -l cs -n Czech -H -A -m cs-CZ # b de g jk q tu z BCD G IJK N PQR U Z0123456789 %define langpack(Aa:c:EFf:Hh:i:L:l:Mm:n:p:Oo:r:S:s:TVv:Ww:Xx:Yy:) \ -%define project LibreOffice \ %define lang %{-l:%{-l*}}%{!-l:%{error:Language code not defined}} \ %define _langpack_lang %{-L:%{-L*}}%{!-L:%{lang}} \ %define pkgname langpack-%{lang} \ @@ -995,7 +974,7 @@ This package provides gdb pretty printers for package %{name}. %global langpack_langs %{langpack_langs} %{_langpack_lang} %{-i:%{-i*}} \ \ %package %{pkgname} \ -Summary: %{langname} language pack for %{project} \ +Summary: %{langname} language pack for LibreOffice \ Group: Applications/Productivity \ Requires: %{name}-core = %{epoch}:%{version}-%{release} \ %{-a:Requires: autocorr-%{-a*}}%{!-a:%{-A:Requires: autocorr-%{lang}}} \ @@ -1004,25 +983,18 @@ Requires: %{name}-core = %{epoch}:%{version}-%{release} \ %{-m:Requires: mythes-%{-m*}}%{!-m:%{-M:Requires: mythes-%{lang}}} \ %{-y:Requires: hyphen-%{-y*}}%{!-y:%{-Y:Requires: hyphen-%{lang}}} \ %{-r:Requires: %{-r*}} \ -%define obs openoffice.org-langpack \ -%define obsv 1:3.3.1 \ -%define aobs openoffice.org2-langpack \ -%define aobsv 1:3.0.0 \ -%define vaobs openoffice.org-langpack \ -%define vaobsv 1:2.0.3 \ -%{-o:Obsoletes: %{obs}-%{-o*} < %{obsv}}%{!-o:%{-O:Obsoletes: %{obs}-%{lang} < %{obsv}}} \ -%{-w:Obsoletes: %{aobs}-%{-x*} < %{aobsv}}%{!-x:%{-W:Obsoletes: %{aobs}-%{lang} < %{aobsv}}} \ -%{-v:Obsoletes: %{vaobs}-%{-v*} < %{vaobsv}}%{!-v:%{-V:Obsoletes: %{vaobs}-%{lang} < %{vaobsv}}} \ +%{-o:Obsoletes: openoffice.org-langpack-%{-o*} < 1:3.3.1}%{!-o:%{-O:Obsoletes: openoffice.org-langpack-%{lang} < 1:3.3.1}} \ +%{-w:Obsoletes: openoffice.org2-langpack-%{-x*} < 1:3.0.0}%{!-x:%{-W:Obsoletes: openoffice.org2-langpack-%{lang} < 1:3.0.0}} \ +%{-v:Obsoletes: openoffice.org-langpack-%{-v*} < 1:2.0.3}%{!-v:%{-V:Obsoletes: openoffice.org-langpack-%{lang} < 1:2.0.3}} \ %{-p:Provides: %{name}-langpack-%{-p*}} \ \ %description %{pkgname} \ -Provides additional %{langname} translations and resources for %{project}. \ +Provides additional %{langname} translations and resources for LibreOffice. \ \ %files %{pkgname} \ %{!-E: \ -%define autotextdir %{baseinstdir}/share/autotext \ %{expand:%%_langpack_common %{_langpack_lang}} \ -%{-x:%{autotextdir}/%{-x*}}%{!-x:%{-X:%{autotextdir}/%{_langpack_lang}}} \ +%{-x:%{baseinstdir}/share/autotext/%{-x*}}%{!-x:%{-X:%{baseinstdir}/share/autotext/%{_langpack_lang}}} \ %{-c:%{baseinstdir}/share/registry/%{-c*}.xcd} \ %{-s:%{baseinstdir}/share/registry/%{-s*}_%{_langpack_lang}.xcd} \ %{-T: \ @@ -1075,7 +1047,7 @@ Rules for auto-correcting common %{langname} typing errors. \ %if 0%{?fedora} || 0%{?rhel} >= 7 %langpack -l br -n Breton -F -H %endif -%langpack -l ca -n Catalan -F -H -Y -M -A -T -o ca_ES -V -w ca_ES +%langpack -l ca -n Catalan -F -H -Y -M -A -T -o ca_ES -V -w ca_ES -X %langpack -l cs -n Czech -F -H -Y -M -A -T -X -o cs_CZ -V -w cs_CZ %langpack -l cy -n Welsh -F -H -Y -o cy_GB -V -w cy_GB %langpack -l da -n Danish -F -H -Y -M -A -T -X -o da_DK -V -w da_DK @@ -1086,20 +1058,20 @@ Rules for auto-correcting common %{langname} typing errors. \ %langpack -l et -n Estonian -F -H -Y -T -o et_EE -V -w et_EE %langpack -l eu -n Basque -F -H -Y -T -o eu_ES -V -w eu_ES %if 0%{?fedora} || 0%{?rhel} >= 7 -%langpack -l fa -n Farsi -A -H -Y -s ctl +%langpack -l fa -n Farsi -A -H -Y -s ctl -X %endif %if 0%{?rhel} && 0%{?rhel} < 7 -%langpack -l fi -n Finnish -F -A -T -o fi_FI -V -w fi_FI +%langpack -l fi -n Finnish -F -A -T -o fi_FI -V -w fi_FI -X %else -%langpack -l fi -n Finnish -F -r libreoffice-voikko -A -T -o fi_FI -V -w fi_FI +%langpack -l fi -n Finnish -F -r libreoffice-voikko -A -T -o fi_FI -V -w fi_FI -X %endif %langpack -l fr -n French -F -H -Y -M -A -T -X -O -W %langpack -l ga -n Irish -F -H -Y -M -A -o ga_IE -w ga_IE %langpack -l gl -n Galician -F -H -Y -T -o gl_ES -V -w gl_ES %langpack -l gu -n Gujarati -F -H -Y -s ctl -o gu_IN -w gu_IN -T %langpack -l he -n Hebrew -F -H -s ctl -o he_IL -V -w he_IL -T -%langpack -l hi -n Hindi -F -H -Y -s ctl -T -o hi_IN -v hi-IN -w hi_IN -%langpack -l hr -n Croatian -F -H -Y -A -o hr_HR -V -w hr_HR -T +%langpack -l hi -n Hindi -F -H -Y -s ctl -T -o hi_IN -v hi-IN -w hi_IN -X +%langpack -l hr -n Croatian -F -H -Y -A -o hr_HR -V -w hr_HR -T -X %langpack -l hu -n Hungarian -F -H -Y -M -A -T -X -o hu_HU -V -w hu_HU %langpack -l it -n Italian -F -H -Y -M -A -T -X -O -W %langpack -l ja -n Japanese -F -A -s cjk -T -X -o ja_JP -V -w ja_JP @@ -1108,7 +1080,7 @@ Rules for auto-correcting common %{langname} typing errors. \ %endif %langpack -l kn -n Kannada -F -H -Y -o kn_IN -w ka_IN %langpack -l ko -n Korean -F -H -A -s cjk -T -c korea -X -o ko_KR -V -w ko_KR -%langpack -l lt -n Lithuanian -F -H -Y -A -o lt_LT -V -w lt_LT +%langpack -l lt -n Lithuanian -F -H -Y -A -o lt_LT -V -w lt_LT -X %if 0%{?fedora} || 0%{?rhel} >= 7 %langpack -l lv -n Latvian -F -H -Y -M %endif @@ -1131,7 +1103,7 @@ Rules for auto-correcting common %{langname} typing errors. \ %define langpack_lang Brazilian Portuguese %langpack -l pt-BR -n %{langpack_lang} -f pt -h pt -y pt -m pt -a pt -p pt_BR -T -X -o pt_BR -V -w pt_BR %langpack -l pt-PT -n Portuguese -f pt -h pt -y pt -m pt -a pt -p pt_PT -T -L pt -x pt -o pt_PT -v pt -W -%langpack -l ro -n Romanian -A -F -H -Y -M -O +%langpack -l ro -n Romanian -A -F -H -Y -M -O -X %langpack -l ru -n Russian -F -H -Y -M -A -T -X -O -W %if 0%{?fedora} || 0%{?rhel} >= 7 %langpack -l si -n Sinhalese -F -H -S ctl -T -O @@ -1176,8 +1148,8 @@ Rules for auto-correcting common %{langname} typing errors. \ %autocorr -l ca -n Catalan %autocorr -l cs -n Czech %autocorr -l da -n Danish -%autocorr -l de -n German -%autocorr -l es -n Spanish +%autocorr -l de -n German -L +%autocorr -l es -n Spanish -L %autocorr -l fa -n Farsi %autocorr -l fi -n Finnish %autocorr -l fr -n French -L @@ -1185,7 +1157,7 @@ Rules for auto-correcting common %{langname} typing errors. \ %autocorr -l hr -n Croatian %autocorr -l hu -n Hungarian %autocorr -l is -n Icelandic -%autocorr -l it -n Italian +%autocorr -l it -n Italian -L %autocorr -l ja -n Japanese %autocorr -l ko -n Korean %autocorr -l lb -n Luxembourgish @@ -1227,13 +1199,13 @@ git config gc.auto 0 # disable auto packing git add -A git commit -q -a -m %{name}-%{version} -#Customize Palette to remove Sun colours and add Red Hat colours +#Customize Palette to add Red Hat colours (head -n -1 extras/source/palettes/standard.soc && \ - echo -e ' - - - - ' && \ + echo -e ' + + + + ' && \ tail -n 1 extras/source/palettes/standard.soc) > redhat.soc mv -f redhat.soc extras/source/palettes/standard.soc git commit -q -a -m 'add Red Hat colors to palette' @@ -1241,6 +1213,15 @@ git commit -q -a -m 'add Red Hat colors to palette' # apply patches git am %{patches} +%ifarch ppc +sed -i -e /CppunitTest_services/d postprocess/Module_postprocess.mk +git commit -q -a -m 'disable failing unit test' +%endif +%ifarch ppc64le +sed -i -e /CppunitTest_writerperfect_draw/d writerperfect/Module_writerperfect.mk +git commit -q -a -m 'disable failing unit test' +%endif + %if 0%{?rhel} && 0%{?rhel} < 7 cp -r translations/source/en-GB translations/source/ms cp -r translations/source/en-GB translations/source/ur @@ -1280,23 +1261,25 @@ export CXXFLAGS=$ARCH_FLAGS %if 0%{?rhel} %if 0%{?rhel} < 7 # make segfaults on parallel build -%define distrooptions --disable-eot --disable-firebird-sdbc --disable-gio --disable-graphite --without-junit --enable-gstreamer-0-10 --disable-gstreamer --disable-postgresql-sdbc --enable-python=system --with-system-hsqldb --without-doxygen --with-parallelism=-j1 +%define distrooptions --disable-eot --disable-gltf --disable-firebird-sdbc --disable-graphite --without-junit --enable-gstreamer-0-10 --disable-gstreamer --disable-postgresql-sdbc --enable-python=system --with-system-hsqldb --without-doxygen --with-parallelism=-j1 %ifarch s390 s390x %define archoptions --disable-sdremote-bluetooth %endif %else # rhel7 -%define distrooptions --disable-eot --disable-firebird-sdbc --disable-gstreamer-0-10 --enable-gstreamer --with-system-mythes --enable-python=system %{?_smp_mflags:--with-parallelism=%{_smp_mflags}} +%define distrooptions --disable-eot --disable-gltf --disable-firebird-sdbc --disable-gstreamer-0-10 --enable-gstreamer --with-system-mythes --enable-python=system %{?_smp_mflags:--with-parallelism=%{_smp_mflags}} %endif %else # fedora -%define distrooptions --enable-eot --enable-kde4 --disable-gstreamer-0-10 --enable-gstreamer --with-system-mythes %{?_smp_mflags:--with-parallelism=%{_smp_mflags}} +%define distrooptions --enable-eot --enable-kde4 --disable-gstreamer-0-10 --enable-gstreamer --with-system-mythes --with-system-libgltf --with-system-opencollada %{?_smp_mflags:--with-parallelism=%{_smp_mflags}} +export OPENCOLLADA_CFLAGS='-I/usr/include/COLLADABaseUtils -I/usr/include/COLLADAFramework -I/usr/include/COLLADASaxFrameworkLoader -I/usr/include/GeneratedSaxParser' +export OPENCOLLADA_LIBS='-lOpenCOLLADABaseUtils -lOpenCOLLADAFramework -lOpenCOLLADASaxFrameworkLoader -lGeneratedSaxParser' %endif %if %{with langpacks} %define with_lang --with-lang='%{langpack_langs}' %endif -%if ! 0%{libo_python3} +%if ! 0%{libo_use_python3} export PYTHON=%{_bindir}/python %if 0%{?fedora} || 0%{?rhel} >= 7 export PYTHON_CFLAGS=`pkg-config --cflags python` @@ -1307,43 +1290,45 @@ export PYTHON_LIBS=`python-config --libs python` %endif %endif -%if 0%{?rhel} +# %%if 0%%{?rhel} && 0%%{?rhel} < 7 aclocal -I m4 autoconf -%endif +# %endif +# TODO: enable coinmp? # avoid running autogen.sh on make touch autogen.lastrun %configure \ %vendoroption \ %{?with_lang} \ + --disable-coinmp \ --disable-fetch-external \ --disable-gnome-vfs \ --disable-openssl \ - --enable-dbus \ --enable-evolution2 \ --enable-ext-nlpsolver \ --enable-ext-wiki-publisher \ - --enable-lockdown \ --enable-release-build \ --enable-scripting-beanshell \ --enable-scripting-javascript \ --enable-symbols \ - --enable-vba \ --with-build-version="%{version}-%{release}" \ --with-external-dict-dir=/usr/share/myspell \ --with-external-tar="$EXTSRCDIR" \ --with-help \ --with-system-dicts \ --with-system-libs \ - --without-afms \ + --with-system-ucpp \ --without-fonts \ --without-ppds \ --without-system-npapi-headers \ + --with-gdrive-client-secret="GYWrDtzyZQZ0_g5YoBCC6F0I" \ + --with-gdrive-client-id="457862564325.apps.googleusercontent.com" \ %{distrooptions} \ %{?bundling_options} \ %{?archoptions} +ulimit -c unlimited make VERBOSE=true #generate the icons and mime type stuff @@ -1354,8 +1339,17 @@ export GNOME_MIME_THEME=hicolor # TODO use empty variables? Should make the renaming hacks in %%install # unnecessary. . ./bin/get_config_variables PRODUCTVERSIONSHORT PRODUCTVERSION WORKDIR -cd $WORKDIR/CustomTarget/sysui/share/libreoffice +pushd $WORKDIR/CustomTarget/sysui/share/libreoffice ./create_tree.sh +popd +mkdir $WORKDIR/os-integration +cp -pr $WORKDIR/CustomTarget/sysui/share/output/usr/share/* $WORKDIR/os-integration + +%if %{with smallbuild} +# remove the biggest offenders +# NOTE: not removing complete LinkTarget, as some libs are needed for smoketest +rm -rf $WORKDIR/CxxObject $WORKDIR/GenCxxObject $WORKDIR/HelpTarget $WORKDIR/LinkTarget/CppunitTest +%endif echo build end time is `date`, diskspace: `df -h . | tail -n 1` @@ -1368,20 +1362,20 @@ export PRODUCTVERSIONSHORT PRODUCTVERSION # installation -mkdir -p %{buildroot}%{instdir} +install -m 0755 -d %{buildroot}%{instdir} if ! make instsetoo_native PKGFORMAT=installed EPM=not-used-but-must-be-set; then echo - ---dump log start--- - cat $ WORKDIR/installation/LibreOffice/installed/logging/en-US/log_*_en-US.log + cat $WORKDIR/installation/LibreOffice/installed/logging/en-US/log_*_en-US.log echo - ---dump log end--- echo - ---dump log start -- SDK--- - cat $ WORKDIR/installation/LibreOffice_SDK/installed/logging/en-US/log_*_en-US.log + cat $WORKDIR/installation/LibreOffice_SDK/installed/logging/en-US/log_*_en-US.log echo - ---dump log end -- SDK--- echo - ---dump log start -- languagepacks--- - cat $ WORKDIR/installation/LibreOffice_languagepack/installed/logging/en-US/log_*_en-US.log + cat $WORKDIR/installation/LibreOffice_languagepack/installed/logging/en-US/log_*_en-US.log echo - ---dump log end -- languagepacks--- exit 1 fi -mkdir -p %{buildroot}%{baseinstdir} +install -m 0755 -d %{buildroot}%{baseinstdir} mv $WORKDIR/installation/LibreOffice/installed/install/en-US/* %{buildroot}%{baseinstdir} %if %{with langpacks} for langpack in $WORKDIR/installation/LibreOffice_languagepack/installed/install/*; do @@ -1441,9 +1435,6 @@ pushd %{buildroot}%{baseinstdir}/share/autocorr %make_autocorr_aliases -l en-ZA en-NA en-ZW %if %{with langpacks} %make_autocorr_aliases -l af-ZA af-NA -%make_autocorr_aliases -l de-DE de-AT de-BE de-CH de-LI de-LU -%make_autocorr_aliases -l es-ES es-AR es-BO es-CL es-CO es-CR es-CU es-DO es-EC es-GT es-HN es-MX es-NI es-PA es-PE es-PR es-PY es-SV es-US es-UY es-VE -%make_autocorr_aliases -l it-IT it-CH %make_autocorr_aliases -l nl-NL nl-AW %make_autocorr_aliases -l sv-SE sv-FI %else @@ -1451,9 +1442,10 @@ rm -f acor_[a-df-z]*.dat acor_e[su]*.dat %endif popd #rhbz#484055 make these shared across multiple applications -mkdir -p %{buildroot}%{_datadir} +install -m 0755 -d %{buildroot}%{_datadir} mv -f %{buildroot}%{baseinstdir}/share/autocorr %{buildroot}%{_datadir}/autocorr chmod 755 %{buildroot}%{_datadir}/autocorr +ln -s %{_datadir}/autocorr %{buildroot}%{baseinstdir}/share/autocorr #remove it in case we didn't build with gcj rm -f %{buildroot}%{baseinstdir}/program/classes/sandbox.jar @@ -1466,7 +1458,7 @@ find %{buildroot}%{baseinstdir} -exec chmod +w {} \; find %{buildroot}%{baseinstdir} -type d -exec chmod 0755 {} \; # move python bits into site-packages -mkdir -p %{buildroot}%{libo_python_sitearch} +install -m 0755 -d %{buildroot}%{libo_python_sitearch} pushd %{buildroot}%{libo_python_sitearch} echo "import sys, os" > uno.py echo "sys.path.append('%{baseinstdir}/program')" >> uno.py @@ -1474,6 +1466,7 @@ echo "os.putenv('URE_BOOTSTRAP', 'vnd.sun.star.pathname:%{baseinstdir}/program/f cat %{buildroot}%{baseinstdir}/program/uno.py >> uno.py rm -f %{buildroot}%{baseinstdir}/program/uno.py* mv -f %{buildroot}%{baseinstdir}/program/unohelper.py* . +mv -f %{buildroot}%{baseinstdir}/program/officehelper.py* . popd # rhbz#477435 package opensymbol separately @@ -1483,6 +1476,14 @@ install -p -m 0644 *.ttf %{buildroot}%{_fontdir} popd rm -rf %{buildroot}%{baseinstdir}/share/fonts +%if 0%{?rhel} && 0%{?rhel} < 7 +#fix rpath for redland libs +chrpath -r '$ORIGIN:$ORIGIN/../ure-link/lib' \ + %{buildroot}%{baseinstdir}/program/libraptor2-lo.so.0 \ + %{buildroot}%{baseinstdir}/program/librasqal-lo.so.3 \ + %{buildroot}%{baseinstdir}/program/librdf-lo.so.0 +%endif + #ensure that no sneaky un-prelinkable, un-fpic or non executable shared libs #have snuck through pic=0 @@ -1505,7 +1506,7 @@ if [ $pic == 1 ]; then false; fi if [ $executable == 1 ]; then false; fi #make up some /usr/bin scripts -mkdir -p %{buildroot}%{_bindir} +install -m 0755 -d %{buildroot}%{_bindir} pushd %{buildroot}%{_bindir} echo \#\!/bin/sh > ooffice @@ -1553,50 +1554,49 @@ done # rhbz#156677 / rhbz#186515 do not show math and startcenter sed -i -e /NoDisplay/s/false/true/ math.desktop startcenter.desktop # relocate the .desktop and icon files -mkdir -p %{buildroot}%{_datadir}/applications +install -m 0755 -d %{buildroot}%{_datadir}/applications for app in base calc draw impress math startcenter writer xsltfilter; do sed -i -e 's/\${UNIXBASISROOTNAME}/%{name}/' $app.desktop desktop-file-validate $app.desktop - cp -p $app.desktop %{buildroot}%{_datadir}/applications/libreoffice-$app.desktop + install -m 0644 -p $app.desktop %{buildroot}%{_datadir}/applications/libreoffice-$app.desktop done popd -pushd $WORKDIR/CustomTarget/sysui/share/output/usr/share +pushd $WORKDIR/os-integration #get rid of the gnome icons and other unneeded files rm -rf icons/gnome applications application-registry #relocate the rest of them # rhbz#901346 512x512 icons are not used by anything for icon in `find icons -path '*/512x512' -prune -o -type f -print`; do - mkdir -p %{buildroot}%{_datadir}/`dirname $icon` - cp -p $icon %{buildroot}%{_datadir}/`echo $icon | sed -e s@libreoffice$ICONVERSION-@libreoffice-@ | sed -e s@libreoffice$PRODUCTVERSION-@libreoffice-@` + install -m 0755 -d %{buildroot}%{_datadir}/`dirname $icon` + install -m 0644 -p $icon %{buildroot}%{_datadir}/`echo $icon | sed -e s@libreoffice$ICONVERSION-@libreoffice-@ | sed -e s@libreoffice$PRODUCTVERSION-@libreoffice-@` done -mkdir -p %{buildroot}%{_datadir}/mime-info -cp -p mime-info/libreoffice$PRODUCTVERSION.keys %{buildroot}%{_datadir}/mime-info/libreoffice.keys -cp -p mime-info/libreoffice$PRODUCTVERSION.mime %{buildroot}%{_datadir}/mime-info/libreoffice.mime +install -m 0755 -d %{buildroot}%{_datadir}/mime-info +install -m 0644 -p mime-info/libreoffice$PRODUCTVERSION.keys %{buildroot}%{_datadir}/mime-info/libreoffice.keys +install -m 0644 -p mime-info/libreoffice$PRODUCTVERSION.mime %{buildroot}%{_datadir}/mime-info/libreoffice.mime #add our mime-types, e.g. for .oxt extensions -mkdir -p %{buildroot}%{_datadir}/mime/packages -cp -p mime/packages/libreoffice$PRODUCTVERSION.xml %{buildroot}%{_datadir}/mime/packages/libreoffice.xml +install -m 0755 -d %{buildroot}%{_datadir}/mime/packages +install -m 0644 -p mime/packages/libreoffice$PRODUCTVERSION.xml %{buildroot}%{_datadir}/mime/packages/libreoffice.xml popd rm -rf %{buildroot}%{baseinstdir}/readmes rm -rf %{buildroot}%{baseinstdir}/licenses -mkdir -p %{buildroot}%{baseinstdir}/share/psprint/driver -cp -p psprint_config/configuration/ppds/SGENPRT.PS %{buildroot}%{baseinstdir}/share/psprint/driver/SGENPRT.PS +# to-do, remove this in libreoffice 4.4 when --without-ppds is gone, it'll do the right thing on its own then +install -m 0755 -d %{buildroot}%{baseinstdir}/share/psprint/driver +install -m 0644 -p vcl/unx/generic/printer/configuration/ppds/SGENPRT.PS %{buildroot}%{baseinstdir}/share/psprint/driver/SGENPRT.PS # rhbz#452385 to auto have postgres in classpath if subsequently installed sed -i -e "s#URE_MORE_JAVA_CLASSPATH_URLS.*#& file:///usr/share/java/postgresql-jdbc.jar#" %{buildroot}%{baseinstdir}/program/fundamentalrc # move glade catalog to system glade dir -mkdir -p %{buildroot}%{_datadir}/glade3/catalogs +install -m 0755 -d %{buildroot}%{_datadir}/glade3/catalogs mv %{buildroot}%{baseinstdir}/share/glade/libreoffice-catalog.xml %{buildroot}%{_datadir}/glade3/catalogs -%if 0%{?fedora} # rhbz#1049543 install appdata -mkdir -p %{buildroot}%{_datadir}/appdata -cp -p sysui/desktop/appstream-appdata/*.appdata.xml %{buildroot}%{_datadir}/appdata -%endif +install -m 0755 -d %{buildroot}%{_datadir}/appdata +install -m 0644 -p sysui/desktop/appstream-appdata/*.appdata.xml %{buildroot}%{_datadir}/appdata # install man pages install -m 0755 -d %{buildroot}%{_mandir}/man1 @@ -1608,17 +1608,24 @@ done export DESTDIR=%{buildroot} make cmd cmd="install-gdb-printers -a %{_datadir}/gdb/auto-load%{baseinstdir} -c -i %{baseinstdir} -p %{_datadir}/libreoffice/gdb" +# tl.pyc is sligtly different on various platforms for some reason, breaking multilib +rm -f \ + %{buildroot}%{_datadir}/gdb/auto-load%{baseinstdir}/program/libtllo.so-gdb.py \ + %{buildroot}%{_datadir}/libreoffice/gdb/libreoffice/tl.py %check +ulimit -c unlimited unset WITH_LANG # work around flawed accessibility check export JFW_PLUGIN_DO_NOT_CHECK_ACCESSIBILITY="1" export OOO_TEST_SOFFICE=path:%{buildroot}%{baseinstdir}/program/soffice +%ifnarch ppc %if 0%{?rhel} && 0%{?rhel} < 7 timeout 2h make smoketest.subsequentcheck %else -timeout -k 2m 2h make smoketest.subsequentcheck +timeout -k 5m 3h make smoketest.subsequentcheck +%endif %endif # we don't need this anymore rm -f %{buildroot}%{baseinstdir}/program/classes/smoketest.jar @@ -1653,7 +1660,6 @@ rm -f %{buildroot}%{baseinstdir}/program/classes/smoketest.jar %{baseinstdir}/program/classes/commonwizards.jar %{baseinstdir}/program/classes/form.jar %{baseinstdir}/program/classes/query.jar -%{baseinstdir}/program/classes/officebean.jar %{baseinstdir}/program/classes/report.jar %{baseinstdir}/program/classes/ScriptFramework.jar %{baseinstdir}/program/classes/ScriptProviderForJava.jar @@ -1666,7 +1672,6 @@ rm -f %{buildroot}%{baseinstdir}/program/classes/smoketest.jar %{baseinstdir}/program/libdeploymentgui.so %{baseinstdir}/program/libdlgprovlo.so %{baseinstdir}/program/libexpwraplo.so -%{baseinstdir}/program/libfastsaxlo.so %{baseinstdir}/program/flat_logo.svg %{baseinstdir}/program/libfps_officelo.so %{baseinstdir}/program/gdbtrace @@ -1674,7 +1679,6 @@ rm -f %{buildroot}%{baseinstdir}/program/classes/smoketest.jar %{baseinstdir}/program/gengal.bin %{baseinstdir}/program/gnome-open-url %{baseinstdir}/program/gnome-open-url.bin -%{baseinstdir}/program/libhatchwindowfactorylo.so %{baseinstdir}/program/kde-open-url %{baseinstdir}/program/libi18nsearchlo.so %{baseinstdir}/program/libldapbe2lo.so @@ -1732,7 +1736,6 @@ rm -f %{buildroot}%{baseinstdir}/program/classes/smoketest.jar %{baseinstdir}/program/libiralo.so %{baseinstdir}/program/libitglo.so %{baseinstdir}/program/libitilo.so -%{baseinstdir}/program/libofficebean.so %{baseinstdir}/program/libfilelo.so %{baseinstdir}/program/libfilterconfiglo.so %{baseinstdir}/program/libflatlo.so @@ -1754,7 +1757,6 @@ rm -f %{buildroot}%{baseinstdir}/program/classes/smoketest.jar %{baseinstdir}/program/libmtfrendererlo.so %{baseinstdir}/program/libmysqllo.so %{baseinstdir}/program/libodbclo.so -%{baseinstdir}/program/libodbcbaselo.so %{baseinstdir}/program/liboglcanvaslo.so %{baseinstdir}/program/liboffacclo.so %{baseinstdir}/program/libooxlo.so @@ -1774,9 +1776,9 @@ rm -f %{buildroot}%{baseinstdir}/program/classes/smoketest.jar %{baseinstdir}/program/libsdbtlo.so %{baseinstdir}/program/libsddlo.so %{baseinstdir}/program/libsduilo.so -%{baseinstdir}/program/libspalo.so %{baseinstdir}/program/libspelllo.so %{baseinstdir}/program/libsrtrs1.so +%{baseinstdir}/program/libstoragefdlo.so %{baseinstdir}/program/libsvgiolo.so %{baseinstdir}/program/libsvxlo.so %{baseinstdir}/program/libsvxcorelo.so @@ -1785,7 +1787,6 @@ rm -f %{buildroot}%{baseinstdir}/program/classes/smoketest.jar %{baseinstdir}/program/libtextconv_dict.so %{baseinstdir}/program/libtextconversiondlgslo.so %{baseinstdir}/program/libtextfdlo.so -%{baseinstdir}/program/libtvhlp1.so %{baseinstdir}/program/libodfflatxmllo.so # TODO: shouldn't it have lo suffix? %{baseinstdir}/program/libucbhelper.so @@ -1851,13 +1852,11 @@ rm -f %{buildroot}%{baseinstdir}/program/classes/smoketest.jar %{baseinstdir}/program/resource/scnen-US.res %{baseinstdir}/program/resource/sden-US.res %{baseinstdir}/program/resource/sfxen-US.res -%{baseinstdir}/program/resource/spaen-US.res %{baseinstdir}/program/resource/sdbten-US.res %{baseinstdir}/program/resource/svlen-US.res %{baseinstdir}/program/resource/svten-US.res %{baseinstdir}/program/resource/svxen-US.res %{baseinstdir}/program/resource/swen-US.res -%{baseinstdir}/program/resource/textconversiondlgsen-US.res %{baseinstdir}/program/resource/tplen-US.res %{baseinstdir}/program/resource/uuien-US.res %{baseinstdir}/program/resource/upden-US.res @@ -1871,7 +1870,6 @@ rm -f %{buildroot}%{baseinstdir}/program/classes/smoketest.jar %{baseinstdir}/program/libsimplecanvaslo.so %{baseinstdir}/program/libslideshowlo.so %{baseinstdir}/program/libsofficeapp.so -%{baseinstdir}/program/spadmin.bin %{baseinstdir}/program/libstringresourcelo.so %{baseinstdir}/program/libsysshlo.so %{baseinstdir}/program/libucpcmis1lo.so @@ -1889,18 +1887,19 @@ rm -f %{buildroot}%{baseinstdir}/program/classes/smoketest.jar %dir %{baseinstdir}/share %dir %{baseinstdir}/share/Scripts %{baseinstdir}/share/Scripts/java +%{baseinstdir}/share/autocorr +%dir %{_datadir}/autocorr %dir %{baseinstdir}/share/autotext %{baseinstdir}/share/autotext/en-US %{baseinstdir}/share/basic %dir %{baseinstdir}/share/config %{baseinstdir}/share/config/images.zip %{baseinstdir}/share/config/images_crystal.zip +%{baseinstdir}/share/config/images_galaxy.zip %{baseinstdir}/share/config/images_hicontrast.zip %{baseinstdir}/share/config/images_oxygen.zip %{baseinstdir}/share/config/images_sifr.zip %{baseinstdir}/share/config/images_tango.zip -%{baseinstdir}/share/config/psetup.xpm -%{baseinstdir}/share/config/psetupl.xpm %dir %{baseinstdir}/share/config/soffice.cfg %{baseinstdir}/share/config/soffice.cfg/modules %if %{with langpacks} @@ -1926,9 +1925,7 @@ rm -f %{buildroot}%{baseinstdir}/program/classes/smoketest.jar %config %{baseinstdir}/share/psprint/psprint.conf %{baseinstdir}/share/psprint/driver %dir %{baseinstdir}/share/registry -%if 0%{?fedora} || 0%{?rhel} >= 7 %{baseinstdir}/share/registry/gnome.xcd -%endif %{baseinstdir}/share/registry/lingucomponent.xcd %{baseinstdir}/share/registry/main.xcd %{baseinstdir}/share/registry/oo-ad-ldap.xcd.sample @@ -1976,7 +1973,6 @@ rm -f %{buildroot}%{baseinstdir}/program/classes/smoketest.jar %{baseinstdir}/program/libsfxlo.so %{baseinstdir}/program/libsotlo.so %{baseinstdir}/program/libspllo.so -%{baseinstdir}/program/libspl_unxlo.so %{baseinstdir}/program/libsvllo.so %{baseinstdir}/program/libsvtlo.so %{baseinstdir}/program/libtklo.so @@ -1985,12 +1981,12 @@ rm -f %{buildroot}%{baseinstdir}/program/classes/smoketest.jar %{baseinstdir}/program/libucpfile1.so %{baseinstdir}/program/libutllo.so %{baseinstdir}/program/libvcllo.so +%{baseinstdir}/program/libvclopengllo.so +%{baseinstdir}/program/libwriterperfectlo.so %{baseinstdir}/program/libxmlscriptlo.so %{baseinstdir}/program/libxolo.so %{baseinstdir}/program/liblocalebe1lo.so -%if 0%{?fedora} || 0%{?rhel} >= 7 %{baseinstdir}/program/libucpgio1lo.so -%endif %{baseinstdir}/program/types/oovbaapi.rdb #share unopkg %dir %{baseinstdir}/share/extensions @@ -2009,11 +2005,14 @@ rm -f %{buildroot}%{baseinstdir}/program/classes/smoketest.jar %{baseinstdir}/program/soffice %{baseinstdir}/program/soffice.bin %{baseinstdir}/program/sofficerc -%{baseinstdir}/program/spadmin %{baseinstdir}/program/unoinfo %{baseinstdir}/program/libnpsoplugin.so %{baseinstdir}/program/oosplash %{baseinstdir}/program/shell/ +%dir %{baseinstdir}/share/filter +%{baseinstdir}/share/filter/oox-drawingml-adj-names +%{baseinstdir}/share/filter/oox-drawingml-cs-presets +%{baseinstdir}/share/filter/vml-shape-types %{baseinstdir}/share/xdg/ %{baseinstdir}/program/redirectrc %{_datadir}/applications/libreoffice-startcenter.desktop @@ -2042,26 +2041,28 @@ rm -f %{buildroot}%{baseinstdir}/program/classes/smoketest.jar %{_mandir}/man1/ooviewdoc.1* %post core -update-mime-database %{_datadir}/mime &> /dev/null || : update-desktop-database %{_datadir}/applications &> /dev/null || : for theme in hicolor locolor; do touch --no-create %{_datadir}/icons/$theme &>/dev/null || : done +touch --no-create %{_datadir}/mime/packages &> /dev/null || : %postun core -update-mime-database %{_datadir}/mime &> /dev/null || : update-desktop-database %{_datadir}/applications &> /dev/null || : if [ $1 -eq 0 ] ; then for theme in hicolor locolor; do touch --no-create %{_datadir}/icons/$theme &>/dev/null || : gtk-update-icon-cache -q %{_datadir}/icons/$theme &>/dev/null || : done + touch --no-create %{_datadir}/mime/packages &> /dev/null || : + update-mime-database %{?fedora:-n} %{_datadir}/mime &> /dev/null || : fi %posttrans core for theme in hicolor locolor; do gtk-update-icon-cache -q %{_datadir}/icons/$theme &>/dev/null || : done +update-mime-database %{?fedora:-n} %{_datadir}/mime &> /dev/null || : %files base @@ -2088,6 +2089,7 @@ done %{baseinstdir}/share/registry/base.xcd %{baseinstdir}/share/registry/reportbuilder.xcd %{baseinstdir}/program/sbase +%{_datadir}/appdata/libreoffice-base.appdata.xml %{_datadir}/applications/libreoffice-base.desktop %{_bindir}/oobase %{_mandir}/man1/oobase.1* @@ -2117,6 +2119,10 @@ update-desktop-database %{_datadir}/applications &> /dev/null || : %docdir %{baseinstdir}/share/extensions/nlpsolver/help %{baseinstdir}/share/extensions/nlpsolver +%files officebean +%{baseinstdir}/program/classes/officebean.jar +%{baseinstdir}/program/libofficebean.so + %files ogltrans %{baseinstdir}/program/libOGLTranslo.so %{baseinstdir}/share/config/soffice.cfg/simpress/transitions-ogl.xml @@ -2146,6 +2152,7 @@ update-desktop-database %{_datadir}/applications &> /dev/null || : %{baseinstdir}/program/libscopencllo.so %{baseinstdir}/program/libscuilo.so %{baseinstdir}/program/libsolverlo.so +%{baseinstdir}/program/libwpftcalclo.so %{baseinstdir}/program/resource/analysisen-US.res %{baseinstdir}/program/resource/dateen-US.res %{baseinstdir}/program/resource/foren-US.res @@ -2157,6 +2164,7 @@ update-desktop-database %{_datadir}/applications &> /dev/null || : %{baseinstdir}/share/registry/calc.xcd %{baseinstdir}/program/pagein-calc %{baseinstdir}/program/scalc +%{_datadir}/appdata/libreoffice-calc.appdata.xml %{_datadir}/applications/libreoffice-calc.desktop %{_bindir}/oocalc %{_mandir}/man1/oocalc.1* @@ -2172,6 +2180,7 @@ update-desktop-database %{_datadir}/applications &> /dev/null || : %{baseinstdir}/share/registry/draw.xcd %{baseinstdir}/program/pagein-draw %{baseinstdir}/program/sdraw +%{_datadir}/appdata/libreoffice-draw.appdata.xml %{_datadir}/applications/libreoffice-draw.desktop %{_bindir}/oodraw %{_mandir}/man1/oodraw.1* @@ -2185,7 +2194,6 @@ update-desktop-database %{_datadir}/applications &> /dev/null || : %files emailmerge %{baseinstdir}/program/mailmerge.py* %{baseinstdir}/program/msgbox.py* -%{baseinstdir}/program/officehelper.py* %files writer %{baseinstdir}/help/en-US/swriter.* @@ -2201,6 +2209,7 @@ update-desktop-database %{_datadir}/applications &> /dev/null || : %{baseinstdir}/share/registry/writer.xcd %{baseinstdir}/program/pagein-writer %{baseinstdir}/program/swriter +%{_datadir}/appdata/libreoffice-writer.appdata.xml %{_datadir}/applications/libreoffice-writer.desktop %{_bindir}/oowriter %{_mandir}/man1/oowriter.1* @@ -2226,6 +2235,7 @@ update-desktop-database %{_datadir}/applications &> /dev/null || : %{baseinstdir}/share/registry/impress.xcd %{baseinstdir}/program/pagein-impress %{baseinstdir}/program/simpress +%{_datadir}/appdata/libreoffice-impress.appdata.xml %{_datadir}/applications/libreoffice-impress.desktop %{_bindir}/ooimpress %{_mandir}/man1/ooimpress.1* @@ -2306,9 +2316,11 @@ update-desktop-database %{_datadir}/applications &> /dev/null || : %exclude %{baseinstdir}/share/Scripts/python/LibreLogo %{libo_python_sitearch}/uno.py* %{libo_python_sitearch}/unohelper.py* -%if 0%{libo_python3} +%{libo_python_sitearch}/officehelper.py* +%if 0%{libo_use_python3} %{libo_python_sitearch}/__pycache__/uno.cpython-* %{libo_python_sitearch}/__pycache__/unohelper.cpython-* +%{libo_python_sitearch}/__pycache__/officehelper.cpython-* %endif %{baseinstdir}/share/registry/pyuno.xcd @@ -2326,14 +2338,29 @@ update-desktop-database %{_datadir}/applications &> /dev/null || : %{baseinstdir}/program/libkde4be1lo.so %{baseinstdir}/program/libvclplug_kde4lo.so -%files appdata -%doc instdir/LICENSE -%dir %{_datadir}/appdata -%{_datadir}/appdata/*.appdata.xml - %endif %changelog +* Tue Jul 14 2015 David Tardon - 1:4.3.7.2-5 +- Related: rhbz#1205091 fix for ppc64 +- Related: rhbz#1205091 fix deps for gdb-debug-support subpackage + +* Mon May 25 2015 David Tardon - 1:4.3.7.2-4 +- Related: rhbz#1205091 add another bunch of fixes from Fedora +- rhbz#1219137 tweak ruler for happenchance side-effect +- Related: rhbz#1205091 do not filter out requires + +* Tue May 12 2015 David Tardon - 1:4.3.7.2-3 +- Related: rhbz#1205091 fix build on ppc64le + +* Mon May 11 2015 David Tardon - 1:4.3.7.2-2 +- Related: rhbz#1205091 add more fixes from f21 +- Resolves: tdf#91078 check also DBData modified, not only named expressions +- don't include red spelling underlines on bitmap copy/paste + +* Mon May 04 2015 David Tardon - 1:4.3.7.2-1 +- Resolves: rhbz#1205091 rebase to 4.3.7 + * Mon Dec 01 2014 Stephan Bergmann - 1:4.2.6.3-5 - Resolves: rhbz#1098973 crash on exit