Index: ChangeLog
===================================================================
RCS file: /export/src/cvs/gal/gal/a11y/ChangeLog,v
retrieving revision 1.1
diff -u -r1.1 ChangeLog
--- ChangeLog	2003/10/13 04:22:35	1.1
+++ ChangeLog	2003/10/30 06:16:30
@@ -0,0 +1,3 @@
+2003-10-30  Bolian Yin <bolian.yin@sun.com>
+
+	*e-table/gal-a11y-e-table-item: defunct widget checking, selection interface
Index: e-table/gal-a11y-e-table-item.c
===================================================================
RCS file: /export/src/cvs/gal/gal/a11y/e-table/gal-a11y-e-table-item.c,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 gal-a11y-e-table-item.c
--- e-table/gal-a11y-e-table-item.c	2003/09/26 06:37:13	1.1.1.1
+++ e-table/gal-a11y-e-table-item.c	2003/10/30 06:16:30
@@ -2,6 +2,7 @@
 /*
  * Authors: 
  *   Christopher James Lahey <clahey@ximian.com>
+ *   Bolian Yin <bolian.yin@sun.com>
  *
  * Copyright (C) 2002 Ximian, Inc.
  */
@@ -10,6 +11,8 @@
 #include "gal-a11y-e-table-item.h"
 #include "gal-a11y-e-cell-registry.h"
 #include "gal-a11y-util.h"
+#include <gal/e-table/e-table-subset.h>
+
 #include <atk/atkobject.h>
 #include <atk/atktable.h>
 #include <atk/atkcomponent.h>
@@ -41,6 +44,27 @@
 }
 #endif
 
+inline static gint
+view_to_model_row(ETableItem *eti, int row)
+{
+	if (eti->uses_source_model) {
+		ETableSubset *etss = E_TABLE_SUBSET(eti->table_model);
+		if (row >= 0 && row < etss->n_map) {
+			eti->row_guess = row;
+			return etss->map_table[row];
+		} else
+			return -1;
+	} else
+		return row;
+}
+
+inline static gint
+view_to_model_col(ETableItem *eti, int col)
+{
+	ETableCol *ecol = e_table_header_get_column (eti->header, col);
+	return ecol ? ecol->col_idx : -1;
+}
+
 static void
 eti_dispose (GObject *object)
 {
@@ -61,54 +85,105 @@
 }
 
 /* Static functions */
-static AtkObject*
+static AtkObject *
 eti_get_parent (AtkObject *accessible)
 {
-	GalA11yETableItem *a11y = GAL_A11Y_E_TABLE_ITEM (accessible);
+	AtkGObjectAccessible *atk_gobj;
+	GObject *g_obj;
+	GalA11yETableItem *a11y;
+
+	g_return_val_if_fail (GAL_A11Y_IS_E_TABLE_ITEM (accessible), NULL);
+	atk_gobj = ATK_GOBJECT_ACCESSIBLE (accessible);
+	g_obj = atk_gobject_accessible_get_object (atk_gobj);
+	if (g_obj == NULL)
+		/* Object is defunct */
+		return NULL;
+
+	a11y = GAL_A11Y_E_TABLE_ITEM (accessible);
 	return GET_PRIVATE (a11y)->parent;
 }
 
 static gint
 eti_get_n_children (AtkObject *accessible)
 {
+	AtkGObjectAccessible *atk_gobj;
+	GObject *g_obj;
+
+	g_return_val_if_fail (GAL_A11Y_IS_E_TABLE_ITEM (accessible), 0);
+	atk_gobj = ATK_GOBJECT_ACCESSIBLE (accessible);
+	g_obj = atk_gobject_accessible_get_object (atk_gobj);
+	if (g_obj == NULL)
+		/* Object is defunct */
+		return 0;
+
 	return atk_table_get_n_columns (ATK_TABLE (accessible)) *
 		atk_table_get_n_rows (ATK_TABLE (accessible));
 }
 
 static AtkObject*
