diff --git a/modules/juce_gui_basics/widgets/juce_Label.cpp b/modules/juce_gui_basics/widgets/juce_Label.cpp index 9a5a6a0932..5882cf56c3 100644 --- a/modules/juce_gui_basics/widgets/juce_Label.cpp +++ b/modules/juce_gui_basics/widgets/juce_Label.cpp @@ -524,14 +524,34 @@ public: explicit LabelAccessibilityHandler (Label& labelToWrap) : AccessibilityHandler (labelToWrap, AccessibilityRole::staticText, - getAccessibilityActions (labelToWrap)), + getAccessibilityActions (labelToWrap), + { std::make_unique (labelToWrap) }), label (labelToWrap) { } - String getTitle() const override { return label.getText(); } + String getTitle() const override + { + return label.getText(); + } private: + class LabelValueInterface : public AccessibilityTextValueInterface + { + public: + explicit LabelValueInterface (Label& labelToWrap) + : label (labelToWrap) + { + } + + bool isReadOnly() const override { return true; } + String getCurrentValueAsString() const override { return label.getText(); } + void setValueAsString (const String&) override {} + + private: + Label& label; + }; + static AccessibilityActions getAccessibilityActions (Label& label) { if (label.isEditable()) diff --git a/modules/juce_gui_basics/widgets/juce_TextEditor.cpp b/modules/juce_gui_basics/widgets/juce_TextEditor.cpp index 3c78630d0f..ffee87e709 100644 --- a/modules/juce_gui_basics/widgets/juce_TextEditor.cpp +++ b/modules/juce_gui_basics/widgets/juce_TextEditor.cpp @@ -2697,17 +2697,27 @@ public: : AccessibilityHandler (textEditorToWrap, textEditorToWrap.isReadOnly() ? AccessibilityRole::staticText : AccessibilityRole::editableText, {}, - { textEditorToWrap.isReadOnly() ? nullptr : std::make_unique (textEditorToWrap) }), - textEditor (textEditorToWrap) + makeInterfaces (textEditorToWrap)) { } - String getTitle() const override - { - return textEditor.isReadOnly() ? textEditor.getText() : textEditor.getTitle(); - } - private: + class TextEditorValueInterface : public AccessibilityTextValueInterface + { + public: + explicit TextEditorValueInterface (TextEditor& textEditorToWrap) + : textEditor (textEditorToWrap) + { + } + + bool isReadOnly() const override { return true; } + String getCurrentValueAsString() const override { return textEditor.getText(); } + void setValueAsString (const String&) override {} + + private: + TextEditor& textEditor; + }; + class TextEditorTextInterface : public AccessibilityTextInterface { public: @@ -2759,7 +2769,13 @@ private: TextEditor& textEditor; }; - TextEditor& textEditor; + static AccessibilityHandler::Interfaces makeInterfaces (TextEditor& textEditor) + { + if (textEditor.isReadOnly()) + return { std::make_unique (textEditor) }; + + return { std::make_unique (textEditor) }; + } //============================================================================== JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (TextEditorAccessibilityHandler) diff --git a/modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.cpp b/modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.cpp index 8144fd39f6..96ba2483ae 100644 --- a/modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.cpp +++ b/modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.cpp @@ -35,19 +35,27 @@ public: codeEditorComponentToWrap.isReadOnly() ? AccessibilityRole::staticText : AccessibilityRole::editableText, {}, - { codeEditorComponentToWrap.isReadOnly() ? nullptr - : std::make_unique (codeEditorComponentToWrap) }), - codeEditorComponent (codeEditorComponentToWrap) + makeInterfaces (codeEditorComponentToWrap)) { } - String getTitle() const override - { - return codeEditorComponent.isReadOnly() ? codeEditorComponent.document.getAllContent() - : codeEditorComponent.getTitle(); - } - private: + class CodeEditorComponentValueInterface : public AccessibilityTextValueInterface + { + public: + explicit CodeEditorComponentValueInterface (CodeEditorComponent& codeEditorComponentToWrap) + : codeEditorComponent (codeEditorComponentToWrap) + { + } + + bool isReadOnly() const override { return true; } + String getCurrentValueAsString() const override { return codeEditorComponent.document.getAllContent(); } + void setValueAsString (const String&) override {} + + private: + CodeEditorComponent& codeEditorComponent; + }; + class CodeEditorComponentTextInterface : public AccessibilityTextInterface { public: @@ -144,7 +152,13 @@ private: CodeEditorComponent& codeEditorComponent; }; - CodeEditorComponent& codeEditorComponent; + static AccessibilityHandler::Interfaces makeInterfaces (CodeEditorComponent& codeEditorComponent) + { + if (codeEditorComponent.isReadOnly()) + return { std::make_unique (codeEditorComponent) }; + + return { std::make_unique (codeEditorComponent) }; + } //============================================================================== JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CodeEditorAccessibilityHandler)