summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Gorse <mgorse@suse.com>2019-04-30 01:00:55 +0000
committerMike Gorse <mgorse@suse.com>2019-04-30 01:00:55 +0000
commitf387a0dc51f4b5ffb89a482821c8254284f70601 (patch)
treed59a59a8f7efe776ab80bf52fb5deafad0738fe1
parent70ff36798a51251180936a368dae59c305287e91 (diff)
parentd8ab26841602933ea6d7e9190527ee73cdf05f4d (diff)
downloadat-spi2-atk-f387a0dc51f4b5ffb89a482821c8254284f70601.tar.gz
Merge branch 'set_event_context' into 'master'
Add atk_bridge_set_event_context See merge request GNOME/at-spi2-atk!3
-rw-r--r--atk-adaptor/accessible-cache.c5
-rw-r--r--atk-adaptor/accessible-leasing.c5
-rw-r--r--atk-adaptor/atk-bridge.h1
-rw-r--r--atk-adaptor/atkbridge.symbols1
-rw-r--r--atk-adaptor/bridge.c4
-rw-r--r--atk-adaptor/event.c43
-rw-r--r--atk-adaptor/event.h4
7 files changed, 54 insertions, 9 deletions
diff --git a/atk-adaptor/accessible-cache.c b/atk-adaptor/accessible-cache.c
index a52a8e5..5174dbd 100644
--- a/atk-adaptor/accessible-cache.c
+++ b/atk-adaptor/accessible-cache.c
@@ -26,6 +26,7 @@
#include "accessible-cache.h"
#include "accessible-register.h"
#include "bridge.h"
+#include "event.h"
SpiCache *spi_global_cache = NULL;
@@ -358,7 +359,7 @@ child_added_listener (GSignalInvocationHint * signal_hint,
g_queue_push_tail (cache->add_traversal, child);
if (cache->add_pending_idle == 0)
- cache->add_pending_idle = g_idle_add (add_pending_items, cache);
+ cache->add_pending_idle = spi_idle_add (add_pending_items, cache);
}
#ifdef SPI_ATK_DEBUG
recursion_check_unset ();
@@ -400,7 +401,7 @@ toplevel_added_listener (AtkObject * accessible,
g_queue_push_tail (cache->add_traversal, child);
if (cache->add_pending_idle == 0)
- cache->add_pending_idle = g_idle_add (add_pending_items, cache);
+ cache->add_pending_idle = spi_idle_add (add_pending_items, cache);
#ifdef SPI_ATK_DEBUG
recursion_check_unset ();
#endif
diff --git a/atk-adaptor/accessible-leasing.c b/atk-adaptor/accessible-leasing.c
index dcddb0b..27e4459 100644
--- a/atk-adaptor/accessible-leasing.c
+++ b/atk-adaptor/accessible-leasing.c
@@ -25,6 +25,7 @@
#include <string.h>
#include "accessible-leasing.h"
+#include "event.h"
#ifdef SPI_ATK_DEBUG
#include "accessible-cache.h"
@@ -161,8 +162,8 @@ add_expiry_timeout (SpiLeasing * leasing)
/* The current time is implicitly rounded down here by ignoring the us */
g_get_current_time (&t);
next_expiry = elem->expiry_s - t.tv_sec;
- leasing->expiry_func_id = g_timeout_add_seconds (next_expiry,
- expiry_func, leasing);
+ leasing->expiry_func_id = spi_timeout_add_seconds (next_expiry,
+ expiry_func, leasing);
}
/*---------------------------------------------------------------------------*/
diff --git a/atk-adaptor/atk-bridge.h b/atk-adaptor/atk-bridge.h
index 9c0dd0d..9b6f91e 100644
--- a/atk-adaptor/atk-bridge.h
+++ b/atk-adaptor/atk-bridge.h
@@ -31,6 +31,7 @@ G_BEGIN_DECLS
int atk_bridge_adaptor_init (int * argc, char ** argv[]);
void atk_bridge_adaptor_cleanup (void);
+void atk_bridge_set_event_context(GMainContext *cnx);
G_END_DECLS
diff --git a/atk-adaptor/atkbridge.symbols b/atk-adaptor/atkbridge.symbols
index d90cf94..cfaa509 100644
--- a/atk-adaptor/atkbridge.symbols
+++ b/atk-adaptor/atkbridge.symbols
@@ -1,2 +1,3 @@
atk_bridge_adaptor_init
atk_bridge_adaptor_cleanup
+atk_bridge_set_event_context
diff --git a/atk-adaptor/bridge.c b/atk-adaptor/bridge.c
index 19cd32a..3363b4e 100644
--- a/atk-adaptor/bridge.c
+++ b/atk-adaptor/bridge.c
@@ -673,7 +673,7 @@ new_connection_cb (DBusServer *server, DBusConnection *con, void *data)
{
dbus_connection_set_unix_user_function (con, user_check, NULL, NULL);
dbus_connection_ref(con);
- atspi_dbus_connection_setup_with_g_main(con, NULL);
+ atspi_dbus_connection_setup_with_g_main(con, spi_context);
droute_intercept_dbus (con);
droute_context_register (spi_global_app_data->droute, con);
@@ -904,7 +904,7 @@ spi_atk_create_socket (SpiBridge *app)
return -1;
}
- atspi_dbus_server_setup_with_g_main(server, NULL);
+ atspi_dbus_server_setup_with_g_main(server, spi_context);
dbus_server_set_new_connection_function(server, new_connection_cb, NULL, NULL);
spi_global_app_data->server = server;
diff --git a/atk-adaptor/event.c b/atk-adaptor/event.c
index 739dc2c..7c3c3f9 100644
--- a/atk-adaptor/event.c
+++ b/atk-adaptor/event.c
@@ -42,6 +42,8 @@ static GArray *listener_ids = NULL;
static gint atk_bridge_key_event_listener_id;
static gint atk_bridge_focus_tracker_id;
+GMainContext *spi_context = NULL;
+
/*---------------------------------------------------------------------------*/
#define ITF_EVENT_OBJECT "org.a11y.atspi.Event.Object"
@@ -72,6 +74,34 @@ switch_main_context (GMainContext *cnx)
atspi_dbus_connection_setup_with_g_main (list->data, cnx);
}
+guint
+spi_idle_add(GSourceFunc function, gpointer data)
+{
+ GSource *source;
+ guint id;
+
+ source = g_idle_source_new ();
+ g_source_set_callback (source, function, data, NULL);
+ id = g_source_attach (source, spi_context);
+ g_source_unref (source);
+
+ return id;
+}
+
+guint
+spi_timeout_add_seconds (gint interval, GSourceFunc function, gpointer data)
+{
+ GSource *source;
+ guint id;
+
+ source = g_timeout_source_new_seconds (interval);
+ g_source_set_callback (source, function, data, NULL);
+ id = g_source_attach (source, spi_context);
+ g_source_unref (source);
+
+ return id;
+}
+
static void
set_reply (DBusPendingCall * pending, void *user_data)
{
@@ -79,7 +109,7 @@ set_reply (DBusPendingCall * pending, void *user_data)
closure->reply = dbus_pending_call_steal_reply (pending);
dbus_pending_call_unref (pending);
- switch_main_context (NULL);
+ switch_main_context (spi_context);
g_main_loop_quit (closure->loop);
}
@@ -88,7 +118,7 @@ timeout_reply (void *data)
{
SpiReentrantCallClosure *closure = data;
- switch_main_context (NULL);
+ switch_main_context (spi_context);
g_main_loop_quit (closure->loop);
closure->timeout = -1;
return FALSE;
@@ -108,7 +138,7 @@ send_and_allow_reentry (DBusConnection * bus, DBusMessage * message)
if (!dbus_connection_send_with_reply (bus, message, &pending, 9000) || !pending)
{
- switch_main_context (NULL);
+ switch_main_context (spi_context);
return NULL;
}
dbus_pending_call_set_notify (pending, set_reply, (void *) &closure, NULL);
@@ -126,6 +156,13 @@ send_and_allow_reentry (DBusConnection * bus, DBusMessage * message)
return closure.reply;
}
+void
+atk_bridge_set_event_context(GMainContext *cnx)
+{
+ spi_context = cnx;
+ switch_main_context(spi_context);
+}
+
/*---------------------------------------------------------------------------*/
/*
diff --git a/atk-adaptor/event.h b/atk-adaptor/event.h
index 1a9f9f3..f5d9758 100644
--- a/atk-adaptor/event.h
+++ b/atk-adaptor/event.h
@@ -30,4 +30,8 @@ void spi_atk_deregister_event_listeners (void);
void spi_atk_tidy_windows (void);
gboolean spi_event_is_subtype (gchar **needle, gchar **haystack);
+
+extern GMainContext *spi_context;
+guint spi_idle_add(GSourceFunc function, gpointer data);
+guint spi_timeout_add_seconds (gint interval, GSourceFunc function, gpointer data);
#endif /* EVENT_H */