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
commited404335a35853d9250c703a3f28acde63b9b20d (patch)
treeed40cdcea6060c0361fc600e4462f568d0ed06bc
parent7617b84467db2acec9de99a2a2e800f3d59689d5 (diff)
downloadscintilla-mirror-ed404335a35853d9250c703a3f28acde63b9b20d.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.
*/