From bc78453d794e7e82d5cc726d716b1a84454763de Mon Sep 17 00:00:00 2001 From: Aleksander Morgado Date: Tue, 25 Oct 2011 16:59:59 +0200 Subject: manager: keep the GDBus connection reference in a 'connection' property --- src/mm-manager.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++--- src/mm-manager.h | 2 ++ 2 files changed, 62 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/mm-manager.c b/src/mm-manager.c index dc330eda..6ab3b4f4 100644 --- a/src/mm-manager.c +++ b/src/mm-manager.c @@ -43,6 +43,12 @@ static void grab_port (MMManager *manager, G_DEFINE_TYPE (MMManager, mm_manager, MM_GDBUS_TYPE_ORG_FREEDESKTOP_MODEM_MANAGER1_SKELETON); +enum { + PROP_0, + PROP_CONNECTION, + LAST_PROP +}; + struct _MMManagerPrivate { GDBusConnection *connection; GUdevClient *udev; @@ -756,17 +762,19 @@ mm_manager_new (GDBusConnection *connection, g_return_val_if_fail (G_IS_DBUS_CONNECTION (connection), NULL); - manager = (MMManager *) g_object_new (MM_TYPE_MANAGER, NULL); + manager = (MMManager *) g_object_new (MM_TYPE_MANAGER, + MM_MANAGER_CONNECTION, connection, + NULL); if (manager) { + g_assert (manager->priv->connection); + manager->priv->plugin_manager = mm_plugin_manager_new (error); if (!manager->priv->plugin_manager) { g_object_unref (manager); return NULL; } - manager->priv->connection = g_object_ref (connection); - /* Enable processing of input DBus messages */ g_signal_connect (manager, "handle-set-logging", @@ -791,6 +799,44 @@ mm_manager_new (GDBusConnection *connection, return manager; } +static void +set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + MMManagerPrivate *priv = MM_MANAGER (object)->priv; + + switch (prop_id) { + case PROP_CONNECTION: + if (priv->connection) + g_object_unref (priv->connection); + priv->connection = g_value_dup_object (value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + MMManagerPrivate *priv = MM_MANAGER (object)->priv; + + switch (prop_id) { + case PROP_CONNECTION: + g_value_set_object (value, priv->connection); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + static void mm_manager_init (MMManager *manager) { @@ -840,5 +886,16 @@ mm_manager_class_init (MMManagerClass *manager_class) g_type_class_add_private (object_class, sizeof (MMManagerPrivate)); /* Virtual methods */ + object_class->set_property = set_property; + object_class->get_property = get_property; object_class->finalize = finalize; + + /* Properties */ + g_object_class_install_property + (object_class, PROP_CONNECTION, + g_param_spec_object (MM_MANAGER_CONNECTION, + "Connection", + "GDBus connection to the system bus.", + G_TYPE_DBUS_CONNECTION, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); } diff --git a/src/mm-manager.h b/src/mm-manager.h index 3f1cb688..a26c37d4 100644 --- a/src/mm-manager.h +++ b/src/mm-manager.h @@ -30,6 +30,8 @@ #define MM_IS_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), MM_TYPE_MANAGER)) #define MM_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MM_TYPE_MANAGER, MMManagerClass)) +#define MM_MANAGER_CONNECTION "connection" /* Construct-only */ + typedef struct _MMManagerPrivate MMManagerPrivate; typedef struct { -- cgit v1.2.3-70-g09d2