* Moved some reusable code into AppMisc.cpp/h.
* Init be_app in InitData(). * Uninit be_app and be_app_messenger in BApplication destructor.^ git-svn-id: file:///srv/svn/repos/haiku/trunk/current@513 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
8cd292013b
commit
8a526591a0
@ -35,6 +35,7 @@
|
|||||||
// System Includes -------------------------------------------------------------
|
// System Includes -------------------------------------------------------------
|
||||||
#include <AppFileInfo.h>
|
#include <AppFileInfo.h>
|
||||||
#include <Application.h>
|
#include <Application.h>
|
||||||
|
#include <AppMisc.h>
|
||||||
#include <Cursor.h>
|
#include <Cursor.h>
|
||||||
#include <Entry.h>
|
#include <Entry.h>
|
||||||
#include <File.h>
|
#include <File.h>
|
||||||
@ -74,8 +75,6 @@ enum {
|
|||||||
// prototypes of helper functions
|
// prototypes of helper functions
|
||||||
static const char* looper_name_for(const char *signature);
|
static const char* looper_name_for(const char *signature);
|
||||||
static void assert_app_signature(const char *signature);
|
static void assert_app_signature(const char *signature);
|
||||||
static status_t get_app_path(char *buffer);
|
|
||||||
static thread_id main_thread_for(team_id team);
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
BApplication::BApplication(const char* signature)
|
BApplication::BApplication(const char* signature)
|
||||||
@ -114,6 +113,9 @@ BApplication::~BApplication()
|
|||||||
{
|
{
|
||||||
// unregister from the roster
|
// unregister from the roster
|
||||||
be_roster->RemoveApp(Team());
|
be_roster->RemoveApp(Team());
|
||||||
|
// uninitialize be_app and be_app_messenger
|
||||||
|
be_app = NULL;
|
||||||
|
be_app_messenger = BMessenger();
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
BApplication::BApplication(BMessage* data)
|
BApplication::BApplication(BMessage* data)
|
||||||
@ -447,6 +449,9 @@ void BApplication::run_task()
|
|||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
void BApplication::InitData(const char* signature, status_t* error)
|
void BApplication::InitData(const char* signature, status_t* error)
|
||||||
{
|
{
|
||||||
|
// check whether there exists already an application
|
||||||
|
if (be_app)
|
||||||
|
debugger("2 BApplication objects were created. Only one is allowed.");
|
||||||
// check signature
|
// check signature
|
||||||
assert_app_signature(signature);
|
assert_app_signature(signature);
|
||||||
fAppName = signature;
|
fAppName = signature;
|
||||||
@ -456,12 +461,7 @@ void BApplication::InitData(const char* signature, status_t* error)
|
|||||||
thread_id thread = main_thread_for(team);
|
thread_id thread = main_thread_for(team);
|
||||||
// get app executable ref
|
// get app executable ref
|
||||||
entry_ref ref;
|
entry_ref ref;
|
||||||
char appFilePath[B_PATH_NAME_LENGTH + 1];
|
fInitError = get_app_ref(&ref);
|
||||||
fInitError = get_app_path(appFilePath);
|
|
||||||
if (fInitError == B_OK) {
|
|
||||||
BEntry entry(appFilePath, true);
|
|
||||||
fInitError = entry.GetRef(&ref);
|
|
||||||
}
|
|
||||||
// get the BAppFileInfo and extract the information we need
|
// get the BAppFileInfo and extract the information we need
|
||||||
uint32 appFlags = B_REG_DEFAULT_APP_FLAGS;
|
uint32 appFlags = B_REG_DEFAULT_APP_FLAGS;
|
||||||
if (fInitError == B_OK) {
|
if (fInitError == B_OK) {
|
||||||
@ -550,9 +550,11 @@ void BApplication::InitData(const char* signature, status_t* error)
|
|||||||
} else
|
} else
|
||||||
fInitError = regError;
|
fInitError = regError;
|
||||||
}
|
}
|
||||||
// init be_app_messenger
|
// init be_app and be_app_messenger
|
||||||
if (fInitError == B_OK)
|
if (fInitError == B_OK) {
|
||||||
|
be_app = this;
|
||||||
be_app_messenger = BMessenger(NULL, this);
|
be_app_messenger = BMessenger(NULL, this);
|
||||||
|
}
|
||||||
// TODO: SetName()
|
// TODO: SetName()
|
||||||
// TODO: create_app_meta_mime()
|
// TODO: create_app_meta_mime()
|
||||||
// return the error
|
// return the error
|
||||||
@ -695,51 +697,6 @@ looper_name_for(const char *signature)
|
|||||||
return "AppLooperPort";
|
return "AppLooperPort";
|
||||||
}
|
}
|
||||||
|
|
||||||
// get_app_path
|
|
||||||
//
|
|
||||||
// Returns the path of the application. buffer must be of length
|
|
||||||
// B_PATH_NAME_LENGTH + 1.
|
|
||||||
static
|
|
||||||
status_t
|
|
||||||
get_app_path(char *buffer)
|
|
||||||
{
|
|
||||||
status_t error = (buffer ? B_OK : B_BAD_VALUE);
|
|
||||||
image_info info;
|
|
||||||
int32 cookie = 0;
|
|
||||||
bool found = false;
|
|
||||||
if (error == B_OK) {
|
|
||||||
while (!found && get_next_image_info(0, &cookie, &info) == B_OK) {
|
|
||||||
if (info.type == B_APP_IMAGE) {
|
|
||||||
strncpy(buffer, info.name, B_PATH_NAME_LENGTH);
|
|
||||||
buffer[B_PATH_NAME_LENGTH] = 0;
|
|
||||||
found = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (error == B_OK && !found)
|
|
||||||
error = B_ENTRY_NOT_FOUND;
|
|
||||||
return error;
|
|
||||||
}
|
|
||||||
|
|
||||||
// main_thread_for
|
|
||||||
//
|
|
||||||
// Returns the ID of the supplied team's main thread.
|
|
||||||
static
|
|
||||||
thread_id
|
|
||||||
main_thread_for(team_id team)
|
|
||||||
{
|
|
||||||
// For I can't find any trace of how to explicitly get the main thread,
|
|
||||||
// I assume the main thread is the one with the least thread ID.
|
|
||||||
thread_id thread = -1;
|
|
||||||
int32 cookie = 0;
|
|
||||||
thread_info info;
|
|
||||||
while (get_next_thread_info(team, &cookie, &info) == B_OK) {
|
|
||||||
if (thread < 0 || info.thread < thread)
|
|
||||||
thread = info.thread;
|
|
||||||
}
|
|
||||||
return thread;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log $
|
* $Log $
|
||||||
|
Loading…
Reference in New Issue
Block a user