From d6fd33b38de10716c0208df044ecb51b64d701eb Mon Sep 17 00:00:00 2001 From: ed Date: Wed, 15 Sep 2021 09:32:50 +0100 Subject: [PATCH] Accessibility: Disable accessibility for PopupMenu windows on the desktop when their parent window or target component have accessibility disabled --- modules/juce_gui_basics/components/juce_Component.h | 10 +++++++--- modules/juce_gui_basics/menus/juce_PopupMenu.cpp | 11 +++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/modules/juce_gui_basics/components/juce_Component.h b/modules/juce_gui_basics/components/juce_Component.h index 4726821a22..53ef3c7875 100644 --- a/modules/juce_gui_basics/components/juce_Component.h +++ b/modules/juce_gui_basics/components/juce_Component.h @@ -2415,10 +2415,16 @@ public: By default this is set to true. - @see getAccessibilityHandler + @see isAccessible, getAccessibilityHandler */ void setAccessible (bool shouldBeAccessible); + /** Returns true if this component and its children are visible to accessibility clients. + + @see setAccessible + */ + bool isAccessible() const noexcept; + /** Returns the accessibility handler for this component, or nullptr if this component is not accessible. @@ -2570,8 +2576,6 @@ private: bool reallyContainsInternal (Point, bool); Component* getComponentAtInternal (Point); - bool isAccessible() const noexcept; - struct ComponentHelpers; friend struct ComponentHelpers; diff --git a/modules/juce_gui_basics/menus/juce_PopupMenu.cpp b/modules/juce_gui_basics/menus/juce_PopupMenu.cpp index e5053a07dc..2bbf62615b 100644 --- a/modules/juce_gui_basics/menus/juce_PopupMenu.cpp +++ b/modules/juce_gui_basics/menus/juce_PopupMenu.cpp @@ -330,6 +330,17 @@ struct MenuWindow : public Component } else { + const auto shouldDisableAccessibility = [this] + { + const auto* compToCheck = parent != nullptr ? parent + : options.getTargetComponent(); + + return compToCheck != nullptr && ! compToCheck->isAccessible(); + }(); + + if (shouldDisableAccessibility) + setAccessible (false); + addToDesktop (ComponentPeer::windowIsTemporary | ComponentPeer::windowIgnoresKeyPresses | lf.getMenuWindowFlags());