From a6180b9b0c513d11e27c7f8f5801225fcbed315c Mon Sep 17 00:00:00 2001 From: Bibiko Date: Wed, 8 Dec 2010 13:17:46 +0000 Subject: =?UTF-8?q?=E2=80=A2=20Bundel=20Editor=20-=20improved=20undo=20beh?= =?UTF-8?q?aviour=20-=20fix=20issue=20for=20non-US=20keyboard=20layouts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/SPBundleCommandTextView.m | 48 +++++++++++++++++++++------------------ Source/SPBundleEditorController.m | 2 +- 2 files changed, 27 insertions(+), 23 deletions(-) diff --git a/Source/SPBundleCommandTextView.m b/Source/SPBundleCommandTextView.m index 76020392..8a5bf620 100644 --- a/Source/SPBundleCommandTextView.m +++ b/Source/SPBundleCommandTextView.m @@ -408,44 +408,54 @@ if (currentRange.length == 0 || ![self isEditable]) return NO; - unichar matchingCharacter; + NSString *matchingCharacter; + NSString *prefixStr = nil; // Set matchingCharacter due to prefix. switch (prefix) { case '(': - matchingCharacter = ')'; + matchingCharacter = @")"; break; case '"': - matchingCharacter = '"'; + matchingCharacter = @"\""; break; case '`': - matchingCharacter = '`'; + matchingCharacter = @"`"; break; case '\'': - matchingCharacter = '\''; + matchingCharacter = @"'"; break; case '{': - matchingCharacter = '}'; + matchingCharacter = @"}"; break; case '[': - matchingCharacter = ']'; + matchingCharacter = @"]"; break; - case '“': - matchingCharacter = '”'; + case 0x201c: + prefixStr = @"“"; + matchingCharacter = @"”"; break; - case '‘': - matchingCharacter = '’'; + case 0x2018: + prefixStr = @"‘"; + matchingCharacter = @"’"; break; default: return NO; } NSString *selString = [[self string] substringWithRange:currentRange]; + NSString *replaceString; + if(prefixStr != nil) + replaceString = [NSString stringWithFormat:@"%@%@%@", prefixStr, selString, matchingCharacter]; + else + replaceString = [NSString stringWithFormat:@"%c%@%@", prefix, selString, matchingCharacter]; + + [self breakUndoCoalescing]; // Replace the current selection with the selected string wrapped in prefix and suffix - [self insertText:[NSString stringWithFormat:@"%c%@%c", prefix, selString, matchingCharacter]]; - + [self insertText:replaceString]; + // Re-select original selection NSRange innerSelectionRange = NSMakeRange(currentRange.location+1, [selString length]); [self setSelectedRange:innerSelectionRange]; @@ -458,18 +468,12 @@ long allFlags = (NSShiftKeyMask|NSControlKeyMask|NSAlternateKeyMask|NSCommandKeyMask); - // Check if user pressed ⌥ to allow composing of accented characters. - // e.g. for US keyboard "⌥u a" to insert ä - // or for non-US keyboards to allow to enter dead keys - // e.g. for German keyboard ` is a dead key, press space to enter ` - if (([theEvent modifierFlags] & allFlags) == NSAlternateKeyMask || [[theEvent characters] length] == 0) - { + NSString *characters = [theEvent characters]; + NSString *charactersIgnMod = [theEvent charactersIgnoringModifiers]; + if(![characters length]) { [super keyDown: theEvent]; return; } - - NSString *characters = [theEvent characters]; - NSString *charactersIgnMod = [theEvent charactersIgnoringModifiers]; unichar insertedCharacter = [characters characterAtIndex:0]; long curFlags = ([theEvent modifierFlags] & allFlags); diff --git a/Source/SPBundleEditorController.m b/Source/SPBundleEditorController.m index 7c213a6f..4091e606 100644 --- a/Source/SPBundleEditorController.m +++ b/Source/SPBundleEditorController.m @@ -1504,7 +1504,7 @@ cycleCounter = 0; } - [self performSelector:@selector(setAllowedUndo) withObject:nil afterDelay:0.09]; + [self performSelector:@selector(setAllowedUndo) withObject:nil afterDelay:0.0005]; } } -- cgit v1.2.3