From c9ebb167a3a938dbf2285a09b483f79022ef636e Mon Sep 17 00:00:00 2001 From: reuk Date: Wed, 4 Jan 2023 18:56:45 +0000 Subject: [PATCH] ScopedNotificationCenterObserver: Fix dark mode detection regression on macOS --- .../juce_core/native/juce_mac_ObjCHelpers.h | 27 +++++++++++-------- .../native/juce_mac_Windowing.mm | 6 ++++- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/modules/juce_core/native/juce_mac_ObjCHelpers.h b/modules/juce_core/native/juce_mac_ObjCHelpers.h index de20b86a18..7f17c07b95 100644 --- a/modules/juce_core/native/juce_mac_ObjCHelpers.h +++ b/modules/juce_core/native/juce_mac_ObjCHelpers.h @@ -535,22 +535,26 @@ class ScopedNotificationCenterObserver public: ScopedNotificationCenterObserver() = default; - ScopedNotificationCenterObserver (id observerIn, SEL selector, NSNotificationName nameIn, id objectIn) - : observer (observerIn), name (nameIn), object (objectIn) + ScopedNotificationCenterObserver (id observerIn, + SEL selector, + NSNotificationName nameIn, + id objectIn, + Class klassIn = [NSNotificationCenter class]) + : observer (observerIn), name (nameIn), object (objectIn), klass (klassIn) { - [[NSNotificationCenter defaultCenter] addObserver: observer - selector: selector - name: name - object: object]; + [[klass defaultCenter] addObserver: observer + selector: selector + name: name + object: object]; } ~ScopedNotificationCenterObserver() { if (observer != nullptr && name != nullptr) { - [[NSNotificationCenter defaultCenter] removeObserver: observer - name: name - object: object]; + [[klass defaultCenter] removeObserver: observer + name: name + object: object]; } } @@ -561,8 +565,7 @@ public: ScopedNotificationCenterObserver& operator= (ScopedNotificationCenterObserver&& other) noexcept { - auto moved = std::move (other); - swap (moved); + ScopedNotificationCenterObserver (std::move (other)).swap (*this); return *this; } @@ -575,11 +578,13 @@ private: std::swap (other.observer, observer); std::swap (other.name, name); std::swap (other.object, object); + std::swap (other.klass, klass); } id observer = nullptr; NSNotificationName name = nullptr; id object = nullptr; + Class klass = nullptr; }; } // namespace juce diff --git a/modules/juce_gui_basics/native/juce_mac_Windowing.mm b/modules/juce_gui_basics/native/juce_mac_Windowing.mm index d071dc6895..aaa892da6c 100644 --- a/modules/juce_gui_basics/native/juce_mac_Windowing.mm +++ b/modules/juce_gui_basics/native/juce_mac_Windowing.mm @@ -513,7 +513,11 @@ public: { static DelegateClass delegateClass; delegate.reset ([delegateClass.createInstance() init]); - observer.emplace (delegate.get(), darkModeSelector, @"AppleInterfaceThemeChangedNotification", nil); + observer.emplace (delegate.get(), + darkModeSelector, + @"AppleInterfaceThemeChangedNotification", + nil, + [NSDistributedNotificationCenter class]); } private: