main.cpp
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 #include <qtimer.h>
00014
00015 #undef Status // stupid X headers
00016
00017 #include "aboutdata.h"
00018
00019 #include "kmstartup.h"
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 class KMailApplication : public KUniqueApplication
00037 {
00038 public:
00039 KMailApplication() : KUniqueApplication() { };
00040 virtual int newInstance();
00041 void commitData(QSessionManager& sm);
00042
00043 };
00044
00045 void KMailApplication::commitData(QSessionManager& sm) {
00046 kmkernel->dumpDeadLetters();
00047 kmkernel->setShuttingDown( true );
00048 KApplication::commitData( sm );
00049 }
00050
00051
00052 int KMailApplication::newInstance()
00053 {
00054 if (dcopClient()->isSuspended())
00055 {
00056
00057 QTimer::singleShot( 100, this, SLOT(newInstance()) );
00058 return 0;
00059 }
00060
00061 if (!kmkernel->firstInstance() || !kapp->isRestored())
00062 kmkernel->handleCommandLine( true );
00063 kmkernel->setFirstInstance(FALSE);
00064 return 0;
00065 }
00066
00067 int main(int argc, char *argv[])
00068 {
00069
00070
00071
00072
00073
00074 KMail::AboutData about;
00075
00076 KCmdLineArgs::init(argc, argv, &about);
00077 KCmdLineArgs::addCmdLineOptions( kmail_options );
00078 if (!KMailApplication::start())
00079 return 0;
00080
00081 KMailApplication app;
00082
00083
00084 KMail::insertLibraryCatalogues();
00085
00086 #if !KDE_IS_VERSION( 3, 1, 92 ) // replacement is now in KMKernel::config()
00087
00088 KMail::checkConfigUpdates();
00089 #endif
00090
00091
00092
00093 KNotifyClient::startDaemon();
00094
00095 KMail::lockOrDie();
00096
00097 kapp->dcopClient()->suspend();
00098
00099
00100 KMKernel kmailKernel;
00101 kmailKernel.init();
00102 kapp->dcopClient()->setDefaultObject( kmailKernel.objId() );
00103
00104
00105 kmailKernel.doSessionManagement();
00106
00107
00108 kmailKernel.recoverDeadLetters();
00109
00110 kmsetSignalHandler(kmsignalHandler);
00111
00112 kapp->dcopClient()->resume();
00113 kmkernel->setStartingUp( false );
00114
00115 int ret = kapp->exec();
00116
00117 if (kmkernel->shuttingDown())
00118 kmailKernel.notClosedByUser();
00119 else
00120 kmailKernel.cleanup();
00121
00122 KMail::cleanup();
00123 return ret;
00124 }
This file is part of the documentation for kmail Library Version 3.2.2.