aboutsummaryrefslogtreecommitdiff
path: root/src/QuickMedia.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/QuickMedia.cpp')
-rw-r--r--src/QuickMedia.cpp21
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;
}