comparison src/prpl.c @ 2232:14e8978f86bb

[gaim-migrate @ 2242] heh. committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Fri, 07 Sep 2001 08:58:24 +0000
parents 5014b802eb41
children 08387976d367
comparison
equal deleted inserted replaced
2231:8c4ff1a368bd 2232:14e8978f86bb
28 #include "pixmaps/cancel.xpm" 28 #include "pixmaps/cancel.xpm"
29 #include "pixmaps/register.xpm" 29 #include "pixmaps/register.xpm"
30 30
31 GSList *protocols = NULL; 31 GSList *protocols = NULL;
32 32
33 static GtkWidget *regdialog = NULL;
34 static GtkWidget *regbox = NULL;
35 static struct prpl *regprpl = NULL;
36
37 GtkWidget *protomenu = NULL; 33 GtkWidget *protomenu = NULL;
38 34
39 struct _prompt { 35 struct _prompt {
40 GtkWidget *window; 36 GtkWidget *window;
41 GtkWidget *entry; 37 GtkWidget *entry;
80 p = g_new0(struct prpl, 1); 76 p = g_new0(struct prpl, 1);
81 pi(p); 77 pi(p);
82 if ((old = find_prpl(p->protocol)) == NULL) 78 if ((old = find_prpl(p->protocol)) == NULL)
83 unload_protocol(old); 79 unload_protocol(old);
84 protocols = g_slist_insert_sorted(protocols, p, (GCompareFunc)proto_compare); 80 protocols = g_slist_insert_sorted(protocols, p, (GCompareFunc)proto_compare);
85 if (regdialog)
86 gtk_widget_destroy(regdialog);
87 regenerate_user_list(); 81 regenerate_user_list();
88 } 82 }
89 83
90 void unload_protocol(struct prpl *p) 84 void unload_protocol(struct prpl *p)
91 { 85 {
233 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(act_prompt), p); 227 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(act_prompt), p);
234 228
235 gtk_widget_show_all(window); 229 gtk_widget_show_all(window);
236 } 230 }
237 231
238 static void delete_reg(gpointer a, gpointer b)
239 {
240 GtkWidget *tmp = regdialog;
241 if (regdialog) {
242 regdialog = NULL;
243 gtk_widget_destroy(tmp);
244 }
245 }
246
247 void prepare_regbox_for_next()
248 {
249 while (GTK_BOX(regbox)->children)
250 gtk_container_remove(GTK_CONTAINER(regbox),
251 ((GtkBoxChild *)GTK_BOX(regbox)->children->data)->widget);
252 }
253
254 static void reg_prpl(gpointer a, struct prpl *p)
255 {
256 prepare_regbox_for_next();
257 regprpl = p;
258 (*regprpl->draw_new_user)(regbox);
259 }
260
261 static void do_reg(gpointer a, gpointer b)
262 {
263 if (regprpl->do_new_user)
264 (*regprpl->do_new_user)();
265 }
266
267 void register_user(gpointer a, gpointer b)
268 {
269 GSList *pr = protocols;
270 struct prpl *p = NULL, *q;
271 GtkWidget *box;
272 GtkWidget *frame;
273 GtkWidget *vbox;
274 GtkWidget *hbox;
275 GtkWidget *label;
276 GtkWidget *optmenu;
277 GtkWidget *menu;
278 GtkWidget *opt;
279 GtkWidget *button;
280
281 if (regdialog)
282 return;
283
284 while (pr) {
285 p = pr->data;
286 if (p->draw_new_user)
287 break;
288 pr = pr->next;
289 p = NULL;
290 }
291 if (p == NULL)
292 /* this should never happen because I said so. Hi mom. */
293 return;
294 pr = protocols;
295
296 regdialog = gtk_window_new(GTK_WINDOW_TOPLEVEL);
297 gtk_window_set_wmclass(GTK_WINDOW(regdialog), "registration", "Gaim");
298 gtk_container_set_border_width(GTK_CONTAINER(regdialog), 5);
299 gtk_window_set_title(GTK_WINDOW(regdialog), _("Gaim - New User Registration"));
300 gtk_signal_connect(GTK_OBJECT(regdialog), "destroy", GTK_SIGNAL_FUNC(delete_reg), NULL);
301 gtk_widget_realize(regdialog);
302 aol_icon(regdialog->window);
303
304 box = gtk_vbox_new(FALSE, 5);
305 gtk_container_add(GTK_CONTAINER(regdialog), box);
306 gtk_widget_show(box);
307
308 frame = gtk_frame_new(_("New User Registration"));
309 gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 5);
310 gtk_widget_show(frame);
311
312 vbox = gtk_vbox_new(FALSE, 5);
313 gtk_container_add(GTK_CONTAINER(frame), vbox);
314 gtk_widget_show(vbox);
315
316 hbox = gtk_hbox_new(FALSE, 5);
317 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
318 gtk_widget_show(hbox);
319
320 label = gtk_label_new(_("Register new user for"));
321 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
322 gtk_widget_show(label);
323
324 optmenu = gtk_option_menu_new();
325 gtk_box_pack_start(GTK_BOX(hbox), optmenu, FALSE, FALSE, 5);
326 gtk_widget_show(optmenu);
327
328 menu = gtk_menu_new();
329
330 while (pr) {
331 q = pr->data;
332 if (q->draw_new_user) {
333 opt = gtk_menu_item_new_with_label((*q->name)());
334 gtk_signal_connect(GTK_OBJECT(opt), "activate", GTK_SIGNAL_FUNC(reg_prpl), q);
335 gtk_menu_append(GTK_MENU(menu), opt);
336 gtk_widget_show(opt);
337 }
338 pr = pr->next;
339 }
340
341 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), menu);
342 gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), 0);
343 regprpl = p;
344
345 regbox = gtk_vbox_new(FALSE, 5);
346 gtk_box_pack_start(GTK_BOX(vbox), regbox, FALSE, FALSE, 5);
347 gtk_widget_show(regbox);
348
349 (*regprpl->draw_new_user)(regbox);
350
351 hbox = gtk_hbox_new(FALSE, 5);
352 gtk_box_pack_end(GTK_BOX(box), hbox, FALSE, FALSE, 5);
353 gtk_widget_show(hbox);
354
355 button = picture_button(regdialog, _("Close"), cancel_xpm);
356 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 5);
357 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(delete_reg), NULL);
358
359 button = picture_button(regdialog, _("Register"), register_xpm);
360 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 5);
361 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(do_reg), NULL);
362
363 gtk_widget_show(regdialog);
364 }
365
366 static void proto_act(GtkObject *obj, struct gaim_connection *gc) 232 static void proto_act(GtkObject *obj, struct gaim_connection *gc)
367 { 233 {
368 char *act = gtk_object_get_user_data(obj); 234 char *act = gtk_object_get_user_data(obj);
369 (*gc->prpl->do_action)(gc, act); 235 (*gc->prpl->do_action)(gc, act);
370 } 236 }