- 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:
Ryan Leavengood
2009-03-13 17:22:54 +00:00
parent 1674584bb9
commit d39c5354b8
3 changed files with 10 additions and 13 deletions
+1 -1
View File
@@ -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;
+8 -9
View File
@@ -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;
}
+1 -3
View File
@@ -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