-eti_ref_child (AtkObject *accessible,
-	       gint i)
+eti_ref_child (AtkObject *accessible, gint i)
 {
-	AtkTable *table = ATK_TABLE (accessible);
-	ETableItem *item = E_TABLE_ITEM (atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (accessible)));
+	AtkGObjectAccessible *atk_gobj;
+	GObject *g_obj;
+	ETableItem *item;
+
+	g_return_val_if_fail (GAL_A11Y_IS_E_TABLE_ITEM (accessible), NULL);
+	atk_gobj = ATK_GOBJECT_ACCESSIBLE (accessible);
+	g_obj = atk_gobject_accessible_get_object (atk_gobj);
+	if (g_obj == NULL)
+		/* Object is defunct */
+		return NULL;
+
+	item = E_TABLE_ITEM (g_obj);
 
 	int col = i % item->cols;
 	int row = i / item->cols;
 
-	return atk_table_ref_at (table, row, col);
+	return atk_table_ref_at (ATK_TABLE (accessible), row, col);
 }
 
 static gint
 eti_get_index_in_parent (AtkObject *accessible)
 {
-	GalA11yETableItem *a11y = GAL_A11Y_E_TABLE_ITEM (accessible);
+	AtkGObjectAccessible *atk_gobj;
+	GObject *g_obj;
+	GalA11yETableItem *a11y;
+
+	g_return_val_if_fail (GAL_A11Y_IS_E_TABLE_ITEM (accessible), -1);
+	atk_gobj = ATK_GOBJECT_ACCESSIBLE (accessible);
+	g_obj = atk_gobject_accessible_get_object (atk_gobj);
+	if (g_obj == NULL)
+		/* Object is defunct */
+		return -1;
+
+	a11y = GAL_A11Y_E_TABLE_ITEM (accessible);
 	return GET_PRIVATE (a11y)->index_in_parent;
 }
 
 static void
 eti_get_extents (AtkComponent *component,
-		gint *x,
-		gint *y,
-		gint *width,
-		gint *height,
-		AtkCoordType coord_type)
-{
-	ETableItem *item = E_TABLE_ITEM (atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (component)));
+		 gint *x,
+		 gint *y,
+		 gint *width,
+		 gint *height,
+		 AtkCoordType coord_type)
+{
+	AtkGObjectAccessible *atk_gobj;
+	GObject *g_obj;
+	ETableItem *item;
 	double real_width;
 	double real_height;
 	int fake_width;
 	int fake_height;
 
+	atk_gobj = ATK_GOBJECT_ACCESSIBLE (component);
+	g_obj = atk_gobject_accessible_get_object (atk_gobj);
+	if (g_obj == NULL)
+		/* Object is defunct */
+		return;
+
+	item = E_TABLE_ITEM (g_obj);
+
 	if (component_parent_iface &&
 	    component_parent_iface->get_extents)
 		component_parent_iface->get_extents (component,
@@ -135,11 +210,21 @@
 			     gint y,
 			     AtkCoordType coord_type)
 {
+	AtkGObjectAccessible *atk_gobj;
+	GObject *g_obj;
 	int row = -1;
 	int col = -1;
 	int x_origin, y_origin;
-	ETableItem *item = E_TABLE_ITEM (atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (component)));
+	ETableItem *item;
+
+	atk_gobj = ATK_GOBJECT_ACCESSIBLE (component);
+	g_obj = atk_gobject_accessible_get_object (atk_gobj);
+	if (g_obj == NULL)
+		/* Object is defunct */
+		return NULL;
 
+	item = E_TABLE_ITEM (g_obj);
+
 	atk_component_get_position (component,
 				    &x_origin,
 				    &y_origin,
@@ -158,15 +243,22 @@
 }
 
 
-/* Table IFace */
+/* atk table */
 
 static AtkObject*
-eti_ref_at (AtkTable *table,
-	    gint row,
-	    gint column)
+eti_ref_at (AtkTable *table, gint row, gint column)
 {
-	AtkObject* accessible = ATK_OBJECT (table);
-	ETableItem *item = E_TABLE_ITEM (atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (table)));
+	AtkGObjectAccessible *atk_gobj;
+	GObject *g_obj;
+	ETableItem *item;
+
+	atk_gobj = ATK_GOBJECT_ACCESSIBLE (table);
+	g_obj = atk_gobject_accessible_get_object (atk_gobj);
+	if (g_obj == NULL)
+		/* Object is defunct */
+		return NULL;
+
+	item = E_TABLE_ITEM (g_obj);
 
 	if (column >= 0 &&
 	    column < item->cols &&
@@ -178,7 +270,7 @@
 		return gal_a11y_e_cell_registry_get_object (NULL,
 							    item,
 							    cell_view,
-							    accessible,
+							    ATK_OBJECT (atk_gobj),
 							    ecol->col_idx,
 							    column,
 							    row);
@@ -188,29 +280,55 @@
 }
 
 static gint
-eti_get_index_at (AtkTable *table,
-		  gint row,
-		  gint column)
+eti_get_index_at (AtkTable *table, gint row, gint column)
 {
-	ETableItem *item = E_TABLE_ITEM (atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (table)));
+	AtkGObjectAccessible *atk_gobj;
+	 GObject *g_obj;
+	ETableItem *item;
+
+	atk_gobj = ATK_GOBJECT_ACCESSIBLE (table);
+	g_obj = atk_gobject_accessible_get_object (atk_gobj);
+	if (g_obj == NULL)
+		/* Object is defunct */
+		return -1;
 
+	item = E_TABLE_ITEM (g_obj);
+
 	return column + row * item->cols;
 }
 
 static gint
