BLooper: Add DispatchExternalMessage()

* This is primarily a service method for ports of widget tool kits
  that require single-threaded GUI. DispatchExternalMessage() calls
  DispatchMessage(), but also sets fLastMessage, so that
  [Detach]CurrentMessage() work correctly. This allows to detach a
  message in DispatchMessage() when called from the window thread,
  add it to a global queue, and later process the queued messages in
  a different thread that calls DispatchExternalMessage().
* BLooper/BWindow: Make sure fLastMessage is accessed only when locked.
This commit is contained in:
Ingo Weinhold
2013-12-20 15:47:23 +01:00
parent 57973ac96b
commit 5d7f782d4e
3 changed files with 36 additions and 9 deletions
+2
View File
@@ -52,6 +52,8 @@ public:
virtual void MessageReceived(BMessage* message);
BMessage* CurrentMessage() const;
BMessage* DetachCurrentMessage();
void DispatchExternalMessage(BMessage* message,
BHandler* handler, bool& _detached);
BMessageQueue* MessageQueue() const;
bool IsMessageWaiting() const;