diff --git a/uppsrc/CtrlCore/CocoApp.mm b/uppsrc/CtrlCore/CocoApp.mm index f2d2467ea..66d36fa59 100644 --- a/uppsrc/CtrlCore/CocoApp.mm +++ b/uppsrc/CtrlCore/CocoApp.mm @@ -45,6 +45,11 @@ NSMenu *Cocoa_DockMenu(); Upp::Ctrl::PostReSkin(); } +- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender { + Upp::GuiLock __; + Upp::TopWindow::ShutdownWindows(); + return NSTerminateCancel; +} @end diff --git a/uppsrc/CtrlCore/TopWindow.cpp b/uppsrc/CtrlCore/TopWindow.cpp index 42957b63a..aa87bca02 100644 --- a/uppsrc/CtrlCore/TopWindow.cpp +++ b/uppsrc/CtrlCore/TopWindow.cpp @@ -500,12 +500,15 @@ void TopWindow::ShutdownWindows() again = false; for(int i = 0; i < tc.GetCount(); i++) { Ptr w = dynamic_cast(tc[i]); - if(w && w->IsOpen() && w->IsEnabled()) { + if(w && w->IsOpen()) { again = true; w->SetForeground(); w->ShutdownWindow(); - if(w && w->IsOpen()) + if(w && w->IsOpen()) { w->WhenClose(); + if(w) + w->Close(); + } if(!w || !w->IsOpen()) break; }