static AtkObject* jaw_table_get_summary (AtkTable *table) { JawObject *jaw_obj = JAW_OBJECT(table); TableData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE); jobject atk_table = data->atk_table; JNIEnv *jniEnv = jaw_util_get_jni_env(); jclass classAtkTable = (*jniEnv)->FindClass(jniEnv, "org/GNOME/Accessibility/AtkTable"); jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv, classAtkTable, "get_summary", "()Ljavax/accessibility/AccessibleContext;"); jobject jac = (*jniEnv)->CallObjectMethod(jniEnv, atk_table, jmid); if (!jac) { return NULL; } JawImpl* jaw_impl = jaw_impl_get_instance( jniEnv, jac ); return ATK_OBJECT(jaw_impl); }
AtkObject * accessible_image_view_new (GtkWidget *widget) { GObject *object; AtkObject *accessible; GtkAccessible *gtk_accessible; object = g_object_new (ACCESSIBLE_TYPE_IMAGE_VIEW, NULL); g_return_val_if_fail(object != NULL, NULL); accessible = ATK_OBJECT (object); gtk_accessible = GTK_ACCESSIBLE (accessible); gtk_accessible->widget = widget; atk_object_initialize (accessible, widget); accessible->role = ATK_ROLE_IMAGE; return accessible; }
static void gail_button_notify_weak_ref (gpointer data, GObject* obj) { GtkLabel *label = NULL; AtkObject* atk_obj = ATK_OBJECT (obj); if (data && GTK_IS_WIDGET (data)) { label = GTK_LABEL (data); if (label) { g_signal_handlers_disconnect_by_func (label, (GCallback) gail_button_notify_label_gtk, GAIL_BUTTON (atk_obj)); g_object_weak_unref (G_OBJECT (label), gail_button_notify_label_weak_ref, GAIL_BUTTON (atk_obj)); } } }
static gboolean window_event_listener (GSignalInvocationHint * signal_hint, guint n_param_values, const GValue * param_values, gpointer data) { AtkObject *accessible; GSignalQuery signal_query; const gchar *name, *s; g_signal_query (signal_hint->signal_id, &signal_query); name = signal_query.signal_name; accessible = ATK_OBJECT (g_value_get_object (¶m_values[0])); s = atk_object_get_name (accessible); g_print ("Detected window event \"%s\" from object \"%p\" named \"%s\"\n", name, accessible, s); return TRUE; }
static gint gail_container_real_add_gtk (GtkContainer *container, GtkWidget *widget, gpointer data) { AtkObject* atk_parent = ATK_OBJECT (data); AtkObject* atk_child = gtk_widget_get_accessible (widget); GailContainer *gail_container = GAIL_CONTAINER (atk_parent); gint index; g_object_notify (G_OBJECT (atk_child), "accessible_parent"); g_list_free (gail_container->children); gail_container->children = gtk_container_get_children (container); index = g_list_index (gail_container->children, widget); g_signal_emit_by_name (atk_parent, "children_changed::add", index, atk_child, NULL); return 1; }
static AtkObject* getRowHeaderCB(AtkTable *aTable, gint aRow) { nsAccessibleWrap *accWrap = GetAccessibleWrap(ATK_OBJECT(aTable)); if (!accWrap) return nsnull; nsCOMPtr<nsIAccessibleTable> accTable; accWrap->QueryInterface(NS_GET_IID(nsIAccessibleTable), getter_AddRefs(accTable)); NS_ENSURE_TRUE(accTable, nsnull); nsCOMPtr<nsIAccessible> accCell; accTable->GetCellAt(aRow, 0, getter_AddRefs(accCell)); if (!accCell) return nsnull; // If the cell at the first column is row header then assume it is row // header for all columns, if (nsAccUtils::Role(accCell) == nsIAccessibleRole::ROLE_ROWHEADER) return nsAccessibleWrap::GetAtkObject(accCell); // otherwise get row header for the data cell at the first column. nsCOMPtr<nsIAccessibleTableCell> accTableCell = do_QueryInterface(accCell); if (accTableCell) { nsCOMPtr<nsIArray> headerCells; accTableCell->GetRowHeaderCells(getter_AddRefs(headerCells)); if (headerCells) { nsresult rv; nsCOMPtr<nsIAccessible> accHeaderCell = do_QueryElementAt(headerCells, 0, &rv); NS_ENSURE_SUCCESS(rv, nsnull); return nsAccessibleWrap::GetAtkObject(accHeaderCell); } } return nsnull; }
JSStringRef AccessibilityUIElement::language() { if (!m_element) return JSStringCreateWithCharacters(0, 0); // In ATK, the document language is exposed as the document's locale. if (atk_object_get_role(ATK_OBJECT(m_element)) == ATK_ROLE_DOCUMENT_FRAME) return JSStringCreateWithUTF8CString(g_strdup_printf("AXLanguage: %s", atk_document_get_locale(ATK_DOCUMENT(m_element)))); // For all other objects, the language is exposed as an AtkText attribute. if (!ATK_IS_TEXT(m_element)) return JSStringCreateWithCharacters(0, 0); for (GSList* textAttributes = atk_text_get_default_attributes(ATK_TEXT(m_element)); textAttributes; textAttributes = textAttributes->next) { AtkAttribute* atkAttribute = static_cast<AtkAttribute*>(textAttributes->data); if (!strcmp(atkAttribute->name, atk_text_attribute_get_name(ATK_TEXT_ATTR_LANGUAGE))) return JSStringCreateWithUTF8CString(g_strdup_printf("AXLanguage: %s", atkAttribute->value)); } return JSStringCreateWithCharacters(0, 0); }
static gint _close_combo_list (gpointer data) { AtkObject *obj = ATK_OBJECT (data); gint count; gint n_children; AtkObject *list; count = atk_selection_get_selection_count (ATK_SELECTION (obj)); g_return_val_if_fail (count == 0, FALSE); list = atk_object_ref_accessible_child (obj, 0); n_children = atk_object_get_n_accessible_children (list); g_object_unref (G_OBJECT (list)); atk_selection_add_selection (ATK_SELECTION (obj), n_children - 1); atk_action_do_action (ATK_ACTION (obj), 0); return FALSE; }
gboolean setRunAttributesCB(AtkEditableText *aText, AtkAttributeSet *aAttribSet, gint aStartOffset, gint aEndOffset) { nsAccessibleWrap *accWrap = GetAccessibleWrap(ATK_OBJECT(aText)); if (!accWrap) return FALSE; nsCOMPtr<nsIAccessibleEditableText> accText; accWrap->QueryInterface(NS_GET_IID(nsIAccessibleEditableText), getter_AddRefs(accText)); NS_ENSURE_TRUE(accText, FALSE); nsCOMPtr<nsISupports> attrSet; /* how to insert attributes into nsISupports ??? */ nsresult rv = accText->SetAttributes(aStartOffset, aEndOffset, attrSet); return NS_FAILED(rv) ? FALSE : TRUE; }
static AtkObject * get_atk_object_ref (GObject *gobject) { AtkObject *aobject; if (ATK_IS_IMPLEMENTOR (gobject)) { aobject = atk_implementor_ref_accessible (ATK_IMPLEMENTOR (gobject)); } else if (ATK_IS_OBJECT (gobject)) { aobject = ATK_OBJECT (gobject); g_object_ref (G_OBJECT (aobject)); } else { aobject = NULL; g_error ("received event from non-AtkImplementor"); } return aobject; }
static gboolean table_remove_row_selection (AtkTable *table, gint row) { ETableItem *item; GalA11yETableItemPrivate *priv = GET_PRIVATE (table); if (atk_state_set_contains_state (priv->state_set, ATK_STATE_DEFUNCT)) return FALSE; item = E_TABLE_ITEM (eti_a11y_get_gobject (ATK_OBJECT (table))); if (!item) return FALSE; if (!atk_table_is_row_selected (table, row)) return TRUE; e_selection_model_toggle_single_row ( item->selection, view_to_model_row (item, row)); return TRUE; }
/** * @brief Handler for unrealized event, used to notify about gengrid content * changes * * @param data passed to callback * @param obj object that raised event * @param event_info additional event info (item is passed here) */ void eail_gengrid_item_handle_unrealized_event(void *data, Evas_Object *obj, void *event_info) { Elm_Object_Item *item = (Elm_Object_Item *) event_info; AtkObject *atk_item = NULL, *atk_parent = NULL; atk_parent = ATK_OBJECT(data); if (!atk_parent) return; atk_item = eail_factory_get_item_atk_obj (item, ATK_ROLE_LIST_ITEM, atk_parent); if (!atk_item) return; eail_emit_children_changed_obj(FALSE, atk_parent, atk_item); atk_object_notify_state_change(atk_item, ATK_STATE_DEFUNCT, TRUE); DBG("Unregistering item from cache..."); eail_factory_unregister_item_from_cache(item); }
static gint notify_child_added (gpointer data) { GailNotebookPage *page; AtkObject *atk_object, *atk_parent; g_return_val_if_fail (GAIL_IS_NOTEBOOK_PAGE (data), FALSE); page = GAIL_NOTEBOOK_PAGE (data); atk_object = ATK_OBJECT (data); page->notify_child_added_id = 0; /* The widget page->notebook may be deleted before this handler is called */ if (page->notebook != NULL) { atk_parent = gtk_widget_get_accessible (GTK_WIDGET (page->notebook)); atk_object_set_parent (atk_object, atk_parent); g_signal_emit_by_name (atk_parent, "children_changed::add", page->index, atk_object, NULL); } return FALSE; }
AtkHyperlink * getLinkCB(AtkHypertext *aText, gint aLinkIndex) { nsAccessibleWrap *accWrap = GetAccessibleWrap(ATK_OBJECT(aText)); if (!accWrap) return nsnull; nsHyperTextAccessible* hyperText = accWrap->AsHyperText(); NS_ENSURE_TRUE(hyperText, nsnull); nsAccessible* hyperLink = hyperText->GetLinkAt(aLinkIndex); if (!hyperLink) return nsnull; AtkObject* hyperLinkAtkObj = nsAccessibleWrap::GetAtkObject(hyperLink); nsAccessibleWrap *accChild = GetAccessibleWrap(hyperLinkAtkObj); NS_ENSURE_TRUE(accChild, nsnull); MaiHyperlink *maiHyperlink = accChild->GetMaiHyperlink(); NS_ENSURE_TRUE(maiHyperlink, nsnull); return maiHyperlink->GetAtkHyperlink(); }
AtkObject * refSelectionCB(AtkSelection *aSelection, gint i) { nsAccessibleWrap *accWrap = GetAccessibleWrap(ATK_OBJECT(aSelection)); NS_ENSURE_TRUE(accWrap, nsnull); nsCOMPtr<nsIAccessibleSelectable> accSelection; accWrap->QueryInterface(NS_GET_IID(nsIAccessibleSelectable), getter_AddRefs(accSelection)); NS_ENSURE_TRUE(accSelection, nsnull); AtkObject *atkObj = nsnull; nsCOMPtr<nsIAccessible> accSelect; nsresult rv = accSelection->RefSelection(i, getter_AddRefs(accSelect)); if (NS_SUCCEEDED(rv) && accSelect) { nsIAccessible *tmpAcc = accSelect; nsAccessibleWrap *refAccWrap = NS_STATIC_CAST(nsAccessibleWrap *, tmpAcc); atkObj = refAccWrap->GetAtkObject(); if (atkObj) g_object_ref(atkObj); }
static AtkObject * eti_ref_accessible_at_point (AtkComponent *component, gint x, gint y, AtkCoordType coord_type) { gint row = -1; gint col = -1; gint x_origin, y_origin; ETableItem *item; GtkWidget *tableOrTree; item = E_TABLE_ITEM (eti_a11y_get_gobject (ATK_OBJECT (component))); if (!item) return NULL; atk_component_get_extents ( component, &x_origin, &y_origin, NULL, NULL, coord_type); x -= x_origin; y -= y_origin; tableOrTree = gtk_widget_get_parent (GTK_WIDGET (item->parent.canvas)); if (E_IS_TREE (tableOrTree)) e_tree_get_cell_at (E_TREE (tableOrTree), x, y, &row, &col); else e_table_get_cell_at (E_TABLE (tableOrTree), x, y, &row, &col); if (row != -1 && col != -1) { return eti_ref_at (ATK_TABLE (component), row, col); } else { return NULL; } }
/** * @brief Returns naviframe-page implementation for given object item * * @param naviframe an naviframe AtkObject * @param item an Elm_Object_Item for naviframe-page * * @returns an AtkObject* representation for naviframe-page */ static AtkObject * _eail_naviframe_get_naviframe_page_for_item(AtkObject *naviframe, Elm_Object_Item *item) { EailFactoryObj *factory_obj = NULL; AtkObject *naviframe_page = NULL; factory_obj = eail_factory_find_obj_for_item(item); if (factory_obj) { if (!factory_obj->atk_obj) ERR("No atk obj created for factory item object"); return factory_obj->atk_obj; } naviframe_page = eail_naviframe_page_new(naviframe, item); atk_object_initialize(naviframe_page, item); eail_factory_append_item_to_cache(ATK_OBJECT(naviframe_page), item); return naviframe_page; }
static gint eti_get_row_extent_at (AtkTable *table, gint row, gint column) { ETableItem *item; gint height; item = E_TABLE_ITEM (eti_a11y_get_gobject (ATK_OBJECT (table))); if (!item) return -1; e_table_item_get_cell_geometry (item, &row, &column, NULL, NULL, NULL, &height); return height; }
static gboolean focus_notify_handler (gpointer p) { CallbackPara *para = (CallbackPara*)p; jobject global_ac = para->global_ac; JNIEnv *jniEnv = jaw_util_get_jni_env(); if (jniEnv == NULL) { if (jaw_debug) g_warning("\nfocus_notify_handler: env == NULL\n"); free_callback_para(para); return G_SOURCE_REMOVE; } if (global_ac == NULL) { if (jaw_debug) g_warning("\nfocus_notify_handler: global_ac == NULL\n"); free_callback_para(para); return G_SOURCE_REMOVE; } JawImpl* jaw_impl = jaw_impl_get_instance(jniEnv, global_ac); if (jaw_impl == NULL) { if (jaw_debug) g_warning("\nfocus_notify_handler: jaw_impl == NULL\n"); free_callback_para(para); return G_SOURCE_REMOVE; } AtkObject* atk_obj = ATK_OBJECT(jaw_impl); atk_object_notify_state_change(atk_obj, ATK_STATE_SHOWING, 1); free_callback_para(para); return G_SOURCE_REMOVE; }
static gboolean window_state_change_handler (gpointer p) { CallbackPara *para = (CallbackPara*)p; jobject global_ac = para->global_ac; JNIEnv *jniEnv = jaw_util_get_jni_env(); if (jniEnv == NULL) { if (jaw_debug) g_warning("window_state_change_handler: env == NULL"); free_callback_para(para); return G_SOURCE_REMOVE; } if (global_ac == NULL) { if (jaw_debug) g_warning("window_state_change_handler: global_ac == NULL"); free_callback_para(para); return G_SOURCE_REMOVE; } JawImpl* jaw_impl = jaw_impl_get_instance(jniEnv, global_ac); if (jaw_impl == NULL) { if (jaw_debug) g_warning("window_state_change_handler: jaw_impl == NULL"); free_callback_para(para); return G_SOURCE_REMOVE; } AtkObject* atk_obj = ATK_OBJECT(jaw_impl); g_signal_emit_by_name(atk_obj, "state-change", 0); free_callback_para(para); return G_SOURCE_REMOVE; }
gchar * getTextCB(AtkText *aText, gint aStartOffset, gint aEndOffset) { nsAccessibleWrap *accWrap = GetAccessibleWrap(ATK_OBJECT(aText)); if (!accWrap) return nsnull; nsCOMPtr<nsIAccessibleText> accText; accWrap->QueryInterface(NS_GET_IID(nsIAccessibleText), getter_AddRefs(accText)); NS_ENSURE_TRUE(accText, nsnull); nsAutoString autoStr; nsresult rv = accText->GetText(aStartOffset, aEndOffset, autoStr); NS_ENSURE_SUCCESS(rv, nsnull); ConvertTexttoAsterisks(accWrap, autoStr); NS_ConvertUTF16toUTF8 cautoStr(autoStr); //copy and return, libspi will free it. return (cautoStr.get()) ? g_strdup(cautoStr.get()) : nsnull; }
static gboolean object_state_change_handler (gpointer p) { CallbackPara *para = (CallbackPara*)p; jobject global_ac = para->global_ac; JNIEnv *jniEnv = jaw_util_get_jni_env(); if (jniEnv == NULL) { if (jaw_debug) g_warning("object_state_change_handler: env == NULL"); free_callback_para(para); return G_SOURCE_REMOVE; } if (global_ac == NULL) { if (jaw_debug) g_warning("object_state_change_handler: global_ac"); free_callback_para(para); return G_SOURCE_REMOVE; } JawImpl* jaw_impl = jaw_impl_get_instance(jniEnv, global_ac); if (jaw_impl == NULL) { if (jaw_debug) g_warning("object_state_change_handler: jaw_impl == NULL"); free_callback_para(para); return G_SOURCE_REMOVE; } atk_object_notify_state_change(ATK_OBJECT(jaw_impl), para->atk_state, para->state_value); free_callback_para(para); return G_SOURCE_REMOVE; }
static gint table_interface_get_row_extent_at (AtkTable *table, gint row, gint column) { gint index; gint width = 0, height = 0; AtkObject *child; EaDayViewMainItem * ea_main_item = EA_DAY_VIEW_MAIN_ITEM (table); index = ea_day_view_main_item_get_child_index_at ( ea_main_item, row, column); child = atk_object_ref_accessible_child ( ATK_OBJECT (ea_main_item), index); if (child) atk_component_get_size ( ATK_COMPONENT (child), &width, &height); return height; }
void getCharacterExtentsCB(AtkText *aText, gint aOffset, gint *aX, gint *aY, gint *aWidth, gint *aHeight, AtkCoordType aCoords) { nsAccessibleWrap *accWrap = GetAccessibleWrap(ATK_OBJECT(aText)); if(!accWrap || !aX || !aY || !aWidth || !aHeight) return; nsCOMPtr<nsIAccessibleText> accText; accWrap->QueryInterface(NS_GET_IID(nsIAccessibleText), getter_AddRefs(accText)); if (!accText) return; PRInt32 extY = 0, extX = 0; PRInt32 extWidth = 0, extHeight = 0; PRUint32 geckoCoordType; if (aCoords == ATK_XY_SCREEN) geckoCoordType = nsIAccessibleCoordinateType::COORDTYPE_SCREEN_RELATIVE; else geckoCoordType = nsIAccessibleCoordinateType::COORDTYPE_WINDOW_RELATIVE; #ifdef DEBUG nsresult rv = #endif accText->GetCharacterExtents(aOffset, &extX, &extY, &extWidth, &extHeight, geckoCoordType); *aX = extX; *aY = extY; *aWidth = extWidth; *aHeight = extHeight; NS_ASSERTION(NS_SUCCEEDED(rv), "MaiInterfaceText::GetCharacterExtents, failed\n"); }
static gboolean axObjectEventListener(GSignalInvocationHint *signalHint, guint numParamValues, const GValue *paramValues, gpointer data) { // At least we should receive the instance emitting the signal. if (numParamValues < 1) return TRUE; AtkObject* accessible = ATK_OBJECT(g_value_get_object(¶mValues[0])); if (!accessible || !ATK_IS_OBJECT(accessible)) return TRUE; GSignalQuery signal_query; GOwnPtr<gchar> signalName; g_signal_query(signalHint->signal_id, &signal_query); if (!g_strcmp0(signal_query.signal_name, "state-change")) { signalName.set(g_strdup_printf("state-change:%s = %d", g_value_get_string(¶mValues[1]), g_value_get_boolean(¶mValues[2]))); } else if (!g_strcmp0(signal_query.signal_name, "focus-event")) { signalName.set(g_strdup_printf("focus-event = %d", g_value_get_boolean(¶mValues[1]))); } else if (!g_strcmp0(signal_query.signal_name, "children-changed")) { signalName.set(g_strdup_printf("children-changed = %d", g_value_get_uint(¶mValues[1]))); } else if (!g_strcmp0(signal_query.signal_name, "property-change")) { signalName.set(g_strdup_printf("property-change:%s", g_quark_to_string(signalHint->detail))); } else signalName.set(g_strdup(signal_query.signal_name)); printAccessibilityEvent(accessible, signalName.get()); return TRUE; }
static AtkObject* gtk_icon_view_accessible_ref_accessible_at_point (AtkComponent *component, gint x, gint y, AtkCoordType coord_type) { GtkWidget *widget; GtkIconView *icon_view; GtkIconViewItem *item; gint x_pos, y_pos; widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (component)); if (widget == NULL) return NULL; icon_view = GTK_ICON_VIEW (widget); atk_component_get_extents (component, &x_pos, &y_pos, NULL, NULL, coord_type); item = _gtk_icon_view_get_item_at_coords (icon_view, x - x_pos, y - y_pos, TRUE, NULL); if (item) return gtk_icon_view_accessible_ref_child (ATK_OBJECT (component), item->index); return NULL; }
static AtkObject* refAtCB(AtkTable *aTable, gint aRow, gint aColumn) { nsAccessibleWrap *accWrap = GetAccessibleWrap(ATK_OBJECT(aTable)); if (!accWrap) return nsnull; nsCOMPtr<nsIAccessibleTable> accTable; accWrap->QueryInterface(NS_GET_IID(nsIAccessibleTable), getter_AddRefs(accTable)); NS_ENSURE_TRUE(accTable, nsnull); nsCOMPtr<nsIAccessible> cell; nsresult rv = accTable->GetCellAt(aRow, aColumn,getter_AddRefs(cell)); if (NS_FAILED(rv) || !cell) return nsnull; AtkObject *cellAtkObj = nsAccessibleWrap::GetAtkObject(cell); if (cellAtkObj) { g_object_ref(cellAtkObj); } return cellAtkObj; }
AccessibilityUIElement AccessibilityUIElement::titleUIElement() { if (!m_element) return 0; AtkRelationSet* set = atk_object_ref_relation_set(ATK_OBJECT(m_element)); if (!set) return 0; AtkObject* target = 0; int count = atk_relation_set_get_n_relations(set); for (int i = 0; i < count; i++) { AtkRelation* relation = atk_relation_set_get_relation(set, i); if (atk_relation_get_relation_type(relation) == ATK_RELATION_LABELLED_BY) { GPtrArray* targetList = atk_relation_get_target(relation); if (targetList->len) target = static_cast<AtkObject*>(g_ptr_array_index(targetList, 0)); } } g_object_unref(set); return target ? AccessibilityUIElement(target) : 0; }
static void ensure_menus_unposted (GailMenuItem *menu_item) { AtkObject *parent; GtkWidget *widget; parent = atk_object_get_parent (ATK_OBJECT (menu_item)); while (parent) { if (GTK_IS_ACCESSIBLE (parent)) { widget = GTK_ACCESSIBLE (parent)->widget; if (GTK_IS_MENU (widget)) { if (gtk_widget_get_mapped (widget)) gtk_menu_shell_cancel (GTK_MENU_SHELL (widget)); return; } } parent = atk_object_get_parent (parent); } }
static gboolean gtk_icon_view_item_accessible_add_state (GtkIconViewItemAccessible *item, AtkStateType state_type, gboolean emit_signal) { gboolean rc; rc = atk_state_set_add_state (item->state_set, state_type); /* The signal should only be generated if the value changed, * not when the item is set up. So states that are set * initially should pass FALSE as the emit_signal argument. */ if (emit_signal) { atk_object_notify_state_change (ATK_OBJECT (item), state_type, TRUE); /* If state_type is ATK_STATE_VISIBLE, additional notification */ if (state_type == ATK_STATE_VISIBLE) g_signal_emit_by_name (item, "visible-data-changed"); } return rc; }