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,
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)
{
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;
}
return (* iface->get_top_individuals) (self);
}
+
+/**
+ * empathy_roster_model_contact_in_top:
+ * @self: a #EmpathyRosterModel
+ * @contact: a #EmpathyRosterContact
+ *
+ * Checks if the passed #EmpathyRosterContact should be displayed in
+ * top contacts.
+ *
+ * Return value: %TRUE if it should be displayed in top contacts, %FALSE
+ * if not
+ */
+gboolean
+empathy_roster_model_contact_in_top (EmpathyRosterModel *self,
+ EmpathyRosterContact *contact)
+{
+ EmpathyRosterModelInterface *iface;
+
+ g_return_val_if_fail (EMPATHY_IS_ROSTER_MODEL (self), FALSE);
+
+ iface = EMPATHY_ROSTER_MODEL_GET_IFACE (self);
+ g_return_val_if_fail (iface->contact_in_top != NULL, FALSE);
+
+ return (* iface->contact_in_top) (self, contact);
+}
#include <folks/folks.h>
+#include <libempathy-gtk/empathy-roster-contact.h>
+
G_BEGIN_DECLS
typedef struct _EmpathyRosterModel EmpathyRosterModel;
GList * (*get_groups_for_individual) (EmpathyRosterModel *self,
FolksIndividual *individual);
GList * (*get_top_individuals) (EmpathyRosterModel *self);
+ gboolean (*contact_in_top) (EmpathyRosterModel *self,
+ EmpathyRosterContact *contact);
};
GType empathy_roster_model_get_type (void);
GList * empathy_roster_model_get_top_individuals (EmpathyRosterModel *self);
+gboolean empathy_roster_model_contact_in_top (EmpathyRosterModel *self,
+ EmpathyRosterContact *contact);
+
G_END_DECLS
#endif /* #ifndef __EMPATHY_ROSTER_MODEL_H__*/
return g_ascii_strcasecmp (alias_a, alias_b);
}
-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 gboolean
-contact_in_top (EmpathyRosterView *self,
- 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 (self->priv->model);
-
- if (g_list_index (tops, individual) != -1)
- return TRUE;
-
- return FALSE;
-}
-
static gint
compare_roster_contacts_no_group (EmpathyRosterView *self,
EmpathyRosterContact *a,
{
gboolean top_a, top_b;
- top_a = contact_in_top (self, a);
- top_b = contact_in_top (self, b);
+ top_a = empathy_roster_model_contact_in_top (self->priv->model, a);
+ top_b = empathy_roster_model_contact_in_top (self->priv->model, b);
if (top_a == top_b)
/* Both contacts are in the top of the roster (or not). Sort them
if (self->priv->show_offline)
return TRUE;
- if (contact_is_favourite (contact))
+ if (empathy_roster_model_contact_in_top (self->priv->model,
+ contact))
{
const gchar *group_name;
EmpathyRosterContact *contact = l->data;
FolksIndividual *individual;
- if (contact_is_favourite (contact))
+ if (empathy_roster_model_contact_in_top (self->priv->model,
+ contact))
continue;
individual = empathy_roster_contact_get_individual (contact);