aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDoris Verria <doris.verria@qt.io>2026-09-17 22:00:09 +0200
committerDoris Verria <doris.verria@qt.io>2026-09-29 09:22:34 +0000
commit40ad27761b4618cb9e9a70f8675f3392e94372c0 (patch)
tree493cda88c9edc65b7f31bdebd220706400aa2434
parent3c517dd02a1e669d450b363384121a7d262f41a2 (diff)
QStyleKitStyle: Clear injected widget fonts when switching themes/styles
A font property defined in a theme or style persisted to some widgets even after switching to a different theme/style. This was because unsetStyleFont() reverted against QWidget::font() whose resolve mask also covers inherited attributes. Since when switching style/theme we walk QWidgetPrivate::allWidgets in no specified order, a widget can be reverted while its ancestor carries the old font, so those bits get written backs as a locally set font so next time setStyleFont() is called, it captures them as baseline font. To fix, use QWidgetPrivate::localFont instead which has the direct font resolve mask. While at it, remove the check in setStyleFont() which guarded setFont() on QFont::operator==, which ignores the resolve mask, making the widget's mask depend on whether the values happened to coincide. setFont() already no-ops when the the font is unchanged. Pick-to: 6.12 Change-Id: I2c249dc4a02e3b957b5b490a7da600432787c2a2 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
-rw-r--r--src/labs/stylekit/widgets/qstylekitstyle.cpp5
1 files changed, 2 insertions, 3 deletions
diff --git a/src/labs/stylekit/widgets/qstylekitstyle.cpp b/src/labs/stylekit/widgets/qstylekitstyle.cpp
index 316d7039e8..5c53f36c75 100644
--- a/src/labs/stylekit/widgets/qstylekitstyle.cpp
+++ b/src/labs/stylekit/widgets/qstylekitstyle.cpp
@@ -729,7 +729,7 @@ void QStyleKitStylePrivate::unsetStyleFont(QWidget *widget)
auto customFont = std::move(*it);
customFontWidgets.erase(it);
- widget->setFont(std::move(customFont).reverted(widget->font()));
+ widget->setFont(std::move(customFont).reverted(QWidgetPrivate::get(widget)->localFont()));
}
void QStyleKitStylePrivate::setStyleFont(QWidget *widget, const QFont &styleFont)
@@ -753,8 +753,7 @@ void QStyleKitStylePrivate::setStyleFont(QWidget *widget, const QFont &styleFont
const QFont &baseline = it->oldWidgetValue;
QFont merged = styleFont.resolve(baseline);
merged.setResolveMask(baseline.resolveMask() | styleMask);
- if (widget->font() != merged)
- widget->setFont(merged);
+ widget->setFont(merged);
}
void QStyleKitStylePrivate::refreshStyleFont(QWidget *widget)