From f9f5caa5cc5495c39454b310241b0710fcfdd57b Mon Sep 17 00:00:00 2001 From: juce-team Date: Mon, 6 Jul 2020 11:05:26 -0700 Subject: [PATCH] macOS 11: Fix function pointer conversions --- modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm | 2 +- .../juce_audio_utils/native/juce_mac_AudioCDBurner.mm | 4 ++-- .../juce_mac_BluetoothMidiDevicePairingDialogue.mm | 4 ++-- modules/juce_core/native/juce_osx_ObjCHelpers.h | 10 ++++------ .../native/juce_mac_NSViewComponentPeer.mm | 8 ++++---- modules/juce_gui_basics/native/juce_mac_Windowing.mm | 2 +- .../native/juce_mac_WebBrowserComponent.mm | 2 +- modules/juce_video/native/juce_ios_CameraDevice.h | 2 +- modules/juce_video/native/juce_mac_Video.h | 2 +- 9 files changed, 17 insertions(+), 19 deletions(-) diff --git a/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm b/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm index 846bc58bd0..f2277e51bb 100644 --- a/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm +++ b/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm @@ -1642,7 +1642,7 @@ public: if (activeUIs.contains (self)) shutdown (self); - sendSuperclassMessage (self, @selector (dealloc)); + sendSuperclassMessage (self, @selector (dealloc)); } static void applicationWillTerminate (id self, SEL, NSNotification*) diff --git a/modules/juce_audio_utils/native/juce_mac_AudioCDBurner.mm b/modules/juce_audio_utils/native/juce_mac_AudioCDBurner.mm index d197e628a4..1d900bf207 100644 --- a/modules/juce_audio_utils/native/juce_mac_AudioCDBurner.mm +++ b/modules/juce_audio_utils/native/juce_mac_AudioCDBurner.mm @@ -73,7 +73,7 @@ struct AudioTrackProducerClass : public ObjCClass private: static id initWithAudioSourceHolder (id self, SEL, AudioSourceHolder* source) { - self = sendSuperclassMessage (self, @selector (init)); + self = sendSuperclassMessage (self, @selector (init)); object_setInstanceVariable (self, "source", source); return self; } @@ -86,7 +86,7 @@ private: static void dealloc (id self, SEL) { delete getSource (self); - sendSuperclassMessage (self, @selector (dealloc)); + sendSuperclassMessage (self, @selector (dealloc)); } static void cleanupTrackAfterBurn (id, SEL, DRTrack*) {} diff --git a/modules/juce_audio_utils/native/juce_mac_BluetoothMidiDevicePairingDialogue.mm b/modules/juce_audio_utils/native/juce_mac_BluetoothMidiDevicePairingDialogue.mm index 516fa877c0..11679a4f78 100644 --- a/modules/juce_audio_utils/native/juce_mac_BluetoothMidiDevicePairingDialogue.mm +++ b/modules/juce_audio_utils/native/juce_mac_BluetoothMidiDevicePairingDialogue.mm @@ -62,7 +62,7 @@ private: static id initWithCallbacks (id self, SEL, Callbacks* cbs) { - self = sendSuperclassMessage (self, @selector (init)); + self = sendSuperclassMessage (self, @selector (init)); object_setInstanceVariable (self, "callbacks", cbs); object_setInstanceVariable (self, "controller", [CABTLEMIDIWindowController new]); @@ -81,7 +81,7 @@ private: { [getController (self) release]; - sendSuperclassMessage (self, @selector (dealloc)); + sendSuperclassMessage (self, @selector (dealloc)); } static void show (id self, SEL, Rectangle* bounds) diff --git a/modules/juce_core/native/juce_osx_ObjCHelpers.h b/modules/juce_core/native/juce_osx_ObjCHelpers.h index d7169c010f..beffbe1236 100644 --- a/modules/juce_core/native/juce_osx_ObjCHelpers.h +++ b/modules/juce_core/native/juce_osx_ObjCHelpers.h @@ -194,7 +194,7 @@ NSRect makeNSRect (const RectangleType& r) noexcept #endif #if JUCE_MAC || JUCE_IOS -// This is necessary as on iOS builds, some arguments may be passed on registers +// This is necessary as on iOS/ARM builds, some arguments may be passed on registers // depending on the argument type. The re-cast objc_msgSendSuper to a function // take the same arguments as the target method. template @@ -205,9 +205,6 @@ ReturnValue ObjCMsgSendSuper (struct objc_super* s, SEL sel, Params... params) return fn (s, sel, params...); } -// These hacks are a workaround for newer Xcode builds which by default prevent calls to these objc functions.. -typedef id (*MsgSendSuperFn) (struct objc_super*, SEL, ...); -inline MsgSendSuperFn getMsgSendSuperFn() noexcept { return (MsgSendSuperFn) (void*) objc_msgSendSuper; } #endif //============================================================================== @@ -282,10 +279,11 @@ struct ObjCClass } #if JUCE_MAC || JUCE_IOS - static id sendSuperclassMessage (id self, SEL selector) + template + static Result sendSuperclassMessage (id self, SEL selector) { objc_super s = { self, [SuperclassType class] }; - return getMsgSendSuperFn() (&s, selector); + return ObjCMsgSendSuper (&s, selector); } #endif diff --git a/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm b/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm index cc6c72bc20..3ffdd09f97 100644 --- a/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm +++ b/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm @@ -1773,7 +1773,7 @@ private: if (! (owner->textWasInserted || owner->redirectKeyDown (ev))) { objc_super s = { self, [NSView class] }; - getMsgSendSuperFn() (&s, @selector (keyDown:), ev); + ObjCMsgSendSuper (&s, @selector (keyDown:), ev); } } } @@ -1785,7 +1785,7 @@ private: if (owner == nullptr || ! owner->redirectKeyUp (ev)) { objc_super s = { self, [NSView class] }; - getMsgSendSuperFn() (&s, @selector (keyUp:), ev); + ObjCMsgSendSuper (&s, @selector (keyDown:), ev); } } @@ -2036,7 +2036,7 @@ private: static void becomeKeyWindow (id self, SEL) { - sendSuperclassMessage (self, @selector (becomeKeyWindow)); + sendSuperclassMessage (self, @selector (becomeKeyWindow)); if (auto* owner = getOwner (self)) { @@ -2107,7 +2107,7 @@ private: { owner->isZooming = true; objc_super s = { self, [NSWindow class] }; - getMsgSendSuperFn() (&s, @selector (zoom:), sender); + ObjCMsgSendSuper (&s, @selector (zoom:), sender); owner->isZooming = false; owner->redirectMovedOrResized(); diff --git a/modules/juce_gui_basics/native/juce_mac_Windowing.mm b/modules/juce_gui_basics/native/juce_mac_Windowing.mm index 5ffbe393c5..a314ba95a4 100644 --- a/modules/juce_gui_basics/native/juce_mac_Windowing.mm +++ b/modules/juce_gui_basics/native/juce_mac_Windowing.mm @@ -217,7 +217,7 @@ private: delete getIvar*> (self, "callback"); delete getIvar (self, "operation"); - sendSuperclassMessage (self, @selector (dealloc)); + sendSuperclassMessage (self, @selector (dealloc)); } static void provideDataForType (id self, SEL, NSPasteboard* sender, NSPasteboardItem*, NSString* type) diff --git a/modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm b/modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm index 219370dba6..2640fc72cb 100644 --- a/modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm +++ b/modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm @@ -294,7 +294,7 @@ private: } objc_super s = { self, [WebView class] }; - return ObjCMsgSendSuper (&s, selector, event); + return ObjCMsgSendSuper (&s, selector, event); } }; diff --git a/modules/juce_video/native/juce_ios_CameraDevice.h b/modules/juce_video/native/juce_ios_CameraDevice.h index 17ffce0c46..dfb5e55613 100644 --- a/modules/juce_video/native/juce_ios_CameraDevice.h +++ b/modules/juce_video/native/juce_ios_CameraDevice.h @@ -1271,7 +1271,7 @@ struct CameraDevice::ViewerComponent : public UIViewComponent private: static void layoutSubviews (id self, SEL) { - sendSuperclassMessage (self, @selector (layoutSubviews)); + sendSuperclassMessage (self, @selector (layoutSubviews)); UIView* asUIView = (UIView*) self; diff --git a/modules/juce_video/native/juce_mac_Video.h b/modules/juce_video/native/juce_mac_Video.h index c9505ad2e0..48b26c0cc3 100644 --- a/modules/juce_video/native/juce_mac_Video.h +++ b/modules/juce_video/native/juce_mac_Video.h @@ -744,7 +744,7 @@ private: private: static void layoutSubviews (id self, SEL) { - sendSuperclassMessage (self, @selector (layoutSubviews)); + sendSuperclassMessage (self, @selector (layoutSubviews)); UIView* asUIView = (UIView*) self;