static DBusMessage * impl_GetColumnAtIndex (DBusConnection * bus, DBusMessage * message, void *user_data) { AtkTable *table = (AtkTable *) user_data; dbus_int32_t index; dbus_int32_t column; DBusError error; DBusMessage *reply; g_return_val_if_fail (ATK_IS_TABLE (user_data), droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &index, DBUS_TYPE_INVALID)) { return droute_invalid_arguments_error (message); } column = atk_table_get_column_at_index (table, index); reply = dbus_message_new_method_return (message); if (reply) { dbus_message_append_args (reply, DBUS_TYPE_INT32, &column, DBUS_TYPE_INVALID); } return reply; }
static DBusMessage * impl_GetColumnDescription (DBusConnection * bus, DBusMessage * message, void *user_data) { AtkTable *table = (AtkTable *) user_data; dbus_int32_t column; const char *description; DBusError error; DBusMessage *reply; g_return_val_if_fail (ATK_IS_TABLE (user_data), droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &column, DBUS_TYPE_INVALID)) { return droute_invalid_arguments_error (message); } description = atk_table_get_column_description (table, column); if (!description) description = ""; reply = dbus_message_new_method_return (message); if (reply) { dbus_message_append_args (reply, DBUS_TYPE_STRING, &description, DBUS_TYPE_INVALID); } return reply; }
static DBusMessage * impl_GetActions (DBusConnection * bus, DBusMessage * message, void *user_data) { AtkAction *action = (AtkAction *) user_data; DBusMessage *reply; gint count; gint i; DBusMessageIter iter, iter_array, iter_struct; g_return_val_if_fail (ATK_IS_ACTION (user_data), droute_not_yet_handled_error (message)); count = atk_action_get_n_actions (action); reply = dbus_message_new_method_return (message); if (!reply) goto oom; dbus_message_iter_init_append (reply, &iter); if (!dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY, "(sss)", &iter_array)) goto oom; for (i = 0; i < count; i++) { const char *name = atk_action_get_name (action, i); const char *lname = atk_action_get_localized_name (action, i); const char *desc = atk_action_get_description (action, i); const char *kb = atk_action_get_keybinding (action, i); if (!name) name = ""; if (!lname) lname = ""; if (!desc) desc = ""; if (!kb) kb = ""; if (!dbus_message_iter_open_container (&iter_array, DBUS_TYPE_STRUCT, NULL, &iter_struct)) goto oom; dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &name); dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &lname); dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &desc); dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &kb); if (!dbus_message_iter_close_container (&iter_array, &iter_struct)) goto oom; } if (!dbus_message_iter_close_container (&iter, &iter_array)) goto oom; return reply; oom: // TODO: handle out-of-memory return reply; }
static DBusMessage * impl_GetLayer (DBusConnection * bus, DBusMessage * message, void *user_data) { AtkComponent *component = (AtkComponent *) user_data; AtkLayer atklayer; dbus_uint32_t rv; DBusMessage *reply; g_return_val_if_fail (ATK_IS_COMPONENT (user_data), droute_not_yet_handled_error (message)); atklayer = atk_component_get_layer (component); switch (atklayer) { case ATK_LAYER_BACKGROUND: rv = Accessibility_LAYER_BACKGROUND; break; case ATK_LAYER_CANVAS: rv = Accessibility_LAYER_CANVAS; break; case ATK_LAYER_WIDGET: rv = Accessibility_LAYER_WIDGET; break; case ATK_LAYER_MDI: rv = Accessibility_LAYER_MDI; break; case ATK_LAYER_POPUP: rv = Accessibility_LAYER_POPUP; break; case ATK_LAYER_OVERLAY: rv = Accessibility_LAYER_OVERLAY; break; case ATK_LAYER_WINDOW: rv = Accessibility_LAYER_WINDOW; break; default: rv = Accessibility_LAYER_INVALID; break; } reply = dbus_message_new_method_return (message); if (reply) { dbus_message_append_args (reply, DBUS_TYPE_UINT32, &rv, DBUS_TYPE_INVALID); } return reply; }
static DBusMessage * impl_GetIndexInParent (DBusConnection * bus, DBusMessage * message, void *user_data) { AtkObject *object = (AtkObject *) user_data; dbus_int32_t rv; DBusMessage *reply; g_return_val_if_fail (ATK_IS_OBJECT (user_data), droute_not_yet_handled_error (message)); rv = atk_object_get_index_in_parent (object); reply = dbus_message_new_method_return (message); dbus_message_append_args (reply, DBUS_TYPE_INT32, &rv, DBUS_TYPE_INVALID); return reply; }
static DBusMessage * impl_GetChildAtIndex (DBusConnection * bus, DBusMessage * message, void *user_data) { AtkObject *object = (AtkObject *) user_data; DBusMessage *reply; dbus_int32_t i; AtkObject *child; g_return_val_if_fail (ATK_IS_OBJECT (user_data), droute_not_yet_handled_error (message)); if (!dbus_message_get_args (message, NULL, DBUS_TYPE_INT32, &i, DBUS_TYPE_INVALID)) { return droute_invalid_arguments_error (message); } if (ATK_IS_SOCKET (object) && atk_socket_is_occupied (ATK_SOCKET (object)) && i == 0) { AtkSocket *socket = ATK_SOCKET (object); gchar *child_name, *child_path; child_name = g_strdup (socket->embedded_plug_id); child_path = g_utf8_strchr (child_name + 1, -1, ':'); if (child_path) { DBusMessageIter iter, iter_socket; *(child_path++) = '\0'; reply = dbus_message_new_method_return (message); if (!reply) return NULL; dbus_message_iter_init_append (reply, &iter); dbus_message_iter_open_container (&iter, DBUS_TYPE_STRUCT, NULL, &iter_socket); dbus_message_iter_append_basic (&iter_socket, DBUS_TYPE_STRING, &child_name); dbus_message_iter_append_basic (&iter_socket, DBUS_TYPE_OBJECT_PATH, &child_path); dbus_message_iter_close_container (&iter, &iter_socket); return reply; } g_free (child_name); } child = atk_object_ref_accessible_child (object, i); reply = spi_object_return_reference (message, child); if (child) g_object_unref (child); return reply; }
static DBusMessage * impl_GetColumnHeader (DBusConnection * bus, DBusMessage * message, void *user_data) { AtkTable *table = (AtkTable *) user_data; dbus_int32_t column; AtkObject *obj; g_return_val_if_fail (ATK_IS_TABLE (user_data), droute_not_yet_handled_error (message)); if (!dbus_message_get_args (message, NULL, DBUS_TYPE_INT32, &column, DBUS_TYPE_INVALID)) { return droute_invalid_arguments_error (message); } obj = atk_table_get_column_header (table, column); return spi_object_return_reference (message, obj); }
static DBusMessage * impl_GetRowColumnExtentsAtIndex (DBusConnection * bus, DBusMessage * message, void *user_data) { AtkTable *table = (AtkTable *) user_data; dbus_int32_t index; dbus_int32_t row, column, row_extents, col_extents; dbus_bool_t is_selected; dbus_bool_t ret; DBusMessage *reply; AtkObject *cell; AtkRole role = ATK_ROLE_INVALID; g_return_val_if_fail (ATK_IS_TABLE (user_data), droute_not_yet_handled_error (message)); if (!dbus_message_get_args (message, NULL, DBUS_TYPE_INT32, &index, DBUS_TYPE_INVALID)) { return droute_invalid_arguments_error (message); } column = atk_table_get_column_at_index (table, index); row = atk_table_get_row_at_index (table, index); row_extents = atk_table_get_row_extent_at (table, row, column); col_extents = atk_table_get_column_extent_at (table, row, column); is_selected = atk_table_is_selected (table, row, column); cell = atk_table_ref_at (table, row, column); if (cell) { role = atk_object_get_role (cell); g_object_unref (cell); } ret = (role == ATK_ROLE_TABLE_CELL ? TRUE : FALSE); reply = dbus_message_new_method_return (message); if (reply) { dbus_message_append_args (reply, DBUS_TYPE_BOOLEAN, &ret, DBUS_TYPE_INT32, &row, DBUS_TYPE_INT32, &column, DBUS_TYPE_INT32, &row_extents, DBUS_TYPE_INT32, &col_extents, DBUS_TYPE_BOOLEAN, &is_selected, DBUS_TYPE_INVALID); } return reply; }
static DBusMessage * impl_copyText (DBusConnection * bus, DBusMessage * message, void *user_data) { AtkEditableText *editable = (AtkEditableText *) user_data; dbus_int32_t startPos, endPos; DBusError error; g_return_val_if_fail (ATK_IS_EDITABLE_TEXT (user_data), droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &startPos, DBUS_TYPE_INT32, &endPos, DBUS_TYPE_INVALID)) { return droute_invalid_arguments_error (message); } atk_editable_text_copy_text (editable, startPos, endPos); return dbus_message_new_method_return (message); }
static DBusMessage * impl_GetAlpha (DBusConnection * bus, DBusMessage * message, void *user_data) { AtkComponent *component = (AtkComponent *) user_data; double rv; DBusMessage *reply; g_return_val_if_fail (ATK_IS_COMPONENT (user_data), droute_not_yet_handled_error (message)); rv = atk_component_get_alpha (component); reply = dbus_message_new_method_return (message); if (reply) { dbus_message_append_args (reply, DBUS_TYPE_DOUBLE, &rv, DBUS_TYPE_INVALID); } return reply; }
static DBusMessage * impl_getRowHeader (DBusConnection * bus, DBusMessage * message, void *user_data) { AtkTable *table = (AtkTable *) user_data; dbus_int32_t row; DBusError error; AtkObject *obj; g_return_val_if_fail (ATK_IS_TABLE (user_data), droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &row, DBUS_TYPE_INVALID)) { return droute_invalid_arguments_error (message); } obj = atk_table_get_row_header (table, row); return spi_dbus_return_object (message, obj, FALSE); }
static DBusMessage * impl_GetRole (DBusConnection * bus, DBusMessage * message, void *user_data) { AtkObject *object = (AtkObject *) user_data; gint role; dbus_uint32_t rv; DBusMessage *reply; g_return_val_if_fail (ATK_IS_OBJECT (user_data), droute_not_yet_handled_error (message)); role = atk_object_get_role (object); rv = spi_accessible_role_from_atk_role (role); reply = dbus_message_new_method_return (message); if (reply) { dbus_message_append_args (reply, DBUS_TYPE_UINT32, &rv, DBUS_TYPE_INVALID); } return reply; }
static DBusMessage * impl_GetLocale (DBusConnection * bus, DBusMessage * message, void *user_data) { AtkDocument *document = (AtkDocument *) user_data; const gchar *lc; DBusMessage *reply; g_return_val_if_fail (ATK_IS_DOCUMENT (user_data), droute_not_yet_handled_error (message)); lc = atk_document_get_locale (document); if (!lc) lc = ""; reply = dbus_message_new_method_return (message); if (reply) { dbus_message_append_args (reply, DBUS_TYPE_STRING, &lc, DBUS_TYPE_INVALID); } return reply; }
static DBusMessage * impl_GetExtents (DBusConnection * bus, DBusMessage * message, void *user_data) { AtkComponent *component = (AtkComponent *) user_data; DBusError error; dbus_uint32_t coord_type; gint ix, iy, iwidth, iheight; g_return_val_if_fail (ATK_IS_COMPONENT (user_data), droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_UINT32, &coord_type, DBUS_TYPE_INVALID)) { return droute_invalid_arguments_error (message); } atk_component_get_extents (component, &ix, &iy, &iwidth, &iheight, (AtkCoordType) coord_type); return spi_dbus_return_rect (message, ix, iy, iwidth, iheight); }
static DBusMessage * impl_GetInterfaces (DBusConnection * bus, DBusMessage * message, void *user_data) { AtkObject *object = (AtkObject *) user_data; DBusMessage *reply; DBusMessageIter iter, iter_array; g_return_val_if_fail (ATK_IS_OBJECT (user_data), droute_not_yet_handled_error (message)); reply = dbus_message_new_method_return (message); if (reply) { dbus_message_iter_init_append (reply, &iter); dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY, "s", &iter_array); spi_object_append_interfaces (&iter_array, object); dbus_message_iter_close_container (&iter, &iter_array); } return reply; }
static DBusMessage * impl_GetAttributes (DBusConnection * bus, DBusMessage * message, void *user_data) { AtkObject *object = (AtkObject *) user_data; AtkAttributeSet *attributes; DBusMessage *reply = NULL; DBusMessageIter iter; g_return_val_if_fail (ATK_IS_OBJECT (user_data), droute_not_yet_handled_error (message)); attributes = atk_object_get_attributes (object); reply = dbus_message_new_method_return (message); dbus_message_iter_init_append (reply, &iter); spi_object_append_attribute_set (&iter, attributes); atk_attribute_set_free (attributes); return reply; }
static DBusMessage * impl_GetSize (DBusConnection * bus, DBusMessage * message, void *user_data) { AtkComponent *component = (AtkComponent *) user_data; gint iwidth = 0, iheight = 0; dbus_int32_t width, height; DBusMessage *reply; g_return_val_if_fail (ATK_IS_COMPONENT (user_data), droute_not_yet_handled_error (message)); atk_component_get_size (component, &iwidth, &iheight); width = iwidth; height = iheight; reply = dbus_message_new_method_return (message); if (reply) { dbus_message_append_args (reply, DBUS_TYPE_INT32, &width, DBUS_TYPE_INT32, &height, DBUS_TYPE_INVALID); } return reply; }
static DBusMessage * impl_GetLocalizedRoleName (DBusConnection * bus, DBusMessage * message, void *user_data) { AtkObject *object = (AtkObject *) user_data; gint role; const char *role_name; DBusMessage *reply; g_return_val_if_fail (ATK_IS_OBJECT (user_data), droute_not_yet_handled_error (message)); role = atk_object_get_role (object); role_name = atk_role_get_localized_name (role); if (!role_name) role_name = ""; reply = dbus_message_new_method_return (message); if (reply) { dbus_message_append_args (reply, DBUS_TYPE_STRING, &role_name, DBUS_TYPE_INVALID); } return reply; }
static DBusMessage * impl_GetAccessibleAt (DBusConnection * bus, DBusMessage * message, void *user_data) { AtkTable *table = (AtkTable *) user_data; dbus_int32_t row, column; DBusMessage *reply; AtkObject *obj; g_return_val_if_fail (ATK_IS_TABLE (user_data), droute_not_yet_handled_error (message)); if (!dbus_message_get_args (message, NULL, DBUS_TYPE_INT32, &row, DBUS_TYPE_INT32, &column, DBUS_TYPE_INVALID)) { return droute_invalid_arguments_error (message); } obj = atk_table_ref_at (table, row, column); reply = spi_object_return_reference (message, obj); if (obj) g_object_unref (obj); return reply; }
static DBusMessage * impl_GetRelationSet (DBusConnection * bus, DBusMessage * message, void *user_data) { AtkObject *object = (AtkObject *) user_data; DBusMessage *reply; AtkRelationSet *set; DBusMessageIter iter, iter_array, iter_struct, iter_targets; gint count; gint i, j; g_return_val_if_fail (ATK_IS_OBJECT (user_data), droute_not_yet_handled_error (message)); reply = dbus_message_new_method_return (message); if (!reply) return NULL; set = atk_object_ref_relation_set (object); dbus_message_iter_init_append (reply, &iter); if (!dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY, "(ua(so))", &iter_array)) { goto oom; } count = 0; if (set) count = atk_relation_set_get_n_relations (set); for (i = 0; i < count; i++) { AtkRelation *r = atk_relation_set_get_relation (set, i); AtkRelationType rt; GPtrArray *target; dbus_uint32_t type; if (!r) continue; rt = atk_relation_get_relation_type (r); type = spi_relation_type_from_atk_relation_type (rt); target = atk_relation_get_target (r); if (!dbus_message_iter_open_container (&iter_array, DBUS_TYPE_STRUCT, NULL, &iter_struct)) { goto oom; } dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_UINT32, &type); if (!dbus_message_iter_open_container (&iter_struct, DBUS_TYPE_ARRAY, "(so)", &iter_targets)) { goto oom; } for (j = 0; j < target->len; j++) { AtkObject *obj = target->pdata[j]; if (!obj) continue; spi_object_append_reference (&iter_targets, obj); } dbus_message_iter_close_container (&iter_struct, &iter_targets); dbus_message_iter_close_container (&iter_array, &iter_struct); } dbus_message_iter_close_container (&iter, &iter_array); oom: if (set) g_object_unref (set); // TODO: handle out of memory */ return reply; }