Mercurial > pidgin.yaz
annotate finch/gntrequest.c @ 18798:ed1def07d86e
Refactor the bonjour mdns implementation abstraction in preparation for the avahi implementation. Also fix alias assignment from the server to populate the server alias instead of the local alias.
author | Daniel Atallah <daniel.atallah@gmail.com> |
---|---|
date | Sun, 05 Aug 2007 02:44:53 +0000 |
parents | 3849776d0f71 |
children | b7fa8fa4de5b ae6b1f1c6686 315151da0dc6 |
rev | line source |
---|---|
15818 | 1 /** |
2 * @file gntrequest.c GNT Request API | |
16194
0f0832c13fcb
Rename the Doxygen group from gntui to finch and define the finch group
Richard Laager <rlaager@wiktel.com>
parents:
16164
diff
changeset
|
3 * @ingroup finch |
15818 | 4 * |
15871
66dff3dfdea6
Re-sed the copyright notices so they don't all talk about Purple.
Richard Laager <rlaager@wiktel.com>
parents:
15844
diff
changeset
|
5 * finch |
15818 | 6 * |
15871
66dff3dfdea6
Re-sed the copyright notices so they don't all talk about Purple.
Richard Laager <rlaager@wiktel.com>
parents:
15844
diff
changeset
|
7 * Finch is the legal property of its developers, whose names are too numerous |
15818 | 8 * to list here. Please refer to the COPYRIGHT file distributed with this |
9 * source distribution. | |
10 * | |
11 * This program is free software; you can redistribute it and/or modify | |
12 * it under the terms of the GNU General Public License as published by | |
13 * the Free Software Foundation; either version 2 of the License, or | |
14 * (at your option) any later version. | |
15 * | |
16 * This program is distributed in the hope that it will be useful, | |
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 * GNU General Public License for more details. | |
20 * | |
21 * You should have received a copy of the GNU General Public License | |
22 * along with this program; if not, write to the Free Software | |
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
24 */ | |
25 #include <gnt.h> | |
26 #include <gntbox.h> | |
27 #include <gntbutton.h> | |
28 #include <gntcheckbox.h> | |
29 #include <gntcombobox.h> | |
30 #include <gntentry.h> | |
15930
846a00760176
use file select dialog
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15926
diff
changeset
|
31 #include <gntfilesel.h> |
15818 | 32 #include <gntlabel.h> |
33 #include <gntline.h> | |
34 #include <gnttree.h> | |
35 | |
15823 | 36 #include "finch.h" |
15818 | 37 #include "gntrequest.h" |
16164
87019c619be0
Include header files, not source files. Bah.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15939
diff
changeset
|
38 #include "util.h" |
15818 | 39 |
40 typedef struct | |
41 { | |
42 void *user_data; | |
15930
846a00760176
use file select dialog
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15926
diff
changeset
|
43 GntWidget *dialog; |
15818 | 44 GCallback *cbs; |
18410
719f73b9a593
Remember the open/save file locations.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18347
diff
changeset
|
45 gboolean save; |
15823 | 46 } PurpleGntFileRequest; |
15818 | 47 |
48 static GntWidget * | |
49 setup_request_window(const char *title, const char *primary, | |
15823 | 50 const char *secondary, PurpleRequestType type) |
15818 | 51 { |
52 GntWidget *window; | |
53 | |
54 window = gnt_vbox_new(FALSE); | |
55 gnt_box_set_toplevel(GNT_BOX(window), TRUE); | |
56 gnt_box_set_title(GNT_BOX(window), title); | |
57 gnt_box_set_alignment(GNT_BOX(window), GNT_ALIGN_MID); | |
58 | |
59 if (primary) | |
60 gnt_box_add_widget(GNT_BOX(window), | |
61 gnt_label_new_with_format(primary, GNT_TEXT_FLAG_BOLD)); | |
62 if (secondary) | |
63 gnt_box_add_widget(GNT_BOX(window), gnt_label_new(secondary)); | |
64 | |
15823 | 65 g_signal_connect_swapped(G_OBJECT(window), "destroy", G_CALLBACK(purple_request_close), |
15818 | 66 GINT_TO_POINTER(type)); |
67 | |
68 return window; | |
69 } | |
70 | |
18333
f23a7736586f
Consider closing a request dialog equivalent to cancelling it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18222
diff
changeset
|
71 /** |
f23a7736586f
Consider closing a request dialog equivalent to cancelling it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18222
diff
changeset
|
72 * If the window is closed by the wm (ie, without triggering any of |
f23a7736586f
Consider closing a request dialog equivalent to cancelling it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18222
diff
changeset
|
73 * the buttons, then do some default callback. |
f23a7736586f
Consider closing a request dialog equivalent to cancelling it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18222
diff
changeset
|
74 */ |
f23a7736586f
Consider closing a request dialog equivalent to cancelling it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18222
diff
changeset
|
75 static void |
f23a7736586f
Consider closing a request dialog equivalent to cancelling it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18222
diff
changeset
|
76 setup_default_callback(GntWidget *window, gpointer default_cb, gpointer data) |
f23a7736586f
Consider closing a request dialog equivalent to cancelling it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18222
diff
changeset
|
77 { |
18347
a90f9a0b90c8
Update search-api to not crash. Searching for users in xmpp/oscar works now.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18333
diff
changeset
|
78 g_object_set_data(G_OBJECT(window), "default-callback", default_cb); |
18333
f23a7736586f
Consider closing a request dialog equivalent to cancelling it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18222
diff
changeset
|
79 g_signal_connect_swapped(G_OBJECT(window), "destroy", G_CALLBACK(default_cb), data); |
f23a7736586f
Consider closing a request dialog equivalent to cancelling it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18222
diff
changeset
|
80 } |
f23a7736586f
Consider closing a request dialog equivalent to cancelling it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18222
diff
changeset
|
81 |
f23a7736586f
Consider closing a request dialog equivalent to cancelling it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18222
diff
changeset
|
82 static void |
f23a7736586f
Consider closing a request dialog equivalent to cancelling it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18222
diff
changeset
|
83 action_performed(GntWidget *button, gpointer data) |
f23a7736586f
Consider closing a request dialog equivalent to cancelling it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18222
diff
changeset
|
84 { |
f23a7736586f
Consider closing a request dialog equivalent to cancelling it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18222
diff
changeset
|
85 g_signal_handlers_disconnect_matched(data, G_SIGNAL_MATCH_FUNC, |
18347
a90f9a0b90c8
Update search-api to not crash. Searching for users in xmpp/oscar works now.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18333
diff
changeset
|
86 0, 0, NULL, |
a90f9a0b90c8
Update search-api to not crash. Searching for users in xmpp/oscar works now.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18333
diff
changeset
|
87 g_object_get_data(data, "default-callback"), |
a90f9a0b90c8
Update search-api to not crash. Searching for users in xmpp/oscar works now.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18333
diff
changeset
|
88 NULL); |
18333
f23a7736586f
Consider closing a request dialog equivalent to cancelling it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18222
diff
changeset
|
89 } |
f23a7736586f
Consider closing a request dialog equivalent to cancelling it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18222
diff
changeset
|
90 |
f23a7736586f
Consider closing a request dialog equivalent to cancelling it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18222
diff
changeset
|
91 /** |
f23a7736586f
Consider closing a request dialog equivalent to cancelling it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18222
diff
changeset
|
92 * window: this is the window |
f23a7736586f
Consider closing a request dialog equivalent to cancelling it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18222
diff
changeset
|
93 * userdata: the userdata to pass to the primary callbacks |
f23a7736586f
Consider closing a request dialog equivalent to cancelling it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18222
diff
changeset
|
94 * cb: the callback |
f23a7736586f
Consider closing a request dialog equivalent to cancelling it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18222
diff
changeset
|
95 * data: data for the callback |
f23a7736586f
Consider closing a request dialog equivalent to cancelling it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18222
diff
changeset
|
96 * (text, primary-callback) pairs, ended by a NULL |
f23a7736586f
Consider closing a request dialog equivalent to cancelling it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18222
diff
changeset
|
97 */ |
15818 | 98 static GntWidget * |
18333
f23a7736586f
Consider closing a request dialog equivalent to cancelling it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18222
diff
changeset
|
99 setup_button_box(GntWidget *win, gpointer userdata, gpointer cb, gpointer data, ...) |
15818 | 100 { |
101 GntWidget *box, *button; | |
102 va_list list; | |
103 const char *text; | |
104 gpointer callback; | |
105 | |
106 box = gnt_hbox_new(FALSE); | |
107 | |
108 va_start(list, data); | |
109 | |
110 while ((text = va_arg(list, const char *))) | |
111 { | |
112 callback = va_arg(list, gpointer); | |
113 button = gnt_button_new(text); | |
114 gnt_box_add_widget(GNT_BOX(box), button); | |
115 g_object_set_data(G_OBJECT(button), "activate-callback", callback); | |
116 g_object_set_data(G_OBJECT(button), "activate-userdata", userdata); | |
18347
a90f9a0b90c8
Update search-api to not crash. Searching for users in xmpp/oscar works now.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18333
diff
changeset
|
117 g_signal_connect(G_OBJECT(button), "activate", G_CALLBACK(action_performed), win); |
15818 | 118 g_signal_connect(G_OBJECT(button), "activate", G_CALLBACK(cb), data); |
119 } | |
120 | |
121 va_end(list); | |
122 return box; | |
123 } | |
124 | |
125 static void | |
126 notify_input_cb(GntWidget *button, GntWidget *entry) | |
127 { | |
15823 | 128 PurpleRequestInputCb callback = g_object_get_data(G_OBJECT(button), "activate-callback"); |
15818 | 129 gpointer data = g_object_get_data(G_OBJECT(button), "activate-userdata"); |
130 const char *text = gnt_entry_get_text(GNT_ENTRY(entry)); | |
131 | |
132 if (callback) | |
133 callback(data, text); | |
134 | |
135 while (button->parent) | |
136 button = button->parent; | |
137 | |
15823 | 138 purple_request_close(PURPLE_REQUEST_INPUT, button); |
15818 | 139 } |
140 | |
141 static void * | |
142 finch_request_input(const char *title, const char *primary, | |
143 const char *secondary, const char *default_value, | |
144 gboolean multiline, gboolean masked, gchar *hint, | |
145 const char *ok_text, GCallback ok_cb, | |
146 const char *cancel_text, GCallback cancel_cb, | |
16442
08db93bbd798
Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evan.s@dreskin.net>
parents:
16310
diff
changeset
|
147 PurpleAccount *account, const char *who, PurpleConversation *conv, |
15818 | 148 void *user_data) |
149 { | |
150 GntWidget *window, *box, *entry; | |
151 | |
15823 | 152 window = setup_request_window(title, primary, secondary, PURPLE_REQUEST_INPUT); |
15818 | 153 |
154 entry = gnt_entry_new(default_value); | |
155 if (masked) | |
156 gnt_entry_set_masked(GNT_ENTRY(entry), TRUE); | |
157 gnt_box_add_widget(GNT_BOX(window), entry); | |
158 | |
18333
f23a7736586f
Consider closing a request dialog equivalent to cancelling it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18222
diff
changeset
|
159 box = setup_button_box(window, user_data, notify_input_cb, entry, |
15818 | 160 ok_text, ok_cb, cancel_text, cancel_cb, NULL); |
161 gnt_box_add_widget(GNT_BOX(window), box); | |
162 | |
18333
f23a7736586f
Consider closing a request dialog equivalent to cancelling it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18222
diff
changeset
|
163 setup_default_callback(window, cancel_cb, user_data); |
15818 | 164 gnt_widget_show(window); |
165 | |
166 return window; | |
167 } | |
168 | |
169 static void | |
15823 | 170 finch_close_request(PurpleRequestType type, gpointer ui_handle) |
15818 | 171 { |
172 GntWidget *widget = GNT_WIDGET(ui_handle); | |
16310
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
173 if (type == PURPLE_REQUEST_FIELDS) { |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
174 PurpleRequestFields *fields = g_object_get_data(G_OBJECT(widget), "fields"); |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
175 purple_request_fields_destroy(fields); |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
176 } |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
177 |
15818 | 178 while (widget->parent) |
179 widget = widget->parent; | |
180 gnt_widget_destroy(widget); | |
181 } | |
182 | |
183 static void | |
184 request_choice_cb(GntWidget *button, GntComboBox *combo) | |
185 { | |
15823 | 186 PurpleRequestChoiceCb callback = g_object_get_data(G_OBJECT(button), "activate-callback"); |
15818 | 187 gpointer data = g_object_get_data(G_OBJECT(button), "activate-userdata"); |
188 int choice = GPOINTER_TO_INT(gnt_combo_box_get_selected_data(GNT_COMBO_BOX(combo))) - 1; | |
189 | |
190 if (callback) | |
191 callback(data, choice); | |
192 | |
193 while (button->parent) | |
194 button = button->parent; | |
195 | |
15823 | 196 purple_request_close(PURPLE_REQUEST_INPUT, button); |
15818 | 197 } |
198 | |
199 static void * | |
200 finch_request_choice(const char *title, const char *primary, | |
201 const char *secondary, unsigned int default_value, | |
202 const char *ok_text, GCallback ok_cb, | |
203 const char *cancel_text, GCallback cancel_cb, | |
16442
08db93bbd798
Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evan.s@dreskin.net>
parents:
16310
diff
changeset
|
204 PurpleAccount *account, const char *who, PurpleConversation *conv, |
15818 | 205 void *user_data, va_list choices) |
206 { | |
207 GntWidget *window, *combo, *box; | |
208 const char *text; | |
209 int val; | |
210 | |
15823 | 211 window = setup_request_window(title, primary, secondary, PURPLE_REQUEST_CHOICE); |
15818 | 212 |
213 combo = gnt_combo_box_new(); | |
214 gnt_box_add_widget(GNT_BOX(window), combo); | |
215 while ((text = va_arg(choices, const char *))) | |
216 { | |
217 val = va_arg(choices, int); | |
218 gnt_combo_box_add_data(GNT_COMBO_BOX(combo), GINT_TO_POINTER(val + 1), text); | |
219 } | |
220 gnt_combo_box_set_selected(GNT_COMBO_BOX(combo), GINT_TO_POINTER(default_value + 1)); | |
221 | |
18333
f23a7736586f
Consider closing a request dialog equivalent to cancelling it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18222
diff
changeset
|
222 box = setup_button_box(window, user_data, request_choice_cb, combo, |
15818 | 223 ok_text, ok_cb, cancel_text, cancel_cb, NULL); |
224 gnt_box_add_widget(GNT_BOX(window), box); | |
225 | |
18333
f23a7736586f
Consider closing a request dialog equivalent to cancelling it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18222
diff
changeset
|
226 setup_default_callback(window, cancel_cb, user_data); |
15818 | 227 gnt_widget_show(window); |
228 | |
229 return window; | |
230 } | |
231 | |
232 static void | |
233 request_action_cb(GntWidget *button, GntWidget *window) | |
234 { | |
15823 | 235 PurpleRequestActionCb callback = g_object_get_data(G_OBJECT(button), "activate-callback"); |
15818 | 236 gpointer data = g_object_get_data(G_OBJECT(button), "activate-userdata"); |
237 int id = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(button), "activate-id")); | |
238 | |
239 if (callback) | |
240 callback(data, id); | |
241 | |
15823 | 242 purple_request_close(PURPLE_REQUEST_ACTION, window); |
15818 | 243 } |
244 | |
245 static void* | |
246 finch_request_action(const char *title, const char *primary, | |
247 const char *secondary, unsigned int default_value, | |
16442
08db93bbd798
Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evan.s@dreskin.net>
parents:
16310
diff
changeset
|
248 PurpleAccount *account, const char *who, PurpleConversation *conv, |
15818 | 249 void *user_data, size_t actioncount, |
250 va_list actions) | |
251 { | |
252 GntWidget *window, *box, *button; | |
253 int i; | |
254 | |
15823 | 255 window = setup_request_window(title, primary, secondary, PURPLE_REQUEST_ACTION); |
15818 | 256 |
257 box = gnt_hbox_new(FALSE); | |
258 gnt_box_add_widget(GNT_BOX(window), box); | |
259 for (i = 0; i < actioncount; i++) | |
260 { | |
261 const char *text = va_arg(actions, const char *); | |
15823 | 262 PurpleRequestActionCb callback = va_arg(actions, PurpleRequestActionCb); |
15818 | 263 |
264 button = gnt_button_new(text); | |
265 gnt_box_add_widget(GNT_BOX(box), button); | |
266 | |
267 g_object_set_data(G_OBJECT(button), "activate-callback", callback); | |
268 g_object_set_data(G_OBJECT(button), "activate-userdata", user_data); | |
269 g_object_set_data(G_OBJECT(button), "activate-id", GINT_TO_POINTER(i)); | |
270 g_signal_connect(G_OBJECT(button), "activate", G_CALLBACK(request_action_cb), window); | |
271 } | |
272 | |
273 gnt_widget_show(window); | |
274 | |
275 return window; | |
276 } | |
277 | |
278 static void | |
15823 | 279 request_fields_cb(GntWidget *button, PurpleRequestFields *fields) |
15818 | 280 { |
15823 | 281 PurpleRequestFieldsCb callback = g_object_get_data(G_OBJECT(button), "activate-callback"); |
15818 | 282 gpointer data = g_object_get_data(G_OBJECT(button), "activate-userdata"); |
283 GList *list; | |
284 | |
16310
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
285 /* Update the data of the fields. Pidgin does this differently. Instead of |
15818 | 286 * updating the fields at the end like here, it updates the appropriate field |
287 * instantly whenever a change is made. That allows it to make sure the | |
288 * 'required' fields are entered before the user can hit OK. It's not the case | |
289 * here, althought it can be done. I am not honouring the 'required' fields | |
290 * for the moment. */ | |
15823 | 291 for (list = purple_request_fields_get_groups(fields); list; list = list->next) |
15818 | 292 { |
15823 | 293 PurpleRequestFieldGroup *group = list->data; |
294 GList *fields = purple_request_field_group_get_fields(group); | |
15818 | 295 |
296 for (; fields ; fields = fields->next) | |
297 { | |
15823 | 298 PurpleRequestField *field = fields->data; |
299 PurpleRequestFieldType type = purple_request_field_get_type(field); | |
300 if (type == PURPLE_REQUEST_FIELD_BOOLEAN) | |
15818 | 301 { |
302 GntWidget *check = field->ui_data; | |
303 gboolean value = gnt_check_box_get_checked(GNT_CHECK_BOX(check)); | |
15823 | 304 purple_request_field_bool_set_value(field, value); |
15818 | 305 } |
15823 | 306 else if (type == PURPLE_REQUEST_FIELD_STRING) |
15818 | 307 { |
308 GntWidget *entry = field->ui_data; | |
309 const char *text = gnt_entry_get_text(GNT_ENTRY(entry)); | |
15823 | 310 purple_request_field_string_set_value(field, (text && *text) ? text : NULL); |
15818 | 311 } |
15823 | 312 else if (type == PURPLE_REQUEST_FIELD_INTEGER) |
15818 | 313 { |
314 GntWidget *entry = field->ui_data; | |
315 const char *text = gnt_entry_get_text(GNT_ENTRY(entry)); | |
316 int value = (text && *text) ? atoi(text) : 0; | |
15823 | 317 purple_request_field_int_set_value(field, value); |
15818 | 318 } |
15823 | 319 else if (type == PURPLE_REQUEST_FIELD_CHOICE) |
15818 | 320 { |
321 GntWidget *combo = field->ui_data; | |
322 int id; | |
323 id = GPOINTER_TO_INT(gnt_combo_box_get_selected_data(GNT_COMBO_BOX(combo))); | |
15823 | 324 purple_request_field_choice_set_value(field, id); |
15818 | 325 } |
15823 | 326 else if (type == PURPLE_REQUEST_FIELD_LIST) |
15818 | 327 { |
328 GList *list = NULL; | |
15823 | 329 if (purple_request_field_list_get_multi_select(field)) |
15818 | 330 { |
18118
ab6d2763b8d8
Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@wiktel.com>
parents:
18063
diff
changeset
|
331 GList *iter; |
15818 | 332 GntWidget *tree = field->ui_data; |
333 | |
15823 | 334 iter = purple_request_field_list_get_items(field); |
15818 | 335 for (; iter; iter = iter->next) |
336 { | |
337 const char *text = iter->data; | |
15823 | 338 gpointer key = purple_request_field_list_get_data(field, text); |
15818 | 339 if (gnt_tree_get_choice(GNT_TREE(tree), key)) |
340 list = g_list_prepend(list, key); | |
341 } | |
342 } | |
343 else | |
344 { | |
345 GntWidget *combo = field->ui_data; | |
346 gpointer data = gnt_combo_box_get_selected_data(GNT_COMBO_BOX(combo)); | |
347 list = g_list_append(list, data); | |
348 } | |
349 | |
15823 | 350 purple_request_field_list_set_selected(field, list); |
15818 | 351 g_list_free(list); |
352 } | |
15823 | 353 else if (type == PURPLE_REQUEST_FIELD_ACCOUNT) |
15818 | 354 { |
355 GntWidget *combo = field->ui_data; | |
15823 | 356 PurpleAccount *acc = gnt_combo_box_get_selected_data(GNT_COMBO_BOX(combo)); |
357 purple_request_field_account_set_value(field, acc); | |
15818 | 358 } |
359 } | |
360 } | |
361 | |
362 if (callback) | |
363 callback(data, fields); | |
364 | |
365 while (button->parent) | |
366 button = button->parent; | |
367 | |
15823 | 368 purple_request_close(PURPLE_REQUEST_FIELDS, button); |
15818 | 369 } |
370 | |
371 static void * | |
372 finch_request_fields(const char *title, const char *primary, | |
15823 | 373 const char *secondary, PurpleRequestFields *allfields, |
15818 | 374 const char *ok, GCallback ok_cb, |
375 const char *cancel, GCallback cancel_cb, | |
16442
08db93bbd798
Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evan.s@dreskin.net>
parents:
16310
diff
changeset
|
376 PurpleAccount *account, const char *who, PurpleConversation *conv, |
15818 | 377 void *userdata) |
378 { | |
379 GntWidget *window, *box; | |
380 GList *grlist; | |
381 | |
15823 | 382 window = setup_request_window(title, primary, secondary, PURPLE_REQUEST_FIELDS); |
15818 | 383 |
384 /* This is how it's going to work: the request-groups are going to be | |
385 * stacked vertically one after the other. A GntLine will be separating | |
386 * the groups. */ | |
387 box = gnt_vbox_new(FALSE); | |
388 gnt_box_set_pad(GNT_BOX(box), 0); | |
389 gnt_box_set_fill(GNT_BOX(box), TRUE); | |
15823 | 390 for (grlist = purple_request_fields_get_groups(allfields); grlist; grlist = grlist->next) |
15818 | 391 { |
15823 | 392 PurpleRequestFieldGroup *group = grlist->data; |
393 GList *fields = purple_request_field_group_get_fields(group); | |
15818 | 394 GntWidget *hbox; |
15823 | 395 const char *title = purple_request_field_group_get_title(group); |
15818 | 396 |
397 if (title) | |
398 gnt_box_add_widget(GNT_BOX(box), | |
399 gnt_label_new_with_format(title, GNT_TEXT_FLAG_BOLD)); | |
400 | |
401 for (; fields ; fields = fields->next) | |
402 { | |
403 /* XXX: Break each of the fields into a separate function? */ | |
15823 | 404 PurpleRequestField *field = fields->data; |
405 PurpleRequestFieldType type = purple_request_field_get_type(field); | |
406 const char *label = purple_request_field_get_label(field); | |
15818 | 407 |
408 hbox = gnt_hbox_new(TRUE); /* hrm */ | |
409 gnt_box_add_widget(GNT_BOX(box), hbox); | |
410 | |
15823 | 411 if (type != PURPLE_REQUEST_FIELD_BOOLEAN && label) |
15818 | 412 { |
413 GntWidget *l = gnt_label_new(label); | |
414 gnt_widget_set_size(l, 0, 1); | |
415 gnt_box_add_widget(GNT_BOX(hbox), l); | |
416 } | |
417 | |
15823 | 418 if (type == PURPLE_REQUEST_FIELD_BOOLEAN) |
15818 | 419 { |
420 GntWidget *check = gnt_check_box_new(label); | |
421 gnt_check_box_set_checked(GNT_CHECK_BOX(check), | |
15823 | 422 purple_request_field_bool_get_default_value(field)); |
15818 | 423 gnt_box_add_widget(GNT_BOX(hbox), check); |
424 field->ui_data = check; | |
425 } | |
15823 | 426 else if (type == PURPLE_REQUEST_FIELD_STRING) |
15818 | 427 { |
15830 | 428 const char *hint = purple_request_field_get_type_hint(field); |
15818 | 429 GntWidget *entry = gnt_entry_new( |
15823 | 430 purple_request_field_string_get_default_value(field)); |
15818 | 431 gnt_entry_set_masked(GNT_ENTRY(entry), |
15823 | 432 purple_request_field_string_is_masked(field)); |
18222
ef65d43190e5
Fix a few runtime warnings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18118
diff
changeset
|
433 if (hint && purple_str_has_prefix(hint, "screenname")) { |
15830 | 434 PurpleBlistNode *node = purple_blist_get_root(); |
435 gboolean offline = purple_str_has_suffix(hint, "all"); | |
436 for (; node; node = purple_blist_node_next(node, offline)) { | |
437 if (!PURPLE_BLIST_NODE_IS_BUDDY(node)) | |
15827
f59cfcce68a8
Add auto-complete support in request-entries that have 'screenname' hint set. This can be useful in, for example, 'send im' dialog etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15818
diff
changeset
|
438 continue; |
15830 | 439 gnt_entry_add_suggest(GNT_ENTRY(entry), purple_buddy_get_name((PurpleBuddy*)node)); |
15827
f59cfcce68a8
Add auto-complete support in request-entries that have 'screenname' hint set. This can be useful in, for example, 'send im' dialog etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15818
diff
changeset
|
440 } |
f59cfcce68a8
Add auto-complete support in request-entries that have 'screenname' hint set. This can be useful in, for example, 'send im' dialog etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15818
diff
changeset
|
441 gnt_entry_set_always_suggest(GNT_ENTRY(entry), TRUE); |
15844
e74c2488448b
Group autocomplete for buddy adding
Richard Nelson <wabz@pidgin.im>
parents:
15830
diff
changeset
|
442 } else if (hint && !strcmp(hint, "group")) { |
e74c2488448b
Group autocomplete for buddy adding
Richard Nelson <wabz@pidgin.im>
parents:
15830
diff
changeset
|
443 PurpleBlistNode *node; |
e74c2488448b
Group autocomplete for buddy adding
Richard Nelson <wabz@pidgin.im>
parents:
15830
diff
changeset
|
444 for (node = purple_blist_get_root(); node; node = node->next) { |
e74c2488448b
Group autocomplete for buddy adding
Richard Nelson <wabz@pidgin.im>
parents:
15830
diff
changeset
|
445 if (PURPLE_BLIST_NODE_IS_GROUP(node)) |
e74c2488448b
Group autocomplete for buddy adding
Richard Nelson <wabz@pidgin.im>
parents:
15830
diff
changeset
|
446 gnt_entry_add_suggest(GNT_ENTRY(entry), ((PurpleGroup *)node)->name); |
e74c2488448b
Group autocomplete for buddy adding
Richard Nelson <wabz@pidgin.im>
parents:
15830
diff
changeset
|
447 } |
15827
f59cfcce68a8
Add auto-complete support in request-entries that have 'screenname' hint set. This can be useful in, for example, 'send im' dialog etc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15818
diff
changeset
|
448 } |
15818 | 449 gnt_box_add_widget(GNT_BOX(hbox), entry); |
450 field->ui_data = entry; | |
451 } | |
15823 | 452 else if (type == PURPLE_REQUEST_FIELD_INTEGER) |
15818 | 453 { |
454 char str[256]; | |
15823 | 455 int val = purple_request_field_int_get_default_value(field); |
15818 | 456 GntWidget *entry; |
457 | |
458 snprintf(str, sizeof(str), "%d", val); | |
459 entry = gnt_entry_new(str); | |
460 gnt_entry_set_flag(GNT_ENTRY(entry), GNT_ENTRY_FLAG_INT); | |
461 gnt_box_add_widget(GNT_BOX(hbox), entry); | |
462 field->ui_data = entry; | |
463 } | |
15823 | 464 else if (type == PURPLE_REQUEST_FIELD_CHOICE) |
15818 | 465 { |
466 int id; | |
18118
ab6d2763b8d8
Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@wiktel.com>
parents:
18063
diff
changeset
|
467 GList *list; |
15818 | 468 GntWidget *combo = gnt_combo_box_new(); |
469 gnt_box_add_widget(GNT_BOX(hbox), combo); | |
470 field->ui_data = combo; | |
471 | |
15823 | 472 list = purple_request_field_choice_get_labels(field); |
15818 | 473 for (id = 1; list; list = list->next, id++) |
474 { | |
475 gnt_combo_box_add_data(GNT_COMBO_BOX(combo), | |
476 GINT_TO_POINTER(id), list->data); | |
477 } | |
478 gnt_combo_box_set_selected(GNT_COMBO_BOX(combo), | |
15823 | 479 GINT_TO_POINTER(purple_request_field_choice_get_default_value(field))); |
15818 | 480 } |
15823 | 481 else if (type == PURPLE_REQUEST_FIELD_LIST) |
15818 | 482 { |
18118
ab6d2763b8d8
Re-fix the DBus list handling code by killing const GList* / const GSList*
Richard Laager <rlaager@wiktel.com>
parents:
18063
diff
changeset
|
483 GList *list; |
15823 | 484 gboolean multi = purple_request_field_list_get_multi_select(field); |
15818 | 485 if (multi) |
486 { | |
487 GntWidget *tree = gnt_tree_new(); | |
488 gnt_box_add_widget(GNT_BOX(hbox), tree); | |
489 field->ui_data = tree; | |
490 | |
15823 | 491 list = purple_request_field_list_get_items(field); |
15818 | 492 for (; list; list = list->next) |
493 { | |
494 const char *text = list->data; | |
15823 | 495 gpointer key = purple_request_field_list_get_data(field, text); |
15818 | 496 gnt_tree_add_choice(GNT_TREE(tree), key, |
497 gnt_tree_create_row(GNT_TREE(tree), text), NULL, NULL); | |
15823 | 498 if (purple_request_field_list_is_selected(field, text)) |
15818 | 499 gnt_tree_set_choice(GNT_TREE(tree), key, TRUE); |
500 } | |
501 } | |
502 else | |
503 { | |
504 GntWidget *combo = gnt_combo_box_new(); | |
505 gnt_box_set_alignment(GNT_BOX(hbox), GNT_ALIGN_MID); | |
506 gnt_box_add_widget(GNT_BOX(hbox), combo); | |
507 field->ui_data = combo; | |
508 | |
15823 | 509 list = purple_request_field_list_get_items(field); |
15818 | 510 for (; list; list = list->next) |
511 { | |
512 const char *text = list->data; | |
15823 | 513 gpointer key = purple_request_field_list_get_data(field, text); |
15818 | 514 gnt_combo_box_add_data(GNT_COMBO_BOX(combo), key, text); |
15823 | 515 if (purple_request_field_list_is_selected(field, text)) |
15818 | 516 gnt_combo_box_set_selected(GNT_COMBO_BOX(combo), key); |
517 } | |
518 } | |
519 } | |
15823 | 520 else if (type == PURPLE_REQUEST_FIELD_ACCOUNT) |
15818 | 521 { |
522 gboolean all; | |
15823 | 523 PurpleAccount *def; |
18063
926ccb104da0
disapproval of revision '1411afd7660760db59966c3a9f18e2adab8eb27e'
Richard Laager <rlaager@wiktel.com>
parents:
18058
diff
changeset
|
524 GList *list; |
15818 | 525 GntWidget *combo = gnt_combo_box_new(); |
526 gnt_box_set_alignment(GNT_BOX(hbox), GNT_ALIGN_MID); | |
527 gnt_box_add_widget(GNT_BOX(hbox), combo); | |
528 field->ui_data = combo; | |
529 | |
15823 | 530 all = purple_request_field_account_get_show_all(field); |
16938
43abb4942a6d
Select the right account when adding a buddy after authorizing her.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16442
diff
changeset
|
531 def = purple_request_field_account_get_value(field); |
43abb4942a6d
Select the right account when adding a buddy after authorizing her.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16442
diff
changeset
|
532 if (!def) |
43abb4942a6d
Select the right account when adding a buddy after authorizing her.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16442
diff
changeset
|
533 def = purple_request_field_account_get_default_value(field); |
15818 | 534 |
535 if (all) | |
15823 | 536 list = purple_accounts_get_all(); |
15818 | 537 else |
15823 | 538 list = purple_connections_get_all(); |
15818 | 539 |
540 for (; list; list = list->next) | |
541 { | |
15823 | 542 PurpleAccount *account; |
15818 | 543 char *text; |
544 | |
545 if (all) | |
546 account = list->data; | |
547 else | |
15823 | 548 account = purple_connection_get_account(list->data); |
15818 | 549 |
550 text = g_strdup_printf("%s (%s)", | |
15823 | 551 purple_account_get_username(account), |
552 purple_account_get_protocol_name(account)); | |
15818 | 553 gnt_combo_box_add_data(GNT_COMBO_BOX(combo), account, text); |
554 g_free(text); | |
555 if (account == def) | |
556 gnt_combo_box_set_selected(GNT_COMBO_BOX(combo), account); | |
557 } | |
558 gnt_widget_set_size(combo, 20, 3); /* ew */ | |
559 } | |
560 else | |
561 { | |
562 gnt_box_add_widget(GNT_BOX(hbox), | |
563 gnt_label_new_with_format(_("Not implemented yet."), | |
564 GNT_TEXT_FLAG_BOLD)); | |
565 } | |
566 } | |
567 if (grlist->next) | |
568 gnt_box_add_widget(GNT_BOX(box), gnt_hline_new()); | |
569 } | |
570 gnt_box_add_widget(GNT_BOX(window), box); | |
571 | |
18333
f23a7736586f
Consider closing a request dialog equivalent to cancelling it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18222
diff
changeset
|
572 box = setup_button_box(window, userdata, request_fields_cb, allfields, |
15818 | 573 ok, ok_cb, cancel, cancel_cb, NULL); |
574 gnt_box_add_widget(GNT_BOX(window), box); | |
575 | |
18333
f23a7736586f
Consider closing a request dialog equivalent to cancelling it.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18222
diff
changeset
|
576 setup_default_callback(window, cancel_cb, userdata); |
15818 | 577 gnt_widget_show(window); |
16310
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
578 |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
579 g_object_set_data(G_OBJECT(window), "fields", allfields); |
15818 | 580 |
581 return window; | |
582 } | |
583 | |
584 static void | |
18411
3849776d0f71
Fix some crashes resulting from rejecting file-transfer requests.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18410
diff
changeset
|
585 file_cancel_cb(gpointer fq, GntWidget *wid) |
15818 | 586 { |
15823 | 587 PurpleGntFileRequest *data = fq; |
15818 | 588 if (data->cbs[1] != NULL) |
15823 | 589 ((PurpleRequestFileCb)data->cbs[1])(data->user_data, NULL); |
15818 | 590 |
15823 | 591 purple_request_close(PURPLE_REQUEST_FILE, data->dialog); |
15818 | 592 } |
593 | |
594 static void | |
18411
3849776d0f71
Fix some crashes resulting from rejecting file-transfer requests.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18410
diff
changeset
|
595 file_ok_cb(gpointer fq, GntWidget *widget) |
15818 | 596 { |
15823 | 597 PurpleGntFileRequest *data = fq; |
15930
846a00760176
use file select dialog
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15926
diff
changeset
|
598 char *file = gnt_file_sel_get_selected_file(GNT_FILE_SEL(data->dialog)); |
18410
719f73b9a593
Remember the open/save file locations.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18347
diff
changeset
|
599 char *dir = g_path_get_dirname(file); |
15818 | 600 if (data->cbs[0] != NULL) |
15930
846a00760176
use file select dialog
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15926
diff
changeset
|
601 ((PurpleRequestFileCb)data->cbs[0])(data->user_data, file); |
846a00760176
use file select dialog
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15926
diff
changeset
|
602 g_free(file); |
18410
719f73b9a593
Remember the open/save file locations.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18347
diff
changeset
|
603 purple_prefs_set_path(data->save ? "/finch/filelocations/last_save_folder" : |
719f73b9a593
Remember the open/save file locations.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18347
diff
changeset
|
604 "/finch/filelocations/last_open_folder", dir); |
719f73b9a593
Remember the open/save file locations.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18347
diff
changeset
|
605 g_free(dir); |
15818 | 606 |
15823 | 607 purple_request_close(PURPLE_REQUEST_FILE, data->dialog); |
15818 | 608 } |
609 | |
610 static void | |
15823 | 611 file_request_destroy(PurpleGntFileRequest *data) |
15818 | 612 { |
613 g_free(data->cbs); | |
614 g_free(data); | |
615 } | |
616 | |
617 static void * | |
618 finch_request_file(const char *title, const char *filename, | |
619 gboolean savedialog, | |
620 GCallback ok_cb, GCallback cancel_cb, | |
16442
08db93bbd798
Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evan.s@dreskin.net>
parents:
16310
diff
changeset
|
621 PurpleAccount *account, const char *who, PurpleConversation *conv, |
15818 | 622 void *user_data) |
623 { | |
15930
846a00760176
use file select dialog
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15926
diff
changeset
|
624 GntWidget *window = gnt_file_sel_new(); |
846a00760176
use file select dialog
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15926
diff
changeset
|
625 GntFileSel *sel = GNT_FILE_SEL(window); |
15823 | 626 PurpleGntFileRequest *data = g_new0(PurpleGntFileRequest, 1); |
18410
719f73b9a593
Remember the open/save file locations.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18347
diff
changeset
|
627 const char *path; |
15818 | 628 |
629 data->user_data = user_data; | |
630 data->cbs = g_new0(GCallback, 2); | |
631 data->cbs[0] = ok_cb; | |
632 data->cbs[1] = cancel_cb; | |
633 data->dialog = window; | |
18410
719f73b9a593
Remember the open/save file locations.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18347
diff
changeset
|
634 data->save = savedialog; |
15818 | 635 gnt_box_set_title(GNT_BOX(window), title ? title : (savedialog ? _("Save File...") : _("Open File..."))); |
18410
719f73b9a593
Remember the open/save file locations.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18347
diff
changeset
|
636 |
719f73b9a593
Remember the open/save file locations.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18347
diff
changeset
|
637 path = purple_prefs_get_path(savedialog ? "/finch/filelocations/last_save_folder" : "/finch/filelocations/last_open_folder"); |
719f73b9a593
Remember the open/save file locations.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18347
diff
changeset
|
638 gnt_file_sel_set_current_location(sel, (path && *path) ? path : purple_home_dir()); |
719f73b9a593
Remember the open/save file locations.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18347
diff
changeset
|
639 |
15939 | 640 if (savedialog) |
641 gnt_file_sel_set_suggested_filename(sel, filename); | |
18411
3849776d0f71
Fix some crashes resulting from rejecting file-transfer requests.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18410
diff
changeset
|
642 |
15930
846a00760176
use file select dialog
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15926
diff
changeset
|
643 g_signal_connect(G_OBJECT(sel->cancel), "activate", |
18411
3849776d0f71
Fix some crashes resulting from rejecting file-transfer requests.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18410
diff
changeset
|
644 G_CALLBACK(action_performed), window); |
3849776d0f71
Fix some crashes resulting from rejecting file-transfer requests.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18410
diff
changeset
|
645 g_signal_connect(G_OBJECT(sel->select), "activate", |
3849776d0f71
Fix some crashes resulting from rejecting file-transfer requests.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18410
diff
changeset
|
646 G_CALLBACK(action_performed), window); |
3849776d0f71
Fix some crashes resulting from rejecting file-transfer requests.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18410
diff
changeset
|
647 g_signal_connect_swapped(G_OBJECT(sel->cancel), "activate", |
15930
846a00760176
use file select dialog
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15926
diff
changeset
|
648 G_CALLBACK(file_cancel_cb), data); |
18411
3849776d0f71
Fix some crashes resulting from rejecting file-transfer requests.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18410
diff
changeset
|
649 g_signal_connect_swapped(G_OBJECT(sel->select), "activate", |
15930
846a00760176
use file select dialog
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15926
diff
changeset
|
650 G_CALLBACK(file_ok_cb), data); |
15818 | 651 |
18411
3849776d0f71
Fix some crashes resulting from rejecting file-transfer requests.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18410
diff
changeset
|
652 setup_default_callback(window, file_cancel_cb, data); |
3849776d0f71
Fix some crashes resulting from rejecting file-transfer requests.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18410
diff
changeset
|
653 g_object_set_data_full(G_OBJECT(window), "filerequestdata", data, |
3849776d0f71
Fix some crashes resulting from rejecting file-transfer requests.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18410
diff
changeset
|
654 (GDestroyNotify)file_request_destroy); |
15818 | 655 gnt_widget_show(window); |
656 | |
657 return window; | |
658 } | |
659 | |
15823 | 660 static PurpleRequestUiOps uiops = |
15818 | 661 { |
17104
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
16938
diff
changeset
|
662 finch_request_input, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
16938
diff
changeset
|
663 finch_request_choice, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
16938
diff
changeset
|
664 finch_request_action, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
16938
diff
changeset
|
665 finch_request_fields, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
16938
diff
changeset
|
666 finch_request_file, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
16938
diff
changeset
|
667 finch_close_request, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
16938
diff
changeset
|
668 NULL, /* No plans for request_folder */ |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
16938
diff
changeset
|
669 NULL, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
16938
diff
changeset
|
670 NULL, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
16938
diff
changeset
|
671 NULL, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
16938
diff
changeset
|
672 NULL |
15818 | 673 }; |
674 | |
15823 | 675 PurpleRequestUiOps *finch_request_get_ui_ops() |
15818 | 676 { |
677 return &uiops; | |
678 } | |
679 | |
680 void finch_request_init() | |
681 { | |
682 } | |
683 | |
684 void finch_request_uninit() | |
685 { | |
686 } | |
687 | |
16310
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
688 void finch_request_save_in_prefs(gpointer null, PurpleRequestFields *allfields) |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
689 { |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
690 GList *list; |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
691 for (list = purple_request_fields_get_groups(allfields); list; list = list->next) { |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
692 PurpleRequestFieldGroup *group = list->data; |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
693 GList *fields = purple_request_field_group_get_fields(group); |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
694 |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
695 for (; fields ; fields = fields->next) { |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
696 PurpleRequestField *field = fields->data; |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
697 PurpleRequestFieldType type = purple_request_field_get_type(field); |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
698 PurplePrefType pt; |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
699 gpointer val = NULL; |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
700 const char *id = purple_request_field_get_id(field); |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
701 |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
702 switch (type) { |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
703 case PURPLE_REQUEST_FIELD_LIST: |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
704 val = purple_request_field_list_get_selected(field)->data; |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
705 break; |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
706 case PURPLE_REQUEST_FIELD_BOOLEAN: |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
707 val = GINT_TO_POINTER(purple_request_field_bool_get_value(field)); |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
708 break; |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
709 case PURPLE_REQUEST_FIELD_INTEGER: |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
710 val = GINT_TO_POINTER(purple_request_field_int_get_value(field)); |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
711 break; |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
712 case PURPLE_REQUEST_FIELD_STRING: |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
713 val = (gpointer)purple_request_field_string_get_value(field); |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
714 break; |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
715 default: |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
716 break; |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
717 } |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
718 |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
719 pt = purple_prefs_get_type(id); |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
720 switch (pt) { |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
721 case PURPLE_PREF_INT: |
17472
a236c67e39b6
A change from o_sukhodolsky:
Richard Laager <rlaager@wiktel.com>
parents:
17104
diff
changeset
|
722 { |
18222
ef65d43190e5
Fix a few runtime warnings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18118
diff
changeset
|
723 long int tmp = GPOINTER_TO_INT(val); |
16310
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
724 if (type == PURPLE_REQUEST_FIELD_LIST) /* Lists always return string */ |
17472
a236c67e39b6
A change from o_sukhodolsky:
Richard Laager <rlaager@wiktel.com>
parents:
17104
diff
changeset
|
725 sscanf(val, "%ld", &tmp); |
a236c67e39b6
A change from o_sukhodolsky:
Richard Laager <rlaager@wiktel.com>
parents:
17104
diff
changeset
|
726 purple_prefs_set_int(id, (gint)tmp); |
16310
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
727 break; |
17472
a236c67e39b6
A change from o_sukhodolsky:
Richard Laager <rlaager@wiktel.com>
parents:
17104
diff
changeset
|
728 } |
16310
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
729 case PURPLE_PREF_BOOLEAN: |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
730 purple_prefs_set_bool(id, GPOINTER_TO_INT(val)); |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
731 break; |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
732 case PURPLE_PREF_STRING: |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
733 purple_prefs_set_string(id, val); |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
734 break; |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
735 default: |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
736 break; |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
737 } |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
738 } |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
739 } |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
740 } |
8c89913276b3
Implement the plugin-pref ui using the request api. The preferences for the core plugins can now be modified from Finch. And no new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
741 |