# HG changeset patch # User mikael # Date 1115226719 0 # Node ID aa5b635520ef0bd3c06ccabfd28836929de068ac # Parent b4921dbf87096ded8db5058469420cabaf2207cd [/trunk] Changeset 178 by mikael * Allow /group command to act on groups' buddies * Add buddy_getgroup() diff -r b4921dbf8709 -r aa5b635520ef mcabber/src/commands.c --- a/mcabber/src/commands.c Wed May 04 09:07:49 2005 +0000 +++ b/mcabber/src/commands.c Wed May 04 17:11:59 2005 +0000 @@ -286,24 +286,26 @@ void do_group(char *arg) { gpointer group; + guint leave_windowbuddy; if (!arg || (*arg == 0)) { scr_LogPrint("Missing parameter"); return; } - if (!current_buddy) - return; + if (!current_buddy) return; - group = BUDDATA(current_buddy); + group = buddy_getgroup(BUDDATA(current_buddy)); + leave_windowbuddy = (group != BUDDATA(current_buddy)); + if (!(buddy_gettype(group) & ROSTER_TYPE_GROUP)) { - scr_LogPrint("For now you need to select a group " - "before using /group"); + scr_LogPrint("You need to select a group"); return; } - if (!strcasecmp(arg, "expand")) { + + if (!strcasecmp(arg, "expand") || !strcasecmp(arg, "unfold")) { buddy_setflags(group, ROSTER_FLAG_HIDE, FALSE); - } else if (!strcasecmp(arg, "shrink")) { + } else if (!strcasecmp(arg, "shrink") || !strcasecmp(arg, "fold")) { buddy_setflags(group, ROSTER_FLAG_HIDE, TRUE); } else if (!strcasecmp(arg, "toggle")) { buddy_setflags(group, ROSTER_FLAG_HIDE, @@ -315,6 +317,7 @@ buddylist_build(); update_roster = TRUE; + if (leave_windowbuddy) scr_ShowBuddyWindow(); } void do_say(char *arg) diff -r b4921dbf8709 -r aa5b635520ef mcabber/src/roster.c --- a/mcabber/src/roster.c Wed May 04 09:07:49 2005 +0000 +++ b/mcabber/src/roster.c Wed May 04 17:11:59 2005 +0000 @@ -482,6 +482,19 @@ return roster->name; } +// buddy_getgroup() +// Returns a pointer on buddy's group. +gpointer buddy_getgroup(gpointer rosterdata) +{ + roster *roster = rosterdata; + + if (roster->type & ROSTER_TYPE_GROUP) + return rosterdata; + + // This is a user + return (gpointer)((GSList*)roster->list)->data; +} + guint buddy_gettype(gpointer rosterdata) { roster *roster = rosterdata; diff -r b4921dbf8709 -r aa5b635520ef mcabber/src/roster.h --- a/mcabber/src/roster.h Wed May 04 09:07:49 2005 +0000 +++ b/mcabber/src/roster.h Wed May 04 17:11:59 2005 +0000 @@ -44,15 +44,16 @@ inline guint roster_exists(const char *jidname, enum findwhat type, guint roster_type); -void buddylist_set_hide_offline_buddies(int hide); +void buddylist_build(void); +void buddy_hide_group(gpointer rosterdata, int hide); +void buddylist_set_hide_offline_buddies(int hide); inline int buddylist_get_hide_offline_buddies(void); -void buddy_hide_group(gpointer rosterdata, int hide); -void buddylist_build(void); const char *buddy_getjid(gpointer rosterdata); const char *buddy_getname(gpointer rosterdata); -guint buddy_gettype(gpointer rosterdata); +guint buddy_gettype(gpointer rosterdata); +gpointer buddy_getgroup(gpointer rosterdata); enum imstatus buddy_getstatus(gpointer rosterdata); -void buddy_setflags(gpointer rosterdata, guint flags, guint value); -guint buddy_getflags(gpointer rosterdata); +void buddy_setflags(gpointer rosterdata, guint flags, guint value); +guint buddy_getflags(gpointer rosterdata); #endif /* __ROSTER_H__ */