- 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 // Turn on the message filter again
BMessage enable(kMsgEnableFilter); BMessage enable(kMsgEnableFilter);
BMessenger(fWindow).SendMessage(&enable); fWindow->PostMessage(&enable);
_QueueTurnOffScreen(); _QueueTurnOffScreen();
break; break;
+8 -9
View File
@@ -37,6 +37,14 @@ ScreenSaverFilter::Filter(BMessage* message, BHandler** target)
// Fall through // Fall through
} }
case B_MOUSE_MOVED: 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: case B_MOUSE_DOWN:
fEnabled = false; fEnabled = false;
be_app->PostMessage(B_QUIT_REQUESTED); be_app->PostMessage(B_QUIT_REQUESTED);
@@ -77,21 +85,12 @@ ScreenSaverWindow::ScreenSaverWindow(BRect frame)
// Ensure that this view receives keyboard input // Ensure that this view receives keyboard input
fTopView->MakeFocus(true); fTopView->MakeFocus(true);
fTopView->SetEventMask(B_KEYBOARD_EVENTS, 0); 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() ScreenSaverWindow::~ScreenSaverWindow()
{ {
Hide(); Hide();
delete fEnableRunner;
delete fFilter; delete fFilter;
} }
+1 -3
View File
@@ -10,7 +10,6 @@
#include <DirectWindow.h> #include <DirectWindow.h>
#include <MessageFilter.h> #include <MessageFilter.h>
#include <MessageRunner.h>
const static uint32 kMsgEnableFilter = 'eflt'; const static uint32 kMsgEnableFilter = 'eflt';
@@ -20,7 +19,7 @@ class ScreenSaverFilter : public BMessageFilter {
public: public:
ScreenSaverFilter() ScreenSaverFilter()
: BMessageFilter(B_ANY_DELIVERY, B_ANY_SOURCE), : BMessageFilter(B_ANY_DELIVERY, B_ANY_SOURCE),
fEnabled(false) {} fEnabled(true) {}
virtual filter_result Filter(BMessage* message, BHandler** target); virtual filter_result Filter(BMessage* message, BHandler** target);
@@ -46,7 +45,6 @@ class ScreenSaverWindow : public BDirectWindow {
BView *fTopView; BView *fTopView;
BScreenSaver *fSaver; BScreenSaver *fSaver;
ScreenSaverFilter *fFilter; ScreenSaverFilter *fFilter;
BMessageRunner *fEnableRunner;
}; };
#endif // SCREEN_SAVER_WINDOW_H #endif // SCREEN_SAVER_WINDOW_H