aboutsummaryrefslogtreecommitdiffhomepage
path: root/cocoa/ScintillaCocoa.mm
diff options
context:
space:
mode:
Diffstat (limited to 'cocoa/ScintillaCocoa.mm')
-rw-r--r--cocoa/ScintillaCocoa.mm52
1 files changed, 38 insertions, 14 deletions
diff --git a/cocoa/ScintillaCocoa.mm b/cocoa/ScintillaCocoa.mm
index c12bf3efb..884a976d0 100644
--- a/cocoa/ScintillaCocoa.mm
+++ b/cocoa/ScintillaCocoa.mm
@@ -1563,8 +1563,16 @@ NSDragOperation ScintillaCocoa::DraggingUpdated(id <NSDraggingInfo> info) {
[pasteboard.types containsObject: ScintillaRecPboardType])
return (sourceDragMask & NSDragOperationMove) ? NSDragOperationMove : NSDragOperationCopy;
- if ([pasteboard.types containsObject: NSFilenamesPboardType])
- return (sourceDragMask & NSDragOperationGeneric);
+ if (@available(macOS 10.13, *)) {
+ if ([pasteboard.types containsObject: NSPasteboardTypeFileURL])
+ return (sourceDragMask & NSDragOperationGeneric);
+ } else {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ if ([pasteboard.types containsObject: NSFilenamesPboardType])
+ return (sourceDragMask & NSDragOperationGeneric);
+#pragma clang diagnostic pop
+ }
return NSDragOperationNone;
}
@@ -1588,21 +1596,37 @@ void ScintillaCocoa::DraggingExited(id <NSDraggingInfo> info) {
bool ScintillaCocoa::PerformDragOperation(id <NSDraggingInfo> info) {
NSPasteboard *pasteboard = [info draggingPasteboard];
- if ([pasteboard.types containsObject: NSFilenamesPboardType]) {
- NSArray *files = [pasteboard propertyListForType: NSFilenamesPboardType];
- for (NSString* uri in files)
- NotifyURIDropped(uri.UTF8String);
+ if (@available(macOS 10.13, *)) {
+ // NSPasteboardTypeFileURL is available for macOS 10.13+, provides NSURLs
+ if ([pasteboard.types containsObject: NSPasteboardTypeFileURL]) {
+ NSArray *files = [pasteboard readObjectsForClasses:@[NSURL.class] options:nil];
+ for (NSURL *uri in files) {
+ NotifyURIDropped([uri path].UTF8String);
+ }
+ return true;
+ }
} else {
- SelectionText text;
- GetPasteboardData(pasteboard, &text);
+ // Use deprecated NSFilenamesPboardType, provides NSStrings
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ if ([pasteboard.types containsObject: NSFilenamesPboardType]) {
+ NSArray *files = [pasteboard propertyListForType: NSFilenamesPboardType];
+ for (NSString *uri in files) {
+ NotifyURIDropped(uri.UTF8String);
+ }
+ }
+#pragma clang diagnostic pop
+ }
- if (text.Length() > 0) {
- NSDragOperation operation = [info draggingSourceOperationMask];
- bool moving = (operation & NSDragOperationMove) != 0;
+ SelectionText text;
+ GetPasteboardData(pasteboard, &text);
- DropAt(posDrag, text.Data(), text.Length(), moving, text.rectangular);
- };
- }
+ if (text.Length() > 0) {
+ NSDragOperation operation = [info draggingSourceOperationMask];
+ bool moving = (operation & NSDragOperationMove) != 0;
+
+ DropAt(posDrag, text.Data(), text.Length(), moving, text.rectangular);
+ };
return true;
}