[calligra] libs/kotext/styles: Don't remove to much on removeDuplicates.
C. Boemann
cbo at boemann.dk
Sat Mar 24 17:15:05 GMT 2012
Although i think odf is stupid to require this, I do agree that this is the
way to implement it, so okay to backport
On Saturday 24 March 2012 07:12:09 Thorsten Zachmann wrote:
> Git commit a5ee384ae82995461d89fe623c714405f8948e00 by Thorsten Zachmann.
> Committed on 24/03/2012 at 07:01.
> Pushed by zachmann into branch 'master'.
>
> Don't remove to much on removeDuplicates.
>
> When the font-familiy is set after the removing of duplicates also keep the
> properties font-pitch, font-family-generic and font-charset as these are
> only evaluated if there is a font-family on the same style level.
>
> BUG: 296667
>
> Please review so I can backport to 2.4 branch.
>
> Roundtrip tested with my odp and odt test set.
>
> CCMAIL: calligra-devel at kde.org
>
> M +22 -5 libs/kotext/styles/KoCharacterStyle.cpp
>
> http://commits.kde.org/calligra/a5ee384ae82995461d89fe623c714405f8948e00
>
> diff --git a/libs/kotext/styles/KoCharacterStyle.cpp
> b/libs/kotext/styles/KoCharacterStyle.cpp index 115d6b4..6021dde 100644
> --- a/libs/kotext/styles/KoCharacterStyle.cpp
> +++ b/libs/kotext/styles/KoCharacterStyle.cpp
> @@ -485,7 +485,6 @@ void KoCharacterStyle::applyStyle(QTextCharFormat
> &format) const else if (it.key() == KoCharacterStyle::UseWindowFontColor)
> { clearProperty.append(QTextFormat::ForegroundBrush); }
> -
> }
> ++it;
> }
> @@ -1915,16 +1914,34 @@ void KoCharacterStyle::removeDuplicates(const
> KoCharacterStyle &other) if
> (other.d->propertyBoolean(KoCharacterStyle::UseWindowFontColor) &&
> !d->propertyBoolean(KoCharacterStyle::UseWindowFontColor)) { brush =
> foreground();
> }
> +
> + // this properties should need to be kept if there is a font family
> defined as these are only evaluated if there is also a font family +
> int keepProperties[] = { QTextFormat::FontStyleHint,
> QTextFormat::FontFixedPitch, KoCharacterStyle::FontCharset }; +
> + QMap<int, QVariant> keep;
> + for (unsigned int i = 0; i < sizeof(keepProperties); ++i) {
> + if (hasProperty(keepProperties[i])) {
> + keep.insert(keepProperties[i], value(keepProperties[i]));
> + }
> + }
> this->d->stylesPrivate.removeDuplicates(other.d->stylesPrivate);
> if (brush.style() != Qt::NoBrush) {
> setForeground(brush);
> }
> +
> // in case the char style has any of the following properties it also
> needs to have the fontFamily as otherwise // these values will be ignored
> when loading according to the odf spec - if
> (!hasProperty(QTextFormat::FontFamily) &&
> (hasProperty(QTextFormat::FontStyleHint) ||
> hasProperty(QTextFormat::FontFixedPitch) ||
> hasProperty(KoCharacterStyle::FontCharset))) { - QString fontFamily
> = other.fontFamily();
> - if (!fontFamily.isEmpty()) {
> - setFontFamily(fontFamily);
> + if (!hasProperty(QTextFormat::FontFamily)) {
> + if (hasProperty(QTextFormat::FontStyleHint) ||
> hasProperty(QTextFormat::FontFixedPitch) ||
> hasProperty(KoCharacterStyle::FontCharset)) { + QString
> fontFamily = other.fontFamily();
> + if (!fontFamily.isEmpty()) {
> + setFontFamily(fontFamily);
> + }
> + }
> + }
> + else {
> + for (QMap<int, QVariant>::const_iterator it(keep.constBegin()); it
> != keep.constEnd(); ++it) { +
> this->d->stylesPrivate.add(it.key(), it.value());
> }
> }
> }
> _______________________________________________
> calligra-devel mailing list
> calligra-devel at kde.org
> https://mail.kde.org/mailman/listinfo/calligra-devel
More information about the calligra-devel
mailing list