2 * Copyright (C) 2011 Igalia S.L.
3 * Authors: Mario Sanchez Prada <msanchez@igalia.com>
5 * Based on a C# example written in C# by Mike Gorse:
6 * http://mgorse.freeshell.org/plug-socket-test.tar.gz
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of version 3 of the GNU General Public
10 * License as published by the Free Software Foundation.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
17 * You should have received a copy of the GNU General Public
18 * License along with this program; if not, write to the
19 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 * Boston, MA 02111-1307, USA.
23 #include "ta-plug-accessible.h"
29 struct _TaPlugAccessiblePrivate {
33 #define TA_PLUG_ACCESSIBLE_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), TA_TYPE_PLUG_ACCESSIBLE, TaPlugAccessiblePrivate))
35 G_DEFINE_TYPE (TaPlugAccessible, ta_plug_accessible, ATK_TYPE_PLUG);
37 static void ta_plug_accessible_initialize (AtkObject *object, gpointer data)
39 g_return_if_fail (TA_IS_PLUG_ACCESSIBLE (object));
41 TaPlugAccessible *plug = NULL;
42 TaPlugAccessiblePrivate *priv = NULL;
44 ATK_OBJECT_CLASS(ta_plug_accessible_parent_class)->initialize(object, data);
46 plug = TA_PLUG_ACCESSIBLE (object);
47 priv = TA_PLUG_ACCESSIBLE_GET_PRIVATE(plug);
49 if (GTK_IS_WIDGET (data))
50 priv->widget = GTK_WIDGET (data);
53 static const gchar *ta_plug_accessible_get_name (AtkObject *object)
55 g_return_val_if_fail(ATK_IS_OBJECT (object), NULL);
59 static AtkRole ta_plug_accessible_get_role (AtkObject *object)
61 g_return_val_if_fail(ATK_IS_OBJECT (object), ATK_ROLE_UNKNOWN);
62 return ATK_ROLE_PANEL;
65 static gint ta_plug_accessible_get_n_children (AtkObject *object)
67 g_return_val_if_fail (TA_IS_PLUG_ACCESSIBLE (object), 0);
69 TaPlugAccessible *plug = NULL;
70 TaPlugAccessiblePrivate *priv = NULL;
71 GList *children = NULL;
75 plug = TA_PLUG_ACCESSIBLE (object);
76 priv = TA_PLUG_ACCESSIBLE_GET_PRIVATE(plug);
81 if (!GTK_IS_CONTAINER (priv->widget))
84 children = gtk_container_get_children (GTK_CONTAINER (priv->widget));
85 n_children = g_list_length (children);
86 g_list_free (children);
91 static AtkObject *ta_plug_accessible_ref_child (AtkObject *object, gint i)
93 g_return_val_if_fail (TA_IS_PLUG_ACCESSIBLE (object), NULL);
95 TaPlugAccessible *plug = NULL;
96 TaPlugAccessiblePrivate *priv = NULL;
97 GList *children = NULL;
100 GtkWidget *child = NULL;
101 AtkObject *axChild = NULL;
103 plug = TA_PLUG_ACCESSIBLE (object);
104 priv = TA_PLUG_ACCESSIBLE_GET_PRIVATE(plug);
109 if (!GTK_IS_CONTAINER (priv->widget))
112 children = gtk_container_get_children (GTK_CONTAINER (priv->widget));
113 if (i < 0 || i >= g_list_length (children))
116 child = GTK_WIDGET (g_list_nth_data (children, i));
120 g_list_free (children);
122 axChild = gtk_widget_get_accessible (child);
123 return g_object_ref (axChild);
126 static void ta_plug_accessible_dispose (GObject *object)
128 TaPlugAccessible *plug = NULL;
129 TaPlugAccessiblePrivate *priv = NULL;
131 plug = TA_PLUG_ACCESSIBLE (object);
132 priv = TA_PLUG_ACCESSIBLE_GET_PRIVATE(plug);
136 g_object_unref (priv->widget);
140 G_OBJECT_CLASS(ta_plug_accessible_parent_class)->dispose(object);
143 static void ta_plug_accessible_class_init (TaPlugAccessibleClass *klass)
145 GObjectClass *g_object_class = G_OBJECT_CLASS(klass);
146 AtkObjectClass *atk_object_class = NULL;
148 g_object_class->dispose = ta_plug_accessible_dispose;
150 atk_object_class = ATK_OBJECT_CLASS (klass);
151 atk_object_class->initialize = ta_plug_accessible_initialize;
152 atk_object_class->get_name = ta_plug_accessible_get_name;
153 atk_object_class->get_role = ta_plug_accessible_get_role;
154 atk_object_class->get_n_children = ta_plug_accessible_get_n_children;
155 atk_object_class->get_index_in_parent = NULL;
156 atk_object_class->ref_child = ta_plug_accessible_ref_child;
158 g_type_class_add_private(g_object_class, sizeof(TaPlugAccessiblePrivate));
161 static void ta_plug_accessible_init(TaPlugAccessible *plug)
165 AtkObject *ta_plug_accessible_new ()
167 return ATK_OBJECT (g_object_new(TA_TYPE_PLUG_ACCESSIBLE, 0));