summaryrefslogtreecommitdiff
path: root/gtk/a11y
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2011-11-10 22:07:19 +0100
committerBenjamin Otte <otte@redhat.com>2011-11-16 04:31:06 +0100
commit02fd1e5a6260d8f74977a56f311be117b5417d38 (patch)
treefebf346b6417d2311447774e16d6f18304d26ee3 /gtk/a11y
parent2bd69cbf8c4eda845eeac205cc5132c6bf2b8565 (diff)
downloadgtk+-02fd1e5a6260d8f74977a56f311be117b5417d38.tar.gz
a11y: Add _gtk_cell_accessible_parent_get_child_index()
This will soon replace the shenanigans we do to keep the index of cells current.
Diffstat (limited to 'gtk/a11y')
-rw-r--r--gtk/a11y/gtkcellaccessible.c10
-rw-r--r--gtk/a11y/gtkcellaccessibleparent.c16
-rw-r--r--gtk/a11y/gtkcellaccessibleparent.h4
3 files changed, 30 insertions, 0 deletions
diff --git a/gtk/a11y/gtkcellaccessible.c b/gtk/a11y/gtkcellaccessible.c
index 93f0ebe771..54bd1adf47 100644
--- a/gtk/a11y/gtkcellaccessible.c
+++ b/gtk/a11y/gtkcellaccessible.c
@@ -91,8 +91,18 @@ static gint
gtk_cell_accessible_get_index_in_parent (AtkObject *obj)
{
GtkCellAccessible *cell;
+ AtkObject *parent;
+ int index;
cell = GTK_CELL_ACCESSIBLE (obj);
+ parent = gtk_widget_get_accessible (cell->widget);
+ if (parent == NULL)
+ return -1;
+
+ index = _gtk_cell_accessible_parent_get_child_index (GTK_CELL_ACCESSIBLE_PARENT (parent), cell);
+ if (index >= 0)
+ return index;
+
if (atk_state_set_contains_state (cell->state_set, ATK_STATE_STALE) &&
cell->refresh_index != NULL)
{
diff --git a/gtk/a11y/gtkcellaccessibleparent.c b/gtk/a11y/gtkcellaccessibleparent.c
index b63e5af57f..a05aaa1340 100644
--- a/gtk/a11y/gtkcellaccessibleparent.c
+++ b/gtk/a11y/gtkcellaccessibleparent.c
@@ -95,3 +95,19 @@ _gtk_cell_accessible_parent_grab_focus (GtkCellAccessibleParent *parent,
else
return FALSE;
}
+
+int
+_gtk_cell_accessible_parent_get_child_index (GtkCellAccessibleParent *parent,
+ GtkCellAccessible *cell)
+{
+ GtkCellAccessibleParentIface *iface;
+
+ g_return_val_if_fail (GTK_IS_CELL_ACCESSIBLE_PARENT (parent), FALSE);
+
+ iface = GTK_CELL_ACCESSIBLE_PARENT_GET_IFACE (parent);
+
+ if (iface->get_child_index)
+ return (iface->get_child_index) (parent, cell);
+ else
+ return -1;
+}
diff --git a/gtk/a11y/gtkcellaccessibleparent.h b/gtk/a11y/gtkcellaccessibleparent.h
index 7969a8b7fb..f4e1ea28b8 100644
--- a/gtk/a11y/gtkcellaccessibleparent.h
+++ b/gtk/a11y/gtkcellaccessibleparent.h
@@ -58,6 +58,8 @@ struct _GtkCellAccessibleParentIface
GdkRectangle *cell_rect);
gboolean ( *grab_focus) (GtkCellAccessibleParent *parent,
GtkCellAccessible *cell);
+ int ( *get_child_index) (GtkCellAccessibleParent *parent,
+ GtkCellAccessible *cell);
};
GType _gtk_cell_accessible_parent_get_type (void);
@@ -74,6 +76,8 @@ void _gtk_cell_accessible_parent_get_cell_area (GtkCellAccessibleParent *
GdkRectangle *cell_rect);
gboolean _gtk_cell_accessible_parent_grab_focus (GtkCellAccessibleParent *parent,
GtkCellAccessible *cell);
+int _gtk_cell_accessible_parent_get_child_index (GtkCellAccessibleParent *parent,
+ GtkCellAccessible *cell);
G_END_DECLS