From 2dfe0f8f6854f518e8ffb23e17cc99400355cc3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Wed, 29 May 2019 17:00:40 +0200 Subject: macOS: Introduce QMacKeyValueObserver and use in theme and style MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I2d21c883628933543ae5a66b694ff7503119bc4a Reviewed-by: Tor Arne Vestbø --- src/plugins/platforms/cocoa/qcocoatheme.h | 2 +- src/plugins/platforms/cocoa/qcocoatheme.mm | 56 +++++------------------------- 2 files changed, 10 insertions(+), 48 deletions(-) (limited to 'src/plugins/platforms') diff --git a/src/plugins/platforms/cocoa/qcocoatheme.h b/src/plugins/platforms/cocoa/qcocoatheme.h index 63227ed6c1..788b616e78 100644 --- a/src/plugins/platforms/cocoa/qcocoatheme.h +++ b/src/plugins/platforms/cocoa/qcocoatheme.h @@ -87,7 +87,7 @@ private: QMacNotificationObserver m_systemColorObserver; mutable QHash m_palettes; mutable QHash m_fonts; - QT_MANGLE_NAMESPACE(QCocoaThemeAppAppearanceObserver) *m_appearanceObserver; + QMacKeyValueObserver m_appearanceObserver; }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/cocoa/qcocoatheme.mm b/src/plugins/platforms/cocoa/qcocoatheme.mm index ba93560689..7c10456824 100644 --- a/src/plugins/platforms/cocoa/qcocoatheme.mm +++ b/src/plugins/platforms/cocoa/qcocoatheme.mm @@ -80,57 +80,22 @@ #include -#if QT_MACOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_10_14) -@interface QT_MANGLE_NAMESPACE(QCocoaThemeAppAppearanceObserver) : NSObject -@property (readonly, nonatomic) QCocoaTheme *theme; -- (instancetype)initWithTheme:(QCocoaTheme *)theme; -@end - -QT_NAMESPACE_ALIAS_OBJC_CLASS(QCocoaThemeAppAppearanceObserver); - -@implementation QCocoaThemeAppAppearanceObserver -- (instancetype)initWithTheme:(QCocoaTheme *)theme -{ - if ((self = [super init])) { - _theme = theme; - [NSApp addObserver:self forKeyPath:@"effectiveAppearance" options:NSKeyValueObservingOptionNew context:nullptr]; - } - return self; -} - -- (void)dealloc -{ - [NSApp removeObserver:self forKeyPath:@"effectiveAppearance"]; - [super dealloc]; -} - -- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object - change:(NSDictionary *)change context:(void *)context -{ - Q_UNUSED(change); - Q_UNUSED(context); - - Q_ASSERT(object == NSApp); - Q_ASSERT([keyPath isEqualToString:@"effectiveAppearance"]); - - if (__builtin_available(macOS 10.14, *)) - NSAppearance.currentAppearance = NSApp.effectiveAppearance; - - self.theme->handleSystemThemeChange(); -} -@end -#endif // QT_MACOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_10_14) - QT_BEGIN_NAMESPACE const char *QCocoaTheme::name = "cocoa"; QCocoaTheme::QCocoaTheme() - : m_systemPalette(nullptr), m_appearanceObserver(nil) + : m_systemPalette(nullptr) { #if QT_MACOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_10_14) - if (QOperatingSystemVersion::current() >= QOperatingSystemVersion::MacOSMojave) - m_appearanceObserver = [[QCocoaThemeAppAppearanceObserver alloc] initWithTheme:this]; + if (QOperatingSystemVersion::current() >= QOperatingSystemVersion::MacOSMojave) { + m_appearanceObserver = QMacKeyValueObserver(NSApp, @"effectiveAppearance", [this] { + if (__builtin_available(macOS 10.14, *)) + NSAppearance.currentAppearance = NSApp.effectiveAppearance; + + handleSystemThemeChange(); + }); + } #endif m_systemColorObserver = QMacNotificationObserver(nil, @@ -141,9 +106,6 @@ QCocoaTheme::QCocoaTheme() QCocoaTheme::~QCocoaTheme() { - if (m_appearanceObserver) - [m_appearanceObserver release]; - reset(); qDeleteAll(m_fonts); } -- cgit v1.2.3