X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=atk-adaptor%2Fevent.c;h=79c2884a4619ff3c16a698acc44672b3e9e791a3;hb=ecba2419cee6cb34695b24bc38664409a28eaa0e;hp=6add6e728af197d1e82489ee52a8ff9bf4068c8a;hpb=d58210d72b95dac90b61676dd8b2c0d1a917cf68;p=platform%2Fcore%2Fuifw%2Fat-spi2-atk.git diff --git a/atk-adaptor/event.c b/atk-adaptor/event.c index 6add6e7..79c2884 100644 --- a/atk-adaptor/event.c +++ b/atk-adaptor/event.c @@ -53,8 +53,10 @@ static gint atk_bridge_focus_tracker_id; typedef struct _SpiReentrantCallClosure { + DBusConnection *bus; GMainLoop *loop; DBusMessage *reply; + guint timeout; } SpiReentrantCallClosure; static void @@ -81,6 +83,17 @@ set_reply (DBusPendingCall * pending, void *user_data) g_main_loop_quit (closure->loop); } +static gboolean +timeout_reply (void *data) +{ + SpiReentrantCallClosure *closure = data; + + if (!dbus_connection_get_is_connected (closure->bus)) + g_main_loop_quit (closure->loop); + closure->timeout = -1; + return FALSE; +} + static DBusMessage * send_and_allow_reentry (DBusConnection * bus, DBusMessage * message) { @@ -90,16 +103,21 @@ send_and_allow_reentry (DBusConnection * bus, DBusMessage * message) main_context = (g_getenv ("AT_SPI_CLIENT") ? NULL : spi_global_app_data->main_context); + closure.bus = bus; closure.loop = g_main_loop_new (main_context, FALSE); + closure.reply = NULL; switch_main_context (main_context); - if (!dbus_connection_send_with_reply (bus, message, &pending, -1) || !pending) + if (!dbus_connection_send_with_reply (bus, message, &pending, 9000) || !pending) { switch_main_context (NULL); return NULL; } dbus_pending_call_set_notify (pending, set_reply, (void *) &closure, NULL); + closure.timeout = g_timeout_add (500, timeout_reply, &closure); g_main_loop_run (closure.loop); + if (closure.timeout != -1) + g_source_remove (closure.timeout); g_main_loop_unref (closure.loop); return closure.reply;