shared: add NM_GOBJECT_PROPERTIES_DEFINE()
authorThomas Haller <thaller@redhat.com>
Tue, 19 Jan 2016 15:43:51 +0000 (16:43 +0100)
committerThomas Haller <thaller@redhat.com>
Tue, 19 Jan 2016 20:20:36 +0000 (21:20 +0100)
Helper macros to define GObject property enum,
the obj_properties array, and a _notify() function.

We should move away from invoking property changed notifications by
string, as we already do for signals. This macro simplifies the
implementation of establishes a pattern for naming and usage.

shared/nm-macros-internal.h

index 7bddb4b..c178758 100644 (file)
 
 /*****************************************************************************/
 
+#define NM_GOBJECT_PROPERTIES_DEFINE(obj_type, ...) \
+typedef enum { \
+       _PROPERTY_ENUMS_0, \
+       __VA_ARGS__ \
+       _PROPERTY_ENUMS_LAST, \
+} _PropertyEnums; \
+static GParamSpec *obj_properties[_PROPERTY_ENUMS_LAST] = { NULL, }; \
+static inline void \
+_notify (obj_type *obj, _PropertyEnums prop) \
+{ \
+       nm_assert (G_IS_OBJECT (obj)); \
+       nm_assert ((gsize) prop < G_N_ELEMENTS (obj_properties)); \
+       g_object_notify_by_pspec ((GObject *) obj, obj_properties[prop]); \
+}
+
+/*****************************************************************************/
+
 static inline gboolean
 nm_clear_g_source (guint *id)
 {