From 25d69434ec150d03fcc7989653f00e92123a4e7c Mon Sep 17 00:00:00 2001 From: John Preston Date: Thu, 23 Jul 2020 12:30:20 +0400 Subject: [PATCH] Support auto-night mode on macOS. --- .../platform/mac/main_window_mac.mm | 3 ++- .../SourceFiles/platform/mac/specific_mac.h | 4 +--- .../SourceFiles/platform/mac/specific_mac.mm | 20 +++++++++++++++++++ .../SourceFiles/platform/mac/specific_mac_p.h | 2 -- .../platform/mac/specific_mac_p.mm | 13 ------------ 5 files changed, 23 insertions(+), 19 deletions(-) diff --git a/Telegram/SourceFiles/platform/mac/main_window_mac.mm b/Telegram/SourceFiles/platform/mac/main_window_mac.mm index bdaa2069e9..e008f9ba1c 100644 --- a/Telegram/SourceFiles/platform/mac/main_window_mac.mm +++ b/Telegram/SourceFiles/platform/mac/main_window_mac.mm @@ -199,6 +199,7 @@ private: - (void) darkModeChanged:(NSNotification *)aNotification { Core::Sandbox::Instance().customEnterFromEventLoop([&] { + Core::App().settings().setSystemDarkMode(Platform::IsDarkMode()); Core::App().domain().notifyUnreadBadgeChanged(); }); } @@ -650,7 +651,7 @@ void MainWindow::updateIconCounters() { _private->setWindowBadge(string); if (trayIcon) { - bool dm = objc_darkMode(); + bool dm = Platform::IsDarkMenuBar(); auto &bg = (muted ? st::trayCounterBgMute : st::trayCounterBg); QIcon icon; QImage img(psTrayIcon(dm)), imgsel(psTrayIcon(true)); diff --git a/Telegram/SourceFiles/platform/mac/specific_mac.h b/Telegram/SourceFiles/platform/mac/specific_mac.h index 3359066f8a..3260b183e3 100644 --- a/Telegram/SourceFiles/platform/mac/specific_mac.h +++ b/Telegram/SourceFiles/platform/mac/specific_mac.h @@ -18,9 +18,7 @@ namespace Platform { void RemoveQuarantine(const QString &path); -inline std::optional IsDarkMode() { - return std::nullopt; -} +[[nodiscard]] bool IsDarkMenuBar(); inline void FallbackFontConfigCheckBegin() { } diff --git a/Telegram/SourceFiles/platform/mac/specific_mac.mm b/Telegram/SourceFiles/platform/mac/specific_mac.mm index 223ce5dbce..30255ea910 100644 --- a/Telegram/SourceFiles/platform/mac/specific_mac.mm +++ b/Telegram/SourceFiles/platform/mac/specific_mac.mm @@ -18,6 +18,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "mainwindow.h" #include "history/history_location_manager.h" #include "base/platform/mac/base_utilities_mac.h" +#include "base/platform/base_platform_info.h" #include #include @@ -137,6 +138,25 @@ void RemoveQuarantine(const QString &path) { removexattr(local.data(), kQuarantineAttribute, 0); } +bool IsDarkMenuBar() { + bool result = false; + @autoreleasepool { + + NSDictionary *dict = [[NSUserDefaults standardUserDefaults] persistentDomainForName:NSGlobalDomain]; + id style = [dict objectForKey:Q2NSString(strStyleOfInterface())]; + BOOL darkModeOn = (style && [style isKindOfClass:[NSString class]] && NSOrderedSame == [style caseInsensitiveCompare:@"dark"]); + result = darkModeOn ? true : false; + + } + return result; +} + +std::optional IsDarkMode() { + return IsMac10_14OrGreater() + ? std::make_optional(IsDarkMenuBar()) + : std::nullopt; +} + void RegisterCustomScheme(bool force) { #ifndef TDESKTOP_DISABLE_REGISTER_CUSTOM_SCHEME OSStatus result = LSSetDefaultHandlerForURLScheme(CFSTR("tg"), (CFStringRef)[[NSBundle mainBundle] bundleIdentifier]); diff --git a/Telegram/SourceFiles/platform/mac/specific_mac_p.h b/Telegram/SourceFiles/platform/mac/specific_mac_p.h index d02b5b33f4..866e666f31 100644 --- a/Telegram/SourceFiles/platform/mac/specific_mac_p.h +++ b/Telegram/SourceFiles/platform/mac/specific_mac_p.h @@ -10,8 +10,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL // e is NSEvent* bool objc_handleMediaKeyEvent(void *e); -bool objc_darkMode(); - void objc_debugShowAlert(const QString &str); void objc_outputDebugString(const QString &str); diff --git a/Telegram/SourceFiles/platform/mac/specific_mac_p.mm b/Telegram/SourceFiles/platform/mac/specific_mac_p.mm index 27f27a088e..6d494395f4 100644 --- a/Telegram/SourceFiles/platform/mac/specific_mac_p.mm +++ b/Telegram/SourceFiles/platform/mac/specific_mac_p.mm @@ -218,19 +218,6 @@ void SetApplicationIcon(const QIcon &icon) { } // namespace Platform -bool objc_darkMode() { - bool result = false; - @autoreleasepool { - - NSDictionary *dict = [[NSUserDefaults standardUserDefaults] persistentDomainForName:NSGlobalDomain]; - id style = [dict objectForKey:Q2NSString(strStyleOfInterface())]; - BOOL darkModeOn = (style && [style isKindOfClass:[NSString class]] && NSOrderedSame == [style caseInsensitiveCompare:@"dark"]); - result = darkModeOn ? true : false; - - } - return result; -} - bool objc_handleMediaKeyEvent(void *ev) { auto e = reinterpret_cast(ev);