5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-05 05:09:07 +08:00

fix: terminate app on window close

This commit is contained in:
Lea Anthony 2021-02-27 14:49:44 +11:00
parent 198d206c46
commit bffc15bc14
No known key found for this signature in database
GPG Key ID: 33DAF7BB90A58405

View File

@ -1177,13 +1177,19 @@ void createDelegate(struct Application *app) {
bool windowShouldClose(id self, SEL cmd, id sender) { bool windowShouldClose(id self, SEL cmd, id sender) {
msg(sender, s("orderBack:")); msg(sender, s("orderBack:"));
return false; return false;
} }
bool windowShouldExit(id self, SEL cmd, id sender) {
msg(sender, s("orderBack:"));
messageFromWindowCallback("WC");
return false;
}
void createMainWindow(struct Application *app) { void createMainWindow(struct Application *app) {
// Create main window // Create main window
id mainWindow = ALLOC("NSWindow"); id mainWindow = ALLOC("NSWindow");
mainWindow = msg(mainWindow, s("initWithContentRect:styleMask:backing:defer:"), mainWindow = msg(mainWindow, s("initWithContentRect:styleMask:backing:defer:"),
CGRectMake(0, 0, app->width, app->height), app->decorations, NSBackingStoreBuffered, NO); CGRectMake(0, 0, app->width, app->height), app->decorations, NSBackingStoreBuffered, NO);
msg(mainWindow, s("autorelease")); msg(mainWindow, s("autorelease"));
// Set Appearance // Set Appearance
@ -1197,14 +1203,16 @@ void createMainWindow(struct Application *app) {
msg(mainWindow, s("setTitlebarAppearsTransparent:"), app->titlebarAppearsTransparent ? YES : NO); msg(mainWindow, s("setTitlebarAppearsTransparent:"), app->titlebarAppearsTransparent ? YES : NO);
msg(mainWindow, s("setTitleVisibility:"), app->hideTitle); msg(mainWindow, s("setTitleVisibility:"), app->hideTitle);
if( app->hideWindowOnClose ) { // Create window delegate to override windowShouldClose
// Create window delegate to override windowShouldClose Class delegateClass = objc_allocateClassPair((Class) c("NSObject"), "WindowDelegate", 0);
Class delegateClass = objc_allocateClassPair((Class) c("NSObject"), "WindowDelegate", 0); bool resultAddProtoc = class_addProtocol(delegateClass, objc_getProtocol("NSWindowDelegate"));
bool resultAddProtoc = class_addProtocol(delegateClass, objc_getProtocol("NSWindowDelegate")); if( app->hideWindowOnClose ) {
class_replaceMethod(delegateClass, s("windowShouldClose:"), (IMP) windowShouldClose, "v@:@"); class_replaceMethod(delegateClass, s("windowShouldClose:"), (IMP) windowShouldClose, "v@:@");
app->windowDelegate = msg((id)delegateClass, s("new")); } else {
msg(mainWindow, s("setDelegate:"), app->windowDelegate); class_replaceMethod(delegateClass, s("windowShouldClose:"), (IMP) windowShouldExit, "v@:@");
} }
app->windowDelegate = msg((id)delegateClass, s("new"));
msg(mainWindow, s("setDelegate:"), app->windowDelegate);
app->mainWindow = mainWindow; app->mainWindow = mainWindow;
} }