From e6c478369c538a5cc5fb72a80fd557cd5922a8f5863039d367b53b6f47f45a72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Chv=C3=A1tal?= Date: Thu, 21 May 2020 09:13:45 +0000 Subject: [PATCH 1/4] - Update to 6.4.4.2: * 6.4.4 release - Remove merged patch bsc1160687-1.diff * 6.4.3 RC2 release OBS-URL: https://build.opensuse.org/package/show/LibreOffice:Factory/libreoffice?expand=0&rev=880 --- bsc1160687-1.diff | 90 --------------------- libreoffice-6.4.3.2.tar.xz | 3 - libreoffice-6.4.3.2.tar.xz.asc | 16 ---- libreoffice-6.4.4.2.tar.xz | 3 + libreoffice-6.4.4.2.tar.xz.asc | 16 ++++ libreoffice-help-6.4.3.2.tar.xz | 3 - libreoffice-help-6.4.3.2.tar.xz.asc | 16 ---- libreoffice-help-6.4.4.2.tar.xz | 3 + libreoffice-help-6.4.4.2.tar.xz.asc | 16 ++++ libreoffice-translations-6.4.3.2.tar.xz | 3 - libreoffice-translations-6.4.3.2.tar.xz.asc | 16 ---- libreoffice-translations-6.4.4.2.tar.xz | 3 + libreoffice-translations-6.4.4.2.tar.xz.asc | 16 ++++ libreoffice.changes | 9 ++- libreoffice.spec | 4 +- 15 files changed, 66 insertions(+), 151 deletions(-) delete mode 100644 bsc1160687-1.diff delete mode 100644 libreoffice-6.4.3.2.tar.xz delete mode 100644 libreoffice-6.4.3.2.tar.xz.asc create mode 100644 libreoffice-6.4.4.2.tar.xz create mode 100644 libreoffice-6.4.4.2.tar.xz.asc delete mode 100644 libreoffice-help-6.4.3.2.tar.xz delete mode 100644 libreoffice-help-6.4.3.2.tar.xz.asc create mode 100644 libreoffice-help-6.4.4.2.tar.xz create mode 100644 libreoffice-help-6.4.4.2.tar.xz.asc delete mode 100644 libreoffice-translations-6.4.3.2.tar.xz delete mode 100644 libreoffice-translations-6.4.3.2.tar.xz.asc create mode 100644 libreoffice-translations-6.4.4.2.tar.xz create mode 100644 libreoffice-translations-6.4.4.2.tar.xz.asc diff --git a/bsc1160687-1.diff b/bsc1160687-1.diff deleted file mode 100644 index 2e17aec..0000000 --- a/bsc1160687-1.diff +++ /dev/null @@ -1,90 +0,0 @@ -From fda60625c9e8bbc0259c790e7da76e608a012451 Mon Sep 17 00:00:00 2001 -From: Miklos Vajna -Date: Mon, 27 Apr 2020 10:54:27 +0200 -Subject: [PATCH] DOCX import: handle - -This is the same as page, but it is from-left on odd pages and -from-right on even pages, i.e. our "mirror on even pages" mode. - -(cherry picked from commit fccbb557add457db16e0556c3f0172cafc2cf981) - -Conflicts: - writerfilter/qa/cppunittests/dmapper/GraphicImport.cxx - -Change-Id: I018e0ac165a3d802f64cfc314d5c5f58da3cb580 -Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93003 -Tested-by: Jenkins -Reviewed-by: Mike Kaganski ---- - -diff --git a/writerfilter/source/dmapper/GraphicHelpers.cxx b/writerfilter/source/dmapper/GraphicHelpers.cxx -index 3339156ae3b2..9168ad51eebd 100644 ---- a/writerfilter/source/dmapper/GraphicHelpers.cxx -+++ b/writerfilter/source/dmapper/GraphicHelpers.cxx -@@ -102,6 +102,11 @@ void PositionHandler::lcl_attribute( Id aName, Value& rVal ) - m_nRelation = text::RelOrientation::PAGE_FRAME; - break; - -+ case NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromH_insideMargin: -+ m_nRelation = text::RelOrientation::PAGE_FRAME; -+ m_bPageToggle = true; -+ break; -+ - case NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromH_column: - m_nRelation = text::RelOrientation::FRAME; - break; -diff --git a/writerfilter/source/dmapper/GraphicHelpers.hxx b/writerfilter/source/dmapper/GraphicHelpers.hxx -index dbfe9ddd9f13..d28f2fb50bf7 100644 ---- a/writerfilter/source/dmapper/GraphicHelpers.hxx -+++ b/writerfilter/source/dmapper/GraphicHelpers.hxx -@@ -37,6 +37,7 @@ public: - sal_Int16 orientation() const; - sal_Int16 relation() const { return m_nRelation;} - sal_Int32 position() const { return m_nPosition;} -+ bool GetPageToggle() const { return m_bPageToggle; } - private: - virtual void lcl_attribute( Id aName, Value& rVal ) override; - virtual void lcl_sprm( Sprm& rSprm ) override; -@@ -45,6 +46,7 @@ public: - sal_Int32 m_nPosition; - std::pair& m_rPositionOffsets; - std::pair& m_rAligns; -+ bool m_bPageToggle = false; - }; - - class WrapHandler: public LoggedProperties -diff --git a/writerfilter/source/dmapper/GraphicImport.cxx b/writerfilter/source/dmapper/GraphicImport.cxx -index 97c807752f60..a2c19383c95d 100644 ---- a/writerfilter/source/dmapper/GraphicImport.cxx -+++ b/writerfilter/source/dmapper/GraphicImport.cxx -@@ -193,6 +193,7 @@ public: - - sal_Int16 nHoriOrient; - sal_Int16 nHoriRelation; -+ bool bPageToggle = false; - sal_Int16 nVertOrient; - sal_Int16 nVertRelation; - text::WrapTextMode nWrap; -@@ -343,8 +344,8 @@ public: - uno::makeAny(nLeftPosition)); - xGraphicObjectProperties->setPropertyValue(getPropertyName( PROP_HORI_ORIENT_RELATION ), - uno::makeAny(nHoriRelation)); -- xGraphicObjectProperties->setPropertyValue(getPropertyName( PROP_PAGE_TOGGLE ), -- uno::makeAny(false)); -+ xGraphicObjectProperties->setPropertyValue(getPropertyName(PROP_PAGE_TOGGLE), -+ uno::makeAny(bPageToggle)); - if (!bRelativeOnly) - xGraphicObjectProperties->setPropertyValue(getPropertyName( PROP_VERT_ORIENT_POSITION), - uno::makeAny(nTopPosition)); -@@ -1089,6 +1090,7 @@ void GraphicImport::lcl_sprm(Sprm& rSprm) - if( !m_pImpl->bUseSimplePos ) - { - m_pImpl->nHoriRelation = pHandler->relation(); -+ m_pImpl->bPageToggle = pHandler->GetPageToggle(); - m_pImpl->nHoriOrient = pHandler->orientation(); - m_pImpl->nLeftPosition = pHandler->position(); - --- -2.26.1 - diff --git a/libreoffice-6.4.3.2.tar.xz b/libreoffice-6.4.3.2.tar.xz deleted file mode 100644 index 8691562..0000000 --- a/libreoffice-6.4.3.2.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bc14547c188efa15f4cb36cfb3da7cacb3037a7448d1bba8a58ed6a320ccabb2 -size 230409812 diff --git a/libreoffice-6.4.3.2.tar.xz.asc b/libreoffice-6.4.3.2.tar.xz.asc deleted file mode 100644 index db96dfa..0000000 --- a/libreoffice-6.4.3.2.tar.xz.asc +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAl6MoIwACgkQ9DSh76/u -rqNYWRAAqbxZP1XEWo4ibIfzorZWxFSx3aU/pw2BjSDRGIck0Eo5SNn5wPxxqI0U -epwn7hsH8U7VrjT1o2YqO9gmsCmFDq1eooilEopSvy4rlgz//jUdMmd80EzOXoxG -/dKrx8LRSqVDCrh12UfFb+p9l2BfWGdrIrH19RbTqlNprcBdMzOhSTAhtBwVc9Ok -uJUjWh/v1UMxfrKwVwc0J+ywBW/VSik+KaSSXgapwSZXS4EbdIbJWhrBg/72G92w -78ToErqxJwrzJcSR4blcug+emNzvvuZH5X/xJZNstfaaHhCvBwGSxXUwwRizxKEm -UELuQ2C2NJVtcvJPLDNHGeKO57Yra+zhPxgE1jTzwoHpG8kMeY1RhBMI0cfmebci -nnlfjXVKno9GoThrbHYNDgn5gK9whcMQn6ESVcgVfbzzBISBgfokojh6BUKJ+lCc -cBWOez/VRxYWJsuXXT/hIDRQ7X2yuSWYTXLWEzgR8rBrAz2eQ9e3W+36IMpyiZyG -rfieB3wuWLaY3fwDTQ1X2HnfGLRNZ2Ayx94soG0XQvATGW3vjwm/6Bie3jg4cpSG -+iu8fPgyWc7jes6jhGgoCEBFbJr3zor80jKCf+9rDs+Gh5t91XRXgt7P1mDs4Agq -8yPmKQXptFSv5ZvNYUfts03sCmSCRjIpjXn9K5xn+O8shCj6Y8s= -=MjL/ ------END PGP SIGNATURE----- diff --git a/libreoffice-6.4.4.2.tar.xz b/libreoffice-6.4.4.2.tar.xz new file mode 100644 index 0000000..89c26ea --- /dev/null +++ b/libreoffice-6.4.4.2.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:54388597dffc9c32f81446e6e634f7af76ca0e0e5a0d27bc3fe89033a011c078 +size 231325236 diff --git a/libreoffice-6.4.4.2.tar.xz.asc b/libreoffice-6.4.4.2.tar.xz.asc new file mode 100644 index 0000000..7d2d42b --- /dev/null +++ b/libreoffice-6.4.4.2.tar.xz.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAl676X8ACgkQ9DSh76/u +rqNCFw/+NZHnL5hxsyxa0UF0vnEofwFl1oYMfNK0ab7iM1GqeNIRAoZDsRNGFrqE +wQNpxA3zK6L1wC09Qgg7p2U2jpOlKMrppiCE7TOvZ4hoZDQVDr2vMzfQeaY/IkLt +Hm5GGGxIq7HAmgkRTomtfJZHQerbBa+h0GQ7cyO3HWV0wZ+yxH8dYeSFllpPuori +3lHVULa2dw8ZCZcS05PDc5sACZiuG0otu3kzVXJ8j+9HpKBO5msrnBPaHq6/xilg +Oh/TP3HJ2xOEHBnlh2Ng1aHK+rTzsMr4woNvvrJq0t8wFHBPxWRv9s9dnbPTnC4i +G7F34F0/Tjd6iajXUhA5bXQl+zxCDg/bCTdobMBzCIsoWxAqVbIYFaruV8Db8i4n +w/IOz+BIuZYc/kvXQrgCl8aLqfkv66ATxtaSaiHXrhPT0R2G4Uyhz0wcEba9QN/u +vyBsxTxkPGhktlfSSRjd8Om3XQpq1qJ8ciC6mMOBB0XQUYXRsJYVLXW7Z6kSqKsd +82Vk1q67njNBS0IuhjEQ3F4ubrJCyVJTSBKZ7RQv13N0vwXQe4wHcywEdwo7/EAH +ciVX8IN/crnirM3fQYCYSb8C4/wb8fbj34+AgKlD07HYTwuFUADtS9iw2JcW49od +L2aRiVIsTyBnWWstZu/ryrapSzMWhSKUDHMedU7TXonXrcWVj4o= +=G7OO +-----END PGP SIGNATURE----- diff --git a/libreoffice-help-6.4.3.2.tar.xz b/libreoffice-help-6.4.3.2.tar.xz deleted file mode 100644 index 0b23978..0000000 --- a/libreoffice-help-6.4.3.2.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8570eaa8903e4fb747500adbf06d69d2d3cb6ed3a11a3a804403878f1ecfef56 -size 88297704 diff --git a/libreoffice-help-6.4.3.2.tar.xz.asc b/libreoffice-help-6.4.3.2.tar.xz.asc deleted file mode 100644 index 8b0c3db..0000000 --- a/libreoffice-help-6.4.3.2.tar.xz.asc +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAl6MoJEACgkQ9DSh76/u -rqN2CRAAid8Yd7XXHE/zNk4iRsKhXvZ3QGilno1F4NTu3y9OK48F3Nxo+CF/pSBm -KNUmVFzFrd58D8gPwmh8Ka6yipjArHi2NJUoGUBqCrTkz615ZF+10nO6c/mwPYJb -te/gz+M0fC8DcRxydZdJqxZPNbQSGC1T6tRqqfJUZK7y6Q9VQZQG55UMaDBcGb6q -OBQFdQgRLGhwrF+KyvTXu5vIvWtk8CLOp3qwQKYU+zlTECWZ3SCgPnHPbE3sF8So -RX/ATUY/xM2qdoihBtuGi6TPRnW/SZWa+jqaeNdKP0ode6/0N54Thcl8RS7ao8pb -hMWEsGUUPZs8xo8B4qxFmQZld+zmlyroaYl0AGu1KEAdj1JJexxXyKH5UY5DJduN -t2DU0fyUdqMzEPT5cU8XztjfY7rVVUaSbvp7RpZZbnkPw3++14e6sxAIkAcZ6+Cl -T9b7mcVRBnqGLiAsNskvF8QIKJGG83CZrARPr/++suoZzZNU4vnUkhV9+lLywZ7k -1VgH4wYKsGX3QnOzFCOwK2X3RFJfOrdtxSA2YkQhfxf7XYLSSX7CW6g+b+7paHVU -tCCWTvIh8RdQavJ/lmvxGckJrunefTS6Qako2DiGGLH7OM20Hna/PoVZVovej8yi -inpxxVJb7jufRy922Yt2a7Vi59tyBeZC2rJGo0upacd/3YpDg60= -=f4yA ------END PGP SIGNATURE----- diff --git a/libreoffice-help-6.4.4.2.tar.xz b/libreoffice-help-6.4.4.2.tar.xz new file mode 100644 index 0000000..cf7b0c3 --- /dev/null +++ b/libreoffice-help-6.4.4.2.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c61ac7b9ceac9aa0813bce405ce25b13dc1b698509ce33827ff7c65dffde25ac +size 88296340 diff --git a/libreoffice-help-6.4.4.2.tar.xz.asc b/libreoffice-help-6.4.4.2.tar.xz.asc new file mode 100644 index 0000000..7bdcfb8 --- /dev/null +++ b/libreoffice-help-6.4.4.2.tar.xz.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAl676YMACgkQ9DSh76/u +rqOy8RAAlD39J0T8PxoyiiJ+NFLNhWbywavtjHDbAObvSN4x83MbYEbRNzayQCSU +MnFxustGK9jJzZ9DI4edZ8rjUBO7zOSsHcd5MXpupL8ye0Fp8YYafBeHiS8Q+FF8 +x3e5EpPotZxx5ne54VqG46C3+PzqA9YZ+GIyBRVkrO4YWKfJYA6rlxJn0AQXEX2A +lNU/oZq6JX4BafG0bX0Qcz4KGKNtrpCqoHyj9auzLF+kV8c1zzPqU5A6pW2B8kQk +mZfz57bIomtmVSO7gqhc7ZSe7wHLmhsx79NZo/LPjxWxQ8c/P12dbHPxmQkIaPmQ +96kfoakR+ExAMzrHPSniATgipJrhdvX+HJXVvl7cPYwtLihM+CwzamMjUcaEszqG +EWFnaoVcIoX6KNvGIO8hZ9IoNwdgPkhaYMp9U1gIcmryHak+AAeLBNDVK4hMQEZQ +cPS95gCofaY2TzoQMpAy8qe600+oGZIsvWX9212w+NhqO5oYhtq2URrQkyeFobtw +hFe0/BjPlS4HEPGC8kM80TfWmc+oOL0sjLb5Uccb8WMoZ4/PGttBFSe5Kbdo/ivH +bRCXtSe3dwinKFcf97SLlWhUsIvPRq1zMLeTl475KiCBxnNZnE2Nt4hV1FBEaHla +fzd9z7OPmV2zCgcERX+834RTVtWlYQ0EwbAGlaCOcKqUXAQh9yg= +=jDpN +-----END PGP SIGNATURE----- diff --git a/libreoffice-translations-6.4.3.2.tar.xz b/libreoffice-translations-6.4.3.2.tar.xz deleted file mode 100644 index ac21225..0000000 --- a/libreoffice-translations-6.4.3.2.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:03260badad37d1d96c9bcac79ee48ab2ab00000aba78c3a4a4accd51c987e91b -size 172348568 diff --git a/libreoffice-translations-6.4.3.2.tar.xz.asc b/libreoffice-translations-6.4.3.2.tar.xz.asc deleted file mode 100644 index 9a967c9..0000000 --- a/libreoffice-translations-6.4.3.2.tar.xz.asc +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAl6MoJIACgkQ9DSh76/u -rqMKKA/9FHGaXiRnc8azGnAkNXBJPVFctd0/HD0mfAc8DEesznj7Zo4yzWCR4Luj -SKErnPq7Zqx6ijcYI1dLggppihWThQzs5CzOffQpFuWpT8dmHxPSV4quck+aGVE7 -/9jlFzD1SX7UiyJu8fqelJtPbtZUiJT9gG7uo2MzGaOTYWQkxwYwGoO2xD5ivH9U -CGsnxJWX3YlMCI+0q6XHgJ/FVijdD6RIUhZHgmgbCglQ7o5f5MwEmew5dJcOY4Qv -80FMaUdMQOATOtbGbFP/etWVgPGAVFCUHnF31MT6ZF4BCgI09fy16PELNmQQWFUz -r2sDwFQez3whjjxE2JFqjSqsPOZ9YARz9+j2exTg6rDWrkQy9vXNGfoqba4Wh76Q -3xbwrosTXHM0JWoKlIbiwlbm1kg8wS5kg9FtX4P3pj67fGDGvvDBGJ6sQa6rEblz -2A5uKbx9XGjFQBpPdYbIBk7uFLYQSOpf9sP6spITATxIIUnp6z4iBTkSJOoeZHLL -Iy/hn4L6YGGsZHYZmIfcw9xYlU2eCaangFDzIlR0/DgU533X//wmLGD+Nu0FM0oe -1FM3cGmltVZJrK0C7124eJBxcaKRsJv6h5V+0NPc8+IkyMnwOZqMHnwPVRoE46m/ -gyn2wQ7RRUkhAUsC52cUJ+3/6sfg3IYbuLWi1jfIMw/8ejrydqY= -=+KxM ------END PGP SIGNATURE----- diff --git a/libreoffice-translations-6.4.4.2.tar.xz b/libreoffice-translations-6.4.4.2.tar.xz new file mode 100644 index 0000000..bc0825b --- /dev/null +++ b/libreoffice-translations-6.4.4.2.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:49cd385aabe7f197447ac0645a8fcdba75b04642b38fac49342aace2055098bd +size 172568720 diff --git a/libreoffice-translations-6.4.4.2.tar.xz.asc b/libreoffice-translations-6.4.4.2.tar.xz.asc new file mode 100644 index 0000000..4310724 --- /dev/null +++ b/libreoffice-translations-6.4.4.2.tar.xz.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAl676YQACgkQ9DSh76/u +rqOzARAAp6IVNSlCoMHryOk9Zx6LsWhsYnAQdyi7ZwxNecHU/PkzuadIlFIfXxYi +omUTCf8elq+NSjpMnnois+FjBFZsdzMmYX8w5ktyWwO0Y6c5tzZbfX/gbz3QU0Hn +/eY3UR8323Pkrpgag5yK/v8F+Z74OFuQrJC368kwPX4sQHBSrhtqAQ5eu5Q7rJif +N7KREGDu22Tjy9/+8XzaP6kj71QYhYQKybrGOOdfjg15spdK4zUW7cgtXgVZ2pB5 +rG0yK7/fTOaM7A0fQOVoV3Aj1EGbC7E6Jd+spYJBnjYVrDH9JwseIulrCBAguBGo +c60+vPyFj6yGFFUXqlcyEBPmJ4mmZDYdSYdyxjXQkbhduEE2okoXl2cCA9yWPL8r +8uGOU5Ze7LAQWV1xRO2oVu2UsceP/3OasbrnIy24A4LNzFG0JhJqavjQawRmWYey +iXqpz1Kjj5RaEUTFV8G8x3zVq8bi0s5d0QqDTgajsSmUjaWyhw02i9vyMGW6utW2 +3jieB3Ndre2B6Xjg+n6MeIkrzl/c+PVRiQ/17zjMFSpNTksm0HNj78rkrI6F0vH6 +OkLUlimeKgS4907wL0AVqws350PIsS6iXIYTCfYLh2ougKOgwIpSfmfW4a5lMuf1 +O9nsAcZWousnZDjqOg7Yom51X86VkQdV0Vf69gtkFP1bfwDw5Ps= +=fuqE +-----END PGP SIGNATURE----- diff --git a/libreoffice.changes b/libreoffice.changes index 8b6a1e7..eca9362 100644 --- a/libreoffice.changes +++ b/libreoffice.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Thu May 21 09:12:27 UTC 2020 - Tomáš Chvátal + +- Update to 6.4.4.2: + * 6.4.4 release +- Remove merged patch bsc1160687-1.diff + ------------------------------------------------------------------- Tue May 12 08:57:23 UTC 2020 - Andras Timar @@ -21,7 +28,7 @@ Tue May 5 12:36:00 UTC 2020 - Andras Timar Wed Apr 8 11:13:30 UTC 2020 - Tomáš Chvátal - Update to 6.4.3.2: - * 6.4.2 RC2 release + * 6.4.3 RC2 release - Drop merged patch adapt-o3tl-span-to-removal-of-std-span-cbegin-et-al.patch ------------------------------------------------------------------- diff --git a/libreoffice.spec b/libreoffice.spec index eba4a88..24ff169 100644 --- a/libreoffice.spec +++ b/libreoffice.spec @@ -50,7 +50,7 @@ %bcond_with system_gpgme %endif Name: libreoffice -Version: 6.4.3.2 +Version: 6.4.4.2 Release: 0 Summary: A Free Office Suite (Framework) License: LGPL-3.0-or-later AND MPL-2.0+ @@ -104,7 +104,6 @@ Patch8: replace-boost-bimap-in-sdext-pdfimport.patch # Bug 1165870 - LO-L3: Image shadow that should be invisible shown as extraneous line below Patch9: bsc1165870.diff # Bug 1160687 - LO-L3: Elements on title page mixed up -Patch10: bsc1160687-1.diff Patch11: bsc1160687-2.diff Patch12: bsc1160687-3.diff Patch13: bsc1160687-4.diff @@ -971,7 +970,6 @@ Provides %{langname} translations and additional resources (help files, etc.) fo %patch7 -p1 %patch8 -p1 %patch9 -p1 -%patch10 -p1 %patch11 -p1 %patch12 -p1 %patch13 -p1 From 546ed1ed6539b30f446a37c428c6e56508a0ee6bcceba6585b1f7336cdad1ca6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Chv=C3=A1tal?= Date: Fri, 22 May 2020 12:27:47 +0000 Subject: [PATCH 2/4] - Update to 6.4.3.2 bsc#1171997 CVE-2020-12801: OBS-URL: https://build.opensuse.org/package/show/LibreOffice:Factory/libreoffice?expand=0&rev=881 --- libreoffice.changes | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libreoffice.changes b/libreoffice.changes index eca9362..4fb4338 100644 --- a/libreoffice.changes +++ b/libreoffice.changes @@ -27,7 +27,7 @@ Tue May 5 12:36:00 UTC 2020 - Andras Timar ------------------------------------------------------------------- Wed Apr 8 11:13:30 UTC 2020 - Tomáš Chvátal -- Update to 6.4.3.2: +- Update to 6.4.3.2 bsc#1171997 CVE-2020-12801: * 6.4.3 RC2 release - Drop merged patch adapt-o3tl-span-to-removal-of-std-span-cbegin-et-al.patch From d750944db62ed5dbaaf610080092305c9b6a92ecd37fe7f757daa086505c81f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Chv=C3=A1tal?= Date: Wed, 27 May 2020 07:11:11 +0000 Subject: [PATCH 3/4] Accepting request 809054 from LibreOffice:6.4 - Fix bsc#1165849 - LO-L3: Shadow size for rectangle is only a fraction of Office 365 * bsc1165849-1.diff * bsc1165849-2.diff * bsc1165849-3.diff OBS-URL: https://build.opensuse.org/request/show/809054 OBS-URL: https://build.opensuse.org/package/show/LibreOffice:Factory/libreoffice?expand=0&rev=882 --- bsc1165849-1.diff | 132 +++++++++++++++++++++++++++++++++ bsc1165849-2.diff | 141 ++++++++++++++++++++++++++++++++++++ bsc1165849-3.diff | 173 ++++++++++++++++++++++++++++++++++++++++++++ libreoffice.changes | 8 ++ libreoffice.spec | 7 ++ 5 files changed, 461 insertions(+) create mode 100644 bsc1165849-1.diff create mode 100644 bsc1165849-2.diff create mode 100644 bsc1165849-3.diff diff --git a/bsc1165849-1.diff b/bsc1165849-1.diff new file mode 100644 index 0000000..3ddb4ae --- /dev/null +++ b/bsc1165849-1.diff @@ -0,0 +1,132 @@ +From b4ed373a15b1e8d90c94ec7030ee3d3785f7e8f9 Mon Sep 17 00:00:00 2001 +From: Miklos Vajna +Date: Fri, 8 May 2020 16:43:22 +0200 +Subject: [PATCH] Related: tdf#129916 svx: improve shadow size of custom shapes + +There are multiple problems with this bug document, the first is that +the shadow primitive got the default position (0) of the owning shape. +Do it the same way as commit 6454b6336b8de9a4c5899adeab552af6f794cdc4 +(tdf#130058 Import shadow size., 2020-04-14) did for graphic objects. + +This requires constructing a transform matrix in +ViewContactOfSdrObjCustomShape::createViewIndependentPrimitive2DSequence(), +include position and size in that as a start. + +(cherry picked from commit e2b0e614e1185c960b3015414919f69a1ed35aa0) + +Change-Id: Ia51df555c1984971afe7c52ba3f2658099a4e7b3 +--- + .../primitive2d/sdrcustomshapeprimitive2d.hxx | 5 ++++- + .../viewcontactofsdrobjcustomshape.cxx | 19 +++++++++++++------ + .../primitive2d/sdrcustomshapeprimitive2d.cxx | 14 +++++++++++--- + 3 files changed, 28 insertions(+), 10 deletions(-) + +diff --git a/svx/inc/sdr/primitive2d/sdrcustomshapeprimitive2d.hxx b/svx/inc/sdr/primitive2d/sdrcustomshapeprimitive2d.hxx +index 285185684f15..84488906470a 100644 +--- a/svx/inc/sdr/primitive2d/sdrcustomshapeprimitive2d.hxx ++++ b/svx/inc/sdr/primitive2d/sdrcustomshapeprimitive2d.hxx +@@ -47,6 +47,8 @@ namespace drawinglayer + // making exceptions with shadow generation + bool const mb3DShape : 1; + ++ basegfx::B2DHomMatrix maTransform; ++ + protected: + // local decomposition. + virtual void create2DDecomposition(Primitive2DContainer& rContainer, const geometry::ViewInformation2D& aViewInformation) const override; +@@ -57,7 +59,8 @@ namespace drawinglayer + const Primitive2DContainer& rSubPrimitives, + const basegfx::B2DHomMatrix& rTextBox, + bool bWordWrap, +- bool b3DShape); ++ bool b3DShape, ++ const basegfx::B2DHomMatrix& rObjectMatrix); + + // data access + const attribute::SdrShadowTextAttribute& getSdrSTAttribute() const { return maSdrSTAttribute; } +diff --git a/svx/source/sdr/contact/viewcontactofsdrobjcustomshape.cxx b/svx/source/sdr/contact/viewcontactofsdrobjcustomshape.cxx +index 8630b6dd1923..7a5c0487a13f 100644 +--- a/svx/source/sdr/contact/viewcontactofsdrobjcustomshape.cxx ++++ b/svx/source/sdr/contact/viewcontactofsdrobjcustomshape.cxx +@@ -157,13 +157,13 @@ namespace sdr + basegfx::B2DHomMatrix aTextBoxMatrix; + bool bWordWrap(false); + ++ // take unrotated snap rect as default, then get the ++ // unrotated text box. Rotation needs to be done centered ++ const tools::Rectangle aObjectBound(GetCustomShapeObj().GetGeoRect()); ++ const basegfx::B2DRange aObjectRange = vcl::unotools::b2DRectangleFromRectangle(aObjectBound); ++ + if(bHasText) + { +- // take unrotated snap rect as default, then get the +- // unrotated text box. Rotation needs to be done centered +- const tools::Rectangle aObjectBound(GetCustomShapeObj().GetGeoRect()); +- const basegfx::B2DRange aObjectRange = vcl::unotools::b2DRectangleFromRectangle(aObjectBound); +- + // #i101684# get the text range unrotated and absolute to the object range + const basegfx::B2DRange aTextRange(getCorrectedTextBoundRect()); + +@@ -238,6 +238,12 @@ namespace sdr + bWordWrap = GetCustomShapeObj().GetMergedItem(SDRATTR_TEXT_WORDWRAP).GetValue(); + } + ++ // fill object matrix ++ const basegfx::B2DHomMatrix aObjectMatrix(basegfx::utils::createScaleShearXRotateTranslateB2DHomMatrix( ++ aObjectRange.getWidth(), aObjectRange.getHeight(), ++ /*fShearX=*/0, /*fRotate=*/0, ++ aObjectRange.getMinX(), aObjectRange.getMinY())); ++ + // create primitive + const drawinglayer::primitive2d::Primitive2DReference xReference( + new drawinglayer::primitive2d::SdrCustomShapePrimitive2D( +@@ -245,7 +251,8 @@ namespace sdr + xGroup, + aTextBoxMatrix, + bWordWrap, +- b3DShape)); ++ b3DShape, ++ aObjectMatrix)); + xRetval = drawinglayer::primitive2d::Primitive2DContainer { xReference }; + } + +diff --git a/svx/source/sdr/primitive2d/sdrcustomshapeprimitive2d.cxx b/svx/source/sdr/primitive2d/sdrcustomshapeprimitive2d.cxx +index fb3018f7ff88..3e0350aaf56c 100644 +--- a/svx/source/sdr/primitive2d/sdrcustomshapeprimitive2d.cxx ++++ b/svx/source/sdr/primitive2d/sdrcustomshapeprimitive2d.cxx +@@ -68,7 +68,13 @@ namespace drawinglayer + // shadow will be correct (using ColorModifierStack), but expensive. + if(!get3DShape()) + { +- aRetval = createEmbeddedShadowPrimitive(aRetval, getSdrSTAttribute().getShadow()); ++ basegfx::B2DTuple aScale; ++ basegfx::B2DTuple aTranslate; ++ double fRotate = 0; ++ double fShearX = 0; ++ maTransform.decompose(aScale, aTranslate, fRotate, fShearX); ++ aRetval = createEmbeddedShadowPrimitive(aRetval, getSdrSTAttribute().getShadow(), ++ aTranslate.getX(), aTranslate.getY()); + } + } + +@@ -80,13 +86,15 @@ namespace drawinglayer + const Primitive2DContainer& rSubPrimitives, + const basegfx::B2DHomMatrix& rTextBox, + bool bWordWrap, +- bool b3DShape) ++ bool b3DShape, ++ const basegfx::B2DHomMatrix& rTransform) + : BufferedDecompositionPrimitive2D(), + maSdrSTAttribute(rSdrSTAttribute), + maSubPrimitives(rSubPrimitives), + maTextBox(rTextBox), + mbWordWrap(bWordWrap), +- mb3DShape(b3DShape) ++ mb3DShape(b3DShape), ++ maTransform(rTransform) + { + } + +-- +2.26.1 + diff --git a/bsc1165849-2.diff b/bsc1165849-2.diff new file mode 100644 index 0000000..78f5713 --- /dev/null +++ b/bsc1165849-2.diff @@ -0,0 +1,141 @@ +From f9dcb113bc2f81ef6abd2044d8512cd4e02f176c Mon Sep 17 00:00:00 2001 +From: Miklos Vajna +Date: Mon, 11 May 2020 10:10:34 +0200 +Subject: [PATCH] Related: tdf#129916 svx: clean up duplicated matrix decompose + for shadow size + +Pass the object's transform matrix to createEmbeddedShadowPrimitive(), +this allows decomposing it only at a single place. Also, this will allow +creating the shadow based on the object size. + +(cherry picked from commit 4ba368a3dd793bdc703858f358e1af7112decadd) + +Conflicts: + svx/inc/sdr/primitive2d/sdrdecompositiontools.hxx + svx/source/sdr/primitive2d/sdrdecompositiontools.cxx + +Change-Id: I8d8bf59934b00e13cda1da0398910aa9f1ce3c59 +--- + .../svx/sdr/primitive2d/sdrdecompositiontools.hxx | 4 ++-- + .../sdr/primitive2d/sdrcustomshapeprimitive2d.cxx | 7 +------ + .../sdr/primitive2d/sdrdecompositiontools.cxx | 13 +++++++++---- + svx/source/sdr/primitive2d/sdrgrafprimitive2d.cxx | 8 +------- + 4 files changed, 13 insertions(+), 19 deletions(-) + +diff --git a/include/svx/sdr/primitive2d/sdrdecompositiontools.hxx b/include/svx/sdr/primitive2d/sdrdecompositiontools.hxx +index 844da339c111..8635981dc0ae 100644 +--- a/include/svx/sdr/primitive2d/sdrdecompositiontools.hxx ++++ b/include/svx/sdr/primitive2d/sdrdecompositiontools.hxx +@@ -21,6 +21,7 @@ + #define INCLUDED_SVX_SDR_PRIMITIVE2D_SDRDECOMPOSITIONTOOLS_HXX + + #include ++#include + + #include + +@@ -72,8 +73,7 @@ namespace drawinglayer + Primitive2DContainer SVX_DLLPUBLIC createEmbeddedShadowPrimitive( + const Primitive2DContainer& rContent, + const attribute::SdrShadowAttribute& rShadow, +- sal_Int32 nGraphicTranslateX = 0, +- sal_Int32 nGraphicTranslateY = 0); ++ const basegfx::B2DHomMatrix& rObjectMatrix = basegfx::B2DHomMatrix()); + + } // end of namespace primitive2d + } // end of namespace drawinglayer +diff --git a/svx/source/sdr/primitive2d/sdrcustomshapeprimitive2d.cxx b/svx/source/sdr/primitive2d/sdrcustomshapeprimitive2d.cxx +index 3e0350aaf56c..2334b1d7fef6 100644 +--- a/svx/source/sdr/primitive2d/sdrcustomshapeprimitive2d.cxx ++++ b/svx/source/sdr/primitive2d/sdrcustomshapeprimitive2d.cxx +@@ -68,13 +68,8 @@ namespace drawinglayer + // shadow will be correct (using ColorModifierStack), but expensive. + if(!get3DShape()) + { +- basegfx::B2DTuple aScale; +- basegfx::B2DTuple aTranslate; +- double fRotate = 0; +- double fShearX = 0; +- maTransform.decompose(aScale, aTranslate, fRotate, fShearX); + aRetval = createEmbeddedShadowPrimitive(aRetval, getSdrSTAttribute().getShadow(), +- aTranslate.getX(), aTranslate.getY()); ++ maTransform); + } + } + +diff --git a/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx b/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx +index d6822bfd1519..42c0bb60ecc9 100644 +--- a/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx ++++ b/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx +@@ -44,6 +44,7 @@ + #include + #include + #include ++#include + + + using namespace com::sun::star; +@@ -482,8 +483,7 @@ namespace drawinglayer + Primitive2DContainer createEmbeddedShadowPrimitive( + const Primitive2DContainer& rContent, + const attribute::SdrShadowAttribute& rShadow, +- sal_Int32 nGraphicTranslateX, +- sal_Int32 nGraphicTranslateY) ++ const basegfx::B2DHomMatrix& rObjectMatrix) + { + if(!rContent.empty()) + { +@@ -493,10 +493,15 @@ namespace drawinglayer + { + if(rShadow.getSize().getX() != 100000) + { ++ basegfx::B2DTuple aScale; ++ basegfx::B2DTuple aTranslate; ++ double fRotate = 0; ++ double fShearX = 0; ++ rObjectMatrix.decompose(aScale, aTranslate, fRotate, fShearX); + // Scale the shadow +- aShadowOffset.translate(-nGraphicTranslateX, -nGraphicTranslateY); ++ aShadowOffset.translate(-aTranslate.getX(), -aTranslate.getY()); + aShadowOffset.scale(rShadow.getSize().getX() * 0.00001, rShadow.getSize().getY() * 0.00001); +- aShadowOffset.translate(nGraphicTranslateX, nGraphicTranslateY); ++ aShadowOffset.translate(aTranslate.getX(), aTranslate.getY()); + } + + aShadowOffset.translate(rShadow.getOffset().getX(), rShadow.getOffset().getY()); +diff --git a/svx/source/sdr/primitive2d/sdrgrafprimitive2d.cxx b/svx/source/sdr/primitive2d/sdrgrafprimitive2d.cxx +index 676b26183b09..be25a1278e64 100644 +--- a/svx/source/sdr/primitive2d/sdrgrafprimitive2d.cxx ++++ b/svx/source/sdr/primitive2d/sdrgrafprimitive2d.cxx +@@ -35,7 +35,6 @@ namespace drawinglayer + void SdrGrafPrimitive2D::create2DDecomposition(Primitive2DContainer& rContainer, const geometry::ViewInformation2D& /*aViewInformation*/) const + { + Primitive2DContainer aRetval; +- basegfx::B2DTuple aTranslateGrf; + + // create unit outline polygon + const basegfx::B2DPolygon& aUnitOutline(basegfx::utils::createUnitPolygon()); +@@ -62,10 +61,6 @@ namespace drawinglayer + getTransform(), + getGraphicObject(), + getGraphicAttr())); +- double fRotate = 0; +- double fShearX = 0; +- basegfx::B2DTuple aScaleGrf; +- getTransform().decompose(aScaleGrf, aTranslateGrf, fRotate, fShearX); + aRetval.push_back(xGraphicContentPrimitive); + } + +@@ -127,8 +122,7 @@ namespace drawinglayer + aRetval = createEmbeddedShadowPrimitive( + aRetval, + getSdrLFSTAttribute().getShadow(), +- aTranslateGrf.getX(), +- aTranslateGrf.getY()); ++ getTransform()); + } + + rContainer.insert(rContainer.end(), aRetval.begin(), aRetval.end()); +-- +2.26.1 + diff --git a/bsc1165849-3.diff b/bsc1165849-3.diff new file mode 100644 index 0000000..fe30a82 --- /dev/null +++ b/bsc1165849-3.diff @@ -0,0 +1,173 @@ +From 74f3a7b9161ede870fbe2642158601ea3eaa073e Mon Sep 17 00:00:00 2001 +From: Miklos Vajna +Date: Wed, 20 Nov 2019 10:18:37 +0100 +Subject: [PATCH] drawinglayer: handle more primitives in the xml dump + +In preparation of writing a test for semi-transparent shape text. + +Change-Id: I2dac94a6cd9da48de9a5e407ceab78fb8be933d7 +Reviewed-on: https://gerrit.libreoffice.org/83264 +Reviewed-by: Miklos Vajna +Tested-by: Jenkins +(cherry picked from commit b6d794e14e65697fbf47a5b425d9d264e26e0161) + +tdf#129916 svx: fix origin of scaled shadow + +We assumed that the top left corner is the origin for scaling, but that +is not necessarily the case. The intention is that the shadow direction +can be determined from its x and y offset, and the origin is the +opposite corner of the shape. + +(cherry picked from commit e21d522dddce2590ed435890ae8d5fe39658a71a) + +Conflicts: + svx/CppunitTest_svx_unit.mk + +Change-Id: I6759302767d20739b6e2be79d379740dd06f70f5 +--- + .../source/tools/primitive2dxmldump.cxx | 83 ++++++++++++++- + svx/qa/unit/sdr.cxx | 96 ++++++++++++++++++ + .../sdr/primitive2d/sdrdecompositiontools.cxx | 14 ++- + 4 files changed, 189 insertions(+), 4 deletions(-) + create mode 100644 svx/qa/unit/data/shadow-scale-origin.pptx + create mode 100644 svx/qa/unit/sdr.cxx + +diff --git a/drawinglayer/source/tools/primitive2dxmldump.cxx b/drawinglayer/source/tools/primitive2dxmldump.cxx +index 65170ae096f2..64117de878bd 100644 +--- a/drawinglayer/source/tools/primitive2dxmldump.cxx ++++ b/drawinglayer/source/tools/primitive2dxmldump.cxx +@@ -34,6 +34,7 @@ + + #include + #include ++#include + + using namespace drawinglayer::primitive2d; + +@@ -155,7 +156,7 @@ void Primitive2dXmlDump::decomposeAndWrite( + if (!pBasePrimitive) + continue; + sal_uInt32 nId = pBasePrimitive->getPrimitive2DID(); +- if (maFilter[nId]) ++ if (nId < maFilter.size() && maFilter[nId]) + continue; + + OUString sCurrentElementTag = drawinglayer::primitive2d::idToString(nId); +@@ -336,9 +337,87 @@ void Primitive2dXmlDump::decomposeAndWrite( + + break; + ++ case PRIMITIVE2D_ID_SDRRECTANGLEPRIMITIVE2D: ++ { ++ // SdrRectanglePrimitive2D is private to us. ++ rWriter.startElement("sdrrectangle"); ++ drawinglayer::primitive2d::Primitive2DContainer aPrimitiveContainer; ++ pBasePrimitive->get2DDecomposition(aPrimitiveContainer, ++ drawinglayer::geometry::ViewInformation2D()); ++ decomposeAndWrite(aPrimitiveContainer, rWriter); ++ rWriter.endElement(); ++ break; ++ } ++ ++ case PRIMITIVE2D_ID_SDRBLOCKTEXTPRIMITIVE2D: ++ { ++ // SdrBlockTextPrimitive2D is private to us. ++ rWriter.startElement("sdrblocktext"); ++ drawinglayer::primitive2d::Primitive2DContainer aPrimitiveContainer; ++ pBasePrimitive->get2DDecomposition(aPrimitiveContainer, ++ drawinglayer::geometry::ViewInformation2D()); ++ decomposeAndWrite(aPrimitiveContainer, rWriter); ++ rWriter.endElement(); ++ break; ++ } ++ ++ case PRIMITIVE2D_ID_TEXTHIERARCHYBLOCKPRIMITIVE2D: ++ { ++ // TextHierarchyBlockPrimitive2D. ++ rWriter.startElement("texthierarchyblock"); ++ drawinglayer::primitive2d::Primitive2DContainer aPrimitiveContainer; ++ pBasePrimitive->get2DDecomposition(aPrimitiveContainer, ++ drawinglayer::geometry::ViewInformation2D()); ++ decomposeAndWrite(aPrimitiveContainer, rWriter); ++ rWriter.endElement(); ++ break; ++ } ++ ++ case PRIMITIVE2D_ID_TEXTHIERARCHYPARAGRAPHPRIMITIVE2D: ++ { ++ // TextHierarchyParagraphPrimitive2D. ++ rWriter.startElement("texthierarchyparagraph"); ++ drawinglayer::primitive2d::Primitive2DContainer aPrimitiveContainer; ++ pBasePrimitive->get2DDecomposition(aPrimitiveContainer, ++ drawinglayer::geometry::ViewInformation2D()); ++ decomposeAndWrite(aPrimitiveContainer, rWriter); ++ rWriter.endElement(); ++ break; ++ } ++ ++ case PRIMITIVE2D_ID_TEXTHIERARCHYLINEPRIMITIVE2D: ++ { ++ // TextHierarchyLinePrimitive2D. ++ rWriter.startElement("texthierarchyline"); ++ drawinglayer::primitive2d::Primitive2DContainer aPrimitiveContainer; ++ pBasePrimitive->get2DDecomposition(aPrimitiveContainer, ++ drawinglayer::geometry::ViewInformation2D()); ++ decomposeAndWrite(aPrimitiveContainer, rWriter); ++ rWriter.endElement(); ++ break; ++ } ++ ++ case PRIMITIVE2D_ID_SHADOWPRIMITIVE2D: ++ { ++ // ShadowPrimitive2D. ++ rWriter.startElement("shadow"); ++ drawinglayer::primitive2d::Primitive2DContainer aPrimitiveContainer; ++ pBasePrimitive->get2DDecomposition(aPrimitiveContainer, ++ drawinglayer::geometry::ViewInformation2D()); ++ decomposeAndWrite(aPrimitiveContainer, rWriter); ++ rWriter.endElement(); ++ break; ++ } ++ + default: + { +- rWriter.element(OUStringToOString(sCurrentElementTag, RTL_TEXTENCODING_UTF8)); ++ rWriter.startElement("unhandled"); ++ rWriter.attribute("id", OUStringToOString(sCurrentElementTag, RTL_TEXTENCODING_UTF8)); ++ drawinglayer::primitive2d::Primitive2DContainer aPrimitiveContainer; ++ pBasePrimitive->get2DDecomposition(aPrimitiveContainer, ++ drawinglayer::geometry::ViewInformation2D()); ++ decomposeAndWrite(aPrimitiveContainer, rWriter); ++ rWriter.endElement(); + } + break; + } +diff --git a/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx b/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx +index 42c0bb60ecc9..48575d3b4917 100644 +--- a/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx ++++ b/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx +@@ -499,9 +499,19 @@ namespace drawinglayer + double fShearX = 0; + rObjectMatrix.decompose(aScale, aTranslate, fRotate, fShearX); + // Scale the shadow +- aShadowOffset.translate(-aTranslate.getX(), -aTranslate.getY()); ++ double nTranslateX = aTranslate.getX(); ++ double nTranslateY = aTranslate.getY(); ++ ++ // The origin for scaling is the top left corner by default. A negative ++ // shadow offset changes the origin. ++ if (rShadow.getOffset().getX() < 0) ++ nTranslateX += aScale.getX(); ++ if (rShadow.getOffset().getY() < 0) ++ nTranslateY += aScale.getY(); ++ ++ aShadowOffset.translate(-nTranslateX, -nTranslateY); + aShadowOffset.scale(rShadow.getSize().getX() * 0.00001, rShadow.getSize().getY() * 0.00001); +- aShadowOffset.translate(aTranslate.getX(), aTranslate.getY()); ++ aShadowOffset.translate(nTranslateX, nTranslateY); + } + + aShadowOffset.translate(rShadow.getOffset().getX(), rShadow.getOffset().getY()); +-- +2.26.1 + diff --git a/libreoffice.changes b/libreoffice.changes index 4fb4338..4f57ba0 100644 --- a/libreoffice.changes +++ b/libreoffice.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Tue May 26 11:25:10 UTC 2020 - Andras Timar + +- Fix bsc#1165849 - LO-L3: Shadow size for rectangle is only a fraction of Office 365 + * bsc1165849-1.diff + * bsc1165849-2.diff + * bsc1165849-3.diff + ------------------------------------------------------------------- Thu May 21 09:12:27 UTC 2020 - Tomáš Chvátal diff --git a/libreoffice.spec b/libreoffice.spec index 24ff169..70c85e4 100644 --- a/libreoffice.spec +++ b/libreoffice.spec @@ -111,6 +111,10 @@ Patch14: bsc1160687-5.diff Patch15: bsc1160687-6.diff Patch16: bsc1160687-7.diff Patch17: bsc1160687-8.diff +# Bug 1165849 - LO-L3: Shadow size for rectangle is only a fraction of Office 365 +Patch18: bsc1165849-1.diff +Patch19: bsc1165849-2.diff +Patch20: bsc1165849-3.diff # try to save space by using hardlinks Patch990: install-with-hardlinks.diff # save time by relying on rpm check rather than doing stupid find+grep @@ -977,6 +981,9 @@ Provides %{langname} translations and additional resources (help files, etc.) fo %patch15 -p1 %patch16 -p1 %patch17 -p1 +%patch18 -p1 +%patch19 -p1 +%patch20 -p1 %patch990 -p1 %patch991 -p1 From 2b68d5ba440d17541075d3645dbfbf96fa054bf5a99a0802761bd17f1c69a261 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Chv=C3=A1tal?= Date: Tue, 2 Jun 2020 06:03:32 +0000 Subject: [PATCH 4/4] Accepting request 810676 from LibreOffice:6.4 - Fix bsc#1146025 - LO-L3: Colored textboxes in PPTX look very odd (SmartArt) * bsc1146025.diff OBS-URL: https://build.opensuse.org/request/show/810676 OBS-URL: https://build.opensuse.org/package/show/LibreOffice:Factory/libreoffice?expand=0&rev=883 --- bsc1146025.diff | 501 ++++++++++++++++++++++++++++++++++++++++++++ libreoffice.changes | 6 + libreoffice.spec | 3 + 3 files changed, 510 insertions(+) create mode 100644 bsc1146025.diff diff --git a/bsc1146025.diff b/bsc1146025.diff new file mode 100644 index 0000000..9032dbe --- /dev/null +++ b/bsc1146025.diff @@ -0,0 +1,501 @@ +From bc15a8241b1c8e113bcbb83343652b2c84820e87 Mon Sep 17 00:00:00 2001 +From: Miklos Vajna +Date: Fri, 22 May 2020 17:58:22 +0200 +Subject: [PATCH] bsc1146025.diff + +smartart import: handle multiple in + +The TODO in the ColorFragmentHandler ctor was right: we only handled the +last child, but there can be multiple one. + +Use them based on the index of a shape in a loop. + +Move the TODO to the only place which still assumes a single color in +the color list. + +(cherry picked from commit 12bea6c897822964ad4705418da54411cb15749e) + +Conflicts: + oox/source/drawingml/colorchoicecontext.cxx + oox/source/drawingml/diagram/diagram.cxx + sd/qa/unit/import-tests-smartart.cxx + +oox smartart import: fix aspect ratio of shape with composite algo + +The layout node has alg=composite, then a parTx and a desTx child layout +nodes. No matter what order is used (parent first, child first), the +result will be wrong, as the constraints refer to each other. I did not +spot any description in ISO 29500-1 that would describe what is the +expected behavior. + +Researching this, found "One other consideration when specifying +composite constraints is that the constraints must be specified in the +same order as the nested layout nodes." at +, +which suggests to handle constraints for each shape in a parent -> child +order, but keep a shared state when iterating over the children which +gives us: + +- parent node, all direct constraints +- for each child node: + - child's constraints from parent + - child's own constraints + +This way the desTx top value can depend on the parTx's height, and it's +supported to define parTx's height only in the parTx layout node, not in +the composite parent. + +And after all, it matches what PowerPoint does, so the column headings +in the bugdoc have a 4:10 height:width aspect ratio. + +(cherry picked from commit 414586649582e182b2603702f4f586f4beeed8a9) + +oox smartart import, composite alg: implement vertical centering + +The bugdoc's case was that the total height would be used by 2 shapes, +but then a constraint decreases the height of one shape, so not all +vertical space is used. + +We used to just count from the top, need to center vertically, as +PowerPoint does it. + +(cherry picked from commit acdde3c643fde015214c546b1567727272ea799e) + +Change-Id: I1c5c4f82e621f1110ef06b0490ff79f82f60f214 +deb76c1ddd1ffff8d2a217cddf81106d1bb97eb9 +436019e9e837b73130e387c9bcd309e20045b0f9 +--- + oox/inc/drawingml/colorchoicecontext.hxx | 15 ++ + oox/source/drawingml/colorchoicecontext.cxx | 25 +++ + oox/source/drawingml/diagram/diagram.cxx | 17 +- + oox/source/drawingml/diagram/diagram.hxx | 16 +- + .../diagram/diagramfragmenthandler.cxx | 15 +- + .../drawingml/diagram/diagramlayoutatoms.cxx | 162 ++++++++++++++---- + .../drawingml/diagram/diagramlayoutatoms.hxx | 3 +- + .../drawingml/diagram/layoutatomvisitors.cxx | 4 +- + 8 files changed, 208 insertions(+), 49 deletions(-) + +diff --git a/oox/inc/drawingml/colorchoicecontext.hxx b/oox/inc/drawingml/colorchoicecontext.hxx +index 29889f494e3d..dae8d7fb8e25 100644 +--- a/oox/inc/drawingml/colorchoicecontext.hxx ++++ b/oox/inc/drawingml/colorchoicecontext.hxx +@@ -22,6 +22,8 @@ + + #include + ++#include ++ + namespace oox { + namespace drawingml { + +@@ -65,6 +67,19 @@ private: + Color& mrColor; + }; + ++/// Same as ColorContext, but handles multiple colors. ++class ColorsContext : public ::oox::core::ContextHandler2 ++{ ++public: ++ explicit ColorsContext(::oox::core::ContextHandler2Helper const& rParent, ++ std::vector& rColors); ++ ++ virtual ::oox::core::ContextHandlerRef ++ onCreateContext(sal_Int32 nElement, const ::oox::AttributeList& rAttribs) override; ++ ++private: ++ std::vector& mrColors; ++}; + + } // namespace drawingml + } // namespace oox +diff --git a/oox/source/drawingml/colorchoicecontext.cxx b/oox/source/drawingml/colorchoicecontext.cxx +index cf6c17ecd3b4..a9e0d91ef32e 100644 +--- a/oox/source/drawingml/colorchoicecontext.cxx ++++ b/oox/source/drawingml/colorchoicecontext.cxx +@@ -149,6 +149,31 @@ ColorContext::ColorContext( ContextHandler2Helper const & rParent, Color& rColor + return nullptr; + } + ++ColorsContext::ColorsContext(ContextHandler2Helper const& rParent, std::vector& rColors) ++ : ContextHandler2(rParent) ++ , mrColors(rColors) ++{ ++} ++ ++::oox::core::ContextHandlerRef ColorsContext::onCreateContext(sal_Int32 nElement, ++ const AttributeList&) ++{ ++ switch (nElement) ++ { ++ case A_TOKEN(scrgbClr): ++ case A_TOKEN(srgbClr): ++ case A_TOKEN(hslClr): ++ case A_TOKEN(sysClr): ++ case A_TOKEN(schemeClr): ++ case A_TOKEN(prstClr): ++ { ++ mrColors.emplace_back(); ++ return new ColorValueContext(*this, mrColors.back()); ++ } ++ } ++ return nullptr; ++} ++ + } // namespace drawingml + } // namespace oox + +diff --git a/oox/source/drawingml/diagram/diagram.cxx b/oox/source/drawingml/diagram/diagram.cxx +index b2f3373ad113..a03a06c39125 100644 +--- a/oox/source/drawingml/diagram/diagram.cxx ++++ b/oox/source/drawingml/diagram/diagram.cxx +@@ -321,9 +321,11 @@ void loadDiagram( ShapePtr const & pShape, + if( !pData->getExtDrawings().empty() ) + { + const DiagramColorMap::const_iterator aColor = pDiagram->getColors().find("node0"); +- if( aColor != pDiagram->getColors().end() ) ++ if( aColor != pDiagram->getColors().end() && !aColor->second.maTextFillColors.empty()) + { +- pShape->setFontRefColorForNodes(aColor->second.maTextFillColor); ++ // TODO(F1): well, actually, there might be *several* color ++ // definitions in it, after all it's called list. ++ pShape->setFontRefColorForNodes(DiagramColor::getColorByIndex(aColor->second.maTextFillColors, -1)); + } + } + +@@ -425,6 +427,17 @@ void reloadDiagram(SdrObject* pObj, core::XmlFilterBase& rFilter) + child->addShape(rFilter, rFilter.getCurrentTheme(), xShapes, aTransformation, pShape->getFillProperties()); + } + ++const oox::drawingml::Color& ++DiagramColor::getColorByIndex(const std::vector& rColors, sal_Int32 nIndex) ++{ ++ assert(!rColors.empty()); ++ if (nIndex == -1) ++ { ++ return rColors[rColors.size() - 1]; ++ } ++ ++ return rColors[nIndex % rColors.size()]; ++} + } } + + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +diff --git a/oox/source/drawingml/diagram/diagram.hxx b/oox/source/drawingml/diagram/diagram.hxx +index 576c4007e29f..a674e248961e 100644 +--- a/oox/source/drawingml/diagram/diagram.hxx ++++ b/oox/source/drawingml/diagram/diagram.hxx +@@ -22,6 +22,7 @@ + + #include + #include ++#include + + #include + +@@ -111,12 +112,15 @@ typedef std::map DiagramQStyleMap; + + struct DiagramColor + { +- oox::drawingml::Color maFillColor; +- oox::drawingml::Color maLineColor; +- oox::drawingml::Color maEffectColor; +- oox::drawingml::Color maTextFillColor; +- oox::drawingml::Color maTextLineColor; +- oox::drawingml::Color maTextEffectColor; ++ std::vector maFillColors; ++ std::vector maLineColors; ++ std::vector maEffectColors; ++ std::vector maTextFillColors; ++ std::vector maTextLineColors; ++ std::vector maTextEffectColors; ++ ++ static const oox::drawingml::Color& ++ getColorByIndex(const std::vector& rColors, sal_Int32 nIndex); + }; + + typedef std::map DiagramColorMap; +diff --git a/oox/source/drawingml/diagram/diagramfragmenthandler.cxx b/oox/source/drawingml/diagram/diagramfragmenthandler.cxx +index 6e1000af3627..7eae543dc6f9 100644 +--- a/oox/source/drawingml/diagram/diagramfragmenthandler.cxx ++++ b/oox/source/drawingml/diagram/diagramfragmenthandler.cxx +@@ -196,21 +196,18 @@ ColorFragmentHandler::ColorFragmentHandler( ::oox::core::XmlFilterBase& rFilter, + { + // the actual colors - defer to color fragment handlers. + +- // TODO(F1): well, actually, there might be *several* color +- // definitions in it, after all it's called list. But +- // apparently ColorContext doesn't handle that anyway... + case DGM_TOKEN(fillClrLst): +- return new ColorContext( *this, maColorEntry.maFillColor ); ++ return new ColorsContext( *this, maColorEntry.maFillColors ); + case DGM_TOKEN(linClrLst): +- return new ColorContext( *this, maColorEntry.maLineColor ); ++ return new ColorsContext( *this, maColorEntry.maLineColors ); + case DGM_TOKEN(effectClrLst): +- return new ColorContext( *this, maColorEntry.maEffectColor ); ++ return new ColorsContext( *this, maColorEntry.maEffectColors ); + case DGM_TOKEN(txFillClrLst): +- return new ColorContext( *this, maColorEntry.maTextFillColor ); ++ return new ColorsContext( *this, maColorEntry.maTextFillColors ); + case DGM_TOKEN(txLinClrLst): +- return new ColorContext( *this, maColorEntry.maTextLineColor ); ++ return new ColorsContext( *this, maColorEntry.maTextLineColors ); + case DGM_TOKEN(txEffectClrLst): +- return new ColorContext( *this, maColorEntry.maTextEffectColor ); ++ return new ColorsContext( *this, maColorEntry.maTextEffectColors ); + } + break; + } +diff --git a/oox/source/drawingml/diagram/diagramlayoutatoms.cxx b/oox/source/drawingml/diagram/diagramlayoutatoms.cxx +index ff83dde63fa3..19b1d10679f4 100644 +--- a/oox/source/drawingml/diagram/diagramlayoutatoms.cxx ++++ b/oox/source/drawingml/diagram/diagramlayoutatoms.cxx +@@ -430,6 +430,42 @@ sal_Int32 AlgAtom::getVerticalShapesCount(const ShapePtr& rShape) + return nCount; + } + ++namespace ++{ ++/** ++ * Apply rConstraint to the rProperties shared layout state. ++ * ++ * Note that the order in which constraints are applied matters, given that constraints can refer to ++ * each other, and in case A depends on B and A is applied before B, the effect of A won't be ++ * updated when B is applied. ++ */ ++void ApplyConstraintToLayout(const Constraint& rConstraint, LayoutPropertyMap& rProperties) ++{ ++ const LayoutPropertyMap::const_iterator aRef = rProperties.find(rConstraint.msRefForName); ++ if (aRef != rProperties.end()) ++ { ++ const LayoutProperty::const_iterator aRefType = aRef->second.find(rConstraint.mnRefType); ++ if (aRefType != aRef->second.end()) ++ rProperties[rConstraint.msForName][rConstraint.mnType] ++ = aRefType->second * rConstraint.mfFactor; ++ else ++ { ++ // Values are never in EMU, while oox::drawingml::Shape position and size are always in ++ // EMU. ++ double fUnitFactor = 0; ++ if (isFontUnit(rConstraint.mnRefType)) ++ // Points -> EMU. ++ fUnitFactor = EMU_PER_PT; ++ else ++ // Millimeters -> EMU. ++ fUnitFactor = EMU_PER_HMM * 100; ++ rProperties[rConstraint.msForName][rConstraint.mnType] ++ = rConstraint.mfValue * fUnitFactor; ++ } ++ } ++} ++} ++ + void AlgAtom::layoutShape( const ShapePtr& rShape, + const std::vector& rConstraints ) + { +@@ -443,6 +479,11 @@ void AlgAtom::layoutShape( const ShapePtr& rShape, + LayoutProperty& rParent = aProperties[""]; + + sal_Int32 nParentXOffset = 0; ++ ++ // Track min/max vertical positions, so we can center everything at the end, if needed. ++ sal_Int32 nVertMin = std::numeric_limits::max(); ++ sal_Int32 nVertMax = 0; ++ + if (mfAspectRatio != 1.0) + { + rParent[XML_w] = rShape->getSize().Width; +@@ -467,31 +508,74 @@ void AlgAtom::layoutShape( const ShapePtr& rShape, + + for (const auto & rConstr : rConstraints) + { +- const LayoutPropertyMap::const_iterator aRef = aProperties.find(rConstr.msRefForName); +- if (aRef != aProperties.end()) ++ // Apply direct constraints for all layout nodes. ++ ApplyConstraintToLayout(rConstr, aProperties); ++ } ++ ++ for (auto& aCurrShape : rShape->getChildren()) ++ { ++ // Apply constraints from the current layout node for this child shape. ++ // Previous child shapes may have changed aProperties. ++ for (const auto& rConstr : rConstraints) + { +- const LayoutProperty::const_iterator aRefType = aRef->second.find(rConstr.mnRefType); +- if (aRefType != aRef->second.end()) +- aProperties[rConstr.msForName][rConstr.mnType] = aRefType->second * rConstr.mfFactor; +- else ++ if (rConstr.msForName != aCurrShape->getInternalName()) + { +- // Values are never in EMU, while oox::drawingml::Shape +- // position and size are always in EMU. +- double fUnitFactor = 0; +- if (isFontUnit(rConstr.mnRefType)) +- // Points -> EMU. +- fUnitFactor = EMU_PER_PT; +- else +- // Millimeters -> EMU. +- fUnitFactor = EMU_PER_HMM * 100; +- aProperties[rConstr.msForName][rConstr.mnType] +- = rConstr.mfValue * fUnitFactor; ++ continue; ++ } ++ ++ ApplyConstraintToLayout(rConstr, aProperties); ++ } ++ ++ // Apply constraints from the child layout node for this child shape. ++ // This builds on top of the own parent state + the state of previous shapes in the ++ // same composite algorithm. ++ const LayoutNode& rLayoutNode = getLayoutNode(); ++ for (const auto& pDirectChild : rLayoutNode.getChildren()) ++ { ++ auto pLayoutNode = dynamic_cast(pDirectChild.get()); ++ if (!pLayoutNode) ++ { ++ continue; ++ } ++ ++ if (pLayoutNode->getName() != aCurrShape->getInternalName()) ++ { ++ continue; ++ } ++ ++ for (const auto& pChild : pLayoutNode->getChildren()) ++ { ++ auto pConstraintAtom = dynamic_cast(pChild.get()); ++ if (!pConstraintAtom) ++ { ++ continue; ++ } ++ ++ const Constraint& rConstraint = pConstraintAtom->getConstraint(); ++ if (!rConstraint.msForName.isEmpty()) ++ { ++ continue; ++ } ++ ++ if (!rConstraint.msRefForName.isEmpty()) ++ { ++ continue; ++ } ++ ++ // Either an absolute value or a factor of a property. ++ if (rConstraint.mfValue == 0.0 && rConstraint.mnRefType == XML_none) ++ { ++ continue; ++ } ++ ++ Constraint aConstraint(rConstraint); ++ aConstraint.msForName = pLayoutNode->getName(); ++ aConstraint.msRefForName = pLayoutNode->getName(); ++ ++ ApplyConstraintToLayout(aConstraint, aProperties); + } + } +- } + +- for (auto & aCurrShape : rShape->getChildren()) +- { + awt::Size aSize = rShape->getSize(); + awt::Point aPos(0, 0); + +@@ -535,6 +619,24 @@ void AlgAtom::layoutShape( const ShapePtr& rShape, + aCurrShape->setSize(aSize); + aCurrShape->setChildSize(aSize); + aCurrShape->setPosition(aPos); ++ ++ nVertMin = std::min(aPos.Y, nVertMin); ++ nVertMax = std::max(aPos.Y + aSize.Height, nVertMax); ++ } ++ ++ // See if all vertical space is used or we have to center the content. ++ if (nVertMin >= 0 && nVertMax <= rParent[XML_h]) ++ { ++ sal_Int32 nDiff = rParent[XML_h] - (nVertMax - nVertMin); ++ if (nDiff > 0) ++ { ++ for (auto& aCurrShape : rShape->getChildren()) ++ { ++ awt::Point aPosition = aCurrShape->getPosition(); ++ aPosition.Y += nDiff / 2; ++ aCurrShape->setPosition(aPosition); ++ } ++ } + } + break; + } +@@ -1275,7 +1377,7 @@ void LayoutNode::accept( LayoutAtomVisitor& rVisitor ) + rVisitor.visit(*this); + } + +-bool LayoutNode::setupShape( const ShapePtr& rShape, const dgm::Point* pPresNode ) const ++bool LayoutNode::setupShape( const ShapePtr& rShape, const dgm::Point* pPresNode, sal_Int32 nCurrIdx ) const + { + SAL_INFO( + "oox.drawingml", +@@ -1413,15 +1515,17 @@ bool LayoutNode::setupShape( const ShapePtr& rShape, const dgm::Point* pPresNode + const DiagramColorMap::const_iterator aColor = mrDgm.getColors().find(aStyleLabel); + if( aColor != mrDgm.getColors().end() ) + { ++ // Take the nth color from the color list in case we are the nth shape in a ++ // loop. + const DiagramColor& rColor=aColor->second; +- if( rColor.maFillColor.isUsed() ) +- rShape->getShapeStyleRefs()[XML_fillRef].maPhClr = rColor.maFillColor; +- if( rColor.maLineColor.isUsed() ) +- rShape->getShapeStyleRefs()[XML_lnRef].maPhClr = rColor.maLineColor; +- if( rColor.maEffectColor.isUsed() ) +- rShape->getShapeStyleRefs()[XML_effectRef].maPhClr = rColor.maEffectColor; +- if( rColor.maTextFillColor.isUsed() ) +- rShape->getShapeStyleRefs()[XML_fontRef].maPhClr = rColor.maTextFillColor; ++ if( !rColor.maFillColors.empty() ) ++ rShape->getShapeStyleRefs()[XML_fillRef].maPhClr = DiagramColor::getColorByIndex(rColor.maFillColors, nCurrIdx); ++ if( !rColor.maLineColors.empty() ) ++ rShape->getShapeStyleRefs()[XML_lnRef].maPhClr = DiagramColor::getColorByIndex(rColor.maLineColors, nCurrIdx); ++ if( !rColor.maEffectColors.empty() ) ++ rShape->getShapeStyleRefs()[XML_effectRef].maPhClr = DiagramColor::getColorByIndex(rColor.maEffectColors, nCurrIdx); ++ if( !rColor.maTextFillColors.empty() ) ++ rShape->getShapeStyleRefs()[XML_fontRef].maPhClr = DiagramColor::getColorByIndex(rColor.maTextFillColors, nCurrIdx); + } + } + +diff --git a/oox/source/drawingml/diagram/diagramlayoutatoms.hxx b/oox/source/drawingml/diagram/diagramlayoutatoms.hxx +index 91028971473e..2e4551642389 100644 +--- a/oox/source/drawingml/diagram/diagramlayoutatoms.hxx ++++ b/oox/source/drawingml/diagram/diagramlayoutatoms.hxx +@@ -260,7 +260,8 @@ public: + { mpNodeShapes.push_back(pShape); } + + bool setupShape( const ShapePtr& rShape, +- const dgm::Point* pPresNode ) const; ++ const dgm::Point* pPresNode, ++ sal_Int32 nCurrIdx ) const; + + const LayoutNode* getParentLayoutNode() const; + +diff --git a/oox/source/drawingml/diagram/layoutatomvisitors.cxx b/oox/source/drawingml/diagram/layoutatomvisitors.cxx +index 4bfadc3affe8..c616ca3a9010 100644 +--- a/oox/source/drawingml/diagram/layoutatomvisitors.cxx ++++ b/oox/source/drawingml/diagram/layoutatomvisitors.cxx +@@ -73,7 +73,7 @@ void ShapeCreationVisitor::visit(LayoutNode& rAtom) + { + // reuse existing shape + ShapePtr pShape = rAtom.getExistingShape(); +- if (rAtom.setupShape(pShape, pNewNode)) ++ if (rAtom.setupShape(pShape, pNewNode, mnCurrIdx)) + { + pShape->setInternalName(rAtom.getName()); + rAtom.addNodeShape(pShape); +@@ -92,7 +92,7 @@ void ShapeCreationVisitor::visit(LayoutNode& rAtom) + "oox.drawingml", + "processing shape type " << (pShape->getCustomShapeProperties()->getShapePresetType())); + +- if (rAtom.setupShape(pShape, pNewNode)) ++ if (rAtom.setupShape(pShape, pNewNode, mnCurrIdx)) + { + pShape->setInternalName(rAtom.getName()); + pCurrParent->addChild(pShape); +-- +2.26.1 + diff --git a/libreoffice.changes b/libreoffice.changes index 4f57ba0..c416993 100644 --- a/libreoffice.changes +++ b/libreoffice.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Mon Jun 1 18:25:46 UTC 2020 - Andras Timar + +- Fix bsc#1146025 - LO-L3: Colored textboxes in PPTX look very odd (SmartArt) + * bsc1146025.diff + ------------------------------------------------------------------- Tue May 26 11:25:10 UTC 2020 - Andras Timar diff --git a/libreoffice.spec b/libreoffice.spec index 70c85e4..16e0e37 100644 --- a/libreoffice.spec +++ b/libreoffice.spec @@ -115,6 +115,8 @@ Patch17: bsc1160687-8.diff Patch18: bsc1165849-1.diff Patch19: bsc1165849-2.diff Patch20: bsc1165849-3.diff +# Bug 1146025 - LO-L3: Colored textboxes in PPTX look very odd (SmartArt) +Patch21: bsc1146025.diff # try to save space by using hardlinks Patch990: install-with-hardlinks.diff # save time by relying on rpm check rather than doing stupid find+grep @@ -984,6 +986,7 @@ Provides %{langname} translations and additional resources (help files, etc.) fo %patch18 -p1 %patch19 -p1 %patch20 -p1 +%patch21 -p1 %patch990 -p1 %patch991 -p1