aboutsummaryrefslogtreecommitdiffstats
path: root/libempathy-gtk/empathy-roster-model-manager.c
diff options
context:
space:
mode:
Diffstat (limited to 'libempathy-gtk/empathy-roster-model-manager.c')
-rw-r--r--libempathy-gtk/empathy-roster-model-manager.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/libempathy-gtk/empathy-roster-model-manager.c b/libempathy-gtk/empathy-roster-model-manager.c
index f507173c8..ebf26935a 100644
--- a/libempathy-gtk/empathy-roster-model-manager.c
+++ b/libempathy-gtk/empathy-roster-model-manager.c
@@ -81,6 +81,17 @@ is_xmpp_local_contact (FolksIndividual *individual)
return result;
}
+static gboolean
+contact_is_favourite (EmpathyRosterContact *contact)
+{
+ FolksIndividual *individual;
+
+ individual = empathy_roster_contact_get_individual (contact);
+
+ return folks_favourite_details_get_is_favourite (
+ FOLKS_FAVOURITE_DETAILS (individual));
+}
+
static void
members_changed_cb (EmpathyIndividualManager *manager,
const gchar *message,
@@ -302,6 +313,26 @@ empathy_roster_model_manager_get_top_individuals (EmpathyRosterModel *model)
return empathy_individual_manager_get_top_individuals (self->priv->manager);
}
+static gboolean
+empathy_roster_model_manager_contact_in_top (EmpathyRosterModel *model,
+ EmpathyRosterContact *contact)
+{
+ FolksIndividual *individual;
+ GList *tops;
+
+ if (contact_is_favourite (contact))
+ return TRUE;
+
+ individual = empathy_roster_contact_get_individual (contact);
+
+ tops = empathy_roster_model_get_top_individuals (model);
+
+ if (g_list_index (tops, individual) != -1)
+ return TRUE;
+
+ return FALSE;
+}
+
static void
roster_model_iface_init (EmpathyRosterModelInterface *iface)
{
@@ -309,4 +340,5 @@ roster_model_iface_init (EmpathyRosterModelInterface *iface)
iface->get_groups_for_individual =
empathy_roster_model_manager_get_groups_for_individual;
iface->get_top_individuals = empathy_roster_model_manager_get_top_individuals;
+ iface->contact_in_top = empathy_roster_model_manager_contact_in_top;
}