|
|
|
@ -51,7 +51,6 @@ |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
#if MAC_OS_X_VERSION_MAX_ALLOWED < 101300 |
|
|
|
|
#define NSPasteboardTypeFileURL NSFilenamesPboardType |
|
|
|
|
#define NSPasteboardTypeString NSStringPboardType |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
@ -442,8 +441,9 @@ static const NSRange kEmptyRange = { NSNotFound, 0 }; |
|
|
|
|
markedText = [[NSMutableAttributedString alloc] init]; |
|
|
|
|
|
|
|
|
|
[self updateTrackingAreas]; |
|
|
|
|
[self registerForDraggedTypes:[NSArray arrayWithObjects: |
|
|
|
|
NSPasteboardTypeFileURL, nil]]; |
|
|
|
|
// NOTE: kUTTypeURL corresponds to NSPasteboardTypeURL but is available |
|
|
|
|
// on 10.7 without having been deprecated yet |
|
|
|
|
[self registerForDraggedTypes:@[(__bridge NSString*) kUTTypeURL]]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return self; |
|
|
|
@ -713,45 +713,33 @@ static const NSRange kEmptyRange = { NSNotFound, 0 }; |
|
|
|
|
|
|
|
|
|
- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender |
|
|
|
|
{ |
|
|
|
|
if ((NSDragOperationGeneric & [sender draggingSourceOperationMask]) |
|
|
|
|
== NSDragOperationGeneric) |
|
|
|
|
{ |
|
|
|
|
[self setNeedsDisplay:YES]; |
|
|
|
|
return NSDragOperationGeneric; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return NSDragOperationNone; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
- (BOOL)prepareForDragOperation:(id <NSDraggingInfo>)sender |
|
|
|
|
{ |
|
|
|
|
[self setNeedsDisplay:YES]; |
|
|
|
|
return YES; |
|
|
|
|
// HACK: We don't know what to say here because we don't know what the |
|
|
|
|
// application wants to do with the paths |
|
|
|
|
return NSDragOperationGeneric; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender |
|
|
|
|
{ |
|
|
|
|
NSPasteboard* pasteboard = [sender draggingPasteboard]; |
|
|
|
|
NSArray* files = [pasteboard propertyListForType:NSPasteboardTypeFileURL]; |
|
|
|
|
|
|
|
|
|
const NSRect contentRect = [window->ns.view frame]; |
|
|
|
|
_glfwInputCursorPos(window, |
|
|
|
|
[sender draggingLocation].x, |
|
|
|
|
contentRect.size.height - [sender draggingLocation].y); |
|
|
|
|
|
|
|
|
|
const NSUInteger count = [files count]; |
|
|
|
|
NSPasteboard* pasteboard = [sender draggingPasteboard]; |
|
|
|
|
NSDictionary* options = @{NSPasteboardURLReadingFileURLsOnlyKey:@YES}; |
|
|
|
|
NSArray* urls = [pasteboard readObjectsForClasses:@[[NSURL class]] |
|
|
|
|
options:options]; |
|
|
|
|
const NSUInteger count = [urls count]; |
|
|
|
|
if (count) |
|
|
|
|
{ |
|
|
|
|
NSEnumerator* e = [files objectEnumerator]; |
|
|
|
|
char** paths = calloc(count, sizeof(char*)); |
|
|
|
|
NSUInteger i; |
|
|
|
|
|
|
|
|
|
for (i = 0; i < count; i++) |
|
|
|
|
paths[i] = _glfw_strdup([[e nextObject] UTF8String]); |
|
|
|
|
for (NSUInteger i = 0; i < count; i++) |
|
|
|
|
paths[i] = _glfw_strdup([[urls objectAtIndex:i] fileSystemRepresentation]); |
|
|
|
|
|
|
|
|
|
_glfwInputDrop(window, (int) count, (const char**) paths); |
|
|
|
|
|
|
|
|
|
for (i = 0; i < count; i++) |
|
|
|
|
for (NSUInteger i = 0; i < count; i++) |
|
|
|
|
free(paths[i]); |
|
|
|
|
free(paths); |
|
|
|
|
} |
|
|
|
@ -759,11 +747,6 @@ static const NSRange kEmptyRange = { NSNotFound, 0 }; |
|
|
|
|
return YES; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
- (void)concludeDragOperation:(id <NSDraggingInfo>)sender |
|
|
|
|
{ |
|
|
|
|
[self setNeedsDisplay:YES]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
- (BOOL)hasMarkedText |
|
|
|
|
{ |
|
|
|
|
return [markedText length] > 0; |
|
|
|
|