33
33
#include "unitya11y.h"
36
static void nux_layout_accessible_class_init (NuxLayoutAccessibleClass *klass);
37
static void nux_layout_accessible_init (NuxLayoutAccessible *layout_accessible);
36
static void nux_layout_accessible_class_init(NuxLayoutAccessibleClass* klass);
37
static void nux_layout_accessible_init(NuxLayoutAccessible* layout_accessible);
40
static void nux_layout_accessible_initialize (AtkObject *accessible,
42
static gint nux_layout_accessible_get_n_children (AtkObject *obj);
43
static AtkObject *nux_layout_accessible_ref_child (AtkObject *obj,
40
static void nux_layout_accessible_initialize(AtkObject* accessible,
42
static gint nux_layout_accessible_get_n_children(AtkObject* obj);
43
static AtkObject* nux_layout_accessible_ref_child(AtkObject* obj,
47
static void on_view_changed_cb (nux::Layout *layout,
49
AtkObject *acccessible,
51
static int search_for_child (AtkObject *accessible,
47
static void on_view_changed_cb(nux::Layout* layout,
49
AtkObject* acccessible,
51
static int search_for_child(AtkObject* accessible,
55
G_DEFINE_TYPE (NuxLayoutAccessible, nux_layout_accessible, NUX_TYPE_AREA_ACCESSIBLE)
55
G_DEFINE_TYPE(NuxLayoutAccessible, nux_layout_accessible, NUX_TYPE_AREA_ACCESSIBLE)
58
nux_layout_accessible_class_init (NuxLayoutAccessibleClass *klass)
58
nux_layout_accessible_class_init(NuxLayoutAccessibleClass* klass)
60
AtkObjectClass *atk_class = ATK_OBJECT_CLASS (klass);
60
AtkObjectClass* atk_class = ATK_OBJECT_CLASS(klass);
63
63
atk_class->initialize = nux_layout_accessible_initialize;
69
nux_layout_accessible_init (NuxLayoutAccessible *layout_accessible)
69
nux_layout_accessible_init(NuxLayoutAccessible* layout_accessible)
74
nux_layout_accessible_new (nux::Object *object)
74
nux_layout_accessible_new(nux::Object* object)
76
AtkObject *accessible = NULL;
78
g_return_val_if_fail (dynamic_cast<nux::Layout *>(object), NULL);
80
accessible = ATK_OBJECT (g_object_new (NUX_TYPE_LAYOUT_ACCESSIBLE, NULL));
82
atk_object_initialize (accessible, object);
76
AtkObject* accessible = NULL;
78
g_return_val_if_fail(dynamic_cast<nux::Layout*>(object), NULL);
80
accessible = ATK_OBJECT(g_object_new(NUX_TYPE_LAYOUT_ACCESSIBLE, NULL));
82
atk_object_initialize(accessible, object);
89
nux_layout_accessible_initialize (AtkObject *accessible,
89
nux_layout_accessible_initialize(AtkObject* accessible,
92
nux::Object *nux_object = NULL;
93
nux::Layout *layout = NULL;
92
nux::Object* nux_object = NULL;
93
nux::Layout* layout = NULL;
95
ATK_OBJECT_CLASS (nux_layout_accessible_parent_class)->initialize (accessible, data);
95
ATK_OBJECT_CLASS(nux_layout_accessible_parent_class)->initialize(accessible, data);
97
97
accessible->role = ATK_ROLE_PANEL;
99
nux_object = nux_object_accessible_get_object (NUX_OBJECT_ACCESSIBLE (accessible));
100
layout = dynamic_cast<nux::Layout *>(nux_object);
102
layout->ViewAdded.connect (sigc::bind (sigc::ptr_fun (on_view_changed_cb),
105
layout->ViewRemoved.connect (sigc::bind (sigc::ptr_fun (on_view_changed_cb),
99
nux_object = nux_object_accessible_get_object(NUX_OBJECT_ACCESSIBLE(accessible));
100
layout = dynamic_cast<nux::Layout*>(nux_object);
102
layout->ViewAdded.connect(sigc::bind(sigc::ptr_fun(on_view_changed_cb),
105
layout->ViewRemoved.connect(sigc::bind(sigc::ptr_fun(on_view_changed_cb),
110
nux_layout_accessible_get_n_children (AtkObject *obj)
110
nux_layout_accessible_get_n_children(AtkObject* obj)
112
nux::Object *nux_object = NULL;
113
nux::Layout *layout = NULL;
114
std::list<nux::Area *> element_list;
116
g_return_val_if_fail (NUX_IS_LAYOUT_ACCESSIBLE (obj), 0);
118
nux_object = nux_object_accessible_get_object (NUX_OBJECT_ACCESSIBLE (obj));
112
nux::Object* nux_object = NULL;
113
nux::Layout* layout = NULL;
114
std::list<nux::Area*> element_list;
116
g_return_val_if_fail(NUX_IS_LAYOUT_ACCESSIBLE(obj), 0);
118
nux_object = nux_object_accessible_get_object(NUX_OBJECT_ACCESSIBLE(obj));
119
119
if (!nux_object) /* state is defunct */
122
layout = dynamic_cast<nux::Layout *>(nux_object);
124
element_list = layout->GetChildren ();
126
return element_list.size ();
122
layout = dynamic_cast<nux::Layout*>(nux_object);
124
element_list = layout->GetChildren();
126
return element_list.size();
130
nux_layout_accessible_ref_child (AtkObject *obj,
130
nux_layout_accessible_ref_child(AtkObject* obj,
133
nux::Object *nux_object = NULL;
134
nux::Object *child = NULL;
135
AtkObject *child_accessible = NULL;
136
nux::Layout *layout = NULL;
137
std::list<nux::Area *> element_list;
133
nux::Object* nux_object = NULL;
134
nux::Object* child = NULL;
135
AtkObject* child_accessible = NULL;
136
nux::Layout* layout = NULL;
137
std::list<nux::Area*> element_list;
139
std::list<nux::Area *>::iterator it;
141
g_return_val_if_fail (NUX_IS_LAYOUT_ACCESSIBLE (obj), 0);
142
num = atk_object_get_n_accessible_children (obj);
143
g_return_val_if_fail ((i < num)&&(i >= 0), NULL);
145
nux_object = nux_object_accessible_get_object (NUX_OBJECT_ACCESSIBLE (obj));
139
std::list<nux::Area*>::iterator it;
141
g_return_val_if_fail(NUX_IS_LAYOUT_ACCESSIBLE(obj), 0);
142
num = atk_object_get_n_accessible_children(obj);
143
g_return_val_if_fail((i < num) && (i >= 0), NULL);
145
nux_object = nux_object_accessible_get_object(NUX_OBJECT_ACCESSIBLE(obj));
146
146
if (!nux_object) /* state is defunct */
149
layout = dynamic_cast<nux::Layout *>(nux_object);
151
element_list = layout->GetChildren ();
153
it = element_list.begin ();
154
std::advance (it, i);
156
child = dynamic_cast<nux::Object *>(*it);
157
child_accessible = unity_a11y_get_accessible (child);
159
g_object_ref (child_accessible);
149
layout = dynamic_cast<nux::Layout*>(nux_object);
151
element_list = layout->GetChildren();
153
it = element_list.begin();
156
child = dynamic_cast<nux::Object*>(*it);
157
child_accessible = unity_a11y_get_accessible(child);
159
g_object_ref(child_accessible);
161
161
return child_accessible;
166
on_view_changed_cb (nux::Layout *layout,
168
AtkObject *accessible,
166
on_view_changed_cb(nux::Layout* layout,
168
AtkObject* accessible,
171
const gchar *signal_name = NULL;
172
AtkObject *atk_child = NULL;
171
const gchar* signal_name = NULL;
172
AtkObject* atk_child = NULL;
175
g_return_if_fail (NUX_IS_LAYOUT_ACCESSIBLE (accessible));
175
g_return_if_fail(NUX_IS_LAYOUT_ACCESSIBLE(accessible));
177
atk_child = unity_a11y_get_accessible (area);
177
atk_child = unity_a11y_get_accessible(area);
181
signal_name = "children-changed::add";
182
index = nux_layout_accessible_get_n_children (accessible) - 1;
181
signal_name = "children-changed::add";
182
index = nux_layout_accessible_get_n_children(accessible) - 1;
186
signal_name = "children-changed::remove";
187
index = search_for_child (accessible, layout, area);
190
g_debug ("[a11y][layout] view change. parent=(%p:%s), child=(%p:%s) at (%i) added=(%i)",
191
accessible, atk_object_get_name (accessible),
192
atk_child, atk_object_get_name (atk_child),
195
g_signal_emit_by_name (accessible, signal_name, index, atk_child, NULL);
186
signal_name = "children-changed::remove";
187
index = search_for_child(accessible, layout, area);
190
g_debug("[a11y][layout] view change. parent=(%p:%s), child=(%p:%s) at (%i) added=(%i)",
191
accessible, atk_object_get_name(accessible),
192
atk_child, atk_object_get_name(atk_child),
195
g_signal_emit_by_name(accessible, signal_name, index, atk_child, NULL);
199
search_for_child (AtkObject *accessible,
199
search_for_child(AtkObject* accessible,
203
std::list<nux::Area *> element_list;
204
std::list<nux::Area *>::iterator it;
205
nux::Area *current_area = NULL;
203
std::list<nux::Area*> element_list;
204
std::list<nux::Area*>::iterator it;
205
nux::Area* current_area = NULL;
207
207
gboolean found = FALSE;
209
element_list = layout->GetChildren ();
209
element_list = layout->GetChildren();
211
for (it = element_list.begin (); it != element_list.end (); it++,result++)
211
for (it = element_list.begin(); it != element_list.end(); it++, result++)
214
if (current_area == area)
214
if (current_area == area)
221
221
if (!found) result = -1;