From 762cf327beee6226fce3761dbc99e4f16ce04618 Mon Sep 17 00:00:00 2001 From: ed Date: Thu, 25 Mar 2021 10:02:48 +0000 Subject: [PATCH] macOS: Removed static display change callback --- .../native/juce_mac_Windowing.mm | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/modules/juce_gui_basics/native/juce_mac_Windowing.mm b/modules/juce_gui_basics/native/juce_mac_Windowing.mm index 918f0b4a68a6..269c7daa38b9 100644 --- a/modules/juce_gui_basics/native/juce_mac_Windowing.mm +++ b/modules/juce_gui_basics/native/juce_mac_Windowing.mm @@ -441,30 +441,30 @@ void timerCallback() override { DisplaySettingsChangeCallback() { - CGDisplayRegisterReconfigurationCallback (displayReconfigurationCallback, nullptr); + CGDisplayRegisterReconfigurationCallback (displayReconfigurationCallback, this); } ~DisplaySettingsChangeCallback() { - CGDisplayRemoveReconfigurationCallback (displayReconfigurationCallback, nullptr); + CGDisplayRemoveReconfigurationCallback (displayReconfigurationCallback, this); clearSingletonInstance(); } - static void displayReconfigurationCallback (CGDirectDisplayID, CGDisplayChangeSummaryFlags, void*) + static void displayReconfigurationCallback (CGDirectDisplayID, CGDisplayChangeSummaryFlags, void* userInfo) { - if (forceDisplayUpdate != nullptr) - forceDisplayUpdate(); + if (auto* thisPtr = static_cast (userInfo)) + if (thisPtr->forceDisplayUpdate != nullptr) + thisPtr->forceDisplayUpdate(); } - static std::function forceDisplayUpdate; + std::function forceDisplayUpdate; - JUCE_DECLARE_SINGLETON_SINGLETHREADED_MINIMAL (DisplaySettingsChangeCallback) + JUCE_DECLARE_SINGLETON (DisplaySettingsChangeCallback, false) JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (DisplaySettingsChangeCallback) }; JUCE_IMPLEMENT_SINGLETON (DisplaySettingsChangeCallback) -std::function DisplaySettingsChangeCallback::forceDisplayUpdate = nullptr; static Rectangle convertDisplayRect (NSRect r, CGFloat mainScreenBottom) { @@ -498,10 +498,8 @@ static void displayReconfigurationCallback (CGDirectDisplayID, CGDisplayChangeSu { JUCE_AUTORELEASEPOOL { - auto& settingsChangeCallback = *DisplaySettingsChangeCallback::getInstance(); - - if (settingsChangeCallback.forceDisplayUpdate == nullptr) - settingsChangeCallback.forceDisplayUpdate = [this] { refresh(); }; + if (DisplaySettingsChangeCallback::getInstanceWithoutCreating() == nullptr) + DisplaySettingsChangeCallback::getInstance()->forceDisplayUpdate = [this] { refresh(); }; CGFloat mainScreenBottom = 0;