* reverted Adi's premature changes to BWindow and restored _DetermineTarget() and

task_looper() again.
* removed BMessenger::fPreferred - whenever you had to specify "usePreferred" separately,
  you don't have to do that anymore - use B_PREFERRED_TOKEN instead.
* fixed BTokenSpace::GetToken() semantics: it will no longer touch the "object" argument
  in case of failure.
* Introduced a BWindow::_DistributeMessage() that will be part of the event dispatcher
  counterpart to the app_server (the other will be _DetermineTarget()).
* Made it easier to use Michael's Message4 implementation: just add the following line
  to your UserBuildConfig:
	AppendToConfigVar DEFINES : HAIKU_TOP src : USING_MESSAGE4 : global ;
* Introduced ServerWindow::HandlerMessenger() and FocusMessenger() - the first will
  target the client handler, while the other will target the preferred handler of the
  client looper (usually the view having focus).
* Fixed dano message unflattening in the Message4 code.
* Changed BMessage::PrintToStream() to no longer use macros in the Message4 implementation.
* I hope that's all - it's a huge change, but it's all connected.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15046 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2005-11-20 16:24:23 +00:00
parent 26e09e5870
commit 4ceb1e519c
29 changed files with 752 additions and 647 deletions
+11 -16
View File
@@ -3,6 +3,10 @@
//
//------------------------------------------------------------------------------
#ifdef USING_MESSAGE4
# include <MessagePrivate4.h>
#else
#ifndef MESSAGEPRIVATE_H
#define MESSAGEPRIVATE_H
@@ -11,24 +15,22 @@
#include <MessengerPrivate.h>
#include <TokenSpace.h>
class BMessage::Private
{
class BMessage::Private {
public:
Private(BMessage* msg) : fMessage(msg) {;}
Private(BMessage& msg) : fMessage(&msg) {;}
inline void SetTarget(int32 token, bool preferred)
inline void SetTarget(int32 token)
{
fMessage->fTarget = token;
fMessage->fPreferred = preferred;
fMessage->fPreferred = token == B_PREFERRED_TOKEN;
}
inline void SetReply(BMessenger messenger)
{
BMessenger::Private mp(messenger);
fMessage->fReplyTo.port = mp.Port();
fMessage->fReplyTo.target
= (mp.IsPreferredTarget() ? B_PREFERRED_TOKEN : mp.Token());
fMessage->fReplyTo.target = mp.Token();
fMessage->fReplyTo.team = mp.Team();
fMessage->fReplyTo.preferred = mp.IsPreferredTarget();
}
@@ -44,10 +46,10 @@ class BMessage::Private
}
static inline status_t SendFlattenedMessage(void *data, int32 size,
port_id port, int32 token, bool preferred, bigtime_t timeout)
port_id port, int32 token, bigtime_t timeout)
{
return BMessage::_SendFlattenedMessage(data, size, port, token,
preferred, timeout);
timeout);
}
static inline void StaticInit()
@@ -70,11 +72,4 @@ class BMessage::Private
};
#endif // MESSAGEPRIVATE_H
/*
* $Log $
*
* $Id $
*
*/
#endif // USING_MESSAGE4
+119 -100
View File
@@ -1,3 +1,10 @@
/*
* Copyright 2005, Haiku Inc. All rights reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Michael Lotz <[email protected]>
*/
#ifndef _MESSAGE_PRIVATE_H_
#define _MESSAGE_PRIVATE_H_
@@ -75,127 +82,139 @@ typedef struct message_header_s {
class BMessage::Private {
public:
Private(BMessage *msg)
: fMessage(msg)
{
}
public:
Private(BMessage *msg)
: fMessage(msg)
{
}
Private(BMessage &msg)
: fMessage(&msg)
{
}
Private(BMessage &msg)
: fMessage(&msg)
{
}
void
SetTarget(int32 token)
{
fMessage->fHeader->target = token;
}
inline void SetTarget(int32 token, bool preferred)
{
fMessage->fHeader->target = (preferred
? B_PREFERRED_TOKEN : token);
}
void
SetReply(BMessenger messenger)
{
BMessenger::Private messengerPrivate(messenger);
fMessage->fHeader->replyPort = messengerPrivate.Port();
fMessage->fHeader->replyTarget = messengerPrivate.Token();
fMessage->fHeader->replyTeam = messengerPrivate.Team();
}
inline void SetReply(BMessenger messenger)
{
BMessenger::Private messengerPrivate(messenger);
fMessage->fHeader->replyPort = messengerPrivate.Port();
fMessage->fHeader->replyTarget = messengerPrivate.Token();
fMessage->fHeader->replyTeam = messengerPrivate.Team();
}
int32
GetTarget()
{
return fMessage->fHeader->target;
}
inline int32 GetTarget()
{
return fMessage->fHeader->target;
}
bool
UsePreferredTarget()
{
return fMessage->fHeader->target == B_PREFERRED_TOKEN;
}
inline bool UsePreferredTarget()
{
return fMessage->fHeader->target == B_PREFERRED_TOKEN;
}
status_t
Clear()
{
return fMessage->_Clear();
}
inline status_t Clear()
{
return fMessage->_Clear();
}
status_t
InitHeader()
{
return fMessage->_InitHeader();
}
inline status_t InitHeader()
{
return fMessage->_InitHeader();
}
MessageHeader*
GetMessageHeader()
{
return fMessage->fHeader;
}
inline MessageHeader *GetMessageHeader()
{
return fMessage->fHeader;
}
FieldHeader*
GetMessageFields()
{
return fMessage->fFields;
}
inline FieldHeader *GetMessageFields()
{
return fMessage->fFields;
}
uint8*
GetMessageData()
{
return fMessage->fData;
}
inline uint8 *GetMessageData()
{
return fMessage->fData;
}
ssize_t
NativeFlattenedSize() const
{
return fMessage->_NativeFlattenedSize();
}
inline ssize_t NativeFlattenedSize() const
{
return fMessage->_NativeFlattenedSize();
}
status_t
NativeFlatten(char *buffer, ssize_t size) const
{
return fMessage->_NativeFlatten(buffer, size);
}
inline status_t NativeFlatten(char *buffer, ssize_t size) const
{
return fMessage->_NativeFlatten(buffer, size);
}
status_t
NativeFlatten(BDataIO *stream, ssize_t *size) const
{
return fMessage->_NativeFlatten(stream, size);
}
inline status_t NativeFlatten(BDataIO *stream, ssize_t *size) const
{
return fMessage->_NativeFlatten(stream, size);
}
status_t
SendMessage(port_id port, int32 token, bigtime_t timeout,
bool replyRequired, BMessenger &replyTo) const
{
return fMessage->_SendMessage(port, token,
timeout, replyRequired, replyTo);
}
inline status_t SendMessage(port_id port, int32 token, bool preferred,
bigtime_t timeout, bool replyRequired,
BMessenger &replyTo) const
{
return fMessage->_SendMessage(port, token,
preferred, timeout, replyRequired, replyTo);
}
status_t
SendMessage(port_id port, team_id portOwner, int32 token,
BMessage *reply, bigtime_t sendTimeout,
bigtime_t replyTimeout) const
{
return fMessage->_SendMessage(port, portOwner, token,
reply, sendTimeout, replyTimeout);
}
inline status_t SendMessage(port_id port, team_id portOwner,
int32 token, bool preferred, BMessage *reply,
bigtime_t sendTimeout, bigtime_t replyTimeout) const
{
return fMessage->_SendMessage(port, portOwner, token,
preferred, reply, sendTimeout, replyTimeout);
}
// static methods
static
inline status_t SendFlattenedMessage(void *data, int32 size,
port_id port, int32 token, bool preferred,
bigtime_t timeout)
{
return BMessage::_SendFlattenedMessage(data, size,
port, token, preferred, timeout);
}
static status_t
SendFlattenedMessage(void *data, int32 size, port_id port,
int32 token, bigtime_t timeout)
{
return BMessage::_SendFlattenedMessage(data, size,
port, token, timeout);
}
static
inline void StaticInit()
{
BMessage::_StaticInit();
}
static void
StaticInit()
{
BMessage::_StaticInit();
}
static
inline void StaticCleanup()
{
BMessage::_StaticCleanup();
}
static void
StaticCleanup()
{
BMessage::_StaticCleanup();
}
static
inline void StaticCacheCleanup()
{
BMessage::_StaticCacheCleanup();
}
static void
StaticCacheCleanup()
{
BMessage::_StaticCacheCleanup();
}
private:
BMessage *fMessage;
private:
BMessage* fMessage;
};
#endif // _MESSAGE_PRIVATE_H_
+4 -8
View File
@@ -1,3 +1,6 @@
#ifdef USING_MESSAGE4
# include <MessageUtils4.h>
#else
//------------------------------------------------------------------------------
// MessageUtils.h
//
@@ -199,11 +202,4 @@ template<> inline void byte_swap(entry_ref& data)
//------------------------------------------------------------------------------
#endif // MESSAGEUTILS_H
/*
* $Log $
*
* $Id $
*
*/
#endif // USING_MESSAGE4
+1 -1
View File
@@ -79,7 +79,7 @@ public:
throw fError;
}
status_t Status() { return fError; };
status_t Status() { return fError >= B_OK ? B_OK : fError; };
void SetSwap(bool yesNo) { fSwap = yesNo; };
bool IsSwapping() { return fSwap; };
+4 -3
View File
@@ -7,6 +7,7 @@
#include <Messenger.h>
#include <TokenSpace.h>
class BMessenger::Private {
@@ -21,10 +22,10 @@ class BMessenger::Private {
team_id Team()
{ return fMessenger->fTeam; }
bool IsPreferredTarget()
{ return fMessenger->fPreferredTarget; }
{ return fMessenger->fHandlerToken == B_PREFERRED_TOKEN; }
void SetTo(team_id team, port_id port, int32 token, bool preferred)
{ fMessenger->SetTo(team, port, token, preferred); }
void SetTo(team_id team, port_id port, int32 token)
{ fMessenger->_SetTo(team, port, token); }
private:
BMessenger* fMessenger;