From e6360ca4cf6dc78ca23f4b06e486a95b32a07b4b Mon Sep 17 00:00:00 2001 From: ed Date: Thu, 7 Oct 2021 16:35:37 +0100 Subject: [PATCH] Accessibility: Send AccessibilityEvent::valueChanged when ComboBox selection is changed --- .../juce_gui_basics/widgets/juce_ComboBox.cpp | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/modules/juce_gui_basics/widgets/juce_ComboBox.cpp b/modules/juce_gui_basics/widgets/juce_ComboBox.cpp index b9ae5d3320..60a703a3ae 100644 --- a/modules/juce_gui_basics/widgets/juce_ComboBox.cpp +++ b/modules/juce_gui_basics/widgets/juce_ComboBox.cpp @@ -622,6 +622,9 @@ void ComboBox::handleAsyncUpdate() if (onChange != nullptr) onChange(); + + if (auto* handler = getAccessibilityHandler()) + handler->notifyAccessibilityEvent (AccessibilityEvent::valueChanged); } void ComboBox::sendChange (const NotificationType notification) @@ -646,7 +649,8 @@ public: explicit ComboBoxAccessibilityHandler (ComboBox& comboBoxToWrap) : AccessibilityHandler (comboBoxToWrap, AccessibilityRole::comboBox, - getAccessibilityActions (comboBoxToWrap)), + getAccessibilityActions (comboBoxToWrap), + { std::make_unique (comboBoxToWrap) }), comboBox (comboBoxToWrap) { } @@ -662,6 +666,25 @@ public: String getHelp() const override { return comboBox.getTooltip(); } private: + class ComboBoxValueInterface : public AccessibilityTextValueInterface + { + public: + explicit ComboBoxValueInterface (ComboBox& comboBoxToWrap) + : comboBox (comboBoxToWrap) + { + } + + bool isReadOnly() const override { return true; } + String getCurrentValueAsString() const override { return comboBox.getText(); } + void setValueAsString (const String&) override {} + + private: + ComboBox& comboBox; + + //============================================================================== + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ComboBoxValueInterface) + }; + static AccessibilityActions getAccessibilityActions (ComboBox& comboBox) { return AccessibilityActions().addAction (AccessibilityActionType::press, [&comboBox] { comboBox.showPopup(); })