Commit 2e971be5 authored by René J.V. Bertin's avatar René J.V. Bertin Committed by Fabian Vogt

KDE platform plugin: don't force default stylename on user-specified fonts

Summary:
CCBUG: 378523

Applying the default, hardwired QFont::styleName to one of the standard fonts which then gets changed to a user-selected font can break expectations because of the way Qt handles such canonical stylenames, letting them override the effects of other QFont methods invoked subsequently. It can for instance become impossible to make the font bold afterwards: see https://bugs.kde.org/show_bug.cgi?id=378523, https://bugreports.qt.io/browse/QTBUG-63792 or https://bugs.kde.org/show_bug.cgi?id=387467 .

This may be a Qt "feature" that's here to stay, sadly.

The change proposed here makes it possible (again) for users to prevent font weight rendering regressions by removing the stylename extension from configuration files manually as documented in several locations. This approach is useless when the KDE platform theme plugin then applies the default stylename, an issue that can be avoided by calling QFont::setStyleName() only when no user-specified font is available.

Evidently the manual intervention could be replaced with a change in the way font settings are stored; this would also require the current change.

Test Plan:
Works as intended on Linux. An equivalent modification in my osx-integration fork of the platform theme plugin for Mac has the same effect (without it "Segoe UI Semi-bold" is no longer made bold where it should in dialogs).

I don't think there are possible side-effects:
- a stylename still gets set either if there is no user-selected font or if that selection includes a stylename extension
- font specifications should still contain all the required information they always had; not applying a guessed stylename only means that no conflict can arise with the combined set of numeric style and weight attributes.

Reviewers: #frameworks, davidedmundson, graesslin, cfeck, dfaure

Reviewed By: dfaure

Subscribers: bkchr, ahmadsamir, rdieter, abetts, anthonyfieroni, ngraham, cfeck, fvogt, plasma-devel

Tags: #plasma

Differential Revision: https://phabricator.kde.org/D9070
parent 33db7508
......@@ -70,7 +70,6 @@ QFont *KFontSettingsData::font(FontTypes fontType)
const KFontData &fontData = DefaultFontData[fontType];
cachedFont = new QFont(QLatin1String(fontData.FontName), fontData.Size, fontData.Weight);
cachedFont->setStyleHint(fontData.StyleHint);
cachedFont->setStyleName(QLatin1String(fontData.StyleName));
const KConfigGroup configGroup(mKdeGlobals, fontData.ConfigGroupKey);
QString fontInfo = configGroup.readEntry(fontData.ConfigKey, QString());
......@@ -79,6 +78,10 @@ QFont *KFontSettingsData::font(FontTypes fontType)
//NOTE: We are not using KConfig directly because we can't call QFont::QFont from here
if (!fontInfo.isEmpty()) {
cachedFont->fromString(fontInfo);
} else {
// set the canonical stylename here, where it cannot override
// user-specific font attributes if those do not include a stylename.
cachedFont->setStyleName(QLatin1String(fontData.StyleName));
}
mFonts[fontType] = cachedFont;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment