diff --git a/modules/juce_gui_basics/menus/juce_PopupMenu.cpp b/modules/juce_gui_basics/menus/juce_PopupMenu.cpp index 5b369852b8..22668e1044 100644 --- a/modules/juce_gui_basics/menus/juce_PopupMenu.cpp +++ b/modules/juce_gui_basics/menus/juce_PopupMenu.cpp @@ -98,9 +98,7 @@ struct HeaderItemComponent : public PopupMenu::CustomComponent //============================================================================== struct ItemComponent : public Component { - ItemComponent (const PopupMenu::Item& i, - const PopupMenu::Options& o, - MenuWindow& parent) + ItemComponent (const PopupMenu::Item& i, const PopupMenu::Options& o, MenuWindow& parent) : item (i), parentWindow (parent), options (o), customComp (i.customComponent) { if (item.isSectionHeader) @@ -189,6 +187,29 @@ struct ItemComponent : public Component PopupMenu::Item item; private: + class ValueInterface : public AccessibilityValueInterface + { + public: + ValueInterface() = default; + + bool isReadOnly() const override { return true; } + + double getCurrentValue() const override + { + return 1.0; + } + + String getCurrentValueAsString() const override + { + return TRANS ("Checked"); + } + + void setValue (double) override {} + void setValueAsString (const String&) override {} + + AccessibleValueRange getRange() const override { return {}; } + }; + //============================================================================== class ItemAccessibilityHandler : public AccessibilityHandler { @@ -197,7 +218,9 @@ private: : AccessibilityHandler (itemComponentToWrap, isAccessibilityHandlerRequired (itemComponentToWrap.item) ? AccessibilityRole::menuItem : AccessibilityRole::ignored, - getAccessibilityActions (*this, itemComponentToWrap)), + getAccessibilityActions (*this, itemComponentToWrap), + AccessibilityHandler::Interfaces { itemComponentToWrap.item.isTicked ? std::make_unique() + : nullptr }), itemComponent (itemComponentToWrap) { } @@ -218,6 +241,9 @@ private: : state.withExpandable().withCollapsed(); } + if (itemComponent.item.isTicked) + state = state.withChecked(); + return state.isFocused() ? state.withSelected() : state; }