diff options
Diffstat (limited to 'src/QuickMedia.cpp')
-rw-r--r-- | src/QuickMedia.cpp | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/src/QuickMedia.cpp b/src/QuickMedia.cpp index f18c0ce..776093d 100644 --- a/src/QuickMedia.cpp +++ b/src/QuickMedia.cpp @@ -4071,9 +4071,16 @@ namespace QuickMedia { if(sync_future_room_id == current_room_id || !synced) { int num_items = tabs[MESSAGES_TAB_INDEX].body->items.size(); bool scroll_to_end = (num_items == 0 || (num_items > 0 && tabs[MESSAGES_TAB_INDEX].body->get_selected_item() == num_items - 1)); - tabs[MESSAGES_TAB_INDEX].body->append_items(std::move(sync_result.body_items)); - if(scroll_to_end) + + BodyItem *selected_item = tabs[MESSAGES_TAB_INDEX].body->get_selected(); + tabs[MESSAGES_TAB_INDEX].body->insert_items_by_timestamps(std::move(sync_result.body_items)); + if(selected_item && !scroll_to_end) { + int selected_item_index = tabs[MESSAGES_TAB_INDEX].body->get_index_by_body_item(selected_item); + if(selected_item_index != -1) + tabs[MESSAGES_TAB_INDEX].body->set_selected_item(selected_item_index); + } else if(scroll_to_end) { tabs[MESSAGES_TAB_INDEX].body->select_last_item(); + } } // Initial sync @@ -4112,9 +4119,13 @@ namespace QuickMedia { // Ignore finished fetch of messages if it happened in another room. When we navigate back to the room we will get the messages again size_t num_new_messages = new_body_items.size(); if(previous_messages_future_room_id == current_room_id && num_new_messages > 0) { - int selected_item_index = tabs[MESSAGES_TAB_INDEX].body->get_selected_item(); - tabs[MESSAGES_TAB_INDEX].body->prepend_items(std::move(new_body_items)); - tabs[MESSAGES_TAB_INDEX].body->set_selected_item(selected_item_index + num_new_messages); + BodyItem *selected_item = tabs[MESSAGES_TAB_INDEX].body->get_selected(); + tabs[MESSAGES_TAB_INDEX].body->insert_items_by_timestamps(std::move(new_body_items)); + if(selected_item) { + int selected_item_index = tabs[MESSAGES_TAB_INDEX].body->get_index_by_body_item(selected_item); + if(selected_item_index != -1) + tabs[MESSAGES_TAB_INDEX].body->set_selected_item(selected_item_index); + } } fetching_previous_messages_running = false; } |