From be9165a6dd81e14deb461272c9f0aa3847e6cb22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= Date: Wed, 18 Feb 2015 16:20:41 +0000 Subject: [PATCH] Resolves: rhbz#1193971 clear hard coded char props in cells --- ...93971-clear-hard-coded-char-props-in.patch | 128 ++++++++++++++++++ libreoffice.spec | 1 + 2 files changed, 129 insertions(+) create mode 100644 0001-Resolves-rhbz-1193971-clear-hard-coded-char-props-in.patch diff --git a/0001-Resolves-rhbz-1193971-clear-hard-coded-char-props-in.patch b/0001-Resolves-rhbz-1193971-clear-hard-coded-char-props-in.patch new file mode 100644 index 0000000..ca064c2 --- /dev/null +++ b/0001-Resolves-rhbz-1193971-clear-hard-coded-char-props-in.patch @@ -0,0 +1,128 @@ +From af05bc34c64d20e4936735b3506e9533623dac7d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Wed, 18 Feb 2015 15:04:45 +0000 +Subject: [PATCH] Resolves: rhbz#1193971 clear hard-coded char props in table + cells... +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +like we do already for shapes. So now when attempting to set replacement char +properties on the entire cell, clear any hard-coded sub ranges within the +existing paragraphs. + +This extends the effort of +commit a217f3cb2dce71a4322f78ceb45edb6f171b2b65 +Author: Matúš Kukan +Date: Tue Aug 26 10:16:34 2014 +0200 + + bnc#770711: Make changing table text color in impress always work + +to encompass all character properties, not just color + +Change-Id: If8b426c3531b4678868d8351426db32c3c558650 +(cherry picked from commit b14259b946686c753c0df42c519fc2537e871601) +--- + svx/source/svdraw/svdedtv1.cxx | 38 ++++++++++++++++++++++---------------- + svx/source/table/cell.cxx | 15 +++++++++++++-- + 2 files changed, 35 insertions(+), 18 deletions(-) + +diff --git a/svx/source/svdraw/svdedtv1.cxx b/svx/source/svdraw/svdedtv1.cxx +index 1ba5f40..62c4cff 100644 +--- a/svx/source/svdraw/svdedtv1.cxx ++++ b/svx/source/svdraw/svdedtv1.cxx +@@ -953,6 +953,26 @@ void SdrEditView::MergeAttrFromMarked(SfxItemSet& rAttr, bool bOnlyHardAttr) con + } + } + ++std::vector GetAllCharPropIds(const SfxItemSet& rSet) ++{ ++ std::vector aCharWhichIds; ++ { ++ SfxItemIter aIter(rSet); ++ const SfxPoolItem* pItem=aIter.FirstItem(); ++ while (pItem!=NULL) ++ { ++ if (!IsInvalidItem(pItem)) ++ { ++ sal_uInt16 nWhich = pItem->Which(); ++ if (nWhich>=EE_CHAR_START && nWhich<=EE_CHAR_END) ++ aCharWhichIds.push_back( nWhich ); ++ } ++ pItem=aIter.NextItem(); ++ } ++ } ++ return aCharWhichIds; ++} ++ + void SdrEditView::SetAttrToMarked(const SfxItemSet& rAttr, bool bReplaceAll) + { + if (AreObjectsMarked()) +@@ -977,25 +997,11 @@ void SdrEditView::SetAttrToMarked(const SfxItemSet& rAttr, bool bReplaceAll) + } + #endif + +- // #103836# if the user thets character attributes to the complete shape, ++ // #103836# if the user sets character attributes to the complete shape, + // we want to remove all hard set character attributes with same + // which ids from the text. We do that later but here we remember + // all character attribute which id's that are set. +- std::vector aCharWhichIds; +- { +- SfxItemIter aIter(rAttr); +- const SfxPoolItem* pItem=aIter.FirstItem(); +- while( pItem!=NULL ) +- { +- if (!IsInvalidItem(pItem)) +- { +- sal_uInt16 nWhich = pItem->Which(); +- if (nWhich>=EE_CHAR_START && nWhich<=EE_CHAR_END) +- aCharWhichIds.push_back( nWhich ); +- } +- pItem=aIter.NextItem(); +- } +- } ++ std::vector aCharWhichIds(GetAllCharPropIds(rAttr)); + + // To make Undo reconstruct text attributes correctly after Format.Standard + bool bHasEEItems=SearchOutlinerItems(rAttr,bReplaceAll); +diff --git a/svx/source/table/cell.cxx b/svx/source/table/cell.cxx +index e81370c..3468283 100644 +--- a/svx/source/table/cell.cxx ++++ b/svx/source/table/cell.cxx +@@ -139,6 +139,8 @@ SdrText* CellTextProvider::getText(sal_Int32 nIndex) const + + } + ++extern std::vector GetAllCharPropIds(const SfxItemSet& rSet); ++ + namespace sdr + { + namespace properties +@@ -261,12 +263,21 @@ namespace sdr + + sal_Int32 nParaCount(pOutliner->GetParagraphCount()); + ++ // if the user sets character attributes to the complete ++ // cell we want to remove all hard set character attributes ++ // with same which ids from the text ++ std::vector aCharWhichIds(GetAllCharPropIds(rSet)); ++ + for(sal_Int32 nPara = 0; nPara < nParaCount; nPara++) + { + SfxItemSet aSet(pOutliner->GetParaAttribs(nPara)); + aSet.Put(rSet); +- if (aSet.GetItemState(EE_CHAR_COLOR, false) == SfxItemState::SET) +- pOutliner->RemoveCharAttribs( nPara, EE_CHAR_COLOR ); ++ ++ for (std::vector::const_iterator aI = aCharWhichIds.begin(); aI != aCharWhichIds.end(); ++aI) ++ { ++ pOutliner->RemoveCharAttribs(nPara, *aI); ++ } ++ + pOutliner->SetParaAttribs(nPara, aSet); + } + +-- +1.9.3 + diff --git a/libreoffice.spec b/libreoffice.spec index afbc49a..7934880 100644 --- a/libreoffice.spec +++ b/libreoffice.spec @@ -326,6 +326,7 @@ Patch18: 0001-radio-check-top-center-bottom-alignment-for-table-ce.patch Patch19: 0001-allow-comparing-documents-which-only-differ-by-frame.patch Patch20: 0001-Use-the-same-advanced-Ellipse-and-Rectangle-shapes-i.patch Patch21: 0001-fix-linker-error.patch +Patch22: 0001-Resolves-rhbz-1193971-clear-hard-coded-char-props-in.patch %define instdir %{_libdir} %define baseinstdir %{instdir}/libreoffice