diff options
Diffstat (limited to 'src/QuickMedia.cpp')
-rw-r--r-- | src/QuickMedia.cpp | 41 |
1 files changed, 32 insertions, 9 deletions
diff --git a/src/QuickMedia.cpp b/src/QuickMedia.cpp index 865f6fe..5d980f3 100644 --- a/src/QuickMedia.cpp +++ b/src/QuickMedia.cpp @@ -981,6 +981,11 @@ namespace QuickMedia { if(after_submit_handler) after_submit_handler(); + if(tabs[selected_tab].page->clear_search_after_submit() && tabs[selected_tab].search_bar) { + tabs[selected_tab].search_bar->clear(); + tabs[selected_tab].search_bar->onTextUpdateCallback(""); + } + if(tabs[selected_tab].page->is_single_page()) { tabs[selected_tab].search_bar->clear(); if(new_tabs.size() == 1) @@ -3224,16 +3229,27 @@ namespace QuickMedia { } }; - auto process_pinned_events = [&tabs](const std::optional<std::vector<std::string>> &pinned_events) { - if(!pinned_events || pinned_events->empty()) + auto pinned_body_items_contains_event = [&tabs](const std::string &event_id) { + for(auto &body_item : tabs[PINNED_TAB_INDEX].body->items) { + if(static_cast<PinnedEventData*>(body_item->userdata)->event_id == event_id) + return true; + } + return false; + }; + + auto process_pinned_events = [&tabs, &pinned_body_items_contains_event](const std::optional<std::vector<std::string>> &pinned_events) { + if(!pinned_events) return; bool empty_before = tabs[PINNED_TAB_INDEX].body->items.empty(); int selected_before = tabs[PINNED_TAB_INDEX].body->get_selected_item(); - tabs[PINNED_TAB_INDEX].body->items.clear(); + auto prev_pinned_body_items = tabs[PINNED_TAB_INDEX].body->items; // TODO: Add message to rooms messages when there are new pinned events for(const std::string &event : pinned_events.value()) { + if(pinned_body_items_contains_event(event)) + continue; + auto body = BodyItem::create(""); body->set_description("Loading message..."); PinnedEventData *event_data = new PinnedEventData(); @@ -3243,6 +3259,11 @@ namespace QuickMedia { tabs[PINNED_TAB_INDEX].body->items.push_back(std::move(body)); } + for(auto &prev_body_item : prev_pinned_body_items) { + if(!pinned_body_items_contains_event(static_cast<PinnedEventData*>(prev_body_item->userdata)->event_id)) + delete (PinnedEventData*)prev_body_item->userdata; + } + if(empty_before) tabs[PINNED_TAB_INDEX].body->select_last_item(); else @@ -3610,7 +3631,7 @@ namespace QuickMedia { return false; }; - auto cleanup_tasks = [&set_read_marker_future, &fetch_message_future, &typing_state_queue, &typing_state_thread, &post_task_queue, &post_thread, &unreferenced_event_by_room, &tabs]() { + auto cleanup_tasks = [&set_read_marker_future, &fetch_message_future, &typing_state_queue, &typing_state_thread, &post_task_queue, &post_thread, &tabs]() { set_read_marker_future.cancel(); fetch_message_future.cancel(); typing_state_queue.close(); @@ -3630,6 +3651,7 @@ namespace QuickMedia { for(auto &body_item : tabs[PINNED_TAB_INDEX].body->items) { delete (PinnedEventData*)body_item->userdata; } + tabs[PINNED_TAB_INDEX].body->clear_items(); } //tabs.clear(); @@ -4281,7 +4303,6 @@ namespace QuickMedia { std::vector<std::string> pinned_events; matrix->get_all_pinned_events(current_room, pinned_events); process_pinned_events(std::move(pinned_events)); - tabs[PINNED_TAB_INDEX].body->select_last_item(); typing_state_queue.restart(); typing_state_thread = std::thread(typing_state_handler); post_task_queue.restart(); @@ -4314,11 +4335,13 @@ namespace QuickMedia { auto rooms_tags_body = create_body(); rooms_tags_body->thumbnail_mask_shader = &circle_mask_shader; - auto matrix_rooms_tag_page = std::make_unique<MatrixRoomTagsPage>(this, rooms_tags_body.get()); + auto matrix_rooms_tage_page_search_bar = create_search_bar("Search...", SEARCH_DELAY_FILTER); + auto matrix_rooms_tag_page = std::make_unique<MatrixRoomTagsPage>(this, rooms_tags_body.get(), matrix_rooms_tage_page_search_bar.get()); auto invites_body = create_body(); invites_body->thumbnail_mask_shader = &circle_mask_shader; - auto matrix_invites_page = std::make_unique<MatrixInvitesPage>(this, matrix, invites_body.get()); + auto matrix_invites_page_search_bar = create_search_bar("Search...", SEARCH_DELAY_FILTER); + auto matrix_invites_page = std::make_unique<MatrixInvitesPage>(this, matrix, invites_body.get(), matrix_invites_page_search_bar.get()); MatrixQuickMedia matrix_handler(this, matrix, matrix_rooms_page.get(), matrix_rooms_tag_page.get(), matrix_invites_page.get()); bool sync_cached = false; @@ -4327,8 +4350,8 @@ namespace QuickMedia { std::vector<Tab> tabs; tabs.push_back(Tab{std::move(rooms_body), std::move(matrix_rooms_page), std::move(matrix_rooms_page_search_bar)}); - tabs.push_back(Tab{std::move(rooms_tags_body), std::move(matrix_rooms_tag_page), create_search_bar("Search...", SEARCH_DELAY_FILTER)}); - tabs.push_back(Tab{std::move(invites_body), std::move(matrix_invites_page), create_search_bar("Search...", SEARCH_DELAY_FILTER)}); + tabs.push_back(Tab{std::move(rooms_tags_body), std::move(matrix_rooms_tag_page), std::move(matrix_rooms_tage_page_search_bar)}); + tabs.push_back(Tab{std::move(invites_body), std::move(matrix_invites_page), std::move(matrix_invites_page_search_bar)}); while(window.isOpen()) { page_loop(tabs); |