*/
#include "config.h"
-
#include "empathy-roster-model-manager.h"
-#include "empathy-roster-model.h"
-
#include <glib/gi18n-lib.h>
-#include <libempathy/empathy-utils.h>
+#include "empathy-roster-model.h"
+#include "empathy-utils.h"
static void roster_model_iface_init (EmpathyRosterModelInterface *iface);
g_list_find (tops, individual) != NULL);
}
+static void
+add_to_top_group_members (EmpathyRosterModelManager *self,
+ FolksIndividual *individual)
+{
+ self->priv->top_group_members = g_list_prepend (self->priv->top_group_members,
+ individual);
+}
+
+static void
+remove_from_top_group_members (EmpathyRosterModelManager *self,
+ FolksIndividual *individual)
+{
+ self->priv->top_group_members = g_list_remove (self->priv->top_group_members,
+ individual);
+}
+
static void
populate_model (EmpathyRosterModelManager *self)
{
for (l = individuals; l != NULL; l = g_list_next (l))
{
if (individual_should_be_in_top_group_members (self, l->data))
- self->priv->top_group_members = g_list_prepend (
- self->priv->top_group_members, l->data);
+ add_to_top_group_members (self, l->data);
empathy_roster_model_fire_individual_added (EMPATHY_ROSTER_MODEL (self),
l->data);
{
if (individual_should_be_in_top_group_members (self, l->data) &&
!individual_in_top_group_members (self, l->data))
- self->priv->top_group_members = g_list_prepend (
- self->priv->top_group_members, l->data);
+ add_to_top_group_members (self, l->data);
empathy_roster_model_fire_individual_added (EMPATHY_ROSTER_MODEL (self),
l->data);
for (l = removed; l != NULL; l = g_list_next (l))
{
if (individual_in_top_group_members (self, l->data))
- self->priv->top_group_members = g_list_remove (
- self->priv->top_group_members, l->data);
+ remove_from_top_group_members (self, l->data);
empathy_roster_model_fire_individual_removed (EMPATHY_ROSTER_MODEL (self),
l->data);
{
if (!individual_in_top_group_members (self, l->data))
{
- self->priv->top_group_members = g_list_prepend (
- self->priv->top_group_members, l->data);
+ add_to_top_group_members (self, l->data);
empathy_roster_model_fire_groups_changed (
EMPATHY_ROSTER_MODEL (self), l->data,
EMPATHY_ROSTER_MODEL_GROUP_TOP_GROUP, TRUE);
}
}
- for (l = self->priv->top_group_members; l != NULL; l = g_list_next (l))
+
+ l = self->priv->top_group_members;
+ while (l != NULL)
{
- if (!individual_should_be_in_top_group_members (self, l->data))
+ FolksIndividual *individual = l->data;
+
+ /* remove_from_top_group_members will modify the list so we already take
+ * the next pointer. */
+ l = g_list_next (l);
+
+ if (!individual_should_be_in_top_group_members (self, individual))
{
- self->priv->top_group_members = g_list_remove (
- self->priv->top_group_members, l->data);
+ remove_from_top_group_members (self, individual);
- empathy_roster_model_fire_groups_changed (
- EMPATHY_ROSTER_MODEL (self), l->data,
- EMPATHY_ROSTER_MODEL_GROUP_TOP_GROUP, FALSE);
+ empathy_roster_model_fire_groups_changed (EMPATHY_ROSTER_MODEL (self),
+ individual, EMPATHY_ROSTER_MODEL_GROUP_TOP_GROUP, FALSE);
}
}
}
{
if (favourite && !individual_in_top_group_members (self, individual))
{
- self->priv->top_group_members = g_list_prepend (
- self->priv->top_group_members, individual);
+ add_to_top_group_members (self, individual);
empathy_roster_model_fire_groups_changed (
EMPATHY_ROSTER_MODEL (self), individual,
else if (!favourite &&
!individual_should_be_in_top_group_members (self, individual))
{
- self->priv->top_group_members = g_list_remove (
- self->priv->top_group_members, individual);
+ remove_from_top_group_members (self, individual);
empathy_roster_model_fire_groups_changed (
EMPATHY_ROSTER_MODEL (self), individual,
}
static GList *
-empathy_roster_model_manager_get_groups_for_individual (
+empathy_roster_model_manager_dup_groups_for_individual (
EmpathyRosterModel *model,
FolksIndividual *individual)
{
roster_model_iface_init (EmpathyRosterModelInterface *iface)
{
iface->get_individuals = empathy_roster_model_manager_get_individuals;
- iface->get_groups_for_individual =
- empathy_roster_model_manager_get_groups_for_individual;
+ iface->dup_groups_for_individual =
+ empathy_roster_model_manager_dup_groups_for_individual;
}