[macOS] Adds ability to open files with "Open With" or double-click from Finder

This commit is contained in:
bruvzg 2018-01-12 16:38:19 +02:00
parent baef1e71c7
commit f0029fd3c6
No known key found for this signature in database
GPG Key ID: 89DD917D9CE4218D
3 changed files with 33 additions and 1 deletions

View File

@ -82,8 +82,17 @@ int main(int argc, char **argv) {
#endif
OS_OSX os;
Error err;
if (os.open_with_filename != "") {
char *argv_c = (char *)malloc(os.open_with_filename.utf8().size());
memcpy(argv_c, os.open_with_filename.utf8().get_data(), os.open_with_filename.utf8().size());
err = Main::setup(argv[0], 1, &argv_c);
free(argv_c);
} else {
err = Main::setup(argv[0], argc - first_arg, &argv[first_arg]);
}
Error err = Main::setup(argv[0], argc - first_arg, &argv[first_arg]);
if (err != OK)
return 255;

View File

@ -115,6 +115,8 @@ public:
Size2 window_size;
Rect2 restore_rect;
String open_with_filename;
Point2 im_position;
ImeCallback im_callback;
void *im_target;

View File

@ -144,6 +144,13 @@ static Vector2 get_mouse_pos(NSEvent *event) {
@implementation GodotApplicationDelegate
- (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename {
// Note: called before main loop init!
char *utfs = strdup([filename UTF8String]);
OS_OSX::singleton->open_with_filename.parse_utf8(utfs);
return YES;
}
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender {
if (OS_OSX::singleton->get_main_loop())
OS_OSX::singleton->get_main_loop()->notification(MainLoop::NOTIFICATION_WM_QUIT_REQUEST);
@ -2322,6 +2329,20 @@ OS_OSX::OS_OSX() {
Vector<Logger *> loggers;
loggers.push_back(memnew(OSXTerminalLogger));
_set_logger(memnew(CompositeLogger(loggers)));
//process application:openFile: event
while (true) {
NSEvent *event = [NSApp
nextEventMatchingMask:NSEventMaskAny
untilDate:[NSDate distantPast]
inMode:NSDefaultRunLoopMode
dequeue:YES];
if (event == nil)
break;
[NSApp sendEvent:event];
}
}
bool OS_OSX::_check_internal_feature_support(const String &p_feature) {