* 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:
@@ -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
|
||||
|
||||
@@ -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_
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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; };
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user