瀏覽代碼

Implemented file drop support in OSX

Juan Linietsky 9 年之前
父節點
當前提交
344a39dafd
共有 1 個文件被更改,包括 38 次插入1 次删除
  1. 38 1
      platform/osx/os_osx.mm

+ 38 - 1
platform/osx/os_osx.mm

@@ -291,16 +291,52 @@ static int button_mask=0;
     self = [super init];
     trackingArea = nil;
     [self updateTrackingAreas];
-
+    [self registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]];
     return self;
 }
 
+
 -(void)dealloc
 {
     [trackingArea release];
     [super dealloc];
 }
 
+- (NSDragOperation)draggingEntered:(id < NSDraggingInfo >)sender {
+    return NSDragOperationCopy;
+}
+
+- (NSDragOperation)draggingUpdated:(id<NSDraggingInfo>)sender {
+    return NSDragOperationCopy;
+}
+
+- (BOOL)performDragOperation:(id<NSDraggingInfo>)sender {
+
+
+    NSPasteboard *pboard = [sender draggingPasteboard];
+    NSArray *filenames = [pboard propertyListForType:NSFilenamesPboardType];
+
+    Vector<String> files;
+    for(int i=0;i<filenames.count;i++) {
+	    NSString *ns = [filenames objectAtIndex:i];
+	    char *utfs = strdup([ns UTF8String]);
+	    String ret;
+	    ret.parse_utf8(utfs);
+	    free(utfs);
+	    files.push_back(ret);
+
+
+    }
+
+    if (files.size()) {
+	    OS_OSX::singleton->main_loop->drop_files(files,0);
+	    OS_OSX::singleton->move_window_to_foreground();
+    }
+
+    return NO;
+}
+
+
 - (BOOL)isOpaque
 {
     return YES;
@@ -833,6 +869,7 @@ static int translateKey(unsigned int key)
 
 @implementation GodotWindow
 
+
 - (BOOL)canBecomeKeyWindow
 {
     // Required for NSBorderlessWindowMask windows