App Kit: style changes.
No functional change intended. Focused on documented classes only. * Update copyright information. * whitespace fixes. * pointer style * Rename some variables, msg => message, form => what * Need consistent variable names to make documentation easier, allows us to use \copydoc or \copydetails instead of repeating ourselves over and over again.
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2001-2009, Haiku Inc.
|
||||
* Copyright 2001-2014 Haiku, Inc. All rights reserved.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
#ifndef _APPLICATION_H
|
||||
@@ -21,8 +21,10 @@ class BMessageRunner;
|
||||
class BResources;
|
||||
class BServer;
|
||||
class BWindow;
|
||||
|
||||
struct app_info;
|
||||
|
||||
|
||||
namespace BPrivate {
|
||||
class PortLink;
|
||||
class ServerMemoryAllocator;
|
||||
@@ -151,9 +153,11 @@ private:
|
||||
bool fReadyToRunCalled;
|
||||
};
|
||||
|
||||
|
||||
// Global Objects
|
||||
|
||||
extern BApplication* be_app;
|
||||
extern BMessenger be_app_messenger;
|
||||
|
||||
|
||||
#endif // _APPLICATION_H
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
* Copyright 2001-2007, Haiku Inc. All Rights Reserved.
|
||||
* Copyright 2001-2014 Haiku, Inc. All rights reserved.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*
|
||||
* Authors:
|
||||
* Erik Jaesler ([email protected])
|
||||
* Erik Jaesler, [email protected]
|
||||
*/
|
||||
#ifndef _HANDLER_H
|
||||
#define _HANDLER_H
|
||||
@@ -55,8 +55,8 @@ public:
|
||||
void UnlockLooper();
|
||||
|
||||
// Scripting
|
||||
virtual BHandler* ResolveSpecifier(BMessage* msg, int32 index,
|
||||
BMessage* specifier, int32 form,
|
||||
virtual BHandler* ResolveSpecifier(BMessage* message, int32 index,
|
||||
BMessage* specifier, int32 what,
|
||||
const char* property);
|
||||
virtual status_t GetSupportedSuites(BMessage* data);
|
||||
|
||||
@@ -77,7 +77,8 @@ public:
|
||||
virtual status_t Perform(perform_code d, void* arg);
|
||||
|
||||
// Notifier calls
|
||||
virtual void SendNotices(uint32 what, const BMessage* notice = NULL);
|
||||
virtual void SendNotices(uint32 what,
|
||||
const BMessage* notice = NULL);
|
||||
bool IsWatched() const;
|
||||
|
||||
private:
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
* Copyright 2001-2008, Haiku Inc. All Rights Reserved.
|
||||
* Copyright 2001-2014 Haiku, Inc. All rights reserved.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*
|
||||
* Authors:
|
||||
* Erik Jaesler ([email protected])
|
||||
* Erik Jaesler, [email protected]
|
||||
*/
|
||||
#ifndef _LOOPER_H
|
||||
#define _LOOPER_H
|
||||
@@ -30,7 +30,7 @@ class BLooper : public BHandler {
|
||||
public:
|
||||
BLooper(const char* name = NULL,
|
||||
int32 priority = B_NORMAL_PRIORITY,
|
||||
int32 port_capacity
|
||||
int32 portCapacity
|
||||
= B_LOOPER_PORT_DEFAULT_CAPACITY);
|
||||
virtual ~BLooper();
|
||||
|
||||
@@ -86,8 +86,8 @@ public:
|
||||
sem_id Sem() const;
|
||||
|
||||
// Scripting
|
||||
virtual BHandler* ResolveSpecifier(BMessage* msg, int32 index,
|
||||
BMessage* specifier, int32 form,
|
||||
virtual BHandler* ResolveSpecifier(BMessage* message, int32 index,
|
||||
BMessage* specifier, int32 what,
|
||||
const char* property);
|
||||
virtual status_t GetSupportedSuites(BMessage* data);
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
* Copyright 2005-2012, Haiku Inc. All Rights Reserved.
|
||||
* Copyright 2005-2014 Haiku, Inc. All rights reserved.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*
|
||||
* Authors:
|
||||
* Michael Lotz <mmlr@mlotz.ch>
|
||||
* Michael Lotz, mmlr@mlotz.ch
|
||||
*/
|
||||
#ifndef _MESSAGE_H
|
||||
#define _MESSAGE_H
|
||||
@@ -141,7 +141,7 @@ public:
|
||||
status_t AddString(const char* name, const char* string);
|
||||
status_t AddString(const char* name,
|
||||
const BString& string);
|
||||
status_t AddStrings(const char *name,
|
||||
status_t AddStrings(const char* name,
|
||||
const BStringList& list);
|
||||
status_t AddInt8(const char* name, int8 value);
|
||||
status_t AddUInt8(const char* name, uint8 value);
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
* Copyright 2001-2005, Haiku.
|
||||
* Copyright 2001-2014 Haiku, Inc. All rights reserved.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*
|
||||
* Authors:
|
||||
* Erik Jaesler (erik@cgsoftware.com)
|
||||
* Erik Jaesler, erik@cgsoftware.com
|
||||
*/
|
||||
#ifndef _MESSAGE_FILTER_H
|
||||
#define _MESSAGE_FILTER_H
|
||||
@@ -14,17 +14,19 @@
|
||||
|
||||
class BMessage;
|
||||
|
||||
// filter_hook Return Codes and Protocol ---------------------------------------
|
||||
|
||||
// filter_hook Return Codes and Protocol
|
||||
enum filter_result {
|
||||
B_SKIP_MESSAGE,
|
||||
B_DISPATCH_MESSAGE
|
||||
};
|
||||
|
||||
|
||||
typedef filter_result (*filter_hook)
|
||||
(BMessage* message, BHandler** target, BMessageFilter* filter);
|
||||
|
||||
|
||||
// BMessageFilter invocation criteria ------------------------------------------
|
||||
// BMessageFilter invocation criteria
|
||||
enum message_delivery {
|
||||
B_ANY_DELIVERY,
|
||||
B_DROPPED_DELIVERY,
|
||||
@@ -38,47 +40,49 @@ enum message_source {
|
||||
};
|
||||
|
||||
|
||||
// BMessageFilter Class --------------------------------------------------------
|
||||
class BMessageFilter {
|
||||
public:
|
||||
BMessageFilter(uint32 what,
|
||||
filter_hook func = NULL);
|
||||
BMessageFilter(message_delivery delivery,
|
||||
message_source source, filter_hook func = NULL);
|
||||
BMessageFilter(message_delivery delivery,
|
||||
message_source source, uint32 what,
|
||||
filter_hook func = NULL);
|
||||
BMessageFilter(const BMessageFilter& filter);
|
||||
BMessageFilter(const BMessageFilter* filter);
|
||||
virtual ~BMessageFilter();
|
||||
public:
|
||||
BMessageFilter(uint32 what,
|
||||
filter_hook func = NULL);
|
||||
BMessageFilter(message_delivery delivery,
|
||||
message_source source, filter_hook func = NULL);
|
||||
BMessageFilter(message_delivery delivery,
|
||||
message_source source, uint32 what,
|
||||
filter_hook func = NULL);
|
||||
BMessageFilter(const BMessageFilter& filter);
|
||||
BMessageFilter(const BMessageFilter* filter);
|
||||
virtual ~BMessageFilter();
|
||||
|
||||
BMessageFilter& operator=(const BMessageFilter& from);
|
||||
BMessageFilter& operator=(const BMessageFilter& from);
|
||||
|
||||
// Hook function; ignored if filter_hook is non-NULL
|
||||
virtual filter_result Filter(BMessage* message, BHandler** _target);
|
||||
// Hook function; ignored if filter_hook is non-NULL
|
||||
virtual filter_result Filter(BMessage* message, BHandler** _target);
|
||||
|
||||
message_delivery MessageDelivery() const;
|
||||
message_source MessageSource() const;
|
||||
uint32 Command() const;
|
||||
bool FiltersAnyCommand() const;
|
||||
BLooper* Looper() const;
|
||||
message_delivery MessageDelivery() const;
|
||||
message_source MessageSource() const;
|
||||
uint32 Command() const;
|
||||
bool FiltersAnyCommand() const;
|
||||
BLooper* Looper() const;
|
||||
|
||||
private:
|
||||
friend class BLooper;
|
||||
friend class BHandler;
|
||||
private:
|
||||
friend class BLooper;
|
||||
friend class BHandler;
|
||||
|
||||
virtual void _ReservedMessageFilter1();
|
||||
virtual void _ReservedMessageFilter2();
|
||||
virtual void _ReservedMessageFilter1();
|
||||
virtual void _ReservedMessageFilter2();
|
||||
|
||||
void SetLooper(BLooper* owner);
|
||||
filter_hook FilterFunction() const;
|
||||
bool fFiltersAny;
|
||||
uint32 fWhat;
|
||||
message_delivery fDelivery;
|
||||
message_source fSource;
|
||||
BLooper *fLooper;
|
||||
filter_hook fFilterFunction;
|
||||
uint32 _reserved[3];
|
||||
void SetLooper(BLooper* owner);
|
||||
filter_hook FilterFunction() const;
|
||||
|
||||
bool fFiltersAny;
|
||||
uint32 fWhat;
|
||||
message_delivery fDelivery;
|
||||
message_source fSource;
|
||||
BLooper* fLooper;
|
||||
filter_hook fFilterFunction;
|
||||
|
||||
uint32 _reserved[3];
|
||||
};
|
||||
|
||||
|
||||
#endif // _MESSAGE_FILTER_H
|
||||
|
||||
@@ -1,57 +1,58 @@
|
||||
/*
|
||||
* Copyright 2001-2007, Haiku, Inc. All Rights Reserved.
|
||||
* Copyright 2001-2014 Haiku, Inc. All rights reserved.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
#ifndef _MESSAGE_QUEUE_H
|
||||
#define _MESSAGE_QUEUE_H
|
||||
#ifndef _MESSAGE_QUEUE_H
|
||||
#define _MESSAGE_QUEUE_H
|
||||
|
||||
|
||||
#include <Locker.h>
|
||||
#include <Message.h>
|
||||
/* For convenience */
|
||||
// For convenience
|
||||
|
||||
|
||||
class BMessageQueue {
|
||||
public:
|
||||
BMessageQueue();
|
||||
virtual ~BMessageQueue();
|
||||
public:
|
||||
BMessageQueue();
|
||||
virtual ~BMessageQueue();
|
||||
|
||||
void AddMessage(BMessage* message);
|
||||
void RemoveMessage(BMessage* message);
|
||||
void AddMessage(BMessage* message);
|
||||
void RemoveMessage(BMessage* message);
|
||||
|
||||
int32 CountMessages() const;
|
||||
bool IsEmpty() const;
|
||||
int32 CountMessages() const;
|
||||
bool IsEmpty() const;
|
||||
|
||||
BMessage* FindMessage(int32 index) const;
|
||||
BMessage* FindMessage(uint32 what, int32 index = 0) const;
|
||||
BMessage* FindMessage(int32 index) const;
|
||||
BMessage* FindMessage(uint32 what, int32 index = 0) const;
|
||||
|
||||
bool Lock();
|
||||
void Unlock();
|
||||
bool IsLocked() const;
|
||||
bool Lock();
|
||||
void Unlock();
|
||||
bool IsLocked() const;
|
||||
|
||||
BMessage *NextMessage();
|
||||
bool IsNextMessage(const BMessage* message) const;
|
||||
BMessage* NextMessage();
|
||||
bool IsNextMessage(const BMessage* message) const;
|
||||
|
||||
private:
|
||||
// Reserved space in the vtable for future changes to BMessageQueue
|
||||
virtual void _ReservedMessageQueue1();
|
||||
virtual void _ReservedMessageQueue2();
|
||||
virtual void _ReservedMessageQueue3();
|
||||
private:
|
||||
// Reserved space in the vtable for future changes to BMessageQueue
|
||||
virtual void _ReservedMessageQueue1();
|
||||
virtual void _ReservedMessageQueue2();
|
||||
virtual void _ReservedMessageQueue3();
|
||||
|
||||
BMessageQueue(const BMessageQueue &);
|
||||
BMessageQueue &operator=(const BMessageQueue &);
|
||||
BMessageQueue(const BMessageQueue &);
|
||||
BMessageQueue& operator=(const BMessageQueue &);
|
||||
|
||||
bool IsLocked();
|
||||
// this needs to be exported for R5 compatibility and should
|
||||
// be dropped as soon as possible
|
||||
bool IsLocked();
|
||||
// this needs to be exported for R5 compatibility and should
|
||||
// be dropped as soon as possible
|
||||
|
||||
private:
|
||||
BMessage* fHead;
|
||||
BMessage* fTail;
|
||||
int32 fMessageCount;
|
||||
mutable BLocker fLock;
|
||||
private:
|
||||
BMessage* fHead;
|
||||
BMessage* fTail;
|
||||
int32 fMessageCount;
|
||||
mutable BLocker fLock;
|
||||
|
||||
uint32 _reserved[3];
|
||||
uint32 _reserved[3];
|
||||
};
|
||||
|
||||
|
||||
#endif // _MESSAGE_QUEUE_H
|
||||
|
||||
+189
-169
@@ -1,11 +1,11 @@
|
||||
/*
|
||||
* Copyright 2001-2012, Haiku.
|
||||
* Copyright 2001-2014 Haiku, inc. All rights reserved.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*
|
||||
* Authors:
|
||||
* Erik Jaesler (erik@cgsoftware.com)
|
||||
* Jerome Duval
|
||||
* Axel Dörfler, axeld@pinc-software.de
|
||||
* Jerome Duval
|
||||
* Erik Jaesler, erik@cgsoftware.com
|
||||
*/
|
||||
|
||||
|
||||
@@ -51,11 +51,11 @@
|
||||
using namespace BPrivate;
|
||||
|
||||
|
||||
BApplication *be_app = NULL;
|
||||
BApplication* be_app = NULL;
|
||||
BMessenger be_app_messenger;
|
||||
|
||||
pthread_once_t sAppResourcesInitOnce = PTHREAD_ONCE_INIT;
|
||||
BResources *BApplication::sAppResources = NULL;
|
||||
BResources* BApplication::sAppResources = NULL;
|
||||
|
||||
|
||||
enum {
|
||||
@@ -67,6 +67,7 @@ enum {
|
||||
kApplication
|
||||
};
|
||||
|
||||
|
||||
static property_info sPropertyInfo[] = {
|
||||
{
|
||||
"Window",
|
||||
@@ -161,9 +162,10 @@ static property_info sPropertyInfo[] = {
|
||||
{}
|
||||
};
|
||||
|
||||
|
||||
// argc/argv
|
||||
extern const int __libc_argc;
|
||||
extern const char * const *__libc_argv;
|
||||
extern const char* const *__libc_argv;
|
||||
|
||||
|
||||
// debugging
|
||||
@@ -172,42 +174,116 @@ extern const char * const *__libc_argv;
|
||||
#define OUT printf
|
||||
|
||||
|
||||
// prototypes of helper functions
|
||||
static const char* looper_name_for(const char *signature);
|
||||
static status_t check_app_signature(const char *signature);
|
||||
// #pragma mark - static helper functions
|
||||
|
||||
|
||||
/*!
|
||||
\brief Checks whether the supplied string is a valid application signature.
|
||||
|
||||
An error message is printed, if the string is no valid app signature.
|
||||
|
||||
\param signature The string to be checked.
|
||||
|
||||
\return A status code.
|
||||
\retval B_OK \a signature is a valid app signature.
|
||||
\retval B_BAD_VALUE \a signature is \c NULL or no valid app signature.
|
||||
*/
|
||||
static status_t
|
||||
check_app_signature(const char* signature)
|
||||
{
|
||||
bool isValid = false;
|
||||
BMimeType type(signature);
|
||||
|
||||
if (type.IsValid() && !type.IsSupertypeOnly()
|
||||
&& BMimeType("application").Contains(&type)) {
|
||||
isValid = true;
|
||||
}
|
||||
|
||||
if (!isValid) {
|
||||
printf("bad signature (%s), must begin with \"application/\" and "
|
||||
"can't conflict with existing registered mime types inside "
|
||||
"the \"application\" media type.\n", signature);
|
||||
}
|
||||
|
||||
return (isValid ? B_OK : B_BAD_VALUE);
|
||||
}
|
||||
|
||||
|
||||
// Returns the looper name for a given signature.
|
||||
// Normally this is "AppLooperPort", but in case of the registrar it gets a
|
||||
// special name.
|
||||
static const char*
|
||||
looper_name_for(const char* signature)
|
||||
{
|
||||
if (signature != NULL && !strcasecmp(signature, kRegistrarSignature))
|
||||
return BPrivate::get_roster_port_name();
|
||||
|
||||
return "AppLooperPort";
|
||||
}
|
||||
|
||||
|
||||
#ifndef RUN_WITHOUT_REGISTRAR
|
||||
static void fill_argv_message(BMessage &message);
|
||||
// Fills the passed BMessage with B_ARGV_RECEIVED infos.
|
||||
static void
|
||||
fill_argv_message(BMessage &message)
|
||||
{
|
||||
message.what = B_ARGV_RECEIVED;
|
||||
|
||||
int32 argc = __libc_argc;
|
||||
const char* const *argv = __libc_argv;
|
||||
|
||||
// add argc
|
||||
message.AddInt32("argc", argc);
|
||||
|
||||
// add argv
|
||||
for (int32 i = 0; i < argc; i++) {
|
||||
if (argv[i] != NULL)
|
||||
message.AddString("argv", argv[i]);
|
||||
}
|
||||
|
||||
// add current working directory
|
||||
char cwd[B_PATH_NAME_LENGTH];
|
||||
if (getcwd(cwd, B_PATH_NAME_LENGTH))
|
||||
message.AddString("cwd", cwd);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
BApplication::BApplication(const char *signature)
|
||||
: BLooper(looper_name_for(signature))
|
||||
// #pragma mark - BApplication
|
||||
|
||||
|
||||
BApplication::BApplication(const char* signature)
|
||||
:
|
||||
BLooper(looper_name_for(signature))
|
||||
{
|
||||
_InitData(signature, true, NULL);
|
||||
}
|
||||
|
||||
|
||||
BApplication::BApplication(const char *signature, status_t *_error)
|
||||
: BLooper(looper_name_for(signature))
|
||||
BApplication::BApplication(const char* signature, status_t* _error)
|
||||
:
|
||||
BLooper(looper_name_for(signature))
|
||||
{
|
||||
_InitData(signature, true, _error);
|
||||
}
|
||||
|
||||
|
||||
BApplication::BApplication(const char *signature, bool initGUI,
|
||||
status_t *_error)
|
||||
: BLooper(looper_name_for(signature))
|
||||
BApplication::BApplication(const char* signature, bool initGUI,
|
||||
status_t* _error)
|
||||
:
|
||||
BLooper(looper_name_for(signature))
|
||||
{
|
||||
_InitData(signature, initGUI, _error);
|
||||
}
|
||||
|
||||
|
||||
BApplication::BApplication(BMessage *data)
|
||||
// Note: BeOS calls the private BLooper(int32, port_id, const char *)
|
||||
BApplication::BApplication(BMessage* data)
|
||||
// Note: BeOS calls the private BLooper(int32, port_id, const char*)
|
||||
// constructor here, test if it's needed
|
||||
: BLooper(looper_name_for(NULL))
|
||||
:
|
||||
BLooper(looper_name_for(NULL))
|
||||
{
|
||||
const char *signature = NULL;
|
||||
const char* signature = NULL;
|
||||
data->FindString("mime_sig", &signature);
|
||||
|
||||
_InitData(signature, true, NULL);
|
||||
@@ -260,7 +336,7 @@ BApplication::~BApplication()
|
||||
}
|
||||
|
||||
|
||||
BApplication &
|
||||
BApplication&
|
||||
BApplication::operator=(const BApplication &rhs)
|
||||
{
|
||||
return *this;
|
||||
@@ -268,7 +344,7 @@ BApplication::operator=(const BApplication &rhs)
|
||||
|
||||
|
||||
void
|
||||
BApplication::_InitData(const char *signature, bool initGUI, status_t *_error)
|
||||
BApplication::_InitData(const char* signature, bool initGUI, status_t* _error)
|
||||
{
|
||||
DBG(OUT("BApplication::InitData(`%s', %p)\n", signature, _error));
|
||||
// check whether there exists already an application
|
||||
@@ -291,7 +367,7 @@ BApplication::_InitData(const char *signature, bool initGUI, status_t *_error)
|
||||
|
||||
#ifndef RUN_WITHOUT_REGISTRAR
|
||||
bool isRegistrar = signature
|
||||
&& !strcasecmp(signature, kRegistrarSignature);
|
||||
&& strcasecmp(signature, kRegistrarSignature) == 0;
|
||||
// get team and thread
|
||||
team_id team = Team();
|
||||
thread_id thread = BPrivate::main_thread_for(team);
|
||||
@@ -380,8 +456,9 @@ BApplication::_InitData(const char *signature, bool initGUI, status_t *_error)
|
||||
BMessenger otherApp(NULL, otherTeam);
|
||||
app_info otherAppInfo;
|
||||
if (__libc_argc > 1
|
||||
&& be_roster->GetRunningAppInfo(otherTeam, &otherAppInfo) == B_OK
|
||||
&& !(otherAppInfo.flags & B_ARGV_ONLY)) {
|
||||
&& be_roster->GetRunningAppInfo(otherTeam, &otherAppInfo)
|
||||
== B_OK
|
||||
&& (otherAppInfo.flags & B_ARGV_ONLY) != 0) {
|
||||
// create an B_ARGV_RECEIVED message
|
||||
BMessage argvMessage(B_ARGV_RECEIVED);
|
||||
fill_argv_message(argvMessage);
|
||||
@@ -457,8 +534,8 @@ DBG(OUT("BApplication::InitData() done\n"));
|
||||
}
|
||||
|
||||
|
||||
BArchivable *
|
||||
BApplication::Instantiate(BMessage *data)
|
||||
BArchivable*
|
||||
BApplication::Instantiate(BMessage* data)
|
||||
{
|
||||
if (validate_instantiation(data, "BApplication"))
|
||||
return new BApplication(data);
|
||||
@@ -468,7 +545,7 @@ BApplication::Instantiate(BMessage *data)
|
||||
|
||||
|
||||
status_t
|
||||
BApplication::Archive(BMessage *data, bool deep) const
|
||||
BApplication::Archive(BMessage* data, bool deep) const
|
||||
{
|
||||
status_t status = BLooper::Archive(data, deep);
|
||||
if (status < B_OK)
|
||||
@@ -520,9 +597,10 @@ BApplication::Quit()
|
||||
{
|
||||
bool unlock = false;
|
||||
if (!IsLocked()) {
|
||||
const char *name = Name();
|
||||
if (!name)
|
||||
const char* name = Name();
|
||||
if (name == NULL)
|
||||
name = "no-name";
|
||||
|
||||
printf("ERROR - you must Lock the application object before calling "
|
||||
"Quit(), team=%" B_PRId32 ", looper=%s\n", Team(), name);
|
||||
unlock = true;
|
||||
@@ -551,6 +629,7 @@ BApplication::Quit()
|
||||
// message dispatching loop and return from Run().
|
||||
fTerminating = true;
|
||||
}
|
||||
|
||||
// If we had to lock the object, unlock now.
|
||||
if (unlock)
|
||||
Unlock();
|
||||
@@ -579,7 +658,7 @@ BApplication::ReadyToRun()
|
||||
|
||||
|
||||
void
|
||||
BApplication::MessageReceived(BMessage *message)
|
||||
BApplication::MessageReceived(BMessage* message)
|
||||
{
|
||||
switch (message->what) {
|
||||
case B_COUNT_PROPERTIES:
|
||||
@@ -589,10 +668,13 @@ BApplication::MessageReceived(BMessage *message)
|
||||
int32 index;
|
||||
BMessage specifier;
|
||||
int32 what;
|
||||
const char *property = NULL;
|
||||
if (message->GetCurrentSpecifier(&index, &specifier, &what, &property) < B_OK
|
||||
|| !ScriptReceived(message, index, &specifier, what, property))
|
||||
const char* property = NULL;
|
||||
if (message->GetCurrentSpecifier(&index, &specifier, &what,
|
||||
&property) < B_OK
|
||||
|| !ScriptReceived(message, index, &specifier, what,
|
||||
property)) {
|
||||
BLooper::MessageReceived(message);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -619,13 +701,12 @@ BApplication::MessageReceived(BMessage *message)
|
||||
|
||||
default:
|
||||
BLooper::MessageReceived(message);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
BApplication::ArgvReceived(int32 argc, char **argv)
|
||||
BApplication::ArgvReceived(int32 argc, char** argv)
|
||||
{
|
||||
// supposed to be implemented by subclasses
|
||||
}
|
||||
@@ -639,7 +720,7 @@ BApplication::AppActivated(bool active)
|
||||
|
||||
|
||||
void
|
||||
BApplication::RefsReceived(BMessage *message)
|
||||
BApplication::RefsReceived(BMessage* message)
|
||||
{
|
||||
// supposed to be implemented by subclasses
|
||||
}
|
||||
@@ -650,16 +731,16 @@ BApplication::AboutRequested()
|
||||
{
|
||||
thread_info info;
|
||||
if (get_thread_info(Thread(), &info) == B_OK) {
|
||||
BAlert *alert = new BAlert("_about_", info.name, "OK");
|
||||
BAlert* alert = new BAlert("_about_", info.name, "OK");
|
||||
alert->SetFlags(alert->Flags() | B_CLOSE_ON_ESCAPE);
|
||||
alert->Go(NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
BHandler *
|
||||
BApplication::ResolveSpecifier(BMessage *message, int32 index,
|
||||
BMessage *specifier, int32 what, const char *property)
|
||||
BHandler*
|
||||
BApplication::ResolveSpecifier(BMessage* message, int32 index,
|
||||
BMessage* specifier, int32 what, const char* property)
|
||||
{
|
||||
BPropertyInfo propInfo(sPropertyInfo);
|
||||
status_t err = B_OK;
|
||||
@@ -677,7 +758,7 @@ BApplication::ResolveSpecifier(BMessage *message, int32 index,
|
||||
if (what == B_REVERSE_INDEX_SPECIFIER)
|
||||
index = CountWindows() - index;
|
||||
|
||||
BWindow *window = WindowAt(index);
|
||||
BWindow* window = WindowAt(index);
|
||||
if (window != NULL) {
|
||||
message->PopSpecifier();
|
||||
BMessenger(window).SendMessage(message);
|
||||
@@ -688,18 +769,19 @@ BApplication::ResolveSpecifier(BMessage *message, int32 index,
|
||||
|
||||
case kWindowByName:
|
||||
{
|
||||
const char *name;
|
||||
const char* name;
|
||||
err = specifier->FindString("name", &name);
|
||||
if (err != B_OK)
|
||||
break;
|
||||
|
||||
for (int32 i = 0;; i++) {
|
||||
BWindow *window = WindowAt(i);
|
||||
BWindow* window = WindowAt(i);
|
||||
if (window == NULL) {
|
||||
err = B_NAME_NOT_FOUND;
|
||||
break;
|
||||
}
|
||||
if (window->Title() != NULL && !strcmp(window->Title(), name)) {
|
||||
if (window->Title() != NULL && !strcmp(window->Title(),
|
||||
name)) {
|
||||
message->PopSpecifier();
|
||||
BMessenger(window).SendMessage(message);
|
||||
break;
|
||||
@@ -718,12 +800,13 @@ BApplication::ResolveSpecifier(BMessage *message, int32 index,
|
||||
if (what == B_REVERSE_INDEX_SPECIFIER)
|
||||
index = CountLoopers() - index;
|
||||
|
||||
BLooper *looper = LooperAt(index);
|
||||
BLooper* looper = LooperAt(index);
|
||||
if (looper != NULL) {
|
||||
message->PopSpecifier();
|
||||
BMessenger(looper).SendMessage(message);
|
||||
} else
|
||||
err = B_BAD_INDEX;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -733,18 +816,19 @@ BApplication::ResolveSpecifier(BMessage *message, int32 index,
|
||||
|
||||
case kLooperByName:
|
||||
{
|
||||
const char *name;
|
||||
const char* name;
|
||||
err = specifier->FindString("name", &name);
|
||||
if (err != B_OK)
|
||||
break;
|
||||
|
||||
for (int32 i = 0;; i++) {
|
||||
BLooper *looper = LooperAt(i);
|
||||
BLooper* looper = LooperAt(i);
|
||||
if (looper == NULL) {
|
||||
err = B_NAME_NOT_FOUND;
|
||||
break;
|
||||
}
|
||||
if (looper->Name() != NULL && !strcmp(looper->Name(), name)) {
|
||||
if (looper->Name() != NULL
|
||||
&& strcmp(looper->Name(), name) == 0) {
|
||||
message->PopSpecifier();
|
||||
BMessenger(looper).SendMessage(message);
|
||||
break;
|
||||
@@ -813,7 +897,7 @@ BApplication::IsCursorHidden() const
|
||||
|
||||
|
||||
void
|
||||
BApplication::SetCursor(const void *cursorData)
|
||||
BApplication::SetCursor(const void* cursorData)
|
||||
{
|
||||
BCursor cursor(cursorData);
|
||||
SetCursor(&cursor, true);
|
||||
@@ -822,7 +906,7 @@ BApplication::SetCursor(const void *cursorData)
|
||||
|
||||
|
||||
void
|
||||
BApplication::SetCursor(const BCursor *cursor, bool sync)
|
||||
BApplication::SetCursor(const BCursor* cursor, bool sync)
|
||||
{
|
||||
BPrivate::AppServerLink link;
|
||||
link.StartMessage(AS_SET_CURSOR);
|
||||
@@ -845,7 +929,7 @@ BApplication::CountWindows() const
|
||||
}
|
||||
|
||||
|
||||
BWindow *
|
||||
BWindow*
|
||||
BApplication::WindowAt(int32 index) const
|
||||
{
|
||||
return _WindowAt(index, false);
|
||||
@@ -865,10 +949,10 @@ BApplication::CountLoopers() const
|
||||
}
|
||||
|
||||
|
||||
BLooper *
|
||||
BLooper*
|
||||
BApplication::LooperAt(int32 index) const
|
||||
{
|
||||
BLooper *looper = NULL;
|
||||
BLooper* looper = NULL;
|
||||
AutoLocker<BLooperList> listLock(gLooperList);
|
||||
if (listLock.IsLocked())
|
||||
looper = gLooperList.LooperAt(index);
|
||||
@@ -885,7 +969,7 @@ BApplication::IsLaunching() const
|
||||
|
||||
|
||||
status_t
|
||||
BApplication::GetAppInfo(app_info *info) const
|
||||
BApplication::GetAppInfo(app_info* info) const
|
||||
{
|
||||
if (be_app == NULL || be_roster == NULL)
|
||||
return B_NO_INIT;
|
||||
@@ -893,7 +977,7 @@ BApplication::GetAppInfo(app_info *info) const
|
||||
}
|
||||
|
||||
|
||||
BResources *
|
||||
BResources*
|
||||
BApplication::AppResources()
|
||||
{
|
||||
if (sAppResources == NULL)
|
||||
@@ -904,7 +988,7 @@ BApplication::AppResources()
|
||||
|
||||
|
||||
void
|
||||
BApplication::DispatchMessage(BMessage *message, BHandler *handler)
|
||||
BApplication::DispatchMessage(BMessage* message, BHandler* handler)
|
||||
{
|
||||
if (handler != this) {
|
||||
// it's not ours to dispatch
|
||||
@@ -1025,9 +1109,9 @@ BApplication::SetPulseRate(bigtime_t rate)
|
||||
|
||||
|
||||
status_t
|
||||
BApplication::GetSupportedSuites(BMessage *data)
|
||||
BApplication::GetSupportedSuites(BMessage* data)
|
||||
{
|
||||
if (!data)
|
||||
if (data == NULL)
|
||||
return B_BAD_VALUE;
|
||||
|
||||
status_t status = data->AddString("suites", "suite/vnd.Be-application");
|
||||
@@ -1043,7 +1127,7 @@ BApplication::GetSupportedSuites(BMessage *data)
|
||||
|
||||
|
||||
status_t
|
||||
BApplication::Perform(perform_code d, void *arg)
|
||||
BApplication::Perform(perform_code d, void* arg)
|
||||
{
|
||||
return BLooper::Perform(d, arg);
|
||||
}
|
||||
@@ -1060,8 +1144,8 @@ void BApplication::_ReservedApplication8() {}
|
||||
|
||||
|
||||
bool
|
||||
BApplication::ScriptReceived(BMessage *message, int32 index,
|
||||
BMessage *specifier, int32 what, const char *property)
|
||||
BApplication::ScriptReceived(BMessage* message, int32 index,
|
||||
BMessage* specifier, int32 what, const char* property)
|
||||
{
|
||||
BMessage reply(B_REPLY);
|
||||
status_t err = B_BAD_SCRIPT_SYNTAX;
|
||||
@@ -1091,19 +1175,23 @@ BApplication::ScriptReceived(BMessage *message, int32 index,
|
||||
err = specifier->FindInt32("index", &index);
|
||||
if (err != B_OK)
|
||||
break;
|
||||
|
||||
if (what == B_REVERSE_INDEX_SPECIFIER)
|
||||
index = CountWindows() - index;
|
||||
|
||||
err = B_BAD_INDEX;
|
||||
BWindow *win = WindowAt(index);
|
||||
if (!win)
|
||||
BWindow* window = WindowAt(index);
|
||||
if (window == NULL)
|
||||
break;
|
||||
BMessenger messenger(win);
|
||||
|
||||
BMessenger messenger(window);
|
||||
err = reply.AddMessenger("result", messenger);
|
||||
break;
|
||||
}
|
||||
|
||||
case B_NAME_SPECIFIER:
|
||||
{
|
||||
const char *name;
|
||||
const char* name;
|
||||
err = specifier->FindString("name", &name);
|
||||
if (err != B_OK)
|
||||
break;
|
||||
@@ -1129,27 +1217,31 @@ BApplication::ScriptReceived(BMessage *message, int32 index,
|
||||
err = specifier->FindInt32("index", &index);
|
||||
if (err != B_OK)
|
||||
break;
|
||||
|
||||
if (what == B_REVERSE_INDEX_SPECIFIER)
|
||||
index = CountLoopers() - index;
|
||||
|
||||
err = B_BAD_INDEX;
|
||||
BLooper *looper = LooperAt(index);
|
||||
if (!looper)
|
||||
BLooper* looper = LooperAt(index);
|
||||
if (looper == NULL)
|
||||
break;
|
||||
|
||||
BMessenger messenger(looper);
|
||||
err = reply.AddMessenger("result", messenger);
|
||||
break;
|
||||
}
|
||||
|
||||
case B_NAME_SPECIFIER:
|
||||
{
|
||||
const char *name;
|
||||
const char* name;
|
||||
err = specifier->FindString("name", &name);
|
||||
if (err != B_OK)
|
||||
break;
|
||||
err = B_NAME_NOT_FOUND;
|
||||
for (int32 i = 0; i < CountLoopers(); i++) {
|
||||
BLooper *looper = LooperAt(i);
|
||||
if (looper && looper->Name()
|
||||
&& !strcmp(looper->Name(), name)) {
|
||||
BLooper* looper = LooperAt(i);
|
||||
if (looper != NULL && looper->Name()
|
||||
&& strcmp(looper->Name(), name) == 0) {
|
||||
BMessenger messenger(looper);
|
||||
err = reply.AddMessenger("result", messenger);
|
||||
break;
|
||||
@@ -1157,6 +1249,7 @@ BApplication::ScriptReceived(BMessage *message, int32 index,
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case B_ID_SPECIFIER:
|
||||
{
|
||||
// TODO
|
||||
@@ -1164,16 +1257,17 @@ BApplication::ScriptReceived(BMessage *message, int32 index,
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else if (strcmp("Name", property) == 0) {
|
||||
} else if (strcmp("Name", property) == 0)
|
||||
err = reply.AddString("result", Name());
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case B_COUNT_PROPERTIES:
|
||||
if (strcmp("Looper", property) == 0) {
|
||||
if (strcmp("Looper", property) == 0)
|
||||
err = reply.AddInt32("result", CountLoopers());
|
||||
} else if (strcmp("Window", property) == 0) {
|
||||
else if (strcmp("Window", property) == 0)
|
||||
err = reply.AddInt32("result", CountWindows());
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
if (err == B_BAD_SCRIPT_SYNTAX)
|
||||
@@ -1185,6 +1279,7 @@ BApplication::ScriptReceived(BMessage *message, int32 index,
|
||||
}
|
||||
reply.AddInt32("error", err);
|
||||
message->SendReply(&reply);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1261,7 +1356,7 @@ BApplication::_ConnectToServer()
|
||||
// 2) port_id - looper port for this BApplication
|
||||
// 3) team_id - team identification field
|
||||
// 4) int32 - handler ID token of the app
|
||||
// 5) char * - signature of the regular app
|
||||
// 5) char* - signature of the regular app
|
||||
|
||||
fServerLink->StartMessage(AS_CREATE_APP);
|
||||
fServerLink->Attach<port_id>(fServerLink->ReceiverPort());
|
||||
@@ -1301,6 +1396,7 @@ BApplication::_ConnectToServer()
|
||||
return status;
|
||||
|
||||
fServerReadOnlyMemory = base;
|
||||
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
@@ -1335,34 +1431,35 @@ BApplication::_ReconnectToServer()
|
||||
|
||||
#if 0
|
||||
void
|
||||
BApplication::send_drag(BMessage *message, int32 vs_token, BPoint offset,
|
||||
BRect dragRect, BHandler *replyTo)
|
||||
BApplication::send_drag(BMessage* message, int32 vs_token, BPoint offset,
|
||||
BRect dragRect, BHandler* replyTo)
|
||||
{
|
||||
// TODO: implement
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
BApplication::send_drag(BMessage *message, int32 vs_token, BPoint offset,
|
||||
int32 bitmapToken, drawing_mode dragMode, BHandler *replyTo)
|
||||
BApplication::send_drag(BMessage* message, int32 vs_token, BPoint offset,
|
||||
int32 bitmapToken, drawing_mode dragMode, BHandler* replyTo)
|
||||
{
|
||||
// TODO: implement
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
BApplication::write_drag(_BSession_ *session, BMessage *message)
|
||||
BApplication::write_drag(_BSession_* session, BMessage* message)
|
||||
{
|
||||
// TODO: implement
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
bool
|
||||
BApplication::_WindowQuitLoop(bool quitFilePanels, bool force)
|
||||
{
|
||||
int32 index = 0;
|
||||
while (true) {
|
||||
BWindow *window = WindowAt(index);
|
||||
BWindow* window = WindowAt(index);
|
||||
if (window == NULL)
|
||||
break;
|
||||
|
||||
@@ -1397,6 +1494,7 @@ BApplication::_WindowQuitLoop(bool quitFilePanels, bool force)
|
||||
// we need to continue at the start of the list again - it
|
||||
// might have changed
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1421,14 +1519,14 @@ BApplication::_QuitAllWindows(bool force)
|
||||
|
||||
|
||||
void
|
||||
BApplication::_ArgvReceived(BMessage *message)
|
||||
BApplication::_ArgvReceived(BMessage* message)
|
||||
{
|
||||
ASSERT(message != NULL);
|
||||
|
||||
// build the argv vector
|
||||
status_t error = B_OK;
|
||||
int32 argc = 0;
|
||||
char **argv = NULL;
|
||||
char** argv = NULL;
|
||||
if (message->FindInt32("argc", &argc) == B_OK && argc > 0) {
|
||||
// allocate a NULL terminated array
|
||||
argv = new(std::nothrow) char*[argc + 1];
|
||||
@@ -1437,7 +1535,7 @@ BApplication::_ArgvReceived(BMessage *message)
|
||||
|
||||
// copy the arguments
|
||||
for (int32 i = 0; error == B_OK && i < argc; i++) {
|
||||
const char *arg = NULL;
|
||||
const char* arg = NULL;
|
||||
error = message->FindString("argv", i, &arg);
|
||||
if (error == B_OK && arg) {
|
||||
argv[i] = strdup(arg);
|
||||
@@ -1482,7 +1580,7 @@ BApplication::_CountWindows(bool includeMenus) const
|
||||
for (int32 i = 0; i < gLooperList.CountLoopers(); i++) {
|
||||
BWindow* window = dynamic_cast<BWindow*>(gLooperList.LooperAt(i));
|
||||
if (window != NULL && !window->fOffscreen && (includeMenus
|
||||
|| dynamic_cast<BMenuWindow *>(window) == NULL)) {
|
||||
|| dynamic_cast<BMenuWindow*>(window) == NULL)) {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
@@ -1491,7 +1589,7 @@ BApplication::_CountWindows(bool includeMenus) const
|
||||
}
|
||||
|
||||
|
||||
BWindow *
|
||||
BWindow*
|
||||
BApplication::_WindowAt(uint32 index, bool includeMenus) const
|
||||
{
|
||||
AutoLocker<BLooperList> listLock(gLooperList);
|
||||
@@ -1502,7 +1600,7 @@ BApplication::_WindowAt(uint32 index, bool includeMenus) const
|
||||
for (uint32 i = 0; i < count && index < count; i++) {
|
||||
BWindow* window = dynamic_cast<BWindow*>(gLooperList.LooperAt(i));
|
||||
if (window == NULL || (window != NULL && window->fOffscreen)
|
||||
|| (!includeMenus && dynamic_cast<BMenuWindow *>(window) != NULL)) {
|
||||
|| (!includeMenus && dynamic_cast<BMenuWindow*>(window) != NULL)) {
|
||||
index++;
|
||||
continue;
|
||||
}
|
||||
@@ -1547,81 +1645,3 @@ BApplication::_InitAppResources()
|
||||
|
||||
sAppResources = resources;
|
||||
}
|
||||
|
||||
|
||||
// #pragma mark -
|
||||
|
||||
|
||||
/*!
|
||||
\brief Checks whether the supplied string is a valid application signature.
|
||||
|
||||
An error message is printed, if the string is no valid app signature.
|
||||
|
||||
\param signature The string to be checked.
|
||||
\return
|
||||
- \c B_OK: \a signature is a valid app signature.
|
||||
- \c B_BAD_VALUE: \a signature is \c NULL or no valid app signature.
|
||||
*/
|
||||
static status_t
|
||||
check_app_signature(const char *signature)
|
||||
{
|
||||
bool isValid = false;
|
||||
BMimeType type(signature);
|
||||
if (type.IsValid() && !type.IsSupertypeOnly()
|
||||
&& BMimeType("application").Contains(&type)) {
|
||||
isValid = true;
|
||||
}
|
||||
if (!isValid) {
|
||||
printf("bad signature (%s), must begin with \"application/\" and "
|
||||
"can't conflict with existing registered mime types inside "
|
||||
"the \"application\" media type.\n", signature);
|
||||
}
|
||||
return (isValid ? B_OK : B_BAD_VALUE);
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
\brief Returns the looper name for a given signature.
|
||||
|
||||
Normally this is "AppLooperPort", but in case of the registrar a
|
||||
special name.
|
||||
|
||||
\return The looper name.
|
||||
*/
|
||||
static const char *
|
||||
looper_name_for(const char *signature)
|
||||
{
|
||||
if (signature && !strcasecmp(signature, kRegistrarSignature))
|
||||
return BPrivate::get_roster_port_name();
|
||||
return "AppLooperPort";
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
\brief Fills the passed BMessage with B_ARGV_RECEIVED infos.
|
||||
*/
|
||||
#ifndef RUN_WITHOUT_REGISTRAR
|
||||
static void
|
||||
fill_argv_message(BMessage &message)
|
||||
{
|
||||
message.what = B_ARGV_RECEIVED;
|
||||
|
||||
int32 argc = __libc_argc;
|
||||
const char * const *argv = __libc_argv;
|
||||
|
||||
// add argc
|
||||
message.AddInt32("argc", argc);
|
||||
|
||||
// add argv
|
||||
for (int32 i = 0; i < argc; i++) {
|
||||
if (argv[i] != NULL)
|
||||
message.AddString("argv", argv[i]);
|
||||
}
|
||||
|
||||
// add current working directory
|
||||
char cwd[B_PATH_NAME_LENGTH];
|
||||
if (getcwd(cwd, B_PATH_NAME_LENGTH))
|
||||
message.AddString("cwd", cwd);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
+77
-69
@@ -1,10 +1,10 @@
|
||||
/*
|
||||
* Copyright 2001-2007, Haiku.
|
||||
* Copyright 2001-2014 Haiku, Inc. All rights reserved.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*
|
||||
* Authors:
|
||||
* Erik Jaesler (erik@cgsoftware.com)
|
||||
* Axel Dörfler, axeld@pinc-software.de
|
||||
* Erik Jaesler, erik@cgsoftware.com
|
||||
*/
|
||||
|
||||
|
||||
@@ -86,7 +86,7 @@ static property_info sHandlerPropInfo[] = {
|
||||
{}
|
||||
};
|
||||
|
||||
bool FilterDeleter(void *filter);
|
||||
bool FilterDeleter(void* filter);
|
||||
|
||||
namespace BPrivate {
|
||||
|
||||
@@ -103,7 +103,7 @@ class ObserverList {
|
||||
bool IsEmpty();
|
||||
|
||||
private:
|
||||
typedef map<uint32, vector<const BHandler *> > HandlerObserverMap;
|
||||
typedef map<uint32, vector<const BHandler*> > HandlerObserverMap;
|
||||
typedef map<uint32, vector<BMessenger> > MessengerObserverMap;
|
||||
|
||||
void _ValidateHandlers(uint32 what);
|
||||
@@ -121,7 +121,7 @@ using namespace BPrivate;
|
||||
// #pragma mark -
|
||||
|
||||
|
||||
BHandler::BHandler(const char *name)
|
||||
BHandler::BHandler(const char* name)
|
||||
: BArchivable(),
|
||||
fName(NULL)
|
||||
{
|
||||
@@ -154,11 +154,11 @@ BHandler::~BHandler()
|
||||
}
|
||||
|
||||
|
||||
BHandler::BHandler(BMessage *data)
|
||||
BHandler::BHandler(BMessage* data)
|
||||
: BArchivable(data),
|
||||
fName(NULL)
|
||||
{
|
||||
const char *name = NULL;
|
||||
const char* name = NULL;
|
||||
|
||||
if (data)
|
||||
data->FindString(kArchiveNameField, &name);
|
||||
@@ -167,8 +167,8 @@ BHandler::BHandler(BMessage *data)
|
||||
}
|
||||
|
||||
|
||||
BArchivable *
|
||||
BHandler::Instantiate(BMessage *data)
|
||||
BArchivable*
|
||||
BHandler::Instantiate(BMessage* data)
|
||||
{
|
||||
if (!validate_instantiation(data, "BHandler"))
|
||||
return NULL;
|
||||
@@ -178,20 +178,21 @@ BHandler::Instantiate(BMessage *data)
|
||||
|
||||
|
||||
status_t
|
||||
BHandler::Archive(BMessage *data, bool deep) const
|
||||
BHandler::Archive(BMessage* data, bool deep) const
|
||||
{
|
||||
status_t status = BArchivable::Archive(data, deep);
|
||||
if (status < B_OK)
|
||||
return status;
|
||||
|
||||
if (!fName)
|
||||
if (fName == NULL)
|
||||
return B_OK;
|
||||
|
||||
return data->AddString(kArchiveNameField, fName);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
BHandler::MessageReceived(BMessage *message)
|
||||
BHandler::MessageReceived(BMessage* message)
|
||||
{
|
||||
BMessage reply(B_REPLY);
|
||||
|
||||
@@ -202,8 +203,10 @@ BHandler::MessageReceived(BMessage *message)
|
||||
BMessenger target;
|
||||
uint32 what;
|
||||
if (message->FindMessenger(kObserveTarget, &target) != B_OK
|
||||
|| message->FindInt32(B_OBSERVE_WHAT_CHANGE, (int32*)&what) != B_OK)
|
||||
|| message->FindInt32(B_OBSERVE_WHAT_CHANGE, (int32*)&what)
|
||||
!= B_OK) {
|
||||
break;
|
||||
}
|
||||
|
||||
ObserverList* list = _ObserverList();
|
||||
if (list != NULL) {
|
||||
@@ -220,7 +223,7 @@ BHandler::MessageReceived(BMessage *message)
|
||||
int32 cur;
|
||||
BMessage specifier;
|
||||
int32 form;
|
||||
const char *prop;
|
||||
const char* prop;
|
||||
|
||||
status_t err = message->GetCurrentSpecifier(&cur, &specifier,
|
||||
&form, &prop);
|
||||
@@ -257,7 +260,8 @@ BHandler::MessageReceived(BMessage *message)
|
||||
}
|
||||
}
|
||||
|
||||
// ToDo: there is some more work needed here (someone in the know should fill in)!
|
||||
// ToDo: there is some more work needed here
|
||||
// (someone in the know should fill in)!
|
||||
|
||||
if (fNextHandler) {
|
||||
// we need to apply the next handler's filters here, too
|
||||
@@ -278,7 +282,7 @@ BHandler::MessageReceived(BMessage *message)
|
||||
}
|
||||
|
||||
|
||||
BLooper *
|
||||
BLooper*
|
||||
BHandler::Looper() const
|
||||
{
|
||||
return fLooper;
|
||||
@@ -286,7 +290,7 @@ BHandler::Looper() const
|
||||
|
||||
|
||||
void
|
||||
BHandler::SetName(const char *name)
|
||||
BHandler::SetName(const char* name)
|
||||
{
|
||||
if (fName != NULL) {
|
||||
free(fName);
|
||||
@@ -298,7 +302,7 @@ BHandler::SetName(const char *name)
|
||||
}
|
||||
|
||||
|
||||
const char *
|
||||
const char*
|
||||
BHandler::Name() const
|
||||
{
|
||||
return fName;
|
||||
@@ -306,9 +310,9 @@ BHandler::Name() const
|
||||
|
||||
|
||||
void
|
||||
BHandler::SetNextHandler(BHandler *handler)
|
||||
BHandler::SetNextHandler(BHandler* handler)
|
||||
{
|
||||
if (!fLooper) {
|
||||
if (fLooper == NULL) {
|
||||
debugger("handler must belong to looper before setting NextHandler");
|
||||
return;
|
||||
}
|
||||
@@ -318,7 +322,7 @@ BHandler::SetNextHandler(BHandler *handler)
|
||||
return;
|
||||
}
|
||||
|
||||
if (handler && fLooper != handler->Looper()) {
|
||||
if (handler != NULL && fLooper != handler->Looper()) {
|
||||
debugger("The handler and its NextHandler must have the same looper");
|
||||
return;
|
||||
}
|
||||
@@ -327,7 +331,7 @@ BHandler::SetNextHandler(BHandler *handler)
|
||||
}
|
||||
|
||||
|
||||
BHandler *
|
||||
BHandler*
|
||||
BHandler::NextHandler() const
|
||||
{
|
||||
return fNextHandler;
|
||||
@@ -335,10 +339,10 @@ BHandler::NextHandler() const
|
||||
|
||||
|
||||
void
|
||||
BHandler::AddFilter(BMessageFilter *filter)
|
||||
BHandler::AddFilter(BMessageFilter* filter)
|
||||
{
|
||||
BLooper* looper = fLooper;
|
||||
if (looper && !looper->IsLocked()) {
|
||||
if (looper != NULL && !looper->IsLocked()) {
|
||||
debugger("Owning Looper must be locked before calling SetFilterList");
|
||||
return;
|
||||
}
|
||||
@@ -346,7 +350,7 @@ BHandler::AddFilter(BMessageFilter *filter)
|
||||
if (looper != NULL)
|
||||
filter->SetLooper(looper);
|
||||
|
||||
if (!fFilters)
|
||||
if (fFilters == NULL)
|
||||
fFilters = new BList;
|
||||
|
||||
fFilters->AddItem(filter);
|
||||
@@ -354,15 +358,15 @@ BHandler::AddFilter(BMessageFilter *filter)
|
||||
|
||||
|
||||
bool
|
||||
BHandler::RemoveFilter(BMessageFilter *filter)
|
||||
BHandler::RemoveFilter(BMessageFilter* filter)
|
||||
{
|
||||
BLooper* looper = fLooper;
|
||||
if (looper && !looper->IsLocked()) {
|
||||
if (looper != NULL && !looper->IsLocked()) {
|
||||
debugger("Owning Looper must be locked before calling SetFilterList");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (fFilters != NULL && fFilters->RemoveItem((void *)filter)) {
|
||||
if (fFilters != NULL && fFilters->RemoveItem((void*)filter)) {
|
||||
filter->SetLooper(NULL);
|
||||
return true;
|
||||
}
|
||||
@@ -375,7 +379,7 @@ void
|
||||
BHandler::SetFilterList(BList* filters)
|
||||
{
|
||||
BLooper* looper = fLooper;
|
||||
if (looper && !looper->IsLocked()) {
|
||||
if (looper != NULL && !looper->IsLocked()) {
|
||||
debugger("Owning Looper must be locked before calling SetFilterList");
|
||||
return;
|
||||
}
|
||||
@@ -389,7 +393,7 @@ BHandler::SetFilterList(BList* filters)
|
||||
*/
|
||||
|
||||
// TODO: Explore issues with using BObjectList
|
||||
if (fFilters) {
|
||||
if (fFilters != NULL) {
|
||||
fFilters->DoForEach(FilterDeleter);
|
||||
delete fFilters;
|
||||
}
|
||||
@@ -397,8 +401,8 @@ BHandler::SetFilterList(BList* filters)
|
||||
fFilters = filters;
|
||||
if (fFilters) {
|
||||
for (int32 i = 0; i < fFilters->CountItems(); ++i) {
|
||||
BMessageFilter *filter =
|
||||
static_cast<BMessageFilter *>(fFilters->ItemAt(i));
|
||||
BMessageFilter* filter =
|
||||
static_cast<BMessageFilter*>(fFilters->ItemAt(i));
|
||||
if (filter != NULL)
|
||||
filter->SetLooper(looper);
|
||||
}
|
||||
@@ -406,7 +410,7 @@ BHandler::SetFilterList(BList* filters)
|
||||
}
|
||||
|
||||
|
||||
BList *
|
||||
BList*
|
||||
BHandler::FilterList()
|
||||
{
|
||||
return fFilters;
|
||||
@@ -416,7 +420,7 @@ BHandler::FilterList()
|
||||
bool
|
||||
BHandler::LockLooper()
|
||||
{
|
||||
BLooper *looper = fLooper;
|
||||
BLooper* looper = fLooper;
|
||||
// Locking the looper also makes sure that the looper is valid
|
||||
if (looper != NULL && looper->Lock()) {
|
||||
// Have we locked the right looper? That's as far as the
|
||||
@@ -435,7 +439,7 @@ BHandler::LockLooper()
|
||||
status_t
|
||||
BHandler::LockLooperWithTimeout(bigtime_t timeout)
|
||||
{
|
||||
BLooper *looper = fLooper;
|
||||
BLooper* looper = fLooper;
|
||||
if (looper == NULL)
|
||||
return B_BAD_VALUE;
|
||||
|
||||
@@ -460,26 +464,26 @@ BHandler::UnlockLooper()
|
||||
}
|
||||
|
||||
|
||||
BHandler *
|
||||
BHandler::ResolveSpecifier(BMessage *msg, int32 index,
|
||||
BMessage *specifier, int32 form, const char *property)
|
||||
BHandler*
|
||||
BHandler::ResolveSpecifier(BMessage* message, int32 index,
|
||||
BMessage* specifier, int32 what, const char* property)
|
||||
{
|
||||
// Straight from the BeBook
|
||||
BPropertyInfo propertyInfo(sHandlerPropInfo);
|
||||
if (propertyInfo.FindMatch(msg, index, specifier, form, property) >= 0)
|
||||
if (propertyInfo.FindMatch(message, index, specifier, what, property) >= 0)
|
||||
return this;
|
||||
|
||||
BMessage reply(B_MESSAGE_NOT_UNDERSTOOD);
|
||||
reply.AddInt32("error", B_BAD_SCRIPT_SYNTAX);
|
||||
reply.AddString("message", "Didn't understand the specifier(s)");
|
||||
msg->SendReply(&reply);
|
||||
message->SendReply(&reply);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
BHandler::GetSupportedSuites(BMessage *data)
|
||||
BHandler::GetSupportedSuites(BMessage* data)
|
||||
{
|
||||
/**
|
||||
@note This is the output from the original implementation (calling
|
||||
@@ -507,12 +511,12 @@ BMessage: what = (0x0, or 0)
|
||||
*/
|
||||
|
||||
status_t err = B_OK;
|
||||
if (!data)
|
||||
if (data == NULL)
|
||||
err = B_BAD_VALUE;
|
||||
|
||||
if (!err) {
|
||||
if (err != B_OK) {
|
||||
err = data->AddString("suites", "suite/vnd.Be-handler");
|
||||
if (!err) {
|
||||
if (err != B_OK) {
|
||||
BPropertyInfo propertyInfo(sHandlerPropInfo);
|
||||
err = data->AddFlat("messages", &propertyInfo);
|
||||
}
|
||||
@@ -588,24 +592,24 @@ BHandler::StopWatching(BHandler* handler, uint32 what)
|
||||
|
||||
|
||||
status_t
|
||||
BHandler::StopWatchingAll(BHandler *handler)
|
||||
BHandler::StopWatchingAll(BHandler* handler)
|
||||
{
|
||||
return StopWatching(handler, B_OBSERVER_OBSERVE_ALL);
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
BHandler::Perform(perform_code d, void *arg)
|
||||
BHandler::Perform(perform_code d, void* arg)
|
||||
{
|
||||
return BArchivable::Perform(d, arg);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
BHandler::SendNotices(uint32 what, const BMessage *msg)
|
||||
BHandler::SendNotices(uint32 what, const BMessage* notice)
|
||||
{
|
||||
if (fObserverList != NULL)
|
||||
fObserverList->SendNotices(what, msg);
|
||||
fObserverList->SendNotices(what, notice);
|
||||
}
|
||||
|
||||
|
||||
@@ -617,7 +621,7 @@ BHandler::IsWatched() const
|
||||
|
||||
|
||||
void
|
||||
BHandler::_InitData(const char *name)
|
||||
BHandler::_InitData(const char* name)
|
||||
{
|
||||
SetName(name);
|
||||
|
||||
@@ -655,14 +659,17 @@ BHandler::operator=(const BHandler &)
|
||||
|
||||
|
||||
void
|
||||
BHandler::SetLooper(BLooper *looper)
|
||||
BHandler::SetLooper(BLooper* looper)
|
||||
{
|
||||
fLooper = looper;
|
||||
gDefaultTokens.SetHandlerTarget(fToken, looper ? looper->fDirectTarget : NULL);
|
||||
gDefaultTokens.SetHandlerTarget(fToken,
|
||||
looper ? looper->fDirectTarget : NULL);
|
||||
|
||||
if (fFilters) {
|
||||
for (int32 i = 0; i < fFilters->CountItems(); i++)
|
||||
static_cast<BMessageFilter *>(fFilters->ItemAtFast(i))->SetLooper(looper);
|
||||
if (fFilters != NULL) {
|
||||
for (int32 i = 0; i < fFilters->CountItems(); i++) {
|
||||
static_cast<BMessageFilter*>(
|
||||
fFilters->ItemAtFast(i))->SetLooper(looper);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -700,8 +707,8 @@ ObserverList::~ObserverList()
|
||||
void
|
||||
ObserverList::_ValidateHandlers(uint32 what)
|
||||
{
|
||||
vector<const BHandler *>& handlers = fHandlerMap[what];
|
||||
vector<const BHandler *>::iterator iterator = handlers.begin();
|
||||
vector<const BHandler*>& handlers = fHandlerMap[what];
|
||||
vector<const BHandler*>::iterator iterator = handlers.begin();
|
||||
|
||||
while (iterator != handlers.end()) {
|
||||
BMessenger target(*iterator);
|
||||
@@ -717,9 +724,10 @@ ObserverList::_ValidateHandlers(uint32 what)
|
||||
|
||||
|
||||
void
|
||||
ObserverList::_SendNotices(uint32 what, BMessage* message)
|
||||
ObserverList::_SendNotices(uint32 what, BMessage* notice)
|
||||
{
|
||||
// first iterate over the list of handlers and try to make valid messengers out of them
|
||||
// first iterate over the list of handlers and try to make valid
|
||||
// messengers out of them
|
||||
_ValidateHandlers(what);
|
||||
|
||||
// now send it to all messengers we know
|
||||
@@ -732,20 +740,20 @@ ObserverList::_SendNotices(uint32 what, BMessage* message)
|
||||
continue;
|
||||
}
|
||||
|
||||
(*iterator).SendMessage(message);
|
||||
(*iterator).SendMessage(notice);
|
||||
iterator++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
ObserverList::SendNotices(uint32 what, const BMessage* message)
|
||||
ObserverList::SendNotices(uint32 what, const BMessage* notice)
|
||||
{
|
||||
BMessage *copy = NULL;
|
||||
if (message) {
|
||||
copy = new BMessage(*message);
|
||||
BMessage* copy = NULL;
|
||||
if (notice != NULL) {
|
||||
copy = new BMessage(*notice);
|
||||
copy->what = B_OBSERVER_NOTICE_CHANGE;
|
||||
copy->AddInt32(B_OBSERVE_ORIGINAL_WHAT, message->what);
|
||||
copy->AddInt32(B_OBSERVE_ORIGINAL_WHAT, notice->what);
|
||||
} else
|
||||
copy = new BMessage(B_OBSERVER_NOTICE_CHANGE);
|
||||
|
||||
@@ -755,12 +763,13 @@ ObserverList::SendNotices(uint32 what, const BMessage* message)
|
||||
_SendNotices(B_OBSERVER_OBSERVE_ALL, copy);
|
||||
|
||||
delete copy;
|
||||
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
ObserverList::Add(const BHandler *handler, uint32 what)
|
||||
ObserverList::Add(const BHandler* handler, uint32 what)
|
||||
{
|
||||
if (handler == NULL)
|
||||
return B_BAD_HANDLER;
|
||||
@@ -802,7 +811,7 @@ ObserverList::Add(const BMessenger &messenger, uint32 what)
|
||||
|
||||
|
||||
status_t
|
||||
ObserverList::Remove(const BHandler *handler, uint32 what)
|
||||
ObserverList::Remove(const BHandler* handler, uint32 what)
|
||||
{
|
||||
if (handler == NULL)
|
||||
return B_BAD_HANDLER;
|
||||
@@ -858,9 +867,8 @@ ObserverList::IsEmpty()
|
||||
|
||||
|
||||
bool
|
||||
FilterDeleter(void *_filter)
|
||||
FilterDeleter(void* _filter)
|
||||
{
|
||||
delete static_cast<BMessageFilter *>(_filter);
|
||||
delete static_cast<BMessageFilter*>(_filter);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
+59
-55
@@ -1,16 +1,16 @@
|
||||
/*
|
||||
* Copyright 2001-2013, Haiku.
|
||||
* Copyright 2001-2013 Haiku, Inc. All rights reserved
|
||||
* Distributed under the terms of the MIT License.
|
||||
*
|
||||
* Authors:
|
||||
* Erik Jaesler (erik@cgsoftware.com)
|
||||
* DarkWyrm (bpmagic@columbus.rr.com)
|
||||
* Ingo Weinhold, bonefish@@users.sf.net
|
||||
* DarkWyrm, bpmagic@columbus.rr.com
|
||||
* Axel Dörfler, axeld@pinc-software.de
|
||||
* Erik Jaesler, erik@cgsoftware.com
|
||||
* Ingo Weinhold, bonefish@@users.sf.net
|
||||
*/
|
||||
|
||||
|
||||
/*! BLooper class spawns a thread that runs a message loop. */
|
||||
// BLooper class spawns a thread that runs a message loop.
|
||||
|
||||
|
||||
#include <AppMisc.h>
|
||||
@@ -106,7 +106,8 @@ struct _loop_data_ {
|
||||
|
||||
|
||||
BLooper::BLooper(const char* name, int32 priority, int32 portCapacity)
|
||||
: BHandler(name)
|
||||
:
|
||||
BHandler(name)
|
||||
{
|
||||
_InitData(name, priority, portCapacity);
|
||||
}
|
||||
@@ -626,8 +627,8 @@ BLooper::Sem() const
|
||||
|
||||
|
||||
BHandler*
|
||||
BLooper::ResolveSpecifier(BMessage* msg, int32 index, BMessage* specifier,
|
||||
int32 form, const char* property)
|
||||
BLooper::ResolveSpecifier(BMessage* message, int32 index, BMessage* specifier,
|
||||
int32 what, const char* property)
|
||||
{
|
||||
/**
|
||||
@note When I was first dumping the results of GetSupportedSuites() from
|
||||
@@ -645,7 +646,7 @@ BLooper::ResolveSpecifier(BMessage* msg, int32 index, BMessage* specifier,
|
||||
uint32 data;
|
||||
status_t err = B_OK;
|
||||
const char* errMsg = "";
|
||||
if (propertyInfo.FindMatch(msg, index, specifier, form, property, &data)
|
||||
if (propertyInfo.FindMatch(message, index, specifier, what, property, &data)
|
||||
>= 0) {
|
||||
switch (data) {
|
||||
case BLOOPER_PROCESS_INTERNALLY:
|
||||
@@ -654,13 +655,13 @@ BLooper::ResolveSpecifier(BMessage* msg, int32 index, BMessage* specifier,
|
||||
case BLOOPER_HANDLER_BY_INDEX:
|
||||
{
|
||||
int32 index = specifier->FindInt32("index");
|
||||
if (form == B_REVERSE_INDEX_SPECIFIER) {
|
||||
if (what == B_REVERSE_INDEX_SPECIFIER) {
|
||||
index = CountHandlers() - index;
|
||||
}
|
||||
BHandler* target = HandlerAt(index);
|
||||
if (target) {
|
||||
// Specifier has been fully handled
|
||||
msg->PopSpecifier();
|
||||
message->PopSpecifier();
|
||||
return target;
|
||||
} else {
|
||||
err = B_BAD_INDEX;
|
||||
@@ -672,17 +673,16 @@ BLooper::ResolveSpecifier(BMessage* msg, int32 index, BMessage* specifier,
|
||||
default:
|
||||
err = B_BAD_SCRIPT_SYNTAX;
|
||||
errMsg = "Didn't understand the specifier(s)";
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
return BHandler::ResolveSpecifier(msg, index, specifier, form,
|
||||
return BHandler::ResolveSpecifier(message, index, specifier, what,
|
||||
property);
|
||||
}
|
||||
|
||||
BMessage reply(B_MESSAGE_NOT_UNDERSTOOD);
|
||||
reply.AddInt32("error", err);
|
||||
reply.AddString("message", errMsg);
|
||||
msg->SendReply(&reply);
|
||||
message->SendReply(&reply);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
@@ -709,7 +709,7 @@ BLooper::GetSupportedSuites(BMessage* data)
|
||||
void
|
||||
BLooper::AddCommonFilter(BMessageFilter* filter)
|
||||
{
|
||||
if (!filter)
|
||||
if (filter == NULL)
|
||||
return;
|
||||
|
||||
AssertLocked();
|
||||
@@ -719,7 +719,7 @@ BLooper::AddCommonFilter(BMessageFilter* filter)
|
||||
return;
|
||||
}
|
||||
|
||||
if (!fCommonFilters)
|
||||
if (fCommonFilters == NULL)
|
||||
fCommonFilters = new BList(FILTER_LIST_BLOCK_SIZE);
|
||||
|
||||
filter->SetLooper(this);
|
||||
@@ -732,7 +732,7 @@ BLooper::RemoveCommonFilter(BMessageFilter* filter)
|
||||
{
|
||||
AssertLocked();
|
||||
|
||||
if (!fCommonFilters)
|
||||
if (fCommonFilters == NULL)
|
||||
return false;
|
||||
|
||||
bool result = fCommonFilters->RemoveItem(filter);
|
||||
@@ -879,7 +879,7 @@ BLooper::_Lock(BLooper* looper, port_id port, bigtime_t timeout)
|
||||
return B_BAD_VALUE;
|
||||
}
|
||||
} else if (!gLooperList.IsLooperValid(looper)) {
|
||||
// Check looper validity
|
||||
// Check looper validity
|
||||
PRINT(("BLooper::_Lock() done 4\n"));
|
||||
return B_BAD_VALUE;
|
||||
}
|
||||
@@ -908,7 +908,7 @@ BLooper::_Lock(BLooper* looper, port_id port, bigtime_t timeout)
|
||||
|
||||
|
||||
status_t
|
||||
BLooper::_LockComplete(BLooper *looper, int32 oldCount, thread_id thread,
|
||||
BLooper::_LockComplete(BLooper* looper, int32 oldCount, thread_id thread,
|
||||
sem_id sem, bigtime_t timeout)
|
||||
{
|
||||
status_t err = B_OK;
|
||||
@@ -934,7 +934,7 @@ BLooper::_LockComplete(BLooper *looper, int32 oldCount, thread_id thread,
|
||||
|
||||
|
||||
void
|
||||
BLooper::_InitData(const char *name, int32 priority, int32 portCapacity)
|
||||
BLooper::_InitData(const char* name, int32 priority, int32 portCapacity)
|
||||
{
|
||||
fOwner = B_ERROR;
|
||||
fCachedStack = 0;
|
||||
@@ -1001,7 +1001,7 @@ BLooper::_AddMessagePriv(BMessage* message)
|
||||
status_t
|
||||
BLooper::_task0_(void* arg)
|
||||
{
|
||||
BLooper* looper = (BLooper *)arg;
|
||||
BLooper* looper = (BLooper*)arg;
|
||||
|
||||
PRINT(("LOOPER: _task0_()\n"));
|
||||
|
||||
@@ -1017,11 +1017,11 @@ BLooper::_task0_(void* arg)
|
||||
}
|
||||
|
||||
|
||||
void *
|
||||
void*
|
||||
BLooper::ReadRawFromPort(int32* msgCode, bigtime_t timeout)
|
||||
{
|
||||
PRINT(("BLooper::ReadRawFromPort()\n"));
|
||||
uint8 *buffer = NULL;
|
||||
uint8* buffer = NULL;
|
||||
ssize_t bufferSize;
|
||||
|
||||
do {
|
||||
@@ -1034,7 +1034,7 @@ BLooper::ReadRawFromPort(int32* msgCode, bigtime_t timeout)
|
||||
}
|
||||
|
||||
if (bufferSize > 0)
|
||||
buffer = (uint8 *)malloc(bufferSize);
|
||||
buffer = (uint8*)malloc(bufferSize);
|
||||
|
||||
// we don't want to wait again here, since that can only mean
|
||||
// that someone else has read our message and our bufferSize
|
||||
@@ -1048,7 +1048,9 @@ BLooper::ReadRawFromPort(int32* msgCode, bigtime_t timeout)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
PRINT(("BLooper::ReadRawFromPort() read: %.4s, %p (%d bytes)\n", (char *)msgCode, buffer, bufferSize));
|
||||
PRINT(("BLooper::ReadRawFromPort() read: %.4s, %p (%d bytes)\n",
|
||||
(char*)msgCode, buffer, bufferSize));
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
@@ -1058,10 +1060,10 @@ BLooper::ReadMessageFromPort(bigtime_t timeout)
|
||||
{
|
||||
PRINT(("BLooper::ReadMessageFromPort()\n"));
|
||||
int32 msgCode;
|
||||
BMessage *message = NULL;
|
||||
BMessage* message = NULL;
|
||||
|
||||
void *buffer = ReadRawFromPort(&msgCode, timeout);
|
||||
if (!buffer)
|
||||
void* buffer = ReadRawFromPort(&msgCode, timeout);
|
||||
if (buffer == NULL)
|
||||
return NULL;
|
||||
|
||||
message = ConvertToMessage(buffer, msgCode);
|
||||
@@ -1076,7 +1078,7 @@ BMessage*
|
||||
BLooper::ConvertToMessage(void* buffer, int32 code)
|
||||
{
|
||||
PRINT(("BLooper::ConvertToMessage()\n"));
|
||||
if (!buffer)
|
||||
if (buffer == NULL)
|
||||
return NULL;
|
||||
|
||||
BMessage* message = new BMessage();
|
||||
@@ -1109,7 +1111,7 @@ BLooper::task_looper()
|
||||
// TODO: timeout determination algo
|
||||
// Read from message port (how do we determine what the timeout is?)
|
||||
PRINT(("LOOPER: MessageFromPort()...\n"));
|
||||
BMessage *msg = MessageFromPort();
|
||||
BMessage* msg = MessageFromPort();
|
||||
PRINT(("LOOPER: ...done\n"));
|
||||
|
||||
// Did we get a message?
|
||||
@@ -1139,7 +1141,7 @@ BLooper::task_looper()
|
||||
|
||||
fLastMessage = message;
|
||||
|
||||
if (!fLastMessage) {
|
||||
if (fLastMessage == NULL) {
|
||||
// No more messages: Unlock the looper and terminate the
|
||||
// dispatch loop.
|
||||
dispatchNextMessage = false;
|
||||
@@ -1149,7 +1151,7 @@ BLooper::task_looper()
|
||||
DBG(fLastMessage->PrintToStream());
|
||||
|
||||
// Get the target handler
|
||||
BHandler *handler = NULL;
|
||||
BHandler* handler = NULL;
|
||||
BMessage::Private messagePrivate(fLastMessage);
|
||||
bool usePreferred = messagePrivate.UsePreferredTarget();
|
||||
|
||||
@@ -1160,7 +1162,7 @@ BLooper::task_looper()
|
||||
handler = this;
|
||||
} else {
|
||||
gDefaultTokens.GetToken(messagePrivate.GetTarget(),
|
||||
B_HANDLER_TOKEN, (void **)&handler);
|
||||
B_HANDLER_TOKEN, (void**)&handler);
|
||||
|
||||
// if this handler doesn't belong to us, we drop the message
|
||||
if (handler != NULL && handler->Looper() != this)
|
||||
@@ -1295,24 +1297,25 @@ BHandler*
|
||||
BLooper::_ApplyFilters(BList* list, BMessage* message, BHandler* target)
|
||||
{
|
||||
// This is where the action is!
|
||||
// Check the parameters
|
||||
if (!list || !message)
|
||||
|
||||
// check the parameters
|
||||
if (list == NULL || message == NULL)
|
||||
return target;
|
||||
|
||||
// For each filter in the provided list
|
||||
// for each filter in the provided list
|
||||
BMessageFilter* filter = NULL;
|
||||
for (int32 i = 0; i < list->CountItems(); ++i) {
|
||||
filter = (BMessageFilter*)list->ItemAt(i);
|
||||
|
||||
// Check command conditions
|
||||
// check command conditions
|
||||
if (filter->FiltersAnyCommand() || filter->Command() == message->what) {
|
||||
// Check delivery conditions
|
||||
// check delivery conditions
|
||||
message_delivery delivery = filter->MessageDelivery();
|
||||
bool dropped = message->WasDropped();
|
||||
if (delivery == B_ANY_DELIVERY
|
||||
|| (delivery == B_DROPPED_DELIVERY && dropped)
|
||||
|| (delivery == B_PROGRAMMED_DELIVERY && !dropped)) {
|
||||
// Check source conditions
|
||||
// check source conditions
|
||||
message_source source = filter->MessageSource();
|
||||
bool remote = message->IsSourceRemote();
|
||||
if (source == B_ANY_SOURCE
|
||||
@@ -1320,15 +1323,15 @@ BLooper::_ApplyFilters(BList* list, BMessage* message, BHandler* target)
|
||||
|| (source == B_LOCAL_SOURCE && !remote)) {
|
||||
// Are we using an "external" function?
|
||||
filter_result result;
|
||||
filter_hook func = filter->FilterFunction();
|
||||
if (func)
|
||||
result = func(message, &target, filter);
|
||||
filter_hook filterFunction = filter->FilterFunction();
|
||||
if (filterFunction != NULL)
|
||||
result = filterFunction(message, &target, filter);
|
||||
else
|
||||
result = filter->Filter(message, &target);
|
||||
|
||||
// Is further processing allowed?
|
||||
if (result == B_SKIP_MESSAGE) {
|
||||
// No; time to bail out
|
||||
// no, time to bail out
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
@@ -1343,13 +1346,14 @@ BLooper::_ApplyFilters(BList* list, BMessage* message, BHandler* target)
|
||||
void
|
||||
BLooper::check_lock()
|
||||
{
|
||||
// This is a cheap variant of AssertLocked()
|
||||
// It is used in situations where it's clear that the looper is valid,
|
||||
// ie. from handlers
|
||||
// this is a cheap variant of AssertLocked()
|
||||
// it is used in situations where it's clear that the looper is valid,
|
||||
// i.e. from handlers
|
||||
uint32 stack;
|
||||
if (((addr_t)&stack & ~(B_PAGE_SIZE - 1)) == fCachedStack
|
||||
|| fOwner == find_thread(NULL))
|
||||
|| fOwner == find_thread(NULL)) {
|
||||
return;
|
||||
}
|
||||
|
||||
debugger("Looper must be locked.");
|
||||
}
|
||||
@@ -1358,7 +1362,7 @@ BLooper::check_lock()
|
||||
BHandler*
|
||||
BLooper::resolve_specifier(BHandler* target, BMessage* message)
|
||||
{
|
||||
// Check params
|
||||
// check params
|
||||
if (!target || !message)
|
||||
return NULL;
|
||||
|
||||
@@ -1368,27 +1372,28 @@ BLooper::resolve_specifier(BHandler* target, BMessage* message)
|
||||
const char* property;
|
||||
status_t err = B_OK;
|
||||
BHandler* newTarget = target;
|
||||
// Loop to deal with nested specifiers
|
||||
// loop to deal with nested specifiers
|
||||
// (e.g., the 3rd button on the 4th view)
|
||||
do {
|
||||
err = message->GetCurrentSpecifier(&index, &specifier, &form, &property);
|
||||
err = message->GetCurrentSpecifier(&index, &specifier, &form,
|
||||
&property);
|
||||
if (err != B_OK) {
|
||||
BMessage reply(B_REPLY);
|
||||
reply.AddInt32("error", err);
|
||||
message->SendReply(&reply);
|
||||
return NULL;
|
||||
}
|
||||
// Current target gets what was the new target
|
||||
// current target gets what was the new target
|
||||
target = newTarget;
|
||||
newTarget = target->ResolveSpecifier(message, index, &specifier, form,
|
||||
property);
|
||||
// Check that new target is owned by looper; use IndexOf() to avoid
|
||||
// check that new target is owned by looper; use IndexOf() to avoid
|
||||
// dereferencing newTarget (possible race condition with object
|
||||
// destruction by another looper)
|
||||
if (!newTarget || IndexOf(newTarget) < 0)
|
||||
if (newTarget == NULL || IndexOf(newTarget) < 0)
|
||||
return NULL;
|
||||
|
||||
// Get current specifier index (may change in ResolveSpecifier())
|
||||
// get current specifier index (may change in ResolveSpecifier())
|
||||
err = message->GetCurrentSpecifier(&index);
|
||||
} while (newTarget && newTarget != target && err == B_OK && index >= 0);
|
||||
|
||||
@@ -1426,4 +1431,3 @@ _get_looper_port_(const BLooper* looper)
|
||||
{
|
||||
return looper->fMsgPort;
|
||||
}
|
||||
|
||||
|
||||
+269
-270
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2001-2005, Haiku.
|
||||
* Copyright 2001-2014 Haiku, Inc. All rights reserved.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*
|
||||
* Authors:
|
||||
@@ -115,7 +115,7 @@ BMessageFilter::FiltersAnyCommand() const
|
||||
}
|
||||
|
||||
|
||||
BLooper *
|
||||
BLooper*
|
||||
BMessageFilter::Looper() const
|
||||
{
|
||||
return fLooper;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2001-2007, Haiku, Inc. All Rights Reserved.
|
||||
* Copyright 2001-2014 Haiku, Inc. All rights reserved.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*
|
||||
* Authors:
|
||||
@@ -7,7 +7,8 @@
|
||||
* Axel Dörfler, axeld@pinc-software.de
|
||||
*/
|
||||
|
||||
/** Queue for holding BMessages */
|
||||
|
||||
// Queue for holding BMessages
|
||||
|
||||
|
||||
#include <MessageQueue.h>
|
||||
@@ -18,9 +19,9 @@
|
||||
BMessageQueue::BMessageQueue()
|
||||
:
|
||||
fHead(NULL),
|
||||
fTail(NULL),
|
||||
fMessageCount(0),
|
||||
fLock("BMessageQueue Lock")
|
||||
fTail(NULL),
|
||||
fMessageCount(0),
|
||||
fLock("BMessageQueue Lock")
|
||||
{
|
||||
}
|
||||
|
||||
@@ -32,7 +33,7 @@ BMessageQueue::~BMessageQueue()
|
||||
|
||||
BMessage* message = fHead;
|
||||
while (message != NULL) {
|
||||
BMessage *next = message->fQueueLink;
|
||||
BMessage* next = message->fQueueLink;
|
||||
|
||||
delete message;
|
||||
message = next;
|
||||
@@ -111,7 +112,7 @@ BMessageQueue::IsEmpty() const
|
||||
}
|
||||
|
||||
|
||||
BMessage *
|
||||
BMessage*
|
||||
BMessageQueue::FindMessage(int32 index) const
|
||||
{
|
||||
BAutolock _(fLock);
|
||||
@@ -120,7 +121,7 @@ BMessageQueue::FindMessage(int32 index) const
|
||||
|
||||
if (index < 0 || index >= fMessageCount)
|
||||
return NULL;
|
||||
|
||||
|
||||
for (BMessage* message = fHead; message != NULL; message = message->fQueueLink) {
|
||||
// If the index reaches zero, then we have found a match.
|
||||
if (index == 0)
|
||||
@@ -133,7 +134,7 @@ BMessageQueue::FindMessage(int32 index) const
|
||||
}
|
||||
|
||||
|
||||
BMessage *
|
||||
BMessage*
|
||||
BMessageQueue::FindMessage(uint32 what, int32 index) const
|
||||
{
|
||||
BAutolock _(fLock);
|
||||
@@ -178,7 +179,7 @@ BMessageQueue::IsLocked() const
|
||||
}
|
||||
|
||||
|
||||
BMessage *
|
||||
BMessage*
|
||||
BMessageQueue::NextMessage()
|
||||
{
|
||||
BAutolock _(fLock);
|
||||
@@ -201,7 +202,7 @@ BMessageQueue::NextMessage()
|
||||
fTail = NULL;
|
||||
}
|
||||
|
||||
return head;
|
||||
return head;
|
||||
}
|
||||
|
||||
|
||||
@@ -213,10 +214,8 @@ BMessageQueue::IsNextMessage(const BMessage* message) const
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
\brief This method is only here for R5 binary compatibility!
|
||||
It should be dropped as soon as possible (it misses the const qualifier).
|
||||
*/
|
||||
// This method is only here for R5 binary compatibility!
|
||||
// It should be dropped as soon as possible (it misses the const qualifier).
|
||||
bool
|
||||
BMessageQueue::IsLocked()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user