diff options
author | Neil Hodgson <nyamatongwe@gmail.com> | 2014-03-26 11:23:55 +1100 |
---|---|---|
committer | Neil Hodgson <nyamatongwe@gmail.com> | 2014-03-26 11:23:55 +1100 |
commit | c839f48dac5f79e8beed661bb8742a778b4bbaf3 (patch) | |
tree | 0933c005adf847954470935ebfd6e6a989c15ef2 | |
parent | 45789ef46288d869ae1c1047b5f87c89c8a06d3b (diff) | |
download | scintilla-mirror-c839f48dac5f79e8beed661bb8742a778b4bbaf3.tar.gz |
Refactor range deletion into a method on ScintillaView.
For removeMarkedText, use range deletion instead of setting the selection and
inserting an empty string as this has fewer side effects and should avoid crashes
when an autocompletion list is active.
-rw-r--r-- | cocoa/ScintillaView.h | 2 | ||||
-rw-r--r-- | cocoa/ScintillaView.mm | 36 |
2 files changed, 19 insertions, 19 deletions
diff --git a/cocoa/ScintillaView.h b/cocoa/ScintillaView.h index 51d60e9d5..b9b36201f 100644 --- a/cocoa/ScintillaView.h +++ b/cocoa/ScintillaView.h @@ -146,6 +146,8 @@ extern NSString *const SCIUpdateUINotification; - (NSString*) selectedString; +- (void) deleteRange: (NSRange) range; + - (void)setFontName: (NSString*) font size: (int) size bold: (BOOL) bold diff --git a/cocoa/ScintillaView.mm b/cocoa/ScintillaView.mm index 2db8fae12..97bc0edfe 100644 --- a/cocoa/ScintillaView.mm +++ b/cocoa/ScintillaView.mm @@ -383,13 +383,7 @@ static NSCursor *cursorFromEnum(Window::Cursor cursor) // Its replacing a non-existent position so do nothing. return; - if (replacementRange.length > 0) - { - [ScintillaView directCall: mOwner - message: SCI_DELETERANGE - wParam: replacementRange.location - lParam: replacementRange.length]; - } + [mOwner deleteRange: replacementRange]; NSString* newText = @""; if ([aString isKindOfClass:[NSString class]]) @@ -459,13 +453,7 @@ static NSCursor *cursorFromEnum(Window::Cursor cursor) mOwner.backend->SelectOnlyMainSelection(); } - if (replacementRange.length > 0) - { - [ScintillaView directCall: mOwner - message: SCI_DELETERANGE - wParam: replacementRange.location - lParam: replacementRange.length]; - } + [mOwner deleteRange: replacementRange]; // Note: Scintilla internally works almost always with bytes instead chars, so we need to take // this into account when determining selection ranges and such. @@ -532,11 +520,8 @@ static NSCursor *cursorFromEnum(Window::Cursor cursor) if (mMarkedTextRange.length > 0) { // We have already marked text. Replace that. - [mOwner setGeneralProperty: SCI_SETSELECTIONSTART - value: mMarkedTextRange.location]; - [mOwner setGeneralProperty: SCI_SETSELECTIONEND - value: mMarkedTextRange.location + mMarkedTextRange.length]; - mOwner.backend->InsertText(@""); + [mOwner deleteRange: mMarkedTextRange]; + mMarkedTextRange = NSMakeRange(NSNotFound, 0); // Reenable undo action collection, after we are done with text composition. @@ -1254,6 +1239,19 @@ static NSCursor *cursorFromEnum(Window::Cursor cursor) //-------------------------------------------------------------------------------------------------- /** + * Delete a range from the document. + */ +- (void) deleteRange: (NSRange) aRange +{ + if (aRange.length > 0) + { + [self message: SCI_DELETERANGE wParam: aRange.location lParam: aRange.length]; + } +} + +//-------------------------------------------------------------------------------------------------- + +/** * Getter for the current text in raw form (no formatting information included). * If there is no text available an empty string is returned. */ |