Previously, direct D-Bus connections were not exposed if AT_SPI_CLIENT
was set in the environment, since they are causing deadlock if the
application and the AT are in the same process. However, AT_SPI_CLIENT
was only being set by pyatspi, meaning that libatspi consumers not using
pyatspi (Javascript embedded in gnome-shell that uses the libatspi
introspection bindings directly, for instance) would still have problems
when attempting to inspect their own accessibles.
Also removed the code in event.c to disable main loop context switching
when AT_SPI_CLIENT was set. Modifying it to also check
atspi_is_initialized would cause deadlock with gnome-shell when Orca is
running. Hopefully that code is not needed anymore.
reply = dbus_message_new_method_return(msg);
if (reply)
{
reply = dbus_message_new_method_return(msg);
if (reply)
{
- const char *retval = (g_getenv ("AT_SPI_CLIENT") ?
+ const char *retval = (atspi_is_initialized () ?
"":
spi_global_app_data->app_bus_addr);
if (!retval)
"":
spi_global_app_data->app_bus_addr);
if (!retval)
{
DBusPendingCall *pending;
SpiReentrantCallClosure closure;
{
DBusPendingCall *pending;
SpiReentrantCallClosure closure;
- GMainContext *main_context;
- main_context = (g_getenv ("AT_SPI_CLIENT") ? NULL :
- spi_global_app_data->main_context);
- closure.loop = g_main_loop_new (main_context, FALSE);
+ closure.loop = g_main_loop_new (spi_global_app_data->main_context, FALSE);
- switch_main_context (main_context);
+ switch_main_context (spi_global_app_data->main_context);
if (!dbus_connection_send_with_reply (bus, message, &pending, 9000) || !pending)
{
if (!dbus_connection_send_with_reply (bus, message, &pending, 9000) || !pending)
{
dbus_pending_call_set_notify (pending, set_reply, (void *) &closure, NULL);
source = g_timeout_source_new (500);
g_source_set_callback (source, timeout_reply, &closure, NULL);
dbus_pending_call_set_notify (pending, set_reply, (void *) &closure, NULL);
source = g_timeout_source_new (500);
g_source_set_callback (source, timeout_reply, &closure, NULL);
- closure.timeout = g_source_attach (source, main_context);
+ closure.timeout = g_source_attach (source, spi_global_app_data->main_context);
g_source_unref (source);
g_main_loop_run (closure.loop);
if (closure.timeout != -1)
g_source_unref (source);
g_main_loop_run (closure.loop);
if (closure.timeout != -1)
AC_SUBST(ATK_LIBS)
AC_SUBST(ATK_CFLAGS)
AC_SUBST(ATK_LIBS)
AC_SUBST(ATK_CFLAGS)
-PKG_CHECK_MODULES(ATSPI, [atspi-2 >= 2.7.5])
+PKG_CHECK_MODULES(ATSPI, [atspi-2 >= 2.9.3])
AC_SUBST(ATSPI_LIBS)
AC_SUBST(ATSPI_CFLAGS)
AC_SUBST(ATSPI_LIBS)
AC_SUBST(ATSPI_CFLAGS)