diff --git a/v2/internal/frontend/desktop/darwin/WailsContext.h b/v2/internal/frontend/desktop/darwin/WailsContext.h index 022338c5..62e92bd7 100644 --- a/v2/internal/frontend/desktop/darwin/WailsContext.h +++ b/v2/internal/frontend/desktop/darwin/WailsContext.h @@ -10,6 +10,7 @@ #import #import +#import #define ON_MAIN_THREAD(str) dispatch_async(dispatch_get_main_queue(), ^{ str; }); #define unicode(input) [NSString stringWithFormat:@"%C", input] @@ -76,6 +77,7 @@ - (NSScreen*) getCurrentScreen; - (void) SetAbout :(NSString*)title :(NSString*)description :(void*)imagedata :(int)datalen; +- (void) dealloc; @end diff --git a/v2/internal/frontend/desktop/darwin/WailsContext.m b/v2/internal/frontend/desktop/darwin/WailsContext.m index 9a82a9b1..31dbaebb 100644 --- a/v2/internal/frontend/desktop/darwin/WailsContext.m +++ b/v2/internal/frontend/desktop/darwin/WailsContext.m @@ -98,13 +98,13 @@ } - (void) dealloc { - [super dealloc]; [self.appdelegate release]; [self.mainWindow release]; [self.mouseEvent release]; [self.userContentController release]; [self.urlRequests release]; [self.applicationMenu release]; + [super dealloc]; } - (NSScreen*) getCurrentScreen { @@ -278,7 +278,7 @@ } - (NSMenu*) newMenu :(NSString*)title { - WailsMenu *result = [[[WailsMenu new] initWithTitle:title] autorelease]; + WailsMenu *result = [[WailsMenu new] initWithTitle:title]; [result setAutoenablesItems:NO]; return result; } @@ -376,15 +376,15 @@ - (void) processURLResponse:(NSString *)url :(NSString *)contentType :(NSData *)data { id urlSchemeTask = self.urlRequests[url]; NSURL *nsurl = [NSURL URLWithString:url]; - - NSHTTPURLResponse *response = [NSHTTPURLResponse new]; NSMutableDictionary *headerFields = [NSMutableDictionary new]; headerFields[@"content-type"] = contentType; - [response initWithURL:nsurl statusCode:200 HTTPVersion:@"HTTP/1.1" headerFields:headerFields]; + NSHTTPURLResponse *response = [[NSHTTPURLResponse new] initWithURL:nsurl statusCode:200 HTTPVersion:@"HTTP/1.1" headerFields:headerFields]; [urlSchemeTask didReceiveResponse:response]; [urlSchemeTask didReceiveData:data]; [urlSchemeTask didFinish]; [self.urlRequests removeObjectForKey:url]; + [response release]; + [headerFields release]; } - (void)webView:(nonnull WKWebView *)webView startURLSchemeTask:(nonnull id)urlSchemeTask { @@ -492,11 +492,20 @@ // Filters - semicolon delimited list of file extensions if( allowFiles ) { - if( filters != nil ) { + if( filters != nil && [filters length] > 0) { filters = [filters stringByReplacingOccurrencesOfString:@"*." withString:@""]; filters = [filters stringByReplacingOccurrencesOfString:@" " withString:@""]; NSArray *filterList = [filters componentsSeparatedByString:@";"]; - [dialog setAllowedFileTypes:filterList]; + if (@available(macOS 10.16, *)) { + NSMutableArray *contentTypes = [[NSMutableArray new] autorelease]; + for (NSString *filter in filterList) { + UTType *t = [UTType typeWithFilenameExtension:filter]; + [contentTypes addObject:t]; + } + [dialog setAllowedContentTypes:contentTypes]; + } else { + [dialog setAllowedFileTypes:filterList]; + } } else { [dialog setAllowsOtherFileTypes:true]; } diff --git a/v2/internal/frontend/desktop/darwin/WailsMenu.m b/v2/internal/frontend/desktop/darwin/WailsMenu.m index 7b20eb23..45adfd0d 100644 --- a/v2/internal/frontend/desktop/darwin/WailsMenu.m +++ b/v2/internal/frontend/desktop/darwin/WailsMenu.m @@ -64,7 +64,7 @@ if( appName == nil ) { appName = [[NSProcessInfo processInfo] processName]; } - WailsMenu *appMenu = [[WailsMenu new] initWithNSTitle:appName]; + WailsMenu *appMenu = [[[WailsMenu new] initWithNSTitle:appName] autorelease]; id quitTitle = [@"Quit " stringByAppendingString:appName]; NSMenuItem* quitMenuItem = [self newMenuItem:quitTitle :@selector(Quit) :@"q" :NSEventModifierFlagCommand]; quitMenuItem.target = ctx; @@ -77,7 +77,7 @@ } case EditMenu: { - WailsMenu *editMenu = [[WailsMenu new] initWithNSTitle:@"Edit"]; + WailsMenu *editMenu = [[[WailsMenu new] initWithNSTitle:@"Edit"] autorelease]; [editMenu addItem:[self newMenuItem:@"Undo" :@selector(undoActionName) :@"z" :NSEventModifierFlagCommand]]; [editMenu addItem:[self newMenuItem:@"Redo" :@selector(redoActionName) :@"z" :(NSEventModifierFlagShift | NSEventModifierFlagCommand)]]; [editMenu addItem:[NSMenuItem separatorItem]]; @@ -91,7 +91,7 @@ // NSMenuItem *speechMenuItem = [[NSMenuItem new] autorelease]; // [speechMenuItem setTitle:@"Speech"]; // [editMenu addItem:speechMenuItem]; - WailsMenu *speechMenu = [[WailsMenu new] initWithNSTitle:@"Speech"]; + WailsMenu *speechMenu = [[[WailsMenu new] initWithNSTitle:@"Speech"] autorelease]; [speechMenu addItem:[self newMenuItem:@"Start Speaking" :@selector(startSpeaking:) :@""]]; [speechMenu addItem:[self newMenuItem:@"Stop Speaking" :@selector(stopSpeaking:) :@""]]; [editMenu appendSubmenu:speechMenu]; diff --git a/v2/internal/frontend/desktop/darwin/frontend.go b/v2/internal/frontend/desktop/darwin/frontend.go index 141d661c..4f7403b9 100644 --- a/v2/internal/frontend/desktop/darwin/frontend.go +++ b/v2/internal/frontend/desktop/darwin/frontend.go @@ -5,7 +5,7 @@ package darwin /* #cgo CFLAGS: -x objective-c -#cgo LDFLAGS: -framework Foundation -framework Cocoa -framework WebKit +#cgo LDFLAGS: -framework Foundation -framework Cocoa -framework WebKit -framework UniformTypeIdentifiers #import #import "Application.h" #import "WailsContext.h"