| 225 i = gtk_clist_find_row_from_data(GTK_CLIST(list), u); |
226 i = gtk_clist_find_row_from_data(GTK_CLIST(list), u); |
| 226 gtk_clist_set_text(GTK_CLIST(list), i, 2, (u->options & OPT_USR_AUTO) ? "True" : "False"); |
227 gtk_clist_set_text(GTK_CLIST(list), i, 2, (u->options & OPT_USR_AUTO) ? "True" : "False"); |
| 227 gtk_clist_set_text(GTK_CLIST(list), i, 3, proto_name(u->protocol)); |
228 gtk_clist_set_text(GTK_CLIST(list), i, 3, proto_name(u->protocol)); |
| 228 } else { |
229 } else { |
| 229 char *titles[4]; |
230 char *titles[4]; |
| |
231 int i; |
| 230 txt = gtk_entry_get_text(GTK_ENTRY(tmpusr.name)); |
232 txt = gtk_entry_get_text(GTK_ENTRY(tmpusr.name)); |
| 231 if (find_user(txt, tmpusr.protocol)) { |
|
| 232 gtk_widget_destroy(newmod); |
|
| 233 return; |
|
| 234 } |
|
| 235 u = g_new0(struct aim_user, 1); |
233 u = g_new0(struct aim_user, 1); |
| 236 g_snprintf(u->username, sizeof(u->username), "%s", txt); |
234 g_snprintf(u->username, sizeof(u->username), "%s", txt); |
| 237 txt = gtk_entry_get_text(GTK_ENTRY(tmpusr.pass)); |
235 txt = gtk_entry_get_text(GTK_ENTRY(tmpusr.pass)); |
| 238 g_snprintf(u->password, sizeof(u->password), "%s", txt); |
236 g_snprintf(u->password, sizeof(u->password), "%s", txt); |
| 239 u->options = tmpusr.options; |
237 u->options = tmpusr.options; |
| 256 gtk_widget_destroy(u->mod); |
256 gtk_widget_destroy(u->mod); |
| 257 } else { |
257 } else { |
| 258 gtk_widget_destroy(newmod); |
258 gtk_widget_destroy(newmod); |
| 259 } |
259 } |
| 260 } |
260 } |
| |
261 |
| |
262 static void generate_options(struct aim_user *, GtkWidget *); |
| 261 |
263 |
| 262 static void set_prot(GtkWidget *opt, int proto) |
264 static void set_prot(GtkWidget *opt, int proto) |
| 263 { |
265 { |
| 264 struct aim_user *u = gtk_object_get_user_data(GTK_OBJECT(opt)); |
266 struct aim_user *u = gtk_object_get_user_data(GTK_OBJECT(opt)); |
| 265 if (u) { |
267 if (u) { |
| 266 u->tmp_protocol = proto; |
268 u->tmp_protocol = proto; |
| 267 } else { |
269 generate_options(u, u->main); |
| 268 tmpusr.protocol = proto; |
270 } else { |
| 269 } |
271 tmpusr.tmp_protocol = tmpusr.protocol = proto; |
| 270 } |
272 generate_options(NULL, newmain); |
| 271 |
273 } |
| 272 static GtkWidget *make_protocol_menu(GtkWidget *box, struct aim_user *u) |
274 } |
| |
275 |
| |
276 static GtkWidget *make_protocol_menu(GtkWidget *box, struct aim_user *u, GtkWidget *frame) |
| 273 { |
277 { |
| 274 GtkWidget *optmenu; |
278 GtkWidget *optmenu; |
| 275 GtkWidget *menu; |
279 GtkWidget *menu; |
| 276 GtkWidget *opt; |
280 GtkWidget *opt; |
| 277 GSList *p = protocols; |
281 GSList *p = protocols; |
| 278 struct prpl *e; |
282 struct prpl *e; |
| 279 |
283 int count = 0; |
| 280 /* PRPL: should we set some way to update these when new protocols get added? */ |
284 gboolean found = FALSE; |
| |
285 |
| 281 optmenu = gtk_option_menu_new(); |
286 optmenu = gtk_option_menu_new(); |
| 282 gtk_box_pack_start(GTK_BOX(box), optmenu, FALSE, FALSE, 5); |
287 gtk_box_pack_start(GTK_BOX(box), optmenu, FALSE, FALSE, 5); |
| 283 gtk_widget_show(optmenu); |
288 gtk_widget_show(optmenu); |
| 284 |
289 |
| 285 menu = gtk_menu_new(); |
290 menu = gtk_menu_new(); |
| 286 |
291 |
| 287 while (p) { |
292 while (p) { |
| 288 e = (struct prpl *)p->data; |
293 e = (struct prpl *)p->data; |
| |
294 if (u) { |
| |
295 if (e->protocol == u->tmp_protocol) |
| |
296 found = TRUE; |
| |
297 if (!found) |
| |
298 count++; |
| |
299 } else { |
| |
300 if (e->protocol == tmpusr.tmp_protocol) |
| |
301 found = TRUE; |
| |
302 if (!found) |
| |
303 count++; |
| |
304 } |
| 289 if (e->name) |
305 if (e->name) |
| 290 opt = gtk_menu_item_new_with_label((*e->name)()); |
306 opt = gtk_menu_item_new_with_label((*e->name)()); |
| 291 else |
307 else |
| 292 opt = gtk_menu_item_new_with_label("Unknown"); |
308 opt = gtk_menu_item_new_with_label("Unknown"); |
| 293 gtk_object_set_user_data(GTK_OBJECT(opt), u); |
309 gtk_object_set_user_data(GTK_OBJECT(opt), u); |
| 297 gtk_widget_show(opt); |
313 gtk_widget_show(opt); |
| 298 p = p->next; |
314 p = p->next; |
| 299 } |
315 } |
| 300 |
316 |
| 301 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), menu); |
317 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), menu); |
| |
318 gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), count); |
| |
319 |
| |
320 return optmenu; |
| |
321 } |
| |
322 |
| |
323 static void generate_options(struct aim_user *u, GtkWidget *frame) { |
| |
324 GList *tmp; |
| |
325 GtkWidget *book; |
| |
326 GtkWidget *vbox; |
| |
327 GtkWidget *hbox; |
| |
328 GtkWidget *label; |
| |
329 GtkWidget *name; |
| |
330 GtkWidget *pass; |
| |
331 struct prpl *p; |
| |
332 |
| |
333 tmp = gtk_container_children(GTK_CONTAINER(frame)); |
| |
334 |
| |
335 if (u) |
| |
336 p = find_prpl(u->tmp_protocol); |
| |
337 else |
| |
338 p = find_prpl(tmpusr.protocol); |
| |
339 |
| |
340 if (p && p->user_opts) { |
| |
341 if (tmp && !GTK_IS_NOTEBOOK(tmp->data)) { |
| |
342 gtk_widget_destroy(tmp->data); |
| |
343 tmp = NULL; |
| |
344 } |
| |
345 |
| |
346 if (!tmp) { |
| |
347 book = gtk_notebook_new(); |
| |
348 gtk_container_add(GTK_CONTAINER(frame), book); |
| |
349 gtk_widget_show(book); |
| |
350 |
| |
351 vbox = gtk_vbox_new(FALSE, 0); |
| |
352 gtk_notebook_append_page(GTK_NOTEBOOK(book), vbox, |
| |
353 gtk_label_new(_("General Options"))); |
| |
354 gtk_widget_show(vbox); |
| |
355 |
| |
356 if (u) |
| |
357 (*p->user_opts)(book, u); |
| |
358 else |
| |
359 (*p->user_opts)(book, &tmpusr); |
| |
360 } else { |
| |
361 book = (GtkWidget *)tmp->data; |
| |
362 gtk_notebook_remove_page(GTK_NOTEBOOK(book), 1); |
| |
363 if (u) |
| |
364 (*p->user_opts)(book, u); |
| |
365 else |
| |
366 (*p->user_opts)(book, &tmpusr); |
| |
367 return; |
| |
368 } |
| |
369 } else { |
| |
370 if (tmp && GTK_IS_NOTEBOOK(tmp->data)) { |
| |
371 gtk_widget_destroy(tmp->data); |
| |
372 tmp = NULL; |
| |
373 } |
| |
374 |
| |
375 if (!tmp) { |
| |
376 vbox = gtk_vbox_new(FALSE, 0); |
| |
377 gtk_container_add(GTK_CONTAINER(frame), vbox); |
| |
378 gtk_widget_show(vbox); |
| |
379 } else { |
| |
380 return; |
| |
381 } |
| |
382 } |
| |
383 |
| |
384 hbox = gtk_hbox_new(FALSE, 0); |
| |
385 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5); |
| |
386 gtk_widget_show(hbox); |
| |
387 |
| |
388 label = gtk_label_new(_("Screenname:")); |
| |
389 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); |
| |
390 gtk_widget_show(label); |
| |
391 |
| |
392 name = gtk_entry_new(); |
| |
393 gtk_box_pack_start(GTK_BOX(hbox), name, FALSE, FALSE, 5); |
| |
394 gtk_widget_show(name); |
| |
395 |
| |
396 hbox = gtk_hbox_new(FALSE, 5); |
| |
397 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5); |
| |
398 gtk_widget_show(hbox); |
| |
399 |
| |
400 label = gtk_label_new(_("Password:")); |
| |
401 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); |
| |
402 gtk_widget_show(label); |
| |
403 |
| |
404 pass = gtk_entry_new(); |
| |
405 gtk_box_pack_start(GTK_BOX(hbox), pass, FALSE, FALSE, 5); |
| |
406 gtk_entry_set_visibility(GTK_ENTRY(pass), FALSE); |
| |
407 gtk_widget_show(pass); |
| |
408 |
| |
409 hbox = gtk_hbox_new(FALSE, 5); |
| |
410 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5); |
| |
411 gtk_widget_show(hbox); |
| |
412 |
| |
413 make_protocol_menu(hbox, u, frame); |
| |
414 |
| |
415 acct_button(_("Remember Password"), u, OPT_USR_REM_PASS, vbox); |
| |
416 acct_button(_("Auto-Login"), u, OPT_USR_AUTO, vbox); |
| |
417 acct_button(_("Send KeepAlive packet (6 bytes/second)"), u, OPT_USR_KEEPALV, vbox); |
| |
418 |
| 302 if (u) { |
419 if (u) { |
| 303 gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), u->protocol); |
420 u->name = name; |
| 304 u->tmp_protocol = u->protocol; |
421 u->pass = pass; |
| 305 } else { |
422 gtk_entry_set_text(GTK_ENTRY(name), u->username); |
| 306 gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), |
423 gtk_entry_set_text(GTK_ENTRY(pass), u->password); |
| 307 ((struct prpl *)protocols->data)->protocol); |
424 gtk_entry_set_editable(GTK_ENTRY(name), FALSE); |
| 308 } |
425 } else { |
| 309 |
426 tmpusr.name = name; |
| 310 return optmenu; |
427 tmpusr.pass = pass; |
| |
428 } |
| 311 } |
429 } |
| 312 |
430 |
| 313 static void show_acct_mod(struct aim_user *u) |
431 static void show_acct_mod(struct aim_user *u) |
| 314 { |
432 { |
| 315 /* here we can have all the aim_user options, including ones not shown in the main acctedit |
433 /* here we can have all the aim_user options, including ones not shown in the main acctedit |
| 340 gtk_window_set_wmclass(GTK_WINDOW(mod), "account", "Gaim"); |
455 gtk_window_set_wmclass(GTK_WINDOW(mod), "account", "Gaim"); |
| 341 gtk_widget_realize(mod); |
456 gtk_widget_realize(mod); |
| 342 aol_icon(mod->window); |
457 aol_icon(mod->window); |
| 343 gtk_container_border_width(GTK_CONTAINER(mod), 10); |
458 gtk_container_border_width(GTK_CONTAINER(mod), 10); |
| 344 gtk_window_set_title(GTK_WINDOW(mod), _("Gaim - Modify Account")); |
459 gtk_window_set_title(GTK_WINDOW(mod), _("Gaim - Modify Account")); |
| |
460 gtk_window_set_policy(GTK_WINDOW(mod), 0, 1, 1); /* i know, i'm odd */ |
| 345 gtk_signal_connect(GTK_OBJECT(mod), "destroy", |
461 gtk_signal_connect(GTK_OBJECT(mod), "destroy", |
| 346 GTK_SIGNAL_FUNC(delmod), u); |
462 GTK_SIGNAL_FUNC(delmod), u); |
| 347 |
463 |
| |
464 box = gtk_vbox_new(FALSE, 0); |
| |
465 gtk_container_add(GTK_CONTAINER(mod), box); |
| |
466 gtk_widget_show(box); |
| |
467 |
| 348 frame = gtk_frame_new(_("Modify Account")); |
468 frame = gtk_frame_new(_("Modify Account")); |
| 349 gtk_container_add(GTK_CONTAINER(mod), frame); |
469 gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 5); |
| 350 gtk_widget_show(frame); |
470 gtk_widget_show(frame); |
| 351 |
471 |
| 352 vbox = gtk_vbox_new(FALSE, 0); |
472 if (u) u->tmp_protocol = u->protocol; |
| 353 gtk_container_add(GTK_CONTAINER(frame), vbox); |
473 else tmpusr.tmp_protocol = tmpusr.protocol; |
| 354 gtk_widget_show(vbox); |
474 generate_options(u, frame); |
| 355 |
|
| 356 hbox = gtk_hbox_new(FALSE, 0); |
|
| 357 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5); |
|
| 358 gtk_widget_show(hbox); |
|
| 359 |
|
| 360 label = gtk_label_new(_("Screenname:")); |
|
| 361 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); |
|
| 362 gtk_widget_show(label); |
|
| 363 |
|
| 364 name = gtk_entry_new(); |
|
| 365 gtk_box_pack_start(GTK_BOX(hbox), name, FALSE, FALSE, 5); |
|
| 366 gtk_widget_show(name); |
|
| 367 |
475 |
| 368 hbox = gtk_hbox_new(FALSE, 5); |
476 hbox = gtk_hbox_new(FALSE, 5); |
| 369 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5); |
477 gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 5); |
| 370 gtk_widget_show(hbox); |
|
| 371 |
|
| 372 label = gtk_label_new(_("Password:")); |
|
| 373 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); |
|
| 374 gtk_widget_show(label); |
|
| 375 |
|
| 376 pass = gtk_entry_new(); |
|
| 377 gtk_box_pack_start(GTK_BOX(hbox), pass, FALSE, FALSE, 5); |
|
| 378 gtk_entry_set_visibility(GTK_ENTRY(pass), FALSE); |
|
| 379 gtk_widget_show(pass); |
|
| 380 |
|
| 381 hbox = gtk_hbox_new(FALSE, 5); |
|
| 382 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5); |
|
| 383 gtk_widget_show(hbox); |
|
| 384 |
|
| 385 make_protocol_menu(hbox, u); |
|
| 386 |
|
| 387 acct_button(_("Remember Password"), u, OPT_USR_REM_PASS, vbox); |
|
| 388 acct_button(_("Auto-Login"), u, OPT_USR_AUTO, vbox); |
|
| 389 acct_button(_("Send KeepAlive packet (6 bytes/second)"), u, OPT_USR_KEEPALV, vbox); |
|
| 390 |
|
| 391 hbox = gtk_hbox_new(FALSE, 5); |
|
| 392 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5); |
|
| 393 gtk_widget_show(hbox); |
478 gtk_widget_show(hbox); |
| 394 |
479 |
| 395 button = picture_button(mod, _("Cancel"), cancel_xpm); |
480 button = picture_button(mod, _("Cancel"), cancel_xpm); |
| 396 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 5); |
481 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 5); |
| 397 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(cancel_mod), u); |
482 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(cancel_mod), u); |