[Telepathy-commits] [telepathy-salut/master] SalutImManager: Do not access to the private structure in salut_im_manager_new() but use property.
Alban Crequy
alban.crequy at collabora.co.uk
Thu Sep 18 08:58:28 PDT 2008
---
src/salut-im-manager.c | 150 +++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 135 insertions(+), 15 deletions(-)
diff --git a/src/salut-im-manager.c b/src/salut-im-manager.c
index a35233a..4b8f209 100644
--- a/src/salut-im-manager.c
+++ b/src/salut-im-manager.c
@@ -47,6 +47,15 @@ G_DEFINE_TYPE_WITH_CODE (SalutImManager, salut_im_manager, G_TYPE_OBJECT,
G_IMPLEMENT_INTERFACE (TP_TYPE_CHANNEL_FACTORY_IFACE,
salut_im_manager_factory_iface_init));
+/* properties */
+enum
+{
+ PROP_CONNECTION = 1,
+ PROP_CONTACT_MANAGER,
+ PROP_XMPP_CONNECTION_MANAGER,
+ LAST_PROPERTY
+};
+
/* private structure */
typedef struct _SalutImManagerPrivate SalutImManagerPrivate;
@@ -143,15 +152,135 @@ static void salut_im_manager_dispose (GObject *object);
static void salut_im_manager_finalize (GObject *object);
static void
+salut_im_manager_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ SalutImManager *fac = SALUT_IM_MANAGER (object);
+ SalutImManagerPrivate *priv = SALUT_IM_MANAGER_GET_PRIVATE (fac);
+
+ switch (property_id)
+ {
+ case PROP_CONNECTION:
+ g_value_set_object (value, priv->connection);
+ break;
+ case PROP_CONTACT_MANAGER:
+ g_value_set_object (value, priv->contact_manager);
+ break;
+ case PROP_XMPP_CONNECTION_MANAGER:
+ g_value_set_object (value, priv->xmpp_connection_manager);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+salut_im_manager_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ SalutImManager *fac = SALUT_IM_MANAGER (object);
+ SalutImManagerPrivate *priv = SALUT_IM_MANAGER_GET_PRIVATE (fac);
+
+ switch (property_id)
+ {
+ case PROP_CONNECTION:
+ priv->connection = g_value_get_object (value);
+ break;
+ case PROP_CONTACT_MANAGER:
+ priv->contact_manager = g_value_get_object (value);
+ g_object_ref (priv->contact_manager);
+ break;
+ case PROP_XMPP_CONNECTION_MANAGER:
+ priv->xmpp_connection_manager = g_value_get_object (value);
+ g_object_ref (priv->xmpp_connection_manager);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static GObject *
+salut_im_manager_constructor (GType type,
+ guint n_props,
+ GObjectConstructParam *props)
+{
+ GObject *obj;
+ SalutImManager *self;
+ SalutImManagerPrivate *priv;
+
+ obj = G_OBJECT_CLASS (salut_im_manager_parent_class)->
+ constructor (type, n_props, props);
+
+ self = SALUT_IM_MANAGER (obj);
+ priv = SALUT_IM_MANAGER_GET_PRIVATE (self);
+
+ salut_xmpp_connection_manager_add_stanza_filter (
+ priv->xmpp_connection_manager, NULL,
+ message_stanza_filter, message_stanza_callback, self);
+
+ return obj;
+}
+
+static void
salut_im_manager_class_init (SalutImManagerClass *salut_im_manager_class)
{
GObjectClass *object_class = G_OBJECT_CLASS (salut_im_manager_class);
+ GParamSpec *param_spec;
g_type_class_add_private (salut_im_manager_class,
sizeof (SalutImManagerPrivate));
+ object_class->constructor = salut_im_manager_constructor;
object_class->dispose = salut_im_manager_dispose;
object_class->finalize = salut_im_manager_finalize;
+ object_class->get_property = salut_im_manager_get_property;
+ object_class->set_property = salut_im_manager_set_property;
+
+ param_spec = g_param_spec_object (
+ "connection",
+ "SalutConnection object",
+ "Salut connection object that owns this text channel factory object.",
+ SALUT_TYPE_CONNECTION,
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_NAME |
+ G_PARAM_STATIC_NICK |
+ G_PARAM_STATIC_BLURB);
+ g_object_class_install_property (object_class, PROP_CONNECTION, param_spec);
+
+ param_spec = g_param_spec_object (
+ "contact-manager",
+ "SalutContactManager object",
+ "Salut Contact Manager associated with the Salut Connection of this "
+ "manager",
+ SALUT_TYPE_CONTACT_MANAGER,
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_NAME |
+ G_PARAM_STATIC_NICK |
+ G_PARAM_STATIC_BLURB);
+ g_object_class_install_property (object_class, PROP_CONTACT_MANAGER,
+ param_spec);
+
+ param_spec = g_param_spec_object (
+ "xmpp-connection-manager",
+ "SalutXmppConnectionManager object",
+ "Salut Xmpp Connection Manager associated with the Salut Connection "
+ "of this manager",
+ SALUT_TYPE_XMPP_CONNECTION_MANAGER,
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_NAME |
+ G_PARAM_STATIC_NICK |
+ G_PARAM_STATIC_BLURB);
+ g_object_class_install_property (object_class, PROP_XMPP_CONNECTION_MANAGER,
+ param_spec);
}
void
@@ -404,22 +533,13 @@ salut_im_manager_new (SalutConnection *connection,
SalutContactManager *contact_manager,
SalutXmppConnectionManager *xmpp_connection_manager)
{
- SalutImManager *ret = NULL;
- SalutImManagerPrivate *priv;
-
- ret = g_object_new (SALUT_TYPE_IM_MANAGER, NULL);
- priv = SALUT_IM_MANAGER_GET_PRIVATE (ret);
-
- priv->contact_manager = contact_manager;
- g_object_ref (contact_manager);
- priv->xmpp_connection_manager = xmpp_connection_manager;
- g_object_ref (xmpp_connection_manager);
+ SalutImManager *ret;
- salut_xmpp_connection_manager_add_stanza_filter (
- priv->xmpp_connection_manager, NULL,
- message_stanza_filter, message_stanza_callback, ret);
-
- priv->connection = connection;
+ ret = g_object_new (SALUT_TYPE_IM_MANAGER,
+ "connection", connection,
+ "contact-manager", contact_manager,
+ "xmpp-connection-manager", xmpp_connection_manager,
+ NULL);
return ret;
}
--
1.5.6.5
More information about the Telepathy-commits
mailing list