On Aug 13, 2012, at 3:55 PM, ecir hana wrote:

> Thank you for the reply! Unfortunately, there seem to be a tiny bug with 
> undo. My textview has "setRichText:" set to NO so that it triggers the first 
> condition. When the textview looks like this:
> 
> aaa
> bbb
> 
> and I select and copy "aaa", then select "bbb", delete it by hitting "<--", 
> paste "aaa", and then I try to undo, it does nothing, i.e. the last line 
> remains "bbb", instead of "". In menubar, there it even says "Undo Paste" but 
> it does nothing.
> 
> Any idea would that could be?


The insertText: isn't being registered with the undo manager properly. That was 
the wrong method to use. (NSTextView & friends can be confusing.) Pretty sure 
this is always correct:


- (BOOL)readSelectionFromPasteboard:(NSPasteboard *)pboard type:(NSString *)type
{
        if ([type isEqual:NSStringPboardType]) {
                if ([[pboard stringForType:type] isEqual:@"foo"]) {
                        NSRange range = [self selectedRange];
                        
                        if ([self shouldChangeTextInRange:range 
replacementString:@"bar"]) {
                                [self replaceCharactersInRange:range 
withString:@"bar"];
                        }
                        
                        return YES;
                }
        }
        
        return [super readSelectionFromPasteboard:pboard type:type];
}





But in case I missed something else again, a simple workaround is to just 
swizzle the string on the pasteboard like so: 


- (BOOL)readSelectionFromPasteboard:(NSPasteboard *)pboard type:(NSString *)type
{
        if ([type isEqual:NSStringPboardType]) {
                if ([[pboard stringForType:type] isEqual:@"foo"]) {
                        BOOL result;
                        
                        [pboard setString:@"bar" forType:NSStringPboardType];
                        result = [super readSelectionFromPasteboard:pboard 
type:type];
                        [pboard setString:@"foo" forType:NSStringPboardType];
                        
                        return result;
                }
        }
        
        return [super readSelectionFromPasteboard:pboard type:type];
}


;-)



But really, the first one should be fine.



--
Seth Willits




_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to