diff options
author | Boris Dušek <me@dusek.me> | 2013-08-11 16:37:48 +0200 |
---|---|---|
committer | Tor Lillqvist <tml@iki.fi> | 2013-08-12 08:16:33 +0000 |
commit | db0fa92637a1b2edf26da9917c9dce050ebc8a78 (patch) | |
tree | d9f9f4ea689b9fae5e2fbcb90446e47ded1d15b7 | |
parent | 487d9ffe0480470fb7c03fe71e466e8bcc700c33 (diff) |
fdo#67980 - VoiceOver does not inform about misspelled text
Change-Id: I4aefa1c013e62942801dd38a06034103c0df24be
Reviewed-on: https://gerrit.libreoffice.org/5351
Reviewed-by: Tor Lillqvist <tml@iki.fi>
Tested-by: Tor Lillqvist <tml@iki.fi>
-rw-r--r-- | vcl/aqua/source/a11y/aqua11ytextattributeswrapper.mm | 25 |
1 files changed, 25 insertions, 0 deletions
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 <com/sun/star/awt/FontUnderline.hpp> #include <com/sun/star/awt/FontWeight.hpp> #include <com/sun/star/awt/FontStrikeout.hpp> +#include <com/sun/star/text/TextMarkupType.hpp> 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 ) { |