summaryrefslogtreecommitdiff
path: root/atk-adaptor/bridge.c
diff options
context:
space:
mode:
Diffstat (limited to 'atk-adaptor/bridge.c')
-rw-r--r--atk-adaptor/bridge.c42
1 files changed, 31 insertions, 11 deletions
diff --git a/atk-adaptor/bridge.c b/atk-adaptor/bridge.c
index 06407f4..8579185 100644
--- a/atk-adaptor/bridge.c
+++ b/atk-adaptor/bridge.c
@@ -403,8 +403,8 @@ register_reply (DBusPendingCall *pending, void *user_data)
get_registered_event_listeners (spi_global_app_data);
}
-gboolean
-_atk_bridge_register_application (gpointer data)
+static gboolean
+register_application (gpointer data)
{
SpiBridge * app = data;
DBusMessage *message;
@@ -439,6 +439,31 @@ _atk_bridge_register_application (gpointer data)
return FALSE;
}
+void
+_atk_bridge_schedule_application_registration (SpiBridge *app)
+{
+ /* We need the callback to be called first thing, before any other of ours
+ * (and possibly of client apps), so use a high priority and a short timeout
+ * to try and be called first by the main loop. */
+ if (!app->registration_pending)
+ app->registration_pending = spi_timeout_add_full (G_PRIORITY_HIGH, 0,
+ register_application,
+ app, NULL);
+}
+
+gboolean
+_atk_bridge_remove_pending_application_registration (SpiBridge *app)
+{
+ if (app->registration_pending)
+ {
+ g_source_remove (app->registration_pending);
+ app->registration_pending = 0;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
/*---------------------------------------------------------------------------*/
static void
@@ -470,12 +495,8 @@ deregister_application (SpiBridge * app)
DBusMessageIter iter;
const char *uname;
- if (spi_global_app_data->registration_pending)
- {
- g_source_remove (spi_global_app_data->registration_pending);
- spi_global_app_data->registration_pending = 0;
+ if (_atk_bridge_remove_pending_application_registration (spi_global_app_data))
return;
- }
message = dbus_message_new_method_call (SPI_DBUS_NAME_REGISTRY,
ATSPI_DBUS_PATH_REGISTRY,
@@ -850,7 +871,7 @@ signal_filter (DBusConnection *bus, DBusMessage *message, void *user_data)
{
if (registry_lost && !old[0])
{
- _atk_bridge_register_application (spi_global_app_data);
+ register_application (spi_global_app_data);
registry_lost = FALSE;
}
else if (!new[0])
@@ -1105,9 +1126,8 @@ atk_bridge_adaptor_init (gint * argc, gchar ** argv[])
NULL);
/* Register this app by sending a signal out to AT-SPI registry daemon */
- if (!atspi_no_register && (!root || !ATK_IS_PLUG (root)) &&
- !spi_global_app_data->registration_pending)
- spi_global_app_data->registration_pending = spi_idle_add (_atk_bridge_register_application, spi_global_app_data);
+ if (!atspi_no_register && (!root || !ATK_IS_PLUG (root)))
+ _atk_bridge_schedule_application_registration (spi_global_app_data);
else
get_registered_event_listeners (spi_global_app_data);