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>
33using namespace KontactInterface;
36class KontactInterface::PimUniqueApplication::Private
41PimUniqueApplication::PimUniqueApplication()
42 : KUniqueApplication(), d( new Private() )
45 const QString objectName = QLatin1Char(
'/' ) + applicationName() + QLatin1String(
"_PimApplication");
46 QDBusConnection::sessionBus().registerObject(
48 QDBusConnection::ExportScriptableSlots |
49 QDBusConnection::ExportScriptableProperties |
50 QDBusConnection::ExportAdaptors );
53static const char _k_sessionBusName[] =
"kdepimapplication_session_bus";
55PimUniqueApplication::~PimUniqueApplication()
60static QDBusConnection tryToInitDBusConnection()
64 QDBusConnection connection = QDBusConnection::connectToBus(
65 QDBusConnection::SessionBus, QLatin1String(_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 = QLatin1String(
"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 = QLatin1Char(
'/' ) + appName + QLatin1String(
"_PimApplication");
108 QDBusInterface iface(
109 serviceName, objectName, QLatin1String(
"org.kde.KUniqueApplication"), QDBusConnection::sessionBus() );
110 QDBusReply<int> reply;
111 if ( iface.isValid() &&
112 ( reply = iface.call( QLatin1String(
"newInstance"), new_asn_id, saved_args ) ).isValid() ) {
117 QDBusConnection::disconnectFromBus( QLatin1String(_k_sessionBusName) );
121 return KUniqueApplication::start( flags );