diff options
Diffstat (limited to 'src/nm-exported-object.c')
| -rw-r--r-- | src/nm-exported-object.c | 47 |
1 files changed, 43 insertions, 4 deletions
diff --git a/src/nm-exported-object.c b/src/nm-exported-object.c index a53a3123..cd0789ee 100644 --- a/src/nm-exported-object.c +++ b/src/nm-exported-object.c @@ -35,8 +35,16 @@ #define _ASSERT_NO_EARLY_EXPORT #endif +/*****************************************************************************/ + static gboolean quitting = FALSE; +/*****************************************************************************/ + +NM_GOBJECT_PROPERTIES_DEFINE (NMExportedObject, + PROP_PATH, +); + typedef struct { GDBusInterfaceSkeleton *interface; guint property_changed_signal_id; @@ -677,6 +685,8 @@ nm_exported_object_export (NMExportedObject *self) nm_bus_manager_register_object (priv->bus_mgr, (GDBusObjectSkeleton *) self); + _notify (self, PROP_PATH); + return priv->path; } @@ -715,6 +725,8 @@ nm_exported_object_unexport (NMExportedObject *self) g_clear_pointer (&priv->path, g_free); nm_clear_g_source (&priv->notify_idle_id); + + _notify (self, PROP_PATH); } /*****************************************************************************/ @@ -959,6 +971,23 @@ vtype_found: /*****************************************************************************/ static void +get_property (GObject *object, guint prop_id, + GValue *value, GParamSpec *pspec) +{ + NMExportedObject *self = NM_EXPORTED_OBJECT (object); + NMExportedObjectPrivate *priv = NM_EXPORTED_OBJECT_GET_PRIVATE (self); + + switch (prop_id) { + case PROP_PATH: + g_value_set_string (value, priv->path); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void nm_exported_object_init (NMExportedObject *self) { NMExportedObjectPrivate *priv; @@ -987,7 +1016,8 @@ constructed (GObject *object) static void dispose (GObject *object) { - NMExportedObjectPrivate *priv = NM_EXPORTED_OBJECT_GET_PRIVATE (NM_EXPORTED_OBJECT (object)); + NMExportedObject *self = NM_EXPORTED_OBJECT (object); + NMExportedObjectPrivate *priv = NM_EXPORTED_OBJECT_GET_PRIVATE (self); /* Objects should have already been unexported by their owner, unless * we are quitting, where many objects stick around until exit. @@ -995,10 +1025,10 @@ dispose (GObject *object) if (!quitting) { if (priv->path) { g_warn_if_reached (); - nm_exported_object_unexport (NM_EXPORTED_OBJECT (object)); + nm_exported_object_unexport (self); } - } else - g_clear_pointer (&priv->path, g_free); + } else if (nm_clear_g_free (&priv->path)) + _notify (self, PROP_PATH); nm_clear_g_source (&priv->notify_idle_id); @@ -1015,4 +1045,13 @@ nm_exported_object_class_init (NMExportedObjectClass *klass) object_class->constructed = constructed; object_class->notify = nm_exported_object_notify; object_class->dispose = dispose; + object_class->get_property = get_property; + + obj_properties[PROP_PATH] = + g_param_spec_string (NM_EXPORTED_OBJECT_PATH, "", "", + NULL, + G_PARAM_READABLE | + G_PARAM_STATIC_STRINGS); + + g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties); } |