--- a/libpurple/plugins/keyrings/kwallet.cpp Fri Dec 16 06:29:00 2011 +0000 +++ b/libpurple/plugins/keyrings/kwallet.cpp Fri Dec 16 07:38:59 2011 +0000 @@ -82,6 +82,8 @@ bool connected; KWallet::Wallet *wallet; static engine *pinstance; + gint idle_handle; + static bool idle_cb(engine *me); void ExecuteRequests(); }; @@ -132,6 +134,9 @@ { closing = true; + if (idle_handle) + g_source_remove(idle_handle); + while (!isEmpty()) { request *req = dequeue(); req->abort(); @@ -176,10 +181,19 @@ ExecuteRequests(); } +bool +KWalletPlugin::engine::idle_cb(KWalletPlugin::engine *me) +{ + me->app->processEvents(); + return true; +} + void KWalletPlugin::engine::ExecuteRequests() { - app->processEvents(); + if (idle_handle == 0) + idle_handle = g_idle_add((GSourceFunc)idle_cb, this); + if (connected) { while (!isEmpty()) { request *req = dequeue();