diff options
-rw-r--r-- | libempathy-gtk/empathy-group-chat.c | 2 | ||||
-rw-r--r-- | libempathy/empathy-tp-chat.c | 42 | ||||
-rw-r--r-- | libempathy/empathy-tp-chat.h | 1 |
3 files changed, 43 insertions, 2 deletions
diff --git a/libempathy-gtk/empathy-group-chat.c b/libempathy-gtk/empathy-group-chat.c index a775d97d5..e9a4b1700 100644 --- a/libempathy-gtk/empathy-group-chat.c +++ b/libempathy-gtk/empathy-group-chat.c @@ -391,7 +391,7 @@ group_chat_topic_response_cb (GtkWidget *dialog, g_value_init (&value, G_TYPE_STRING); g_value_set_string (&value, topic); empathy_tp_chat_set_property (EMPATHY_TP_CHAT (priv->tp_chat), - &value); + "subject", &value); g_value_unset (&value); } } diff --git a/libempathy/empathy-tp-chat.c b/libempathy/empathy-tp-chat.c index 1579979f6..7ae3168c1 100644 --- a/libempathy/empathy-tp-chat.c +++ b/libempathy/empathy-tp-chat.c @@ -25,6 +25,7 @@ #include <telepathy-glib/channel.h> #include <telepathy-glib/dbus.h> +#include <telepathy-glib/util.h> #include "empathy-tp-chat.h" #include "empathy-contact-factory.h" @@ -395,6 +396,10 @@ tp_chat_properties_changed_cb (TpProxy *proxy, EmpathyTpChatPriv *priv = GET_PRIV (chat); guint i, j; + if (!priv->had_properties_list || !properties) { + return; + } + for (i = 0; i < properties->len; i++) { GValueArray *prop_struct; TpChatProperty *property; @@ -492,9 +497,44 @@ tp_chat_list_properties_cb (TpProxy *proxy, void empathy_tp_chat_set_property (EmpathyTpChat *chat, + const gchar *name, const GValue *value) { - /* FIXME: not implemented */ + EmpathyTpChatPriv *priv = GET_PRIV (chat); + TpChatProperty *property; + guint i; + + for (i = 0; i < priv->properties->len; i++) { + property = g_ptr_array_index (priv->properties, i); + if (!tp_strdiff (property->name, name)) { + GPtrArray *properties; + GValueArray *prop; + GValue id = {0, }; + GValue dest_value = {0, }; + + g_value_init (&id, G_TYPE_UINT); + g_value_init (&dest_value, G_TYPE_VALUE); + g_value_set_uint (&id, property->id); + g_value_set_boxed (&dest_value, value); + + prop = g_value_array_new (2); + g_value_array_append (prop, &id); + g_value_array_append (prop, &dest_value); + + properties = g_ptr_array_sized_new (1); + g_ptr_array_add (properties, prop); + + empathy_debug (DEBUG_DOMAIN, "Set property %s", name); + tp_cli_properties_interface_call_set_properties (priv->channel, -1, + properties, + (tp_cli_properties_interface_callback_for_set_properties) + tp_chat_async_cb, + "Seting property", NULL, + G_OBJECT (chat)); + + break; + } + } } static gboolean diff --git a/libempathy/empathy-tp-chat.h b/libempathy/empathy-tp-chat.h index fd988ec2e..0f47d12c1 100644 --- a/libempathy/empathy-tp-chat.h +++ b/libempathy/empathy-tp-chat.h @@ -69,6 +69,7 @@ void empathy_tp_chat_set_state (EmpathyTpChat *chat, TpChannelChatState state); const gchar * empathy_tp_chat_get_id (EmpathyTpChat *chat); void empathy_tp_chat_set_property (EmpathyTpChat *chat, + const gchar *name, const GValue *value); G_END_DECLS |