From d28c1a721631e456863a24a797b6e06f0ccc7b8e Mon Sep 17 00:00:00 2001 From: kleuter Date: Tue, 23 Nov 2021 15:36:02 +0100 Subject: [PATCH] 5.15.7 - fixed QTBUG-98483 --- .../qtbase/src/plugins/styles/mac/qmacstyle_mac.mm | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/5.15.7/qtbase/src/plugins/styles/mac/qmacstyle_mac.mm b/5.15.7/qtbase/src/plugins/styles/mac/qmacstyle_mac.mm index 58eb773..4b0514b 100644 --- a/5.15.7/qtbase/src/plugins/styles/mac/qmacstyle_mac.mm +++ b/5.15.7/qtbase/src/plugins/styles/mac/qmacstyle_mac.mm @@ -3726,7 +3726,18 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter pb.enabled = isEnabled; [pb highlight:isPressed]; - pb.state = isHighlighted && !isPressed ? NSOnState : NSOffState; + + // In the past 'highlight' was doing its job nicely, giving an image of recessed + // (e.g.) blue button which looks differently from un-pressed 'default' button. + // Starting from Monterey this is not enough - with simple highlight and the state + // 'off' we get a button that looks like have it suddenly lost its theme embellishment + // and depending on the app's appearance, we may also erroneously draw a text with + // (e.g.) white on light grey. + if (QOperatingSystemVersion::current() >= QOperatingSystemVersion::MacOSMonterey) + pb.state = isHighlighted || isPressed ? NSControlStateValueOn : NSControlStateValueOff; + else + pb.state = isHighlighted && !isPressed ? NSControlStateValueOn : NSControlStateValueOff; + d->drawNSViewInRect(pb, frameRect, p, ^(CGContextRef, const CGRect &r) { [pb.cell drawBezelWithFrame:r inView:pb.superview]; });