From 0da5fedf6cd50f24977bd0398e89c7a7efcf0502 Mon Sep 17 00:00:00 2001 From: Allan Odgaard Date: Mon, 17 Feb 2014 09:42:44 +0700 Subject: [PATCH] Do not add transient pasteboard items to history See http://nspasteboard.org for details. --- Frameworks/OakAppKit/src/OakPasteboard.mm | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Frameworks/OakAppKit/src/OakPasteboard.mm b/Frameworks/OakAppKit/src/OakPasteboard.mm index 2fe6715b..aae99366 100644 --- a/Frameworks/OakAppKit/src/OakPasteboard.mm +++ b/Frameworks/OakAppKit/src/OakPasteboard.mm @@ -192,6 +192,10 @@ namespace D(DBF_Pasteboard, bug("new data: %s (%zd = %zd)\n", BSTR((_changeCount != [[self pasteboard] changeCount])), (ssize_t)_changeCount, (ssize_t)[[self pasteboard] changeCount]);); if(_changeCount != [[self pasteboard] changeCount]) { + // Do not add to history, see http://nspasteboard.org + if([[self pasteboard] availableTypeFromArray:@[ @"org.nspasteboard.TransientType", @"org.nspasteboard.ConcealedType", @"org.nspasteboard.AutoGeneratedType" ]]) + return; + NSString* onClipboard = [[self pasteboard] availableTypeFromArray:@[ NSStringPboardType ]] ? [[self pasteboard] stringForType:NSStringPboardType] : nil; NSString* onStack = [([_entries count] == 0 ? nil : _entries[_index]) string]; _changeCount = [[self pasteboard] changeCount]; @@ -307,7 +311,7 @@ namespace _index = [_entries count]-1; _auxiliaryOptionsForCurrent = nil; } - else if(!_avoidsDuplicates || ![[self current] isEqual:anEntry]) + else if(!_avoidsDuplicates || ![_entries count] || ![_entries[_index] isEqual:anEntry]) { [_entries addObject:anEntry]; [self setIndex:[_entries count]-1]; @@ -327,6 +331,11 @@ namespace { D(DBF_Pasteboard, bug("%zu / %zu\n", (size_t)_index, (size_t)[_entries count]);); [self checkForExternalPasteboardChanges]; + if([[self pasteboard] availableTypeFromArray:@[ @"org.nspasteboard.TransientType", @"org.nspasteboard.ConcealedType", @"org.nspasteboard.AutoGeneratedType" ]]) + { + if(NSString* onClipboard = [[self pasteboard] availableTypeFromArray:@[ NSStringPboardType ]] ? [[self pasteboard] stringForType:NSStringPboardType] : nil) + return [OakPasteboardEntry pasteboardEntryWithString:onClipboard andOptions:[[self pasteboard] availableTypeFromArray:@[ OakPasteboardOptionsPboardType ]] ? [[self pasteboard] propertyListForType:OakPasteboardOptionsPboardType] : nil]; + } return [_entries count] == 0 ? nil : _entries[_index]; }