Browse Source

Merge pull request #44620 from bruvzg/m1_dragdrop_3

[3.2] Fix file drag-drop on M1 Macs.
Rémi Verschelde 4 years ago
parent
commit
7ef143faaf
1 changed files with 14 additions and 10 deletions
  1. 14 10
      platform/osx/os_osx.mm

+ 14 - 10
platform/osx/os_osx.mm

@@ -638,26 +638,30 @@ static const NSRange kEmptyRange = { NSNotFound, 0 };
 
 - (BOOL)performDragOperation:(id<NSDraggingInfo>)sender {
 
+	Vector<String> files;
 	NSPasteboard *pboard = [sender draggingPasteboard];
-#if MAC_OS_X_VERSION_MIN_REQUIRED >= 101400
-	NSArray<NSURL *> *filenames = [pboard propertyListForType:NSPasteboardTypeFileURL];
-#else
-	NSArray *filenames = [pboard propertyListForType:NSFilenamesPboardType];
-#endif
 
-	Vector<String> files;
-	for (NSUInteger i = 0; i < filenames.count; i++) {
 #if MAC_OS_X_VERSION_MIN_REQUIRED >= 101400
-		NSString *ns = [[filenames objectAtIndex:i] path];
+	NSArray *items = pboard.pasteboardItems;
+	for (NSPasteboardItem *item in items) {
+		NSString *path = [item stringForType:NSPasteboardTypeFileURL];
+		NSString *ns = [NSURL URLWithString:path].path;
+		char *utfs = strdup([ns UTF8String]);
+		String ret;
+		ret.parse_utf8(utfs);
+		free(utfs);
+		files.push_back(ret);
+	}
 #else
-		NSString *ns = [filenames objectAtIndex:i];
-#endif
+	NSArray *filenames = [pboard propertyListForType:NSFilenamesPboardType];
+	for (NSString *ns in filenames) {
 		char *utfs = strdup([ns UTF8String]);
 		String ret;
 		ret.parse_utf8(utfs);
 		free(utfs);
 		files.push_back(ret);
 	}
+#endif
 
 	if (files.size()) {
 		OS_OSX::singleton->main_loop->drop_files(files, 0);