aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorNeil Hodgson <nyamatongwe@gmail.com>2014-03-26 11:23:55 +1100
committerNeil Hodgson <nyamatongwe@gmail.com>2014-03-26 11:23:55 +1100
commitc839f48dac5f79e8beed661bb8742a778b4bbaf3 (patch)
tree0933c005adf847954470935ebfd6e6a989c15ef2
parent45789ef46288d869ae1c1047b5f87c89c8a06d3b (diff)
downloadscintilla-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.h2
-rw-r--r--cocoa/ScintillaView.mm36
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.
*/