diff --git a/src/apps/terminal/TermApp.cpp b/src/apps/terminal/TermApp.cpp index cf5859f020..0e2fec6bc1 100644 --- a/src/apps/terminal/TermApp.cpp +++ b/src/apps/terminal/TermApp.cpp @@ -138,6 +138,25 @@ TermApp::ReadyToRun() } +bool +TermApp::QuitRequested() +{ + // check whether the system is shutting down + BMessage* message = CurrentMessage(); + bool shutdown; + if (message != NULL && message->FindBool("_shutdown_", &shutdown) == B_OK + && shutdown) { + // The system is shutting down. Quit the window synchronously. This + // skips the checks for running processes and the "Are you sure..." + // alert. + if (fTermWindow->Lock()) + fTermWindow->Quit(); + } + + return BApplication::QuitRequested(); +} + + void TermApp::Quit() { diff --git a/src/apps/terminal/TermApp.h b/src/apps/terminal/TermApp.h index 0fbdc2b35f..05d744ef1a 100644 --- a/src/apps/terminal/TermApp.h +++ b/src/apps/terminal/TermApp.h @@ -49,12 +49,13 @@ public: virtual ~TermApp(); protected: - void ReadyToRun(); - void Quit(); - void AboutRequested(); - void MessageReceived(BMessage* message); - void RefsReceived(BMessage* message); - void ArgvReceived(int32 argc, char** argv); + virtual void ReadyToRun(); + virtual bool QuitRequested(); + virtual void Quit(); + virtual void AboutRequested(); + virtual void MessageReceived(BMessage* message); + virtual void RefsReceived(BMessage* message); + virtual void ArgvReceived(int32 argc, char** argv); private: status_t _MakeTermWindow(BRect& frame,