diff options
author | Mark Doffman <mdoff@silver-wind.(none)> | 2009-01-22 14:38:17 +0000 |
---|---|---|
committer | Mark Doffman <mdoff@silver-wind.(none)> | 2009-01-22 14:38:17 +0000 |
commit | dfc071dcf2f98f282616911cb0eb1636c93f3e77 (patch) | |
tree | 2e5741237bd4c91ebb362f9cd0529ab1b5aa4b0c /cspi | |
parent | b59dc5b9c3c2412fca31a86241d2540c30935833 (diff) | |
parent | 2d2fdf89e9647f7a6fc1f14abd3c32ae48abc19a (diff) | |
download | at-spi2-atk-dfc071dcf2f98f282616911cb0eb1636c93f3e77.tar.gz |
Merge branch 'master' of git+ssh://doffm@git.freedesktop.org/git/at-spi2/at-spi2-core
Conflicts:
atk-adaptor/atk-dbus.c
atk-adaptor/tree.c
registryd/deviceeventcontroller.c
Diffstat (limited to 'cspi')
-rw-r--r-- | cspi/spi-main.c | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/cspi/spi-main.c b/cspi/spi-main.c index e824c6a..aeda398 100644 --- a/cspi/spi-main.c +++ b/cspi/spi-main.c @@ -93,6 +93,7 @@ static const char *interfaces[] = SPI_DBUS_INTERFACE_ACCESSIBLE, SPI_DBUS_INTERFACE_ACTION, SPI_DBUS_INTERFACE_APPLICATION, + SPI_DBUS_INTERFACE_COLLECTION, SPI_DBUS_INTERFACE_COMPONENT, SPI_DBUS_INTERFACE_DOCUMENT, SPI_DBUS_INTERFACE_EDITABLE_TEXT, @@ -218,7 +219,8 @@ cspi_object_unref_internal (Accessible *accessible, gboolean defunct) { g_free (accessible->v.path); } - spi_state_set_cache_unref (accessible->states); + if (accessible->states) + spi_state_set_cache_unref (accessible->states); g_free (accessible->description); g_free (accessible->name); g_free(accessible); @@ -377,7 +379,7 @@ handle_additions (CSpiApplication*app, GArray *additions) a->states = spi_state_set_cache_new (ca->state_bitflags); g_array_free (ca->interfaces, TRUE); g_array_free (ca->children, TRUE); - g_array_free (ca->state_bitflags, TRUE); + /* spi_state_set_cache_new frees state_bitflags */ /* This is a bit of a hack since ref_accessible sets ref_count to 2 * for a new object, one of the refs being for the cache */ cspi_object_unref (a); @@ -556,7 +558,7 @@ typedef struct GArray *removals; } CacheSignalData; -static const char *cacheSignalType = "a(ooaoassus)ao"; +static const char *cacheSignalType = "a(ooaoassusau)ao"; static DBusHandlerResult cspi_dbus_handle_update_tree (DBusConnection *bus, DBusMessage *message, void *user_data) @@ -631,7 +633,7 @@ cspi_dbus_filter (DBusConnection *bus, DBusMessage *message, void *data) char *bus_name; if (type == DBUS_MESSAGE_TYPE_SIGNAL && - !strcmp (interface, SPI_DBUS_INTERFACE_ACCESSIBLE)) + !strncmp (interface, "org.freedesktop.atspi.Event.", 28)) { return cspi_dbus_handle_event (bus, message, data); } @@ -643,17 +645,28 @@ cspi_dbus_filter (DBusConnection *bus, DBusMessage *message, void *data) { return cspi_dbus_handle_update_tree (bus, message, data); } - if (dbus_message_is_signal (message, spi_interface_tree, "registerApplication")) + if (dbus_message_is_method_call (message, spi_interface_registry, "registerApplication")) { return cspi_dbus_handle_register_application (bus, message, data); } - if (dbus_message_is_signal (message, spi_interface_registry, "deregisterApplication")) + if (dbus_message_is_method_call (message, spi_interface_registry, "deregisterApplication")) { return cspi_dbus_handle_deregister_application (bus, message, data); } return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; } +static const char *signal_interfaces[] = +{ + "org.freedesktop.atspi.Event.Object", + "org.freedesktop.atspi.Event.Window", + "org.freedesktop.atspi.Event.Mouse", + "org.freedesktop.atspi.Event.Terminal", + "org.freedesktop.atspi.Event.Document", + "org.freedesktop.atspi.Event.Focus", + NULL +}; + /** * SPI_init: * @@ -666,6 +679,7 @@ SPI_init (void) { DBusError error; char *match; + int i; if (SPI_inited) { @@ -693,9 +707,15 @@ SPI_init (void) dbus_error_init (&error); dbus_bus_add_match (bus, match, &error); g_free (match); - match = g_strdup_printf ("type='signal',interface='%s'", spi_interface_tree); + match = g_strdup_printf ("type='method_call',interface='%s'", spi_interface_registry); dbus_bus_add_match (bus, match, &error); g_free (match); + for (i = 0; signal_interfaces[i]; i++) + { + match = g_strdup_printf ("type='signal',interface='%s'", signal_interfaces[i]); + dbus_bus_add_match (bus, match, &error); + g_free (match); + } return 0; } |