From 7b1fba4bae5f9384a5b4eebc2d0315711c547cd5 Mon Sep 17 00:00:00 2001 From: reuk Date: Fri, 4 Mar 2022 13:26:51 +0000 Subject: [PATCH] Windows Accessibility: Fixed backspace character reporting under NVDA The change introduced in 92f350e617a4f93fba18bcb0cd88b47d2eb3d8e3 led to a regression in the MoveEndpointByUnit function. In this case, a backward movement by a single character *should* move the endpoint as long as it remains within the text range. The issue addressed by the faulty commit is better fixed by special-casing the 'character' unit case in the ExpandToEnclosingUnit function. --- .../native/accessibility/juce_AccessibilityTextHelpers.h | 7 +++---- .../native/accessibility/juce_win32_UIATextProvider.h | 4 +++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/modules/juce_gui_basics/native/accessibility/juce_AccessibilityTextHelpers.h b/modules/juce_gui_basics/native/accessibility/juce_AccessibilityTextHelpers.h index a519fd323d..96e4a6df2b 100644 --- a/modules/juce_gui_basics/native/accessibility/juce_AccessibilityTextHelpers.h +++ b/modules/juce_gui_basics/native/accessibility/juce_AccessibilityTextHelpers.h @@ -49,13 +49,12 @@ namespace AccessibilityTextHelpers { const auto numCharacters = textInterface.getTotalNumCharacters(); const auto isForwards = (direction == Direction::forwards); - - const auto offsetWithDirecton = [isForwards] (int input) { return isForwards ? input : -input; }; + const auto offsetWithDirection = [isForwards] (auto num) { return isForwards ? num : -num; }; switch (boundary) { case BoundaryType::character: - return jlimit (0, numCharacters, isForwards ? currentPosition + 1 : currentPosition); + return jlimit (0, numCharacters, currentPosition + offsetWithDirection (1)); case BoundaryType::word: case BoundaryType::line: @@ -96,7 +95,7 @@ namespace AccessibilityTextHelpers auto tokens = (boundary == BoundaryType::line ? StringArray::fromLines (text) : StringArray::fromTokens (text, false)); - return currentPosition + offsetWithDirecton (tokens[0].length()); + return currentPosition + offsetWithDirection (tokens[0].length()); } case BoundaryType::document: diff --git a/modules/juce_gui_basics/native/accessibility/juce_win32_UIATextProvider.h b/modules/juce_gui_basics/native/accessibility/juce_win32_UIATextProvider.h index 9111e3064b..13acd81747 100644 --- a/modules/juce_gui_basics/native/accessibility/juce_win32_UIATextProvider.h +++ b/modules/juce_gui_basics/native/accessibility/juce_win32_UIATextProvider.h @@ -248,7 +248,9 @@ private: { const auto boundaryType = getBoundaryType (unit); - const auto start = AccessibilityTextHelpers::findTextBoundary (*textInterface, + const auto start = unit == ComTypes::TextUnit::TextUnit_Character + ? selectionRange.getStart() + : AccessibilityTextHelpers::findTextBoundary (*textInterface, selectionRange.getStart(), boundaryType, AccessibilityTextHelpers::Direction::backwards);