diff --git a/src/bin/screen_blanker/ScreenBlanker.cpp b/src/bin/screen_blanker/ScreenBlanker.cpp index 59dafbc154..e720c7d385 100644 --- a/src/bin/screen_blanker/ScreenBlanker.cpp +++ b/src/bin/screen_blanker/ScreenBlanker.cpp @@ -238,7 +238,7 @@ ScreenBlanker::MessageReceived(BMessage* message) // Turn on the message filter again BMessage enable(kMsgEnableFilter); - BMessenger(fWindow).SendMessage(&enable); + fWindow->PostMessage(&enable); _QueueTurnOffScreen(); break; diff --git a/src/bin/screen_blanker/ScreenSaverWindow.cpp b/src/bin/screen_blanker/ScreenSaverWindow.cpp index 11cc301ef7..5a9526b1e2 100644 --- a/src/bin/screen_blanker/ScreenSaverWindow.cpp +++ b/src/bin/screen_blanker/ScreenSaverWindow.cpp @@ -37,6 +37,14 @@ ScreenSaverFilter::Filter(BMessage* message, BHandler** target) // Fall through } case B_MOUSE_MOVED: + { + // ignore the initial "fake" B_MOUSE_MOVED sent by the app_server + bool fake = false; + if (message->FindBool("_fake", &fake) == B_OK && fake) + return B_DISPATCH_MESSAGE; + + // Fall through + } case B_MOUSE_DOWN: fEnabled = false; be_app->PostMessage(B_QUIT_REQUESTED); @@ -77,21 +85,12 @@ ScreenSaverWindow::ScreenSaverWindow(BRect frame) // Ensure that this view receives keyboard input fTopView->MakeFocus(true); fTopView->SetEventMask(B_KEYBOARD_EVENTS, 0); - - // A delay is necessary (250ms was chosen arbitrarily) before enabling the - // message filter because when the window first shows some mouse moved - // messages are sent to it automatically. - BMessage enable(kMsgEnableFilter); - fEnableRunner = new BMessageRunner(BMessenger(this), &enable, 250000LL, 1); - if (fEnableRunner->InitCheck() != B_OK) - syslog(LOG_ERR, "Runner to enable screen saver message filtering failed!\n"); } ScreenSaverWindow::~ScreenSaverWindow() { Hide(); - delete fEnableRunner; delete fFilter; } diff --git a/src/bin/screen_blanker/ScreenSaverWindow.h b/src/bin/screen_blanker/ScreenSaverWindow.h index 54bfd71ab0..5a2f6633b8 100644 --- a/src/bin/screen_blanker/ScreenSaverWindow.h +++ b/src/bin/screen_blanker/ScreenSaverWindow.h @@ -10,7 +10,6 @@ #include #include -#include const static uint32 kMsgEnableFilter = 'eflt'; @@ -20,7 +19,7 @@ class ScreenSaverFilter : public BMessageFilter { public: ScreenSaverFilter() : BMessageFilter(B_ANY_DELIVERY, B_ANY_SOURCE), - fEnabled(false) {} + fEnabled(true) {} virtual filter_result Filter(BMessage* message, BHandler** target); @@ -46,7 +45,6 @@ class ScreenSaverWindow : public BDirectWindow { BView *fTopView; BScreenSaver *fSaver; ScreenSaverFilter *fFilter; - BMessageRunner *fEnableRunner; }; #endif // SCREEN_SAVER_WINDOW_H