Added boolean return types for methods in Component, Selection,
[platform/core/uifw/at-spi2-atk.git] / libspi / editabletext.c
1 /*
2  * AT-SPI - Assistive Technology Service Provider Interface
3  * (Gnome Accessibility Project; http://developer.gnome.org/projects/gap)
4  *
5  * Copyright 2001 Sun Microsystems Inc.
6  *
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.
11  *
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.
16  *
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.
21  */
22
23 /* editabletext.c : implements the EditableText interface */
24
25 #include <config.h>
26 #include <stdio.h>
27 #include <atk/atkeditabletext.h>
28 #include <libspi/editabletext.h>
29
30 /* Static function declarations */
31
32 static void
33 spi_editable_text_class_init (SpiEditableTextClass *klass);
34 static void
35 spi_editable_text_init (SpiEditableText *editable);
36 static CORBA_boolean
37 impl_setAttributes (PortableServer_Servant servant,
38                        const CORBA_char * attributes,
39                        const CORBA_long startPos,
40                        const CORBA_long endPos,
41                        CORBA_Environment *ev);
42 static CORBA_boolean
43 impl_setTextContents (PortableServer_Servant servant,
44                       const CORBA_char * newContents,
45                       CORBA_Environment *ev);
46 static CORBA_boolean 
47 impl_insertText (PortableServer_Servant servant,
48                  const CORBA_long position,
49                  const CORBA_char * text,
50                  const CORBA_long length,
51                  CORBA_Environment *ev);
52 static void 
53 impl_copyText (PortableServer_Servant servant,
54                const CORBA_long startPos, const CORBA_long endPos,
55                CORBA_Environment *ev);
56 static CORBA_boolean
57 impl_cutText (PortableServer_Servant servant,
58               const CORBA_long startPos, const CORBA_long endPos,
59               CORBA_Environment *ev);
60 static CORBA_boolean
61 impl_deleteText (PortableServer_Servant servant,
62                  const CORBA_long startPos, const CORBA_long endPos,
63                  CORBA_Environment *ev);
64 static CORBA_boolean
65 impl_pasteText (PortableServer_Servant servant,
66                 const CORBA_long position, CORBA_Environment *ev);
67
68 BONOBO_TYPE_FUNC_FULL (SpiEditableText,
69                        Accessibility_EditableText,
70                        SPI_TEXT_TYPE,
71                        spi_editable_text);
72
73 static void
74 spi_editable_text_class_init (SpiEditableTextClass *klass)
75 {
76   POA_Accessibility_EditableText__epv *epv = &klass->epv;
77
78   /* Initialize epv table */
79
80   epv->setAttributes = impl_setAttributes;
81   epv->setTextContents = impl_setTextContents;
82   epv->insertText = impl_insertText;
83   epv->copyText = impl_copyText;
84   epv->cutText = impl_cutText;
85   epv->deleteText = impl_deleteText;
86   epv->pasteText = impl_pasteText;
87 }
88
89
90 static void
91 spi_editable_text_init (SpiEditableText *editable)
92 {
93 }
94
95
96 SpiEditableText *
97 spi_editable_text_interface_new (AtkObject *obj)
98 {
99   SpiEditableText *new_editable = g_object_new (
100           SPI_EDITABLE_TEXT_TYPE, NULL);
101
102   spi_text_construct (SPI_TEXT (new_editable), obj);
103
104   return new_editable;
105 }
106
107
108 static AtkEditableText *
109 get_editable_text_from_servant (PortableServer_Servant servant)
110 {
111   SpiBase *object = SPI_BASE (bonobo_object_from_servant (servant));
112
113   g_return_val_if_fail (object, NULL);
114   g_return_val_if_fail (ATK_IS_OBJECT(object->gobj), NULL);
115   return ATK_EDITABLE_TEXT (object->gobj);
116 }
117
118
119 static CORBA_boolean
120 impl_setAttributes (PortableServer_Servant servant,
121                     const CORBA_char * attributes,
122                     const CORBA_long startPos,
123                     const CORBA_long endPos,
124                     CORBA_Environment *ev)
125 {
126   AtkEditableText *editable = get_editable_text_from_servant (servant);
127
128   g_return_val_if_fail (editable != NULL, FALSE);
129
130   g_print ("setRunAttributes not implemented.\n");
131
132   return FALSE;
133 }
134
135
136 static CORBA_boolean
137 impl_setTextContents (PortableServer_Servant servant,
138                       const CORBA_char     *newContents,
139                       CORBA_Environment    *ev)
140 {
141   AtkEditableText *editable = get_editable_text_from_servant (servant);
142
143   g_return_val_if_fail (editable != NULL, FALSE);
144   
145   atk_editable_text_set_text_contents (editable, (gchar *) newContents);
146
147   return TRUE;
148 }
149
150
151 static CORBA_boolean
152 impl_insertText (PortableServer_Servant servant,
153                  const CORBA_long      position,
154                  const CORBA_char     *text,
155                  const CORBA_long      length,
156                  CORBA_Environment    *ev)
157 {
158   AtkEditableText *editable = get_editable_text_from_servant (servant);
159
160   g_return_val_if_fail (editable != NULL, FALSE);
161
162   atk_editable_text_insert_text (editable,
163                                  (gchar *) text,
164                                  (gint) length,
165                                  (gint *) &position);
166   return TRUE;
167 }
168
169
170 static void 
171 impl_copyText (PortableServer_Servant servant,
172                const CORBA_long startPos, const CORBA_long endPos,
173                CORBA_Environment *ev)
174 {
175   AtkEditableText *editable = get_editable_text_from_servant (servant);
176
177   g_return_if_fail (editable != NULL);
178
179   atk_editable_text_copy_text (editable, (gint) startPos, (gint) endPos);
180   
181 }
182
183
184 static CORBA_boolean
185 impl_cutText (PortableServer_Servant servant,
186               const CORBA_long startPos, const CORBA_long endPos,
187               CORBA_Environment *ev)
188 {
189   AtkEditableText *editable = get_editable_text_from_servant (servant);
190
191   g_return_val_if_fail (editable != NULL, FALSE);
192
193   atk_editable_text_cut_text (editable, startPos, endPos);
194
195   return TRUE;
196 }
197
198
199 static CORBA_boolean
200 impl_deleteText (PortableServer_Servant servant,
201                  const CORBA_long startPos, const CORBA_long endPos,
202                  CORBA_Environment *ev)
203 {
204   AtkEditableText *editable = get_editable_text_from_servant (servant);
205
206   g_return_val_if_fail (editable != NULL, FALSE);
207
208   atk_editable_text_delete_text (editable, startPos, endPos);
209
210   return TRUE;
211 }
212
213
214 static CORBA_boolean
215 impl_pasteText (PortableServer_Servant servant,
216                 const CORBA_long position, CORBA_Environment *ev)
217 {
218   AtkEditableText *editable = get_editable_text_from_servant (servant);
219
220   g_return_val_if_fail (editable != NULL, FALSE);
221
222   atk_editable_text_paste_text (editable, position);
223
224   return TRUE;
225 }