From f70fd14065057ad6ffa3615e0632ded0a93f50ff Mon Sep 17 00:00:00 2001 From: ed Date: Thu, 7 Oct 2021 10:06:30 +0100 Subject: [PATCH] iOS Accessibility: Implement accessibilityPerformEscape gesture to dismiss modals --- .../accessibility/juce_ios_Accessibility.mm | 27 ++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/modules/juce_gui_basics/native/accessibility/juce_ios_Accessibility.mm b/modules/juce_gui_basics/native/accessibility/juce_ios_Accessibility.mm index 1dcdbbf0f9..5d646d9f3c 100644 --- a/modules/juce_gui_basics/native/accessibility/juce_ios_Accessibility.mm +++ b/modules/juce_gui_basics/native/accessibility/juce_ios_Accessibility.mm @@ -210,9 +210,10 @@ private: addMethod (@selector (accessibilityElementIsFocused), isFocused, "c@:"); addMethod (@selector (accessibilityViewIsModal), getIsAccessibilityModal, "c@:"); - addMethod (@selector (accessibilityActivate), accessibilityPerformActivate, "c@:"); - addMethod (@selector (accessibilityIncrement), accessibilityPerformIncrement, "c@:"); - addMethod (@selector (accessibilityDecrement), accessibilityPerformDecrement, "c@:"); + addMethod (@selector (accessibilityActivate), accessibilityPerformActivate, "c@:"); + addMethod (@selector (accessibilityIncrement), accessibilityPerformIncrement, "c@:"); + addMethod (@selector (accessibilityDecrement), accessibilityPerformDecrement, "c@:"); + addMethod (@selector (accessibilityPerformEscape), accessibilityPerformEscape, "c@:"); #if JUCE_IOS_CONTAINER_API_AVAILABLE if (@available (iOS 11.0, *)) @@ -408,6 +409,26 @@ private: return NO; } + static BOOL accessibilityPerformEscape (id self, SEL) + { + if (auto* handler = getHandler (self)) + { + if (auto* modal = Component::getCurrentlyModalComponent()) + { + if (auto* modalHandler = modal->getAccessibilityHandler()) + { + if (modalHandler == handler || modalHandler->isParentOf (handler)) + { + modal->exitModalState (0); + return YES; + } + } + } + } + + return NO; + } + static id getAccessibilityDataTableCellElementForRowColumn (id self, SEL, NSUInteger row, NSUInteger column) { if (auto* tableInterface = getTableInterface (self))