From 97a814061e5b6fc26fbfedf2efb859ec2bcf87a1 Mon Sep 17 00:00:00 2001 From: John Scipione Date: Sat, 18 Aug 2012 16:01:31 -0400 Subject: [PATCH] Instead of destroying the BAboutWindow object on close, Hide() it, then on the destructor of the calling window call Quit() explicitly to destroy it. --- headers/private/shared/AboutWindow.h | 3 +-- src/apps/activitymonitor/ActivityView.cpp | 14 ++++---------- src/apps/deskcalc/CalcView.cpp | 14 ++++---------- .../processcontroller/ProcessController.cpp | 14 ++++---------- src/kits/shared/AboutWindow.cpp | 18 ++++-------------- src/preferences/locale/LocalePreflet.cpp | 14 ++++---------- 6 files changed, 21 insertions(+), 56 deletions(-) diff --git a/headers/private/shared/AboutWindow.h b/headers/private/shared/AboutWindow.h index 7c5b789449..423d9f4e1a 100644 --- a/headers/private/shared/AboutWindow.h +++ b/headers/private/shared/AboutWindow.h @@ -17,8 +17,7 @@ class BHandler; class BAboutWindow : public BWindow { public: - BAboutWindow(BHandler* handler, - const char* appName, + BAboutWindow(const char* appName, const char* signature); virtual ~BAboutWindow(); diff --git a/src/apps/activitymonitor/ActivityView.cpp b/src/apps/activitymonitor/ActivityView.cpp index 20113b8a9d..eb78190ed3 100644 --- a/src/apps/activitymonitor/ActivityView.cpp +++ b/src/apps/activitymonitor/ActivityView.cpp @@ -1112,22 +1112,16 @@ ActivityView::MessageReceived(BMessage* message) switch (message->what) { case B_ABOUT_REQUESTED: - { - bool quit = false; - if (message->FindBool("quit", &quit) == B_OK && quit) { - fAboutWindow = NULL; - break; - } - if (fAboutWindow == NULL) { - fAboutWindow = new BAboutWindow(this, kAppName, kSignature); + fAboutWindow = new BAboutWindow(kAppName, kSignature); fAboutWindow->AddCopyright(2008, "Haiku, Inc."); fAboutWindow->Show(); - } else + } else if (fAboutWindow->IsHidden()) + fAboutWindow->Show(); + else fAboutWindow->Activate(); break; - } case kMsgUpdateResolution: { diff --git a/src/apps/deskcalc/CalcView.cpp b/src/apps/deskcalc/CalcView.cpp index 6568a9b479..9c01f30e16 100644 --- a/src/apps/deskcalc/CalcView.cpp +++ b/src/apps/deskcalc/CalcView.cpp @@ -270,13 +270,6 @@ CalcView::MessageReceived(BMessage* message) // (replicant) about box requested case B_ABOUT_REQUESTED: - { - bool quit = false; - if (message->FindBool("quit", &quit) == B_OK && quit) { - fAboutWindow = NULL; - break; - } - if (fAboutWindow == NULL) { // create the about window const char* extraCopyrights[] = { @@ -284,15 +277,16 @@ CalcView::MessageReceived(BMessage* message) NULL }; - fAboutWindow = new BAboutWindow(this, kAppName, kSignature); + fAboutWindow = new BAboutWindow(kAppName, kSignature); fAboutWindow->AddCopyright(2006, "Haiku, Inc.", extraCopyrights); fAboutWindow->Show(); - } else + } else if (fAboutWindow->IsHidden()) + fAboutWindow->Show(); + else fAboutWindow->Activate(); break; - } case MSG_UNFLASH_KEY: { diff --git a/src/apps/processcontroller/ProcessController.cpp b/src/apps/processcontroller/ProcessController.cpp index 660ff2497b..66bc517e41 100644 --- a/src/apps/processcontroller/ProcessController.cpp +++ b/src/apps/processcontroller/ProcessController.cpp @@ -426,13 +426,6 @@ ProcessController::MessageReceived(BMessage *message) } case B_ABOUT_REQUESTED: - { - bool quit = false; - if (message->FindBool("quit", &quit) == B_OK && quit) { - fAboutWindow = NULL; - break; - } - if (fAboutWindow == NULL) { const char* extraCopyrights[] = { "1997-2001 Georges-Edouard Berenger", @@ -444,16 +437,17 @@ ProcessController::MessageReceived(BMessage *message) NULL }; - fAboutWindow = new BAboutWindow(this, + fAboutWindow = new BAboutWindow( B_TRANSLATE_SYSTEM_NAME("ProcessController"), kSignature); fAboutWindow->AddCopyright(2007, "Haiku, Inc.", extraCopyrights); fAboutWindow->AddAuthors(authors); fAboutWindow->Show(); - } else + } else if (fAboutWindow->IsHidden()) + fAboutWindow->Show(); + else fAboutWindow->Activate(); break; - } default: BView::MessageReceived(message); diff --git a/src/kits/shared/AboutWindow.cpp b/src/kits/shared/AboutWindow.cpp index c22b72d77d..696fb17388 100644 --- a/src/kits/shared/AboutWindow.cpp +++ b/src/kits/shared/AboutWindow.cpp @@ -254,11 +254,10 @@ AboutView::AppIcon(const char* signature) // #pragma mark - -BAboutWindow::BAboutWindow(BHandler* handler, const char* appName, const char* signature) +BAboutWindow::BAboutWindow(const char* appName, const char* signature) : BWindow(BRect(0.0, 0.0, 200.0, 140.0), appName, B_TITLED_WINDOW, B_ASYNCHRONOUS_CONTROLS | B_NOT_ZOOMABLE | B_NOT_RESIZABLE - | B_AUTO_UPDATE_SIZE_LIMITS), - fCaller(handler) + | B_AUTO_UPDATE_SIZE_LIMITS) { _Init(appName, signature); } @@ -275,18 +274,9 @@ BAboutWindow::~BAboutWindow() bool BAboutWindow::QuitRequested() { - if (fCaller != NULL) { - status_t status; - BMessenger messenger(fCaller, NULL, &status); - if (status == B_OK && messenger.IsValid()) { - BMessage* message = new BMessage(B_ABOUT_REQUESTED); - message->AddBool("quit", true); - messenger.SendMessage(message); - delete message; - } - } + Hide(); - return true; + return false; } diff --git a/src/preferences/locale/LocalePreflet.cpp b/src/preferences/locale/LocalePreflet.cpp index d8945f27ef..d71b26be72 100644 --- a/src/preferences/locale/LocalePreflet.cpp +++ b/src/preferences/locale/LocalePreflet.cpp @@ -73,13 +73,6 @@ LocalePreflet::MessageReceived(BMessage* message) break; case B_ABOUT_REQUESTED: - { - bool quit = false; - if (message->FindBool("quit", &quit) == B_OK && quit) { - fAboutWindow = NULL; - break; - } - if (fAboutWindow == NULL) { const char* authors[] = { "Axel Dörfler", @@ -88,15 +81,16 @@ LocalePreflet::MessageReceived(BMessage* message) NULL }; - fAboutWindow = new BAboutWindow(this, kAppName, kSignature); + fAboutWindow = new BAboutWindow(kAppName, kSignature); fAboutWindow->AddCopyright(2005, "Haiku, Inc."); fAboutWindow->AddAuthors(authors); fAboutWindow->Show(); - } else + } else if (fAboutWindow->IsHidden()) + fAboutWindow->Show(); + else fAboutWindow->Activate(); break; - } default: BApplication::MessageReceived(message);