X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=atk-adaptor%2Fevent.c;h=859d3992c3c7ac9cc6002d8e04ae764fad4072f3;hb=8e03fc29c9dc15f90cbb6433e05b55ab535658a1;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..859d399 100644 --- a/atk-adaptor/event.c +++ b/atk-adaptor/event.c @@ -64,9 +64,8 @@ switch_main_context (GMainContext *cnx) { GList *list; -#ifndef DISABLE_P2P - atspi_dbus_server_setup_with_g_main (spi_global_app_data->server, cnx); -#endif + if (spi_global_app_data->server) + atspi_dbus_server_setup_with_g_main (spi_global_app_data->server, cnx); atspi_dbus_connection_setup_with_g_main (spi_global_app_data->bus, cnx); for (list = spi_global_app_data->direct_connections; list; list = list->next) atspi_dbus_connection_setup_with_g_main (list->data, cnx); @@ -233,23 +232,6 @@ spi_atk_bridge_key_listener (AtkKeyEventStruct * event, gpointer data) /*---------------------------------------------------------------------------*/ -static gchar * -convert_signal_name (const gchar * s) -{ - gchar *ret = g_strdup (s); - gchar *t; - - if (!ret) - return NULL; - ret[0] = toupper (ret[0]); - while ((t = strchr (ret, '-')) != NULL) - { - memmove (t, t + 1, strlen (t)); - *t = toupper (*t); - } - return ret; -} - static const void * validate_for_dbus (const gint type, const void *val) @@ -373,7 +355,6 @@ static gboolean signal_is_needed (const gchar *klass, const gchar *major, const gchar *minor) { gchar *data [4]; - GList *iter; event_data *evdata; gboolean ret = FALSE; GList *list; @@ -421,6 +402,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: @@ -443,11 +436,12 @@ emit_event (AtkObject *obj, void (*append_variant) (DBusMessageIter *, const char *, const void *)) { DBusConnection *bus = spi_global_app_data->bus; - const char *path; + char *path; + char *minor_dbus; - gchar *cname, *t; + gchar *cname; DBusMessage *sig; - DBusMessageIter iter, iter_struct; + DBusMessageIter iter; if (!klass) klass = ""; if (!major) major = ""; @@ -458,6 +452,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 +464,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); @@ -521,7 +518,7 @@ property_event_listener (GSignalInvocationHint * signal_hint, const gchar *pname = NULL; AtkObject *otemp; - const gchar *s1, s2; + const gchar *s1; gint i; accessible = g_value_get_object (¶m_values[0]); @@ -625,7 +622,7 @@ state_event_listener (GSignalInvocationHint * signal_hint, const GValue * param_values, gpointer data) { AtkObject *accessible; - gchar *pname; + const gchar *pname; guint detail1; accessible = ATK_OBJECT (g_value_get_object (¶m_values[0])); @@ -635,7 +632,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; @@ -718,7 +715,7 @@ bounds_event_listener (GSignalInvocationHint * signal_hint, AtkObject *accessible; AtkRectangle *atk_rect; GSignalQuery signal_query; - const gchar *name, *s; + const gchar *name; g_signal_query (signal_hint->signal_id, &signal_query); name = signal_query.signal_name; @@ -750,7 +747,7 @@ active_descendant_event_listener (GSignalInvocationHint * signal_hint, AtkObject *accessible; AtkObject *child; GSignalQuery signal_query; - const gchar *name, *minor; + const gchar *name; gint detail1; g_signal_query (signal_hint->signal_id, &signal_query); @@ -759,7 +756,6 @@ active_descendant_event_listener (GSignalInvocationHint * signal_hint, accessible = ATK_OBJECT (g_value_get_object (¶m_values[0])); child = ATK_OBJECT (g_value_get_pointer (¶m_values[1])); g_return_val_if_fail (ATK_IS_OBJECT (child), TRUE); - minor = g_quark_to_string (signal_hint->detail); detail1 = atk_object_get_index_in_parent (child); @@ -855,7 +851,8 @@ text_insert_event_listener (GSignalInvocationHint * signal_hint, guint text_changed_signal_id; GSignalQuery signal_query; const gchar *name; - gchar *minor, *text; + const gchar *minor_raw, *text; + gchar *minor; gint detail1 = 0, detail2 = 0; accessible = ATK_OBJECT (g_value_get_object (¶m_values[0])); @@ -868,9 +865,9 @@ text_insert_event_listener (GSignalInvocationHint * signal_hint, /* Add the insert and keep any detail coming from atk */ - minor = g_quark_to_string (signal_hint->detail); - if (minor) - minor = g_strconcat ("insert:", minor, NULL); + minor_raw = g_quark_to_string (signal_hint->detail); + if (minor_raw) + minor = g_strconcat ("insert:", minor_raw, NULL); else minor = g_strdup ("insert"); @@ -903,7 +900,8 @@ text_remove_event_listener (GSignalInvocationHint * signal_hint, guint text_changed_signal_id; GSignalQuery signal_query; const gchar *name; - gchar *minor, *text; + const gchar *minor_raw, *text; + gchar *minor; gint detail1 = 0, detail2 = 0; accessible = ATK_OBJECT (g_value_get_object (¶m_values[0])); @@ -914,12 +912,11 @@ text_remove_event_listener (GSignalInvocationHint * signal_hint, g_signal_query (text_changed_signal_id, &signal_query); name = signal_query.signal_name; - minor = g_quark_to_string (signal_hint->detail); + minor_raw = g_quark_to_string (signal_hint->detail); /* Add the delete and keep any detail coming from atk */ - minor = g_quark_to_string (signal_hint->detail); - if (minor) - minor = g_strconcat ("delete:", minor, NULL); + if (minor_raw) + minor = g_strconcat ("delete:", minor_raw, NULL); else minor = g_strdup ("delete"); @@ -1019,6 +1016,7 @@ children_changed_event_listener (GSignalInvocationHint * signal_hint, detail1); emit_event (accessible, ITF_EVENT_OBJECT, name, minor, detail1, detail2, "(so)", ao, append_object); + g_object_unref (ao); } else { @@ -1031,24 +1029,6 @@ children_changed_event_listener (GSignalInvocationHint * signal_hint, /*---------------------------------------------------------------------------*/ -static void -toplevel_added_event_listener (AtkObject * accessible, - guint index, AtkObject * child) -{ - emit_event (accessible, ITF_EVENT_OBJECT, "children-changed", "add", index, 0, - "(so)", child, append_object); -} - -static void -toplevel_removed_event_listener (AtkObject * accessible, - guint index, AtkObject * child) -{ - emit_event (accessible, ITF_EVENT_OBJECT, "children-changed", "remove", index, 0, - "(so)", child, append_object); -} - -/*---------------------------------------------------------------------------*/ - /* * Generic signal converter and forwarder. *