2 * AT-SPI - Assistive Technology Service Provider Interface
3 * (Gnome Accessibility Project; http://developer.gnome.org/projects/gap)
5 * Copyright 2001 Sun Microsystems Inc.
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Library General Public
9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version.
12 * This library 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 * Library General Public License for more details.
17 * You should have received a copy of the GNU Library General Public
18 * License along with this library; if not, write to the
19 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 * Boston, MA 02111-1307, USA.
24 * component.c : bonobo wrapper for accessible component implementation
28 #include <bonobo/Bonobo.h>
33 * This pulls the CORBA definitions for the "Accessibility::Accessible" server
35 #include <libspi/Accessibility.h>
38 * This pulls the definition of the EditableText bonobo object
40 #include "editabletext.h"
43 * Static function declarations
47 editable_text_class_init (EditableTextClass *klass);
49 editable_text_init (EditableText *editable);
51 editable_text_finalize (GObject *obj);
53 impl_setAttributes (PortableServer_Servant _servant,
54 const CORBA_char * attributes,
55 const CORBA_long startPos,
56 const CORBA_long endPos,
57 CORBA_Environment * ev);
59 impl_setTextContents (PortableServer_Servant _servant,
60 const CORBA_char * newContents,
61 CORBA_Environment * ev);
63 impl_insertText (PortableServer_Servant _servant,
64 const CORBA_long position,
65 const CORBA_char * text,
66 const CORBA_long length,
67 CORBA_Environment * ev);
69 impl_copyText (PortableServer_Servant _servant,
70 const CORBA_long startPos, const CORBA_long endPos,
71 CORBA_Environment * ev);
73 impl_cutText (PortableServer_Servant _servant,
74 const CORBA_long startPos, const CORBA_long endPos,
75 CORBA_Environment * ev);
77 impl_deleteText (PortableServer_Servant _servant,
78 const CORBA_long startPos, const CORBA_long endPos,
79 CORBA_Environment * ev);
81 impl_pasteText (PortableServer_Servant _servant,
82 const CORBA_long position, CORBA_Environment * ev);
84 static GObjectClass *parent_class;
87 editable_text_get_type (void)
89 static GType type = 0;
92 static const GTypeInfo tinfo = {
93 sizeof (EditableTextClass),
95 (GBaseFinalizeFunc) NULL,
96 (GClassInitFunc) editable_text_class_init,
97 (GClassFinalizeFunc) NULL,
98 NULL, /* class data */
99 sizeof (EditableText),
101 (GInstanceInitFunc) editable_text_init,
102 NULL /* value table */
106 * Bonobo_type_unique auto-generates a load of
107 * CORBA structures for us. All derived types must
108 * use bonobo_type_unique.
110 type = bonobo_type_unique (
112 POA_Accessibility_EditableText__init,
114 G_STRUCT_OFFSET (EditableTextClass, epv),
116 "AccessibleEditableText");
123 editable_text_class_init (EditableTextClass *klass)
125 GObjectClass * object_class = (GObjectClass *) klass;
126 POA_Accessibility_EditableText__epv *epv = &klass->epv;
127 parent_class = g_type_interface_peek_parent (klass);
129 object_class->finalize = editable_text_finalize;
132 fprintf(stderr, "INITIALIZING editabletext class!\n");
134 fprintf (stderr, "EditableText: get-character-count is at %p\n",
135 ((TEXT_CLASS(klass))->epv._get_characterCount));
137 /* Initialize epv table */
139 epv->setAttributes = impl_setAttributes;
140 epv->setTextContents = impl_setTextContents;
141 epv->insertText = impl_insertText;
142 epv->copyText = impl_copyText;
143 epv->cutText = impl_cutText;
144 epv->deleteText = impl_deleteText;
145 epv->pasteText = impl_pasteText;
149 editable_text_init (EditableText *editable)
154 editable_text_finalize (GObject *obj)
156 parent_class->finalize (obj);
160 editable_text_interface_new (AtkObject *obj)
162 EditableText *new_editable =
163 EDITABLE_TEXT(g_object_new (EDITABLE_TEXT_TYPE, NULL));
164 (TEXT (new_editable))->atko = obj;
172 impl_setAttributes (PortableServer_Servant _servant,
173 const CORBA_char * attributes,
174 const CORBA_long startPos,
175 const CORBA_long endPos,
176 CORBA_Environment * ev)
178 EditableText *editable;
180 obj = (bonobo_object_from_servant (_servant));
181 g_return_if_fail (IS_EDITABLE_TEXT (obj));
182 editable = EDITABLE_TEXT(bonobo_object_from_servant (_servant));
183 g_return_if_fail (ATK_IS_EDITABLE_TEXT ( (TEXT (obj))->atko));
185 g_print ("setRunAttributes not implemented.\n");
191 impl_setTextContents (PortableServer_Servant _servant,
192 const CORBA_char * newContents,
193 CORBA_Environment * ev)
195 EditableText *editable;
197 obj = (bonobo_object_from_servant (_servant));
198 g_return_if_fail (IS_EDITABLE_TEXT (obj));
199 editable = EDITABLE_TEXT(bonobo_object_from_servant (_servant));
200 g_return_if_fail (ATK_IS_EDITABLE_TEXT ( (TEXT (obj))->atko));
202 atk_editable_text_set_text_contents (ATK_EDITABLE_TEXT( TEXT (editable)->atko),
203 (gchar *) newContents);
209 impl_insertText (PortableServer_Servant _servant,
210 const CORBA_long position,
211 const CORBA_char * text,
212 const CORBA_long length,
213 CORBA_Environment * ev)
215 EditableText *editable;
217 obj = (bonobo_object_from_servant (_servant));
218 g_return_if_fail (IS_EDITABLE_TEXT (obj));
219 editable = EDITABLE_TEXT(bonobo_object_from_servant (_servant));
220 g_return_if_fail (ATK_IS_EDITABLE_TEXT ( (TEXT (obj))->atko));
222 atk_editable_text_insert_text (ATK_EDITABLE_TEXT( TEXT (editable)->atko),
230 impl_copyText (PortableServer_Servant _servant,
231 const CORBA_long startPos, const CORBA_long endPos,
232 CORBA_Environment * ev)
234 EditableText *editable;
236 obj = (bonobo_object_from_servant (_servant));
237 g_return_if_fail (IS_EDITABLE_TEXT (obj));
238 editable = EDITABLE_TEXT(bonobo_object_from_servant (_servant));
239 g_return_if_fail (ATK_IS_EDITABLE_TEXT ( (TEXT (obj))->atko));
241 atk_editable_text_copy_text (ATK_EDITABLE_TEXT( TEXT(editable)->atko),
242 (gint) startPos, (gint) endPos);
248 impl_cutText (PortableServer_Servant _servant,
249 const CORBA_long startPos, const CORBA_long endPos,
250 CORBA_Environment * ev)
252 EditableText *editable;
254 obj = (bonobo_object_from_servant (_servant));
255 g_return_if_fail (IS_EDITABLE_TEXT (obj));
256 editable = EDITABLE_TEXT(bonobo_object_from_servant (_servant));
257 g_return_if_fail (ATK_IS_EDITABLE_TEXT ( (TEXT (obj))->atko));
259 atk_editable_text_cut_text (ATK_EDITABLE_TEXT(TEXT (editable)->atko),
260 (gint) startPos, (gint) endPos);
267 impl_deleteText (PortableServer_Servant _servant,
268 const CORBA_long startPos, const CORBA_long endPos,
269 CORBA_Environment * ev)
271 EditableText *editable;
273 obj = (bonobo_object_from_servant (_servant));
274 g_return_if_fail (IS_EDITABLE_TEXT (obj));
275 editable = EDITABLE_TEXT(bonobo_object_from_servant (_servant));
276 g_return_if_fail (ATK_IS_EDITABLE_TEXT ( (TEXT (obj))->atko));
278 atk_editable_text_delete_text (ATK_EDITABLE_TEXT( TEXT(editable)->atko),
279 (gint) startPos, (gint) endPos);
284 impl_pasteText (PortableServer_Servant _servant,
285 const CORBA_long position, CORBA_Environment * ev)
287 EditableText *editable;
289 obj = (bonobo_object_from_servant (_servant));
290 g_return_if_fail (IS_EDITABLE_TEXT (obj));
291 editable = EDITABLE_TEXT(bonobo_object_from_servant (_servant));
292 g_return_if_fail (ATK_IS_EDITABLE_TEXT ( (TEXT (obj))->atko));
294 atk_editable_text_paste_text (ATK_EDITABLE_TEXT( TEXT(editable)->atko), position);