Mercurial > pidgin
comparison src/buddy.c @ 1069:5d4926907b21
[gaim-migrate @ 1079]
you can now safely remove groups and buddies from your buddy list.
committer: Tailor Script <tailor@pidgin.im>
| author | Eric Warmenhoven <eric@warmenhoven.org> |
|---|---|
| date | Sun, 05 Nov 2000 12:17:32 +0000 |
| parents | ed28707debdc |
| children | b288f17c2fb2 |
comparison
equal
deleted
inserted
replaced
| 1068:ed28707debdc | 1069:5d4926907b21 |
|---|---|
| 97 GSList *members; | 97 GSList *members; |
| 98 char *name; | 98 char *name; |
| 99 }; | 99 }; |
| 100 static GSList *shows = NULL; | 100 static GSList *shows = NULL; |
| 101 | 101 |
| 102 static struct group_show *find_group_show(char *group); | |
| 103 static struct buddy_show *find_buddy_show(struct group_show *gs, char *name); | |
| 104 static int group_number(char *group); | |
| 105 static int buddy_number(char *group, char *buddy); | |
| 106 static struct group_show *new_group_show(char *group); | |
| 107 static struct buddy_show *new_buddy_show(struct group_show *gs, struct buddy *buddy); | |
| 108 static struct group_show *find_gs_by_bs(struct buddy_show *b); | |
| 102 | 109 |
| 103 void destroy_buddy() | 110 void destroy_buddy() |
| 104 { | 111 { |
| 105 if (blist) | 112 if (blist) |
| 106 gtk_widget_destroy(blist); | 113 gtk_widget_destroy(blist); |
| 381 void remove_buddy(struct gaim_connection *gc, struct group *rem_g, struct buddy *rem_b) | 388 void remove_buddy(struct gaim_connection *gc, struct group *rem_g, struct buddy *rem_b) |
| 382 { | 389 { |
| 383 GSList *grp; | 390 GSList *grp; |
| 384 GSList *mem; | 391 GSList *mem; |
| 385 struct conversation *c; | 392 struct conversation *c; |
| 393 struct group_show *gs; | |
| 394 struct buddy_show *bs; | |
| 386 | 395 |
| 387 struct group *delg; | 396 struct group *delg; |
| 388 struct buddy *delb; | 397 struct buddy *delb; |
| 389 | 398 |
| 390 /* we assume that gc is not NULL and that the buddy exists somewhere within the | 399 /* we assume that gc is not NULL and that the buddy exists somewhere within the |
| 391 * gc's buddy list, therefore we can safely remove it. we need to ensure this | 400 * gc's buddy list, therefore we can safely remove it. we need to ensure this |
| 392 * via the UI | 401 * via the UI |
| 393 */ | 402 */ |
| 403 | |
| 404 gs = find_group_show(rem_g->name); | |
| 405 if (gs) { | |
| 406 bs = find_buddy_show(gs, rem_b->name); | |
| 407 if (bs) { | |
| 408 if (g_slist_find(bs->connlist, gc)) { | |
| 409 bs->connlist = g_slist_remove(bs->connlist, gc); | |
| 410 if (!g_slist_length(bs->connlist)) { | |
| 411 gs->members = g_slist_remove(gs->members, bs); | |
| 412 if (bs->log_timer > 0) | |
| 413 gtk_timeout_remove(bs->log_timer); | |
| 414 gtk_widget_destroy(bs->item); | |
| 415 g_free(bs->show); | |
| 416 g_free(bs->name); | |
| 417 g_free(bs); | |
| 418 if (!g_slist_length(gs->members)) { | |
| 419 shows = g_slist_remove(shows, gs); | |
| 420 gtk_widget_destroy(gs->item); | |
| 421 g_free(gs->name); | |
| 422 g_free(gs); | |
| 423 } | |
| 424 } | |
| 425 } | |
| 426 } | |
| 427 } | |
| 394 | 428 |
| 395 grp = g_slist_find(gc->groups, rem_g); | 429 grp = g_slist_find(gc->groups, rem_g); |
| 396 delg = (struct group *)grp->data; | 430 delg = (struct group *)grp->data; |
| 397 mem = delg->members; | 431 mem = delg->members; |
| 398 | 432 |
| 430 delg = (struct group *)grp->data; | 464 delg = (struct group *)grp->data; |
| 431 mem = delg->members; | 465 mem = delg->members; |
| 432 | 466 |
| 433 while(delg->members) { | 467 while(delg->members) { |
| 434 delb = (struct buddy *)delg->members->data; | 468 delb = (struct buddy *)delg->members->data; |
| 435 delg->members = g_slist_remove(delg->members, delb); | 469 remove_buddy(gc, delg, delb); |
| 436 c = find_conversation(delb->name); | |
| 437 if (c) | |
| 438 update_convo_add_button(c); | |
| 439 serv_remove_buddy(gc, delb->name); | 470 serv_remove_buddy(gc, delb->name); |
| 440 g_free(delb); | |
| 441 } | 471 } |
| 442 | 472 |
| 443 gc->groups = g_slist_remove(gc->groups, delg); | 473 gc->groups = g_slist_remove(gc->groups, delg); |
| 444 g_free(delg); | 474 g_free(delg); |
| 445 | 475 |
| 491 | 521 |
| 492 return FALSE; | 522 return FALSE; |
| 493 } | 523 } |
| 494 | 524 |
| 495 | 525 |
| 526 static void redo_buddy_list() { | |
| 527 /* so here we can safely assume that we don't have to add or delete anything, we | |
| 528 * just have to go through and reorder everything. remember, nothing is going to | |
| 529 * change connections, so we can assume that we don't have to change any user | |
| 530 * data or anything. this is just a simple reordering. so calm down. */ | |
| 531 GSList *s = shows; | |
| 532 struct group_show *g; | |
| 533 GSList *m; | |
| 534 struct buddy_show *b; | |
| 535 struct gaim_connection *gc; | |
| 536 } | |
| 496 | 537 |
| 497 static void edit_tree_move (GtkCTree *ctree, GtkCTreeNode *child, GtkCTreeNode *parent, | 538 static void edit_tree_move (GtkCTree *ctree, GtkCTreeNode *child, GtkCTreeNode *parent, |
| 498 GtkCTreeNode *sibling, gpointer data) | 539 GtkCTreeNode *sibling, gpointer data) |
| 499 { | 540 { |
| 500 gboolean leaf; | 541 gboolean leaf; |
| 632 gc->groups = g_slist_append(gc->groups, g); | 673 gc->groups = g_slist_append(gc->groups, g); |
| 633 } | 674 } |
| 634 } | 675 } |
| 635 | 676 |
| 636 do_export( (GtkWidget *) NULL, 0 ); | 677 do_export( (GtkWidget *) NULL, 0 ); |
| 678 | |
| 679 redo_buddy_list(); | |
| 637 } | 680 } |
| 638 | 681 |
| 639 | 682 |
| 640 | 683 |
| 641 void build_edit_tree() | 684 void build_edit_tree() |