-eti_get_column_at_index (AtkTable *table,
-			 gint index)
+eti_get_column_at_index (AtkTable *table, gint index)
 {
-	ETableItem *item = E_TABLE_ITEM (atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (table)));
+	AtkGObjectAccessible *atk_gobj;
+	GObject *g_obj;
+	ETableItem *item;
+
+	atk_gobj = ATK_GOBJECT_ACCESSIBLE (table);
+	g_obj = atk_gobject_accessible_get_object (atk_gobj);
+	if (g_obj == NULL)
+		/* Object is defunct */
+		return -1;
+
+	item = E_TABLE_ITEM (g_obj);
 
 	return index % item->cols;
 }
 
 static gint
-eti_get_row_at_index (AtkTable *table,
-			 gint index)
+eti_get_row_at_index (AtkTable *table, gint index)
 {
-	ETableItem *item = E_TABLE_ITEM (atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (table)));
+	AtkGObjectAccessible *atk_gobj;
+	GObject *g_obj;
+	ETableItem *item;
+
+	atk_gobj = ATK_GOBJECT_ACCESSIBLE (table);
+	g_obj = atk_gobject_accessible_get_object (atk_gobj);
+	if (g_obj == NULL)
+		/* Object is defunct */
+		return -1;
+
+	item = E_TABLE_ITEM (g_obj);
 
 	return index / item->cols;
 }
@@ -218,15 +336,35 @@
 static gint
 eti_get_n_columns (AtkTable *table)
 {
-	ETableItem *item = E_TABLE_ITEM (atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (table)));
+	AtkGObjectAccessible *atk_gobj;
+	GObject *g_obj;
+	ETableItem *item;
+
+	atk_gobj = ATK_GOBJECT_ACCESSIBLE (table);
+	g_obj = atk_gobject_accessible_get_object (atk_gobj);
+	if (g_obj == NULL)
+		/* Object is defunct */
+		return -1;
 
+	item = E_TABLE_ITEM (g_obj);
+
 	return item->cols;
 }
 
 static gint
 eti_get_n_rows (AtkTable *table)
 {
-	ETableItem *item = E_TABLE_ITEM (atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (table)));
+	AtkGObjectAccessible *atk_gobj;
+	GObject *g_obj;
+	ETableItem *item;
+
+	atk_gobj = ATK_GOBJECT_ACCESSIBLE (table);
+	g_obj = atk_gobject_accessible_get_object (atk_gobj);
+	if (g_obj == NULL)
+		/* Object is defunct */
+		return -1;
+
+	item = E_TABLE_ITEM (g_obj);
 
 	return item->rows;
 }
@@ -236,9 +374,19 @@
 			  gint row,
 			  gint column)
 {
-	ETableItem *item = E_TABLE_ITEM (atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (table)));
+	AtkGObjectAccessible *atk_gobj;
+	GObject *g_obj;
+	ETableItem *item;
 	int width;
 
