Scripting-related changes. Also indulged in some unwarrented formatting

anality. =P


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@519 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
ejakowatz 2002-07-28 20:28:00 +00:00
parent 847248db20
commit 2284462ccf
2 changed files with 133 additions and 5 deletions

View File

@ -57,6 +57,101 @@ BMessenger be_app_messenger;
BResources* BApplication::_app_resources = NULL;
BLocker BApplication::_app_resources_lock("_app_resources_lock");
property_info gApplicationPropInfo[] =
{
{
"Window",
{},
{B_INDEX_SPECIFIER, B_REVERSE_INDEX_SPECIFIER},
NULL, 0,
{},
{},
{}
},
{
"Window",
{},
{B_NAME_SPECIFIER},
NULL, 1,
{},
{},
{}
},
{
"Looper",
{},
{B_INDEX_SPECIFIER, B_REVERSE_INDEX_SPECIFIER},
NULL, 2,
{},
{},
{}
},
{
"Looper",
{},
{B_ID_SPECIFIER},
NULL, 3,
{},
{},
{}
},
{
"Looper",
{},
{B_NAME_SPECIFIER},
NULL, 4,
{},
{},
{}
},
{
"Name",
{B_GET_PROPERTY},
{B_DIRECT_SPECIFIER},
NULL, 5,
{B_STRING_TYPE},
{},
{}
},
{
"Window",
{B_COUNT_PROPERTIES},
{B_DIRECT_SPECIFIER},
NULL, 5,
{B_INT32_TYPE},
{},
{}
},
{
"Loopers",
{B_GET_PROPERTY},
{B_DIRECT_SPECIFIER},
NULL, 5,
{B_MESSENGER_TYPE},
{},
{}
},
{
"Windows",
{B_GET_PROPERTY},
{B_DIRECT_SPECIFIER},
NULL, 5,
{B_MESSENGER_TYPE},
{},
{}
},
{
"Looper",
{B_COUNT_PROPERTIES},
{B_DIRECT_SPECIFIER},
NULL, 5,
{B_INT32_TYPE},
{},
{}
},
{}
};
// argc/argv
extern const int __libc_argc;
extern const char * const *__libc_argv;
@ -384,7 +479,27 @@ void BApplication::SetPulseRate(bigtime_t rate)
//------------------------------------------------------------------------------
status_t BApplication::GetSupportedSuites(BMessage* data)
{
return NOT_IMPLEMENTED;
status_t err;
if (!data)
{
err = B_BAD_VALUE;
}
if (!err)
{
err = data->AddString("Suites", "suite/vnd.Be-application");
if (!err)
{
BPropertyInfo PropertyInfo(gApplicationPropInfo);
err = data->AddFlat("message", &PropertyInfo);
if (!err)
{
err = BHandler::GetSupportedSuites(data);
}
}
}
return err;
}
//------------------------------------------------------------------------------
status_t BApplication::Perform(perform_code d, void* arg)

View File

@ -93,7 +93,7 @@ team_id BLooper::sTeamID = B_ERROR;
static property_info gLooperPropInfo[] =
{
{
"Handler",
"Handler"
{},
{B_INDEX_SPECIFIER, B_REVERSE_INDEX_SPECIFIER},
// TODO: what is the extra_data for?
@ -103,7 +103,7 @@ static property_info gLooperPropInfo[] =
{}
},
{
"Handlers",
"Handlers"
{B_GET_PROPERTY},
{B_DIRECT_SPECIFIER},
NULL, 0,
@ -112,7 +112,7 @@ static property_info gLooperPropInfo[] =
{}
},
{
"Handler",
"Handler"
{B_COUNT_PROPERTIES},
{B_DIRECT_SPECIFIER},
NULL, 0,
@ -673,9 +673,22 @@ BHandler* BLooper::ResolveSpecifier(BMessage* msg, int32 index,
BMessage* specifier, int32 form,
const char* property)
{
/**
@note When I was first dumping the results of GetSupportedSuites() from
various classes, the use of the extra_data field was quite
mysterious to me. Then I dumped BApplication and compared the
result against the BeBook's docs for scripting BApplication. A
bunch of it isn't documented, but what is tipped me to the idea
that the extra_data is being used as a quick and dirty way to tell
what scripting "command" has been sent, e.g., for easy use in a
switch statement. Would certainly be a lot faster than a bunch of
string comparisons -- which wouldn't tell the whole story anyway,
because of the same name being used for multiple properties.
*/
// Straight from the BeBook
BPropertyInfo PropertyInfo(gLooperPropInfo);
if (PropertyInfo.FindMatch(msg, index, specifier, form, property) >= 0)
uint32 data;
if (PropertyInfo.FindMatch(msg, index, specifier, form, property, &data) >= 0)
{
return this;
}