static void notify (GObject *object, GParamSpec *pspec) { GHashTable *interfaces; PropertiesChangedInfo *info; const char *interface; GValue *value; info = get_properties_changed_info (object); interface = g_hash_table_lookup (info->registered, pspec->name); if (!interface) return; /* Check if there are other changed properties for this interface already, * otherwise create a new hash table for all changed properties for this * D-Bus interface. */ interfaces = g_hash_table_lookup (info->hash, interface); if (!interfaces) { interfaces = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, destroy_value); g_hash_table_insert (info->hash, g_strdup (interface), interfaces); } /* Now put the changed property value into the hash table of changed values * for its D-Bus interface. */ value = g_slice_new0 (GValue); g_value_init (value, pspec->value_type); g_object_get_property (object, pspec->name, value); g_hash_table_insert (interfaces, uscore_to_wincaps (pspec->name), value); if (!info->idle_id) info->idle_id = g_idle_add_full (G_PRIORITY_DEFAULT_IDLE, properties_changed, object, idle_id_reset); }
static void notify (GObject *object, GParamSpec *pspec) { PropertiesChangedInfo *info; GValue *value; /* Ignore properties that shouldn't be exported */ if (pspec->flags & NM_PROPERTY_PARAM_NO_EXPORT) return; info = (PropertiesChangedInfo *) g_object_get_data (object, NM_DBUS_PROPERTY_CHANGED); if (!info) { info = properties_changed_info_new (); g_object_set_data_full (object, NM_DBUS_PROPERTY_CHANGED, info, properties_changed_info_destroy); info->signal_id = g_signal_lookup ("properties-changed", G_OBJECT_TYPE (object)); g_assert (info->signal_id); } value = g_slice_new0 (GValue); g_value_init (value, pspec->value_type); g_object_get_property (object, pspec->name, value); g_hash_table_insert (info->hash, uscore_to_wincaps (pspec->name), value); if (!info->idle_id) info->idle_id = g_idle_add_full (G_PRIORITY_DEFAULT_IDLE, properties_changed, object, idle_id_reset); }