Browse Source

Accessibility: Only use AccessibilityRole::toggleButton role and add AccessibilityActionType::toggle for ToggleButtons

v6.1.6
ed 4 years ago
parent
commit
8370542eb2
4 changed files with 24 additions and 15 deletions
  1. +13
    -13
      modules/juce_gui_basics/buttons/juce_Button.cpp
  2. +5
    -0
      modules/juce_gui_basics/buttons/juce_ToggleButton.cpp
  3. +2
    -0
      modules/juce_gui_basics/buttons/juce_ToggleButton.h
  4. +4
    -2
      modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.cpp

+ 13
- 13
modules/juce_gui_basics/buttons/juce_Button.cpp View File

@@ -208,8 +208,6 @@ void Button::setClickingTogglesState (bool shouldToggle) noexcept
// it is that this button represents, and the button will update its state to reflect this // it is that this button represents, and the button will update its state to reflect this
// in the applicationCommandListChanged() method. // in the applicationCommandListChanged() method.
jassert (commandManagerToUse == nullptr || ! clickTogglesState); jassert (commandManagerToUse == nullptr || ! clickTogglesState);
invalidateAccessibilityHandler();
} }
bool Button::getClickingTogglesState() const noexcept bool Button::getClickingTogglesState() const noexcept
@@ -708,10 +706,10 @@ void Button::repeatTimerCallback()
class ButtonAccessibilityHandler : public AccessibilityHandler class ButtonAccessibilityHandler : public AccessibilityHandler
{ {
public: public:
explicit ButtonAccessibilityHandler (Button& buttonToWrap)
explicit ButtonAccessibilityHandler (Button& buttonToWrap, AccessibilityRole role)
: AccessibilityHandler (buttonToWrap, : AccessibilityHandler (buttonToWrap,
getButtonRole (buttonToWrap),
getAccessibilityActions (buttonToWrap)),
isRadioButton (buttonToWrap) ? AccessibilityRole::radioButton : role,
getAccessibilityActions (buttonToWrap, role)),
button (buttonToWrap) button (buttonToWrap)
{ {
} }
@@ -720,7 +718,7 @@ public:
{ {
auto state = AccessibilityHandler::getCurrentState(); auto state = AccessibilityHandler::getCurrentState();
if (button.getClickingTogglesState() || button.getRadioGroupId() != 0)
if (isToggleButton (getRole()) || isRadioButton (button))
{ {
state = state.withCheckable(); state = state.withCheckable();
@@ -744,20 +742,22 @@ public:
String getHelp() const override { return button.getTooltip(); } String getHelp() const override { return button.getTooltip(); }
private: private:
static AccessibilityRole getButtonRole (const Button& b)
static bool isToggleButton (AccessibilityRole role) noexcept
{ {
if (b.getRadioGroupId() != 0) return AccessibilityRole::radioButton;
if (b.getClickingTogglesState()) return AccessibilityRole::toggleButton;
return role == AccessibilityRole::toggleButton;
}
return AccessibilityRole::button;
static bool isRadioButton (const Button& button) noexcept
{
return button.getRadioGroupId() != 0;
} }
static AccessibilityActions getAccessibilityActions (Button& button)
static AccessibilityActions getAccessibilityActions (Button& button, AccessibilityRole role)
{ {
auto actions = AccessibilityActions().addAction (AccessibilityActionType::press, auto actions = AccessibilityActions().addAction (AccessibilityActionType::press,
[&button] { button.triggerClick(); }); [&button] { button.triggerClick(); });
if (button.getClickingTogglesState())
if (isToggleButton (role))
actions = actions.addAction (AccessibilityActionType::toggle, actions = actions.addAction (AccessibilityActionType::toggle,
[&button] { button.setToggleState (! button.getToggleState(), sendNotification); }); [&button] { button.setToggleState (! button.getToggleState(), sendNotification); });
@@ -772,7 +772,7 @@ private:
std::unique_ptr<AccessibilityHandler> Button::createAccessibilityHandler() std::unique_ptr<AccessibilityHandler> Button::createAccessibilityHandler()
{ {
return std::make_unique<ButtonAccessibilityHandler> (*this);
return std::make_unique<ButtonAccessibilityHandler> (*this, AccessibilityRole::button);
} }
} // namespace juce } // namespace juce

+ 5
- 0
modules/juce_gui_basics/buttons/juce_ToggleButton.cpp View File

@@ -57,4 +57,9 @@ void ToggleButton::colourChanged()
repaint(); repaint();
} }
std::unique_ptr<AccessibilityHandler> ToggleButton::createAccessibilityHandler()
{
return std::make_unique<ButtonAccessibilityHandler> (*this, AccessibilityRole::toggleButton);
}
} // namespace juce } // namespace juce

+ 2
- 0
modules/juce_gui_basics/buttons/juce_ToggleButton.h View File

@@ -84,6 +84,8 @@ protected:
void colourChanged() override; void colourChanged() override;
private: private:
std::unique_ptr<AccessibilityHandler> createAccessibilityHandler() override;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ToggleButton) JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ToggleButton)
}; };


+ 4
- 2
modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.cpp View File

@@ -246,8 +246,10 @@ std::unique_ptr<AccessibilityHandler> ToolbarItemComponent::createAccessibilityH
&& itemId != ToolbarItemFactory::spacerId && itemId != ToolbarItemFactory::spacerId
&& itemId != ToolbarItemFactory::flexibleSpacerId); && itemId != ToolbarItemFactory::flexibleSpacerId);
return shouldItemBeAccessible ? std::make_unique<ButtonAccessibilityHandler> (*this)
: nullptr;
if (! shouldItemBeAccessible)
return nullptr;
return std::make_unique<ButtonAccessibilityHandler> (*this, AccessibilityRole::button);
} }
} // namespace juce } // namespace juce

Loading…
Cancel
Save