--- a/mcabber/src/commands.c Sat May 27 19:46:20 2006 +0200
+++ b/mcabber/src/commands.c Sun May 28 10:42:22 2006 +0200
@@ -1185,6 +1185,18 @@
g_free(buffer);
}
+static void move_group_member(gpointer bud, void *groupnamedata)
+{
+ const char *jid, *name, *groupname;
+
+ groupname = (char *)groupnamedata;
+
+ jid = buddy_getjid(bud);
+ name = buddy_getname(bud);
+
+ jb_updatebuddy(jid, name, *groupname ? groupname : NULL);
+}
+
static void do_rename(char *arg)
{
gpointer bud;
@@ -1193,11 +1205,6 @@
char *newname, *p;
char *name_utf8;
- if (!*arg) {
- scr_LogPrint(LPRINT_NORMAL, "Please specify a new name.");
- return;
- }
-
if (!current_buddy) return;
bud = BUDDATA(current_buddy);
@@ -1205,12 +1212,13 @@
group = buddy_getgroupname(bud);
type = buddy_gettype(bud);
- if (type & ROSTER_TYPE_GROUP) {
- scr_LogPrint(LPRINT_NORMAL, "You can't rename groups.");
+ if (type & ROSTER_TYPE_SPECIAL) {
+ scr_LogPrint(LPRINT_NORMAL, "You can't rename this item.");
return;
}
- if (type & ROSTER_TYPE_SPECIAL) {
- scr_LogPrint(LPRINT_NORMAL, "You can't rename this item.");
+
+ if (!*arg && !(type & ROSTER_TYPE_GROUP)) {
+ scr_LogPrint(LPRINT_NORMAL, "Please specify a new name.");
return;
}
@@ -1222,8 +1230,18 @@
strip_arg_special_chars(newname);
name_utf8 = to_utf8(newname);
- buddy_setname(bud, name_utf8);
- jb_updatebuddy(jid, name_utf8, group);
+
+ if (type & ROSTER_TYPE_GROUP) {
+ // Rename a whole group
+ foreach_group_member(bud, &move_group_member, name_utf8);
+ // Let's jump to the previous buddy, because this group name should
+ // disappear when we receive the server answer.
+ scr_RosterUp();
+ } else {
+ // Rename a single buddy
+ buddy_setname(bud, name_utf8);
+ jb_updatebuddy(jid, name_utf8, group);
+ }
g_free(name_utf8);
g_free(newname);