aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2011-10-25 16:59:59 +0200
committerAleksander Morgado <aleksander@lanedo.com>2012-03-15 14:14:21 +0100
commitbc78453d794e7e82d5cc726d716b1a84454763de (patch)
tree6084d5cd77c2e25a23ec5524b0e662577c5dc44e /src
parent68fcfa4530eb47a1a2947aa29a18b49378a5c9be (diff)
manager: keep the GDBus connection reference in a 'connection' property
Diffstat (limited to 'src')
-rw-r--r--src/mm-manager.c63
-rw-r--r--src/mm-manager.h2
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 {