summaryrefslogtreecommitdiff
path: root/tests/dummyatk/my-atk-selection.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/dummyatk/my-atk-selection.c')
-rw-r--r--tests/dummyatk/my-atk-selection.c229
1 files changed, 229 insertions, 0 deletions
diff --git a/tests/dummyatk/my-atk-selection.c b/tests/dummyatk/my-atk-selection.c
new file mode 100644
index 0000000..bf706cc
--- /dev/null
+++ b/tests/dummyatk/my-atk-selection.c
@@ -0,0 +1,229 @@
+/*
+ * AT-SPI - Assistive Technology Service Provider Interface
+ * (Gnome Accessibility Project; https://wiki.gnome.org/Accessibility)
+ *
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <atk/atk.h>
+
+#include "my-atk-object.h"
+#include "my-atk-selection.h"
+
+static void atk_selection_interface_init (AtkSelectionIface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (MyAtkSelection,
+ my_atk_selection,
+ MY_TYPE_ATK_OBJECT,
+ G_IMPLEMENT_INTERFACE (ATK_TYPE_SELECTION,
+ atk_selection_interface_init));
+
+static void
+my_atk_selection_init (MyAtkSelection *obj)
+{
+}
+
+static gboolean
+my_atk_selection_add_selection (AtkSelection *selection, gint i)
+{
+ MyAtkSelection *self = MY_ATK_SELECTION(selection);
+ if (!self)
+ return FALSE;
+
+ AtkObject *child = atk_object_ref_accessible_child (ATK_OBJECT (selection), i);
+ AtkStateSet *ss = atk_object_ref_state_set (child);
+ atk_state_set_add_state (ss, ATK_STATE_SELECTED);
+ return atk_state_set_contains_state (ss, ATK_STATE_SELECTED);
+}
+
+static gboolean
+my_atk_selection_clear_selection (AtkSelection *selection)
+{
+ MyAtkSelection *self = MY_ATK_SELECTION(selection);
+ if (!self)
+ return FALSE;
+ AtkObject *child = NULL;
+ AtkStateSet *states = NULL;
+ int i;
+ int childs = atk_object_get_n_accessible_children (ATK_OBJECT (selection));
+
+ for (i=0; i<childs; i++) {
+ child = atk_object_ref_accessible_child (ATK_OBJECT (selection), i);
+ states = atk_object_ref_state_set (child);
+ atk_state_set_remove_state (states, ATK_STATE_SELECTED);
+ }
+ return TRUE;
+}
+
+static AtkObject*
+my_atk_selection_ref_selection (AtkSelection *selection, gint no)
+{
+ MyAtkSelection *self = MY_ATK_SELECTION(selection);
+ if (!self)
+ return FALSE;
+ AtkObject *child = NULL;
+ AtkStateSet *states = NULL;
+ GArray *array = g_array_new (FALSE, FALSE, sizeof (AtkObject *));
+ int i;
+ int childs = atk_object_get_n_accessible_children (ATK_OBJECT (selection));
+
+ for (i=0; i<childs; i++) {
+ child = atk_object_ref_accessible_child (ATK_OBJECT (selection), i);
+ states = atk_object_ref_state_set (child);
+ if (atk_state_set_contains_state (states, ATK_STATE_SELECTED))
+ g_array_append_val (array, child);
+ }
+
+ return g_array_index (array, AtkObject *, no);
+}
+
+static gint
+my_atk_selection_get_selection_count (AtkSelection *selection)
+{
+ MyAtkSelection *self = MY_ATK_SELECTION(selection);
+ if (!self)
+ return FALSE;
+ AtkObject *child = NULL;
+ AtkStateSet *states = NULL;
+ int i, ret=0;
+ int childs = atk_object_get_n_accessible_children (ATK_OBJECT (selection));
+
+ for (i=0; i<childs; i++) {
+ child = atk_object_ref_accessible_child (ATK_OBJECT (selection), i);
+ states = atk_object_ref_state_set (child);
+ if (atk_state_set_contains_state (states, ATK_STATE_SELECTED))
+ ret++;
+
+ }
+ return ret;
+}
+
+static gboolean
+my_atk_selection_is_child_selected (AtkSelection *selection, gint i)
+{
+ MyAtkSelection *self = MY_ATK_SELECTION(selection);
+ if (!self)
+ return FALSE;
+ AtkObject *child = NULL;
+ AtkStateSet *states = NULL;
+ child = atk_object_ref_accessible_child (ATK_OBJECT (selection), i);
+ states = atk_object_ref_state_set (child);
+ if (atk_state_set_contains_state (states, ATK_STATE_SELECTED))
+ return TRUE;
+ return FALSE;
+}
+
+static gboolean
+my_atk_selection_remove_selection (AtkSelection *selection, gint no)
+{
+ MyAtkSelection *self = MY_ATK_SELECTION(selection);
+ AtkObject *child = NULL;
+ AtkStateSet *states = NULL;
+ GArray *array = NULL;
+ AtkObject *o = NULL;
+ int i;
+ int childs;
+ gboolean ret = FALSE;
+
+ if (!self)
+ return FALSE;
+ array = g_array_new (FALSE, FALSE, sizeof (AtkObject *));
+ childs = atk_object_get_n_accessible_children (ATK_OBJECT (selection));
+
+ for (i=0; i<childs; i++) {
+ child = atk_object_ref_accessible_child (ATK_OBJECT (selection), i);
+ states = atk_object_ref_state_set (child);
+ if (atk_state_set_contains_state (states, ATK_STATE_SELECTED))
+ g_array_append_val (array, child);
+ }
+ g_object_unref (states);
+
+ o = g_array_index (array, AtkObject *, no);
+ states = atk_object_ref_state_set (o);
+ atk_state_set_remove_state (states, ATK_STATE_SELECTED);
+
+ ret = !atk_state_set_contains_state (states, ATK_STATE_SELECTED);
+ g_object_unref (states);
+ g_object_unref (o);
+ g_object_unref (self);
+ g_array_free (array, TRUE);
+
+ return ret;
+}
+
+static gboolean
+my_atk_selection_select_all_selection (AtkSelection *selection)
+{
+ MyAtkSelection *self = MY_ATK_SELECTION(selection);
+ AtkObject *child = NULL;
+ AtkStateSet *states = NULL;
+ int i;
+ int childs;
+
+ if (!self)
+ return FALSE;
+ childs = atk_object_get_n_accessible_children (ATK_OBJECT (selection));
+
+ for (i=0; i<childs; i++) {
+ child = atk_object_ref_accessible_child (ATK_OBJECT (selection), i);
+ states = atk_object_ref_state_set (child);
+ atk_state_set_add_state (states, ATK_STATE_SELECTED);
+ g_object_unref (states);
+ g_object_unref (child);
+ }
+
+ g_object_unref (self);
+ return TRUE;
+}
+
+static void
+atk_selection_interface_init (AtkSelectionIface *iface)
+{
+ if(!iface) return;
+
+ iface->add_selection = my_atk_selection_add_selection;
+ iface->clear_selection = my_atk_selection_clear_selection;
+ iface->ref_selection = my_atk_selection_ref_selection;
+ iface->get_selection_count = my_atk_selection_get_selection_count;
+ iface->is_child_selected = my_atk_selection_is_child_selected;
+ iface->remove_selection = my_atk_selection_remove_selection;
+ iface->select_all_selection = my_atk_selection_select_all_selection;
+}
+
+static void
+my_atk_selection_initialize (AtkObject *obj, gpointer data)
+{
+}
+
+static void
+my_atk_selection_finalize (GObject *obj)
+{
+}
+
+static void
+my_atk_selection_class_init (MyAtkSelectionClass *my_class)
+{
+ AtkObjectClass *atk_class = ATK_OBJECT_CLASS(my_class);
+ GObjectClass *gobject_class = G_OBJECT_CLASS(my_class);
+
+ gobject_class->finalize = my_atk_selection_finalize;
+
+ atk_class->initialize = my_atk_selection_initialize;
+}