+	atk_gobj = ATK_GOBJECT_ACCESSIBLE (table);
+	g_obj = atk_gobject_accessible_get_object (atk_gobj);
+	if (g_obj == NULL)
+		/* Object is defunct */
+		return -1;
+
+	item = E_TABLE_ITEM (g_obj);
+
 	e_table_item_get_cell_geometry (item,
 					&row, 
 					&column,
@@ -255,9 +403,19 @@
 		       gint row,
 		       gint column)
 {
-	ETableItem *item = E_TABLE_ITEM (atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (table)));
+	AtkGObjectAccessible *atk_gobj;
+	GObject *g_obj;
+	ETableItem *item;
 	int height;
 
+	atk_gobj = ATK_GOBJECT_ACCESSIBLE (table);
+	g_obj = atk_gobject_accessible_get_object (atk_gobj);
+	if (g_obj == NULL)
+		/* Object is defunct */
+		return -1;
+
+	item = E_TABLE_ITEM (g_obj);
+
 	e_table_item_get_cell_geometry (item,
 					&row, 
 					&column,
@@ -280,15 +438,26 @@
 eti_get_column_description (AtkTable *table,
 			    gint column)
 {
-	ETableItem *item = E_TABLE_ITEM (atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (table)));
-	ETableCol *ecol = e_table_header_get_column (item->header, column);
+	AtkGObjectAccessible *atk_gobj;
+	GObject *g_obj;
+	ETableItem *item;
+	ETableCol *ecol;
+
+	atk_gobj = ATK_GOBJECT_ACCESSIBLE (table);
+	g_obj = atk_gobject_accessible_get_object (atk_gobj);
+	if (g_obj == NULL)
+		/* Object is defunct */
+		return NULL;
+
+	item = E_TABLE_ITEM (g_obj);
+	ecol = e_table_header_get_column (item->header, column);
 
 	return ecol->text;
 }
 
 static AtkObject *
 eti_get_column_header (AtkTable *table,
-		   gint column)
+		       gint column)
 {
 	/* Unimplemented */
 	return NULL;
@@ -317,6 +486,105 @@
 	return NULL;
 }
 
