- Use PostMessage instead of a BMessenger to send a message to the window from
the app. - Use the new "_fake" parameter to detect the initial mouse moved sent by app_server instead of a BMessageRunner and delay. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29493 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
|
||||
#include <DirectWindow.h>
|
||||
#include <MessageFilter.h>
|
||||
#include <MessageRunner.h>
|
||||
|
||||
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user