+ EmpathyTpChatPriv *priv = GET_PRIV (chat);
+ guint i, j;
+
+ for (i = 0; i < properties->len; i++) {
+ GValueArray *prop_struct;
+ TpChatProperty *property;
+ guint id;
+ GValue *src_value;
+
+ prop_struct = g_ptr_array_index (properties, i);
+ id = g_value_get_uint (g_value_array_get_nth (prop_struct, 0));
+ src_value = g_value_array_get_nth (prop_struct, 1);
+
+ for (j = 0; j < priv->properties->len; j++) {
+ property = g_ptr_array_index (priv->properties, j);
+ if (property->id == id) {
+ if (property->value) {
+ g_value_unset (property->value);
+ } else {
+ property->value = g_slice_new0 (GValue);
+ }
+ g_value_copy (src_value, property->value);
+
+ empathy_debug (DEBUG_DOMAIN, "property %s changed",
+ property->name);
+ g_signal_emit (chat, signals[PROPERTY_CHANGED], 0,
+ property->name, property->value);
+ break;
+ }
+ }
+ }