diff options
author | Geenz <geenz@geenzo.com> | 2013-05-23 08:50:05 -0400 |
---|---|---|
committer | Geenz <geenz@geenzo.com> | 2013-05-23 08:50:05 -0400 |
commit | cda10266ae91e28f2ac60b8472d6b8592f877d65 (patch) | |
tree | 6e3d374cb7973069de3cfce7f7bd7252e8aa5c35 /indra/llwindow/llopenglview-objc.mm | |
parent | 5683fe2fa332244a7e1e172021663a7d22c58e0c (diff) |
Only show the input window when we attempt to add marked text, *and* we can't submit marked text directly to the viewer.
Diffstat (limited to 'indra/llwindow/llopenglview-objc.mm')
-rw-r--r-- | indra/llwindow/llopenglview-objc.mm | 68 |
1 files changed, 43 insertions, 25 deletions
diff --git a/indra/llwindow/llopenglview-objc.mm b/indra/llwindow/llopenglview-objc.mm index 9d55b2c551..8ef6d4e682 100644 --- a/indra/llwindow/llopenglview-objc.mm +++ b/indra/llwindow/llopenglview-objc.mm @@ -45,6 +45,7 @@ attributedStringInfo getSegments(NSAttributedString *str) segment_standouts seg_standouts; NSRange effectiveRange; NSRange limitRange = NSMakeRange(0, [str length]); + while (limitRange.length > 0) { NSNumber *attr = [str attribute:NSUnderlineStyleAttributeName atIndex:limitRange.location longestEffectiveRange:&effectiveRange inRange:limitRange]; limitRange = NSMakeRange(NSMaxRange(effectiveRange), NSMaxRange(limitRange) - NSMaxRange(effectiveRange)); @@ -402,32 +403,40 @@ attributedStringInfo getSegments(NSAttributedString *str) - (void)setMarkedText:(id)aString selectedRange:(NSRange)selectedRange replacementRange:(NSRange)replacementRange { - if ([aString class] == NSClassFromString(@"NSConcreteMutableAttributedString")) - { - unsigned int selected[2] = { - selectedRange.location, - selectedRange.length - }; - - unsigned int replacement[2] = { - replacementRange.location, - replacementRange.length - }; - - unichar text[[aString length]]; - [[aString mutableString] getCharacters:text range:NSMakeRange(0, [aString length])]; - attributedStringInfo segments = getSegments((NSAttributedString *)aString); - setMarkedText(text, selected, replacement, [aString length], segments); - mHasMarkedText = TRUE; - mMarkedTextLength = [aString length]; - mMarkedText = (NSAttributedString*)[aString mutableString]; - } + if (mMarkedTextAllowed) + { + if ([aString class] == NSClassFromString(@"NSConcreteMutableAttributedString")) + { + unsigned int selected[2] = { + selectedRange.location, + selectedRange.length + }; + + unsigned int replacement[2] = { + replacementRange.location, + replacementRange.length + }; + + unichar text[[aString length]]; + [[aString mutableString] getCharacters:text range:NSMakeRange(0, [aString length])]; + attributedStringInfo segments = getSegments((NSAttributedString *)aString); + setMarkedText(text, selected, replacement, [aString length], segments); + mHasMarkedText = TRUE; + mMarkedTextLength = [aString length]; + mMarkedText = (NSAttributedString*)[aString mutableString]; + } + } else { + showInputWindow(true); + } } - (void)commitCurrentPreedit { - [self insertText:mMarkedText replacementRange:NSMakeRange(0, [mMarkedText length])]; - [[self inputContext] discardMarkedText]; + if (mMarkedText) + { + [self insertText:mMarkedText]; + [[self inputContext] discardMarkedText]; + } } - (void)unmarkText @@ -452,11 +461,12 @@ attributedStringInfo getSegments(NSAttributedString *str) - (void)insertText:(id)aString replacementRange:(NSRange)replacementRange { + bool success = false; if (!mHasMarkedText) { for (NSInteger i = 0; i < [aString length]; i++) { - callUnicodeCallback([aString characterAtIndex:i], mModifiers); + success = callUnicodeCallback([aString characterAtIndex:i], mModifiers); } } else { // We may never get this point since unmarkText may be called before insertText ever gets called once we submit our text. @@ -465,10 +475,12 @@ attributedStringInfo getSegments(NSAttributedString *str) for (NSInteger i = 0; i < [aString length]; i++) { - handleUnicodeCharacter([aString characterAtIndex:i]); + success = handleUnicodeCharacter([aString characterAtIndex:i]); } mHasMarkedText = FALSE; } + + NSLog(@"Successful text input: %d", success); } - (void) insertNewline:(id)sender @@ -508,6 +520,11 @@ attributedStringInfo getSegments(NSAttributedString *str) return NO; } +- (void) allowMarkedTextInput:(bool)allowed +{ + mMarkedTextAllowed = allowed; +} + @end @implementation LLNonInlineTextView @@ -525,9 +542,10 @@ attributedStringInfo getSegments(NSAttributedString *str) - (void) insertText:(id)aString replacementRange:(NSRange)replacementRange { [glview insertText:aString replacementRange:replacementRange]; - [_window orderOut:_window]; [[self textStorage] setValue:@""]; [[self inputContext] discardMarkedText]; + [self setString:@""]; + [_window orderOut:_window]; } @end |