5477
|
1 /**
|
|
2 * @file request.c Request API
|
|
3 * @ingroup core
|
|
4 *
|
|
5 * gaim
|
|
6 *
|
|
7 * Copyright (C) 2003 Christian Hammond <chipx86@gnupdate.org>
|
|
8 *
|
|
9 * This program is free software; you can redistribute it and/or modify
|
|
10 * it under the terms of the GNU General Public License as published by
|
|
11 * the Free Software Foundation; either version 2 of the License, or
|
|
12 * (at your option) any later version.
|
|
13 *
|
|
14 * This program is distributed in the hope that it will be useful,
|
|
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
17 * GNU General Public License for more details.
|
|
18 *
|
|
19 * You should have received a copy of the GNU General Public License
|
|
20 * along with this program; if not, write to the Free Software
|
|
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
22 */
|
|
23 #include "request.h"
|
|
24
|
|
25 static GaimRequestUiOps *request_ui_ops = NULL;
|
|
26 static GList *handles = NULL;
|
|
27
|
|
28 typedef struct
|
|
29 {
|
|
30 GaimRequestType type;
|
|
31 void *handle;
|
|
32 void *ui_handle;
|
|
33
|
|
34 } GaimRequestInfo;
|
|
35
|
|
36
|
|
37 void *
|
|
38 gaim_request_input(void *handle, const char *title, const char *primary,
|
|
39 const char *secondary, const char *default_value,
|
|
40 const char *ok_text, GCallback ok_cb,
|
|
41 const char *cancel_text, GCallback cancel_cb,
|
|
42 void *user_data)
|
|
43 {
|
|
44 GaimRequestUiOps *ops;
|
|
45
|
|
46 g_return_val_if_fail(primary != NULL, NULL);
|
|
47 g_return_val_if_fail(ok_text != NULL, NULL);
|
|
48 g_return_val_if_fail(ok_cb != NULL, NULL);
|
|
49
|
|
50 ops = gaim_get_request_ui_ops();
|
|
51
|
|
52 if (ops != NULL && ops->request_input != NULL) {
|
|
53 GaimRequestInfo *info;
|
|
54
|
|
55 info = g_new0(GaimRequestInfo, 1);
|
|
56 info->type = GAIM_REQUEST_INPUT;
|
|
57 info->handle = handle;
|
|
58 info->ui_handle = ops->request_input(title, primary, secondary,
|
|
59 default_value, ok_text, ok_cb,
|
|
60 cancel_text, cancel_cb,
|
|
61 user_data);
|
|
62
|
|
63 handles = g_list_append(handles, info);
|
|
64
|
|
65 return info->ui_handle;
|
|
66 }
|
|
67
|
|
68 return NULL;
|
|
69 }
|
|
70
|
|
71 void *
|
|
72 gaim_request_choice(void *handle, const char *title, const char *primary,
|
|
73 const char *secondary, unsigned int default_value,
|
|
74 const char *ok_text, GCallback ok_cb,
|
|
75 const char *cancel_text, GCallback cancel_cb,
|
|
76 void *user_data, const char *choice, ...)
|
|
77 {
|
|
78 void *ui_handle;
|
|
79 va_list args;
|
|
80
|
|
81 g_return_val_if_fail(primary != NULL, NULL);
|
|
82 g_return_val_if_fail(ok_text != NULL, NULL);
|
|
83 g_return_val_if_fail(ok_cb != NULL, NULL);
|
|
84 g_return_val_if_fail(choice != NULL, NULL);
|
|
85
|
|
86 va_start(args, choice);
|
|
87 ui_handle = gaim_request_choice_varg(handle, title, primary, secondary,
|
|
88 default_value, ok_text, ok_cb,
|
|
89 cancel_text, cancel_cb, user_data,
|
|
90 args);
|
|
91 va_end(args);
|
|
92
|
|
93 return ui_handle;
|
|
94 }
|
|
95
|
|
96 void *
|
|
97 gaim_request_choice_varg(void *handle, const char *title,
|
|
98 const char *primary, const char *secondary,
|
|
99 unsigned int default_value,
|
|
100 const char *ok_text, GCallback ok_cb,
|
|
101 const char *cancel_text, GCallback cancel_cb,
|
|
102 void *user_data, va_list choices)
|
|
103 {
|
|
104 GaimRequestUiOps *ops;
|
|
105
|
|
106 g_return_val_if_fail(primary != NULL, NULL);
|
|
107 g_return_val_if_fail(ok_text != NULL, NULL);
|
|
108 g_return_val_if_fail(ok_cb != NULL, NULL);
|
|
109
|
|
110 ops = gaim_get_request_ui_ops();
|
|
111
|
|
112 if (ops != NULL && ops->request_input != NULL) {
|
|
113 GaimRequestInfo *info;
|
|
114
|
|
115 info = g_new0(GaimRequestInfo, 1);
|
|
116 info->type = GAIM_REQUEST_CHOICE;
|
|
117 info->handle = handle;
|
|
118 info->ui_handle = ops->request_choice(title, primary, secondary,
|
|
119 default_value, ok_text, ok_cb,
|
|
120 cancel_text, cancel_cb,
|
|
121 user_data, choices);
|
|
122
|
|
123 handles = g_list_append(handles, info);
|
|
124
|
|
125 return info->ui_handle;
|
|
126 }
|
|
127
|
|
128 return NULL;
|
|
129 }
|
|
130
|
|
131 void *
|
|
132 gaim_request_action(void *handle, const char *title, const char *primary,
|
|
133 const char *secondary, unsigned int default_action,
|
|
134 void *user_data, const char *action, ...)
|
|
135 {
|
|
136 void *ui_handle;
|
|
137 va_list args;
|
|
138
|
|
139 g_return_val_if_fail(primary != NULL, NULL);
|
|
140 g_return_val_if_fail(action != NULL, NULL);
|
|
141
|
|
142 va_start(args, action);
|
|
143 ui_handle = gaim_request_action_varg(handle, title, primary, secondary,
|
|
144 default_action, user_data, args);
|
|
145 va_end(args);
|
|
146
|
|
147 return ui_handle;
|
|
148 }
|
|
149
|
|
150 void *
|
|
151 gaim_request_action_varg(void *handle, const char *title,
|
|
152 const char *primary, const char *secondary,
|
|
153 unsigned int default_action, void *user_data,
|
|
154 va_list actions)
|
|
155 {
|
|
156 GaimRequestUiOps *ops;
|
|
157
|
|
158 g_return_val_if_fail(primary != NULL, NULL);
|
|
159
|
|
160 ops = gaim_get_request_ui_ops();
|
|
161
|
|
162 if (ops != NULL && ops->request_input != NULL) {
|
|
163 GaimRequestInfo *info;
|
|
164
|
|
165 info = g_new0(GaimRequestInfo, 1);
|
|
166 info->type = GAIM_REQUEST_ACTION;
|
|
167 info->handle = handle;
|
|
168 info->ui_handle = ops->request_action(title, primary, secondary,
|
|
169 default_action, user_data,
|
|
170 actions);
|
|
171
|
|
172 handles = g_list_append(handles, info);
|
|
173
|
|
174 return info->ui_handle;
|
|
175 }
|
|
176
|
|
177 return NULL;
|
|
178 }
|
|
179
|
|
180 void
|
|
181 gaim_request_close(GaimRequestType type, void *ui_handle)
|
|
182 {
|
|
183 GList *l;
|
|
184 GaimRequestUiOps *ops;
|
|
185
|
|
186 g_return_if_fail(ui_handle != NULL);
|
|
187
|
|
188 ops = gaim_get_request_ui_ops();
|
|
189
|
|
190 for (l = handles; l != NULL; l = l->next) {
|
|
191 GaimRequestInfo *info = l->data;
|
|
192
|
|
193 if (info->ui_handle == ui_handle) {
|
|
194 handles = g_list_remove(handles, info);
|
|
195
|
|
196 if (ops != NULL && ops->close_request != NULL)
|
|
197 ops->close_request(info->type, ui_handle);
|
|
198
|
|
199 g_free(info);
|
|
200
|
|
201 break;
|
|
202 }
|
|
203 }
|
|
204 }
|
|
205
|
|
206 void
|
|
207 gaim_request_close_with_handle(void *handle)
|
|
208 {
|
|
209 GList *l, *l_next;
|
|
210 GaimRequestUiOps *ops;
|
|
211
|
|
212 g_return_if_fail(handle != NULL);
|
|
213
|
|
214 ops = gaim_get_request_ui_ops();
|
|
215
|
|
216 for (l = handles; l != NULL; l = l_next) {
|
|
217 GaimRequestInfo *info = l->data;
|
|
218
|
|
219 l_next = l->next;
|
|
220
|
|
221 if (info->handle == handle) {
|
|
222 handles = g_list_remove(handles, info);
|
|
223
|
|
224 if (ops != NULL && ops->close_request != NULL)
|
|
225 ops->close_request(info->type, info->ui_handle);
|
|
226
|
|
227 g_free(info);
|
|
228 }
|
|
229 }
|
|
230 }
|
|
231
|
|
232 void
|
|
233 gaim_set_request_ui_ops(GaimRequestUiOps *ops)
|
|
234 {
|
|
235 request_ui_ops = ops;
|
|
236 }
|
|
237
|
|
238 GaimRequestUiOps *
|
|
239 gaim_get_request_ui_ops(void)
|
|
240 {
|
|
241 return request_ui_ops;
|
|
242 }
|
|
243
|
|
244
|