29
29
#include "unitya11y.h"
32
static void unity_root_accessible_class_init (UnityRootAccessibleClass *klass);
33
static void unity_root_accessible_init (UnityRootAccessible *root);
34
static void unity_root_accessible_finalize (GObject *object);
32
static void unity_root_accessible_class_init(UnityRootAccessibleClass* klass);
33
static void unity_root_accessible_init(UnityRootAccessible* root);
34
static void unity_root_accessible_finalize(GObject* object);
37
static void unity_root_accessible_initialize (AtkObject *accessible,
39
static gint unity_root_accessible_get_n_children (AtkObject *obj);
40
static AtkObject *unity_root_accessible_ref_child (AtkObject *obj,
42
static AtkObject *unity_root_accessible_get_parent (AtkObject *obj);
37
static void unity_root_accessible_initialize(AtkObject* accessible,
39
static gint unity_root_accessible_get_n_children(AtkObject* obj);
40
static AtkObject* unity_root_accessible_ref_child(AtkObject* obj,
42
static AtkObject* unity_root_accessible_get_parent(AtkObject* obj);
44
static void explore_children (AtkObject *obj);
44
static void explore_children(AtkObject* obj);
47
47
#define UNITY_ROOT_ACCESSIBLE_GET_PRIVATE(obj) \
48
48
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), UNITY_TYPE_ROOT_ACCESSIBLE, UnityRootAccessiblePrivate))
50
G_DEFINE_TYPE (UnityRootAccessible, unity_root_accessible, ATK_TYPE_OBJECT)
50
G_DEFINE_TYPE(UnityRootAccessible, unity_root_accessible, ATK_TYPE_OBJECT)
52
52
struct _UnityRootAccessiblePrivate
54
54
/* we save on window_list the accessible object for the windows
60
unity_root_accessible_class_init (UnityRootAccessibleClass *klass)
60
unity_root_accessible_class_init(UnityRootAccessibleClass* klass)
62
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
63
AtkObjectClass *atk_class = ATK_OBJECT_CLASS (klass);
62
GObjectClass* gobject_class = G_OBJECT_CLASS(klass);
63
AtkObjectClass* atk_class = ATK_OBJECT_CLASS(klass);
65
65
gobject_class->finalize = unity_root_accessible_finalize;
70
70
atk_class->get_parent = unity_root_accessible_get_parent;
71
71
atk_class->initialize = unity_root_accessible_initialize;
73
g_type_class_add_private (gobject_class, sizeof (UnityRootAccessiblePrivate));
73
g_type_class_add_private(gobject_class, sizeof(UnityRootAccessiblePrivate));
77
unity_root_accessible_init (UnityRootAccessible *root)
77
unity_root_accessible_init(UnityRootAccessible* root)
79
root->priv = UNITY_ROOT_ACCESSIBLE_GET_PRIVATE (root);
79
root->priv = UNITY_ROOT_ACCESSIBLE_GET_PRIVATE(root);
81
81
root->priv->window_list = NULL;
85
unity_root_accessible_new (void)
85
unity_root_accessible_new(void)
87
AtkObject *accessible = NULL;
89
accessible = ATK_OBJECT (g_object_new (UNITY_TYPE_ROOT_ACCESSIBLE, NULL));
91
atk_object_initialize (accessible, NULL);
87
AtkObject* accessible = NULL;
89
accessible = ATK_OBJECT(g_object_new(UNITY_TYPE_ROOT_ACCESSIBLE, NULL));
91
atk_object_initialize(accessible, NULL);
97
unity_root_accessible_finalize (GObject *object)
97
unity_root_accessible_finalize(GObject* object)
99
UnityRootAccessible *root = UNITY_ROOT_ACCESSIBLE (object);
99
UnityRootAccessible* root = UNITY_ROOT_ACCESSIBLE(object);
101
g_return_if_fail (UNITY_IS_ROOT_ACCESSIBLE (object));
101
g_return_if_fail(UNITY_IS_ROOT_ACCESSIBLE(object));
103
103
if (root->priv->window_list)
105
g_slist_free (root->priv->window_list);
106
root->priv->window_list = NULL;
105
g_slist_free(root->priv->window_list);
106
root->priv->window_list = NULL;
109
G_OBJECT_CLASS (unity_root_accessible_parent_class)->finalize (object);
109
G_OBJECT_CLASS(unity_root_accessible_parent_class)->finalize(object);
112
112
/* AtkObject.h */
114
unity_root_accessible_initialize (AtkObject *accessible,
114
unity_root_accessible_initialize(AtkObject* accessible,
117
117
accessible->role = ATK_ROLE_APPLICATION;
119
119
// FIXME: compiz doesn't set the program name using g_set_prgname,
120
120
// and AFAIK, there isn't a way to get it. Requires further investigation.
121
121
// accessible->name = g_get_prgname();
122
atk_object_set_name (accessible, "unity");
123
atk_object_set_parent (accessible, NULL);
122
atk_object_set_name(accessible, "unity");
123
atk_object_set_parent(accessible, NULL);
125
ATK_OBJECT_CLASS (unity_root_accessible_parent_class)->initialize (accessible, data);
125
ATK_OBJECT_CLASS(unity_root_accessible_parent_class)->initialize(accessible, data);
129
unity_root_accessible_get_n_children (AtkObject *obj)
129
unity_root_accessible_get_n_children(AtkObject* obj)
131
UnityRootAccessible *root = UNITY_ROOT_ACCESSIBLE (obj);
131
UnityRootAccessible* root = UNITY_ROOT_ACCESSIBLE(obj);
133
return g_slist_length (root->priv->window_list);
133
return g_slist_length(root->priv->window_list);
136
136
static AtkObject*
137
unity_root_accessible_ref_child (AtkObject *obj,
137
unity_root_accessible_ref_child(AtkObject* obj,
140
UnityRootAccessible *root = NULL;
140
UnityRootAccessible* root = NULL;
142
AtkObject *item = NULL;
144
root = UNITY_ROOT_ACCESSIBLE (obj);
145
num = atk_object_get_n_accessible_children (obj);
146
g_return_val_if_fail ((i < num)&&(i >= 0), NULL);
148
item = ATK_OBJECT (g_slist_nth_data (root->priv->window_list, i));
142
AtkObject* item = NULL;
144
root = UNITY_ROOT_ACCESSIBLE(obj);
145
num = atk_object_get_n_accessible_children(obj);
146
g_return_val_if_fail((i < num) && (i >= 0), NULL);
148
item = ATK_OBJECT(g_slist_nth_data(root->priv->window_list, i));
158
158
static AtkObject*
159
unity_root_accessible_get_parent (AtkObject *obj)
159
unity_root_accessible_get_parent(AtkObject* obj)
171
171
* temporal. This method should be a internal root method, as part of
172
172
* a basewindow::show callback, as in the case of gail
175
unity_root_accessible_add_window (UnityRootAccessible *self,
176
nux::BaseWindow *window)
175
unity_root_accessible_add_window(UnityRootAccessible* self,
176
nux::BaseWindow* window)
178
AtkObject *window_accessible = NULL;
178
AtkObject* window_accessible = NULL;
181
g_return_val_if_fail (UNITY_IS_ROOT_ACCESSIBLE (self), NULL);
181
g_return_val_if_fail(UNITY_IS_ROOT_ACCESSIBLE(self), NULL);
183
183
window_accessible =
184
unity_a11y_get_accessible (window);
184
unity_a11y_get_accessible(window);
186
186
self->priv->window_list =
187
g_slist_append (self->priv->window_list, window_accessible);
189
index = g_slist_index (self->priv->window_list, window_accessible);
191
explore_children (window_accessible);
193
g_signal_emit_by_name (self, "children-changed::add",
194
index, window_accessible, NULL);
187
g_slist_append(self->priv->window_list, window_accessible);
189
index = g_slist_index(self->priv->window_list, window_accessible);
191
explore_children(window_accessible);
193
g_signal_emit_by_name(self, "children-changed::add",
194
index, window_accessible, NULL);
196
196
return window_accessible;
226
explore_children (AtkObject *obj)
226
explore_children(AtkObject* obj)
230
AtkObject *atk_child = NULL;
232
g_return_if_fail (ATK_IS_OBJECT (obj));
234
num = atk_object_get_n_accessible_children (obj);
230
AtkObject* atk_child = NULL;
232
g_return_if_fail(ATK_IS_OBJECT(obj));
234
num = atk_object_get_n_accessible_children(obj);
236
236
for (i = 0; i < num; i++)
238
atk_child = atk_object_ref_accessible_child (obj, i);
239
explore_children (atk_child);
240
g_object_unref (atk_child);
238
atk_child = atk_object_ref_accessible_child(obj, i);
239
explore_children(atk_child);
240
g_object_unref(atk_child);