aboutsummaryrefslogtreecommitdiffstats
path: root/libempathy/empathy-tp-chat.c
diff options
context:
space:
mode:
Diffstat (limited to 'libempathy/empathy-tp-chat.c')
-rw-r--r--libempathy/empathy-tp-chat.c32
1 files changed, 26 insertions, 6 deletions
diff --git a/libempathy/empathy-tp-chat.c b/libempathy/empathy-tp-chat.c
index c3f456faf..7068d6074 100644
--- a/libempathy/empathy-tp-chat.c
+++ b/libempathy/empathy-tp-chat.c
@@ -55,6 +55,7 @@ struct _EmpathyTpChatPriv {
GSList *message_queue;
gboolean had_properties_list;
GPtrArray *properties;
+ gboolean ready;
};
typedef struct {
@@ -75,6 +76,7 @@ enum {
PROP_CHANNEL,
PROP_ACKNOWLEDGE,
PROP_REMOTE_CONTACT,
+ PROP_READY,
};
enum {
@@ -652,6 +654,8 @@ empathy_tp_chat_set_property (EmpathyTpChat *chat,
TpChatProperty *property;
guint i;
+ g_return_if_fail (priv->ready);
+
for (i = 0; i < priv->properties->len; i++) {
property = g_ptr_array_index (priv->properties, i);
if (!tp_strdiff (property->name, name)) {
@@ -699,6 +703,7 @@ tp_chat_channel_ready_cb (EmpathyTpChat *chat)
empathy_debug (DEBUG_DOMAIN, "Channel ready");
+ priv->ready = TRUE;
if (tp_proxy_has_interface_by_id (priv->channel,
TP_IFACE_QUARK_CHANNEL_INTERFACE_GROUP)) {
priv->group = empathy_tp_group_new (priv->account, priv->tp_chan);
@@ -956,6 +961,13 @@ empathy_tp_chat_class_init (EmpathyTpChatClass *klass)
"The remote contact if there is no group iface on the channel",
EMPATHY_TYPE_CONTACT,
G_PARAM_READABLE));
+ g_object_class_install_property (object_class,
+ PROP_READY,
+ g_param_spec_boolean ("ready",
+ "Is the object ready",
+ "This object is can't be used until this becomes true",
+ FALSE,
+ G_PARAM_READABLE));
/* Signals */
signals[MESSAGE_RECEIVED] =
@@ -1126,14 +1138,13 @@ void
empathy_tp_chat_send (EmpathyTpChat *chat,
EmpathyMessage *message)
{
- EmpathyTpChatPriv *priv;
+ EmpathyTpChatPriv *priv = GET_PRIV (chat);
const gchar *message_body;
EmpathyMessageType message_type;
g_return_if_fail (EMPATHY_IS_TP_CHAT (chat));
g_return_if_fail (EMPATHY_IS_MESSAGE (message));
-
- priv = GET_PRIV (chat);
+ g_return_if_fail (priv->ready);
message_body = empathy_message_get_body (message);
message_type = empathy_message_get_type (message);
@@ -1151,11 +1162,10 @@ void
empathy_tp_chat_set_state (EmpathyTpChat *chat,
TpChannelChatState state)
{
- EmpathyTpChatPriv *priv;
+ EmpathyTpChatPriv *priv = GET_PRIV (chat);
g_return_if_fail (EMPATHY_IS_TP_CHAT (chat));
-
- priv = GET_PRIV (chat);
+ g_return_if_fail (priv->ready);
empathy_debug (DEBUG_DOMAIN, "Set state: %d", state);
tp_cli_channel_interface_chat_state_call_set_chat_state (priv->channel, -1,
@@ -1192,3 +1202,13 @@ empathy_tp_chat_get_remote_contact (EmpathyTpChat *chat)
return priv->remote_contact;
}
+gboolean
+empathy_tp_chat_is_ready (EmpathyTpChat *chat)
+{
+ EmpathyTpChatPriv *priv = GET_PRIV (chat);
+
+ g_return_val_if_fail (EMPATHY_IS_TP_CHAT (chat), FALSE);
+
+ return priv->ready;
+}
+