X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=atspi%2Fatspi-accessible.c;h=a57925407d7f1463d1c8a68f5c8945505cad1672;hb=29f7a16080f961af341fb827646bf378d4448ec1;hp=4ce89e37c78f9bcaacc3f4326357cc455b688f70;hpb=e6e8611f117791e42a4eb971fd75840cb654a365;p=platform%2Fupstream%2Fat-spi2-core.git diff --git a/atspi/atspi-accessible.c b/atspi/atspi-accessible.c index 4ce89e3..a579254 100644 --- a/atspi/atspi-accessible.c +++ b/atspi/atspi-accessible.c @@ -190,6 +190,9 @@ atspi_accessible_finalize (GObject *object) if (accessible->attributes) g_hash_table_unref (accessible->attributes); + if (accessible->priv->cache) + g_hash_table_destroy (accessible->priv->cache); + #ifdef DEBUG_REF_COUNTS accessible_count--; g_hash_table_remove (_atspi_get_live_refs (), accessible); @@ -217,7 +220,7 @@ atspi_accessible_class_init (AtspiAccessibleClass *klass) * * Gets the name of an #AtspiAccessible object. * - * Returns: a UTF-8 string indicating the name of the #AtspiAccessible object + * Returns: a UTF-8 string indicating the name of the #AtspiAccessible object * or NULL on exception. **/ gchar * @@ -234,13 +237,130 @@ atspi_accessible_get_name (AtspiAccessible *obj, GError **error) return g_strdup (obj->name); } + +/** + * atspi_accessible_get_unique_id: + * @obj: a pointer to the #AtspiAccessible object on which to operate. + * + * Gets the identificator, uniquely identifying object, or NULL if an error occured. + * + * Returns: a UTF-8 string describing the #AtspiAccessible object + * or NULL on exception or NULL object passed. + **/ +gchar * +atspi_accessible_get_unique_id(AtspiAccessible *obj, GError **error) +{ + if (!obj) { + g_set_error(error, ATSPI_ERROR, ATSPI_ERROR_IPC, "argument is null"); + return NULL; + } + + gchar *id = NULL; + gchar *bus_name = atspi_accessible_get_bus_name(obj, error); + if (bus_name && bus_name[0]) { + gchar *path = atspi_accessible_get_path(obj, error); + if (path && path[0]) + id = g_strdup_printf("%s:%s", bus_name, path); + else + g_set_error(error, ATSPI_ERROR, ATSPI_ERROR_IPC, "failed to get path"); + g_free(path); + } + else + g_set_error(error, ATSPI_ERROR, ATSPI_ERROR_IPC, "failed to get bus name"); + g_free(bus_name); + return id; +} + +/** + * atspi_accessible_get_bus_name: + * @obj: a pointer to the #AtspiAccessible object on which to operate. + * + * Gets the bus name, where object belongs. + * + * Returns: a UTF-8 string describing the #AtspiAccessible object's + * bus name or empty string on exception or NULL object passed. + **/ +gchar * +atspi_accessible_get_bus_name(AtspiAccessible *obj, GError **error) +{ + if (!obj || !obj->parent.app) + return g_strdup(""); + return g_strdup (obj->parent.app->bus_name); +} + +/** + * atspi_accessible_get_path: + * @obj: a pointer to the #AtspiAccessible object on which to operate. + * + * Gets the path, uniquely identifying object over its bus name. + * + * Returns: a UTF-8 string describing the #AtspiAccessible object + * or empty string on exception or NULL object passed. + **/ +gchar * +atspi_accessible_get_path(AtspiAccessible *obj, GError **error) +{ + static const char *prefix = "/org/a11y/atspi/accessible/"; + static int prefix_len = 27; + + if (!obj) + return g_strdup(""); + AtspiObject *o = ATSPI_OBJECT (obj); + if (!o) + return g_strdup(""); + if (strncmp(o->path, prefix, prefix_len) == 0) + return g_strdup(o->path + prefix_len); + return g_strdup (o->path); +} + +/** + * atspi_accessible_get_navigable_at_point: + * @root: a pointer to the #AtspiAccessible to start search from. + * @x: a #gint specifying the x coordinate of the point in question. + * @y: a #gint specifying the y coordinate of the point in question. + * @ctype: the coordinate system of the point (@x, @y) + * (e.g. ATSPI_COORD_TYPE_WINDOW, ATSPI_COORD_TYPE_SCREEN). + * + * Finds the accessible element closest to user (highest in z-order), at a given coordinate within an #AtspiAccessible. + * This should be the element, that should be picked, when doing mouse click or finger tap at given coordinates. + * + * Returns: (nullable) (transfer full): a pointer to an + * #AtspiAccessible descendant (of any depth) of the specified component which + * contains the point (@x, @y), or NULL if no descendant contains + * the point. + **/ +AtspiAccessible * +atspi_accessible_get_navigable_at_point (AtspiAccessible *root, + gint x, + gint y, + AtspiCoordType ctype, GError **error) +{ + dbus_int32_t d_x = x, d_y = y; + dbus_uint32_t d_ctype = ctype; + DBusMessage *reply; + AtspiAccessible *return_value = NULL; + unsigned char recurse = 0; + + g_return_val_if_fail (root != NULL, FALSE); + do { + reply = _atspi_dbus_call_partial (root, atspi_interface_accessible, "GetNavigableAtPoint", error, "iiu", d_x, d_y, d_ctype); + + AtspiAccessible *tmp = _atspi_dbus_return_accessible_and_recurse_info_from_message (reply, &recurse); + if (!tmp) break; + if (return_value) + g_object_unref(return_value); + return_value = root = tmp; + } while(recurse); + return return_value; +} + /** * atspi_accessible_get_description: * @obj: a pointer to the #AtspiAccessible object on which to operate. * * Gets the description of an #AtspiAccessible object. * - * Returns: a UTF-8 string describing the #AtspiAccessible object + * Returns: a UTF-8 string describing the #AtspiAccessible object * or NULL on exception. **/ gchar * @@ -267,9 +387,10 @@ const char *str_parent = "Parent"; * * Gets an #AtspiAccessible object's parent container. * - * Returns: (transfer full): a pointer to the #AtspiAccessible object which - * contains the given #AtspiAccessible instance, or NULL if the @obj - * has no parent container. + * Returns: (nullable) (transfer full): a pointer to the + * #AtspiAccessible object which contains the given + * #AtspiAccessible instance, or NULL if the @obj has no + * parent container. * **/ AtspiAccessible * @@ -374,7 +495,7 @@ atspi_accessible_get_child_at_index (AtspiAccessible *obj, * atspi_accessible_get_index_in_parent: * @obj: a pointer to the #AtspiAccessible object on which to operate. * - * Gets the index of an #AtspiAccessible object within its parent's + * Gets the index of an #AtspiAccessible object within its parent's * #AtspiAccessible children list. * * Returns: a #glong indicating the index of the #AtspiAccessible object @@ -424,7 +545,7 @@ typedef struct * Gets the set of #AtspiRelation objects which describes this #AtspiAccessible object's * relationships with other #AtspiAccessible objects. * - * Returns: (element-type AtspiAccessible*) (transfer full): a #GArray of + * Returns: (element-type AtspiRelation*) (transfer full): a #GArray of * #AtspiRelation pointers or NULL on exception. **/ GArray * @@ -519,12 +640,12 @@ atspi_accessible_get_role_name (AtspiAccessible *obj, GError **error) * atspi_accessible_get_localized_role_name: * @obj: a pointer to the #AtspiAccessible object on which to operate. * - * Gets a UTF-8 string corresponding to the name of the role played by an + * Gets a UTF-8 string corresponding to the name of the role played by an * object, translated to the current locale. * This method will return useful values for roles that fall outside the * enumeration used in atspi_accessible_getRole (). * - * Returns: a localized, UTF-8 string specifying the type of UI role played + * Returns: a localized, UTF-8 string specifying the type of UI role played * by an #AtspiAccessible object. * **/ @@ -579,7 +700,6 @@ atspi_accessible_get_state_set (AtspiAccessible *obj) dbus_message_unref (reply); _atspi_accessible_add_cache (obj, ATSPI_CACHE_STATES); } - return g_object_ref (obj->states); } @@ -587,7 +707,7 @@ atspi_accessible_get_state_set (AtspiAccessible *obj) * atspi_accessible_get_attributes: * @obj: The #AtspiAccessible being queried. * - * Gets the #AttributeSet representing any assigned + * Gets the #AttributeSet representing any assigned * name-value pair attributes or annotations for this object. * For typographic, textual, or textually-semantic attributes, see * atspi_text_get_attributes instead. @@ -634,7 +754,7 @@ add_to_attribute_array (gpointer key, gpointer value, gpointer data) * atspi_accessible_get_attributes_as_array: * @obj: The #AtspiAccessible being queried. * - * Gets a #GArray representing any assigned + * Gets a #GArray representing any assigned * name-value pair attributes or annotations for this object. * For typographic, textual, or textually-semantic attributes, see * atspi_text_get_attributes_as_array instead. @@ -792,7 +912,7 @@ atspi_accessible_get_atspi_version (AtspiAccessible *obj, GError **error) * Gets the application id for a #AtspiAccessible object. * Only works on application root objects. * - * Returns: a positive #gint indicating the id for the #AtspiAccessible object + * Returns: a positive #gint indicating the id for the #AtspiAccessible object * or -1 on exception. **/ gint @@ -843,7 +963,7 @@ _atspi_accessible_is_a (AtspiAccessible *accessible, * atspi_accessible_is_action: * @obj: a pointer to the #AtspiAccessible instance to query. * - * Query whether the specified #AtspiAccessible implements the + * Query whether the specified #AtspiAccessible implements the * #AtspiAction interface. * * Returns: #TRUE if @obj implements the #AtspiAction interface, @@ -873,7 +993,7 @@ atspi_accessible_is_application (AtspiAccessible *obj) atspi_interface_application); } -/** +/** * atspi_accessible_is_collection: * @obj: a pointer to the #AtspiAccessible instance to query. * @@ -939,7 +1059,7 @@ atspi_accessible_is_editable_text (AtspiAccessible *obj) return _atspi_accessible_is_a (obj, atspi_interface_editable_text); } - + /** * atspi_accessible_is_hypertext: * @obj: a pointer to the #AtspiAccessible instance to query. @@ -961,7 +1081,7 @@ atspi_accessible_is_hypertext (AtspiAccessible *obj) * atspi_accessible_is_hyperlink: * @obj: a pointer to the #AtspiAccessible instance to query. * - * Query whether the specified #AtspiAccessible implements the + * Query whether the specified #AtspiAccessible implements the * #AtspiHyperlink interface. * * Returns: #TRUE if @obj implements the #AtspiHypertext interface, @@ -1068,7 +1188,7 @@ atspi_accessible_is_streamable_content (AtspiAccessible *obj) * atspi_accessible_is_text: * @obj: a pointer to the #AtspiAccessible instance to query. * - * Query whether the specified #AtspiAccessible implements the + * Query whether the specified #AtspiAccessible implements the * #AtspiText interface. * * Returns: #TRUE if @obj implements the #AtspiText interface, @@ -1099,7 +1219,7 @@ atspi_accessible_is_value (AtspiAccessible *obj) } /** - * atspi_accessible_get_action: + * atspi_accessible_get_action: (rename-to atspi_accessible_get_action_iface) * @obj: a pointer to the #AtspiAccessible instance to query. * * Gets the #AtspiAction interface for an #AtspiAccessible. @@ -1108,13 +1228,12 @@ atspi_accessible_is_value (AtspiAccessible *obj) * instance, or NULL if @obj does not implement #AtspiAction. * * Deprecated: 2.10: Use atspi_accessible_get_action_iface instead. - * Rename to: atspi_accessible_get_action_iface **/ AtspiAction * atspi_accessible_get_action (AtspiAccessible *accessible) { return (_atspi_accessible_is_a (accessible, atspi_interface_action) ? - g_object_ref (ATSPI_ACTION (accessible)) : NULL); + g_object_ref (ATSPI_ACTION (accessible)) : NULL); } /** @@ -1130,11 +1249,11 @@ AtspiAction * atspi_accessible_get_action_iface (AtspiAccessible *accessible) { return (_atspi_accessible_is_a (accessible, atspi_interface_action) ? - g_object_ref (ATSPI_ACTION (accessible)) : NULL); + g_object_ref (ATSPI_ACTION (accessible)) : NULL); } /** - * atspi_accessible_get_collection: + * atspi_accessible_get_collection: (rename-to atspi_accessible_get_collection_iface) * @obj: a pointer to the #AtspiAccessible instance to query. * * Gets the #AtspiCollection interface for an #AtspiAccessible. @@ -1143,13 +1262,12 @@ atspi_accessible_get_action_iface (AtspiAccessible *accessible) * instance, or NULL if @obj does not implement #AtspiCollection. * * Deprecated: 2.10: Use atspi_accessible_get_collection_iface instead. - * Rename to: atspi_accessible_get_collection_iface **/ AtspiCollection * atspi_accessible_get_collection (AtspiAccessible *accessible) { return (_atspi_accessible_is_a (accessible, atspi_interface_collection) ? - g_object_ref (ATSPI_COLLECTION (accessible)) : NULL); + g_object_ref (ATSPI_COLLECTION (accessible)) : NULL); } /** @@ -1165,11 +1283,11 @@ AtspiCollection * atspi_accessible_get_collection_iface (AtspiAccessible *accessible) { return (_atspi_accessible_is_a (accessible, atspi_interface_collection) ? - g_object_ref (ATSPI_COLLECTION (accessible)) : NULL); + g_object_ref (ATSPI_COLLECTION (accessible)) : NULL); } /** - * atspi_accessible_get_component: + * atspi_accessible_get_component: (rename-to atspi_accessible_get_component_iface) * @obj: a pointer to the #AtspiAccessible instance to query. * * Gets the #AtspiComponent interface for an #AtspiAccessible. @@ -1178,7 +1296,6 @@ atspi_accessible_get_collection_iface (AtspiAccessible *accessible) * instance, or NULL if @obj does not implement #AtspiComponent. * * Deprecated: 2.10: Use atspi_accessible_get_component_iface instead. - * Rename to: atspi_accessible_get_component_iface **/ AtspiComponent * atspi_accessible_get_component (AtspiAccessible *obj) @@ -1204,7 +1321,7 @@ atspi_accessible_get_component_iface (AtspiAccessible *obj) } /** - * atspi_accessible_get_document: + * atspi_accessible_get_document: (rename-to atspi_accessible_get_document_iface) * @obj: a pointer to the #AtspiAccessible instance to query. * * Gets the #AtspiDocument interface for an #AtspiAccessible. @@ -1213,13 +1330,12 @@ atspi_accessible_get_component_iface (AtspiAccessible *obj) * instance, or NULL if @obj does not implement #AtspiDocument. * * Deprecated: 2.10: Use atspi_accessible_get_document_iface instead. - * Rename to: atspi_accessible_get_document_iface **/ AtspiDocument * atspi_accessible_get_document (AtspiAccessible *accessible) { return (_atspi_accessible_is_a (accessible, atspi_interface_document) ? - g_object_ref (ATSPI_DOCUMENT (accessible)) : NULL); + g_object_ref (ATSPI_DOCUMENT (accessible)) : NULL); } /** @@ -1235,11 +1351,11 @@ AtspiDocument * atspi_accessible_get_document_iface (AtspiAccessible *accessible) { return (_atspi_accessible_is_a (accessible, atspi_interface_document) ? - g_object_ref (ATSPI_DOCUMENT (accessible)) : NULL); + g_object_ref (ATSPI_DOCUMENT (accessible)) : NULL); } /** - * atspi_accessible_get_editable_text: + * atspi_accessible_get_editable_text: (rename-to atspi_accessible_get_editable_text_iface) * @obj: a pointer to the #AtspiAccessible instance to query. * * Gets the #AtspiEditableText interface for an #AtspiAccessible. @@ -1248,13 +1364,12 @@ atspi_accessible_get_document_iface (AtspiAccessible *accessible) * instance, or NULL if @obj does not implement #AtspiEditableText. * * Deprecated: 2.10: Use atspi_accessible_get_editable_text_iface instead. - * Rename to: atspi_accessible_get_editable_text_iface **/ AtspiEditableText * atspi_accessible_get_editable_text (AtspiAccessible *accessible) { return (_atspi_accessible_is_a (accessible, atspi_interface_editable_text) ? - g_object_ref (ATSPI_EDITABLE_TEXT (accessible)) : NULL); + g_object_ref (ATSPI_EDITABLE_TEXT (accessible)) : NULL); } /** @@ -1270,7 +1385,7 @@ AtspiEditableText * atspi_accessible_get_editable_text_iface (AtspiAccessible *accessible) { return (_atspi_accessible_is_a (accessible, atspi_interface_editable_text) ? - g_object_ref (ATSPI_EDITABLE_TEXT (accessible)) : NULL); + g_object_ref (ATSPI_EDITABLE_TEXT (accessible)) : NULL); } /** @@ -1290,7 +1405,7 @@ atspi_accessible_get_hyperlink (AtspiAccessible *accessible) } /** - * atspi_accessible_get_hypertext: + * atspi_accessible_get_hypertext: (rename-to atspi_accessible_get_hypertext_iface) * @obj: a pointer to the #AtspiAccessible instance to query. * * Gets the #AtspiHypertext interface for an #AtspiAccessible. @@ -1299,13 +1414,12 @@ atspi_accessible_get_hyperlink (AtspiAccessible *accessible) * instance, or NULL if @obj does not implement #AtspiHypertext. * * Deprecated: 2.10: Use atspi_accessible_get_hypertext_iface instead. - * Rename to: atspi_accessible_get_hypertext_iface **/ AtspiHypertext * atspi_accessible_get_hypertext (AtspiAccessible *accessible) { return (_atspi_accessible_is_a (accessible, atspi_interface_hypertext) ? - g_object_ref (ATSPI_HYPERTEXT (accessible)) : NULL); + g_object_ref (ATSPI_HYPERTEXT (accessible)) : NULL); } /** @@ -1321,11 +1435,11 @@ AtspiHypertext * atspi_accessible_get_hypertext_iface (AtspiAccessible *accessible) { return (_atspi_accessible_is_a (accessible, atspi_interface_hypertext) ? - g_object_ref (ATSPI_HYPERTEXT (accessible)) : NULL); + g_object_ref (ATSPI_HYPERTEXT (accessible)) : NULL); } /** - * atspi_accessible_get_image: + * atspi_accessible_get_image: (rename-to atspi_accessible_get_image_iface) * @obj: a pointer to the #AtspiAccessible instance to query. * * Gets the #AtspiImage interface for an #AtspiAccessible. @@ -1334,13 +1448,12 @@ atspi_accessible_get_hypertext_iface (AtspiAccessible *accessible) * NULL if @obj does not implement #AtspiImage. * * Deprecated: 2.10: Use atspi_accessible_get_image_iface instead. - * Rename to: atspi_accessible_get_image_iface **/ AtspiImage * atspi_accessible_get_image (AtspiAccessible *accessible) { return (_atspi_accessible_is_a (accessible, atspi_interface_image) ? - g_object_ref (ATSPI_IMAGE (accessible)) : NULL); + g_object_ref (ATSPI_IMAGE (accessible)) : NULL); } /** @@ -1356,11 +1469,11 @@ AtspiImage * atspi_accessible_get_image_iface (AtspiAccessible *accessible) { return (_atspi_accessible_is_a (accessible, atspi_interface_image) ? - g_object_ref (ATSPI_IMAGE (accessible)) : NULL); + g_object_ref (ATSPI_IMAGE (accessible)) : NULL); } /** - * atspi_accessible_get_selection: + * atspi_accessible_get_selection: (rename-to atspi_accessible_get_selection_iface) * @obj: a pointer to the #AtspiAccessible instance to query. * * Gets the #AtspiSelection interface for an #AtspiAccessible. @@ -1369,13 +1482,12 @@ atspi_accessible_get_image_iface (AtspiAccessible *accessible) * instance, or NULL if @obj does not implement #AtspiSelection. * * Deprecated: 2.10: Use atspi_accessible_get_selection_iface instead. - * Rename to: atspi_accessible_get_selection_iface **/ AtspiSelection * atspi_accessible_get_selection (AtspiAccessible *accessible) { return (_atspi_accessible_is_a (accessible, atspi_interface_selection) ? - g_object_ref (ATSPI_SELECTION (accessible)) : NULL); + g_object_ref (ATSPI_SELECTION (accessible)) : NULL); } /** @@ -1391,7 +1503,7 @@ AtspiSelection * atspi_accessible_get_selection_iface (AtspiAccessible *accessible) { return (_atspi_accessible_is_a (accessible, atspi_interface_selection) ? - g_object_ref (ATSPI_SELECTION (accessible)) : NULL); + g_object_ref (ATSPI_SELECTION (accessible)) : NULL); } #if 0 @@ -1408,12 +1520,12 @@ AtspiStreamableContent * atspi_accessible_get_streamable_content (AtspiAccessible *accessible) { return (_atspi_accessible_is_a (accessible, atspi_interface_streamable_content) ? - accessible : NULL); + accessible : NULL); } #endif /** - * atspi_accessible_get_table: + * atspi_accessible_get_table: (rename-to atspi_accessible_get_table_iface) * @obj: a pointer to the #AtspiAccessible instance to query. * * Gets the #AtspiTable interface for an #AtspiAccessible. @@ -1422,13 +1534,12 @@ atspi_accessible_get_streamable_content (AtspiAccessible *accessible) * NULL if @obj does not implement #AtspiTable. * * Deprecated: 2.10: Use atspi_accessible_get_table_iface instead. - * Rename to: atspi_accessible_get_table_iface **/ AtspiTable * atspi_accessible_get_table (AtspiAccessible *obj) { return (_atspi_accessible_is_a (obj, atspi_interface_table) ? - g_object_ref (ATSPI_TABLE (obj)) : NULL); + g_object_ref (ATSPI_TABLE (obj)) : NULL); } /** @@ -1444,7 +1555,7 @@ AtspiTable * atspi_accessible_get_table_iface (AtspiAccessible *obj) { return (_atspi_accessible_is_a (obj, atspi_interface_table) ? - g_object_ref (ATSPI_TABLE (obj)) : NULL); + g_object_ref (ATSPI_TABLE (obj)) : NULL); } /** @@ -1460,11 +1571,11 @@ AtspiTableCell * atspi_accessible_get_table_cell (AtspiAccessible *obj) { return (_atspi_accessible_is_a (obj, atspi_interface_table_cell) ? - g_object_ref (ATSPI_TABLE_CELL (obj)) : NULL); + g_object_ref (ATSPI_TABLE_CELL (obj)) : NULL); } /** - * atspi_accessible_get_text: + * atspi_accessible_get_text: (rename-to atspi_accessible_get_text_iface) * @obj: a pointer to the #AtspiAccessible instance to query. * * Gets the #AtspiTable interface for an #AtspiAccessible. @@ -1473,7 +1584,6 @@ atspi_accessible_get_table_cell (AtspiAccessible *obj) * NULL if @obj does not implement #AtspiText. * * Deprecated: 2.10: Use atspi_accessible_get_text_iface instead. - * Rename to: atspi_accessible_get_text_iface **/ AtspiText * atspi_accessible_get_text (AtspiAccessible *obj) @@ -1499,7 +1609,7 @@ atspi_accessible_get_text_iface (AtspiAccessible *obj) } /** - * atspi_accessible_get_value: + * atspi_accessible_get_value: (rename-to atspi_accessible_get_value_iface) * @obj: a pointer to the #AtspiAccessible instance to query. * * Gets the #AtspiTable interface for an #AtspiAccessible. @@ -1508,13 +1618,12 @@ atspi_accessible_get_text_iface (AtspiAccessible *obj) * NULL if @obj does not implement #AtspiValue. * * Deprecated: 2.10: Use atspi_accessible_get_value_iface instead. - * Rename to: atspi_accessible_get_value_iface **/ AtspiValue * atspi_accessible_get_value (AtspiAccessible *accessible) { return (_atspi_accessible_is_a (accessible, atspi_interface_value) ? - g_object_ref (ATSPI_VALUE (accessible)) : NULL); + g_object_ref (ATSPI_VALUE (accessible)) : NULL); } /** @@ -1530,7 +1639,7 @@ AtspiValue * atspi_accessible_get_value_iface (AtspiAccessible *accessible) { return (_atspi_accessible_is_a (accessible, atspi_interface_value) ? - g_object_ref (ATSPI_VALUE (accessible)) : NULL); + g_object_ref (ATSPI_VALUE (accessible)) : NULL); } static void @@ -1590,11 +1699,11 @@ atspi_accessible_get_interfaces (AtspiAccessible *obj) return ret; } -AtspiAccessible * +AtspiAccessible * _atspi_accessible_new (AtspiApplication *app, const gchar *path) { AtspiAccessible *accessible; - + accessible = g_object_new (ATSPI_TYPE_ACCESSIBLE, NULL); g_return_val_if_fail (accessible != NULL, NULL); @@ -1651,12 +1760,13 @@ atspi_accessible_clear_cache (AtspiAccessible *accessible) /** * atspi_accessible_get_process_id: * @accessible: The #AtspiAccessible to query. + * @error: a pointer to a %NULL #GError pointer * * Returns the process id associated with the given accessible. Mainly * added for debugging; it is a shortcut to explicitly querying the * accessible's app->bus_name and then calling GetConnectionUnixProcessID. * - * Returns: The process ID, or -1 if defunct. + * Returns: The process ID or undetermined value if @error is set. **/ guint atspi_accessible_get_process_id (AtspiAccessible *accessible, GError **error) @@ -1667,7 +1777,10 @@ atspi_accessible_get_process_id (AtspiAccessible *accessible, GError **error) DBusError d_error; if (!accessible->parent.app || !accessible->parent.app->bus_name) - return -1; + { + g_set_error_literal(error, ATSPI_ERROR, ATSPI_ERROR_IPC, "Process is defunct"); + return -1; + } message = dbus_message_new_method_call ("org.freedesktop.DBus", "/org/freedesktop/DBus", @@ -1687,7 +1800,7 @@ atspi_accessible_get_process_id (AtspiAccessible *accessible, GError **error) } if (dbus_error_is_set (&d_error)) { - g_warning ("GetConnectionUnixProcessID failed: %s", d_error.message); + g_set_error_literal(error, ATSPI_ERROR, ATSPI_ERROR_IPC, "Process is defunct"); dbus_error_free (&d_error); } return pid;