changeset 166:aa5b635520ef

[/trunk] Changeset 178 by mikael * Allow /group command to act on groups' buddies * Add buddy_getgroup()
author mikael
date Wed, 04 May 2005 17:11:59 +0000
parents b4921dbf8709
children a6ac5498d254
files mcabber/src/commands.c mcabber/src/roster.c mcabber/src/roster.h
diffstat 3 files changed, 30 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- 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)
--- 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;
--- 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__ */