Initial revision
[platform/core/uifw/at-spi2-atk.git] / libspi / accessible.c
1 /*
2  * accessible.c: test for accessibility implementation
3  *
4  */
5 #include <config.h>
6 #include <bonobo/Bonobo.h>
7
8 #include <stdio.h>
9
10 /*
11  * This pulls the CORBA definitions for the "Accessibility::Accessible" server
12  */
13 #include "Accessible.h"
14
15 /*
16  * This pulls the definition for the BonoboObject (Gtk Type)
17  */
18 #include "accessible.h"
19
20 /*
21  * Our parent Gtk object type
22  */
23 #define PARENT_TYPE BONOBO_X_OBJECT_TYPE
24
25 /*
26  * A pointer to our parent object class
27  */
28 static GObjectClass *accessible_parent_class;
29
30 /*
31  * Implemented GObject::finalize
32  */
33 static void
34 accessible_object_finalize (GObject *object)
35 {
36         Accessible *accessible = ACCESSIBLE (object);
37
38         printf("accessible_object_finalize called\n");
39         g_free (accessible->atko);
40
41         printf("atko freed, calling parent finalize\n");
42         accessible_parent_class->finalize (object);
43 }
44
45 /*
46  * CORBA Accessibility::Accessible::get_name method implementation
47  */
48 static CORBA_char *
49 impl_accessibility_accessible_get_name (PortableServer_Servant servant,
50                                         CORBA_Environment     *ev)
51 {
52   CORBA_char * retval;
53   Accessible *accessible = ACCESSIBLE (bonobo_object_from_servant (servant));
54   retval = CORBA_string_dup (atk_object_get_name (accessible->atko));
55   fprintf (stderr, "Accessible get_name called: %s\n", retval);
56   return retval;
57 }
58
59 /*
60  * CORBA Accessibility::Accessible::set_name method implementation
61  */
62 static void
63 impl_accessibility_accessible_set_name (PortableServer_Servant servant,
64                                         const CORBA_char      *name,
65                                         CORBA_Environment     *ev)
66 {
67   Accessible *accessible = ACCESSIBLE (bonobo_object_from_servant (servant));
68   atk_object_set_name (accessible->atko, name);
69   printf ("Accessible set_name called: %s\n", name);
70 }
71
72 static void
73 accessible_class_init (AccessibleClass *klass)
74 {
75         GObjectClass * object_class = (GObjectClass *) klass;
76         POA_Accessibility_Accessible__epv *epv = &klass->epv;
77         accessible_parent_class = g_type_class_ref (BONOBO_X_OBJECT_TYPE);
78         /*accessible_parent_class = g_type_class_peek_parent (klass);*/
79
80         object_class->finalize = accessible_object_finalize;
81
82         epv->_get_name = impl_accessibility_accessible_get_name;
83         epv->_set_name = impl_accessibility_accessible_set_name;
84 }
85
86 static void
87 accessible_init (Accessible *accessible)
88 {
89 }
90
91 GType
92 accessible_get_type (void)
93 {
94         static GType type = 0;
95
96         if (!type) {
97                 static const GTypeInfo tinfo = {
98                         sizeof (AccessibleClass),
99                         (GBaseInitFunc) NULL,
100                         (GBaseFinalizeFunc) NULL,
101                         (GClassInitFunc) accessible_class_init,
102                         (GClassFinalizeFunc) NULL,
103                         NULL, /* class data */
104                         sizeof (Accessible),
105                         0, /* n preallocs */
106                         (GInstanceInitFunc) accessible_init,
107                         NULL /* value table */
108                 };
109                 /*
110                  *   Here we use bonobo_x_type_unique instead of
111                  * gtk_type_unique, this auto-generates a load of
112                  * CORBA structures for us. All derived types must
113                  * use bonobo_x_type_unique.
114                  */
115                 type = bonobo_x_type_unique (
116                         PARENT_TYPE,
117                         POA_Accessibility_Accessible__init,
118                         NULL,
119                         G_STRUCT_OFFSET (AccessibleClass, epv),
120                         &tinfo,
121                         "Accessible");
122         }
123
124         return type;
125 }
126
127 Accessible *
128 accessible_new (AtkObject *o)
129 {
130     Accessible *retval =
131                ACCESSIBLE (g_object_new (accessible_get_type (), NULL));
132     retval->atko = ATK_OBJECT (o);
133     return retval;
134 }