/* atk table */
static AtkObject *
eti_ref_at (AtkTable *table,
            gint row,
            gint column)
{
	ETableItem *item;
	AtkObject * ret;
	GalA11yETableItemPrivate *priv = GET_PRIVATE (table);

	if (atk_state_set_contains_state (priv->state_set, ATK_STATE_DEFUNCT))
		return NULL;

	item = E_TABLE_ITEM (eti_a11y_get_gobject (ATK_OBJECT (table)));
	if (!item)
		return NULL;

	if (column >= 0 &&
	    column < item->cols &&
	    row >= 0 &&
	    row < item->rows &&
	    item->cell_views_realized) {
		ECellView *cell_view = item->cell_views[column];
		ETableCol *ecol = e_table_header_get_column (item->header, column);
		ret = gal_a11y_e_cell_registry_get_object (
			NULL,
			item,
			cell_view,
			ATK_OBJECT (table),
			ecol->spec->model_col,
			column,
			row);
		if (ATK_IS_OBJECT (ret)) {
			g_object_weak_ref (
				G_OBJECT (ret),
				(GWeakNotify) cell_destroyed,
				ret);
			/* if current cell is focused, add FOCUSED state */
			if (e_selection_model_cursor_row (item->selection) ==
				GAL_A11Y_E_CELL (ret)->row &&
				e_selection_model_cursor_col (item->selection) ==
				GAL_A11Y_E_CELL (ret)->model_col)
				gal_a11y_e_cell_add_state (
					GAL_A11Y_E_CELL (ret),
					ATK_STATE_FOCUSED, FALSE);
		} else
			ret = NULL;

		return ret;
	}

	return NULL;
}
Beispiel #2
0
static AtkObject *
ecv_ref_child (AtkObject *a11y,
               gint i)
{
    GalA11yECellVbox *gaev = GAL_A11Y_E_CELL_VBOX (a11y);
    GalA11yECell *gaec = GAL_A11Y_E_CELL (a11y);
    ECellVboxView *ecvv = (ECellVboxView *) (gaec->cell_view);
    AtkObject *ret;
    if (i < gaev->a11y_subcell_count) {
        if (gaev->a11y_subcells[i] == NULL) {
            ECellView *subcell_view;
            gint model_col, row;
            row = gaec->row;
            model_col = ecvv->model_cols[i];
            subcell_view = ecvv->subcell_views[i];
            /* FIXME Should the view column use a fake
             *       one or the same as its parent? */
            ret = gal_a11y_e_cell_registry_get_object (
                      NULL,
                      gaec->item,
                      subcell_view,
                      a11y,
                      model_col,
                      gaec->view_col,
                      row);
            gaev->a11y_subcells[i] = ret;
            g_object_ref (ret);
            g_object_weak_ref (
                G_OBJECT (ret),
                (GWeakNotify) subcell_destroyed,
                ret);
        } else {
            ret = (AtkObject *) gaev->a11y_subcells[i];
            if (ATK_IS_OBJECT (ret))
                g_object_ref (ret);
            else
                ret = NULL;
        }
    } else {
        ret = NULL;
    }

    return ret;
}