diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-09-01 00:37:02 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-09-01 00:37:02 +0000 |
commit | cc29364f06178f8f6b457384f2ec37a042bd9d43 (patch) | |
tree | 7c77a3184c698bbf9d98cef09fb1ba8124daceba /kresources/kolab/shared/kmailconnection.cpp | |
parent | 4f6c584bacc8c3c694228f36ada3de77a76614a6 (diff) | |
download | tdepim-cc29364f06178f8f6b457384f2ec37a042bd9d43.tar.gz tdepim-cc29364f06178f8f6b457384f2ec37a042bd9d43.zip |
* Massive set of changes to bring in all fixes and enhancements from the Enterprise PIM branch
* Ensured that the Trinity changes were applied on top of those enhancements, and any redundancy removed
* Added journal read support to the CalDAV resource
* Fixed CalDAV resource to use events URL for tasks and journals when separate URL checkbox unchecked
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdepim@1170461 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kresources/kolab/shared/kmailconnection.cpp')
-rw-r--r-- | kresources/kolab/shared/kmailconnection.cpp | 40 |
1 files changed, 31 insertions, 9 deletions
diff --git a/kresources/kolab/shared/kmailconnection.cpp b/kresources/kolab/shared/kmailconnection.cpp index 9135e16db..66674abfa 100644 --- a/kresources/kolab/shared/kmailconnection.cpp +++ b/kresources/kolab/shared/kmailconnection.cpp @@ -73,16 +73,38 @@ static const TQCString dcopObjectId = "KMailICalIface"; bool KMailConnection::connectToKMail() { if ( !mKMailIcalIfaceStub ) { - TQString error; TQCString dcopService; - int result = KDCOPServiceStarter::self()-> - findServiceFor( "DCOP/ResourceBackend/IMAP", TQString::null, - TQString::null, &error, &dcopService ); - if ( result != 0 ) { - kdError(5650) << "Couldn't connect to the IMAP resource backend\n"; - // TODO: You might want to show "error" (if not empty) here, - // using e.g. KMessageBox - return false; + + // if we are kmail (and probably kontact as well) ourselves, don't try to start us again + // this prevents a DCOP deadlock when launching the kmail while kontact is the IMAP backend + // provider (and probably vice versa) + if ( kapp->instanceName() == "kmail" ) { + // someone, probably ourselves, already offers the interface, if not stop here + const QCStringList services = kapp->dcopClient()->registeredApplications(); + for ( uint i = 0; i < services.count(); ++i ) { + if ( services[i].find( "anonymous" ) == 0 ) // querying anonymous-XXXXX deadlocks as well, what are those anyway? + continue; + const QCStringList objs = kapp->dcopClient()->remoteObjects( services[i] ); + if ( objs.contains( dcopObjectId ) ) { + dcopService = services[i]; + break; + } + } + if ( dcopService.isEmpty() ) { + kdError(5650) << k_funcinfo << "Not connecting to KMail to prevent DCOP deadlock" << endl; + return false; + } + } else { + TQString error; + int result = KDCOPServiceStarter::self()-> + findServiceFor( "DCOP/ResourceBackend/IMAP", TQString::null, + TQString::null, &error, &dcopService ); + if ( result != 0 ) { + kdError(5650) << "Couldn't connect to the IMAP resource backend\n"; + // TODO: You might want to show "error" (if not empty) here, + // using e.g. KMessageBox + return false; + } } mKMailIcalIfaceStub = new KMailICalIface_stub( kapp->dcopClient(), |