diff --git a/modules/juce_core/system/juce_CompilerSupport.h b/modules/juce_core/system/juce_CompilerSupport.h index 4d96d7cb0e..10636d42cc 100644 --- a/modules/juce_core/system/juce_CompilerSupport.h +++ b/modules/juce_core/system/juce_CompilerSupport.h @@ -70,6 +70,10 @@ #define JUCE_CXX14_IS_AVAILABLE (__cplusplus >= 201402L) #define JUCE_CXX17_IS_AVAILABLE (__cplusplus >= 201703L) + #if defined (__OBJC__) + #define JUCE_OBJC_HAS_AVAILABLE_FEATURE (__clang_major__ >= 9) + #endif + #endif //============================================================================== diff --git a/modules/juce_gui_basics/accessibility/juce_AccessibilityHandler.cpp b/modules/juce_gui_basics/accessibility/juce_AccessibilityHandler.cpp index e753511027..0db68af776 100644 --- a/modules/juce_gui_basics/accessibility/juce_AccessibilityHandler.cpp +++ b/modules/juce_gui_basics/accessibility/juce_AccessibilityHandler.cpp @@ -328,18 +328,4 @@ void AccessibilityHandler::takeFocus() } } -//============================================================================== -#if ! ((JUCE_MAC && (defined (MAC_OS_X_VERSION_10_10) && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_10)) \ - || (JUCE_WINDOWS && ! JUCE_MINGW)) - -class AccessibilityHandler::AccessibilityNativeImpl { public: AccessibilityNativeImpl (AccessibilityHandler&) {} }; -void AccessibilityHandler::notifyAccessibilityEvent (AccessibilityEvent) const {} -void AccessibilityHandler::postAnnouncement (const String&, AnnouncementPriority) {} -AccessibilityNativeHandle* AccessibilityHandler::getNativeImplementation() const { return nullptr; } -AccessibilityHandler::AccessibilityNativeImpl* AccessibilityHandler::createNativeImpl (AccessibilityHandler&) { return nullptr; } -void AccessibilityHandler::DestroyNativeImpl::operator() (AccessibilityHandler::AccessibilityNativeImpl*) const noexcept {} -void notifyAccessibilityEventInternal (const AccessibilityHandler&, InternalAccessibilityEvent) {} - -#endif - } // namespace juce diff --git a/modules/juce_gui_basics/juce_gui_basics.cpp b/modules/juce_gui_basics/juce_gui_basics.cpp index ea68735186..438c2c49db 100644 --- a/modules/juce_gui_basics/juce_gui_basics.cpp +++ b/modules/juce_gui_basics/juce_gui_basics.cpp @@ -323,3 +323,16 @@ bool getComponentAsyncLayerBackedViewDisabled (juce::Component& comp) #endif #endif + +#if ! JUCE_NATIVE_ACCESSIBILITY_INCLUDED +namespace juce +{ + class AccessibilityHandler::AccessibilityNativeImpl { public: AccessibilityNativeImpl (AccessibilityHandler&) {} }; + void AccessibilityHandler::notifyAccessibilityEvent (AccessibilityEvent) const {} + void AccessibilityHandler::postAnnouncement (const String&, AnnouncementPriority) {} + AccessibilityNativeHandle* AccessibilityHandler::getNativeImplementation() const { return nullptr; } + AccessibilityHandler::AccessibilityNativeImpl* AccessibilityHandler::createNativeImpl (AccessibilityHandler&) { return nullptr; } + void AccessibilityHandler::DestroyNativeImpl::operator() (AccessibilityHandler::AccessibilityNativeImpl*) const noexcept {} + void notifyAccessibilityEventInternal (const AccessibilityHandler&, InternalAccessibilityEvent) {} +} +#endif diff --git a/modules/juce_gui_basics/native/accessibility/juce_mac_Accessibility.mm b/modules/juce_gui_basics/native/accessibility/juce_mac_Accessibility.mm index cbc5eb1276..3466e18d45 100644 --- a/modules/juce_gui_basics/native/accessibility/juce_mac_Accessibility.mm +++ b/modules/juce_gui_basics/native/accessibility/juce_mac_Accessibility.mm @@ -31,7 +31,9 @@ namespace juce using NSAccessibilityNotificationName = NSString*; #endif -#if (defined (MAC_OS_X_VERSION_10_10) && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_10) +#if JUCE_OBJC_HAS_AVAILABLE_FEATURE || (defined (MAC_OS_X_VERSION_10_10) && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_10) + +#define JUCE_NATIVE_ACCESSIBILITY_INCLUDED 1 //============================================================================== class AccessibilityHandler::AccessibilityNativeImpl @@ -65,10 +67,17 @@ private: static Holder create (AccessibilityHandler& handler) { - static AccessibilityElement cls; - Holder element ([cls.createInstance() init]); - object_setInstanceVariable (element.get(), "handler", &handler); - return element; + #if JUCE_OBJC_HAS_AVAILABLE_FEATURE + if (@available (macOS 10.10, *)) + #endif + { + static AccessibilityElement cls; + Holder element ([cls.createInstance() init]); + object_setInstanceVariable (element.get(), "handler", &handler); + return element; + } + + return {}; } private: diff --git a/modules/juce_gui_basics/native/accessibility/juce_win32_Accessibility.cpp b/modules/juce_gui_basics/native/accessibility/juce_win32_Accessibility.cpp index e9c3a6fe66..d0939b006b 100644 --- a/modules/juce_gui_basics/native/accessibility/juce_win32_Accessibility.cpp +++ b/modules/juce_gui_basics/native/accessibility/juce_win32_Accessibility.cpp @@ -26,6 +26,8 @@ namespace juce { +#define JUCE_NATIVE_ACCESSIBILITY_INCLUDED 1 + JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wlanguage-extension-token") static bool isStartingUpOrShuttingDown() diff --git a/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm b/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm index 9317ddc0b3..87fc0bb7d5 100644 --- a/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm +++ b/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm @@ -95,7 +95,16 @@ public: backing: NSBackingStoreBuffered defer: YES]; setOwner (window, this); - [window setAccessibilityElement: component.getAccessibilityHandler() != nullptr]; + + #if JUCE_OBJC_HAS_AVAILABLE_FEATURE || (defined (MAC_OS_X_VERSION_10_10) && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_10) + #if JUCE_OBJC_HAS_AVAILABLE_FEATURE + if (@available (macOS 10.10, *)) + #endif + { + [window setAccessibilityElement: component.getAccessibilityHandler() != nullptr]; + } + #endif + [window orderOut: nil]; [window setDelegate: (id) window];