diff options
Diffstat (limited to 'kontact/src/main.cpp')
-rw-r--r-- | kontact/src/main.cpp | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/kontact/src/main.cpp b/kontact/src/main.cpp new file mode 100644 index 000000000..d3fce17c2 --- /dev/null +++ b/kontact/src/main.cpp @@ -0,0 +1,168 @@ +/* + This file is part of KDE Kontact. + + Copyright (c) 2001 Matthias Hoelzer-Kluepfel <mhk@kde.org> + Copyright (c) 2002-2003 Daniel Molkentin <molkentin@kde.org> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#include <iostream> + +#include <dcopclient.h> +#include <kaboutdata.h> +#include <kcmdlineargs.h> +#include <kdebug.h> +#include <kiconloader.h> +#include <klocale.h> +#include <kstartupinfo.h> +#include <kuniqueapplication.h> +#include <kwin.h> +#include <kstandarddirs.h> +#include <ktrader.h> +#include "plugin.h" + +#include <qlabel.h> +#include "prefs.h" + +#include "alarmclient.h" +#include "mainwindow.h" +#include <uniqueapphandler.h> // in ../interfaces + +using namespace std; + +static const char description[] = + I18N_NOOP( "KDE personal information manager" ); + +static const char version[] = "1.2.9"; + +class KontactApp : public KUniqueApplication { + public: + KontactApp() : mMainWindow( 0 ), mSessionRestored( false ) {} + ~KontactApp() {} + + int newInstance(); + void setMainWindow( Kontact::MainWindow *window ) { + mMainWindow = window; + setMainWidget( window ); + } + void setSessionRestored( bool restored ) { + mSessionRestored = restored; + } + + private: + void startKOrgac(); + Kontact::MainWindow *mMainWindow; + bool mSessionRestored; +}; + +static void listPlugins() +{ + KInstance instance( "kontact" ); // Can't use KontactApp since it's too late for adding cmdline options + KTrader::OfferList offers = KTrader::self()->query( + QString::fromLatin1( "Kontact/Plugin" ), + QString( "[X-KDE-KontactPluginVersion] == %1" ).arg( KONTACT_PLUGIN_VERSION ) ); + for ( KService::List::Iterator it = offers.begin(); it != offers.end(); ++it ) { + KService::Ptr service = (*it); + // skip summary only plugins + QVariant var = service->property( "X-KDE-KontactPluginHasPart" ); + if ( var.isValid() && var.toBool() == false ) + continue; + cout << service->library().remove( "libkontact_" ).latin1() << endl; + } +} + +int KontactApp::newInstance() +{ + KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); + QString moduleName; + if ( Kontact::Prefs::self()->forceStartupPlugin() ) { + moduleName = Kontact::Prefs::self()->forcedStartupPlugin(); + } + if ( args->isSet( "module" ) ) { + moduleName = QString::fromLocal8Bit( args->getOption( "module" ) ); + } + + if ( !mSessionRestored ) { + if ( !mMainWindow ) { + mMainWindow = new Kontact::MainWindow(); + if ( !moduleName.isEmpty() ) + mMainWindow->setActivePluginModule( moduleName ); + mMainWindow->show(); + setMainWidget( mMainWindow ); + // --iconify is needed in kontact, although kstart can do that too, + // because kstart returns immediately so it's too early to talk DCOP to the app. + if ( args->isSet( "iconify" ) ) + KWin::iconifyWindow( mMainWindow->winId(), false /*no animation*/ ); + } else { + if ( !moduleName.isEmpty() ) + mMainWindow->setActivePluginModule( moduleName ); + } + } + + AlarmClient alarmclient; + alarmclient.startDaemon(); + + // Handle startup notification and window activation + // (The first time it will do nothing except note that it was called) + return KUniqueApplication::newInstance(); +} + +int main( int argc, char **argv ) +{ + KAboutData about( "kontact", I18N_NOOP( "Kontact" ), version, description, + KAboutData::License_GPL, I18N_NOOP("(C) 2001-2008 The Kontact developers"), 0, "http://kontact.org" ); + about.addAuthor( "Daniel Molkentin", 0, "molkentin@kde.org" ); + about.addAuthor( "Don Sanders", 0, "sanders@kde.org" ); + about.addAuthor( "Cornelius Schumacher", 0, "schumacher@kde.org" ); + about.addAuthor( "Tobias K\303\266nig", 0, "tokoe@kde.org" ); + about.addAuthor( "David Faure", 0, "faure@kde.org" ); + about.addAuthor( "Ingo Kl\303\266cker", 0, "kloecker@kde.org" ); + about.addAuthor( "Sven L\303\274ppken", 0, "sven@kde.org" ); + about.addAuthor( "Zack Rusin", 0, "zack@kde.org" ); + about.addAuthor( "Matthias Hoelzer-Kluepfel", I18N_NOOP("Original Author"), "mhk@kde.org" ); + + KCmdLineArgs::init( argc, argv, &about ); + Kontact::UniqueAppHandler::loadKontactCommandLineOptions(); + + KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); + if ( args->isSet( "list" ) ) { + listPlugins(); + return 0; + } + + if ( !KontactApp::start() ) { + // Already running, brought to the foreground. + return 0; + } + + KontactApp app; + if ( app.restoringSession() ) { + // There can only be one main window + if ( KMainWindow::canBeRestored( 1 ) ) { + Kontact::MainWindow *mainWindow = new Kontact::MainWindow(); + app.setMainWindow( mainWindow ); + app.setSessionRestored( true ); + mainWindow->show(); + mainWindow->restore( 1 ); + } + } + + bool ret = app.exec(); + while ( KMainWindow::memberList->first() ) + delete KMainWindow::memberList->first(); + + return ret; +} |