summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Gorse <mgorse@alum.wpi.edu>2019-08-15 11:01:47 -0500
committerMike Gorse <mgorse@alum.wpi.edu>2019-08-15 11:01:47 -0500
commit895abb449fa9c521098e8135defe4882a0595e9e (patch)
tree9666b45e3c7f9c1745468de6de78bfb057f9e081
parentf603c8e4d9f00a9c046fbf4e02458308e9720d22 (diff)
downloadat-spi2-atk-895abb449fa9c521098e8135defe4882a0595e9e.tar.gz
When switching the main context, move pending register_application call
Commit f603c8 broke java-atk-wrapper, since the default main loop context isn't used there. Fixes https://gitlab.gnome.org/GNOME/at-spi2-core/issues/16
-rw-r--r--atk-adaptor/bridge.c18
-rw-r--r--atk-adaptor/bridge.h3
-rw-r--r--atk-adaptor/event.c6
3 files changed, 22 insertions, 5 deletions
diff --git a/atk-adaptor/bridge.c b/atk-adaptor/bridge.c
index c8ca861..fe09e84 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);
}
-static gboolean
-register_application (gpointer data)
+gboolean
+_atk_bridge_register_application (gpointer data)
{
SpiBridge * app = data;
DBusMessage *message;
@@ -476,6 +476,13 @@ 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;
+ return;
+ }
+
message = dbus_message_new_method_call (SPI_DBUS_NAME_REGISTRY,
ATSPI_DBUS_PATH_REGISTRY,
ATSPI_DBUS_INTERFACE_REGISTRY,
@@ -849,7 +856,7 @@ signal_filter (DBusConnection *bus, DBusMessage *message, void *user_data)
{
if (registry_lost && !old[0])
{
- register_application (spi_global_app_data);
+ _atk_bridge_register_application (spi_global_app_data);
registry_lost = FALSE;
}
else if (!new[0])
@@ -1102,8 +1109,9 @@ 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)))
- g_idle_add (register_application, spi_global_app_data);
+ 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);
else
get_registered_event_listeners (spi_global_app_data);
diff --git a/atk-adaptor/bridge.h b/atk-adaptor/bridge.h
index 64882e4..29518b0 100644
--- a/atk-adaptor/bridge.h
+++ b/atk-adaptor/bridge.h
@@ -73,6 +73,7 @@ gchar *app_bus_addr;
GList *events;
gboolean events_initialized;
GHashTable *property_hash;
+ guint registration_pending;
};
extern SpiBridge *spi_global_app_data;
@@ -92,6 +93,8 @@ DRoutePropertyFunction _atk_bridge_find_property_func (const char *property,
GType *type);
GType _atk_bridge_type_from_iface (const char *iface);
+
+gboolean _atk_bridge_register_application (gpointer data);
G_END_DECLS
#endif /* BRIDGE_H */
diff --git a/atk-adaptor/event.c b/atk-adaptor/event.c
index 7c3c3f9..e9e906f 100644
--- a/atk-adaptor/event.c
+++ b/atk-adaptor/event.c
@@ -72,6 +72,12 @@ switch_main_context (GMainContext *cnx)
atspi_set_main_context (cnx);
for (list = spi_global_app_data->direct_connections; list; list = list->next)
atspi_dbus_connection_setup_with_g_main (list->data, cnx);
+
+ if (spi_global_app_data->registration_pending)
+ {
+ g_source_remove (spi_global_app_data->registration_pending);
+ spi_global_app_data->registration_pending = spi_idle_add (_atk_bridge_register_application, spi_global_app_data);
+ }
}
guint