//go:build darwin #import #import #import "webview_drag.h" #import "../events/events.h" extern void processDragItems(unsigned int windowId, char** arr, int length); @implementation WebviewDrag - (instancetype)initWithFrame:(NSRect)frameRect { self = [super initWithFrame:frameRect]; if (self) { [self registerForDraggedTypes:@[NSFilenamesPboardType]]; } return self; } - (NSDragOperation)draggingEntered:(id)sender { NSPasteboard *pasteboard = [sender draggingPasteboard]; if ([[pasteboard types] containsObject:NSFilenamesPboardType]) { processWindowEvent(self.windowId, EventWebViewDraggingEntered); return NSDragOperationCopy; } return NSDragOperationNone; } - (NSDragOperation)draggingExited:(id)sender { NSLog(@"I am here!!!!"); return NSDragOperationCopy; } - (BOOL)prepareForDragOperation:(id)sender { return YES; } - (BOOL)performDragOperation:(id)sender { NSPasteboard *pasteboard = [sender draggingPasteboard]; if ([[pasteboard types] containsObject:NSFilenamesPboardType]) { NSArray *files = [pasteboard propertyListForType:NSFilenamesPboardType]; NSUInteger count = [files count]; char** cArray = (char**)malloc(count * sizeof(char*)); for (NSUInteger i = 0; i < count; i++) { NSString* str = files[i]; cArray[i] = (char*)[str UTF8String]; } processDragItems(self.windowId, cArray, (int)count); free(cArray); return YES; } return NO; } @end