comparison src/multi.c @ 2154:cff133e0ec0c

[gaim-migrate @ 2164] part 2 of this. first was removing mail notifications; this is moving proto_opt stuff to multi.c and just having prpls say what they want. next it's on to the buddy right-click menu. committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Wed, 22 Aug 2001 22:05:56 +0000
parents 0befa2d2e540
children 510af3fee78b
comparison
equal deleted inserted replaced
2153:0befa2d2e540 2154:cff133e0ec0c
231 return button; 231 return button;
232 } 232 }
233 233
234 static void ok_mod(GtkWidget *w, struct aim_user *u) 234 static void ok_mod(GtkWidget *w, struct aim_user *u)
235 { 235 {
236 GList *tmp;
236 const char *txt; 237 const char *txt;
237 int i; 238 int i;
238 239
239 if (u) { 240 if (u) {
240 u->options = u->tmp_options; 241 u->options = u->tmp_options;
247 gtk_widget_destroy(u->mod); 248 gtk_widget_destroy(u->mod);
248 i = gtk_clist_find_row_from_data(GTK_CLIST(list), u); 249 i = gtk_clist_find_row_from_data(GTK_CLIST(list), u);
249 gtk_clist_set_text(GTK_CLIST(list), i, 2, 250 gtk_clist_set_text(GTK_CLIST(list), i, 2,
250 (u->options & OPT_USR_AUTO) ? "True" : "False"); 251 (u->options & OPT_USR_AUTO) ? "True" : "False");
251 gtk_clist_set_text(GTK_CLIST(list), i, 3, proto_name(u->protocol)); 252 gtk_clist_set_text(GTK_CLIST(list), i, 3, proto_name(u->protocol));
253
254 tmp = u->opt_entries;
255 while (tmp) {
256 GtkEntry *entry = tmp->data;
257 int pos = (int)gtk_object_get_user_data(GTK_OBJECT(entry));
258 g_snprintf(u->proto_opt[pos], sizeof(u->proto_opt[pos]), "%s",
259 gtk_entry_get_text(entry));
260 tmp = tmp->next;
261 }
262 if (u->opt_entries)
263 g_list_free(tmpusr.opt_entries);
264 u->opt_entries = NULL;
252 } else { 265 } else {
253 txt = gtk_entry_get_text(GTK_ENTRY(tmpusr.name)); 266 txt = gtk_entry_get_text(GTK_ENTRY(tmpusr.name));
254 u = new_user(txt, tmpusr.protocol, tmpusr.options); 267 u = new_user(txt, tmpusr.protocol, tmpusr.options);
255 268
256 txt = gtk_entry_get_text(GTK_ENTRY(tmpusr.pass)); 269 txt = gtk_entry_get_text(GTK_ENTRY(tmpusr.pass));
257 g_snprintf(u->password, sizeof(u->password), "%s", txt); 270 g_snprintf(u->password, sizeof(u->password), "%s", txt);
258 271
259 for (i = 0; i < 6; i++) 272 tmp = tmpusr.opt_entries;
260 g_snprintf(u->proto_opt[i], sizeof(u->proto_opt[i]), "%s", tmpusr.proto_opt[i]); 273 while (tmp) {
274 GtkEntry *entry = tmp->data;
275 int pos = (int)gtk_object_get_user_data(GTK_OBJECT(entry));
276 g_snprintf(u->proto_opt[pos], sizeof(u->proto_opt[pos]), "%s",
277 gtk_entry_get_text(entry));
278 tmp = tmp->next;
279 }
280 if (tmpusr.opt_entries)
281 g_list_free(tmpusr.opt_entries);
282 tmpusr.opt_entries = NULL;
261 283
262 gtk_widget_destroy(newmod); 284 gtk_widget_destroy(newmod);
263 } 285 }
264 save_prefs(); 286 save_prefs();
265 } 287 }
266 288
267 static void cancel_mod(GtkWidget *w, struct aim_user *u) 289 static void cancel_mod(GtkWidget *w, struct aim_user *u)
268 { 290 {
269 if (u) { 291 if (u) {
292 if (u->opt_entries)
293 g_list_free(u->opt_entries);
294 u->opt_entries = NULL;
270 gtk_widget_destroy(u->mod); 295 gtk_widget_destroy(u->mod);
271 } else { 296 } else {
297 if (tmpusr.opt_entries)
298 g_list_free(tmpusr.opt_entries);
299 tmpusr.opt_entries = NULL;
272 gtk_widget_destroy(newmod); 300 gtk_widget_destroy(newmod);
273 } 301 }
274 } 302 }
275 303
276 static void set_prot(GtkWidget *opt, int proto) 304 static void set_prot(GtkWidget *opt, int proto)
455 * particular protocol, so clear it out and make a new one. */ 483 * particular protocol, so clear it out and make a new one. */
456 484
457 gtk_notebook_remove_page(GTK_NOTEBOOK(book), 1); 485 gtk_notebook_remove_page(GTK_NOTEBOOK(book), 1);
458 486
459 if (p && p->user_opts) { 487 if (p && p->user_opts) {
460 if (u) 488 GList *op = (*p->user_opts)();
461 (*p->user_opts)(book, u); 489 GList *tmp = op;
462 else 490
463 (*p->user_opts)(book, &tmpusr); 491 GtkWidget *vbox;
492 GtkWidget *hbox;
493 GtkWidget *label;
494 GtkWidget *entry;
495
496 char buf[256];
497
498 vbox = gtk_vbox_new(FALSE, 5);
499 gtk_container_set_border_width(GTK_CONTAINER(vbox), 5);
500 g_snprintf(buf, sizeof(buf), "%s Options", (*p->name)());
501 gtk_notebook_append_page(GTK_NOTEBOOK(book), vbox, gtk_label_new(buf));
502 gtk_widget_show(vbox);
503
504 while (op) {
505 struct proto_user_opt *puo = op->data;
506
507 hbox = gtk_hbox_new(FALSE, 5);
508 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
509 gtk_widget_show(hbox);
510
511 label = gtk_label_new(puo->label);
512 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
513 gtk_widget_show(label);
514
515 entry = gtk_entry_new();
516 gtk_box_pack_end(GTK_BOX(hbox), entry, FALSE, FALSE, 0);
517 gtk_object_set_user_data(GTK_OBJECT(entry), (void *)puo->pos);
518 if (u->proto_opt[puo->pos][0]) {
519 debug_printf("setting text %s\n", u->proto_opt[puo->pos]);
520 gtk_entry_set_text(GTK_ENTRY(entry), u->proto_opt[puo->pos]);
521 } else {
522 gtk_entry_set_text(GTK_ENTRY(entry), puo->def);
523 }
524 gtk_widget_show(entry);
525
526 if (u)
527 u->opt_entries = g_list_append(u->opt_entries, entry);
528 else
529 tmpusr.opt_entries = g_list_append(tmpusr.opt_entries, entry);
530
531 g_free(puo);
532 op = op->next;
533 }
534 g_list_free(tmp);
464 } 535 }
465 } 536 }
466 537
467 static void show_acct_mod(struct aim_user *u) 538 static void show_acct_mod(struct aim_user *u)
468 { 539 {