2 * Copyright (c) 2015 Samsung Electronics Co., Ltd. All rights reserved.
4 * This file is a modified version of BSD licensed file and
5 * licensed under the Flora License, Version 1.1 (the License);
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://floralicense.org/license/
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an AS IS BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 * Please, see the LICENSE file for the original copyright owner and
26 static AtspiValue *value = NULL;
27 static AtspiText *text = NULL;
28 static AtspiEditableText *editable_text = NULL;
29 static AtspiAction *action = NULL;
30 //static AtspiComponent *component = NULL;
32 G_DEFINE_TYPE(AtspiAccessible, atspi_accessible, G_TYPE_OBJECT);
33 G_DEFINE_TYPE(AtspiAction, atspi_action, G_TYPE_OBJECT);
34 G_DEFINE_TYPE(AtspiComponent, atspi_component, G_TYPE_OBJECT);
35 G_DEFINE_TYPE(AtspiStateSet, atspi_state_set, G_TYPE_OBJECT);
37 void atspi_rect_free (AtspiRect *rect)
42 AtspiRect *atspi_rect_copy (AtspiRect *src)
44 AtspiRect *dst = g_new (AtspiRect, 1);
47 dst->height = src->height;
48 dst->width = src->width;
52 G_DEFINE_BOXED_TYPE (AtspiRect, atspi_rect, atspi_rect_copy, atspi_rect_free)
54 void atspi_alloc_memory()
56 value = (AtspiValue*)malloc(sizeof(AtspiValue));
57 text = (AtspiText*)malloc(sizeof(AtspiText));
58 editable_text = (AtspiEditableText*)malloc(sizeof(AtspiEditableText));
61 void atspi_free_memory(void)
68 gchar * atspi_accessible_get_name (AtspiAccessible *obj, GError **error)
70 if(!obj || !obj->name) return strdup("\0");
72 return strdup(obj->name);
75 gchar * atspi_accessible_get_role_name (AtspiAccessible *obj, GError **error)
77 if(!obj) return strdup("\0");
78 AtspiRole role = obj->role;
81 case ATSPI_ROLE_APPLICATION:
82 return strdup("Application");
83 case ATSPI_ROLE_PUSH_BUTTON:
84 return strdup("Push button");
86 return strdup("Icon");
87 case ATSPI_ROLE_CHECK_BOX:
88 return strdup("Check box");
89 case ATSPI_ROLE_ENTRY:
90 return strdup("Entry");
91 case ATSPI_ROLE_FILLER:
92 return strdup("filler");
93 case ATSPI_ROLE_SCROLL_PANE:
94 return strdup("scroll pane");
95 case ATSPI_ROLE_IMAGE:
96 return strdup("image");
97 case ATSPI_ROLE_SPLIT_PANE:
98 return strdup("split pane");
99 case ATSPI_ROLE_UNKNOWN:
100 return strdup("unknown");
101 case ATSPI_ROLE_RULER:
102 return strdup("ruler");
103 case ATSPI_ROLE_FOOTER:
104 return strdup("footer");
105 case ATSPI_ROLE_INFO_BAR:
106 return strdup("infobar");
107 case ATSPI_ROLE_LINK:
108 return strdup("link");
114 gchar * atspi_accessible_get_localized_role_name (AtspiAccessible *obj, GError **error)
116 if(!obj) return strdup("\0");
117 AtspiRole role = obj->role;
120 case ATSPI_ROLE_APPLICATION:
121 return strdup("Application");
122 case ATSPI_ROLE_PUSH_BUTTON:
123 return strdup("Push button");
124 case ATSPI_ROLE_ICON:
125 return strdup("Icon");
126 case ATSPI_ROLE_CHECK_BOX:
127 return strdup("Check box");
128 case ATSPI_ROLE_ENTRY:
129 return strdup("Entry");
130 case ATSPI_ROLE_FILLER:
131 return strdup("filler");
137 gchar * atspi_accessible_get_toolkit_name (AtspiAccessible *obj, GError **error)
142 gchar * atspi_accessible_get_description (AtspiAccessible *obj, GError **error)
144 if(!obj || !obj->description) return strdup("\0");
145 return strdup(obj->description);
148 AtspiAction * atspi_accessible_get_action_iface (AtspiAccessible *obj)
150 if(!obj) return NULL;
154 AtspiText * atspi_accessible_get_text_iface (AtspiAccessible *obj)
156 if(!obj) return NULL;
160 gint atspi_text_get_character_count (AtspiText *obj, GError **error)
166 gint atspi_text_get_caret_offset (AtspiText *obj, GError **error)
172 gchar * atspi_text_get_text (AtspiText *obj, gint start_offset, gint end_offset, GError **error)
174 if(!obj) return NULL;
175 return "AtspiText text";
178 AtspiValue * atspi_accessible_get_value_iface (AtspiAccessible *obj)
180 if(!obj) return NULL;
184 gdouble atspi_value_get_current_value (AtspiValue *obj, GError **error)
189 gdouble atspi_value_get_maximum_value (AtspiValue *obj, GError **error)
194 gdouble atspi_value_get_minimum_value (AtspiValue *obj, GError **error)
199 AtspiEventListener *atspi_event_listener_new (AtspiEventListenerCB callback,
201 GDestroyNotify callback_destroyed)
206 gboolean atspi_event_listener_register (AtspiEventListener *listener,
207 const gchar *event_type,
213 gboolean atspi_event_listener_deregister (AtspiEventListener *listener,
214 const gchar *event_type,
220 AtspiStateSet * atspi_accessible_get_state_set (AtspiAccessible *obj)
222 if (!obj || !obj->states) return NULL;
226 gboolean atspi_state_set_contains (AtspiStateSet *set, AtspiStateType state)
230 return (set->states & ((gint64)1 << state)) ? TRUE : FALSE;
233 void atspi_state_set_add (AtspiStateSet *set, AtspiStateType state)
236 set->states |= (((gint64)1) << state);
239 gboolean atspi_component_grab_highlight (AtspiComponent *obj, GError **error)
244 AtspiScrollable *atspi_accessible_get_scrollable (AtspiAccessible *accessible)
249 gboolean atspi_component_clear_highlight (AtspiComponent *obj, GError **error)
254 gboolean atspi_component_contains (AtspiComponent *obj, gint x, gint y, AtspiCoordType ctype, GError **error)
259 GArray *atspi_state_set_get_states (AtspiStateSet *set)
265 g_return_val_if_fail (set != NULL, NULL);
266 ret = g_array_new (TRUE, TRUE, sizeof (AtspiStateType));
269 for (i = 0; i < 64; i++)
271 if (set->states & val)
272 ret = g_array_append_val (ret, i);
279 AtspiRole atspi_accessible_get_role (AtspiAccessible *obj, GError **error)
281 if(!obj) return ATSPI_ROLE_INVALID;
285 gint atspi_accessible_get_child_count (AtspiAccessible *obj, GError **error)
287 if(!obj || !obj->children) return 0;
288 return g_list_length(obj->children);
291 AtspiAccessible * atspi_accessible_get_child_at_index (AtspiAccessible *obj, gint child_index, GError **error)
293 if(!obj || child_index >= g_list_length(obj->children)) return NULL;
294 return g_object_ref(g_list_nth_data(obj->children, child_index));
297 AtspiComponent * atspi_accessible_get_component_iface (AtspiAccessible *obj)
299 if(!obj) return NULL;
300 AtspiComponent *component = g_object_new(ATSPI_COMPONENT_OBJECT_TYPE, 0);
301 *(component->role) = obj->role;
305 AtspiStateSet * atspi_state_set_new (GArray *states)
307 AtspiStateSet *set = g_object_new (ATSPI_STATE_OBJECT_TYPE, NULL);
308 if (!set) return NULL;
310 for (i = 0; i < states->len; i++)
312 atspi_state_set_add (set, g_array_index (states, AtspiStateType, i));
317 AtspiRect *atspi_component_get_extents (AtspiComponent *component, AtspiCoordType ctype, GError **error)
319 if(!component) return NULL;
322 if(*(component->role) == ATSPI_ROLE_APPLICATION)
329 else if(*(component->role) == ATSPI_ROLE_PUSH_BUTTON)
336 else if(*(component->role) == ATSPI_ROLE_ICON)
343 else if(*(component->role) == ATSPI_ROLE_CHECK_BOX)
350 else if(*(component->role) == ATSPI_ROLE_ENTRY)
364 return atspi_rect_copy(&rect);
367 AtspiAccessible *atspi_create_accessible()
369 AtspiAccessible *obj = g_object_new(ATSPI_ACCESSIBLE_OBJECT_TYPE, 0);
370 obj->children = NULL;
371 obj->index_in_parent = 0;
372 obj->child_count = 0;
374 GArray *states = g_array_new (TRUE, TRUE, sizeof (AtspiStateType));
379 ATSPI_STATE_FOCUSABLE,
380 ATSPI_STATE_LAST_DEFINED
383 for (i=0; i<(int)(sizeof(s)/sizeof(s[0])); i++)
384 g_array_append_val (states, s[i]);
385 obj->states = atspi_state_set_new(states);
390 void atspi_delete_accessible(AtspiAccessible *obj)
395 atpis_accessible_remove_children(obj);
400 void atspi_accessible_add_child(AtspiAccessible *obj, AtspiAccessible *child)
402 child->index_in_parent = obj->child_count;
403 child->accessible_parent = obj;
404 obj->children = g_list_append(obj->children, child);
408 void atpis_accessible_remove_children(AtspiAccessible *obj)
410 GList *l = obj->children;
413 GList *next = l->next;
416 atspi_delete_accessible(l->data);
420 g_list_free(obj->children);
423 static void atspi_state_set_init(AtspiStateSet* set)
427 static void atspi_state_set_class_init(AtspiStateSetClass *_class)
431 static void atspi_action_class_init(AtspiActionClass *_class)
435 static void atspi_action_init(AtspiAction* obj)
439 static void atspi_accessible_class_init(AtspiAccessibleClass *_class)
443 static void atspi_accessible_init(AtspiAccessible* obj)
447 static void atspi_component_finalize(GObject *obj)
449 AtspiComponent *component = (AtspiComponent*)obj;
450 free(component->role);
453 static void atspi_component_class_init(AtspiComponentClass *class)
455 GObjectClass *gobject_class = G_OBJECT_CLASS (class);
457 gobject_class->finalize = atspi_component_finalize;
460 static void atspi_component_init(AtspiComponent* obj)
462 obj->role = (AtspiRole*)malloc(sizeof(AtspiRole));
465 AtspiEditableText * atspi_accessible_get_editable_text_iface (AtspiAccessible *obj)
467 return editable_text;
470 GArray * atspi_accessible_get_relation_set (AtspiAccessible *obj, GError **error)
475 AtspiRelationType atspi_relation_get_relation_type (AtspiRelation *obj)
477 return ATSPI_RELATION_NULL;
480 gint atspi_relation_get_n_targets (AtspiRelation *obj)
485 AtspiAccessible * atspi_relation_get_target (AtspiRelation *obj, gint i)
490 AtspiAccessible * atspi_accessible_get_parent (AtspiAccessible *obj, GError **error)
492 return obj->accessible_parent;
495 int atspi_component_get_highlight_index(AtspiComponent *obj, GError **error)
500 gint atspi_action_get_n_actions(AtspiAction *obj, GError **error)
505 gchar * atspi_action_get_action_name (AtspiAction *obj, gint i, GError **error)
510 gint atspi_accessible_get_index_in_parent (AtspiAccessible *obj, GError **error)
512 return obj->index_in_parent;