22 #include "pimuniqueapplication.h"
24 #include <kaboutdata.h>
25 #include <kcmdlineargs.h>
27 #include <kstartupinfo.h>
28 #include <kwindowsystem.h>
30 #include <qdbusconnectioninterface.h>
31 #include <qdbusinterface.h>
33 using namespace KontactInterface;
36 class KontactInterface::PimUniqueApplication::Private
41 PimUniqueApplication::PimUniqueApplication()
42 : KUniqueApplication(), d( new Private() )
45 const QString objectName = QString(
'/' ) + applicationName() +
"_PimApplication";
46 QDBusConnection::sessionBus().registerObject(
48 QDBusConnection::ExportScriptableSlots |
49 QDBusConnection::ExportScriptableProperties |
50 QDBusConnection::ExportAdaptors );
53 static const char _k_sessionBusName[] =
"kdepimapplication_session_bus";
55 PimUniqueApplication::~PimUniqueApplication()
60 static QDBusConnection tryToInitDBusConnection()
64 QDBusConnection connection = QDBusConnection::connectToBus(
65 QDBusConnection::SessionBus, _k_sessionBusName );
66 if ( !connection.isConnected() ) {
67 kError() <<
"Cannot find the D-Bus session server" << endl;
75 return start( KUniqueApplication::StartFlags() );
80 const QString appName = KCmdLineArgs::aboutData()->appName();
85 const QString serviceName =
"org.kde." + appName;
86 if ( tryToInitDBusConnection().interface()->isServiceRegistered( serviceName ) ) {
87 QByteArray saved_args;
88 QDataStream ds( &saved_args, QIODevice::WriteOnly );
89 KCmdLineArgs::saveAppArgs( ds );
91 QByteArray new_asn_id;
95 id.initId( kapp->startupId() );
97 id = KStartupInfo::currentStartupIdEnv();
100 new_asn_id =
id.id();
104 KWindowSystem::allowExternalProcessWindowActivation();
106 const QString objectName = QString(
'/' ) + appName +
"_PimApplication";
108 QDBusInterface iface(
109 serviceName, objectName,
"org.kde.KUniqueApplication", QDBusConnection::sessionBus() );
110 QDBusReply<int> reply;
111 if ( iface.isValid() &&
112 ( reply = iface.call(
"newInstance", new_asn_id, saved_args ) ).isValid() ) {
117 QDBusConnection::disconnectFromBus( _k_sessionBusName );
121 return KUniqueApplication::start( flags );