Browse Source

Make macOS open file dialog truly async

pull/349/head
falkTX 3 years ago
parent
commit
62996d5578
1 changed files with 15 additions and 12 deletions
  1. +15
    -12
      dgl/src/pugl.cpp

+ 15
- 12
dgl/src/pugl.cpp View File

@@ -539,8 +539,8 @@ bool puglMacOSFilePanelOpen(PuglView* const view,
NSOpenPanel* const panel = [NSOpenPanel openPanel];

[panel setAllowsMultipleSelection:NO];
[panel setCanChooseFiles:YES];
[panel setCanChooseDirectories:NO];
[panel setCanChooseFiles:YES];
[panel setDirectoryURL:[NSURL fileURLWithPath:[NSString stringWithUTF8String:startDir]]];

// TODO file filter using allowedContentTypes: [UTType]
@@ -556,19 +556,22 @@ bool puglMacOSFilePanelOpen(PuglView* const view,
encoding:NSUTF8StringEncoding];
[panel setTitle:titleString];

[panel beginSheetModalForWindow:(impl->window ? impl->window : [view->impl->wrapperView window])
completionHandler:^(NSInteger result)
dispatch_async(dispatch_get_main_queue(), ^
{
if (result == NSModalResponseOK && [[panel URL] isFileURL])
{
NSString* const path = [[panel URL] path];
callback(view, [path UTF8String]);
}
else
[panel beginSheetModalForWindow:(impl->window ? impl->window : [view->impl->wrapperView window])
completionHandler:^(NSModalResponse result)
{
callback(view, nullptr);
}
}];
if (result == NSModalResponseOK && [[panel URL] isFileURL])
{
NSString* const path = [[panel URL] path];
callback(view, [path UTF8String]);
}
else
{
callback(view, nullptr);
}
}];
});

return true;
}


Loading…
Cancel
Save