--- a/mcabber/TODO Sat Aug 23 21:01:14 2008 +0200
+++ b/mcabber/TODO Sun Aug 31 11:29:04 2008 +0200
@@ -11,7 +11,6 @@
* Use new Entity Time specs (XEP-0202) if possible in
/request time.
* Enable /roster search for offline (hidden) buddies (hidden groups, etc.)
-* Show number of online contacts in folded groups
* Publish personal information
* MUC: advanced settings for room creation
* MUC: display roles of room members
--- a/mcabber/src/roster.c Sat Aug 23 21:01:14 2008 +0200
+++ b/mcabber/src/roster.c Sun Aug 31 11:29:04 2008 +0200
@@ -813,6 +813,11 @@
return (display_filter != DFILTER_ALL);
}
+int buddylist_is_status_filtered(enum imstatus status)
+{
+ return display_filter & (1 << status);
+}
+
void buddylist_set_filter(guchar filter)
{
display_filter = filter;
@@ -869,7 +874,8 @@
// - group isn't hidden (shrunk)
// - this is the current_buddy
if (roster_usrelt == roster_current_buddy ||
- display_filter & 1<<buddy_getstatus((gpointer)roster_usrelt, NULL) ||
+ buddylist_is_status_filtered(buddy_getstatus((gpointer)roster_usrelt,
+ NULL)) ||
(buddy_getflags((gpointer)roster_usrelt) &
(ROSTER_FLAG_LOCK | ROSTER_FLAG_USRLOCK | ROSTER_FLAG_MSG))) {
// This user should be added. Maybe the group hasn't been added yet?
--- a/mcabber/src/roster.h Sat Aug 23 21:01:14 2008 +0200
+++ b/mcabber/src/roster.h Sun Aug 31 11:29:04 2008 +0200
@@ -178,6 +178,7 @@
void buddy_hide_group(gpointer rosterdata, int hide);
void buddylist_set_hide_offline_buddies(int hide);
int buddylist_isset_filter(void);
+int buddylist_is_status_filtered(enum imstatus status);
void buddylist_set_filter(guchar);
guchar buddylist_get_filter(void);
const char *buddy_getjid(gpointer rosterdata);
--- a/mcabber/src/screen.c Sat Aug 23 21:01:14 2008 +0200
+++ b/mcabber/src/screen.c Sun Aug 31 11:29:04 2008 +0200
@@ -1726,6 +1726,13 @@
}
}
+void increment_if_buddy_not_filtered(gpointer rosterdata, void *param)
+{
+ int *p = param;
+ if (buddylist_is_status_filtered(buddy_getstatus(rosterdata, NULL)))
+ *p=*p+1;
+}
+
// scr_DrawRoster()
// Display the buddylist (not really the roster) on the screen
void scr_DrawRoster(void)
@@ -1889,12 +1896,15 @@
name[0] = 0;
if (isgrp) {
- char *sep;
- if (ishid)
- sep = "+++";
+ if (ishid){
+ int group_count = 0;
+ foreach_group_member(BUDDATA(buddy), increment_if_buddy_not_filtered,
+ &group_count);
+ snprintf(rline, 4*Roster_Width, " %c+++ %s (%i)", pending, name,
+ group_count);
+ }
else
- sep = "---";
- snprintf(rline, 4*Roster_Width, " %c%s %s", pending, sep, name);
+ snprintf(rline, 4*Roster_Width, " %c--- %s", pending, name);
} else if (isspe) {
snprintf(rline, 4*Roster_Width, " %c%s", pending, name);
} else {