diff options
Diffstat (limited to 'libnm-glib/nm-object.c')
| -rw-r--r-- | libnm-glib/nm-object.c | 76 |
1 files changed, 37 insertions, 39 deletions
diff --git a/libnm-glib/nm-object.c b/libnm-glib/nm-object.c index 61282cfb..fb25c1ac 100644 --- a/libnm-glib/nm-object.c +++ b/libnm-glib/nm-object.c @@ -1,7 +1,5 @@ /* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ /* - * libnm_glib -- Access network status & information from glib applications - * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either @@ -17,10 +15,12 @@ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * - * Copyright (C) 2007 - 2008 Novell, Inc. - * Copyright (C) 2007 - 2012 Red Hat, Inc. + * Copyright 2007 - 2008 Novell, Inc. + * Copyright 2007 - 2012 Red Hat, Inc. */ +#include "config.h" + #include <string.h> #include <gio/gio.h> #include <stdlib.h> @@ -41,15 +41,17 @@ static gboolean debug = FALSE; static void nm_object_initable_iface_init (GInitableIface *iface); static void nm_object_async_initable_iface_init (GAsyncInitableIface *iface); +static GHashTable *type_funcs, *type_async_funcs; + G_DEFINE_ABSTRACT_TYPE_WITH_CODE (NMObject, nm_object, G_TYPE_OBJECT, + type_funcs = g_hash_table_new (NULL, NULL); + type_async_funcs = g_hash_table_new (NULL, NULL); G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, nm_object_initable_iface_init); G_IMPLEMENT_INTERFACE (G_TYPE_ASYNC_INITABLE, nm_object_async_initable_iface_init); ) #define NM_OBJECT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_OBJECT, NMObjectPrivate)) -static GHashTable *type_funcs, *type_async_funcs; - typedef struct { PropertyMarshalFunc func; GType object_type; @@ -82,8 +84,8 @@ typedef struct { enum { PROP_0, - PROP_CONNECTION, - PROP_PATH, + PROP_DBUS_CONNECTION, + PROP_DBUS_PATH, LAST_PROP }; @@ -159,8 +161,6 @@ constructor (GType type, return NULL; } - _nm_object_cache_add (NM_OBJECT (object)); - return object; } @@ -336,18 +336,18 @@ finalize (GObject *object) static void set_property (GObject *object, guint prop_id, - const GValue *value, GParamSpec *pspec) + const GValue *value, GParamSpec *pspec) { NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object); switch (prop_id) { - case PROP_CONNECTION: + case PROP_DBUS_CONNECTION: /* Construct only */ priv->connection = g_value_dup_boxed (value); if (!priv->connection) priv->connection = _nm_dbus_new_connection (NULL); break; - case PROP_PATH: + case PROP_DBUS_PATH: /* Construct only */ priv->path = g_value_dup_string (value); break; @@ -359,15 +359,15 @@ set_property (GObject *object, guint prop_id, static void get_property (GObject *object, guint prop_id, - GValue *value, GParamSpec *pspec) + GValue *value, GParamSpec *pspec) { NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object); switch (prop_id) { - case PROP_CONNECTION: + case PROP_DBUS_CONNECTION: g_value_set_boxed (value, priv->connection); break; - case PROP_PATH: + case PROP_DBUS_PATH: g_value_set_string (value, priv->path); break; default: @@ -383,11 +383,6 @@ nm_object_class_init (NMObjectClass *nm_object_class) g_type_class_add_private (nm_object_class, sizeof (NMObjectPrivate)); - if (!type_funcs) { - type_funcs = g_hash_table_new (NULL, NULL); - type_async_funcs = g_hash_table_new (NULL, NULL); - } - /* virtual methods */ object_class->constructor = constructor; object_class->constructed = constructed; @@ -396,7 +391,7 @@ nm_object_class_init (NMObjectClass *nm_object_class) object_class->dispose = dispose; object_class->finalize = finalize; - /* porperties */ + /* Properties */ /** * NMObject:connection: @@ -404,12 +399,12 @@ nm_object_class_init (NMObjectClass *nm_object_class) * The #DBusGConnection of the object. **/ g_object_class_install_property - (object_class, PROP_CONNECTION, - g_param_spec_boxed (NM_OBJECT_DBUS_CONNECTION, - "Connection", - "Connection", - DBUS_TYPE_G_CONNECTION, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + (object_class, PROP_DBUS_CONNECTION, + g_param_spec_boxed (NM_OBJECT_DBUS_CONNECTION, "", "", + DBUS_TYPE_G_CONNECTION, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS)); /** * NMObject:path: @@ -417,12 +412,12 @@ nm_object_class_init (NMObjectClass *nm_object_class) * The DBus object path. **/ g_object_class_install_property - (object_class, PROP_PATH, - g_param_spec_string (NM_OBJECT_DBUS_PATH, - "Object Path", - "DBus Object Path", - NULL, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + (object_class, PROP_DBUS_PATH, + g_param_spec_string (NM_OBJECT_DBUS_PATH, "", "", + NULL, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS)); /* signals */ @@ -578,6 +573,8 @@ _nm_object_create (GType type, DBusGConnection *connection, const char *path) NM_OBJECT_DBUS_CONNECTION, connection, NM_OBJECT_DBUS_PATH, path, NULL); + if (NM_IS_OBJECT (object)) + _nm_object_cache_add (NM_OBJECT (object)); if (!g_initable_init (G_INITABLE (object), NULL, &error)) { dbgmsg ("Could not create object for %s: %s", path, error->message); g_error_free (error); @@ -661,6 +658,8 @@ async_got_type (GType type, gpointer user_data) NM_OBJECT_DBUS_PATH, async_data->path, NULL); g_warn_if_fail (object != NULL); + if (NM_IS_OBJECT (object)) + _nm_object_cache_add (NM_OBJECT (object)); g_async_initable_init_async (G_ASYNC_INITABLE (object), G_PRIORITY_DEFAULT, NULL, async_inited, async_data); } @@ -1189,10 +1188,10 @@ _nm_object_register_properties (NMObject *object, dbus_g_proxy_add_signal (proxy, "PropertiesChanged", DBUS_TYPE_G_MAP_OF_VARIANT, G_TYPE_INVALID); dbus_g_proxy_connect_signal (proxy, - "PropertiesChanged", - G_CALLBACK (properties_changed_proxy), - object, - NULL); + "PropertiesChanged", + G_CALLBACK (properties_changed_proxy), + object, + NULL); instance = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); priv->property_tables = g_slist_prepend (priv->property_tables, instance); @@ -1446,4 +1445,3 @@ _nm_object_is_connection_private (NMObject *self) { return _nm_dbus_is_connection_private (NM_OBJECT_GET_PRIVATE (self)->connection); } - |