X-Git-Url: https://git.0d.be/?p=empathy.git;a=blobdiff_plain;f=libempathy-gtk%2Fempathy-chat.c;h=fc35bec887771656d12ce69e1bb53c99dac447ed;hp=f17bbbb98e75ecc40e5680feb9a51cb178dc01df;hb=3483e7f97ed6d20427672fe68ef03a36ddedda47;hpb=bed9eb7d447239ff4400b3c976e58b657fa4a08e diff --git a/libempathy-gtk/empathy-chat.c b/libempathy-gtk/empathy-chat.c index f17bbbb9..fc35bec8 100644 --- a/libempathy-gtk/empathy-chat.c +++ b/libempathy-gtk/empathy-chat.c @@ -127,9 +127,6 @@ struct _EmpathyChatPriv { guint unread_messages; guint unread_messages_when_offline; - /* TRUE if the pending messages can be displayed. This is to avoid to show - * pending messages *before* messages from logs. (#603980) */ - gboolean can_show_pending; /* FIXME: retrieving_backlogs flag is a workaround for Bug#610994 and should * be differently handled since it introduces another race condition, which @@ -2518,19 +2515,14 @@ out: return retval; } - static void show_pending_messages (EmpathyChat *chat) { EmpathyChatPriv *priv = GET_PRIV (chat); const GList *messages, *l; g_return_if_fail (EMPATHY_IS_CHAT (chat)); - - if (chat->view == NULL || priv->tp_chat == NULL) - return; - - if (!priv->can_show_pending) - return; + g_return_if_fail (chat->view != NULL); + g_return_if_fail (priv->tp_chat != NULL); messages = empathy_tp_chat_get_pending_messages (priv->tp_chat); @@ -2540,7 +2532,6 @@ show_pending_messages (EmpathyChat *chat) { } } - static gboolean chat_scrollable_set_value (gpointer user_data) { @@ -2638,11 +2629,6 @@ out: */ if (G_UNLIKELY (!priv->watch_scroll && !tpl_log_walker_is_end (priv->log_walker))) { - /* The pending messages need not be shown after the - * first batch of logs have been displayed */ - priv->can_show_pending = TRUE; - show_pending_messages (chat); - priv->watch_scroll = TRUE; g_idle_add_full (G_PRIORITY_LOW, chat_scrollable_connect, g_object_ref (chat), g_object_unref); @@ -3453,7 +3439,12 @@ chat_constructed (GObject *object) supports_avatars); } - /* Add messages from last conversation */ + /* Add messages from last conversations. Backlog messages are always + * prepended and pending messages are appended, so we can do both + * independently. Hacks like we previously had for bug #603980 are no + * longer needed. Pending messages are handled within + * empathy_chat_set_tp_chat() so we don't have to care about them here. + */ if (priv->handle_type == TP_HANDLE_TYPE_ROOM) target = tpl_entity_new_from_room_id (priv->id); else @@ -3464,14 +3455,8 @@ chat_constructed (GObject *object) g_object_unref (target); if (priv->handle_type != TP_HANDLE_TYPE_ROOM) { - /* First display logs from the logger and then display pending messages */ chat_add_logs (chat); } - else { - /* Just display pending messages for rooms */ - priv->can_show_pending = TRUE; - show_pending_messages (chat); - } } static void @@ -3677,6 +3662,9 @@ empathy_chat_init (EmpathyChat *chat) priv->completion = g_completion_new ((GCompletionFunc) empathy_contact_get_alias); g_completion_set_compare (priv->completion, chat_contacts_completion_func); + /* Create UI early so by the time empathy_chat_set_tp_chat() is called + * (construct property) the view will already exists to receive pending + * messages. */ chat_create_ui (chat); } @@ -4192,9 +4180,6 @@ empathy_chat_set_tp_chat (EmpathyChat *chat, g_object_notify (G_OBJECT (chat), "id"); g_object_notify (G_OBJECT (chat), "account"); - /* This is a noop when tp-chat is set at object construction time and causes - * the pending messages to be show when it's set on the object after it has - * been created */ show_pending_messages (chat); /* check if a password is needed */