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 Text bonobo object
43 * Static function declarations
47 text_class_init (TextClass *klass);
49 text_init (Text *text);
51 text_finalize (GObject *obj);
53 impl_getText (PortableServer_Servant _servant,
54 const CORBA_long startOffset,
55 const CORBA_long endOffset,
56 CORBA_Environment * ev);
58 impl_getTextAfterOffset (PortableServer_Servant _servant,
59 const CORBA_long offset,
61 Accessibility_TEXT_BOUNDARY_TYPE
62 type, CORBA_long * startOffset,
63 CORBA_long * endOffset,
64 CORBA_Environment * ev);
66 impl_getTextAtOffset (PortableServer_Servant _servant,
67 const CORBA_long offset,
68 const Accessibility_TEXT_BOUNDARY_TYPE
69 type, CORBA_long * startOffset,
70 CORBA_long * endOffset,
71 CORBA_Environment * ev);
73 impl_getCharacterAtOffset (PortableServer_Servant _servant,
74 const CORBA_long offset,
75 CORBA_Environment * ev);
77 impl_getTextBeforeOffset (PortableServer_Servant _servant,
78 const CORBA_long offset,
80 Accessibility_TEXT_BOUNDARY_TYPE
81 type, CORBA_long * startOffset,
82 CORBA_long * endOffset,
83 CORBA_Environment * ev);
85 impl__get_caretOffset (PortableServer_Servant _servant,
86 CORBA_Environment * ev);
88 impl_getAttributes (PortableServer_Servant _servant,
89 const CORBA_long offset,
90 CORBA_long * startOffset,
91 CORBA_long * endOffset,
92 CORBA_Environment * ev);
94 impl_getCharacterExtents (PortableServer_Servant _servant,
95 const CORBA_long offset, CORBA_long * x,
96 CORBA_long * y, CORBA_long * width,
98 const CORBA_short coordType,
99 CORBA_Environment * ev);
101 impl__get_characterCount (PortableServer_Servant _servant,
102 CORBA_Environment * ev);
104 impl_getOffsetAtPoint (PortableServer_Servant _servant,
105 const CORBA_long x, const CORBA_long y,
106 const CORBA_short coordType,
107 CORBA_Environment * ev);
109 impl_getNSelections (PortableServer_Servant _servant,
110 CORBA_Environment * ev);
112 impl_getSelection (PortableServer_Servant _servant,
113 const CORBA_long selectionNum,
114 CORBA_long * startOffset, CORBA_long * endOffset,
115 CORBA_Environment * ev);
117 impl_addSelection (PortableServer_Servant _servant,
118 const CORBA_long startOffset,
119 const CORBA_long endOffset,
120 CORBA_Environment * ev);
122 impl_removeSelection (PortableServer_Servant _servant,
123 const CORBA_long selectionNum,
124 CORBA_Environment * ev);
126 impl_setSelection (PortableServer_Servant _servant,
127 const CORBA_long selectionNum,
128 const CORBA_long startOffset,
129 const CORBA_long endOffset,
130 CORBA_Environment * ev);
132 impl_setCaretOffset (PortableServer_Servant _servant,
133 const CORBA_long value,
134 CORBA_Environment * ev);
138 static GObjectClass *parent_class;
143 static GType type = 0;
146 static const GTypeInfo tinfo = {
148 (GBaseInitFunc) NULL,
149 (GBaseFinalizeFunc) NULL,
150 (GClassInitFunc) text_class_init,
151 (GClassFinalizeFunc) NULL,
152 NULL, /* class data */
155 (GInstanceInitFunc) text_init,
156 NULL /* value table */
160 * Bonobo_type_unique auto-generates a load of
161 * CORBA structures for us. All derived types must
162 * use bonobo_type_unique.
164 type = bonobo_type_unique (
166 POA_Accessibility_Text__init,
168 G_STRUCT_OFFSET (TextClass, epv),
177 text_class_init (TextClass *klass)
179 GObjectClass * object_class = (GObjectClass *) klass;
180 POA_Accessibility_Text__epv *epv = &klass->epv;
181 parent_class = g_type_class_peek_parent (klass);
183 object_class->finalize = text_finalize;
186 /* Initialize epv table */
188 epv->getText = impl_getText;
189 epv->getTextAfterOffset = impl_getTextAfterOffset;
190 epv->getCharacterAtOffset = impl_getCharacterAtOffset;
191 epv->getTextAtOffset = impl_getTextAtOffset;
192 epv->getTextBeforeOffset = impl_getTextBeforeOffset;
193 epv->_get_caretOffset = impl__get_caretOffset;
194 epv->getAttributes = impl_getAttributes;
195 epv->getCharacterExtents = impl_getCharacterExtents;
196 epv->_get_characterCount = impl__get_characterCount;
197 epv->getOffsetAtPoint = impl_getOffsetAtPoint;
198 epv->getNSelections = impl_getNSelections;
199 epv->getSelection = impl_getSelection;
200 epv->addSelection = impl_addSelection;
201 epv->removeSelection = impl_removeSelection;
202 epv->setSelection = impl_setSelection;
203 epv->setCaretOffset = impl_setCaretOffset;
207 text_init (Text *text)
212 text_finalize (GObject *obj)
214 Text *text = TEXT (obj);
215 text->atk_text = NULL;
216 parent_class->finalize (obj);
220 text_new (AtkText *text)
223 TEXT(g_object_new (TEXT_TYPE, NULL));
224 new_text->atk_text = text;
231 impl_getText (PortableServer_Servant _servant,
232 const CORBA_long startOffset,
233 const CORBA_long endOffset,
234 CORBA_Environment * ev)
236 Text *text = TEXT (bonobo_object_from_servant (_servant));
240 txt = atk_text_get_text (text->atk_text,
241 (gint) startOffset, (gint) endOffset);
242 rv = CORBA_string_dup (txt);
250 impl_getTextAfterOffset (PortableServer_Servant _servant,
251 const CORBA_long offset,
253 Accessibility_TEXT_BOUNDARY_TYPE
254 type, CORBA_long * startOffset,
255 CORBA_long * endOffset,
256 CORBA_Environment * ev)
258 Text *text = TEXT (bonobo_object_from_servant (_servant));
262 txt = atk_text_get_text_after_offset (text->atk_text,
263 (gint) offset, (AtkTextBoundary) type,
264 (gint *) startOffset, (gint *) endOffset);
265 rv = CORBA_string_dup (txt);
273 impl_getTextAtOffset (PortableServer_Servant _servant,
274 const CORBA_long offset,
275 const Accessibility_TEXT_BOUNDARY_TYPE
276 type, CORBA_long * startOffset,
277 CORBA_long * endOffset,
278 CORBA_Environment * ev)
280 Text *text = TEXT (bonobo_object_from_servant (_servant));
284 txt = atk_text_get_text_at_offset (text->atk_text,
285 (gint) offset, (AtkTextBoundary) type,
286 (gint *) startOffset, (gint *) endOffset);
287 rv = CORBA_string_dup (txt);
295 impl_getCharacterAtOffset (PortableServer_Servant _servant,
296 const CORBA_long offset,
297 CORBA_Environment * ev)
299 Text *text = TEXT (bonobo_object_from_servant (_servant));
301 atk_text_get_character_at_offset (text->atk_text, (gint) offset);
306 impl_getTextBeforeOffset (PortableServer_Servant _servant,
307 const CORBA_long offset,
309 Accessibility_TEXT_BOUNDARY_TYPE
310 type, CORBA_long * startOffset,
311 CORBA_long * endOffset,
312 CORBA_Environment * ev)
314 Text *text = TEXT (bonobo_object_from_servant (_servant));
318 txt = atk_text_get_text_before_offset (text->atk_text,
319 (gint) offset, (AtkTextBoundary) type,
320 (gint *) startOffset, (gint *) endOffset);
321 rv = CORBA_string_dup (txt);
327 impl__get_caretOffset (PortableServer_Servant _servant,
328 CORBA_Environment * ev)
330 Text *text = TEXT (bonobo_object_from_servant (_servant));
332 atk_text_get_caret_offset (text->atk_text);
338 impl_getAttributes (PortableServer_Servant _servant,
339 const CORBA_long offset,
340 CORBA_long * startOffset,
341 CORBA_long * endOffset,
342 CORBA_Environment * ev)
344 Text *text = TEXT (bonobo_object_from_servant (_servant));
345 g_print ("getAttributes not implemented.\n");
351 impl_getCharacterExtents (PortableServer_Servant _servant,
352 const CORBA_long offset, CORBA_long * x,
353 CORBA_long * y, CORBA_long * width,
355 const CORBA_short coordType,
356 CORBA_Environment * ev)
358 Text *text = TEXT (bonobo_object_from_servant (_servant));
359 atk_text_get_character_extents (text->atk_text, (gint) offset,
360 (gint *) x, (gint *) y, (gint *) width, (gint *) height,
361 (AtkCoordType) coordType);
367 impl__get_characterCount (PortableServer_Servant _servant,
368 CORBA_Environment * ev)
370 Text *text = TEXT (bonobo_object_from_servant (_servant));
372 atk_text_get_character_count (text->atk_text);
378 impl_getOffsetAtPoint (PortableServer_Servant _servant,
379 const CORBA_long x, const CORBA_long y,
380 const CORBA_short coordType,
381 CORBA_Environment * ev)
383 Text *text = TEXT (bonobo_object_from_servant (_servant));
385 atk_text_get_offset_at_point (text->atk_text,
386 (gint) x, (gint) y, (AtkCoordType) coordType);
392 impl_getNSelections (PortableServer_Servant _servant,
393 CORBA_Environment * ev)
395 Text *text = TEXT (bonobo_object_from_servant (_servant));
397 atk_text_get_n_selections (text->atk_text);
403 impl_getSelection (PortableServer_Servant _servant,
404 const CORBA_long selectionNum,
405 CORBA_long * startOffset, CORBA_long * endOffset,
406 CORBA_Environment * ev)
408 Text *text = TEXT (bonobo_object_from_servant (_servant));
409 atk_text_get_selection (text->atk_text, (gint) selectionNum,
410 (gint *) startOffset, (gint *) endOffset);
416 impl_addSelection (PortableServer_Servant _servant,
417 const CORBA_long startOffset,
418 const CORBA_long endOffset,
419 CORBA_Environment * ev)
421 Text *text = TEXT (bonobo_object_from_servant (_servant));
422 return (CORBA_boolean)
423 atk_text_add_selection (text->atk_text,
424 (gint) startOffset, (gint) endOffset);
430 impl_removeSelection (PortableServer_Servant _servant,
431 const CORBA_long selectionNum,
432 CORBA_Environment * ev)
434 Text *text = TEXT (bonobo_object_from_servant (_servant));
435 return (CORBA_boolean)
436 atk_text_remove_selection (text->atk_text, (gint) selectionNum);
442 impl_setSelection (PortableServer_Servant _servant,
443 const CORBA_long selectionNum,
444 const CORBA_long startOffset,
445 const CORBA_long endOffset,
446 CORBA_Environment * ev)
448 Text *text = TEXT (bonobo_object_from_servant (_servant));
449 return (CORBA_boolean)
450 atk_text_set_selection (text->atk_text,
451 (gint) selectionNum, (gint) startOffset, (gint) endOffset);
457 impl_setCaretOffset (PortableServer_Servant _servant,
458 const CORBA_long value,
459 CORBA_Environment * ev)
461 Text *text = TEXT (bonobo_object_from_servant (_servant));
462 return (CORBA_boolean)
463 atk_text_set_caret_offset (text->atk_text, (gint) value);
469 impl_getRowColAtOffset (PortableServer_Servant _servant,
470 const CORBA_long offset, CORBA_long * row,
471 CORBA_long * column, CORBA_Environment * ev)
473 Text *text = TEXT (bonobo_object_from_servant (_servant));