Bug 640574: gobject-introspection annotation and documentation fixes
[atk.git] / atk / atkstateset.c
blobeabb9f9068ef52a6d696aa5269b0833514f2df56
1 /* ATK - Accessibility Toolkit
2 * Copyright 2001 Sun Microsystems Inc.
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.
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.
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.
20 #include <glib-object.h>
22 #include "atkobject.h"
23 #include "atkstateset.h"
25 #define ATK_STATE(state_enum) ((AtkState)((guint64)1 << ((state_enum)%64)))
27 struct _AtkRealStateSet
29 GObject parent;
31 AtkState state;
34 typedef struct _AtkRealStateSet AtkRealStateSet;
36 static void atk_state_set_class_init (AtkStateSetClass *klass);
38 GType
39 atk_state_set_get_type (void)
41 static GType type = 0;
43 if (!type)
45 static const GTypeInfo typeInfo =
47 sizeof (AtkStateSetClass),
48 (GBaseInitFunc) NULL,
49 (GBaseFinalizeFunc) NULL,
50 (GClassInitFunc) atk_state_set_class_init,
51 (GClassFinalizeFunc) NULL,
52 NULL,
53 sizeof (AtkRealStateSet),
55 (GInstanceInitFunc) NULL,
56 } ;
57 type = g_type_register_static (G_TYPE_OBJECT, "AtkStateSet", &typeInfo, 0) ;
59 return type;
62 static void
63 atk_state_set_class_init (AtkStateSetClass *klass)
67 /**
68 * atk_state_set_new:
70 * Creates a new empty state set.
72 * Returns: a new #AtkStateSet
73 **/
74 AtkStateSet*
75 atk_state_set_new (void)
77 return (AtkStateSet*) g_object_new (ATK_TYPE_STATE_SET, NULL);
80 /**
81 * atk_state_set_is_empty:
82 * @set: an #AtkStateType
84 * Checks whether the state set is empty, i.e. has no states set.
86 * Returns: %TRUE if @set has no states set, otherwise %FALSE
87 **/
88 gboolean
89 atk_state_set_is_empty (AtkStateSet *set)
91 AtkRealStateSet *real_set;
92 g_return_val_if_fail (ATK_IS_STATE_SET (set), FALSE);
94 real_set = (AtkRealStateSet *)set;
96 if (real_set->state)
97 return FALSE;
98 else
99 return TRUE;
103 * atk_state_set_add_state:
104 * @set: an #AtkStateSet
105 * @type: an #AtkStateType
107 * Add a new state for the specified type to the current state set if
108 * it is not already present.
110 * Returns: %TRUE if the state for @type is not already in @set.
112 gboolean
113 atk_state_set_add_state (AtkStateSet *set,
114 AtkStateType type)
116 AtkRealStateSet *real_set;
117 g_return_val_if_fail (ATK_IS_STATE_SET (set), FALSE);
119 real_set = (AtkRealStateSet *)set;
121 if (real_set->state & ATK_STATE (type))
122 return FALSE;
123 else
125 real_set->state |= ATK_STATE (type);
126 return TRUE;
130 * atk_state_set_add_states:
131 * @set: an #AtkStateSet
132 * @types: an array of #AtkStateType
133 * @n_types: The number of elements in the array
135 * Add the states for the specified types to the current state set.
137 void
138 atk_state_set_add_states (AtkStateSet *set,
139 AtkStateType *types,
140 gint n_types)
142 AtkRealStateSet *real_set;
143 gint i;
144 g_return_if_fail (ATK_IS_STATE_SET (set));
146 real_set = (AtkRealStateSet *)set;
148 for (i = 0; i < n_types; i++)
150 real_set->state |= ATK_STATE (types[i]);
155 * atk_state_set_clear_states:
156 * @set: an #AtkStateSet
158 * Removes all states from the state set.
160 void
161 atk_state_set_clear_states (AtkStateSet *set)
163 AtkRealStateSet *real_set;
164 g_return_if_fail (ATK_IS_STATE_SET (set));
166 real_set = (AtkRealStateSet *)set;
168 real_set->state = 0;
172 * atk_state_set_contains_state:
173 * @set: an #AtkStateSet
174 * @type: an #AtkStateType
176 * Checks whether the state for the specified type is in the specified set.
178 * Returns: %TRUE if @type is the state type is in @set.
180 gboolean
181 atk_state_set_contains_state (AtkStateSet *set,
182 AtkStateType type)
184 AtkRealStateSet *real_set;
185 g_return_val_if_fail (ATK_IS_STATE_SET (set), FALSE);
187 real_set = (AtkRealStateSet *)set;
189 if (real_set->state & ATK_STATE (type))
190 return TRUE;
191 else
192 return FALSE;
196 * atk_state_set_contains_states:
197 * @set: an #AtkStateSet
198 * @types: an array of #AtkStateType
199 * @n_types: The number of elements in the array
201 * Checks whether the states for all the specified types are in the
202 * specified set.
204 * Returns: %TRUE if all the states for @type are in @set.
206 gboolean
207 atk_state_set_contains_states (AtkStateSet *set,
208 AtkStateType *types,
209 gint n_types)
211 AtkRealStateSet *real_set;
212 gint i;
213 g_return_val_if_fail (ATK_IS_STATE_SET (set), FALSE);
215 real_set = (AtkRealStateSet *)set;
217 for (i = 0; i < n_types; i++)
219 if (!(real_set->state & ATK_STATE (types[i])))
220 return FALSE;
222 return TRUE;
226 * atk_state_set_remove_state:
227 * @set: an #AtkStateSet
228 * @type: an #AtkType
230 * Removes the state for the specified type from the state set.
232 * Returns: %TRUE if @type was the state type is in @set.
234 gboolean
235 atk_state_set_remove_state (AtkStateSet *set,
236 AtkStateType type)
238 AtkRealStateSet *real_set;
239 g_return_val_if_fail (ATK_IS_STATE_SET (set), FALSE);
241 real_set = (AtkRealStateSet *)set;
243 if (real_set->state & ATK_STATE (type))
245 real_set->state ^= ATK_STATE (type);
246 return TRUE;
248 else
249 return FALSE;
253 * atk_state_set_and_sets:
254 * @set: an #AtkStateSet
255 * @compare_set: another #AtkStateSet
257 * Constructs the intersection of the two sets, returning %NULL if the
258 * intersection is empty.
260 * Returns: (transfer full): a new #AtkStateSet which is the intersection of
261 * the two sets.
263 AtkStateSet*
264 atk_state_set_and_sets (AtkStateSet *set,
265 AtkStateSet *compare_set)
267 AtkRealStateSet *real_set, *real_compare_set;
268 AtkStateSet *return_set = NULL;
269 AtkState state;
271 g_return_val_if_fail (ATK_IS_STATE_SET (set), NULL);
272 g_return_val_if_fail (ATK_IS_STATE_SET (compare_set), NULL);
274 real_set = (AtkRealStateSet *)set;
275 real_compare_set = (AtkRealStateSet *)compare_set;
277 state = real_set->state & real_compare_set->state;
278 if (state)
280 return_set = atk_state_set_new();
281 ((AtkRealStateSet *) return_set)->state = state;
283 return return_set;
287 * atk_state_set_or_sets:
288 * @set: an #AtkStateSet
289 * @compare_set: another #AtkStateSet
291 * Constructs the union of the two sets.
293 * Returns: (transfer full): a new #AtkStateSet which is the union of the two
294 * sets, returning %NULL is empty.
296 AtkStateSet*
297 atk_state_set_or_sets (AtkStateSet *set,
298 AtkStateSet *compare_set)
300 AtkRealStateSet *real_set, *real_compare_set;
301 AtkStateSet *return_set = NULL;
302 AtkState state;
304 g_return_val_if_fail (ATK_IS_STATE_SET (set), NULL);
305 g_return_val_if_fail (ATK_IS_STATE_SET (compare_set), NULL);
307 real_set = (AtkRealStateSet *)set;
308 real_compare_set = (AtkRealStateSet *)compare_set;
310 state = real_set->state | real_compare_set->state;
312 if (state)
314 return_set = atk_state_set_new();
315 ((AtkRealStateSet *) return_set)->state = state;
318 return return_set;
322 * atk_state_set_xor_sets:
323 * @set: an #AtkStateSet
324 * @compare_set: another #AtkStateSet
326 * Constructs the exclusive-or of the two sets, returning %NULL is empty.
327 * The set returned by this operation contains the states in exactly
328 * one of the two sets.
330 * Returns: (transfer full): a new #AtkStateSet which contains the states
331 * which are in exactly one of the two sets.
333 AtkStateSet*
334 atk_state_set_xor_sets (AtkStateSet *set,
335 AtkStateSet *compare_set)
337 AtkRealStateSet *real_set, *real_compare_set;
338 AtkStateSet *return_set = NULL;
339 AtkState state, state1, state2;
341 g_return_val_if_fail (ATK_IS_STATE_SET (set), NULL);
342 g_return_val_if_fail (ATK_IS_STATE_SET (compare_set), NULL);
344 real_set = (AtkRealStateSet *)set;
345 real_compare_set = (AtkRealStateSet *)compare_set;
347 state1 = real_set->state & (~real_compare_set->state);
348 state2 = (~real_set->state) & real_compare_set->state;
349 state = state1 | state2;
351 if (state)
353 return_set = atk_state_set_new();
354 ((AtkRealStateSet *) return_set)->state = state;
356 return return_set;