]> Pileus Git - ~andy/gtk/blob - gtk/a11y/gtkcontainercellaccessible.c
a11y: Improve cell_infos table
[~andy/gtk] / gtk / a11y / gtkcontainercellaccessible.c
1 /* GAIL - The GNOME Accessibility Enabling Library
2  * Copyright 2001 Sun Microsystems Inc.
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the
16  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17  * Boston, MA 02111-1307, USA.
18  */
19
20 #include "config.h"
21
22 #include <gtk/gtk.h>
23 #include "gtkcontainercellaccessible.h"
24
25
26 G_DEFINE_TYPE (GtkContainerCellAccessible, _gtk_container_cell_accessible, GTK_TYPE_CELL_ACCESSIBLE)
27
28
29 static void
30 gtk_container_cell_accessible_finalize (GObject *obj)
31 {
32   GtkContainerCellAccessible *container = GTK_CONTAINER_CELL_ACCESSIBLE (obj);
33
34   g_list_free_full (container->children, g_object_unref);
35
36   G_OBJECT_CLASS (_gtk_container_cell_accessible_parent_class)->finalize (obj);
37 }
38
39
40 static gint
41 gtk_container_cell_accessible_get_n_children (AtkObject *obj)
42 {
43   GtkContainerCellAccessible *cell = GTK_CONTAINER_CELL_ACCESSIBLE (obj);
44
45   return cell->NChildren;
46 }
47
48 static AtkObject *
49 gtk_container_cell_accessible_ref_child (AtkObject *obj,
50                                          gint       child)
51 {
52   GtkContainerCellAccessible *cell = GTK_CONTAINER_CELL_ACCESSIBLE (obj);
53   GList *l;
54
55   l = g_list_nth (cell->children, child);
56   if (l == NULL)
57     return NULL;
58
59   return g_object_ref (ATK_OBJECT (l->data));
60 }
61
62 static void
63 _gtk_container_cell_accessible_class_init (GtkContainerCellAccessibleClass *klass)
64 {
65   AtkObjectClass *class = ATK_OBJECT_CLASS(klass);
66   GObjectClass *g_object_class = G_OBJECT_CLASS (klass);
67
68   g_object_class->finalize = gtk_container_cell_accessible_finalize;
69
70   class->get_n_children = gtk_container_cell_accessible_get_n_children;
71   class->ref_child = gtk_container_cell_accessible_ref_child;
72 }
73
74 static void
75 _gtk_container_cell_accessible_init (GtkContainerCellAccessible *cell)
76 {
77 }
78
79 GtkContainerCellAccessible *
80 _gtk_container_cell_accessible_new (void)
81 {
82   GObject *object;
83   AtkObject *atk_object;
84   GtkContainerCellAccessible *container;
85
86   object = g_object_new (GTK_TYPE_CONTAINER_CELL_ACCESSIBLE, NULL);
87
88   g_return_val_if_fail (object != NULL, NULL);
89
90   atk_object = ATK_OBJECT (object);
91   atk_object->role = ATK_ROLE_TABLE_CELL;
92
93   container = GTK_CONTAINER_CELL_ACCESSIBLE (object);
94   container->children = NULL;
95   container->NChildren = 0;
96   return container;
97 }
98
99 void
100 _gtk_container_cell_accessible_add_child (GtkContainerCellAccessible *container,
101                                           GtkCellAccessible          *child)
102 {
103   g_return_if_fail (GTK_IS_CONTAINER_CELL_ACCESSIBLE (container));
104   g_return_if_fail (GTK_IS_CELL_ACCESSIBLE (child));
105
106   container->NChildren++;
107   container->children = g_list_append (container->children, child);
108   atk_object_set_parent (ATK_OBJECT (child), ATK_OBJECT (container));
109 }
110
111 void
112 _gtk_container_cell_accessible_remove_child (GtkContainerCellAccessible *container,
113                                              GtkCellAccessible          *child)
114 {
115   g_return_if_fail (GTK_IS_CONTAINER_CELL_ACCESSIBLE (container));
116   g_return_if_fail (GTK_IS_CELL_ACCESSIBLE (child));
117   g_return_if_fail (container->NChildren > 0);
118
119   container->children = g_list_remove (container->children, child);
120   container->NChildren--;
121 }