[/trunk] Changeset 178 by mikael
* Allow /group command to act on groups' buddies
* Add buddy_getgroup()
--- 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__ */