+static gboolean 
+table_is_row_selected (AtkTable *table, gint row)
+{
+	AtkGObjectAccessible *atk_gobj;
+	GObject *g_obj;
+	ETableItem *item;
+
+	atk_gobj = ATK_GOBJECT_ACCESSIBLE (table);
+	g_obj = atk_gobject_accessible_get_object (atk_gobj);
+	if (g_obj == NULL)
+		/* Object is defunct */
+		return FALSE;
+
+	item = E_TABLE_ITEM (g_obj);
+
+	return e_selection_model_is_row_selected(item->selection, row);
+}
+
+static gboolean 
+table_is_selected (AtkTable *table, gint row, gint column)
+{
+	return table_is_row_selected (table, row);
+}
+
+static gint 
+table_get_selected_rows (AtkTable *table, gint **rows_selected)
+{
+	AtkGObjectAccessible *atk_gobj;
+	GObject *g_obj;
+	ETableItem *item;
+	gint n_selected, row, index_selected;
+
+	atk_gobj = ATK_GOBJECT_ACCESSIBLE (table);
+	g_obj = atk_gobject_accessible_get_object (atk_gobj);
+	if (g_obj == NULL)
+		/* Object is defunct */
+		return 0;
+
+	item = E_TABLE_ITEM (g_obj);
+
+	n_selected = e_selection_model_selected_count (item->selection);
+	if (rows_selected) {
+		*rows_selected = (gint *) g_malloc (n_selected * sizeof (gint));
+
+		index_selected = 0;
+		for (row = 0; row < item->rows && index_selected < n_selected; ++row) {
+			if (atk_table_is_row_selected (table, row)) {
+				(*rows_selected)[index_selected] = row;
+				++index_selected;
+			}
+		}
+	}
+	return n_selected;
+}
+
+static gboolean 
+table_add_row_selection (AtkTable *table, gint row)
+{
+	AtkGObjectAccessible *atk_gobj;
+	GObject *g_obj;
+	ETableItem *item;
+	gint cursor_row, cursor_col, row_count;
+	GdkModifierType state = GDK_CONTROL_MASK;
+	ESelectionModel *selection;
+
+	atk_gobj = ATK_GOBJECT_ACCESSIBLE (table);
+	g_obj = atk_gobject_accessible_get_object (atk_gobj);
+	if (g_obj == NULL)
+		/* Object is defunct */
+		return FALSE;
+
+	if (table_is_row_selected (table, row))
+		return TRUE;
+	item = E_TABLE_ITEM (g_obj);
+	e_selection_model_toggle_single_row (item->selection, view_to_model_row (item, row));
+
+	return TRUE;
+}
+
+static gboolean 
+table_remove_row_selection (AtkTable *table, gint row)
+{
+	AtkGObjectAccessible *atk_gobj;
+	GObject *g_obj;
+	ETableItem *item;
+
+	atk_gobj = ATK_GOBJECT_ACCESSIBLE (table);
+	g_obj = atk_gobject_accessible_get_object (atk_gobj);
+	if (g_obj == NULL)
+		/* Object is defunct */
+		return FALSE;
+
+	if (!atk_table_is_row_selected (table, row))
+		return TRUE;
+	item = E_TABLE_ITEM (g_obj);
+	e_selection_model_toggle_single_row (item->selection, row);
+	return TRUE;
+}
+
 static void
 eti_atk_table_iface_init (AtkTableIface *iface)
 {
@@ -334,6 +602,12 @@
 	iface->get_row_description = eti_get_row_description;
 	iface->get_row_header = eti_get_row_header;
 	iface->get_summary = eti_get_summary;
+
+	iface->is_row_selected = table_is_row_selected;
+	iface->is_selected = table_is_selected;
+	iface->get_selected_rows = table_get_selected_rows;
+	iface->add_row_selection = table_add_row_selection;
+	iface->remove_row_selection = table_remove_row_selection;
 }
 
 static void
@@ -374,6 +648,19 @@
 	priv->index_in_parent = -1;
 }
 
