Skip to content

Commit

Permalink
macOS theme switching (#276)
Browse files Browse the repository at this point in the history
* abaddon.cpp: add support for macOS theme changing

Based on AppleInterfaceThemeChangedNotification for now.

* CMakeLists: last changes for macOS specific libs

---------

Co-authored-by: ouwou <[email protected]>
  • Loading branch information
TheMorc and ouwou authored Mar 2, 2024
1 parent 30b901b commit 1fbc694
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 13 deletions.
20 changes: 7 additions & 13 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ file(GLOB_RECURSE ABADDON_SOURCES
"src/*.h"
"src/*.hpp"
"src/*.cpp"
)
)

list(FILTER ABADDON_SOURCES EXCLUDE REGEX ".*notifier_gio\\.cpp$")
list(FILTER ABADDON_SOURCES EXCLUDE REGEX ".*notifier_fallback\\.cpp$")
Expand Down Expand Up @@ -148,6 +148,12 @@ endif ()

set(USE_MINIAUDIO FALSE)

if (APPLE)
target_link_libraries(abaddon "-framework CoreFoundation")
target_link_libraries(abaddon "-framework CoreAudio")
target_link_libraries(abaddon "-framework AudioToolbox")
endif ()

if (ENABLE_VOICE)
target_compile_definitions(abaddon PRIVATE WITH_VOICE)

Expand Down Expand Up @@ -194,12 +200,6 @@ if (ENABLE_VOICE)
target_link_libraries(abaddon rnnoise::rnnoise)
endif ()
endif ()

if (APPLE)
target_link_libraries(abaddon "-framework CoreFoundation")
target_link_libraries(abaddon "-framework CoreAudio")
target_link_libraries(abaddon "-framework AudioToolbox")
endif ()
endif ()

if (${ENABLE_NOTIFICATION_SOUNDS})
Expand All @@ -214,12 +214,6 @@ if (USE_MINIAUDIO)
PATH_SUFFIXES miniaudio
REQUIRED)

if (APPLE)
target_link_libraries(abaddon "-framework CoreFoundation")
target_link_libraries(abaddon "-framework CoreAudio")
target_link_libraries(abaddon "-framework AudioToolbox")
endif ()

target_include_directories(abaddon PUBLIC ${MINIAUDIO_INCLUDE_DIR})
target_compile_definitions(abaddon PRIVATE WITH_MINIAUDIO)
endif ()
28 changes: 28 additions & 0 deletions src/abaddon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit 1fbc694

Please sign in to comment.