From db0fa92637a1b2edf26da9917c9dce050ebc8a78 Mon Sep 17 00:00:00 2001 From: Boris DuĊĦek Date: Sun, 11 Aug 2013 16:37:48 +0200 Subject: fdo#67980 - VoiceOver does not inform about misspelled text Change-Id: I4aefa1c013e62942801dd38a06034103c0df24be Reviewed-on: https://gerrit.libreoffice.org/5351 Reviewed-by: Tor Lillqvist Tested-by: Tor Lillqvist --- .../source/a11y/aqua11ytextattributeswrapper.mm | 25 ++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/vcl/aqua/source/a11y/aqua11ytextattributeswrapper.mm b/vcl/aqua/source/a11y/aqua11ytextattributeswrapper.mm index d95f999e05bb..41f5c8008c68 100644 --- a/vcl/aqua/source/a11y/aqua11ytextattributeswrapper.mm +++ b/vcl/aqua/source/a11y/aqua11ytextattributeswrapper.mm @@ -28,6 +28,7 @@ #include #include #include +#include namespace css_awt = ::com::sun::star::awt; using namespace ::com::sun::star::accessibility; @@ -267,6 +268,28 @@ using namespace ::rtl; [ pool release ]; } ++(void)addMarkup:(XAccessibleTextMarkup*)markup toString:(NSMutableAttributedString*)string inRange:(NSRange)range { + [AquaA11yTextAttributesWrapper addMarkup:markup withType:(::com::sun::star::text::TextMarkupType::SPELLCHECK) toString:string inRange:range]; +} + ++(void)addMarkup:(XAccessibleTextMarkup*)markup withType:(long)type toString:(NSMutableAttributedString*)string inRange:(NSRange)range { + const long markupCount = markup->getTextMarkupCount(type); + for (long markupIndex = 0; markupIndex < markupCount; ++markupIndex) { + TextSegment markupSegment = markup->getTextMarkup(markupIndex, type); + NSRange markupRange = NSMakeRange(markupSegment.SegmentStart, markupSegment.SegmentEnd - markupSegment.SegmentStart); + markupRange = NSIntersectionRange(range, markupRange); + if (markupRange.length > 0) { + markupRange.location -= range.location; + switch(type) { + case ::com::sun::star::text::TextMarkupType::SPELLCHECK: { + [string addAttribute:NSAccessibilityMisspelledTextAttribute value:[NSNumber numberWithBool:YES] range:markupRange]; + break; + } + } + } + } +} + +(NSMutableAttributedString *)createAttributedStringForElement:(AquaA11yWrapper *)wrapper inOrigRange:(id)origRange { static const Sequence < OUString > emptySequence; // vars @@ -297,6 +320,8 @@ using namespace ::rtl; currentIndex = textSegment.SegmentEnd; } [defaultFontDescriptor release]; + if ([wrapper accessibleTextMarkup]) + [AquaA11yTextAttributesWrapper addMarkup:[wrapper accessibleTextMarkup] toString:string inRange:[origRange rangeValue]]; [ string endEditing ]; } } catch ( IllegalArgumentException & e ) { -- cgit