00001
00002
00003
00004
00005
#include <config.h>
00006
00007
#include <kuniqueapplication.h>
00008
#include <kglobal.h>
00009
#include <knotifyclient.h>
00010
#include <dcopclient.h>
00011
#include "kmkernel.h"
00012
#include "kmail_options.h"
00013
00014
#include <kdebug.h>
00015
00016
#undef Status // stupid X headers
00017
00018
#include "aboutdata.h"
00019
00020
#include "kmstartup.h"
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
class KMailApplication :
public KUniqueApplication
00038 {
00039
public:
00040 KMailApplication() : KUniqueApplication() { };
00041
virtual int newInstance();
00042
void commitData(
QSessionManager& sm);
00043
00044 };
00045
00046
void KMailApplication::commitData(
QSessionManager& sm) {
00047 kmkernel->dumpDeadLetters();
00048 kmkernel->setShuttingDown(
true );
00049 KApplication::commitData( sm );
00050 }
00051
00052
00053
int KMailApplication::newInstance()
00054 {
00055 kdDebug(5006) <<
"KMailApplication::newInstance()" << endl;
00056
if (!kmkernel)
00057
return 0;
00058
00059
if (!kmkernel->firstInstance() || !kapp->isRestored())
00060 kmkernel->handleCommandLine(
true );
00061 kmkernel->setFirstInstance(FALSE);
00062
return 0;
00063 }
00064
00065
int main(
int argc,
char *argv[])
00066 {
00067
00068
00069
00070
00071
00072 KMail::AboutData about;
00073
00074 KCmdLineArgs::init(argc, argv, &about);
00075 KCmdLineArgs::addCmdLineOptions( kmail_options );
00076
if (!KMailApplication::start())
00077
return 0;
00078
00079 KMailApplication app;
00080
00081
00082 KMail::insertLibraryCataloguesAndIcons();
00083
00084
00085
00086 KNotifyClient::startDaemon();
00087
00088 kapp->dcopClient()->suspend();
00089
00090 KMail::lockOrDie();
00091
00092
00093 KMKernel kmailKernel;
00094 kmailKernel.init();
00095 kapp->dcopClient()->setDefaultObject( kmailKernel.objId() );
00096
00097
00098 kmailKernel.doSessionManagement();
00099
00100
00101 kmailKernel.recoverDeadLetters();
00102
00103 kmsetSignalHandler(kmsignalHandler);
00104
00105 kapp->dcopClient()->resume();
00106 kmkernel->setStartingUp(
false );
00107
00108
int ret = kapp->exec();
00109
00110 kmailKernel.cleanup();
00111
00112 KMail::cleanup();
00113
return ret;
00114 }