From 2a819c16c9ecd02c929156be39fa1c994cc907e2 Mon Sep 17 00:00:00 2001 From: Laurent Contzen Date: Wed, 8 Aug 2012 11:18:38 +0200 Subject: Added new aggregator property in EmpathyRosterModelAggregator --- libempathy-gtk/empathy-roster-model-aggregator.c | 48 ++++++++++++++++++++---- 1 file changed, 41 insertions(+), 7 deletions(-) (limited to 'libempathy-gtk/empathy-roster-model-aggregator.c') diff --git a/libempathy-gtk/empathy-roster-model-aggregator.c b/libempathy-gtk/empathy-roster-model-aggregator.c index 1f6a0f124..8aa20f934 100644 --- a/libempathy-gtk/empathy-roster-model-aggregator.c +++ b/libempathy-gtk/empathy-roster-model-aggregator.c @@ -24,6 +24,9 @@ #include "config.h" +#include +#include + #include "empathy-roster-model-aggregator.h" #include "empathy-roster-model.h" @@ -61,7 +64,7 @@ G_DEFINE_TYPE_WITH_CODE (EmpathyRosterModelAggregator, enum { - PROP_FIRST_PROP = 1, + PROP_AGGREGATOR = 1, N_PROPS }; @@ -76,7 +79,7 @@ static guint signals[LAST_SIGNAL]; struct _EmpathyRosterModelAggregatorPriv { - gpointer badger; + FolksIndividualAggregator *aggregator; }; static void @@ -85,10 +88,13 @@ empathy_roster_model_aggregator_get_property (GObject *object, GValue *value, GParamSpec *pspec) { - //EmpathyRosterModelAggregator *self = EMPATHY_ROSTER_MODEL_AGGREGATOR (object); + EmpathyRosterModelAggregator *self = EMPATHY_ROSTER_MODEL_AGGREGATOR (object); switch (property_id) { + case PROP_AGGREGATOR: + g_value_set_object (value, self->priv->aggregator); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -101,10 +107,14 @@ empathy_roster_model_aggregator_set_property (GObject *object, const GValue *value, GParamSpec *pspec) { - //EmpathyRosterModelAggregator *self = EMPATHY_ROSTER_MODEL_AGGREGATOR (object); + EmpathyRosterModelAggregator *self = EMPATHY_ROSTER_MODEL_AGGREGATOR (object); switch (property_id) { + case PROP_AGGREGATOR: + g_assert (self->priv->aggregator == NULL); /* construct only */ + self->priv->aggregator = g_value_dup_object (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -114,21 +124,28 @@ empathy_roster_model_aggregator_set_property (GObject *object, static void empathy_roster_model_aggregator_constructed (GObject *object) { - //EmpathyRosterModelAggregator *self = EMPATHY_ROSTER_MODEL_AGGREGATOR (object); + EmpathyRosterModelAggregator *self = EMPATHY_ROSTER_MODEL_AGGREGATOR (object); void (*chain_up) (GObject *) = ((GObjectClass *) empathy_roster_model_aggregator_parent_class)->constructed; if (chain_up != NULL) chain_up (object); + + if (self->priv->aggregator == NULL) + self->priv->aggregator = folks_individual_aggregator_new (); + + g_assert (FOLKS_IS_INDIVIDUAL_AGGREGATOR (self->priv->aggregator)); } static void empathy_roster_model_aggregator_dispose (GObject *object) { - //EmpathyRosterModelAggregator *self = EMPATHY_ROSTER_MODEL_AGGREGATOR (object); + EmpathyRosterModelAggregator *self = EMPATHY_ROSTER_MODEL_AGGREGATOR (object); void (*chain_up) (GObject *) = ((GObjectClass *) empathy_roster_model_aggregator_parent_class)->dispose; + g_clear_object (&self->priv->aggregator); + if (chain_up != NULL) chain_up (object); } @@ -149,7 +166,7 @@ empathy_roster_model_aggregator_class_init ( EmpathyRosterModelAggregatorClass *klass) { GObjectClass *oclass = G_OBJECT_CLASS (klass); - //GParamSpec *spec; + GParamSpec *spec; oclass->get_property = empathy_roster_model_aggregator_get_property; oclass->set_property = empathy_roster_model_aggregator_set_property; @@ -157,6 +174,12 @@ empathy_roster_model_aggregator_class_init ( oclass->dispose = empathy_roster_model_aggregator_dispose; oclass->finalize = empathy_roster_model_aggregator_finalize; + spec = g_param_spec_object ("aggregator", "Aggregator", + "FolksIndividualAggregator", + FOLKS_TYPE_INDIVIDUAL_AGGREGATOR, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); + g_object_class_install_property (oclass, PROP_AGGREGATOR, spec); + g_type_class_add_private (klass, sizeof (EmpathyRosterModelAggregatorPriv)); } @@ -174,6 +197,17 @@ empathy_roster_model_aggregator_new (void) NULL); } +EmpathyRosterModelAggregator * +empathy_roster_model_aggregator_new_with_aggregator ( + FolksIndividualAggregator *aggregator) +{ + g_return_val_if_fail (FOLKS_IS_INDIVIDUAL_AGGREGATOR (aggregator), NULL); + + return g_object_new (EMPATHY_TYPE_ROSTER_MODEL_AGGREGATOR, + "aggregator", aggregator, + NULL); +} + static void roster_model_iface_init (EmpathyRosterModelInterface *iface) { -- cgit v1.2.3