From d0e9fa680eae3e69a2d4dff26dbf3e47ad7c9727 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Wed, 7 Jun 2006 13:51:33 +0000 Subject: [PATCH] * Fixed some memory leaks when using the BMessageRunners. * Now quits the window directly, instead of letting the application destructor do that. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17756 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/bin/screen_blanker/ScreenBlanker.cpp | 25 +++++++++++++------- src/bin/screen_blanker/ScreenSaverWindow.cpp | 5 +++- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/bin/screen_blanker/ScreenBlanker.cpp b/src/bin/screen_blanker/ScreenBlanker.cpp index a3b28f62f4..198f828de9 100644 --- a/src/bin/screen_blanker/ScreenBlanker.cpp +++ b/src/bin/screen_blanker/ScreenBlanker.cpp @@ -137,7 +137,9 @@ void ScreenBlanker::_QueueResumeScreenSaver() { delete fResumeRunner; - fResumeRunner = new BMessageRunner(BMessenger(this), new BMessage(kMsgResumeSaver), + + BMessage resume(kMsgResumeSaver); + fResumeRunner = new BMessageRunner(BMessenger(this), &resume, fSettings.BlankTime(), 1); if (fResumeRunner->InitCheck() != B_OK) syslog(LOG_ERR, "resume screen saver runner failed\n"); @@ -178,22 +180,25 @@ ScreenBlanker::_QueueTurnOffScreen() // start them off again if (flags & ENABLE_DPMS_STAND_BY) { - fStandByScreenRunner = new BMessageRunner(BMessenger(this), - new BMessage(kMsgStandByScreen), fSettings.StandByTime(), 1); + BMessage dpms(kMsgStandByScreen); + fStandByScreenRunner = new BMessageRunner(BMessenger(this), &dpms, + fSettings.StandByTime(), 1); if (fStandByScreenRunner->InitCheck() != B_OK) syslog(LOG_ERR, "standby screen saver runner failed\n"); } if (flags & ENABLE_DPMS_SUSPEND) { - fSuspendScreenRunner = new BMessageRunner(BMessenger(this), - new BMessage(kMsgSuspendScreen), fSettings.SuspendTime(), 1); + BMessage dpms(kMsgSuspendScreen); + fSuspendScreenRunner = new BMessageRunner(BMessenger(this), &dpms, + fSettings.SuspendTime(), 1); if (fSuspendScreenRunner->InitCheck() != B_OK) syslog(LOG_ERR, "turn off screen saver runner failed\n"); } if (flags & ENABLE_DPMS_OFF) { - fTurnOffScreenRunner = new BMessageRunner(BMessenger(this), - new BMessage(kMsgTurnOffScreen), fSettings.OffTime(), 1); + BMessage dpms(kMsgTurnOffScreen); + fTurnOffScreenRunner = new BMessageRunner(BMessenger(this), &dpms, + fSettings.OffTime(), 1); if (fTurnOffScreenRunner->InitCheck() != B_OK) syslog(LOG_ERR, "turn off screen saver runner failed\n"); } @@ -269,8 +274,12 @@ ScreenBlanker::_Shutdown() { delete fRunner; - if (fWindow) + if (fWindow) { fWindow->Hide(); + + if (fWindow->Lock()) + fWindow->Quit(); + } } diff --git a/src/bin/screen_blanker/ScreenSaverWindow.cpp b/src/bin/screen_blanker/ScreenSaverWindow.cpp index fdab30e2d6..b44e7cd765 100644 --- a/src/bin/screen_blanker/ScreenSaverWindow.cpp +++ b/src/bin/screen_blanker/ScreenSaverWindow.cpp @@ -10,9 +10,11 @@ #include "ScreenSaverWindow.h" -#include #include +#include +#include + /*! This is the BDirectWindow subclass that rendering occurs in. @@ -46,6 +48,7 @@ ScreenSaverWindow::SetSaver(BScreenSaver *saver) bool ScreenSaverWindow::QuitRequested() { + be_app->PostMessage(B_QUIT_REQUESTED); return true; }