Mercurial > ~mikael > mcabber > hg
comparison mcabber/src/roster.c @ 506:74dcd0df532e
"/move" does not jump to the buddy in the new group
author | Mikael Berthe <mikael@lilotux.net> |
---|---|
date | Fri, 11 Nov 2005 22:47:28 +0100 |
parents | 7c1ca00070e8 |
children | cd52ddef5ce1 |
comparison
equal
deleted
inserted
replaced
505:7ffb1a3ed1b8 | 506:74dcd0df532e |
---|---|
674 } | 674 } |
675 | 675 |
676 // buddy_setgroup() | 676 // buddy_setgroup() |
677 // Change the group of current buddy | 677 // Change the group of current buddy |
678 // | 678 // |
679 // Warning! This function changes current_buddy! | 679 // Warning! This function changes the specified buddy! |
680 // Warning! Old buddy is deleted, so you can't acces to its jid/name after | 680 // Warning! Old buddy is deleted, so you can't access to its jid/name after |
681 // calling this function. | 681 // calling this function (they are free'd). |
682 void buddy_setgroup(gpointer rosterdata, char *newgroupname) | 682 void buddy_setgroup(gpointer rosterdata, char *newgroupname) |
683 { | 683 { |
684 roster *roster_usr = rosterdata; | 684 roster *roster_usr = rosterdata; |
685 GSList **sl_group; | 685 GSList **sl_group; |
686 GSList *sl_clone; | 686 GSList *sl_clone; |
687 roster *roster_clone; | 687 roster *roster_clone; |
688 int is_alternate; | |
689 | 688 |
690 // A group has no group :) | 689 // A group has no group :) |
691 if (roster_usr->type & ROSTER_TYPE_GROUP) return; | 690 if (roster_usr->type & ROSTER_TYPE_GROUP) return; |
692 | 691 |
693 // Remove the buddy from current group | 692 // Remove the buddy from current group |
707 if (roster_usr->name) g_free((gchar*)roster_usr->name); | 706 if (roster_usr->name) g_free((gchar*)roster_usr->name); |
708 if (roster_usr->nickname) g_free((gchar*)roster_usr->nickname); | 707 if (roster_usr->nickname) g_free((gchar*)roster_usr->nickname); |
709 free_all_resources(&roster_usr->resource); | 708 free_all_resources(&roster_usr->resource); |
710 g_free(roster_usr); | 709 g_free(roster_usr); |
711 | 710 |
712 // If new new group is folded, the curren_buddy will be lost, and the | |
713 // chat window won't be correctly refreshed. So we make sure it isn't... | |
714 ((roster*)((GSList*)roster_clone->list)->data)->flags &= ~ROSTER_FLAG_HIDE; | |
715 | |
716 // Little trick to have current_body pointing to the cloned buddy | |
717 is_alternate = (alternate_buddy == current_buddy); | |
718 buddylist = g_list_append(buddylist, roster_clone); | 711 buddylist = g_list_append(buddylist, roster_clone); |
719 current_buddy = g_list_find(buddylist, roster_clone); | 712 // We must have current_buddy pointing to the cloned buddy, if this is |
720 if (is_alternate) | 713 // the one we have moved. Same for alternate_buddy. |
721 alternate_buddy = current_buddy; | 714 if (rosterdata == BUDDATA(current_buddy)) { |
715 current_buddy = g_list_find(buddylist, roster_clone); | |
716 // If new new group is folded, the current_buddy will be lost, and the | |
717 // chat window won't be correctly refreshed. So we make sure it isn't... | |
718 ((roster*)((GSList*)roster_clone->list)->data)->flags &= ~ROSTER_FLAG_HIDE; | |
719 } | |
720 if (alternate_buddy && BUDDATA(alternate_buddy) == rosterdata) | |
721 alternate_buddy = g_list_find(buddylist, roster_clone); | |
722 | 722 |
723 buddylist_build(); | 723 buddylist_build(); |
724 } | 724 } |
725 | 725 |
726 void buddy_setname(gpointer rosterdata, char *newname) | 726 void buddy_setname(gpointer rosterdata, char *newname) |