From 7e0e678a4ddf2d404206d62c107ad212586f1a16 Mon Sep 17 00:00:00 2001 From: Dan Winship Date: Mon, 18 Aug 2014 14:17:52 -0400 Subject: libnm: let NMObject create all D-Bus proxies Add _nm_object_class_add_interface(), for declaring that a class implements a particular interface, and then have NMObject create the corresponding proxies itself. (The subclass can get a copy with _nm_object_get_proxy() if it needs it for something). (In GDBus, creating a proxy is a heavier operation than in dbus-glib, so we'll need to create the proxies asynchronously. Moving the creation to NMObject makes that easier since we can do it as part of the existing init/init_async.) --- libnm/nm-access-point.c | 18 ++----- libnm/nm-active-connection.c | 9 ++-- libnm/nm-client.c | 8 ++-- libnm/nm-device-adsl.c | 33 ++----------- libnm/nm-device-bond.c | 9 ++-- libnm/nm-device-bridge.c | 9 ++-- libnm/nm-device-bt.c | 18 ++----- libnm/nm-device-ethernet.c | 18 ++----- libnm/nm-device-generic.c | 18 ++----- libnm/nm-device-infiniband.c | 18 ++----- libnm/nm-device-modem.c | 18 ++----- libnm/nm-device-olpc-mesh.c | 8 ++-- libnm/nm-device-team.c | 9 ++-- libnm/nm-device-vlan.c | 18 ++----- libnm/nm-device-wifi.c | 7 +-- libnm/nm-device-wimax.c | 8 ++-- libnm/nm-device.c | 7 +-- libnm/nm-dhcp4-config.c | 9 ++-- libnm/nm-dhcp6-config.c | 9 ++-- libnm/nm-ip4-config.c | 9 ++-- libnm/nm-ip6-config.c | 9 ++-- libnm/nm-object-private.h | 11 +++-- libnm/nm-object.c | 111 +++++++++++++++++++++++++++++++++---------- libnm/nm-remote-connection.c | 8 ++-- libnm/nm-remote-settings.c | 9 ++-- libnm/nm-vpn-connection.c | 13 ++--- libnm/nm-wimax-nsp.c | 18 ++----- 27 files changed, 177 insertions(+), 262 deletions(-) diff --git a/libnm/nm-access-point.c b/libnm/nm-access-point.c index d0695f9197..fc36c0faa8 100644 --- a/libnm/nm-access-point.c +++ b/libnm/nm-access-point.c @@ -39,8 +39,6 @@ G_DEFINE_TYPE (NMAccessPoint, nm_access_point, NM_TYPE_OBJECT) #define NM_ACCESS_POINT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_ACCESS_POINT, NMAccessPointPrivate)) typedef struct { - DBusGProxy *proxy; - NM80211ApFlags flags; NM80211ApSecurityFlags wpa_flags; NM80211ApSecurityFlags rsn_flags; @@ -361,16 +359,6 @@ nm_access_point_init (NMAccessPoint *ap) { } -static void -dispose (GObject *object) -{ - NMAccessPointPrivate *priv = NM_ACCESS_POINT_GET_PRIVATE (object); - - g_clear_object (&priv->proxy); - - G_OBJECT_CLASS (nm_access_point_parent_class)->dispose (object); -} - static void finalize (GObject *object) { @@ -449,9 +437,8 @@ init_dbus (NMObject *object) NM_OBJECT_CLASS (nm_access_point_parent_class)->init_dbus (object); - priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_ACCESS_POINT); _nm_object_register_properties (object, - priv->proxy, + NM_DBUS_INTERFACE_ACCESS_POINT, property_info); } @@ -464,9 +451,10 @@ nm_access_point_class_init (NMAccessPointClass *ap_class) g_type_class_add_private (ap_class, sizeof (NMAccessPointPrivate)); + _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_ACCESS_POINT); + /* virtual methods */ object_class->get_property = get_property; - object_class->dispose = dispose; object_class->finalize = finalize; nm_object_class->init_dbus = init_dbus; diff --git a/libnm/nm-active-connection.c b/libnm/nm-active-connection.c index 8230b8b4f5..667fbe1bb6 100644 --- a/libnm/nm-active-connection.c +++ b/libnm/nm-active-connection.c @@ -48,8 +48,6 @@ G_DEFINE_TYPE_WITH_CODE (NMActiveConnection, nm_active_connection, NM_TYPE_OBJEC #define NM_ACTIVE_CONNECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_ACTIVE_CONNECTION, NMActiveConnectionPrivate)) typedef struct { - DBusGProxy *proxy; - char *connection; char *id; char *uuid; @@ -461,8 +459,6 @@ dispose (GObject *object) g_clear_object (&priv->ip6_config); g_clear_object (&priv->dhcp6_config); - g_clear_object (&priv->proxy); - G_OBJECT_CLASS (nm_active_connection_parent_class)->dispose (object); } @@ -567,9 +563,8 @@ init_dbus (NMObject *object) NM_OBJECT_CLASS (nm_active_connection_parent_class)->init_dbus (object); - priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_ACTIVE_CONNECTION); _nm_object_register_properties (object, - priv->proxy, + NM_DBUS_INTERFACE_ACTIVE_CONNECTION, property_info); } @@ -582,6 +577,8 @@ nm_active_connection_class_init (NMActiveConnectionClass *ap_class) g_type_class_add_private (ap_class, sizeof (NMActiveConnectionPrivate)); + _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_ACTIVE_CONNECTION); + /* virtual methods */ object_class->get_property = get_property; object_class->dispose = dispose; diff --git a/libnm/nm-client.c b/libnm/nm-client.c index 70c9c813ab..d4a7456d4d 100644 --- a/libnm/nm-client.c +++ b/libnm/nm-client.c @@ -195,9 +195,9 @@ init_dbus (NMObject *object) NM_OBJECT_CLASS (nm_client_parent_class)->init_dbus (object); - priv->client_proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE); + priv->client_proxy = _nm_object_get_proxy (object, NM_DBUS_INTERFACE); _nm_object_register_properties (object, - priv->client_proxy, + NM_DBUS_INTERFACE, property_info); /* Permissions */ @@ -1822,8 +1822,6 @@ dispose (GObject *object) priv->perm_call = NULL; } - g_clear_object (&priv->client_proxy); - free_devices (client, TRUE); free_active_connections (client, TRUE); g_clear_object (&priv->primary_connection); @@ -1962,6 +1960,8 @@ nm_client_class_init (NMClientClass *client_class) g_type_class_add_private (client_class, sizeof (NMClientPrivate)); + _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE); + /* virtual methods */ object_class->constructor = constructor; object_class->constructed = constructed; diff --git a/libnm/nm-device-adsl.c b/libnm/nm-device-adsl.c index 3d99020a2e..49d6595e42 100644 --- a/libnm/nm-device-adsl.c +++ b/libnm/nm-device-adsl.c @@ -32,11 +32,8 @@ G_DEFINE_TYPE (NMDeviceAdsl, nm_device_adsl, NM_TYPE_DEVICE) #define NM_DEVICE_ADSL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_ADSL, NMDeviceAdslPrivate)) typedef struct { - DBusGProxy *proxy; - gboolean carrier; - gboolean disposed; } NMDeviceAdslPrivate; enum { @@ -130,35 +127,11 @@ init_dbus (NMObject *object) NM_OBJECT_CLASS (nm_device_adsl_parent_class)->init_dbus (object); - priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_DEVICE_ADSL); _nm_object_register_properties (object, - priv->proxy, + NM_DBUS_INTERFACE_DEVICE_ADSL, property_info); } -static void -dispose (GObject *object) -{ - NMDeviceAdslPrivate *priv = NM_DEVICE_ADSL_GET_PRIVATE (object); - - if (priv->disposed) { - G_OBJECT_CLASS (nm_device_adsl_parent_class)->dispose (object); - return; - } - - priv->disposed = TRUE; - - g_object_unref (priv->proxy); - - G_OBJECT_CLASS (nm_device_adsl_parent_class)->dispose (object); -} - -static void -finalize (GObject *object) -{ - G_OBJECT_CLASS (nm_device_adsl_parent_class)->finalize (object); -} - static void get_property (GObject *object, guint prop_id, @@ -186,9 +159,9 @@ nm_device_adsl_class_init (NMDeviceAdslClass *adsl_class) g_type_class_add_private (object_class, sizeof (NMDeviceAdslPrivate)); + _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_ADSL); + /* virtual methods */ - object_class->dispose = dispose; - object_class->finalize = finalize; object_class->get_property = get_property; nm_object_class->init_dbus = init_dbus; diff --git a/libnm/nm-device-bond.c b/libnm/nm-device-bond.c index e378c9cc31..b22d8b30fb 100644 --- a/libnm/nm-device-bond.c +++ b/libnm/nm-device-bond.c @@ -37,8 +37,6 @@ G_DEFINE_TYPE (NMDeviceBond, nm_device_bond, NM_TYPE_DEVICE) #define NM_DEVICE_BOND_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_BOND, NMDeviceBondPrivate)) typedef struct { - DBusGProxy *proxy; - char *hw_address; gboolean carrier; GPtrArray *slaves; @@ -191,9 +189,8 @@ init_dbus (NMObject *object) NM_OBJECT_CLASS (nm_device_bond_parent_class)->init_dbus (object); - priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_DEVICE_BOND); _nm_object_register_properties (object, - priv->proxy, + NM_DBUS_INTERFACE_DEVICE_BOND, property_info); } @@ -202,8 +199,6 @@ dispose (GObject *object) { NMDeviceBondPrivate *priv = NM_DEVICE_BOND_GET_PRIVATE (object); - g_clear_object (&priv->proxy); - g_clear_pointer (&priv->slaves, g_ptr_array_unref); G_OBJECT_CLASS (nm_device_bond_parent_class)->dispose (object); @@ -252,6 +247,8 @@ nm_device_bond_class_init (NMDeviceBondClass *bond_class) g_type_class_add_private (bond_class, sizeof (NMDeviceBondPrivate)); + _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_BOND); + /* virtual methods */ object_class->dispose = dispose; object_class->finalize = finalize; diff --git a/libnm/nm-device-bridge.c b/libnm/nm-device-bridge.c index cb9cb2ad46..b4ee25b811 100644 --- a/libnm/nm-device-bridge.c +++ b/libnm/nm-device-bridge.c @@ -37,8 +37,6 @@ G_DEFINE_TYPE (NMDeviceBridge, nm_device_bridge, NM_TYPE_DEVICE) #define NM_DEVICE_BRIDGE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_BRIDGE, NMDeviceBridgePrivate)) typedef struct { - DBusGProxy *proxy; - char *hw_address; gboolean carrier; GPtrArray *slaves; @@ -191,9 +189,8 @@ init_dbus (NMObject *object) NM_OBJECT_CLASS (nm_device_bridge_parent_class)->init_dbus (object); - priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_DEVICE_BRIDGE); _nm_object_register_properties (object, - priv->proxy, + NM_DBUS_INTERFACE_DEVICE_BRIDGE, property_info); } @@ -202,8 +199,6 @@ dispose (GObject *object) { NMDeviceBridgePrivate *priv = NM_DEVICE_BRIDGE_GET_PRIVATE (object); - g_clear_object (&priv->proxy); - g_clear_pointer (&priv->slaves, g_ptr_array_unref); G_OBJECT_CLASS (nm_device_bridge_parent_class)->dispose (object); @@ -252,6 +247,8 @@ nm_device_bridge_class_init (NMDeviceBridgeClass *bridge_class) g_type_class_add_private (bridge_class, sizeof (NMDeviceBridgePrivate)); + _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_BRIDGE); + /* virtual methods */ object_class->dispose = dispose; object_class->finalize = finalize; diff --git a/libnm/nm-device-bt.c b/libnm/nm-device-bt.c index 925442e524..b5cefe817f 100644 --- a/libnm/nm-device-bt.c +++ b/libnm/nm-device-bt.c @@ -37,8 +37,6 @@ G_DEFINE_TYPE (NMDeviceBt, nm_device_bt, NM_TYPE_DEVICE) #define NM_DEVICE_BT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_BT, NMDeviceBtPrivate)) typedef struct { - DBusGProxy *proxy; - char *hw_address; char *name; guint32 bt_capabilities; @@ -227,22 +225,11 @@ init_dbus (NMObject *object) NM_OBJECT_CLASS (nm_device_bt_parent_class)->init_dbus (object); - priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_DEVICE_BLUETOOTH); _nm_object_register_properties (object, - priv->proxy, + NM_DBUS_INTERFACE_DEVICE_BLUETOOTH, property_info); } -static void -dispose (GObject *object) -{ - NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (object); - - g_clear_object (&priv->proxy); - - G_OBJECT_CLASS (nm_device_bt_parent_class)->dispose (object); -} - static void finalize (GObject *object) { @@ -287,8 +274,9 @@ nm_device_bt_class_init (NMDeviceBtClass *bt_class) g_type_class_add_private (bt_class, sizeof (NMDeviceBtPrivate)); + _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_BLUETOOTH); + /* virtual methods */ - object_class->dispose = dispose; object_class->finalize = finalize; object_class->get_property = get_property; diff --git a/libnm/nm-device-ethernet.c b/libnm/nm-device-ethernet.c index 118cda17d6..e26a58ee21 100644 --- a/libnm/nm-device-ethernet.c +++ b/libnm/nm-device-ethernet.c @@ -38,8 +38,6 @@ G_DEFINE_TYPE (NMDeviceEthernet, nm_device_ethernet, NM_TYPE_DEVICE) #define NM_DEVICE_ETHERNET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_ETHERNET, NMDeviceEthernetPrivate)) typedef struct { - DBusGProxy *proxy; - char *hw_address; char *perm_hw_address; guint32 speed; @@ -226,22 +224,11 @@ init_dbus (NMObject *object) NM_OBJECT_CLASS (nm_device_ethernet_parent_class)->init_dbus (object); - priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_DEVICE_WIRED); _nm_object_register_properties (object, - priv->proxy, + NM_DBUS_INTERFACE_DEVICE_WIRED, property_info); } -static void -dispose (GObject *object) -{ - NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (object); - - g_clear_object (&priv->proxy); - - G_OBJECT_CLASS (nm_device_ethernet_parent_class)->dispose (object); -} - static void finalize (GObject *object) { @@ -289,8 +276,9 @@ nm_device_ethernet_class_init (NMDeviceEthernetClass *eth_class) g_type_class_add_private (eth_class, sizeof (NMDeviceEthernetPrivate)); + _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_WIRED); + /* virtual methods */ - object_class->dispose = dispose; object_class->finalize = finalize; object_class->get_property = get_property; diff --git a/libnm/nm-device-generic.c b/libnm/nm-device-generic.c index 29cae7cd37..5d11fcde0a 100644 --- a/libnm/nm-device-generic.c +++ b/libnm/nm-device-generic.c @@ -32,8 +32,6 @@ G_DEFINE_TYPE (NMDeviceGeneric, nm_device_generic, NM_TYPE_DEVICE) #define NM_DEVICE_GENERIC_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_GENERIC, NMDeviceGenericPrivate)) typedef struct { - DBusGProxy *proxy; - char *hw_address; char *type_description; } NMDeviceGenericPrivate; @@ -148,22 +146,11 @@ init_dbus (NMObject *object) NM_OBJECT_CLASS (nm_device_generic_parent_class)->init_dbus (object); - priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_DEVICE_GENERIC); _nm_object_register_properties (object, - priv->proxy, + NM_DBUS_INTERFACE_DEVICE_GENERIC, property_info); } -static void -dispose (GObject *object) -{ - NMDeviceGenericPrivate *priv = NM_DEVICE_GENERIC_GET_PRIVATE (object); - - g_clear_object (&priv->proxy); - - G_OBJECT_CLASS (nm_device_generic_parent_class)->dispose (object); -} - static void finalize (GObject *object) { @@ -205,7 +192,8 @@ nm_device_generic_class_init (NMDeviceGenericClass *klass) g_type_class_add_private (klass, sizeof (NMDeviceGenericPrivate)); - object_class->dispose = dispose; + _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_GENERIC); + object_class->finalize = finalize; object_class->get_property = get_property; diff --git a/libnm/nm-device-infiniband.c b/libnm/nm-device-infiniband.c index 478c6e8c18..10ee1140d4 100644 --- a/libnm/nm-device-infiniband.c +++ b/libnm/nm-device-infiniband.c @@ -36,8 +36,6 @@ G_DEFINE_TYPE (NMDeviceInfiniband, nm_device_infiniband, NM_TYPE_DEVICE) #define NM_DEVICE_INFINIBAND_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_INFINIBAND, NMDeviceInfinibandPrivate)) typedef struct { - DBusGProxy *proxy; - char *hw_address; gboolean carrier; } NMDeviceInfinibandPrivate; @@ -175,22 +173,11 @@ init_dbus (NMObject *object) NM_OBJECT_CLASS (nm_device_infiniband_parent_class)->init_dbus (object); - priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_DEVICE_INFINIBAND); _nm_object_register_properties (object, - priv->proxy, + NM_DBUS_INTERFACE_DEVICE_INFINIBAND, property_info); } -static void -dispose (GObject *object) -{ - NMDeviceInfinibandPrivate *priv = NM_DEVICE_INFINIBAND_GET_PRIVATE (object); - - g_clear_object (&priv->proxy); - - G_OBJECT_CLASS (nm_device_infiniband_parent_class)->dispose (object); -} - static void finalize (GObject *object) { @@ -231,8 +218,9 @@ nm_device_infiniband_class_init (NMDeviceInfinibandClass *ib_class) g_type_class_add_private (ib_class, sizeof (NMDeviceInfinibandPrivate)); + _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_INFINIBAND); + /* virtual methods */ - object_class->dispose = dispose; object_class->finalize = finalize; object_class->get_property = get_property; diff --git a/libnm/nm-device-modem.c b/libnm/nm-device-modem.c index 511f084bba..4983864cb4 100644 --- a/libnm/nm-device-modem.c +++ b/libnm/nm-device-modem.c @@ -37,8 +37,6 @@ G_DEFINE_TYPE (NMDeviceModem, nm_device_modem, NM_TYPE_DEVICE) #define NM_DEVICE_MODEM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_MODEM, NMDeviceModemPrivate)) typedef struct { - DBusGProxy *proxy; - NMDeviceModemCapabilities caps; NMDeviceModemCapabilities current_caps; } NMDeviceModemPrivate; @@ -195,9 +193,8 @@ init_dbus (NMObject *object) NM_OBJECT_CLASS (nm_device_modem_parent_class)->init_dbus (object); - priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_DEVICE_MODEM); _nm_object_register_properties (object, - priv->proxy, + NM_DBUS_INTERFACE_DEVICE_MODEM, property_info); } @@ -222,16 +219,6 @@ get_property (GObject *object, } } -static void -dispose (GObject *object) -{ - NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (object); - - g_clear_object (&priv->proxy); - - G_OBJECT_CLASS (nm_device_modem_parent_class)->dispose (object); -} - static void nm_device_modem_class_init (NMDeviceModemClass *modem_class) { @@ -241,9 +228,10 @@ nm_device_modem_class_init (NMDeviceModemClass *modem_class) g_type_class_add_private (modem_class, sizeof (NMDeviceModemPrivate)); + _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_MODEM); + /* virtual methods */ object_class->get_property = get_property; - object_class->dispose = dispose; nm_object_class->init_dbus = init_dbus; diff --git a/libnm/nm-device-olpc-mesh.c b/libnm/nm-device-olpc-mesh.c index b8c2c25cca..ba139a2d43 100644 --- a/libnm/nm-device-olpc-mesh.c +++ b/libnm/nm-device-olpc-mesh.c @@ -36,8 +36,6 @@ G_DEFINE_TYPE (NMDeviceOlpcMesh, nm_device_olpc_mesh, NM_TYPE_DEVICE) #define NM_DEVICE_OLPC_MESH_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_OLPC_MESH, NMDeviceOlpcMeshPrivate)) typedef struct { - DBusGProxy *proxy; - char *hw_address; NMDeviceWifi *companion; guint32 active_channel; @@ -178,9 +176,8 @@ init_dbus (NMObject *object) NM_OBJECT_CLASS (nm_device_olpc_mesh_parent_class)->init_dbus (object); - priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_DEVICE_OLPC_MESH); _nm_object_register_properties (object, - priv->proxy, + NM_DBUS_INTERFACE_DEVICE_OLPC_MESH, property_info); } @@ -190,7 +187,6 @@ dispose (GObject *object) NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (object); g_clear_object (&priv->companion); - g_clear_object (&priv->proxy); G_OBJECT_CLASS (nm_device_olpc_mesh_parent_class)->dispose (object); } @@ -238,6 +234,8 @@ nm_device_olpc_mesh_class_init (NMDeviceOlpcMeshClass *olpc_mesh_class) g_type_class_add_private (olpc_mesh_class, sizeof (NMDeviceOlpcMeshPrivate)); + _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_OLPC_MESH); + /* virtual methods */ object_class->dispose = dispose; object_class->finalize = finalize; diff --git a/libnm/nm-device-team.c b/libnm/nm-device-team.c index 27deda8a5a..06db4cf84a 100644 --- a/libnm/nm-device-team.c +++ b/libnm/nm-device-team.c @@ -37,8 +37,6 @@ G_DEFINE_TYPE (NMDeviceTeam, nm_device_team, NM_TYPE_DEVICE) #define NM_DEVICE_TEAM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_TEAM, NMDeviceTeamPrivate)) typedef struct { - DBusGProxy *proxy; - char *hw_address; gboolean carrier; GPtrArray *slaves; @@ -191,9 +189,8 @@ init_dbus (NMObject *object) NM_OBJECT_CLASS (nm_device_team_parent_class)->init_dbus (object); - priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_DEVICE_TEAM); _nm_object_register_properties (object, - priv->proxy, + NM_DBUS_INTERFACE_DEVICE_TEAM, property_info); } @@ -202,8 +199,6 @@ dispose (GObject *object) { NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (object); - g_clear_object (&priv->proxy); - g_clear_pointer (&priv->slaves, g_ptr_array_unref); G_OBJECT_CLASS (nm_device_team_parent_class)->dispose (object); @@ -252,6 +247,8 @@ nm_device_team_class_init (NMDeviceTeamClass *team_class) g_type_class_add_private (team_class, sizeof (NMDeviceTeamPrivate)); + _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_TEAM); + /* virtual methods */ object_class->dispose = dispose; object_class->finalize = finalize; diff --git a/libnm/nm-device-vlan.c b/libnm/nm-device-vlan.c index b0deb1b089..9cb9d9fde1 100644 --- a/libnm/nm-device-vlan.c +++ b/libnm/nm-device-vlan.c @@ -36,8 +36,6 @@ G_DEFINE_TYPE (NMDeviceVlan, nm_device_vlan, NM_TYPE_DEVICE) #define NM_DEVICE_VLAN_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_VLAN, NMDeviceVlanPrivate)) typedef struct { - DBusGProxy *proxy; - char *hw_address; gboolean carrier; guint vlan_id; @@ -205,22 +203,11 @@ init_dbus (NMObject *object) NM_OBJECT_CLASS (nm_device_vlan_parent_class)->init_dbus (object); - priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_DEVICE_VLAN); _nm_object_register_properties (object, - priv->proxy, + NM_DBUS_INTERFACE_DEVICE_VLAN, property_info); } -static void -dispose (GObject *object) -{ - NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (object); - - g_clear_object (&priv->proxy); - - G_OBJECT_CLASS (nm_device_vlan_parent_class)->dispose (object); -} - static void finalize (GObject *object) { @@ -264,8 +251,9 @@ nm_device_vlan_class_init (NMDeviceVlanClass *vlan_class) g_type_class_add_private (vlan_class, sizeof (NMDeviceVlanPrivate)); + _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_VLAN); + /* virtual methods */ - object_class->dispose = dispose; object_class->finalize = finalize; object_class->get_property = get_property; diff --git a/libnm/nm-device-wifi.c b/libnm/nm-device-wifi.c index 7252672f2d..045811aad0 100644 --- a/libnm/nm-device-wifi.c +++ b/libnm/nm-device-wifi.c @@ -594,9 +594,9 @@ init_dbus (NMObject *object) NM_OBJECT_CLASS (nm_device_wifi_parent_class)->init_dbus (object); - priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_DEVICE_WIRELESS); + priv->proxy = _nm_object_get_proxy (object, NM_DBUS_INTERFACE_DEVICE_WIRELESS); _nm_object_register_properties (object, - priv->proxy, + NM_DBUS_INTERFACE_DEVICE_WIRELESS, property_info); } @@ -638,7 +638,6 @@ dispose (GObject *object) if (priv->aps) clean_up_aps (NM_DEVICE_WIFI (object), TRUE); - g_clear_object (&priv->proxy); G_OBJECT_CLASS (nm_device_wifi_parent_class)->dispose (object); } @@ -663,6 +662,8 @@ nm_device_wifi_class_init (NMDeviceWifiClass *wifi_class) g_type_class_add_private (wifi_class, sizeof (NMDeviceWifiPrivate)); + _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_WIRELESS); + /* virtual methods */ object_class->get_property = get_property; object_class->dispose = dispose; diff --git a/libnm/nm-device-wimax.c b/libnm/nm-device-wimax.c index fc5793acb2..4759ab8329 100644 --- a/libnm/nm-device-wimax.c +++ b/libnm/nm-device-wimax.c @@ -43,8 +43,6 @@ void _nm_device_wimax_set_wireless_enabled (NMDeviceWimax *wimax, gboolean enabl static void state_changed_cb (NMDevice *device, GParamSpec *pspec, gpointer user_data); typedef struct { - DBusGProxy *proxy; - char *hw_address; NMWimaxNsp *active_nsp; GPtrArray *nsps; @@ -495,9 +493,8 @@ init_dbus (NMObject *object) NM_OBJECT_CLASS (nm_device_wimax_parent_class)->init_dbus (object); - priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_DEVICE_WIMAX); _nm_object_register_properties (object, - priv->proxy, + NM_DBUS_INTERFACE_DEVICE_WIMAX, property_info); } @@ -530,7 +527,6 @@ dispose (GObject *object) if (priv->nsps) clean_up_nsps (NM_DEVICE_WIMAX (object)); - g_clear_object (&priv->proxy); G_OBJECT_CLASS (nm_device_wimax_parent_class)->dispose (object); } @@ -544,6 +540,8 @@ nm_device_wimax_class_init (NMDeviceWimaxClass *wimax_class) g_type_class_add_private (wimax_class, sizeof (NMDeviceWimaxPrivate)); + _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_WIMAX); + /* virtual methods */ object_class->get_property = get_property; object_class->dispose = dispose; diff --git a/libnm/nm-device.c b/libnm/nm-device.c index 6d4cf0c128..25d7298f85 100644 --- a/libnm/nm-device.c +++ b/libnm/nm-device.c @@ -222,9 +222,9 @@ init_dbus (NMObject *object) NM_OBJECT_CLASS (nm_device_parent_class)->init_dbus (object); - priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_DEVICE); + priv->proxy = _nm_object_get_proxy (object, NM_DBUS_INTERFACE_DEVICE); _nm_object_register_properties (object, - priv->proxy, + NM_DBUS_INTERFACE_DEVICE, property_info); dbus_g_object_register_marshaller (g_cclosure_marshal_generic, @@ -367,7 +367,6 @@ dispose (GObject *object) { NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (object); - g_clear_object (&priv->proxy); g_clear_object (&priv->ip4_config); g_clear_object (&priv->dhcp4_config); g_clear_object (&priv->ip6_config); @@ -521,6 +520,8 @@ nm_device_class_init (NMDeviceClass *device_class) g_type_class_add_private (device_class, sizeof (NMDevicePrivate)); + _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE); + /* virtual methods */ object_class->constructed = constructed; object_class->get_property = get_property; diff --git a/libnm/nm-dhcp4-config.c b/libnm/nm-dhcp4-config.c index 0782b23736..bbbac64226 100644 --- a/libnm/nm-dhcp4-config.c +++ b/libnm/nm-dhcp4-config.c @@ -31,8 +31,6 @@ G_DEFINE_TYPE (NMDhcp4Config, nm_dhcp4_config, NM_TYPE_OBJECT) #define NM_DHCP4_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DHCP4_CONFIG, NMDhcp4ConfigPrivate)) typedef struct { - DBusGProxy *proxy; - GHashTable *options; } NMDhcp4ConfigPrivate; @@ -84,9 +82,8 @@ init_dbus (NMObject *object) NM_OBJECT_CLASS (nm_dhcp4_config_parent_class)->init_dbus (object); - priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_DHCP4_CONFIG); _nm_object_register_properties (object, - priv->proxy, + NM_DBUS_INTERFACE_DHCP4_CONFIG, property_info); } @@ -98,8 +95,6 @@ finalize (GObject *object) if (priv->options) g_hash_table_destroy (priv->options); - g_object_unref (priv->proxy); - G_OBJECT_CLASS (nm_dhcp4_config_parent_class)->finalize (object); } @@ -129,6 +124,8 @@ nm_dhcp4_config_class_init (NMDhcp4ConfigClass *config_class) g_type_class_add_private (config_class, sizeof (NMDhcp4ConfigPrivate)); + _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DHCP4_CONFIG); + /* virtual methods */ object_class->get_property = get_property; object_class->finalize = finalize; diff --git a/libnm/nm-dhcp6-config.c b/libnm/nm-dhcp6-config.c index ffabb809e0..cf4365bebc 100644 --- a/libnm/nm-dhcp6-config.c +++ b/libnm/nm-dhcp6-config.c @@ -31,8 +31,6 @@ G_DEFINE_TYPE (NMDhcp6Config, nm_dhcp6_config, NM_TYPE_OBJECT) #define NM_DHCP6_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DHCP6_CONFIG, NMDhcp6ConfigPrivate)) typedef struct { - DBusGProxy *proxy; - GHashTable *options; } NMDhcp6ConfigPrivate; @@ -84,9 +82,8 @@ init_dbus (NMObject *object) NM_OBJECT_CLASS (nm_dhcp6_config_parent_class)->init_dbus (object); - priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_DHCP6_CONFIG); _nm_object_register_properties (object, - priv->proxy, + NM_DBUS_INTERFACE_DHCP6_CONFIG, property_info); } @@ -98,8 +95,6 @@ finalize (GObject *object) if (priv->options) g_hash_table_destroy (priv->options); - g_object_unref (priv->proxy); - G_OBJECT_CLASS (nm_dhcp6_config_parent_class)->finalize (object); } @@ -129,6 +124,8 @@ nm_dhcp6_config_class_init (NMDhcp6ConfigClass *config_class) g_type_class_add_private (config_class, sizeof (NMDhcp6ConfigPrivate)); + _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DHCP6_CONFIG); + /* virtual methods */ object_class->get_property = get_property; object_class->finalize = finalize; diff --git a/libnm/nm-ip4-config.c b/libnm/nm-ip4-config.c index 77937c4699..a6890a4e74 100644 --- a/libnm/nm-ip4-config.c +++ b/libnm/nm-ip4-config.c @@ -33,8 +33,6 @@ G_DEFINE_TYPE (NMIP4Config, nm_ip4_config, NM_TYPE_OBJECT) #define NM_IP4_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_IP4_CONFIG, NMIP4ConfigPrivate)) typedef struct { - DBusGProxy *proxy; - char *gateway; GSList *addresses; GSList *routes; @@ -143,9 +141,8 @@ init_dbus (NMObject *object) NM_OBJECT_CLASS (nm_ip4_config_parent_class)->init_dbus (object); - priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_IP4_CONFIG); _nm_object_register_properties (object, - priv->proxy, + NM_DBUS_INTERFACE_IP4_CONFIG, property_info); } @@ -164,8 +161,6 @@ finalize (GObject *object) g_strfreev (priv->searches); g_strfreev (priv->wins); - g_object_unref (priv->proxy); - G_OBJECT_CLASS (nm_ip4_config_parent_class)->finalize (object); } @@ -218,6 +213,8 @@ nm_ip4_config_class_init (NMIP4ConfigClass *config_class) g_type_class_add_private (config_class, sizeof (NMIP4ConfigPrivate)); + _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_IP4_CONFIG); + /* virtual methods */ object_class->get_property = get_property; object_class->finalize = finalize; diff --git a/libnm/nm-ip6-config.c b/libnm/nm-ip6-config.c index 58cd42153b..e78ecee9a6 100644 --- a/libnm/nm-ip6-config.c +++ b/libnm/nm-ip6-config.c @@ -34,8 +34,6 @@ G_DEFINE_TYPE (NMIP6Config, nm_ip6_config, NM_TYPE_OBJECT) #define NM_IP6_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_IP6_CONFIG, NMIP6ConfigPrivate)) typedef struct { - DBusGProxy *proxy; - char *gateway; GSList *addresses; GSList *routes; @@ -130,9 +128,8 @@ init_dbus (NMObject *object) NM_OBJECT_CLASS (nm_ip6_config_parent_class)->init_dbus (object); - priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_IP6_CONFIG); _nm_object_register_properties (object, - priv->proxy, + NM_DBUS_INTERFACE_IP6_CONFIG, property_info); } @@ -252,8 +249,6 @@ finalize (GObject *object) g_strfreev (priv->domains); g_strfreev (priv->searches); - g_object_unref (priv->proxy); - G_OBJECT_CLASS (nm_ip6_config_parent_class)->finalize (object); } @@ -313,6 +308,8 @@ nm_ip6_config_class_init (NMIP6ConfigClass *config_class) g_type_class_add_private (config_class, sizeof (NMIP6ConfigPrivate)); + _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_IP6_CONFIG); + /* virtual methods */ object_class->get_property = get_property; object_class->finalize = finalize; diff --git a/libnm/nm-object-private.h b/libnm/nm-object-private.h index 111dc96b11..f8e70d389a 100644 --- a/libnm/nm-object-private.h +++ b/libnm/nm-object-private.h @@ -36,12 +36,8 @@ typedef struct { const char *signal_prefix; } NMPropertiesInfo; -DBusGProxy *_nm_object_new_proxy (NMObject *self, - const char *path, - const char *interface); - void _nm_object_register_properties (NMObject *object, - DBusGProxy *proxy, + const char *interface, const NMPropertiesInfo *info); gboolean _nm_object_reload_properties (NMObject *object, GError **error); @@ -79,4 +75,9 @@ void _nm_object_register_type_func (GType base_type, NMObjectTypeFunc type_func, #define NM_OBJECT_NM_RUNNING "nm-running-internal" gboolean _nm_object_get_nm_running (NMObject *self); +void _nm_object_class_add_interface (NMObjectClass *object_class, + const char *interface); +DBusGProxy *_nm_object_get_proxy (NMObject *object, + const char *interface); + #endif /* __NM_OBJECT_PRIVATE_H__ */ diff --git a/libnm/nm-object.c b/libnm/nm-object.c index 23e01df75f..2bd9707d9a 100644 --- a/libnm/nm-object.c +++ b/libnm/nm-object.c @@ -41,9 +41,16 @@ static void nm_object_async_initable_iface_init (GAsyncInitableIface *iface); static GHashTable *type_funcs, *type_async_funcs; +typedef struct { + GSList *interfaces; +} NMObjectClassPrivate; + +#define NM_OBJECT_CLASS_GET_PRIVATE(k) (G_TYPE_CLASS_GET_PRIVATE ((k), NM_TYPE_OBJECT, NMObjectClassPrivate)) + 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_type_add_class_private (g_define_type_id, sizeof (NMObjectClassPrivate)); G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, nm_object_initable_iface_init); G_IMPLEMENT_INTERFACE (G_TYPE_ASYNC_INITABLE, nm_object_async_initable_iface_init); ) @@ -65,8 +72,8 @@ typedef struct { gboolean nm_running; char *path; + GHashTable *proxies; DBusGProxy *properties_proxy; - GSList *property_interfaces; GSList *property_tables; NMObject *parent; gboolean suppress_property_updates; @@ -136,6 +143,9 @@ proxy_name_owner_changed (DBusGProxy *proxy, static void nm_object_init (NMObject *object) { + NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object); + + priv->proxies = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_object_unref); } static gboolean @@ -158,8 +168,18 @@ static void init_dbus (NMObject *object) { NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object); + NMObjectClassPrivate *cpriv = NM_OBJECT_CLASS_GET_PRIVATE (NM_OBJECT_GET_CLASS (object)); + GSList *iter; - priv->properties_proxy = _nm_object_new_proxy (object, NULL, DBUS_INTERFACE_PROPERTIES); + for (iter = cpriv->interfaces; iter; iter = iter->next) { + const char *interface = iter->data; + DBusGProxy *proxy; + + proxy = _nm_dbus_new_proxy_for_connection (priv->connection, priv->path, interface); + g_hash_table_insert (priv->proxies, (char *) interface, proxy); + } + + priv->properties_proxy = _nm_dbus_new_proxy_for_connection (priv->connection, priv->path, DBUS_INTERFACE_PROPERTIES); if (_nm_dbus_is_connection_private (priv->connection)) priv->nm_running = TRUE; @@ -314,9 +334,7 @@ dispose (GObject *object) g_slist_free_full (priv->notify_props, g_free); priv->notify_props = NULL; - g_slist_free_full (priv->property_interfaces, g_free); - priv->property_interfaces = NULL; - + g_clear_pointer (&priv->proxies, g_hash_table_unref); g_clear_object (&priv->properties_proxy); g_clear_object (&priv->bus_proxy); @@ -453,6 +471,28 @@ nm_object_async_initable_iface_init (GAsyncInitableIface *iface) iface->init_finish = init_finish; } +/** + * _nm_object_class_add_interface: + * @object_class: an #NMObjectClass + * @interface: a D-Bus interface name + * + * Registers that @object_class implements @interface. A proxy for that + * interface will automatically be created at construction time, and can + * be retrieved with _nm_object_get_proxy(). + */ +void +_nm_object_class_add_interface (NMObjectClass *object_class, + const char *interface) +{ + NMObjectClassPrivate *cpriv; + + g_return_if_fail (NM_IS_OBJECT_CLASS (object_class)); + + cpriv = NM_OBJECT_CLASS_GET_PRIVATE (object_class); + + cpriv->interfaces = g_slist_prepend (cpriv->interfaces, g_strdup (interface)); +} + /** * nm_object_get_path: * @object: a #NMObject @@ -470,6 +510,28 @@ nm_object_get_path (NMObject *object) return NM_OBJECT_GET_PRIVATE (object)->path; } +/** + * _nm_object_get_proxy: + * @object: an #NMObject + * @interface: a D-Bus interface implemented by @object + * + * Gets the D-Bus proxy for @interface on @object. + * + * Returns: (transfer none): a D-Bus proxy + */ +DBusGProxy * +_nm_object_get_proxy (NMObject *object, + const char *interface) +{ + DBusGProxy *proxy; + + g_return_val_if_fail (NM_IS_OBJECT (object), NULL); + + proxy = g_hash_table_lookup (NM_OBJECT_GET_PRIVATE (object)->proxies, interface); + g_return_val_if_fail (proxy != NULL, NULL); + return proxy; +} + static gboolean deferred_notify_cb (gpointer data) { @@ -1147,17 +1209,18 @@ done: void _nm_object_register_properties (NMObject *object, - DBusGProxy *proxy, + const char *interface, const NMPropertiesInfo *info) { NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object); + DBusGProxy *proxy; static gsize dval = 0; const char *debugstr; NMPropertiesInfo *tmp; GHashTable *instance; g_return_if_fail (NM_IS_OBJECT (object)); - g_return_if_fail (proxy != NULL); + g_return_if_fail (interface != NULL); g_return_if_fail (info != NULL); if (g_once_init_enter (&dval)) { @@ -1167,8 +1230,8 @@ _nm_object_register_properties (NMObject *object, g_once_init_leave (&dval, 1); } - priv->property_interfaces = g_slist_prepend (priv->property_interfaces, - g_strdup (dbus_g_proxy_get_interface (proxy))); + proxy = _nm_object_get_proxy (object, interface); + g_return_if_fail (proxy != NULL); dbus_g_proxy_add_signal (proxy, "PropertiesChanged", DBUS_TYPE_G_MAP_OF_VARIANT, G_TYPE_INVALID); dbus_g_proxy_connect_signal (proxy, @@ -1202,14 +1265,17 @@ _nm_object_reload_properties (NMObject *object, GError **error) { NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object); GHashTable *props = NULL; - GSList *p; + GHashTableIter iter; + const char *interface; + DBusGProxy *proxy; - if (!priv->property_interfaces || !priv->nm_running) + if (!g_hash_table_size (priv->proxies) || !priv->nm_running) return TRUE; - for (p = priv->property_interfaces; p; p = p->next) { + g_hash_table_iter_init (&iter, priv->proxies); + while (g_hash_table_iter_next (&iter, (gpointer *) &interface, (gpointer *) &proxy)) { if (!dbus_g_proxy_call (priv->properties_proxy, "GetAll", error, - G_TYPE_STRING, p->data, + G_TYPE_STRING, interface, G_TYPE_INVALID, DBUS_TYPE_G_MAP_OF_VARIANT, &props, G_TYPE_INVALID)) @@ -1352,12 +1418,14 @@ _nm_object_reload_properties_async (NMObject *object, GAsyncReadyCallback callba { NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object); GSimpleAsyncResult *simple; - GSList *p; + GHashTableIter iter; + const char *interface; + DBusGProxy *proxy; simple = g_simple_async_result_new (G_OBJECT (object), callback, user_data, _nm_object_reload_properties_async); - if (!priv->property_interfaces) { + if (!g_hash_table_size (priv->proxies)) { g_simple_async_result_complete_in_idle (simple); g_object_unref (simple); return; @@ -1372,11 +1440,12 @@ _nm_object_reload_properties_async (NMObject *object, GAsyncReadyCallback callba if (priv->reload_results->next) return; - for (p = priv->property_interfaces; p; p = p->next) { + g_hash_table_iter_init (&iter, priv->proxies); + while (g_hash_table_iter_next (&iter, (gpointer *) &interface, (gpointer *) &proxy)) { priv->reload_remaining++; dbus_g_proxy_begin_call (priv->properties_proxy, "GetAll", reload_got_properties, object, NULL, - G_TYPE_STRING, p->data, + G_TYPE_STRING, interface, G_TYPE_INVALID); } } @@ -1396,14 +1465,6 @@ _nm_object_reload_properties_finish (NMObject *object, GAsyncResult *result, GEr return g_simple_async_result_get_op_res_gboolean (simple); } -DBusGProxy * -_nm_object_new_proxy (NMObject *self, const char *path, const char *interface) -{ - NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (self); - - return _nm_dbus_new_proxy_for_connection (priv->connection, path ? path : priv->path, interface); -} - gboolean _nm_object_get_nm_running (NMObject *self) { diff --git a/libnm/nm-remote-connection.c b/libnm/nm-remote-connection.c index e16322b837..7c78ef01ed 100644 --- a/libnm/nm-remote-connection.c +++ b/libnm/nm-remote-connection.c @@ -503,12 +503,12 @@ init_dbus (NMObject *object) NM_OBJECT_CLASS (nm_remote_connection_parent_class)->init_dbus (object); - priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_SETTINGS_CONNECTION); + priv->proxy = _nm_object_get_proxy (object, NM_DBUS_INTERFACE_SETTINGS_CONNECTION); g_assert (priv->proxy); dbus_g_proxy_set_default_timeout (priv->proxy, G_MAXINT); _nm_object_register_properties (object, - priv->proxy, + NM_DBUS_INTERFACE_SETTINGS_CONNECTION, property_info); dbus_g_proxy_add_signal (priv->proxy, "Updated", G_TYPE_INVALID); @@ -665,7 +665,7 @@ dispose (GObject *object) if (priv->proxy) { g_signal_handlers_disconnect_by_func (priv->proxy, proxy_destroy_cb, object); - g_clear_object (&priv->proxy); + priv->proxy = NULL; } G_OBJECT_CLASS (nm_remote_connection_parent_class)->dispose (object); @@ -679,6 +679,8 @@ nm_remote_connection_class_init (NMRemoteConnectionClass *remote_class) g_type_class_add_private (object_class, sizeof (NMRemoteConnectionPrivate)); + _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_SETTINGS_CONNECTION); + /* virtual methods */ object_class->constructed = constructed; object_class->get_property = get_property; diff --git a/libnm/nm-remote-settings.c b/libnm/nm-remote-settings.c index 8c570f2062..371b8f20b4 100644 --- a/libnm/nm-remote-settings.c +++ b/libnm/nm-remote-settings.c @@ -860,11 +860,9 @@ init_dbus (NMObject *object) NM_OBJECT_CLASS (nm_remote_settings_parent_class)->init_dbus (object); - priv->proxy = _nm_object_new_proxy (object, - NM_DBUS_PATH_SETTINGS, - NM_DBUS_INTERFACE_SETTINGS); + priv->proxy = _nm_object_get_proxy (object, NM_DBUS_INTERFACE_SETTINGS); _nm_object_register_properties (object, - priv->proxy, + NM_DBUS_INTERFACE_SETTINGS, property_info); g_signal_connect (object, "notify::" NM_OBJECT_NM_RUNNING, @@ -919,7 +917,6 @@ dispose (GObject *object) g_clear_pointer (&priv->visible_connections, g_ptr_array_unref); g_clear_pointer (&priv->hostname, g_free); - g_clear_object (&priv->proxy); G_OBJECT_CLASS (nm_remote_settings_parent_class)->dispose (object); } @@ -957,6 +954,8 @@ nm_remote_settings_class_init (NMRemoteSettingsClass *class) g_type_class_add_private (class, sizeof (NMRemoteSettingsPrivate)); + _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_SETTINGS); + /* Virtual methods */ object_class->constructor = constructor; object_class->get_property = get_property; diff --git a/libnm/nm-vpn-connection.c b/libnm/nm-vpn-connection.c index fc3d8c81c1..e9966a74be 100644 --- a/libnm/nm-vpn-connection.c +++ b/libnm/nm-vpn-connection.c @@ -31,7 +31,6 @@ G_DEFINE_TYPE (NMVpnConnection, nm_vpn_connection, NM_TYPE_ACTIVE_CONNECTION) #define NM_VPN_CONNECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_VPN_CONNECTION, NMVpnConnectionPrivate)) typedef struct { - DBusGProxy *proxy; char *banner; NMVpnConnectionState vpn_state; } NMVpnConnectionPrivate; @@ -128,20 +127,21 @@ init_dbus (NMObject *object) { NM_VPN_CONNECTION_VPN_STATE, &priv->vpn_state }, { NULL }, }; + DBusGProxy *proxy; NM_OBJECT_CLASS (nm_vpn_connection_parent_class)->init_dbus (object); - priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_VPN_CONNECTION); _nm_object_register_properties (object, - priv->proxy, + NM_DBUS_INTERFACE_VPN_CONNECTION, property_info); + proxy = _nm_object_get_proxy (object, NM_DBUS_INTERFACE_VPN_CONNECTION); dbus_g_object_register_marshaller (g_cclosure_marshal_generic, G_TYPE_NONE, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_INVALID); - dbus_g_proxy_add_signal (priv->proxy, "VpnStateChanged", G_TYPE_UINT, G_TYPE_UINT, G_TYPE_INVALID); - dbus_g_proxy_connect_signal (priv->proxy, + dbus_g_proxy_add_signal (proxy, "VpnStateChanged", G_TYPE_UINT, G_TYPE_UINT, G_TYPE_INVALID); + dbus_g_proxy_connect_signal (proxy, "VpnStateChanged", G_CALLBACK (vpn_state_changed_proxy), object, @@ -154,7 +154,6 @@ finalize (GObject *object) NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (object); g_free (priv->banner); - g_object_unref (priv->proxy); G_OBJECT_CLASS (nm_vpn_connection_parent_class)->finalize (object); } @@ -188,6 +187,8 @@ nm_vpn_connection_class_init (NMVpnConnectionClass *connection_class) g_type_class_add_private (connection_class, sizeof (NMVpnConnectionPrivate)); + _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_VPN_CONNECTION); + /* virtual methods */ object_class->get_property = get_property; object_class->finalize = finalize; diff --git a/libnm/nm-wimax-nsp.c b/libnm/nm-wimax-nsp.c index e4617ad677..57170893be 100644 --- a/libnm/nm-wimax-nsp.c +++ b/libnm/nm-wimax-nsp.c @@ -36,8 +36,6 @@ G_DEFINE_TYPE (NMWimaxNsp, nm_wimax_nsp, NM_TYPE_OBJECT) #define NM_WIMAX_NSP_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_WIMAX_NSP, NMWimaxNspPrivate)) typedef struct { - DBusGProxy *proxy; - char *name; guint32 signal_quality; NMWimaxNspNetworkType network_type; @@ -182,16 +180,6 @@ nm_wimax_nsp_init (NMWimaxNsp *nsp) { } -static void -dispose (GObject *object) -{ - NMWimaxNspPrivate *priv = NM_WIMAX_NSP_GET_PRIVATE (object); - - g_clear_object (&priv->proxy); - - G_OBJECT_CLASS (nm_wimax_nsp_parent_class)->dispose (object); -} - static void finalize (GObject *object) { @@ -239,9 +227,8 @@ init_dbus (NMObject *object) NM_OBJECT_CLASS (nm_wimax_nsp_parent_class)->init_dbus (object); - priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_WIMAX_NSP); _nm_object_register_properties (object, - priv->proxy, + NM_DBUS_INTERFACE_WIMAX_NSP, property_info); } @@ -253,9 +240,10 @@ nm_wimax_nsp_class_init (NMWimaxNspClass *nsp_class) g_type_class_add_private (nsp_class, sizeof (NMWimaxNspPrivate)); + _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_WIMAX_NSP); + /* virtual methods */ object_class->get_property = get_property; - object_class->dispose = dispose; object_class->finalize = finalize; nm_object_class->init_dbus = init_dbus; -- cgit v1.2.1