# HG changeset patch # User Mikael Berthe # Date 1194787284 -3600 # Node ID 8613d3f4ae91b24592d1ea86ec1ae583a99170fc # Parent 7daf906fbcdca84aba22d6ab15469ea32eba0853 Improve command /group - Do not enter chat mode if it is disabled. - Do not jump to the top of the roster, only jump to the group item if needed. diff -r 7daf906fbcdc -r 8613d3f4ae91 mcabber/src/commands.c --- a/mcabber/src/commands.c Sun Nov 11 13:05:57 2007 +0100 +++ b/mcabber/src/commands.c Sun Nov 11 14:21:24 2007 +0100 @@ -999,6 +999,7 @@ guint leave_buddywindow; char **paramlst; char *subcmd; + enum { group_unfold = 0, group_fold, group_toggle } group_state = 0; if (!*arg) { scr_LogPrint(LPRINT_NORMAL, "Missing parameter."); @@ -1029,29 +1030,39 @@ // We'll have to redraw the chat window if we're not currently on the group // entry itself, because it means we'll have to leave the current buddy // chat window. - leave_buddywindow = (group != BUDDATA(current_buddy)); + leave_buddywindow = (group != BUDDATA(current_buddy) && + group == buddy_getgroup(BUDDATA(current_buddy))); + if (!(buddy_gettype(group) & ROSTER_TYPE_GROUP)) { scr_LogPrint(LPRINT_NORMAL, "You need to select a group."); goto do_group_return; } - if (!strcasecmp(subcmd, "expand") || !strcasecmp(subcmd, "unfold")) { - buddy_setflags(group, ROSTER_FLAG_HIDE, FALSE); - } else if (!strcasecmp(subcmd, "shrink") || !strcasecmp(subcmd, "fold")) { - buddy_setflags(group, ROSTER_FLAG_HIDE, TRUE); - } else if (!strcasecmp(subcmd, "toggle")) { - buddy_setflags(group, ROSTER_FLAG_HIDE, - !(buddy_getflags(group) & ROSTER_FLAG_HIDE)); - } else { + if (!strcasecmp(subcmd, "expand") || !strcasecmp(subcmd, "unfold")) + group_state = group_unfold; + else if (!strcasecmp(subcmd, "shrink") || !strcasecmp(subcmd, "fold")) + group_state = group_fold; + else if (!strcasecmp(subcmd, "toggle")) + group_state = group_toggle; + else { scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!"); goto do_group_return; } + if (group_state != group_unfold && leave_buddywindow) + scr_RosterPrevGroup(); + + if (group_state == group_unfold) + buddy_setflags(group, ROSTER_FLAG_HIDE, FALSE); + else if (group_state == group_fold) + buddy_setflags(group, ROSTER_FLAG_HIDE, TRUE); + else if (group_state == group_toggle) + buddy_setflags(group, ROSTER_FLAG_HIDE, + !(buddy_getflags(group) & ROSTER_FLAG_HIDE)); + buddylist_build(); update_roster = TRUE; - if (leave_buddywindow) - scr_ShowBuddyWindow(); do_group_return: free_arg_lst(paramlst);