[libreoffice] Resolves: rhbz#1193971 clear hard coded char props in cells

Caolán McNamara caolanm at fedoraproject.org
Wed Feb 18 16:21:00 UTC 2015


commit be9165a6dd81e14deb461272c9f0aa3847e6cb22
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Wed Feb 18 16:20:41 2015 +0000

    Resolves: rhbz#1193971 clear hard coded char props in cells

 ...bz-1193971-clear-hard-coded-char-props-in.patch |  128 ++++++++++++++++++++
 libreoffice.spec                                   |    1 +
 2 files changed, 129 insertions(+), 0 deletions(-)
---
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?= <caolanm at redhat.com>
+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 <matus.kukan at collabora.com>
+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<sal_uInt16> GetAllCharPropIds(const SfxItemSet& rSet)
++{
++    std::vector<sal_uInt16> 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<sal_uInt16> 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<sal_uInt16> 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<sal_uInt16> 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<sal_uInt16> 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<sal_uInt16>::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


More information about the scm-commits mailing list