From e1dcd9689226c6dc1b817ad21fa7d8fc586cbcea Mon Sep 17 00:00:00 2001 From: jules Date: Tue, 3 Mar 2015 09:47:03 +0000 Subject: [PATCH] Workarounds to allow building with Xcode option "strict checking of objc_msgSend calls" enabled. --- modules/juce_core/native/juce_osx_ObjCHelpers.h | 9 ++++++++- .../native/juce_mac_NSViewComponentPeer.mm | 12 ++++++------ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/modules/juce_core/native/juce_osx_ObjCHelpers.h b/modules/juce_core/native/juce_osx_ObjCHelpers.h index 10878d0427..d338afd205 100644 --- a/modules/juce_core/native/juce_osx_ObjCHelpers.h +++ b/modules/juce_core/native/juce_osx_ObjCHelpers.h @@ -66,6 +66,13 @@ namespace static_cast (r.getHeight())); } #endif + + // 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, ...); + static inline MsgSendSuperFn getMsgSendSuperFn() noexcept { return (MsgSendSuperFn) (void*) objc_msgSendSuper; } + + typedef double (*MsgSendFPRetFn) (id, SEL op, ...); + static inline MsgSendFPRetFn getMsgSendFPRetFn() noexcept { return (MsgSendFPRetFn) (void*) objc_msgSend_fpret; } } //============================================================================== @@ -143,7 +150,7 @@ struct ObjCClass static id sendSuperclassMessage (id self, SEL selector) { objc_super s = { self, [SuperclassType class] }; - return objc_msgSendSuper (&s, selector); + return getMsgSendSuperFn() (&s, selector); } template diff --git a/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm b/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm index 789fc88005..8bd4d58501 100644 --- a/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm +++ b/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm @@ -642,8 +642,8 @@ public: #endif if ([ev respondsToSelector: @selector (deviceDeltaX)]) { - wheel.deltaX = checkDeviceDeltaReturnValue ((float) objc_msgSend_fpret (ev, @selector (deviceDeltaX))); - wheel.deltaY = checkDeviceDeltaReturnValue ((float) objc_msgSend_fpret (ev, @selector (deviceDeltaY))); + wheel.deltaX = checkDeviceDeltaReturnValue ((float) getMsgSendFPRetFn() (ev, @selector (deviceDeltaX))); + wheel.deltaY = checkDeviceDeltaReturnValue ((float) getMsgSendFPRetFn() (ev, @selector (deviceDeltaY))); } } @catch (...) @@ -1491,7 +1491,7 @@ private: if ((! owner->textWasInserted) && (owner == nullptr || ! owner->redirectKeyDown (ev))) { objc_super s = { self, [NSView class] }; - objc_msgSendSuper (&s, @selector (keyDown:), ev); + getMsgSendSuperFn() (&s, @selector (keyDown:), ev); } } } @@ -1503,7 +1503,7 @@ private: if (owner == nullptr || ! owner->redirectKeyUp (ev)) { objc_super s = { self, [NSView class] }; - objc_msgSendSuper (&s, @selector (keyUp:), ev); + getMsgSendSuperFn() (&s, @selector (keyUp:), ev); } } @@ -1644,7 +1644,7 @@ private: return true; objc_super s = { self, [NSView class] }; - return objc_msgSendSuper (&s, @selector (performKeyEquivalent:), ev) != nil; + return getMsgSendSuperFn() (&s, @selector (performKeyEquivalent:), ev) != nil; } #endif @@ -1805,7 +1805,7 @@ private: { owner->isZooming = true; objc_super s = { self, [NSWindow class] }; - objc_msgSendSuper (&s, @selector (zoom:), sender); + getMsgSendSuperFn() (&s, @selector (zoom:), sender); owner->isZooming = false; owner->redirectMovedOrResized();