Warning, /frameworks/kguiaddons/src/colors/kcolorschemewatcher_mac.mm is written in an unsupported language. File is not indexed.
0001 /*
0002 * SPDX-FileCopyrightText: 2022 Georg Gadinger <nilsding@nilsding.org>
0003 *
0004 * SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006
0007 #include "kcolorschemewatcher_mac.h"
0008
0009 #import <AppKit/AppKit.h>
0010
0011 #include <QTimer>
0012
0013 KColorSchemeWatcherMac::KColorSchemeWatcherMac()
0014 {
0015 // subscribe to the distributed notification centre
0016 id notificationCenter = NSDistributedNotificationCenter.defaultCenter;
0017 m_observer = [notificationCenter addObserverForName:@"AppleInterfaceThemeChangedNotification"
0018 object:nil
0019 queue:nil
0020 usingBlock:^(NSNotification *) {
0021 // "fun" workaround to not emit the signal immediately after receiving the notification.
0022 // for some reason NSAppearance.currentDrawingAppearance is still set to the old value here, after a short
0023 // delay it is updated correctly
0024 QTimer::singleShot(0, [this]() {
0025 Q_EMIT systemPreferenceChanged();
0026 });
0027 }];
0028 }
0029
0030 KColorSchemeWatcherMac::~KColorSchemeWatcherMac()
0031 {
0032 [NSDistributedNotificationCenter.defaultCenter removeObserver:static_cast<id>(m_observer)];
0033 }
0034
0035 KColorSchemeWatcher::ColorPreference KColorSchemeWatcherMac::systemPreference() const
0036 {
0037 NSAppearance *appearance = nullptr;
0038
0039 if (@available(macOS 11.0, *)) {
0040 appearance = NSAppearance.currentDrawingAppearance;
0041 } else if (@available(macOS 10.14, *)) {
0042 appearance = NSAppearance.currentAppearance;
0043 } else {
0044 // macOS < 10.14 (Mojave) does not support a light/dark mode switch, always prefer light mode
0045 return KColorSchemeWatcher::PreferLight;
0046 }
0047
0048 return appearance.name == NSAppearanceNameDarkAqua ? KColorSchemeWatcher::PreferDark : KColorSchemeWatcher::PreferLight;
0049 }
0050
0051 #include "moc_kcolorschemewatcher_mac.cpp"