manager: keep the GDBus connection reference in a 'connection' property

This commit is contained in:
Aleksander Morgado
2011-10-25 16:59:59 +02:00
parent 68fcfa4530
commit bc78453d79
2 changed files with 62 additions and 3 deletions

View File

@@ -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));
}

View File

@@ -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 {