diff --git a/headers/os/app/Roster.h b/headers/os/app/Roster.h index 939dc8d1b6..9e5aaa4fdb 100644 --- a/headers/os/app/Roster.h +++ b/headers/os/app/Roster.h @@ -45,6 +45,11 @@ extern "C" int _delete_roster_(); status_t _send_to_roster_(BMessage *message, BMessage *reply, bool mime); bool _is_valid_roster_mess_(bool mime); +namespace BPrivate { + void init_registrar_roster(BMessenger mainMessenger, + BMessenger mimeMessenger); +} + /*-------------------------------------------------------------*/ /* --------- app_info Struct and Values ------------------------ */ @@ -155,6 +160,7 @@ private: friend status_t BMimeType::StopWatching(BMessenger); friend status_t BClipboard::StartWatching(BMessenger); friend status_t BClipboard::StopWatching(BMessenger); + friend void BPrivate::init_registrar_roster(BMessenger, BMessenger); enum mtarget { MAIN_MESSENGER, diff --git a/src/servers/registrar/Registrar.cpp b/src/servers/registrar/Registrar.cpp index 18e838c953..8e62d46e73 100644 --- a/src/servers/registrar/Registrar.cpp +++ b/src/servers/registrar/Registrar.cpp @@ -128,6 +128,9 @@ Registrar::ReadyToRun() // create MIME manager fMIMEManager = new MIMEManager; fMIMEManager->Run(); + // init the global be_roster + BPrivate::init_registrar_roster(be_app_messenger, + BMessenger(NULL, fMIMEManager)); FUNCTION_END(); } @@ -143,6 +146,24 @@ Registrar::QuitRequested() return BApplication::QuitRequested(); } +// init_registrar_roster +/*! \brief Initializes the global \a be_roster. + + While this is done automagically for all other applications while libbe + initialization, the registrar needs to help out a bit. + + \param mainMessenger A BMessenger targeting the registrar application. + \param mimeMessenger A BMessenger targeting the MIME manager. +*/ +void +BPrivate::init_registrar_roster(BMessenger mainMessenger, + BMessenger mimeMessenger) +{ + BRoster *roster = const_cast(be_roster); + roster->fMess = mainMessenger; + roster->fMimeMess = mimeMessenger; +} + // main /*! \brief Creates and runs the registrar application.