From 0e2a232f2ed90f04a2245c5241e471c865f756ae Mon Sep 17 00:00:00 2001 From: Guillaume Desmottes Date: Fri, 31 Aug 2012 10:30:12 +0200 Subject: roster-view: check_if_empty(): check groups as well The roster is empty if there is no group displayed as well. We don't want to display an empty message just because the user collapsed all his groups. https://bugzilla.gnome.org/show_bug.cgi?id=682926 --- libempathy-gtk/empathy-roster-view.c | 39 +++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) (limited to 'libempathy-gtk/empathy-roster-view.c') diff --git a/libempathy-gtk/empathy-roster-view.c b/libempathy-gtk/empathy-roster-view.c index 30e6c98d2..205b11a66 100644 --- a/libempathy-gtk/empathy-roster-view.c +++ b/libempathy-gtk/empathy-roster-view.c @@ -257,11 +257,40 @@ update_empty (EmpathyRosterView *self, g_object_notify (G_OBJECT (self), "empty"); } +static gboolean filter_group (EmpathyRosterView *self, + EmpathyRosterGroup *group); + +static gboolean +at_least_one_group_displayed (EmpathyRosterView *self) +{ + GHashTableIter iter; + gpointer v; + + g_hash_table_iter_init (&iter, self->priv->roster_groups); + while (g_hash_table_iter_next (&iter, NULL, &v)) + { + EmpathyRosterGroup *group = EMPATHY_ROSTER_GROUP (v); + + if (filter_group (self, group)) + return TRUE; + } + + return FALSE; +} + static void check_if_empty (EmpathyRosterView *self) { - if (g_hash_table_size (self->priv->displayed_contacts) == 0) - update_empty (self, TRUE); + /* Roster is considered as empty if there is no contact *and* no group + * currently displayed. */ + if (g_hash_table_size (self->priv->displayed_contacts) != 0 || + at_least_one_group_displayed (self)) + { + update_empty (self, FALSE); + return; + } + + update_empty (self, TRUE); } static void @@ -280,7 +309,11 @@ update_group_widgets (EmpathyRosterView *self, count = empathy_roster_group_remove_widget (group, GTK_WIDGET (contact)); if (count != old_count) - egg_list_box_child_changed (EGG_LIST_BOX (self), GTK_WIDGET (group)); + { + egg_list_box_child_changed (EGG_LIST_BOX (self), GTK_WIDGET (group)); + + check_if_empty (self); + } } static void -- cgit v1.2.3