[Libreoffice-commits] core.git: sw/source
Justin Luth (via logerrit)
logerrit at kemper.freedesktop.org
Mon Mar 1 10:03:44 UTC 2021
sw/source/core/text/txtfld.cxx | 16 +++++++++++++++-
sw/source/filter/ww8/docxattributeoutput.cxx | 5 +++++
2 files changed, 20 insertions(+), 1 deletion(-)
New commits:
commit 3ab99045e22f82ad8b5d9c862860e4a8a93a52d6
Author: Justin Luth <justin.luth at collabora.com>
AuthorDate: Mon Feb 22 08:55:58 2021 +0200
Commit: Miklos Vajna <vmiklos at collabora.com>
CommitDate: Mon Mar 1 11:03:08 2021 +0100
tdf#114799 Char highlight: don't convert imported shading
Under normal circumstances, this was already done,
but in this case where the end paragraph properties
are being written out, there was no context, so the
grabbag was not found, and thus there could be no
indication that this came from an imported value.
I'm still mildly uncomfortable with this patch.
ISet takes priority over ChrIter. The TOX does
add a fake ChrIter for the whole section,
but doesn't document why (and the commits don't
help much either - very early stuff).
That seems to be the only place where this
patch overrides an otherwise working situation.
The comment for this function encourages me
that I'm doing the right thing.
/// Outputs an item set...
so it should be appropriate to set pISet, right?
This is just a visual change, so nearly
impossible to test reliably in a unit test.
[see https://gerrit.libreoffice.org/c/core/+/93082]
This causes LO to match how MS Word shows
w:shd on numbering (i.e. it doesn't show anything).
Change-Id: Ic3024c8f26a7e866c0b407a963dd9a1fc20b75cf
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111295
Tested-by: Jenkins
Reviewed-by: Justin Luth <justin_luth at sil.org>
Reviewed-by: Miklos Vajna <vmiklos at collabora.com>
diff --git a/sw/source/core/text/txtfld.cxx b/sw/source/core/text/txtfld.cxx
index 0c303d54b37e..7e5073eb9d6f 100644
--- a/sw/source/core/text/txtfld.cxx
+++ b/sw/source/core/text/txtfld.cxx
@@ -52,6 +52,7 @@
#include <IDocumentRedlineAccess.hxx>
#include <redline.hxx>
#include <sfx2/docfile.hxx>
+#include <svl/grabbagitem.hxx>
#include <svl/itemiter.hxx>
#include <svl/whiter.hxx>
#include <editeng/colritem.hxx>
@@ -498,8 +499,21 @@ static void checkApplyParagraphMarkFormatToNumbering(SwFont* pNumFnt, SwTextForm
pCleanedSet->ClearItem(pItem->Which());
else if (pItem->Which() == RES_CHRATR_BACKGROUND)
{
+ bool bShadingWasImported = false;
+ // If Shading was imported, it should not be converted to a Highlight,
+ // but remain as Shading which is ignored for numbering.
+ if (pCleanedSet->HasItem(RES_CHRATR_GRABBAG))
+ {
+ SfxGrabBagItem aGrabBag = pCleanedSet->Get(RES_CHRATR_GRABBAG, /*bSrchInParent=*/false);
+ std::map<OUString, css::uno::Any>& rMap = aGrabBag.GetGrabBag();
+ auto aIterator = rMap.find("CharShadingMarker");
+ if (aIterator != rMap.end())
+ aIterator->second >>= bShadingWasImported;
+ }
+
// If used, BACKGROUND is converted to HIGHLIGHT. So also ignore if a highlight already exists.
- if (pCleanedSet->HasItem(RES_CHRATR_HIGHLIGHT)
+ if (bShadingWasImported
+ || pCleanedSet->HasItem(RES_CHRATR_HIGHLIGHT)
|| (pFormat && pFormat->HasItem(RES_CHRATR_HIGHLIGHT)))
{
pCleanedSet->ClearItem(pItem->Which());
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index 457366ee2a6c..b5a793ec196f 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -1148,6 +1148,9 @@ namespace
/// Outputs an item set, that contains the formatting of the paragraph marker.
void lcl_writeParagraphMarkerProperties(DocxAttributeOutput& rAttributeOutput, const SfxItemSet& rParagraphMarkerProperties)
{
+ const SfxItemSet* pOldI = rAttributeOutput.GetExport().GetCurItemSet();
+ rAttributeOutput.GetExport().SetCurItemSet(&rParagraphMarkerProperties);
+
SfxWhichIter aIter(rParagraphMarkerProperties);
sal_uInt16 nWhichId = aIter.FirstWhich();
const SfxPoolItem* pItem = nullptr;
@@ -1174,6 +1177,7 @@ void lcl_writeParagraphMarkerProperties(DocxAttributeOutput& rAttributeOutput, c
}
nWhichId = aIter.NextWhich();
}
+ rAttributeOutput.GetExport().SetCurItemSet(pOldI);
}
const char *RubyAlignValues[] =
@@ -1230,6 +1234,7 @@ void DocxAttributeOutput::EndParagraphProperties(const SfxItemSet& rParagraphMar
rtl::Reference<sax_fastparser::FastAttributeList> pCharLangAttrList_Original(m_pCharLangAttrList);
m_pCharLangAttrList.clear();
+ assert (!GetExport().GetCurItemSet() && "Information gathering: Changing CurItemSet and want to ensure that one doesn't already exist in some context that we unknowingly clobber. Known to clobber fake-ish TOX m_pChpIter - have to assume that is OK.");
lcl_writeParagraphMarkerProperties(*this, rParagraphMarkerProperties);
// Write the collected run properties that are stored in 'm_pFontsAttrList', 'm_pEastAsianLayoutAttrList', 'm_pCharLangAttrList'
More information about the Libreoffice-commits
mailing list