diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2011-10-25 16:59:59 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2012-03-15 14:14:21 +0100 |
commit | bc78453d794e7e82d5cc726d716b1a84454763de (patch) | |
tree | 6084d5cd77c2e25a23ec5524b0e662577c5dc44e /src | |
parent | 68fcfa4530eb47a1a2947aa29a18b49378a5c9be (diff) |
manager: keep the GDBus connection reference in a 'connection' property
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-manager.c | 63 | ||||
-rw-r--r-- | src/mm-manager.h | 2 |
2 files changed, 62 insertions, 3 deletions
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", @@ -792,6 +800,44 @@ mm_manager_new (GDBusConnection *connection, } 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) { MMManagerPrivate *priv; @@ -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 { |