Remove all instances of g_return_if_fail (foo != NULL); that are
[platform/upstream/atk.git] / atk / atkeditabletext.c
1 /* ATK - The Accessibility Toolkit for GTK+
2  * Copyright 2001 Sun Microsystems Inc.
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Library General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public
15  * License along with this library; if not, write to the
16  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17  * Boston, MA 02111-1307, USA.
18  */
19
20 #include "atkeditabletext.h"
21
22
23 struct _AtkEditableTextIfaceClass
24 {
25   GObjectClass parent;
26 };
27
28 typedef struct _AtkEditableTextIfaceClass AtkEditableTextIfaceClass;
29
30 GType
31 atk_editable_text_get_type ()
32 {
33   static GType type = 0;
34
35   if (!type) {
36     static const GTypeInfo tinfo =
37     {
38       sizeof (AtkEditableTextIface),
39       (GBaseInitFunc) NULL,
40       (GBaseFinalizeFunc) NULL,
41
42     };
43
44     type = g_type_register_static (G_TYPE_INTERFACE, "AtkEditableText", &tinfo, 0);
45   }
46
47   return type;
48 }
49
50 /**
51  *atk_editable_text_set_run_attributes:
52  *@text: an #AtkEditableText
53  *@attrib_set: an #AtkAttributeSet
54  *@start_offset: start of range in which to set attributes
55  *@end_offset: end of range in which to set attributes
56  *
57  *Sets the attributes for a specified range. See the ATK_ATTRIBUTE
58  *macros (such as #ATK_ATTRIBUTE_LEFT_MARGIN) for examples of attributes 
59  *that can be set. Note that other attributes that do not have corresponding
60  *ATK_ATTRIBUTE macros may also be set for certain text widgets.
61  *
62  *Returns: %TRUE if attributes successfully set for the specified
63  *range, otherwise %FALSE
64  **/
65 gboolean
66 atk_editable_text_set_run_attributes (AtkEditableText *text,
67                                       AtkAttributeSet *attrib_set,
68                                       gint start_offset,
69                                       gint end_offset)
70 {
71   AtkEditableTextIface *iface;
72
73   g_return_val_if_fail (ATK_IS_EDITABLE_TEXT (text), FALSE);
74
75   iface = ATK_EDITABLE_TEXT_GET_IFACE (text);
76
77   if (iface->set_run_attributes)
78     {
79       return (*(iface->set_run_attributes)) (text, attrib_set, start_offset, end_offset);
80     }
81   else
82     {
83       return FALSE;
84     }
85 }
86
87
88 /**
89  * atk_editable_text_set_text_contents:
90  * @text: an #AtkEditableText
91  * @string: string to set for text contents of @text
92  *
93  * Set text contents of @text.
94  **/
95 void 
96 atk_editable_text_set_text_contents (AtkEditableText  *text,
97                                      const gchar      *string)
98 {
99   AtkEditableTextIface *iface;
100
101   g_return_if_fail (ATK_IS_EDITABLE_TEXT (text));
102
103   iface = ATK_EDITABLE_TEXT_GET_IFACE (text);
104
105   if (iface->set_text_contents)
106     (*(iface->set_text_contents)) (text, string);
107 }
108
109 /**
110  * atk_editable_text_insert_text:
111  * @text: an #AtkEditableText
112  * @string: the text to insert
113  * @length: the length of text to insert, in bytes
114  * @position: The caller initializes this to 
115  * the position at which to insert the text. After the call it
116  * points at the position after the newly inserted text.
117  *
118  * Insert text at a given position.
119  **/
120 void 
121 atk_editable_text_insert_text (AtkEditableText  *text,
122                                const gchar      *string,
123                                gint             length,
124                                gint             *position)
125 {
126   AtkEditableTextIface *iface;
127
128   g_return_if_fail (ATK_IS_EDITABLE_TEXT (text));
129
130   iface = ATK_EDITABLE_TEXT_GET_IFACE (text);
131
132   if (iface->insert_text)
133     (*(iface->insert_text)) (text, string, length, position);
134 }
135
136 /**
137  * atk_editable_text_copy_text:
138  * @text: an #AtkEditableText
139  * @start_pos: start position
140  * @end_pos: end position
141  *
142  * Copy text from @start_pos up to, but not including @end_pos 
143  * to the clipboard.
144  **/
145 void 
146 atk_editable_text_copy_text (AtkEditableText  *text,
147                              gint             start_pos,
148                              gint             end_pos)
149 {
150   AtkEditableTextIface *iface;
151
152   g_return_if_fail (ATK_IS_EDITABLE_TEXT (text));
153
154   iface = ATK_EDITABLE_TEXT_GET_IFACE (text);
155
156   if (iface->copy_text)
157     (*(iface->copy_text)) (text, start_pos, end_pos);
158 }
159
160 /**
161  * atk_editable_text_cut_text:
162  * @text: an #AtkEditableText
163  * @start_pos: start position
164  * @end_pos: end position
165  *
166  * Copy text from @start_pos up to, but not including @end_pos
167  * to the clipboard and then delete from the widget.
168  **/
169 void 
170 atk_editable_text_cut_text  (AtkEditableText  *text,
171                              gint             start_pos,
172                              gint             end_pos)
173 {
174   AtkEditableTextIface *iface;
175
176   g_return_if_fail (ATK_IS_EDITABLE_TEXT (text));
177
178   iface = ATK_EDITABLE_TEXT_GET_IFACE (text);
179
180   if (iface->cut_text)
181     (*(iface->cut_text)) (text, start_pos, end_pos);
182 }
183
184 /**
185  * atk_editable_text_delete_text:
186  * @text: an #AtkEditableText
187  * @start_pos: start position
188  * @end_pos: end position
189  *
190  * Delete text @start_pos up to, but not including @end_pos.
191  **/
192 void 
193 atk_editable_text_delete_text (AtkEditableText  *text,
194                                gint             start_pos,
195                                gint             end_pos)
196 {
197   AtkEditableTextIface *iface;
198
199   g_return_if_fail (ATK_IS_EDITABLE_TEXT (text));
200
201   iface = ATK_EDITABLE_TEXT_GET_IFACE (text);
202
203   if (iface->delete_text)
204     (*(iface->delete_text)) (text, start_pos, end_pos);
205 }
206
207 /**
208  * atk_editable_text_paste_text:
209  * @text: an #AtkEditableText
210  * @position: position to paste
211  *
212  * Paste text from clipboard to specified @position.
213  **/
214 void 
215 atk_editable_text_paste_text (AtkEditableText  *text,
216                               gint             position)
217 {
218   AtkEditableTextIface *iface;
219
220   g_return_if_fail (ATK_IS_EDITABLE_TEXT (text));
221
222   iface = ATK_EDITABLE_TEXT_GET_IFACE (text);
223
224   if (iface->paste_text)
225     (*(iface->paste_text)) (text, position);
226 }