From d5d869a4077cdfc7fe6b672cad7f46e97edd89c9 Mon Sep 17 00:00:00 2001 From: Kelvin Sherlock Date: Tue, 15 Sep 2020 23:11:20 -0400 Subject: [PATCH] check filetypes when drag-n-dropping to the recent window. alt skips filetype check. --- Ample/DiskImagesWindowController.m | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/Ample/DiskImagesWindowController.m b/Ample/DiskImagesWindowController.m index 0fc0311..80492ea 100644 --- a/Ample/DiskImagesWindowController.m +++ b/Ample/DiskImagesWindowController.m @@ -19,6 +19,7 @@ @implementation DiskImagesWindowController { BOOL _dirty; + NSSet *_extensions; } @@ -28,6 +29,10 @@ if ((self = [super init])) { [self loadRecentDiskImages]; + + _extensions = [NSSet setWithObjects: + @"2img", @"2mg", @"chd", @"dc", @"do", @"dsk", @"hd", @"hdv", @"image", @"nib", @"po", @"wav", @"woz", @"iso", nil + ]; } return self; } @@ -190,8 +195,19 @@ } -(NSDragOperation)tableView:(NSTableView *)tableView validateDrop:(id)info proposedRow:(NSInteger)row proposedDropOperation:(NSTableViewDropOperation)dropOperation { + + // option key will ignore all filetype restrictions. + if ([NSEvent modifierFlags] & NSEventModifierFlagOption) return NSDragOperationCopy; + + NSPasteboard * pb = [info draggingPasteboard]; + NSURL *url = [NSURL URLFromPasteboard: pb]; - return NSDragOperationCopy; + NSString *ext = [url pathExtension]; + ext = [ext lowercaseString]; + if ([_extensions containsObject: ext]) + return NSDragOperationCopy; + + return NSDragOperationNone; } -(BOOL)tableView:(NSTableView *)tableView acceptDrop:(id)info row:(NSInteger)row dropOperation:(NSTableViewDropOperation)dropOperation {