Mercurial > pidgin
comparison src/multi.c @ 2442:895e2469cb3a
[gaim-migrate @ 2455]
aim_user is split. mod_user probably only needs to be in multi.c but eh. moved struct conversation to ui.h. still need to create struct buddy_chat for the prpls to use.
committer: Tailor Script <tailor@pidgin.im>
| author | Eric Warmenhoven <eric@warmenhoven.org> |
|---|---|
| date | Sat, 06 Oct 2001 04:05:53 +0000 |
| parents | 5cbe86a444d9 |
| children | 13ce96daf30f |
comparison
equal
deleted
inserted
replaced
| 2441:2c2c1f717616 | 2442:895e2469cb3a |
|---|---|
| 42 | 42 |
| 43 GSList *connections; | 43 GSList *connections; |
| 44 | 44 |
| 45 static GtkWidget *acctedit = NULL; | 45 static GtkWidget *acctedit = NULL; |
| 46 static GtkWidget *list = NULL; /* the clist of names in the accteditor */ | 46 static GtkWidget *list = NULL; /* the clist of names in the accteditor */ |
| 47 static GtkWidget *newmod = NULL; /* the dialog for creating a new account */ | 47 |
| 48 static GtkWidget *newmain = NULL; /* the notebook that holds options */ | 48 static GSList *mod_users = NULL; |
| 49 static struct aim_user tmpusr = { "", "", "", OPT_USR_REM_PASS, DEFAULT_PROTO, | 49 |
| 50 {"", "", "", "", "", "", ""}, "", NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 50 static struct mod_user *find_mod_user(struct aim_user *a) |
| 51 OPT_USR_REM_PASS, DEFAULT_PROTO, NULL, NULL, NULL, "", NULL, NULL, NULL, NULL, NULL | 51 { |
| 52 }; | 52 GSList *m = mod_users; |
| 53 | 53 while (m) { |
| 54 static void generate_prpl_options(struct aim_user *, GtkWidget *); | 54 struct mod_user *u = m->data; |
| 55 if (u->user == a) | |
| 56 return u; | |
| 57 m = m->next; | |
| 58 } | |
| 59 return NULL; | |
| 60 } | |
| 61 | |
| 62 static void generate_prpl_options(struct mod_user *, GtkWidget *); | |
| 55 | 63 |
| 56 struct mod_usr_opt { | 64 struct mod_usr_opt { |
| 57 struct aim_user *user; | 65 struct mod_user *user; |
| 58 int opt; | 66 int opt; |
| 59 }; | 67 }; |
| 60 | 68 |
| 61 struct gaim_connection *new_gaim_conn(struct aim_user *user) | 69 struct gaim_connection *new_gaim_conn(struct aim_user *user) |
| 62 { | 70 { |
| 179 | 187 |
| 180 gtk_widget_show(win); | 188 gtk_widget_show(win); |
| 181 return win; | 189 return win; |
| 182 } | 190 } |
| 183 | 191 |
| 184 static void delmod(GtkWidget *w, struct aim_user *u) | 192 static void delmod(GtkWidget *w, struct mod_user *u) |
| 185 { | 193 { |
| 186 gtk_widget_destroy(w); | 194 mod_users = g_slist_remove(mod_users, u); |
| 187 if (u) { | 195 g_free(u); |
| 188 u->mod = NULL; | |
| 189 } else { | |
| 190 newmod = NULL; | |
| 191 } | |
| 192 } | 196 } |
| 193 | 197 |
| 194 static void mod_opt(GtkWidget *b, struct mod_usr_opt *m) | 198 static void mod_opt(GtkWidget *b, struct mod_usr_opt *m) |
| 195 { | 199 { |
| 196 if (m->user) { | 200 m->user->options = m->user->options ^ m->opt; |
| 197 m->user->tmp_options = m->user->tmp_options ^ m->opt; | |
| 198 } else { | |
| 199 tmpusr.options = tmpusr.options ^ m->opt; | |
| 200 } | |
| 201 } | 201 } |
| 202 | 202 |
| 203 static void free_muo(GtkWidget *b, struct mod_usr_opt *m) | 203 static void free_muo(GtkWidget *b, struct mod_usr_opt *m) |
| 204 { | 204 { |
| 205 g_free(m); | 205 g_free(m); |
| 206 } | 206 } |
| 207 | 207 |
| 208 static GtkWidget *acct_button(const char *text, struct aim_user *u, int option, GtkWidget *box) | 208 static GtkWidget *acct_button(const char *text, struct mod_user *u, int option, GtkWidget *box) |
| 209 { | 209 { |
| 210 GtkWidget *button; | 210 GtkWidget *button; |
| 211 struct mod_usr_opt *muo = g_new0(struct mod_usr_opt, 1); | 211 struct mod_usr_opt *muo = g_new0(struct mod_usr_opt, 1); |
| 212 button = gtk_check_button_new_with_label(text); | 212 button = gtk_check_button_new_with_label(text); |
| 213 if (u) { | 213 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(button), (u->options & option)); |
| 214 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(button), (u->options & option)); | |
| 215 } else { | |
| 216 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(button), (tmpusr.options & option)); | |
| 217 } | |
| 218 gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 0); | 214 gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 0); |
| 219 muo->user = u; | 215 muo->user = u; |
| 220 muo->opt = option; | 216 muo->opt = option; |
| 221 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(mod_opt), muo); | 217 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(mod_opt), muo); |
| 222 gtk_signal_connect(GTK_OBJECT(button), "destroy", GTK_SIGNAL_FUNC(free_muo), muo); | 218 gtk_signal_connect(GTK_OBJECT(button), "destroy", GTK_SIGNAL_FUNC(free_muo), muo); |
| 223 gtk_widget_show(button); | 219 gtk_widget_show(button); |
| 224 return button; | 220 return button; |
| 225 } | 221 } |
| 226 | 222 |
| 227 static void ok_mod(GtkWidget *w, struct aim_user *u) | 223 static void ok_mod(GtkWidget *w, struct mod_user *u) |
| 228 { | 224 { |
| 229 GList *tmp; | 225 GList *tmp; |
| 230 const char *txt; | 226 const char *txt; |
| 231 int i; | 227 int i; |
| 232 | 228 struct aim_user *a; |
| 233 if (u) { | 229 |
| 234 u->options = u->tmp_options; | 230 if (!u->user) { |
| 235 u->protocol = u->tmp_protocol; | 231 txt = gtk_entry_get_text(GTK_ENTRY(u->name)); |
| 236 txt = gtk_entry_get_text(GTK_ENTRY(u->pass)); | 232 u->user = new_user(txt, u->protocol, u->options); |
| 237 if (u->options & OPT_USR_REM_PASS) | 233 } |
| 238 g_snprintf(u->password, sizeof(u->password), "%s", txt); | 234 a = u->user; |
| 239 else | 235 |
| 240 u->password[0] = '\0'; | 236 a->options = u->options; |
| 241 i = gtk_clist_find_row_from_data(GTK_CLIST(list), u); | 237 a->protocol = u->protocol; |
| 242 gtk_clist_set_text(GTK_CLIST(list), i, 2, | 238 txt = gtk_entry_get_text(GTK_ENTRY(u->pass)); |
| 243 (u->options & OPT_USR_AUTO) ? "True" : "False"); | 239 if (a->options & OPT_USR_REM_PASS) |
| 244 gtk_clist_set_text(GTK_CLIST(list), i, 3, proto_name(u->protocol)); | 240 g_snprintf(a->password, sizeof(a->password), "%s", txt); |
| 245 | 241 else |
| 246 tmp = u->opt_entries; | 242 a->password[0] = '\0'; |
| 247 while (tmp) { | 243 |
| 248 GtkEntry *entry = tmp->data; | 244 i = gtk_clist_find_row_from_data(GTK_CLIST(list), a); |
| 249 int pos = (int)gtk_object_get_user_data(GTK_OBJECT(entry)); | 245 gtk_clist_set_text(GTK_CLIST(list), i, 2, |
| 250 g_snprintf(u->proto_opt[pos], sizeof(u->proto_opt[pos]), "%s", | 246 (a->options & OPT_USR_AUTO) ? "True" : "False"); |
| 247 gtk_clist_set_text(GTK_CLIST(list), i, 3, proto_name(a->protocol)); | |
| 248 | |
| 249 tmp = u->opt_entries; | |
| 250 while (tmp) { | |
| 251 GtkEntry *entry = tmp->data; | |
| 252 int pos = (int)gtk_object_get_user_data(GTK_OBJECT(entry)); | |
| 253 g_snprintf(a->proto_opt[pos], sizeof(a->proto_opt[pos]), "%s", | |
| 251 gtk_entry_get_text(entry)); | 254 gtk_entry_get_text(entry)); |
| 252 tmp = tmp->next; | 255 tmp = tmp->next; |
| 253 } | 256 } |
| 254 if (u->opt_entries) | 257 if (u->opt_entries) |
| 255 g_list_free(u->opt_entries); | 258 g_list_free(u->opt_entries); |
| 256 u->opt_entries = NULL; | 259 u->opt_entries = NULL; |
| 257 | 260 |
| 258 g_snprintf(u->iconfile, sizeof(u->iconfile), "%s", u->tmp_iconfile); | 261 g_snprintf(a->iconfile, sizeof(a->iconfile), "%s", u->iconfile); |
| 259 if (u->icondlg) | 262 if (u->icondlg) |
| 260 gtk_widget_destroy(u->icondlg); | 263 gtk_widget_destroy(u->icondlg); |
| 261 u->icondlg = NULL; | 264 u->icondlg = NULL; |
| 262 | 265 |
| 263 gtk_widget_destroy(u->mod); | 266 gtk_widget_destroy(u->mod); |
| 264 } else { | 267 |
| 265 txt = gtk_entry_get_text(GTK_ENTRY(tmpusr.name)); | |
| 266 u = new_user(txt, tmpusr.protocol, tmpusr.options); | |
| 267 | |
| 268 txt = gtk_entry_get_text(GTK_ENTRY(tmpusr.pass)); | |
| 269 g_snprintf(u->password, sizeof(u->password), "%s", txt); | |
| 270 | |
| 271 tmp = tmpusr.opt_entries; | |
| 272 while (tmp) { | |
| 273 GtkEntry *entry = tmp->data; | |
| 274 int pos = (int)gtk_object_get_user_data(GTK_OBJECT(entry)); | |
| 275 g_snprintf(u->proto_opt[pos], sizeof(u->proto_opt[pos]), "%s", | |
| 276 gtk_entry_get_text(entry)); | |
| 277 tmp = tmp->next; | |
| 278 } | |
| 279 if (tmpusr.opt_entries) | |
| 280 g_list_free(tmpusr.opt_entries); | |
| 281 tmpusr.opt_entries = NULL; | |
| 282 | |
| 283 g_snprintf(u->iconfile, sizeof(u->iconfile), "%s", tmpusr.tmp_iconfile); | |
| 284 if (tmpusr.icondlg) | |
| 285 gtk_widget_destroy(tmpusr.icondlg); | |
| 286 tmpusr.icondlg = NULL; | |
| 287 | |
| 288 gtk_widget_destroy(newmod); | |
| 289 } | |
| 290 save_prefs(); | 268 save_prefs(); |
| 291 } | 269 } |
| 292 | 270 |
| 293 static void cancel_mod(GtkWidget *w, struct aim_user *u) | 271 static void cancel_mod(GtkWidget *w, struct mod_user *u) |
| 294 { | 272 { |
| 295 if (u) { | 273 if (u->opt_entries) |
| 296 if (u->opt_entries) | 274 g_list_free(u->opt_entries); |
| 297 g_list_free(u->opt_entries); | 275 u->opt_entries = NULL; |
| 298 u->opt_entries = NULL; | 276 if (u->icondlg) |
| 299 gtk_widget_destroy(u->mod); | 277 gtk_widget_destroy(u->icondlg); |
| 300 if (u->icondlg) | 278 u->icondlg = NULL; |
| 301 gtk_widget_destroy(u->icondlg); | 279 gtk_widget_destroy(u->mod); |
| 302 u->icondlg = NULL; | |
| 303 } else { | |
| 304 if (tmpusr.opt_entries) | |
| 305 g_list_free(tmpusr.opt_entries); | |
| 306 tmpusr.opt_entries = NULL; | |
| 307 gtk_widget_destroy(newmod); | |
| 308 if (tmpusr.icondlg) | |
| 309 gtk_widget_destroy(tmpusr.icondlg); | |
| 310 tmpusr.icondlg = NULL; | |
| 311 } | |
| 312 } | 280 } |
| 313 | 281 |
| 314 static void set_prot(GtkWidget *opt, int proto) | 282 static void set_prot(GtkWidget *opt, int proto) |
| 315 { | 283 { |
| 316 struct aim_user *u = gtk_object_get_user_data(GTK_OBJECT(opt)); | 284 struct mod_user *u = gtk_object_get_user_data(GTK_OBJECT(opt)); |
| 317 struct prpl *p, *q; | 285 struct prpl *p, *q; |
| 318 q = find_prpl(proto); | 286 q = find_prpl(proto); |
| 319 if (u && (u->tmp_protocol != proto)) { | 287 if (u->protocol != proto) { |
| 320 int i; | 288 int i; |
| 321 for (i = 0; i < 7; i++) | 289 for (i = 0; i < 7; i++) |
| 322 u->proto_opt[i][0] = '\0'; | 290 u->proto_opt[i][0] = '\0'; |
| 323 p = find_prpl(u->tmp_protocol); | 291 p = find_prpl(u->protocol); |
| 292 | |
| 324 if (!(p->options & OPT_PROTO_NO_PASSWORD) && (q->options & OPT_PROTO_NO_PASSWORD)) { | 293 if (!(p->options & OPT_PROTO_NO_PASSWORD) && (q->options & OPT_PROTO_NO_PASSWORD)) { |
| 325 gtk_widget_hide(u->pwdbox); | 294 gtk_widget_hide(u->pwdbox); |
| 326 gtk_widget_hide(u->rempass); | 295 gtk_widget_hide(u->rempass); |
| 327 } else if ((p->options & OPT_PROTO_NO_PASSWORD) && !(q->options & OPT_PROTO_NO_PASSWORD)) { | 296 } else if ((p->options & OPT_PROTO_NO_PASSWORD) && !(q->options & OPT_PROTO_NO_PASSWORD)) { |
| 328 gtk_widget_show(u->pwdbox); | 297 gtk_widget_show(u->pwdbox); |
| 331 if (!(p->options & OPT_PROTO_MAIL_CHECK) && (q->options & OPT_PROTO_MAIL_CHECK)) { | 300 if (!(p->options & OPT_PROTO_MAIL_CHECK) && (q->options & OPT_PROTO_MAIL_CHECK)) { |
| 332 gtk_widget_show(u->checkmail); | 301 gtk_widget_show(u->checkmail); |
| 333 } else if ((p->options & OPT_PROTO_MAIL_CHECK) && !(q->options & OPT_PROTO_MAIL_CHECK)) { | 302 } else if ((p->options & OPT_PROTO_MAIL_CHECK) && !(q->options & OPT_PROTO_MAIL_CHECK)) { |
| 334 gtk_widget_hide(u->checkmail); | 303 gtk_widget_hide(u->checkmail); |
| 335 } | 304 } |
| 305 | |
| 336 if (!(p->options & OPT_PROTO_BUDDY_ICON) && (q->options & OPT_PROTO_BUDDY_ICON)) { | 306 if (!(p->options & OPT_PROTO_BUDDY_ICON) && (q->options & OPT_PROTO_BUDDY_ICON)) { |
| 337 gtk_widget_show(u->iconsel); | 307 gtk_widget_show(u->iconsel); |
| 338 } else if ((p->options & OPT_PROTO_BUDDY_ICON) && !(q->options & OPT_PROTO_BUDDY_ICON)) { | 308 } else if ((p->options & OPT_PROTO_BUDDY_ICON) && !(q->options & OPT_PROTO_BUDDY_ICON)) { |
| 339 gtk_widget_hide(u->iconsel); | 309 gtk_widget_hide(u->iconsel); |
| 340 } | 310 } |
| 341 u->tmp_protocol = proto; | 311 |
| 312 u->protocol = proto; | |
| 342 generate_prpl_options(u, u->main); | 313 generate_prpl_options(u, u->main); |
| 343 } else if (!u && (tmpusr.tmp_protocol != proto)) { | 314 } |
| 344 int i; | 315 } |
| 345 for (i = 0; i < 7; i++) | 316 |
| 346 tmpusr.proto_opt[i][0] = '\0'; | 317 static GtkWidget *make_protocol_menu(GtkWidget *box, struct mod_user *u) |
| 347 p = find_prpl(tmpusr.tmp_protocol); | |
| 348 if (!(p->options & OPT_PROTO_NO_PASSWORD) && (q->options & OPT_PROTO_NO_PASSWORD)) { | |
| 349 gtk_widget_hide(tmpusr.pwdbox); | |
| 350 gtk_widget_hide(tmpusr.rempass); | |
| 351 } else if ((p->options & OPT_PROTO_NO_PASSWORD) && !(q->options & OPT_PROTO_NO_PASSWORD)) { | |
| 352 gtk_widget_show(tmpusr.pwdbox); | |
| 353 gtk_widget_show(tmpusr.rempass); | |
| 354 } | |
| 355 if (!(p->options & OPT_PROTO_MAIL_CHECK) && (q->options & OPT_PROTO_MAIL_CHECK)) { | |
| 356 gtk_widget_show(tmpusr.checkmail); | |
| 357 } else if ((p->options & OPT_PROTO_MAIL_CHECK) && !(q->options & OPT_PROTO_MAIL_CHECK)) { | |
| 358 gtk_widget_hide(tmpusr.checkmail); | |
| 359 } | |
| 360 if (!(p->options & OPT_PROTO_BUDDY_ICON) && (q->options & OPT_PROTO_BUDDY_ICON)) { | |
| 361 gtk_widget_show(tmpusr.iconsel); | |
| 362 } else if ((p->options & OPT_PROTO_BUDDY_ICON) && !(q->options & OPT_PROTO_BUDDY_ICON)) { | |
| 363 gtk_widget_hide(tmpusr.iconsel); | |
| 364 } | |
| 365 tmpusr.tmp_protocol = tmpusr.protocol = proto; | |
| 366 generate_prpl_options(NULL, newmain); | |
| 367 } | |
| 368 } | |
| 369 | |
| 370 static GtkWidget *make_protocol_menu(GtkWidget *box, struct aim_user *u) | |
| 371 { | 318 { |
| 372 GtkWidget *optmenu; | 319 GtkWidget *optmenu; |
| 373 GtkWidget *menu; | 320 GtkWidget *menu; |
| 374 GtkWidget *opt; | 321 GtkWidget *opt; |
| 375 GSList *p = protocols; | 322 GSList *p = protocols; |
| 383 | 330 |
| 384 menu = gtk_menu_new(); | 331 menu = gtk_menu_new(); |
| 385 | 332 |
| 386 while (p) { | 333 while (p) { |
| 387 e = (struct prpl *)p->data; | 334 e = (struct prpl *)p->data; |
| 388 if (u) { | 335 if (e->protocol == u->protocol) |
| 389 if (e->protocol == u->tmp_protocol) | 336 found = TRUE; |
| 390 found = TRUE; | 337 if (!found) |
| 391 if (!found) | 338 count++; |
| 392 count++; | |
| 393 } else { | |
| 394 if (e->protocol == tmpusr.tmp_protocol) | |
| 395 found = TRUE; | |
| 396 if (!found) | |
| 397 count++; | |
| 398 } | |
| 399 if (e->name) | 339 if (e->name) |
| 400 opt = gtk_menu_item_new_with_label((*e->name)()); | 340 opt = gtk_menu_item_new_with_label((*e->name)()); |
| 401 else | 341 else |
| 402 opt = gtk_menu_item_new_with_label("Unknown"); | 342 opt = gtk_menu_item_new_with_label("Unknown"); |
| 403 gtk_object_set_user_data(GTK_OBJECT(opt), u); | 343 gtk_object_set_user_data(GTK_OBJECT(opt), u); |
| 412 gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), count); | 352 gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), count); |
| 413 | 353 |
| 414 return optmenu; | 354 return optmenu; |
| 415 } | 355 } |
| 416 | 356 |
| 417 static void des_icon_sel(GtkWidget *w, struct aim_user *u) | 357 static void des_icon_sel(GtkWidget *w, struct mod_user *u) |
| 418 { | 358 { |
| 419 w = u->icondlg; | 359 w = u->icondlg; |
| 420 if (u->icondlg) | 360 if (u->icondlg) |
| 421 u->icondlg = NULL; | 361 u->icondlg = NULL; |
| 422 if (w) | 362 if (w) |
| 423 gtk_widget_destroy(w); | 363 gtk_widget_destroy(w); |
| 424 } | 364 } |
| 425 | 365 |
| 426 static void set_icon(GtkWidget *w, struct aim_user *u) | 366 static void set_icon(GtkWidget *w, struct mod_user *u) |
| 427 { | 367 { |
| 428 GtkWidget *sel = u ? u->icondlg : tmpusr.icondlg; | 368 GtkWidget *sel = u->icondlg; |
| 429 char *file = gtk_file_selection_get_filename(GTK_FILE_SELECTION(sel)); | 369 char *file = gtk_file_selection_get_filename(GTK_FILE_SELECTION(sel)); |
| 430 | 370 |
| 431 if (file_is_dir(file, sel)) | 371 if (file_is_dir(file, sel)) |
| 432 return; | 372 return; |
| 433 | 373 |
| 434 if (u) { | 374 gtk_entry_set_text(GTK_ENTRY(u->iconentry), file); |
| 435 gtk_entry_set_text(GTK_ENTRY(u->iconentry), file); | 375 g_snprintf(u->iconfile, sizeof(u->iconfile), "%s", file); |
| 436 g_snprintf(u->tmp_iconfile, sizeof(u->tmp_iconfile), "%s", file); | 376 u->icondlg = NULL; |
| 437 u->icondlg = NULL; | |
| 438 } else { | |
| 439 gtk_entry_set_text(GTK_ENTRY(tmpusr.iconentry), file); | |
| 440 g_snprintf(tmpusr.tmp_iconfile, sizeof(tmpusr.tmp_iconfile), "%s", file); | |
| 441 tmpusr.icondlg = NULL; | |
| 442 } | |
| 443 | 377 |
| 444 gtk_widget_destroy(sel); | 378 gtk_widget_destroy(sel); |
| 445 } | 379 } |
| 446 | 380 |
| 447 static void sel_icon_dlg(GtkWidget *w, struct aim_user *u) | 381 static void sel_icon_dlg(GtkWidget *w, struct mod_user *u) |
| 448 { | 382 { |
| 449 GtkWidget *dlg; | 383 GtkWidget *dlg; |
| 450 char buf[256]; | 384 char buf[256]; |
| 451 | 385 |
| 452 if ((u && u->icondlg) || (!u && tmpusr.icondlg)) { | 386 if (u->icondlg) { |
| 453 if (u) | 387 gtk_widget_show(u->icondlg); |
| 454 gtk_widget_show(u->icondlg); | |
| 455 else | |
| 456 gtk_widget_show(tmpusr.icondlg); | |
| 457 return; | 388 return; |
| 458 } | 389 } |
| 459 | 390 |
| 460 dlg = gtk_file_selection_new(_("Gaim - Load Buddy Icon")); | 391 dlg = gtk_file_selection_new(_("Gaim - Load Buddy Icon")); |
| 461 gtk_file_selection_hide_fileop_buttons(GTK_FILE_SELECTION(dlg)); | 392 gtk_file_selection_hide_fileop_buttons(GTK_FILE_SELECTION(dlg)); |
| 462 g_snprintf(buf, sizeof(buf), "%s/", g_get_home_dir()); | 393 if (u->iconfile) { |
| 463 gtk_file_selection_set_filename(GTK_FILE_SELECTION(dlg), buf); | 394 char *tmp = g_dirname(u->iconfile); |
| 395 gtk_file_selection_set_filename(GTK_FILE_SELECTION(dlg), tmp); | |
| 396 g_free(tmp); | |
| 397 } else { | |
| 398 g_snprintf(buf, sizeof(buf), "%s/", g_get_home_dir()); | |
| 399 gtk_file_selection_set_filename(GTK_FILE_SELECTION(dlg), buf); | |
| 400 } | |
| 464 | 401 |
| 465 gtk_signal_connect(GTK_OBJECT(dlg), "destroy", GTK_SIGNAL_FUNC(des_icon_sel), u); | 402 gtk_signal_connect(GTK_OBJECT(dlg), "destroy", GTK_SIGNAL_FUNC(des_icon_sel), u); |
| 466 gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(dlg)->cancel_button), "clicked", | 403 gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(dlg)->cancel_button), "clicked", |
| 467 GTK_SIGNAL_FUNC(des_icon_sel), u); | 404 GTK_SIGNAL_FUNC(des_icon_sel), u); |
| 468 gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(dlg)->ok_button), "clicked", | 405 gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(dlg)->ok_button), "clicked", |
| 469 GTK_SIGNAL_FUNC(set_icon), u); | 406 GTK_SIGNAL_FUNC(set_icon), u); |
| 470 | 407 |
| 471 if (u) | 408 u->icondlg = dlg; |
| 472 u->icondlg = dlg; | |
| 473 else | |
| 474 tmpusr.icondlg = dlg; | |
| 475 | 409 |
| 476 gtk_widget_show(dlg); | 410 gtk_widget_show(dlg); |
| 477 } | 411 } |
| 478 | 412 |
| 479 static void reset_icon(GtkWidget *w, struct aim_user *u) | 413 static void reset_icon(GtkWidget *w, struct mod_user *u) |
| 480 { | 414 { |
| 481 if (u) { | 415 u->iconfile[0] = 0; |
| 482 u->tmp_iconfile[0] = 0; | 416 gtk_entry_set_text(GTK_ENTRY(u->iconentry), ""); |
| 483 gtk_entry_set_text(GTK_ENTRY(u->iconentry), ""); | 417 } |
| 484 } else { | 418 |
| 485 tmpusr.tmp_iconfile[0] = 0; | 419 static GtkWidget *build_icon_selection(struct mod_user *u, GtkWidget *box) |
| 486 gtk_entry_set_text(GTK_ENTRY(tmpusr.iconentry), ""); | |
| 487 } | |
| 488 } | |
| 489 | |
| 490 static GtkWidget *build_icon_selection(struct aim_user *u, GtkWidget *box) | |
| 491 { | 420 { |
| 492 GtkWidget *hbox; | 421 GtkWidget *hbox; |
| 493 GtkWidget *label; | 422 GtkWidget *label; |
| 494 GtkWidget *name; | 423 GtkWidget *name; |
| 495 GtkWidget *browse; | 424 GtkWidget *browse; |
| 496 GtkWidget *reset; | 425 GtkWidget *reset; |
| 497 | 426 |
| 498 if (u) | 427 g_snprintf(u->iconfile, sizeof(u->iconfile), "%s", u->user->iconfile); |
| 499 g_snprintf(u->tmp_iconfile, sizeof(u->tmp_iconfile), "%s", u->iconfile); | |
| 500 else | |
| 501 g_snprintf(tmpusr.tmp_iconfile, sizeof(tmpusr.tmp_iconfile), "%s", tmpusr.iconfile); | |
| 502 | 428 |
| 503 hbox = gtk_hbox_new(FALSE, 0); | 429 hbox = gtk_hbox_new(FALSE, 0); |
| 504 gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 5); | 430 gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 5); |
| 505 gtk_widget_show(hbox); | 431 gtk_widget_show(hbox); |
| 506 | 432 |
| 507 label = gtk_label_new(_("Buddy Icon File:")); | 433 label = gtk_label_new(_("Buddy Icon File:")); |
| 508 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); | 434 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); |
| 509 gtk_widget_show(label); | 435 gtk_widget_show(label); |
| 510 | 436 |
| 511 name = gtk_entry_new(); | 437 name = gtk_entry_new(); |
| 512 if (u) | 438 gtk_entry_set_text(GTK_ENTRY(name), u->iconfile); |
| 513 gtk_entry_set_text(GTK_ENTRY(name), u->iconfile); | |
| 514 else | |
| 515 gtk_entry_set_text(GTK_ENTRY(name), tmpusr.iconfile); | |
| 516 gtk_entry_set_editable(GTK_ENTRY(name), FALSE); | 439 gtk_entry_set_editable(GTK_ENTRY(name), FALSE); |
| 517 gtk_box_pack_start(GTK_BOX(hbox), name, TRUE, TRUE, 5); | 440 gtk_box_pack_start(GTK_BOX(hbox), name, TRUE, TRUE, 5); |
| 518 gtk_widget_show(name); | 441 gtk_widget_show(name); |
| 519 if (u) | 442 u->iconentry = name; |
| 520 u->iconentry = name; | |
| 521 else | |
| 522 tmpusr.iconentry = name; | |
| 523 | 443 |
| 524 browse = gtk_button_new_with_label(_("Browse")); | 444 browse = gtk_button_new_with_label(_("Browse")); |
| 525 gtk_signal_connect(GTK_OBJECT(browse), "clicked", GTK_SIGNAL_FUNC(sel_icon_dlg), u); | 445 gtk_signal_connect(GTK_OBJECT(browse), "clicked", GTK_SIGNAL_FUNC(sel_icon_dlg), u); |
| 526 gtk_box_pack_start(GTK_BOX(hbox), browse, FALSE, FALSE, 0); | 446 gtk_box_pack_start(GTK_BOX(hbox), browse, FALSE, FALSE, 0); |
| 527 gtk_widget_show(browse); | 447 gtk_widget_show(browse); |
| 532 gtk_widget_show(reset); | 452 gtk_widget_show(reset); |
| 533 | 453 |
| 534 return hbox; | 454 return hbox; |
| 535 } | 455 } |
| 536 | 456 |
| 537 static void generate_general_options(struct aim_user *u, GtkWidget *book) | 457 static void generate_general_options(struct mod_user *u, GtkWidget *book) |
| 538 { | 458 { |
| 539 GtkWidget *vbox; | 459 GtkWidget *vbox; |
| 540 GtkWidget *hbox; | 460 GtkWidget *hbox; |
| 541 GtkWidget *pwdbox; | 461 GtkWidget *pwdbox; |
| 542 GtkWidget *label; | 462 GtkWidget *label; |
| 585 | 505 |
| 586 iconsel = build_icon_selection(u, vbox); | 506 iconsel = build_icon_selection(u, vbox); |
| 587 | 507 |
| 588 gtk_widget_show_all(vbox); | 508 gtk_widget_show_all(vbox); |
| 589 | 509 |
| 590 if (u) { | 510 u->name = name; |
| 591 u->name = name; | 511 u->pwdbox = pwdbox; |
| 592 u->pwdbox = pwdbox; | 512 u->pass = pass; |
| 593 u->pass = pass; | 513 u->rempass = rempass; |
| 594 u->rempass = rempass; | 514 u->checkmail = checkmail; |
| 595 u->checkmail = checkmail; | 515 u->iconsel = iconsel; |
| 596 u->iconsel = iconsel; | 516 gtk_entry_set_text(GTK_ENTRY(name), u->user->username); |
| 597 gtk_entry_set_text(GTK_ENTRY(name), u->username); | 517 gtk_entry_set_text(GTK_ENTRY(pass), u->user->password); |
| 598 gtk_entry_set_text(GTK_ENTRY(pass), u->password); | 518 gtk_entry_set_editable(GTK_ENTRY(name), FALSE); |
| 599 gtk_entry_set_editable(GTK_ENTRY(name), FALSE); | 519 } |
| 600 } else { | 520 |
| 601 tmpusr.name = name; | 521 static void generate_prpl_options(struct mod_user *u, GtkWidget *book) |
| 602 tmpusr.pwdbox = pwdbox; | 522 { |
| 603 tmpusr.pass = pass; | 523 struct prpl *p = find_prpl(u->protocol); |
| 604 tmpusr.rempass = rempass; | 524 |
| 605 tmpusr.checkmail = checkmail; | 525 GList *op, *tmp; |
| 606 tmpusr.iconsel = iconsel; | 526 |
| 607 } | 527 GtkWidget *vbox; |
| 608 } | 528 GtkWidget *hbox; |
| 609 | 529 GtkWidget *label; |
| 610 static void generate_prpl_options(struct aim_user *u, GtkWidget *book) | 530 GtkWidget *entry; |
| 611 { | 531 |
| 612 struct prpl *p; | 532 char buf[256]; |
| 613 | |
| 614 if (u) | |
| 615 p = find_prpl(u->tmp_protocol); | |
| 616 else | |
| 617 p = find_prpl(tmpusr.protocol); | |
| 618 | 533 |
| 619 /* page 0 is general, keep it. page 1 is options for our | 534 /* page 0 is general, keep it. page 1 is options for our |
| 620 * particular protocol, so clear it out and make a new one. */ | 535 * particular protocol, so clear it out and make a new one. */ |
| 621 | 536 |
| 622 gtk_notebook_remove_page(GTK_NOTEBOOK(book), 1); | 537 gtk_notebook_remove_page(GTK_NOTEBOOK(book), 1); |
| 623 | 538 |
| 624 if (!p) | 539 if (!p) |
| 625 return; | 540 return; |
| 626 | 541 |
| 627 if (u && u->opt_entries) { | 542 if (u->opt_entries) { |
| 628 g_list_free(u->opt_entries); | 543 g_list_free(u->opt_entries); |
| 629 u->opt_entries = NULL; | 544 u->opt_entries = NULL; |
| 630 } else if (!u && tmpusr.opt_entries) { | 545 } |
| 631 g_list_free(tmpusr.opt_entries); | 546 |
| 632 tmpusr.opt_entries = NULL; | 547 if (!p->user_opts) |
| 633 } | 548 return; |
| 634 | 549 |
| 635 if (p->user_opts) { | 550 tmp = op = (*p->user_opts)(); |
| 636 GList *op = (*p->user_opts)(); | 551 |
| 637 GList *tmp = op; | 552 vbox = gtk_vbox_new(FALSE, 5); |
| 638 | 553 gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); |
| 639 GtkWidget *vbox; | 554 g_snprintf(buf, sizeof(buf), "%s Options", (*p->name)()); |
| 640 GtkWidget *hbox; | 555 gtk_notebook_append_page(GTK_NOTEBOOK(book), vbox, gtk_label_new(buf)); |
| 641 GtkWidget *label; | 556 gtk_widget_show(vbox); |
| 642 GtkWidget *entry; | 557 |
| 643 | 558 while (op) { |
| 644 char buf[256]; | 559 struct proto_user_opt *puo = op->data; |
| 645 | 560 |
| 646 vbox = gtk_vbox_new(FALSE, 5); | 561 hbox = gtk_hbox_new(FALSE, 5); |
| 647 gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); | 562 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); |
| 648 g_snprintf(buf, sizeof(buf), "%s Options", (*p->name)()); | 563 gtk_widget_show(hbox); |
| 649 gtk_notebook_append_page(GTK_NOTEBOOK(book), vbox, gtk_label_new(buf)); | 564 |
| 650 gtk_widget_show(vbox); | 565 label = gtk_label_new(puo->label); |
| 651 | 566 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); |
| 652 while (op) { | 567 gtk_widget_show(label); |
| 653 struct proto_user_opt *puo = op->data; | 568 |
| 654 | 569 entry = gtk_entry_new(); |
| 655 hbox = gtk_hbox_new(FALSE, 5); | 570 gtk_box_pack_end(GTK_BOX(hbox), entry, FALSE, FALSE, 0); |
| 656 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); | 571 gtk_object_set_user_data(GTK_OBJECT(entry), (void *)puo->pos); |
| 657 gtk_widget_show(hbox); | 572 if (u->proto_opt[puo->pos][0]) { |
| 658 | 573 debug_printf("setting text %s\n", u->proto_opt[puo->pos]); |
| 659 label = gtk_label_new(puo->label); | 574 gtk_entry_set_text(GTK_ENTRY(entry), u->proto_opt[puo->pos]); |
| 660 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); | 575 } else { |
| 661 gtk_widget_show(label); | 576 gtk_entry_set_text(GTK_ENTRY(entry), puo->def); |
| 662 | |
| 663 entry = gtk_entry_new(); | |
| 664 gtk_box_pack_end(GTK_BOX(hbox), entry, FALSE, FALSE, 0); | |
| 665 gtk_object_set_user_data(GTK_OBJECT(entry), (void *)puo->pos); | |
| 666 if (u && u->proto_opt[puo->pos][0]) { | |
| 667 debug_printf("setting text %s\n", u->proto_opt[puo->pos]); | |
| 668 gtk_entry_set_text(GTK_ENTRY(entry), u->proto_opt[puo->pos]); | |
| 669 } else { | |
| 670 gtk_entry_set_text(GTK_ENTRY(entry), puo->def); | |
| 671 } | |
| 672 gtk_widget_show(entry); | |
| 673 | |
| 674 if (u) | |
| 675 u->opt_entries = g_list_append(u->opt_entries, entry); | |
| 676 else | |
| 677 tmpusr.opt_entries = g_list_append(tmpusr.opt_entries, entry); | |
| 678 | |
| 679 g_free(puo); | |
| 680 op = op->next; | |
| 681 } | 577 } |
| 682 g_list_free(tmp); | 578 gtk_widget_show(entry); |
| 683 } | 579 |
| 684 } | 580 u->opt_entries = g_list_append(u->opt_entries, entry); |
| 685 | 581 |
| 686 static void show_acct_mod(struct aim_user *u) | 582 g_free(puo); |
| 583 op = op->next; | |
| 584 } | |
| 585 g_list_free(tmp); | |
| 586 } | |
| 587 | |
| 588 static void show_acct_mod(struct aim_user *a) | |
| 687 { | 589 { |
| 688 /* here we can have all the aim_user options, including ones not shown in the main acctedit | 590 /* here we can have all the aim_user options, including ones not shown in the main acctedit |
| 689 * window. this can keep the size of the acctedit window small and readable, and make this | 591 * window. this can keep the size of the acctedit window small and readable, and make this |
| 690 * one the powerful editor. this is where things like name/password are edited, but can | 592 * one the powerful editor. this is where things like name/password are edited, but can |
| 691 * also have toggles (and even more complex options) like whether to autologin or whether | 593 * also have toggles (and even more complex options) like whether to autologin or whether |
| 697 GtkWidget *hbox; | 599 GtkWidget *hbox; |
| 698 GtkWidget *button; | 600 GtkWidget *button; |
| 699 | 601 |
| 700 struct prpl *p; | 602 struct prpl *p; |
| 701 | 603 |
| 702 if (!u && newmod) { | 604 struct mod_user *u = find_mod_user(a); |
| 703 gtk_widget_show(newmod); | 605 |
| 704 return; | 606 if (!u) { |
| 705 } | 607 u = g_new0(struct mod_user, 1); |
| 706 if (u && u->mod) { | 608 u->user = a; |
| 609 mod_users = g_slist_append(mod_users, u); | |
| 610 | |
| 611 if (a) { | |
| 612 u->options = a->options; | |
| 613 if (find_prpl(a->protocol)) | |
| 614 u->protocol = a->protocol; | |
| 615 else if (protocols) | |
| 616 u->protocol = ((struct prpl *)protocols->data)->protocol; | |
| 617 else | |
| 618 u->protocol = -1; | |
| 619 g_snprintf(u->iconfile, sizeof(u->iconfile), "%s", a->iconfile); | |
| 620 } else { | |
| 621 u->options = OPT_USR_REM_PASS; | |
| 622 if (find_prpl(DEFAULT_PROTO)) | |
| 623 u->protocol = DEFAULT_PROTO; | |
| 624 else if (protocols) | |
| 625 u->protocol = ((struct prpl *)protocols->data)->protocol; | |
| 626 else | |
| 627 u->protocol = -1; | |
| 628 } | |
| 629 } else { | |
| 707 gtk_widget_show(u->mod); | 630 gtk_widget_show(u->mod); |
| 708 return; | 631 return; |
| 709 } | 632 } |
| 710 | 633 |
| 711 mod = gtk_window_new(GTK_WINDOW_TOPLEVEL); | 634 mod = gtk_window_new(GTK_WINDOW_TOPLEVEL); |
| 723 | 646 |
| 724 book = gtk_notebook_new(); | 647 book = gtk_notebook_new(); |
| 725 gtk_box_pack_start(GTK_BOX(box), book, FALSE, FALSE, 0); | 648 gtk_box_pack_start(GTK_BOX(box), book, FALSE, FALSE, 0); |
| 726 gtk_widget_show(book); | 649 gtk_widget_show(book); |
| 727 | 650 |
| 728 if (u) { | |
| 729 if (find_prpl(u->protocol)) | |
| 730 u->tmp_protocol = u->protocol; | |
| 731 else if (protocols) | |
| 732 u->tmp_protocol = ((struct prpl *)protocols->data)->protocol; | |
| 733 else | |
| 734 u->tmp_protocol = -1; | |
| 735 } else { | |
| 736 if (find_prpl(tmpusr.protocol)) | |
| 737 tmpusr.tmp_protocol = tmpusr.protocol; | |
| 738 else if (protocols) | |
| 739 tmpusr.tmp_protocol = ((struct prpl *)protocols->data)->protocol; | |
| 740 else | |
| 741 tmpusr.tmp_protocol = -1; | |
| 742 } | |
| 743 generate_general_options(u, book); | 651 generate_general_options(u, book); |
| 744 generate_prpl_options(u, book); | 652 generate_prpl_options(u, book); |
| 745 | 653 |
| 746 hbox = gtk_hbox_new(FALSE, 5); | 654 hbox = gtk_hbox_new(FALSE, 5); |
| 747 gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 0); | 655 gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 0); |
| 755 button = picture_button(mod, _("OK"), ok_xpm); | 663 button = picture_button(mod, _("OK"), ok_xpm); |
| 756 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0); | 664 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0); |
| 757 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(ok_mod), u); | 665 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(ok_mod), u); |
| 758 gtk_widget_show(button); | 666 gtk_widget_show(button); |
| 759 | 667 |
| 760 if (u) { | 668 u->mod = mod; |
| 761 u->mod = mod; | 669 u->main = book; /* sorry, i think i broke the joke :) */ |
| 762 u->main = book; /* sorry, i think i broke the joke :) */ | 670 |
| 763 u->tmp_options = u->options; | 671 p = find_prpl(u->protocol); |
| 764 } else { | 672 if (p && (p->options & OPT_PROTO_NO_PASSWORD)) { |
| 765 newmod = mod; | 673 gtk_widget_hide(u->pwdbox); |
| 766 newmain = book; | 674 gtk_widget_hide(u->rempass); |
| 767 } | 675 } |
| 768 | 676 if (p && (!(p->options & OPT_PROTO_MAIL_CHECK))) |
| 769 if (u) { | 677 gtk_widget_hide(u->checkmail); |
| 770 p = find_prpl(u->tmp_protocol); | 678 if (p && (!(p->options & OPT_PROTO_BUDDY_ICON))) |
| 771 if (p && (p->options & OPT_PROTO_NO_PASSWORD)) { | 679 gtk_widget_hide(u->iconsel); |
| 772 gtk_widget_hide(u->pwdbox); | |
| 773 gtk_widget_hide(u->rempass); | |
| 774 } | |
| 775 if (p && (!(p->options & OPT_PROTO_MAIL_CHECK))) | |
| 776 gtk_widget_hide(u->checkmail); | |
| 777 if (p && (!(p->options & OPT_PROTO_BUDDY_ICON))) | |
| 778 gtk_widget_hide(u->iconsel); | |
| 779 } else { | |
| 780 p = find_prpl(tmpusr.tmp_protocol); | |
| 781 if (p && (p->options & OPT_PROTO_NO_PASSWORD)) { | |
| 782 gtk_widget_hide(tmpusr.pwdbox); | |
| 783 gtk_widget_hide(tmpusr.rempass); | |
| 784 } | |
| 785 if (p && (!(p->options & OPT_PROTO_MAIL_CHECK))) | |
| 786 gtk_widget_hide(tmpusr.checkmail); | |
| 787 if (p && (!(p->options & OPT_PROTO_BUDDY_ICON))) | |
| 788 gtk_widget_hide(tmpusr.iconsel); | |
| 789 } | |
| 790 | 680 |
| 791 gtk_widget_show(mod); | 681 gtk_widget_show(mod); |
| 792 } | 682 } |
| 793 | 683 |
| 794 static void add_acct(GtkWidget *w, gpointer d) | 684 static void add_acct(GtkWidget *w, gpointer d) |
| 810 } | 700 } |
| 811 l = l->next; | 701 l = l->next; |
| 812 } | 702 } |
| 813 } | 703 } |
| 814 | 704 |
| 815 static void pass_des(GtkWidget *w, struct aim_user *u) | 705 struct pass_prompt { |
| 816 { | 706 struct aim_user *u; |
| 817 gtk_widget_destroy(w); | 707 GtkWidget *win; |
| 818 u->passprmt = NULL; | 708 GtkWidget *entry; |
| 819 } | 709 }; |
| 820 | 710 static GSList *passes = NULL; |
| 821 static void pass_cancel(GtkWidget *w, struct aim_user *u) | 711 |
| 822 { | 712 static struct pass_prompt *find_pass_prompt(struct aim_user *u) |
| 823 gtk_widget_destroy(u->passprmt); | 713 { |
| 824 u->passprmt = NULL; | 714 GSList *p = passes; |
| 825 } | 715 while (p) { |
| 826 | 716 struct pass_prompt *r = p->data; |
| 827 static void pass_signon(GtkWidget *w, struct aim_user *u) | 717 if (r->u == u) |
| 828 { | 718 return r; |
| 829 const char *txt = gtk_entry_get_text(GTK_ENTRY(u->passentry)); | 719 p = p->next; |
| 830 g_snprintf(u->password, sizeof(u->password), "%s", txt); | 720 } |
| 721 return NULL; | |
| 722 } | |
| 723 | |
| 724 static void pass_des(GtkWidget *w, struct pass_prompt *p) | |
| 725 { | |
| 726 passes = g_slist_remove(passes, p); | |
| 727 g_free(p); | |
| 728 } | |
| 729 | |
| 730 static void pass_cancel(GtkWidget *w, struct pass_prompt *p) | |
| 731 { | |
| 732 gtk_widget_destroy(p->win); | |
| 733 } | |
| 734 | |
| 735 static void pass_signon(GtkWidget *w, struct pass_prompt *p) | |
| 736 { | |
| 737 const char *txt = gtk_entry_get_text(GTK_ENTRY(p->entry)); | |
| 738 g_snprintf(p->u->password, sizeof(p->u->password), "%s", txt); | |
| 831 #ifdef USE_APPLET | 739 #ifdef USE_APPLET |
| 832 set_user_state(signing_on); | 740 set_user_state(signing_on); |
| 833 #endif | 741 #endif |
| 834 gtk_widget_destroy(u->passprmt); | 742 serv_login(p->u); |
| 835 u->passprmt = NULL; | 743 gtk_widget_destroy(p->win); |
| 836 serv_login(u); | |
| 837 } | 744 } |
| 838 | 745 |
| 839 static void do_pass_dlg(struct aim_user *u) | 746 static void do_pass_dlg(struct aim_user *u) |
| 840 { | 747 { |
| 841 /* we can safely assume that u is not NULL */ | 748 /* we can safely assume that u is not NULL */ |
| 843 GtkWidget *vbox; | 750 GtkWidget *vbox; |
| 844 GtkWidget *hbox; | 751 GtkWidget *hbox; |
| 845 char buf[96]; | 752 char buf[96]; |
| 846 GtkWidget *label; | 753 GtkWidget *label; |
| 847 GtkWidget *button; | 754 GtkWidget *button; |
| 848 | 755 struct pass_prompt *p = find_pass_prompt(u); |
| 849 if (u->passprmt) { | 756 |
| 850 gtk_widget_show(u->passprmt); | 757 if (p) { |
| 758 gtk_widget_show(p->win); | |
| 851 return; | 759 return; |
| 852 } | 760 } |
| 853 u->passprmt = gtk_window_new(GTK_WINDOW_DIALOG); | 761 |
| 854 gtk_window_set_wmclass(GTK_WINDOW(u->passprmt), "password", "Gaim"); | 762 p = g_new0(struct pass_prompt, 1); |
| 855 gtk_container_border_width(GTK_CONTAINER(u->passprmt), 5); | 763 p->u = u; |
| 856 gtk_signal_connect(GTK_OBJECT(u->passprmt), "destroy", GTK_SIGNAL_FUNC(pass_des), u); | 764 passes = g_slist_append(passes, p); |
| 857 gtk_widget_realize(u->passprmt); | 765 |
| 858 aol_icon(u->passprmt->window); | 766 p->win = gtk_window_new(GTK_WINDOW_DIALOG); |
| 767 gtk_window_set_wmclass(GTK_WINDOW(p->win), "password", "Gaim"); | |
| 768 gtk_container_border_width(GTK_CONTAINER(p->win), 5); | |
| 769 gtk_signal_connect(GTK_OBJECT(p->win), "destroy", GTK_SIGNAL_FUNC(pass_des), p); | |
| 770 gtk_widget_realize(p->win); | |
| 771 aol_icon(p->win->window); | |
| 859 | 772 |
| 860 frame = gtk_frame_new(_("Enter Password")); | 773 frame = gtk_frame_new(_("Enter Password")); |
| 861 gtk_container_add(GTK_CONTAINER(u->passprmt), frame); | 774 gtk_container_add(GTK_CONTAINER(p->win), frame); |
| 862 gtk_widget_show(frame); | 775 gtk_widget_show(frame); |
| 863 | 776 |
| 864 vbox = gtk_vbox_new(FALSE, 5); | 777 vbox = gtk_vbox_new(FALSE, 5); |
| 865 gtk_container_add(GTK_CONTAINER(frame), vbox); | 778 gtk_container_add(GTK_CONTAINER(frame), vbox); |
| 866 gtk_widget_show(vbox); | 779 gtk_widget_show(vbox); |
| 872 g_snprintf(buf, sizeof(buf), "Password for %s:", u->username); | 785 g_snprintf(buf, sizeof(buf), "Password for %s:", u->username); |
| 873 label = gtk_label_new(buf); | 786 label = gtk_label_new(buf); |
| 874 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); | 787 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); |
| 875 gtk_widget_show(label); | 788 gtk_widget_show(label); |
| 876 | 789 |
| 877 u->passentry = gtk_entry_new(); | 790 p->entry = gtk_entry_new(); |
| 878 gtk_entry_set_visibility(GTK_ENTRY(u->passentry), FALSE); | 791 gtk_entry_set_visibility(GTK_ENTRY(p->entry), FALSE); |
| 879 gtk_box_pack_start(GTK_BOX(hbox), u->passentry, FALSE, FALSE, 5); | 792 gtk_box_pack_start(GTK_BOX(hbox), p->entry, FALSE, FALSE, 5); |
| 880 gtk_signal_connect(GTK_OBJECT(u->passentry), "activate", GTK_SIGNAL_FUNC(pass_signon), u); | 793 gtk_signal_connect(GTK_OBJECT(p->entry), "activate", GTK_SIGNAL_FUNC(pass_signon), p); |
| 881 gtk_widget_grab_focus(u->passentry); | 794 gtk_widget_grab_focus(p->entry); |
| 882 gtk_widget_show(u->passentry); | 795 gtk_widget_show(p->entry); |
| 883 | 796 |
| 884 hbox = gtk_hbox_new(FALSE, 5); | 797 hbox = gtk_hbox_new(FALSE, 5); |
| 885 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5); | 798 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5); |
| 886 gtk_widget_show(hbox); | 799 gtk_widget_show(hbox); |
| 887 | 800 |
| 888 button = picture_button(u->passprmt, _("Cancel"), cancel_xpm); | 801 button = picture_button(p->win, _("Cancel"), cancel_xpm); |
| 889 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(pass_cancel), u); | 802 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(pass_cancel), p); |
| 890 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 5); | 803 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 5); |
| 891 | 804 |
| 892 button = picture_button(u->passprmt, _("Signon"), ok_xpm); | 805 button = picture_button(p->win, _("Signon"), ok_xpm); |
| 893 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(pass_signon), u); | 806 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(pass_signon), p); |
| 894 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 5); | 807 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 5); |
| 895 | 808 |
| 896 gtk_widget_show(u->passprmt); | 809 gtk_widget_show(p->win); |
| 897 } | 810 } |
| 898 | 811 |
| 899 static void acct_signin(GtkWidget *w, gpointer d) | 812 static void acct_signin(GtkWidget *w, gpointer d) |
| 900 { | 813 { |
| 901 GList *l = GTK_CLIST(list)->selection; | 814 GList *l = GTK_CLIST(list)->selection; |
| 1230 gtk_progress_bar_update(GTK_PROGRESS_BAR(meter->progress), howfar / LOGIN_STEPS); | 1143 gtk_progress_bar_update(GTK_PROGRESS_BAR(meter->progress), howfar / LOGIN_STEPS); |
| 1231 gtk_statusbar_pop(GTK_STATUSBAR(meter->status), 1); | 1144 gtk_statusbar_pop(GTK_STATUSBAR(meter->status), 1); |
| 1232 gtk_statusbar_push(GTK_STATUSBAR(meter->status), 1, message); | 1145 gtk_statusbar_push(GTK_STATUSBAR(meter->status), 1, message); |
| 1233 } | 1146 } |
| 1234 | 1147 |
| 1235 static void set_kick_null(GtkObject *obj, struct aim_user *u) | 1148 struct kick_dlg { |
| 1236 { | 1149 struct aim_user *user; |
| 1237 u->kick_dlg = NULL; | 1150 GtkWidget *dlg; |
| 1151 }; | |
| 1152 static GSList *kicks = NULL; | |
| 1153 | |
| 1154 static struct kick_dlg *find_kick_dlg(struct aim_user *u) | |
| 1155 { | |
| 1156 GSList *k = kicks; | |
| 1157 while (k) { | |
| 1158 struct kick_dlg *d = k->data; | |
| 1159 if (d->user == u) | |
| 1160 return d; | |
| 1161 k = k->next; | |
| 1162 } | |
| 1163 return NULL; | |
| 1164 } | |
| 1165 | |
| 1166 static void set_kick_null(GtkObject *obj, struct kick_dlg *k) | |
| 1167 { | |
| 1168 kicks = g_slist_remove(kicks, k); | |
| 1169 g_free(k); | |
| 1238 } | 1170 } |
| 1239 | 1171 |
| 1240 void hide_login_progress(struct gaim_connection *gc, char *why) | 1172 void hide_login_progress(struct gaim_connection *gc, char *why) |
| 1241 { | 1173 { |
| 1242 char buf[2048]; | 1174 char buf[2048]; |
| 1175 struct kick_dlg *k = find_kick_dlg(gc->user); | |
| 1243 struct signon_meter *meter = find_signon_meter(gc); | 1176 struct signon_meter *meter = find_signon_meter(gc); |
| 1244 sprintf(buf, _("%s\n%s was unable to sign on: %s"), full_date(), gc->username, why); | 1177 sprintf(buf, _("%s\n%s was unable to sign on: %s"), full_date(), gc->username, why); |
| 1245 if (gc->user->kick_dlg) | 1178 if (k) |
| 1246 gtk_widget_destroy(gc->user->kick_dlg); | 1179 gtk_widget_destroy(k->dlg); |
| 1247 gc->user->kick_dlg = do_error_dialog(buf, _("Signon Error")); | 1180 k = g_new0(struct kick_dlg, 1); |
| 1248 gtk_signal_connect(GTK_OBJECT(gc->user->kick_dlg), "destroy", | 1181 k->user = gc->user; |
| 1249 GTK_SIGNAL_FUNC(set_kick_null), gc->user); | 1182 k->dlg = do_error_dialog(buf, _("Signon Error")); |
| 1183 gtk_signal_connect(GTK_OBJECT(k->dlg), "destroy", GTK_SIGNAL_FUNC(set_kick_null), k); | |
| 1250 if (meter) { | 1184 if (meter) { |
| 1251 gtk_widget_destroy(meter->window); | 1185 gtk_widget_destroy(meter->window); |
| 1252 meters = g_slist_remove(meters, meter); | 1186 meters = g_slist_remove(meters, meter); |
| 1253 g_free(meter); | 1187 g_free(meter); |
| 1254 } | 1188 } |
