macOS theme switching (#276)

* abaddon.cpp: add support for macOS theme changing

Based on AppleInterfaceThemeChangedNotification for now.

* CMakeLists: last changes for macOS specific libs

---------

Co-authored-by: ouwou <26526779+ouwou@users.noreply.github.com>
This commit is contained in:
Richard Gráčik
2024-03-02 10:02:35 +01:00
committed by GitHub
parent 30b901b4df
commit 1fbc6945d2
2 changed files with 35 additions and 13 deletions

View File

@@ -25,6 +25,23 @@
#include "remoteauth/remoteauthdialog.hpp"
#include "util.hpp"
#if defined(__APPLE__)
#include <CoreFoundation/CoreFoundation.h>
void macOSThemeChanged() {
CFPropertyListRef appearanceName = CFPreferencesCopyAppValue(CFSTR("AppleInterfaceStyle"), kCFPreferencesAnyApplication);
if (appearanceName != NULL && CFGetTypeID(appearanceName) == CFStringGetTypeID() && CFStringCompare((CFStringRef)appearanceName, CFSTR("Dark"), 0) == kCFCompareEqualTo) {
Gtk::Settings::get_default()->set_property("gtk-application-prefer-dark-theme", true);
} else {
Gtk::Settings::get_default()->set_property("gtk-application-prefer-dark-theme", false);
}
}
void macOSThemeChangedCallback(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo) {
macOSThemeChanged();
}
#endif
#ifdef WITH_LIBHANDY
#include <handy.h>
#endif
@@ -331,6 +348,17 @@ int Abaddon::StartGTK() {
m_gtk_app->hold();
m_main_window->show();
#if defined(__APPLE__)
CFNotificationCenterAddObserver(CFNotificationCenterGetDistributedCenter(),
NULL,
macOSThemeChangedCallback,
CFSTR("AppleInterfaceThemeChangedNotification"),
NULL,
CFNotificationSuspensionBehaviorCoalesce);
macOSThemeChanged();
#endif
RunFirstTimeDiscordStartup();
return m_gtk_app->run(*m_main_window);