From 2e9ea0fb13d570edeca7161d827d8041298c2134 Mon Sep 17 00:00:00 2001 From: Guillaume Desmottes Date: Wed, 4 Jul 2012 09:43:05 +0200 Subject: roster-model: add API to track individuals --- libempathy-gtk/empathy-roster-model.c | 55 +++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) (limited to 'libempathy-gtk/empathy-roster-model.c') diff --git a/libempathy-gtk/empathy-roster-model.c b/libempathy-gtk/empathy-roster-model.c index f8a890aec..ce86e58a6 100644 --- a/libempathy-gtk/empathy-roster-model.c +++ b/libempathy-gtk/empathy-roster-model.c @@ -23,7 +23,62 @@ G_DEFINE_INTERFACE (EmpathyRosterModel, empathy_roster_model, G_TYPE_OBJECT) +enum +{ + SIG_INDIVIDUAL_ADDED, + SIG_INDIVIDUAL_REMOVED, + LAST_SIGNAL +}; + +static guint signals[LAST_SIGNAL]; + static void empathy_roster_model_default_init (EmpathyRosterModelInterface *iface) { + signals[SIG_INDIVIDUAL_ADDED] = + g_signal_new ("individual-added", + EMPATHY_TYPE_ROSTER_MODEL, + G_SIGNAL_RUN_LAST, + 0, NULL, NULL, NULL, + G_TYPE_NONE, 1, + FOLKS_TYPE_INDIVIDUAL); + + signals[SIG_INDIVIDUAL_REMOVED] = + g_signal_new ("individual-removed", + EMPATHY_TYPE_ROSTER_MODEL, + G_SIGNAL_RUN_LAST, + 0, NULL, NULL, NULL, + G_TYPE_NONE, 1, + FOLKS_TYPE_INDIVIDUAL); +} + +/***** Restricted *****/ + +void +empathy_roster_model_fire_individual_added (EmpathyRosterModel *self, + FolksIndividual *individual) +{ + g_signal_emit (self, signals[SIG_INDIVIDUAL_ADDED], 0, individual); +} + +void +empathy_roster_model_fire_individual_removed (EmpathyRosterModel *self, + FolksIndividual *individual) +{ + g_signal_emit (self, signals[SIG_INDIVIDUAL_REMOVED], 0, individual); +} + +/***** Public *****/ + +GList * +empathy_roster_model_get_individuals (EmpathyRosterModel *self) +{ + EmpathyRosterModelInterface *iface; + + g_return_val_if_fail (EMPATHY_IS_ROSTER_MODEL (self), NULL); + + iface = EMPATHY_ROSTER_MODEL_GET_IFACE (self); + g_return_val_if_fail (iface->get_individuals != NULL, NULL); + + return (* iface->get_individuals) (self); } -- cgit v1.2.3