X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=atk-adaptor%2Fevent.c;h=22f817d96f924d3223537d3109ef1d54e3f682f9;hb=08cd4311cdcfd3355fbde0c1e3389dbfd1417cee;hp=586d19630e6e6271ddf282a5101d3a429366f845;hpb=51b5abcea9ee948d11aeb5d6062186f3d4f5ee59;p=platform%2Fcore%2Fuifw%2Fat-spi2-atk.git diff --git a/atk-adaptor/event.c b/atk-adaptor/event.c index 586d196..22f817d 100644 --- a/atk-adaptor/event.c +++ b/atk-adaptor/event.c @@ -421,6 +421,18 @@ signal_is_needed (const gchar *klass, const gchar *major, const gchar *minor) return ret; } +/* Convert a : to a / so that listeners can use arg0path to match only + * * the prefix */ +static char * +adapt_minor_for_dbus (const char *source) +{ + gchar *ret = g_strdup (source); + int i = strcspn (ret, ":"); + if (ret[i] == ':') + ret[i] = '/'; + return ret; +} + /* * Emits an AT-SPI event. * AT-SPI events names are split into three parts: @@ -444,6 +456,7 @@ emit_event (AtkObject *obj, { DBusConnection *bus = spi_global_app_data->bus; const char *path; + char *minor_dbus; gchar *cname, *t; DBusMessage *sig; @@ -458,6 +471,7 @@ emit_event (AtkObject *obj, return; path = spi_register_object_to_path (spi_global_register, G_OBJECT (obj)); + g_return_if_fail (path != NULL); /* * This is very annoying, but as '-' isn't a legal signal @@ -469,7 +483,9 @@ emit_event (AtkObject *obj, dbus_message_iter_init_append(sig, &iter); - dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &minor); + minor_dbus = adapt_minor_for_dbus (minor); + dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &minor_dbus); + g_free (minor_dbus); dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &detail1); dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &detail2); append_variant (&iter, type, val); @@ -635,7 +651,7 @@ state_event_listener (GSignalInvocationHint * signal_hint, emit_event (accessible, ITF_EVENT_OBJECT, STATE_CHANGED, pname, detail1, 0, DBUS_TYPE_INT32_AS_STRING, 0, append_basic); - if (!g_strcmp0 (pname, "defunct")) + if (!g_strcmp0 (pname, "defunct") && detail1) spi_register_deregister_object (spi_global_register, G_OBJECT (accessible), TRUE); return TRUE;