From 91334d758663d9c0ffa4493accba3bba7c0ae56d Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Nov 02 2019 21:30:08 +0000 Subject: import libreoffice-5.3.6.1-23.el7 --- diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..67c56b8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,17 @@ +SOURCES/0168229624cfac409e766913506961a8-ucpp-1.3.2.tar.gz +SOURCES/17410483b5b5f267aa18b7e00b65e6e0-hsqldb_1_8_0.zip +SOURCES/185d60944ea767075d27247c3162b3bc-unowinreg.dll +SOURCES/35c94d2df8893241173de1d16b6034c0-swingExSrc.zip +SOURCES/798b2ffdc8bcfe7bca2cf92b62caf685-rhino1_5R5.zip +SOURCES/86b1daaa438f5a7bea9a52d7b9799ac0-xmlsec1-1.2.23.tar.gz +SOURCES/a7983f859eafb2677d7ff386a023bc40-xsltml_2.1.2.zip +SOURCES/libreoffice-5.3.6.1.tar.xz +SOURCES/libreoffice-base-symbolic.svg +SOURCES/libreoffice-calc-symbolic.svg +SOURCES/libreoffice-draw-symbolic.svg +SOURCES/libreoffice-help-5.3.6.1.tar.xz +SOURCES/libreoffice-impress-symbolic.svg +SOURCES/libreoffice-main-symbolic.svg +SOURCES/libreoffice-math-symbolic.svg +SOURCES/libreoffice-translations-5.3.6.1.tar.xz +SOURCES/libreoffice-writer-symbolic.svg diff --git a/.libreoffice.metadata b/.libreoffice.metadata new file mode 100644 index 0000000..6be2519 --- /dev/null +++ b/.libreoffice.metadata @@ -0,0 +1,17 @@ +452eba922e4f41603539c9dc39947d2271e47093 SOURCES/0168229624cfac409e766913506961a8-ucpp-1.3.2.tar.gz +7168b0f40aa5c72267899601c116d2348d2f56ec SOURCES/17410483b5b5f267aa18b7e00b65e6e0-hsqldb_1_8_0.zip +0619ed3a89644bef318df67db12045b2b590585b SOURCES/185d60944ea767075d27247c3162b3bc-unowinreg.dll +1acea86fd399ed7817879d36370d3d1f8b109050 SOURCES/35c94d2df8893241173de1d16b6034c0-swingExSrc.zip +8a90669029e107b61953b90ba11545fef586c2ca SOURCES/798b2ffdc8bcfe7bca2cf92b62caf685-rhino1_5R5.zip +a0cc67aa534167bb59bcca0dc6a7db2573814542 SOURCES/86b1daaa438f5a7bea9a52d7b9799ac0-xmlsec1-1.2.23.tar.gz +2d49e11b0b711970f494294dc3698f05eb294853 SOURCES/a7983f859eafb2677d7ff386a023bc40-xsltml_2.1.2.zip +a53d7b1105a3f6b2354360d8c429a941bd279c87 SOURCES/libreoffice-5.3.6.1.tar.xz +54fc749ba924f9ca4e0391caaf579ab344302038 SOURCES/libreoffice-base-symbolic.svg +9de544172d736d59589767000c1f657034a5d53d SOURCES/libreoffice-calc-symbolic.svg +0f6dc4726da0920869354fbe4b2924f9ac569b4a SOURCES/libreoffice-draw-symbolic.svg +b2e71f3d22c78cdda92a025239ad726993a35921 SOURCES/libreoffice-help-5.3.6.1.tar.xz +8c74dd667c660cc643c4d715dd50491ba92146d5 SOURCES/libreoffice-impress-symbolic.svg +c77acd04a7647b09745f9424ab0f65d52dfcd397 SOURCES/libreoffice-main-symbolic.svg +3857a55644148eb25ed1a594bd00d1262761fb39 SOURCES/libreoffice-math-symbolic.svg +e03af054c438537fdeabec0e02c6b43b74ab99e0 SOURCES/libreoffice-translations-5.3.6.1.tar.xz +d4f0674ad46a832120db956cc01a27fdc2060458 SOURCES/libreoffice-writer-symbolic.svg diff --git a/SOURCES/0001-Compensate-for-loss-of-Type-1-Standard-Symbols-L-sub.patch b/SOURCES/0001-Compensate-for-loss-of-Type-1-Standard-Symbols-L-sub.patch new file mode 100644 index 0000000..457f444 --- /dev/null +++ b/SOURCES/0001-Compensate-for-loss-of-Type-1-Standard-Symbols-L-sub.patch @@ -0,0 +1,230 @@ +From 3125b22729f983436b282fbebe7c1283ff513342 Mon Sep 17 00:00:00 2001 +From: Stephan Bergmann +Date: Fri, 22 Sep 2017 17:14:56 +0200 +Subject: [PATCH] Compensate for loss of Type 1 "Standard Symbols L" substitute + for "Symbol" +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +At least for me on Linux since LO 5.3, 'soffice +sw/qa/extras/rtfexport/data/fdo72031.rtf' shows "Å" (rendered in "DejaVu Sans") +instead of "⊕" (rendered in "Standard Symbols L"). That's presumably because +47ea13ef8dc8ab9aeded6121845e3ebd1d28b292 "Kill the old Unix layout engines" +removed support for Type 1 fonts (see "Ignore Type 1 fonts" in +FontCfgWrapper::addFontSet, vcl/unx/generic/fontmanager/fontconfig.cxx), and my +(Fedora 25) /usr/share/fonts/default/Type1/s050000l.pfb "Standard Symbols L" is +a Type 1 font. So we fell back to fontconfig's generic (weak) suggestion of +"DejaVu Sans" as a substitute for "Symbol". + +So extend our fc_local.conf to suggest our "OpenSymbol" as a substitute for +"Symbol". + +As that fc_local.conf was originally brought along by --with-fonts, which is +enabled by default but can be disabled, compilation of fc_local.conf from the +various snippets is moved to postprocess. + +macOS and Windows were never affected, as they both come with a "Symbol" font +installed in the system. (And we don't install fc_local.conf on Windows at +all.) + +Reviewed-on: https://gerrit.libreoffice.org/42670 +Reviewed-by: Stephan Bergmann +Tested-by: Stephan Bergmann +(cherry picked from commit e79f1261549d9c497a38ea1af8843a86883b02cd) + +Change-Id: I8d6d87f24974577fd66f5f3989f606237ebb3d75 +--- + Repository.mk | 1 + + external/more_fonts/Module_more_fonts.mk | 1 - + external/more_fonts/Package_conf.mk | 14 ---------- + .../{fonts/fc_local.conf => fc_local.snippet} | 6 ----- + extras/source/truetype/symbol/fc_local.snippet | 6 +++++ + postprocess/CustomTarget_fontconfig.mk | 30 ++++++++++++++++++++++ + postprocess/Module_postprocess.mk | 13 ++++++++++ + postprocess/Package_fontconfig.mk | 18 +++++++++++++ + vcl/unx/generic/fontmanager/fontconfig.cxx | 2 ++ + 9 files changed, 70 insertions(+), 21 deletions(-) + delete mode 100644 external/more_fonts/Package_conf.mk + rename external/more_fonts/{fonts/fc_local.conf => fc_local.snippet} (84%) + create mode 100644 extras/source/truetype/symbol/fc_local.snippet + create mode 100644 postprocess/CustomTarget_fontconfig.mk + create mode 100644 postprocess/Package_fontconfig.mk + +diff --git a/Repository.mk b/Repository.mk +index eef2560..81ad205 100644 +--- a/Repository.mk ++++ b/Repository.mk +@@ -778,6 +778,7 @@ $(eval $(call gb_Helper_register_packages_for_install,ure,\ + )) + + $(eval $(call gb_Helper_register_packages_for_install,ooo,\ ++ $(if $(filter-out WNT,$(OS)),postprocess_fontconfig) \ + $(if $(SYSTEM_LIBEXTTEXTCAT),,libexttextcat_fingerprint) \ + officecfg_misc \ + extras_glade \ +diff --git a/external/more_fonts/Module_more_fonts.mk b/external/more_fonts/Module_more_fonts.mk +index f584a8f..6e52247 100644 +--- a/external/more_fonts/Module_more_fonts.mk ++++ b/external/more_fonts/Module_more_fonts.mk +@@ -10,7 +10,6 @@ + $(eval $(call gb_Module_Module,more_fonts)) + + $(eval $(call gb_Module_add_targets,more_fonts,\ +- Package_conf \ + ExternalPackage_caladea \ + ExternalPackage_carlito \ + ExternalPackage_dejavu \ +diff --git a/external/more_fonts/Package_conf.mk b/external/more_fonts/Package_conf.mk +deleted file mode 100644 +index 2d259c2..0000000 +--- a/external/more_fonts/Package_conf.mk ++++ /dev/null +@@ -1,14 +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,more_fonts_conf,$(SRCDIR)/external/more_fonts/fonts)) +- +-$(eval $(call gb_Package_add_file,more_fonts_conf,$(LIBO_SHARE_FOLDER)/fonts/truetype/fc_local.conf,fc_local.conf)) +- +-# vim: set noet sw=4 ts=4: +diff --git a/external/more_fonts/fonts/fc_local.conf b/external/more_fonts/fc_local.snippet +similarity index 84% +rename from external/more_fonts/fonts/fc_local.conf +rename to external/more_fonts/fc_local.snippet +index 6af763c..cb49929 100644 +--- a/external/more_fonts/fonts/fc_local.conf ++++ b/external/more_fonts/fc_local.snippet +@@ -1,7 +1,3 @@ +- +- +- +- + + + +@@ -31,5 +27,3 @@ + Caladea + + +- +- +diff --git a/extras/source/truetype/symbol/fc_local.snippet b/extras/source/truetype/symbol/fc_local.snippet +new file mode 100644 +index 0000000..5b29e1d +--- /dev/null ++++ b/extras/source/truetype/symbol/fc_local.snippet +@@ -0,0 +1,6 @@ ++ ++ Symbol ++ ++ OpenSymbol ++ ++ +diff --git a/postprocess/CustomTarget_fontconfig.mk b/postprocess/CustomTarget_fontconfig.mk +new file mode 100644 +index 0000000..72ff3f3 +--- /dev/null ++++ b/postprocess/CustomTarget_fontconfig.mk +@@ -0,0 +1,30 @@ ++# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t; fill-column: 100 -*- ++# ++# This file is part of the LibreOffice project. ++# ++# This Source Code Form is subject to the terms of the Mozilla Public ++# License, v. 2.0. If a copy of the MPL was not distributed with this ++# file, You can obtain one at http://mozilla.org/MPL/2.0/. ++# ++ ++$(eval $(call gb_CustomTarget_CustomTarget,postprocess/fontconfig)) ++ ++$(call gb_CustomTarget_get_workdir,postprocess/fontconfig)/fc_local.conf: \ ++ $(SRCDIR)/extras/source/truetype/symbol/fc_local.snippet \ ++ $(SRCDIR)/postprocess/CustomTarget_fontconfig.mk \ ++ | $(call gb_CustomTarget_get_workdir,postprocess/fontconfig)/.dir ++ ++ifneq ($(filter MORE_FONTS,$(BUILD_TYPE)),) ++$(call gb_CustomTarget_get_workdir,postprocess/fontconfig)/fc_local.conf: \ ++ $(SRCDIR)/external/more_fonts/fc_local.snippet ++endif ++ ++$(call gb_CustomTarget_get_workdir,postprocess/fontconfig)/fc_local.conf: ++ printf '\n\n\n' >$@ ++ cat $(SRCDIR)/extras/source/truetype/symbol/fc_local.snippet >>$@ ++ifneq ($(filter MORE_FONTS,$(BUILD_TYPE)),) ++ cat $(SRCDIR)/external/more_fonts/fc_local.snippet >>$@ ++endif ++ printf '\n' >>$@ ++ ++# vim: set noet sw=4 ts=4: +diff --git a/postprocess/Module_postprocess.mk b/postprocess/Module_postprocess.mk +index 5775cfa..6ab59fc 100644 +--- a/postprocess/Module_postprocess.mk ++++ b/postprocess/Module_postprocess.mk +@@ -28,6 +28,19 @@ $(eval $(call gb_Module_add_targets,postprocess,\ + )) + endif + ++# For configurations that use fontconfig (cf. inclusion of ++# vcl/unx/generic/fontmanager/fontconfig.cxx in Library_vcl), add ++# instdir/share/fonts/truetype/fc_local.conf when it shall ++# contain content from at least one of external/more_fonts/fc_local.snippet ++# (conditional on MORE_FONTS in BUILD_TYPE) and ++# extras/source/truetype/symbol/fc_local.snippet (unconditional): ++ifneq ($(USING_X11)$(ENABLE_HEADLESS)$(filter ANDROID,$(OS)),) ++$(eval $(call gb_Module_add_targets,postprocess, \ ++ CustomTarget_fontconfig \ ++ Package_fontconfig \ ++)) ++endif ++ + $(eval $(call gb_Module_add_check_targets,postprocess,\ + CppunitTest_services \ + )) +diff --git a/postprocess/Package_fontconfig.mk b/postprocess/Package_fontconfig.mk +new file mode 100644 +index 0000000..37f096e +--- /dev/null ++++ b/postprocess/Package_fontconfig.mk +@@ -0,0 +1,18 @@ ++# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t; fill-column: 100 -*- ++# ++# This file is part of the LibreOffice project. ++# ++# This Source Code Form is subject to the terms of the Mozilla Public ++# License, v. 2.0. If a copy of the MPL was not distributed with this ++# file, You can obtain one at http://mozilla.org/MPL/2.0/. ++# ++ ++$(eval $(call gb_Package_Package,postprocess_fontconfig,$(call gb_CustomTarget_get_workdir,postprocess/fontconfig))) ++ ++$(eval $(call gb_Package_add_files,postprocess_fontconfig,$(LIBO_SHARE_FOLDER)/fonts/truetype, \ ++ fc_local.conf \ ++)) ++ ++$(eval $(call gb_Package_use_custom_target,postprocess_fontconfig,postprocess/fontconfig)) ++ ++# vim: set noet sw=4 ts=4: +diff --git a/vcl/unx/generic/fontmanager/fontconfig.cxx b/vcl/unx/generic/fontmanager/fontconfig.cxx +index c85b12f..baf31dd 100644 +--- a/vcl/unx/generic/fontmanager/fontconfig.cxx ++++ b/vcl/unx/generic/fontmanager/fontconfig.cxx +@@ -706,6 +706,8 @@ bool PrintFontManager::addFontconfigDir( const OString& rDirName ) + reinterpret_cast(aConfFileName.getStr()), FcTrue); + if( !bCfgOk ) + fprintf( stderr, "FcConfigParseAndLoad( \"%s\") => %d\n", aConfFileName.getStr(), bCfgOk ); ++ } else { ++ SAL_INFO("vcl", "cannot open " << aConfFileName); + } + + return true; +-- +2.9.5 + diff --git a/SOURCES/0001-Related-rhbz-1334915-tdf-100158-hack-using-startcent.patch b/SOURCES/0001-Related-rhbz-1334915-tdf-100158-hack-using-startcent.patch new file mode 100644 index 0000000..80232c4 --- /dev/null +++ b/SOURCES/0001-Related-rhbz-1334915-tdf-100158-hack-using-startcent.patch @@ -0,0 +1,50 @@ +From e60e1d83dca62060585cf4054cda9e897176590c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Thu, 23 Mar 2017 14:13:27 +0000 +Subject: [PATCH] Related: rhbz#1334915 tdf#100158 hack using startcenter icon + under wayland + +cause I can get no traction with gnome#779143 to allow changing wayland +app_ids for windows, so might as well bodge something to make us look +less pathetic than the broken app icon + +Change-Id: I9810ba4908dd06a2fdbb2e58e7ad6ff4978ddd43 +--- + vcl/unx/gtk3/gtk3gtkframe.cxx | 20 ++++++++++++++++++++ + 1 file changed, 20 insertions(+) + +diff --git a/vcl/unx/gtk3/gtk3gtkframe.cxx b/vcl/unx/gtk3/gtk3gtkframe.cxx +index 1a4823e..745d297 100644 +--- a/vcl/unx/gtk3/gtk3gtkframe.cxx ++++ b/vcl/unx/gtk3/gtk3gtkframe.cxx +@@ -1446,7 +1446,27 @@ void GtkSalFrame::Show( bool bVisible, bool /*bNoActivate*/ ) + m_pParent->addGrabLevel(); + } + ++#if defined(GDK_WINDOWING_WAYLAND) ++ //rhbz#1334915, gnome#779143, tdf#100158 ++ //gtk under wayland lacks a way to change the app_id ++ //of a window, so brute force everything as a ++ //startcenter when initially shown to at least get ++ //the default LibreOffice icon and not the broken ++ //app icon ++ if (GDK_IS_WAYLAND_DISPLAY(getGdkDisplay())) ++ { ++ OString sOrigName(g_get_prgname()); ++ g_set_prgname("libreoffice-startcenter"); ++ gtk_widget_show(m_pWindow); ++ g_set_prgname(sOrigName.getStr()); ++ } ++ else ++ { ++ gtk_widget_show(m_pWindow); ++ } ++#else + gtk_widget_show(m_pWindow); ++#endif + + if( isFloatGrabWindow() ) + { +-- +2.9.3 + diff --git a/SOURCES/0001-Related-rhbz-1422353-make-writer-behave-like-calc-an.patch b/SOURCES/0001-Related-rhbz-1422353-make-writer-behave-like-calc-an.patch new file mode 100644 index 0000000..213d571 --- /dev/null +++ b/SOURCES/0001-Related-rhbz-1422353-make-writer-behave-like-calc-an.patch @@ -0,0 +1,83 @@ +From c910d1dae1a9fcf0591098244debc863dd59618a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Fri, 17 Feb 2017 16:23:28 +0000 +Subject: [PATCH] Related: rhbz#1422353 make writer behave like calc and + impress + +and start off by default maximized + +Change-Id: I8d464c28b61991d27cdb732da50ebfa61802d001 +--- + officecfg/registry/data/org/openoffice/Setup.xcu | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +diff --git a/officecfg/registry/data/org/openoffice/Setup.xcu b/officecfg/registry/data/org/openoffice/Setup.xcu +index 0a936bb..9ab5243 100644 +--- a/officecfg/registry/data/org/openoffice/Setup.xcu ++++ b/officecfg/registry/data/org/openoffice/Setup.xcu +@@ -199,7 +199,7 @@ + private:factory/smath + + +- ++ ,,,;4; + + + 13 +@@ -243,7 +243,7 @@ + private:factory/swriter/GlobalDocument + + +- ++ ,,,;4; + + + 10 +@@ -287,7 +287,7 @@ + private:factory/swriter + + +- ++ ,,,;4; + + + 2 +@@ -401,7 +401,7 @@ + WriterCommands + + +- ++ ,,,;4; + + + 2 +@@ -437,7 +437,7 @@ + private:factory/swriter/web + + +- ++ ,,,;4; + + + 11 +@@ -692,7 +692,7 @@ + private:factory/schart + + +- ++ ,,,;4; + + + 1 +@@ -734,7 +734,7 @@ + private:factory/sdatabase + + +- ++ ,,,;4; + + + 12 +-- +2.9.3 + diff --git a/SOURCES/0001-Related-tdf-100925-background-not-getting-set-under-.patch b/SOURCES/0001-Related-tdf-100925-background-not-getting-set-under-.patch new file mode 100644 index 0000000..d367dff --- /dev/null +++ b/SOURCES/0001-Related-tdf-100925-background-not-getting-set-under-.patch @@ -0,0 +1,44 @@ +From dd53132119ca8640eea82bfaf26c85f4542ce8c2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Thu, 12 Apr 2018 14:53:20 +0100 +Subject: [PATCH] Related: tdf#100925 background not getting set under X + sometimes + +not sure why this is the case, but it is reminiscent of rhbz#1283420 which +results in missing glyphs in some circumstances +X11CairoTextRender::getCairoContext has a hack in it for that problem, whic +forces a read from the underlying X Drawable before writing to it which seems +to have the effect of syncing it up. + +So, just before drawing the bg, draw a glyph on it to get it synced, and then +overwrite it. + +Change-Id: I2ffff7e8e989b91821869d8b75a59728ac513d1b +Reviewed-on: https://gerrit.libreoffice.org/52819 +Tested-by: Jenkins +Reviewed-by: Eike Rathke +--- + sc/source/ui/view/gridwin4.cxx | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/sc/source/ui/view/gridwin4.cxx b/sc/source/ui/view/gridwin4.cxx +index cc8b0ee..ba3622d 100644 +--- a/sc/source/ui/view/gridwin4.cxx ++++ b/sc/source/ui/view/gridwin4.cxx +@@ -1038,7 +1038,12 @@ void ScGridWindow::DrawContent(OutputDevice &rDevice, const ScTableInfo& rTableI + } + + // paint the background +- rDevice.DrawRect(rDevice.PixelToLogic(aBackground)); ++ Rectangle aLogicRect(rDevice.PixelToLogic(aBackground)); ++ //tdf#100925, rhbz#1283420, Draw some text here, to get ++ //X11CairoTextRender::getCairoContext called, so that the forced read ++ //from the underlying X Drawable gets it to sync. ++ rDevice.DrawText(aLogicRect.BottomLeft(), " "); ++ rDevice.DrawRect(aLogicRect); + + // paint the editeng text + Rectangle aEditRect(Point(nScrX, nScrY), Size(aOutputData.GetScrW(), aOutputData.GetScrH())); +-- +2.14.3 + diff --git a/SOURCES/0001-Related-tdf-106100-recover-mangled-svg-in-presentati.patch b/SOURCES/0001-Related-tdf-106100-recover-mangled-svg-in-presentati.patch new file mode 100644 index 0000000..518896e --- /dev/null +++ b/SOURCES/0001-Related-tdf-106100-recover-mangled-svg-in-presentati.patch @@ -0,0 +1,67 @@ +From a74837a0e7c7259e4396aa5f05cf1384e256db35 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Mon, 20 Feb 2017 16:04:58 +0000 +Subject: [PATCH] Related: tdf#106100 recover mangled svg in presentations + +Change-Id: I77b452aa69a8341aa30e1e93d0d5ee8160533095 +--- + svgio/Module_svgio.mk | 4 ---- + svgio/source/svgreader/svgsvgnode.cxx | 27 +++------------------------ + 2 files changed, 3 insertions(+), 28 deletions(-) + +diff --git a/svgio/Module_svgio.mk b/svgio/Module_svgio.mk +index 29ef97d..8b827fc 100644 +--- a/svgio/Module_svgio.mk ++++ b/svgio/Module_svgio.mk +@@ -22,8 +22,4 @@ $(eval $(call gb_Module_add_targets,svgio,\ + Library_svgio \ + )) + +-$(eval $(call gb_Module_add_check_targets,svgio,\ +- CppunitTest_svgio \ +-)) +- + # vim: set noet ts=4 sw=4: +diff --git a/svgio/source/svgreader/svgsvgnode.cxx b/svgio/source/svgreader/svgsvgnode.cxx +index 7800666..087c621 100644 +--- a/svgio/source/svgreader/svgsvgnode.cxx ++++ b/svgio/source/svgreader/svgsvgnode.cxx +@@ -522,32 +522,11 @@ namespace svgio + } + else + { +- // There exists no parent to resolve relative width or height. +- // Use child size as fallback and expand to aspect ratio given +- // by the viewBox. No mapping. +- // We get viewport >= content, therefore no clipping. +- bNeedsMapping = false; +- const basegfx::B2DRange aChildRange( +- aSequence.getB2DRange( +- drawinglayer::geometry::ViewInformation2D())); +- const double fChildWidth(aChildRange.getWidth()); +- const double fChildHeight(aChildRange.getHeight()); +- const double fLeft(aChildRange.getMinX()); +- const double fTop(aChildRange.getMinY()); +- if ( fChildWidth / fViewBoxWidth > fChildHeight / fViewBoxHeight ) +- { // expand y +- fW = fChildWidth; +- fH = fChildWidth / fViewBoxRatio; +- } +- else +- { // expand x +- fH = fChildHeight; +- fW = fChildHeight * fViewBoxRatio; +- } +- aSvgCanvasRange = basegfx::B2DRange(fLeft, fTop, fLeft + fW, fTop + fH); ++ fW = fViewBoxWidth; ++ fH = fViewBoxHeight; ++ aSvgCanvasRange = basegfx::B2DRange(0.0, 0.0, fW, fH); + } + +- + if (bNeedsMapping) + { + // create mapping +-- +2.9.3 + diff --git a/SOURCES/0001-Related-tdf-106577-extend-damage-rect-a-little-for-T.patch b/SOURCES/0001-Related-tdf-106577-extend-damage-rect-a-little-for-T.patch new file mode 100644 index 0000000..269644d --- /dev/null +++ b/SOURCES/0001-Related-tdf-106577-extend-damage-rect-a-little-for-T.patch @@ -0,0 +1,29 @@ +From edc58993ec81824d2822f0aa623fcbaa0a679fa5 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Mon, 20 Mar 2017 15:18:30 +0000 +Subject: [PATCH] Related: tdf#106577 extend damage rect a little for + TrackFrame + +Change-Id: I007ab53ba841c7c4a0f13bc9e7e306e88303191f +--- + vcl/headless/svpgdi.cxx | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/vcl/headless/svpgdi.cxx b/vcl/headless/svpgdi.cxx +index 925a5adecd55..8449c9988da0 100644 +--- a/vcl/headless/svpgdi.cxx ++++ b/vcl/headless/svpgdi.cxx +@@ -1189,6 +1189,10 @@ void SvpSalGraphics::invert(const basegfx::B2DPolygon &rPoly, SalInvert nFlags) + cairo_set_dash(cr, dashLengths, 2, 0); + + extents = getClippedStrokeDamage(cr); ++ //see tdf#106577 under wayland, some pixel droppings seen, maybe we're ++ //out by one somewhere, or cairo_stroke_extents is confused by ++ //dashes/line width ++ extents.grow(1); + + cairo_stroke(cr); + } +-- +2.17.1 + diff --git a/SOURCES/0001-Resolves-rhbz-1400287-resizing-properties-dialog-hid.patch b/SOURCES/0001-Resolves-rhbz-1400287-resizing-properties-dialog-hid.patch new file mode 100644 index 0000000..fea12b6 --- /dev/null +++ b/SOURCES/0001-Resolves-rhbz-1400287-resizing-properties-dialog-hid.patch @@ -0,0 +1,52 @@ +From 98d7e0917f0e434e1e291e1d741715cd90161dc5 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Tue, 29 Aug 2017 14:01:09 +0100 +Subject: [PATCH] Resolves: rhbz#1400287 resizing properties dialog hides + widgets +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Change-Id: I5d066f53c5bdfb4dd50d60c5cb4b66e425c0293c +Reviewed-on: https://gerrit.libreoffice.org/41696 +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara +(cherry picked from commit 57d3e8b35d18c6fb329badbab8a8c28020253a40) +--- + sfx2/source/dialog/dinfdlg.cxx | 12 +++++++----- + 1 file changed, 7 insertions(+), 5 deletions(-) + +diff --git a/sfx2/source/dialog/dinfdlg.cxx b/sfx2/source/dialog/dinfdlg.cxx +index b2bcbf2..f8dc73d 100644 +--- a/sfx2/source/dialog/dinfdlg.cxx ++++ b/sfx2/source/dialog/dinfdlg.cxx +@@ -1505,6 +1505,7 @@ CustomPropertiesWindow::CustomPropertiesWindow(vcl::Window* pParent, + m_aDurationField->SetPosSizePixel(aPos, aSize); + m_aDateField->SetPosSizePixel(aPos, aSize); + m_aTimeField->SetPosSizePixel(aPos, aSize); ++ m_aYesNoButton->SetPosSizePixel(aPos, aSize); + + m_aEditLoseFocusIdle.SetPriority( SchedulerPriority::LOWEST ); + m_aEditLoseFocusIdle.SetIdleHdl( LINK( this, CustomPropertiesWindow, EditTimeoutHdl ) ); +@@ -1795,12 +1796,13 @@ void CustomPropertiesWindow::updateLineWidth() + + vcl::Window** pCurrent = pWindows; + vcl::Window** pNewCurrent = pNewWindows; +- while ( *pCurrent ) ++ while (*pCurrent) + { +- Size aSize = (*pCurrent)->GetSizePixel(); +- Point aPos = (*pCurrent)->GetPosPixel(); +- aPos.Y() = (*pNewCurrent)->GetPosPixel().Y(); +- (*pNewCurrent)->SetPosSizePixel( aPos, aSize ); ++ Size aSize = (*pNewCurrent)->GetSizePixel(); ++ aSize.Width() = (*pCurrent)->GetSizePixel().Width(); ++ Point aPos = (*pNewCurrent)->GetPosPixel(); ++ aPos.X() = (*pCurrent)->GetPosPixel().X(); ++ (*pNewCurrent)->SetPosSizePixel(aPos, aSize); + pCurrent++; + pNewCurrent++; + } +-- +2.9.4 + diff --git a/SOURCES/0001-Resolves-rhbz-1432468-disable-opencl-by-default.patch b/SOURCES/0001-Resolves-rhbz-1432468-disable-opencl-by-default.patch new file mode 100644 index 0000000..d17e9c0 --- /dev/null +++ b/SOURCES/0001-Resolves-rhbz-1432468-disable-opencl-by-default.patch @@ -0,0 +1,26 @@ +From b54cfe9d3d22fdd40f7015bd343df8620c983779 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Mon, 27 Mar 2017 11:47:01 +0100 +Subject: [PATCH] Resolves: rhbz#1432468 disable opencl by default + +Change-Id: Ie037fcabdd219f195425979dd721501fb5527573 +--- + officecfg/registry/schema/org/openoffice/Office/Common.xcs | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/officecfg/registry/schema/org/openoffice/Office/Common.xcs b/officecfg/registry/schema/org/openoffice/Office/Common.xcs +index 946bd32..284d694 100644 +--- a/officecfg/registry/schema/org/openoffice/Office/Common.xcs ++++ b/officecfg/registry/schema/org/openoffice/Office/Common.xcs +@@ -5670,7 +5670,7 @@ + Determines whether OpenCL can be used, when available, to speed up + some operations. + +- true ++ false + + + +-- +2.9.3 + diff --git a/SOURCES/0001-Resolves-rhbz-1467512-mask-not-created-as-1-bit-dept.patch b/SOURCES/0001-Resolves-rhbz-1467512-mask-not-created-as-1-bit-dept.patch new file mode 100644 index 0000000..c05ca28 --- /dev/null +++ b/SOURCES/0001-Resolves-rhbz-1467512-mask-not-created-as-1-bit-dept.patch @@ -0,0 +1,206 @@ +From 97406f8816b0c10d73f6070e07c8181242dc1596 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Fri, 7 Jul 2017 13:59:27 +0100 +Subject: [PATCH] Resolves: rhbz#1467512 mask not created as 1 bit depth +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Change-Id: Ib5bdd594efd41eb881dfc4e2454b72e4739ffd56 + +Resolves: tdf#104141 CAIRO_FORMAT_A1 vs N1BitLsbPal + +where vcl transparency is the opposite of cairo's so we've been switching the +source color to the opposite for drawing on CAIRO_FORMAT_A1 and then sucking +out the bits "as-is" to give the right results. + +Now instead use the right source color and toggle CAIRO_FORMAT_A1 bitmaps to +N1BitLsbPal in getBitmap. + +Then additionally toggle all N1BitLsbPal bitmaps input to drawBitmap to +CAIRO_FORMAT_A1 when making a cairo surface from them. + +Change-Id: I45c6d4f3894c6a22a07a3bd65950cd8070e8eaff +Reviewed-on: https://gerrit.libreoffice.org/40453 +Tested-by: Jenkins +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara + +Resolves: tdf#111483 1 bit bitmaps with non-standard black/white indexes + +can be left "untoggled" when converted to cairo A1 + +Change-Id: I18f3e2109cd4b57bce584545090e26c931de1200 +Reviewed-on: https://gerrit.libreoffice.org/41895 +Tested-by: Jenkins +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara + +Resolves: tdf#111073 incorrect gif background color + +a) set correct palette entries for the 1bit bitmap returned +b) only use a BITMASK for the mask (like its AnimatedGraphicPrimitive2D +brother in drawinglayer does) + +Change-Id: I704997de554dc4d0e523458d45ab329815b5046a +--- + slideshow/source/engine/shapes/gdimtftools.cxx | 2 +- + vcl/headless/svpgdi.cxx | 76 +++++++++++++++++++------- + 2 files changed, 56 insertions(+), 22 deletions(-) + +diff --git a/slideshow/source/engine/shapes/gdimtftools.cxx b/slideshow/source/engine/shapes/gdimtftools.cxx +index 6cd569e..efa4303 100644 +--- a/slideshow/source/engine/shapes/gdimtftools.cxx ++++ b/slideshow/source/engine/shapes/gdimtftools.cxx +@@ -287,7 +287,7 @@ bool getAnimationFromGraphic( VectorOfMtfAnimationFrames& o_rFrames, + pVDev->EnableMapMode( false ); + + // setup mask VDev (alpha VDev is currently rather slow) +- ScopedVclPtrInstance< VirtualDevice > pVDevMask; ++ ScopedVclPtrInstance pVDevMask(DeviceFormat::BITMASK); + pVDevMask->SetOutputSizePixel( aAnimSize ); + pVDevMask->EnableMapMode( false ); + +diff --git a/vcl/headless/svpgdi.cxx b/vcl/headless/svpgdi.cxx +index 1b49133..c40aad1 100644 +--- a/vcl/headless/svpgdi.cxx ++++ b/vcl/headless/svpgdi.cxx +@@ -99,6 +99,30 @@ bool SvpSalGraphics::blendAlphaBitmap( const SalTwoRect&, const SalBitmap&, cons + + namespace + { ++ cairo_format_t getCairoFormat(const BitmapBuffer& rBuffer) ++ { ++ cairo_format_t nFormat; ++ assert(rBuffer.mnBitCount == 32 || rBuffer.mnBitCount == 1); ++ if (rBuffer.mnBitCount == 32) ++ nFormat = CAIRO_FORMAT_ARGB32; ++ else ++ nFormat = CAIRO_FORMAT_A1; ++ return nFormat; ++ } ++ ++ void Toggle1BitTransparency(const BitmapBuffer& rBuf) ++ { ++ assert(rBuf.maPalette.GetBestIndex(BitmapColor(Color(COL_BLACK))) == 0); ++ // TODO: make upper layers use standard alpha ++ if (getCairoFormat(rBuf) == CAIRO_FORMAT_A1) ++ { ++ const int nImageSize = rBuf.mnHeight * rBuf.mnScanlineSize; ++ unsigned char* pDst = rBuf.mpBits; ++ for (int i = nImageSize; --i >= 0; ++pDst) ++ *pDst = ~*pDst; ++ } ++ } ++ + class SourceHelper + { + public: +@@ -176,10 +200,14 @@ namespace + pAlphaBits = new unsigned char[nImageSize]; + memcpy(pAlphaBits, pMaskBuf->mpBits, nImageSize); + +- // TODO: make upper layers use standard alpha +- unsigned char* pDst = pAlphaBits; +- for (int i = nImageSize; --i >= 0; ++pDst) +- *pDst = ~*pDst; ++ const sal_Int32 nBlackIndex = pMaskBuf->maPalette.GetBestIndex(BitmapColor(Color(COL_BLACK))); ++ if (nBlackIndex == 0) ++ { ++ // TODO: make upper layers use standard alpha ++ unsigned char* pDst = pAlphaBits; ++ for (int i = nImageSize; --i >= 0; ++pDst) ++ *pDst = ~*pDst; ++ } + + mask = cairo_image_surface_create_for_data(pAlphaBits, + CAIRO_FORMAT_A1, +@@ -894,7 +922,7 @@ void SvpSalGraphics::applyColor(cairo_t *cr, SalColor aColor) + } + else + { +- double fSet = aColor == COL_BLACK ? 0.0 : 1.0; ++ double fSet = aColor == COL_BLACK ? 1.0 : 0.0; + cairo_set_source_rgba(cr, 1, 1, 1, fSet); + cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE); + } +@@ -951,8 +979,12 @@ static basegfx::B2DRange renderSource(cairo_t* cr, const SalTwoRect& rTR, + if (rTR.mnSrcWidth != 0 && rTR.mnSrcHeight != 0) { + cairo_scale(cr, (double)(rTR.mnDestWidth)/rTR.mnSrcWidth, ((double)rTR.mnDestHeight)/rTR.mnSrcHeight); + } ++ ++ cairo_save(cr); + cairo_set_source_surface(cr, source, -rTR.mnSrcX, -rTR.mnSrcY); ++ cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE); + cairo_paint(cr); ++ cairo_restore(cr); + + return extents; + } +@@ -1016,12 +1048,16 @@ void SvpSalGraphics::copyBits( const SalTwoRect& rTR, + + void SvpSalGraphics::drawBitmap(const SalTwoRect& rTR, const SalBitmap& rSourceBitmap) + { +- SourceHelper aSurface(rSourceBitmap); +- cairo_surface_t* source = aSurface.getSurface(); +- if (!source) ++ if (rSourceBitmap.GetBitCount() == 1) + { +- SAL_WARN("vcl.gdi", "unsupported SvpSalGraphics::drawBitmap case"); ++ MaskHelper aMask(rSourceBitmap); ++ cairo_surface_t* source = aMask.getMask(); ++ copySource(rTR, source); ++ return; + } ++ ++ SourceHelper aSurface(rSourceBitmap); ++ cairo_surface_t* source = aSurface.getSurface(); + copySource(rTR, source); + } + +@@ -1107,7 +1143,14 @@ void SvpSalGraphics::drawMask( const SalTwoRect& rTR, + SalBitmap* SvpSalGraphics::getBitmap( long nX, long nY, long nWidth, long nHeight ) + { + SvpSalBitmap* pBitmap = new SvpSalBitmap(); +- pBitmap->Create(Size(nWidth, nHeight), 32, BitmapPalette()); ++ BitmapPalette aPal; ++ if (GetBitCount() == 1) ++ { ++ aPal.SetEntryCount(2); ++ aPal[0] = Color(COL_BLACK); ++ aPal[1] = Color(COL_WHITE); ++ } ++ pBitmap->Create(Size(nWidth, nHeight), GetBitCount(), aPal); + + cairo_surface_t* target = SvpSalGraphics::createCairoSurface(pBitmap->GetBuffer()); + cairo_t* cr = cairo_create(target); +@@ -1118,6 +1161,8 @@ SalBitmap* SvpSalGraphics::getBitmap( long nX, long nY, long nWidth, long nHeigh + cairo_destroy(cr); + cairo_surface_destroy(target); + ++ Toggle1BitTransparency(*pBitmap->GetBuffer()); ++ + return pBitmap; + } + +@@ -1230,17 +1275,6 @@ bool SvpSalGraphics::drawEPS( long, long, long, long, void*, sal_uLong ) + + namespace + { +- cairo_format_t getCairoFormat(const BitmapBuffer& rBuffer) +- { +- cairo_format_t nFormat; +- assert(rBuffer.mnBitCount == 32 || rBuffer.mnBitCount == 1); +- if (rBuffer.mnBitCount == 32) +- nFormat = CAIRO_FORMAT_ARGB32; +- else +- nFormat = CAIRO_FORMAT_A1; +- return nFormat; +- } +- + bool isCairoCompatible(const BitmapBuffer* pBuffer) + { + if (!pBuffer) +-- +2.9.4 + diff --git a/SOURCES/0001-Resolves-rhbz-1471983-fatal-exception-on-older-confi.patch b/SOURCES/0001-Resolves-rhbz-1471983-fatal-exception-on-older-confi.patch new file mode 100644 index 0000000..5acbe76 --- /dev/null +++ b/SOURCES/0001-Resolves-rhbz-1471983-fatal-exception-on-older-confi.patch @@ -0,0 +1,37 @@ +From f1ccc7aaf11dfcff554306e27350459951d746e0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Mon, 9 Oct 2017 14:28:24 +0100 +Subject: [PATCH] Resolves: rhbz#1471983 fatal exception on older config + without slide bg panel + +Change-Id: Id437bdd8feac06da42c180ff4f7759ec282fa8d4 +--- + sd/source/ui/sidebar/SlideBackground.cxx | 11 +++++++---- + 1 file changed, 7 insertions(+), 4 deletions(-) + +diff --git a/sd/source/ui/sidebar/SlideBackground.cxx b/sd/source/ui/sidebar/SlideBackground.cxx +index f98e5be..3e3df8b 100644 +--- a/sd/source/ui/sidebar/SlideBackground.cxx ++++ b/sd/source/ui/sidebar/SlideBackground.cxx +@@ -422,11 +422,14 @@ void SlideBackground::SetPanelTitle( const OUString& rTitle ) + if ( !xPanels.is() ) + return; + +- Reference xPanel ( xPanels->getByName("SlideBackgroundPanel"), uno::UNO_QUERY); +- if ( !xPanel.is() ) +- return; ++ if (xPanels->hasByName("SlideBackgroundPanel")) ++ { ++ Reference xPanel ( xPanels->getByName("SlideBackgroundPanel"), uno::UNO_QUERY); ++ if ( !xPanel.is() ) ++ return; + +- xPanel->setTitle( rTitle ); ++ xPanel->setTitle( rTitle ); ++ } + } + + void SlideBackground::addListener() +-- +2.9.5 + diff --git a/SOURCES/0001-Resolves-rhbz-1505379-gtk3-X-open-comboboxes-block-s.patch b/SOURCES/0001-Resolves-rhbz-1505379-gtk3-X-open-comboboxes-block-s.patch new file mode 100644 index 0000000..a3e89bf --- /dev/null +++ b/SOURCES/0001-Resolves-rhbz-1505379-gtk3-X-open-comboboxes-block-s.patch @@ -0,0 +1,47 @@ +From 1e5e0f3ff363bdd0ed2d2e86113b42d6708f9be8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Tue, 7 Nov 2017 13:26:27 +0000 +Subject: [PATCH] Resolves: rhbz#1505379 gtk3+X: open comboboxes block session + +if there's none of our windows under the mouse when clicked then close the +popup window. + +There's similar code for gtk2, but using deprecated apis, do this again but +with the recommended apis + +Change-Id: I9d844d098d09d0109dcbbc06390562e83edda397 +--- + vcl/unx/gtk3/gtk3gtkframe.cxx | 16 +++++++++++----- + 1 file changed, 11 insertions(+), 5 deletions(-) + +diff --git a/vcl/unx/gtk3/gtk3gtkframe.cxx b/vcl/unx/gtk3/gtk3gtkframe.cxx +index 1535f11..3b539a7 100644 +--- a/vcl/unx/gtk3/gtk3gtkframe.cxx ++++ b/vcl/unx/gtk3/gtk3gtkframe.cxx +@@ -2608,12 +2608,18 @@ gboolean GtkSalFrame::signalButton( GtkWidget*, GdkEventButton* pEvent, gpointer + + vcl::DeletionListener aDel( pThis ); + +- if (pThis->isFloatGrabWindow() && pEvent->window != widget_get_window(pThis->getMouseEventWidget())) ++ if (pThis->isFloatGrabWindow()) + { +- if (pEvent->type == GDK_BUTTON_PRESS) +- pThis->closePopup(); +- else if (pEvent->type == GDK_BUTTON_RELEASE) +- return true; ++ //rhbz#1505379 if the window that got the event isn't our one, or there's none ++ //of our windows under the mouse then close this popup window ++ if (pEvent->window != widget_get_window(pThis->getMouseEventWidget()) || ++ gdk_device_get_window_at_position(pEvent->device, nullptr, nullptr) == nullptr) ++ { ++ if (pEvent->type == GDK_BUTTON_PRESS) ++ pThis->closePopup(); ++ else if (pEvent->type == GDK_BUTTON_RELEASE) ++ return true; ++ } + } + + if (!aDel.isDeleted()) +-- +2.9.5 + diff --git a/SOURCES/0001-Resolves-rhbz-1535541-fdo-88004-mimetypes-are-.macro.patch b/SOURCES/0001-Resolves-rhbz-1535541-fdo-88004-mimetypes-are-.macro.patch new file mode 100644 index 0000000..07df943 --- /dev/null +++ b/SOURCES/0001-Resolves-rhbz-1535541-fdo-88004-mimetypes-are-.macro.patch @@ -0,0 +1,460 @@ +From 0948ea6d8d487bfe6d379ef11ecfc3643b050ddc Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Thu, 18 Jan 2018 11:52:16 +0000 +Subject: [PATCH] Resolves: rhbz#1535541 fdo#88004 mimetypes are .macroEnabled + not .macroenabled + +Change-Id: If7942ec9d4cd40f29fae2b9a8f76df1ef08bfc17 +Reviewed-on: https://gerrit.libreoffice.org/48120 +Reviewed-by: Michael Stahl +Tested-by: Michael Stahl +--- + sysui/desktop/freedesktop/freedesktop-menus.spec | 24 +++++++++---------- + sysui/desktop/macosx/Info.plist.in | 28 +++++++++++----------- + sysui/desktop/menus/calc.desktop | 2 +- + sysui/desktop/menus/impress.desktop | 2 +- + sysui/desktop/menus/writer.desktop | 2 +- + sysui/desktop/mimetypes/ms-excel-sheet-12.desktop | 2 +- + sysui/desktop/mimetypes/ms-excel-sheet-12.keys | 2 +- + .../mimetypes/ms-excel-sheet-binary-12.desktop | 2 +- + .../mimetypes/ms-excel-sheet-binary-12.keys | 2 +- + .../desktop/mimetypes/ms-excel-template-12.desktop | 2 +- + sysui/desktop/mimetypes/ms-excel-template-12.keys | 2 +- + .../ms-powerpoint-presentation-12.desktop | 2 +- + .../mimetypes/ms-powerpoint-presentation-12.keys | 2 +- + .../mimetypes/ms-powerpoint-template-12.desktop | 2 +- + .../mimetypes/ms-powerpoint-template-12.keys | 2 +- + .../desktop/mimetypes/ms-word-document-12.desktop | 2 +- + sysui/desktop/mimetypes/ms-word-document-12.keys | 2 +- + .../desktop/mimetypes/ms-word-template-12.desktop | 2 +- + sysui/desktop/mimetypes/ms-word-template-12.keys | 2 +- + sysui/desktop/mimetypes/openoffice.applications | 2 +- + sysui/desktop/mimetypes/openoffice.mime | 14 +++++------ + sysui/desktop/solaris/mime.types | 12 +++++----- + 22 files changed, 57 insertions(+), 57 deletions(-) + +diff --git a/sysui/desktop/freedesktop/freedesktop-menus.spec b/sysui/desktop/freedesktop/freedesktop-menus.spec +index 9c952a50ff01..68fa32293c45 100755 +--- a/sysui/desktop/freedesktop/freedesktop-menus.spec ++++ b/sysui/desktop/freedesktop/freedesktop-menus.spec +@@ -231,17 +231,17 @@ application/vnd.sun.xml.base odb + application/vnd.stardivision.math smf + application/vnd.openofficeorg.extension oxt + application/vnd.openxmlformats-officedocument.wordprocessingml.document docx +-application/vnd.ms-word.document.macroenabled.12 docm ++application/vnd.ms-word.document.macroEnabled.12 docm + application/vnd.openxmlformats-officedocument.wordprocessingml.template dotx +-application/vnd.ms-word.template.macroenabled.12 dotm ++application/vnd.ms-word.template.macroEnabled.12 dotm + application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx +-application/vnd.ms-excel.sheet.macroenabled.12 xlsm ++application/vnd.ms-excel.sheet.macroEnabled.12 xlsm + application/vnd.openxmlformats-officedocument.spreadsheetml.template xltx +-application/vnd.ms-excel.template.macroenabled.12 xltm ++application/vnd.ms-excel.template.macroEnabled.12 xltm + application/vnd.openxmlformats-officedocument.presentationml.presentation pptx +-application/vnd.ms-powerpoint.presentation.macroenabled.12 pptm ++application/vnd.ms-powerpoint.presentation.macroEnabled.12 pptm + application/vnd.openxmlformats-officedocument.presentationml.template potx +-application/vnd.ms-powerpoint.template.macroenabled.12 potm ++application/vnd.ms-powerpoint.template.macroEnabled.12 potm + END + + # and replace the original file +@@ -320,17 +320,17 @@ application/vnd.oasis.opendocument.database; %unixfilename -view %s + application/vnd.sun.xml.base; %unixfilename -view %s + application/vnd.openofficeorg.extension; %unixfilename %s + application/vnd.openxmlformats-officedocument.wordprocessingml.document; %unixfilename -view %s +-application/vnd.ms-word.document.macroenabled.12;%unixfilename -view %s ++application/vnd.ms-word.document.macroEnabled.12;%unixfilename -view %s + application/vnd.openxmlformats-officedocument.wordprocessingml.template; %unixfilename -view %s +-application/vnd.ms-word.template.macroenabled.12; %unixfilename -view %s ++application/vnd.ms-word.template.macroEnabled.12; %unixfilename -view %s + application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; %unixfilename -view %s +-application/vnd.ms-excel.sheet.macroenabled.12; %unixfilename -view %s ++application/vnd.ms-excel.sheet.macroEnabled.12; %unixfilename -view %s + application/vnd.openxmlformats-officedocument.spreadsheetml.template; %unixfilename -view %s +-application/vnd.ms-excel.template.macroenabled.12; %unixfilename -view %s ++application/vnd.ms-excel.template.macroEnabled.12; %unixfilename -view %s + application/vnd.openxmlformats-officedocument.presentationml.presentation; %unixfilename -view %s +-application/vnd.ms-powerpoint.presentation.macroenabled.12; %unixfilename -view %s ++application/vnd.ms-powerpoint.presentation.macroEnabled.12; %unixfilename -view %s + application/vnd.openxmlformats-officedocument.presentationml.template; %unixfilename -view %s +-application/vnd.ms-powerpoint.template.macroenabled.12; %unixfilename -view %s ++application/vnd.ms-powerpoint.template.macroEnabled.12; %unixfilename -view %s + END + + # and replace the original file +diff --git a/sysui/desktop/macosx/Info.plist.in b/sysui/desktop/macosx/Info.plist.in +index 75980deef9e6..608140d2911d 100755 +--- a/sysui/desktop/macosx/Info.plist.in ++++ b/sysui/desktop/macosx/Info.plist.in +@@ -779,7 +779,7 @@ + UTTypeDescription + Office Open XML word processing document (macros enabled) + UTTypeIdentifier +- org.openxmlformats.wordprocessingml.document.macroenabled ++ org.openxmlformats.wordprocessingml.document.macroEnabled + UTTypeTagSpecification + + public.filename-extension +@@ -824,7 +824,7 @@ + UTTypeDescription + Office Open XML word processing template (macros enabled) + UTTypeIdentifier +- org.openxmlformats.wordprocessingml.template.macroenabled ++ org.openxmlformats.wordprocessingml.template.macroEnabled + UTTypeTagSpecification + + public.filename-extension +@@ -871,7 +871,7 @@ + UTTypeDescription + Office Open XML spreadsheet template (macros enabled) + UTTypeIdentifier +- org.openxmlformats.spreadsheetml.template.macroenabled ++ org.openxmlformats.spreadsheetml.template.macroEnabled + UTTypeTagSpecification + + public.filename-extension +@@ -916,7 +916,7 @@ + UTTypeDescription + Microsoft Excel 2007 spreadsheet (macros enabled) + UTTypeIdentifier +- com.microsoft.excel.sheet.binary.macroenabled ++ com.microsoft.excel.sheet.binary.macroEnabled + UTTypeTagSpecification + + public.filename-extension +@@ -939,7 +939,7 @@ + UTTypeDescription + Office Open XML spreadsheet (macros enabled) + UTTypeIdentifier +- org.openxmlformats.spreadsheetml.sheet.macroenabled ++ org.openxmlformats.spreadsheetml.sheet.macroEnabled + UTTypeTagSpecification + + public.filename-extension +@@ -986,7 +986,7 @@ + UTTypeDescription + Office Open XML presentation (macros enabled) + UTTypeIdentifier +- org.openxmlformats.presentationml.presentation.macroenabled ++ org.openxmlformats.presentationml.presentation.macroEnabled + UTTypeTagSpecification + + public.filename-extension +@@ -1032,7 +1032,7 @@ + UTTypeDescription + Office Open XML presentation template (macros enabled) + UTTypeIdentifier +- org.openxmlformats.presentationml.template.macroenabled ++ org.openxmlformats.presentationml.template.macroEnabled + UTTypeTagSpecification + + public.filename-extension +@@ -1789,18 +1789,18 @@ + com.microsoft.excel.xls + com.microsoft.powerpoint.ppt + org.openxmlformats.wordprocessingml.document +- org.openxmlformats.wordprocessingml.document.macroenabled ++ org.openxmlformats.wordprocessingml.document.macroEnabled + org.openxmlformats.wordprocessingml.template +- org.openxmlformats.wordprocessingml.template.macroenabled ++ org.openxmlformats.wordprocessingml.template.macroEnabled + org.openxmlformats.spreadsheetml.sheet +- org.openxmlformats.spreadsheetml.sheet.macroenabled +- com.microsoft.excel.sheet.binary.macroenabled ++ org.openxmlformats.spreadsheetml.sheet.macroEnabled ++ com.microsoft.excel.sheet.binary.macroEnabled + org.openxmlformats.spreadsheetml.template +- org.openxmlformats.spreadsheetml.template.macroenabled ++ org.openxmlformats.spreadsheetml.template.macroEnabled + org.openxmlformats.presentationml.presentation +- org.openxmlformats.presentationml.presentation.macroenabled ++ org.openxmlformats.presentationml.presentation.macroEnabled + org.openxmlformats.presentationml.template +- org.openxmlformats.presentationml.template.macroenabled ++ org.openxmlformats.presentationml.template.macroEnabled + org.libreoffice.pdb-document + org.libreoffice.wpd-document + org.libreoffice.hwp-document +diff --git a/sysui/desktop/menus/calc.desktop b/sysui/desktop/menus/calc.desktop +index dac071a17d53..8b147cc3f5bd 100644 +--- a/sysui/desktop/menus/calc.desktop ++++ b/sysui/desktop/menus/calc.desktop +@@ -22,7 +22,7 @@ Icon=calc + Type=Application + Categories=Office;Spreadsheet;X-Red-Hat-Base;X-MandrivaLinux-Office-Spreadsheets; + Exec=${UNIXBASISROOTNAME} --calc %%FILE%% +-MimeType=application/vnd.oasis.opendocument.spreadsheet;application/vnd.oasis.opendocument.spreadsheet-template;application/vnd.sun.xml.calc;application/vnd.sun.xml.calc.template;application/msexcel;application/vnd.ms-excel;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.ms-excel.sheet.binary.macroenabled.12;text/csv;application/x-dbf;text/spreadsheet;application/csv;application/excel;application/tab-separated-values;application/vnd.lotus-1-2-3;application/vnd.oasis.opendocument.chart;application/vnd.oasis.opendocument.chart-template;application/x-dbase;application/x-dos_ms_excel;application/x-excel;application/x-msexcel;application/x-ms-excel;application/x-quattropro;application/x-123;text/comma-separated-values;text/tab-separated-values;text/x-comma-separated-values;text/x-csv;application/vnd.oasis.opendocument.spreadsheet-flat-xml;application/vnd.ms-works;application/clarisworks;application/x-iwork-numbers-sffnumbers;application/x-starcalc; ++MimeType=application/vnd.oasis.opendocument.spreadsheet;application/vnd.oasis.opendocument.spreadsheet-template;application/vnd.sun.xml.calc;application/vnd.sun.xml.calc.template;application/msexcel;application/vnd.ms-excel;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.ms-excel.sheet.binary.macroEnabled.12;text/csv;application/x-dbf;text/spreadsheet;application/csv;application/excel;application/tab-separated-values;application/vnd.lotus-1-2-3;application/vnd.oasis.opendocument.chart;application/vnd.oasis.opendocument.chart-template;application/x-dbase;application/x-dos_ms_excel;application/x-excel;application/x-msexcel;application/x-ms-excel;application/x-quattropro;application/x-123;text/comma-separated-values;text/tab-separated-values;text/x-comma-separated-values;text/x-csv;application/vnd.oasis.opendocument.spreadsheet-flat-xml;application/vnd.ms-works;application/clarisworks;application/x-iwork-numbers-sffnumbers;application/x-starcalc; + Name=%PRODUCTNAME Calc + GenericName=Spreadsheet + Comment=Perform calculations, analyze information and manage lists in spreadsheets by using Calc. +diff --git a/sysui/desktop/menus/impress.desktop b/sysui/desktop/menus/impress.desktop +index e728eabe3490..e29706127611 100644 +--- a/sysui/desktop/menus/impress.desktop ++++ b/sysui/desktop/menus/impress.desktop +@@ -22,7 +22,7 @@ Icon=impress + Type=Application + Categories=Office;Presentation;X-Red-Hat-Base;X-MandrivaLinux-Office-Presentations; + Exec=${UNIXBASISROOTNAME} --impress %%FILE%% +-MimeType=application/vnd.oasis.opendocument.presentation;application/vnd.oasis.opendocument.presentation-template;application/vnd.sun.xml.impress;application/vnd.sun.xml.impress.template;application/mspowerpoint;application/vnd.ms-powerpoint;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.openxmlformats-officedocument.presentationml.slide;application/vnd.openxmlformats-officedocument.presentationml.slideshow;application/vnd.ms-powerpoint.slideshow.macroEnabled.12;application/vnd.oasis.opendocument.presentation-flat-xml;application/x-iwork-keynote-sffkey; ++MimeType=application/vnd.oasis.opendocument.presentation;application/vnd.oasis.opendocument.presentation-template;application/vnd.sun.xml.impress;application/vnd.sun.xml.impress.template;application/mspowerpoint;application/vnd.ms-powerpoint;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.openxmlformats-officedocument.presentationml.slide;application/vnd.openxmlformats-officedocument.presentationml.slideshow;application/vnd.ms-powerpoint.slideshow.macroEnabled.12;application/vnd.oasis.opendocument.presentation-flat-xml;application/x-iwork-keynote-sffkey; + Name=%PRODUCTNAME Impress + GenericName=Presentation + Comment=Create and edit presentations for slideshows, meeting and Web pages by using Impress. +diff --git a/sysui/desktop/menus/writer.desktop b/sysui/desktop/menus/writer.desktop +index 8b995a58257e..21d59b8278a0 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.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;application/x-sony-bbeb;application/x-abiword;application/x-iwork-pages-sffpages;application/x-mswrite;application/x-starwriter; ++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;application/x-sony-bbeb;application/x-abiword;application/x-iwork-pages-sffpages;application/x-mswrite;application/x-starwriter; + 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/ms-excel-sheet-12.desktop b/sysui/desktop/mimetypes/ms-excel-sheet-12.desktop +index a3bd5b90f029..51662e973744 100644 +--- a/sysui/desktop/mimetypes/ms-excel-sheet-12.desktop ++++ b/sysui/desktop/mimetypes/ms-excel-sheet-12.desktop +@@ -22,5 +22,5 @@ Hidden=false + Icon= + Type=MimeType + Patterns=*.xlsm +-MimeType=application/vnd.ms-excel.sheet.macroenabled.12 ++MimeType=application/vnd.ms-excel.sheet.macroEnabled.12 + Comment=Microsoft Excel Worksheet +diff --git a/sysui/desktop/mimetypes/ms-excel-sheet-12.keys b/sysui/desktop/mimetypes/ms-excel-sheet-12.keys +index be746d9ad8ed..bbe182eba144 100644 +--- a/sysui/desktop/mimetypes/ms-excel-sheet-12.keys ++++ b/sysui/desktop/mimetypes/ms-excel-sheet-12.keys +@@ -1,4 +1,4 @@ +-application/vnd.ms-excel.sheet.macroenabled.12 ++application/vnd.ms-excel.sheet.macroEnabled.12 + description=Microsoft Excel Worksheet + default_action_type=application + short_list_application_ids_for_novice_user_level= +diff --git a/sysui/desktop/mimetypes/ms-excel-sheet-binary-12.desktop b/sysui/desktop/mimetypes/ms-excel-sheet-binary-12.desktop +index 1373cb894066..5eeaba43819e 100644 +--- a/sysui/desktop/mimetypes/ms-excel-sheet-binary-12.desktop ++++ b/sysui/desktop/mimetypes/ms-excel-sheet-binary-12.desktop +@@ -22,5 +22,5 @@ Hidden=false + Icon= + Type=MimeType + Patterns=*.xlsb +-MimeType=application/vnd.ms-excel.sheet.binary.macroenabled.12 ++MimeType=application/vnd.ms-excel.sheet.binary.macroEnabled.12 + Comment=Microsoft Excel Worksheet +diff --git a/sysui/desktop/mimetypes/ms-excel-sheet-binary-12.keys b/sysui/desktop/mimetypes/ms-excel-sheet-binary-12.keys +index 091cff6214ef..fb90ffb2bbaa 100644 +--- a/sysui/desktop/mimetypes/ms-excel-sheet-binary-12.keys ++++ b/sysui/desktop/mimetypes/ms-excel-sheet-binary-12.keys +@@ -1,4 +1,4 @@ +-application/vnd.ms-excel.sheet.binary.macroenabled.12 ++application/vnd.ms-excel.sheet.binary.macroEnabled.12 + description=Microsoft Excel Worksheet + default_action_type=application + short_list_application_ids_for_novice_user_level= +diff --git a/sysui/desktop/mimetypes/ms-excel-template-12.desktop b/sysui/desktop/mimetypes/ms-excel-template-12.desktop +index 2b4a0f254c97..921f35e7bcc8 100644 +--- a/sysui/desktop/mimetypes/ms-excel-template-12.desktop ++++ b/sysui/desktop/mimetypes/ms-excel-template-12.desktop +@@ -22,5 +22,5 @@ Hidden=false + Icon= + Type=MimeType + Patterns=*.xltm +-MimeType=application/vnd.ms-excel.template.macroenabled.12 ++MimeType=application/vnd.ms-excel.template.macroEnabled.12 + Comment=Microsoft Excel Worksheet Template +diff --git a/sysui/desktop/mimetypes/ms-excel-template-12.keys b/sysui/desktop/mimetypes/ms-excel-template-12.keys +index 8eb36cc1b229..107dfa2fff66 100644 +--- a/sysui/desktop/mimetypes/ms-excel-template-12.keys ++++ b/sysui/desktop/mimetypes/ms-excel-template-12.keys +@@ -1,4 +1,4 @@ +-application/vnd.ms-excel.template.macroenabled.12 ++application/vnd.ms-excel.template.macroEnabled.12 + description=Microsoft Excel Worksheet Template + default_action_type=application + short_list_application_ids_for_novice_user_level= +diff --git a/sysui/desktop/mimetypes/ms-powerpoint-presentation-12.desktop b/sysui/desktop/mimetypes/ms-powerpoint-presentation-12.desktop +index b779584211f7..dfa926d1d417 100644 +--- a/sysui/desktop/mimetypes/ms-powerpoint-presentation-12.desktop ++++ b/sysui/desktop/mimetypes/ms-powerpoint-presentation-12.desktop +@@ -22,5 +22,5 @@ Hidden=false + Icon= + Type=MimeType + Patterns=*.pptm +-MimeType=application/vnd.ms-powerpoint.presentation.macroenabled.12 ++MimeType=application/vnd.ms-powerpoint.presentation.macroEnabled.12 + Comment=Microsoft PowerPoint Presentation +diff --git a/sysui/desktop/mimetypes/ms-powerpoint-presentation-12.keys b/sysui/desktop/mimetypes/ms-powerpoint-presentation-12.keys +index 2e86010f4b7d..3ec7201fe5e9 100644 +--- a/sysui/desktop/mimetypes/ms-powerpoint-presentation-12.keys ++++ b/sysui/desktop/mimetypes/ms-powerpoint-presentation-12.keys +@@ -1,4 +1,4 @@ +-application/vnd.ms-powerpoint.presentation.macroenabled.12 ++application/vnd.ms-powerpoint.presentation.macroEnabled.12 + description=Microsoft PowerPoint Presentation + default_action_type=application + short_list_application_ids_for_novice_user_level= +diff --git a/sysui/desktop/mimetypes/ms-powerpoint-template-12.desktop b/sysui/desktop/mimetypes/ms-powerpoint-template-12.desktop +index a03a43185859..400acb773dd9 100644 +--- a/sysui/desktop/mimetypes/ms-powerpoint-template-12.desktop ++++ b/sysui/desktop/mimetypes/ms-powerpoint-template-12.desktop +@@ -22,5 +22,5 @@ Hidden=false + Icon= + Type=MimeType + Patterns=*.potm +-MimeType=application/vnd.ms-powerpoint.template.macroenabled.12 ++MimeType=application/vnd.ms-powerpoint.template.macroEnabled.12 + Comment=Microsoft PowerPoint Presentation Template +diff --git a/sysui/desktop/mimetypes/ms-powerpoint-template-12.keys b/sysui/desktop/mimetypes/ms-powerpoint-template-12.keys +index 07f25626936f..3084f8dfd589 100644 +--- a/sysui/desktop/mimetypes/ms-powerpoint-template-12.keys ++++ b/sysui/desktop/mimetypes/ms-powerpoint-template-12.keys +@@ -1,4 +1,4 @@ +-application/vnd.ms-powerpoint.template.macroenabled.12 ++application/vnd.ms-powerpoint.template.macroEnabled.12 + description=Microsoft PowerPoint Presentation Template + default_action_type=application + short_list_application_ids_for_novice_user_level= +diff --git a/sysui/desktop/mimetypes/ms-word-document-12.desktop b/sysui/desktop/mimetypes/ms-word-document-12.desktop +index 10ed72002410..dfe2a92730fe 100644 +--- a/sysui/desktop/mimetypes/ms-word-document-12.desktop ++++ b/sysui/desktop/mimetypes/ms-word-document-12.desktop +@@ -22,5 +22,5 @@ Hidden=false + Icon= + Type=MimeType + Patterns=*.docm +-MimeType=application/vnd.ms-word.document.macroenabled.12 ++MimeType=application/vnd.ms-word.document.macroEnabled.12 + Comment=Microsoft Word Document +diff --git a/sysui/desktop/mimetypes/ms-word-document-12.keys b/sysui/desktop/mimetypes/ms-word-document-12.keys +index 456564c1a126..53b8f95f1aad 100644 +--- a/sysui/desktop/mimetypes/ms-word-document-12.keys ++++ b/sysui/desktop/mimetypes/ms-word-document-12.keys +@@ -1,4 +1,4 @@ +-application/vnd.ms-word.document.macroenabled.12 ++application/vnd.ms-word.document.macroEnabled.12 + description=Microsoft Word Document + default_action_type=application + short_list_application_ids_for_novice_user_level= +diff --git a/sysui/desktop/mimetypes/ms-word-template-12.desktop b/sysui/desktop/mimetypes/ms-word-template-12.desktop +index f16852aee9d8..c6fcb745aa6b 100644 +--- a/sysui/desktop/mimetypes/ms-word-template-12.desktop ++++ b/sysui/desktop/mimetypes/ms-word-template-12.desktop +@@ -22,5 +22,5 @@ Hidden=false + Icon= + Type=MimeType + Patterns=*.dotm +-MimeType=application/vnd.ms-word.template.macroenabled.12 ++MimeType=application/vnd.ms-word.template.macroEnabled.12 + Comment=Microsoft Word Document Template +diff --git a/sysui/desktop/mimetypes/ms-word-template-12.keys b/sysui/desktop/mimetypes/ms-word-template-12.keys +index 8b49db70151f..c3d398813d90 100644 +--- a/sysui/desktop/mimetypes/ms-word-template-12.keys ++++ b/sysui/desktop/mimetypes/ms-word-template-12.keys +@@ -1,4 +1,4 @@ +-application/vnd.ms-word.template.macroenabled.12 ++application/vnd.ms-word.template.macroEnabled.12 + description=Microsoft Word Document Template + default_action_type=application + short_list_application_ids_for_novice_user_level= +diff --git a/sysui/desktop/mimetypes/openoffice.applications b/sysui/desktop/mimetypes/openoffice.applications +index 8af25f65bf07..c75498df4544 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.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; ++ 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/mimetypes/openoffice.mime b/sysui/desktop/mimetypes/openoffice.mime +index fc895cf64829..63b53e7ba840 100755 +--- a/sysui/desktop/mimetypes/openoffice.mime ++++ b/sysui/desktop/mimetypes/openoffice.mime +@@ -49,40 +49,40 @@ application/vnd.sun.xml.base: + application/vnd.openxmlformats-officedocument.wordprocessingml.document + ext: docx + +-application/vnd.ms-word.document.macroenabled.12 ++application/vnd.ms-word.document.macroEnabled.12 + ext: docm + + application/vnd.openxmlformats-officedocument.wordprocessingml.template + ext: dotx + +-application/vnd.ms-word.template.macroenabled.12 ++application/vnd.ms-word.template.macroEnabled.12 + ext: dotm + + application/vnd.openxmlformats-officedocument.spreadsheetml.sheet + ext: xlsx + +-application/vnd.ms-excel.sheet.macroenabled.12 ++application/vnd.ms-excel.sheet.macroEnabled.12 + ext: xlsm + + application/vnd.openxmlformats-officedocument.spreadsheetml.template + ext: xltx + +-application/vnd.ms-excel.template.macroenabled.12 ++application/vnd.ms-excel.template.macroEnabled.12 + ext: xltm + + application/vnd.openxmlformats-officedocument.presentationml.presentation + ext: pptx + +-application/vnd.ms-powerpoint.presentation.macroenabled.12 ++application/vnd.ms-powerpoint.presentation.macroEnabled.12 + ext: pptm + + application/vnd.openxmlformats-officedocument.presentationml.template + ext: potx + +-application/vnd.ms-powerpoint.template.macroenabled.12 ++application/vnd.ms-powerpoint.template.macroEnabled.12 + ext: potm + +-application/vnd.ms-excel.sheet.binary.macroenabled.12 ++application/vnd.ms-excel.sheet.binary.macroEnabled.12 + ext: xlsb + + application/vnd.ms-word +diff --git a/sysui/desktop/solaris/mime.types b/sysui/desktop/solaris/mime.types +index a5ee6838a9a9..1e10ad1829c4 100755 +--- a/sysui/desktop/solaris/mime.types ++++ b/sysui/desktop/solaris/mime.types +@@ -65,17 +65,17 @@ application/vnd.stardivision.math smf + application/vnd.sun.xml.base odb + application/vnd.openofficeorg.extension oxt + application/vnd.openxmlformats-officedocument.wordprocessingml.document docx +-application/vnd.ms-word.document.macroenabled.12 docm ++application/vnd.ms-word.document.macroEnabled.12 docm + application/vnd.openxmlformats-officedocument.wordprocessingml.template dotx +-application/vnd.ms-word.template.macroenabled.12 dotm ++application/vnd.ms-word.template.macroEnabled.12 dotm + application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx +-application/vnd.ms-excel.sheet.macroenabled.12 xlsm ++application/vnd.ms-excel.sheet.macroEnabled.12 xlsm + application/vnd.openxmlformats-officedocument.spreadsheetml.template xltx +-application/vnd.ms-excel.template.macroenabled.12 xltm ++application/vnd.ms-excel.template.macroEnabled.12 xltm + application/vnd.openxmlformats-officedocument.presentationml.presentation pptx +-application/vnd.ms-powerpoint.presentation.macroenabled.12 pptm ++application/vnd.ms-powerpoint.presentation.macroEnabled.12 pptm + application/vnd.openxmlformats-officedocument.presentationml.template potx +-application/vnd.ms-powerpoint.template.macroenabled.12 potm ++application/vnd.ms-powerpoint.template.macroEnabled.12 potm + END + else + cat ${PKG_INSTALL_ROOT}/etc/mime.types +-- +2.14.3 + diff --git a/SOURCES/0001-Resolves-rhbz-1545262-Workaround-for-spurious-ppc64l.patch b/SOURCES/0001-Resolves-rhbz-1545262-Workaround-for-spurious-ppc64l.patch new file mode 100644 index 0000000..da164f8 --- /dev/null +++ b/SOURCES/0001-Resolves-rhbz-1545262-Workaround-for-spurious-ppc64l.patch @@ -0,0 +1,34 @@ +From b9071e63980ea644ed21cd5fa99850cbed44da79 Mon Sep 17 00:00:00 2001 +From: Stephan Bergmann +Date: Wed, 25 Jul 2018 11:10:17 +0200 +Subject: [PATCH] Resolves: rhbz#1545262 Workaround for spurious ppc64le + automated testing crash + +Change-Id: Ia24a3803bb02e0d6e12561566e11659d554fb739 +--- + vcl/unx/gtk3/gtk3gtkframe.cxx | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/vcl/unx/gtk3/gtk3gtkframe.cxx b/vcl/unx/gtk3/gtk3gtkframe.cxx +index 9d21f7b13b7b..ec1a63302e97 100644 +--- a/vcl/unx/gtk3/gtk3gtkframe.cxx ++++ b/vcl/unx/gtk3/gtk3gtkframe.cxx +@@ -2824,6 +2824,7 @@ void GtkSalFrame::gestureSwipe(GtkGestureSwipe* gesture, gdouble velocity_x, gdo + + void GtkSalFrame::gestureLongPress(GtkGestureLongPress* gesture, gpointer frame) + { ++#if !(defined __powerpc64__ && defined __LITTLE_ENDIAN__) // Hack to work around rhbz#1545262 + GtkSalFrame* pThis = static_cast(frame); + + if(pThis) +@@ -2838,6 +2839,7 @@ void GtkSalFrame::gestureLongPress(GtkGestureLongPress* gesture, gpointer frame) + + pThis->CallCallbackExc(SalEvent::LongPress, &aEvent); + } ++#endif + } + + #endif +-- +2.17.1 + diff --git a/SOURCES/0001-Resolves-rhbz-1546997-search-not-found-at-0-0-when-w.patch b/SOURCES/0001-Resolves-rhbz-1546997-search-not-found-at-0-0-when-w.patch new file mode 100644 index 0000000..71f76ef --- /dev/null +++ b/SOURCES/0001-Resolves-rhbz-1546997-search-not-found-at-0-0-when-w.patch @@ -0,0 +1,114 @@ +From d83c1e5de554b7722d0a3161ba757e6e4785810e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Tue, 20 Feb 2018 13:59:08 +0000 +Subject: [PATCH] Resolves: rhbz#1546997 'search not found' at 0,0 when window + too narrow +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +if the statusbar hadn't got space for the initial label, then it doesn't get set a position, +so when later forced visible it draws at 0,0 + +call Resize on the toolbox to get it to relayout, and while we're at it +set the required size of the label so we might have space for it if that +text is shorter than the original len allocation + +Change-Id: I37d20125d8195b2c75e83e9673c82c2011ceda8e +Reviewed-on: https://gerrit.libreoffice.org/50041 +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara +--- + svx/source/dialog/srchdlg.cxx | 48 ++++++++++++++++++++----------------------- + 1 file changed, 22 insertions(+), 26 deletions(-) + +diff --git a/svx/source/dialog/srchdlg.cxx b/svx/source/dialog/srchdlg.cxx +index 4cea924..50c19a3 100644 +--- a/svx/source/dialog/srchdlg.cxx ++++ b/svx/source/dialog/srchdlg.cxx +@@ -2375,11 +2375,11 @@ SfxChildWinInfo SvxSearchDialogWrapper::GetInfo() const + } + + +-static vcl::Window* lcl_GetSearchLabelWindow() ++static void lcl_SetSearchLabelWindow(const OUString& rStr) + { + SfxViewFrame* pViewFrame = SfxViewFrame::Current(); + if (!pViewFrame) +- return nullptr; ++ return; + + css::uno::Reference< css::beans::XPropertySet > xPropSet( + pViewFrame->GetFrame().GetFrameInterface(), css::uno::UNO_QUERY_THROW); +@@ -2388,14 +2388,28 @@ static vcl::Window* lcl_GetSearchLabelWindow() + css::uno::Reference< css::ui::XUIElement > xUIElement = + xLayoutManager->getElement("private:resource/toolbar/findbar"); + if (!xUIElement.is()) +- return nullptr; ++ return; + css::uno::Reference< css::awt::XWindow > xWindow( + xUIElement->getRealInterface(), css::uno::UNO_QUERY_THROW); + VclPtr< ToolBox > pToolBox = static_cast( VCLUnoHelper::GetWindow(xWindow).get() ); +- for (size_t i = 0; pToolBox && i < pToolBox->GetItemCount(); ++i) ++ if (!pToolBox) ++ return; ++ for (size_t i = 0; i < pToolBox->GetItemCount(); ++i) ++ { + if (pToolBox->GetItemCommand(i) == ".uno:SearchLabel") +- return pToolBox->GetItemWindow(i); +- return nullptr; ++ { ++ vcl::Window* pSearchLabel = pToolBox->GetItemWindow(i); ++ assert(pSearchLabel); ++ pSearchLabel->Hide(); ++ pSearchLabel->SetText(rStr); ++ if (!rStr.isEmpty()) ++ { ++ pSearchLabel->SetSizePixel(pSearchLabel->get_preferred_size()); ++ pSearchLabel->Show(); ++ } ++ } ++ } ++ pToolBox->Resize(); + } + + void SvxSearchDialogWrapper::SetSearchLabel(const SearchLabel& rSL) +@@ -2410,16 +2424,7 @@ void SvxSearchDialogWrapper::SetSearchLabel(const SearchLabel& rSL) + else if (rSL == SearchLabel::NotFound) + sStr = SVX_RESSTR(RID_SVXSTR_SEARCH_NOT_FOUND); + +- if (vcl::Window *pSearchLabel = lcl_GetSearchLabelWindow()) +- { +- if (sStr.isEmpty()) +- pSearchLabel->Hide(); +- else +- { +- pSearchLabel->SetText(sStr); +- pSearchLabel->Show(); +- } +- } ++ lcl_SetSearchLabelWindow(sStr); + if (SvxSearchDialogWrapper *pWrp = static_cast( SfxViewFrame::Current()-> + GetChildWindow( SvxSearchDialogWrapper::GetChildWindowId() ))) + pWrp->getDialog()->SetSearchLabel(sStr); +@@ -2428,16 +2433,7 @@ void SvxSearchDialogWrapper::SetSearchLabel(const SearchLabel& rSL) + void SvxSearchDialogWrapper::SetSearchLabel(const OUString& sStr) + { + +- if (vcl::Window *pSearchLabel = lcl_GetSearchLabelWindow()) +- { +- if (sStr.isEmpty()) +- pSearchLabel->Hide(); +- else +- { +- pSearchLabel->SetText(sStr); +- pSearchLabel->Show(); +- } +- } ++ lcl_SetSearchLabelWindow(sStr); + if (SvxSearchDialogWrapper *pWrp = static_cast( SfxViewFrame::Current()-> + GetChildWindow( SvxSearchDialogWrapper::GetChildWindowId() ))) + pWrp->getDialog()->SetSearchLabel(sStr); +-- +2.14.3 + diff --git a/SOURCES/0001-Resolves-rhbz-1610692-rectangles-ctor-takes-topleft-.patch b/SOURCES/0001-Resolves-rhbz-1610692-rectangles-ctor-takes-topleft-.patch new file mode 100644 index 0000000..a3ac62d --- /dev/null +++ b/SOURCES/0001-Resolves-rhbz-1610692-rectangles-ctor-takes-topleft-.patch @@ -0,0 +1,38 @@ +From c80f2f59e9fb08543ec599c6552d610c0e41629b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Wed, 1 Aug 2018 10:10:16 +0100 +Subject: [PATCH] Resolves: rhbz#1610692 rectangles ctor takes topleft, + bottomright points + +so pass arguments in the topleft, bottomright order to avoid eventual... + +Gtk-CRITICAL **: 09:43:33.896: gtk_widget_queue_draw_area: assertion 'height >= 0' failed + +Change-Id: I2396f49470274331c49275a5e6d707f59277be4a +--- + vcl/source/control/fixed.cxx | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/vcl/source/control/fixed.cxx b/vcl/source/control/fixed.cxx +index 2cf897c2fd82..b758f3586a60 100644 +--- a/vcl/source/control/fixed.cxx ++++ b/vcl/source/control/fixed.cxx +@@ -531,11 +531,11 @@ void FixedLine::ImplDraw(vcl::RenderContext& rRenderContext) + rRenderContext.DrawText(aTextPt, aText, 0, aText.getLength()); + rRenderContext.Pop(); + if (aOutSize.Height() - aStartPt.Y() > FIXEDLINE_TEXT_BORDER) +- aDecoView.DrawSeparator(Point(aStartPt.X(), aOutSize.Height() - 1), +- Point(aStartPt.X(), aStartPt.Y() + FIXEDLINE_TEXT_BORDER)); ++ aDecoView.DrawSeparator(Point(aStartPt.X(), aStartPt.Y() + FIXEDLINE_TEXT_BORDER), ++ Point(aStartPt.X(), aOutSize.Height() - 1)); + if (aStartPt.Y() - nWidth - FIXEDLINE_TEXT_BORDER > 0) +- aDecoView.DrawSeparator(Point(aStartPt.X(), aStartPt.Y() - nWidth - FIXEDLINE_TEXT_BORDER), +- Point(aStartPt.X(), 0)); ++ aDecoView.DrawSeparator(Point(aStartPt.X(), 0), ++ Point(aStartPt.X(), aStartPt.Y() - nWidth - FIXEDLINE_TEXT_BORDER)); + } + else + { +-- +2.14.4 + diff --git a/SOURCES/0001-Resolves-rhbz-1614419-crash-in-pptx-nss-usage-under-.patch b/SOURCES/0001-Resolves-rhbz-1614419-crash-in-pptx-nss-usage-under-.patch new file mode 100644 index 0000000..67a4edb --- /dev/null +++ b/SOURCES/0001-Resolves-rhbz-1614419-crash-in-pptx-nss-usage-under-.patch @@ -0,0 +1,41 @@ +From 59f6c408ba822147fd4b9b47d84dab537fb8554d Mon Sep 17 00:00:00 2001 +From: rpmbuild +Date: Fri, 10 Aug 2018 08:26:23 +0100 +Subject: [PATCH] Resolves: rhbz#1614419 crash in pptx nss usage under fips + +--- + oox/source/crypto/CryptTools.cxx | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) + +diff --git a/oox/source/crypto/CryptTools.cxx b/oox/source/crypto/CryptTools.cxx +index 4bb3ec2..5ecf7b3 100644 +--- a/oox/source/crypto/CryptTools.cxx ++++ b/oox/source/crypto/CryptTools.cxx +@@ -36,9 +36,12 @@ Crypto::~Crypto() + EVP_CIPHER_CTX_cleanup( &mContext ); + #endif + #if USE_TLS_NSS +- PK11_DestroyContext( mContext, PR_TRUE ); +- PK11_FreeSymKey( mSymKey ); +- SECITEM_FreeItem( mSecParam, PR_TRUE ); ++ if (mContext) ++ PK11_DestroyContext(mContext, PR_TRUE); ++ if (mSymKey) ++ PK11_FreeSymKey(mSymKey); ++ if (mSecParam) ++ SECITEM_FreeItem(mSecParam, PR_TRUE); + #endif + } + +@@ -103,6 +106,8 @@ void Crypto::setupContext(vector& key, vector& iv, CryptoT + keyItem.len = key.size(); + + mSymKey = PK11_ImportSymKey( pSlot, mechanism, PK11_OriginUnwrap, CKA_ENCRYPT, &keyItem, nullptr ); ++ if (!mSymKey) ++ throw css::uno::RuntimeException("NSS SymKey failure", css::uno::Reference()); + mSecParam = PK11_ParamFromIV( mechanism, pIvItem ); + mContext = PK11_CreateContextBySymKey( mechanism, operation, mSymKey, mSecParam ); + } +-- +1.8.3.1 + diff --git a/SOURCES/0001-Resolves-tdf-105998-distort-hairline-borders-to-fall.patch b/SOURCES/0001-Resolves-tdf-105998-distort-hairline-borders-to-fall.patch new file mode 100644 index 0000000..16e9cac --- /dev/null +++ b/SOURCES/0001-Resolves-tdf-105998-distort-hairline-borders-to-fall.patch @@ -0,0 +1,50 @@ +From 2e5d1e032d353884a1f391d9e55ca1be3f7a0b9d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Tue, 14 Feb 2017 08:57:50 +0000 +Subject: [PATCH] Resolves: tdf#105998 distort hairline borders to fall inside + the canvas + +if we are a hairline along the very right/bottom edge +of the canvas then distory the polygon inwards one pixel right/bottom so that +the hairline falls inside the paintable area and becomes visible + +Change-Id: Ie5713f6916cf5b47fdf14f86f034e38cda9900fd +--- + .../source/processor2d/vclpixelprocessor2d.cxx | 21 +++++++++++++++++++++ + 1 file changed, 21 insertions(+) + +diff --git a/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx b/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx +index b8e9795..216be6b 100644 +--- a/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx ++++ b/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx +@@ -165,6 +165,27 @@ namespace drawinglayer + return true; + } + ++ //Resolves: tdf#105998 if we are a hairline along the very right/bottom edge ++ //of the canvas then distory the polygon inwards one pixel right/bottom so that ++ //the hairline falls inside the paintable area and becomes visible ++ Size aSize = mpOutputDevice->GetOutputSize(); ++ basegfx::B2DRange aRange = aLocalPolygon.getB2DRange(); ++ basegfx::B2DRange aOutputRange = aRange; ++ aOutputRange.transform(maCurrentTransformation); ++ if (std::round(aOutputRange.getMaxX()) == aSize.Width() || std::round(aOutputRange.getMaxY()) == aSize.Height()) ++ { ++ basegfx::B2DRange aOnePixel(0, 0, 1, 1); ++ aOnePixel.transform(maCurrentTransformation); ++ double fXOnePixel = 1.0 / aOnePixel.getMaxX(); ++ double fYOnePixel = 1.0 / aOnePixel.getMaxY(); ++ ++ basegfx::B2DPoint aTopLeft(aRange.getMinX(), aRange.getMinY()); ++ basegfx::B2DPoint aTopRight(aRange.getMaxX() - fXOnePixel, aRange.getMinY()); ++ basegfx::B2DPoint aBottomLeft(aRange.getMinX(), aRange.getMaxY() - fYOnePixel); ++ basegfx::B2DPoint aBottomRight(aRange.getMaxX() - fXOnePixel, aRange.getMaxY() - fYOnePixel); ++ aLocalPolygon = basegfx::tools::distort(aLocalPolygon, aRange, aTopLeft, aTopRight, aBottomLeft, aBottomRight); ++ } ++ + const basegfx::BColor aLineColor(maBColorModifierStack.getModifiedColor(rSource.getBColor())); + + mpOutputDevice->SetFillColor(); +-- +2.9.3 + diff --git a/SOURCES/0001-Resolves-tdf-106163-safe-fix-for-wrong-final-row-col.patch b/SOURCES/0001-Resolves-tdf-106163-safe-fix-for-wrong-final-row-col.patch new file mode 100644 index 0000000..438ab38 --- /dev/null +++ b/SOURCES/0001-Resolves-tdf-106163-safe-fix-for-wrong-final-row-col.patch @@ -0,0 +1,34 @@ +From ac8149d104de5ac3fcb17c3de1dab654e04a7952 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Tue, 12 Sep 2017 12:12:19 +0100 +Subject: [PATCH] Resolves: tdf#106163 safe fix for wrong final row/col + selection in rtl +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Change-Id: I773de03768b0a5b28e6b4f63bd65dd270dc975cd +Reviewed-on: https://gerrit.libreoffice.org/42197 +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara +(cherry picked from commit 65b756f6058697ccb787506c3cc32e1e818bcc37) +--- + svx/source/tbxctrls/layctrl.cxx | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/svx/source/tbxctrls/layctrl.cxx b/svx/source/tbxctrls/layctrl.cxx +index b0e707f..d0bcb9c 100644 +--- a/svx/source/tbxctrls/layctrl.cxx ++++ b/svx/source/tbxctrls/layctrl.cxx +@@ -161,6 +161,8 @@ void TableWindow::dispose() + void TableWindow::MouseMove( const MouseEvent& rMEvt ) + { + SfxPopupWindow::MouseMove( rMEvt ); ++ if (IsInCleanUp()) ++ return; + Point aPos = rMEvt.GetPosPixel(); + Point aMousePos( aPos ); + +-- +2.9.5 + diff --git a/SOURCES/0001-Resolves-tdf-112145-pdf-export-of-editengine-highlig.patch b/SOURCES/0001-Resolves-tdf-112145-pdf-export-of-editengine-highlig.patch new file mode 100644 index 0000000..1019c84 --- /dev/null +++ b/SOURCES/0001-Resolves-tdf-112145-pdf-export-of-editengine-highlig.patch @@ -0,0 +1,72 @@ +From f41ae9bc40fae21ac66d859057488801c1d47ccd Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Thu, 31 Aug 2017 16:22:58 +0100 +Subject: [PATCH] Resolves: tdf#112145 pdf export of editengine highlight color + fails sometimes + +When setting a fill or line color on the outputdevice, put it back to its previous +setting when finished with the record, PRIMITIVE2D_ID_POLYPOLYGONCOLORPRIMITIVE2D +was the one in this case but protect the other similar ones here too + +Change-Id: Ifb9b182d72bb6c48a9d9480270fde4384be6291e +--- + drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx b/drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx +index 885367d..0274b7c 100644 +--- a/drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx ++++ b/drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx +@@ -1219,6 +1219,8 @@ namespace drawinglayer + } + else + { ++ mpOutputDevice->Push(PushFlags::LINECOLOR | PushFlags::FILLCOLOR); ++ + // support SvtGraphicStroke MetaCommentAction + SvtGraphicStroke* pSvtGraphicStroke = impTryToCreateSvtGraphicStroke( + rBasePolygon, nullptr, +@@ -1274,6 +1276,8 @@ namespace drawinglayer + } + + impEndSvtGraphicStroke(pSvtGraphicStroke); ++ ++ mpOutputDevice->Pop(); + } + + break; +@@ -1666,6 +1670,7 @@ namespace drawinglayer + } + case PRIMITIVE2D_ID_POLYPOLYGONCOLORPRIMITIVE2D : + { ++ mpOutputDevice->Push(PushFlags::LINECOLOR | PushFlags::FILLCOLOR); + const primitive2d::PolyPolygonColorPrimitive2D& rPolygonCandidate(static_cast< const primitive2d::PolyPolygonColorPrimitive2D& >(rCandidate)); + basegfx::B2DPolyPolygon aLocalPolyPolygon(rPolygonCandidate.getB2DPolyPolygon()); + +@@ -1722,6 +1727,7 @@ namespace drawinglayer + impEndSvtGraphicFill(pSvtGraphicFill); + } + ++ mpOutputDevice->Pop(); + break; + } + case PRIMITIVE2D_ID_METAFILEPRIMITIVE2D : +@@ -1811,6 +1817,7 @@ namespace drawinglayer + } + case PRIMITIVE2D_ID_UNIFIEDTRANSPARENCEPRIMITIVE2D : + { ++ mpOutputDevice->Push(PushFlags::LINECOLOR | PushFlags::FILLCOLOR); + // for metafile: Need to examine what the pure vcl version is doing here actually + // - uses DrawTransparent with metafile for content and a gradient + // - uses DrawTransparent for single PolyPoylgons directly. Can be detected by +@@ -1945,6 +1952,7 @@ namespace drawinglayer + } + } + ++ mpOutputDevice->Pop(); + break; + } + case PRIMITIVE2D_ID_TRANSPARENCEPRIMITIVE2D : +-- +2.13.5 + diff --git a/SOURCES/0001-Resolves-tdf-112408-crash-with-nan-with-bad-ascent.patch b/SOURCES/0001-Resolves-tdf-112408-crash-with-nan-with-bad-ascent.patch new file mode 100644 index 0000000..f646d9d --- /dev/null +++ b/SOURCES/0001-Resolves-tdf-112408-crash-with-nan-with-bad-ascent.patch @@ -0,0 +1,32 @@ +From cc369b3447da7f354901a79007b5db6f98379189 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Fri, 15 Sep 2017 16:17:21 +0100 +Subject: [PATCH] Resolves: tdf#112408 crash with nan with bad ascent + +bad ascent in the common case is probably fixed with tdf#107249 + +Change-Id: I0a06de06cb07277c50dcffd1b6a1121398e84e42 +Reviewed-on: https://gerrit.libreoffice.org/42329 +Reviewed-by: Michael Stahl +Tested-by: Jenkins +--- + sdext/source/presenter/PresenterTheme.cxx | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/sdext/source/presenter/PresenterTheme.cxx b/sdext/source/presenter/PresenterTheme.cxx +index 10c7cf0..5e60dde 100644 +--- a/sdext/source/presenter/PresenterTheme.cxx ++++ b/sdext/source/presenter/PresenterTheme.cxx +@@ -570,6 +570,9 @@ double PresenterTheme::FontDescriptor::GetCellSizeForDesignSize ( + geometry::RealRectangle2D aBox (PresenterCanvasHelper::GetTextBoundingBox (xFont, "X")); + + const double nAscent (-aBox.Y1); ++ //tdf#112408 ++ if (nAscent == 0) ++ return nDesignSize; + const double nDescent (aBox.Y2); + const double nScale = (nAscent+nDescent) / nAscent; + return nDesignSize * nScale; +-- +2.9.5 + diff --git a/SOURCES/0001-a11y-crash-in-use-after-dispose.patch b/SOURCES/0001-a11y-crash-in-use-after-dispose.patch new file mode 100644 index 0000000..f1916f1 --- /dev/null +++ b/SOURCES/0001-a11y-crash-in-use-after-dispose.patch @@ -0,0 +1,45 @@ +From b6b0f7b99b68c66ea2b5e8e507c52801796b4d97 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Wed, 18 Oct 2017 11:05:20 +0100 +Subject: [PATCH] a11y: crash in use after dispose + +calc, chart in tab 3 with a11y enabled, select chart +switch to tab 1, crash cause mpParent has been deleted, IsDisposed +is correctly set, but shape accesses parent anyway + +Change-Id: I6f57a798bfcc82eebb883291cec54e157ff5187b + +potential deref of empty xStateSet + +Change-Id: I83d876b0d966b18cdf85249b7e856e4e4f4dec27 +--- + svx/source/accessibility/AccessibleShape.cxx | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/svx/source/accessibility/AccessibleShape.cxx b/svx/source/accessibility/AccessibleShape.cxx +index 043ba8e..47c0aca 100644 +--- a/svx/source/accessibility/AccessibleShape.cxx ++++ b/svx/source/accessibility/AccessibleShape.cxx +@@ -410,7 +410,9 @@ uno::Reference SAL_CALL + ::osl::MutexGuard aGuard (maMutex); + Reference xStateSet; + +- if (IsDisposed()) ++ bool bDisposed = IsDisposed(); ++ ++ if (bDisposed) + { + // Return a minimal state set that only contains the DEFUNC state. + xStateSet = AccessibleContextBase::getAccessibleStateSet (); +@@ -461,7 +463,7 @@ uno::Reference SAL_CALL + xStateSet.set( new ::utl::AccessibleStateSetHelper (*pStateSet)); + } + } +- if (mpParent && mpParent->IsDocumentSelAll()) ++ if (!bDisposed && xStateSet.is() && mpParent && mpParent->IsDocumentSelAll()) + { + ::utl::AccessibleStateSetHelper* pStateSet = + static_cast< ::utl::AccessibleStateSetHelper*>(xStateSet.get()); +-- +2.9.5 + diff --git a/SOURCES/0001-add-X-TryExec-entries-to-desktop-files.patch b/SOURCES/0001-add-X-TryExec-entries-to-desktop-files.patch new file mode 100644 index 0000000..43e8ceb --- /dev/null +++ b/SOURCES/0001-add-X-TryExec-entries-to-desktop-files.patch @@ -0,0 +1,90 @@ +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 + +Change-Id: Ic3626f79fa8b0b6e0d6696799445eaea8b0ab47f +--- + 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/writer.desktop | 1 + + 6 files changed, 6 insertions(+) + +diff --git a/sysui/desktop/menus/base.desktop b/sysui/desktop/menus/base.desktop +index 26f1c6a..2861dfe 100644 +--- a/sysui/desktop/menus/base.desktop ++++ b/sysui/desktop/menus/base.desktop +@@ -32,6 +32,7 @@ Keywords=Data;SQL; + InitialPreference=5 + StartupWMClass=libreoffice-base + 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 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 + InitialPreference=5 + StartupWMClass=libreoffice-calc + 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 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; + InitialPreference=5 + StartupWMClass=libreoffice-draw + 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..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 + InitialPreference=5 + StartupWMClass=libreoffice-impress + 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..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; + InitialPreference=5 + StartupWMClass=libreoffice-math + X-KDE-Protocols=file,http,ftp,webdav ++X-TryExec=oomath + + Actions=NewDocument; + [Desktop Action NewDocument] +diff --git a/sysui/desktop/menus/writer.desktop b/sysui/desktop/menus/writer.desktop +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 + InitialPreference=5 + StartupWMClass=libreoffice-writer + X-KDE-Protocols=file,http,ftp,webdav ++X-TryExec=oowriter + + Actions=NewDocument; + [Desktop Action NewDocument] +-- +1.9.0 + diff --git a/SOURCES/0001-add-char-highlighting-background-tab-to-graphics-sty.patch b/SOURCES/0001-add-char-highlighting-background-tab-to-graphics-sty.patch new file mode 100644 index 0000000..fb6d821 --- /dev/null +++ b/SOURCES/0001-add-char-highlighting-background-tab-to-graphics-sty.patch @@ -0,0 +1,392 @@ +From 2f3f5298a09c82fba750b61b5fc091af66578772 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Fri, 11 Aug 2017 11:51:09 +0100 +Subject: [PATCH] add char highlighting (background) tab to graphics styles + dialog + +move the SvxBackgroundColorItem<->SvxBrushItem conversion + +into the dialog itself + +Change-Id: I83db9f02145a4927257dd5691f82dad1a11eaea6 + +improve scoping a little + +Change-Id: Ie2e86852f7c4754070d3eb7e8981d674f04a6d80 +(cherry picked from commit a162b21c2b393534a9f6433c9b2b674aaaecf1a7) + +Change-Id: I2cf3872116ae59051847d73612a2f4f8385d34d8 +--- + cui/source/inc/backgrnd.hxx | 1 + + cui/source/tabpages/backgrnd.cxx | 104 +++++++++++++++++++++++------- + include/svx/flagsdef.hxx | 11 ++-- + sd/source/ui/dlg/dlgchar.cxx | 2 +- + sd/source/ui/dlg/tabtempl.cxx | 7 ++ + sd/source/ui/func/fuchar.cxx | 26 +------- + sd/source/ui/inc/tabtempl.hxx | 1 + + sd/uiconfig/simpress/ui/templatedialog.ui | 14 ++++ + 8 files changed, 113 insertions(+), 53 deletions(-) + +diff --git a/cui/source/inc/backgrnd.hxx b/cui/source/inc/backgrnd.hxx +index d2663f3..cd7ab4f 100644 +--- a/cui/source/inc/backgrnd.hxx ++++ b/cui/source/inc/backgrnd.hxx +@@ -107,6 +107,7 @@ private: + bool bIsGraphicValid : 1; + bool bLinkOnly : 1; + bool bHighlighting : 1; ++ bool bCharBackColor : 1; + bool m_bColorSelected : 1; + Graphic aBgdGraphic; + OUString aBgdGraphicPath; +diff --git a/cui/source/tabpages/backgrnd.cxx b/cui/source/tabpages/backgrnd.cxx +index 43d8fdd..83aa3c7 100644 +--- a/cui/source/tabpages/backgrnd.cxx ++++ b/cui/source/tabpages/backgrnd.cxx +@@ -38,6 +38,7 @@ + #include + + #include ++#include + #include "backgrnd.hxx" + + #include +@@ -330,6 +331,7 @@ SvxBackgroundTabPage::SvxBackgroundTabPage(vcl::Window* pParent, const SfxItemSe + , bIsGraphicValid(false) + , bLinkOnly(false) + , bHighlighting(false) ++ , bCharBackColor(false) + , m_bColorSelected(false) + , pPageImpl(new SvxBackgroundPage_Impl) + , pImportDlg(nullptr) +@@ -460,7 +462,7 @@ void SvxBackgroundTabPage::Reset( const SfxItemSet* rSet ) + + + // get and evaluate Input-BrushItem +- const SvxBrushItem* pBgdAttr = nullptr; ++ bool bBrushItemSet = false; + sal_uInt16 nSlot = SID_ATTR_BRUSH; + const SfxPoolItem* pItem; + sal_uInt16 nDestValue = USHRT_MAX; +@@ -488,20 +490,39 @@ void SvxBackgroundTabPage::Reset( const SfxItemSet* rSet ) + { + nSlot = SID_ATTR_BRUSH_CHAR; + } ++ else if( bCharBackColor ) ++ { ++ nSlot = SID_ATTR_CHAR_BACK_COLOR; ++ } ++ + //#111173# the destination item is missing when the parent style has been changed + if(USHRT_MAX == nDestValue && m_pTblLBox->IsVisible()) + nDestValue = 0; +- sal_uInt16 nWhich = GetWhich( nSlot ); ++ sal_uInt16 nWhich = GetWhich(nSlot); ++ SvxBrushItem aBgdAttr(nWhich); + +- if ( rSet->GetItemState( nWhich, false ) >= SfxItemState::DEFAULT ) +- pBgdAttr = static_cast(&( rSet->Get( nWhich ) )); ++ if (rSet->GetItemState( nWhich, false ) >= SfxItemState::DEFAULT) ++ { ++ if (!bCharBackColor) ++ aBgdAttr = static_cast(rSet->Get(nWhich)); ++ else ++ { ++ // EE_CHAR_BKGCOLOR is SvxBackgroundColorItem, but char background tabpage ++ // can only work with SvxBrushItems ++ // extract Color out of SvxBackColorItem ++ Color aBackColor = static_cast(rSet->Get(nWhich)).GetValue(); ++ // make new SvxBrushItem with this Color ++ aBgdAttr = SvxBrushItem(aBackColor, SID_ATTR_BRUSH_CHAR); ++ } ++ bBrushItemSet = true; ++ } + + m_pBtnTile->Check(); + +- if ( pBgdAttr ) ++ if (bBrushItemSet) + { +- FillControls_Impl(*pBgdAttr, aUserData); +- aBgdColor = const_cast(pBgdAttr)->GetColor(); ++ FillControls_Impl(aBgdAttr, aUserData); ++ aBgdColor = const_cast(aBgdAttr).GetColor(); + } + else + { +@@ -536,22 +557,22 @@ void SvxBackgroundTabPage::Reset( const SfxItemSet* rSet ) + nWhich = GetWhich( SID_ATTR_BRUSH ); + if ( rSet->GetItemState( nWhich, false ) >= SfxItemState::DEFAULT ) + { +- pBgdAttr = static_cast(&( rSet->Get( nWhich ) )); +- pTableBck_Impl->pCellBrush = new SvxBrushItem(*pBgdAttr); ++ aBgdAttr = static_cast(rSet->Get(nWhich)); ++ pTableBck_Impl->pCellBrush = new SvxBrushItem(aBgdAttr); + } + pTableBck_Impl->nCellWhich = nWhich; + + if ( rSet->GetItemState( SID_ATTR_BRUSH_ROW, false ) >= SfxItemState::DEFAULT ) + { +- pBgdAttr = static_cast(&( rSet->Get( SID_ATTR_BRUSH_ROW ) )); +- pTableBck_Impl->pRowBrush = new SvxBrushItem(*pBgdAttr); ++ aBgdAttr = static_cast(rSet->Get(SID_ATTR_BRUSH_ROW)); ++ pTableBck_Impl->pRowBrush = new SvxBrushItem(aBgdAttr); + } + pTableBck_Impl->nRowWhich = SID_ATTR_BRUSH_ROW; + + if ( rSet->GetItemState( SID_ATTR_BRUSH_TABLE, false ) >= SfxItemState::DEFAULT ) + { +- pBgdAttr = static_cast(&( rSet->Get( SID_ATTR_BRUSH_TABLE ) )); +- pTableBck_Impl->pTableBrush = new SvxBrushItem(*pBgdAttr); ++ aBgdAttr = static_cast(rSet->Get(SID_ATTR_BRUSH_TABLE)); ++ pTableBck_Impl->pTableBrush = new SvxBrushItem(aBgdAttr); + } + pTableBck_Impl->nTableWhich = SID_ATTR_BRUSH_TABLE; + +@@ -563,8 +584,22 @@ void SvxBackgroundTabPage::Reset( const SfxItemSet* rSet ) + nWhich = GetWhich( SID_ATTR_BRUSH_CHAR ); + if ( rSet->GetItemState( nWhich, false ) >= SfxItemState::DEFAULT ) + { +- pBgdAttr = static_cast(&( rSet->Get( nWhich ) )); +- pHighlighting.reset(new SvxBrushItem(*pBgdAttr)); ++ aBgdAttr = static_cast(rSet->Get(nWhich)); ++ pHighlighting.reset(new SvxBrushItem(aBgdAttr)); ++ } ++ } ++ else if( bCharBackColor ) ++ { ++ nWhich = GetWhich(SID_ATTR_CHAR_BACK_COLOR); ++ if ( rSet->GetItemState( nWhich, false ) >= SfxItemState::DEFAULT ) ++ { ++ // EE_CHAR_BKGCOLOR is SvxBackgroundColorItem, but char background tabpage ++ // can only work with SvxBrushItems ++ // extract Color out of SvxBackColorItem ++ Color aBackColor = static_cast(rSet->Get(nWhich)).GetValue(); ++ // make new SvxBrushItem with this Color ++ aBgdAttr = SvxBrushItem(aBackColor, SID_ATTR_BRUSH_CHAR); ++ pHighlighting.reset(new SvxBrushItem(aBgdAttr)); + } + } + } +@@ -645,6 +680,7 @@ bool SvxBackgroundTabPage::FillItemSet( SfxItemSet* rCoreSet ) + return FillItemSetWithWallpaperItem( *rCoreSet, SID_VIEW_FLD_PIC ); + + bool bModified = false; ++ bool bCompareOldBrush = true; + sal_uInt16 nSlot = SID_ATTR_BRUSH; + + if ( m_pTblLBox->IsVisible() ) +@@ -666,15 +702,21 @@ bool SvxBackgroundTabPage::FillItemSet( SfxItemSet* rCoreSet ) + { + nSlot = SID_ATTR_BRUSH_CHAR; + } +- sal_uInt16 nWhich = GetWhich( nSlot ); ++ else if( bCharBackColor ) ++ { ++ nSlot = SID_ATTR_CHAR_BACK_COLOR; ++ bCompareOldBrush = false; ++ } + +- const SfxPoolItem* pOld = GetOldItem( *rCoreSet, nSlot ); +- SfxItemState eOldItemState = rCoreSet->GetItemState(nSlot, false); +- const SfxItemSet& rOldSet = GetItemSet(); ++ sal_uInt16 nWhich = GetWhich( nSlot ); + +- if ( pOld ) ++ const SfxPoolItem* pOld = GetOldItem(*rCoreSet, nSlot); ++ if (pOld && bCompareOldBrush) + { ++ SfxItemState eOldItemState = rCoreSet->GetItemState(nSlot, false); ++ const SfxItemSet& rOldSet = GetItemSet(); + const SvxBrushItem& rOldItem = static_cast(*pOld); ++ + SvxGraphicPosition eOldPos = rOldItem.GetGraphicPos(); + const bool bIsBrush = ( drawing::FillStyle_SOLID == lcl_getFillStyle(m_pLbSelect) ); + +@@ -775,6 +817,22 @@ bool SvxBackgroundTabPage::FillItemSet( SfxItemSet* rCoreSet ) + bModified = ( bIsBrush || m_pBtnLink->IsChecked() || bIsGraphicValid ); + } + } ++ else if (pOld && SID_ATTR_CHAR_BACK_COLOR == nSlot) ++ { ++ SfxItemState eOldItemState = rCoreSet->GetItemState(nSlot, false); ++ const SfxItemSet& rOldSet = GetItemSet(); ++ const SvxBackgroundColorItem& rOldItem = static_cast(*pOld); ++ ++ // Brush-treatment: ++ if ( rOldItem.GetValue() != aBgdColor || ++ (SfxItemState::DEFAULT >= eOldItemState && m_bColorSelected)) ++ { ++ bModified = true; ++ rCoreSet->Put(SvxBackgroundColorItem(aBgdColor, nWhich)); ++ } ++ else if ( SfxItemState::DEFAULT == rOldSet.GetItemState( nWhich, false ) ) ++ rCoreSet->ClearItem( nWhich ); ++ } + else if ( SID_ATTR_BRUSH_CHAR == nSlot && aBgdColor != Color( COL_WHITE ) ) + { + rCoreSet->Put( SvxBrushItem( aBgdColor, nWhich ) ); +@@ -1527,10 +1585,12 @@ void SvxBackgroundTabPage::PageCreated(const SfxAllItemSet& aSet) + { + ShowSelector(); + } +- if ( nFlags & SvxBackgroundTabFlags::SHOW_HIGHLIGHTING ) ++ if ((nFlags & SvxBackgroundTabFlags::SHOW_HIGHLIGHTING) || ++ (nFlags & SvxBackgroundTabFlags::SHOW_CHAR_BKGCOLOR)) + { + m_pBackGroundColorLabelFT->SetText(CUI_RES(RID_SVXSTR_CHARNAME_HIGHLIGHTING)); +- bHighlighting = true; ++ bHighlighting = bool(nFlags & SvxBackgroundTabFlags::SHOW_HIGHLIGHTING); ++ bCharBackColor = bool(nFlags & SvxBackgroundTabFlags::SHOW_CHAR_BKGCOLOR); + } + } + } +diff --git a/include/svx/flagsdef.hxx b/include/svx/flagsdef.hxx +index 0207a0e..30b1ff4 100644 +--- a/include/svx/flagsdef.hxx ++++ b/include/svx/flagsdef.hxx +@@ -39,14 +39,15 @@ namespace o3tl + // flags for SvxBackgroundTabPage + enum class SvxBackgroundTabFlags + { +- NONE = 0x00, +- SHOW_SELECTOR = 0x01, +- SHOW_TBLCTL = 0x08, +- SHOW_HIGHLIGHTING = 0x10, ++ NONE = 0x00, ++ SHOW_SELECTOR = 0x01, ++ SHOW_TBLCTL = 0x08, ++ SHOW_HIGHLIGHTING = 0x10, ++ SHOW_CHAR_BKGCOLOR = 0x20, + }; + namespace o3tl + { +- template<> struct typed_flags : is_typed_flags {}; ++ template<> struct typed_flags : is_typed_flags {}; + } + + // flags for SvxBorderTabPage +diff --git a/sd/source/ui/dlg/dlgchar.cxx b/sd/source/ui/dlg/dlgchar.cxx +index bcf4437..cb37af4 100644 +--- a/sd/source/ui/dlg/dlgchar.cxx ++++ b/sd/source/ui/dlg/dlgchar.cxx +@@ -65,7 +65,7 @@ void SdCharDlg::PageCreated( sal_uInt16 nId, SfxTabPage &rPage ) + } + else if (nId == mnCharBackground) + { +- aSet.Put(SfxUInt32Item(SID_FLAG_TYPE,static_cast(SvxBackgroundTabFlags::SHOW_HIGHLIGHTING))); ++ aSet.Put(SfxUInt32Item(SID_FLAG_TYPE,static_cast(SvxBackgroundTabFlags::SHOW_CHAR_BKGCOLOR))); + rPage.PageCreated(aSet); + } + } +diff --git a/sd/source/ui/dlg/tabtempl.cxx b/sd/source/ui/dlg/tabtempl.cxx +index 17e962b..9042bf5 100644 +--- a/sd/source/ui/dlg/tabtempl.cxx ++++ b/sd/source/ui/dlg/tabtempl.cxx +@@ -71,6 +71,7 @@ SdTabTemplateDlg::SdTabTemplateDlg( vcl::Window* pParent, + , m_nFontId(0) + , m_nFontEffectId(0) + , m_nIndentsId(0) ++ , m_nBackgroundId(0) + , m_nTextId(0) + , m_nAnimationId(0) + , m_nDimensionId(0) +@@ -88,6 +89,7 @@ SdTabTemplateDlg::SdTabTemplateDlg( vcl::Window* pParent, + m_nFontId = AddTabPage("font", RID_SVXPAGE_CHAR_NAME); + m_nFontEffectId = AddTabPage("fonteffect", RID_SVXPAGE_CHAR_EFFECTS); + m_nIndentsId = AddTabPage("indents", RID_SVXPAGE_STD_PARAGRAPH); ++ m_nBackgroundId = AddTabPage("background", RID_SVXPAGE_BACKGROUND); + m_nTextId = AddTabPage("text", RID_SVXPAGE_TEXTATTR); + m_nAnimationId = AddTabPage("animation", RID_SVXPAGE_TEXTANIMATION); + m_nDimensionId = AddTabPage("dimensioning", RID_SVXPAGE_MEASURE); +@@ -149,6 +151,11 @@ void SdTabTemplateDlg::PageCreated( sal_uInt16 nId, SfxTabPage &rPage ) + { + rPage.PageCreated(aSet); + } ++ else if (nId == m_nBackgroundId) ++ { ++ aSet.Put(SfxUInt32Item(SID_FLAG_TYPE,static_cast(SvxBackgroundTabFlags::SHOW_CHAR_BKGCOLOR))); ++ rPage.PageCreated(aSet); ++ } + else if (nId == m_nTextId) + { + rPage.PageCreated(aSet); +diff --git a/sd/source/ui/func/fuchar.cxx b/sd/source/ui/func/fuchar.cxx +index f5601b3..5ffcfa0 100644 +--- a/sd/source/ui/func/fuchar.cxx ++++ b/sd/source/ui/func/fuchar.cxx +@@ -68,33 +68,9 @@ void FuChar::DoExecute( SfxRequest& rReq ) + SfxItemSet aEditAttr( mpDoc->GetPool() ); + mpView->GetAttributes( aEditAttr ); + +- static const sal_uInt16 aRanges[] = +- { +- EE_ITEMS_START, EE_ITEMS_END, +- SID_ATTR_BRUSH_CHAR, SID_ATTR_BRUSH_CHAR, +- 0 +- }; +- +- SfxItemSet aNewAttr( mpViewShell->GetPool(), +- aRanges ); ++ SfxItemSet aNewAttr(mpViewShell->GetPool(), EE_ITEMS_START, EE_ITEMS_END); + aNewAttr.Put( aEditAttr, false ); + +- // EE_CHAR_BKGCOLOR is SvxBackgroundColorItem, but char background tabpage +- // can only work with SvxBrushItems (it requires major undertaking to have +- // it support anything else). Do the following then: +- const SfxPoolItem* pItem; +- if ( aNewAttr.GetItemState( EE_CHAR_BKGCOLOR, true, &pItem ) == SfxItemState::SET ) +- { +- // extract Color outta SvxBackColorItem +- Color aBackColor = static_cast(pItem)->GetValue(); +- // make new SvxBrushItem with this Color +- SvxBrushItem aBrushItem( aBackColor, SID_ATTR_BRUSH_CHAR ); +- +- aNewAttr.ClearItem( EE_CHAR_BKGCOLOR ); +- // and stick it into the set +- aNewAttr.Put( aBrushItem ); +- } +- + SdAbstractDialogFactory* pFact = SdAbstractDialogFactory::Create(); + ScopedVclPtr pDlg(pFact ? pFact->CreateSdTabCharDialog(mpViewShell->GetActiveWindow(), &aNewAttr, mpDoc->GetDocSh() ) : nullptr); + sal_uInt16 nResult = RET_CANCEL; +diff --git a/sd/source/ui/inc/tabtempl.hxx b/sd/source/ui/inc/tabtempl.hxx +index d5c2f5e..bc00417 100644 +--- a/sd/source/ui/inc/tabtempl.hxx ++++ b/sd/source/ui/inc/tabtempl.hxx +@@ -50,6 +50,7 @@ private: + sal_uInt16 m_nFontId; + sal_uInt16 m_nFontEffectId; + sal_uInt16 m_nIndentsId; ++ sal_uInt16 m_nBackgroundId; + sal_uInt16 m_nTextId; + sal_uInt16 m_nAnimationId; + sal_uInt16 m_nDimensionId; +diff --git a/sd/uiconfig/simpress/ui/templatedialog.ui b/sd/uiconfig/simpress/ui/templatedialog.ui +index 961a0bb..380f9f0 100644 +--- a/sd/uiconfig/simpress/ui/templatedialog.ui ++++ b/sd/uiconfig/simpress/ui/templatedialog.ui +@@ -204,6 +204,20 @@ + + + ++ ++ True ++ False ++ Highlighting ++ ++ ++ 6 ++ False ++ ++ ++ ++ ++ ++ + + True + False +-- +2.9.4 + diff --git a/SOURCES/0001-bubble-the-original-gtk-surface-type-through-renderi.patch b/SOURCES/0001-bubble-the-original-gtk-surface-type-through-renderi.patch new file mode 100644 index 0000000..c47cc44 --- /dev/null +++ b/SOURCES/0001-bubble-the-original-gtk-surface-type-through-renderi.patch @@ -0,0 +1,528 @@ +From 0533dd425a46fb8344c12eead0b7ac21fe7db047 Mon Sep 17 00:00:00 2001 +From: rpmbuild +Date: Fri, 18 Aug 2017 12:12:40 +0100 +Subject: [PATCH] bubble the original gtk surface type through rendering + +this makes presenting from a hidpi internal monitor to non-hidpi external +monitor use the correct sizes + +and this may make scrolling a tad faster in general +--- + vcl/headless/svpframe.cxx | 4 +- + vcl/headless/svpgdi.cxx | 135 ++++++++++++++++++++++++++---------------- + vcl/headless/svpvd.cxx | 21 +++---- + vcl/inc/headless/svpgdi.hxx | 5 +- + vcl/inc/headless/svpvd.hxx | 1 + + vcl/inc/unx/gtk/gtkframe.hxx | 2 + + vcl/unx/gtk3/gtk3gtkframe.cxx | 50 +++++++--------- + 7 files changed, 128 insertions(+), 90 deletions(-) + +diff --git a/vcl/headless/svpframe.cxx b/vcl/headless/svpframe.cxx +index 0ce76cf..962cea0 100644 +--- a/vcl/headless/svpframe.cxx ++++ b/vcl/headless/svpframe.cxx +@@ -150,7 +150,7 @@ SalGraphics* SvpSalFrame::AcquireGraphics() + { + SvpSalGraphics* pGraphics = new SvpSalGraphics(); + #ifndef IOS +- pGraphics->setSurface( m_pSurface ); ++ pGraphics->setSurface(m_pSurface, B2IVector(maGeometry.nWidth, maGeometry.nHeight)); + #endif + m_aGraphics.push_back( pGraphics ); + return pGraphics; +@@ -281,7 +281,7 @@ void SvpSalFrame::SetPosSize( long nX, long nY, long nWidth, long nHeight, sal_u + for( std::list< SvpSalGraphics* >::iterator it = m_aGraphics.begin(); + it != m_aGraphics.end(); ++it ) + { +- (*it)->setSurface(m_pSurface); ++ (*it)->setSurface(m_pSurface, aFrameSize); + } + } + if( m_bVisible ) +diff --git a/vcl/headless/svpgdi.cxx b/vcl/headless/svpgdi.cxx +index bcc1df9..242cc13 100644 +--- a/vcl/headless/svpgdi.cxx ++++ b/vcl/headless/svpgdi.cxx +@@ -133,6 +133,22 @@ namespace + { + return source; + } ++ void mark_dirty() ++ { ++ cairo_surface_mark_dirty(source); ++ } ++ unsigned char* getBits(sal_Int32 &rStride) ++ { ++ cairo_surface_flush(source); ++ ++ unsigned char *mask_data = cairo_image_surface_get_data(source); ++ ++ cairo_format_t nFormat = cairo_image_surface_get_format(source); ++ assert(nFormat == CAIRO_FORMAT_ARGB32 && "need to implement CAIRO_FORMAT_A1 after all here"); ++ rStride = cairo_format_stride_for_width(nFormat, cairo_image_surface_get_width(source)); ++ ++ return mask_data; ++ } + private: + SvpSalBitmap aTmpBmp; + cairo_surface_t* source; +@@ -386,9 +402,10 @@ SvpSalGraphics::~SvpSalGraphics() + { + } + +-void SvpSalGraphics::setSurface(cairo_surface_t* pSurface) ++void SvpSalGraphics::setSurface(cairo_surface_t* pSurface, const basegfx::B2IVector& rSize) + { + m_pSurface = pSurface; ++ m_aFrameSize = rSize; + #if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 14, 0) + cairo_surface_get_device_scale(pSurface, &m_fScale, nullptr); + #endif +@@ -402,14 +419,14 @@ void SvpSalGraphics::GetResolution( sal_Int32& rDPIX, sal_Int32& rDPIY ) + + sal_uInt16 SvpSalGraphics::GetBitCount() const + { +- if (CAIRO_FORMAT_A1 == cairo_image_surface_get_format(m_pSurface)) ++ if (cairo_surface_get_content(m_pSurface) != CAIRO_CONTENT_COLOR_ALPHA) + return 1; + return 32; + } + + long SvpSalGraphics::GetGraphicsWidth() const + { +- return m_pSurface ? cairo_image_surface_get_width(m_pSurface) / m_fScale : 0; ++ return m_pSurface ? m_aFrameSize.getX() : 0; + } + + void SvpSalGraphics::ResetClipRegion() +@@ -885,7 +902,7 @@ bool SvpSalGraphics::drawPolyPolygon(const basegfx::B2DPolyPolygon& rPolyPoly, d + + void SvpSalGraphics::applyColor(cairo_t *cr, SalColor aColor) + { +- if (CAIRO_FORMAT_ARGB32 == cairo_image_surface_get_format(m_pSurface)) ++ if (cairo_surface_get_content(m_pSurface) == CAIRO_CONTENT_COLOR_ALPHA) + { + cairo_set_source_rgba(cr, SALCOLOR_RED(aColor)/255.0, + SALCOLOR_GREEN(aColor)/255.0, +@@ -982,17 +999,10 @@ void SvpSalGraphics::copyBits( const SalTwoRect& rTR, + if (pSrc == this) + { + //self copy is a problem, so dup source in that case +-#if CAIRO_VERSION < CAIRO_VERSION_ENCODE(1, 12, 0) + pCopy = cairo_surface_create_similar(source, + cairo_surface_get_content(m_pSurface), + aTR.mnSrcWidth * m_fScale, + aTR.mnSrcHeight * m_fScale); +-#else +- pCopy = cairo_surface_create_similar_image(source, +- cairo_image_surface_get_format(m_pSurface), +- aTR.mnSrcWidth * m_fScale, +- aTR.mnSrcHeight * m_fScale); +-#endif + #if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 14, 0) + cairo_surface_set_device_scale(pCopy, m_fScale, m_fScale); + #endif +@@ -1049,16 +1059,8 @@ void SvpSalGraphics::drawMask( const SalTwoRect& rTR, + /** creates an image from the given rectangle, replacing all black pixels + * with nMaskColor and make all other full transparent */ + SourceHelper aSurface(rSalBitmap); +- cairo_surface_t* mask = aSurface.getSurface(); +- +- cairo_surface_flush(mask); +- +- unsigned char *mask_data = cairo_image_surface_get_data(mask); +- +- cairo_format_t nFormat = cairo_image_surface_get_format(mask); +- assert(nFormat == CAIRO_FORMAT_ARGB32 && "need to implement CAIRO_FORMAT_A1 after all here"); +- sal_Int32 nStride = cairo_format_stride_for_width(nFormat, +- cairo_image_surface_get_width(mask)); ++ sal_Int32 nStride; ++ unsigned char *mask_data = aSurface.getBits(nStride); + for (sal_Int32 y = rTR.mnSrcY ; y < rTR.mnSrcY + rTR.mnSrcHeight; ++y) + { + unsigned char *row = mask_data + (nStride*y); +@@ -1085,7 +1087,7 @@ void SvpSalGraphics::drawMask( const SalTwoRect& rTR, + data+=4; + } + } +- cairo_surface_mark_dirty(mask); ++ aSurface.mark_dirty(); + + cairo_t* cr = getCairoContext(false); + clipRegion(cr); +@@ -1098,7 +1100,7 @@ void SvpSalGraphics::drawMask( const SalTwoRect& rTR, + + cairo_translate(cr, rTR.mnDestX, rTR.mnDestY); + cairo_scale(cr, (double)(rTR.mnDestWidth)/rTR.mnSrcWidth, ((double)rTR.mnDestHeight)/rTR.mnSrcHeight); +- cairo_set_source_surface(cr, mask, -rTR.mnSrcX, -rTR.mnSrcY); ++ cairo_set_source_surface(cr, aSurface.getSurface(), -rTR.mnSrcX, -rTR.mnSrcY); + cairo_paint(cr); + + releaseCairoContext(cr, false, extents); +@@ -1123,18 +1125,24 @@ SalBitmap* SvpSalGraphics::getBitmap( long nX, long nY, long nWidth, long nHeigh + + SalColor SvpSalGraphics::getPixel( long nX, long nY ) + { +- cairo_surface_flush(m_pSurface); +- cairo_format_t nFormat = cairo_image_surface_get_format(m_pSurface); +- assert(nFormat == CAIRO_FORMAT_ARGB32 && "need to implement CAIRO_FORMAT_A1 after all here"); +- sal_Int32 nStride = cairo_format_stride_for_width(nFormat, +- cairo_image_surface_get_width(m_pSurface)); +- unsigned char *surface_data = cairo_image_surface_get_data(m_pSurface); +- unsigned char *row = surface_data + (nStride*nY); +- unsigned char *data = row + (nX * 4); ++ cairo_surface_t *target = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 1, 1); ++ cairo_t* cr = cairo_create(target); ++ ++ cairo_rectangle(cr, 0, 0, 1, 1); ++ cairo_set_source_surface(cr, m_pSurface, -nX, -nY); ++ cairo_paint(cr); ++ cairo_destroy(cr); ++ ++ cairo_surface_flush(target); ++ unsigned char *data = cairo_image_surface_get_data(target); + sal_uInt8 b = unpremultiply(data[SVP_CAIRO_BLUE], data[SVP_CAIRO_ALPHA]); + sal_uInt8 g = unpremultiply(data[SVP_CAIRO_GREEN], data[SVP_CAIRO_ALPHA]); + sal_uInt8 r = unpremultiply(data[SVP_CAIRO_RED], data[SVP_CAIRO_ALPHA]); +- return MAKE_SALCOLOR(r, g, b); ++ SalColor nRet = MAKE_SALCOLOR(r, g, b); ++ ++ cairo_surface_destroy(target); ++ ++ return nRet; + } + + namespace +@@ -1268,17 +1276,15 @@ cairo_surface_t* SvpSalGraphics::createCairoSurface(const BitmapBuffer *pBuffer) + return target; + } + +-static cairo_t* createTmpCompatibleCairoContext(cairo_surface_t* pSurface, double fScale) ++cairo_t* SvpSalGraphics::createTmpCompatibleCairoContext() const + { +- cairo_surface_t *target = cairo_image_surface_create( +- cairo_image_surface_get_format(pSurface), +- cairo_image_surface_get_width(pSurface), +- cairo_image_surface_get_height(pSurface)); ++ cairo_surface_t *target = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, ++ m_aFrameSize.getX() * m_fScale, ++ m_aFrameSize.getY() * m_fScale); + #if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 14, 0) +- cairo_surface_set_device_scale(target, fScale, fScale); +-#else +- (void)fScale; ++ cairo_surface_set_device_scale(target, m_fScale, m_fScale); + #endif ++ + return cairo_create(target); + } + +@@ -1286,7 +1292,7 @@ cairo_t* SvpSalGraphics::getCairoContext(bool bXorModeAllowed) const + { + cairo_t* cr; + if (m_ePaintMode == XOR && bXorModeAllowed) +- cr = createTmpCompatibleCairoContext(m_pSurface, m_fScale); ++ cr = createTmpCompatibleCairoContext(); + else + cr = cairo_create(m_pSurface); + cairo_set_line_width(cr, 1); +@@ -1316,8 +1322,8 @@ void SvpSalGraphics::releaseCairoContext(cairo_t* cr, bool bXorModeAllowed, cons + + sal_Int32 nExtentsLeft(rExtents.getMinX()), nExtentsTop(rExtents.getMinY()); + sal_Int32 nExtentsRight(rExtents.getMaxX()), nExtentsBottom(rExtents.getMaxY()); +- sal_Int32 nWidth = cairo_image_surface_get_width(m_pSurface); +- sal_Int32 nHeight = cairo_image_surface_get_height(m_pSurface); ++ sal_Int32 nWidth = m_aFrameSize.getX(); ++ sal_Int32 nHeight = m_aFrameSize.getY(); + nExtentsLeft = std::max(nExtentsLeft, 0); + nExtentsTop = std::max(nExtentsTop, 0); + nExtentsRight = std::min(nExtentsRight, nWidth); +@@ -1331,21 +1337,35 @@ void SvpSalGraphics::releaseCairoContext(cairo_t* cr, bool bXorModeAllowed, cons + //emulate it (slowly) here. + if (m_ePaintMode == XOR && bXorModeAllowed) + { +- cairo_surface_t* true_surface = m_pSurface; +- cairo_surface_flush(true_surface); +- unsigned char *true_surface_data = cairo_image_surface_get_data(true_surface); ++ cairo_surface_t* target_surface = m_pSurface; ++ if (cairo_surface_get_type(target_surface) != CAIRO_SURFACE_TYPE_IMAGE) ++ { ++ //in the unlikely case we can't use m_pSurface directly, copy contents ++ //to another temp image surface ++ cairo_t* copycr = createTmpCompatibleCairoContext(); ++ cairo_rectangle(copycr, nExtentsLeft, nExtentsTop, ++ nExtentsRight - nExtentsLeft, ++ nExtentsBottom - nExtentsTop); ++ cairo_set_source_surface(copycr, m_pSurface, 0, 0); ++ cairo_paint(copycr); ++ target_surface = cairo_get_target(copycr); ++ cairo_destroy(copycr); ++ } ++ ++ cairo_surface_flush(target_surface); ++ unsigned char *target_surface_data = cairo_image_surface_get_data(target_surface); + unsigned char *xor_surface_data = cairo_image_surface_get_data(surface); + +- cairo_format_t nFormat = cairo_image_surface_get_format(m_pSurface); ++ cairo_format_t nFormat = cairo_image_surface_get_format(target_surface); + assert(nFormat == CAIRO_FORMAT_ARGB32 && "need to implement CAIRO_FORMAT_A1 after all here"); +- sal_Int32 nStride = cairo_format_stride_for_width(nFormat, nWidth); ++ sal_Int32 nStride = cairo_format_stride_for_width(nFormat, nWidth * m_fScale); + sal_Int32 nUnscaledExtentsLeft = nExtentsLeft * m_fScale; + sal_Int32 nUnscaledExtentsRight = nExtentsRight * m_fScale; + sal_Int32 nUnscaledExtentsTop = nExtentsTop * m_fScale; + sal_Int32 nUnscaledExtentsBottom = nExtentsBottom * m_fScale; + for (sal_Int32 y = nUnscaledExtentsTop; y < nUnscaledExtentsBottom; ++y) + { +- unsigned char *true_row = true_surface_data + (nStride*y); ++ unsigned char *true_row = target_surface_data + (nStride*y); + unsigned char *xor_row = xor_surface_data + (nStride*y); + unsigned char *true_data = true_row + (nUnscaledExtentsLeft * 4); + unsigned char *xor_data = xor_row + (nUnscaledExtentsLeft * 4); +@@ -1364,7 +1384,22 @@ void SvpSalGraphics::releaseCairoContext(cairo_t* cr, bool bXorModeAllowed, cons + xor_data+=4; + } + } +- cairo_surface_mark_dirty(true_surface); ++ cairo_surface_mark_dirty(target_surface); ++ ++ if (target_surface != m_pSurface) ++ { ++ cairo_t* copycr = cairo_create(m_pSurface); ++ //unlikely case we couldn't use m_pSurface directly, copy contents ++ //back from image surface ++ cairo_rectangle(copycr, nExtentsLeft, nExtentsTop, ++ nExtentsRight - nExtentsLeft, ++ nExtentsBottom - nExtentsTop); ++ cairo_set_source_surface(copycr, target_surface, 0, 0); ++ cairo_paint(copycr); ++ cairo_destroy(copycr); ++ cairo_surface_destroy(target_surface); ++ } ++ + cairo_surface_destroy(surface); + } + +diff --git a/vcl/headless/svpvd.cxx b/vcl/headless/svpvd.cxx +index ca28a52..b5ab755 100644 +--- a/vcl/headless/svpvd.cxx ++++ b/vcl/headless/svpvd.cxx +@@ -38,7 +38,7 @@ SvpSalVirtualDevice::~SvpSalVirtualDevice() + SalGraphics* SvpSalVirtualDevice::AcquireGraphics() + { + SvpSalGraphics* pGraphics = new SvpSalGraphics(); +- pGraphics->setSurface(m_pSurface); ++ pGraphics->setSurface(m_pSurface, m_aFrameSize); + m_aGraphics.push_back( pGraphics ); + return pGraphics; + } +@@ -62,12 +62,14 @@ bool SvpSalVirtualDevice::SetSizeUsingBuffer( long nNewDX, long nNewDY, + if (nNewDY == 0) + nNewDY = 1; + +- nNewDX *= m_fScale; +- nNewDY *= m_fScale; +- +- if (!m_pSurface || cairo_image_surface_get_width(m_pSurface) != nNewDX || +- cairo_image_surface_get_height(m_pSurface) != nNewDY ) ++ if (!m_pSurface || m_aFrameSize.getX() != nNewDX || ++ m_aFrameSize.getY() != nNewDY ) + { ++ m_aFrameSize = basegfx::B2IVector(nNewDX, nNewDY); ++ ++ nNewDX *= m_fScale; ++ nNewDY *= m_fScale; ++ + if (m_pSurface) + { + cairo_surface_destroy(m_pSurface); +@@ -96,20 +98,19 @@ bool SvpSalVirtualDevice::SetSizeUsingBuffer( long nNewDX, long nNewDY, + // update device in existing graphics + for( std::list< SvpSalGraphics* >::iterator it = m_aGraphics.begin(); + it != m_aGraphics.end(); ++it ) +- (*it)->setSurface(m_pSurface); +- ++ (*it)->setSurface(m_pSurface, m_aFrameSize); + } + return true; + } + + long SvpSalVirtualDevice::GetWidth() const + { +- return m_pSurface ? cairo_image_surface_get_width(m_pSurface) : 0; ++ return m_pSurface ? m_aFrameSize.getX() : 0; + } + + long SvpSalVirtualDevice::GetHeight() const + { +- return m_pSurface ? cairo_image_surface_get_height(m_pSurface) : 0; ++ return m_pSurface ? m_aFrameSize.getY() : 0; + } + + #endif +diff --git a/vcl/inc/headless/svpgdi.hxx b/vcl/inc/headless/svpgdi.hxx +index 97fd678..0f46c5f 100644 +--- a/vcl/inc/headless/svpgdi.hxx ++++ b/vcl/inc/headless/svpgdi.hxx +@@ -80,6 +80,7 @@ struct VCL_DLLPUBLIC DamageHandler + class VCL_DLLPUBLIC SvpSalGraphics : public SalGraphics + { + cairo_surface_t* m_pSurface; ++ basegfx::B2IVector m_aFrameSize; + double m_fScale; + SalColor m_aLineColor; + SalColor m_aFillColor; +@@ -87,7 +88,7 @@ class VCL_DLLPUBLIC SvpSalGraphics : public SalGraphics + + public: + static GlyphCache& getPlatformGlyphCache(); +- void setSurface(cairo_surface_t* pSurface); ++ void setSurface(cairo_surface_t* pSurface, const basegfx::B2IVector& rSize); + static cairo_user_data_key_t* getDamageKey(); + + private: +@@ -115,6 +116,8 @@ protected: + const SalBitmap* pAlphaBitmap) override; + virtual bool drawAlphaRect( long nX, long nY, long nWidth, long nHeight, sal_uInt8 nTransparency ) override; + ++ cairo_t* createTmpCompatibleCairoContext() const; ++ + public: + SvpSalGraphics(); + virtual ~SvpSalGraphics() override; +diff --git a/vcl/inc/headless/svpvd.hxx b/vcl/inc/headless/svpvd.hxx +index 882f36d..7ac1563 100644 +--- a/vcl/inc/headless/svpvd.hxx ++++ b/vcl/inc/headless/svpvd.hxx +@@ -31,6 +31,7 @@ class VCL_DLLPUBLIC SvpSalVirtualDevice : public SalVirtualDevice + { + DeviceFormat m_eFormat; + cairo_surface_t* m_pSurface; ++ basegfx::B2IVector m_aFrameSize; + double m_fScale; + std::list< SvpSalGraphics* > m_aGraphics; + +diff --git a/vcl/inc/unx/gtk/gtkframe.hxx b/vcl/inc/unx/gtk/gtkframe.hxx +index f263160..8f60671 100644 +--- a/vcl/inc/unx/gtk/gtkframe.hxx ++++ b/vcl/inc/unx/gtk/gtkframe.hxx +@@ -246,6 +246,7 @@ class GtkSalFrame : public SalFrame + #endif + #if GTK_CHECK_VERSION(3,0,0) + static gboolean signalDraw( GtkWidget*, cairo_t *cr, gpointer ); ++ static void signalRealize(GtkWidget*, gpointer frame); + static void sizeAllocated(GtkWidget*, GdkRectangle *pAllocation, gpointer frame); + static gboolean signalTooltipQuery(GtkWidget*, gint x, gint y, + gboolean keyboard_mode, GtkTooltip *tooltip, +@@ -346,6 +347,7 @@ class GtkSalFrame : public SalFrame + public: + #if GTK_CHECK_VERSION(3,0,0) + cairo_surface_t* m_pSurface; ++ basegfx::B2IVector m_aFrameSize; + DamageHandler m_aDamageHandler; + std::vector m_aPendingScrollEvents; + Idle m_aSmoothScrollIdle; +diff --git a/vcl/unx/gtk3/gtk3gtkframe.cxx b/vcl/unx/gtk3/gtk3gtkframe.cxx +index 9be38dd..dc9d83b 100644 +--- a/vcl/unx/gtk3/gtk3gtkframe.cxx ++++ b/vcl/unx/gtk3/gtk3gtkframe.cxx +@@ -1045,6 +1045,7 @@ void GtkSalFrame::InitCommon() + m_aMouseSignalIds.push_back(g_signal_connect( G_OBJECT(pEventWidget), "scroll-event", G_CALLBACK(signalScroll), this )); + + g_signal_connect( G_OBJECT(m_pFixedContainer), "draw", G_CALLBACK(signalDraw), this ); ++ g_signal_connect( G_OBJECT(m_pFixedContainer), "realize", G_CALLBACK(signalRealize), this ); + g_signal_connect( G_OBJECT(m_pFixedContainer), "size-allocate", G_CALLBACK(sizeAllocated), this ); + #if GTK_CHECK_VERSION(3,14,0) + GtkGesture *pSwipe = gtk_gesture_swipe_new(pEventWidget); +@@ -1340,7 +1341,7 @@ SalGraphics* GtkSalFrame::AcquireGraphics() + AllocateFrame(); + TriggerPaintEvent(); + } +- m_pGraphics->setSurface(m_pSurface); ++ m_pGraphics->setSurface(m_pSurface, m_aFrameSize); + } + m_bGraphics = true; + return m_pGraphics; +@@ -1587,13 +1588,11 @@ void GtkSalFrame::SetMinClientSize( long nWidth, long nHeight ) + } + } + +-// FIXME: we should really be an SvpSalFrame sub-class, and +-// share their AllocateFrame ! + void GtkSalFrame::AllocateFrame() + { + basegfx::B2IVector aFrameSize( maGeometry.nWidth, maGeometry.nHeight ); +- if (!m_pSurface || cairo_image_surface_get_width(m_pSurface) != aFrameSize.getX() || +- cairo_image_surface_get_height(m_pSurface) != aFrameSize.getY() ) ++ if (!m_pSurface || m_aFrameSize.getX() != aFrameSize.getX() || ++ m_aFrameSize.getY() != aFrameSize.getY() ) + { + if( aFrameSize.getX() == 0 ) + aFrameSize.setX( 1 ); +@@ -1603,30 +1602,17 @@ void GtkSalFrame::AllocateFrame() + if (m_pSurface) + cairo_surface_destroy(m_pSurface); + +-#if GTK_CHECK_VERSION(3,10,0) +-#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 14, 0) +- int scale = gtk_widget_get_scale_factor(m_pWindow); +-#else +- int scale = 1; +-#endif +- m_pSurface = gdk_window_create_similar_image_surface(widget_get_window(m_pWindow), +- CAIRO_FORMAT_ARGB32, +- aFrameSize.getX() * scale, +- aFrameSize.getY() * scale, +- scale); +-#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 14, 0) +- cairo_surface_set_device_scale(m_pSurface, scale, scale); +-#endif +-#else +- m_pSurface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, +- aFrameSize.getX(), +- aFrameSize.getY()); +-#endif ++ m_pSurface = gdk_window_create_similar_surface(widget_get_window(m_pWindow), ++ CAIRO_CONTENT_COLOR_ALPHA, ++ aFrameSize.getX(), ++ aFrameSize.getY()); ++ m_aFrameSize = aFrameSize; ++ + cairo_surface_set_user_data(m_pSurface, SvpSalGraphics::getDamageKey(), &m_aDamageHandler, nullptr); + SAL_INFO("vcl.gtk3", "allocated Frame size of " << maGeometry.nWidth << " x " << maGeometry.nHeight); + + if (m_pGraphics) +- m_pGraphics->setSurface(m_pSurface); ++ m_pGraphics->setSurface(m_pSurface, m_aFrameSize); + } + } + +@@ -2967,13 +2953,23 @@ gboolean GtkSalFrame::signalDraw(GtkWidget*, cairo_t *cr, gpointer frame) + return false; + } + +-void GtkSalFrame::sizeAllocated(GtkWidget*, GdkRectangle *pAllocation, gpointer frame) ++void GtkSalFrame::sizeAllocated(GtkWidget* pWidget, GdkRectangle *pAllocation, gpointer frame) + { + GtkSalFrame* pThis = static_cast(frame); + pThis->maGeometry.nWidth = pAllocation->width; + pThis->maGeometry.nHeight = pAllocation->height; +- pThis->AllocateFrame(); ++ bool bRealized = gtk_widget_get_realized(pWidget); ++ if (bRealized) ++ pThis->AllocateFrame(); + pThis->CallCallbackExc( SalEvent::Resize, nullptr ); ++ if (bRealized && !pThis->m_bSalObjectSetPosSize) ++ pThis->TriggerPaintEvent(); ++} ++ ++void GtkSalFrame::signalRealize(GtkWidget*, gpointer frame) ++{ ++ GtkSalFrame* pThis = static_cast(frame); ++ pThis->AllocateFrame(); + if (pThis->m_bSalObjectSetPosSize) + return; + pThis->TriggerPaintEvent(); +-- +2.13.0 + diff --git a/SOURCES/0001-change-from-glew-to-epoxy.patch b/SOURCES/0001-change-from-glew-to-epoxy.patch new file mode 100644 index 0000000..b1b8ac5 --- /dev/null +++ b/SOURCES/0001-change-from-glew-to-epoxy.patch @@ -0,0 +1,1744 @@ +From 6562e12885fa2abf1a1bf0d606b08e00c4547934 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Fri, 25 Nov 2016 20:25:27 +0000 +Subject: [PATCH] change from glew to epoxy + +cause that works under wayland out of the box and gtk3 uses it already + +Change-Id: Iefaac31e325534a81a5389f752804af917c1baef +--- + Makefile.fetch | 2 +- + RepositoryExternal.mk | 46 +++++++++------------ + avmedia/Library_avmedia.mk | 2 +- + avmedia/Library_avmediaogl.mk | 6 +-- + bin/check-elf-dynamic-objects | 2 +- + bin/lo-all-static-libs | 2 +- + canvas/Library_oglcanvas.mk | 7 +--- + canvas/source/opengl/ogl_buffercontext.hxx | 2 +- + canvas/source/opengl/ogl_canvascustomsprite.cxx | 2 +- + canvas/source/opengl/ogl_canvashelper.cxx | 2 +- + canvas/source/opengl/ogl_canvastools.cxx | 2 +- + canvas/source/opengl/ogl_texturecache.cxx | 2 +- + canvas/source/opengl/ogl_tools.hxx | 3 +- + chart2/Library_chartcore.mk | 9 +--- + chart2/Library_chartopengl.mk | 4 +- + chart2/inc/pch/precompiled_chartcore.hxx | 2 +- + chart2/source/view/charttypes/GL3DBarChart.cxx | 2 +- + chart2/source/view/main/GL3DRenderer.cxx | 8 ++-- + chart2/source/view/main/OpenGLRender.cxx | 2 +- + config_host.mk.in | 6 +-- + config_host/config_opengl.h.in | 10 ----- + configure.ac | 21 +++++----- + cui/Library_cui.mk | 2 +- + distro-configs/LibreOfficeFlatpak.conf | 1 - + download.lst | 7 ++-- + external/Module_external.mk | 2 +- + external/glew/ExternalPackage_glew.mk | 33 --------------- + external/glew/ExternalProject_glew.mk | 36 ---------------- + external/glew/Makefile | 7 ---- + external/glew/Module_glew.mk | 18 -------- + external/glew/README | 6 --- + external/glew/UnpackedTarball_glew.mk | 48 ---------------------- + external/glew/glew-macosx-install-name.patch.1 | 13 ------ + external/glew/glew-msvc-disable-sse2.patch.1 | 10 ----- + external/glew/glew-static-only.patch.1 | 12 ------ + external/glew/glew-tmpdir.patch.1 | 13 ------ + external/glew/glew_use_CC_variable.patch.1 | 24 ----------- + external/libgltf/ExternalProject_libgltf.mk | 10 ++--- + external/libgltf/libgltf-msvc-x64.patch.1 | 31 +++++++------- + include/vcl/opengl/OpenGLContext.hxx | 6 +-- + include/vcl/opengl/OpenGLHelper.hxx | 2 +- + include/vcl/opengl/OpenGLWrapper.hxx | 2 +- + slideshow/Library_OGLTrans.mk | 9 +--- + slideshow/Library_slideshow.mk | 2 +- + slideshow/source/engine/opengl/TransitionImpl.cxx | 1 - + slideshow/source/engine/opengl/TransitionImpl.hxx | 3 +- + .../source/engine/opengl/TransitionerImpl.cxx | 2 +- + svx/Library_svxcore.mk | 2 +- + toolkit/Library_tk.mk | 2 +- + vcl/CppunitTest_vcl_bitmap_test.mk | 2 +- + vcl/CppunitTest_vcl_wmf_test.mk | 4 +- + vcl/Executable_icontest.mk | 2 +- + vcl/Executable_vcldemo.mk | 2 +- + vcl/Executable_visualbackendtest.mk | 1 - + vcl/Library_vcl.mk | 3 +- + vcl/Library_vclplug_gen.mk | 3 +- + vcl/Library_vclplug_gtk.mk | 2 +- + vcl/Library_vclplug_gtk3.mk | 2 +- + vcl/Library_vclplug_kde4.mk | 2 +- + vcl/inc/opengl/LineRenderUtils.hxx | 1 - + vcl/inc/opengl/VertexUtils.hxx | 2 +- + vcl/inc/opengl/framebuffer.hxx | 1 - + vcl/inc/opengl/program.hxx | 1 - + vcl/inc/opengl/texture.hxx | 2 +- + vcl/inc/pch/precompiled_vcl.hxx | 2 +- + vcl/inc/unx/saldisp.hxx | 2 +- + vcl/opengl/x11/gdiimpl.cxx | 31 ++++++-------- + vcl/osx/salobj.cxx | 4 +- + vcl/source/opengl/OpenGLContext.cxx | 34 +++------------ + vcl/source/opengl/OpenGLHelper.cxx | 8 ++-- + vcl/unx/generic/app/saldisp.cxx | 1 - + vcl/workben/icontest.cxx | 2 - + 72 files changed, 128 insertions(+), 434 deletions(-) + delete mode 100644 config_host/config_opengl.h.in + delete mode 100644 external/glew/ExternalPackage_glew.mk + delete mode 100644 external/glew/ExternalProject_glew.mk + delete mode 100644 external/glew/Makefile + delete mode 100644 external/glew/Module_glew.mk + delete mode 100644 external/glew/README + delete mode 100644 external/glew/UnpackedTarball_glew.mk + delete mode 100644 external/glew/glew-macosx-install-name.patch.1 + delete mode 100644 external/glew/glew-msvc-disable-sse2.patch.1 + delete mode 100644 external/glew/glew-static-only.patch.1 + delete mode 100644 external/glew/glew-tmpdir.patch.1 + delete mode 100644 external/glew/glew_use_CC_variable.patch.1 + +diff --git a/Makefile.fetch b/Makefile.fetch +index 3e21be3..cf31e5b 100644 +--- a/Makefile.fetch ++++ b/Makefile.fetch +@@ -129,7 +129,7 @@ $(WORKDIR)/download: $(BUILDDIR)/config_host.mk $(SRCDIR)/download.lst $(SRCDIR) + $(call fetch_Optional,FONTCONFIG,FONTCONFIG_TARBALL) \ + $(call fetch_Optional,FREEHAND,FREEHAND_TARBALL) \ + $(call fetch_Optional,FREETYPE,FREETYPE_TARBALL) \ +- $(call fetch_Optional,GLEW,GLEW_TARBALL) \ ++ $(call fetch_Optional,EPOXY,EPOXY_TARBALL) \ + $(call fetch_Optional,GLM,GLM_TARBALL) \ + $(call fetch_Optional_pack,GOOGLE_DOCS_EXTENSION_PACK) \ + $(call fetch_Optional,GRAPHITE,GRAPHITE_TARBALL) \ +diff --git a/RepositoryExternal.mk b/RepositoryExternal.mk +index 109b924..16ba7a8 100644 +--- a/RepositoryExternal.mk ++++ b/RepositoryExternal.mk +@@ -183,51 +183,43 @@ endef + + endif # SYSTEM_CPPUNIT + +-ifneq ($(SYSTEM_GLEW),) ++ifneq ($(SYSTEM_EPOXY),) + +-define gb_LinkTarget__use_glew ++define gb_LinkTarget__use_epoxy + $(call gb_LinkTarget_set_include,$(1),\ + $$(INCLUDE) \ +- $(GLEW_CFLAGS) \ ++ $(EPOXY_CFLAGS) \ + ) +-$(call gb_LinkTarget_add_libs,$(1),$(GLEW_LIBS)) ++$(call gb_LinkTarget_add_libs,$(1),$(EPOXY_LIBS)) + + endef + +-gb_ExternalProject__use_glew := ++gb_ExternalProject__use_epoxy := + +-else # !SYSTEM_GLEW ++else # !SYSTEM_EPOXY + +-$(eval $(call gb_Helper_register_packages_for_install,ooo,\ +- glew \ +-)) +- +-define gb_LinkTarget__use_glew +-$(call gb_LinkTarget_use_package,$(1),glew) ++define gb_LinkTarget__use_epoxy + $(call gb_LinkTarget_set_include,$(1),\ +- -I$(call gb_UnpackedTarball_get_dir,glew/include) \ +- -DGLEW_NO_GLU \ +- $$(INCLUDE) \ ++ -I$(call gb_UnpackedTarball_get_dir,epoxy/include) \ ++ $$(INCLUDE) \ + ) + +-ifeq ($(COM),MSC) +-$(call gb_LinkTarget_add_libs,$(1),\ +- $(call gb_UnpackedTarball_get_dir,glew)/lib/$(if $(MSVC_USE_DEBUG_RUNTIME),Debug/$(wnt_arch_subdir_mandatory)/glew32d.lib,Release/$(wnt_arch_subdir_mandatory)/glew32.lib) \ +-) +-else +-$(call gb_LinkTarget_add_libs,$(1),\ +- -L$(call gb_UnpackedTarball_get_dir,glew)/lib/ -lGLEW \ ++$(call gb_LinkTarget_use_libraries,$(1),\ ++ epoxy \ + ) +-endif + + endef + +-define gb_ExternalProject__use_glew +-$(call gb_ExternalProject_use_external_project,$(1),glew) ++$(eval $(call gb_Helper_register_libraries_for_install,PLAINLIBS_OOO,ooo,\ ++ epoxy \ ++)) ++ ++define gb_ExternalProject__use_epoxy ++$(call gb_ExternalProject_use_external_project,$(1),epoxy) + + endef + +-endif # SYSTEM_GLEW ++endif # SYSTEM_EPOXY + + define gb_LinkTarget__use_iconv + $(call gb_LinkTarget_add_libs,$(1),-liconv) +@@ -3444,7 +3436,7 @@ $(call gb_LinkTarget_add_libs,$(1),\ + ) + else + $(call gb_LinkTarget_add_libs,$(1),\ +- $(call gb_UnpackedTarball_get_dir,libgltf)/src/.libs/libgltf-0.0$(gb_StaticLibrary_PLAINEXT) \ ++ $(call gb_UnpackedTarball_get_dir,libgltf)/src/.libs/libgltf-0.1$(gb_StaticLibrary_PLAINEXT) \ + ) + endif + +diff --git a/avmedia/Library_avmedia.mk b/avmedia/Library_avmedia.mk +index 4e8f3b1..e662fc3 100644 +--- a/avmedia/Library_avmedia.mk ++++ b/avmedia/Library_avmedia.mk +@@ -29,7 +29,7 @@ $(eval $(call gb_Library_use_externals,avmedia,\ + + ifeq ($(ENABLE_HEADLESS),) + $(eval $(call gb_Library_use_externals,avmedia,\ +- glew \ ++ epoxy \ + )) + endif + +diff --git a/avmedia/Library_avmediaogl.mk b/avmedia/Library_avmediaogl.mk +index b7498bf..191fb75 100644 +--- a/avmedia/Library_avmediaogl.mk ++++ b/avmedia/Library_avmediaogl.mk +@@ -16,7 +16,7 @@ $(eval $(call gb_Library_use_sdk_api,avmediaogl)) + $(eval $(call gb_Library_use_externals,avmediaogl, \ + boost_headers \ + libgltf \ +- glew \ ++ epoxy \ + glm_headers \ + )) + +@@ -51,10 +51,6 @@ else ifeq ($(OS),MACOSX) + $(eval $(call gb_Library_use_system_darwin_frameworks,avmediaogl,\ + OpenGL \ + )) +-else ifeq ($(OS), $(filter LINUX %BSD SOLARIS, $(OS))) +-$(eval $(call gb_Library_add_libs,avmediaogl,\ +- -lGL \ +-)) + endif + + # vim: set noet sw=4 ts=4: +diff --git a/bin/check-elf-dynamic-objects b/bin/check-elf-dynamic-objects +index f05d513..d189c1b 100755 +--- a/bin/check-elf-dynamic-objects ++++ b/bin/check-elf-dynamic-objects +@@ -110,7 +110,7 @@ local file="$1" + */libdesktop_detectorlo.so|*/ui-previewer|*/oosplash|*/gengal.bin) + whitelist="${whitelist} ${x11whitelist}" + ;; +- */libvclplug_genlo.so|*/libGLEW.so.*|*/libchartcorelo.so|*/libavmediaogl.so|*/libOGLTranslo.so|*/liboglcanvaslo.so|*/libchartopengllo.so) ++ */libvclplug_genlo.so|*/libchartcorelo.so|*/libavmediaogl.so|*/libOGLTranslo.so|*/liboglcanvaslo.so|*/libchartopengllo.so) + whitelist="${whitelist} ${x11whitelist} ${openglwhitelist}" + ;; + */libvcllo.so|*/libsofficeapp.so) +diff --git a/bin/lo-all-static-libs b/bin/lo-all-static-libs +index 813241e..9faa042 100755 +--- a/bin/lo-all-static-libs ++++ b/bin/lo-all-static-libs +@@ -63,7 +63,7 @@ echo $INSTDIR/$LIBO_LIB_FOLDER/lib*.a \ + $WORKDIR/UnpackedTarball/coinmp/CoinMP/src/.libs/*.a \ + $WORKDIR/UnpackedTarball/coinmp/CoinUtils/src/.libs/*.a \ + $WORKDIR/UnpackedTarball/coinmp/Osi/src/Osi/.libs/*.a \ +- $WORKDIR/UnpackedTarball/glew/lib/*.a \ ++ $WORKDIR/UnpackedTarball/epoxy/lib/*.a \ + $WORKDIR/UnpackedTarball/icu/source/lib/*.a \ + $WORKDIR/UnpackedTarball/langtag/liblangtag/.libs/*.a \ + $WORKDIR/UnpackedTarball/lcms2/src/.libs/*.a \ +diff --git a/canvas/Library_oglcanvas.mk b/canvas/Library_oglcanvas.mk +index 0118eb1..9d1042d 100644 +--- a/canvas/Library_oglcanvas.mk ++++ b/canvas/Library_oglcanvas.mk +@@ -42,7 +42,7 @@ $(eval $(call gb_Library_add_exception_objects,oglcanvas,\ + + $(eval $(call gb_Library_use_externals,oglcanvas,\ + boost_headers \ +- glew \ ++ epoxy \ + )) + + ifeq ($(strip $(OS)),MACOSX) +@@ -58,11 +58,6 @@ $(eval $(call gb_Library_use_system_win32_libs,oglcanvas,\ + opengl32 \ + )) + +-else +-$(eval $(call gb_Library_add_libs,oglcanvas,\ +- -lGL \ +- -lX11 \ +-)) + endif + + # vim: set noet sw=4 ts=4: +diff --git a/canvas/source/opengl/ogl_buffercontext.hxx b/canvas/source/opengl/ogl_buffercontext.hxx +index 202e063..7f2066a 100644 +--- a/canvas/source/opengl/ogl_buffercontext.hxx ++++ b/canvas/source/opengl/ogl_buffercontext.hxx +@@ -10,7 +10,7 @@ + #ifndef INCLUDED_CANVAS_SOURCE_OPENGL_OGL_BUFFERCONTEXT_HXX + #define INCLUDED_CANVAS_SOURCE_OPENGL_OGL_BUFFERCONTEXT_HXX + +-#include ++#include + + #include + #include +diff --git a/canvas/source/opengl/ogl_canvascustomsprite.cxx b/canvas/source/opengl/ogl_canvascustomsprite.cxx +index 8d38177..6b23d45 100644 +--- a/canvas/source/opengl/ogl_canvascustomsprite.cxx ++++ b/canvas/source/opengl/ogl_canvascustomsprite.cxx +@@ -9,7 +9,7 @@ + + #include + +-#include ++#include + + #include + #include +diff --git a/canvas/source/opengl/ogl_canvashelper.cxx b/canvas/source/opengl/ogl_canvashelper.cxx +index 84a96ce..175a02b 100644 +--- a/canvas/source/opengl/ogl_canvashelper.cxx ++++ b/canvas/source/opengl/ogl_canvashelper.cxx +@@ -11,7 +11,7 @@ + + #include + #include +-#include ++#include + + #include + #include +diff --git a/canvas/source/opengl/ogl_canvastools.cxx b/canvas/source/opengl/ogl_canvastools.cxx +index 657a220..3d9448b 100644 +--- a/canvas/source/opengl/ogl_canvastools.cxx ++++ b/canvas/source/opengl/ogl_canvastools.cxx +@@ -9,7 +9,7 @@ + + #include + +-#include ++#include + + #include + #include +diff --git a/canvas/source/opengl/ogl_texturecache.cxx b/canvas/source/opengl/ogl_texturecache.cxx +index 08cdd2f..43fb7d8 100644 +--- a/canvas/source/opengl/ogl_texturecache.cxx ++++ b/canvas/source/opengl/ogl_texturecache.cxx +@@ -9,7 +9,7 @@ + + #include + +-#include ++#include + + #include + +diff --git a/canvas/source/opengl/ogl_tools.hxx b/canvas/source/opengl/ogl_tools.hxx +index 8133212..469a5be 100644 +--- a/canvas/source/opengl/ogl_tools.hxx ++++ b/canvas/source/opengl/ogl_tools.hxx +@@ -11,8 +11,7 @@ + #define INCLUDED_CANVAS_SOURCE_OPENGL_OGL_TOOLS_HXX + + #include +-#include +- ++#include + + namespace oglcanvas + { +diff --git a/chart2/Library_chartcore.mk b/chart2/Library_chartcore.mk +index b15f634..cc06fbd 100644 +--- a/chart2/Library_chartcore.mk ++++ b/chart2/Library_chartcore.mk +@@ -32,7 +32,7 @@ $(eval $(call gb_Library_use_externals,chartcore,\ + + ifeq ($(ENABLE_HEADLESS),) + $(eval $(call gb_Library_use_externals,chartcore,\ +- glew \ ++ epoxy \ + )) + endif + +@@ -264,13 +264,6 @@ else ifeq ($(OS), $(filter LINUX %BSD SOLARIS, $(OS))) + $(eval $(call gb_Library_add_libs,chartcore,\ + $(DLOPEN_LIBS) \ + )) +-ifeq ($(ENABLE_HEADLESS),) +-$(eval $(call gb_Library_add_libs,chartcore,\ +- -lGL \ +- -lX11 \ +-)) +-endif #!ENABLE_HEADLESS +- + endif + + # vim: set noet sw=4 ts=4: +diff --git a/chart2/Library_chartopengl.mk b/chart2/Library_chartopengl.mk +index 95ea58d..53056aa 100644 +--- a/chart2/Library_chartopengl.mk ++++ b/chart2/Library_chartopengl.mk +@@ -22,7 +22,7 @@ $(eval $(call gb_Library_set_precompiled_header,chartopengl,$(SRCDIR)/chart2/inc + $(eval $(call gb_Library_use_externals,chartopengl,\ + boost_headers \ + glm_headers \ +- glew \ ++ epoxy \ + )) + + $(eval $(call gb_Library_use_sdk_api,chartopengl)) +@@ -68,8 +68,6 @@ $(eval $(call gb_Library_use_system_darwin_frameworks,chartopengl,\ + else ifeq ($(OS), $(filter LINUX %BSD SOLARIS, $(OS))) + $(eval $(call gb_Library_add_libs,chartopengl,\ + $(DLOPEN_LIBS) \ +- -lGL \ +- -lX11 \ + )) + endif + +diff --git a/chart2/inc/pch/precompiled_chartcore.hxx b/chart2/inc/pch/precompiled_chartcore.hxx +index 8d02451..908d7ac 100644 +--- a/chart2/inc/pch/precompiled_chartcore.hxx ++++ b/chart2/inc/pch/precompiled_chartcore.hxx +@@ -73,7 +73,6 @@ + #include + #include + #include +-#include + #include + #include + #include +@@ -169,6 +168,7 @@ + #include + #include + #include ++#include + #include + #include + #include +diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx +index a4193da..401b664 100644 +--- a/chart2/source/view/charttypes/GL3DBarChart.cxx ++++ b/chart2/source/view/charttypes/GL3DBarChart.cxx +@@ -9,7 +9,7 @@ + + #include + +-#include ++#include + + #include + #include +diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx +index fb4fb13..e1e4c01 100644 +--- a/chart2/source/view/main/GL3DRenderer.cxx ++++ b/chart2/source/view/main/GL3DRenderer.cxx +@@ -7,7 +7,7 @@ + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +-#include ++#include + + #include "GL3DRenderer.hxx" + +@@ -244,8 +244,8 @@ void OpenGL3DRenderer::ShaderResources::LoadShaders() + m_3DBatchNormalID = glGetAttribLocation(m_3DBatchProID, "vertexNormalModelspace"); + m_3DBatchColorID = glGetAttribLocation(m_3DBatchProID, "barColor"); + #if !defined MACOSX +- //check whether the texture array is support +- mbTexBatchSupport = GLEW_EXT_texture_array; ++ //check whether the texture array is supported ++ mbTexBatchSupport = epoxy_has_gl_extension("GL_EXT_texture_array"); + #endif + CHECK_GL_ERROR(); + if (mbTexBatchSupport) +@@ -401,7 +401,7 @@ void OpenGL3DRenderer::init() + m_fViewAngle = 30.0f; + m_3DProjection = glm::perspective(m_fViewAngle, (float)m_iWidth / (float)m_iHeight, 0.01f, 6000.0f); + +- maResources.m_b330Support = GLEW_VERSION_3_3; ++ maResources.m_b330Support = epoxy_gl_version() >= 33; + CHECK_GL_ERROR(); + maResources.LoadShaders(); + maPickingResources.LoadShaders(); +diff --git a/chart2/source/view/main/OpenGLRender.cxx b/chart2/source/view/main/OpenGLRender.cxx +index 3182e66..91a3763 100644 +--- a/chart2/source/view/main/OpenGLRender.cxx ++++ b/chart2/source/view/main/OpenGLRender.cxx +@@ -7,7 +7,7 @@ + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +-#include ++#include + #include + #include "OpenGLRender.hxx" + #include +diff --git a/config_host.mk.in b/config_host.mk.in +index 3d39dcd..2a8fe3d 100644 +--- a/config_host.mk.in ++++ b/config_host.mk.in +@@ -201,8 +201,8 @@ export GIO_LIBS=$(gb_SPACE)@GIO_LIBS@ + export GIT_REFERENCE_SRC=@GIT_REFERENCE_SRC@ + export GIT_LINK_SRC=@GIT_LINK_SRC@ + export GIT_NEEDED_SUBMODULES=@GIT_NEEDED_SUBMODULES@ +-export GLEW_CFLAGS=$(gb_SPACE)@GLEW_CFLAGS@ +-export GLEW_LIBS=$(gb_SPACE)@GLEW_LIBS@ ++export EPOXY_CFLAGS=$(gb_SPACE)@EPOXY_CFLAGS@ ++export EPOXY_LIBS=$(gb_SPACE)@EPOXY_LIBS@ + export GLM_CFLAGS=$(gb_SPACE)@GLM_CFLAGS@ + export GNOMEVFS_CFLAGS=$(gb_SPACE)@GNOMEVFS_CFLAGS@ + export GNOMEVFS_LIBS=$(gb_SPACE)@GNOMEVFS_LIBS@ +@@ -514,7 +514,7 @@ export SYSTEM_FIREBIRD=@SYSTEM_FIREBIRD@ + export SYSTEM_GENBRK=@SYSTEM_GENBRK@ + export SYSTEM_GENCCODE=@SYSTEM_GENCCODE@ + export SYSTEM_GENCMN=@SYSTEM_GENCMN@ +-export SYSTEM_GLEW=@SYSTEM_GLEW@ ++export SYSTEM_EPOXY=@SYSTEM_EPOXY@ + export SYSTEM_GLM=@SYSTEM_GLM@ + export SYSTEM_GRAPHITE=@SYSTEM_GRAPHITE@ + export SYSTEM_HARFBUZZ=@SYSTEM_HARFBUZZ@ +diff --git a/config_host/config_opengl.h.in b/config_host/config_opengl.h.in +deleted file mode 100644 +index 67b9e47..0000000 +--- a/config_host/config_opengl.h.in ++++ /dev/null +@@ -1,10 +0,0 @@ +-/* +-Settings for OpenGL +-*/ +- +-#ifndef CONFIG_OPENGL_H +-#define CONFIG_OPENGL_H +- +-#define HAVE_GLEW_1_12 0 +- +-#endif +diff --git a/configure.ac b/configure.ac +index 7fdcc65..f8b5df8 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1645,6 +1645,11 @@ AC_ARG_WITH(system-cairo, + [Use cairo libraries already on system. Happens automatically for + (implicit) --enable-gtk and for --enable-gtk3.])) + ++AC_ARG_WITH(system-epoxy, ++ AS_HELP_STRING([--with-system-epoxy], ++ [Use epoxy libraries already on system. Happens automatically for ++ --enable-gtk3.])) ++ + AC_ARG_WITH(myspell-dicts, + AS_HELP_STRING([--with-myspell-dicts], + [Adds myspell dictionaries to the LibreOffice installation set]), +@@ -8952,14 +8957,6 @@ AC_SUBST([GLM_CFLAGS]) + AC_SUBST([SYSTEM_GLM]) + + dnl =================================================================== +-dnl Check for system glew +-dnl =================================================================== +-libo_CHECK_SYSTEM_MODULE([glew], [GLEW], [glew >= 1.10.0]) +-AS_IF([test "$with_system_glew" = "yes"], +- [PKG_CHECK_EXISTS([glew >= 1.12.0], [AC_DEFINE([HAVE_GLEW_1_12])])], +- [AC_DEFINE([HAVE_GLEW_1_12])]) +- +-dnl =================================================================== + dnl Check for system odbc + dnl =================================================================== + AC_MSG_CHECKING([which odbc headers to use]) +@@ -10508,7 +10505,7 @@ if test "x$enable_gltf" != "xno" -a $_os != iOS -a $_os != Android -a "$ENABLE_H + AC_DEFINE(HAVE_FEATURE_GLTF,1) + if test "$with_system_libgltf" = "yes"; then + SYSTEM_LIBGLTF=TRUE +- PKG_CHECK_MODULES( LIBGLTF, [libgltf-0.0 >= 0.0.1] ) ++ PKG_CHECK_MODULES( LIBGLTF, [libgltf-0.1 >= 0.1.0] ) + FilterLibs "${LIBGLTF_LIBS}" + LIBGLTF_LIBS="${filteredlibs}" + else +@@ -11739,6 +11736,11 @@ AC_SUBST(CAIRO_CFLAGS) + AC_SUBST(CAIRO_LIBS) + + dnl =================================================================== ++dnl Check for system epoxy ++dnl =================================================================== ++libo_CHECK_SYSTEM_MODULE([epoxy], [EPOXY], [epoxy >= 1.3.1], ["-I${WORKDIR}/UnpackedTarball/epoxy/include"]) ++ ++dnl =================================================================== + dnl Test whether to use avahi + dnl =================================================================== + if test "$_os" = "WINNT"; then +@@ -12897,7 +12899,6 @@ AC_CONFIG_HEADERS([config_host/config_mpl.h]) + AC_CONFIG_HEADERS([config_host/config_orcus.h]) + AC_CONFIG_HEADERS([config_host/config_kde4.h]) + AC_CONFIG_HEADERS([config_host/config_oox.h]) +-AC_CONFIG_HEADERS([config_host/config_opengl.h]) + AC_CONFIG_HEADERS([config_host/config_options.h]) + AC_CONFIG_HEADERS([config_host/config_options_calc.h]) + AC_CONFIG_HEADERS([config_host/config_test.h]) +diff --git a/cui/Library_cui.mk b/cui/Library_cui.mk +index 6a63a1d..64f7844 100644 +--- a/cui/Library_cui.mk ++++ b/cui/Library_cui.mk +@@ -72,7 +72,7 @@ $(eval $(call gb_Library_use_externals,cui,\ + )) + ifeq ($(ENABLE_HEADLESS),) + $(eval $(call gb_Library_use_externals,cui,\ +- glew \ ++ epoxy \ + )) + endif + +diff --git a/distro-configs/LibreOfficeFlatpak.conf b/distro-configs/LibreOfficeFlatpak.conf +index a7a0c73..d85e8ea 100644 +--- a/distro-configs/LibreOfficeFlatpak.conf ++++ b/distro-configs/LibreOfficeFlatpak.conf +@@ -11,7 +11,6 @@ + --without-system-coinmp + --without-system-cppunit + --without-system-firebird +---without-system-glew + --without-system-glm + --without-system-libabw + --without-system-libcdr +diff --git a/download.lst b/download.lst +index 4c67612..49d659a 100644 +--- a/download.lst ++++ b/download.lst +@@ -29,6 +29,8 @@ export CURL_TARBALL := curl-7.52.1.tar.gz + export DBGHELP_DLL := 13fbc2e8b37ddf28181dd6d8081c2b8e-dbghelp.dll + export EBOOK_MD5SUM := 6b48eda57914e6343efebc9381027b78 + export EBOOK_TARBALL := libe-book-0.1.2.tar.bz2 ++export EPOXY_MD5SUM := 96f6620a9b005a503e7b44b0b528287d ++export EPOXY_TARBALL := libepoxy-1.3.1.tar.bz2 + export EPM_TARBALL := 3ade8cfe7e59ca8e65052644fed9fca4-epm-3.7.tar.gz + export ETONYEK_MD5SUM := 77ff46936dcc83670557274e7dd2aa33 + export ETONYEK_VERSION_MICRO := 6 +@@ -54,7 +56,6 @@ export FONT_EMOJIONE_COLOR_TARBALL := EmojiOneColor-SVGinOT-1.3.tar.gz + export FREEHAND_MD5SUM := 8cf70c5dc4d24d2dc4a107f509d2d6d7 + export FREEHAND_TARBALL := libfreehand-0.1.1.tar.bz2 + export FREETYPE_TARBALL := dbf2caca1d3afd410a29217a9809d397-freetype-2.4.8.tar.bz2 +-export GLEW_TARBALL := 3941e9cab2f4f9d8faee3e8d57ae7664-glew-1.12.0.zip + export GLM_TARBALL := bae83fa5dc7f081768daace6e199adc3-glm-0.9.4.6-libreoffice.zip + export GRAPHITE_MD5SUM := 9c499b8ec9f1b81fd0bb6a3b986f4b0f + export GRAPHITE_TARBALL := graphite2-minimal-1.3.10.tgz +@@ -89,8 +90,8 @@ export LIBATOMIC_OPS_TARBALL := libatomic_ops-7_2d.zip + export LIBEOT_MD5SUM := aa24f5dd2a2992f4a116aa72af817548 + export LIBEOT_TARBALL := libeot-0.01.tar.bz2 + export LIBEXTTEXTCAT_TARBALL := 10d61fbaa6a06348823651b1bd7940fe-libexttextcat-3.4.4.tar.bz2 +-export LIBGLTF_MD5SUM := d63a9f47ab048f5009d90693d6aa6424 +-export LIBGLTF_TARBALL := libgltf-0.0.2.tar.bz2 ++export LIBGLTF_MD5SUM := 63ae962d0c436909979826fce0fca2fd ++export LIBGLTF_TARBALL := libgltf-0.1.0.tar.gz + export LIBLANGTAG_MD5SUM := 284f120247323a35122ab32b4b359c45 + export LIBLANGTAG_TARBALL := liblangtag-0.6.2.tar.bz2 + export LIBTOMMATH_MD5SUM := da283d2e3e72137d0c600ac36b991c9d +diff --git a/external/Module_external.mk b/external/Module_external.mk +index 1dbf97b..c14e668 100644 +--- a/external/Module_external.mk ++++ b/external/Module_external.mk +@@ -38,13 +38,13 @@ $(eval $(call gb_Module_add_moduledirs,external,\ + $(call gb_Helper_optional,CURL,curl) \ + $(call gb_Helper_optional,EBOOK,libebook) \ + $(call gb_Helper_optional,EPM,epm) \ ++ $(call gb_Helper_optional,EPOXY,epoxy) \ + $(call gb_Helper_optional,ETONYEK,libetonyek) \ + $(call gb_Helper_optional,EXPAT,expat) \ + $(call gb_Helper_optional,FIREBIRD,firebird) \ + $(call gb_Helper_optional,FONTCONFIG,fontconfig) \ + $(call gb_Helper_optional,FREEHAND,libfreehand) \ + $(call gb_Helper_optional,FREETYPE,freetype) \ +- $(call gb_Helper_optional,GLEW,glew) \ + $(call gb_Helper_optional,GLM,glm) \ + $(call gb_Helper_optional,GRAPHITE,graphite) \ + $(call gb_Helper_optional,HARFBUZZ,harfbuzz) \ +diff --git a/external/glew/ExternalPackage_glew.mk b/external/glew/ExternalPackage_glew.mk +deleted file mode 100644 +index e6adc8b..0000000 +--- a/external/glew/ExternalPackage_glew.mk ++++ /dev/null +@@ -1,33 +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_ExternalPackage_ExternalPackage,glew,glew)) +- +-$(eval $(call gb_ExternalPackage_use_external_project,glew,glew)) +- +-ifeq ($(OS)-$(COM),WNT-MSC) +-ifeq ($(CPUNAME),INTEL) +-glew_arch_subdir=Win32 +-else ifeq ($(CPUNAME),X86_64) +-glew_arch_subdir=x64 +-endif +-endif +- +-ifeq ($(OS),MACOSX) +-$(eval $(call gb_ExternalPackage_add_file,glew,$(LIBO_LIB_FOLDER)/libGLEW.1.12.0.dylib,lib/libGLEW.1.12.0.dylib)) +-else ifeq ($(OS)-$(COM),WNT-GCC) +-else ifeq ($(COM),MSC) +-$(eval $(call gb_ExternalPackage_add_files,glew,$(LIBO_LIB_FOLDER), \ +- bin/$(if $(MSVC_USE_DEBUG_RUNTIME),Debug/$(glew_arch_subdir)/glew32d.dll,Release/$(glew_arch_subdir)/glew32.dll) \ +-)) +-else ifeq ($(DISABLE_DYNLOADING),) +-$(eval $(call gb_ExternalPackage_add_file,glew,$(LIBO_LIB_FOLDER)/libGLEW.so.1.12,lib/libGLEW.so.1.12.0)) +-endif +- +-# vim: set noet sw=4 ts=4: +diff --git a/external/glew/ExternalProject_glew.mk b/external/glew/ExternalProject_glew.mk +deleted file mode 100644 +index 0d80cd0..0000000 +--- a/external/glew/ExternalProject_glew.mk ++++ /dev/null +@@ -1,36 +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_ExternalProject_ExternalProject,glew)) +- +-$(eval $(call gb_ExternalProject_register_targets,glew,\ +- build \ +-)) +- +-ifeq ($(COM),MSC) +-$(call gb_ExternalProject_get_state_target,glew,build) : +- $(call gb_ExternalProject_run,build,\ +- $(if $(filter 140,$(VCVER)),$(DEVENV) /Upgrade glew.sln,echo up-to-date) && \ +- msbuild.exe glew_shared.vcxproj /p:Platform=$(if $(filter INTEL,$(CPUNAME)),Win32,x64) /p:Configuration=$(if $(MSVC_USE_DEBUG_RUNTIME),Debug,Release) $(if $(filter 140,$(VCVER)),/p:PlatformToolset=v140,/p:PlatformToolset=v120) \ +- ,build/vc12) \ +- $(call gb_ExternalProject_run,build,\ +- msbuild.exe glewinfo.vcxproj /p:Platform=$(if $(filter INTEL,$(CPUNAME)),Win32,x64) /p:Configuration=Release $(if $(filter 140,$(VCVER)),/p:PlatformToolset=v140,/p:PlatformToolset=v120) \ +- ,build/vc12) +- +-else +- +-$(call gb_ExternalProject_get_state_target,glew,build) : +- $(call gb_ExternalProject_run,glew,\ +- $(if $(ENABLE_DEBUG),STRIP=) LD="$(CC)" \ +- $(MAKE) STRIP= glew.lib $(if $(filter DESKTOP,$(BUILD_TYPE)),$(if $(ENABLE_DEBUG),debug)) \ +- ) +- +-endif +- +-# vim: set noet sw=4 ts=4: +diff --git a/external/glew/Makefile b/external/glew/Makefile +deleted file mode 100644 +index e4968cf..0000000 +--- a/external/glew/Makefile ++++ /dev/null +@@ -1,7 +0,0 @@ +-# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +- +-module_directory:=$(dir $(realpath $(firstword $(MAKEFILE_LIST)))) +- +-include $(module_directory)/../../solenv/gbuild/partial_build.mk +- +-# vim: set noet sw=4 ts=4: +diff --git a/external/glew/Module_glew.mk b/external/glew/Module_glew.mk +deleted file mode 100644 +index 1d1b9a7..0000000 +--- a/external/glew/Module_glew.mk ++++ /dev/null +@@ -1,18 +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_Module_Module,glew)) +- +-$(eval $(call gb_Module_add_targets,glew,\ +- ExternalProject_glew \ +- UnpackedTarball_glew \ +- ExternalPackage_glew \ +-)) +- +-# vim: set noet sw=4 ts=4: +diff --git a/external/glew/README b/external/glew/README +deleted file mode 100644 +index 34b2d24..0000000 +--- a/external/glew/README ++++ /dev/null +@@ -1,6 +0,0 @@ +-GLEW is the OpenGL Extension Wrangler +- +-GLEW provides efficient run-time mechanisms for determining which OpenGL +-extensions are supported on the target platform. +- +-http://glew.sourceforge.net/ +diff --git a/external/glew/UnpackedTarball_glew.mk b/external/glew/UnpackedTarball_glew.mk +deleted file mode 100644 +index c47b7a0..0000000 +--- a/external/glew/UnpackedTarball_glew.mk ++++ /dev/null +@@ -1,48 +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_UnpackedTarball_UnpackedTarball,glew)) +- +-$(eval $(call gb_UnpackedTarball_set_tarball,glew,$(GLEW_TARBALL))) +- +-$(eval $(call gb_UnpackedTarball_set_patchlevel,glew,0)) +- +-$(eval $(call gb_UnpackedTarball_fix_end_of_line,glew,\ +- Makefile \ +- include/GL/glew.h \ +-)) +- +-ifeq ($(OS)$(COM),WNTMSC) +-$(eval $(call gb_UnpackedTarball_set_patchflags,glew,--binary)) +-$(eval $(call gb_UnpackedTarball_add_patches,glew,\ +- external/glew/glew-msvc-disable-sse2.patch.1 \ +-)) +-else +-$(eval $(call gb_UnpackedTarball_add_patches,glew,\ +- external/glew/glew_use_CC_variable.patch.1 \ +-)) +-endif +- +-ifeq ($(OS),MACOSX) +-$(eval $(call gb_UnpackedTarball_add_patches,glew,\ +- external/glew/glew-macosx-install-name.patch.1 \ +-)) +-endif +- +-ifeq ($(DISABLE_DYNLOADING),TRUE) +-$(eval $(call gb_UnpackedTarball_add_patches,glew,\ +- external/glew/glew-static-only.patch.1 \ +-)) +-endif +- +-$(eval $(call gb_UnpackedTarball_add_patches,glew,\ +- external/glew/glew-tmpdir.patch.1 \ +-)) +- +-# vim: set noet sw=4 ts=4: +diff --git a/external/glew/glew-macosx-install-name.patch.1 b/external/glew/glew-macosx-install-name.patch.1 +deleted file mode 100644 +index 75e8e7f..0000000 +--- a/external/glew/glew-macosx-install-name.patch.1 ++++ /dev/null +@@ -1,13 +0,0 @@ +--*- Mode:Diff -*- +-diff -ur glew.org/build/glew.rc glew/build/glew.rc +---- glew/config/Makefile.darwin +-+++ glew/config/Makefile.darwin +-@@ -20,7 +20,7 @@ +- LIB.DEVLNK = lib$(NAME).dylib +- LIB.SHARED = lib$(NAME).$(SO_VERSION).dylib +- LIB.STATIC = lib$(NAME).a +--LDFLAGS.SO = -dynamiclib -install_name $(GLEW_DEST)/lib/$(LIB.SHARED) -current_version $(SO_VERSION) -compatibility_version $(SO_MAJOR) +-+LDFLAGS.SO = -dynamiclib -install_name @__________________________________________________OOO/$(LIB.SHARED) -current_version $(SO_VERSION) -compatibility_version $(SO_MAJOR) +- LIB.SONAME.MX = lib$(NAME)mx.$(SO_MAJOR).dylib +- LIB.DEVLNK.MX = lib$(NAME)mx.dylib +- LIB.SHARED.MX = lib$(NAME)mx.$(SO_VERSION).dylib +diff --git a/external/glew/glew-msvc-disable-sse2.patch.1 b/external/glew/glew-msvc-disable-sse2.patch.1 +deleted file mode 100644 +index 6b07044..0000000 +--- a/external/glew/glew-msvc-disable-sse2.patch.1 ++++ /dev/null +@@ -1,10 +0,0 @@ +---- glew/build//vc10/common.props.orig 2014-10-02 15:06:57.027060664 +0200 +-+++ glew/build//vc10/common.props 2014-10-02 15:06:59.026060509 +0200 +-@@ -10,6 +10,7 @@ +- +- +- $(INCLUDE_DIR) +-+ StreamingSIMDExtensions +- +- +- +diff --git a/external/glew/glew-static-only.patch.1 b/external/glew/glew-static-only.patch.1 +deleted file mode 100644 +index 14ccff2..0000000 +--- a/external/glew/glew-static-only.patch.1 ++++ /dev/null +@@ -1,12 +0,0 @@ +--*- Mode:Diff -*- +---- glew/Makefile +-+++ glew/Makefile +-@@ -93,7 +93,7 @@ +- LIB.SOBJS.MX := $(addprefix tmp/$(SYSTEM)/mx/shared/,$(LIB.SRCS.NAMES)) +- LIB.SOBJS.MX := $(LIB.SOBJS.MX:.c=.o) +- +--glew.lib: lib lib/$(LIB.SHARED) lib/$(LIB.STATIC) glew.pc +-+glew.lib: lib lib/$(LIB.STATIC) +- +- lib: +- mkdir lib +diff --git a/external/glew/glew-tmpdir.patch.1 b/external/glew/glew-tmpdir.patch.1 +deleted file mode 100644 +index 9a2847b..0000000 +--- a/external/glew/glew-tmpdir.patch.1 ++++ /dev/null +@@ -1,13 +0,0 @@ +-diff -ur glew.org/Makefile glew/Makefile +---- glew.org/Makefile 2016-05-02 06:25:53.521291677 +0200 +-+++ glew/Makefile 2016-05-02 06:31:10.325035494 +0200 +-@@ -55,7 +55,8 @@ +- DIST_SRC_TGZ ?= $(shell pwd)/$(DIST_NAME).tgz +- DIST_WIN32 ?= $(shell pwd)/$(DIST_NAME)-win32.zip +- +--DIST_DIR := $(shell mktemp -d /tmp/glew.XXXXXX)/$(DIST_NAME) +-+TMPDIR ?= /tmp +-+DIST_DIR := $(shell mktemp -d $(TMPDIR)/glew.XXXXXX)/$(DIST_NAME) +- +- # To disable stripping of binaries either: +- # - use STRIP= on gmake command-line +diff --git a/external/glew/glew_use_CC_variable.patch.1 b/external/glew/glew_use_CC_variable.patch.1 +deleted file mode 100644 +index 56e9903..0000000 +--- a/external/glew/glew_use_CC_variable.patch.1 ++++ /dev/null +@@ -1,24 +0,0 @@ +-Use CC variable from environment, don't hardcode "cc". +- +---- glew/config/Makefile.linux.orig 2014-01-29 15:39:43.364972925 +0100 +-+++ glew/config/Makefile.linux 2014-01-29 15:44:45.621000941 +0100 +-@@ -1,6 +1,6 @@ +- NAME = $(GLEW_NAME) +--CC = cc +--LD = cc +-+CC ?= cc +-+LD ?= $(CC) +- M_ARCH ?= $(shell uname -m) +- ARCH64 = false +- ifeq (x86_64,${M_ARCH}) +---- glew/config/Makefile.darwin.orig 2014-01-29 15:44:39.541000377 +0100 +-+++ glew/config/Makefile.darwin 2014-01-29 15:44:47.548001120 +0100 +-@@ -1,6 +1,6 @@ +- NAME = $(GLEW_NAME) +--CC = cc +--LD = cc +-+CC ?= cc +-+LD ?= $(CC) +- CFLAGS.EXTRA = -dynamic -fno-common +- #CFLAGS.EXTRA += -no-cpp-precomp +- LDFLAGS.EXTRA = +diff --git a/external/libgltf/ExternalProject_libgltf.mk b/external/libgltf/ExternalProject_libgltf.mk +index 57c01d0..90a1d96 100644 +--- a/external/libgltf/ExternalProject_libgltf.mk ++++ b/external/libgltf/ExternalProject_libgltf.mk +@@ -17,7 +17,7 @@ $(eval $(call gb_ExternalProject_register_targets,libgltf,\ + + $(eval $(call gb_ExternalProject_use_externals,libgltf,\ + boost_headers \ +- glew \ ++ epoxy \ + glm_headers \ + )) + +@@ -30,8 +30,8 @@ ifeq ($(SYSTEM_BOOST),) + libgltf_AdditionalIncludes += "$(call gb_UnpackedTarball_get_dir,boost)" + endif + +-ifeq ($(SYSTEM_GLEW),) +-libgltf_AdditionalIncludes += "$(call gb_UnpackedTarball_get_dir,glew)/include" ++ifeq ($(SYSTEM_EPOXY),) ++libgltf_AdditionalIncludes += "$(call gb_UnpackedTarball_get_dir,epoxy)/include" + endif + + ifeq ($(SYSTEM_GLM),) +@@ -45,7 +45,7 @@ $(call gb_ExternalProject_get_state_target,libgltf,build) : + $(if $(filter 120,$(VCVER)),/p:PlatformToolset=v120 /p:VisualStudioVersion=12.0 /ToolsVersion:12.0) \ + $(if $(filter 140,$(VCVER)),/p:PlatformToolset=v140 /p:VisualStudioVersion=14.0 /ToolsVersion:14.0) \ + '/p:AdditionalIncludeDirectories=$(subst $(WHITESPACE),;,$(subst /,\,$(strip $(libgltf_AdditionalIncludes))))' \ +- /p:AdditionalLibraryDirectories=$(if $(SYSTEM_GLEW),,"$(subst /,\,$(call gb_UnpackedTarball_get_dir,glew))\lib\$(if $(MSVC_USE_DEBUG_RUNTIME),Debug,Release)\Win32") \ ++ /p:AdditionalLibraryDirectories=$(if $(SYSTEM_EPOXY),,"$(subst /,\,$(call gb_UnpackedTarball_get_dir,epoxy))\lib\$(if $(MSVC_USE_DEBUG_RUNTIME),Debug,Release)\Win32") \ + ,build/win32) + + else # !ifeq($(COM),MSC) +@@ -67,7 +67,7 @@ $(call gb_ExternalProject_get_state_target,libgltf,build) : + $(if $(ENABLE_DEBUG),--enable-debug,--disable-debug) \ + --disable-werror \ + BOOST_CFLAGS="$(BOOST_CPPFLAGS)" \ +- GLEW_CFLAGS="$(if $(SYSTEM_GLEW),$(GLEW_CFLAGS),-I$(call gb_UnpackedTarball_get_dir,glew)/include) -DGLEW_NO_GLU" \ ++ EPOXY_CFLAGS="$(if $(SYSTEM_EPOXY),$(EPOXY_CFLAGS),-I$(call gb_UnpackedTarball_get_dir,epoxy)/include)" \ + GLM_CFLAGS="$(if $(SYSTEM_GLM),$(GLM_CFLAGS),-I$(call gb_UnpackedTarball_get_dir,glm))" \ + $(if $(libgltf_CPPFLAGS),CPPFLAGS='$(libgltf_CPPFLAGS)') \ + && $(MAKE) \ +diff --git a/external/libgltf/libgltf-msvc-x64.patch.1 b/external/libgltf/libgltf-msvc-x64.patch.1 +index 86417a7..32a831b 100644 +--- a/external/libgltf/libgltf-msvc-x64.patch.1 ++++ b/external/libgltf/libgltf-msvc-x64.patch.1 +@@ -20,7 +20,7 @@ diff -ur libgltf.org/build/win32/libgltf.vcxproj libgltf/build/win32/libgltf.vcx + + + +-@@ -56,6 +64,12 @@ ++@@ -53,6 +61,12 @@ + MultiByte + v110 + +@@ -33,7 +33,7 @@ diff -ur libgltf.org/build/win32/libgltf.vcxproj libgltf/build/win32/libgltf.vcx + + StaticLibrary + false +-@@ -63,15 +77,28 @@ ++@@ -60,15 +74,28 @@ + MultiByte + v110 + +@@ -62,8 +62,8 @@ diff -ur libgltf.org/build/win32/libgltf.vcxproj libgltf/build/win32/libgltf.vcx + + + +-@@ -86,6 +113,19 @@ +- opengl32.lib;glew32.lib;$(AdditionalDependencies) ++@@ -83,10 +110,42 @@ ++ opengl32.lib;epoxy32.lib;$(AdditionalDependencies) + + + + +@@ -76,20 +76,13 @@ diff -ur libgltf.org/build/win32/libgltf.vcxproj libgltf/build/win32/libgltf.vcx + + + + true + + $(AdditionalLibraryDirectories) +-+ opengl32.lib;glew32.lib;$(AdditionalDependencies) +++ opengl32.lib;epoxy32.lib;$(AdditionalDependencies) + + + + + + + Level4 +-@@ -105,6 +145,25 @@ +- Windows +- +- +-+ +-+ +-+ Level4 +-+ MaxSpeed ++ MaxSpeed + + StreamingSIMDExtensions + + true + + true +@@ -101,10 +94,14 @@ diff -ur libgltf.org/build/win32/libgltf.vcxproj libgltf/build/win32/libgltf.vcx + + true + + true + + $(AdditionalLibraryDirectories) +-+ opengl32.lib;glew32.lib;$(AdditionalDependencies) +++ opengl32.lib;epoxy32.lib;$(AdditionalDependencies) + + Windows + + + + +- +- +- +++ +++ +++ Level4 +++ MaxSpeed ++ StreamingSIMDExtensions ++ true ++ true +diff --git a/include/vcl/opengl/OpenGLContext.hxx b/include/vcl/opengl/OpenGLContext.hxx +index e3e9ce0..ffcd816 100644 +--- a/include/vcl/opengl/OpenGLContext.hxx ++++ b/include/vcl/opengl/OpenGLContext.hxx +@@ -12,7 +12,7 @@ + + #include + +-#include ++#include + + #include + #include +@@ -158,8 +158,8 @@ private: + virtual void destroyCurrentContext(); + + protected: +- bool InitGLEW(); +- static void InitGLEWDebugging(); ++ bool InitGL(); ++ static void InitGLDebugging(); + static void InitChildWindow(SystemChildWindow *pChildWindow); + static void BuffersSwapped(); + virtual GLWindow& getModifiableOpenGLWindow() = 0; +diff --git a/include/vcl/opengl/OpenGLHelper.hxx b/include/vcl/opengl/OpenGLHelper.hxx +index 458021f..23b9b79 100644 +--- a/include/vcl/opengl/OpenGLHelper.hxx ++++ b/include/vcl/opengl/OpenGLHelper.hxx +@@ -10,7 +10,7 @@ + #ifndef INCLUDED_VCL_OPENGL_OPENGLHELPER_HXX + #define INCLUDED_VCL_OPENGL_OPENGLHELPER_HXX + +-#include ++#include + #include + #include + #include +diff --git a/include/vcl/opengl/OpenGLWrapper.hxx b/include/vcl/opengl/OpenGLWrapper.hxx +index 3b7f6a7..e9fb967 100644 +--- a/include/vcl/opengl/OpenGLWrapper.hxx ++++ b/include/vcl/opengl/OpenGLWrapper.hxx +@@ -7,7 +7,7 @@ + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +-// Fully wrapped methods that have no exotic GL / GLEW header deps. ++// Fully wrapped methods that have no exotic GL header deps. + + #ifndef INCLUDED_VCL_OPENGL_OPENGLWRAPPER_HXX + #define INCLUDED_VCL_OPENGL_OPENGLWRAPPER_HXX +diff --git a/slideshow/Library_OGLTrans.mk b/slideshow/Library_OGLTrans.mk +index b908a0b..fb04596 100644 +--- a/slideshow/Library_OGLTrans.mk ++++ b/slideshow/Library_OGLTrans.mk +@@ -34,7 +34,7 @@ $(eval $(call gb_Library_use_libraries,OGLTrans,\ + + $(eval $(call gb_Library_use_externals,OGLTrans,\ + boost_headers \ +- glew \ ++ epoxy \ + glm_headers \ + )) + +@@ -56,13 +56,6 @@ $(eval $(call gb_Library_use_system_win32_libs,OGLTrans,\ + opengl32 \ + )) + +-else +- +-$(eval $(call gb_Library_add_libs,OGLTrans,\ +- -lGL \ +- -lX11 \ +-)) +- + endif + + $(eval $(call gb_Library_add_exception_objects,OGLTrans,\ +diff --git a/slideshow/Library_slideshow.mk b/slideshow/Library_slideshow.mk +index 3a9aac6..0583f5e 100644 +--- a/slideshow/Library_slideshow.mk ++++ b/slideshow/Library_slideshow.mk +@@ -31,7 +31,7 @@ $(eval $(call gb_Library_use_externals,slideshow,\ + )) + ifeq ($(ENABLE_HEADLESS),) + $(eval $(call gb_Library_use_externals,slideshow,\ +- glew \ ++ epoxy \ + )) + endif + +diff --git a/slideshow/source/engine/opengl/TransitionImpl.cxx b/slideshow/source/engine/opengl/TransitionImpl.cxx +index 60ab587..115aaf2 100644 +--- a/slideshow/source/engine/opengl/TransitionImpl.cxx ++++ b/slideshow/source/engine/opengl/TransitionImpl.cxx +@@ -26,7 +26,6 @@ + * + ************************************************************************/ + +-#include + #include + #include + #include +diff --git a/slideshow/source/engine/opengl/TransitionImpl.hxx b/slideshow/source/engine/opengl/TransitionImpl.hxx +index 66ecb6b..b739c0c 100644 +--- a/slideshow/source/engine/opengl/TransitionImpl.hxx ++++ b/slideshow/source/engine/opengl/TransitionImpl.hxx +@@ -31,8 +31,7 @@ + #include + #include + +-#include +- ++#include + #include + #include + +diff --git a/slideshow/source/engine/opengl/TransitionerImpl.cxx b/slideshow/source/engine/opengl/TransitionerImpl.cxx +index 61a28e9..1434b03 100644 +--- a/slideshow/source/engine/opengl/TransitionerImpl.cxx ++++ b/slideshow/source/engine/opengl/TransitionerImpl.cxx +@@ -830,7 +830,7 @@ void buildMipmaps( + GLint internalFormat, GLsizei width, GLsizei height, GLenum format, + GLenum type, const void * data) + { +- if (GLEW_ARB_framebuffer_object) { ++ if (epoxy_has_gl_extension("GL_ARB_framebuffer_object")) { + glTexImage2D( + GL_TEXTURE_2D, 0, internalFormat, width, height, 0, format, type, + data); +diff --git a/svx/Library_svxcore.mk b/svx/Library_svxcore.mk +index 557c427..48ecf22 100644 +--- a/svx/Library_svxcore.mk ++++ b/svx/Library_svxcore.mk +@@ -88,7 +88,7 @@ $(eval $(call gb_Library_use_externals,svxcore,\ + )) + ifeq ($(ENABLE_HEADLESS),) + $(eval $(call gb_Library_use_externals,svxcore,\ +- glew \ ++ epoxy \ + )) + endif + +diff --git a/toolkit/Library_tk.mk b/toolkit/Library_tk.mk +index 27bd721..b9a42d3 100644 +--- a/toolkit/Library_tk.mk ++++ b/toolkit/Library_tk.mk +@@ -27,7 +27,7 @@ $(eval $(call gb_Library_use_externals,tk,\ + + ifeq ($(ENABLE_HEADLESS),) + $(eval $(call gb_Library_use_externals,tk,\ +- glew \ ++ epoxy \ + )) + endif + $(eval $(call gb_Library_set_include,tk,\ +diff --git a/vcl/CppunitTest_vcl_bitmap_test.mk b/vcl/CppunitTest_vcl_bitmap_test.mk +index 879c7ac..70ce156 100644 +--- a/vcl/CppunitTest_vcl_bitmap_test.mk ++++ b/vcl/CppunitTest_vcl_bitmap_test.mk +@@ -19,7 +19,7 @@ $(eval $(call gb_CppunitTest_use_externals,vcl_bitmap_test,\ + )) + ifeq ($(ENABLE_HEADLESS),) + $(eval $(call gb_CppunitTest_use_externals,vcl_bitmap_test,\ +- glew \ ++ epoxy \ + )) + endif + +diff --git a/vcl/CppunitTest_vcl_wmf_test.mk b/vcl/CppunitTest_vcl_wmf_test.mk +index 44d6851..3b78147 100644 +--- a/vcl/CppunitTest_vcl_wmf_test.mk ++++ b/vcl/CppunitTest_vcl_wmf_test.mk +@@ -87,7 +87,7 @@ $(eval $(call gb_CppunitTest_use_externals,vcl_wmf_test,\ + )) + ifeq ($(ENABLE_HEADLESS),) + $(eval $(call gb_CppunitTest_use_externals,vcl_wmf_test,\ +- glew \ ++ epoxy \ + )) + endif + +@@ -136,7 +136,6 @@ $(eval $(call gb_CppunitTest_add_libs,vcl_wmf_test,\ + -lm \ + -ldl \ + -lpthread \ +- -lGL \ + -lX11 \ + )) + endif +@@ -189,7 +188,6 @@ ifeq ($(OS), $(filter LINUX %BSD SOLARIS, $(OS))) + $(eval $(call gb_CppunitTest_add_libs,vcl_wmf_test,\ + -lm $(DLOPEN_LIBS) \ + -lpthread \ +- -lGL \ + -lX11 \ + -lXext \ + )) +diff --git a/vcl/Executable_icontest.mk b/vcl/Executable_icontest.mk +index 102697b..cce8feb 100644 +--- a/vcl/Executable_icontest.mk ++++ b/vcl/Executable_icontest.mk +@@ -15,7 +15,7 @@ $(eval $(call gb_Executable_use_externals,icontest,\ + )) + ifeq ($(ENABLE_HEADLESS),) + $(eval $(call gb_Executable_use_externals,icontest,\ +- glew \ ++ epoxy \ + )) + endif + +diff --git a/vcl/Executable_vcldemo.mk b/vcl/Executable_vcldemo.mk +index bff091e..a09d3b4 100644 +--- a/vcl/Executable_vcldemo.mk ++++ b/vcl/Executable_vcldemo.mk +@@ -21,7 +21,7 @@ $(eval $(call gb_Executable_use_externals,vcldemo,\ + )) + ifeq ($(ENABLE_HEADLESS),) + $(eval $(call gb_Executable_use_externals,vcldemo,\ +- glew \ ++ epoxy \ + )) + endif + +diff --git a/vcl/Executable_visualbackendtest.mk b/vcl/Executable_visualbackendtest.mk +index abf8cbe..8704453 100644 +--- a/vcl/Executable_visualbackendtest.mk ++++ b/vcl/Executable_visualbackendtest.mk +@@ -46,7 +46,6 @@ $(eval $(call gb_Executable_add_libs,visualbackendtest,\ + -lm \ + -ldl \ + -lpthread \ +- -lGL \ + -lX11 \ + )) + +diff --git a/vcl/Library_vcl.mk b/vcl/Library_vcl.mk +index a52938b..a911329 100644 +--- a/vcl/Library_vcl.mk ++++ b/vcl/Library_vcl.mk +@@ -124,7 +124,7 @@ $(eval $(call gb_Library_use_externals,vcl,\ + )) + ifeq ($(ENABLE_HEADLESS),) + $(eval $(call gb_Library_use_externals,vcl,\ +- glew \ ++ epoxy \ + )) + endif + +@@ -648,7 +648,6 @@ $(eval $(call gb_Library_add_libs,vcl,\ + -lm \ + -ldl \ + -lpthread \ +- -lGL \ + -lX11 \ + )) + endif +diff --git a/vcl/Library_vclplug_gen.mk b/vcl/Library_vclplug_gen.mk +index f281605..0e1c39c 100644 +--- a/vcl/Library_vclplug_gen.mk ++++ b/vcl/Library_vclplug_gen.mk +@@ -51,7 +51,7 @@ $(eval $(call gb_Library_use_externals,vclplug_gen,\ + boost_headers \ + cairo \ + graphite \ +- glew \ ++ epoxy \ + glm_headers \ + harfbuzz \ + icu_headers \ +@@ -65,7 +65,6 @@ $(eval $(call gb_Library_add_libs,vclplug_gen,\ + -lXext \ + -lSM \ + -lICE \ +- -lGL \ + )) + + $(eval $(call gb_Library_add_exception_objects,vclplug_gen,\ +diff --git a/vcl/Library_vclplug_gtk.mk b/vcl/Library_vclplug_gtk.mk +index c32a127..67247b7 100644 +--- a/vcl/Library_vclplug_gtk.mk ++++ b/vcl/Library_vclplug_gtk.mk +@@ -59,7 +59,7 @@ $(eval $(call gb_Library_use_externals,vclplug_gtk,\ + cairo \ + dbus \ + gio \ +- glew \ ++ epoxy \ + gtk \ + gthread \ + icuuc \ +diff --git a/vcl/Library_vclplug_gtk3.mk b/vcl/Library_vclplug_gtk3.mk +index 8d013d9..1457c1a 100644 +--- a/vcl/Library_vclplug_gtk3.mk ++++ b/vcl/Library_vclplug_gtk3.mk +@@ -75,7 +75,7 @@ $(eval $(call gb_Library_use_libraries,vclplug_gtk3,\ + + $(eval $(call gb_Library_use_externals,vclplug_gtk3,\ + boost_headers \ +- glew \ ++ epoxy \ + dbus \ + )) + +diff --git a/vcl/Library_vclplug_kde4.mk b/vcl/Library_vclplug_kde4.mk +index 30c4069..acd7bd5 100644 +--- a/vcl/Library_vclplug_kde4.mk ++++ b/vcl/Library_vclplug_kde4.mk +@@ -54,7 +54,7 @@ $(eval $(call gb_Library_use_externals,vclplug_kde4,\ + boost_headers \ + icuuc \ + kde4 \ +- glew \ ++ epoxy \ + )) + + $(eval $(call gb_Library_add_libs,vclplug_kde4,\ +diff --git a/vcl/inc/opengl/LineRenderUtils.hxx b/vcl/inc/opengl/LineRenderUtils.hxx +index 58ae6a8..e3f375b 100644 +--- a/vcl/inc/opengl/LineRenderUtils.hxx ++++ b/vcl/inc/opengl/LineRenderUtils.hxx +@@ -11,7 +11,6 @@ + #ifndef INCLUDED_VCL_INC_OPENGL_LINERENDERUTILS_H + #define INCLUDED_VCL_INC_OPENGL_LINERENDERUTILS_H + +-#include + #include "opengl/VertexUtils.hxx" + #include "opengl/RenderList.hxx" + +diff --git a/vcl/inc/opengl/VertexUtils.hxx b/vcl/inc/opengl/VertexUtils.hxx +index f9804ec..de2c070 100644 +--- a/vcl/inc/opengl/VertexUtils.hxx ++++ b/vcl/inc/opengl/VertexUtils.hxx +@@ -12,7 +12,7 @@ + #define INCLUDED_VCL_INC_OPENGL_VERTEXUTILS_H + + #include +-#include ++#include + #include + #include + #include +diff --git a/vcl/inc/opengl/framebuffer.hxx b/vcl/inc/opengl/framebuffer.hxx +index ec7a450..a2dbd1e 100644 +--- a/vcl/inc/opengl/framebuffer.hxx ++++ b/vcl/inc/opengl/framebuffer.hxx +@@ -10,7 +10,6 @@ + #ifndef INCLUDED_VCL_INC_OPENGL_FRAMEBUFFER_H + #define INCLUDED_VCL_INC_OPENGL_FRAMEBUFFER_H + +-#include + #include + + #include +diff --git a/vcl/inc/opengl/program.hxx b/vcl/inc/opengl/program.hxx +index 73cdb7f..4632ddf 100644 +--- a/vcl/inc/opengl/program.hxx ++++ b/vcl/inc/opengl/program.hxx +@@ -14,7 +14,6 @@ + + #include + +-#include + #include + + #include +diff --git a/vcl/inc/opengl/texture.hxx b/vcl/inc/opengl/texture.hxx +index a0c8029..fd4eb97 100644 +--- a/vcl/inc/opengl/texture.hxx ++++ b/vcl/inc/opengl/texture.hxx +@@ -20,7 +20,7 @@ + #ifndef INCLUDED_VCL_INC_OPENGL_TEXTURE_H + #define INCLUDED_VCL_INC_OPENGL_TEXTURE_H + +-#include ++#include + #include + #include + #include +diff --git a/vcl/inc/pch/precompiled_vcl.hxx b/vcl/inc/pch/precompiled_vcl.hxx +index 6ef9e2a..a356ae8 100644 +--- a/vcl/inc/pch/precompiled_vcl.hxx ++++ b/vcl/inc/pch/precompiled_vcl.hxx +@@ -56,6 +56,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -184,7 +185,6 @@ + #include + #include + #include +-#include + #include + #include + #include +diff --git a/vcl/inc/unx/saldisp.hxx b/vcl/inc/unx/saldisp.hxx +index 64998df..339ba80 100644 +--- a/vcl/inc/unx/saldisp.hxx ++++ b/vcl/inc/unx/saldisp.hxx +@@ -28,7 +28,7 @@ class SalXLib; + #include + #include + #include +-#include "GL/glxew.h" ++#include + + #include + #include +diff --git a/vcl/opengl/x11/gdiimpl.cxx b/vcl/opengl/x11/gdiimpl.cxx +index b4f87a3..92dd18c 100644 +--- a/vcl/opengl/x11/gdiimpl.cxx ++++ b/vcl/opengl/x11/gdiimpl.cxx +@@ -32,6 +32,7 @@ + #include + + static std::vector g_vShareList; ++static bool g_bAnyCurrent; + + class X11OpenGLContext : public OpenGLContext + { +@@ -184,23 +185,10 @@ namespace + return pFBC; + } + +- // we need them before glew can initialize them +- // glew needs an OpenGL context so we need to get the address manually +- void initOpenGLFunctionPointers() +- { +- glXChooseFBConfig = reinterpret_cast(glXGetProcAddressARB(reinterpret_cast("glXChooseFBConfig"))); +- glXGetVisualFromFBConfig = reinterpret_cast(glXGetProcAddressARB(reinterpret_cast("glXGetVisualFromFBConfig"))); // try to find a visual for the current set of attributes +- glXGetFBConfigAttrib = reinterpret_cast(glXGetProcAddressARB(reinterpret_cast("glXGetFBConfigAttrib"))); +- glXCreateContextAttribsARB = reinterpret_cast(glXGetProcAddressARB(reinterpret_cast("glXCreateContextAttribsARB"))); +- glXCreatePixmap = reinterpret_cast(glXGetProcAddressARB(reinterpret_cast("glXCreatePixmap"))); +- } +- + Visual* getVisual(Display* dpy, Window win) + { + OpenGLZone aZone; + +- initOpenGLFunctionPointers(); +- + XWindowAttributes xattr; + if( !XGetWindowAttributes( dpy, win, &xattr ) ) + { +@@ -235,7 +223,10 @@ void X11OpenGLContext::resetCurrent() + OpenGLZone aZone; + + if (m_aGLWin.dpy) ++ { + glXMakeCurrent(m_aGLWin.dpy, None, nullptr); ++ g_bAnyCurrent = false; ++ } + } + + bool X11OpenGLContext::isCurrent() +@@ -247,7 +238,7 @@ bool X11OpenGLContext::isCurrent() + + bool X11OpenGLContext::isAnyCurrent() + { +- return glXGetCurrentContext() != None; ++ return g_bAnyCurrent && glXGetCurrentContext() != None; + } + + SystemWindowData X11OpenGLContext::generateWinData(vcl::Window* pParent, bool /*bRequestLegacyContext*/) +@@ -266,8 +257,6 @@ SystemWindowData X11OpenGLContext::generateWinData(vcl::Window* pParent, bool /* + if( dpy == nullptr || !glXQueryExtension( dpy, nullptr, nullptr ) ) + return aWinData; + +- initOpenGLFunctionPointers(); +- + int best_fbc = -1; + GLXFBConfig* pFBC = getFBConfig(dpy, win, best_fbc, true, false); + +@@ -355,10 +344,13 @@ bool X11OpenGLContext::ImplInit() + + if( !glXMakeCurrent( m_aGLWin.dpy, m_aGLWin.win, m_aGLWin.ctx ) ) + { ++ g_bAnyCurrent = false; + SAL_WARN("vcl.opengl", "unable to select current GLX context"); + return false; + } + ++ g_bAnyCurrent = true; ++ + int glxMinor, glxMajor; + double nGLXVersion = 0; + if( glXQueryVersion( m_aGLWin.dpy, &glxMajor, &glxMinor ) ) +@@ -400,8 +392,8 @@ bool X11OpenGLContext::ImplInit() + } + } + +- bool bRet = InitGLEW(); +- InitGLEWDebugging(); ++ bool bRet = InitGL(); ++ InitGLDebugging(); + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); + +@@ -427,10 +419,12 @@ void X11OpenGLContext::makeCurrent() + { + if (!glXMakeCurrent( m_aGLWin.dpy, m_aGLWin.win, m_aGLWin.ctx )) + { ++ g_bAnyCurrent = false; + SAL_WARN("vcl.opengl", "OpenGLContext::makeCurrent failed " + "on drawable " << m_aGLWin.win); + return; + } ++ g_bAnyCurrent = true; + } + + registerAsCurrent(); +@@ -445,6 +439,7 @@ void X11OpenGLContext::destroyCurrentContext() + g_vShareList.erase(itr); + + glXMakeCurrent(m_aGLWin.dpy, None, nullptr); ++ g_bAnyCurrent = false; + if( glGetError() != GL_NO_ERROR ) + { + SAL_WARN("vcl.opengl", "glError: " << glGetError()); +diff --git a/vcl/osx/salobj.cxx b/vcl/osx/salobj.cxx +index c75f2a7..9e6e746 100644 +--- a/vcl/osx/salobj.cxx ++++ b/vcl/osx/salobj.cxx +@@ -321,8 +321,8 @@ bool AquaOpenGLContext::ImplInit() + NSOpenGLView* pView = getOpenGLView(); + [[pView openGLContext] makeCurrentContext]; + +- bool bRet = InitGLEW(); +- InitGLEWDebugging(); ++ bool bRet = InitGL(); ++ InitGLDebugging(); + return bRet; + } + +diff --git a/vcl/source/opengl/OpenGLContext.cxx b/vcl/source/opengl/OpenGLContext.cxx +index fc12d88..11a0052 100644 +--- a/vcl/source/opengl/OpenGLContext.cxx ++++ b/vcl/source/opengl/OpenGLContext.cxx +@@ -7,7 +7,6 @@ + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +-#include + #include + + #include +@@ -205,13 +204,8 @@ extern "C" void + APIENTRY + #endif + debug_callback(GLenum source, GLenum type, GLuint id, +- GLenum severity, GLsizei , const GLchar* message, +-#if HAVE_GLEW_1_12 +- const GLvoid* +-#else +- GLvoid* +-#endif +- ) ++ GLenum severity, GLsizei , const GLchar* message, ++ const GLvoid*) + { + // ignore Nvidia's 131218: "Program/shader state performance warning: Fragment Shader is going to be recompiled because the shader key based on GL state mismatches." + // the GLSL compiler is a bit too aggressive in optimizing the state based on the current OpenGL state +@@ -281,30 +275,14 @@ OUString getGLString(GLenum eGlEnum) + return sString; + } + +-bool OpenGLContext::InitGLEW() ++bool OpenGLContext::InitGL() + { +- static bool bGlewInit = false; +- if(!bGlewInit) +- { +- OpenGLZone aZone; +- +- glewExperimental = GL_TRUE; +- GLenum err = glewInit(); +- if (err != GLEW_OK) +- { +- SAL_WARN("vcl.opengl", "Failed to initialize GLEW: " << glewGetErrorString(err)); +- return false; +- } +- else +- bGlewInit = true; +- } +- + VCL_GL_INFO("OpenGLContext::ImplInit----end"); + VCL_GL_INFO("Vendor: " << getGLString(GL_VENDOR) << " Renderer: " << getGLString(GL_RENDERER) << " GL version: " << OpenGLHelper::getGLVersion()); + mbInitialized = true; + + // I think we need at least GL 3.0 +- if (!GLEW_VERSION_3_0) ++ if (epoxy_gl_version() < 30) + { + SAL_WARN("vcl.opengl", "We don't have at least OpenGL 3.0"); + return false; +@@ -320,11 +298,11 @@ bool OpenGLContext::InitGLEW() + return true; + } + +-void OpenGLContext::InitGLEWDebugging() ++void OpenGLContext::InitGLDebugging() + { + #ifdef DBG_UTIL + // only enable debug output in dbgutil build +- if( GLEW_ARB_debug_output) ++ if (epoxy_has_gl_extension("GL_ARB_debug_output")) + { + OpenGLZone aZone; + +diff --git a/vcl/source/opengl/OpenGLHelper.cxx b/vcl/source/opengl/OpenGLHelper.cxx +index e00a93a..6f4a880 100644 +--- a/vcl/source/opengl/OpenGLHelper.cxx ++++ b/vcl/source/opengl/OpenGLHelper.cxx +@@ -401,7 +401,7 @@ GLint OpenGLHelper::LoadShaders(const OUString& rVertexShaderName, + aGeometryShaderSource = getShaderSource(rGeometryShaderName); + + GLint bBinaryResult = GL_FALSE; +- if( GLEW_ARB_get_program_binary && !rDigest.isEmpty() ) ++ if (epoxy_has_gl_extension("GL_ARB_get_program_binary") && !rDigest.isEmpty()) + { + OString aFileName = + createFileName(rVertexShaderName, rFragmentShaderName, rGeometryShaderName, rDigest); +@@ -473,7 +473,7 @@ GLint OpenGLHelper::LoadShaders(const OUString& rVertexShaderName, + if (bHasGeometryShader) + glAttachShader(ProgramID, GeometryShaderID); + +- if( GLEW_ARB_get_program_binary && !rDigest.isEmpty() ) ++ if (epoxy_has_gl_extension("GL_ARB_get_program_binary") && !rDigest.isEmpty()) + { + glProgramParameteri(ProgramID, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE); + glLinkProgram(ProgramID); +@@ -1106,14 +1106,14 @@ void OpenGLHelper::debugMsgPrint(const int nType, const char *pFormat, ...) + { + OpenGLZone aZone; + +- if (GLEW_KHR_debug) ++ if (epoxy_has_gl_extension("GL_KHR_debug")) + glDebugMessageInsert(GL_DEBUG_SOURCE_APPLICATION, + GL_DEBUG_TYPE_OTHER, + 1, // one[sic] id is as good as another ? + // GL_DEBUG_SEVERITY_NOTIFICATION for >= GL4.3 ? + GL_DEBUG_SEVERITY_LOW, + strlen(pStr), pStr); +- else if (GLEW_AMD_debug_output) ++ else if (epoxy_has_gl_extension("GL_AMD_debug_output")) + glDebugMessageInsertAMD(GL_DEBUG_CATEGORY_APPLICATION_AMD, + GL_DEBUG_SEVERITY_LOW_AMD, + 1, // one[sic] id is as good as another ? +diff --git a/vcl/unx/generic/app/saldisp.cxx b/vcl/unx/generic/app/saldisp.cxx +index 0bff9b8..34f0e6f 100644 +--- a/vcl/unx/generic/app/saldisp.cxx ++++ b/vcl/unx/generic/app/saldisp.cxx +@@ -47,7 +47,6 @@ + #include + #endif + +-#include "GL/glxew.h" + #include + + #include +diff --git a/vcl/workben/icontest.cxx b/vcl/workben/icontest.cxx +index ae2973b..32d6ae8 100644 +--- a/vcl/workben/icontest.cxx ++++ b/vcl/workben/icontest.cxx +@@ -20,8 +20,6 @@ + + #include + +-#include +- + #include + + #include +-- +2.13.0 + diff --git a/SOURCES/0001-disable-libe-book-support.patch b/SOURCES/0001-disable-libe-book-support.patch new file mode 100644 index 0000000..e26a68b --- /dev/null +++ b/SOURCES/0001-disable-libe-book-support.patch @@ -0,0 +1,144 @@ +From d5a09cb1c8f61e2cfc60d8a1dfe57c1ed0a45cdc Mon Sep 17 00:00:00 2001 +From: David Tardon +Date: Thu, 21 Aug 2014 16:10:51 +0200 +Subject: [PATCH] disable libe-book support + +Change-Id: Ie915a9bd2acf7f3aeb8b0933252da33c17043bc4 +--- + configure.ac | 6 ------ + external/Module_external.mk | 1 - + filter/Configuration_filter.mk | 8 -------- + writerperfect/Library_wpftwriter.mk | 2 -- + writerperfect/qa/unit/WpftImportTestBase.hxx | 3 --- + writerperfect/qa/unit/WpftWriterFilterTest.cxx | 5 ----- + writerperfect/source/writer/wpftwriter.component | 5 ----- + 7 files changed, 30 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 5ec9ae6..7aed2ed 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -7796,9 +7796,6 @@ AS_IF([test "$COM" = "MSC"], + + libo_CHECK_SYSTEM_MODULE([libfreehand],[FREEHAND],[libfreehand-0.1]) + +-libo_CHECK_SYSTEM_MODULE([libebook],[EBOOK],[libe-book-0.1]) +-libo_PKG_VERSION([EBOOK], [libe-book-0.1], [0.1.2]) +- + libo_CHECK_SYSTEM_MODULE([libabw],[ABW],[libabw-0.1]) + + libo_CHECK_SYSTEM_MODULE([libpagemaker],[PAGEMAKER],[libpagemaker-0.0]) +diff --git a/external/Module_external.mk b/external/Module_external.mk +index 55fce1f..2f53503 100644 +--- a/external/Module_external.mk ++++ b/external/Module_external.mk +@@ -37,7 +37,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,EPOXY,epoxy) \ + $(call gb_Helper_optional,ETONYEK,libetonyek) \ +diff --git a/filter/Configuration_filter.mk b/filter/Configuration_filter.mk +index 5dd20f7..d3dc749 100644 +--- a/filter/Configuration_filter.mk ++++ b/filter/Configuration_filter.mk +@@ -345,10 +345,6 @@ $(eval $(call filter_Configuration_add_types,fcfg_langpack,fcfg_writer_types.xcu + writer_OOXML \ + writer_OOXML_Template \ + writer_layout_dump_xml \ +- writer_BroadBand_eBook \ +- writer_FictionBook_2 \ +- writer_PalmDoc \ +- writer_Plucker_eBook \ + writer_ApplePages \ + MWAW_Text_Document \ + Palm_Text_Document \ +@@ -390,10 +386,6 @@ $(eval $(call filter_Configuration_add_filters,fcfg_langpack,fcfg_writer_filters + OOXML_Text \ + OOXML_Text_Template \ + writer_layout_dump \ +- BroadBand_eBook \ +- FictionBook_2 \ +- PalmDoc \ +- Plucker_eBook \ + ApplePages \ + MWAW_Text_Document \ + Palm_Text_Document \ +diff --git a/writerperfect/Library_wpftwriter.mk b/writerperfect/Library_wpftwriter.mk +index 9ec43c4..48cbd52 100644 +--- a/writerperfect/Library_wpftwriter.mk ++++ b/writerperfect/Library_wpftwriter.mk +@@ -49,7 +49,6 @@ $(eval $(call gb_Library_use_libraries,wpftwriter,\ + $(eval $(call gb_Library_use_externals,wpftwriter,\ + abw \ + boost_headers \ +- ebook \ + etonyek \ + icu_headers \ + icui18n \ +@@ -65,7 +64,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/MSWorksImportFilter \ + writerperfect/source/writer/MWAWImportFilter \ + writerperfect/source/writer/PagesImportFilter \ +diff --git a/writerperfect/qa/unit/WpftImportTestBase.hxx b/writerperfect/qa/unit/WpftImportTestBase.hxx +index ce70172..d73d435 100644 +--- a/writerperfect/qa/unit/WpftImportTestBase.hxx ++++ b/writerperfect/qa/unit/WpftImportTestBase.hxx +@@ -29,9 +29,6 @@ + ((minor) > (req_minor) \ + || ((minor) == (req_minor) && ((micro) >= (req_micro))))) + +-#define REQUIRE_EBOOK_VERSION(major, minor, micro) \ +- REQUIRE_VERSION(EBOOK_VERSION_MAJOR, EBOOK_VERSION_MINOR, EBOOK_VERSION_MICRO, major, minor, micro) +- + #define REQUIRE_ETONYEK_VERSION(major, minor, micro) \ + REQUIRE_VERSION(ETONYEK_VERSION_MAJOR, ETONYEK_VERSION_MINOR, ETONYEK_VERSION_MICRO, major, minor, micro) + +diff --git a/writerperfect/qa/unit/WpftWriterFilterTest.cxx b/writerperfect/qa/unit/WpftWriterFilterTest.cxx +index 99a6ab1..7de2c18 100644 +--- a/writerperfect/qa/unit/WpftWriterFilterTest.cxx ++++ b/writerperfect/qa/unit/WpftWriterFilterTest.cxx +@@ -31,10 +31,6 @@ WpftWriterFilterTest::WpftWriterFilterTest() + + void WpftWriterFilterTest::test() + { +- const writerperfect::test::WpftOptionalMap_t aEBookOptional +- { +- {"FictionBook2.fb2.zip", REQUIRE_EBOOK_VERSION(0, 1, 1)}, +- }; + const writerperfect::test::WpftOptionalMap_t aEtonyekOptional + { + {"Pages_4.pages", REQUIRE_ETONYEK_VERSION(0, 1, 2)}, +@@ -52,7 +48,6 @@ 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/", aEBookOptional); + doTest("com.sun.star.comp.Writer.MSWorksImportFilter", "/writerperfect/qa/unit/data/writer/libwps/", aWpsOptional); + doTest("com.sun.star.comp.Writer.MWAWImportFilter", "/writerperfect/qa/unit/data/writer/libmwaw/", aMWAWOptional); + doTest("org.libreoffice.comp.Writer.PagesImportFilter", "/writerperfect/qa/unit/data/writer/libetonyek/", aEtonyekOptional); +diff --git a/writerperfect/source/writer/wpftwriter.component b/writerperfect/source/writer/wpftwriter.component +index 4c5f37f..d815802 100644 +--- a/writerperfect/source/writer/wpftwriter.component ++++ b/writerperfect/source/writer/wpftwriter.component +@@ -38,11 +38,6 @@ + + + +- +- +- +- + + +-- +2.9.3 + diff --git a/SOURCES/0001-don-t-suppress-crashes.patch b/SOURCES/0001-don-t-suppress-crashes.patch new file mode 100644 index 0000000..fcd1f1d --- /dev/null +++ b/SOURCES/0001-don-t-suppress-crashes.patch @@ -0,0 +1,35 @@ +From a0e6d2abeed9d64fe7862a7664ba80a6178bf3f2 Mon Sep 17 00:00:00 2001 +From: David Tardon +Date: Tue, 8 Nov 2016 11:50:06 +0100 +Subject: [PATCH] don't suppress crashes + +An automatic restart after a crash makes the crash invisible to abrt. + +Change-Id: I3854e619356049b144b08575879d289a3c12e4c9 +--- + desktop/source/app/app.cxx | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/desktop/source/app/app.cxx b/desktop/source/app/app.cxx +index 53365f4..3a3bac8 100644 +--- a/desktop/source/app/app.cxx ++++ b/desktop/source/app/app.cxx +@@ -1312,14 +1312,12 @@ void Desktop::Exception(ExceptionCategory nCategory) + if( bRestart ) + { + RequestHandler::Disable(); +- if( pSignalHandler ) +- osl_removeSignalHandler( pSignalHandler ); + + restartOnMac(false); + if ( m_rSplashScreen.is() ) + m_rSplashScreen->reset(); + +- _exit( EXITHELPER_CRASH_WITH_RESTART ); ++ return; + } + else + { +-- +2.9.3 + diff --git a/SOURCES/0001-fold-SfxPickList-Get-and-ensure-together.patch b/SOURCES/0001-fold-SfxPickList-Get-and-ensure-together.patch new file mode 100644 index 0000000..924290d --- /dev/null +++ b/SOURCES/0001-fold-SfxPickList-Get-and-ensure-together.patch @@ -0,0 +1,45 @@ +From e4d3b23009a323efc8b31431107cc2d2a529b118 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Mon, 8 May 2017 15:27:49 +0100 +Subject: [PATCH 1/5] fold SfxPickList::Get and ::ensure together + +Change-Id: Iab68095a9733393b656623ddd6bb8705f7cfda82 +(cherry picked from commit f17d55e5495859b2a78ed625fc2573391e26cdf1) +--- + sfx2/source/appl/sfxpicklist.cxx | 3 +-- + sfx2/source/inc/sfxpicklist.hxx | 3 +-- + 2 files changed, 2 insertions(+), 4 deletions(-) + +diff --git a/sfx2/source/appl/sfxpicklist.cxx b/sfx2/source/appl/sfxpicklist.cxx +index be48209..cc3a5cf 100644 +--- a/sfx2/source/appl/sfxpicklist.cxx ++++ b/sfx2/source/appl/sfxpicklist.cxx +@@ -167,10 +167,9 @@ void SfxPickList::AddDocumentToPickList( SfxObjectShell* pDocSh ) + (pFilter) ? pFilter->GetServiceName() : OUString() ); + } + +-SfxPickList& SfxPickList::Get() ++void SfxPickList::ensure() + { + static SfxPickList aUniqueInstance(SvtHistoryOptions().GetSize(ePICKLIST)); +- return aUniqueInstance; + } + + SfxPickList::SfxPickList( sal_uInt32 nAllowedMenuSize ) : +diff --git a/sfx2/source/inc/sfxpicklist.hxx b/sfx2/source/inc/sfxpicklist.hxx +index e77d6ed..b1e86b0 100644 +--- a/sfx2/source/inc/sfxpicklist.hxx ++++ b/sfx2/source/inc/sfxpicklist.hxx +@@ -45,8 +45,7 @@ class SfxPickList : public SfxListener + static void AddDocumentToPickList( SfxObjectShell* pDocShell ); + + public: +- static SfxPickList& Get(); +- static void ensure() { Get(); } ++ static void ensure(); + + virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override; + }; +-- +2.9.3 + diff --git a/SOURCES/0001-gtk3-fix-popover-placement-in-RTL.patch b/SOURCES/0001-gtk3-fix-popover-placement-in-RTL.patch new file mode 100644 index 0000000..1dc1500 --- /dev/null +++ b/SOURCES/0001-gtk3-fix-popover-placement-in-RTL.patch @@ -0,0 +1,54 @@ +From 47f913ccf293665bd8c7737917c8284f16f95166 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Fri, 3 Nov 2017 15:53:22 +0000 +Subject: [PATCH] gtk3: fix popover placement in RTL + +Change-Id: I8c20b277ce943f915941b2af9353f98c66f9065c +--- + vcl/unx/gtk3/gtk3gtkframe.cxx | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +diff --git a/vcl/unx/gtk3/gtk3gtkframe.cxx b/vcl/unx/gtk3/gtk3gtkframe.cxx +index cdbd1b3..61446c7 100644 +--- a/vcl/unx/gtk3/gtk3gtkframe.cxx ++++ b/vcl/unx/gtk3/gtk3gtkframe.cxx +@@ -2480,7 +2480,7 @@ bool GtkSalFrame::ShowTooltip(const OUString& rHelpText, const Rectangle& rHelpA + #if GTK_CHECK_VERSION(3,12,0) + namespace + { +- void set_pointing_to(GtkPopover *pPopOver, const Rectangle& rHelpArea) ++ void set_pointing_to(GtkPopover *pPopOver, const Rectangle& rHelpArea, const SalFrameGeometry& rGeometry) + { + GdkRectangle aRect; + aRect.x = rHelpArea.Left(); +@@ -2501,6 +2501,9 @@ namespace + break; + } + ++ if (AllSettings::GetLayoutRTL()) ++ aRect.x = rGeometry.nWidth-aRect.width-1-aRect.x; ++ + gtk_popover_set_pointing_to(pPopOver, &aRect); + } + } +@@ -2523,7 +2526,7 @@ sal_uIntPtr GtkSalFrame::ShowPopover(const OUString& rHelpText, const Rectangle& + else if (nFlags & QuickHelpFlags::Right) + gtk_popover_set_position(GTK_POPOVER(pWidget), GTK_POS_LEFT); + +- set_pointing_to(GTK_POPOVER(pWidget), rHelpArea); ++ set_pointing_to(GTK_POPOVER(pWidget), rHelpArea, maGeometry); + + gtk_popover_set_modal(GTK_POPOVER(pWidget), false); + +@@ -2543,7 +2546,7 @@ bool GtkSalFrame::UpdatePopover(sal_uIntPtr nId, const OUString& rHelpText, cons + #if GTK_CHECK_VERSION(3,12,0) + GtkWidget *pWidget = reinterpret_cast(nId); + +- set_pointing_to(GTK_POPOVER(pWidget), rHelpArea); ++ set_pointing_to(GTK_POPOVER(pWidget), rHelpArea, maGeometry); + + GtkWidget *pLabel = gtk_bin_get_child(GTK_BIN(pWidget)); + OString sUTF = OUStringToOString(rHelpText, RTL_TEXTENCODING_UTF8); +-- +2.9.5 + diff --git a/SOURCES/0001-gtk3-flicker-free-opengl-transitions.patch b/SOURCES/0001-gtk3-flicker-free-opengl-transitions.patch new file mode 100644 index 0000000..39d945a --- /dev/null +++ b/SOURCES/0001-gtk3-flicker-free-opengl-transitions.patch @@ -0,0 +1,326 @@ +From 6969cdac8e04e65f00f4fec9f681ebbf243f0945 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Sun, 10 Sep 2017 16:07:49 +0100 +Subject: [PATCH] gtk3: flicker-free opengl transitions +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +leave the GtkGLArea opengl context alone except for the final render into it, +create a new context for the slide transitions to play with + +set up a pair of framebuffers, a scratch one to let the transitions render +into, the other to take a snapshot when the transition is finished with it and +then tell GtkGLArea we're ready to render it and when the callback comes around +copy the snapshot into it. + +Change-Id: I3515614baf7eea0ff53c46edbaf9cf66f926eef2 + +hidpi+gtk3: move setting the opengl slide viewport + +to when the window size is set, and adjust to gtk3 hidpi +scaling factor + +Change-Id: Id9bd0defd0b6ae640ac57f88133d954202d4bcc3 +Reviewed-on: https://gerrit.libreoffice.org/42143 +Tested-by: Jenkins +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara +(cherry picked from commit 1a547a566eba5943f9e4d9987baf4aee80846dd1) +--- + include/vcl/opengl/OpenGLContext.hxx | 1 + + .../source/engine/opengl/TransitionerImpl.cxx | 1 - + vcl/source/opengl/OpenGLContext.cxx | 11 +- + vcl/unx/gtk3/gtk3gtkinst.cxx | 151 ++++++++++++++++++++- + 5 files changed, 166 insertions(+), 23 deletions(-) + +diff --git a/include/vcl/opengl/OpenGLContext.hxx b/include/vcl/opengl/OpenGLContext.hxx +index 5796f7e..c9b1c81 100644 +--- a/include/vcl/opengl/OpenGLContext.hxx ++++ b/include/vcl/opengl/OpenGLContext.hxx +@@ -158,6 +158,7 @@ public: + private: + virtual bool initWindow(); + virtual void destroyCurrentContext(); ++ virtual void adjustToNewSize(); + + protected: + bool InitGL(); +diff --git a/slideshow/source/engine/opengl/TransitionerImpl.cxx b/slideshow/source/engine/opengl/TransitionerImpl.cxx +index c958389..06e1123 100644 +--- a/slideshow/source/engine/opengl/TransitionerImpl.cxx ++++ b/slideshow/source/engine/opengl/TransitionerImpl.cxx +@@ -346,7 +346,6 @@ bool OGLTransitionerImpl::initWindowFromSlideShowView( const Reference< presenta + + mpContext->swapBuffers(); + +- glViewport(0, 0, aCanvasArea.Width, aCanvasArea.Height); + CHECK_GL_ERROR(); + + return true; +diff --git a/vcl/source/opengl/OpenGLContext.cxx b/vcl/source/opengl/OpenGLContext.cxx +index 42fba6d..51517ca 100644 +--- a/vcl/source/opengl/OpenGLContext.cxx ++++ b/vcl/source/opengl/OpenGLContext.cxx +@@ -338,14 +338,21 @@ void OpenGLContext::restoreDefaultFramebuffer() + + void OpenGLContext::setWinPosAndSize(const Point &rPos, const Size& rSize) + { +- if(m_xWindow) ++ if (m_xWindow) + m_xWindow->SetPosSizePixel(rPos, rSize); +- if( m_pChildWindow ) ++ if (m_pChildWindow) + m_pChildWindow->SetPosSizePixel(rPos, rSize); + + GLWindow& rGLWin = getModifiableOpenGLWindow(); + rGLWin.Width = rSize.Width(); + rGLWin.Height = rSize.Height(); ++ adjustToNewSize(); ++} ++ ++void OpenGLContext::adjustToNewSize() ++{ ++ const GLWindow& rGLWin = getOpenGLWindow(); ++ glViewport(0, 0, rGLWin.Width, rGLWin.Height); + } + + void OpenGLContext::setWinSize(const Size& rSize) +diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx +index 3d20cca..a37deb0 100644 +--- a/vcl/unx/gtk3/gtk3gtkinst.cxx ++++ b/vcl/unx/gtk3/gtk3gtkinst.cxx +@@ -923,12 +923,32 @@ Reference< XInterface > GtkInstance::CreateDragSource() + class GtkOpenGLContext : public OpenGLContext + { + GLWindow m_aGLWin; ++#if GTK_CHECK_VERSION(3,16,0) + GtkWidget *m_pGLArea; ++ GdkGLContext *m_pContext; ++ guint m_nAreaFrameBuffer; ++ guint m_nFrameBuffer; ++ guint m_nRenderBuffer; ++ guint m_nDepthBuffer; ++ guint m_nFrameScratchBuffer; ++ guint m_nRenderScratchBuffer; ++ guint m_nDepthScratchBuffer; ++#endif + + public: + GtkOpenGLContext() + : OpenGLContext() ++#if GTK_CHECK_VERSION(3,16,0) + , m_pGLArea(nullptr) ++ , m_pContext(nullptr) ++ , m_nAreaFrameBuffer(0) ++ , m_nFrameBuffer(0) ++ , m_nRenderBuffer(0) ++ , m_nDepthBuffer(0) ++ , m_nFrameScratchBuffer(0) ++ , m_nRenderScratchBuffer(0) ++ , m_nDepthScratchBuffer(0) ++#endif + { + } + +@@ -952,12 +972,78 @@ private: + virtual const GLWindow& getOpenGLWindow() const override { return m_aGLWin; } + virtual GLWindow& getModifiableOpenGLWindow() override { return m_aGLWin; } + ++#if GTK_CHECK_VERSION(3,16,0) + static void signalDestroy(GtkWidget*, gpointer context) + { + GtkOpenGLContext* pThis = static_cast(context); + pThis->m_pGLArea = nullptr; + } + ++ static gboolean signalRender(GtkGLArea*, GdkGLContext*, gpointer window) ++ { ++ GtkOpenGLContext* pThis = static_cast(window); ++ ++ int scale = gtk_widget_get_scale_factor(pThis->m_pGLArea); ++ int width = pThis->m_aGLWin.Width * scale; ++ int height = pThis->m_aGLWin.Height * scale; ++ ++ glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT); ++ ++ glBindFramebuffer(GL_READ_FRAMEBUFFER, pThis->m_nAreaFrameBuffer); ++ glReadBuffer(GL_COLOR_ATTACHMENT0_EXT); ++ ++ glBlitFramebuffer(0, 0, width, height, 0, 0, width, height, ++ GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT, GL_NEAREST); ++ ++ gdk_gl_context_make_current(pThis->m_pContext); ++ return true; ++ } ++#endif ++ ++ virtual void adjustToNewSize() override ++ { ++#if GTK_CHECK_VERSION(3,16,0) ++ if (m_pGLArea) ++ { ++ int scale = gtk_widget_get_scale_factor(m_pGLArea); ++ int width = m_aGLWin.Width * scale; ++ int height = m_aGLWin.Height * scale; ++ ++ gtk_gl_area_make_current(GTK_GL_AREA(m_pGLArea)); ++ glBindRenderbuffer(GL_RENDERBUFFER, m_nRenderBuffer); ++ glRenderbufferStorage(GL_RENDERBUFFER, GL_RGB8, width, height); ++ glBindRenderbuffer(GL_RENDERBUFFER, m_nDepthBuffer); ++ glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, width, height); ++ glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_nAreaFrameBuffer); ++ glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, ++ GL_RENDERBUFFER_EXT, m_nRenderBuffer); ++ glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, ++ GL_RENDERBUFFER_EXT, m_nDepthBuffer); ++ ++ gdk_gl_context_make_current(m_pContext); ++ glBindRenderbuffer(GL_RENDERBUFFER, m_nRenderBuffer); ++ glBindRenderbuffer(GL_RENDERBUFFER, m_nDepthBuffer); ++ glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_nFrameBuffer); ++ glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, ++ GL_RENDERBUFFER_EXT, m_nRenderBuffer); ++ glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, ++ GL_RENDERBUFFER_EXT, m_nDepthBuffer); ++ glViewport(0, 0, width, height); ++ ++ glBindRenderbuffer(GL_RENDERBUFFER, m_nRenderScratchBuffer); ++ glRenderbufferStorage(GL_RENDERBUFFER, GL_RGB8, width, height); ++ glBindRenderbuffer(GL_RENDERBUFFER, m_nDepthScratchBuffer); ++ glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, width, height); ++ glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_nFrameScratchBuffer); ++ glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, ++ GL_RENDERBUFFER_EXT, m_nRenderScratchBuffer); ++ glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, ++ GL_RENDERBUFFER_EXT, m_nDepthScratchBuffer); ++ glViewport(0, 0, width, height); ++ } ++#endif ++ } ++ + virtual bool ImplInit() override + { + #if GTK_CHECK_VERSION(3,16,0) +@@ -965,14 +1051,28 @@ private: + GtkWidget *pParent = static_cast(pEnvData->pWidget); + m_pGLArea = gtk_gl_area_new(); + g_signal_connect(G_OBJECT(m_pGLArea), "destroy", G_CALLBACK(signalDestroy), this); ++ g_signal_connect(G_OBJECT(m_pGLArea), "render", G_CALLBACK(signalRender), this); + gtk_gl_area_set_has_depth_buffer(GTK_GL_AREA(m_pGLArea), true); + gtk_gl_area_set_auto_render(GTK_GL_AREA(m_pGLArea), false); + gtk_widget_set_hexpand(m_pGLArea, true); + gtk_widget_set_vexpand(m_pGLArea, true); + gtk_container_add(GTK_CONTAINER(pParent), m_pGLArea); + gtk_widget_show_all(pParent); ++ + gtk_gl_area_make_current(GTK_GL_AREA(m_pGLArea)); + gtk_gl_area_attach_buffers(GTK_GL_AREA(m_pGLArea)); ++ glGenFramebuffersEXT(1, &m_nAreaFrameBuffer); ++ ++ GdkWindow *pWindow = gtk_widget_get_window(pParent); ++ m_pContext = gdk_window_create_gl_context(pWindow, nullptr); ++ gdk_gl_context_realize(m_pContext, nullptr); ++ gdk_gl_context_make_current(m_pContext); ++ glGenFramebuffersEXT(1, &m_nFrameBuffer); ++ glGenRenderbuffersEXT(1, &m_nRenderBuffer); ++ glGenRenderbuffersEXT(1, &m_nDepthBuffer); ++ glGenFramebuffersEXT(1, &m_nFrameScratchBuffer); ++ glGenRenderbuffersEXT(1, &m_nRenderScratchBuffer); ++ glGenRenderbuffersEXT(1, &m_nDepthScratchBuffer); + #endif + bool bRet = InitGL(); + InitGLDebugging(); +@@ -983,7 +1083,9 @@ private: + { + OpenGLContext::restoreDefaultFramebuffer(); + #if GTK_CHECK_VERSION(3,16,0) +- gtk_gl_area_attach_buffers(GTK_GL_AREA(m_pGLArea)); ++ glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_nFrameScratchBuffer); ++ glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, ++ GL_RENDERBUFFER_EXT, m_nRenderScratchBuffer); + #endif + } + +@@ -996,7 +1098,22 @@ private: + + #if GTK_CHECK_VERSION(3,16,0) + if (m_pGLArea) +- gtk_gl_area_make_current(GTK_GL_AREA(m_pGLArea)); ++ { ++ int scale = gtk_widget_get_scale_factor(m_pGLArea); ++ int width = m_aGLWin.Width * scale; ++ int height = m_aGLWin.Height * scale; ++ ++ gdk_gl_context_make_current(m_pContext); ++ ++ glBindRenderbuffer(GL_RENDERBUFFER, m_nRenderScratchBuffer); ++ glBindRenderbuffer(GL_RENDERBUFFER, m_nDepthScratchBuffer); ++ glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_nFrameScratchBuffer); ++ glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, ++ GL_RENDERBUFFER_EXT, m_nRenderScratchBuffer); ++ glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, ++ GL_RENDERBUFFER_EXT, m_nDepthScratchBuffer); ++ glViewport(0, 0, width, height); ++ } + #endif + + registerAsCurrent(); +@@ -1012,7 +1129,7 @@ private: + virtual bool isCurrent() override + { + #if GTK_CHECK_VERSION(3,16,0) +- return m_pGLArea && gdk_gl_context_get_current() == gtk_gl_area_get_context(GTK_GL_AREA(m_pGLArea)); ++ return m_pGLArea && gdk_gl_context_get_current() == m_pContext; + #else + return false; + #endif +@@ -1020,9 +1137,6 @@ private: + + virtual void sync() override + { +-#if GTK_CHECK_VERSION(3,16,0) +- gtk_gl_area_queue_render(GTK_GL_AREA(m_pGLArea)); +-#endif + } + + virtual void resetCurrent() override +@@ -1036,10 +1150,35 @@ private: + virtual void swapBuffers() override + { + #if GTK_CHECK_VERSION(3,16,0) ++ int scale = gtk_widget_get_scale_factor(m_pGLArea); ++ int width = m_aGLWin.Width * scale; ++ int height = m_aGLWin.Height * scale; ++ ++ glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_nFrameBuffer); ++ glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT); ++ ++ glBindFramebuffer(GL_READ_FRAMEBUFFER, m_nFrameScratchBuffer); ++ glReadBuffer(GL_COLOR_ATTACHMENT0_EXT); ++ ++ glBlitFramebuffer(0, 0, width, height, 0, 0, width, height, ++ GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT, GL_NEAREST); ++ ++ glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_nFrameScratchBuffer); ++ glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT); ++ + gtk_gl_area_queue_render(GTK_GL_AREA(m_pGLArea)); + #endif + BuffersSwapped(); + } ++#if GTK_CHECK_VERSION(3,16,0) ++ virtual ~GtkOpenGLContext() override ++ { ++ if (m_pContext) ++ { ++ g_clear_object(&m_pContext); ++ } ++ } ++#endif + }; + + OpenGLContext* GtkInstance::CreateOpenGLContext() +-- +2.9.5 + diff --git a/SOURCES/0001-gtk3-implement-opengl-support-for-slideshow.patch b/SOURCES/0001-gtk3-implement-opengl-support-for-slideshow.patch new file mode 100644 index 0000000..560aed9 --- /dev/null +++ b/SOURCES/0001-gtk3-implement-opengl-support-for-slideshow.patch @@ -0,0 +1,568 @@ +From ac19024c141448dbc5d89ad943a28875b4504f5c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Fri, 25 Nov 2016 14:11:13 +0000 +Subject: [PATCH] gtk3: implement opengl support for slideshow +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +all of them work, except "Fall" doesn't look right, but it has +the exact same problem under gtk2/gen to. + +Change-Id: I73cb9c0fb8211f727198be78d90d4f80a4f8c7c8 +Reviewed-on: https://gerrit.libreoffice.org/31214 +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara +(cherry picked from commit 8bd9db90383ee008777903c35c7a5eb2c5352e71) +--- + include/vcl/opengl/OpenGLContext.hxx | 2 + + slideshow/source/engine/opengl/TransitionImpl.cxx | 73 ++++++------ + slideshow/source/engine/opengl/TransitionImpl.hxx | 9 +- + .../source/engine/opengl/TransitionerImpl.cxx | 7 +- + vcl/inc/unx/gtk/gtkinst.hxx | 1 + + vcl/source/opengl/OpenGLContext.cxx | 5 + + vcl/unx/gtk3/gtk3gtkinst.cxx | 127 +++++++++++++++++++++ + 7 files changed, 181 insertions(+), 43 deletions(-) + +diff --git a/include/vcl/opengl/OpenGLContext.hxx b/include/vcl/opengl/OpenGLContext.hxx +index ffcd816..5796f7e 100644 +--- a/include/vcl/opengl/OpenGLContext.hxx ++++ b/include/vcl/opengl/OpenGLContext.hxx +@@ -129,6 +129,8 @@ public: + void registerAsCurrent(); + /// reset the GL context so this context is not implicit in subsequent GL calls. + virtual void resetCurrent(); ++ /// unbind the GL_FRAMEBUFFER to its default state, needed for gtk3 ++ virtual void restoreDefaultFramebuffer(); + virtual void swapBuffers(); + virtual void sync(); + void show(); +diff --git a/slideshow/source/engine/opengl/TransitionImpl.cxx b/slideshow/source/engine/opengl/TransitionImpl.cxx +index 115aaf2..7b9b894 100644 +--- a/slideshow/source/engine/opengl/TransitionImpl.cxx ++++ b/slideshow/source/engine/opengl/TransitionImpl.cxx +@@ -29,6 +29,7 @@ + #include + #include + #include ++#include + + #include + #include +@@ -132,7 +133,7 @@ static std::vector uploadPrimitives(const Primitives_t& primitives) + return indices; + } + +-bool OGLTransitionImpl::prepare( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex ) ++bool OGLTransitionImpl::prepare( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, OpenGLContext *pContext ) + { + m_nProgramObject = makeShader(); + if (!m_nProgramObject) +@@ -200,7 +201,7 @@ bool OGLTransitionImpl::prepare( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteri + glBindBuffer(GL_ARRAY_BUFFER, 0); + CHECK_GL_ERROR(); + +- prepareTransition( glLeavingSlideTex, glEnteringSlideTex ); ++ prepareTransition( glLeavingSlideTex, glEnteringSlideTex, pContext ); + return true; + } + +@@ -233,7 +234,7 @@ void OGLTransitionImpl::finish( double, double, double, double, double ) + { + } + +-void OGLTransitionImpl::prepareTransition( sal_Int32, sal_Int32 ) ++void OGLTransitionImpl::prepareTransition( sal_Int32, sal_Int32, OpenGLContext* ) + { + } + +@@ -241,7 +242,7 @@ void OGLTransitionImpl::finishTransition() + { + } + +-void OGLTransitionImpl::displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale ) ++void OGLTransitionImpl::displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale, OpenGLContext * ) + { + CHECK_GL_ERROR(); + applyOverallOperations( nTime, SlideWidthScale, SlideHeightScale ); +@@ -257,7 +258,7 @@ void OGLTransitionImpl::displaySlides_( double nTime, sal_Int32 glLeavingSlideTe + } + + void OGLTransitionImpl::display( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, +- double SlideWidth, double SlideHeight, double DispWidth, double DispHeight ) ++ double SlideWidth, double SlideHeight, double DispWidth, double DispHeight, OpenGLContext *pContext ) + { + const double SlideWidthScale = SlideWidth/DispWidth; + const double SlideHeightScale = SlideHeight/DispHeight; +@@ -267,7 +268,7 @@ void OGLTransitionImpl::display( double nTime, sal_Int32 glLeavingSlideTex, sal_ + prepare( nTime, SlideWidth, SlideHeight, DispWidth, DispHeight ); + + CHECK_GL_ERROR(); +- displaySlides_( nTime, glLeavingSlideTex, glEnteringSlideTex, SlideWidthScale, SlideHeightScale ); ++ displaySlides_( nTime, glLeavingSlideTex, glEnteringSlideTex, SlideWidthScale, SlideHeightScale, pContext ); + CHECK_GL_ERROR(); + displayScene( nTime, SlideWidth, SlideHeight, DispWidth, DispHeight ); + CHECK_GL_ERROR(); +@@ -534,9 +535,9 @@ public: + + private: + virtual GLuint makeShader() const override; +- virtual void displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale ) override; ++ virtual void displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale, OpenGLContext *pContext ) override; + +- virtual void prepareTransition( sal_Int32, sal_Int32 ) override { ++ virtual void prepareTransition( sal_Int32, sal_Int32, OpenGLContext* ) override { + glDisable(GL_CULL_FACE); + } + +@@ -551,7 +552,7 @@ GLuint ReflectionTransition::makeShader() const + } + + void ReflectionTransition::displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, +- double SlideWidthScale, double SlideHeightScale ) ++ double SlideWidthScale, double SlideHeightScale, OpenGLContext * ) + { + CHECK_GL_ERROR(); + applyOverallOperations( nTime, SlideWidthScale, SlideHeightScale ); +@@ -598,7 +599,7 @@ public: + private: + virtual GLuint makeShader() const override; + +- virtual void displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale ) override; ++ virtual void displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale, OpenGLContext *pContext ) override; + }; + + GLuint SimpleTransition::makeShader() const +@@ -607,7 +608,7 @@ GLuint SimpleTransition::makeShader() const + } + + void SimpleTransition::displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, +- double SlideWidthScale, double SlideHeightScale ) ++ double SlideWidthScale, double SlideHeightScale, OpenGLContext * ) + { + CHECK_GL_ERROR(); + applyOverallOperations( nTime, SlideWidthScale, SlideHeightScale ); +@@ -857,10 +858,10 @@ public: + {} + + private: +- virtual void displaySlides_(double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale) override; ++ virtual void displaySlides_(double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale, OpenGLContext *pContext) override; + }; + +-void RochadeTransition::displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale ) ++void RochadeTransition::displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale, OpenGLContext * ) + { + applyOverallOperations( nTime, SlideWidthScale, SlideHeightScale ); + +@@ -1195,7 +1196,7 @@ public: + {} + + private: +- virtual void displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale ) override; ++ virtual void displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale, OpenGLContext *pContext ) override; + }; + + Primitives_t makeLeavingSlide(double nTime) +@@ -1229,7 +1230,7 @@ Primitives_t makeLeavingSlide(double nTime) + } + + void DiamondTransition::displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, +- double SlideWidthScale, double SlideHeightScale ) ++ double SlideWidthScale, double SlideHeightScale, OpenGLContext * ) + { + CHECK_GL_ERROR(); + applyOverallOperations( nTime, SlideWidthScale, SlideHeightScale ); +@@ -1411,7 +1412,7 @@ protected: + {} + + virtual void finishTransition() override; +- virtual void prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex ) override; ++ virtual void prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, OpenGLContext *pContext ) override; + + private: + /** various data */ +@@ -1488,7 +1489,7 @@ void initPermTexture(GLuint *texID) + CHECK_GL_ERROR(); + } + +-void PermTextureTransition::prepareTransition( sal_Int32, sal_Int32 ) ++void PermTextureTransition::prepareTransition( sal_Int32, sal_Int32, OpenGLContext* ) + { + CHECK_GL_ERROR(); + GLint location = glGetUniformLocation( m_nProgramObject, "permTexture" ); +@@ -1629,8 +1630,8 @@ public: + private: + virtual void finishTransition() override; + virtual GLuint makeShader() const override; +- virtual void prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex ) override; +- virtual void displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale ) override; ++ virtual void prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, OpenGLContext *pContext ) override; ++ virtual void displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale, OpenGLContext *pContext ) override; + + GLint mnSlideLocation = -1; + GLint mnTileInfoLocation = -1; +@@ -1679,10 +1680,10 @@ glm::mat4 lookAt(const glm::vec3& eye, const glm::vec3& center, const glm::vec3& + -glm::dot(s, eye), -glm::dot(u, eye), glm::dot(f, eye), 1); + } + +-void VortexTransition::prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex ) ++void VortexTransition::prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, OpenGLContext *pContext ) + { + CHECK_GL_ERROR(); +- PermTextureTransition::prepareTransition( glLeavingSlideTex, glEnteringSlideTex ); ++ PermTextureTransition::prepareTransition( glLeavingSlideTex, glEnteringSlideTex, pContext ); + CHECK_GL_ERROR(); + + mnSlideLocation = glGetUniformLocation(m_nProgramObject, "slide"); +@@ -1783,7 +1784,7 @@ void VortexTransition::prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 + } + } + +- glBindFramebuffer(GL_FRAMEBUFFER, 0); ++ pContext->restoreDefaultFramebuffer(); + glBindTexture(GL_TEXTURE_2D, 0); + + glActiveTexture( GL_TEXTURE2 ); +@@ -1793,7 +1794,7 @@ void VortexTransition::prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 + glActiveTexture( GL_TEXTURE0 ); + } + +-void VortexTransition::displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale ) ++void VortexTransition::displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale, OpenGLContext * pContext ) + { + CHECK_GL_ERROR(); + applyOverallOperations( nTime, SlideWidthScale, SlideHeightScale ); +@@ -1815,7 +1816,7 @@ void VortexTransition::displaySlides_( double nTime, sal_Int32 glLeavingSlideTex + displaySlide( nTime, glEnteringSlideTex, getScene().getEnteringSlide(), SlideWidthScale, SlideHeightScale ); + + glViewport(viewport[0], viewport[1], viewport[2], viewport[3]); +- glBindFramebuffer(GL_FRAMEBUFFER, 0); ++ pContext->restoreDefaultFramebuffer(); + glUniform1f( mnShadowLocation, 0.0 ); + glUniform1f( mnSlideLocation, 0.0 ); + displaySlide( nTime, glLeavingSlideTex, getScene().getLeavingSlide(), SlideWidthScale, SlideHeightScale ); +@@ -1877,7 +1878,7 @@ public: + + private: + virtual GLuint makeShader() const override; +- virtual void prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex ) override; ++ virtual void prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, OpenGLContext *pContext ) override; + virtual void prepare( double nTime, double SlideWidth, double SlideHeight, double DispWidth, double DispHeight ) override; + + glm::vec2 maCenter; +@@ -1889,7 +1890,7 @@ GLuint RippleTransition::makeShader() const + return OpenGLHelper::LoadShaders( "basicVertexShader", "rippleFragmentShader" ); + } + +-void RippleTransition::prepareTransition( sal_Int32, sal_Int32 ) ++void RippleTransition::prepareTransition( sal_Int32, sal_Int32, OpenGLContext* ) + { + GLint nCenterLocation = glGetUniformLocation(m_nProgramObject, "center"); + CHECK_GL_ERROR(); +@@ -1974,7 +1975,7 @@ public: + + private: + virtual GLuint makeShader() const override; +- virtual void prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex ) override; ++ virtual void prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, OpenGLContext *pContext ) override; + virtual void finish( double nTime, double SlideWidth, double SlideHeight, double DispWidth, double DispHeight ) override; + + GLuint maBuffer = 0; +@@ -1990,10 +1991,10 @@ struct ThreeFloats + GLfloat x, y, z; + }; + +-void GlitterTransition::prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex ) ++void GlitterTransition::prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, OpenGLContext *pContext ) + { + CHECK_GL_ERROR(); +- PermTextureTransition::prepareTransition( glLeavingSlideTex, glEnteringSlideTex ); ++ PermTextureTransition::prepareTransition( glLeavingSlideTex, glEnteringSlideTex, pContext ); + CHECK_GL_ERROR(); + + GLint nNumTilesLocation = glGetUniformLocation(m_nProgramObject, "numTiles"); +@@ -2078,8 +2079,8 @@ public: + private: + virtual void finishTransition() override; + virtual GLuint makeShader() const override; +- virtual void prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex ) override; +- virtual void displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale ) override; ++ virtual void prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, OpenGLContext *pContext ) override; ++ virtual void displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale, OpenGLContext *pContext ) override; + + GLint maHexagonSizeLocation = -1; + GLint maSelectedTextureLocation = -1; +@@ -2112,10 +2113,10 @@ GLuint HoneycombTransition::makeShader() const + return OpenGLHelper::LoadShaders( "honeycombVertexShader", "honeycombFragmentShader", "honeycombGeometryShader" ); + } + +-void HoneycombTransition::prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex ) ++void HoneycombTransition::prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, OpenGLContext *pContext ) + { + CHECK_GL_ERROR(); +- PermTextureTransition::prepareTransition( glLeavingSlideTex, glEnteringSlideTex ); ++ PermTextureTransition::prepareTransition( glLeavingSlideTex, glEnteringSlideTex, pContext ); + + CHECK_GL_ERROR(); + maHexagonSizeLocation = glGetUniformLocation(m_nProgramObject, "hexagonSize"); +@@ -2189,11 +2190,11 @@ void HoneycombTransition::prepareTransition( sal_Int32 glLeavingSlideTex, sal_In + return; + } + +- glBindFramebuffer(GL_FRAMEBUFFER, 0); ++ pContext->restoreDefaultFramebuffer(); + } + + void HoneycombTransition::displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, +- double SlideWidthScale, double SlideHeightScale ) ++ double SlideWidthScale, double SlideHeightScale, OpenGLContext *pContext ) + { + CHECK_GL_ERROR(); + applyOverallOperations(nTime, SlideWidthScale, SlideHeightScale); +@@ -2217,7 +2218,7 @@ void HoneycombTransition::displaySlides_( double nTime, sal_Int32 glLeavingSlide + + // The back (entering) slide needs to be drawn before the front (leaving) one in order for blending to work. + glViewport(viewport[0], viewport[1], viewport[2], viewport[3]); +- glBindFramebuffer(GL_FRAMEBUFFER, 0); ++ pContext->restoreDefaultFramebuffer(); + glUniform1f(mnShadowLocation, 0.0); + glUniform1f(maSelectedTextureLocation, 0.0); + glUniform1f(maHexagonSizeLocation, 1.0f - borderSize); +diff --git a/slideshow/source/engine/opengl/TransitionImpl.hxx b/slideshow/source/engine/opengl/TransitionImpl.hxx +index b739c0c..54b7ba0 100644 +--- a/slideshow/source/engine/opengl/TransitionImpl.hxx ++++ b/slideshow/source/engine/opengl/TransitionImpl.hxx +@@ -36,6 +36,7 @@ + #include + + class Primitive; ++class OpenGLContext; + class Operation; + class SceneObject; + class TransitionData; +@@ -136,10 +137,10 @@ public: + + /** Prepare transition. + */ +- bool prepare( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex ); ++ bool prepare( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, OpenGLContext *pContext ); + /** Display a step of the transition. + */ +- void display( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidth, double SlideHeight, double DispWidth, double DispHeight ); ++ void display( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidth, double SlideHeight, double DispWidth, double DispHeight, OpenGLContext *pContext ); + /** Clean up after transition. + */ + void finish(); +@@ -182,7 +183,7 @@ private: + * + * Default implementation does nothing. + */ +- virtual void prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex ); ++ virtual void prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, OpenGLContext *pContext ); + + /** This function is called when the transition needs to clear after itself, like delete own textures etc. + * +@@ -195,7 +196,7 @@ private: + * Default implementation applies overall operations and then + * displays both slides. + */ +- virtual void displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale ); ++ virtual void displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale, OpenGLContext *pContext ); + + /** This function is called in prepare method to create the GL program. + * +diff --git a/slideshow/source/engine/opengl/TransitionerImpl.cxx b/slideshow/source/engine/opengl/TransitionerImpl.cxx +index 01cd3e5..f2f0b3f 100644 +--- a/slideshow/source/engine/opengl/TransitionerImpl.cxx ++++ b/slideshow/source/engine/opengl/TransitionerImpl.cxx +@@ -407,7 +407,7 @@ void OGLTransitionerImpl::impl_prepareSlides() + bool OGLTransitionerImpl::impl_prepareTransition() + { + if( mpTransition && mpTransition->getSettings().mnRequiredGLVersion <= mnGLVersion ) +- return mpTransition->prepare( maLeavingSlideGL, maEnteringSlideGL ); ++ return mpTransition->prepare( maLeavingSlideGL, maEnteringSlideGL, mpContext.get() ); + return false; + } + +@@ -1046,10 +1046,11 @@ void SAL_CALL OGLTransitionerImpl::update( double nTime ) throw (uno::RuntimeExc + CHECK_GL_ERROR(); + + const GLWindow& rGLWindow(mpContext->getOpenGLWindow()); +- mpTransition->display( nTime, maLeavingSlideGL, maEnteringSlideGL, ++ mpTransition->display(nTime, maLeavingSlideGL, maEnteringSlideGL, + maSlideSize.Width, maSlideSize.Height, + static_cast(rGLWindow.Width), +- static_cast(rGLWindow.Height) ); ++ static_cast(rGLWindow.Height), ++ mpContext.get()); + + mpContext->swapBuffers(); + +diff --git a/vcl/inc/unx/gtk/gtkinst.hxx b/vcl/inc/unx/gtk/gtkinst.hxx +index 514b13f..e20ca9d 100644 +--- a/vcl/inc/unx/gtk/gtkinst.hxx ++++ b/vcl/inc/unx/gtk/gtkinst.hxx +@@ -239,6 +239,7 @@ public: + virtual css::uno::Reference< css::uno::XInterface > CreateClipboard( const css::uno::Sequence< css::uno::Any >& i_rArguments ) override; + virtual css::uno::Reference< css::uno::XInterface > CreateDragSource() override; + virtual css::uno::Reference< css::uno::XInterface > CreateDropTarget() override; ++ virtual OpenGLContext* CreateOpenGLContext() override; + #endif + + virtual const cairo_font_options_t* GetCairoFontOptions() override; +diff --git a/vcl/source/opengl/OpenGLContext.cxx b/vcl/source/opengl/OpenGLContext.cxx +index 1b2893b..d7d7841 100644 +--- a/vcl/source/opengl/OpenGLContext.cxx ++++ b/vcl/source/opengl/OpenGLContext.cxx +@@ -330,6 +330,11 @@ void OpenGLContext::InitGLDebugging() + #endif + } + ++void OpenGLContext::restoreDefaultFramebuffer() ++{ ++ glBindFramebuffer(GL_FRAMEBUFFER, 0); ++} ++ + void OpenGLContext::setWinPosAndSize(const Point &rPos, const Size& rSize) + { + if(m_xWindow) +diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx +index 7148882..947bcc9 100644 +--- a/vcl/unx/gtk3/gtk3gtkinst.cxx ++++ b/vcl/unx/gtk3/gtk3gtkinst.cxx +@@ -916,4 +916,131 @@ Reference< XInterface > GtkInstance::CreateDragSource() + return Reference< XInterface >( static_cast(new GtkDragSource()) ); + } + ++class GtkOpenGLContext : public OpenGLContext ++{ ++ GLWindow m_aGLWin; ++ GtkWidget *m_pGLArea; ++ ++public: ++ GtkOpenGLContext() ++ : OpenGLContext() ++ , m_pGLArea(nullptr) ++ { ++ } ++ ++ virtual bool initWindow() override ++ { ++ if( !m_pChildWindow ) ++ { ++ SystemWindowData winData = generateWinData(mpWindow, mbRequestLegacyContext); ++ m_pChildWindow = VclPtr::Create(mpWindow, 0, &winData, false); ++ } ++ ++ if (m_pChildWindow) ++ { ++ InitChildWindow(m_pChildWindow.get()); ++ } ++ ++ return true; ++ } ++ ++private: ++ virtual const GLWindow& getOpenGLWindow() const override { return m_aGLWin; } ++ virtual GLWindow& getModifiableOpenGLWindow() override { return m_aGLWin; } ++ ++ static void signalDestroy(GtkWidget*, gpointer context) ++ { ++ GtkOpenGLContext* pThis = static_cast(context); ++ pThis->m_pGLArea = nullptr; ++ } ++ ++ virtual bool ImplInit() override ++ { ++#if GTK_CHECK_VERSION(3,16,0) ++ const SystemEnvData* pEnvData = m_pChildWindow->GetSystemData(); ++ GtkWidget *pParent = static_cast(pEnvData->pWidget); ++ m_pGLArea = gtk_gl_area_new(); ++ g_signal_connect(G_OBJECT(m_pGLArea), "destroy", G_CALLBACK(signalDestroy), this); ++ gtk_gl_area_set_has_depth_buffer(GTK_GL_AREA(m_pGLArea), true); ++ gtk_gl_area_set_auto_render(GTK_GL_AREA(m_pGLArea), false); ++ gtk_widget_set_hexpand(m_pGLArea, true); ++ gtk_widget_set_vexpand(m_pGLArea, true); ++ gtk_container_add(GTK_CONTAINER(pParent), m_pGLArea); ++ gtk_widget_show_all(pParent); ++ gtk_gl_area_make_current(GTK_GL_AREA(m_pGLArea)); ++ gtk_gl_area_attach_buffers(GTK_GL_AREA(m_pGLArea)); ++#endif ++ bool bRet = InitGL(); ++ InitGLDebugging(); ++ return bRet; ++ } ++ ++ virtual void restoreDefaultFramebuffer() override ++ { ++ OpenGLContext::restoreDefaultFramebuffer(); ++#if GTK_CHECK_VERSION(3,16,0) ++ gtk_gl_area_attach_buffers(GTK_GL_AREA(m_pGLArea)); ++#endif ++ } ++ ++ virtual void makeCurrent() override ++ { ++ if (isCurrent()) ++ return; ++ ++ clearCurrent(); ++ ++#if GTK_CHECK_VERSION(3,16,0) ++ if (m_pGLArea) ++ gtk_gl_area_make_current(GTK_GL_AREA(m_pGLArea)); ++#endif ++ ++ registerAsCurrent(); ++ } ++ ++ virtual void destroyCurrentContext() override ++ { ++#if GTK_CHECK_VERSION(3,16,0) ++ gdk_gl_context_clear_current(); ++#endif ++ } ++ ++ virtual bool isCurrent() override ++ { ++#if GTK_CHECK_VERSION(3,16,0) ++ return m_pGLArea && gdk_gl_context_get_current() == gtk_gl_area_get_context(GTK_GL_AREA(m_pGLArea)); ++#else ++ return false; ++#endif ++ } ++ ++ virtual void sync() override ++ { ++#if GTK_CHECK_VERSION(3,16,0) ++ gtk_gl_area_queue_render(GTK_GL_AREA(m_pGLArea)); ++#endif ++ } ++ ++ virtual void resetCurrent() override ++ { ++ clearCurrent(); ++#if GTK_CHECK_VERSION(3,16,0) ++ gdk_gl_context_clear_current(); ++#endif ++ } ++ ++ virtual void swapBuffers() override ++ { ++#if GTK_CHECK_VERSION(3,16,0) ++ gtk_gl_area_queue_render(GTK_GL_AREA(m_pGLArea)); ++#endif ++ BuffersSwapped(); ++ } ++}; ++ ++OpenGLContext* GtkInstance::CreateOpenGLContext() ++{ ++ return new GtkOpenGLContext; ++} ++ + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +-- +2.9.3 + diff --git a/SOURCES/0001-installation-fix.patch b/SOURCES/0001-installation-fix.patch new file mode 100644 index 0000000..677b689 --- /dev/null +++ b/SOURCES/0001-installation-fix.patch @@ -0,0 +1,71 @@ +From 3d36f9efa2e2f7a39a926e2d1acea2255b990b03 Mon Sep 17 00:00:00 2001 +From: David Tardon +Date: Mon, 3 Feb 2014 21:41:00 +0100 +Subject: [PATCH] installation fix + +--- + solenv/bin/modules/installer/scriptitems.pm | 15 ++++++--------- + solenv/bin/modules/installer/worker.pm | 1 - + 2 files changed, 6 insertions(+), 10 deletions(-) + +diff --git a/solenv/bin/modules/installer/scriptitems.pm b/solenv/bin/modules/installer/scriptitems.pm +index 5f8dfd6..dff0f13 100644 +--- a/solenv/bin/modules/installer/scriptitems.pm ++++ b/solenv/bin/modules/installer/scriptitems.pm +@@ -1131,11 +1131,10 @@ sub remove_Files_Without_Sourcedirectory + + if ( ! $installer::globals::languagepack && !$installer::globals::helppack) + { +- $infoline = "ERROR: Removing file $filename from file list.\n"; ++ $infoline = "WARNING: Removing file $filename from file list.\n"; + push( @installer::globals::logfileinfo, $infoline); + +- push(@missingfiles, "ERROR: File not found: $filename\n"); +- $error_occurred = 1; ++ push(@missingfiles, "WARNING: File not found: $filename\n"); + + next; # removing this file from list, if sourcepath is empty + } +@@ -1143,11 +1142,10 @@ sub remove_Files_Without_Sourcedirectory + { + if (( $onefile->{'ismultilingual'} ) || ( $styles =~ /\bFORCELANGUAGEPACK\b/ )) + { +- $infoline = "ERROR: Removing file $filename from file list.\n"; ++ $infoline = "WARNING: Removing file $filename from file list.\n"; + push( @installer::globals::logfileinfo, $infoline); + +- push(@missingfiles, "ERROR: File not found: $filename\n"); +- $error_occurred = 1; ++ push(@missingfiles, "WARNING: File not found: $filename\n"); + + next; # removing this file from list, if sourcepath is empty + } +@@ -1165,11 +1163,10 @@ sub remove_Files_Without_Sourcedirectory + { + if (( $onefile->{'ismultilingual'} ) || ( $styles =~ /\bFORCEHELPPACK\b/ )) + { +- $infoline = "ERROR: Removing file $filename from file list.\n"; ++ $infoline = "WARNING: Removing file $filename from file list.\n"; + push( @installer::globals::logfileinfo, $infoline); + +- push(@missingfiles, "ERROR: File not found: $filename\n"); +- $error_occurred = 1; ++ push(@missingfiles, "WARNING: File not found: $filename\n"); + + next; # removing this file from list, if sourcepath is empty + } +diff --git a/solenv/bin/modules/installer/worker.pm b/solenv/bin/modules/installer/worker.pm +index aab676f..0e6f67d 100644 +--- a/solenv/bin/modules/installer/worker.pm ++++ b/solenv/bin/modules/installer/worker.pm +@@ -96,7 +96,6 @@ sub create_installation_directory + + $installdir = installer::systemactions::create_directories("install", $languageref); + installer::logger::print_message( "... creating installation set in $installdir ...\n" ); +- remove_old_installation_sets($installdir); + my $inprogressinstalldir = $installdir . "_inprogress"; + installer::systemactions::rename_directory($installdir, $inprogressinstalldir); + $installdir = $inprogressinstalldir; +-- +2.9.3 + diff --git a/SOURCES/0001-its-really-the-contents-we-want-to-redraw.patch b/SOURCES/0001-its-really-the-contents-we-want-to-redraw.patch new file mode 100644 index 0000000..7f23503 --- /dev/null +++ b/SOURCES/0001-its-really-the-contents-we-want-to-redraw.patch @@ -0,0 +1,29 @@ +From 7739839d43dd2437d13968465cfe4762bc3f2e35 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Thu, 7 Sep 2017 16:39:12 +0100 +Subject: [PATCH] its really the contents we want to redraw + +doesn't matter in practice though, but change it anyway + +Change-Id: I9df8304f01c80a899bdd7219fc4ce459bda7de08 +--- + vcl/unx/gtk3/gtk3salnativewidgets-gtk.cxx | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/vcl/unx/gtk3/gtk3salnativewidgets-gtk.cxx b/vcl/unx/gtk3/gtk3salnativewidgets-gtk.cxx +index 04b682c..ed23a8e 100644 +--- a/vcl/unx/gtk3/gtk3salnativewidgets-gtk.cxx ++++ b/vcl/unx/gtk3/gtk3salnativewidgets-gtk.cxx +@@ -3311,7 +3311,8 @@ cairo::SurfaceSharedPtr GtkSalGraphics::CreateSurface(const OutputDevice& /*rRef + void GtkSalGraphics::WidgetQueueDraw() const + { + //request gtk to sync the entire contents +- gtk_widget_queue_draw(mpWindow); ++ GtkWidget *pWidget = GTK_WIDGET(mpFrame->getFixedContainer()); ++ gtk_widget_queue_draw(pWidget); + } + + namespace { +-- +2.9.4 + diff --git a/SOURCES/0001-keep-pyuno-script-processing-below-base-uri.patch b/SOURCES/0001-keep-pyuno-script-processing-below-base-uri.patch new file mode 100644 index 0000000..3cfce72 --- /dev/null +++ b/SOURCES/0001-keep-pyuno-script-processing-below-base-uri.patch @@ -0,0 +1,70 @@ +From 14c85889616de301e3a214c49fff2e6da3327d1f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Thu, 18 Oct 2018 20:39:23 +0100 +Subject: [PATCH] keep pyuno script processing below base uri +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Change-Id: Icc13fb7193fb1e7c50e0df286161a10b4ed636c7 +Reviewed-on: https://gerrit.libreoffice.org/61970 +Reviewed-by: Stephan Bergmann +Reviewed-by: Thorsten Behrens +Reviewed-by: Michael Stahl +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara +--- + scripting/source/pyprov/pythonscript.py | 30 +++++++++++++++++++++++-- + 1 file changed, 28 insertions(+), 2 deletions(-) + +diff --git a/scripting/source/pyprov/pythonscript.py b/scripting/source/pyprov/pythonscript.py +index 4803d0bebc23..f5aa2173333a 100644 +--- a/scripting/source/pyprov/pythonscript.py ++++ b/scripting/source/pyprov/pythonscript.py +@@ -25,6 +25,7 @@ import imp + import time + import ast + import platform ++from com.sun.star.uri.RelativeUriExcessParentSegments import RETAIN + + try: + unicode +@@ -212,8 +213,33 @@ class MyUriHelper: + + def scriptURI2StorageUri( self, scriptURI ): + try: +- myUri = self.m_uriRefFac.parse(scriptURI) +- ret = self.m_baseUri + "/" + myUri.getName().replace( "|", "/" ) ++ # base path to the python script location ++ sBaseUri = self.m_baseUri + "/" ++ xBaseUri = self.m_uriRefFac.parse(sBaseUri) ++ ++ # path to the .py file + "$functionname, arguments, etc ++ xStorageUri = self.m_uriRefFac.parse(scriptURI) ++ sStorageUri = xStorageUri.getName().replace( "|", "/" ); ++ ++ # path to the .py file, relative to the base ++ sFileUri = sStorageUri[0:sStorageUri.find("$")] ++ xFileUri = self.m_uriRefFac.parse(sFileUri) ++ if not xFileUri: ++ message = "pythonscript: invalid relative uri '" + sFileUri+ "'" ++ log.debug( message ) ++ raise RuntimeException( message ) ++ ++ # absolute path to the .py file ++ xAbsScriptUri = self.m_uriRefFac.makeAbsolute(xBaseUri, xFileUri, True, RETAIN) ++ sAbsScriptUri = xAbsScriptUri.getUriReference() ++ ++ # ensure py file is under the base path ++ if not sAbsScriptUri.startswith(sBaseUri): ++ message = "pythonscript: storage uri '" + sAbsScriptUri + "' not in base uri '" + self.m_baseUri + "'" ++ log.debug( message ) ++ raise RuntimeException( message ) ++ ++ ret = sBaseUri + sStorageUri + log.debug( "converting scriptURI="+scriptURI + " to storageURI=" + ret ) + return ret + except UnoException as e: +-- +2.20.1 + diff --git a/SOURCES/0001-limit-WEBSERVICE-to-http-s-protocols.patch b/SOURCES/0001-limit-WEBSERVICE-to-http-s-protocols.patch new file mode 100644 index 0000000..26beccc --- /dev/null +++ b/SOURCES/0001-limit-WEBSERVICE-to-http-s-protocols.patch @@ -0,0 +1,937 @@ +From a3f5d838d091df6c1582b0fb6d539292edf536a0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Wed, 10 Jan 2018 14:27:35 +0000 +Subject: [PATCH] limit WEBSERVICE to http[s] protocols +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +and like excel... + +'For protocols that aren’t supported, such as ftp:// or file://, WEBSERVICE +returns the #VALUE! error value.' + +Reviewed-on: https://gerrit.libreoffice.org/47776 +Tested-by: Jenkins +Reviewed-by: Markus Mohrhard + +Better handle ScDde formulas with missing dde-link entries + +typically each ScDde formula has a matching table:dde-link which +results in a ScDdeLink getting inserted during the load. If that dde-link +is missing then no ScDdeLink exists and ScDde() will create a new one without +cached content. So detect that ScDde is used in the freshing loaded ods +and defer fetching new content until the right time. + +only call GetHasMacroFunc to set SetHasMacroFunc + +and bHasMacroFunc is not accessed any other way, so this is an oxbow + +Reviewed-on: https://gerrit.libreoffice.org/47757 +Tested-by: Jenkins +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara +(cherry picked from commit b0597ba5d745974fce752e1b677451a19350d351) +Reviewed-on: https://gerrit.libreoffice.org/47818 +Reviewed-by: Eike Rathke + +handle ocWebservice similarly to ocDde + +might have too much in here seeing as we don't need to worry about +ocWebservice calling into itself + +Reviewed-on: https://gerrit.libreoffice.org/47819 +Tested-by: Jenkins +Reviewed-by: Eike Rathke + +CheckLinkFormulaNeedingCheck() for .xls and .xlsx formula cells + + This is a combination of 3 commits. + +Move implementation to CheckLinkFormulaNeedingCheck() for further reuse + +(cherry picked from commit 55e484c7bcd3ef218e08d3fd93f97bf98fd8cb7f) + +CheckLinkFormulaNeedingCheck() for .xlsx cell formulas + +(cherry picked from commit f96dbc3dd9c33202f75e29ef49d962386595995d) + +CheckLinkFormulaNeedingCheck() for .xls cell formulas + +(cherry picked from commit 6bc48275558c3f76c4da25eb8af3c48583ac5599) + +a6dd195f7eb4d43483e87eeca59f651e7bf2dcb8 +2587fbc4fec39b6f2c8e733331815a2953dee308 + +Reviewed-on: https://gerrit.libreoffice.org/48143 +Tested-by: Jenkins +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara + +CheckLinkFormulaNeedingCheck() for conditional format expressions + + This is a combination of 4 commits. + +Prepare CheckLinkFormulaNeedingCheck() to use either RPN or tokenized code + +Conditional format formulas aren't finally compiled until needed +so the check will have to operate on the tokenized expression +instead of RPN code. + +(cherry picked from commit faa0305ba3d0dc698fce4915d4f3a1fb52422380) + +CheckLinkFormulaNeedingCheck() for .ods conditional format expressions + +(cherry picked from commit 2930ba2ac5d9423f2848b968edcd8ddc71966186) + +CheckLinkFormulaNeedingCheck() for .xlsx conditional format expressions + +(cherry picked from commit fef24d9f999ee54d7936900485d97ff26656f517) + +CheckLinkFormulaNeedingCheck() for .xls conditional format expressions + +(cherry picked from commit af2a2a0c72db312902e466c36697b5c198041e82) + +45eb1ab5efa0ec9da2663f20427d2474ce300826 +31ede1a23223a798141a0891deeabd8cf88fff58 +afa112cc591b411d80ead48bf726788d361f6eb3 + +Reviewed-on: https://gerrit.libreoffice.org/48719 +Tested-by: Jenkins +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara + +CheckLinkFormulaNeedingCheck() for named expressions + + This is a combination of 3 commits. + +CheckLinkFormulaNeedingCheck() for .ods named expressions + +This is specifically necessary for named expressions that are used +in conditional format formulas, for which RPN is generated at a +later stage, not during import. + +(cherry picked from commit eae9648e99be53ba441d9d8207aac6f3ce211ef2) + +CheckLinkFormulaNeedingCheck() for .xls named expressions + +(cherry picked from commit 8512f13c42ae3fbb287a555616fe10ff04295616) + +CheckLinkFormulaNeedingCheck() for .xlsx named expressions + +(cherry picked from commit a1f933ee2b9e23a505d937035821e9571cf4119c) + + Conflicts: + sc/source/filter/oox/defnamesbuffer.cxx + +e03cb5767c34f8157a492a6d6c3b0700d065052d +217c89822ab477a6c383d170ae739e44efd10fa3 + +Change-Id: I0e9c6fd3426fad56a199eafac48de9b0f23914b3 +016b53288076d83dd49e92e245346a5f7f560522 +0145f38cc1c1f9ff514a496f7101d81cde9e7c67 +541d2b6e12a88371c064b901b00e71206ee0c18e +68837e9bd33f125ab47b10b1a6fa18175abd1627 +54ab8dc14f81d6b18b0d17f448187d19d8e396fc +Reviewed-on: https://gerrit.libreoffice.org/48858 +Tested-by: Jenkins +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara +--- + sc/Library_sc.mk | 1 + + sc/inc/document.hxx | 8 ++- + sc/inc/documentlinkmgr.hxx | 6 +- + sc/qa/unit/ucalc.cxx | 2 +- + sc/source/core/data/conditio.cxx | 6 ++ + sc/source/core/data/documen2.cxx | 2 +- + sc/source/core/data/documen8.cxx | 23 +++++++ + sc/source/core/data/formulacell.cxx | 7 +- + sc/source/core/inc/webservicelink.hxx | 49 ++++++++++++++ + sc/source/core/tool/interpr2.cxx | 8 ++- + sc/source/core/tool/interpr7.cxx | 106 ++++++++++++++++++++++-------- + sc/source/core/tool/rangenam.cxx | 8 ++- + sc/source/core/tool/webservicelink.cxx | 106 ++++++++++++++++++++++++++++++ + sc/source/filter/excel/excform.cxx | 1 + + sc/source/filter/excel/excform8.cxx | 1 + + sc/source/filter/excel/impop.cxx | 1 + + sc/source/filter/excel/xicontent.cxx | 6 ++ + sc/source/filter/excel/xiname.cxx | 3 + + sc/source/filter/oox/condformatbuffer.cxx | 2 + + sc/source/filter/oox/defnamesbuffer.cxx | 2 + + sc/source/filter/oox/formulabuffer.cxx | 4 ++ + sc/source/ui/docshell/docsh4.cxx | 4 +- + sc/source/ui/docshell/documentlinkmgr.cxx | 20 ++++-- + sc/source/ui/view/tabvwsh4.cxx | 2 +- + 24 files changed, 329 insertions(+), 49 deletions(-) + create mode 100644 sc/source/core/inc/webservicelink.hxx + create mode 100644 sc/source/core/tool/webservicelink.cxx + +diff --git a/sc/Library_sc.mk b/sc/Library_sc.mk +index 3714c966a62e..05a3ee49a32c 100644 +--- a/sc/Library_sc.mk ++++ b/sc/Library_sc.mk +@@ -285,6 +285,7 @@ $(eval $(call gb_Library_add_exception_objects,sc,\ + sc/source/core/tool/unitconv \ + sc/source/core/tool/userlist \ + sc/source/core/tool/viewopti \ ++ sc/source/core/tool/webservicelink \ + sc/source/core/tool/zforauto \ + sc/source/filter/xml/datastreamimport \ + sc/source/filter/xml/XMLCalculationSettingsContext \ +diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx +index f5f9f0387174..d25ca0b913a8 100644 +--- a/sc/inc/document.hxx ++++ b/sc/inc/document.hxx +@@ -448,7 +448,7 @@ private: + // for detective update, is set for each change of a formula + bool bDetectiveDirty; + +- bool bHasMacroFunc; // valid only after loading ++ bool bLinkFormulaNeedingCheck; // valid only after loading, for ocDde and ocWebservice + + sal_uInt8 nAsianCompression; + sal_uInt8 nAsianKerning; +@@ -1928,8 +1928,10 @@ public: + bool IsDetectiveDirty() const { return bDetectiveDirty; } + void SetDetectiveDirty(bool bSet) { bDetectiveDirty = bSet; } + +- bool GetHasMacroFunc() const { return bHasMacroFunc; } +- void SetHasMacroFunc(bool bSet) { bHasMacroFunc = bSet; } ++ bool HasLinkFormulaNeedingCheck() const { return bLinkFormulaNeedingCheck; } ++ void SetLinkFormulaNeedingCheck(bool bSet) { bLinkFormulaNeedingCheck = bSet; } ++ /** Check token array and set link check if ocDde/ocWebservice is contained. */ ++ SC_DLLPUBLIC void CheckLinkFormulaNeedingCheck( const ScTokenArray& rCode ); + + void SetRangeOverflowType(sal_uInt32 nType) { nRangeOverflowType = nType; } + bool HasRangeOverflow() const { return nRangeOverflowType != 0; } +diff --git a/sc/inc/documentlinkmgr.hxx b/sc/inc/documentlinkmgr.hxx +index d5d801a4aeb2..86dba66f2d3d 100644 +--- a/sc/inc/documentlinkmgr.hxx ++++ b/sc/inc/documentlinkmgr.hxx +@@ -55,9 +55,9 @@ public: + bool idleCheckLinks(); + + bool hasDdeLinks() const; +- bool hasDdeOrOleLinks() const; ++ bool hasDdeOrOleOrWebServiceLinks() const; + +- bool updateDdeOrOleLinks(vcl::Window* pWin); ++ bool updateDdeOrOleOrWebServiceLinks(vcl::Window* pWin); + + void updateDdeLink( const OUString& rAppl, const OUString& rTopic, const OUString& rItem ); + +@@ -65,7 +65,7 @@ public: + + void disconnectDdeLinks(); + private: +- bool hasDdeOrOleLinks(bool bDde, bool bOle) const; ++ bool hasDdeOrOleOrWebServiceLinks(bool bDde, bool bOle, bool bWebService) const; + }; + + } +diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx +index ea44ff7d4f3d..90ca51f47073 100644 +--- a/sc/qa/unit/ucalc.cxx ++++ b/sc/qa/unit/ucalc.cxx +@@ -6215,7 +6215,7 @@ void Test::testEmptyCalcDocDefaults() + CPPUNIT_ASSERT_EQUAL( false, m_pDoc->IdleCalcTextWidth() ); + CPPUNIT_ASSERT_EQUAL( true, m_pDoc->IsIdleEnabled() ); + CPPUNIT_ASSERT_EQUAL( false, m_pDoc->IsDetectiveDirty() ); +- CPPUNIT_ASSERT_EQUAL( false, m_pDoc->GetHasMacroFunc() ); ++ CPPUNIT_ASSERT_EQUAL( false, m_pDoc->HasLinkFormulaNeedingCheck() ); + CPPUNIT_ASSERT_EQUAL( false, m_pDoc->IsChartListenerCollectionNeedsUpdate() ); + + CPPUNIT_ASSERT_EQUAL( false, m_pDoc->HasRangeOverflow() ); +diff --git a/sc/source/core/data/conditio.cxx b/sc/source/core/data/conditio.cxx +index c970520f3377..1fc8ee34b60b 100644 +--- a/sc/source/core/data/conditio.cxx ++++ b/sc/source/core/data/conditio.cxx +@@ -522,6 +522,12 @@ void ScConditionEntry::CompileXML() + Compile( GetExpression(aSrcPos, 0, 0, eTempGrammar1), + GetExpression(aSrcPos, 1, 0, eTempGrammar2), + aStrNmsp1, aStrNmsp2, eTempGrammar1, eTempGrammar2, true ); ++ ++ // Importing ocDde/ocWebservice? ++ if (pFormula1) ++ mpDoc->CheckLinkFormulaNeedingCheck(*pFormula1); ++ if (pFormula2) ++ mpDoc->CheckLinkFormulaNeedingCheck(*pFormula2); + } + + void ScConditionEntry::SetSrcString( const OUString& rNew ) +diff --git a/sc/source/core/data/documen2.cxx b/sc/source/core/data/documen2.cxx +index 7a41f14c01c2..017f8629c910 100644 +--- a/sc/source/core/data/documen2.cxx ++++ b/sc/source/core/data/documen2.cxx +@@ -200,7 +200,7 @@ ScDocument::ScDocument( ScDocumentMode eMode, SfxObjectShell* pDocShell ) : + bInDtorClear( false ), + bExpandRefs( false ), + bDetectiveDirty( false ), +- bHasMacroFunc( false ), ++ bLinkFormulaNeedingCheck( false ), + nAsianCompression(SC_ASIANCOMPRESSION_INVALID), + nAsianKerning(SC_ASIANKERNING_INVALID), + bPastingDrawFromOtherDoc( false ), +diff --git a/sc/source/core/data/documen8.cxx b/sc/source/core/data/documen8.cxx +index 572d594b3697..49985b4cd93d 100644 +--- a/sc/source/core/data/documen8.cxx ++++ b/sc/source/core/data/documen8.cxx +@@ -88,6 +88,7 @@ + #include "stringutil.hxx" + #include + #include ++#include + + #include + +@@ -1153,6 +1154,28 @@ void ScDocument::UpdateRefAreaLinks( UpdateRefMode eUpdateRefMode, + } + } + ++void ScDocument::CheckLinkFormulaNeedingCheck( const ScTokenArray& rCode ) ++{ ++ if (HasLinkFormulaNeedingCheck()) ++ return; ++ ++ // Prefer RPN over tokenized formula if available. ++ if (rCode.GetCodeLen()) ++ { ++ if (rCode.HasOpCodeRPN(ocDde) || rCode.HasOpCodeRPN(ocWebservice)) ++ SetLinkFormulaNeedingCheck(true); ++ } ++ else if (rCode.GetLen()) ++ { ++ if (rCode.HasOpCode(ocDde) || rCode.HasOpCode(ocWebservice)) ++ SetLinkFormulaNeedingCheck(true); ++ } ++ else ++ { ++ assert(!"called with empty ScTokenArray"); ++ } ++} ++ + // TimerDelays etc. + void ScDocument::KeyInput( const KeyEvent& ) + { +diff --git a/sc/source/core/data/formulacell.cxx b/sc/source/core/data/formulacell.cxx +index 381fb173d4b7..8eb4f9f23400 100644 +--- a/sc/source/core/data/formulacell.cxx ++++ b/sc/source/core/data/formulacell.cxx +@@ -1379,10 +1379,9 @@ void ScFormulaCell::CompileXML( sc::CompileFormulaContext& rCxt, ScProgress& rPr + bChanged = true; + } + +- // Same as in Load: after loading, it must be known if ocMacro is in any formula +- // (for macro warning, CompileXML is called at the end of loading XML file) +- if ( !pDocument->GetHasMacroFunc() && pCode->HasOpCodeRPN( ocMacro ) ) +- pDocument->SetHasMacroFunc( true ); ++ // After loading, it must be known if ocDde/ocWebservice is in any formula ++ // (for external links warning, CompileXML is called at the end of loading XML file) ++ pDocument->CheckLinkFormulaNeedingCheck(*pCode); + + //volatile cells must be added here for import + if( pCode->IsRecalcModeAlways() || pCode->IsRecalcModeForced() || +diff --git a/sc/source/core/inc/webservicelink.hxx b/sc/source/core/inc/webservicelink.hxx +new file mode 100644 +index 000000000000..e61ebfdb4347 +--- /dev/null ++++ b/sc/source/core/inc/webservicelink.hxx +@@ -0,0 +1,49 @@ ++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ ++/* ++ * This file is part of the LibreOffice project. ++ * ++ * This Source Code Form is subject to the terms of the Mozilla Public ++ * License, v. 2.0. If a copy of the MPL was not distributed with this ++ * file, You can obtain one at http://mozilla.org/MPL/2.0/. ++ */ ++ ++#ifndef INCLUDED_SC_SOURCE_CORE_INC_WEBSERVICE_HXX ++#define INCLUDED_SC_SOURCE_CORE_INC_WEBSERVICE_HXX ++ ++#include ++#include ++#include ++#include ++ ++class ScDocument; ++ ++class ScWebServiceLink : public ::sfx2::SvBaseLink, public SvtBroadcaster ++{ ++private: ++ ScDocument* pDoc; ++ OUString aURL; // connection/ link data ++ bool bHasResult; // is set aResult is useful ++ OUString aResult; ++ ++public: ++ ScWebServiceLink(ScDocument* pD, const OUString& rURL); ++ virtual ~ScWebServiceLink() override; ++ ++ // SvBaseLink override: ++ virtual ::sfx2::SvBaseLink::UpdateResult DataChanged(const OUString& rMimeType, ++ const css::uno::Any& rValue) override; ++ ++ // SvtBroadcaster override: ++ virtual void ListenersGone() override; ++ ++ // for interpreter: ++ ++ const OUString& GetResult() const { return aResult; } ++ bool HasResult() const { return bHasResult; } ++ ++ const OUString& GetURL() const { return aURL; } ++}; ++ ++#endif ++ ++/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ +diff --git a/sc/source/core/tool/interpr2.cxx b/sc/source/core/tool/interpr2.cxx +index c40623320b3d..7f215495538b 100644 +--- a/sc/source/core/tool/interpr2.cxx ++++ b/sc/source/core/tool/interpr2.cxx +@@ -2742,8 +2742,14 @@ void ScInterpreter::ScDde() + pBindings->Invalidate( SID_LINKS ); // Link-Manager enablen + } + ++ //if the document was just loaded, but the ScDdeLink entry was missing, then ++ //don't update this link until the links are updated in response to the users ++ //decision ++ if (!pDok->HasLinkFormulaNeedingCheck()) ++ { + //TODO: evaluate asynchron ??? +- pLink->TryUpdate(); // TryUpdate doesn't call Update multiple times ++ pLink->TryUpdate(); // TryUpdate doesn't call Update multiple times ++ } + + if (pMyFormulaCell) + { +diff --git a/sc/source/core/tool/interpr7.cxx b/sc/source/core/tool/interpr7.cxx +index 48a34b3ece36..e2f562848a31 100644 +--- a/sc/source/core/tool/interpr7.cxx ++++ b/sc/source/core/tool/interpr7.cxx +@@ -13,7 +13,9 @@ + #include "scmatrix.hxx" + #include + #include ++#include + #include ++#include + + #include + #include +@@ -23,6 +25,10 @@ + #include + #include + #include ++#include ++#include ++ ++#include + + #include + #include +@@ -234,6 +240,22 @@ void ScInterpreter::ScFilterXML() + } + } + ++static ScWebServiceLink* lcl_GetWebServiceLink(const sfx2::LinkManager* pLinkMgr, const OUString& rURL) ++{ ++ size_t nCount = pLinkMgr->GetLinks().size(); ++ for (size_t i=0; iGetLinks()[i].get(); ++ if (ScWebServiceLink* pLink = dynamic_cast(pBase)) ++ { ++ if (pLink->GetURL() == rURL) ++ return pLink; ++ } ++ } ++ ++ return nullptr; ++} ++ + void ScInterpreter::ScWebservice() + { + sal_uInt8 nParamCount = GetByte(); +@@ -241,54 +263,82 @@ void ScInterpreter::ScWebservice() + { + OUString aURI = GetString().getString(); + +- if(aURI.isEmpty()) ++ if (aURI.isEmpty()) + { + PushError( FormulaError::NoValue ); + return; + } + +- uno::Reference< ucb::XSimpleFileAccess3 > xFileAccess( ucb::SimpleFileAccess::create( comphelper::getProcessComponentContext() ), uno::UNO_QUERY ); +- if(!xFileAccess.is()) ++ INetURLObject aObj(aURI, INetProtocol::File); ++ INetProtocol eProtocol = aObj.GetProtocol(); ++ if (eProtocol != INetProtocol::Http && eProtocol != INetProtocol::Https) + { +- PushError( FormulaError::NoValue ); ++ PushError(FormulaError::NoValue); + return; + } + +- uno::Reference< io::XInputStream > xStream; +- try { +- xStream = xFileAccess->openFileRead( aURI ); +- } +- catch (...) ++ if (!mpLinkManager) + { +- // don't let any exceptions pass +- PushError( FormulaError::NoValue ); +- return; +- } +- if ( !xStream.is() ) +- { +- PushError( FormulaError::NoValue ); ++ PushError(FormulaError::NoValue); + return; + } + +- const sal_Int32 BUF_LEN = 8000; +- uno::Sequence< sal_Int8 > buffer( BUF_LEN ); +- OStringBuffer aBuffer( 64000 ); ++ // Need to reinterpret after loading (build links) ++ if (rArr.IsRecalcModeNormal()) ++ rArr.SetExclusiveRecalcModeOnLoad(); ++ ++ // while the link is not evaluated, idle must be disabled (to avoid circular references) ++ bool bOldEnabled = pDok->IsIdleEnabled(); ++ pDok->EnableIdle(false); ++ ++ // Get/ Create link object ++ ScWebServiceLink* pLink = lcl_GetWebServiceLink(mpLinkManager, aURI); ++ ++ bool bWasError = (pMyFormulaCell && pMyFormulaCell->GetRawError() != FormulaError::NONE); + +- sal_Int32 nRead = 0; +- while ( ( nRead = xStream->readBytes( buffer, BUF_LEN ) ) == BUF_LEN ) ++ if (!pLink) + { +- aBuffer.append( reinterpret_cast< const char* >( buffer.getConstArray() ), nRead ); +- } ++ pLink = new ScWebServiceLink(pDok, aURI); ++ mpLinkManager->InsertFileLink(*pLink, OBJECT_CLIENT_FILE, aURI); ++ if ( mpLinkManager->GetLinks().size() == 1 ) // the first one? ++ { ++ SfxBindings* pBindings = pDok->GetViewBindings(); ++ if (pBindings) ++ pBindings->Invalidate( SID_LINKS ); // Link-Manager enabled ++ } + +- if ( nRead > 0 ) ++ //if the document was just loaded, but the ScDdeLink entry was missing, then ++ //don't update this link until the links are updated in response to the users ++ //decision ++ if (!pDok->HasLinkFormulaNeedingCheck()) ++ { ++ pLink->Update(); ++ } ++ ++ if (pMyFormulaCell) ++ { ++ // StartListening after the Update to avoid circular references ++ pMyFormulaCell->StartListening(*pLink); ++ } ++ } ++ else + { +- aBuffer.append( reinterpret_cast< const char* >( buffer.getConstArray() ), nRead ); ++ if (pMyFormulaCell) ++ pMyFormulaCell->StartListening(*pLink); + } + +- xStream->closeInput(); ++ // If an new Error from Reschedule appears when the link is executed then reset the errorflag ++ if (pMyFormulaCell && pMyFormulaCell->GetRawError() != FormulaError::NONE && !bWasError) ++ pMyFormulaCell->SetErrCode(FormulaError::NONE); ++ ++ // check the value ++ if (pLink->HasResult()) ++ PushString(pLink->GetResult()); ++ else ++ PushError(FormulaError::NoValue); + +- OUString aContent = OStringToOUString( aBuffer.makeStringAndClear(), RTL_TEXTENCODING_UTF8 ); +- PushString( aContent ); ++ pDok->EnableIdle(bOldEnabled); ++ mpLinkManager->CloseCachedComps(); + } + } + +diff --git a/sc/source/core/tool/rangenam.cxx b/sc/source/core/tool/rangenam.cxx +index eae117c08434..18cbabb1cd93 100644 +--- a/sc/source/core/tool/rangenam.cxx ++++ b/sc/source/core/tool/rangenam.cxx +@@ -64,9 +64,14 @@ ScRangeData::ScRangeData( ScDocument* pDok, + mnMaxCol (-1) + { + if (!rSymbol.isEmpty()) +- CompileRangeData( rSymbol, pDoc->IsImportingXML()); ++ { + // Let the compiler set an error on unknown names for a subsequent + // CompileUnresolvedXML(). ++ const bool bImporting = pDoc->IsImportingXML(); ++ CompileRangeData( rSymbol, bImporting); ++ if (bImporting) ++ pDoc->CheckLinkFormulaNeedingCheck( *pCode); ++ } + else + { + // #i63513#/#i65690# don't leave pCode as NULL. +@@ -199,6 +204,7 @@ void ScRangeData::CompileUnresolvedXML( sc::CompileFormulaContext& rCxt ) + // Don't let the compiler set an error for unknown names on final + // compile, errors are handled by the interpreter thereafter. + CompileRangeData( aSymbol, false); ++ rCxt.getDoc()->CheckLinkFormulaNeedingCheck( *pCode); + } + } + +diff --git a/sc/source/core/tool/webservicelink.cxx b/sc/source/core/tool/webservicelink.cxx +new file mode 100644 +index 000000000000..82310f2b1351 +--- /dev/null ++++ b/sc/source/core/tool/webservicelink.cxx +@@ -0,0 +1,106 @@ ++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ ++/* ++ * This file is part of the LibreOffice project. ++ * ++ * This Source Code Form is subject to the terms of the Mozilla Public ++ * License, v. 2.0. If a copy of the MPL was not distributed with this ++ * file, You can obtain one at http://mozilla.org/MPL/2.0/. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++ScWebServiceLink::ScWebServiceLink(ScDocument* pD, const OUString& rURL) ++ : ::sfx2::SvBaseLink(SfxLinkUpdateMode::ALWAYS, SotClipboardFormatId::STRING) ++ , pDoc(pD) ++ , aURL(rURL) ++ , bHasResult(false) ++{ ++} ++ ++ScWebServiceLink::~ScWebServiceLink() {} ++ ++sfx2::SvBaseLink::UpdateResult ScWebServiceLink::DataChanged(const OUString&, const css::uno::Any&) ++{ ++ aResult.clear(); ++ bHasResult = false; ++ ++ css::uno::Reference xFileAccess( ++ css::ucb::SimpleFileAccess::create(comphelper::getProcessComponentContext()), ++ css::uno::UNO_QUERY); ++ if (!xFileAccess.is()) ++ return ERROR_GENERAL; ++ ++ css::uno::Reference xStream; ++ try ++ { ++ xStream = xFileAccess->openFileRead(aURL); ++ } ++ catch (...) ++ { ++ // don't let any exceptions pass ++ return ERROR_GENERAL; ++ } ++ if (!xStream.is()) ++ return ERROR_GENERAL; ++ ++ const sal_Int32 BUF_LEN = 8000; ++ css::uno::Sequence buffer(BUF_LEN); ++ OStringBuffer aBuffer(64000); ++ ++ sal_Int32 nRead = 0; ++ while ((nRead = xStream->readBytes(buffer, BUF_LEN)) == BUF_LEN) ++ aBuffer.append(reinterpret_cast(buffer.getConstArray()), nRead); ++ ++ if (nRead > 0) ++ aBuffer.append(reinterpret_cast(buffer.getConstArray()), nRead); ++ ++ xStream->closeInput(); ++ ++ aResult = OStringToOUString(aBuffer.makeStringAndClear(), RTL_TEXTENCODING_UTF8); ++ bHasResult = true; ++ ++ // Something happened... ++ if (HasListeners()) ++ { ++ Broadcast(ScHint(SC_HINT_DATACHANGED, ScAddress())); ++ pDoc->TrackFormulas(); // must happen immediately ++ pDoc->StartTrackTimer(); ++ } ++ ++ return SUCCESS; ++} ++ ++void ScWebServiceLink::ListenersGone() ++{ ++ ScDocument* pStackDoc = pDoc; // member pDoc can't be used after removing the link ++ ++ sfx2::LinkManager* pLinkMgr = pDoc->GetLinkManager(); ++ pLinkMgr->Remove(this); // deletes this ++ ++ if (pLinkMgr->GetLinks().empty()) // deleted the last one ? ++ { ++ SfxBindings* pBindings = pStackDoc->GetViewBindings(); // don't use member pDoc! ++ if (pBindings) ++ pBindings->Invalidate(SID_LINKS); ++ } ++} ++ ++/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ +diff --git a/sc/source/filter/excel/excform.cxx b/sc/source/filter/excel/excform.cxx +index 67e7657f3428..889225c364bc 100644 +--- a/sc/source/filter/excel/excform.cxx ++++ b/sc/source/filter/excel/excform.cxx +@@ -156,6 +156,7 @@ void ImportExcel::Formula( + { + pCell = new ScFormulaCell(&rDoc.getDoc(), aScPos, *pResult); + pCell->GetCode()->WrapReference(aScPos, EXC_MAXCOL8, EXC_MAXROW8); ++ rDoc.getDoc().CheckLinkFormulaNeedingCheck( *pCell->GetCode()); + rDoc.getDoc().EnsureTable(aScPos.Tab()); + rDoc.setFormulaCell(aScPos, pCell); + SetLastFormula(aScPos.Col(), aScPos.Row(), fCurVal, nXF, pCell); +diff --git a/sc/source/filter/excel/excform8.cxx b/sc/source/filter/excel/excform8.cxx +index ef3d09ae1c8b..ff3387bf916b 100644 +--- a/sc/source/filter/excel/excform8.cxx ++++ b/sc/source/filter/excel/excform8.cxx +@@ -730,6 +730,7 @@ ConvErr ExcelToSc8::Convert( const ScTokenArray*& rpTokArray, XclImpStream& aIn, + << nMerk0 << ocClose; + aPool >> aStack; + pExtName->CreateDdeData( GetDoc(), aApplic, aTopic ); ++ GetDoc().SetLinkFormulaNeedingCheck(true); + } + } + break; +diff --git a/sc/source/filter/excel/impop.cxx b/sc/source/filter/excel/impop.cxx +index 01b5b736951e..a76a81db3ff8 100644 +--- a/sc/source/filter/excel/impop.cxx ++++ b/sc/source/filter/excel/impop.cxx +@@ -866,6 +866,7 @@ void ImportExcel::Shrfmla() + + ScFormulaCell* pCell = new ScFormulaCell(pD, aPos, *pErgebnis); + pCell->GetCode()->WrapReference(aPos, EXC_MAXCOL8, EXC_MAXROW8); ++ rDoc.getDoc().CheckLinkFormulaNeedingCheck( *pCell->GetCode()); + rDoc.getDoc().EnsureTable(aPos.Tab()); + rDoc.setFormulaCell(aPos, pCell); + pCell->SetNeedNumberFormat(false); +diff --git a/sc/source/filter/excel/xicontent.cxx b/sc/source/filter/excel/xicontent.cxx +index bb80a929b35f..d2418806da53 100644 +--- a/sc/source/filter/excel/xicontent.cxx ++++ b/sc/source/filter/excel/xicontent.cxx +@@ -662,7 +662,10 @@ void XclImpCondFormat::ReadCF( XclImpStream& rStrm ) + rFmlaConv.Convert( pTokArr, rStrm, nFmlaSize1, false, FT_CondFormat ); + // formula converter owns pTokArr -> create a copy of the token array + if( pTokArr ) ++ { + xTokArr1.reset( pTokArr->Clone() ); ++ GetDocRef().CheckLinkFormulaNeedingCheck( *xTokArr1); ++ } + } + + ::std::unique_ptr< ScTokenArray > pTokArr2; +@@ -673,7 +676,10 @@ void XclImpCondFormat::ReadCF( XclImpStream& rStrm ) + rFmlaConv.Convert( pTokArr, rStrm, nFmlaSize2, false, FT_CondFormat ); + // formula converter owns pTokArr -> create a copy of the token array + if( pTokArr ) ++ { + pTokArr2.reset( pTokArr->Clone() ); ++ GetDocRef().CheckLinkFormulaNeedingCheck( *pTokArr2); ++ } + } + + // *** create the Calc conditional formatting *** +diff --git a/sc/source/filter/excel/xiname.cxx b/sc/source/filter/excel/xiname.cxx +index 7189c2a0a2f2..efc181921091 100644 +--- a/sc/source/filter/excel/xiname.cxx ++++ b/sc/source/filter/excel/xiname.cxx +@@ -265,7 +265,10 @@ void XclImpName::InsertName(const ScTokenArray* pArray) + } + } + if (pData) ++ { ++ GetDoc().CheckLinkFormulaNeedingCheck( *pData->GetCode()); + mpScData = pData; // cache for later use ++ } + } + + XclImpNameManager::XclImpNameManager( const XclImpRoot& rRoot ) : +diff --git a/sc/source/filter/oox/condformatbuffer.cxx b/sc/source/filter/oox/condformatbuffer.cxx +index 1d0dd13fd773..aa8fbbaa4d96 100644 +--- a/sc/source/filter/oox/condformatbuffer.cxx ++++ b/sc/source/filter/oox/condformatbuffer.cxx +@@ -874,11 +874,13 @@ void CondFormatRule::finalizeImport() + { + pTokenArray2.reset(new ScTokenArray()); + ScTokenConversion::ConvertToTokenArray( rDoc, *pTokenArray2.get(), maModel.maFormulas[ 1 ] ); ++ rDoc.CheckLinkFormulaNeedingCheck( *pTokenArray2.get()); + } + + ScTokenArray aTokenArray; + OUString aStyleName = getStyles().createDxfStyle( maModel.mnDxfId ); + ScTokenConversion::ConvertToTokenArray( rDoc, aTokenArray, maModel.maFormulas[ 0 ] ); ++ rDoc.CheckLinkFormulaNeedingCheck( aTokenArray); + ScCondFormatEntry* pNewEntry = new ScCondFormatEntry(eOperator, + &aTokenArray, pTokenArray2.get(), &rDoc, aPos, aStyleName); + mpFormat->AddEntry(pNewEntry); +diff --git a/sc/source/filter/oox/defnamesbuffer.cxx b/sc/source/filter/oox/defnamesbuffer.cxx +index 79457ab57e5f..a1d10906c687 100644 +--- a/sc/source/filter/oox/defnamesbuffer.cxx ++++ b/sc/source/filter/oox/defnamesbuffer.cxx +@@ -38,6 +38,7 @@ + #include "tokenarray.hxx" + #include "tokenuno.hxx" + #include "compiler.hxx" ++#include "document.hxx" + + namespace oox { + namespace xls { +@@ -334,6 +335,7 @@ std::unique_ptr DefinedName::getScTokens( + // after, a resulting error must be reset. + FormulaError nErr = pArray->GetCodeError(); + aCompiler.CompileTokenArray(); ++ getScDocument().CheckLinkFormulaNeedingCheck( *pArray); + pArray->DelRPN(); + pArray->SetCodeError(nErr); + +diff --git a/sc/source/filter/oox/formulabuffer.cxx b/sc/source/filter/oox/formulabuffer.cxx +index 003d0b96769b..bfa229292775 100644 +--- a/sc/source/filter/oox/formulabuffer.cxx ++++ b/sc/source/filter/oox/formulabuffer.cxx +@@ -223,6 +223,10 @@ void applyCellFormulas( + continue; + + aCompiler.CompileTokenArray(); // Generate RPN tokens. ++ ++ // Check if ocDde/ocWebservice is in any formula for external links warning. ++ rDoc.getDoc().CheckLinkFormulaNeedingCheck(*pCode); ++ + ScFormulaCell* pCell = new ScFormulaCell(&rDoc.getDoc(), aPos, pCode); + rDoc.setFormulaCell(aPos, pCell); + rCache.store(aPos, pCell); +diff --git a/sc/source/ui/docshell/docsh4.cxx b/sc/source/ui/docshell/docsh4.cxx +index 81dbf194d0c7..a2b1b11ee646 100644 +--- a/sc/source/ui/docshell/docsh4.cxx ++++ b/sc/source/ui/docshell/docsh4.cxx +@@ -450,7 +450,7 @@ void ScDocShell::Execute( SfxRequest& rReq ) + ReloadTabLinks(); + aDocument.UpdateExternalRefLinks(GetActiveDialogParent()); + +- bool bAnyDde = aDocument.GetDocLinkManager().updateDdeOrOleLinks(GetActiveDialogParent()); ++ bool bAnyDde = aDocument.GetDocLinkManager().updateDdeOrOleOrWebServiceLinks(GetActiveDialogParent()); + + if (bAnyDde) + { +@@ -472,6 +472,8 @@ void ScDocShell::Execute( SfxRequest& rReq ) + rEmbeddedObjectContainer.setUserAllowsLinkUpdate(false); + rReq.Ignore(); + } ++ ++ rDoc.SetLinkFormulaNeedingCheck(false); + } + break; + +diff --git a/sc/source/ui/docshell/documentlinkmgr.cxx b/sc/source/ui/docshell/documentlinkmgr.cxx +index 520b8542afc0..b8a9df65cb6b 100644 +--- a/sc/source/ui/docshell/documentlinkmgr.cxx ++++ b/sc/source/ui/docshell/documentlinkmgr.cxx +@@ -20,6 +20,7 @@ + #include + #include + #include ++#include + #include + #include + +@@ -115,15 +116,15 @@ bool DocumentLinkManager::idleCheckLinks() + + bool DocumentLinkManager::hasDdeLinks() const + { +- return hasDdeOrOleLinks(true, false); ++ return hasDdeOrOleOrWebServiceLinks(true, false, false); + } + +-bool DocumentLinkManager::hasDdeOrOleLinks() const ++bool DocumentLinkManager::hasDdeOrOleOrWebServiceLinks() const + { +- return hasDdeOrOleLinks(true, true); ++ return hasDdeOrOleOrWebServiceLinks(true, true, true); + } + +-bool DocumentLinkManager::hasDdeOrOleLinks(bool bDde, bool bOle) const ++bool DocumentLinkManager::hasDdeOrOleOrWebServiceLinks(bool bDde, bool bOle, bool bWebService) const + { + if (!mpImpl->mpLinkManager) + return false; +@@ -136,12 +137,14 @@ bool DocumentLinkManager::hasDdeOrOleLinks(bool bDde, bool bOle) const + return true; + if (bOle && dynamic_cast(pBase)) + return true; ++ if (bWebService && dynamic_cast(pBase)) ++ return true; + } + + return false; + } + +-bool DocumentLinkManager::updateDdeOrOleLinks( vcl::Window* pWin ) ++bool DocumentLinkManager::updateDdeOrOleOrWebServiceLinks(vcl::Window* pWin) + { + if (!mpImpl->mpLinkManager) + return false; +@@ -163,6 +166,13 @@ bool DocumentLinkManager::updateDdeOrOleLinks( vcl::Window* pWin ) + continue; + } + ++ ScWebServiceLink* pWebserviceLink = dynamic_cast(pBase); ++ if (pWebserviceLink) ++ { ++ pWebserviceLink->Update(); ++ continue; ++ } ++ + ScDdeLink* pDdeLink = dynamic_cast(pBase); + if (!pDdeLink) + continue; +diff --git a/sc/source/ui/view/tabvwsh4.cxx b/sc/source/ui/view/tabvwsh4.cxx +index e8f4491ae26e..17fb575a162f 100644 +--- a/sc/source/ui/view/tabvwsh4.cxx ++++ b/sc/source/ui/view/tabvwsh4.cxx +@@ -1575,7 +1575,7 @@ void ScTabViewShell::Construct( TriState nForceDesignMode ) + if (!bLink) + { + const sc::DocumentLinkManager& rMgr = rDoc.GetDocLinkManager(); +- if (rMgr.hasDdeOrOleLinks() || rDoc.HasAreaLinks()) ++ if (rDoc.HasLinkFormulaNeedingCheck() || rDoc.HasAreaLinks() || rMgr.hasDdeOrOleOrWebServiceLinks()) + bLink = true; + } + if (bLink) +-- +2.14.3 + diff --git a/SOURCES/0001-lower-the-system-epoxy-requirement.patch b/SOURCES/0001-lower-the-system-epoxy-requirement.patch new file mode 100644 index 0000000..c83a247 --- /dev/null +++ b/SOURCES/0001-lower-the-system-epoxy-requirement.patch @@ -0,0 +1,28 @@ +From e673349ad31a5ea469ef90e3fb03f7f0af5bb559 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Tue, 20 Dec 2016 11:11:32 +0000 +Subject: [PATCH] lower the system epoxy requirement + +(cherry picked from commit d0c3dba866ba0900dcaf2c3a25200edb516bd608) + +Change-Id: I2fff46985502dafa3b860aaebe862853ebaccabb +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 0f8e58d..c4f64d7 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -11727,7 +11727,7 @@ AC_SUBST(CAIRO_LIBS) + dnl =================================================================== + dnl Check for system epoxy + dnl =================================================================== +-libo_CHECK_SYSTEM_MODULE([epoxy], [EPOXY], [epoxy >= 1.3.1], ["-I${WORKDIR}/UnpackedTarball/epoxy/include"]) ++libo_CHECK_SYSTEM_MODULE([epoxy], [EPOXY], [epoxy >= 1.2], ["-I${WORKDIR}/UnpackedTarball/epoxy/include"]) + + dnl =================================================================== + dnl Test whether to use avahi +-- +2.9.3 + diff --git a/SOURCES/0001-never-run-autogen.sh.patch b/SOURCES/0001-never-run-autogen.sh.patch new file mode 100644 index 0000000..4b9deaf --- /dev/null +++ b/SOURCES/0001-never-run-autogen.sh.patch @@ -0,0 +1,25 @@ +From 3b80333b8d98e74bef22e5484b9db2b79310303f Mon Sep 17 00:00:00 2001 +From: rpmbuild +Date: Thu, 20 Feb 2014 19:44:49 +0100 +Subject: [PATCH] never run autogen.sh + +--- + Makefile.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile.in b/Makefile.in +index 41479bd..a5d7368 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -19,7 +19,7 @@ build_goal:=$(if $(filter build check,$(MAKECMDGOALS)),all)\ + + SRCDIR := @SRC_ROOT@ + BUILDDIR := @BUILDDIR@ +-GIT_BUILD := $(if $(wildcard $(SRCDIR)/.git),T) ++GIT_BUILD := + + # Run autogen.sh if needed and force make to restart itself. + # ... but there are several cases where we do not want to run +-- +2.1.0 + diff --git a/SOURCES/0001-ofz-5747-short-sal_Int32-like-in-StgDataStrm.patch b/SOURCES/0001-ofz-5747-short-sal_Int32-like-in-StgDataStrm.patch new file mode 100644 index 0000000..4025bc9 --- /dev/null +++ b/SOURCES/0001-ofz-5747-short-sal_Int32-like-in-StgDataStrm.patch @@ -0,0 +1,60 @@ +From 368116f6d97e9bf10a6e12368191cd42844902b5 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Sat, 27 Jan 2018 19:38:12 +0000 +Subject: [PATCH] ofz#5747 short->sal_Int32 like in StgDataStrm +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Change-Id: I254c00b1142d7187beabe5d18532efec036de494 +Reviewed-on: https://gerrit.libreoffice.org/48751 +Tested-by: Jenkins +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara +--- + sot/source/sdstor/stgstrms.cxx | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/sot/source/sdstor/stgstrms.cxx b/sot/source/sdstor/stgstrms.cxx +index 7063a4c..d9ec341 100644 +--- a/sot/source/sdstor/stgstrms.cxx ++++ b/sot/source/sdstor/stgstrms.cxx +@@ -1047,7 +1047,7 @@ sal_Int32 StgSmallStrm::Read( void* pBuf, sal_Int32 n ) + // small stream is likely to be < 64 KBytes. + if( ( m_nPos + n ) > m_nSize ) + n = m_nSize - m_nPos; +- short nDone = 0; ++ sal_Int32 nDone = 0; + while( n ) + { + short nBytes = m_nPageSize - m_nOffset; +@@ -1059,7 +1059,7 @@ sal_Int32 StgSmallStrm::Read( void* pBuf, sal_Int32 n ) + break; + // all reading through the stream + short nRes = (short) m_pData->Read( static_cast(pBuf) + nDone, nBytes ); +- nDone = nDone + nRes; ++ nDone += nRes; + m_nPos += nRes; + n -= nRes; + m_nOffset = m_nOffset + nRes; +@@ -1078,7 +1078,7 @@ sal_Int32 StgSmallStrm::Write( const void* pBuf, sal_Int32 n ) + { + // you can safely assume that reads are not huge, since the + // small stream is likely to be < 64 KBytes. +- short nDone = 0; ++ sal_Int32 nDone = 0; + if( ( m_nPos + n ) > m_nSize ) + { + sal_Int32 nOld = m_nPos; +@@ -1102,7 +1102,7 @@ sal_Int32 StgSmallStrm::Write( const void* pBuf, sal_Int32 n ) + if( !m_pData->Pos2Page( nDataPos ) ) + break; + short nRes = (short) m_pData->Write( static_cast(pBuf) + nDone, nBytes ); +- nDone = nDone + nRes; ++ nDone += nRes; + m_nPos += nRes; + n -= nRes; + m_nOffset = m_nOffset + nRes; +-- +2.14.3 + diff --git a/SOURCES/0001-ofz-6173-check-index-before-use.patch b/SOURCES/0001-ofz-6173-check-index-before-use.patch new file mode 100644 index 0000000..64f49df --- /dev/null +++ b/SOURCES/0001-ofz-6173-check-index-before-use.patch @@ -0,0 +1,35 @@ +From ce58f18222a7b20e02bb5b3b8b328b11b1c29a31 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Fri, 9 Feb 2018 10:49:39 +0000 +Subject: [PATCH] ofz#6173 check index before use +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Change-Id: I09d15ab324af0a8b3566f11868eb3266a68c4afe +Reviewed-on: https://gerrit.libreoffice.org/49486 +Tested-by: Jenkins +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara +--- + sw/source/filter/ww8/ww8toolbar.cxx | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/sw/source/filter/ww8/ww8toolbar.cxx b/sw/source/filter/ww8/ww8toolbar.cxx +index 15c0abb..3686a73 100644 +--- a/sw/source/filter/ww8/ww8toolbar.cxx ++++ b/sw/source/filter/ww8/ww8toolbar.cxx +@@ -167,7 +167,9 @@ bool SwCTBWrapper::Read( SvStream& rS ) + std::vector< sal_Int16 >::iterator it_end = dropDownMenuIndices.end(); + for ( std::vector< sal_Int16 >::iterator it = dropDownMenuIndices.begin(); it != it_end; ++it ) + { +- rCustomizations[ *it ].bIsDroppedMenuTB = true; ++ if (*it < 0 || static_cast(*it) >= rCustomizations.size()) ++ continue; ++ rCustomizations[*it].bIsDroppedMenuTB = true; + } + return rS.good(); + } +-- +2.14.3 + diff --git a/SOURCES/0001-rename-IsAutoCapitalizeWordDelim-to-NonFieldWordDeli.patch b/SOURCES/0001-rename-IsAutoCapitalizeWordDelim-to-NonFieldWordDeli.patch new file mode 100644 index 0000000..5313db1 --- /dev/null +++ b/SOURCES/0001-rename-IsAutoCapitalizeWordDelim-to-NonFieldWordDeli.patch @@ -0,0 +1,89 @@ +From fce38cb5608fd35bc27f35c81cb27075ea85f9d3 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Mon, 19 Jun 2017 14:07:46 +0100 +Subject: [PATCH 1/2] rename IsAutoCapitalizeWordDelim to NonFieldWordDelim + +Change-Id: If8fb8f5e51bba8e631a6fc5db54487b418c19e05 +--- + editeng/source/misc/svxacorr.cxx | 22 +++++++++++----------- + 1 file changed, 11 insertions(+), 11 deletions(-) + +diff --git a/editeng/source/misc/svxacorr.cxx b/editeng/source/misc/svxacorr.cxx +index f9f701b..6a815bc 100644 +--- a/editeng/source/misc/svxacorr.cxx ++++ b/editeng/source/misc/svxacorr.cxx +@@ -98,18 +98,18 @@ static const sal_Char + + OUString EncryptBlockName_Imp(const OUString& rName); + +-static inline bool IsWordDelim( const sal_Unicode c ) ++static inline bool NonFieldWordDelim( const sal_Unicode c ) + { + return ' ' == c || '\t' == c || 0x0a == c || +- cNonBreakingSpace == c || 0x2011 == c || 0x1 == c; ++ cNonBreakingSpace == c || 0x2011 == c; + } + +-static inline bool IsAutoCapitalizeWordDelim( const sal_Unicode c ) ++static inline bool IsWordDelim( const sal_Unicode c ) + { +- return ' ' == c || '\t' == c || 0x0a == c || +- cNonBreakingSpace == c || 0x2011 == c; ++ return c == 0x1 || NonFieldWordDelim(c); + } + ++ + static inline bool IsLowerLetter( sal_Int32 nCharType ) + { + return CharClass::isLetterType( nCharType ) && +@@ -870,9 +870,9 @@ bool SvxAutoCorrect::FnCapitalStartSentence( SvxAutoCorrDoc& rDoc, + + if( !bAtStart ) // Still no beginning of a paragraph? + { +- if (IsAutoCapitalizeWordDelim(*pStr)) ++ if (NonFieldWordDelim(*pStr)) + { +- while (!(bAtStart = (pStart == pStr--)) && IsAutoCapitalizeWordDelim(*pStr)) ++ while (!(bAtStart = (pStart == pStr--)) && NonFieldWordDelim(*pStr)) + ; + } + // Asian full stop, full width full stop, full width exclamation mark +@@ -903,7 +903,7 @@ bool SvxAutoCorrect::FnCapitalStartSentence( SvxAutoCorrDoc& rDoc, + + do { // overwrite all blanks + --pStr; +- if (!IsAutoCapitalizeWordDelim(*pStr)) ++ if (!NonFieldWordDelim(*pStr)) + break; + } while( ! ( bAtStart = (pStart == pStr) ) ); + +@@ -998,7 +998,7 @@ bool SvxAutoCorrect::FnCapitalStartSentence( SvxAutoCorrDoc& rDoc, + else + bAlphaFnd = true; + } +- else if (bAlphaFnd || IsAutoCapitalizeWordDelim(*pTmpStr)) ++ else if (bAlphaFnd || NonFieldWordDelim(*pTmpStr)) + break; + + if( pTmpStr == pStart ) +@@ -1014,7 +1014,7 @@ bool SvxAutoCorrect::FnCapitalStartSentence( SvxAutoCorrDoc& rDoc, + bool bNumericOnly = '0' <= *(pStr+1) && *(pStr+1) <= '9'; + + // Search for the beginning of the word +- while (!IsAutoCapitalizeWordDelim(*pStr)) ++ while (!NonFieldWordDelim(*pStr)) + { + if( bNumericOnly && rCC.isLetter( aText, pStr - pStart ) ) + bNumericOnly = false; +@@ -1028,7 +1028,7 @@ bool SvxAutoCorrect::FnCapitalStartSentence( SvxAutoCorrDoc& rDoc, + if( bNumericOnly ) // consists of only numbers, then not + return false; + +- if (IsAutoCapitalizeWordDelim(*pStr)) ++ if (NonFieldWordDelim(*pStr)) + ++pStr; + + OUString sWord; +-- +2.9.3 + diff --git a/SOURCES/0001-rhbz-1527945-segv-on-failed-open-of-password-protect.patch b/SOURCES/0001-rhbz-1527945-segv-on-failed-open-of-password-protect.patch new file mode 100644 index 0000000..9423cb5 --- /dev/null +++ b/SOURCES/0001-rhbz-1527945-segv-on-failed-open-of-password-protect.patch @@ -0,0 +1,470 @@ +From 243d94875dc9c24932c2aec5ec44cf31e310d006 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Thu, 21 Dec 2017 16:19:42 +0000 +Subject: [PATCH] rhbz#1527945 segv on failed open of password protected doc in + gnome-documents + +Change-Id: I1bec502ae20d03214c673d8911792c89669c0fe9 +Reviewed-on: https://gerrit.libreoffice.org/46923 +Tested-by: Jenkins +Reviewed-by: Miklos Vajna +(cherry picked from commit a61f45499856aad9910d82af1312a163504c15c2) + +Lok: number callback enum for easier debugging + +Since the entries and their order are part of the +public API, and will not change, numbering them +makes it easier to trap particular callbacks by +their number (as that's what shows in logs and +the debugger). + +Change-Id: Ife2fe3e601ce3dce0939363d748fcb54d3c85fd4 +Reviewed-on: https://gerrit.libreoffice.org/31257 +Tested-by: Jenkins +Reviewed-by: Ashod Nakashian +(cherry picked from commit 719f7cb94ce783349fb1cf366a78edd9996d3e37) + +lokdocview: use std::string where possible + +This also prevents an invalid memory access: we were storing the pointer +to a temporary in the struct and then using it after temporary was gone. + +Change-Id: I2b6d9df16bc24b222095ccbf45c9f0bd9c86ed65 +(cherry picked from commit 9d2e0d60c0381a4bb23fada14c80e032b68bf2a8) +Reviewed-on: https://gerrit.libreoffice.org/46951 +Tested-by: Jenkins +Reviewed-by: Miklos Vajna +(cherry picked from commit 4ed5f5b28aaaf4522b71f32fb2f9f6a960dbff69) +--- + include/LibreOfficeKit/LibreOfficeKitEnums.h | 64 ++++++++++++++-------------- + libreofficekit/source/gtk/lokdocview.cxx | 44 +++++++++---------- + 2 files changed, 53 insertions(+), 55 deletions(-) + +diff --git a/include/LibreOfficeKit/LibreOfficeKitEnums.h b/include/LibreOfficeKit/LibreOfficeKitEnums.h +index 187fa9812e60..d2ccc0fdccd8 100644 +--- a/include/LibreOfficeKit/LibreOfficeKitEnums.h ++++ b/include/LibreOfficeKit/LibreOfficeKitEnums.h +@@ -93,13 +93,13 @@ typedef enum + * + * @see LOK_FEATURE_PART_IN_INVALIDATION_CALLBACK. + */ +- LOK_CALLBACK_INVALIDATE_TILES, ++ LOK_CALLBACK_INVALIDATE_TILES = 0, + /** + * The size and/or the position of the visible cursor changed. + * + * Rectangle format is the same as LOK_CALLBACK_INVALIDATE_TILES. + */ +- LOK_CALLBACK_INVALIDATE_VISIBLE_CURSOR, ++ LOK_CALLBACK_INVALIDATE_VISIBLE_CURSOR = 1, + /** + * The list of rectangles representing the current text selection changed. + * +@@ -108,7 +108,7 @@ typedef enum + * LOK_CALLBACK_INVALIDATE_TILES. When there is no selection, an empty + * string is provided. + */ +- LOK_CALLBACK_TEXT_SELECTION, ++ LOK_CALLBACK_TEXT_SELECTION = 2, + /** + * The position and size of the cursor rectangle at the text + * selection start. It is used to draw the selection handles. +@@ -118,7 +118,7 @@ typedef enum + * + * Rectangle format is the same as LOK_CALLBACK_INVALIDATE_TILES. + */ +- LOK_CALLBACK_TEXT_SELECTION_START, ++ LOK_CALLBACK_TEXT_SELECTION_START = 3, + /** + * The position and size of the cursor rectangle at the text + * selection end. It is used to draw the selection handles. +@@ -128,7 +128,7 @@ typedef enum + * + * Rectangle format is the same as LOK_CALLBACK_INVALIDATE_TILES. + */ +- LOK_CALLBACK_TEXT_SELECTION_END, ++ LOK_CALLBACK_TEXT_SELECTION_END = 4, + /** + * The blinking text cursor is now visible or not. + * +@@ -137,26 +137,26 @@ typedef enum + * LOK_CALLBACK_INVALIDATE_VISIBLE_CURSOR once it becomes false. Payload is + * either the "true" or the "false" string. + */ +- LOK_CALLBACK_CURSOR_VISIBLE, ++ LOK_CALLBACK_CURSOR_VISIBLE = 5, + /** + * The size and/or the position of the graphic selection changed. + * + * Rectangle format is the same as LOK_CALLBACK_INVALIDATE_TILES. + */ +- LOK_CALLBACK_GRAPHIC_SELECTION, ++ LOK_CALLBACK_GRAPHIC_SELECTION = 6, + + /** + * User clicked on an hyperlink that should be handled by other + * applications accordingly. + */ +- LOK_CALLBACK_HYPERLINK_CLICKED, ++ LOK_CALLBACK_HYPERLINK_CLICKED = 7, + + /** + * Emit state update to the client. + * For example, when cursor is on bold text, this callback is triggered + * with payload: ".uno:Bold=true" + */ +- LOK_CALLBACK_STATE_CHANGED, ++ LOK_CALLBACK_STATE_CHANGED = 8, + + /** + * Start a "status indicator" (here restricted to a progress bar type +@@ -172,25 +172,25 @@ typedef enum + * loading a document and then constructing a LibreOfficeKitDocument + * object. + */ +- LOK_CALLBACK_STATUS_INDICATOR_START, ++ LOK_CALLBACK_STATUS_INDICATOR_START = 9, + + /** + * Sets the numeric value of the status indicator. + * The payload should be a percentage, an integer between 0 and 100. + */ +- LOK_CALLBACK_STATUS_INDICATOR_SET_VALUE, ++ LOK_CALLBACK_STATUS_INDICATOR_SET_VALUE = 10, + + /** + * Ends the status indicator. + * + * Not necessarily ever emitted. + */ +- LOK_CALLBACK_STATUS_INDICATOR_FINISH, ++ LOK_CALLBACK_STATUS_INDICATOR_FINISH = 11, + + /** + * No match was found for the search input + */ +- LOK_CALLBACK_SEARCH_NOT_FOUND, ++ LOK_CALLBACK_SEARCH_NOT_FOUND = 12, + + /** + * Size of the document changed. +@@ -198,14 +198,14 @@ typedef enum + * Payload format is "width, height", i.e. clients get the new size without + * having to do an explicit lok::Document::getDocumentSize() call. + */ +- LOK_CALLBACK_DOCUMENT_SIZE_CHANGED, ++ LOK_CALLBACK_DOCUMENT_SIZE_CHANGED = 13, + + /** + * The current part number is changed. + * + * Payload is a single 0-based integer. + */ +- LOK_CALLBACK_SET_PART, ++ LOK_CALLBACK_SET_PART = 14, + + /** + * Selection rectangles of the search result when find all is performed. +@@ -231,7 +231,7 @@ typedef enum + * - searchResultSelection is an array of part-number and rectangle list + * pairs, in LOK_CALLBACK_SET_PART / LOK_CALLBACK_TEXT_SELECTION format. + */ +- LOK_CALLBACK_SEARCH_RESULT_SELECTION, ++ LOK_CALLBACK_SEARCH_RESULT_SELECTION = 15, + + /** + * Result of the UNO command execution when bNotifyWhenFinished was set +@@ -246,26 +246,26 @@ typedef enum + * // TODO "result": "..." // UNO Any converted to JSON (not implemented yet) + * } + */ +- LOK_CALLBACK_UNO_COMMAND_RESULT, ++ LOK_CALLBACK_UNO_COMMAND_RESULT = 16, + + /** + * The size and/or the position of the cell cursor changed. + * + * Rectangle format is the same as LOK_CALLBACK_INVALIDATE_TILES. + */ +- LOK_CALLBACK_CELL_CURSOR, ++ LOK_CALLBACK_CELL_CURSOR = 17, + + /** + * The current mouse pointer style. + * + * Payload is a css mouse pointer style. + */ +- LOK_CALLBACK_MOUSE_POINTER, ++ LOK_CALLBACK_MOUSE_POINTER = 18, + + /** + * The text content of the formula bar in Calc. + */ +- LOK_CALLBACK_CELL_FORMULA, ++ LOK_CALLBACK_CELL_FORMULA = 19, + + /** + * Loading a document requires a password. +@@ -274,7 +274,7 @@ typedef enum + * lok::Office::setDocumentPassword(). The document cannot be loaded + * without the password. + */ +- LOK_CALLBACK_DOCUMENT_PASSWORD, ++ LOK_CALLBACK_DOCUMENT_PASSWORD = 20, + + /** + * Editing a document requires a password. +@@ -282,7 +282,7 @@ typedef enum + * Loading the document is blocked until the password is provided via + * lok::Office::setDocumentPassword(). + */ +- LOK_CALLBACK_DOCUMENT_PASSWORD_TO_MODIFY, ++ LOK_CALLBACK_DOCUMENT_PASSWORD_TO_MODIFY = 21, + + /** + * An error happened. +@@ -296,7 +296,7 @@ typedef enum + * "message": freeform description + * } + */ +- LOK_CALLBACK_ERROR, ++ LOK_CALLBACK_ERROR = 22, + + /** + * Context menu structure +@@ -318,7 +318,7 @@ typedef enum + * + * {"text": "label text3", "type": "command", "command": ".uno:Something3", "checktype": "checkmark|radio|auto", "checked": "true|false"} + */ +- LOK_CALLBACK_CONTEXT_MENU, ++ LOK_CALLBACK_CONTEXT_MENU = 23, + + /** + * The size and/or the position of the view cursor changed. A view cursor +@@ -334,7 +334,7 @@ typedef enum + * - viewId is a value returned earlier by lok::Document::createView() + * - rectangle uses the format of LOK_CALLBACK_INVALIDATE_VISIBLE_CURSOR + */ +- LOK_CALLBACK_INVALIDATE_VIEW_CURSOR, ++ LOK_CALLBACK_INVALIDATE_VIEW_CURSOR = 24, + + /** + * The text selection in one of the other views has changed. +@@ -349,7 +349,7 @@ typedef enum + * - viewId is a value returned earlier by lok::Document::createView() + * - selection uses the format of LOK_CALLBACK_TEXT_SELECTION. + */ +- LOK_CALLBACK_TEXT_VIEW_SELECTION, ++ LOK_CALLBACK_TEXT_VIEW_SELECTION = 25, + + /** + * The cell cursor in one of the other views has changed. +@@ -364,7 +364,7 @@ typedef enum + * - viewId is a value returned earlier by lok::Document::createView() + * - rectangle uses the format of LOK_CALLBACK_CELL_CURSOR. + */ +- LOK_CALLBACK_CELL_VIEW_CURSOR, ++ LOK_CALLBACK_CELL_VIEW_CURSOR = 26, + + /** + * The size and/or the position of a graphic selection in one of the other +@@ -380,7 +380,7 @@ typedef enum + * - viewId is a value returned earlier by lok::Document::createView() + * - selection uses the format of LOK_CALLBACK_INVALIDATE_TILES. + */ +- LOK_CALLBACK_GRAPHIC_VIEW_SELECTION, ++ LOK_CALLBACK_GRAPHIC_VIEW_SELECTION = 27, + + /** + * The blinking text cursor in one of the other views is now visible or +@@ -396,7 +396,7 @@ typedef enum + * - viewId is a value returned earlier by lok::Document::createView() + * - visible uses the format of LOK_CALLBACK_CURSOR_VISIBLE. + */ +- LOK_CALLBACK_VIEW_CURSOR_VISIBLE, ++ LOK_CALLBACK_VIEW_CURSOR_VISIBLE = 28, + + /** + * The size and/or the position of a lock rectangle in one of the other +@@ -412,7 +412,7 @@ typedef enum + * - viewId is a value returned earlier by lok::Document::createView() + * - rectangle uses the format of LOK_CALLBACK_INVALIDATE_TILES. + */ +- LOK_CALLBACK_VIEW_LOCK, ++ LOK_CALLBACK_VIEW_LOCK = 29, + + /** + * The size of the change tracking table has changed. +@@ -437,7 +437,7 @@ typedef enum + * - 'action' is either 'Add' or 'Remove', depending on if this is an + * insertion into the table or a removal. + */ +- LOK_CALLBACK_REDLINE_TABLE_SIZE_CHANGED, ++ LOK_CALLBACK_REDLINE_TABLE_SIZE_CHANGED = 30, + + /** + * An entry in the change tracking table has been modified. +@@ -461,7 +461,7 @@ typedef enum + * + * - 'action' is 'Modify'. + */ +- LOK_CALLBACK_REDLINE_TABLE_ENTRY_MODIFIED, ++ LOK_CALLBACK_REDLINE_TABLE_ENTRY_MODIFIED = 31, + } + LibreOfficeKitCallbackType; + +diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx +index 0b48cf8b7373..bbf64bf9ec9a 100644 +--- a/libreofficekit/source/gtk/lokdocview.cxx ++++ b/libreofficekit/source/gtk/lokdocview.cxx +@@ -77,9 +77,9 @@ struct ViewRectangles + /// Private struct used by this GObject type + struct LOKDocViewPrivateImpl + { +- const gchar* m_aLOPath; +- const gchar* m_pUserProfileURL; +- const gchar* m_aDocPath; ++ std::string m_aLOPath; ++ std::string m_aUserProfileURL; ++ std::string m_aDocPath; + std::string m_aRenderingArguments; + gdouble m_nLoadProgress; + gboolean m_bIsLoading; +@@ -195,10 +195,7 @@ struct LOKDocViewPrivateImpl + std::map m_aViewLockRectangles; + + LOKDocViewPrivateImpl() +- : m_aLOPath(nullptr), +- m_pUserProfileURL(nullptr), +- m_aDocPath(nullptr), +- m_nLoadProgress(0), ++ : m_nLoadProgress(0), + m_bIsLoading(false), + m_bCanZoomIn(true), + m_bCanZoomOut(true), +@@ -1736,7 +1733,7 @@ renderOverlay(LOKDocView* pDocView, cairo_t* pCairo) + if (priv->m_bEdit && priv->m_bCursorVisible && !isEmptyRectangle(priv->m_aVisibleCursor) && priv->m_aTextSelectionRectangles.empty()) + { + // Have a cursor, but no selection: we need the middle handle. +- gchar* handleMiddlePath = g_strconcat (priv->m_aLOPath, CURSOR_HANDLE_DIR, "handle_image_middle.png", nullptr); ++ gchar* handleMiddlePath = g_strconcat (priv->m_aLOPath.c_str(), CURSOR_HANDLE_DIR, "handle_image_middle.png", nullptr); + if (!priv->m_pHandleMiddle) + { + priv->m_pHandleMiddle = cairo_image_surface_create_from_png(handleMiddlePath); +@@ -1764,7 +1761,7 @@ renderOverlay(LOKDocView* pDocView, cairo_t* pCairo) + if (!isEmptyRectangle(priv->m_aTextSelectionStart)) + { + // Have a start position: we need a start handle. +- gchar* handleStartPath = g_strconcat (priv->m_aLOPath, CURSOR_HANDLE_DIR, "handle_image_start.png", nullptr); ++ gchar* handleStartPath = g_strconcat (priv->m_aLOPath.c_str(), CURSOR_HANDLE_DIR, "handle_image_start.png", nullptr); + if (!priv->m_pHandleStart) + { + priv->m_pHandleStart = cairo_image_surface_create_from_png(handleStartPath); +@@ -1776,7 +1773,7 @@ renderOverlay(LOKDocView* pDocView, cairo_t* pCairo) + if (!isEmptyRectangle(priv->m_aTextSelectionEnd)) + { + // Have a start position: we need an end handle. +- gchar* handleEndPath = g_strconcat (priv->m_aLOPath, CURSOR_HANDLE_DIR, "handle_image_end.png", nullptr); ++ gchar* handleEndPath = g_strconcat (priv->m_aLOPath.c_str(), CURSOR_HANDLE_DIR, "handle_image_end.png", nullptr); + if (!priv->m_pHandleEnd) + { + priv->m_pHandleEnd = cairo_image_surface_create_from_png(handleEndPath); +@@ -2207,8 +2204,7 @@ openDocumentInThread (gpointer data) + } + + priv->m_pOffice->pClass->registerCallback(priv->m_pOffice, globalCallbackWorker, pDocView); +- priv->m_pDocument = priv->m_pOffice->pClass->documentLoad( priv->m_pOffice, priv->m_aDocPath ); +- priv->m_eDocumentType = static_cast(priv->m_pDocument->pClass->getDocumentType(priv->m_pDocument)); ++ priv->m_pDocument = priv->m_pOffice->pClass->documentLoad( priv->m_pOffice, priv->m_aDocPath.c_str() ); + if ( !priv->m_pDocument ) + { + char *pError = priv->m_pOffice->pClass->getError( priv->m_pOffice ); +@@ -2216,6 +2212,7 @@ openDocumentInThread (gpointer data) + } + else + { ++ priv->m_eDocumentType = static_cast(priv->m_pDocument->pClass->getDocumentType(priv->m_pDocument)); + gdk_threads_add_idle(postDocumentLoad, pDocView); + g_task_return_boolean (task, true); + } +@@ -2469,16 +2466,17 @@ static void lok_doc_view_set_property (GObject* object, guint propId, const GVal + switch (propId) + { + case PROP_LO_PATH: +- priv->m_aLOPath = g_value_dup_string (value); ++ priv->m_aLOPath = g_value_get_string (value); + break; + case PROP_LO_POINTER: + priv->m_pOffice = static_cast(g_value_get_pointer(value)); + break; + case PROP_USER_PROFILE_URL: +- priv->m_pUserProfileURL = g_value_dup_string(value); ++ if (const gchar* pUserProfile = g_value_get_string(value)) ++ priv->m_aUserProfileURL = pUserProfile; + break; + case PROP_DOC_PATH: +- priv->m_aDocPath = g_value_dup_string (value); ++ priv->m_aDocPath = g_value_get_string (value); + break; + case PROP_DOC_POINTER: + priv->m_pDocument = static_cast(g_value_get_pointer(value)); +@@ -2523,16 +2521,16 @@ static void lok_doc_view_get_property (GObject* object, guint propId, GValue *va + switch (propId) + { + case PROP_LO_PATH: +- g_value_set_string (value, priv->m_aLOPath); ++ g_value_set_string (value, priv->m_aLOPath.c_str()); + break; + case PROP_LO_POINTER: + g_value_set_pointer(value, priv->m_pOffice); + break; + case PROP_USER_PROFILE_URL: +- g_value_set_string(value, priv->m_pUserProfileURL); ++ g_value_set_string(value, priv->m_aUserProfileURL.c_str()); + break; + case PROP_DOC_PATH: +- g_value_set_string (value, priv->m_aDocPath); ++ g_value_set_string (value, priv->m_aDocPath.c_str()); + break; + case PROP_DOC_POINTER: + g_value_set_pointer(value, priv->m_pDocument); +@@ -2632,14 +2630,14 @@ static gboolean lok_doc_view_initable_init (GInitable *initable, GCancellable* / + if (priv->m_pOffice != nullptr) + return TRUE; + +- priv->m_pOffice = lok_init_2(priv->m_aLOPath, priv->m_pUserProfileURL); ++ priv->m_pOffice = lok_init_2(priv->m_aLOPath.c_str(), priv->m_aUserProfileURL.empty() ? nullptr : priv->m_aUserProfileURL.c_str()); + + if (priv->m_pOffice == nullptr) + { + g_set_error (error, + g_quark_from_static_string ("LOK initialization error"), 0, + "Failed to get LibreOfficeKit context. Make sure path (%s) is correct", +- priv->m_aLOPath); ++ priv->m_aLOPath.c_str()); + return FALSE; + } + priv->m_nLOKFeatures |= LOK_FEATURE_PART_IN_INVALIDATION_CALLBACK; +@@ -3118,8 +3116,8 @@ SAL_DLLPUBLIC_EXPORT GtkWidget* lok_doc_view_new_from_widget(LOKDocView* pOldLOK + { + LOKDocViewPrivate& pOldPriv = getPrivate(pOldLOKDocView); + GtkWidget* pNewDocView = GTK_WIDGET(g_initable_new(LOK_TYPE_DOC_VIEW, /*cancellable=*/nullptr, /*error=*/nullptr, +- "lopath", pOldPriv->m_aLOPath, +- "userprofileurl", pOldPriv->m_pUserProfileURL, ++ "lopath", pOldPriv->m_aLOPath.c_str(), ++ "userprofileurl", pOldPriv->m_aUserProfileURL.c_str(), + "lopointer", pOldPriv->m_pOffice, + "docpointer", pOldPriv->m_pDocument, + "halign", GTK_ALIGN_CENTER, +@@ -3165,7 +3163,7 @@ lok_doc_view_open_document (LOKDocView* pDocView, + LOEvent* pLOEvent = new LOEvent(LOK_LOAD_DOC); + pLOEvent->m_pPath = pPath; + +- priv->m_aDocPath = pPath; ++ g_object_set(G_OBJECT(pDocView), "docpath", pPath, nullptr); + if (pRenderingArguments) + priv->m_aRenderingArguments = pRenderingArguments; + g_task_set_task_data(task, pLOEvent, LOEvent::destroy); +-- +2.14.3 + diff --git a/SOURCES/0001-rhbz-1541486-Fix-localized-ness-of-ooSetupFactoryUIN.patch b/SOURCES/0001-rhbz-1541486-Fix-localized-ness-of-ooSetupFactoryUIN.patch new file mode 100644 index 0000000..d7739b4 --- /dev/null +++ b/SOURCES/0001-rhbz-1541486-Fix-localized-ness-of-ooSetupFactoryUIN.patch @@ -0,0 +1,52 @@ +From ffd8369b909c86653ef30593fddf67c9f5308583 Mon Sep 17 00:00:00 2001 +From: Stephan Bergmann +Date: Mon, 5 Feb 2018 17:17:17 +0100 +Subject: [PATCH] rhbz#1541486: Fix localized'ness of ooSetupFactoryUIName + props + +8f44fb5ee0bd21d192820ffd359504f6d1c68a52 "Mark Base window titles for +localisation" localized some uses of ooSetupFactoryUIName in +officecfg/registry/data/org/openoffice/Setup.xcu, but failed to mark the prop as +oor:localized="true" in officecfg/registry/schema/org/openoffice/Setup.xcs. (So +some arbitrary localized version of the prop would win at runtime, potentially +displaying certain window titles in wrong languages.) + +Other uses of ooSetupFactoryUIName in Setup.xcu (for "Calc", "Impress", +"Writer", etc.) have never been localized, and are probably not meant to be +localized. AFAICS, irrespective of oor:localized="true" in Setup.xcs, their +values not being marked with xml:lang="en-US" in Setup.xcu will mean that they +will not appear in +translations/source/*/officecfg/registry/data/org/openoffice.po and will not +accidentally start to be translated after this commit. + +(Theoretically, inconsistencies between oor:localized in xcs and uses of +xml:lang in xcu could statically be caught at build time, e.g., with +officecfg/util/sanity.xsl. However, those checks work on each XML file +individually, so don't have the schema information available when looking at +the data in the xcu file. And those checks are written in XSLT, which makes +writing new checks rather, erm, unpleasant.) + +Change-Id: I9c61e8ebf75d3d54f7e5b6688eac47a6ed8dc5c3 +Reviewed-on: https://gerrit.libreoffice.org/49252 +Tested-by: Jenkins +Reviewed-by: Stephan Bergmann +--- + officecfg/registry/schema/org/openoffice/Setup.xcs | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/officecfg/registry/schema/org/openoffice/Setup.xcs b/officecfg/registry/schema/org/openoffice/Setup.xcs +index f55e3698f58f..31db1eca9af4 100644 +--- a/officecfg/registry/schema/org/openoffice/Setup.xcs ++++ b/officecfg/registry/schema/org/openoffice/Setup.xcs +@@ -149,7 +149,7 @@ + Specifies the short name of the factory. + + +- ++ + + + Specifies the UI name of the factory. +-- +2.14.3 + diff --git a/SOURCES/0001-rhbz-1589029-impress-not-showing-text-highlight-in-p.patch b/SOURCES/0001-rhbz-1589029-impress-not-showing-text-highlight-in-p.patch new file mode 100644 index 0000000..f4eaf13 --- /dev/null +++ b/SOURCES/0001-rhbz-1589029-impress-not-showing-text-highlight-in-p.patch @@ -0,0 +1,471 @@ +From 84fd42edf49efd3af6966efb4e326c6fbb37d56f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Mon, 11 Jun 2018 09:00:46 +0100 +Subject: [PATCH] rhbz#1589029 impress not showing text highlight in + presentation mode + +the text hightlighting feature was implemented backed on to the vcl +TextFillColor feature. TextFillColor fills the background of the bounds +of the text with that color + +Likely either the same problem or similar as tdf#93789 + +Change-Id: Iace62cedc49e5f5844ac35d3caa23249b6cb4bc1 +--- + cppcanvas/source/mtfrenderer/emfplus.cxx | 2 + + cppcanvas/source/mtfrenderer/implrenderer.cxx | 6 + + cppcanvas/source/mtfrenderer/textaction.cxx | 131 +++++++++++++++--- + cppcanvas/source/mtfrenderer/textaction.hxx | 1 + + 4 files changed, 119 insertions(+), 21 deletions(-) + +diff --git a/cppcanvas/source/mtfrenderer/emfplus.cxx b/cppcanvas/source/mtfrenderer/emfplus.cxx +index 1da733bd9f73..9b5fae31d584 100644 +--- a/cppcanvas/source/mtfrenderer/emfplus.cxx ++++ b/cppcanvas/source/mtfrenderer/emfplus.cxx +@@ -1318,6 +1318,7 @@ namespace cppcanvas + ::Color(), + ::Size(), + ::Color(), ++ ::Color(), + text, + 0, + stringLength, +@@ -1633,6 +1634,7 @@ namespace cppcanvas + ::Color(), + ::Size(), + ::Color(), ++ ::Color(), + text, + 0, + glyphsCount, +diff --git a/cppcanvas/source/mtfrenderer/implrenderer.cxx b/cppcanvas/source/mtfrenderer/implrenderer.cxx +index ad9098defc69..38694caec091 100644 +--- a/cppcanvas/source/mtfrenderer/implrenderer.cxx ++++ b/cppcanvas/source/mtfrenderer/implrenderer.cxx +@@ -876,6 +876,7 @@ namespace cppcanvas + // TODO(F2): implement all text effects + // if( rState.textAlignment ); // TODO(F2): NYI + ++ ::Color aTextFillColor( COL_AUTO ); + ::Color aShadowColor( COL_AUTO ); + ::Color aReliefColor( COL_AUTO ); + ::Size aShadowOffset; +@@ -941,6 +942,9 @@ namespace cppcanvas + aReliefColor.SetTransparency( aTextColor.GetTransparency() ); + } + ++ if (rState.isTextFillColorSet) ++ aTextFillColor = vcl::unotools::doubleSequenceToColor(rState.textFillColor, xColorSpace); ++ + // create the actual text action + ActionSharedPtr pTextAction( + TextActionFactory::createTextAction( +@@ -949,6 +953,7 @@ namespace cppcanvas + aReliefColor, + aShadowOffset, + aShadowColor, ++ aTextFillColor, + rString, + nIndex, + nLength, +@@ -1015,6 +1020,7 @@ namespace cppcanvas + aReliefColor, + aShadowOffset, + aShadowColor, ++ aTextFillColor, + aStrikeoutText, + nStartPos, + aStrikeoutText.getLength(), +diff --git a/cppcanvas/source/mtfrenderer/textaction.cxx b/cppcanvas/source/mtfrenderer/textaction.cxx +index 51554a2e3595..0c5ef91354e3 100644 +--- a/cppcanvas/source/mtfrenderer/textaction.cxx ++++ b/cppcanvas/source/mtfrenderer/textaction.cxx +@@ -472,7 +472,7 @@ namespace cppcanvas + virtual ~TextRenderer() {} + + /// Render text with given RenderState +- virtual bool operator()( const rendering::RenderState& rRenderState ) const = 0; ++ virtual bool operator()( const rendering::RenderState& rRenderState, const ::Color& rTextFillColor ) const = 0; + }; + + /** Render effect text. +@@ -489,7 +489,8 @@ namespace cppcanvas + const ::Color& rShadowColor, + const ::basegfx::B2DSize& rShadowOffset, + const ::Color& rReliefColor, +- const ::basegfx::B2DSize& rReliefOffset ) ++ const ::basegfx::B2DSize& rReliefOffset, ++ const ::Color& rTextFillColor ) + { + ::Color aEmptyColor( COL_AUTO ); + uno::Reference xColorSpace( +@@ -510,7 +511,7 @@ namespace cppcanvas + vcl::unotools::colorToDoubleSequence( rShadowColor, + xColorSpace ); + +- rRenderer( aShadowState ); ++ rRenderer( aShadowState, rTextFillColor ); + } + + // draw relief text, if enabled +@@ -528,11 +529,11 @@ namespace cppcanvas + vcl::unotools::colorToDoubleSequence( rReliefColor, + xColorSpace ); + +- rRenderer( aReliefState ); ++ rRenderer( aReliefState, rTextFillColor ); + } + + // draw normal text +- rRenderer( rRenderState ); ++ rRenderer( rRenderState, rTextFillColor ); + + return true; + } +@@ -803,7 +804,10 @@ namespace cppcanvas + + private: + /// Interface TextRenderer +- virtual bool operator()( const rendering::RenderState& rRenderState ) const override; ++ virtual bool operator()( const rendering::RenderState& rRenderState, const ::Color& rTextFillColor ) const override; ++ ++ geometry::RealRectangle2D queryTextBounds() const; ++ css::uno::Reference queryTextBounds(const uno::Reference& rCanvas) const; + + // TODO(P2): This is potentially a real mass object + // (every character might be a separate TextAction), +@@ -824,6 +828,7 @@ namespace cppcanvas + const ::Color maReliefColor; + const ::basegfx::B2DSize maShadowOffset; + const ::Color maShadowColor; ++ const ::Color maTextFillColor; + const sal_Int8 maTextDirection; + }; + +@@ -906,7 +911,7 @@ namespace cppcanvas + "::cppcanvas::internal::EffectTextAction(): Invalid font or lines" ); + } + +- bool EffectTextAction::operator()( const rendering::RenderState& rRenderState ) const ++ bool EffectTextAction::operator()( const rendering::RenderState& rRenderState, const ::Color& rTextFillColor ) const + { + const rendering::ViewState& rViewState( mpCanvas->getViewState() ); + const uno::Reference< rendering::XCanvas >& rCanvas( mpCanvas->getUNOCanvas() ); +@@ -915,6 +920,18 @@ namespace cppcanvas + rViewState, + rRenderState ); + ++ //rhbz#1589029 non-transparent text fill background support ++ ::Color aEmptyColor( COL_AUTO ); ++ if (rTextFillColor != aEmptyColor) ++ { ++ rendering::RenderState aLocalState( rRenderState ); ++ aLocalState.DeviceColor = vcl::unotools::colorToDoubleSequence( ++ rTextFillColor, rCanvas->getDevice()->getDeviceColorSpace()); ++ auto xTextBounds = queryTextBounds(rCanvas); ++ // background of text ++ rCanvas->fillPolyPolygon(xTextBounds, rViewState, aLocalState); ++ } ++ + rCanvas->drawText( maStringContext, mxFont, + rViewState, + rRenderState, +@@ -938,7 +955,8 @@ namespace cppcanvas + maShadowColor, + maShadowOffset, + maReliefColor, +- maReliefOffset ); ++ maReliefOffset, ++ maTextFillColor); + } + + bool EffectTextAction::renderSubset( const ::basegfx::B2DHomMatrix& rTransformation, +@@ -953,7 +971,7 @@ namespace cppcanvas + return render( rTransformation ); + } + +- ::basegfx::B2DRange EffectTextAction::getBounds( const ::basegfx::B2DHomMatrix& rTransformation ) const ++ geometry::RealRectangle2D EffectTextAction::queryTextBounds() const + { + // create XTextLayout, to have the + // XTextLayout::queryTextBounds() method available +@@ -963,11 +981,24 @@ namespace cppcanvas + maTextDirection, + 0 ) ); + ++ return xTextLayout->queryTextBounds(); ++ } ++ ++ css::uno::Reference EffectTextAction::queryTextBounds(const uno::Reference& rCanvas) const ++ { ++ auto aTextBounds = queryTextBounds(); ++ auto aB2DBounds = ::basegfx::unotools::b2DRectangleFromRealRectangle2D(aTextBounds); ++ auto aTextBoundsPoly = ::basegfx::tools::createPolygonFromRect(aB2DBounds); ++ return ::basegfx::unotools::xPolyPolygonFromB2DPolygon(rCanvas->getDevice(), aTextBoundsPoly); ++ } ++ ++ ::basegfx::B2DRange EffectTextAction::getBounds( const ::basegfx::B2DHomMatrix& rTransformation ) const ++ { + rendering::RenderState aLocalState( maState ); + ::canvas::tools::prependToRenderState(aLocalState, rTransformation); + + return calcEffectTextBounds( ::basegfx::unotools::b2DRectangleFromRealRectangle2D( +- xTextLayout->queryTextBounds() ), ++ queryTextBounds() ), + ::basegfx::B2DRange( 0,0, + maLinesOverallSize.getX(), + maLinesOverallSize.getY() ), +@@ -1188,6 +1219,7 @@ namespace cppcanvas + const ::Color& rReliefColor, + const ::basegfx::B2DSize& rShadowOffset, + const ::Color& rShadowColor, ++ const ::Color& rTextFillColor, + const OUString& rText, + sal_Int32 nStartPos, + sal_Int32 nLen, +@@ -1200,6 +1232,7 @@ namespace cppcanvas + const ::Color& rReliefColor, + const ::basegfx::B2DSize& rShadowOffset, + const ::Color& rShadowColor, ++ const ::Color& rTextFillColor, + const OUString& rText, + sal_Int32 nStartPos, + sal_Int32 nLen, +@@ -1224,7 +1257,9 @@ namespace cppcanvas + + private: + // TextRenderer interface +- virtual bool operator()( const rendering::RenderState& rRenderState ) const override; ++ virtual bool operator()( const rendering::RenderState& rRenderState, const ::Color& rTextFillColor ) const override; ++ ++ css::uno::Reference queryTextBounds(const uno::Reference& rCanvas) const; + + // TODO(P2): This is potentially a real mass object + // (every character might be a separate TextAction), +@@ -1243,6 +1278,7 @@ namespace cppcanvas + const ::Color maReliefColor; + const ::basegfx::B2DSize maShadowOffset; + const ::Color maShadowColor; ++ const ::Color maTextFillColor; + }; + + EffectTextArrayAction::EffectTextArrayAction( const ::basegfx::B2DPoint& rStartPoint, +@@ -1250,6 +1286,7 @@ namespace cppcanvas + const ::Color& rReliefColor, + const ::basegfx::B2DSize& rShadowOffset, + const ::Color& rShadowColor, ++ const ::Color& rTextFillColor, + const OUString& rText, + sal_Int32 nStartPos, + sal_Int32 nLen, +@@ -1266,7 +1303,8 @@ namespace cppcanvas + maReliefOffset( rReliefOffset ), + maReliefColor( rReliefColor ), + maShadowOffset( rShadowOffset ), +- maShadowColor( rShadowColor ) ++ maShadowColor( rShadowColor ), ++ maTextFillColor( rTextFillColor ) + { + initEffectLinePolyPolygon( maLinesOverallSize, + mxTextLines, +@@ -1290,6 +1328,7 @@ namespace cppcanvas + const ::Color& rReliefColor, + const ::basegfx::B2DSize& rShadowOffset, + const ::Color& rShadowColor, ++ const ::Color& rTextFillColor, + const OUString& rText, + sal_Int32 nStartPos, + sal_Int32 nLen, +@@ -1307,7 +1346,8 @@ namespace cppcanvas + maReliefOffset( rReliefOffset ), + maReliefColor( rReliefColor ), + maShadowOffset( rShadowOffset ), +- maShadowColor( rShadowColor ) ++ maShadowColor( rShadowColor ), ++ maTextFillColor( rTextFillColor ) + { + initEffectLinePolyPolygon( maLinesOverallSize, + mxTextLines, +@@ -1327,7 +1367,15 @@ namespace cppcanvas + &rTextTransform ); + } + +- bool EffectTextArrayAction::operator()( const rendering::RenderState& rRenderState ) const ++ css::uno::Reference EffectTextArrayAction::queryTextBounds(const uno::Reference& rCanvas) const ++ { ++ const geometry::RealRectangle2D aTextBounds(mxTextLayout->queryTextBounds()); ++ auto aB2DBounds = ::basegfx::unotools::b2DRectangleFromRealRectangle2D(aTextBounds); ++ auto aTextBoundsPoly = ::basegfx::tools::createPolygonFromRect(aB2DBounds); ++ return ::basegfx::unotools::xPolyPolygonFromB2DPolygon(rCanvas->getDevice(), aTextBoundsPoly); ++ } ++ ++ bool EffectTextArrayAction::operator()( const rendering::RenderState& rRenderState, const ::Color& rTextFillColor ) const + { + const rendering::ViewState& rViewState( mpCanvas->getViewState() ); + const uno::Reference< rendering::XCanvas >& rCanvas( mpCanvas->getUNOCanvas() ); +@@ -1336,6 +1384,18 @@ namespace cppcanvas + rViewState, + rRenderState ); + ++ //rhbz#1589029 non-transparent text fill background support ++ ::Color aEmptyColor( COL_AUTO ); ++ if (rTextFillColor != aEmptyColor) ++ { ++ rendering::RenderState aLocalState(rRenderState); ++ aLocalState.DeviceColor = vcl::unotools::colorToDoubleSequence( ++ rTextFillColor, rCanvas->getDevice()->getDeviceColorSpace()); ++ auto xTextBounds = queryTextBounds(rCanvas); ++ // background of text ++ rCanvas->fillPolyPolygon(xTextBounds, rViewState, aLocalState); ++ } ++ + rCanvas->drawTextLayout( mxTextLayout, + rViewState, + rRenderState ); +@@ -1358,7 +1418,8 @@ namespace cppcanvas + maShadowColor, + maShadowOffset, + maReliefColor, +- maReliefOffset ); ++ maReliefOffset, ++ maTextFillColor); + } + + class EffectTextArrayRenderHelper : public TextRenderer +@@ -1376,12 +1437,24 @@ namespace cppcanvas + } + + // TextRenderer interface +- virtual bool operator()( const rendering::RenderState& rRenderState ) const override ++ virtual bool operator()( const rendering::RenderState& rRenderState, const ::Color& rTextFillColor ) const override + { + mrCanvas->fillPolyPolygon( mrLinePolygon, + mrViewState, + rRenderState ); + ++ //rhbz#1589029 non-transparent text fill background support ++ ::Color aEmptyColor( COL_AUTO ); ++ if (rTextFillColor != aEmptyColor) ++ { ++ rendering::RenderState aLocalState(rRenderState); ++ aLocalState.DeviceColor = vcl::unotools::colorToDoubleSequence( ++ rTextFillColor, mrCanvas->getDevice()->getDeviceColorSpace()); ++ auto xTextBounds = queryTextBounds(); ++ // background of text ++ mrCanvas->fillPolyPolygon(xTextBounds, mrViewState, aLocalState); ++ } ++ + mrCanvas->drawTextLayout( mrTextLayout, + mrViewState, + rRenderState ); +@@ -1390,6 +1463,15 @@ namespace cppcanvas + } + + private: ++ ++ css::uno::Reference queryTextBounds() const ++ { ++ const geometry::RealRectangle2D aTextBounds(mrTextLayout->queryTextBounds()); ++ auto aB2DBounds = ::basegfx::unotools::b2DRectangleFromRealRectangle2D(aTextBounds); ++ auto aTextBoundsPoly = ::basegfx::tools::createPolygonFromRect(aB2DBounds); ++ return ::basegfx::unotools::xPolyPolygonFromB2DPolygon(mrCanvas->getDevice(), aTextBoundsPoly); ++ } ++ + const uno::Reference< rendering::XCanvas >& mrCanvas; + const uno::Reference< rendering::XTextLayout >& mrTextLayout; + const uno::Reference< rendering::XPolyPolygon2D >& mrLinePolygon; +@@ -1448,7 +1530,8 @@ namespace cppcanvas + maShadowColor, + maShadowOffset, + maReliefColor, +- maReliefOffset ); ++ maReliefOffset, ++ maTextFillColor); + } + + ::basegfx::B2DRange EffectTextArrayAction::getBounds( const ::basegfx::B2DHomMatrix& rTransformation ) const +@@ -1560,7 +1643,7 @@ namespace cppcanvas + + private: + // TextRenderer interface +- virtual bool operator()( const rendering::RenderState& rRenderState ) const override; ++ virtual bool operator()( const rendering::RenderState& rRenderState, const ::Color& rTextFillColor ) const override; + + // TODO(P2): This is potentially a real mass object + // (every character might be a separate TextAction), +@@ -1584,6 +1667,7 @@ namespace cppcanvas + const ::Color maReliefColor; + const ::basegfx::B2DSize maShadowOffset; + const ::Color maShadowColor; ++ const ::Color maTextFillColor; + }; + + double calcOutlineWidth( const OutDevState& rState, +@@ -1682,7 +1766,7 @@ namespace cppcanvas + rTextTransform ); + } + +- bool OutlineAction::operator()( const rendering::RenderState& rRenderState ) const ++ bool OutlineAction::operator()( const rendering::RenderState& rRenderState, const ::Color& /*rTextFillColor*/ ) const + { + const rendering::ViewState& rViewState( mpCanvas->getViewState() ); + const uno::Reference< rendering::XCanvas >& rCanvas( mpCanvas->getUNOCanvas() ); +@@ -1739,7 +1823,8 @@ namespace cppcanvas + maShadowColor, + maShadowOffset, + maReliefColor, +- maReliefOffset ); ++ maReliefOffset, ++ maTextFillColor); + } + + #if 0 // see #if'ed out use in OutlineAction::renderSubset below: +@@ -2048,6 +2133,7 @@ namespace cppcanvas + const ::Color& rReliefColor, + const ::Size& rShadowOffset, + const ::Color& rShadowColor, ++ const ::Color& rTextFillColor, + const OUString& rText, + sal_Int32 nStartPos, + sal_Int32 nLen, +@@ -2181,7 +2267,8 @@ namespace cppcanvas + !rState.textUnderlineStyle && + !rState.textStrikeoutStyle && + rReliefColor == aEmptyColor && +- rShadowColor == aEmptyColor ) ++ rShadowColor == aEmptyColor && ++ rTextFillColor == aEmptyColor ) + { + // nope + if( rParms.maTextTransformation.is_initialized() ) +@@ -2214,6 +2301,7 @@ namespace cppcanvas + rReliefColor, + aShadowOffset, + rShadowColor, ++ rTextFillColor, + rText, + nStartPos, + nLen, +@@ -2229,6 +2317,7 @@ namespace cppcanvas + rReliefColor, + aShadowOffset, + rShadowColor, ++ rTextFillColor, + rText, + nStartPos, + nLen, +diff --git a/cppcanvas/source/mtfrenderer/textaction.hxx b/cppcanvas/source/mtfrenderer/textaction.hxx +index 2c0b240fc847..1770470f9fff 100644 +--- a/cppcanvas/source/mtfrenderer/textaction.hxx ++++ b/cppcanvas/source/mtfrenderer/textaction.hxx +@@ -66,6 +66,7 @@ namespace cppcanvas + const ::Color& rReliefColor, + const ::Size& rShadowOffset, + const ::Color& rShadowColor, ++ const ::Color& rTextFillColor, + const OUString& rText, + sal_Int32 nStartPos, + sal_Int32 nLen, +-- +2.17.0 + diff --git a/SOURCES/0001-rhbz-1614419-use-workaround-for-PK11_ImportSymKey-fa.patch b/SOURCES/0001-rhbz-1614419-use-workaround-for-PK11_ImportSymKey-fa.patch new file mode 100644 index 0000000..5948889 --- /dev/null +++ b/SOURCES/0001-rhbz-1614419-use-workaround-for-PK11_ImportSymKey-fa.patch @@ -0,0 +1,162 @@ +From 3fe2dd8094fcec76a1310d3ab33c1cc27c85c356 Mon Sep 17 00:00:00 2001 +From: rpmbuild +Date: Fri, 10 Aug 2018 09:45:56 +0100 +Subject: [PATCH] rhbz#1614419 use workaround for PK11_ImportSymKey failure + under FIPS + +--- + include/oox/crypto/CryptTools.hxx | 3 ++ + oox/source/crypto/CryptTools.cxx | 83 +++++++++++++++++++++++++++++++++++---- + 2 files changed, 79 insertions(+), 7 deletions(-) + +diff --git a/include/oox/crypto/CryptTools.hxx b/include/oox/crypto/CryptTools.hxx +index 84e4c48..07605da 100644 +--- a/include/oox/crypto/CryptTools.hxx ++++ b/include/oox/crypto/CryptTools.hxx +@@ -56,9 +56,12 @@ protected: + EVP_CIPHER_CTX mContext; + #endif + #if USE_TLS_NSS ++ PK11SlotInfo* mSlot; + PK11Context* mContext; + SECItem* mSecParam; + PK11SymKey* mSymKey; ++ PK11Context* mWrapKeyContext; ++ PK11SymKey* mWrapKey; + #endif + + #if USE_TLS_OPENSSL +diff --git a/oox/source/crypto/CryptTools.cxx b/oox/source/crypto/CryptTools.cxx +index 5ecf7b3..ee91925 100644 +--- a/oox/source/crypto/CryptTools.cxx ++++ b/oox/source/crypto/CryptTools.cxx +@@ -19,9 +19,12 @@ using namespace std; + + Crypto::Crypto() + #if USE_TLS_NSS +- : mContext(nullptr) ++ : mSlot(nullptr) ++ , mContext(nullptr) + , mSecParam(nullptr) + , mSymKey(nullptr) ++ , mWrapKeyContext(nullptr) ++ , mWrapKey(nullptr) + #endif + { + #if USE_TLS_NSS +@@ -38,10 +41,16 @@ Crypto::~Crypto() + #if USE_TLS_NSS + if (mContext) + PK11_DestroyContext(mContext, PR_TRUE); +- if (mSymKey) +- PK11_FreeSymKey(mSymKey); + if (mSecParam) + SECITEM_FreeItem(mSecParam, PR_TRUE); ++ if (mSymKey) ++ PK11_FreeSymKey(mSymKey); ++ if (mWrapKeyContext) ++ PK11_DestroyContext(mWrapKeyContext, PR_TRUE); ++ if (mWrapKey) ++ PK11_FreeSymKey(mWrapKey); ++ if (mSlot) ++ PK11_FreeSlot(mSlot); + #endif + } + +@@ -59,11 +68,14 @@ const EVP_CIPHER* Crypto::getCipher(CryptoType type) + default: + break; + } +- return NULL; ++ return nullptr; + } + #endif + + #if USE_TLS_NSS ++ ++#define MAX_WRAPPED_KEY_LEN 128 ++ + void Crypto::setupContext(vector& key, vector& iv, CryptoType type, CK_ATTRIBUTE_TYPE operation) + { + CK_MECHANISM_TYPE mechanism = static_cast(-1); +@@ -95,9 +107,9 @@ void Crypto::setupContext(vector& key, vector& iv, CryptoT + break; + } + +- PK11SlotInfo* pSlot( PK11_GetBestSlot( mechanism, nullptr ) ); ++ mSlot = PK11_GetBestSlot(mechanism, nullptr); + +- if (!pSlot) ++ if (!mSlot) + throw css::uno::RuntimeException("NSS Slot failure", css::uno::Reference()); + + SECItem keyItem; +@@ -105,7 +117,64 @@ void Crypto::setupContext(vector& key, vector& iv, CryptoT + keyItem.data = &key[0]; + keyItem.len = key.size(); + +- mSymKey = PK11_ImportSymKey( pSlot, mechanism, PK11_OriginUnwrap, CKA_ENCRYPT, &keyItem, nullptr ); ++ mSymKey = PK11_ImportSymKey( mSlot, mechanism, PK11_OriginUnwrap, CKA_ENCRYPT, &keyItem, nullptr ); ++ if (!mSymKey) //rhbz#1614419 maybe failed due to FIPS, use rhbz#1461450 style workaround ++ { ++ /* ++ * Without FIPS it would be possible to just use ++ * mSymKey = PK11_ImportSymKey( mSlot, mechanism, PK11_OriginUnwrap, CKA_ENCRYPT, &keyItem, nullptr ); ++ * with FIPS NSS Level 2 certification has to be "workarounded" (so it becomes Level 1) by using ++ * following method: ++ * 1. Generate wrap key ++ * 2. Encrypt authkey with wrap key ++ * 3. Unwrap encrypted authkey using wrap key ++ */ ++ ++ /* ++ * Generate wrapping key ++ */ ++ CK_MECHANISM_TYPE wrap_mechanism = PK11_GetBestWrapMechanism(mSlot); ++ int wrap_key_len = PK11_GetBestKeyLength(mSlot, wrap_mechanism); ++ mWrapKey = PK11_KeyGen(mSlot, wrap_mechanism, nullptr, wrap_key_len, nullptr); ++ if (!mWrapKey) ++ throw css::uno::RuntimeException("PK11_KeyGen SymKey failure", css::uno::Reference()); ++ ++ /* ++ * Encrypt authkey with wrapping key ++ */ ++ ++ /* ++ * Initialization of IV is not needed because PK11_GetBestWrapMechanism should return ECB mode ++ */ ++ SECItem tmp_sec_item; ++ memset(&tmp_sec_item, 0, sizeof(tmp_sec_item)); ++ mWrapKeyContext = PK11_CreateContextBySymKey(wrap_mechanism, CKA_ENCRYPT, mWrapKey, &tmp_sec_item); ++ if (!mWrapKeyContext) ++ throw css::uno::RuntimeException("PK11_CreateContextBySymKey failure", css::uno::Reference()); ++ ++ unsigned char wrapped_key_data[MAX_WRAPPED_KEY_LEN]; ++ int wrapped_key_len = sizeof(wrapped_key_data); ++ ++ if (PK11_CipherOp(mWrapKeyContext, wrapped_key_data, &wrapped_key_len, ++ sizeof(wrapped_key_data), keyItem.data, keyItem.len) != SECSuccess) ++ { ++ throw css::uno::RuntimeException("PK11_CipherOp failure", css::uno::Reference()); ++ } ++ ++ if (PK11_Finalize(mWrapKeyContext) != SECSuccess) ++ throw css::uno::RuntimeException("PK11_Finalize failure", css::uno::Reference()); ++ ++ /* ++ * Finally unwrap sym key ++ */ ++ SECItem wrapped_key; ++ memset(&tmp_sec_item, 0, sizeof(tmp_sec_item)); ++ wrapped_key.data = wrapped_key_data; ++ wrapped_key.len = wrapped_key_len; ++ ++ mSymKey = PK11_UnwrapSymKey(mWrapKey, wrap_mechanism, &tmp_sec_item, &wrapped_key, ++ mechanism, CKA_ENCRYPT, keyItem.len); ++ } + if (!mSymKey) + throw css::uno::RuntimeException("NSS SymKey failure", css::uno::Reference()); + mSecParam = PK11_ParamFromIV( mechanism, pIvItem ); +-- +1.8.3.1 + diff --git a/SOURCES/0001-right-click-to-insert-image.patch b/SOURCES/0001-right-click-to-insert-image.patch new file mode 100644 index 0000000..92e3afd --- /dev/null +++ b/SOURCES/0001-right-click-to-insert-image.patch @@ -0,0 +1,53 @@ +From d44ed98fecf6749ce64f1020097477291bb9fdb8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Mon, 20 Feb 2017 11:14:33 +0000 +Subject: [PATCH] right click to insert image +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +this was originally added by... + +commit 67c3e2abf353c4893a4680f7a5b2d8c457ef18d1 +Author: Caolán McNamara +Date: Mon May 25 15:00:47 2015 +0100 + + impress: right click to insert image + + Change-Id: I521f074bbd500b81d74be7e0e771bd49efc29c9c + +then removed with... + +commit 7edfee8e4f81c17ec95a03843c509b95b8e404b2 +Author: Yousuf Philips +Date: Fri Dec 11 18:53:15 2015 +0400 + + Rearrangement of various context menus in Impress + + Change-Id: I6674254898dc6d7351ec4450e2aa5ac3f177bdbf + Reviewed-on: https://gerrit.libreoffice.org/20640 + Tested-by: Jenkins + Reviewed-by: Yousuf Philips + +but no particular indication as to why + +Change-Id: I8b0ec6c22732d347fc7d354dc5ee5e05b5a3ec79 +--- + sd/uiconfig/simpress/popupmenu/page.xml | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/sd/uiconfig/simpress/popupmenu/page.xml b/sd/uiconfig/simpress/popupmenu/page.xml +index 307b2b9..0da2948 100644 +--- a/sd/uiconfig/simpress/popupmenu/page.xml ++++ b/sd/uiconfig/simpress/popupmenu/page.xml +@@ -13,6 +13,7 @@ + + + ++ + + + +-- +2.9.3 + diff --git a/SOURCES/0001-set-Referer-on-link-mediadescriptor.patch b/SOURCES/0001-set-Referer-on-link-mediadescriptor.patch new file mode 100644 index 0000000..2ac6741 --- /dev/null +++ b/SOURCES/0001-set-Referer-on-link-mediadescriptor.patch @@ -0,0 +1,50 @@ +From daa1750bd6944f5202ccb7bc41c57a3f32be766e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Tue, 1 May 2018 12:57:02 +0100 +Subject: [PATCH] set Referer on link mediadescriptor + +to allow determining if the source document is from a trusted/untrusted +location + +Change-Id: I780568652d2ef0cc8543c27ba26289277b5d9d0c +Reviewed-on: https://gerrit.libreoffice.org/53693 +Tested-by: Jenkins +Reviewed-by: Stephan Bergmann +--- + sw/source/filter/xml/xmltexti.cxx | 13 +++++++++---- + 1 file changed, 9 insertions(+), 4 deletions(-) + +diff --git a/sw/source/filter/xml/xmltexti.cxx b/sw/source/filter/xml/xmltexti.cxx +index 06a6bbe..83d7734 100644 +--- a/sw/source/filter/xml/xmltexti.cxx ++++ b/sw/source/filter/xml/xmltexti.cxx +@@ -575,17 +575,22 @@ uno::Reference< XPropertySet > SwXMLTextImportHelper::createAndInsertOOoLink( + + uno::Sequence< beans::PropertyValue > aMediaDescriptor( 1 ); + aMediaDescriptor[0].Name = "URL"; +- aMediaDescriptor[0].Value <<= OUString( aURLObj.GetMainURL( INetURLObject::NO_DECODE ) ); +- if ( pDoc->GetDocShell() && pDoc->GetDocShell()->GetMedium() ) ++ aMediaDescriptor[0].Value <<= aURLObj.GetMainURL( INetURLObject::NO_DECODE ); ++ ++ if (SfxMedium* pMedium = pDoc->GetDocShell() ? pDoc->GetDocShell()->GetMedium() : nullptr) + { +- uno::Reference< task::XInteractionHandler > xInteraction = +- pDoc->GetDocShell()->GetMedium()->GetInteractionHandler(); ++ uno::Reference< task::XInteractionHandler > xInteraction = pMedium->GetInteractionHandler(); + if ( xInteraction.is() ) + { + aMediaDescriptor.realloc( 2 ); + aMediaDescriptor[1].Name = "InteractionHandler"; + aMediaDescriptor[1].Value <<= xInteraction; + } ++ ++ const auto nLen = aMediaDescriptor.getLength() + 1; ++ aMediaDescriptor.realloc(nLen); ++ aMediaDescriptor[nLen - 1].Name = "Referer"; ++ aMediaDescriptor[nLen - 1].Value <<= pMedium->GetName(); + } + + uno::Reference < embed::XEmbeddedObject > xObj( +-- +2.14.3 + diff --git a/SOURCES/0001-tdf-106577-cairo_mask-pattern-affects-more-surface-t.patch b/SOURCES/0001-tdf-106577-cairo_mask-pattern-affects-more-surface-t.patch new file mode 100644 index 0000000..0e87115 --- /dev/null +++ b/SOURCES/0001-tdf-106577-cairo_mask-pattern-affects-more-surface-t.patch @@ -0,0 +1,41 @@ +From ec864247bc40d92e32e3b0f9916d3e39974c9116 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Mon, 20 Mar 2017 15:08:01 +0000 +Subject: [PATCH] tdf#106577 cairo_mask pattern affects more surface than + expected + +Change-Id: I7f967c401f7b84fd696fa4cf8a944f7a5730917c +--- + vcl/headless/svpgdi.cxx | 15 ++++++++++++++- + 1 file changed, 14 insertions(+), 1 deletion(-) + +diff --git a/vcl/headless/svpgdi.cxx b/vcl/headless/svpgdi.cxx +index 91b6f86e87cb..925a5adecd55 100644 +--- a/vcl/headless/svpgdi.cxx ++++ b/vcl/headless/svpgdi.cxx +@@ -1201,8 +1201,21 @@ void SvpSalGraphics::invert(const basegfx::B2DPolygon &rPoly, SalInvert nFlags) + if (nFlags & SalInvert::N50) + { + cairo_pattern_t *pattern = create_stipple(); +- cairo_mask(cr, pattern); ++ cairo_surface_t* surface = cairo_surface_create_similar(m_pSurface, ++ cairo_surface_get_content(m_pSurface), ++ extents.getWidth() * m_fScale, ++ extents.getHeight() * m_fScale); ++ ++#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 14, 0) ++ cairo_surface_set_device_scale(surface, m_fScale, m_fScale); ++#endif ++ cairo_t* stipple_cr = cairo_create(surface); ++ cairo_set_source_rgb(stipple_cr, 1.0, 1.0, 1.0); ++ cairo_mask(stipple_cr, pattern); + cairo_pattern_destroy(pattern); ++ cairo_destroy(stipple_cr); ++ cairo_mask_surface(cr, surface, extents.getMinX(), extents.getMinY()); ++ cairo_surface_destroy(surface); + } + else + { +-- +2.17.1 + diff --git a/SOURCES/0001-tdf-110737-set-user-events-to-a-lower-priority-than-.patch b/SOURCES/0001-tdf-110737-set-user-events-to-a-lower-priority-than-.patch new file mode 100644 index 0000000..730f43f --- /dev/null +++ b/SOURCES/0001-tdf-110737-set-user-events-to-a-lower-priority-than-.patch @@ -0,0 +1,30 @@ +From 00e609146a029c2cb010f7a617c77cddcdbf1513 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Thu, 7 Sep 2017 16:47:04 +0100 +Subject: [PATCH] tdf#110737 set user-events to a lower priority than system + redraw + +Change-Id: Ic6672fcce4cb5516d388fee22120383ccc70a4a5 +--- + vcl/unx/gtk3/gtk3gtkdata.cxx | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/vcl/unx/gtk3/gtk3gtkdata.cxx b/vcl/unx/gtk3/gtk3gtkdata.cxx +index b2c298b..5b043e8 100644 +--- a/vcl/unx/gtk3/gtk3gtkdata.cxx ++++ b/vcl/unx/gtk3/gtk3gtkdata.cxx +@@ -839,7 +839,10 @@ void GtkData::PostUserEvent() + else // nothing pending anyway + { + m_pUserEvent = g_idle_source_new(); +- g_source_set_priority (m_pUserEvent, G_PRIORITY_HIGH); ++ // tdf#110737 set user-events to a lower priority than system redraw ++ // events, which is G_PRIORITY_HIGH_IDLE + 20, so presentations ++ // queue-redraw has a chance to be fulfilled ++ g_source_set_priority (m_pUserEvent, G_PRIORITY_HIGH_IDLE + 30); + g_source_set_can_recurse (m_pUserEvent, TRUE); + g_source_set_callback (m_pUserEvent, call_userEventFn, + static_cast(this), nullptr); +-- +2.9.4 + diff --git a/SOURCES/0001-tdf-111891-unostyle-use-default-handler-for-non-page.patch b/SOURCES/0001-tdf-111891-unostyle-use-default-handler-for-non-page.patch new file mode 100644 index 0000000..ae668cb --- /dev/null +++ b/SOURCES/0001-tdf-111891-unostyle-use-default-handler-for-non-page.patch @@ -0,0 +1,217 @@ +From db7a015c86248bd2a3d090240f9360f84b3bec8c Mon Sep 17 00:00:00 2001 +From: Justin Luth +Date: Thu, 24 Aug 2017 15:48:29 -0400 +Subject: [PATCH] tdf#111891 unostyle: use default handler for non-page style + +LO 5.1 commit 664197d95becd516c3dac25a50439078ba61e051 +introduced a handler for RES_TEXT_VERT_ADJUST to handle +page styles, but that meant that the default handler +was no longer called for frames (the only other item +currently using RES_TEXT_VERT_ADJUST). + +Change-Id: I33827160fe64dc4cc2107afc26f7ac2e698007e1 +Reviewed-on: https://gerrit.libreoffice.org/41538 +Tested-by: Justin Luth +Reviewed-by: Justin Luth +(cherry picked from commit 10dc371d31f003ac3ed9b89ca1db95d36603603f) +Reviewed-on: https://gerrit.libreoffice.org/41910 +Tested-by: Jenkins +Reviewed-by: Miklos Vajna +(cherry picked from commit 461aa995d75f031209711feda9d785d915c42dd2) +Reviewed-on: https://gerrit.libreoffice.org/42082 +--- + sw/qa/extras/odfexport/data/tdf111891_frameVertStyle.odt | Bin 0 -> 8814 bytes + sw/qa/extras/odfexport/odfexport.cxx | 6 ++++++ + sw/source/core/unocore/unostyle.cxx | 7 ++++++- + 3 files changed, 12 insertions(+), 1 deletion(-) + create mode 100644 sw/qa/extras/odfexport/data/tdf111891_frameVertStyle.odt + +diff --git a/sw/qa/extras/odfexport/data/tdf111891_frameVertStyle.odt b/sw/qa/extras/odfexport/data/tdf111891_frameVertStyle.odt +new file mode 100644 +index 0000000000000000000000000000000000000000..8fcf98a6272bb749d26c88030b35f8c147a02308 +GIT binary patch +literal 8814 +zcmb_>1z1~Kvo^({xND*1KyfKjw73Fc9i$3k2BOT7yghP>>CT!wF)>ZUb-tIk4N<0wHELrjB4B1j-Htx#OUD!~b8PQmfSX-I}tH`UY +ztZZ&>E^h5_`8d~BmegL8Kh#(-)l%Bo3GeLc?dgIK_I3^Q_Vf&VY#o^!8W|tyZyOov +zUz{GCn3x!wU0C=u*EO-yGrcjhusXN2zP>cKwKVp9fA;If(%#p#uekup~0g||37(7)jwKGZ<>Q6`eMBf9!tdc3tpxP<%Q|7s)zgzrU{ +z2*KuKmR+a1F?T5P(#le$62^Z2TJ7lQ=zqG-ulVL`d@S4xG +z(3w9{Dv2Iy5bgoOQDzyWE989_NFtenY!((Q^Ub_&E!L?t61v| +zxN|9wDGPZB2R#K-6~_YjV2s)?KIPvCdrLgs3SL)ne#@$(TqUvgHH8m#{Vmsix{p&1 +zH%F7oRADdjh@u5{LBWt>28Mj9GE4YK@?3wJWz}lV1U3I8AM{lhv!1oeo5qO68DG;K +zi5REiO1Ol&>4|#8%LS{b=l68V=()Cg!r3eaz0bD#$dUo`wL7^6iUEcD+oz`_LLggy +zTz;75e0CVs3*{YiieU!sdB7{H9_<@eKBoemDGrTDWo)jsmoHD=Q4EGC@kXb3NRL}W +z_-$Jn!%aL~Nu`VR2&*XG_hNe?XJ5K_@Y{+{n4VQm8y4Eb*FJNK2u_kpAZwNQiDnIb +z`UZ9Ly>bYE47cmSv0mZ}i{2l`7?$jk_GAY6qyoff>nnJ$JL^I}B4Ijg!|xS`i;vwr +zdnUZjq8o>l)PyZlJQBncJiw?I&?d)G@m8IYkl;m>O_FMf>pmE0^~__wq}pGzkWpEp +zEgdB&2Nw+&Oa}H=c2EB<{1EaQeR+08j~R#PY_JNmim5iqHp2H&Fhf}(XYlh12rYV& +z!6ou&Np6@9{<1RLSDg@@VK{Em{BUWHL|Ha>UqckWgdj);UE>uk9u?8UD!B$x8jU7u +zi=hWNYVqA9uPLNUPukN~I*u%?fjv>OWC)k(Z(p?u8#p;5EQ<2r+^3&MQI)q3!%T5# +zYCLKZW_^4;bK#lkr5^t*MrL>vdDaQ7kbIHa3^ZD09Qgh%cIW+csXE24M45~0zHR4r +z(ux^kCBhXm98#E9U%5V(WjKn3rtpXam@x#Kw>%6JNc0YNcs5(-i8PNspI=+0@n%q=i5srgb$E+f#gog)V35-Ym*iP2i>tXOLzYNq@pymH +z^VHjm^SoL!Xx_$4C6M#vQJ1~tPqWiHpVzEh3b?WsJB7V1W`gSgVfRkHqzT* +zfzNmX59&Xp4UfqYI7!KpQG(XaZHe;Sh=aI$4(t5TqxKFe_6$GzwORx^^a;6N^Mw|x +zjv@x)86Q7IwA17s6Ms5M#p8|)uPY6sAb)5iPrUv(wuKw7y+;?%NE{j`-ohiQ! +zw!DF1;#erTB_xfi*q*V3F#AlLmc}L|u7qBacg)+_6^+Oz?HKsX(b-}qr{{V;lPL4= +z6-}Qv94^&aC3SLIUa|KYW2-JM=O91og|A$+v)6;0+v&5iG#icvPC`j5P-e||UwsU# +zv;uBxx763yBg2_z0ryCDtLPpoiR65$y6;V%?Ka*eGP&y8LYTOSpsIj|9!#E7 +z=ZK7e@EQ-{c6>+lzl&CP#OnZcwFWxe1*;uho!9dp@V$o1EPJLKD~4h9s|U}>I4eVU +z5MFJ%wk1xpb;UDAYtUSu=m|>~JZigt^#S;vbH*m +z$xeJtCXdoEX7oPTWH&OoFNzFk3deR}E$NYuB%W+!(`lp@tpY^lar?eD4dmrG=OI}< +zsAzxO`!Omfo|IU#+7uo-ayVxi%kmOzUbT9_FH-tWf7>Gb#7%^I+}M`lyik|3BO#Bw +zJtRYMh-3^ta6}@tTyY9on9i+aua$~$!qz;0RCriU6B*Ls)yfNsf?HaXZ8*7T&7AL- +zR%+L_GSh_gc5D;k4H{)WGR@h(H}vox+%b2^5)UAEuDh65DL#wx6> +zgd#ue{5S91CYyRH4K+C}c>OhyvT~5MMO~(#jciRkO;-y7g{XC%db8|_|uEz!AS7biNQ~7&GHQO`r@eEB#dYMC+sNJ +zd*>VIg?MH0y+g5dS975~R2JVuT6N`#1VtE*woDGnvw$2|9`ahYa$>gc9?5C)2NF{E +z!Lk-%rQC_`b`Fu3SyPFp`|W%@x_c-#nVOpr)P4c=1Uh%+1poux{7Y@))o+Q5*z!ko +z`Yff7?{SVs*!G9%B$$f&R+zG&2XQkZhrcTfe5h+KWm8cP3Q;;ubdfafKup?yZWWC^ +zM>1VwN6Ii2+p4QTEzS+=2qNGGk@ISh-V+L9-*V34NKANQiuLA_Vh`~7a?4CceYz%| +z{}nVroR<#sl=L_?c?0ORUd##T_~EAaKh2`7jhKsi7a`STi>A9vQ!5KgAOshoQo9N`(@$A~hSe?Wk{S{0WQCI@mm-<_u +zEUw2~o_Yr4biOXWdA~M5nTC(V_MyB%3J_$hegnlfUqN*-iz_i4PgbOVb__wuSL<%Wl7oNXgAohY-~8K<$2li+|tz7UrphW;SD06e;QE|Xo`QlyJd>JV?tbFb{O|MqoeF=>Os=-+>r6HKi +zG$7EwL^_8-^AE{3i0h15YPbM3iD5W`zQW;CZFFU|a{Qw&ezZ`n(LVyiOD$eO`iq0& +z<2Q)E_zC8sCK@ddG`n}S+xWk*)-yxhW9E%X8?in#hg^TS7*ivyCWyQyHJz(bMD0*$o*pz!jU7$rihC#FOkqnmrEMm1^(_m)BPxb3xo4 +z%#fUCL+;R9nanYIaWU?sod)6l;LjdQbB|=MN<>%ek`$IR#g~P{=AJ8=ScU@U#YF_90NccvLbDZo(qbkMH6ne +zkr0CYY>AJb~%r2ec7oFhrVmT@}-n~)hZsb)xu$=cvSPb{BVBL +zb{K_qVW?Y>-xr)P@)fUJp3H|thS{K`gC>SwY#7;kFSY12`BrPsdvqWS(^CQ(~VJxmmwqzz`ohQ`FMzyO==87>riw +zp?l^UWDmw%7W4f+TIH_7d<3+HwK};=;jRj +z(o^(!WIKrJwUvY9N|CuM(AB|(^|-4~R*6cOjcOVu#(}c4S0l=Z2JQ&lI~d5W6muR% +zZ@K{Xx7;lS7ozTpiQ7`r{%sxU@3UX5yX+STg@Pa!f9AhUx_ZvD{CHlAMll`k&*kd3 +zg5q+!qen+$TidDy=AHs@v!o}_}?zNt@NYzCP< +zuZ;nf&c)Ja%`sS+V%neSUapUU^I2OeN%YxmDDIn%I#t1ROBRaR7qU{G>S<|dDLFfz +zSq9j5ZFU#-WqK80;%5@ikRHPMftwZgD0vcD1sL*zopw8dt~`2ae}vZla!u2Blo$ko^IEF)9pMkLF43p +zw)X6BniU7L`GbqItD4gJHCeimT(}JFEm2%31Im@eca#Ge*oSC`Qk@o6&akM1X%1Y!Cv_Ab-C +zRp3^C|Dv)Mja%qjV!F(L!erl+N~I91?hvuLy(ryyUT*lBB2n`xo?K`bY!5-RNX<9y +zMy&$cMrYLToVGjGEmG^{GKf3}T@)5nRaX@Wlt*WnQvufmHsr;}7~`|5c9yF|)J+j%$|kL6(y} +zVg$3jLs8(gV#xcCvH%RicK-|-VT&u99mo9Xz6#H)zIwlWrcSyC$%@314SqoxV&+&m +zeLMFEH(h9SoBNnf%oXy@(eP;8^aBDZm7aRQXGs32)j#O0CVa(U#Pc9_9mS)ofD}u2 +zz)`1AHtSJg6C<^O;e`(hrnv5sWNeBOX+XJZ@uD$d*i1>=Ax^fbKmW(l`3g}H>z#~b +z>0nTKPLS9>tlGcuqK>4~6(E{6_+I-2|GuY)@e4fXIi1upD0-p#%O?X7HOD@&h3BdM +zAvMFuUS%|Da0A8BP?I#GVIjZXJkq0KdPgmh(rWULsF&kga$|3vIiK-HCg0Qhq(m!^ +za&_7XFsruQidjU7uscC%mG%AdL<8%9Iwx0wzl^8}76*b0M%z7jt`V&3?VKF)WO5p%=O^W!yMD=|p!-Tw^E65O#J01;X +zh{5nOnN@gjYd{bauG)B2FJ}+dMzLXwUz()HMh?0Oz$!7(% +zL?>*bW>kHpVmqd^ubfRh+&oe_SodZmwH2x%&kSw-s&5^TNhhA!Cbg?iGuue4SImJy +zHaVAl*7SKb9j$7|mS|@T-T1uKA;}C8PLQmkOX*67wUxEUS*Oe%!>RA(FpY7Yc6yd% +zDR@tqrz7`kN6K5ZCtL_5m&-wlOksxx1r|3!Nd@mc+DOrTS%T@lEHx;~sPeBA`n}*G +zYUfMyM1&_6To(#jFvW#^)pIatDQr=Hg`K;&db +zC@B=3b?Ur07MGDyhLia`YAft=X<$0@+{s+auLwSCMEMdlNShc(R1S&|4>%nz=UiV3 +z=&6aMa+1@$2O2ac6q}*-tZ>DUJy+XEyJ1Xq)Ui@gVEsl&bfP*Nbm+~kU4x{qil!pt +z9f!PAp_Y}Y7iX}1`u?+;G(44sqMuV^*_mKai$;Vm{25x)73m!X%|^?8lt;a#ALbtv +z^rO@AYq|KYIU;ETF$Y;V+W*;Oad^UU+f#8g0oZf=wWabuX_;Hw0HDBs(xUmzwLoBi +z1<-**0t5vEY#sjLk`%vDwzaW!w7r|{|56WXV`FU#fB>!kmwFCR0MyappG`ycn|T6E +zO@Y?HTl?DllX-rpX=`s|VGnfpAFlbkhj@37KWF;8+S^_B0R})o=0FE1ySPzAjtU5UHg3bg2M{2dLs+ilANqjSC +zMSPfFQ~UBfnPlv&E3=NB&LcC~hh*G%P{_a!Hmscj*~wnhUoP#jB8@jcnU3GS{GQ-l +zxeCzY4}2FSb_g&l!0i}g)7e&aBUX%lPlYV6dqGluC@3fv>-}||e`{+H;dHya|D9`1 +zMRfjkX=dS9OYj17eY_%Ts3HI@K~3Oz=WduZWpZy4lL!DHfLxgD~m0{-x2T3nOe(Fg>`Gr(Lc?3 +z50MDr@0-52HvL6@w18C={;Kuw-QAxmO1Gzf*X#X(^1~N?tx(@}&3=l|?M#2^q5Zq! +zulu~a0`^bYLi@Fx{qK6eZVK*pfj?#bwn%>4?f!F5`0rZ3#_>Cs{VAISf89R((EPhN +z|5MY7{GX!!Uyc1!>tC((pX03Gp!{Tkzel;_fuAz@8`nV-Tz`QL5* +zlXd=u^267D4XJ-!#K2pW|B9ZsEc9a$|Iqw3dfbKFpOSlPqTdE!RRxsWyaxdR|MmsE +LZ9yGT-;Mqsc2j`C + +literal 0 +HcmV?d00001 + +diff --git a/sw/qa/extras/odfexport/odfexport.cxx b/sw/qa/extras/odfexport/odfexport.cxx +index e513aaa..19f1695 100644 +--- a/sw/qa/extras/odfexport/odfexport.cxx ++++ b/sw/qa/extras/odfexport/odfexport.cxx +@@ -758,6 +758,12 @@ DECLARE_ODFEXPORT_TEST(testTextFrameVertAdjust, "textframe-vertadjust.odt") + CPPUNIT_ASSERT_EQUAL(drawing::TextVerticalAdjust_BOTTOM, getProperty(xFrame, "TextVerticalAdjust")); + } + ++DECLARE_ODFEXPORT_TEST(testTdf111891_frameVertStyle, "tdf111891_frameVertStyle.odt") ++{ ++ uno::Reference xFrame(getShape(1), uno::UNO_QUERY); ++ CPPUNIT_ASSERT_EQUAL(drawing::TextVerticalAdjust_BOTTOM, getProperty(xFrame, "TextVerticalAdjust")); ++} ++ + DECLARE_ODFEXPORT_TEST(testShapeRelsize, "shape-relsize.odt") + { + uno::Reference xShape = getShape(1); +diff --git a/sw/source/core/unocore/unostyle.cxx b/sw/source/core/unocore/unostyle.cxx +index ad6dd78..db6fc57 100644 +--- a/sw/source/core/unocore/unostyle.cxx ++++ b/sw/source/core/unocore/unostyle.cxx +@@ -1803,8 +1803,13 @@ void SwXStyle::SetPropertyValue(const SfxItemPropertySimpleEntry& + } + } + template<> +-void SwXStyle::SetPropertyValue(const SfxItemPropertySimpleEntry&, const SfxItemPropertySet&, const uno::Any& rValue, SwStyleBase_Impl& o_rStyleBase) ++void SwXStyle::SetPropertyValue(const SfxItemPropertySimpleEntry& rEntry, const SfxItemPropertySet& rPropSet, const uno::Any& rValue, SwStyleBase_Impl& o_rStyleBase) + { ++ if(m_rEntry.m_eFamily != SfxStyleFamily::Page) ++ { ++ SetPropertyValue(rEntry, rPropSet, rValue, o_rStyleBase); ++ return; ++ } + if(!m_pDoc || !rValue.has() || !o_rStyleBase.GetOldPageDesc()) + return; + SwPageDesc* pPageDesc = m_pDoc->FindPageDesc(o_rStyleBase.GetOldPageDesc()->GetName()); +-- +2.9.5 + diff --git a/SOURCES/0001-tdf-95843-Wait-for-fire_glxtest_process-also-in-head.patch b/SOURCES/0001-tdf-95843-Wait-for-fire_glxtest_process-also-in-head.patch new file mode 100644 index 0000000..ab348de --- /dev/null +++ b/SOURCES/0001-tdf-95843-Wait-for-fire_glxtest_process-also-in-head.patch @@ -0,0 +1,132 @@ +From b81490dd5c9eebdd29c0848ca80d6ea78f4818bd Mon Sep 17 00:00:00 2001 +From: Stephan Bergmann +Date: Thu, 19 Apr 2018 13:59:16 +0200 +Subject: [PATCH] tdf#95843: Wait for fire_glxtest_process also in --headless + mode +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Discussed with mmeeks on IRC that fire_glxtest_process is probably called as +early as possible so that its reuslt is ready by the time it is needed in the +non-headless case. So best fix for headless is probably to just wait for the +sub-process at an opportune point, instead of redesigning the whole mess so that +fire_glxtest_process would only be called once its result is actually needed. + +Change-Id: I4ea9c9d54b83c9695a3b72317e68fed0c410da0e +Reviewed-on: https://gerrit.libreoffice.org/53154 +Tested-by: Jenkins +Reviewed-by: Stephan Bergmann +(cherry picked from commit 4bacf58f4af44ac8c4632b43289ccfcc07e5820c) +Reviewed-on: https://gerrit.libreoffice.org/53170 +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara +--- + desktop/inc/app.hxx | 1 + + desktop/source/app/app.cxx | 9 +++++++++ + desktop/source/app/sofficemain.cxx | 4 ++++ + vcl/inc/opengl/x11/glxtest.hxx | 2 ++ + vcl/unx/glxtest.cxx | 16 ++++++++++++++++ + 5 files changed, 32 insertions(+) + +diff --git a/desktop/inc/app.hxx b/desktop/inc/app.hxx +index 91dde49..68fc4a3 100644 +--- a/desktop/inc/app.hxx ++++ b/desktop/inc/app.hxx +@@ -187,6 +187,7 @@ OUString ReplaceStringHookProc(const OUString& rStr); + + #if defined( UNX ) && !defined MACOSX && !defined IOS && !defined ANDROID && !defined LIBO_HEADLESS + bool fire_glxtest_process(); ++void reap_glxtest_process(); + #endif + + #endif // INCLUDED_DESKTOP_INC_APP_HXX +diff --git a/desktop/source/app/app.cxx b/desktop/source/app/app.cxx +index dc7ff1e..c8b8db5 100644 +--- a/desktop/source/app/app.cxx ++++ b/desktop/source/app/app.cxx +@@ -1649,6 +1649,15 @@ int Desktop::Main() + CheckOpenCLCompute(xDesktop); + #endif + ++ // In headless mode, reap the process started by fire_glxtest_process() early in soffice_main ++ // (desktop/source/app/sofficemain.cxx), in a code block that needs to be covered by the same ++ // #if condition as this code block: ++#if defined( UNX ) && !defined MACOSX && !defined IOS && !defined ANDROID && !defined(LIBO_HEADLESS) && HAVE_FEATURE_OPENGL ++ if (rCmdLineArgs.IsHeadless()) { ++ reap_glxtest_process(); ++ } ++#endif ++ + // Release solar mutex just before we wait for our client to connect + { + SolarMutexReleaser aReleaser; +diff --git a/desktop/source/app/sofficemain.cxx b/desktop/source/app/sofficemain.cxx +index 27b9efa..9cbcbc0 100644 +--- a/desktop/source/app/sofficemain.cxx ++++ b/desktop/source/app/sofficemain.cxx +@@ -125,6 +125,10 @@ extern "C" int DESKTOP_DLLPUBLIC soffice_main() + #if defined( UNX ) && !defined MACOSX && !defined IOS && !defined ANDROID && !defined(LIBO_HEADLESS) && HAVE_FEATURE_OPENGL + /* Run test for OpenGL support in own process to avoid crash with broken + * OpenGL drivers. Start process as early as possible. ++ * In non-headless mode, the process will be reaped in X11OpenGLDeviceInfo::GetData ++ * (vcl/opengl/x11/X11DeviceInfo.cxx). In headless mode, the process will be reaped late in ++ * Desktop::Main (desktop/source/app/app.cxx), in a code block that needs to be covered by the ++ * same #if condition as this code block. + */ + bool bSuccess = fire_glxtest_process(); + SAL_WARN_IF(!bSuccess, "desktop.opengl", "problems with glxtest"); +diff --git a/vcl/inc/opengl/x11/glxtest.hxx b/vcl/inc/opengl/x11/glxtest.hxx +index 979f795..d74436a 100644 +--- a/vcl/inc/opengl/x11/glxtest.hxx ++++ b/vcl/inc/opengl/x11/glxtest.hxx +@@ -18,6 +18,8 @@ VCL_DLLPUBLIC pid_t* getGlxPid(); + + bool fire_glxtest_process(); + ++void reap_glxtest_process(); ++ + #endif + + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +diff --git a/vcl/unx/glxtest.cxx b/vcl/unx/glxtest.cxx +index efe5591..87c6044 100644 +--- a/vcl/unx/glxtest.cxx ++++ b/vcl/unx/glxtest.cxx +@@ -26,6 +26,8 @@ + #include "stdint.h" + #include + ++#include ++ + #include "opengl/x11/glxtest.hxx" + + #ifdef __SUNPRO_CC +@@ -35,6 +37,8 @@ + #include "X11/Xlib.h" + #include "X11/Xutil.h" + ++#include ++ + // stuff from glx.h + typedef struct __GLXcontextRec *GLXContext; + typedef XID GLXPixmap; +@@ -273,3 +277,15 @@ bool fire_glxtest_process() + *glxtest_pid = pid; + return true; + } ++ ++void reap_glxtest_process() { ++ pid_t * pid = getGlxPid(); ++ if (*pid != 0) { ++ // Use WNOHANG, as it is probably better to have a (rather harmless) zombie child process ++ // hanging around for the duration of the calling process, than to potentially block the ++ // calling process here: ++ pid_t e = waitpid(*pid, nullptr, WNOHANG); ++ SAL_INFO_IF( ++ e <= 0, "vcl.opengl", "waiting for glxtest process " << *pid << " failed with " << e); ++ } ++} +-- +2.14.3 + diff --git a/SOURCES/0001-tdf-97630-xmloff-ODF-extended-draw-fit-to-size-mess.patch b/SOURCES/0001-tdf-97630-xmloff-ODF-extended-draw-fit-to-size-mess.patch new file mode 100644 index 0000000..f57c591 --- /dev/null +++ b/SOURCES/0001-tdf-97630-xmloff-ODF-extended-draw-fit-to-size-mess.patch @@ -0,0 +1,1105 @@ +From e2aea006ba385dfbbfde27997372c4d941561b2c Mon Sep 17 00:00:00 2001 +From: Michael Stahl +Date: Tue, 17 Oct 2017 17:24:03 +0200 +Subject: [PATCH] tdf#97630 xmloff: ODF extended draw:fit-to-size mess + +The plan: + +1. As Regina points out, there is already (in ODF 1.2, but not ODF 1.1) + a style:shrink-to-fit attribute for shapes, so use this to represent + the AUTOFIT value. + + The fallback from AUTOFIT to draw:fit-to-size="true" was a stupid + idea anyway, probably "false" is less annoying in practice. + + There are 2 different shapes that implement TextFitToSize property: + + a) text shapes already interpret ALLLINES and PROPORTIONAL exactly + the same + b) fontwork custom shapes interpret ALLLINES but do nothing for + PROPORTIONAL + + As Regina points out, there is no shape that needs to distinguish + between ALLLINES and PROPORTIONAL, so we do a minor behavioral + API CHANGE and from now on interpret PROPORTIONAL as ALLLINES + on fontwork custom shapes. This obviates the need to distinguish + the values in ODF and so we don't need a new attribute, + just use draw:fit-to-size="true" for both. + + On import, use MID_FLAG_MERGE_PROPERTY to combine the 2 attributes + into one value. + +2. Restrict the export of draw:fit-to-size to only the standard + values "true"/"false". + +This implements step 1, the step 2 will be done in the future when +most users have the import of the style:shrink-to-fit. + +Change-Id: I4a378aa110fdb82db7a99a839d7ff207248a73e7 +Reviewed-on: https://gerrit.libreoffice.org/43521 +Tested-by: Jenkins +Reviewed-by: Michael Stahl +(cherry picked from commit 33eb9fdb61033b3fd35d923900b1f5791f4b71c8) +--- + filter/source/msfilter/escherex.cxx | 3 +- + sd/qa/unit/data/fit-to-size.fodp | 724 +++++++++++++++++++++ + sd/qa/unit/export-tests.cxx | 101 +++ + .../customshapes/EnhancedCustomShapeFontWork.cxx | 5 +- + svx/source/toolbars/fontworkbar.cxx | 10 +- + xmloff/inc/xmlsdtypes.hxx | 1 + + xmloff/source/draw/sdpropls.cxx | 71 +- + 7 files changed, 902 insertions(+), 13 deletions(-) + create mode 100644 sd/qa/unit/data/fit-to-size.fodp + +diff --git a/filter/source/msfilter/escherex.cxx b/filter/source/msfilter/escherex.cxx +index b8b5b831bd99..4285bcd04c14 100644 +--- a/filter/source/msfilter/escherex.cxx ++++ b/filter/source/msfilter/escherex.cxx +@@ -3470,7 +3470,8 @@ void EscherPropertyContainer::CreateCustomShapeProperties( const MSO_SPT eShapeT + case drawing::TextHorizontalAdjust_BLOCK: + { + SdrFitToSizeType eFTS( static_cast(pCustoShape->GetMergedItem( SDRATTR_TEXT_FITTOSIZE )).GetValue() ); +- if ( eFTS == SdrFitToSizeType::AllLines) ++ if (eFTS == SdrFitToSizeType::AllLines || ++ eFTS == SdrFitToSizeType::Proportional) + { + gTextAlign = mso_alignTextStretch; + } +diff --git a/sd/qa/unit/data/fit-to-size.fodp b/sd/qa/unit/data/fit-to-size.fodp +new file mode 100644 +index 000000000000..734cf8a3a6c6 +--- /dev/null ++++ b/sd/qa/unit/data/fit-to-size.fodp +@@ -0,0 +1,724 @@ ++ ++ ++ 2017-10-18T22:06:17.2032716482017-10-19T22:51:45.845520353PT31M43S4LibreOfficeDev/5.3.8.0.0$Linux_X86_64 LibreOffice_project/a0fae00a2d52960eebbb14f08d2de251e0a8ff3f ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ <number><number> ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ <number><number> ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ <number><number> ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 1 ++ foo ++ ++ ++ ++ ++ 2 ++ foo ++ ++ ++ ++ ++ 3 ++ foo ++ ++ ++ ++ ++ 4 ++ foo ++ ++ ++ ++ 5 ++ Fontwork ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 6 ++ Fontwork ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/sd/qa/unit/export-tests.cxx b/sd/qa/unit/export-tests.cxx +index 3f2882384031..6bbb2a53648b 100644 +--- a/sd/qa/unit/export-tests.cxx ++++ b/sd/qa/unit/export-tests.cxx +@@ -84,6 +84,7 @@ public: + void testN821567(); + void testMediaEmbedding(); + void testFdo84043(); ++ void testTdf97630(); + void testSwappedOutImageExport(); + void testOOoXMLAnimations(); + void testTdf80020(); +@@ -98,6 +99,7 @@ public: + CPPUNIT_TEST(testN821567); + CPPUNIT_TEST(testMediaEmbedding); + CPPUNIT_TEST(testFdo84043); ++ CPPUNIT_TEST(testTdf97630); + CPPUNIT_TEST(testSwappedOutImageExport); + CPPUNIT_TEST(testOOoXMLAnimations); + CPPUNIT_TEST(testTdf80020); +@@ -125,6 +127,7 @@ public: + { "table", "urn:oasis:names:tc:opendocument:xmlns:table:1.0" }, + { "text", "urn:oasis:names:tc:opendocument:xmlns:text:1.0" }, + { "xlink", "http://www.w3c.org/1999/xlink" }, ++ { "loext", "urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" }, + }; + for (size_t i = 0; i < SAL_N_ELEMENTS(namespaces); ++i) + { +@@ -246,6 +249,104 @@ void SdExportTest::testFdo84043() + xDocShRef->DoClose(); + } + ++void SdExportTest::testTdf97630() ++{ ++ ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc("/sd/qa/unit/data/fit-to-size.fodp"), FODP); ++ ++ { ++ uno::Reference xDPS(xDocShRef->GetModel(), uno::UNO_QUERY); ++ uno::Reference xDP(xDPS->getDrawPages()->getByIndex(0), uno::UNO_QUERY); ++ ++ drawing::TextFitToSizeType tmp; ++ // text shapes ++ uno::Reference xShape0(xDP->getByIndex(0), uno::UNO_QUERY); ++ xShape0->getPropertyValue("TextFitToSize") >>= tmp; ++ CPPUNIT_ASSERT_EQUAL(drawing::TextFitToSizeType_NONE, tmp); ++ uno::Reference xShape1(xDP->getByIndex(1), uno::UNO_QUERY); ++ xShape1->getPropertyValue("TextFitToSize") >>= tmp; ++ CPPUNIT_ASSERT_EQUAL(drawing::TextFitToSizeType_PROPORTIONAL, tmp); ++ uno::Reference xShape2(xDP->getByIndex(2), uno::UNO_QUERY); ++ xShape2->getPropertyValue("TextFitToSize") >>= tmp; ++ CPPUNIT_ASSERT_EQUAL(drawing::TextFitToSizeType_ALLLINES, tmp); ++ uno::Reference xShape3(xDP->getByIndex(3), uno::UNO_QUERY); ++ xShape3->getPropertyValue("TextFitToSize") >>= tmp; ++ CPPUNIT_ASSERT_EQUAL(drawing::TextFitToSizeType_AUTOFIT, tmp); ++ ++ // fontworks ++ uno::Reference xShape4(xDP->getByIndex(4), uno::UNO_QUERY); ++ xShape4->getPropertyValue("TextFitToSize") >>= tmp; ++ CPPUNIT_ASSERT_EQUAL(drawing::TextFitToSizeType_NONE, tmp); ++ uno::Reference xShape5(xDP->getByIndex(5), uno::UNO_QUERY); ++ xShape5->getPropertyValue("TextFitToSize") >>= tmp; ++ CPPUNIT_ASSERT_EQUAL(drawing::TextFitToSizeType_ALLLINES, tmp); ++ ++ } ++ ++ utl::TempFile aTempFile; ++ xDocShRef = saveAndReload(xDocShRef.get(), ODP, &aTempFile); ++ ++ { ++ uno::Reference xDPS(xDocShRef->GetModel(), uno::UNO_QUERY); ++ uno::Reference xDP(xDPS->getDrawPages()->getByIndex(0), uno::UNO_QUERY); ++ ++ drawing::TextFitToSizeType tmp; ++ // text shapes ++ uno::Reference xShape0(xDP->getByIndex(0), uno::UNO_QUERY); ++ xShape0->getPropertyValue("TextFitToSize") >>= tmp; ++ CPPUNIT_ASSERT_EQUAL(drawing::TextFitToSizeType_NONE, tmp); ++ uno::Reference xShape1(xDP->getByIndex(1), uno::UNO_QUERY); ++ xShape1->getPropertyValue("TextFitToSize") >>= tmp; ++ CPPUNIT_ASSERT_EQUAL(drawing::TextFitToSizeType_PROPORTIONAL, tmp); ++ uno::Reference xShape2(xDP->getByIndex(2), uno::UNO_QUERY); ++ xShape2->getPropertyValue("TextFitToSize") >>= tmp; ++#if 1 ++// TODO see TODO in sdpropls.cxx ++ CPPUNIT_ASSERT_EQUAL(drawing::TextFitToSizeType_ALLLINES, tmp); ++#else ++ CPPUNIT_ASSERT_EQUAL(drawing::TextFitToSizeType_PROPORTIONAL, tmp); ++#endif ++ uno::Reference xShape3(xDP->getByIndex(3), uno::UNO_QUERY); ++ xShape3->getPropertyValue("TextFitToSize") >>= tmp; ++ CPPUNIT_ASSERT_EQUAL(drawing::TextFitToSizeType_AUTOFIT, tmp); ++ ++ // fontworks ++ uno::Reference xShape4(xDP->getByIndex(4), uno::UNO_QUERY); ++ xShape4->getPropertyValue("TextFitToSize") >>= tmp; ++ CPPUNIT_ASSERT_EQUAL(drawing::TextFitToSizeType_NONE, tmp); ++ uno::Reference xShape5(xDP->getByIndex(5), uno::UNO_QUERY); ++ xShape5->getPropertyValue("TextFitToSize") >>= tmp; ++#if 1 ++// TODO see TODO in sdpropls.cxx ++ CPPUNIT_ASSERT_EQUAL(drawing::TextFitToSizeType_ALLLINES, tmp); ++#else ++ CPPUNIT_ASSERT_EQUAL(drawing::TextFitToSizeType_PROPORTIONAL, tmp); ++#endif ++ } ++ ++ xmlDocPtr pXmlDoc = parseExport(aTempFile, "content.xml"); ++ // text shapes ++ assertXPath(pXmlDoc, "//style:style[@style:family='presentation']/style:graphic-properties[@draw:fit-to-size='false' and @style:shrink-to-fit='false']", 1); ++#if 1 ++// TODO see TODO in sdpropls.cxx ++ assertXPath(pXmlDoc, "//style:style[@style:family='presentation']/style:graphic-properties[@draw:fit-to-size='true' and @style:shrink-to-fit='false']", 1); ++ assertXPath(pXmlDoc, "//style:style[@style:family='presentation']/style:graphic-properties[@draw:fit-to-size='all' and @style:shrink-to-fit='false']", 1); ++ assertXPath(pXmlDoc, "//style:style[@style:family='presentation']/style:graphic-properties[@draw:fit-to-size='shrink-to-fit' and @style:shrink-to-fit='true']", 1); ++#else ++ assertXPath(pXmlDoc, "//style:style[@style:family='presentation']/style:graphic-properties[@draw:fit-to-size='true' and @style:shrink-to-fit='false']", 2); ++ assertXPath(pXmlDoc, "//style:style[@style:family='presentation']/style:graphic-properties[@draw:fit-to-size='false' and @style:shrink-to-fit='true']", 1); ++#endif ++ // fontworks ++ assertXPath(pXmlDoc, "//style:style[@style:family='graphic']/style:graphic-properties[@draw:fit-to-size='false' and @style:shrink-to-fit='false']", 1); ++#if 1 ++// TODO see TODO in sdpropls.cxx ++ assertXPath(pXmlDoc, "//style:style[@style:family='graphic']/style:graphic-properties[@draw:fit-to-size='all' and @style:shrink-to-fit='false']", 1); ++#else ++ assertXPath(pXmlDoc, "//style:style[@style:family='graphic']/style:graphic-properties[@draw:fit-to-size='true' and @style:shrink-to-fit='false']", 1); ++#endif ++ ++ xDocShRef->DoClose(); ++} ++ + void SdExportTest::testSwappedOutImageExport() + { + // Problem was with the swapped out images, which were not swapped in during export. +diff --git a/svx/source/customshapes/EnhancedCustomShapeFontWork.cxx b/svx/source/customshapes/EnhancedCustomShapeFontWork.cxx +index a999791a5c5a..26f227e8b9a4 100644 +--- a/svx/source/customshapes/EnhancedCustomShapeFontWork.cxx ++++ b/svx/source/customshapes/EnhancedCustomShapeFontWork.cxx +@@ -433,7 +433,10 @@ void GetFontWorkOutline( FWData& rFWData, const SdrObject* pCustomShape ) + while ( aTextAreaIter != aTextAreaIEnd ) + { + GetTextAreaOutline( rFWData, pCustomShape, *aTextAreaIter, bSameLetterHeights ); +- if ( eFTS == SdrFitToSizeType::AllLines ) ++ if (eFTS == SdrFitToSizeType::AllLines || ++ // tdf#97630 interpret PROPORTIONAL same as ALLLINES so we don't ++ // need another ODF attribute! ++ eFTS == SdrFitToSizeType::Proportional) + { + std::vector< FWParagraphData >::iterator aParagraphIter( aTextAreaIter->vParagraphs.begin() ); + std::vector< FWParagraphData >::const_iterator aParagraphIEnd( aTextAreaIter->vParagraphs.end() ); +diff --git a/svx/source/toolbars/fontworkbar.cxx b/svx/source/toolbars/fontworkbar.cxx +index a148de31cf13..329cd2bcb006 100644 +--- a/svx/source/toolbars/fontworkbar.cxx ++++ b/svx/source/toolbars/fontworkbar.cxx +@@ -73,10 +73,16 @@ void SetAlignmentState( SdrView* pSdrView, SfxItemSet& rSet ) + case SDRTEXTHORZADJUST_RIGHT : nAlignment = 2; break; + case SDRTEXTHORZADJUST_BLOCK : + { +- if ( rTextFitToSizeTypeItem.GetValue() == SdrFitToSizeType::NONE ) ++ auto const fit(rTextFitToSizeTypeItem.GetValue()); ++ if (fit == SdrFitToSizeType::NONE) ++ { + nAlignment = 3; +- else if ( rTextFitToSizeTypeItem.GetValue() == SdrFitToSizeType::AllLines ) ++ } ++ else if (fit == SdrFitToSizeType::AllLines || ++ fit == SdrFitToSizeType::Proportional) ++ { + nAlignment = 4; ++ } + } + } + if ( ( nOldAlignment != -1 ) && ( nOldAlignment != nAlignment ) ) +diff --git a/xmloff/inc/xmlsdtypes.hxx b/xmloff/inc/xmlsdtypes.hxx +index 8e388cf032c7..675b16fc1377 100644 +--- a/xmloff/inc/xmlsdtypes.hxx ++++ b/xmloff/inc/xmlsdtypes.hxx +@@ -67,6 +67,7 @@ + #define XML_SD_TYPE_CONTROL_BORDER_COLOR (XML_SD_TYPES_START + 33 ) + #define XML_SD_TYPE_IMAGE_SCALE_MODE (XML_SD_TYPES_START + 34 ) + #define XML_SD_TYPE_LINECAP (XML_SD_TYPES_START + 35 ) ++#define XML_SD_TYPE_FITTOSIZE_AUTOFIT (XML_SD_TYPES_START + 36 ) + + ////////////////////////////////////////////////////////////////////////////// + // 3D property types +diff --git a/xmloff/source/draw/sdpropls.cxx b/xmloff/source/draw/sdpropls.cxx +index 72d6315fa088..12c900eb50cc 100644 +--- a/xmloff/source/draw/sdpropls.cxx ++++ b/xmloff/source/draw/sdpropls.cxx +@@ -131,7 +131,8 @@ const XMLPropertyMapEntry aXMLSDProperties[] = + GMAP( "TextVerticalAdjust", XML_NAMESPACE_DRAW, XML_TEXTAREA_VERTICAL_ALIGN, XML_SD_TYPE_VERTICAL_ALIGN, 0 ), + GMAP( "TextAutoGrowHeight", XML_NAMESPACE_DRAW, XML_AUTO_GROW_HEIGHT, XML_TYPE_BOOL, 0 ), + GMAP( "TextAutoGrowWidth", XML_NAMESPACE_DRAW, XML_AUTO_GROW_WIDTH, XML_TYPE_BOOL, 0 ), +- GMAP( "TextFitToSize", XML_NAMESPACE_DRAW, XML_FIT_TO_SIZE, XML_SD_TYPE_FITTOSIZE, 0 ), ++ GMAP( "TextFitToSize", XML_NAMESPACE_DRAW, XML_FIT_TO_SIZE, XML_SD_TYPE_FITTOSIZE|MID_FLAG_MERGE_PROPERTY, 0), ++ GMAPV( "TextFitToSize", XML_NAMESPACE_STYLE, XML_SHRINK_TO_FIT, XML_SD_TYPE_FITTOSIZE_AUTOFIT|MID_FLAG_MERGE_PROPERTY, 0, SvtSaveOptions::ODFVER_012 ), + GMAP( "TextContourFrame", XML_NAMESPACE_DRAW, XML_FIT_TO_CONTOUR, XML_TYPE_BOOL, 0 ), + GMAP( "TextMaximumFrameHeight", XML_NAMESPACE_FO, XML_MAX_HEIGHT, XML_TYPE_MEASURE, 0 ), + GMAP( "TextMaximumFrameWidth", XML_NAMESPACE_FO, XML_MAX_WIDTH, XML_TYPE_MEASURE, 0 ), +@@ -615,12 +616,13 @@ static SvXMLEnumMapEntry const pXML_VerticalAlign_Enum[] = + { XML_TOKEN_INVALID, 0 } + }; + ++// note: PROPORTIONAL and ALLLINES are the same thing now! + static SvXMLEnumMapEntry const pXML_FitToSize_Enum_Odf12[] = + { + { XML_FALSE, drawing::TextFitToSizeType_NONE }, + { XML_TRUE, drawing::TextFitToSizeType_PROPORTIONAL }, + { XML_TRUE, drawing::TextFitToSizeType_ALLLINES }, +- { XML_TRUE, drawing::TextFitToSizeType_AUTOFIT }, ++ { XML_FALSE, drawing::TextFitToSizeType_AUTOFIT }, + { XML_TOKEN_INVALID, 0 } + }; + +@@ -633,6 +635,15 @@ static SvXMLEnumMapEntry const pXML_FitToSize_Enum[] = + { XML_TOKEN_INVALID, 0 } + }; + ++static SvXMLEnumMapEntry const pXML_ShrinkToFit_Enum[] = ++{ ++ { XML_FALSE, drawing::TextFitToSizeType_NONE }, ++ { XML_FALSE, drawing::TextFitToSizeType_PROPORTIONAL }, ++ { XML_FALSE, drawing::TextFitToSizeType_ALLLINES }, ++ { XML_TRUE, drawing::TextFitToSizeType_AUTOFIT }, ++ { XML_TOKEN_INVALID, (drawing::TextFitToSizeType)0 } ++}; ++ + static SvXMLEnumMapEntry const pXML_MeasureUnit_Enum[] = + { + { XML_AUTOMATIC, 0 }, +@@ -853,6 +864,40 @@ bool XMLSdHeaderFooterVisibilityTypeHdl::exportXML( + return bRet; + } + ++class XMLFitToSizeEnumPropertyHdl : public XMLEnumPropertyHdl ++{ ++public: ++ XMLFitToSizeEnumPropertyHdl( ++ const SvXMLEnumMapEntry *const pMap) ++ : XMLEnumPropertyHdl(pMap, cppu::UnoType::get()) ++ { ++ } ++ ++ virtual bool importXML(const OUString& rStrImpValue, uno::Any& rValue, ++ const SvXMLUnitConverter& rUC) const override ++ { ++ // we don't know here what the actual attribute name is - ++ // but we can combine the 2 attributes by just taking the ++ // "largest" result value; this can never result in ALLLINES ++ // so the implementation has to interpret PROPORTIONAL as ALLLINES; ++ // both "true" is invalid anyway. ++ Any any; ++ auto const bRet = XMLEnumPropertyHdl::importXML(rStrImpValue, any, rUC); ++ if (!bRet) ++ { ++ return false; ++ } ++ assert(any.hasValue()); ++ if (!rValue.hasValue() || ++ rValue.get() < any.get()) ++ { ++ rValue = any; ++ } ++ return true; ++ } ++}; ++ ++ + XMLSdPropHdlFactory::XMLSdPropHdlFactory( uno::Reference< frame::XModel > const & xModel, SvXMLImport& rImport ) + : mxModel( xModel ), mpExport(nullptr), mpImport( &rImport ) + { +@@ -1047,19 +1092,27 @@ const XMLPropertyHandler* XMLSdPropHdlFactory::GetPropertyHandler( sal_Int32 nTy + break; + case XML_SD_TYPE_FITTOSIZE: + { +- if (mpExport && (mpExport->getDefaultVersion() +- <= SvtSaveOptions::ODFVER_012)) ++ if (mpExport ++#if 1 ++// TODO: remove in a couple releases, when users have the import of style:shrink-to-fit ++ && (mpExport->getDefaultVersion() ++ <= SvtSaveOptions::ODFVER_012) ++#endif ++ ) + { +- pHdl = new XMLEnumPropertyHdl(pXML_FitToSize_Enum_Odf12, +- cppu::UnoType::get()); ++ pHdl = new XMLFitToSizeEnumPropertyHdl(pXML_FitToSize_Enum_Odf12); + } + else +- { +- pHdl = new XMLEnumPropertyHdl(pXML_FitToSize_Enum, +- cppu::UnoType::get()); ++ { // import all values written by old LO ++ pHdl = new XMLFitToSizeEnumPropertyHdl(pXML_FitToSize_Enum); + } + } + break; ++ case XML_SD_TYPE_FITTOSIZE_AUTOFIT: ++ { ++ pHdl = new XMLFitToSizeEnumPropertyHdl(pXML_ShrinkToFit_Enum); ++ } ++ break; + case XML_SD_TYPE_MEASURE_UNIT: + pHdl = new XMLEnumPropertyHdl( pXML_MeasureUnit_Enum, ::cppu::UnoType::get() ); + break; +-- +2.14.1 + diff --git a/SOURCES/0002-Resolves-tdf-62702-allow-ole-objects-to-be-inserted-.patch b/SOURCES/0002-Resolves-tdf-62702-allow-ole-objects-to-be-inserted-.patch new file mode 100644 index 0000000..d244477 --- /dev/null +++ b/SOURCES/0002-Resolves-tdf-62702-allow-ole-objects-to-be-inserted-.patch @@ -0,0 +1,246 @@ +From 8daa13abb5ebec4d0b867f1d56ebc8516ae3bb71 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Tue, 9 May 2017 13:27:06 +0100 +Subject: [PATCH 2/2] Resolves: tdf#62702 allow ole objects to be inserted as + icons + +under windows on "create new", "further objects" you get the +native windows insert object dialog which has the "Display As Icon" +option, but on Linux etc (or using our own dialog) there isn't that +option + +so add a "Display as icon" checkbox in our own dialog and generate +an icon through SvFileInformationManager::GetImage + +Change-Id: I0a400189031900bd1e387465ec4ba57847cb5394 +(cherry picked from commit f505f95d466d4d3348f41dfd93e5c243d15c6c71) +--- + cui/source/dialogs/insdlg.cxx | 16 +++++ + cui/source/inc/insdlg.hxx | 1 + + cui/uiconfig/ui/insertoleobject.ui | 131 +++++++++++++++++++++---------------- + 3 files changed, 90 insertions(+), 58 deletions(-) + +diff --git a/cui/source/dialogs/insdlg.cxx b/cui/source/dialogs/insdlg.cxx +index 47af495..ac404bb 100644 +--- a/cui/source/dialogs/insdlg.cxx ++++ b/cui/source/dialogs/insdlg.cxx +@@ -34,6 +34,7 @@ + + #include "insdlg.hxx" + #include ++#include + #include + + #include +@@ -164,6 +165,7 @@ SvInsertOleDlg::SvInsertOleDlg + get(m_pEdFilepath, "urled"); + get(m_pBtnFilepath, "urlbtn"); + get(m_pCbFilelink, "linktofile"); ++ get(m_pCbAsIcon, "asicon"); + m_pLbObjecttype->SetDoubleClickHdl( LINK( this, SvInsertOleDlg, DoubleClickHdl ) ); + m_pBtnFilepath->SetClickHdl( LINK( this, SvInsertOleDlg, BrowseHdl ) ); + Link aLink( LINK( this, SvInsertOleDlg, RadioHdl ) ); +@@ -188,6 +190,7 @@ void SvInsertOleDlg::dispose() + m_pEdFilepath.clear(); + m_pBtnFilepath.clear(); + m_pCbFilelink.clear(); ++ m_pCbAsIcon.clear(); + InsertObjectDialog_Impl::dispose(); + } + +@@ -328,6 +331,19 @@ short SvInsertOleDlg::Execute() + aErr = aErr.replaceFirst( "%", aFileName ); + ScopedVclPtrInstance(this, aErr)->Execute(); + } ++ else ++ { ++ if (m_pCbAsIcon->IsChecked()) ++ { ++ //something nice here I guess would be to write the filename into ++ //the image with this icon above it ++ Image aImage = SvFileInformationManager::GetImage(aURL, true); ++ SvMemoryStream aTemp; ++ WriteDIBBitmapEx(aImage.GetBitmapEx(), aTemp); ++ m_aIconMetaFile = Sequence(static_cast(aTemp.GetData()), aTemp.Seek(STREAM_SEEK_TO_END)); ++ m_aIconMediaType = "application/x-openoffice-bitmap;windows_formatname=\"Bitmap\""; ++ } ++ } + } + } + +diff --git a/cui/source/inc/insdlg.hxx b/cui/source/inc/insdlg.hxx +index cd6a45a..4b42774 100644 +--- a/cui/source/inc/insdlg.hxx ++++ b/cui/source/inc/insdlg.hxx +@@ -64,6 +64,7 @@ class SvInsertOleDlg : public InsertObjectDialog_Impl + VclPtr m_pEdFilepath; + VclPtr m_pBtnFilepath; + VclPtr m_pCbFilelink; ++ VclPtr m_pCbAsIcon; + const SvObjectServerList* m_pServers; + + css::uno::Sequence< sal_Int8 > m_aIconMetaFile; +diff --git a/cui/uiconfig/ui/insertoleobject.ui b/cui/uiconfig/ui/insertoleobject.ui +index 5ddf229..1aaeecb 100644 +--- a/cui/uiconfig/ui/insertoleobject.ui ++++ b/cui/uiconfig/ui/insertoleobject.ui +@@ -1,5 +1,5 @@ + +- ++ + + + +@@ -12,6 +12,63 @@ + False + vertical + 12 ++ ++ ++ False ++ end ++ ++ ++ gtk-ok ++ True ++ True ++ True ++ True ++ True ++ True ++ ++ ++ False ++ True ++ 0 ++ ++ ++ ++ ++ gtk-cancel ++ True ++ True ++ True ++ True ++ ++ ++ False ++ True ++ 1 ++ ++ ++ ++ ++ gtk-help ++ True ++ True ++ True ++ True ++ ++ ++ False ++ True ++ 2 ++ True ++ ++ ++ ++ ++ False ++ True ++ end ++ 1 ++ ++ + + + 400 +@@ -162,6 +219,21 @@ + 1 + + ++ ++ ++ Display as icon ++ True ++ True ++ False ++ 0 ++ True ++ ++ ++ 0 ++ 2 ++ 2 ++ ++ + + + +@@ -191,63 +263,6 @@ + 0 + + +- +- +- False +- end +- +- +- gtk-ok +- True +- True +- True +- True +- True +- True +- +- +- False +- True +- 0 +- +- +- +- +- gtk-cancel +- True +- True +- True +- True +- +- +- False +- True +- 1 +- +- +- +- +- gtk-help +- True +- True +- True +- True +- +- +- False +- True +- 2 +- True +- +- +- +- +- False +- True +- end +- 1 +- +- + + + +-- +2.9.3 + diff --git a/SOURCES/0002-consider-field-marks-as-text-for-auto-quotes.patch b/SOURCES/0002-consider-field-marks-as-text-for-auto-quotes.patch new file mode 100644 index 0000000..0c6a236 --- /dev/null +++ b/SOURCES/0002-consider-field-marks-as-text-for-auto-quotes.patch @@ -0,0 +1,62 @@ +From a730b43f32390b1408078d7d176f9630c4fd23b6 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Mon, 19 Jun 2017 15:02:17 +0100 +Subject: [PATCH 2/2] consider field marks as text for auto quotes + +Change-Id: I511a13f7785a0de6efaa8439d3f0bff20a1644ed +--- + editeng/qa/unit/core-test.cxx | 17 +++++++++++++++++ + editeng/source/misc/svxacorr.cxx | 2 +- + 2 files changed, 18 insertions(+), 1 deletion(-) + +diff --git a/editeng/qa/unit/core-test.cxx b/editeng/qa/unit/core-test.cxx +index 8048fea..552d713 100644 +--- a/editeng/qa/unit/core-test.cxx ++++ b/editeng/qa/unit/core-test.cxx +@@ -351,6 +351,7 @@ void Test::testAutocorrect() + CPPUNIT_ASSERT_EQUAL_MESSAGE("autocorrect", sExpected, aFoo.getResult()); + } + ++ // don't autocapitalize after a field mark + { + OUString sInput("Test. \x01 test"); + sal_Unicode cNextChar(' '); +@@ -361,6 +362,22 @@ void Test::testAutocorrect() + + CPPUNIT_ASSERT_EQUAL_MESSAGE("autocorrect", sExpected, aFoo.getResult()); + } ++ ++ // consider field contents as text for auto quotes ++ { ++ OUString sInput("T\x01"); ++ sal_Unicode cNextChar('"'); ++ const sal_Unicode EXPECTED[] = { 'T', 0x01, 0x0201d }; ++ OUString sExpected(EXPECTED, SAL_N_ELEMENTS(EXPECTED)); ++ ++ TestAutoCorrDoc aFoo(sInput, LANGUAGE_ENGLISH_US); ++ aAutoCorrect.SetAutoCorrFlag(ChgQuotes, true); ++ aAutoCorrect.DoAutoCorrect(aFoo, sInput, sInput.getLength(), cNextChar, true); ++ fprintf(stderr, "text is %x\n", aFoo.getResult()[aFoo.getResult().getLength() - 1]); ++ ++ CPPUNIT_ASSERT_EQUAL_MESSAGE("autocorrect", sExpected, aFoo.getResult()); ++ } ++ + } + + namespace { +diff --git a/editeng/source/misc/svxacorr.cxx b/editeng/source/misc/svxacorr.cxx +index 6a815bc..99075e8 100644 +--- a/editeng/source/misc/svxacorr.cxx ++++ b/editeng/source/misc/svxacorr.cxx +@@ -1247,7 +1247,7 @@ void SvxAutoCorrect::DoAutoCorrect( SvxAutoCorrDoc& rDoc, const OUString& rTxt, + { + sal_Unicode cPrev; + bool bSttQuote = !nInsPos || +- IsWordDelim( ( cPrev = rTxt[ nInsPos-1 ])) || ++ NonFieldWordDelim( ( cPrev = rTxt[ nInsPos-1 ])) || + lcl_IsInAsciiArr( "([{", cPrev ) || + ( cEmDash && cEmDash == cPrev ) || + ( cEnDash && cEnDash == cPrev ); +-- +2.9.3 + diff --git a/SOURCES/0002-gnome-documents-rework-SfxPickList-as-pimpl.patch b/SOURCES/0002-gnome-documents-rework-SfxPickList-as-pimpl.patch new file mode 100644 index 0000000..9d262c7 --- /dev/null +++ b/SOURCES/0002-gnome-documents-rework-SfxPickList-as-pimpl.patch @@ -0,0 +1,132 @@ +From 24785875d0bbeae58fe362b088238115c961e2c1 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Mon, 8 May 2017 15:35:29 +0100 +Subject: [PATCH 2/5] gnome-documents: rework SfxPickList as pimpl +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +and call impl dtor with SolarMutex held + +Change-Id: I06931ca9ab4384a5e3c255847cf3533ed03b77dc +Reviewed-on: https://gerrit.libreoffice.org/37395 +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara +(cherry picked from commit 53082fcd1b1cccf7ef0c3cb1bef8e747c4e88a61) +--- + sfx2/source/appl/sfxpicklist.cxx | 40 ++++++++++++++++++++++++++++++++-------- + sfx2/source/inc/sfxpicklist.hxx | 27 +++++++++------------------ + 2 files changed, 41 insertions(+), 26 deletions(-) + +diff --git a/sfx2/source/appl/sfxpicklist.cxx b/sfx2/source/appl/sfxpicklist.cxx +index cc3a5cf..7781e9d 100644 +--- a/sfx2/source/appl/sfxpicklist.cxx ++++ b/sfx2/source/appl/sfxpicklist.cxx +@@ -83,7 +83,25 @@ namespace + : public rtl::Static {}; + } + +-void SfxPickList::AddDocumentToPickList( SfxObjectShell* pDocSh ) ++class SfxPickListImpl : public SfxListener ++{ ++private: ++ sal_uInt32 m_nAllowedMenuSize; ++ css::uno::Reference< css::util::XStringWidth > m_xStringLength; ++ ++ /** ++ * Adds the given document to the pick list (recent documents) if it satisfies ++ certain requirements, e.g. being writable. Check implementation for requirement ++ details. ++ */ ++ static void AddDocumentToPickList( SfxObjectShell* pDocShell ); ++ ++public: ++ SfxPickListImpl(sal_uInt32 nMenuSize); ++ virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override; ++}; ++ ++void SfxPickListImpl::AddDocumentToPickList( SfxObjectShell* pDocSh ) + { + if (pDocSh->IsAvoidRecentDocs() || comphelper::LibreOfficeKit::isActive()) + return; +@@ -167,12 +185,23 @@ void SfxPickList::AddDocumentToPickList( SfxObjectShell* pDocSh ) + (pFilter) ? pFilter->GetServiceName() : OUString() ); + } + ++SfxPickList::SfxPickList(sal_uInt32 nAllowedMenuSize) ++ : mxImpl(new SfxPickListImpl(nAllowedMenuSize)) ++{ ++} ++ ++SfxPickList::~SfxPickList() ++{ ++ std::unique_ptr xGuard(comphelper::SolarMutex::get() ? new SolarMutexGuard : nullptr); ++ mxImpl.reset(); ++} ++ + void SfxPickList::ensure() + { + static SfxPickList aUniqueInstance(SvtHistoryOptions().GetSize(ePICKLIST)); + } + +-SfxPickList::SfxPickList( sal_uInt32 nAllowedMenuSize ) : ++SfxPickListImpl::SfxPickListImpl( sal_uInt32 nAllowedMenuSize ) : + m_nAllowedMenuSize( nAllowedMenuSize ) + { + m_xStringLength = new StringLength; +@@ -180,12 +209,7 @@ SfxPickList::SfxPickList( sal_uInt32 nAllowedMenuSize ) : + StartListening( *SfxGetpApp() ); + } + +-SfxPickList::~SfxPickList() +-{ +-} +- +- +-void SfxPickList::Notify( SfxBroadcaster&, const SfxHint& rHint ) ++void SfxPickListImpl::Notify( SfxBroadcaster&, const SfxHint& rHint ) + { + const SfxOpenUrlHint* pOpenUrlHint = dynamic_cast(&rHint); + if ( pOpenUrlHint ) +diff --git a/sfx2/source/inc/sfxpicklist.hxx b/sfx2/source/inc/sfxpicklist.hxx +index b1e86b0..cf257d9 100644 +--- a/sfx2/source/inc/sfxpicklist.hxx ++++ b/sfx2/source/inc/sfxpicklist.hxx +@@ -29,25 +29,16 @@ + + #define PICKLIST_MAXSIZE 100 + +-class SfxPickList : public SfxListener +-{ +- sal_uInt32 m_nAllowedMenuSize; +- css::uno::Reference< css::util::XStringWidth > m_xStringLength; +- +- SfxPickList( sal_uInt32 nMenuSize ); +- virtual ~SfxPickList() override; +- +- /** +- * Adds the given document to the pick list (recent documents) if it satisfies +- certain requirements, e.g. being writable. Check implementation for requirement +- details. +- */ +- static void AddDocumentToPickList( SfxObjectShell* pDocShell ); ++class SfxPickListImpl; + +- public: +- static void ensure(); +- +- virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override; ++class SfxPickList ++{ ++private: ++ std::unique_ptr mxImpl; ++public: ++ SfxPickList(sal_uInt32 nAllowedMenuSize); ++ static void ensure(); ++ ~SfxPickList(); + }; + + #endif // INCLUDED_SFX2_SOURCE_INC_SFXPICKLIST_HXX +-- +2.9.3 + diff --git a/SOURCES/0003-rhbz-1444437-gnome-documents-finalize-may-not-occur-.patch b/SOURCES/0003-rhbz-1444437-gnome-documents-finalize-may-not-occur-.patch new file mode 100644 index 0000000..4ff4135 --- /dev/null +++ b/SOURCES/0003-rhbz-1444437-gnome-documents-finalize-may-not-occur-.patch @@ -0,0 +1,68 @@ +From 19d92c9c354465b40403f6cccd48ce62ea8e7b04 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Fri, 5 May 2017 14:34:51 +0100 +Subject: [PATCH 3/5] rhbz#1444437 gnome-documents finalize may not occur + immediately +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +when LOK Widget is destroyed, it may instead happen during GC of javascript, +like in the in gnome-documents case, but "destroy" will be called promptly. So +close documents and office in destroy, not finalize + +Change-Id: I1dd7b828839894cb2d87f5c087194fe458ca22f0 +Reviewed-on: https://gerrit.libreoffice.org/37398 +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara +(cherry picked from commit c45660df336a640f0f9d4290b881548d25c9db9d) +--- + libreofficekit/source/gtk/lokdocview.cxx | 17 +++++++++++++++-- + 1 file changed, 15 insertions(+), 2 deletions(-) + +diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx +index a08d93e..18985d5 100644 +--- a/libreofficekit/source/gtk/lokdocview.cxx ++++ b/libreofficekit/source/gtk/lokdocview.cxx +@@ -2574,9 +2574,12 @@ static gboolean lok_doc_view_draw (GtkWidget* pWidget, cairo_t* pCairo) + return FALSE; + } + +-static void lok_doc_view_finalize (GObject* object) ++//rhbz#1444437 finalize may not occur immediately when this widget is destroyed ++//it may happen during GC of javascript, e.g. in gnome-documents but "destroy" ++//will be called promptly, so close documents in destroy, not finalize ++static void lok_doc_view_destroy (GtkWidget* widget) + { +- LOKDocView* pDocView = LOK_DOC_VIEW (object); ++ LOKDocView* pDocView = LOK_DOC_VIEW (widget); + LOKDocViewPrivate& priv = getPrivate(pDocView); + + // Ignore notifications sent to this view on shutdown. +@@ -2599,6 +2602,15 @@ static void lok_doc_view_finalize (GObject* object) + if (priv->m_pOffice) + priv->m_pOffice->pClass->destroy (priv->m_pOffice); + } ++ ++ GTK_WIDGET_CLASS (lok_doc_view_parent_class)->destroy (widget); ++} ++ ++static void lok_doc_view_finalize (GObject* object) ++{ ++ LOKDocView* pDocView = LOK_DOC_VIEW (object); ++ LOKDocViewPrivate& priv = getPrivate(pDocView); ++ + delete priv.m_pImpl; + priv.m_pImpl = nullptr; + +@@ -2649,6 +2661,7 @@ static void lok_doc_view_class_init (LOKDocViewClass* pClass) + pWidgetClass->key_press_event = signalKey; + pWidgetClass->key_release_event = signalKey; + pWidgetClass->motion_notify_event = lok_doc_view_signal_motion; ++ pWidgetClass->destroy = lok_doc_view_destroy; + + /** + * LOKDocView:lopath: +-- +2.9.3 + diff --git a/SOURCES/0004-gnome-documents-hold-solarmutex-on-dtor-patch-as-wel.patch b/SOURCES/0004-gnome-documents-hold-solarmutex-on-dtor-patch-as-wel.patch new file mode 100644 index 0000000..26b0adb --- /dev/null +++ b/SOURCES/0004-gnome-documents-hold-solarmutex-on-dtor-patch-as-wel.patch @@ -0,0 +1,38 @@ +From 710bbe401ada2cbcb18f5923635809566e748351 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Mon, 8 May 2017 15:51:46 +0100 +Subject: [PATCH 4/5] gnome-documents: hold solarmutex on dtor patch as well +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Change-Id: I75fe71612116d435606c37185bf55b450425fc25 +Reviewed-on: https://gerrit.libreoffice.org/37396 +Tested-by: Jenkins +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara +(cherry picked from commit 899ffa4c4c66702e2a65f4065cbb7970d0e9c0e2) +--- + include/comphelper/unique_disposing_ptr.hxx | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/include/comphelper/unique_disposing_ptr.hxx b/include/comphelper/unique_disposing_ptr.hxx +index c986b12..324b7ae 100644 +--- a/include/comphelper/unique_disposing_ptr.hxx ++++ b/include/comphelper/unique_disposing_ptr.hxx +@@ -177,6 +177,12 @@ public: + SolarMutexGuard aGuard; + unique_disposing_ptr::reset(p); + } ++ ++ virtual ~unique_disposing_solar_mutex_reset_ptr() override ++ { ++ if (unique_disposing_ptr::get() && comphelper::SolarMutex::get()) ++ reset(); ++ } + }; + + } +-- +2.9.3 + diff --git a/SOURCES/0005-Resolves-rhbz-144437-make-gnome-documents-not-crash-.patch b/SOURCES/0005-Resolves-rhbz-144437-make-gnome-documents-not-crash-.patch new file mode 100644 index 0000000..b4c5ba2 --- /dev/null +++ b/SOURCES/0005-Resolves-rhbz-144437-make-gnome-documents-not-crash-.patch @@ -0,0 +1,208 @@ +From 226b7436988f7a0e4c7d06353c630f10047ac7f6 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Mon, 8 May 2017 15:26:22 +0100 +Subject: [PATCH] Resolves: rhbz#144437 make gnome-documents not crash the + whole time + +accept that once initted that LibreOffice cannot be deinitted and reinited +(without lots of work), but allow the main loop to quit and restart so LOKs +thread can run and exit successfully, new LOK connections will restart the main +loop. + +The buckets of global state continues to be valid the whole time this way + +Change-Id: Ide54c0df2ce4065f7c192ae8c2cedfaaa2b58d72 +--- + desktop/source/app/app.cxx | 2 +- + desktop/source/app/officeipcthread.cxx | 9 +++++++-- + desktop/source/app/officeipcthread.hxx | 2 +- + desktop/source/lib/init.cxx | 5 ++++- + framework/source/services/desktop.cxx | 8 +++++--- + libreofficekit/source/gtk/lokdocview.cxx | 27 ++++++++++++++++++--------- + vcl/source/app/svmain.cxx | 8 ++++++++ + 7 files changed, 44 insertions(+), 17 deletions(-) + +diff --git a/desktop/source/app/app.cxx b/desktop/source/app/app.cxx +index df79f41..dc7ff1e 100644 +--- a/desktop/source/app/app.cxx ++++ b/desktop/source/app/app.cxx +@@ -1998,7 +1998,7 @@ IMPL_LINK_NOARG(Desktop, OpenClients_Impl, void*, void) + // When this server closes down it attempts to recreate the pipe (in RequestHandler::Disable()). + // It's possible that the client has a pending connection request. + // When the IPC thread is not running, this connection locks (because maPipe.accept()) is never called +- RequestHandler::SetReady(); ++ RequestHandler::SetReady(true); + OpenClients(); + + CloseSplashScreen(); +diff --git a/desktop/source/app/officeipcthread.cxx b/desktop/source/app/officeipcthread.cxx +index 7a2fd46..5ea5f41 100644 +--- a/desktop/source/app/officeipcthread.cxx ++++ b/desktop/source/app/officeipcthread.cxx +@@ -939,6 +939,8 @@ void RequestHandler::Disable() + handler->mIpcThread->join(); + handler->mIpcThread.clear(); + } ++ ++ handler->cReady.reset(); + } + } + +@@ -953,12 +955,15 @@ RequestHandler::~RequestHandler() + assert(!mIpcThread.is()); + } + +-void RequestHandler::SetReady() ++void RequestHandler::SetReady(bool bIsReady) + { + osl::MutexGuard g(GetMutex()); + if (pGlobal.is()) + { +- pGlobal->cReady.set(); ++ if (bIsReady) ++ pGlobal->cReady.set(); ++ else ++ pGlobal->cReady.reset(); + } + } + +diff --git a/desktop/source/app/officeipcthread.hxx b/desktop/source/app/officeipcthread.hxx +index 2826aba..2b58ce4 100644 +--- a/desktop/source/app/officeipcthread.hxx ++++ b/desktop/source/app/officeipcthread.hxx +@@ -122,7 +122,7 @@ class RequestHandler: public salhelper::SimpleReferenceObject + static Status Enable(bool ipc); + static void Disable(); + // start dispatching events... +- static void SetReady(); ++ static void SetReady(bool bIsReady); + static void WaitForReady(); + + bool AreRequestsEnabled() const { return mState == State::RequestsEnabled; } +diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx +index 9df6471..14c7bfd 100644 +--- a/desktop/source/lib/init.cxx ++++ b/desktop/source/lib/init.cxx +@@ -2742,10 +2742,12 @@ static void lo_startmain(void*) + { + osl_setThreadName("lo_startmain"); + +- if (GetpApp()) ++ if (comphelper::SolarMutex::get()) + Application::GetSolarMutex().tryToAcquire(); + + soffice_main(); ++ ++ Application::ReleaseSolarMutex(); + } + + static bool bInitialized = false; +@@ -2912,6 +2914,7 @@ static int lo_initialize(LibreOfficeKit* pThis, const char* pAppPath, const char + SAL_INFO("lok", "Enabling RequestHandler"); + RequestHandler::Enable(false); + SAL_INFO("lok", "Starting soffice_main"); ++ RequestHandler::SetReady(false); + pLib->maThread = osl_createThread(lo_startmain, nullptr); + SAL_INFO("lok", "Waiting for RequestHandler"); + RequestHandler::WaitForReady(); +diff --git a/framework/source/services/desktop.cxx b/framework/source/services/desktop.cxx +index 20afab1..6f6412a 100644 +--- a/framework/source/services/desktop.cxx ++++ b/framework/source/services/desktop.cxx +@@ -59,6 +59,7 @@ + #include + + #include ++#include + #include + #include + #include +@@ -228,8 +229,9 @@ sal_Bool SAL_CALL Desktop::terminate() + + // try to close all open frames. + // Allow using of any UI ... because Desktop.terminate() was designed as UI functionality in the past. +- bool bIsEventTestingMode = Application::IsEventTestingModeEnabled(); +- bool bFramesClosed = impl_closeFrames(!bIsEventTestingMode); ++ bool bRestartableMainLoop = Application::IsEventTestingModeEnabled() || ++ comphelper::LibreOfficeKit::isActive(); ++ bool bFramesClosed = impl_closeFrames(!bRestartableMainLoop); + + // Ask normal terminate listener. They could stop terminating the process. + Desktop::TTerminateListenerList lCalledTerminationListener; +@@ -241,7 +243,7 @@ sal_Bool SAL_CALL Desktop::terminate() + return false; + } + +- if (bIsEventTestingMode) ++ if (bRestartableMainLoop) + { + Application::Quit(); + return true; +diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx +index 6d05b7a..5d64d7b 100644 +--- a/libreofficekit/source/gtk/lokdocview.cxx ++++ b/libreofficekit/source/gtk/lokdocview.cxx +@@ -2610,16 +2610,25 @@ static void lok_doc_view_destroy (GtkWidget* widget) + + aGuard.unlock(); + +- if (priv->m_pDocument && priv->m_pDocument->pClass->getViewsCount(priv->m_pDocument) > 1) +- { +- priv->m_pDocument->pClass->destroyView(priv->m_pDocument, priv->m_nViewId); +- } +- else ++ if (priv->m_pDocument) + { +- if (priv->m_pDocument) +- priv->m_pDocument->pClass->destroy (priv->m_pDocument); +- if (priv->m_pOffice) +- priv->m_pOffice->pClass->destroy (priv->m_pOffice); ++ if (priv->m_pDocument->pClass->getViewsCount(priv->m_pDocument) > 1) ++ { ++ priv->m_pDocument->pClass->destroyView(priv->m_pDocument, priv->m_nViewId); ++ } ++ else ++ { ++ if (priv->m_pDocument) ++ { ++ priv->m_pDocument->pClass->destroy (priv->m_pDocument); ++ priv->m_pDocument = nullptr; ++ } ++ if (priv->m_pOffice) ++ { ++ priv->m_pOffice->pClass->destroy (priv->m_pOffice); ++ priv->m_pOffice = nullptr; ++ } ++ } + } + + GTK_WIDGET_CLASS (lok_doc_view_parent_class)->destroy (widget); +diff --git a/vcl/source/app/svmain.cxx b/vcl/source/app/svmain.cxx +index 2cd6137..a5f7807 100644 +--- a/vcl/source/app/svmain.cxx ++++ b/vcl/source/app/svmain.cxx +@@ -84,6 +84,7 @@ + #include + #include + ++#include + #include + #include + +@@ -361,6 +362,13 @@ VCLUnoWrapperDeleter::disposing(lang::EventObject const& /* rSource */) + + void DeInitVCL() + { ++ //rhbz#1444437, when using LibreOffice like a library you can't realistically ++ //tear everything down and recreate them on the next call, there's too many ++ //(c++) singletons that point to stuff that gets deleted during shutdown ++ //which won't be recreated on restart. ++ if (comphelper::LibreOfficeKit::isActive()) ++ return; ++ + { + SolarMutexReleaser r; // unblock threads blocked on that so we can join + ::comphelper::JoinAsyncEventNotifiers(); +-- +2.13.0 + diff --git a/SOURCES/CVE-2019-9848.patch b/SOURCES/CVE-2019-9848.patch new file mode 100644 index 0000000..59ec30a --- /dev/null +++ b/SOURCES/CVE-2019-9848.patch @@ -0,0 +1,47 @@ +From 3dd024a28a98a9d4b4efc3c7ec6acaa94d2b25fd Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Fri, 7 Jun 2019 14:04:07 +0100 +Subject: [PATCH] explictly exclude LibreLogo from XScript usage + +Change-Id: I567647f0e2f8b82e4ef2995c673abe82f4564228 +Reviewed-on: https://gerrit.libreoffice.org/73708 +Tested-by: Jenkins +Reviewed-by: Stephan Bergmann +--- + sfx2/source/doc/objmisc.cxx | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +diff --git a/sfx2/source/doc/objmisc.cxx b/sfx2/source/doc/objmisc.cxx +index e245800f2fec..beea5170e44d 100644 +--- a/sfx2/source/doc/objmisc.cxx ++++ b/sfx2/source/doc/objmisc.cxx +@@ -1340,6 +1340,16 @@ namespace + } + } + ++namespace { ++ ++// don't allow LibreLogo to be used with our mouseover/etc dom-alike events ++bool UnTrustedScript(const OUString& rScriptURL) ++{ ++ return rScriptURL.startsWithIgnoreAsciiCase("vnd.sun.star.script:LibreLogo"); ++} ++ ++} ++ + ErrCode SfxObjectShell::CallXScript( const Reference< XInterface >& _rxScriptContext, const OUString& _rScriptURL, + const Sequence< Any >& aParams, Any& aRet, Sequence< sal_Int16 >& aOutParamIndex, Sequence< Any >& aOutParam, bool bRaiseError, const css::uno::Any* pCaller ) + { +@@ -1352,6 +1362,9 @@ ErrCode SfxObjectShell::CallXScript( const Reference< XInterface >& _rxScriptCon + if ( bIsDocumentScript && !lcl_isScriptAccessAllowed_nothrow( _rxScriptContext ) ) + return ERRCODE_IO_ACCESSDENIED; + ++ if ( UnTrustedScript(_rScriptURL) ) ++ return ERRCODE_IO_ACCESSDENIED; ++ + bool bCaughtException = false; + Any aException; + try +-- +2.21.0 + diff --git a/SOURCES/CVE-2019-9849.patch b/SOURCES/CVE-2019-9849.patch new file mode 100644 index 0000000..902cad4 --- /dev/null +++ b/SOURCES/CVE-2019-9849.patch @@ -0,0 +1,166 @@ +From 5d0796bc14c43fa6c3e1417046e241db89306fed Mon Sep 17 00:00:00 2001 +From: Stephan Bergmann +Date: Fri, 7 Jun 2019 09:28:12 +0200 +Subject: [PATCH] More uses of referer URL with SvxBrushItem + +Reviewed-on: https://gerrit.libreoffice.org/73643 +Tested-by: Jenkins +Reviewed-by: Stephan Bergmann +(cherry picked from commit b518882de8213ef71a8003f95fbdf7689069c06d) +Conflicts: + sw/source/core/text/porfld.cxx + sw/source/core/unocore/unosett.cxx + +Change-Id: I04b524784df4ef453d8b1feec13b62f183a17e23 +Reviewed-on: https://gerrit.libreoffice.org/73860 +Tested-by: Jenkins +Reviewed-by: Miklos Vajna +--- + sw/inc/unosett.hxx | 2 +- + sw/source/core/text/porfld.cxx | 4 ++-- + sw/source/core/text/porfld.hxx | 1 + + sw/source/core/text/txtfld.cxx | 12 +++++++++++- + sw/source/core/unocore/unosett.cxx | 15 ++++++++++++--- + .../uibase/config/StoredChapterNumbering.cxx | 2 +- + 6 files changed, 28 insertions(+), 8 deletions(-) + +diff --git a/sw/inc/unosett.hxx b/sw/inc/unosett.hxx +index 6386f4f..e90797e 100644 +--- a/sw/inc/unosett.hxx ++++ b/sw/inc/unosett.hxx +@@ -208,7 +208,7 @@ public: + + static css::uno::Sequence GetPropertiesForNumFormat( + const SwNumFormat& rFormat, OUString const& rCharFormatName, +- OUString const* pHeadingStyleName); ++ OUString const* pHeadingStyleName, OUString const & referer); + static void SetPropertiesToNumFormat( + SwNumFormat & aFormat, + OUString & rCharStyleName, +diff --git a/sw/source/core/text/porfld.cxx b/sw/source/core/text/porfld.cxx +index 4f24e63..ba60112 100644 +--- a/sw/source/core/text/porfld.cxx ++++ b/sw/source/core/text/porfld.cxx +@@ -756,7 +756,7 @@ SwBulletPortion::SwBulletPortion( const sal_Unicode cBullet, + SwGrfNumPortion::SwGrfNumPortion( + SwFrame*, + const OUString& rGraphicFollowedBy, +- const SvxBrushItem* pGrfBrush, ++ const SvxBrushItem* pGrfBrush, OUString const & referer, + const SwFormatVertOrient* pGrfOrient, const Size& rGrfSize, + const bool bLft, const bool bCntr, const sal_uInt16 nMinDst, + const bool bLabelAlignmentPosAndSpaceModeActive ) : +@@ -770,7 +770,7 @@ SwGrfNumPortion::SwGrfNumPortion( + if( pGrfBrush ) + { + *pBrush = *pGrfBrush; +- const Graphic* pGraph = pGrfBrush->GetGraphic(); ++ const Graphic* pGraph = pGrfBrush->GetGraphic(referer); + if( pGraph ) + SetAnimated( pGraph->IsAnimated() ); + else +diff --git a/sw/source/core/text/porfld.hxx b/sw/source/core/text/porfld.hxx +index 740c2d9..d648a0f 100644 +--- a/sw/source/core/text/porfld.hxx ++++ b/sw/source/core/text/porfld.hxx +@@ -170,6 +170,7 @@ public: + SwGrfNumPortion( SwFrame *pFrame, + const OUString& rGraphicFollowedBy, + const SvxBrushItem* pGrfBrush, ++ OUString const & referer, + const SwFormatVertOrient* pGrfOrient, + const Size& rGrfSize, + const bool bLeft, +diff --git a/sw/source/core/text/txtfld.cxx b/sw/source/core/text/txtfld.cxx +index 239e2a3..b6f2c5e 100644 +--- a/sw/source/core/text/txtfld.cxx ++++ b/sw/source/core/text/txtfld.cxx +@@ -52,6 +52,7 @@ + #include "flddat.hxx" + #include "fmtautofmt.hxx" + #include ++#include + #include + + static bool lcl_IsInBody( SwFrame *pFrame ) +@@ -478,9 +479,18 @@ SwNumberPortion *SwTextFormatter::NewNumberPortion( SwTextFormatInfo &rInf ) con + + if( SVX_NUM_BITMAP == rNumFormat.GetNumberingType() ) + { ++ OUString referer; ++ if (auto const sh1 = rInf.GetVsh()) { ++ if (auto const doc = sh1->GetDoc()) { ++ auto const sh2 = doc->GetPersist(); ++ if (sh2 != nullptr && sh2->HasName()) { ++ referer = sh2->GetMedium()->GetName(); ++ } ++ } ++ } + pRet = new SwGrfNumPortion( const_cast(GetTextFrame()), + pTextNd->GetLabelFollowedBy(), +- rNumFormat.GetBrush(), ++ rNumFormat.GetBrush(), referer, + rNumFormat.GetGraphicOrientation(), + rNumFormat.GetGraphicSize(), + bLeft, bCenter, nMinDist, +diff --git a/sw/source/core/unocore/unosett.cxx b/sw/source/core/unocore/unosett.cxx +index 716ab9d..13dc05f 100644 +--- a/sw/source/core/unocore/unosett.cxx ++++ b/sw/source/core/unocore/unosett.cxx +@@ -53,6 +53,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -1342,13 +1343,21 @@ uno::Sequence SwXNumberingRules::GetNumberingRuleByIndex( + SwStyleNameMapper::FillProgName(sValue, aUString, SwGetPoolIdFromName::TxtColl, true); + } + +- return GetPropertiesForNumFormat(rFormat, CharStyleName, (pDocShell) ? & aUString : nullptr); ++ OUString referer; ++ if (pDoc != nullptr) { ++ auto const sh = pDoc->GetPersist(); ++ if (sh != nullptr && sh->HasName()) { ++ referer = sh->GetMedium()->GetName(); ++ } ++ } ++ return GetPropertiesForNumFormat( ++ rFormat, CharStyleName, (pDocShell) ? & aUString : nullptr, referer); + + } + + uno::Sequence SwXNumberingRules::GetPropertiesForNumFormat( + const SwNumFormat& rFormat, OUString const& rCharFormatName, +- OUString const*const pHeadingStyleName) ++ OUString const*const pHeadingStyleName, OUString const & referer) + { + bool bChapterNum = pHeadingStyleName != nullptr; + +@@ -1480,7 +1489,7 @@ uno::Sequence SwXNumberingRules::GetPropertiesForNumFormat + //graphicbitmap + const Graphic* pGraphic = nullptr; + if(pBrush ) +- pGraphic = pBrush->GetGraphic(); ++ pGraphic = pBrush->GetGraphic(referer); + if(pGraphic) + { + uno::Reference xBmp = VCLUnoHelper::CreateBitmap( pGraphic->GetBitmapEx() ); +diff --git a/sw/source/uibase/config/StoredChapterNumbering.cxx b/sw/source/uibase/config/StoredChapterNumbering.cxx +index 2464878..a56aeeb 100644 +--- a/sw/source/uibase/config/StoredChapterNumbering.cxx ++++ b/sw/source/uibase/config/StoredChapterNumbering.cxx +@@ -135,7 +135,7 @@ public: + OUString dummy; // pass in empty HeadingStyleName - can't import anyway + uno::Sequence const ret( + SwXNumberingRules::GetPropertiesForNumFormat( +- *pNumFormat, *pCharStyleName, &dummy)); ++ *pNumFormat, *pCharStyleName, &dummy, "")); + return uno::makeAny(ret); + } + +-- +2.20.1 + diff --git a/SOURCES/CVE-2019-9850.patch b/SOURCES/CVE-2019-9850.patch new file mode 100644 index 0000000..71209d6 --- /dev/null +++ b/SOURCES/CVE-2019-9850.patch @@ -0,0 +1,68 @@ +From 143eedd298113bb20c2807baa49a4c83c2cef70b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Fri, 26 Jul 2019 13:25:31 +0100 +Subject: [PATCH 1/3] decode url escape codes and check each path segment + +Change-Id: Ie8f7cef912e8dacbc2a0bca73534a7a242a53ca1 +Reviewed-on: https://gerrit.libreoffice.org/76378 +Reviewed-by: Stephan Bergmann +Tested-by: Jenkins +(cherry picked from commit 7942929685fafb0f9c82feb8da7279e5103c87f0) +Reviewed-on: https://gerrit.libreoffice.org/76451 +Reviewed-by: Thorsten Behrens +Tested-by: Thorsten Behrens +--- + sfx2/source/doc/objmisc.cxx | 30 +++++++++++++++++++++++++++++- + 1 file changed, 29 insertions(+), 1 deletion(-) + +diff --git a/sfx2/source/doc/objmisc.cxx b/sfx2/source/doc/objmisc.cxx +index 8594e9522e48..7e9288524b34 100644 +--- a/sfx2/source/doc/objmisc.cxx ++++ b/sfx2/source/doc/objmisc.cxx +@@ -41,6 +41,8 @@ + #include + #include + #include ++#include ++#include + #include + + #include +@@ -1351,7 +1353,33 @@ namespace { + // don't allow LibreLogo to be used with our mouseover/etc dom-alike events + bool UnTrustedScript(const OUString& rScriptURL) + { +- return rScriptURL.startsWithIgnoreAsciiCase("vnd.sun.star.script:LibreLogo"); ++ if (!rScriptURL.startsWith("vnd.sun.star.script:")) ++ return false; ++ ++ // ensure URL Escape Codes are decoded ++ css::uno::Reference uri( ++ css::uri::UriReferenceFactory::create(comphelper::getProcessComponentContext())->parse(rScriptURL)); ++ css::uno::Reference sfUri(uri, css::uno::UNO_QUERY); ++ ++ if (!sfUri.is()) ++ return false; ++ ++ // pyuno encodes path separator as | ++ OUString sScript = sfUri->getName().replace('|', '/'); ++ ++ // check if any path portion matches LibreLogo and ban it if it does ++ sal_Int32 nIndex = 0; ++ do ++ { ++ OUString aToken = sScript.getToken(0, '/', nIndex); ++ if (aToken.startsWithIgnoreAsciiCase("LibreLogo")) ++ { ++ return true; ++ } ++ } ++ while (nIndex >= 0); ++ ++ return false; + } + + } +-- +2.21.0 + diff --git a/SOURCES/CVE-2019-9851.patch b/SOURCES/CVE-2019-9851.patch new file mode 100644 index 0000000..82736c7 --- /dev/null +++ b/SOURCES/CVE-2019-9851.patch @@ -0,0 +1,99 @@ +From 292fe2f32df0e9096e63383eb45924eceb2179db Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Tue, 23 Jul 2019 15:31:05 +0100 +Subject: [PATCH 2/3] expand LibreLogo check to global events +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Reviewed-on: https://gerrit.libreoffice.org/76189 +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara +(cherry picked from commit 4a66c7eda6ccde26a42c4e31725248c59940255d) + +Change-Id: I7f436983ba0eb4b76b02d08ee52626e54b103d5f +Reviewed-on: https://gerrit.libreoffice.org/76305 +Reviewed-by: Thorsten Behrens +Tested-by: Thorsten Behrens +--- + include/sfx2/objsh.hxx | 2 ++ + sfx2/source/doc/objmisc.cxx | 6 +----- + sfx2/source/notify/eventsupplier.cxx | 18 ++++++++++++------ + 3 files changed, 15 insertions(+), 11 deletions(-) + +diff --git a/include/sfx2/objsh.hxx b/include/sfx2/objsh.hxx +index d04758567c80..ed09fc6e2acb 100644 +--- a/include/sfx2/objsh.hxx ++++ b/include/sfx2/objsh.hxx +@@ -404,6 +404,8 @@ public: + */ + bool AdjustMacroMode(); + ++ static bool UnTrustedScript(const OUString& rScriptURL); ++ + SvKeyValueIterator* GetHeaderAttributes(); + void ClearHeaderAttributesForSourceViewHack(); + void SetHeaderAttributesForSourceViewHack(); +diff --git a/sfx2/source/doc/objmisc.cxx b/sfx2/source/doc/objmisc.cxx +index 7e9288524b34..9b82742302ab 100644 +--- a/sfx2/source/doc/objmisc.cxx ++++ b/sfx2/source/doc/objmisc.cxx +@@ -1348,10 +1348,8 @@ namespace + } + } + +-namespace { +- + // don't allow LibreLogo to be used with our mouseover/etc dom-alike events +-bool UnTrustedScript(const OUString& rScriptURL) ++bool SfxObjectShell::UnTrustedScript(const OUString& rScriptURL) + { + if (!rScriptURL.startsWith("vnd.sun.star.script:")) + return false; +@@ -1382,8 +1380,6 @@ bool UnTrustedScript(const OUString& rScriptURL) + return false; + } + +-} +- + ErrCode SfxObjectShell::CallXScript( const Reference< XInterface >& _rxScriptContext, const OUString& _rScriptURL, + const Sequence< Any >& aParams, Any& aRet, Sequence< sal_Int16 >& aOutParamIndex, Sequence< Any >& aOutParam, bool bRaiseError, const css::uno::Any* pCaller ) + { +diff --git a/sfx2/source/notify/eventsupplier.cxx b/sfx2/source/notify/eventsupplier.cxx +index 78667a1d8036..2656e9c213ec 100644 +--- a/sfx2/source/notify/eventsupplier.cxx ++++ b/sfx2/source/notify/eventsupplier.cxx +@@ -207,18 +207,24 @@ void SfxEvents_Impl::Execute( uno::Any const & aEventData, const document::Docum + else if (aType == "Service" || + aType == "Script") + { +- if ( !aScript.isEmpty() ) ++ bool bAllowed = false; ++ util::URL aURL; ++ if (!aScript.isEmpty()) + { +- SfxViewFrame* pView = pDoc ? +- SfxViewFrame::GetFirst( pDoc ) : +- SfxViewFrame::Current(); +- + uno::Reference < util::XURLTransformer > xTrans( util::URLTransformer::create( ::comphelper::getProcessComponentContext() ) ); + +- util::URL aURL; + aURL.Complete = aScript; + xTrans->parseStrict( aURL ); + ++ bAllowed = !SfxObjectShell::UnTrustedScript(aURL.Complete); ++ } ++ ++ if (bAllowed) ++ { ++ SfxViewFrame* pView = pDoc ? ++ SfxViewFrame::GetFirst( pDoc ) : ++ SfxViewFrame::Current(); ++ + uno::Reference + < frame::XDispatchProvider > xProv; + +-- +2.21.0 + diff --git a/SOURCES/CVE-2019-9852.patch b/SOURCES/CVE-2019-9852.patch new file mode 100644 index 0000000..2333556 --- /dev/null +++ b/SOURCES/CVE-2019-9852.patch @@ -0,0 +1,39 @@ +From 3a827091172b9ce3982323b838ed55d896d585d4 Mon Sep 17 00:00:00 2001 +From: Stephan Bergmann +Date: Sat, 3 Aug 2019 16:37:48 +0100 +Subject: [PATCH 3/3] keep name percent-encoded +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Change-Id: I470c4b24192c3e3c9b556a9bbb3b084359e0033b +Reviewed-on: https://gerrit.libreoffice.org/77006 +Tested-by: Jenkins +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara +(cherry picked from commit 315c51731384230194af26b86a976bf5d06c9dcc) +Reviewed-on: https://gerrit.libreoffice.org/77090 +Reviewed-by: Thorsten Behrens +Tested-by: Thorsten Behrens +--- + scripting/source/pyprov/pythonscript.py | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/scripting/source/pyprov/pythonscript.py b/scripting/source/pyprov/pythonscript.py +index f1b2bfc75ee3..64e1337d642e 100644 +--- a/scripting/source/pyprov/pythonscript.py ++++ b/scripting/source/pyprov/pythonscript.py +@@ -219,7 +219,9 @@ class MyUriHelper: + + # path to the .py file + "$functionname, arguments, etc + xStorageUri = self.m_uriRefFac.parse(scriptURI) +- sStorageUri = xStorageUri.getName().replace( "|", "/" ); ++ # getName will apply url-decoding to the name, so encode back ++ sStorageUri = xStorageUri.getName().replace("%", "%25") ++ sStorageUri = sStorageUri.replace( "|", "/" ) + + # path to the .py file, relative to the base + sFileUri = sStorageUri[0:sStorageUri.find("$")] +-- +2.21.0 + diff --git a/SOURCES/CVE-2019-9854.patch b/SOURCES/CVE-2019-9854.patch new file mode 100644 index 0000000..0d7d3c4 --- /dev/null +++ b/SOURCES/CVE-2019-9854.patch @@ -0,0 +1,86 @@ +From f107a8c90168124462ddd00db015810081d4be2f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Mon, 12 Aug 2019 20:32:54 +0100 +Subject: [PATCH 1/2] construct final url from parsed output +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Change-Id: Ifd733625a439685ad307603eb2b00bf463eb9ca9 +Reviewed-on: https://gerrit.libreoffice.org/77373 +Tested-by: Jenkins +Reviewed-by: Stephan Bergmann +(cherry picked from commit 87959e5deea6d33cd35dbb3b8423056f9566710e) +Reviewed-on: https://gerrit.libreoffice.org/77377 +(cherry picked from commit c03acb9b8a97254cfcf7c45ef920b93b7f1dd344) + +an absolute uri is invalid input + +Change-Id: I392be4282be8ed67e3451b28d2c9f22acd4c87fc +Reviewed-on: https://gerrit.libreoffice.org/77564 +Reviewed-by: Stephan Bergmann +Tested-by: Stephan Bergmann +(cherry picked from commit 3c076e54f736980e208f5c27ecf179aa90aea103) +Reviewed-on: https://gerrit.libreoffice.org/77572 +Tested-by: Jenkins +(cherry picked from commit 5445f7ffd09e891b220dabb19cd013bcf591fc08) + +Improve check for absolute URI + +Change-Id: I4dee44832107f72f8f3fb68554428dc1e646c346 +Reviewed-on: https://gerrit.libreoffice.org/77706 +Tested-by: Jenkins +Reviewed-by: Stephan Bergmann +(cherry picked from commit c79efeb66f7951305d0334bc288aee1c571a8728) +Reviewed-on: https://gerrit.libreoffice.org/77724 +Reviewed-by: Caolán McNamara +Tested-by: Caolán McNamara +(cherry picked from commit 52f7aa318722bd17c77ee5c4fa8307936e7b53af) +--- + scripting/source/pyprov/pythonscript.py | 17 +++++++++++++++-- + 1 file changed, 15 insertions(+), 2 deletions(-) + +diff --git a/scripting/source/pyprov/pythonscript.py b/scripting/source/pyprov/pythonscript.py +index 64e1337d642e..acb6184bf437 100644 +--- a/scripting/source/pyprov/pythonscript.py ++++ b/scripting/source/pyprov/pythonscript.py +@@ -224,13 +224,24 @@ class MyUriHelper: + sStorageUri = sStorageUri.replace( "|", "/" ) + + # path to the .py file, relative to the base +- sFileUri = sStorageUri[0:sStorageUri.find("$")] ++ funcNameStart = sStorageUri.find("$") ++ if funcNameStart != -1: ++ sFileUri = sStorageUri[0:funcNameStart] ++ sFuncName = sStorageUri[funcNameStart+1:] ++ else: ++ sFileUri = sStorageUri ++ + xFileUri = self.m_uriRefFac.parse(sFileUri) + if not xFileUri: + message = "pythonscript: invalid relative uri '" + sFileUri+ "'" + log.debug( message ) + raise RuntimeException( message ) + ++ if not xFileUri.hasRelativePath(): ++ message = "pythonscript: an absolute uri is invalid '" + sFileUri+ "'" ++ log.debug( message ) ++ raise RuntimeException( message ) ++ + # absolute path to the .py file + xAbsScriptUri = self.m_uriRefFac.makeAbsolute(xBaseUri, xFileUri, True, RETAIN) + sAbsScriptUri = xAbsScriptUri.getUriReference() +@@ -241,7 +252,9 @@ class MyUriHelper: + log.debug( message ) + raise RuntimeException( message ) + +- ret = sBaseUri + sStorageUri ++ ret = sAbsScriptUri ++ if funcNameStart != -1: ++ ret = ret + "$" + sFuncName + log.debug( "converting scriptURI="+scriptURI + " to storageURI=" + ret ) + return ret + except UnoException as e: +-- +2.21.0 + diff --git a/SOURCES/CVE-2019-9855.patch b/SOURCES/CVE-2019-9855.patch new file mode 100644 index 0000000..75f64eb --- /dev/null +++ b/SOURCES/CVE-2019-9855.patch @@ -0,0 +1,33 @@ +From 1686c4273b8e0b8218853669e50d4bf405525dde Mon Sep 17 00:00:00 2001 +From: Stephan Bergmann +Date: Mon, 26 Aug 2019 10:18:09 +0200 +Subject: [PATCH 2/2] Improve check + +Change-Id: I8280a81eef2ced0ff0ace51ea9f094421abafe13 +Reviewed-on: https://gerrit.libreoffice.org/78108 +Tested-by: Jenkins +Reviewed-by: Stephan Bergmann +(cherry picked from commit 761e6dd25782420bf06e4a2ff3205a79b6cbb136) +Reviewed-on: https://gerrit.libreoffice.org/78129 +Reviewed-by: Michael Stahl +(cherry picked from commit ffad51e9e625a22f1efab3da7886baf4134b444f) +--- + sfx2/source/doc/objmisc.cxx | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/sfx2/source/doc/objmisc.cxx b/sfx2/source/doc/objmisc.cxx +index 9b82742302ab..4f2a05909a74 100644 +--- a/sfx2/source/doc/objmisc.cxx ++++ b/sfx2/source/doc/objmisc.cxx +@@ -1370,7 +1370,7 @@ bool SfxObjectShell::UnTrustedScript(const OUString& rScriptURL) + do + { + OUString aToken = sScript.getToken(0, '/', nIndex); +- if (aToken.startsWithIgnoreAsciiCase("LibreLogo")) ++ if (aToken.startsWithIgnoreAsciiCase("LibreLogo") || aToken.indexOf('~') != -1) + { + return true; + } +-- +2.21.0 + diff --git a/SOURCES/libreoffice-multiliblauncher.sh b/SOURCES/libreoffice-multiliblauncher.sh new file mode 100644 index 0000000..05c9d3f --- /dev/null +++ b/SOURCES/libreoffice-multiliblauncher.sh @@ -0,0 +1,16 @@ +#!/bin/sh +OOO_ARCH=$(uname -m) +case $OOO_ARCH in + x86_64 | s390x | sparc64 | aarch64) + OOO_LIB_DIR="/usr/lib64" + SECONDARY_LIB_DIR="/usr/lib" + ;; + * ) + OOO_LIB_DIR="/usr/lib" + SECONDARY_LIB_DIR="/usr/lib64" + ;; +esac +if [ ! -x $OOO_LIB_DIR/BRAND/program/LAUNCHER ]; then + OOO_LIB_DIR="$SECONDARY_LIB_DIR" +fi +exec $OOO_LIB_DIR/BRAND/program/LAUNCHER "$@" diff --git a/SPECS/libreoffice.spec b/SPECS/libreoffice.spec new file mode 100644 index 0000000..5a7aef8 --- /dev/null +++ b/SPECS/libreoffice.spec @@ -0,0 +1,3550 @@ +# download path contains version without the last (fourth) digit +%define libo_version 5.3.6 +# 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. +%define libo_prerelease %{nil} +# Should contain any suffix of release tarball name, e.g., -buildfix1. +%define libo_buildfix %{nil} +# rhbz#715152 state vendor +%if 0%{?rhel} +%define vendoroption --with-vendor="Red Hat, Inc." +%define libo_use_python3 %{nil} +%define libo_python python +%define libo_python_sitearch %{python_sitearch} +%endif +%if 0%{?fedora} +%define libo_use_python3 1 +%define libo_python python3 +%define libo_python_sitearch %{python3_sitearch} +%define vendoroption --with-vendor="The Fedora Project" +%endif +# rhbz#465664 jar-repacking breaks help by reordering META-INF/MANIFEST.MF +%define __jar_repack %{nil} +# make it easier to download sources from pre-release site +%if 0%{?rebase} +%define source_url http://dev-builds.libreoffice.org/pre-releases/src +%else +%define source_url http://download.documentfoundation.org/libreoffice/src/%{libo_version} +%endif +# URL for external projects' tarballs +%define external_url http://dev-www.libreoffice.org/src/ +%if 0%{?fedora} +%global weak_deps 1 +%global file_triggers 1 +%endif +%global girapiversion 0.1 + +# get english only and no-langpacks for a faster smoketest build +# fedpkg compile/install/local/mockbuild does not handle --without ATM, +# so it is necessary to change this to bcond_with to achieve the same +# 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}.1 +Release: 23%{?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 and CC0 +URL: http://www.libreoffice.org/ + +Source0: %{source_url}/libreoffice-%{version}%{?libo_prerelease}%{?libo_buildfix}.tar.xz +Source1: %{source_url}/libreoffice-help-%{version}%{?libo_prerelease}%{?libo_buildfix}.tar.xz +Source2: %{source_url}/libreoffice-translations-%{version}%{?libo_prerelease}%{?libo_buildfix}.tar.xz +%if 0%{?rebase} +Source3: %{source_url}/libreoffice-%{version}%{?libo_prerelease}%{?libo_buildfix}.tar.xz.asc +Source4: %{source_url}/libreoffice-help-%{version}%{?libo_prerelease}%{?libo_buildfix}.tar.xz.asc +Source5: %{source_url}/libreoffice-translations-%{version}%{?libo_prerelease}%{?libo_buildfix}.tar.xz.asc +%endif +Source6: http://dev-www.libreoffice.org/extern/185d60944ea767075d27247c3162b3bc-unowinreg.dll +Source7: libreoffice-multiliblauncher.sh +Source8: %{external_url}/a7983f859eafb2677d7ff386a023bc40-xsltml_2.1.2.zip +Source9: %{external_url}/86b1daaa438f5a7bea9a52d7b9799ac0-xmlsec1-1.2.23.tar.gz +Source10: %{external_url}/798b2ffdc8bcfe7bca2cf92b62caf685-rhino1_5R5.zip +Source11: %{external_url}/35c94d2df8893241173de1d16b6034c0-swingExSrc.zip +#Unfortunately later versions of hsqldb changed the file format, so if we use a later version we loose +#backwards compatability. +Source12: %{external_url}/17410483b5b5f267aa18b7e00b65e6e0-hsqldb_1_8_0.zip +%global bundling_options %{?bundling_options} --without-system-hsqldb + +%if 0%{?fedora} +Source40: %{external_url}/4b87018f7fff1d054939d19920b751a0-collada2gltf-master-cb1d97788a.tar.bz2 +%endif + +# symbolic icons +Source42: https://raw.githubusercontent.com/gnome-design-team/gnome-icons/master/apps-symbolic/Adwaita/scalable/apps/libreoffice-base-symbolic.svg +Source43: https://raw.githubusercontent.com/gnome-design-team/gnome-icons/master/apps-symbolic/Adwaita/scalable/apps/libreoffice-calc-symbolic.svg +Source44: https://raw.githubusercontent.com/gnome-design-team/gnome-icons/master/apps-symbolic/Adwaita/scalable/apps/libreoffice-draw-symbolic.svg +Source45: https://raw.githubusercontent.com/gnome-design-team/gnome-icons/master/apps-symbolic/Adwaita/scalable/apps/libreoffice-impress-symbolic.svg +Source46: https://raw.githubusercontent.com/gnome-design-team/gnome-icons/master/apps-symbolic/Adwaita/scalable/apps/libreoffice-main-symbolic.svg +Source47: https://raw.githubusercontent.com/gnome-design-team/gnome-icons/master/apps-symbolic/Adwaita/scalable/apps/libreoffice-math-symbolic.svg +Source48: https://raw.githubusercontent.com/gnome-design-team/gnome-icons/master/apps-symbolic/Adwaita/scalable/apps/libreoffice-writer-symbolic.svg + +%if 0%{?rhel} +Source100: %{external_url}/0168229624cfac409e766913506961a8-ucpp-1.3.2.tar.gz +%global bundling_options %{?bundling_options} --without-system-ucpp +%endif + +# build tools +BuildRequires: autoconf +BuildRequires: automake +BuildRequires: bc +BuildRequires: binutils +BuildRequires: bison +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(Digest::MD5) +%if 0%{?fedora} +BuildRequires: libappstream-glib +BuildRequires: ucpp +%endif +BuildRequires: zip + +# libs / headers - common +BuildRequires: %{libo_python}-devel +BuildRequires: boost-devel +BuildRequires: cups-devel +BuildRequires: expat-devel +BuildRequires: fontpackages-devel +BuildRequires: glm-devel +BuildRequires: hyphen-devel +BuildRequires: libicu-devel +BuildRequires: libjpeg-turbo-devel +BuildRequires: lpsolve-devel +BuildRequires: openldap-devel +BuildRequires: pam-devel +BuildRequires: pkgconfig(bluez) +BuildRequires: pkgconfig(cppunit) +BuildRequires: pkgconfig(dbus-glib-1) +BuildRequires: pkgconfig(dconf) +BuildRequires: pkgconfig(epoxy) +BuildRequires: pkgconfig(evolution-data-server-1.2) +BuildRequires: pkgconfig(freetype2) +BuildRequires: pkgconfig(glew) >= 1.10.0 +BuildRequires: pkgconfig(glu) +BuildRequires: pkgconfig(gobject-introspection-1.0) +BuildRequires: pkgconfig(graphite2) +BuildRequires: pkgconfig(gstreamer-1.0) +BuildRequires: pkgconfig(gstreamer-plugins-base-1.0) +BuildRequires: pkgconfig(gtk+-2.0) +BuildRequires: pkgconfig(gtk+-3.0) +BuildRequires: pkgconfig(harfbuzz) +BuildRequires: pkgconfig(hunspell) +BuildRequires: pkgconfig(ice) +BuildRequires: pkgconfig(lcms2) +BuildRequires: pkgconfig(libabw-0.1) +BuildRequires: pkgconfig(libcdr-0.1) +BuildRequires: pkgconfig(libclucene-core) +BuildRequires: pkgconfig(libcmis-0.5) +BuildRequires: pkgconfig(libcurl) +BuildRequires: pkgconfig(libetonyek-0.1) +BuildRequires: pkgconfig(libexttextcat) +BuildRequires: pkgconfig(libfreehand-0.1) +BuildRequires: pkgconfig(libidn) +BuildRequires: pkgconfig(liblangtag) +BuildRequires: pkgconfig(libmspub-0.1) +BuildRequires: pkgconfig(libmwaw-0.3) +BuildRequires: pkgconfig(libodfgen-0.1) +BuildRequires: pkgconfig(liborcus-0.12) +BuildRequires: pkgconfig(libpagemaker-0.0) +BuildRequires: pkgconfig(librevenge-0.0) +BuildRequires: pkgconfig(libstaroffice-0.0) +BuildRequires: pkgconfig(libvisio-0.1) +BuildRequires: pkgconfig(libwpd-0.10) +BuildRequires: pkgconfig(libwpg-0.3) +BuildRequires: pkgconfig(libwps-0.4) +BuildRequires: pkgconfig(libxml-2.0) +BuildRequires: pkgconfig(libxslt) +BuildRequires: pkgconfig(libzmf-0.0) +BuildRequires: pkgconfig(mdds-1.2) +BuildRequires: pkgconfig(mythes) +BuildRequires: pkgconfig(neon) +BuildRequires: pkgconfig(nss) +BuildRequires: pkgconfig(poppler) +BuildRequires: pkgconfig(poppler-cpp) +BuildRequires: pkgconfig(redland) +BuildRequires: pkgconfig(sane-backends) +BuildRequires: pkgconfig(xext) +BuildRequires: pkgconfig(xinerama) +BuildRequires: pkgconfig(xt) +BuildRequires: pkgconfig(zlib) +BuildRequires: postgresql-devel +BuildRequires: unixODBC-devel + +# libs / headers - conditional +%if 0%{?fedora} +BuildRequires: kdelibs4-devel +BuildRequires: openCOLLADA-devel +BuildRequires: pkgconfig(libe-book-0.1) +BuildRequires: pkgconfig(libeot) +BuildRequires: pkgconfig(libgltf-0.1) +%endif + +# java stuff +BuildRequires: ant +BuildRequires: bsh +BuildRequires: java-devel +BuildRequires: junit +BuildRequires: pentaho-reporting-flow-engine + +# fonts needed for unit tests +BuildRequires: liberation-mono-fonts +BuildRequires: liberation-sans-fonts +BuildRequires: liberation-serif-fonts + +Requires: %{name}-writer%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-calc%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-impress%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-draw%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-math%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-base%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-emailmerge%{?_isa} = %{epoch}:%{version}-%{release} + +# not upstreamed +Patch0: 0001-installation-fix.patch +# not upstreamed +Patch1: 0001-never-run-autogen.sh.patch +# not upstreamed +Patch2: 0001-add-X-TryExec-entries-to-desktop-files.patch +# not upstreamed: upstream wants an automatic restart after a crash; we +# want a nice abrt report +Patch3: 0001-don-t-suppress-crashes.patch +Patch4: 0001-change-from-glew-to-epoxy.patch +Patch5: 0001-gtk3-implement-opengl-support-for-slideshow.patch +Patch6: 0001-lower-the-system-epoxy-requirement.patch +Patch7: 0001-Resolves-tdf-105998-distort-hairline-borders-to-fall.patch +Patch8: 0001-Related-rhbz-1422353-make-writer-behave-like-calc-an.patch +Patch9: 0001-right-click-to-insert-image.patch +Patch10: 0001-Related-tdf-106100-recover-mangled-svg-in-presentati.patch +Patch11: 0001-Related-rhbz-1334915-tdf-100158-hack-using-startcent.patch +Patch12: 0001-Resolves-rhbz-1432468-disable-opencl-by-default.patch +Patch13: 0002-Resolves-tdf-62702-allow-ole-objects-to-be-inserted-.patch +Patch14: 0001-fold-SfxPickList-Get-and-ensure-together.patch +Patch15: 0002-gnome-documents-rework-SfxPickList-as-pimpl.patch +Patch16: 0003-rhbz-1444437-gnome-documents-finalize-may-not-occur-.patch +Patch17: 0004-gnome-documents-hold-solarmutex-on-dtor-patch-as-wel.patch +Patch18: 0005-Resolves-rhbz-144437-make-gnome-documents-not-crash-.patch +Patch19: 0001-rename-IsAutoCapitalizeWordDelim-to-NonFieldWordDeli.patch +Patch20: 0002-consider-field-marks-as-text-for-auto-quotes.patch +Patch21: 0001-Resolves-rhbz-1467512-mask-not-created-as-1-bit-dept.patch +Patch22: 0001-add-char-highlighting-background-tab-to-graphics-sty.patch +Patch23: 0001-bubble-the-original-gtk-surface-type-through-renderi.patch +Patch24: 0001-Resolves-rhbz-1400287-resizing-properties-dialog-hid.patch +Patch25: 0001-Resolves-tdf-112145-pdf-export-of-editengine-highlig.patch +Patch26: 0001-its-really-the-contents-we-want-to-redraw.patch +Patch27: 0001-tdf-110737-set-user-events-to-a-lower-priority-than-.patch +Patch28: 0001-gtk3-flicker-free-opengl-transitions.patch +Patch29: 0001-tdf-111891-unostyle-use-default-handler-for-non-page.patch +Patch30: 0001-Resolves-tdf-106163-safe-fix-for-wrong-final-row-col.patch +Patch31: 0001-Resolves-tdf-112408-crash-with-nan-with-bad-ascent.patch +Patch32: 0001-tdf-97630-xmloff-ODF-extended-draw-fit-to-size-mess.patch +Patch33: 0001-Resolves-rhbz-1471983-fatal-exception-on-older-confi.patch +Patch34: 0001-a11y-crash-in-use-after-dispose.patch +Patch35: 0001-gtk3-fix-popover-placement-in-RTL.patch +Patch36: 0001-Resolves-rhbz-1505379-gtk3-X-open-comboboxes-block-s.patch +Patch37: 0001-Compensate-for-loss-of-Type-1-Standard-Symbols-L-sub.patch +Patch38: 0001-rhbz-1527945-segv-on-failed-open-of-password-protect.patch +Patch39: 0001-Resolves-rhbz-1535541-fdo-88004-mimetypes-are-.macro.patch +Patch40: 0001-rhbz-1541486-Fix-localized-ness-of-ooSetupFactoryUIN.patch +Patch41: 0001-limit-WEBSERVICE-to-http-s-protocols.patch +Patch42: 0001-ofz-5747-short-sal_Int32-like-in-StgDataStrm.patch +Patch43: 0001-ofz-6173-check-index-before-use.patch +Patch44: 0001-Resolves-rhbz-1546997-search-not-found-at-0-0-when-w.patch +Patch45: 0001-Related-tdf-100925-background-not-getting-set-under-.patch +Patch46: 0001-tdf-95843-Wait-for-fire_glxtest_process-also-in-head.patch +Patch47: 0001-set-Referer-on-link-mediadescriptor.patch +Patch48: 0001-rhbz-1589029-impress-not-showing-text-highlight-in-p.patch +Patch49: 0001-Resolves-rhbz-1610692-rectangles-ctor-takes-topleft-.patch +Patch50: 0001-tdf-106577-cairo_mask-pattern-affects-more-surface-t.patch +Patch51: 0001-Related-tdf-106577-extend-damage-rect-a-little-for-T.patch +Patch52: 0001-Resolves-rhbz-1614419-crash-in-pptx-nss-usage-under-.patch +Patch53: 0001-rhbz-1614419-use-workaround-for-PK11_ImportSymKey-fa.patch +Patch54: 0001-keep-pyuno-script-processing-below-base-uri.patch +Patch55: CVE-2019-9848.patch +Patch56: CVE-2019-9849.patch +Patch57: CVE-2019-9850.patch +Patch58: CVE-2019-9851.patch +Patch59: CVE-2019-9852.patch +Patch60: CVE-2019-9854.patch +Patch61: CVE-2019-9855.patch + +%if 0%{?rhel} +# not upstreamed +Patch500: 0001-disable-libe-book-support.patch +Patch501: 0001-Resolves-rhbz-1545262-Workaround-for-spurious-ppc64l.patch +%endif + +%define instdir %{_libdir} +%define baseinstdir %{instdir}/libreoffice +%define sdkinstdir %{baseinstdir}/sdk +%define datadir %{_datadir}/%{name} +%define fontname opensymbol +# HACK: Get the data dir for -data subpackage. I haven't found any better +# way to do this... +%global oldname %{name} +%global name %{name}-data +%global lodatadocdir %{_pkgdocdir} +%global name %{oldname} + +%if 0%{?__isa_bits} == 64 +%global mark64 ()(64bit) +%endif + +%description +LibreOffice is an Open Source, community-developed, office productivity suite. +It includes the key desktop applications, such as a word processor, +spreadsheet, presentation manager, formula editor and drawing program, with a +user interface and feature set similar to other office suites. Sophisticated +and flexible, LibreOffice also works transparently with a variety of file +formats, including Microsoft Office File Formats. + +%package filters +Summary: All import / export filters +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-calc%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-draw%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-graphicfilter%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-impress%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-math%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-writer%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-xsltfilter%{?_isa} = %{epoch}:%{version}-%{release} + +%description filters +Metapackage to pull in all subpackages that contain import or export +filters. + +%package core +Summary: Core modules for LibreOffice +Requires: %{name}-%{fontname}-fonts = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-data = %{epoch}:%{version}-%{release} +Requires: %{name}-gtk3%{?_isa} = %{epoch}:%{version}-%{release} +# these two plugins used to be part of core--keep it that way +Requires: %{name}-gtk2%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-x11%{?_isa} = %{epoch}:%{version}-%{release} +Requires: liberation-sans-fonts, liberation-serif-fonts, liberation-mono-fonts +Requires: dejavu-sans-fonts, dejavu-serif-fonts, dejavu-sans-mono-fonts +Requires: google-crosextra-caladea-fonts, google-crosextra-carlito-fonts +Requires: %{name}-langpack-en = %{epoch}:%{version}-%{release} +# rhbz#949106 libreoffice-core drags in both openjdk 1.7.0 and 1.8.0 +Requires: java-headless >= 1:1.6 +Obsoletes: libreoffice-appdata < 1:4.3.3.0 +Obsoletes: libreoffice-binfilter < 1:4.0.0.0 +Obsoletes: libreoffice-headless < 1:4.4.0.0 +Obsoletes: libreoffice-javafilter < 1:4.1.0.0 +Obsoletes: openoffice.org-core < 1:3.3.1 +Obsoletes: openoffice.org-brand < 1:3.3.1, broffice.org-brand < 1:3.3.1 +Obsoletes: openoffice.org-headless < 1:3.3.1 +Obsoletes: openoffice.org-javafilter < 1:3.3.1 +Obsoletes: openoffice.org-langpack-ms < 1:3.3.1, libreoffice-langpack-ms < 1:3.3.99.1 +Obsoletes: openoffice.org-langpack-ur < 1:3.3.1, libreoffice-langpack-ur < 1:3.3.99.1 +Obsoletes: openoffice.org-testtools < 1:3.3.1 +Obsoletes: libreoffice-testtools < 1:3.4.99.1 +Obsoletes: autocorr-eu < 1:4.0.1.2 +Provides: libreoffice-appdata = %{epoch}:%{version}-%{release} +Provides: libreoffice-appdata%{?_isa} = %{epoch}:%{version}-%{release} +Provides: libreoffice-headless = %{epoch}:%{version}-%{release} +Provides: libreoffice-headless%{?_isa} = %{epoch}:%{version}-%{release} + +%description core +The shared core libraries and support files for LibreOffice. + +%package pyuno +Summary: Python support for LibreOffice +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{libo_python}%{?_isa} +Obsoletes: openoffice.org-pyuno < 1:3.3.1 + +%description pyuno +Python bindings for the LibreOffice UNO component model. Allows scripts both +external to LibreOffice and within the internal LibreOffice scripting framework +to be written in python. + +%package base +Summary: Database front-end for LibreOffice +Requires: pentaho-reporting-flow-engine +Requires: postgresql-jdbc +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-calc%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-data = %{epoch}:%{version}-%{release} +Requires: %{name}-pyuno%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} +Obsoletes: %{name}-report-builder < 1:4.1.0.0 +Obsoletes: openoffice.org-base-core < 1:3.3.1 +Obsoletes: openoffice.org-base < 1:3.3.1, broffice.org-base < 1:3.3.1 +Obsoletes: openoffice.org-report-builder < 1:3.3.1 + +%description base +GUI database front-end for LibreOffice. Allows creation and management of +databases through a GUI. + +%package bsh +Summary: BeanShell support for LibreOffice +Requires: bsh +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Obsoletes: openoffice.org-bsh < 1:3.3.1 + +%description bsh +Support BeanShell scripts in LibreOffice. + +%package officebean +Summary: JavaBean for LibreOffice Components +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-officebean-common = %{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 officebean-common +Summary: Common JavaBean for LibreOffice Components +Requires: %{name}-data = %{epoch}:%{version}-%{release} +BuildArch: noarch + +%description officebean-common +Arch-independent part of %{name}-officebean. + +%package rhino +Summary: JavaScript support for LibreOffice +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Obsoletes: openoffice.org-rhino < 1:3.3.1 + +%description rhino +Support JavaScript scripts in LibreOffice. + +%package wiki-publisher +Summary: Create Wiki articles on MediaWiki servers with LibreOffice +Requires: %{name}-writer%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} +Obsoletes: openoffice.org-wiki-publisher < 1:3.3.1 + +%description wiki-publisher +The Wiki Publisher enables you to create Wiki articles on MediaWiki servers +without having to know the syntax of the MediaWiki markup language. Publish +your new and existing documents transparently with writer to a wiki page. + +%package nlpsolver +Summary: Non-linear solver engine for LibreOffice Calc +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-calc%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} + +%description nlpsolver +A non-linear solver engine for Calc as an alternative to the default linear +programming model when more complex, nonlinear programming is required. + +%package ogltrans +Summary: 3D OpenGL slide transitions for LibreOffice +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-impress%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} +Obsoletes: openoffice.org-ogltrans < 1:3.3.1 + +%description ogltrans +OpenGL Transitions enable 3D slide transitions to be used in LibreOffice. +Requires good quality 3D support for your graphics card for best experience. + +%package pdfimport +Summary: PDF Importer for LibreOffice Draw +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-draw%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} +Obsoletes: openoffice.org-pdfimport < 1:3.3.1 + +%description pdfimport +The PDF Importer imports PDF into drawing documents to preserve layout +and enable basic editing of PDF documents. + +%package %{fontname}-fonts +Summary: LibreOffice dingbats font +Requires: fontpackages-filesystem +Obsoletes: openoffice.org-fonts < 1:3.3.1 +Obsoletes: openoffice.org-opensymbol-fonts < 1:3.3.1 +BuildArch: noarch + +%description %{fontname}-fonts +A dingbats font, OpenSymbol, suitable for use by LibreOffice for bullets and +mathematical symbols. + +%package writer +Summary: LibreOffice Word Processor Application +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-data = %{epoch}:%{version}-%{release} +Requires: %{name}-pyuno%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} +Obsoletes: openoffice.org-writer-core < 1:3.3.1 +Obsoletes: openoffice.org-writer < 1:3.3.1, broffice.org-writer < 1:3.3.1 + +%description writer +The LibreOffice Word Processor application. + +%package emailmerge +Summary: Email mail-merge component for LibreOffice +Requires: %{name}-writer%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-pyuno%{?_isa} = %{epoch}:%{version}-%{release} +Obsoletes: openoffice.org-emailmerge < 1:3.3.1 + +%description emailmerge +Enables the LibreOffice writer module to mail-merge to email. + +%package calc +Summary: LibreOffice Spreadsheet Application +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-data = %{epoch}:%{version}-%{release} +Requires: %{name}-pyuno%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} +Obsoletes: openoffice.org-calc-core < 1:3.3.1 +Obsoletes: openoffice.org-calc < 1:3.3.1, broffice.org-calc < 1:3.3.1 + +%description calc +The LibreOffice Spreadsheet application. + +%package draw +Summary: LibreOffice Drawing Application +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-data = %{epoch}:%{version}-%{release} +Requires: %{name}-pyuno%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-pdfimport%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-graphicfilter%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} +Obsoletes: openoffice.org-draw-core < 1:3.3.1 +Obsoletes: openoffice.org-draw < 1:3.3.1, broffice.org-draw < 1:3.3.1 + +%description draw +The LibreOffice Drawing Application. + +%package impress +Summary: LibreOffice Presentation Application +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-data = %{epoch}:%{version}-%{release} +Requires: %{name}-pyuno%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} +Obsoletes: %{name}-presentation-minimizer < 2:4.2.0.0-1.alpha1 +Obsoletes: %{name}-presenter-screen < 2:4.0.0.0-1.beta1 +Obsoletes: openoffice.org-impress-core < 1:3.3.1 +Obsoletes: openoffice.org-impress < 1:3.3.1, broffice.org-impress < 1:3.3.1 +Obsoletes: openoffice.org-presentation-minimizer < 1:3.3.1 +Obsoletes: openoffice.org-presenter-screen < 1:3.3.1 +Provides: %{name}-presentation-minimizer = %{epoch}:%{version}-%{release} +Provides: %{name}-presentation-minimizer%{?_isa} = %{epoch}:%{version}-%{release} +Provides: %{name}-presenter-screen = %{epoch}:%{version}-%{release} +Provides: %{name}-presenter-screen%{?_isa} = %{epoch}:%{version}-%{release} + +%description impress +The LibreOffice Presentation Application. + +%package math +Summary: LibreOffice Equation Editor Application +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-pyuno%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} +Obsoletes: openoffice.org-math-core < 1:3.3.1 +Obsoletes: openoffice.org-math < 1:3.3.1, broffice.org-math < 1:3.3.1 + +%description math +The LibreOffice Equation Editor Application. + +%package graphicfilter +Summary: LibreOffice Extra Graphic filters +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-data = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} +Obsoletes: openoffice.org-graphicfilter < 1:3.3.1 + +%description graphicfilter +The graphicfilter module for LibreOffice provides graphic filters, e.g. svg and +flash filters. + +%package xsltfilter +Summary: Optional xsltfilter module for LibreOffice +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Obsoletes: openoffice.org-xsltfilter < 1:3.3.1 + +%description xsltfilter +The xsltfilter module for LibreOffice, provides additional docbook and +xhtml export transforms. Install this to enable docbook export. + +%package postgresql +Summary: PostgreSQL connector for LibreOffice +Requires: %{name}-base%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} +Requires: postgresql-libs%{?_isa} + +%description postgresql +A PostgreSQL connector for the database front-end for LibreOffice. Allows +creation and management of PostgreSQL databases through a GUI. + +%package ure +Summary: UNO Runtime Environment +#rhbz#1164551 we want to ensure that a libjvm.so of this arch is available +Requires: %{name}-ure-common = %{epoch}:%{version}-%{release} +Requires: unzip%{?_isa}, libjvm.so%{?mark64} +Obsoletes: openoffice.org-ure < 1:3.3.1 + +%description ure +UNO is the component model of LibreOffice. UNO offers interoperability between +programming languages, other components models and hardware architectures, +either in process or over process boundaries, in the Intranet as well as in the +Internet. UNO components may be implemented in and accessed from any +programming language for which a UNO implementation (AKA language binding) and +an appropriate bridge or adapter exists + +%package ure-common +Summary: Common UNO Runtime Environment +BuildArch: noarch + +%description ure-common +Arch-independent part of %{name}-ure. + +%package sdk +Summary: Software Development Kit for LibreOffice +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} +Requires: unzip%{?_isa}, java-devel +Obsoletes: openoffice.org-sdk < 1:3.3.1, openoffice.org-devel < 1:3.3.1 + +%description sdk +The LibreOffice SDK is an add-on for the LibreOffice office suite. It provides +the necessary tools for programming using the LibreOffice APIs and for creating +extensions (UNO components) for LibreOffice. To set the build environment for +building against the sdk use %{sdkinstdir}/setsdkenv_unix.sh. + +%package sdk-doc +Summary: Software Development Kit documentation for LibreOffice +Obsoletes: openoffice.org-sdk-doc < 1:3.3.1 + +%description sdk-doc +This provides documentation for programming using the LibreOffice APIs +and examples of creating extensions (UNO components) for LibreOffice. + +%package glade +Summary: Support for creating LibreOffice dialogs in glade +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} + +%description glade +%{name}-glade contains a catalog of LibreOffice-specific widgets for +glade and ui-previewer tool to check the visual appearance of dialogs. + +%package librelogo +Summary: LibreLogo scripting language +Requires: %{name}-writer%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-pyuno%{?_isa} = %{epoch}:%{version}-%{release} + +%description librelogo +Enables LibreLogo scripting in Writer. LibreLogo is a Logo-like +programming language with interactive vectorgraphics for education and +DTP. + +%package data +Summary: LibreOffice data files +BuildArch: noarch + +%description data +%{name}-data contains platform-independent data files. + +%package x11 +Summary: LibreOffice generic X11 support plug-in +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} +Provides: %{name}-plugin = %{epoch}:%{version}-%{release} +Provides: %{name}-plugin%{?_isa} = %{epoch}:%{version}-%{release} +%if 0%{?weak_deps} +Supplements: (%{name}-core%{?_isa} and Xserver) +%endif + +%description x11 +A plug-in for LibreOffice that enables generic X11 support. + +%package gtk2 +Summary: LibreOffice GTK+ 2 integration plug-in +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-x11%{?_isa} = %{epoch}:%{version}-%{release} +Provides: %{name}-plugin = %{epoch}:%{version}-%{release} +Provides: %{name}-plugin%{?_isa} = %{epoch}:%{version}-%{release} +%if 0%{?weak_deps} +Supplements: (%{name}-core%{?_isa} and gtk2%{?_isa}) +%endif + +%description gtk2 +A plug-in for LibreOffice that enables integration into GTK+ 2 environment. + +%package gtk3 +Summary: LibreOffice GTK+ 3 integration plug-in +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} +Requires: gstreamer1(element-gtksink)%{?mark64} +%if 0%{?weak_deps} +Supplements: (%{name}-core%{?_isa} and gtk3%{?_isa}) +%endif + +%description gtk3 +A plug-in for LibreOffice that enables integration into GTK+ 3 environment. + +%if 0%{?fedora} + +%package kde4 +Summary: LibreOffice KDE integration plug-in +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-ure%{?_isa} = %{epoch}:%{version}-%{release} +Obsoletes: %{name}-kde < 1:5.1.1.3-2 +Provides: %{name}-kde = %{epoch}:%{version}-%{release} +Provides: %{name}-kde%{?_isa} = %{epoch}:%{version}-%{release} +Provides: %{name}-plugin = %{epoch}:%{version}-%{release} +Provides: %{name}-plugin%{?_isa} = %{epoch}:%{version}-%{release} + +%description kde4 +A plug-in for LibreOffice that enables integration into the KDE desktop environment. + +%endif + +%package -n libreofficekit +Summary: A library providing access to LibreOffice functionality +License: MPLv2.0 + +%description -n libreofficekit +LibreOfficeKit can be used to access LibreOffice functionality +through C/C++, without any need to use UNO. + +For now it only offers document conversion (in addition to an +experimental tiled rendering API). + +%package -n libreofficekit-devel +Summary: Development files for libreofficekit +Requires: libreofficekit%{?_isa} = %{epoch}:%{version}-%{release} +License: MPLv2.0 + +%description -n libreofficekit-devel +The libreofficekit-devel package contains libraries and header files for +developing applications that use libreofficekit. + +%if 0%{?_enable_debug_packages} + +%package gdb-debug-support +Summary: Additional support for debugging with gdb +Requires: gdb%{?_isa} +Requires: %{libo_python}-six +Requires: libreoffice-core%{?_isa} = %{epoch}:%{version}-%{release} +%if 0%{?weak_deps} +Supplements: libreoffice-debuginfo%{?_isa} = %{epoch}:%{version}-%{release} +%endif + +%description gdb-debug-support +This package provides gdb pretty printers for package %{name}. + +%files gdb-debug-support +%{_datadir}/gdb/auto-load%{baseinstdir} +%{_datadir}/libreoffice/gdb + +%endif + +%define _langpack_common() \ +%{baseinstdir}/program/resource/*%{1}.res \ +%{baseinstdir}/share/config/soffice.cfg/modules/*/ui/res/%{1}.zip \ +%{baseinstdir}/share/config/soffice.cfg/*/ui/res/%{1}.zip \ +%{baseinstdir}/share/template/%{1} \ +%{baseinstdir}/share/registry/Langpack-%{1}.xcd \ +%{baseinstdir}/share/registry/res/registry_%{1}.xcd \ +%{baseinstdir}/share/registry/res/fcfg_langpack_%{1}.xcd \ +%{nil} + +# Defines a language pack subpackage. +# +# It's necessary to define language code (-l) and language name (-n). +# Additionally, it's possible +# * to require autocorr, hunspell, hyphen or mythes package or font for +# given language, +# * to obsolete openoffice.org-langpack package, +# * to provide libreoffice-langpack-loc package, where loc is glibc +# locale--this is necessary for yum to pick it automatically, +# * to require other, unrelated, packages, +# * to specify file serving as file list. +# For these, lower case character argument takes an argument specifying +# language, upper case character argument uses language from -l. +# +# All remaining arguments are considered to be files and added to the file +# list. +# +# Aa: autocorr dependency +# c: additional config file (just the name stem) +# E the package does not contain any files (i.e., has empty filelist) +# Ff: font language dependency +# Hh: hunspell dependency +# i: additional language added to this package +# L: internal (LibreOffice) language code, used in file names +# l: language code, e.g., cs +# Mm: mythes dependency +# n: language name, e.g., Czech +# Oo: Obsoletes: of openoffice.org-langpack +# Vv: Very archaic Obsoletes: of openoffice.org-langpack +# Ww: Archaic Obsoletes: of openoffice.org2-langpack +# p: Provides: of libreoffice-langpack +# r: comma-separated list of additional requires +# S:s: script classification (cjk, ctl). -S is only a marker, as it does +# not add any .xcd into the package (the file does not exist for at +# least one CTL-using locale, si) +# T has help files +# Xx: has autotext definitions +# Yy: hyphen dependency +# +# Example: +# libreoffice-langpack-cs: langpack for Czech lang. requiring hyphen-cs, +# autocorr-cs, mythes-cs-CZ and suitable font, obsoleting +# openoffice.org-langpack-cs_CZ: +# %%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 lang %{-l:%{-l*}}%{!-l:%{error:Language code not defined}} \ +%define _langpack_lang %{-L:%{-L*}}%{!-L:%{lang}} \ +%define pkgname langpack-%{lang} \ +%define langname %{-n:%{-n*}}%{!-n:%{error:Language name not defined}} \ +\ +%global langpack_langs %{langpack_langs} %{_langpack_lang} %{-i:%{-i*}} \ +\ +%package %{pkgname} \ +Summary: %{langname} language pack for LibreOffice \ +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} \ +%{-a:Requires: autocorr-%{-a*}}%{!-a:%{-A:Requires: autocorr-%{lang}}} \ +%{-f:Requires: font(:lang=%{-f*})}%{!-f:%{-F:Requires: font(:lang=%{lang})}} \ +%{-h:Requires: hunspell-%{-h*}}%{!-h:%{-H:Requires: hunspell-%{lang}}} \ +%{-m:Requires: mythes-%{-m*}}%{!-m:%{-M:Requires: mythes-%{lang}}} \ +%{-y:Requires: hyphen-%{-y*}}%{!-y:%{-Y:Requires: hyphen-%{lang}}} \ +%{-r:Requires: %{-r*}} \ +%{-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*} = %{epoch}:%{version}-%{release}} \ +%{-p:Provides: %{name}-langpack-%{-p*}%{?_isa} = %{epoch}:%{version}-%{release}} \ +%if 0%{?weak_deps} \ +%{-p:Supplements: (%{name}-core%{?_isa} = %{epoch}:%{version}-%{release} and langpacks-%{-p*})} \ +%{!-p:Supplements: (%{name}-core%{?_isa} = %{epoch}:%{version}-%{release} and langpacks-%{lang})} \ +%{-T:Recommends: %{name}-help-%{lang}} \ +%endif \ +\ +%description %{pkgname} \ +Provides additional %{langname} translations and resources for LibreOffice. \ +\ +%{-T: \ +%package help-%{lang} \ +Summary: %{langname} help for LibreOffice \ +Requires: %{name}-core%{?_isa} = %{epoch}:%{version}-%{release} \ +\ +%description help-%{lang} \ +Provides %{langname} help for LibreOffice. \ +\ +%files help-%{lang} \ +%docdir %{baseinstdir}/help/%{_langpack_lang} \ +%{baseinstdir}/help/%{_langpack_lang} \ +} \ +\ +%files %{pkgname} \ +%{!-E: \ +%{expand:%%_langpack_common %{_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} \ +%{-i:%{expand:%%_langpack_common %{-i*}}} \ +} \ +%{nil} + +# Defines an auto-correction subpackage. +# +# i: add autocorrections from additional language +# l: language code +# n: language name +# L the filename does not contain country code +# +# All remaining arguments are considered to be files and added to the file +# list. +%define autocorr(i:Ll:n:) \ +%define lang %{-l:%{-l*}}%{!-l:%{error:Language code not defined}} \ +%define pkgname autocorr-%{lang} \ +%define langname %{-n:%{-n*}}%{!-n:%{error:Language name not defined}} \ +\ +%package -n %{pkgname} \ +Summary: %{langname} auto-correction rules \ +BuildArch: noarch \ +\ +%description -n %{pkgname} \ +Rules for auto-correcting common %{langname} typing errors. \ +\ +%files -n %{pkgname} \ +%doc instdir/LICENSE \ +%dir %{_datadir}/autocorr \ +%{-L:%{_datadir}/autocorr/acor_%{lang}.dat} \ +%{!-L:%{_datadir}/autocorr/acor_%{lang}-*.dat} \ +%{-i:%{_datadir}/autocorr/acor_%{-i*}-*.dat} \ +%{nil} + +%langpack -l en -n English -F -h en-US -Y -M -A -E -L en-US -O + +%if %{with langpacks} + +%langpack -l af -n Afrikaans -F -H -Y -A -o af_ZA -V -w af_ZA +%langpack -l ar -n Arabic -F -H -s ctl -O -T -W +%langpack -l as -n Assamese -F -H -Y -o as_IN -w as_IN +%langpack -l bg -n Bulgarian -F -H -Y -M -A -T -X -o bg_BG -V -w bg_BG +%langpack -l bn -n Bengali -F -H -Y -T -O -v bn_IN -W +%langpack -l br -n Breton -F -H +%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 +%langpack -l de -n German -F -H -Y -M -A -T -X -O -W +%langpack -l dz -n Dzongkha -F -s ctl -T -O +%langpack -l el -n Greek -F -H -Y -M -T -o el_GR -V -w el_GR +%langpack -l es -n Spanish -F -H -Y -M -A -T -X -O -W +%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 +%langpack -l fa -n Farsi -A -H -Y -s ctl -X +%langpack -l fi -n Finnish -F -r libreoffice-voikko -A -T -o fi_FI -V -w fi_FI -X +%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 -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 id -n Indonesian -F -H -Y -T +%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 +%langpack -l kk -n Kazakh -F -H +%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 -X -o ko_KR -V -w ko_KR +%langpack -l lt -n Lithuanian -F -H -Y -A -o lt_LT -T -V -w lt_LT -X +%langpack -l lv -n Latvian -F -H -Y -M -T +%langpack -l mai -n Maithili -F -o mai_IN +%langpack -l ml -n Malayalam -F -H -Y -o ml_IN -w ml_IN +%langpack -l mr -n Marathi -F -H -Y -o mr_IN -w mr_IN +%langpack -l nb -n Bokmal -F -H -Y -M -T -o nb_NO -V -w nb_NO +%langpack -l nl -n Dutch -F -H -Y -M -A -T -X -O -W +%langpack -l nn -n Nynorsk -F -H -Y -M -T -o nn_NO -V -w nn_NO +%define langpack_lang Southern Ndebele +%langpack -l nr -n %{langpack_lang} -F -H -o nr_ZA +%define langpack_lang Northern Sotho +%langpack -l nso -n %{langpack_lang} -F -H -o nso_ZA -w nso_ZA +%langpack -l or -n Odia -F -H -Y -s ctl -o or_IN -w or_IN +%langpack -l pa -n Punjabi -F -H -Y -s ctl -L pa-IN -O -v pa_IN -w pa_IN +%langpack -l pl -n Polish -F -H -Y -M -A -T -X -o pl_PL -V -w pl_PL +%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 -T -X +%langpack -l ru -n Russian -F -H -Y -M -A -T -X -O -W +%langpack -l si -n Sinhalese -F -H -S ctl -T -O +%langpack -l sk -n Slovak -F -H -Y -M -A -T -X -o sk_SK -V -w sk_SK +%langpack -l sl -n Slovenian -F -H -Y -M -A -T -X -o sl_SI -V -w sl_SI +%{baseinstdir}/share/wordbook/sl.dic + +#rhbz#452379 clump serbian translations together +%langpack -l sr -n Serbian -F -H -Y -A -i sr-Latn -O -v sr_CS -w sr_CS +%langpack -l ss -n Swati -F -H -o ss_ZA +%define langpack_lang Southern Sotho +%langpack -l st -n %{langpack_lang} -F -H -o st_ZA +%langpack -l sv -n Swedish -F -H -Y -M -A -T -X -O -W +%langpack -l ta -n Tamil -F -H -Y -s ctl -o ta_IN -T -w ta_IN +%langpack -l te -n Telugu -F -H -Y -o te_IN -w te_IN +%langpack -l th -n Thai -F -H -s ctl -c ctlseqcheck_th -o th_TH -V -w th_TH +%langpack -l tn -n Tswana -F -H -o tn_ZA -V -w tn_ZA +%langpack -l tr -n Turkish -F -A -T -X -o tr_TR -V -W +%langpack -l ts -n Tsonga -F -H -o ts_ZA -V -w ts_ZA +%langpack -l uk -n Ukrainian -F -H -Y -M -T -O +%langpack -l ve -n Venda -F -H -o ve_ZA +%langpack -l xh -n Xhosa -F -H -o xh_ZA +%define langpack_lang Simplified Chinese +%langpack -l zh-Hans -n %{langpack_lang} -f zh-cn -a zh -p zh_CN -s cjk -T -L zh-CN -x zh-CN -o zh_CN -v zh-CN -w zh_CN +%define langpack_lang Traditional Chinese +%langpack -l zh-Hant -n %{langpack_lang} -f zh-tw -a zh -p zh_TW -s cjk -T -L zh-TW -x zh-TW -o zh_TW -v zh-TW -w zh_TW +%langpack -l zu -n Zulu -F -H -Y -o zu_ZA -V -w zu_ZA +%undefine langpack_lang + +%endif + +%autocorr -l en -n English + +%if %{with langpacks} + +%autocorr -l af -n Afrikaans +%autocorr -l bg -n Bulgarian +%autocorr -l ca -n Catalan +%autocorr -l cs -n Czech +%autocorr -l da -n Danish +%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 +%autocorr -l ga -n Irish +%autocorr -l hr -n Croatian +%autocorr -l hu -n Hungarian +%autocorr -l is -n Icelandic +%autocorr -l it -n Italian -L +%autocorr -l ja -n Japanese +%autocorr -l ko -n Korean +%autocorr -l lb -n Luxembourgish +%autocorr -l lt -n Lithuanian +%autocorr -l mn -n Mongolian +%autocorr -l nl -n Dutch +%autocorr -l pl -n Polish +%autocorr -l pt -n Portuguese +%autocorr -l ro -n Romanian +%autocorr -l ru -n Russian +%autocorr -l sk -n Slovak +%autocorr -l sl -n Slovenian +#rhbz#452379 clump serbian autocorrections together +%autocorr -l sr -n Serbian -i sr-Latn -i sr +%autocorr -l sv -n Swedish +%autocorr -l tr -n Turkish +%autocorr -l vi -n Vietnamese +%autocorr -l zh -n Chinese + +%endif + +%define make_autocorr_aliases(l:) \ +%{?-l: \ +for lang in %{*}; do \ + ln -sf acor_%{-l*}.dat acor_$lang.dat \ +done \ +} \ +%{!?-l:%{error:-l must be present}} + +%prep +%setup -q -n %{name}-%{version}%{?libo_prerelease} -b 1 -b 2 +rm -rf git-hooks */git-hooks + +# set up git repo +git init +git config user.name rpmbuild +git config user.email rpmbuild@fedoraproject.org +git config gc.auto 0 # disable auto packing +git add -A +git commit -q -a -m %{name}-%{version} + +#Customize Palette to add Red Hat colours +(head -n -1 extras/source/palettes/standard.soc && \ + 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' + +# apply patches +git am %{patches} + +sed -i -e /CppunitTest_sw_ooxmlexport7/d sw/Module_sw.mk +sed -i -e /CppunitTest_sd_import_tests/d sd/Module_sd.mk +git commit -q -a -m 'temporarily disable failing tests' + +# Seeing .git dir makes some of the build tools change their behavior. +# We do not want that. Note: it is still possible to use +# git --git-dir=.git-rpm +mv .git .git-rpm + +%build +echo build start time is `date`, diskspace: `df -h . | tail -n 1` +echo building localizations: %{langpack_langs} +# path to external tarballs +EXTSRCDIR=`dirname %{SOURCE0}` + +%if 0%{?fedora} +# KDE bits +export QT4DIR=%{_qt4_prefix} +export KDE4DIR=%{_kde4_prefix} +export PATH=$QT4DIR/bin:$PATH +%endif + +#use the RPM_OPT_FLAGS but remove the OOo overridden ones +for i in $RPM_OPT_FLAGS; do + case "$i" in + -pipe|-Wall|-Werror*|-fexceptions) continue;; + esac + ARCH_FLAGS="$ARCH_FLAGS $i" +done +%ifarch s390 aarch64 +# these builders typically do not have enough memory to link the big libs with -g2 +ARCH_FLAGS="$ARCH_FLAGS -g1" +%endif +export ARCH_FLAGS +export CFLAGS=$ARCH_FLAGS +export CXXFLAGS=$ARCH_FLAGS + +%if 0%{?rhel} +%define distrooptions --disable-eot --disable-gltf --enable-python=system +%else # fedora +%define distrooptions --enable-eot --enable-kde4 --with-system-opencollada --with-system-ucpp +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_use_python3} +export PYTHON=%{_bindir}/python +export PYTHON_CFLAGS=`pkg-config --cflags python` +export PYTHON_LIBS=`pkg-config --libs python` +%endif + +aclocal -I m4 +autoconf + +SMP_MFLAGS=%{?_smp_mflags} +SMP_MFLAGS=$[${SMP_MFLAGS/-j/}] + +# TODO: enable coinmp? +# avoid running autogen.sh on make +touch autogen.lastrun +%configure \ + %vendoroption \ + %{?with_lang} \ + --with-parallelism=$SMP_MFLAGS \ + --disable-coinmp \ + --disable-fetch-external \ + --disable-firebird-sdbc \ + --disable-openssl \ + --disable-systray \ + --enable-dconf \ + --enable-evolution2 \ + --enable-ext-nlpsolver \ + --enable-ext-wiki-publisher \ + --enable-gtk3 \ + --enable-introspection \ + --enable-release-build \ + --enable-scripting-beanshell \ + --enable-scripting-javascript \ + --enable-symbols \ + --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-export-validation \ + --without-fonts \ + --with-gdrive-client-secret="GYWrDtzyZQZ0_g5YoBCC6F0I" \ + --with-gdrive-client-id="457862564325.apps.googleusercontent.com" \ + %{distrooptions} \ + %{?bundling_options} \ + %{?archoptions} + +ulimit -c unlimited + +make verbose=true build-nocheck + +#generate the icons and mime type stuff +export DESTDIR=../output +export KDEMAINDIR=/usr +export GNOMEDIR=/usr +export GNOME_MIME_THEME=hicolor +export PREFIXDIR=/usr +# TODO use empty variables? Should make the renaming hacks in %%install +# unnecessary. +. ./bin/get_config_variables PRODUCTVERSIONSHORT PRODUCTVERSION SRCDIR WORKDIR PKG_CONFIG INSTDIR +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 +cp -pr $WORKDIR/CustomTarget/sysui/share/output/girepository-1.0/LOKDocView-%{girapiversion}.* $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` + + +%install +# TODO investigate use of make distro-pack-install +#figure out the icon version +. ./bin/get_config_variables PRODUCTVERSIONSHORT PRODUCTVERSION SRCDIR WORKDIR +export PRODUCTVERSIONSHORT PRODUCTVERSION + +# installation + +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 + echo - ---dump log end--- + echo - ---dump log start -- SDK--- + 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 + echo - ---dump log end -- languagepacks--- + exit 1 +fi +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 + [ `basename $langpack` = log ] && continue + cp -rp $langpack/* %{buildroot}%{baseinstdir} + rm -rf $langpack +done +%endif +mv $WORKDIR/installation/LibreOffice_SDK/installed/install/en-US/sdk %{buildroot}%{sdkinstdir} +chmod -R +w %{buildroot}%{baseinstdir} + +# postprocessing and tweaks + +# The installer currently sets UserInstallation to +# $ORIGIN/../libreoffice/4, which is of course total nonsense. Because I +# have no inclination to crawl through mountains of perl code to figure out +# where it comes from, I am just going to replace it by a sensible +# value here. +sed -i -e '/UserInstallation/s@\$ORIGIN/..@$SYSUSERCONFIG@' %{buildroot}%{baseinstdir}/program/bootstraprc + +#configure sdk +pushd %{buildroot}%{sdkinstdir} + sed -e "s,@OO_SDK_NAME@,sdk," \ + -e "s,@OO_SDK_HOME@,%{sdkinstdir}," \ + -e "s,@OFFICE_HOME@,%{baseinstdir}," \ + -e "s,@OO_SDK_MAKE_HOME@,/usr/bin," \ + -e "s,@OO_SDK_ZIP_HOME@,/usr/bin," \ + -e "s,@OO_SDK_CPP_HOME@,/usr/bin," \ + -e "s,@OO_SDK_CAT_HOME@,/usr/bin," \ + -e "s,@OO_SDK_SED_HOME@,/usr/bin," \ + -e "s,@OO_SDK_CC_55_OR_HIGHER@,," \ + -e "s,@OO_SDK_JAVA_HOME@,$JAVA_HOME," \ + -e "s,@OO_SDK_OUTPUT_DIR@,\$HOME," \ + -e "s,@SDK_AUTO_DEPLOYMENT@,NO," \ + setsdkenv_unix.sh.in > setsdkenv_unix.sh + # ensure no unexpanded vars sneaked in + grep '@[A_Z0-9_]\+@' setsdkenv_unix.sh && exit 1 + chmod 755 setsdkenv_unix.sh + # we don't want to install the input file + rm -f setsdkenv_unix.sh.in +# TODO: is this still necessary? +#fix permissions + find examples -type f -exec chmod -x {} \; +popd + +#ensure a template dir for each lang +pushd %{buildroot}%{baseinstdir}/share/template +for I in %{langpack_langs}; do + mkdir -p $I +done +popd + +#Set some aliases to canonical autocorrect language files for locales with matching languages +pushd %{buildroot}%{baseinstdir}/share/autocorr + +%make_autocorr_aliases -l en-GB en-AG en-AU en-BS en-BW en-BZ en-CA en-DK en-GH en-HK en-IE en-IN en-JM en-NG en-NZ en-SG en-TT +%make_autocorr_aliases -l en-US en-PH +#en-ZA exists and has a good autocorrect file with two or three extras that make sense for +#neighbouring english speaking territories +%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 nl-NL nl-AW +%make_autocorr_aliases -l sv-SE sv-FI +%else +rm -f acor_[a-df-z]*.dat acor_e[su]*.dat +%endif +popd +#rhbz#484055 make these shared across multiple applications +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 + +#remove dummy .dat files +rm -f %{buildroot}%{baseinstdir}/program/root?.dat + +#set standard permissions for rpmlint +find %{buildroot}%{baseinstdir} -exec chmod +w {} \; +find %{buildroot}%{baseinstdir} -type d -exec chmod 0755 {} \; + +# move python bits into site-packages +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 +echo "os.putenv('URE_BOOTSTRAP', 'vnd.sun.star.pathname:%{baseinstdir}/program/fundamentalrc')" >> uno.py +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 +pushd %{buildroot}%{baseinstdir}/share/fonts/truetype +install -d -m 0755 %{buildroot}%{_fontdir} +install -p -m 0644 *.ttf %{buildroot}%{_fontdir} +popd +rm -rf %{buildroot}%{baseinstdir}/share/fonts/truetype/*.ttf + +# move platform-independent data into shared dir +install -m 0755 -d %{buildroot}%{datadir} +rm -f %{buildroot}%{baseinstdir}/CREDITS.fodt %{buildroot}%{baseinstdir}/LICENSE* %{buildroot}%{baseinstdir}/NOTICE +# rhbz#1473749 ensure display of files in license/about dialogs works +ln -sr %{buildroot}%{lodatadocdir}/LICENSE.fodt %{buildroot}%{baseinstdir}/LICENSE.fodt +ln -sr %{buildroot}%{lodatadocdir}/CREDITS.fodt %{buildroot}%{baseinstdir}/CREDITS.fodt + +#ensure that no sneaky un-prelinkable, un-fpic or non executable shared libs +#have snuck through +pic=0 +executable=0 +for foo in `find %{buildroot}%{instdir} -name "*" -exec file {} \;| grep ": ELF" | cut -d: -f 1` ; do + chmod +wx $foo + ls -asl $foo + result=`readelf -d $foo | grep TEXTREL` || true + if [ "$result" != "" ]; then + echo "TEXTREL Warning: $foo is b0rked (-fpic missing)" + pic=1 + fi + result=`readelf -l $foo | grep GNU_STACK | grep RWE` || true + if [ "$result" != "" ]; then + echo "GNU_STACK Warning: $foo is b0rked (-noexecstack missing)" + executable=1 + fi +done +if [ $pic == 1 ]; then false; fi +if [ $executable == 1 ]; then false; fi + +#make up some /usr/bin scripts +install -m 0755 -d %{buildroot}%{_bindir} + +pushd %{buildroot}%{_bindir} +echo \#\!/bin/sh > ooffice +echo exec libreoffice \"\$@\" >> ooffice +chmod a+x ooffice + +echo \#\!/bin/sh > ooviewdoc +echo exec libreoffice --view \"\$@\" >> ooviewdoc +chmod a+x ooviewdoc + +for app in base calc draw impress math writer; do + echo \#\!/bin/sh > oo$app + echo exec libreoffice --$app \"\$@\" >> oo$app + chmod a+x oo$app +done + +sed -e s/LAUNCHER/unopkg/g -e s/BRAND/libreoffice/g %{SOURCE7} > unopkg +chmod a+x unopkg + +sed -e s/LAUNCHER/soffice/g -e s/BRAND/libreoffice/g %{SOURCE7} > libreoffice +chmod a+x libreoffice + +# rhbz#499474 provide a /usr/bin/soffice for .recently-used.xbel +ln -s %{baseinstdir}/program/soffice soffice +# rhbz#499474 provide a /usr/bin/openoffice.org for backwards compat +ln -s libreoffice openoffice.org +popd + +pushd %{buildroot}%{baseinstdir}/share/xdg/ +chmod u+w *.desktop +ICONVERSION=`echo $PRODUCTVERSION | sed -e 's/\.//'` +for file in *.desktop; do + # rhbz#156677 remove the version from Name= + # rhbz#156067 don't version the icons + sed -i -e "s/ *$PRODUCTVERSION//g" \ + -e "s/$ICONVERSION//g" \ + -e "s/$PRODUCTVERSIONSHORT//g" \ + $file +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 +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 + install -m 0644 -p $app.desktop %{buildroot}%{_datadir}/applications/libreoffice-$app.desktop +done +popd + +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 + 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 +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 +install -m 0755 -d %{buildroot}%{_datadir}/mime/packages +install -m 0644 -p mime/packages/libreoffice$PRODUCTVERSION.xml %{buildroot}%{_datadir}/mime/packages/libreoffice.xml + +# install LibreOfficeKit +install -m 0755 -d %{buildroot}%{_libdir}/girepository-1.0 +install -m 0644 -p LOKDocView-%{girapiversion}.typelib %{buildroot}%{_libdir}/girepository-1.0/LOKDocView-%{girapiversion}.typelib +install -m 0755 -d %{buildroot}%{_libdir}/gir-1.0 +install -m 0644 -p gir-1.0/LOKDocView-%{girapiversion}.gir %{buildroot}%{_libdir}/gir-1.0/LOKDocView-%{girapiversion}.gir +mv %{buildroot}%{baseinstdir}/program/liblibreofficekitgtk.so %{buildroot}%{_libdir} +popd + +# install LibreOfficeKit headers +install -m 0755 -d %{buildroot}%{_includedir}/LibreOfficeKit +install -m 0644 -p include/LibreOfficeKit/* %{buildroot}%{_includedir}/LibreOfficeKit + +rm -rf %{buildroot}%{baseinstdir}/readmes +rm -rf %{buildroot}%{baseinstdir}/licenses + +# 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 +install -m 0755 -d %{buildroot}%{_datadir}/glade/catalogs +mv %{buildroot}%{baseinstdir}/share/glade/libreoffice-catalog.xml %{buildroot}%{_datadir}/glade/catalogs +install -m 0755 -d %{buildroot}%{_datadir}/glade3/catalogs +ln -sr %{buildroot}%{_datadir}/glade/catalogs/libreoffice-catalog.xml %{buildroot}%{_datadir}/glade3/catalogs + +# rhbz#1049543 install appdata +install -m 0755 -d %{buildroot}%{_datadir}/appdata +install -m 0644 -p sysui/desktop/appstream-appdata/*.appdata.xml %{buildroot}%{_datadir}/appdata + +# rhbz#1215800 install symbolic icons +install -m 0755 -d %{buildroot}%{_datadir}/icons/hicolor/symbolic/apps +install -m 0644 -p %{SOURCE42} %{buildroot}%{_datadir}/icons/hicolor/symbolic/apps +install -m 0644 -p %{SOURCE43} %{buildroot}%{_datadir}/icons/hicolor/symbolic/apps +install -m 0644 -p %{SOURCE44} %{buildroot}%{_datadir}/icons/hicolor/symbolic/apps +install -m 0644 -p %{SOURCE45} %{buildroot}%{_datadir}/icons/hicolor/symbolic/apps +install -m 0644 -p %{SOURCE46} %{buildroot}%{_datadir}/icons/hicolor/symbolic/apps +install -m 0644 -p %{SOURCE47} %{buildroot}%{_datadir}/icons/hicolor/symbolic/apps +install -m 0644 -p %{SOURCE48} %{buildroot}%{_datadir}/icons/hicolor/symbolic/apps + +# install man pages +install -m 0755 -d %{buildroot}%{_mandir}/man1 +install -m 0644 -p sysui/desktop/man/*.1 %{buildroot}%{_mandir}/man1 +for app in oobase oocalc oodraw ooffice ooimpress oomath ooviewdoc oowriter openoffice.org soffice; do + echo '.so man1/libreoffice.1' > $app.1 + install -m 0644 -p $app.1 %{buildroot}%{_mandir}/man1 +done + +export DESTDIR=%{buildroot} +./solenv/bin/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 + +%if 0%{?fedora} +# Update the screenshot shown in the software center +# +# NOTE: It would be *awesome* if this file was pushed upstream. +# +# See http://people.freedesktop.org/~hughsient/appdata/#screenshots for more details. +# +appstream-util replace-screenshots %{buildroot}%{_datadir}/appdata/libreoffice-writer.appdata.xml \ + https://raw.githubusercontent.com/hughsie/fedora-appstream/master/screenshots-extra/libreoffice-writer/a.png \ + https://raw.githubusercontent.com/hughsie/fedora-appstream/master/screenshots-extra/libreoffice-writer/b.png +appstream-util replace-screenshots %{buildroot}%{_datadir}/appdata/libreoffice-calc.appdata.xml \ + https://raw.githubusercontent.com/hughsie/fedora-appstream/master/screenshots-extra/libreoffice-calc/a.png +appstream-util replace-screenshots %{buildroot}%{_datadir}/appdata/libreoffice-draw.appdata.xml \ + https://raw.githubusercontent.com/hughsie/fedora-appstream/master/screenshots-extra/libreoffice-draw/a.png +appstream-util replace-screenshots %{buildroot}%{_datadir}/appdata/libreoffice-impress.appdata.xml \ + https://raw.githubusercontent.com/hughsie/fedora-appstream/master/screenshots-extra/libreoffice-impress/a.png +%endif + +# rhbz#1247399 - move stable API jars to noarch java location +install -m 0755 -d %{buildroot}%{_javadir}/%{name} +for jar in %{buildroot}%{baseinstdir}/program/classes/*.jar; do + j=`basename $jar` + case ${j%.jar} in + juh|jurt|ridl|unoloader|unoil|officebean) + mv $jar %{buildroot}%{_javadir}/%{name} + ln -sr %{buildroot}%{_javadir}/%{name}/$j $jar + ;; + esac +done + +# we don't need this anymore +rm -f %{buildroot}%{baseinstdir}/program/classes/smoketest.jar + +%files + +%files filters + +%files core +%dir %{baseinstdir} +%{baseinstdir}/CREDITS.fodt +%{baseinstdir}/LICENSE.fodt +%dir %{baseinstdir}/help +%docdir %{baseinstdir}/help/en-US +%dir %{baseinstdir}/help/en-US +%{baseinstdir}/help/en-US/default.css +%{baseinstdir}/help/en-US/err.html +%{baseinstdir}/help/en-US/highcontrast1.css +%{baseinstdir}/help/en-US/highcontrast2.css +%{baseinstdir}/help/en-US/highcontrastblack.css +%{baseinstdir}/help/en-US/highcontrastwhite.css +%{baseinstdir}/help/en-US/sbasic.* +%{baseinstdir}/help/en-US/schart.* +%{baseinstdir}/help/en-US/shared.* +%{baseinstdir}/help/idxcaption.xsl +%{baseinstdir}/help/idxcontent.xsl +%{baseinstdir}/help/main_transform.xsl +%{baseinstdir}/presets +%dir %{baseinstdir}/program +%{baseinstdir}/program/libbasprovlo.so +%{baseinstdir}/program/libcairocanvaslo.so +%{baseinstdir}/program/libcanvasfactorylo.so +%dir %{baseinstdir}/program/classes +%{baseinstdir}/program/classes/commonwizards.jar +%{baseinstdir}/program/classes/form.jar +%{baseinstdir}/program/classes/query.jar +%{baseinstdir}/program/classes/report.jar +%{baseinstdir}/program/classes/ScriptFramework.jar +%{baseinstdir}/program/classes/ScriptProviderForJava.jar +%{baseinstdir}/program/classes/table.jar +%{baseinstdir}/program/classes/unoil.jar +%{baseinstdir}/program/classes/XMergeBridge.jar +%{baseinstdir}/program/classes/xmerge.jar +%{baseinstdir}/program/libcmdmaillo.so +%{baseinstdir}/program/libdeployment.so +%{baseinstdir}/program/libdeploymentgui.so +%{baseinstdir}/program/libdlgprovlo.so +%{baseinstdir}/program/libexpwraplo.so +%{baseinstdir}/program/flat_logo.svg +%{baseinstdir}/program/libfps_officelo.so +%{baseinstdir}/program/gdbtrace +%{baseinstdir}/program/gengal +%{baseinstdir}/program/gengal.bin +%{baseinstdir}/program/libi18nsearchlo.so +%{baseinstdir}/program/libldapbe2lo.so +%{baseinstdir}/program/libacclo.so +%{baseinstdir}/program/libanimcorelo.so +%{baseinstdir}/program/libavmedia*.so +%{baseinstdir}/program/libbasctllo.so +%{baseinstdir}/program/libbiblo.so +%{baseinstdir}/program/libcached1.so +%{baseinstdir}/program/libcanvastoolslo.so +%{baseinstdir}/program/libchart*lo.so +%{baseinstdir}/program/libclewlo.so +%{baseinstdir}/program/libcollator_data.so +%{baseinstdir}/program/libcppcanvaslo.so +%{baseinstdir}/program/libctllo.so +%{baseinstdir}/program/libcuilo.so +%{baseinstdir}/program/libdbalo.so +%{baseinstdir}/program/libdbaselo.so +%{baseinstdir}/program/libdbaxmllo.so +%{baseinstdir}/program/libdbmmlo.so +%{baseinstdir}/program/libdbpool2.so +%{baseinstdir}/program/libdbtoolslo.so +%{baseinstdir}/program/libdbulo.so +%{baseinstdir}/program/libdeploymentmisclo.so +%{baseinstdir}/program/libdesktop_detectorlo.so +%{baseinstdir}/program/libdict_ja.so +%{baseinstdir}/program/libdict_zh.so +%{baseinstdir}/program/libdrawinglayerlo.so +%{baseinstdir}/program/libeditenglo.so +%{baseinstdir}/program/libembobj.so +%{baseinstdir}/program/libemboleobj.so +%{baseinstdir}/program/libevoab*.so +%{baseinstdir}/program/libevtattlo.so +%{baseinstdir}/program/libgielo.so +%{baseinstdir}/program/libicglo.so +%{baseinstdir}/program/libindex_data.so +%{baseinstdir}/program/libfilelo.so +%{baseinstdir}/program/libfilterconfiglo.so +%{baseinstdir}/program/libflatlo.so +%{baseinstdir}/program/libfrmlo.so +%{baseinstdir}/program/libguesslanglo.so +%{baseinstdir}/program/libhelplinkerlo.so +%{baseinstdir}/program/libhyphenlo.so +%{baseinstdir}/program/libjdbclo.so +%{baseinstdir}/program/liblnglo.so +%{baseinstdir}/program/libloglo.so +%{baseinstdir}/program/liblocaledata_en.so +%{baseinstdir}/program/liblocaledata_es.so +%{baseinstdir}/program/liblocaledata_euro.so +%{baseinstdir}/program/liblocaledata_others.so +%{baseinstdir}/program/libmcnttype.so +%{baseinstdir}/program/libmorklo.so +%{baseinstdir}/program/libmozbootstraplo.so +%{baseinstdir}/program/libmsfilterlo.so +%{baseinstdir}/program/libmtfrendererlo.so +%{baseinstdir}/program/libmysqllo.so +%{baseinstdir}/program/libodbclo.so +%{baseinstdir}/program/liboglcanvaslo.so +%{baseinstdir}/program/liboffacclo.so +%{baseinstdir}/program/libooxlo.so +%{baseinstdir}/program/libopencllo.so +%{baseinstdir}/program/libpcrlo.so +%{baseinstdir}/program/libpdffilterlo.so +%{baseinstdir}/program/libprotocolhandlerlo.so +%{baseinstdir}/program/librecentfile.so +%{baseinstdir}/program/libreslo.so +%{baseinstdir}/program/libsaxlo.so +%{baseinstdir}/program/libscnlo.so +%{baseinstdir}/program/libscriptframe.so +%{baseinstdir}/program/libsdlo.so +%{baseinstdir}/program/libsdfiltlo.so +%{baseinstdir}/program/libsdbc2.so +%{baseinstdir}/program/libsdbtlo.so +%{baseinstdir}/program/libsddlo.so +%{baseinstdir}/program/libsduilo.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 +%{baseinstdir}/program/libswdlo.so +%{baseinstdir}/program/libswlo.so +%{baseinstdir}/program/libtextconv_dict.so +%{baseinstdir}/program/libtextconversiondlgslo.so +%{baseinstdir}/program/libtextfdlo.so +%{baseinstdir}/program/libodfflatxmllo.so +# TODO: shouldn't it have lo suffix? +%{baseinstdir}/program/libucbhelper.so +%{baseinstdir}/program/libucpchelp1.so +%{baseinstdir}/program/libucpdav1.so +%{baseinstdir}/program/libucpftp1.so +%{baseinstdir}/program/libucphier1.so +%{baseinstdir}/program/libucppkg1.so +%{baseinstdir}/program/libunordflo.so +%{baseinstdir}/program/libunopkgapp.so +%{baseinstdir}/program/libunoxmllo.so +%{baseinstdir}/program/libuuilo.so +%{baseinstdir}/program/libvbahelperlo.so +%{baseinstdir}/program/libxmlfalo.so +%{baseinstdir}/program/libxmlfdlo.so +%{baseinstdir}/program/libxoflo.so +%{baseinstdir}/program/libxsec_fw.so +%{baseinstdir}/program/libxsec_xmlsec.so +%{baseinstdir}/program/libxsltdlglo.so +%{baseinstdir}/program/libxsltfilterlo.so +%{baseinstdir}/program/libxstor.so +# TODO how useful this is in Fedora? +%{baseinstdir}/program/liblosessioninstalllo.so +%{baseinstdir}/program/libmigrationoo2lo.so +%{baseinstdir}/program/libmigrationoo3lo.so +%{baseinstdir}/program/libmsformslo.so +%{baseinstdir}/program/opencl +%dir %{baseinstdir}/program/opengl +%{baseinstdir}/program/opengl/areaHashCRC64TFragmentShader.glsl +%{baseinstdir}/program/opengl/areaScaleFragmentShader.glsl +%{baseinstdir}/program/opengl/areaScaleFastFragmentShader.glsl +%{baseinstdir}/program/opengl/backgroundFragmentShader.glsl +%{baseinstdir}/program/opengl/backgroundVertexShader.glsl +%{baseinstdir}/program/opengl/blendedTextureFragmentShader.glsl +%{baseinstdir}/program/opengl/blendedTextureVertexShader.glsl +%{baseinstdir}/program/opengl/combinedFragmentShader.glsl +%{baseinstdir}/program/opengl/combinedTextureFragmentShader.glsl +%{baseinstdir}/program/opengl/combinedTextureVertexShader.glsl +%{baseinstdir}/program/opengl/combinedVertexShader.glsl +%{baseinstdir}/program/opengl/commonFragmentShader.glsl +%{baseinstdir}/program/opengl/commonVertexShader.glsl +%{baseinstdir}/program/opengl/convolutionFragmentShader.glsl +%{baseinstdir}/program/opengl/debugFragmentShader.glsl +%{baseinstdir}/program/opengl/debugVertexShader.glsl +%{baseinstdir}/program/opengl/diffTextureFragmentShader.glsl +%{baseinstdir}/program/opengl/dumbVertexShader.glsl +%{baseinstdir}/program/opengl/dummyVertexShader.glsl +%{baseinstdir}/program/opengl/greyscaleFragmentShader.glsl +%{baseinstdir}/program/opengl/invert50FragmentShader.glsl +%{baseinstdir}/program/opengl/lineFragmentShader.glsl +%{baseinstdir}/program/opengl/lineVertexShader.glsl +%{baseinstdir}/program/opengl/linearGradientFragmentShader.glsl +%{baseinstdir}/program/opengl/linearMultiColorGradientFragmentShader.glsl +%{baseinstdir}/program/opengl/linearTwoColorGradientFragmentShader.glsl +%{baseinstdir}/program/opengl/maskedTextureFragmentShader.glsl +%{baseinstdir}/program/opengl/maskedTextureVertexShader.glsl +%{baseinstdir}/program/opengl/maskFragmentShader.glsl +%{baseinstdir}/program/opengl/pickingFragmentShader.glsl +%{baseinstdir}/program/opengl/pickingVertexShader.glsl +%{baseinstdir}/program/opengl/radialGradientFragmentShader.glsl +%{baseinstdir}/program/opengl/radialMultiColorGradientFragmentShader.glsl +%{baseinstdir}/program/opengl/radialTwoColorGradientFragmentShader.glsl +%{baseinstdir}/program/opengl/rectangularMultiColorGradientFragmentShader.glsl +%{baseinstdir}/program/opengl/rectangularTwoColorGradientFragmentShader.glsl +%{baseinstdir}/program/opengl/renderTextureFragmentShader.glsl +%{baseinstdir}/program/opengl/renderTextureVertexShader.glsl +%{baseinstdir}/program/opengl/replaceColorFragmentShader.glsl +%{baseinstdir}/program/opengl/screenTextFragmentShader.glsl +%{baseinstdir}/program/opengl/screenTextVertexShader.glsl +%{baseinstdir}/program/opengl/shape3DFragmentShader.glsl +%{baseinstdir}/program/opengl/shape3DFragmentShaderBatch.glsl +%{baseinstdir}/program/opengl/shape3DFragmentShaderBatchScroll.glsl +%{baseinstdir}/program/opengl/shape3DFragmentShaderV300.glsl +%{baseinstdir}/program/opengl/shape3DVertexShader.glsl +%{baseinstdir}/program/opengl/shape3DVertexShaderBatch.glsl +%{baseinstdir}/program/opengl/shape3DVertexShaderBatchScroll.glsl +%{baseinstdir}/program/opengl/shape3DVertexShaderV300.glsl +%{baseinstdir}/program/opengl/solidFragmentShader.glsl +%{baseinstdir}/program/opengl/symbolFragmentShader.glsl +%{baseinstdir}/program/opengl/symbolVertexShader.glsl +%{baseinstdir}/program/opengl/textFragmentShader.glsl +%{baseinstdir}/program/opengl/textFragmentShaderBatch.glsl +%{baseinstdir}/program/opengl/textVertexShader.glsl +%{baseinstdir}/program/opengl/textVertexShaderBatch.glsl +%{baseinstdir}/program/opengl/textureFragmentShader.glsl +%{baseinstdir}/program/opengl/textureVertexShader.glsl +%{baseinstdir}/program/opengl/transformedTextureVertexShader.glsl +%{baseinstdir}/program/types/offapi.rdb +%{baseinstdir}/program/libpasswordcontainerlo.so +%{baseinstdir}/program/pagein-common +%dir %{baseinstdir}/program/resource +%{baseinstdir}/program/resource/avmediaen-US.res +%{baseinstdir}/program/resource/accen-US.res +%{baseinstdir}/program/resource/basctlen-US.res +%{baseinstdir}/program/resource/biben-US.res +%{baseinstdir}/program/resource/chartcontrolleren-US.res +%{baseinstdir}/program/resource/cuien-US.res +%{baseinstdir}/program/resource/dbaen-US.res +%{baseinstdir}/program/resource/dbmmen-US.res +%{baseinstdir}/program/resource/dbuen-US.res +%{baseinstdir}/program/resource/dbwen-US.res +%{baseinstdir}/program/resource/deploymenten-US.res +%{baseinstdir}/program/resource/deploymentguien-US.res +%{baseinstdir}/program/resource/dkten-US.res +%{baseinstdir}/program/resource/editengen-US.res +%{baseinstdir}/program/resource/epsen-US.res +%{baseinstdir}/program/resource/euren-US.res +%{baseinstdir}/program/resource/fps_officeen-US.res +%{baseinstdir}/program/resource/frmen-US.res +%{baseinstdir}/program/resource/fween-US.res +%{baseinstdir}/program/resource/galen-US.res +%{baseinstdir}/program/resource/impen-US.res +%{baseinstdir}/program/resource/ofaen-US.res +%{baseinstdir}/program/resource/pcren-US.res +%{baseinstdir}/program/resource/pdffilteren-US.res +%{baseinstdir}/program/resource/sben-US.res +%{baseinstdir}/program/resource/scnen-US.res +%{baseinstdir}/program/resource/sden-US.res +%{baseinstdir}/program/resource/sfxen-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/tplen-US.res +%{baseinstdir}/program/resource/uuien-US.res +%{baseinstdir}/program/resource/upden-US.res +%{baseinstdir}/program/resource/vclen-US.res +%{baseinstdir}/program/resource/writerperfecten-US.res +%{baseinstdir}/program/resource/wzien-US.res +%{baseinstdir}/program/resource/xmlsecen-US.res +%{baseinstdir}/program/resource/xsltdlgen-US.res +%{baseinstdir}/program/senddoc +%dir %{baseinstdir}/program/services +%{baseinstdir}/program/services/services.rdb +%{baseinstdir}/program/libsimplecanvaslo.so +%{baseinstdir}/program/libslideshowlo.so +%{baseinstdir}/program/libsofficeapp.so +%{baseinstdir}/program/libstringresourcelo.so +%{baseinstdir}/program/libsysshlo.so +%{baseinstdir}/program/libucpcmis1lo.so +%{baseinstdir}/program/libucpexpand1lo.so +%{baseinstdir}/program/libucpextlo.so +%{baseinstdir}/program/libucpimagelo.so +%{baseinstdir}/program/libucptdoc1lo.so +%{baseinstdir}/program/lounorc +%{baseinstdir}/program/libupdatefeedlo.so +%{baseinstdir}/program/uri-encode +%{baseinstdir}/program/libvbaeventslo.so +%{baseinstdir}/program/libvclcanvaslo.so +%{baseinstdir}/program/versionrc +%{baseinstdir}/program/xid-fullscreen-on-all-monitors +%dir %{baseinstdir}/share +%dir %{baseinstdir}/share/classification +%{baseinstdir}/share/classification/example*.xml +%dir %{baseinstdir}/share/fonts +%dir %{baseinstdir}/share/fonts/truetype +%{baseinstdir}/share/fonts/truetype/fc_local.conf +%dir %{baseinstdir}/share/Scripts +%{baseinstdir}/share/Scripts/java +%dir %{baseinstdir}/share/autotext +%dir %{_datadir}/autocorr +%{baseinstdir}/share/autocorr +%{baseinstdir}/share/autotext/en-US +%{baseinstdir}/share/basic +%dir %{baseinstdir}/share/config +%{baseinstdir}/share/config/images_breeze.zip +%{baseinstdir}/share/config/images_breeze_dark.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 +%dir %{baseinstdir}/share/config/soffice.cfg +%{baseinstdir}/share/config/soffice.cfg/modules +%{baseinstdir}/share/config/soffice.cfg/*/ui +# UI translations go into langpacks +%if %{with langpacks} +%exclude %{baseinstdir}/share/config/soffice.cfg/modules/*/ui/res/* +%exclude %{baseinstdir}/share/config/soffice.cfg/*/ui/res/* +%endif +%dir %{baseinstdir}/share/emojiconfig +%{baseinstdir}/share/emojiconfig/emoji.json +%{baseinstdir}/share/palette +%{baseinstdir}/share/config/webcast +%{baseinstdir}/share/config/wizard +%dir %{baseinstdir}/share/dtd +%{baseinstdir}/share/dtd/officedocument +%{baseinstdir}/share/gallery +%dir %{baseinstdir}/share/labels +%{baseinstdir}/share/labels/labels.xml +%dir %{baseinstdir}/share/psprint +%config %{baseinstdir}/share/psprint/psprint.conf +%{baseinstdir}/share/psprint/driver +%dir %{baseinstdir}/share/registry +%{baseinstdir}/share/registry/gnome.xcd +%{baseinstdir}/share/registry/lingucomponent.xcd +%{baseinstdir}/share/registry/main.xcd +%{baseinstdir}/share/registry/oo-ad-ldap.xcd.sample +%{baseinstdir}/share/registry/oo-ldap.xcd.sample +%{baseinstdir}/share/registry/Langpack-en-US.xcd +%dir %{baseinstdir}/share/registry/res +%{baseinstdir}/share/registry/res/fcfg_langpack_en-US.xcd +%dir %{baseinstdir}/share/template +%{baseinstdir}/share/template/en-US +%dir %{baseinstdir}/share/template/common +%{baseinstdir}/share/template/common/internal +%{baseinstdir}/share/template/common/officorr +%{baseinstdir}/share/template/common/offimisc +%{baseinstdir}/share/template/common/personal +%{baseinstdir}/share/template/common/presnt +%{baseinstdir}/share/template/common/styles +%{baseinstdir}/share/template/common/wizard +%{baseinstdir}/share/template/wizard +%dir %{baseinstdir}/share/wordbook +%{baseinstdir}/share/wordbook/en-GB.dic +%{baseinstdir}/share/wordbook/en-US.dic +%{baseinstdir}/share/wordbook/technical.dic +%{baseinstdir}/program/liblnthlo.so +%{_bindir}/unopkg +%{_mandir}/man1/unopkg.1* +%{baseinstdir}/program/libxmlsecurity.so +%{baseinstdir}/program/libconfigmgrlo.so +%{baseinstdir}/program/libdesktopbe1lo.so +%{baseinstdir}/program/libfsstoragelo.so +%{baseinstdir}/program/libi18npoollo.so +%{baseinstdir}/program/libbasegfxlo.so +# TODO: shouldn't it have lo suffix? +%{baseinstdir}/program/libcomphelper.so +%{baseinstdir}/program/libfwelo.so +%{baseinstdir}/program/libfwilo.so +%{baseinstdir}/program/libfwklo.so +%{baseinstdir}/program/libfwllo.so +%{baseinstdir}/program/libfwmlo.so +# TODO: shouldn't it have lo suffix? +%{baseinstdir}/program/libi18nutil.so +%{baseinstdir}/program/libpackage2.so +%{baseinstdir}/program/libsblo.so +%{baseinstdir}/program/libsfxlo.so +%{baseinstdir}/program/libsotlo.so +%{baseinstdir}/program/libspllo.so +%{baseinstdir}/program/libsvllo.so +%{baseinstdir}/program/libsvtlo.so +%{baseinstdir}/program/libtklo.so +%{baseinstdir}/program/libtllo.so +%{baseinstdir}/program/libucb1.so +%{baseinstdir}/program/libucpfile1.so +%{baseinstdir}/program/libutllo.so +%{baseinstdir}/program/libvcllo.so +%{baseinstdir}/program/libwriterperfectlo.so +%{baseinstdir}/program/libxmlscriptlo.so +%{baseinstdir}/program/libxolo.so +%{baseinstdir}/program/liblocalebe1lo.so +%{baseinstdir}/program/libucpgio1lo.so +%{baseinstdir}/program/types/oovbaapi.rdb +#share unopkg +%dir %{baseinstdir}/share/extensions +%{baseinstdir}/share/extensions/package.txt +%{baseinstdir}/program/unopkg +%{baseinstdir}/program/unopkg.bin +%{baseinstdir}/program/bootstraprc +%{baseinstdir}/program/fundamentalrc +%{baseinstdir}/program/setuprc +%{baseinstdir}/program/intro.* +%{baseinstdir}/program/soffice +%{baseinstdir}/program/soffice.bin +%{baseinstdir}/program/sofficerc +%{baseinstdir}/program/unoinfo +%{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 +#launchers +%{_bindir}/libreoffice +%{_bindir}/openoffice.org +%{_bindir}/soffice +%{_bindir}/ooffice +%{_bindir}/ooviewdoc +%{_mandir}/man1/libreoffice.1* +%{_mandir}/man1/openoffice.org.1* +%{_mandir}/man1/soffice.1* +%{_mandir}/man1/ooffice.1* +%{_mandir}/man1/ooviewdoc.1* + +%if ! 0%{?file_triggers} +%post core +update-desktop-database %{_datadir}/applications &> /dev/null || : + +%postun core +update-desktop-database %{_datadir}/applications &> /dev/null || : +%endif + +%files base +%{baseinstdir}/help/en-US/sdatabase.* +%{baseinstdir}/program/classes/hsqldb.jar +%{baseinstdir}/program/classes/reportbuilder.jar +%{baseinstdir}/program/classes/reportbuilderwizard.jar +%{baseinstdir}/program/classes/sdbc_hsqldb.jar +%{baseinstdir}/program/libabplo.so +%{baseinstdir}/program/libdbplo.so +%{baseinstdir}/program/libhsqldb.so +%{baseinstdir}/program/librptlo.so +%{baseinstdir}/program/librptuilo.so +%{baseinstdir}/program/librptxmllo.so +%{baseinstdir}/program/resource/abpen-US.res +%{baseinstdir}/program/resource/cnren-US.res +%{baseinstdir}/program/resource/dbpen-US.res +%{baseinstdir}/program/resource/rpten-US.res +%{baseinstdir}/program/resource/rptuien-US.res +%{baseinstdir}/program/resource/sdbclen-US.res +%{baseinstdir}/program/resource/sdberren-US.res +%{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* + +%if ! 0%{?file_triggers} +%post base +update-desktop-database %{_datadir}/applications &> /dev/null || : + +%postun base +update-desktop-database %{_datadir}/applications &> /dev/null || : +%endif + +%files bsh +%{baseinstdir}/program/classes/ScriptProviderForBeanShell.jar +%{baseinstdir}/program/services/scriptproviderforbeanshell.rdb +%{baseinstdir}/share/Scripts/beanshell + +%files rhino +%{baseinstdir}/program/classes/js.jar +%{baseinstdir}/program/classes/ScriptProviderForJavaScript.jar +%{baseinstdir}/program/services/scriptproviderforjavascript.rdb +%{baseinstdir}/share/Scripts/javascript + +%files wiki-publisher +%docdir %{baseinstdir}/share/extensions/wiki-publisher/license +%{baseinstdir}/share/extensions/wiki-publisher + +%files nlpsolver +%docdir %{baseinstdir}/share/extensions/nlpsolver/help +%{baseinstdir}/share/extensions/nlpsolver + +%files officebean +%{baseinstdir}/program/classes/officebean.jar +%{baseinstdir}/program/libofficebean.so + +%files officebean-common +%{_javadir}/%{name}/officebean.jar + +%files ogltrans +%{baseinstdir}/program/libOGLTranslo.so +%{baseinstdir}/program/opengl/basicFragmentShader.glsl +%{baseinstdir}/program/opengl/basicVertexShader.glsl +%{baseinstdir}/program/opengl/dissolveFragmentShader.glsl +%{baseinstdir}/program/opengl/fadeBlackFragmentShader.glsl +%{baseinstdir}/program/opengl/fadeFragmentShader.glsl +%{baseinstdir}/program/opengl/glitterFragmentShader.glsl +%{baseinstdir}/program/opengl/glitterVertexShader.glsl +%{baseinstdir}/program/opengl/honeycombFragmentShader.glsl +%{baseinstdir}/program/opengl/honeycombGeometryShader.glsl +%{baseinstdir}/program/opengl/honeycombVertexShader.glsl +%{baseinstdir}/program/opengl/rippleFragmentShader.glsl +%{baseinstdir}/program/opengl/reflectionFragmentShader.glsl +%{baseinstdir}/program/opengl/reflectionVertexShader.glsl +%{baseinstdir}/program/opengl/staticFragmentShader.glsl +%{baseinstdir}/program/opengl/vortexFragmentShader.glsl +%{baseinstdir}/program/opengl/vortexGeometryShader.glsl +%{baseinstdir}/program/opengl/vortexVertexShader.glsl +%{baseinstdir}/share/config/soffice.cfg/simpress/transitions-ogl.xml +%{baseinstdir}/share/registry/ogltrans.xcd + +%files pdfimport +%{baseinstdir}/program/libpdfimportlo.so +%{baseinstdir}/program/xpdfimport +%{baseinstdir}/share/registry/pdfimport.xcd +%dir %{baseinstdir}/share/xpdfimport +%{baseinstdir}/share/xpdfimport/xpdfimport_err.pdf + +%_font_pkg -n %{fontname} opens___.ttf +%doc instdir/LICENSE + +%files calc +%{baseinstdir}/help/en-US/scalc.* +%{baseinstdir}/program/libanalysislo.so +%{baseinstdir}/program/libcalclo.so +%{baseinstdir}/program/libdatelo.so +%{baseinstdir}/program/libforlo.so +%{baseinstdir}/program/libforuilo.so +%{baseinstdir}/program/libpricinglo.so +%{baseinstdir}/program/libsclo.so +%{baseinstdir}/program/libscdlo.so +%{baseinstdir}/program/libscfiltlo.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 +%{baseinstdir}/program/resource/foruien-US.res +%{baseinstdir}/program/resource/pricingen-US.res +%{baseinstdir}/program/resource/scen-US.res +%{baseinstdir}/program/resource/solveren-US.res +%{baseinstdir}/program/libvbaobjlo.so +%{baseinstdir}/share/calc/styles.xml +%{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* + +%if ! 0%{?file_triggers} +%post calc +update-desktop-database %{_datadir}/applications &> /dev/null || : + +%postun calc +update-desktop-database %{_datadir}/applications &> /dev/null || : +%endif + +%files draw +%{baseinstdir}/help/en-US/sdraw.* +%{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* + +%if ! 0%{?file_triggers} +%post draw +update-desktop-database %{_datadir}/applications &> /dev/null || : + +%postun draw +update-desktop-database %{_datadir}/applications &> /dev/null || : +%endif + +%files emailmerge +%{baseinstdir}/program/mailmerge.py* +%{baseinstdir}/program/msgbox.py* + +%files writer +%{baseinstdir}/help/en-US/swriter.* +%{baseinstdir}/program/libhwplo.so +%{baseinstdir}/program/liblwpftlo.so +%{baseinstdir}/program/libmswordlo.so +%{baseinstdir}/program/libswuilo.so +%{baseinstdir}/program/libt602filterlo.so +%{baseinstdir}/program/libwpftwriterlo.so +%{baseinstdir}/program/libwriterfilterlo.so +%{baseinstdir}/program/libvbaswobjlo.so +%{baseinstdir}/program/resource/t602filteren-US.res +%{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* + +%if ! 0%{?file_triggers} +%post writer +update-desktop-database %{_datadir}/applications &> /dev/null || : + +%postun writer +update-desktop-database %{_datadir}/applications &> /dev/null || : +%endif + +%files impress +%{baseinstdir}/help/en-US/simpress.* +%{baseinstdir}/program/libplacewarelo.so +%{baseinstdir}/program/libPresentationMinimizerlo.so +%{baseinstdir}/program/libPresenterScreenlo.so +%{baseinstdir}/program/libwpftimpresslo.so +%dir %{baseinstdir}/share/config/soffice.cfg/simpress +%{baseinstdir}/share/config/soffice.cfg/simpress/effects.xml +%{baseinstdir}/share/config/soffice.cfg/simpress/layoutlist.xml +%{baseinstdir}/share/config/soffice.cfg/simpress/objectlist.xml +%{baseinstdir}/share/config/soffice.cfg/simpress/transitions.xml +%{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* + +%if ! 0%{?file_triggers} +%post impress +update-desktop-database %{_datadir}/applications &> /dev/null || : + +%postun impress +update-desktop-database %{_datadir}/applications &> /dev/null || : +%endif + +%files math +%{baseinstdir}/help/en-US/smath.* +%{baseinstdir}/program/libsmlo.so +%{baseinstdir}/program/libsmdlo.so +%{baseinstdir}/program/resource/smen-US.res +%{baseinstdir}/share/registry/math.xcd +%{baseinstdir}/program/smath +%{_datadir}/applications/libreoffice-math.desktop +%{_bindir}/oomath +%{_mandir}/man1/oomath.1* + +%if ! 0%{?file_triggers} +%post math +update-desktop-database %{_datadir}/applications &> /dev/null || : + +%postun math +update-desktop-database %{_datadir}/applications &> /dev/null || : +%endif + +%files graphicfilter +%{baseinstdir}/program/libflashlo.so +%{baseinstdir}/program/libgraphicfilterlo.so +%{baseinstdir}/program/libsvgfilterlo.so +%{baseinstdir}/program/libwpftdrawlo.so +%{baseinstdir}/share/registry/graphicfilter.xcd + +%files xsltfilter +%{baseinstdir}/share/xslt +%{baseinstdir}/share/registry/xsltfilter.xcd +%{_datadir}/applications/libreoffice-xsltfilter.desktop + +%files postgresql +%{baseinstdir}/program/libpostgresql-sdbclo.so +%{baseinstdir}/program/libpostgresql-sdbc-impllo.so +%{baseinstdir}/program/postgresql-sdbc.ini +%{baseinstdir}/program/services/postgresql-sdbc.rdb +%{baseinstdir}/share/registry/postgresql.xcd + +%files ure +%{baseinstdir}/program/classes/java_uno.jar +%{baseinstdir}/program/classes/juh.jar +%{baseinstdir}/program/classes/jurt.jar +%{baseinstdir}/program/classes/ridl.jar +%{baseinstdir}/program/classes/unoloader.jar +%{baseinstdir}/program/javaldx +%{baseinstdir}/program/javavendors.xml +%{baseinstdir}/program/jvmfwk3rc +%{baseinstdir}/program/JREProperties.class +%{baseinstdir}/program/libaffine_uno_uno.so +%{baseinstdir}/program/libbinaryurplo.so +%{baseinstdir}/program/libbootstraplo.so +%{baseinstdir}/program/libgcc3_uno.so +%{baseinstdir}/program/libi18nlangtag.so +%{baseinstdir}/program/libintrospectionlo.so +%{baseinstdir}/program/libinvocadaptlo.so +%{baseinstdir}/program/libinvocationlo.so +%{baseinstdir}/program/libiolo.so +%{baseinstdir}/program/libjava_uno.so +%{baseinstdir}/program/libjavaloaderlo.so +%{baseinstdir}/program/libjavavmlo.so +%{baseinstdir}/program/libjpipe.so +%{baseinstdir}/program/libjuh.so +%{baseinstdir}/program/libjuhx.so +%{baseinstdir}/program/libjvmaccesslo.so +%{baseinstdir}/program/libjvmfwklo.so +%{baseinstdir}/program/liblog_uno_uno.so +%{baseinstdir}/program/libnamingservicelo.so +%{baseinstdir}/program/libproxyfaclo.so +%{baseinstdir}/program/libreflectionlo.so +%{baseinstdir}/program/libreglo.so +%{baseinstdir}/program/libsal_textenclo.so +%{baseinstdir}/program/libstocserviceslo.so +%{baseinstdir}/program/libstorelo.so +%{baseinstdir}/program/libuno_cppu.so.3 +%{baseinstdir}/program/libuno_cppuhelpergcc3.so.3 +%{baseinstdir}/program/libuno_purpenvhelpergcc3.so.3 +%{baseinstdir}/program/libuno_sal.so.3 +%{baseinstdir}/program/libuno_salhelpergcc3.so.3 +%{baseinstdir}/program/libunoidllo.so +%{baseinstdir}/program/libunsafe_uno_uno.so +%{baseinstdir}/program/libuuresolverlo.so +%{baseinstdir}/program/libxmlreaderlo.so +%{baseinstdir}/program/regmerge +%{baseinstdir}/program/regview +%{baseinstdir}/program/services.rdb +%{baseinstdir}/program/types.rdb +%{baseinstdir}/program/uno +%{baseinstdir}/program/uno.bin +%{baseinstdir}/program/unorc + +%files ure-common +%dir %{_javadir}/%{name} +%{_javadir}/%{name}/juh.jar +%{_javadir}/%{name}/jurt.jar +%{_javadir}/%{name}/ridl.jar +%{_javadir}/%{name}/unoloader.jar +%license instdir/LICENSE + +%files sdk +%{sdkinstdir}/ +%exclude %{sdkinstdir}/docs/ +%exclude %{sdkinstdir}/examples/ + +%files sdk-doc +%docdir %{sdkinstdir}/docs +%license instdir/LICENSE +%{sdkinstdir}/docs/ +%{sdkinstdir}/examples/ + +%files pyuno +%{baseinstdir}/program/libpyuno.so +%{baseinstdir}/program/pythonloader.py* +%{baseinstdir}/program/libpythonloaderlo.so +%{baseinstdir}/program/pythonloader.unorc +%{baseinstdir}/program/pythonscript.py* +%{baseinstdir}/program/pyuno.so +%{baseinstdir}/program/services/pyuno.rdb +%{baseinstdir}/program/services/scriptproviderforpython.rdb +%{baseinstdir}/program/wizards +%{baseinstdir}/share/Scripts/python +%exclude %{baseinstdir}/share/Scripts/python/LibreLogo +%{libo_python_sitearch}/uno.py* +%{libo_python_sitearch}/unohelper.py* +%{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 + +%files librelogo +%{baseinstdir}/share/registry/librelogo.xcd +%{baseinstdir}/share/Scripts/python/LibreLogo + +%files glade +%{baseinstdir}/program/ui-previewer +%{_datadir}/glade +%{_datadir}/glade3 + +%files data +%{_datadir}/icons/hicolor/*/*/libreoffice* +%{_datadir}/icons/locolor/*/*/libreoffice* +%{_datadir}/mime-info/libreoffice.* +%{_datadir}/mime/packages/libreoffice.xml +# TODO: rename -data to -core-common? +%dir %{_javadir}/%{name} +%{_javadir}/%{name}/unoil.jar +%dir %{datadir} +%doc instdir/CREDITS.fodt +%doc instdir/LICENSE.html +%doc instdir/LICENSE.fodt +%doc instdir/LICENSE +%doc instdir/NOTICE +%license instdir/LICENSE + +%post data +%if ! 0%{?file_triggers} +touch --no-create %{_datadir}/mime/packages &> /dev/null || : +%endif +for theme in hicolor locolor; do + touch --no-create %{_datadir}/icons/$theme &>/dev/null || : +done + +%postun data +if [ $1 -eq 0 ] ; then +%if ! 0%{?file_triggers} + touch --no-create %{_datadir}/mime/packages &> /dev/null || : + update-mime-database %{?fedora:-n} %{_datadir}/mime &> /dev/null || : +%endif + 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 +fi + +%posttrans data +%if ! 0%{?file_triggers} +update-mime-database %{?fedora:-n} %{_datadir}/mime &> /dev/null || : +%endif +for theme in hicolor locolor; do + gtk-update-icon-cache -q %{_datadir}/icons/$theme &>/dev/null || : +done + +%files x11 +%{baseinstdir}/program/libvclplug_genlo.so + +%files gtk2 +%{baseinstdir}/program/libvclplug_gtklo.so + +%files gtk3 +%{baseinstdir}/program/libvclplug_gtk3lo.so + +%if 0%{?fedora} + +%files kde4 +%{baseinstdir}/program/libkde4be1lo.so +%{baseinstdir}/program/libvclplug_kde4lo.so + +%endif + +%files -n libreofficekit +%{baseinstdir}/share/libreofficekit +%{_libdir}/girepository-1.0/LOKDocView-%{girapiversion}.typelib +%{_libdir}/liblibreofficekitgtk.so + +%files -n libreofficekit-devel +%{_libdir}/gir-1.0/LOKDocView-%{girapiversion}.gir +%{_includedir}/LibreOfficeKit + +%changelog +* Mon Sep 09 2019 Caolán McNamara - 1:5.3.6.1-23 +- Resolves: rhbz#1601372 libreoffice fails to build with --nocheck + +* Fri Sep 06 2019 Caolán McNamara - 1:5.3.6.1-22 +- Resolves: rhbz#1743962 CVE-2019-9848 +- Resolves: rhbz#1743954 CVE-2019-9849 + +* Thu Feb 21 2019 Caolán McNamara - 1:5.3.6.1-21 +- Resolves: rhbz#1066844 drop libreofficekit requires + +* Mon Feb 04 2019 Caolán McNamara - 1:5.3.6.1-20 +- Resolves: rhbz#1672003 CVE-2018-16858 + +* Fri Aug 10 2018 Caolán McNamara - 1:5.3.6.1-19 +- Resolves: rhbz#1614419 detect PK11_ImportSymKey failure under FIPS + +* Fri Aug 03 2018 Caolán McNamara - 1:5.3.6.1-18 +- Resolves: rhbz#1610904 draw glitches in drag cursor + +* Wed Aug 01 2018 Stephan Bergmann - 1:5.3.6.1-17 +- Resolves: rhbz#1545262 Workaround for spurious ppc64le automated testing crash +- Resolves: rhbz#1610692 silence console warnings from print dialog + +* Mon Jun 11 2018 Caolán McNamara - 1:5.3.6.1-16 +- Resolves: rhbz#1589029 impress not showing text-highlight in presentation mode + +* Wed May 09 2018 Caolán McNamara - 1:5.3.6.1-15 +- Resolves: rhbz#1575826 CVE-2018-10583 + +* Thu Apr 26 2018 Caolán McNamara - 1:5.3.6.1-14 +- Resolves: rhbz#1568579 zombie when run in daemon mode + +* Wed Apr 25 2018 Caolán McNamara - 1:5.3.6.1-13 +- Resolves: rhbz#1388764 in calc old text shown underneath new text sometimes + +* Wed Apr 25 2018 Caolán McNamara - 1:5.3.6.1-12 +- Resolves: rhbz#1546997 'search not found' misplaced + +* Mon Apr 23 2018 Caolán McNamara - 1:5.3.6.1-11 +- Resolves: rhbz#1570487 rhbz#1570491 CVE-2018-10119 CVE-2018-10120 + +* Fri Feb 16 2018 Stephan Bergmann - 1:5.3.6.1-10 +- Resolves: rhbz#1545629 libreoffice-debuginfo doesn't contain debug info + +* Wed Feb 14 2018 Caolán McNamara - 1:5.3.6.1-9 +- Resolves: rhbz#1545036 CVE-2018-1055 CVE-2018-6871 + +* Tue Feb 06 2018 Stephan Bergmann - 1:5.3.6.1-8 +- Resolves: rhbz#1541486 Base table dialog title shown in wrong language + +* Tue Jan 30 2018 David Tardon - 1:5.3.6.1-7 +- Resolves: rhbz#1535541 *.macroEnabled mime types wrongly listed as + *.macroenabled + +* Mon Jan 15 2018 Caolán McNamara - 1:5.3.6.1-6 +- Resolves: rhbz#1527945 segv on password protected document + +* Sun Dec 03 2017 David Tardon - 1:5.3.6.1-5 +- Resolves: rhbz#1473749 libreoffice apps are unable to show license + +* Wed Nov 15 2017 Caolán McNamara - 1:5.3.6.1-4 +- Resolves: rhbz#1505379 open comboboxes block other apps + +* Fri Oct 20 2017 David Tardon - 1:5.3.6.1-3 +- Related: rhbz#1474303 import ODF draw:fit-to-size attribute + +* Mon Oct 02 2017 David Tardon - 1:5.3.6.1-2 +- Related: rhbz#1474303 install gtk3 plugin by default + +* Mon Sep 18 2017 David Tardon - 1:5.3.6.1-1 +- Resolves: rhbz#1474303 rebase to 5.3.6 + +* Fri Jun 16 2017 Caolán McNamara - 1:5.0.6.2-14 +- Resolves: rhbz#1454693 segv on interrupting tiled rendering + +* Thu Jun 15 2017 Caolán McNamara - 1:5.0.6.2-13 +- Related: rhbz#1444437 remove timer if document closed before it fires + +* Tue Jun 06 2017 Caolán McNamara - 1:5.0.6.2-12 +- Resolves: rhbz#1454598 crash on selecting bullet from toolbar + +* Thu May 25 2017 Caolán McNamara - 1:5.0.6.2-11 +- Related: rhbz#1444437 restart second instance cleanly + +* Wed May 10 2017 Caolán McNamara - 1:5.0.6.2-10 +- Resolves: rhbz#1444437 segv in gnome-documents integration + +* Wed Apr 26 2017 David Tardon - 1:5.0.6.2-9 +- Resolves: rhbz#1445635 CVE-2017-7870 Heap-buffer-overflow in + tools::Polygon::Insert + +* Fri Mar 31 2017 Caolán McNamara - 1:5.0.6.2-8 +- Resolves: rhbz#1437537 fix csv a11y + +* Sun Mar 26 2017 David Tardon - 1:5.0.6.2-7 +- Resolves: rhbz#1431539 gnome-documents needs libreofficekit +- Resolves: rhbz#1435535 CVE-2017-3157 Arbitrary file disclosure in + Calc and Writer + +* Tue Feb 21 2017 Caolán McNamara - 1:5.0.6.2-6 +- Resolves: rhbz#1401082 gnome hangs opening certain docx +- Resolves: rhbz#1421726 drop use of CAIRO_OPERATOR_DIFFERENCE + +* Thu Feb 09 2017 Michael Stahl - 1:5.0.6.2-5 +- Resolves: rhbz#1411327 Encrypted files opening as plain text after + cancelling password dialog + +* Fri Dec 02 2016 Caolán McNamara - 1:5.0.6.2-4 +- Resolves: rhbz#1378521 crash in calc on exit after using csv dialog with a11y enabled +- Resolves: rhbz#1397992 crash in calc on closing dialog with a11y enabled + +* Tue Aug 23 2016 David Tardon - 1:5.0.6.2-3 +- Resolves: rhbz#1364335 tooltips are truncated + +* Fri Jul 08 2016 David Tardon - 1:5.0.6.2-2 +- Resolves: rhbz#1353839 CVE-2016-4324 dereference of invalid STL iterator on + processing RTF file + +* Tue May 03 2016 David Tardon - 1:5.0.6.2-1 +- Related: rhbz#1290148 rebase to 5.0.6 +- Related: rhbz#1290148 include more fixes from F-23 + +* Fri Mar 04 2016 David Tardon - 1:5.0.5.2-2 +- Related: rhbz#1290148 remove unintentional dependency of libreoffice-core on + libreoffice-calc +- Related: rhbz#1290148 restore lost changelog entry +- Related: rhbz#1290148 add additional 5.0.6 patches + +* Tue Mar 01 2016 David Tardon - 1:5.0.5.2-1 +- Resolves: rhbz#1290148 rebase to 5.0.x + +* Wed Dec 02 2015 David Tardon - 1:4.3.7.2-5.1 +- Resolves: rhbz#1285820 various flaws +- CVE-2015-4551 Arbitrary file disclosure in Calc and Writer +- CVE-2015-5212 Integer underflow in PrinterSetup length +- CVE-2015-5213 Integer overflow in DOC files +- CVE-2015-5214 Bookmarks in DOC documents are insufficiently checked + causing memory corruption + +* 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 + +* Fri Nov 21 2014 David Tardon - 1:4.2.6.3-4 +- Resolves: rhbz#1111216 LibreOffice Calc: PDF export of an empty document fails + with Write Error + +* Mon Nov 17 2014 Caolán McNamara - 1:4.2.6.3-3 +- CVE-2014-3693: Disable sdremote by default and improve flow control + +* Fri Sep 05 2014 David Tardon - 1:4.2.6.3-2 +- Related: rhbz#1119709 port LibreOffice to aarch64 + +* Thu Aug 28 2014 David Tardon - 1:4.2.6.3-1 +- Resolves: rhbz#1119709 rebase to 4.2.6 + +* Fri Aug 22 2014 Caolán McNamara - 1:4.1.4.2-4 +- Resolves: rhbz#1125588 port LibreOffice to ppc64le + +* Fri Jan 24 2014 Daniel Mach - 1:4.1.4.2-3 +- Mass rebuild 2014-01-24 + +* Mon Jan 13 2014 Caolán McNamara - 1:4.1.4.2-2 +- Resolves: rhbz#1040777 rename "Oriya" to "Odia" + +* Wed Jan 08 2014 David Tardon - 1:4.1.4.2-1 +- Resolves: rhbz#1049791 rebase to 4.1.4 +- also add a load of 4.1.5 patches + +* Fri Dec 27 2013 Daniel Mach - 1:4.1.3.2-6 +- Mass rebuild 2013-12-27 + +* Wed Dec 11 2013 Caolán McNamara - 1:4.1.3.2-5 +- Resolves: rhbz#1035092 no shortcut key for Italian Tools + +* Tue Nov 12 2013 David Tardon - 1:4.1.3.2-4 +- Related: rhbz#1019277 fix rpmdiff problem + +* Fri Nov 01 2013 David Tardon - 1:4.1.3.2-3 +- Resolves: rhbz#1019277 rebase libreoffice to 4.1.3 + +* Mon Sep 16 2013 David Tardon - 1:4.1.0.4-6 +- rebuild for ICU ABI break + +* Tue Jul 30 2013 Stephan Bergmann - 1:4.1.0.4-5 +- Resolves: rhbz#989246 Honor user's JavaDriverClass override in mysql driver +- Resolves: fdo#67045 fix several nasty screen selection issues + +* Tue Jul 30 2013 Caolán McNamara - 1:4.1.0.4-4 +- Resolves: rhbz#989686 Fix crash with stripping whitespace from toc entries + +* Mon Jul 29 2013 David Tardon - 1:4.1.0.4-3 +- make libwpd-based filters work correctly with newest libwpd + +* Sun Jul 28 2013 Petr Machata - 1:4.1.0.4-2 +- Rebuild for boost 1.54.0 + +* Wed Jul 24 2013 David Tardon - 1:4.1.0.4-1 +- 4.1.0 rc4 + +* Mon Jul 22 2013 Eike Rathke - 1:4.1.0.3-2 +- force rebuild with icu-50.1.2-7 + +* Thu Jul 18 2013 David Tardon - 1:4.1.0.3-1 +- 4.1.0 rc3 +- Resolves: fdo#48835 GNOME3 app menu + +* Thu Jul 18 2013 Caolán McNamara - 1:4.1.0.2-5 +- silence scary gcc warning +- fdo#66924 switching to master view is broken + +* Tue Jul 16 2013 David Tardon - 1:4.1.0.2-4 +- bump release + +* Fri Jul 12 2013 David Tardon - 1:4.1.0.2-3 +- Resolves: rhbz#983809 libreoffice-base misses deps on needed java packages + +* Thu Jul 11 2013 David Tardon - 1:4.1.0.2-2 +- Resolves: rhbz#980387 Exporting a odg to jpg or tiff generates error + +* Thu Jul 04 2013 David Tardon - 1:4.1.0.2-1 +- 4.1.0 rc2 + +* Mon Jul 01 2013 Caolán McNamara - 1:4.1.0.1-8 +- Resolves: rhbz#979758 crash on Diagrammen in LibreOffice help page + +* Thu Jun 27 2013 David Tardon - 1:4.1.0.1-7 +- bump revision + +* Mon Jun 24 2013 Marek Kasik - 1:4.1.0.1-6 +- Rebuild (poppler-0.22.5) + +* Mon Jun 24 2013 David Tardon - 1:4.1.0.1-5 +- fix build on big endian archs + +* Mon Jun 24 2013 David Tardon - 1:4.1.0.1-4 +- put glade catalog into an extra packgae + +* Sun Jun 23 2013 Caolán McNamara - 1:4.1.0.1-3 +- Resolves: rhbz#976304 gallery elements may not insert + +* Wed Jun 19 2013 Dennis Gilmore - 1:4.1.0.1-2 +- fix _smp_mflags macro useage + +* Wed Jun 19 2013 David Tardon - 1:4.1.0.1-1 +- 4.1.0 rc1 +- Related: rhbz#971321 failing tests on ppc and s390 + +* Sun Jun 16 2013 David Tardon - 1:4.1.0.0-9.beta2 +- Resolves: rhbz#971321 failing tests on ppc and s390 +- Resolves: rhbz#974062 incorrect rendering of text in outline blocks in + Impress + +* Fri Jun 07 2013 David Tardon - 1:4.1.0.0-8.beta2 +- Related: rhbz#971795 go back to BR: harfbuzz-devel + +* Fri Jun 07 2013 David Tardon - 1:4.1.0.0-7.beta2 +- Resolves: rhbz#971230 Use BR: harfbuzz-icu-devel + +* Wed Jun 05 2013 David Tardon - 1:4.1.0.0-7.beta1 +- 4.1.0 beta2 + +* Wed Jun 05 2013 Caolán McNamara - 1:4.1.0.0-6.beta1 +- Related: rhbz#968892 discard impossible languages for Oriya script + +* Tue Jun 04 2013 Caolán McNamara - 1:4.1.0.0-5.beta1 +- Resolves: rhbz#968892 block entire grapheme together for glyph fallback +- Related: rhbz#968892 discard impossible languages for glyph fallback + +* Fri May 31 2013 Caolán McNamara - 1:4.1.0.0-4.beta1 +- Resolves: rhbz#968976 fix dropdown list autosizing + +* Thu May 30 2013 David Tardon - 1:4.1.0.0-3.beta1 +- build fix for s390 + +* Fri May 24 2013 David Tardon - 1:4.1.0.0-2.beta1 +- 4.1.0 beta1 + +* Fri May 24 2013 Stephan Bergmann - 1:4.0.3.3-3 +- Resolves: rhbz#961460 can't save WebDAV (davs) files + +* Thu May 16 2013 Caolán McNamara - 1:4.0.3.3-2 +- Resolves: rhbz#963276 font options cache crash + +* Fri May 03 2013 David Tardon - 1:4.0.3.3-1 +- 4.0.3 rc3 + +* Tue Apr 30 2013 David Tardon - 1:4.0.3.2-1 +- 4.0.3 rc2 + +* Mon Apr 22 2013 Stephan Bergmann - 1:4.0.3.1-2 +- Resolves: rhbz#954991 Avoid static data (causing trouble at exit) + +* Thu Apr 18 2013 David Tardon - 1:4.0.3.1-1 +- 4.0.3 rc1 +- Resolves: rhbz#867808 do not throw UNO exceptions by pointer in C++ + +* Tue Apr 16 2013 Caolán McNamara - 1:4.0.2.2-4 +- Resolves: rhbz#927223 syntax highlighting crash + +* Mon Apr 08 2013 Caolán McNamara - 1:4.0.2.2-3 +- Resolves: rhbz#949238 div by zero on pagedown in 0 width panel + +* Fri Apr 05 2013 Kalev Lember - 1:4.0.2.2-2 +- Resolves: rhbz#949106 libreoffice drags in both openjdk 1.7.0 and 1.8.0 + +* Thu Mar 28 2013 David Tardon - 1:4.0.2.2-1 +- 4.0.2 rc2 +- Resolves: rhbz#876742 manipulation with larger tables in impress is + very slow + +* Fri Mar 15 2013 Caolán McNamara - 1:4.0.2.1-2 +- Resolves: rhbz#906137 slide show inverts outputs + +* Fri Mar 15 2013 David Tardon - 1:4.0.2.1-1 +- 4.0.2 rc1 +- Resolves: rhbz#921716 Build Breton language pack + +* Wed Mar 13 2013 Stephan Bergmann - 1:4.0.1.2-4 +- Resolves: rhbz#895690 failure saving to gvfs mounts + +* Tue Mar 12 2013 Caolán McNamara - 1:4.0.1.2-3 +- Resolves: rhbz#920697 presentation not always full-screen + +* Thu Mar 07 2013 Caolán McNamara - 1:4.0.1.2-2 +- Related: rhbz#902884 check for NULL GetSelectedMasterPage +- Resolves: fdo#61241 force area page to size itself +- Resolves: fdo#61656 use order and orientation combobox +- Resolves: fdo#56031 RSID attr changes drop content changes + +* Thu Feb 28 2013 David Tardon - 1:4.0.1.2-1 +- 4.0.1 rc2 + +* Tue Feb 26 2013 Eike Rathke - 1:4.0.0.3-8 +- do not access vector elements beyond size, rhbz#847519 related +- Resolves: rhbz#742780 let make OPT_FLAGS=... override SDK flags +- Resolves: rhbz#907933 crash on removing second last para + +* Tue Feb 19 2013 Caolán McNamara - 1:4.0.0.3-7 +- Resolves: rhbz#895196 sc filter float a11y parent of itself + +* Tue Feb 19 2013 David Tardon - 1:4.0.0.3-6 +- Resolves: rhbz#911896 add Kazakh localization + +* Fri Feb 15 2013 Caolán McNamara - 1:4.0.0.3-5 +- make evolution 3.6 work with address book +- Resolves: rhbz#910176 cannot select directory with gtk folder picker +- fixes for building against Boost 1.53.0 + +* Fri Feb 15 2013 Stephan Bergmann - 1:4.0.0.3-4 +- Resolves: fdo#60491 missing libemboleobj.so +- Resolves: rhbz#908674 crash on start + +* Sat Feb 09 2013 Denis Arnaud - 1:4.0.0.3-3 +- Rebuild for Boost-1.53.0 + +* Wed Feb 06 2013 David Tardon - 1:4.0.0.3-2 +- fix parsing errors in translated help + +* Fri Feb 01 2013 David Tardon - 1:4.0.0.3-1 +- 4.0.0 rc3 + +* Wed Jan 23 2013 David Tardon - 1:4.0.0.2-1 +- 4.0.0 rc2 +- use ucpp again + +* Tue Jan 22 2013 David Tardon - 1:4.0.0.1-3 +- Resolves: rhbz#760765 Impress doesn't copy custom styles from one file + to another + +* Mon Jan 21 2013 David Tardon - 1:4.0.0.1-2 +- Resolves: rhbz#901346 do not install 512x512 icons + +* Tue Jan 15 2013 David Tardon - 1:4.0.0.1-1 +- 4.0.0 rc1 + +* Sat Dec 22 2012 David Tardon - 1:4.0.0.0-4.beta2 +- use system cpp instead of ucpp + +* Wed Dec 19 2012 David Tardon - 1:4.0.0.0-3.beta2 +- 4.0.0 beta2 + +* Thu Dec 06 2012 David Tardon - 1:4.0.0.0-2.beta1 +- 4.0.0 beta1 + +* Thu Nov 29 2012 David Tardon - 1:3.6.4.3-1 +- 3.6.4 rc3 + +* Wed Nov 28 2012 Caolán McNamara - 1:3.6.4.1-2 +- fix docx import on big endian + +* Sun Nov 18 2012 David Tardon - 1:3.6.4.1-1 +- 3.6.4 rc1 + +* Wed Nov 14 2012 Caolán McNamara - 1:3.6.3.2-8 +- Resolves: rhbz#872815 ogltrans effects still suboptimal + +* Tue Nov 13 2012 Caolán McNamara - 1:3.6.3.2-7 +- big endian test failure + +* Thu Nov 08 2012 Caolán McNamara - 1:3.6.3.2-6 +- Resolves: fdo#56198/rhbz#868002 honour gtk-scrollbar-warp-preference + +* Tue Nov 06 2012 Caolán McNamara - 1:3.6.3.2-5 +- bump for libexttextcat + +* Fri Nov 02 2012 David Tardon - 1:3.6.3.2-4 +- Resolves: rhbz#871929 add keywords to desktop files +- fix debuginfo + +* Wed Oct 31 2012 Eike Rathke - 1:3.6.3.2-3 +- Resolves: rhbz#865058 increase number of user-defined format codes + +* Fri Oct 26 2012 David Tardon - 1:3.6.3.2-2 +- Resolves: rhbz#824035 do not bundle saxon + +* Wed Oct 24 2012 David Tardon - 1:3.6.3.2-1 +- 3.6.3 rc2 +- drop integrated 0001-Resolves-rhbz-868479-fdo-56281-doubled-in-German-ok-.patch + +* Mon Oct 22 2012 Caolán McNamara - 1:3.6.3.1-3 +- Resolves: rhbz#868479 guard against duplicated ~ in OK/Cancel + +* Thu Oct 11 2012 David Tardon - 1:3.6.3.1-2 +- Resolves: rhbz#858641 backport gstreamer 1.0 support to F-18 + +* Thu Oct 11 2012 Caolán McNamara - 1:3.6.3.1-1 +- 3.6.3 rc1 +- drop integrated 0001-Resolves-rhbz-855972-crash-on-switching-to-outline-v.patch +- drop integrated 0001-fdo-52022-Simple-LargeControlPoints-actually-can-hav.patch +- drop integrated 0001-fdo-46071-Do-not-hide-windows-based-on-nil-Visible-p.patch + +* Fri Oct 05 2012 Stephan Bergmann - 1:3.6.2.2-3 +- Resolves: fdo#46071 Do not hide windows based on nil Visible property + +* Fri Oct 05 2012 Stephan Bergmann - 1:3.6.2.2-2 +- Resolves: fdo#52022 Part of data in userdir is lost on upgrade + +* Wed Sep 26 2012 David Tardon - 1:3.6.2.2-1 +- 3.6.2 rc2 + +* Wed Sep 12 2012 Caolán McNamara - 1:3.6.2.1-2 +- Resolves: rhbz#855541 XIOError handler multithread woes + +* Wed Sep 12 2012 David Tardon - 1:3.6.2.1-1 +- 3.6.2 rc1 + +* Tue Sep 11 2012 Caolán McNamara - 1:3.6.1.2-4 +- Resolves: rhbz#855507 large ole2 compound files fail to load + +* Mon Sep 10 2012 Caolán McNamara - 1:3.6.1.2-3 +- Resolves: rhbz#855972 crash on switching to outline view + +* Wed Aug 29 2012 Caolán McNamara - 1:3.6.1.2-2 +- Related: rhbz#850709 hunspell en-US available standalone so + make English langpack require hunspell-en and core just + bare bones hunspell-en-US + +* Sun Aug 26 2012 David Tardon - 1:3.6.1.2-1 +- 3.6.1 rc2 + +* Wed Aug 22 2012 Caolán McNamara - 1:3.6.1.1-2 +- Resolves: rhbz#846775 Clipboard must be disposed before selection +- Resolves: rhbz#842292 crash in scrolling multiselection in draw + +* Wed Aug 15 2012 David Tardon - 1:3.6.1.1-1 +- 3.6.1 rc1 + +* Sun Aug 12 2012 Kevin Fenzi - 1:3.6.0.4-3 +- Rebuild for new boost + +* Sat Jul 28 2012 David Tardon - 1:3.6.0.4-2 +- rebuilt for boost 1.50 + +* Fri Jul 27 2012 David Tardon - 1:3.6.0.4-1 +- 3.6.0 rc4 + +* Thu Jul 26 2012 David Tardon - 1:3.6.0.3-2 +- Resolves: rhbz#842552 crash in pptx import + +* Wed Jul 25 2012 David Tardon - 1:3.6.0.3-1 +- 3.6.0 rc3 + +* Tue Jul 17 2012 David Tardon - 1:3.6.0.2-1 +- 3.6.0 rc2 + +* Mon Jul 16 2012 Caolán McNamara - 1:3.6.0.1-3 +- Resolves: rhbz#836937 insanely slow with Zemberek + +* Mon Jul 16 2012 David Tardon - 1:3.6.0.1-2 +- rebuild for new libexttextcat + +* Thu Jul 12 2012 David Tardon - 3.6.0.1-1 +- 3.6.0 rc1 + +* Mon Jul 09 2012 Caolán McNamara - 3.6.0.0-4 +- Resolves: rhbz#838368 --view ignored while -view accepted + +* Thu Jul 05 2012 David Tardon - 3.6.0.0-3 +- 3.6.0 beta3 + +* Mon Jul 2 2012 Marek Kasik - 3.6.0.0-2 +- Rebuild (poppler-0.20.1) + +* Wed Jun 27 2012 David Tardon - 3.6.0.0-1 +- 3.6.0 beta2 +- drop integrated 0001-move-binfilter-mime-types-into-extra-.desktop-file.patch +- drop integrated 0001-Resolves-rhbz-788042-skip-splashscreen-with-quicksta.patch +- drop integrated libreoffice-ensure-non-broken-xml-tree.patch +- drop integrated 0001-preserve-timestamps-for-.py-files.patch +- drop integrated 0001-Resolves-rhbz-788045-swriter-help-etc-doesn-t-show-h.patch +- drop integrated 0001-Resolves-rhbz-799525-put-flat-odf-mimetypes-in-xsltf.patch +- drop integrated 0001-Resolves-rhbz-800272-complain-about-unknown-command-.patch +- drop integrated 0001-Resolves-rhbz-806663-SlideshowImpl-can-outlive-SdMod.patch +- drop integrated 0001-desktop-do-not-complain-about-soffice-command-line-o.patch +- drop integrated 0001-Resolves-fdo-48096-torn-off-popups-trigger-keyboard-.patch +- drop integrated 0001-fdo-38088-better-CSV-import-default-separators.patch +- drop integrated 0001-save-register-arguments-first.patch +- drop integrated 0001-do-not-let-gcc-use-registers-we-are-setting-ourselve.patch +- drop integrated 0001-wrong-types-used-here-breaks-64bit-bigendian.patch +- drop integrated 0001-Resolves-rhbz-805743-a11y-call-doShow-after-we-have-.patch +- drop integrated 0001-Resolves-fdo-49849-implement-Unicode-6.1-hebrew-line.patch +- drop integrated 0001-use-ure-instead-of-ure-link.patch +- drop broken 0001-fix-setting-of-paper-tray-from-print-dialog-fdo-4393.patch + +* Mon Jun 18 2012 Caolán McNamara - 3.5.5.1-2 +- Resolves: rhbz#830810 missing dependency on lucene-contrib + +* Thu Jun 14 2012 David Tardon - 3.5.5.1-1 +- 3.5.5 rc1 +- drop integrated 0001-make-hsqldb-build-with-java-1.7.patch +- drop integrated 0001-Related-rhbz-799628-crash-with-chewing-IM-with-g3g.patch +- drop integrated 0001-silence-SolarMutex-not-locked-spew.patch +- drop integrated 0001-gcc-trunk-fix-unable-to-find-string-literal-operator.patch +- drop integrated 0001-ppc-yyinput-returns-a-int-truncating-to-unsigned-cha.patch +- drop integrated 0001-Resolves-rhbz-826609-rhbz-820554-fix-smoketest-on-pp.patch + +* Mon Jun 11 2012 David Tardon - 3.5.4.2-3 +- make gdb pretty printers for URE libs usable again + +* Fri Jun 08 2012 Caolán McNamara - 3.5.4.2-2 +- Resolves: rhbz#826609, rhbz#820554 fix smoketest on ppc[64] and s390[x] + +* Wed May 23 2012 David Tardon - 3.5.4.2-1 +- 3.5.4 rc2 + +* Thu May 17 2012 Caolán McNamara - 3.5.4.1-2 +- Resolves: rhbz#811226 ARM FTBFS + +* Wed May 16 2012 David Tardon - 3.5.4.1-1 +- 3.5.4 rc1 +- drop integrated 0001-do-not-prepend-n-twice-it-confuses-KFileDialog-rhbz-.patch +- drop integrated 0001-incrementing-index-twice-in-one-run-seems-wrong.patch +- drop integrated 0001-fdo-49365-correctly-map-monitor-index-back-to-screen.patch +- drop integrated 0001-rhbz-809019-count-mirrored-monitors-as-one.patch + +* Sun May 13 2012 Caolán McNamara - 3.5.3.2-5 +- Resolves: fdo#49849 line breaking fixes for Hebrew + +* Fri May 11 2012 David Tardon - 3.5.3.2-4 +- Resolves: rhbz#820439 KDE export dialog broken for most formats +- Resolves: fdo#49365 Libreoffice fails to start on second screen with + gtk vcl plugin +- Resolves: rhbz#809019 Impress thinks a machine with 2 monitors in + clone mode is multihead + +* Wed May 09 2012 Caolán McNamara - 3.5.3.2-3 +- Resolves: rhbz#805743 a11y crash in impress/draw +- Resolves: rhbz#813202 opengl slide transitions still a bit + problematic in Fedora 17 + +* Thu May 03 2012 David Tardon - 3.5.3.2-2 +- rebuild for changed dependencies + +* Wed Apr 25 2012 David Tardon - 3.5.3.2-1 +- 3.5.3 rc2 +- fix broken test on 64bit big endian + +* Mon Apr 23 2012 David Tardon - 3.5.3.1-2 +- rebuild for icu +- fix UNO bridges for ppc and ppc64 + +* Thu Apr 19 2012 David Tardon - 3.5.3.1-1 +- 3.5.3 rc1 +- drop integrated 0001-Introduced-SystemShellExecuteFlags-URIS_ONLY.patch +- drop integrated 0001-Simplify-code-and-use-proper-register-names-for-linu.patch +- drop integrated 0001-resolved-rhbz-813280-the-current-document-is-not-alw.patch + +* Wed Apr 18 2012 Eike Rathke - 3.5.2.1-7 +- Resolves: rhbz#813280 sheets cannot be moved in Calc + +* Wed Apr 11 2012 Eike Rathke - 3.5.2.1-6 +- Resolves: fdo#38088 rhbz#810267 better CSV import default separators + +* Tue Apr 10 2012 Caolán McNamara - 3.5.2.1-5 +- Resolves: rhbz#811226 FTBFS ARM + +* Thu Apr 05 2012 Stephan Bergmann - 3.5.2.1-4 +- Fix URIS_ONLY flag issue +- rebuild for db4 + +* Mon Apr 02 2012 Caolán McNamara - 3.5.2.1-3 +- Resolves: rhbz#708041 focus problems with tearable menus + +* Mon Mar 26 2012 Caolán McNamara - 3.5.2.1-2 +- Resolves: rhbz#806663 SlideshowImpl can outlive SdModule + +* Sun Mar 25 2012 David Tardon - 3.5.2.1-1 +- 3.5.2 rc1 +-drop integrated 0001-yet-another-clash-with-macro-name.patch + +* Wed Mar 14 2012 David Tardon - 3.5.1.2-2 +- Resolves: rhbz#770209 can't change paper tray setting while printing + +* Thu Mar 08 2012 David Tardon - 3.5.1.2-1 +- 3.5.1 rc2 + +* Tue Mar 06 2012 Caolán McNamara - 3.5.1.1-3 +- Resolves: rhbz#799628 crash with chewing IM with g3g +- Resolves: rhbz#799525 put flat odf mimetypes into xsltfilter.desktop +- Resolves: rhbz#800272 complain about unknown commandline options + +* Wed Feb 29 2012 Caolán McNamara - 3.5.1.1-2 +- Resolves: rhbz#788045 swriter --help doesn't show help +- Resolves: rhbz#798667 missing .desktop icons + +* Sun Feb 26 2012 David Tardon - 3.5.1.1-1 +- 3.5.1 rc1 +- drop 0001-Resolves-fdo-43644-survive-registered-but-unavailabl.patch +- drop 0001-Resolves-rhbz-789622-Adapt-SDK-to-changed-paths-in-L.patch +- drop 0001-Fix-fdo-45177-avoid-linked-undo-for-the-while.patch +- drop 0001-Fix-some-apparent-misuses-of-RTL_CONSTASCII_USTRINGP.patch +- drop binfilter-Fix-some-apparent-misuses-of-RTL_CONSTASCII_USTRINGP.patch +- Resolves: fdo#45177 avoid linked undo crash +- Fix some apparent misuses of RTL_CONSTASCII_USTRINGPARAM (cherry-picked from + upstream libreoffice-3-5 branch) + +* Tue Feb 14 2012 Stephan Bergmann - 3.5.0.3-5 +- Resolves rhbz#789622: Adapt SDK to changed paths in LO installation + +* Mon Feb 13 2012 Caolán McNamara - 3.5.0.3-4 +- ensure gdb .py files have the same timstamps so that multilib + .pyc's and .pyo's have the same content (timestamp in binary cache) + +* Sat Feb 11 2012 Caolán McNamara - 3.5.0.3-3 +- make sure .tree files don't get busted again + +* Tue Feb 07 2012 Stephan Bergmann - 3.5.0.3-2 +- junit4 -> junit +- Resolves: rhbz#788042 skip splashscreen with quickstarter +- with split binfilter we need fix for fdo#43644 + +* Thu Feb 02 2012 David Tardon - 3.5.0.3-1 +- 3.5.0 rc3 +- Resolves: rhbz#786328 add nlpsolver subpackage +- split legacy binary filters into subpackage + +* Thu Jan 26 2012 Stephan Bergmann - 3.5.0.2-2 +- add libreoffice-postgresql subpackage + +* Wed Jan 25 2012 David Tardon - 3.5.0.2-1 +- 3.5.0 rc2 + +* Thu Jan 19 2012 David Tardon - 3.5.0.1-1 +- 3.5.0 rc1 +- drop integrated 0001-workaround-internal-compiler-error-with-gcc-4.7.patch +- drop integrated 0001-fix-for-gcc-4.7-C-11-these-are-not-string-literal-op.patch +- drop integrated 0001-fix-for-gcc-4.7-C-11-this-is-not-string-literal-oper.patch +- drop integrated 0001-Revert-fast_merge-fix-mis-merge-of-first-module-s-st.patch +- drop integrated 0001-fix-writing-of-strings-from-the-first-module.patch +- drop integrated 0001-refactor-slightly-to-avoid-link-problems-with-gcc-4..patch + +* Fri Jan 13 2012 David Tardon - 3.4.99.3-1 +- 3.5.0 beta3 +- drop integrated 0001-fix-syntactic-error.patch +- drop integrated 0001-gcc-trunk-fix-error-unable-to-find-string-literal-op.patch +- drop integrated 0001-gcc-trunk-avoid-confusion.patch +- drop integrated 0001-workaround-for-LO-namespace-pollution-breaking-KDE4-.patch +- drop integrated 0001-smath-does-not-handle-accents-in-MathML.patch +- Resolves: rhbz#533318 smath does not handle accents in MathML +- Resolves: rhbz#771108 English menu in writer despite installation of + libreoffice-langpack-de + +* Fri Jan 06 2012 David Tardon - 3.4.99.2-2 +- rebuild with gcc 4.7 + +* Wed Dec 21 2011 David Tardon - 3.4.99.2-1 +- 3.5.0 beta2 +- drop integrated 0001-Resolves-rhbz-761009-IFSD_Equal-is-asymmetrical.patch +- drop integrated 0001-Resolves-rhbz-767708-avoid-SIGBUS-writing-to-overcom.patch +- drop integrated 0001-force-gbuild-stage-for-CustomTargets.patch +- drop integrated 0001-these-translations-do-already-exist-in-translations-.patch +- drop integrated 0001-Fix-typo-and-clean-up.patch +- use system mysql-connector-c++ + +* Sun Dec 18 2011 David Tardon - 3.4.99.1-1 +- 3.5.0 beta1 +- drop integrated 0001-Related-fdo-37195-migrationoo3-not-registered.patch +- drop integrated 0001-Related-i58612-don-t-crash-anyway.patch +- drop integrated 0001-Related-rhbz-652604-better-survive-exceptions-thrown.patch +- drop integrated 0001-Related-rhbz-702833-addEventListener-without-removeE.patch +- drop integrated 0001-Related-rhbz-711087-band-aid.patch +- drop integrated 0001-Related-rhbz-718976-crash-in-SwTxtSizeInfo-GetMultiC.patch +- drop integrated 0001-Related-rhbz-730225-avoid-segv-in-ld-this-was-set-to.patch +- drop integrated 0001-Related-rhbz-753201-fedora-ant-java-1.5.0-gcj-won-t-.patch +- drop integrated 0001-Resolves-fdo-32665-handle-that-FreeSerif-lacks-some-.patch +- drop integrated 0001-Resolves-rhbz-693265-fix-crash-from-unhandled-except.patch +- drop integrated 0001-Resolves-rhbz-695509-crash-in-RefreshDocumentLB.patch +- drop integrated 0001-Resolves-rhbz-713154-pdf-export-dialog-too-tall-to-f.patch +- drop integrated 0001-Resolves-rhbz-715549-use-fontconfig-s-detected-forma.patch +- drop integrated 0001-Resolves-rhbz-738255-avoid-crash-on-NULL-pointer.patch +- drop integrated 0001-Resolves-rhbz-751290-KDE-black-on-dark-tooltips.patch +- drop integrated 0001-add-Oracle-Java-1.7.0-recognition.patch +- drop integrated 0001-avoid-using-com.sun.org-apis.patch +- drop integrated 0001-bubble-down-configure-test-findings-on-visibility.patch +- drop integrated 0001-fix-horizontal-scrollbars-with-KDE-oxygen-style-bnc-.patch +- drop integrated 0001-gtk3-fix-cairo-canvas-crash-for-non-X-or-svp-backend.patch +- drop integrated 0001-helgrind-Related-rhbz-655686-get-order-of-shutdown-c.patch +- drop integrated 0001-rhbz-667082-do-not-crash-importing-section-containin.patch +- drop integrated 0001-rhbz-702635-set-correct-page-number-when-exporting-s.patch +- drop integrated Backport-reading-AES-encrypted-ODF-1.2-documents.patch +- drop integrated gdb-pretty-printers.patch +- drop integrated kde4configure.patch +- drop integrated libreoffice-ppc64.patch +- drop integrated openoffice.org-3.3.0.ooo108637.sfx2.uisavedir.patch +- drop integrated openoffice.org-3.3.0.ooo113273.desktop.resolvelinks.patch +- drop integrated vbahelper.visibility.patch +- drop libreoffice-testtools subpackage, because testtool has been + removed by upstream + +* Thu Dec 15 2011 Caolán McNamara - 3.4.4.2-6 +- Resolves: rhbz#761009 IFSD_Equal is asymmetrical +- Resolves: rhbz#767708 write to mmap'ed file w/o disk space: SIGBUS + +* Tue Nov 29 2011 Caolán McNamara - 3.4.4.2-5 +- Resolves: rhbz#757653 fix headless crash with cairo canvas + +* Tue Nov 22 2011 Lukas Tinkl - 3.4.4.2-4 +- Resolves: rhbz#751290 - [kde] LibreOffice has black on dark-grey tooltip-texts + +* Fri Nov 11 2011 Caolán McNamara - 3.4.4.2-3 +- Related: fdo#42534 0001-Related-i58612-don-t-crash-anyway.patch +- Resolves: fdo#42749 KDE oxygen theme and scrollbars + +* Thu Nov 10 2011 Stephan Bergmann - 3.4.4.2-2 +- Patch to backport reading AES-encrypted ODF 1.2 documents + +* Thu Nov 03 2011 David Tardon - 3.4.4.2-1 +- 3.4.4 rc2 + +* Fri Oct 28 2011 Rex Dieter - 1:3.4.4.1-4 +- rebuild(poppler) + +* Thu Oct 27 2011 Caolán McNamara - 3.4.4.1-3 +- Resolves: rhbz#665800 missing glyph symbol shown when toggling bold/italic + for Sinhala text + +* Thu Oct 27 2011 Caolán McNamara - 3.4.4.1-2 +- possible fix for java 1.7.0 detection + + +* Wed Oct 26 2011 David Tardon - 3.4.4.1-1 +- 3.4.4 rc1 + +* Tue Oct 25 2011 Caolán McNamara - 3.4.3.2-16 +- allow building with gcj + +* Fri Oct 21 2011 Caolán McNamara - 3.4.3.2-15 +- Resolves: rhbz#747356 let Qt call XInitThreads +- fix .sdw import + +* Wed Oct 19 2011 Caolán McNamara - 3.4.3.2-14 +- Related: rhbz#743750 addXineramaScreenUnique issue + +* Fri Oct 07 2011 Stephan Bergmann - 3.4.3.2-13 +- Patches to build with GCC 6.4.1 + +* Fri Sep 30 2011 Marek Kasik - 3.4.3.2-12 +- Rebuild (poppler-0.18.0) + +* Tue Sep 20 2011 Caolán McNamara - 3.4.3.2-11 +- Resolves: rhbz#738133 fix bn discard string +- Resolves: fdo#35513 avoid crash while processing incorrect print range + +* Mon Sep 19 2011 Marek Kasik - 3.4.3.2-10 +- Rebuild (poppler-0.17.3) + +* Thu Sep 15 2011 Caolán McNamara - 3.4.3.2-9 +- Resolves: rhbz#738255 avoid crash on sc inputhdl + +* Tue Sep 13 2011 Caolán McNamara - 3.4.3.2-8 +- Resolves: rhbz#274631 remove NoDisplay from -math.desktop + +* Thu Sep 08 2011 David Tardon - 3.4.3.2-7 +- rebuild for new icu + +* Tue Sep 06 2011 David Tardon - 3.4.3.2-6 +- Resolves: rhbz#734976 libreoffice-langpack-*-* not pulled in by + yum install libreoffice + +* Fri Sep 02 2011 Caolán McNamara - 3.4.3.2-5 +- Resolves: rhbz#735182 be able to rebuild against poppler 0.17.3 + +* Tue Aug 30 2011 David Tardon - 3.4.3.2-4 +- Resolves: rhbz#734432 openoffice.org symlink broken + +* Mon Aug 29 2011 David Tardon - 3.4.3.2-3 +- add Latvian langpack + +* Fri Aug 26 2011 Caolán McNamara - 3.4.3.2-2 +- Resolves: rhbz#733564 graphite2 now packaged into fedora +- Related: fdo#37195 migrationoo3 not registered + +* Thu Aug 25 2011 David Tardon - 3.4.3.2-1 +- 3.4.3 rc2 + +* Mon Aug 22 2011 David Tardon - 3.4.3.1-2 +- add gdb pretty printers + +* Tue Aug 16 2011 David Tardon - 3.4.3.1-1 +- 3.4.3 rc1 +- drop integrated 0001-Resolves-rhbz-725144-wrong-csh-syntax.patch + +* Fri Aug 12 2011 Caolán McNamara - 3.4.2.3-3 +- Related: rhbz#730225 avoid segv in ld + +* Tue Aug 02 2011 Caolán McNamara - 3.4.2.3-2 +- Resolves: rhbz#693265 fix crash from unhandled exception + +* Fri Jul 29 2011 David Tardon - 3.4.2.3-1 +- 3.4.2 rc3 + +* Mon Jul 25 2011 Caolán McNamara - 3.4.2.2-2 +- Resolves: rhbz#725144 wrong csh syntax + +* Wed Jul 20 2011 David Tardon - 3.4.2.2-1 +- 3.4.2 rc2 +- fix breakage in KDE4 plugin + +* Tue Jul 19 2011 Caolán McNamara - 3.4.2.1-3 +- Resolves: rhbz#715549 use fontconfig's detected format + +* Mon Jul 18 2011 Caolán McNamara - 3.4.2.1-2 +- Rebuild (poppler-0.17.0), add libreoffice-poppler-0.17.0.patch + seeing as the API changed for some reason or other + +* Wed Jul 13 2011 David Tardon - 3.4.2.1-1 +- 3.4.2 rc1 +- drop 0001-bad-merge-fix-to-enable-extensions-to-build-again.patch +- drop 0001-fix-regression-in-SvGlobalName-operator.patch + +* Tue Jul 12 2011 Caolán McNamara - 3.4.1.3-3 +- fix regression in SvGlobalName operator + +* Tue Jul 05 2011 Caolán McNamara - 3.4.1.3-2 +- Related: rhbz#718976 crash in SwTxtSizeInfo::GetMultiCreator + +* Fri Jul 01 2011 David Tardon - 3.4.1.3-1 +- 3.4.1 rc3 + +* Thu Jun 23 2011 Caolán McNamara - 3.4.1.2-1 +- 3.4.1 rc2 +- drop integrated 0001-correctly-build-GTK-systray-icon.patch + +* Tue Jun 21 2011 David Tardon - 3.4.1.1-5 +- Resolves: rhbz#714781 add Persian langpack +- Resolves: rhbz#667082 do not crash importing section containing just + an empty paragraph + +* Mon Jun 20 2011 Caolán McNamara - 3.4.1.1-4 +- Related: rhbz#711087 band aid for crash in sc undo +- Resolves: rhbz#714338 add a metapackage to install standard bits + +* Fri Jun 17 2011 Caolán McNamara - 3.4.1.1-3 +- Related: rhbz#702833 addEventListener without removeEventListener + +* Thu Jun 16 2011 Caolán McNamara - 3.4.1.1-2 +- Resolves: rhbz#713154 pdf export dialog too tall to fit + +* Wed Jun 15 2011 David Tardon - 3.4.1.1-1 +- 3.4.1 RC1 +- drop integrated 0001-Resolves-rhbz-707317-avoid-crash-in-getRowSpan.patch +- drop integrated 0001-Resolves-rhbz-710004-band-aid-for-immediate-crash-in.patch +- drop integrated 0001-Resolves-rhbz-710556-don-t-crash-on-missing-graphics.patch +- drop integrated 0001-Resolves-rhbz-699909-crash-in-export-of-.doc-in-lcl_.patch +- drop integrated 0001-fdo-37584-Make-a-real-copy-of-the-text-where-to-coun.patch +- drop integrated 0001-Resolves-fdo-37668-bitwise-operations-on-signed-numb.patch + +* Thu Jun 09 2011 Caolán McNamara - 3.4.0.2-5 +- Resolves: rhbz#699909 crash in export of .doc in lcl_getField +- Resolves: fdo#37584 Make a real copy of the text +- Resolves: rhbz#709503/fdo#37668 bitwise operations on signed values + +* Tue Jun 07 2011 Caolán McNamara - 3.4.0.2-4 +- Resolves: rhbz#710556 't crash on missing graphics .pptx export +- Resolves: rhbz#652604 better survive exceptions in autorecovery + +* Thu Jun 02 2011 Caolán McNamara - 3.4.0.2-3 +- Resolves: rhbz#710004 band aid for crash + +* Mon May 30 2011 Caolán McNamara - 3.4.0.2-2 +- Resolves: rhbz#707317 avoid crash in getRowSpan + +* Fri May 27 2011 David Tardon - 3.4.0.2-1 +- 3.4.0 RC2 +- drop integrated 0001-fix-build-with-system-bsh.patch + +* Wed May 25 2011 Caolán McNamara - 3.4.0.1-3 +- rebuild for new hunspell + +* Tue May 24 2011 David Tardon - 3.4.0.1-2 +- Resolves: rhbz#706110 oosplash.bin segfault on every login + +* Fri May 20 2011 David Tardon - 3.4.0.1-1 +- 3.4 RC1 +- Resolves: rhbz#702635 set correct page number when exporting selected + pages + +* Sat May 07 2011 Christopher Aillon - 3.3.99.4-2 +- Update icon cache scriptlet + +* Sat May 07 2011 David Tardon 3.3.99.4-1 +- 3.4 beta4 +- drop integrated 0001-Removed-duplicate-code-block-mis-merge-prolly.patch +- drop integrated 7de0b88ce2dd932915894385b54be1897d5ee053.zip + +* Mon Apr 18 2011 Caolán McNamara 3.3.99.1-2 +- Resolves: rhbz#695509 crash in RefreshDocumentLB +- bubble down configure test findings on visibility + +* Mon Apr 11 2011 Caolán McNamara 3.3.99.1-1 +- 3.4 beta1 +- drop openoffice.org-1.9.123.ooo53397.prelinkoptimize.desktop.patch + in favour of ooosplash +- drop openoffice.org-2.2.0.gccXXXXX.solenv.javaregistration.patch + because components are passively registered now +- drop integrated openoffice.org-3.1.0.ooo102061.sc.cellanchoring.patch +- drop integrated turn-script-providers-into-extensions.patch +- drop integrated 0001-tidy-this-up-and-don-t-bail-out-on-mislength-records.patch +- drop integrated 0001-free-ctxt-after-taking-lastError-details.patch +- drop integrated 0001-Removed-suspect-hack.-Cursor-on-post-it-now-scrolls-.patch +- drop integrated libreoffice-gcc4.6.0.patch +- drop integrated 0001-fexceptions-fexceptions.patch +- drop integrated 0001-Related-rhbz-672872-cancel-gtk-file-dialog-on-deskto.patch +- drop vbahelper.visibility.patch +- drop integrated 0001-Resolves-fdo-33509-i62414-out-by-one-breaks-CTL-spel.patch +- drop integrated 0001-Resolves-rhbz-670020-crash-in-slidesorting.patch +- drop integrated 0001-Resolves-rhbz-676539-handle-missing-pWindows-from-xW.patch +- drop integrated 0001-Resolves-fdo-33750-i94623-use-optimal-border-width-w.patch +- drop integrated 0001-rhbz-649310-don-t-crash-deregistering-diff.-platform.patch +- drop integrated 0001-Resolves-rhbz-674330-dereference-of-NULL-mpBase.patch +- drop integrated 0001-rhbz-678284-Get-correct-current-position-when-shift-page-up-and-.patch +- drop integrated 0001-Resolves-rhbz-681159-bandaid-for-crash.patch +- drop integrated 0001-Resolves-rhbz-672818-bandaid-for-crash-in-SwTxtNode-.patch +- drop integrated 0001-install-high-resolution-icons.patch +- drop integrated 0001-Resolves-rhbz-682716-pa-IN-isn-t-handled-by-fontconf.patch +- drop integrated 0001-Related-rhbz-684477-make-sure-this-is-thread-safe.patch +- drop integrated 0001-Resolves-rhbz-682621-better-resizing-of-overtall-gly.patch +- drop integrated 0001-Resolves-rhbz-684620-crash-with-NULL-pTableBox.patch +- drop integrated libreoffice-fdo33947.sd.print.crash.patch +- drop integrated 0001-add-cairo_ft_font_face_create_for_pattern-wrapper.patch +- drop integrated 0001-Related-rhbz-680460-reorganize-this-to-make-it-inher.patch +- drop integrated 0001-Related-rhbz-680460-don-t-bother-with-an-interim-Fon.patch +- drop integrated 0001-Resolves-rhbz-680460-honour-lcdfilter-subpixeling-et.patch +- drop integrated 0001-Cut-Gordian-Knot-of-who-owns-the-font-options.patch +- drop integrated 0001-beware-of-invalidated-iterator.patch +- drop integrated rhbz680766.fix-mdds-crash.patch +- drop integrated 0001-Resolves-rhbz-684580-X-and-strike-through-escapes-ra.patch +- drop integrated 0001-set-mime-types-on-flat-xml-filters.patch +- drop integrated 0001-add-flat-xml-types-to-.desktop-files-etc.patch +- drop integrated libreoffice-fdo31271.icu.patch + +* Tue Apr 05 2011 Caolán McNamara 3.3.2.2-6 +- Resolves: rhbz#655686 get order of shutdown correct + +* Wed Mar 30 2011 Caolán McNamara 3.3.2.2-5 +- Add application/vnd.oasis.opendocument.text-flat-xml, etc. to + .desktop files for mcepl + +* Tue Mar 29 2011 Caolán McNamara 3.3.2.2-4 +- Resolves: rhbz#684580 improve X and / strike-through + +* Thu Mar 24 2011 David Tardon 3.3.2.2-3 +- Resolves: rhbz#680766 crash in mdds + +* Wed Mar 23 2011 David Tardon 3.3.2.2-2 +- Related: rhbz#689268 versioned deps need to contain epoch + +* Tue Mar 22 2011 Caolán McNamara 3.3.2.2-1 +- latest version +- drop integrated 0001-Resolves-fdo-33701-ensure-node-outlives-path.patch +- drop integrated 0001-valgrind-don-t-leave-an-evil-thread-running-after-ma.patch + +* Tue Mar 22 2011 Caolán McNamara 3.3.1.2-12 +- Fix fontoptions cache +- avoid crash in calc on changing size of rows (dtardon) + +* Mon Mar 21 2011 Caolán McNamara 3.3.1.2-11 +- Resolves: rhbz#689268 autocorrs from OOo F14 not upgraded + +* Wed Mar 16 2011 Caolán McNamara 3.3.1.2-10 +- Resolves: rhbz#680460 honour lcdfilter and subpixeling + +* Tue Mar 15 2011 Caolán McNamara 3.3.1.2-9 +- Resolves: fdo#33947 sd print crash + +* Mon Mar 14 2011 Caolán McNamara 3.3.1.2-8 +- Related: rhbz#684477 make sure this is thread safe +- Resolves: rhbz#684620 crash with NULL pTableBox + +* Sun Mar 13 2011 Marek Kasik 3.3.1.2-7 +- Rebuild (poppler-0.16.3) + +* Wed Mar 09 2011 Caolán McNamara 3.3.1.2-6 +- Resolves: rhbz#682621 better resizing of overtall glyphsubs + +* Tue Mar 08 2011 Caolán McNamara 3.3.1.2-5 +- Resolves: rhbz#682716 pa-IN isn't handled well by fontconfig + +* Tue Mar 08 2011 David Tardon 3.3.1.2-4 +- install 128x128 px icons + +* Wed Mar 02 2011 Caolán McNamara 3.3.1.2-3 +- Resolves: rhbz#681159 crash in writer +- Resolves: rhbz#672818 crash in writer +- Resolves: fdo#33701 ensure node outlives path +- Resolves: rhbz#681738 crash on writing config post-main + +* Thu Feb 17 2011 Caolán McNamara 3.3.1.2-2 +- Resolves: rhbz#678284 Calc crashes during cell select with keys + (dtardon) + +* Thu Feb 17 2011 Caolán McNamara 3.3.1.2-1 +- RC2 + +* Wed Feb 16 2011 Caolán McNamara 3.3.1.1-2 +- Resolves: rhbz#674330 dereference of NULL mpBase + +* Fri Feb 11 2011 Caolán McNamara 3.3.1.1-1 +- 3.3.1 rc1 +- drop integrated 0001-don-t-pushback-and-process-a-corrupt-extension.patch +- drop integrated libreoffice-fdo32561.comphelper.patch +- drop integrated 0001-Related-rhbz-610103-more-woes-on-rpm-upgrade-vs-rpm-.patch +- drop integrated 0001-Resolves-rhbz-673819-crash-on-changing-position-of-d.patch +- drop integrated 0001-rhbz-666440-don-t-pushback-and-process-a-corrupt-extension.patch + +* Thu Feb 10 2011 Caolán McNamara 3.3.0.4-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild +- Related: rhbz#610103 make this even more robust +- Related: rhbz#672872 cancel gtk file dialog on terminate +- Resolves: fdo#33509/ooo#62414 fix CTL spelling popup +- Resolves: rhbz#673819 crash on changing position of header/footer object +- Resolves: rhbz#670020 crash in slidesorting +- Resolves: rhbz#676539 handle missing pWindows from xWindows +- Resolves: rhbz#649310 don't crash deregistering diff. platform ext. + (dtardon) +- Resolves: rhbz#666440 don't pushback and process a corrupt extension + +* Mon Jan 24 2011 Caolán McNamara 3.3.0.4-2 +- Resolves: rhbz#671540 fix lonely ) + +* Thu Jan 20 2011 Caolán McNamara 3.3.0.4-1 +- next release candidate +- drop integrated 0001-fix-presenter-screens-description.xml-build.patch + +* Tue Jan 18 2011 Caolán McNamara 3.3.0.3-2 +- backport fix to get presenter screen working +- make handling busted extensions more robust + +* Wed Jan 12 2011 Caolán McNamara 3.3.0.3-1 +- latest version +- drop integrated 0001-Resoves-rhbz-663857-font-color-missing-C-FAQ-10.3-do.patch +- drop integrated 0001-Avoid-double-paste-when-pasting-text-into-cell-comme.patch +- drop integrated 0001-Resolves-rhbz-660342-Undo-Redo-crash-with-postits.patch +- drop integrated 0001-Resolves-rhbz-666088-clean-up-search-cache-singleton.patch + +* Thu Jan 06 2011 Caolán McNamara 3.3.0.2-5 +- Resolves: rhbz#666088 don't crash on clean up of search cache + +* Wed Jan 05 2011 Lukas Tinkl 3.3.0.2-4 +- create a KDE integration subpackage + +* Mon Jan 03 2011 David Tardon 3.3.0.2-3 +- rebuild with new poppler + +* Wed Dec 22 2010 Caolán McNamara 3.3.0.2-2 +- Resolves: rhbz#663724 fdo32572-sc-dont-double-paste.patch +- Resolves: rhbz#660342 Undo/Redo crash with postits + +* Tue Dec 21 2010 Caolán McNamara 3.3.0.2-1 +- latest version + +* Sat Dec 18 2010 Caolán McNamara 3.3.0.1-4 +- Resolves: rhbz#663857 font color missing in transitions + +* Wed Dec 15 2010 Rex Dieter - 3.3.0.1-3 +- rebuild (poppler) + +* Wed Dec 15 2010 Caolán McNamara 3.3.0.1-2 +- Fix up some doc imports + +* Sun Dec 05 2010 Caolán McNamara 3.3.0.1-1 +- release candidate 1 +- drop integrated qstart.dont-forceenabled-on-post-reg-restart.patch +- drop integrated exit.quickstarter.when.deleted.patch +- drop integrated 0001-destroydesktop.in.timeout.patch +- drop integrated openoffice.org-3.3.0.rhbz657541.join-paragraphs.patch + +* Sat Nov 27 2010 Caolán McNamara 3.2.99.3-2 +- Resolves: rhbz#610103 exit quickstarter when libs deleted +- Resolves: rhbz#652695 release desktop in timeout +- Resolves: rhbz#657541 don't crash during processing of auto. styles + when joining paragraphs (dtardon) + +* Thu Nov 18 2010 Caolán McNamara 3.2.99.2-5 +- Resolves: rhbz#649210 add Sinhalese langpack + +* Sat Oct 30 2010 Caolán McNamara 3.2.99.2-4 +- langpack macro hard-coded version number + +* Fri Oct 22 2010 Caolán McNamara 3.2.99.2-3 +- Resolves: xdg632229 gnomeshell app tracking + +* Tue Oct 12 2010 David Tardon 3.2.99.2-2 +- use macros to define auto-correction and language pack subpackages + +* Mon Oct 11 2010 Caolán McNamara 3.2.99.2-1 +- next LibreOffice milestone +- drop integrated openoffice.org-2.3.0.ooo76649.httpencoding.patch +- drop integrated workspace.dtardon03.patch +- drop integrated openoffice.org-3.1.0.ooo61927.sw.ww6.unicodefontencoding.patch +- drop integrated workspace.impress195.patch +- drop integrated workspace.srb1.patch +- drop integrated openoffice.org-3.2.0.ooo106502.svx.fixspelltimer.patch +- drop integrated openoffice.org-3.3.0.ooo108246.svx.hide-sql-group-when-inactive.patch +- drop integrated openoffice.org-3.2.0.ooo95369.sw.sortedobjs.patch +- drop integrated openoffice.org-3.2.0.ooo110142.svx.safercolornames.patch +- drop integrated openoffice.org-3.3.0.ooo111758.sd.xerror.patch +- drop integrated openoffice.org-3.2.0.ooo111741.extras.malformed-xml-file.patch +- drop integrated openoffice.org-3.3.0.ooo112059.sw.avoid-null-ptr-deref.patch +- drop integrated openoffice.org-3.3.0.ooo100686.wizards.types.not.mediatypes.patch +- drop integrated workspace.vcl113.patch +- drop integrated openoffice.org-3.3.0.ooo112384.sw.export.doc.styledoesntexist.patch +- drop integrated workspace.cmcfixes77.patch +- drop integrated workspace.vcl114.patch +- drop integrated openoffice.org-3.3.0.ooo106591.sal.tradcopy.patch +- drop integrated workspace.vcl115.patch +- drop integrated workspace.cmcfixes78.patch +- drop integrated openoffice.org-3.3.0.ooo114012.sd.bada11ychain.patch +- drop integrated workspace.cmcfixes79.patch +- drop integrated openoffice.org-3.3.0.ooo114703.vcl.betterlocalize.font.patch +- drop integrated openoffice.org-3.3.0.rh638185.editeng.cjkctlhtmlsizes.patch +- drop integrated openoffice.org-3.3.0.rh637738.libgcrypt.addmutex.patch +- drop integrated openoffice.org-3.2.0.rh632236.writerfilter.cleanup-cell-props.patch +- drop workspace.gtk3.patch + +* Wed Oct 06 2010 Caolán McNamara 3.2.99.1-2 +- Related: rhbz#639945 pull in review changes + + redland build-fix + + replace awk script + + validate .destop files + +* Wed Sep 29 2010 Caolán McNamara 3.2.99.1-1 +- initial import of the leviathan