Blob Blame History Raw
From 95d6e5d7919e7096fc9f77b0a46667f71b09ed5b Mon Sep 17 00:00:00 2001
From: Matthias Clasen <mclasen@redhat.com>
Date: Fri, 23 Sep 2011 17:31:53 -0400
Subject: [PATCH] Prevent gnome-shell getting stuck on the login screen

The workaround that was committed for this didn't have the
intended effect, since the timeout was added to the default
main context, not the one that is used in the recursive
mainloop.

Without this patch, my login screen would freeze when hitting
Enter in the password entry, with it, I could successfully log
in 10 out of 10 times.

https://bugzilla.gnome.org/show_bug.cgi?id=658013
---
 atk-adaptor/event.c |    6 +++++-
 1 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/atk-adaptor/event.c b/atk-adaptor/event.c
index 79c2884..12e6556 100644
--- a/atk-adaptor/event.c
+++ b/atk-adaptor/event.c
@@ -100,6 +100,7 @@ send_and_allow_reentry (DBusConnection * bus, DBusMessage * message)
   DBusPendingCall *pending;
   SpiReentrantCallClosure closure;
   GMainContext *main_context;
+  GSource *source;
 
   main_context = (g_getenv ("AT_SPI_CLIENT") ? NULL :
                   spi_global_app_data->main_context);
@@ -114,7 +115,10 @@ send_and_allow_reentry (DBusConnection * bus, DBusMessage * message)
       return NULL;
     }
   dbus_pending_call_set_notify (pending, set_reply, (void *) &closure, NULL);
-  closure.timeout = g_timeout_add (500, timeout_reply, &closure);
+  source = g_timeout_source_new (500);
+  g_source_set_callback (source, timeout_reply, &closure, NULL);
+  closure.timeout = g_source_attach (source, main_context);
+  g_source_unref (source);
   g_main_loop_run  (closure.loop);
   if (closure.timeout != -1)
     g_source_remove (closure.timeout);
-- 
1.7.6.2