From 828481a3c84a9321682d3cce2e9845a887b40fe2 Mon Sep 17 00:00:00 2001 From: BusinessmanProgrammerSteve Date: Mon, 19 Apr 2010 06:03:21 +0000 Subject: [PATCH] Fix window closing behavior, remove (bug 151) --- src/Menus.cpp | 1 + src/Project.cpp | 24 ++++++++++++++---------- src/Project.h | 3 +++ src/prefs/GUIPrefs.cpp | 12 ------------ 4 files changed, 18 insertions(+), 22 deletions(-) diff --git a/src/Menus.cpp b/src/Menus.cpp index 9b0f95f66..0eb2abbc4 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -2717,6 +2717,7 @@ void AudacityProject::OnOpen() void AudacityProject::OnClose() { + mMenuClose = true; Close(); } diff --git a/src/Project.cpp b/src/Project.cpp index 37b80dda8..122833cf3 100644 --- a/src/Project.cpp +++ b/src/Project.cpp @@ -760,7 +760,8 @@ AudacityProject::AudacityProject(wxWindow * parent, wxWindowID id, mWantSaveCompressed(false), mLastEffect(NULL), mLastEffectType(0), - mTimerRecordCanceled(false) + mTimerRecordCanceled(false), + mMenuClose(false) { int widths[] = {-1, 130}; mStatusBar = CreateStatusBar(2); @@ -1898,13 +1899,15 @@ void AudacityProject::OnCloseWindow(wxCloseEvent & event) mLastFocusedWindow = NULL; mIsDeleting = true; + // Mac: we never quit as the result of a close. + // Other systems: we quit only when the close is the result of an external + // command (on Windows, those are taskbar closes, "X" box, Alt+F4, etc.) bool quitOnClose; #ifdef __WXMAC__ - bool defaultQuitOnClose = false; + quitOnClose = false; #else - bool defaultQuitOnClose = true; + quitOnClose = !mMenuClose; #endif - gPrefs->Read(wxT("/GUI/QuitOnClose"), &quitOnClose, defaultQuitOnClose); // DanH: If we're definitely about to quit, delete the clipboard. // Doing this after Deref'ing the DirManager causes problems. @@ -2012,14 +2015,15 @@ void AudacityProject::OnCloseWindow(wxCloseEvent & event) // common menu. wxGetApp().mLogger->Show(false); - if (quitOnClose) - QuitAudacity(); - else { #if !defined(__WXMAC__) - wxGetApp().SetWindowRectAlreadySaved(FALSE); - CreateNewAudacityProject(); -#endif + if (quitOnClose) { + QuitAudacity(); } + else { + wxGetApp().SetWindowRectAlreadySaved(FALSE); + CreateNewAudacityProject(); + } +#endif } Destroy(); diff --git a/src/Project.h b/src/Project.h index 2ce360804..3b5c31f9c 100644 --- a/src/Project.h +++ b/src/Project.h @@ -557,6 +557,9 @@ class AUDACITY_DLL_API AudacityProject: public wxFrame, //flag for cancellation of timer record. bool mTimerRecordCanceled; + // Are we currently closing as the result of a menu command? + bool mMenuClose; + public: DECLARE_EVENT_TABLE() }; diff --git a/src/prefs/GUIPrefs.cpp b/src/prefs/GUIPrefs.cpp index a6539c164..08f279c8e 100644 --- a/src/prefs/GUIPrefs.cpp +++ b/src/prefs/GUIPrefs.cpp @@ -78,15 +78,6 @@ void GUIPrefs::Populate() // ----------------------- End of main section -------------- } -// Code duplication warning: this default is repeated in Project.cpp -// in the destructor. -DMM -#ifdef __WXMAC__ - const bool bQuitOnCloseDefault = false; -#else - const bool bQuitOnCloseDefault = true; -#endif -// End code duplication warning - void GUIPrefs::PopulateOrExchange(ShuttleGui & S) { S.SetBorder(2); @@ -131,9 +122,6 @@ void GUIPrefs::PopulateOrExchange(ShuttleGui & S) S.StartStatic(_("Behaviors")); { - S.TieCheckBox(_("Closing last window &quits Audacity"), - wxT("/GUI/QuitOnClose"), - bQuitOnCloseDefault); S.TieCheckBox(_("&Beep on completion of longer activities"), wxT("/GUI/BeepOnCompletion"), false);