[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