From 476bf8d263b8459ab2b58af34af0de2d3a0c4147 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Wed, 3 Jun 2020 21:13:51 +0200 Subject: [PATCH] app/internal/window: [macOS] only terminate app when last window closes Updates #19 Signed-off-by: Elias Naur --- app/internal/window/os_macos.go | 8 ++++++-- app/internal/window/os_macos.m | 9 +++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/app/internal/window/os_macos.go b/app/internal/window/os_macos.go index 0da020bf..2e915200 100644 --- a/app/internal/window/os_macos.go +++ b/app/internal/window/os_macos.go @@ -39,6 +39,7 @@ __attribute__ ((visibility ("hidden"))) CFTypeRef gio_readClipboard(void); __attribute__ ((visibility ("hidden"))) void gio_writeClipboard(unichar *chars, NSUInteger length); __attribute__ ((visibility ("hidden"))) void gio_setNeedsDisplay(CFTypeRef viewRef); __attribute__ ((visibility ("hidden"))) void gio_makeKeyAndOrderFront(CFTypeRef viewRef); +__attribute__ ((visibility ("hidden"))) void gio_appTerminate(void); */ import "C" @@ -239,12 +240,15 @@ func configFor(scale float32) config { } } -//export gio_onTerminate -func gio_onTerminate(view C.CFTypeRef) { +//export gio_onClose +func gio_onClose(view C.CFTypeRef) { w := mustView(view) w.displayLink.Close() deleteView(view) w.w.Event(system.DestroyEvent{}) + if len(viewMap) == 0 { + C.gio_appTerminate() + } } //export gio_onHide diff --git a/app/internal/window/os_macos.m b/app/internal/window/os_macos.m index 420e70e5..bd7fb6e3 100644 --- a/app/internal/window/os_macos.m +++ b/app/internal/window/os_macos.m @@ -50,8 +50,7 @@ - (void)windowWillClose:(NSNotification *)notification { NSWindow *window = (NSWindow *)[notification object]; window.delegate = nil; - gio_onTerminate((__bridge CFTypeRef)window.contentView); - [NSApp terminate:nil]; + gio_onClose((__bridge CFTypeRef)window.contentView); } @end @@ -151,6 +150,12 @@ void gio_makeKeyAndOrderFront(CFTypeRef viewRef) { [view.window makeKeyAndOrderFront:nil]; } +void gio_appTerminate(void) { + @autoreleasepool { + [NSApp terminate:nil]; + } +} + void gio_main(CFTypeRef viewRef, const char *title, CGFloat width, CGFloat height) { @autoreleasepool { [NSApplication sharedApplication];