+/* atk selection */
+
+static void             atk_selection_interface_init    (AtkSelectionIface      *iface);
+static gboolean         selection_add_selection    (AtkSelection           *selection,
+						    gint                   i);
+static gboolean         selection_clear_selection  (AtkSelection           *selection);
+static AtkObject*       selection_ref_selection    (AtkSelection           *selection,
+						    gint                   i);
+static gint             selection_get_selection_count (AtkSelection           *selection);
+static gboolean         selection_is_child_selected (AtkSelection           *selection,
+						     gint                   i);
+
+
 /**
  * gal_a11y_e_table_item_get_type:
  * @void: 
@@ -415,6 +702,13 @@
 			NULL
 		};
 
+		static const GInterfaceInfo atk_selection_info = {
+			(GInterfaceInitFunc) atk_selection_interface_init,
+			(GInterfaceFinalizeFunc) NULL,
+			NULL
+		};
+
+
 		factory = atk_registry_get_factory (atk_get_default_registry (), GNOME_TYPE_CANVAS_ITEM);
 		parent_type = atk_object_factory_get_accessible_type (factory);
 
@@ -423,6 +717,7 @@
 
 		g_type_add_interface_static (type, ATK_TYPE_COMPONENT, &atk_component_info);
 		g_type_add_interface_static (type, ATK_TYPE_TABLE, &atk_table_info);
+		g_type_add_interface_static (type, ATK_TYPE_SELECTION, &atk_selection_info);
 	}
 
 	return type;
@@ -453,4 +748,105 @@
 #endif
 
 	return ATK_OBJECT (a11y);
+}
+
+/* atk selection */
+
+static void atk_selection_interface_init (AtkSelectionIface *iface)
+{
+	g_return_if_fail (iface != NULL);
+	iface->add_selection = selection_add_selection;
+	iface->clear_selection = selection_clear_selection;
+	iface->ref_selection = selection_ref_selection;
+	iface->get_selection_count = selection_get_selection_count;
+	iface->is_child_selected = selection_is_child_selected;
+}
+
+static gboolean
+selection_add_selection (AtkSelection *selection, gint index)
+{
+	AtkGObjectAccessible *atk_gobj;
+	GObject *g_obj;
+	AtkTable *table;
+	gint row, col;
+	ETableItem *item;
+
+	atk_gobj = ATK_GOBJECT_ACCESSIBLE (selection);
+	g_obj = atk_gobject_accessible_get_object (atk_gobj);
+	if (g_obj == NULL)
+		/* Object is defunct */
+		return FALSE;
+
+	table = ATK_TABLE (selection);
+
+	row = atk_table_get_row_at_index (table, index);
+	atk_table_add_row_selection (table, row);
+
+	item = E_TABLE_ITEM (g_obj);
+	col = atk_table_get_column_at_index (table, index);
+	e_selection_model_change_cursor (item->selection,
+					 view_to_model_row (item, row),
+					 view_to_model_col (item, col));
+	e_selection_model_cursor_changed (item->selection,
+					  view_to_model_row (item, row),
+					  view_to_model_col (item, col));
+	e_selection_model_cursor_activated (item->selection,
+					    view_to_model_row (item, row),
+					    view_to_model_col (item, col));
+	return TRUE;
+}
+
+static gboolean
+selection_clear_selection (AtkSelection *selection)
+{
+	AtkGObjectAccessible *atk_gobj;
+	GObject *g_obj;
+	ETableItem *item;
+
+	atk_gobj = ATK_GOBJECT_ACCESSIBLE (selection);
+	g_obj = atk_gobject_accessible_get_object (atk_gobj);
+	if (g_obj == NULL)
+		/* Object is defunct */
+		return FALSE;
+
+	item = E_TABLE_ITEM (g_obj);
+	e_selection_model_clear (item->selection);
+	return TRUE;
+}
+
+static AtkObject*
+selection_ref_selection (AtkSelection *selection, gint index)
+{
+	AtkTable *table;
+	gint row, col;
+
+	table = ATK_TABLE (selection);
+	row = atk_table_get_row_at_index (table, index);
+	col = atk_table_get_column_at_index (table, index);
+	if (!atk_table_is_row_selected (table, row))
+		return NULL;
+
+	return atk_table_ref_at (table, row, col);
+}
+
+static gint
+selection_get_selection_count (AtkSelection *selection)
+{
+	AtkTable *table;
+	gint n_selected;
+
+	table = ATK_TABLE (selection);
+	n_selected = atk_table_get_selected_rows (table, NULL);
+	if (n_selected > 0)
+		n_selected *= atk_table_get_n_columns (table);
+	return n_selected;
+}
+
+static gboolean
+selection_is_child_selected (AtkSelection *selection, gint i)
+{
+	gint row;
+
+	row = atk_table_get_row_at_index (ATK_TABLE (selection), i);
+	return atk_table_is_row_selected (ATK_TABLE (selection), row);
 }
Index: e-table/gal-a11y-e-table-item.h
===================================================================
RCS file: /export/src/cvs/gal/gal/a11y/e-table/gal-a11y-e-table-item.h,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 gal-a11y-e-table-item.h
--- e-table/gal-a11y-e-table-item.h	2003/09/26 06:37:13	1.1.1.1
+++ e-table/gal-a11y-e-table-item.h	2003/10/30 06:16:30
@@ -11,6 +11,7 @@
 
 #include <glib-object.h>
 #include <gal/e-table/e-table-item.h>
+#include <atk/atkgobjectaccessible.h>
 
 #define GAL_A11Y_TYPE_E_TABLE_ITEM            (gal_a11y_e_table_item_get_type ())
 #define GAL_A11Y_E_TABLE_ITEM(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAL_A11Y_TYPE_E_TABLE_ITEM, GalA11yETableItem))
@@ -26,11 +27,11 @@
  * The GalA11yETableItemPrivate comes right after the parent class structure.
  **/
 struct _GalA11yETableItem {
-	AtkObject object;
+	AtkGObjectAccessible parent;
 };
 
 struct _GalA11yETableItemClass {
-	AtkObject parent_class;
+	AtkGObjectAccessibleClass parent_class;
 };
 
 
