diff options
-rw-r--r-- | libempathy/empathy-tp-chat.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/libempathy/empathy-tp-chat.c b/libempathy/empathy-tp-chat.c index 20c9d8f67..534fa5275 100644 --- a/libempathy/empathy-tp-chat.c +++ b/libempathy/empathy-tp-chat.c @@ -292,8 +292,9 @@ tp_chat_sender_ready_notify_cb (EmpathyContact *contact, gboolean removed = FALSE; /* Emit all messages queued until we find a message with not - * ready sender. When leaving this loop, sender is the first not ready - * contact queued and removed tells if at least one message got removed + * ready sender (in case of a MUC we could have more than one sender). + * When leaving this loop, sender is the first not ready contact queued + * and removed tells if at least one message got removed * from the queue. */ while (priv->message_queue) { message = priv->message_queue->data; @@ -314,11 +315,15 @@ tp_chat_sender_ready_notify_cb (EmpathyContact *contact, } if (removed) { + /* We removed at least one message from the queue, disconnect + * the ready signal from the previous contact */ g_signal_handlers_disconnect_by_func (contact, tp_chat_sender_ready_notify_cb, chat); if (priv->message_queue) { + /* We still have queued message, connect the ready + * signal on the new first message sender. */ g_signal_connect (sender, "notify::ready", G_CALLBACK (tp_chat_sender_ready_notify_cb), chat); |