aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWill Thompson <will.thompson@collabora.co.uk>2011-10-15 01:07:42 +0800
committerWill Thompson <will.thompson@collabora.co.uk>2011-10-15 01:07:42 +0800
commit0bf6ee3a15d15cb80c5835d33bf899b2404da053 (patch)
tree43c0c9a0996a5ba823c08c5d3b0ec7eb9a5fcdbb
parent470d73148cee8632b0268a0277f3b29e083b804d (diff)
parente623416a51aca9f813208a0691585d6fb0dbbb1b (diff)
downloadgsoc2013-empathy-0bf6ee3a15d15cb80c5835d33bf899b2404da053.tar
gsoc2013-empathy-0bf6ee3a15d15cb80c5835d33bf899b2404da053.tar.gz
gsoc2013-empathy-0bf6ee3a15d15cb80c5835d33bf899b2404da053.tar.bz2
gsoc2013-empathy-0bf6ee3a15d15cb80c5835d33bf899b2404da053.tar.lz
gsoc2013-empathy-0bf6ee3a15d15cb80c5835d33bf899b2404da053.tar.xz
gsoc2013-empathy-0bf6ee3a15d15cb80c5835d33bf899b2404da053.tar.zst
gsoc2013-empathy-0bf6ee3a15d15cb80c5835d33bf899b2404da053.zip
Merge branch 'subjective' into gnome-3-2
-rw-r--r--configure.ac2
-rw-r--r--libempathy-gtk/empathy-chat.c68
-rw-r--r--libempathy-gtk/empathy-theme-adium.c10
-rw-r--r--libempathy/empathy-tp-chat.c365
-rw-r--r--libempathy/empathy-tp-chat.h22
5 files changed, 199 insertions, 268 deletions
diff --git a/configure.ac b/configure.ac
index 363c84033..4e4a4a122 100644
--- a/configure.ac
+++ b/configure.ac
@@ -44,7 +44,7 @@ GCR_REQUIRED=2.91.4
LIBCANBERRA_GTK_REQUIRED=0.25
LIBNOTIFY_REQUIRED=0.7.0
TELEPATHY_FARSIGHT_REQUIRED=0.0.14
-TELEPATHY_GLIB_REQUIRED=0.15.5
+TELEPATHY_GLIB_REQUIRED=0.16.0
TELEPATHY_LOGGER=0.2.10
WEBKIT_REQUIRED=1.3.13
diff --git a/libempathy-gtk/empathy-chat.c b/libempathy-gtk/empathy-chat.c
index 570d73b69..9754b09bf 100644
--- a/libempathy-gtk/empathy-chat.c
+++ b/libempathy-gtk/empathy-chat.c
@@ -756,26 +756,20 @@ chat_command_topic (EmpathyChat *chat,
GStrv strv)
{
EmpathyChatPriv *priv = GET_PRIV (chat);
- EmpathyTpChatProperty *property;
- GValue value = {0, };
- property = empathy_tp_chat_get_property (priv->tp_chat, "subject");
- if (property == NULL) {
+ if (!empathy_tp_chat_supports_subject (priv->tp_chat)) {
empathy_chat_view_append_event (chat->view,
_("Topic not supported on this conversation"));
return;
}
- if (!(property->flags & TP_PROPERTY_FLAG_WRITE)) {
+ if (!empathy_tp_chat_can_set_subject (priv->tp_chat)) {
empathy_chat_view_append_event (chat->view,
_("You are not allowed to change the topic"));
return;
}
- g_value_init (&value, G_TYPE_STRING);
- g_value_set_string (&value, strv[1]);
- empathy_tp_chat_set_property (priv->tp_chat, "subject", &value);
- g_value_unset (&value);
+ empathy_tp_chat_set_subject (priv->tp_chat, strv[1]);
}
void
@@ -1528,16 +1522,12 @@ chat_topic_expander_activate_cb (GtkExpander *expander,
}
static void
-chat_property_changed_cb (EmpathyTpChat *tp_chat,
- const gchar *name,
- GValue *value,
- EmpathyChat *chat)
+chat_subject_changed_cb (EmpathyChat *chat)
{
EmpathyChatPriv *priv = GET_PRIV (chat);
- if (!tp_strdiff (name, "subject")) {
g_free (priv->subject);
- priv->subject = g_value_dup_string (value);
+ priv->subject = g_strdup (empathy_tp_chat_get_subject (priv->tp_chat));
g_object_notify (G_OBJECT (chat), "subject");
if (EMP_STR_EMPTY (priv->subject)) {
@@ -1567,12 +1557,16 @@ chat_property_changed_cb (EmpathyTpChat *tp_chat,
empathy_chat_view_append_event (EMPATHY_CHAT (chat)->view, str);
g_free (str);
}
- }
- else if (!tp_strdiff (name, "name")) {
+}
+
+static void
+chat_title_changed_cb (EmpathyChat *chat)
+{
+ EmpathyChatPriv *priv = GET_PRIV (chat);
+
g_free (priv->name);
- priv->name = g_value_dup_string (value);
+ priv->name = g_strdup (empathy_tp_chat_get_title (priv->tp_chat));
g_object_notify (G_OBJECT (chat), "name");
- }
}
static gboolean
@@ -3086,11 +3080,13 @@ chat_finalize (GObject *object)
g_signal_handlers_disconnect_by_func (priv->tp_chat,
chat_state_changed_cb, chat);
g_signal_handlers_disconnect_by_func (priv->tp_chat,
- chat_property_changed_cb, chat);
- g_signal_handlers_disconnect_by_func (priv->tp_chat,
chat_members_changed_cb, chat);
g_signal_handlers_disconnect_by_func (priv->tp_chat,
chat_remote_contact_changed_cb, chat);
+ g_signal_handlers_disconnect_by_func (priv->tp_chat,
+ chat_title_changed_cb, chat);
+ g_signal_handlers_disconnect_by_func (priv->tp_chat,
+ chat_subject_changed_cb, chat);
empathy_tp_chat_leave (priv->tp_chat, "");
g_object_unref (priv->tp_chat);
}
@@ -3770,7 +3766,6 @@ empathy_chat_set_tp_chat (EmpathyChat *chat,
EmpathyTpChat *tp_chat)
{
EmpathyChatPriv *priv = GET_PRIV (chat);
- GPtrArray *properties;
g_return_if_fail (EMPATHY_IS_CHAT (chat));
g_return_if_fail (EMPATHY_IS_TP_CHAT (tp_chat));
@@ -3801,9 +3796,6 @@ empathy_chat_set_tp_chat (EmpathyChat *chat,
g_signal_connect (tp_chat, "chat-state-changed-empathy",
G_CALLBACK (chat_state_changed_cb),
chat);
- g_signal_connect (tp_chat, "property-changed",
- G_CALLBACK (chat_property_changed_cb),
- chat);
g_signal_connect (tp_chat, "members-changed",
G_CALLBACK (chat_members_changed_cb),
chat);
@@ -3822,28 +3814,18 @@ empathy_chat_set_tp_chat (EmpathyChat *chat,
g_signal_connect_swapped (tp_chat, "notify::n-messages-sending",
G_CALLBACK (chat_n_messages_sending_changed_cb),
chat);
+ g_signal_connect_swapped (tp_chat, "notify::title",
+ G_CALLBACK (chat_title_changed_cb),
+ chat);
+ g_signal_connect_swapped (tp_chat, "notify::subject",
+ G_CALLBACK (chat_subject_changed_cb),
+ chat);
/* Get initial value of properties */
- properties = empathy_tp_chat_get_properties (priv->tp_chat);
- if (properties != NULL) {
- guint i;
-
- for (i = 0; i < properties->len; i++) {
- EmpathyTpChatProperty *property;
-
- property = g_ptr_array_index (properties, i);
- if (property->value == NULL)
- continue;
-
- chat_property_changed_cb (priv->tp_chat,
- property->name,
- property->value,
- chat);
- }
- }
-
chat_sms_channel_changed_cb (chat);
chat_remote_contact_changed_cb (chat);
+ chat_title_changed_cb (chat);
+ chat_subject_changed_cb (chat);
if (chat->input_text_view) {
gtk_widget_set_sensitive (chat->input_text_view, TRUE);
diff --git a/libempathy-gtk/empathy-theme-adium.c b/libempathy-gtk/empathy-theme-adium.c
index fde9d9295..820cd587e 100644
--- a/libempathy-gtk/empathy-theme-adium.c
+++ b/libempathy-gtk/empathy-theme-adium.c
@@ -1918,8 +1918,16 @@ empathy_adium_data_new_with_info (const gchar *path, GHashTable *info)
/* template -> empathy's template */
data->custom_template = (template_html != NULL);
if (template_html == NULL) {
+ GError *error = NULL;
+
tmp = empathy_file_lookup ("Template.html", "data");
- g_file_get_contents (tmp, &template_html, NULL, NULL);
+
+ if (!g_file_get_contents (tmp, &template_html, NULL, &error)) {
+ g_warning ("couldn't load Empathy's default theme "
+ "template: %s", error->message);
+ g_return_val_if_reached (data);
+ }
+
g_free (tmp);
}
diff --git a/libempathy/empathy-tp-chat.c b/libempathy/empathy-tp-chat.c
index 9eaff9592..cfa93147d 100644
--- a/libempathy/empathy-tp-chat.c
+++ b/libempathy/empathy-tp-chat.c
@@ -47,8 +47,16 @@ struct _EmpathyTpChatPrivate {
GQueue *messages_queue;
/* Queue of messages signalled but not acked yet */
GQueue *pending_messages_queue;
- gboolean had_properties_list;
- GPtrArray *properties;
+
+ /* Subject */
+ gboolean supports_subject;
+ gboolean can_set_subject;
+ gchar *subject;
+
+ /* Room config (for now, we only track the title and don't support
+ * setting it) */
+ gchar *title;
+
gboolean can_upgrade_to_muc;
GHashTable *messages_being_sent;
@@ -64,13 +72,14 @@ enum {
PROP_ACCOUNT,
PROP_REMOTE_CONTACT,
PROP_N_MESSAGES_SENDING,
+ PROP_TITLE,
+ PROP_SUBJECT,
};
enum {
MESSAGE_RECEIVED,
SEND_ERROR,
CHAT_STATE_CHANGED,
- PROPERTY_CHANGED,
MESSAGE_ACKNOWLEDGED,
LAST_SIGNAL
};
@@ -585,220 +594,142 @@ list_pending_messages (EmpathyTpChat *self)
}
static void
-tp_chat_property_flags_changed_cb (TpProxy *proxy,
- const GPtrArray *properties,
- gpointer user_data,
- GObject *chat)
+update_subject (EmpathyTpChat *self,
+ GHashTable *properties)
{
- EmpathyTpChat *self = (EmpathyTpChat *) chat;
- guint i, j;
+ EmpathyTpChatPrivate *priv = self->priv;
+ gboolean can_set, valid;
+ const gchar *subject;
- if (!self->priv->had_properties_list || !properties) {
- return;
+ can_set = tp_asv_get_boolean (properties, "CanSet", &valid);
+ if (valid) {
+ priv->can_set_subject = can_set;
}
- for (i = 0; i < properties->len; i++) {
- GValueArray *prop_struct;
- EmpathyTpChatProperty *property;
- guint id;
- guint flags;
-
- prop_struct = g_ptr_array_index (properties, i);
- id = g_value_get_uint (g_value_array_get_nth (prop_struct, 0));
- flags = g_value_get_uint (g_value_array_get_nth (prop_struct, 1));
-
- for (j = 0; j < self->priv->properties->len; j++) {
- property = g_ptr_array_index (self->priv->properties, j);
- if (property->id == id) {
- property->flags = flags;
- DEBUG ("property %s flags changed: %d",
- property->name, property->flags);
- break;
- }
- }
+ subject = tp_asv_get_string (properties, "Subject");
+ if (subject != NULL) {
+ g_free (priv->subject);
+ priv->subject = g_strdup (subject);
+ g_object_notify (G_OBJECT (self), "subject");
}
+
+ /* TODO: track Actor and Timestamp. */
}
static void
-tp_chat_properties_changed_cb (TpProxy *proxy,
- const GPtrArray *properties,
- gpointer user_data,
- GObject *chat)
+tp_chat_get_all_subject_cb (TpProxy *proxy,
+ GHashTable *properties,
+ const GError *error,
+ gpointer user_data G_GNUC_UNUSED,
+ GObject *chat)
{
- EmpathyTpChat *self = (EmpathyTpChat *) chat;
- guint i, j;
+ EmpathyTpChat *self = EMPATHY_TP_CHAT (chat);
+ EmpathyTpChatPrivate *priv = self->priv;
- if (!self->priv->had_properties_list || !properties) {
+ if (error) {
+ DEBUG ("Error fetching subject: %s", error->message);
return;
}
- for (i = 0; i < properties->len; i++) {
- GValueArray *prop_struct;
- EmpathyTpChatProperty *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_get_boxed (g_value_array_get_nth (prop_struct, 1));
-
- for (j = 0; j < self->priv->properties->len; j++) {
- property = g_ptr_array_index (self->priv->properties, j);
- if (property->id == id) {
- if (property->value) {
- g_value_copy (src_value, property->value);
- } else {
- property->value = tp_g_value_slice_dup (src_value);
- }
-
- DEBUG ("property %s changed", property->name);
- g_signal_emit (chat, signals[PROPERTY_CHANGED], 0,
- property->name, property->value);
- break;
- }
+ priv->supports_subject = TRUE;
+ update_subject (self, properties);
+}
+
+static void
+update_title (EmpathyTpChat *self,
+ GHashTable *properties)
+{
+ EmpathyTpChatPrivate *priv = self->priv;
+ const gchar *title = tp_asv_get_string (properties, "Title");
+
+ if (title != NULL) {
+ if (tp_str_empty (title)) {
+ title = NULL;
}
+
+ g_free (priv->title);
+ priv->title = g_strdup (title);
+ g_object_notify (G_OBJECT (self), "title");
}
}
static void
-tp_chat_get_properties_cb (TpProxy *proxy,
- const GPtrArray *properties,
- const GError *error,
- gpointer user_data,
- GObject *chat)
+tp_chat_get_all_room_config_cb (TpProxy *proxy,
+ GHashTable *properties,
+ const GError *error,
+ gpointer user_data G_GNUC_UNUSED,
+ GObject *chat)
{
+ EmpathyTpChat *self = EMPATHY_TP_CHAT (chat);
+
if (error) {
- DEBUG ("Error getting properties: %s", error->message);
+ DEBUG ("Error fetching room config: %s", error->message);
return;
}
- tp_chat_properties_changed_cb (proxy, properties, user_data, chat);
+ update_title (self, properties);
}
static void
-tp_chat_list_properties_cb (TpProxy *proxy,
- const GPtrArray *properties,
- const GError *error,
- gpointer user_data,
- GObject *chat)
+tp_chat_dbus_properties_changed_cb (TpProxy *proxy,
+ const gchar *interface_name,
+ GHashTable *changed,
+ const gchar **invalidated,
+ gpointer user_data,
+ GObject *chat)
{
- EmpathyTpChat *self = (EmpathyTpChat *) chat;
- GArray *ids;
- guint i;
+ EmpathyTpChat *self = EMPATHY_TP_CHAT (chat);
- if (error) {
- DEBUG ("Error listing properties: %s", error->message);
- return;
+ if (!tp_strdiff (interface_name, TP_IFACE_CHANNEL_INTERFACE_SUBJECT)) {
+ update_subject (self, changed);
}
- self->priv->had_properties_list = TRUE;
-
- ids = g_array_sized_new (FALSE, FALSE, sizeof (guint), properties->len);
- self->priv->properties = g_ptr_array_sized_new (properties->len);
- for (i = 0; i < properties->len; i++) {
- GValueArray *prop_struct;
- EmpathyTpChatProperty *property;
-
- prop_struct = g_ptr_array_index (properties, i);
- property = g_slice_new0 (EmpathyTpChatProperty);
- property->id = g_value_get_uint (g_value_array_get_nth (prop_struct, 0));
- property->name = g_value_dup_string (g_value_array_get_nth (prop_struct, 1));
- property->flags = g_value_get_uint (g_value_array_get_nth (prop_struct, 3));
-
- DEBUG ("Adding property name=%s id=%d flags=%d",
- property->name, property->id, property->flags);
- g_ptr_array_add (self->priv->properties, property);
- if (property->flags & TP_PROPERTY_FLAG_READ) {
- g_array_append_val (ids, property->id);
- }
+ if (!tp_strdiff (interface_name, TP_IFACE_CHANNEL_INTERFACE_ROOM_CONFIG)) {
+ update_title (self, changed);
}
-
- tp_cli_properties_interface_call_get_properties (proxy, -1,
- ids,
- tp_chat_get_properties_cb,
- NULL, NULL,
- chat);
-
- g_array_free (ids, TRUE);
}
void
-empathy_tp_chat_set_property (EmpathyTpChat *self,
- const gchar *name,
- const GValue *value)
+empathy_tp_chat_set_subject (EmpathyTpChat *self,
+ const gchar *subject)
{
- EmpathyTpChatProperty *property;
- guint i;
-
- if (!self->priv->had_properties_list) {
- return;
- }
-
- for (i = 0; i < self->priv->properties->len; i++) {
- property = g_ptr_array_index (self->priv->properties, i);
- if (!tp_strdiff (property->name, name)) {
- GPtrArray *properties;
- GValueArray *prop;
- GValue id = {0, };
- GValue dest_value = {0, };
-
- if (!(property->flags & TP_PROPERTY_FLAG_WRITE)) {
- break;
- }
-
- 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);
-
- DEBUG ("Set property %s", name);
- tp_cli_properties_interface_call_set_properties (self, -1,
- properties,
- (tp_cli_properties_interface_callback_for_set_properties)
- tp_chat_async_cb,
- "Seting property", NULL,
- G_OBJECT (self));
+ tp_cli_channel_interface_subject_call_set_subject (TP_CHANNEL (self), -1,
+ subject,
+ tp_chat_async_cb,
+ "while setting subject", NULL,
+ G_OBJECT (self));
+}
- g_ptr_array_free (properties, TRUE);
- g_value_array_free (prop);
+const gchar *
+empathy_tp_chat_get_title (EmpathyTpChat *self)
+{
+ EmpathyTpChatPrivate *priv = self->priv;
- break;
- }
- }
+ return priv->title;
}
-EmpathyTpChatProperty *
-empathy_tp_chat_get_property (EmpathyTpChat *self,
- const gchar *name)
+gboolean
+empathy_tp_chat_supports_subject (EmpathyTpChat *self)
{
- EmpathyTpChatProperty *property;
- guint i;
+ EmpathyTpChatPrivate *priv = self->priv;
- if (!self->priv->had_properties_list) {
- return NULL;
- }
+ return priv->supports_subject;
+}
- for (i = 0; i < self->priv->properties->len; i++) {
- property = g_ptr_array_index (self->priv->properties, i);
- if (!tp_strdiff (property->name, name)) {
- return property;
- }
- }
+gboolean
+empathy_tp_chat_can_set_subject (EmpathyTpChat *self)
+{
+ EmpathyTpChatPrivate *priv = self->priv;
- return NULL;
+ return priv->can_set_subject;
}
-GPtrArray *
-empathy_tp_chat_get_properties (EmpathyTpChat *self)
+const gchar *
+empathy_tp_chat_get_subject (EmpathyTpChat *self)
{
- return self->priv->properties;
+ EmpathyTpChatPrivate *priv = self->priv;
+
+ return priv->subject;
}
static void
@@ -827,28 +758,16 @@ static void
tp_chat_finalize (GObject *object)
{
EmpathyTpChat *self = (EmpathyTpChat *) object;
- guint i;
DEBUG ("Finalize: %p", object);
- if (self->priv->properties) {
- for (i = 0; i < self->priv->properties->len; i++) {
- EmpathyTpChatProperty *property;
-
- property = g_ptr_array_index (self->priv->properties, i);
- g_free (property->name);
- if (property->value) {
- tp_g_value_slice_free (property->value);
- }
- g_slice_free (EmpathyTpChatProperty, property);
- }
- g_ptr_array_free (self->priv->properties, TRUE);
- }
-
g_queue_free (self->priv->messages_queue);
g_queue_free (self->priv->pending_messages_queue);
g_hash_table_destroy (self->priv->messages_being_sent);
+ g_free (self->priv->title);
+ g_free (self->priv->subject);
+
G_OBJECT_CLASS (empathy_tp_chat_parent_class)->finalize (object);
}
@@ -1235,6 +1154,14 @@ tp_chat_get_property (GObject *object,
g_value_set_uint (value,
g_hash_table_size (self->priv->messages_being_sent));
break;
+ case PROP_TITLE:
+ g_value_set_string (value,
+ empathy_tp_chat_get_title (self));
+ break;
+ case PROP_SUBJECT:
+ g_value_set_string (value,
+ empathy_tp_chat_get_subject (self));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
break;
@@ -1324,6 +1251,24 @@ empathy_tp_chat_class_init (EmpathyTpChatClass *klass)
0, G_MAXUINT, 0,
G_PARAM_READABLE));
+ g_object_class_install_property (object_class,
+ PROP_TITLE,
+ g_param_spec_string ("title",
+ "Title",
+ "A human-readable name for the room, if any",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (object_class,
+ PROP_SUBJECT,
+ g_param_spec_string ("subject",
+ "Subject",
+ "The room's current subject, if any",
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
/* Signals */
signals[MESSAGE_RECEIVED] =
g_signal_new ("message-received-empathy",
@@ -1355,16 +1300,6 @@ empathy_tp_chat_class_init (EmpathyTpChatClass *klass)
G_TYPE_NONE,
2, EMPATHY_TYPE_CONTACT, G_TYPE_UINT);
- signals[PROPERTY_CHANGED] =
- g_signal_new ("property-changed",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- _empathy_marshal_VOID__STRING_BOXED,
- G_TYPE_NONE,
- 2, G_TYPE_STRING, G_TYPE_VALUE);
-
signals[MESSAGE_ACKNOWLEDGED] =
g_signal_new ("message-acknowledged",
G_TYPE_FROM_CLASS (klass),
@@ -1622,6 +1557,7 @@ tp_chat_prepare_ready_async (TpProxy *proxy,
EmpathyTpChat *self = (EmpathyTpChat *) proxy;
TpChannel *channel = (TpChannel *) proxy;
TpConnection *connection;
+ gboolean listen_for_dbus_properties_changed = FALSE;
g_assert (self->priv->ready_result == NULL);
self->priv->ready_result = g_simple_async_result_new (G_OBJECT (self),
@@ -1688,18 +1624,29 @@ tp_chat_prepare_ready_async (TpProxy *proxy,
}
if (tp_proxy_has_interface_by_id (self,
- TP_IFACE_QUARK_PROPERTIES_INTERFACE)) {
- tp_cli_properties_interface_call_list_properties (channel, -1,
- tp_chat_list_properties_cb,
- NULL, NULL,
- G_OBJECT (self));
- tp_cli_properties_interface_connect_to_properties_changed (channel,
- tp_chat_properties_changed_cb,
- NULL, NULL,
- G_OBJECT (self), NULL);
- tp_cli_properties_interface_connect_to_property_flags_changed (channel,
- tp_chat_property_flags_changed_cb,
- NULL, NULL,
- G_OBJECT (self), NULL);
+ TP_IFACE_QUARK_CHANNEL_INTERFACE_SUBJECT)) {
+ tp_cli_dbus_properties_call_get_all (channel, -1,
+ TP_IFACE_CHANNEL_INTERFACE_SUBJECT,
+ tp_chat_get_all_subject_cb,
+ NULL, NULL,
+ G_OBJECT (self));
+ listen_for_dbus_properties_changed = TRUE;
+ }
+
+ if (tp_proxy_has_interface_by_id (self,
+ TP_IFACE_QUARK_CHANNEL_INTERFACE_ROOM_CONFIG)) {
+ tp_cli_dbus_properties_call_get_all (channel, -1,
+ TP_IFACE_CHANNEL_INTERFACE_ROOM_CONFIG,
+ tp_chat_get_all_room_config_cb,
+ NULL, NULL,
+ G_OBJECT (self));
+ listen_for_dbus_properties_changed = TRUE;
+ }
+
+ if (listen_for_dbus_properties_changed) {
+ tp_cli_dbus_properties_connect_to_properties_changed (channel,
+ tp_chat_dbus_properties_changed_cb,
+ NULL, NULL,
+ G_OBJECT (self), NULL);
}
}
diff --git a/libempathy/empathy-tp-chat.h b/libempathy/empathy-tp-chat.h
index 810cb5184..cc1c16aaf 100644
--- a/libempathy/empathy-tp-chat.h
+++ b/libempathy/empathy-tp-chat.h
@@ -53,13 +53,6 @@ struct _EmpathyTpChatClass {
TpTextChannelClass parent_class;
};
-typedef struct {
- gchar *name;
- guint id;
- TpPropertyFlags flags;
- GValue *value;
-} EmpathyTpChatProperty;
-
typedef enum {
EMPATHY_DELIVERY_STATUS_NONE,
EMPATHY_DELIVERY_STATUS_SENDING,
@@ -83,13 +76,14 @@ EmpathyContact *empathy_tp_chat_get_remote_contact (EmpathyTpChat *chat);
TpAccount * empathy_tp_chat_get_account (EmpathyTpChat *chat);
void empathy_tp_chat_send (EmpathyTpChat *chat,
TpMessage *message);
-void empathy_tp_chat_set_property (EmpathyTpChat *chat,
- const gchar *name,
- const GValue *value);
-EmpathyTpChatProperty *
- empathy_tp_chat_get_property (EmpathyTpChat *chat,
- const gchar *name);
-GPtrArray * empathy_tp_chat_get_properties (EmpathyTpChat *chat);
+
+const gchar * empathy_tp_chat_get_title (EmpathyTpChat *self);
+
+gboolean empathy_tp_chat_supports_subject (EmpathyTpChat *self);
+const gchar * empathy_tp_chat_get_subject (EmpathyTpChat *self);
+gboolean empathy_tp_chat_can_set_subject (EmpathyTpChat *self);
+void empathy_tp_chat_set_subject (EmpathyTpChat *self,
+ const gchar *subject);
/* Returns a read-only list of pending messages (should be a copy maybe ?) */
const GList * empathy_tp_chat_get_pending_messages (EmpathyTpChat *chat);