--Boundary-00=_8b/cI/LJfqvjHht Content-Type: text/plain; charset="iso-8859-15" Content-Transfer-Encoding: 7bit Content-Disposition: inline Am Dienstag, 8. Juli 2008 schrieben Sie: > > >Thus I propose the patch I attached which changes the (client) > > > [...] > > I propose changing both client and server behaviour. > > The call to open the wallet is sent and replied to immediately, > > indicating success in starting the opening. However, kwalletd notifies > > the caller of an open wallet via signal, which the client must listen to. > I agree that this is a lot cleaner. I'll give it a shot but having quite > some stuff to do right now I don't know when I could fit it in. When's the > deadline for getting this into 4.1 (the release schedules mentions tagging > of rc1 tonight and "Only urgent fixes, such as those things fixing > compilation errors") ? So I just "nearly" got done but stumbled upon some issues and the fact that it just won't be ready for RC1. As including it after seems highly unsafe because the period that remains for testing is too short I think just pushing the timeouts a little (25s -> 5h) will at least give the bug less exposure. Please review the patch so I can possibly still commit it before RC1 is being tagged. Thanks, Michael --Boundary-00=_8b/cI/LJfqvjHht Content-Type: text/x-diff; charset="iso-8859-15"; name="patch-kwalletd-timeout-mini.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="patch-kwalletd-timeout-mini.diff" Index: kdeui/util/kwallet.cpp =================================================================== --- kdeui/util/kwallet.cpp (Revision 829361) +++ kdeui/util/kwallet.cpp (Arbeitskopie) @@ -204,13 +204,20 @@ Wallet *Wallet::openWallet(const QString& name, WId w, OpenType ot) { if( w == 0 ) kWarning() << "Pass a valid window to KWallet::Wallet::openWallet()."; + + QDBusMessage openMessage = QDBusMessage::createMethodCall( + walletLauncher->getInterface().service(), + walletLauncher->getInterface().path(), + walletLauncher->getInterface().interface(), + (ot == Path) ? "openPath" : "open"); + openMessage << name << qlonglong(w) << appid(); + if (ot == Asynchronous) { Wallet *wallet = new Wallet(-1, name); // place an asynchronous call - QVariantList args; - args << name << qlonglong(w) << appid(); - walletLauncher->getInterface().callWithCallback("open", args, wallet, SLOT(walletOpenResult(int)), SLOT(walletOpenError(const QDBusError&))); + walletLauncher->getInterface().connection().callWithCallback(openMessage, wallet, + SLOT(walletOpenResult(int)), SLOT(walletOpenError(const QDBusError&)), 18000000); return wallet; } @@ -219,14 +226,15 @@ while( QWidget* widget = qApp->activePopupWidget()) widget->close(); - bool isPath = ot == Path; - QDBusReply r = isPath ? - walletLauncher->getInterface().openPath(name, (qlonglong)w, appid()) : - walletLauncher->getInterface().open(name, (qlonglong)w, appid()); - if (r.isValid()) { - int drc = r; - if (drc != -1) { - return new Wallet(drc, name); + QDBusMessage replyMessage = walletLauncher->getInterface().connection().call( + openMessage, QDBus::Block, 18000000); + if (replyMessage.type() == QDBusMessage::ReplyMessage) { + QDBusReply r(replyMessage); + if (r.isValid()) { + int drc = r; + if (drc != -1) { + return new Wallet(drc, name); + } } } --Boundary-00=_8b/cI/LJfqvjHht--