aboutsummaryrefslogtreecommitdiff
path: root/src/QuickMedia.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/QuickMedia.cpp')
-rw-r--r--src/QuickMedia.cpp61
1 files changed, 32 insertions, 29 deletions
diff --git a/src/QuickMedia.cpp b/src/QuickMedia.cpp
index 0c2e872..7dbccae 100644
--- a/src/QuickMedia.cpp
+++ b/src/QuickMedia.cpp
@@ -648,8 +648,8 @@ namespace QuickMedia {
window.setVerticalSyncEnabled(true);
monitor_hz = get_monitor_max_hz(disp);
- window.setFramerateLimit(FPS_IDLE);
- idle = true;
+ window.setFramerateLimit(monitor_hz);
+ idle = false;
vsync_set = false;
/*
if(enable_vsync(disp, window.getSystemHandle())) {
@@ -1537,9 +1537,8 @@ namespace QuickMedia {
return;
}
- window.setFramerateLimit(FPS_IDLE);
malloc_trim(0);
- idle = true;
+ idle_active_handler();
bool loop_running = true;
bool redraw = true;
@@ -1615,6 +1614,8 @@ namespace QuickMedia {
return;
}
+ idle_active_handler();
+
if(tabs[selected_tab].page->clear_search_after_submit() && tabs[selected_tab].search_bar) {
if(!tabs[selected_tab].search_bar->get_text().empty()) {
tabs[selected_tab].search_bar->clear();
@@ -1660,7 +1661,7 @@ namespace QuickMedia {
select_episode(selected_item.get(), false);
Body *chapters_body = tabs[selected_tab].body.get();
tabs[selected_tab].search_bar->clear();
- chapters_body->filter_search_fuzzy("", false); // Needed (or not really) to go to the next chapter when reaching the last page of a chapter
+ chapters_body->filter_search_fuzzy(""); // Needed (or not really) to go to the next chapter when reaching the last page of a chapter
MangaImagesPage *manga_images_page = static_cast<MangaImagesPage*>(new_tabs[0].page.get());
window.setKeyRepeatEnabled(false);
downloading_chapter_url.clear();
@@ -1983,9 +1984,12 @@ namespace QuickMedia {
if(body_was_empty) {
tabs[i].body->select_last_item();
} else {
+ // TODO: Use select_next_item in a loop instead for |num_new_messages|?
tabs[i].body->set_selected_item(prev_selected_item + num_new_messages, true);
}
}
+
+ idle_active_handler();
}
if(associated_data.search_text_updated && associated_data.fetch_status == FetchStatus::NONE && !associated_data.fetching_next_page_running) {
@@ -2020,6 +2024,7 @@ namespace QuickMedia {
associated_data.search_result_text.setString("No results found");
else
associated_data.search_result_text.setString("");
+ idle_active_handler();
} else {
associated_data.fetch_future.get();
}
@@ -2031,6 +2036,9 @@ namespace QuickMedia {
FetchResult fetch_result = associated_data.fetch_future.get();
tabs[i].body->items = std::move(fetch_result.body_items);
if(tabs[i].search_bar) tabs[i].body->filter_search_fuzzy(tabs[i].search_bar->get_text());
+ if(tabs[i].body->attach_side == AttachSide::TOP) {
+ tabs[i].body->select_first_item();
+ }
if(tabs[i].body->attach_side == AttachSide::BOTTOM) {
std::reverse(tabs[i].body->items.begin(), tabs[i].body->items.end());
tabs[i].body->select_last_item();
@@ -2043,6 +2051,7 @@ namespace QuickMedia {
else
associated_data.search_result_text.setString("");
associated_data.fetch_status = FetchStatus::NONE;
+ idle_active_handler();
}
}
@@ -2071,9 +2080,9 @@ namespace QuickMedia {
window.display();
if(!tabs[selected_tab].body->items.empty()) {
- if(tabs[selected_tab].body->attach_side == AttachSide::TOP && tabs[selected_tab].body->is_last_item_fully_visible())
+ if(tabs[selected_tab].body->attach_side == AttachSide::TOP && !tabs[selected_tab].body->is_bottom_cut_off())
on_reached_end();
- else if(tabs[selected_tab].body->attach_side == AttachSide::BOTTOM && tabs[selected_tab].body->is_first_item_fully_visible())
+ else if(tabs[selected_tab].body->attach_side == AttachSide::BOTTOM && !tabs[selected_tab].body->is_top_cut_off())
on_reached_end();
}
@@ -2222,6 +2231,8 @@ namespace QuickMedia {
TaskResult Program::run_task_with_loading_screen(std::function<bool()> callback) {
assert(std::this_thread::get_id() == main_thread_id);
+ idle_active_handler();
+
AsyncTask<bool> task = callback;
window_size.x = window.getSize().x;
@@ -4456,8 +4467,8 @@ namespace QuickMedia {
}
};
- auto upload_file = [this, &tabs, &current_room, MESSAGES_TAB_INDEX](const std::string &filepath) {
- TaskResult post_file_result = run_task_with_loading_screen([this, &current_room, filepath]() {
+ auto upload_file = [this, &current_room](const std::string &filepath) {
+ run_task_with_loading_screen([this, &current_room, filepath]() {
std::string event_id_response;
std::string err_msg;
if(matrix->post_file(current_room, filepath, event_id_response, err_msg) == PluginResult::OK) {
@@ -4467,11 +4478,6 @@ namespace QuickMedia {
return false;
}
});
-
- if(post_file_result == TaskResult::TRUE) {
- if(tabs[MESSAGES_TAB_INDEX].body->is_last_item_fully_visible())
- tabs[MESSAGES_TAB_INDEX].body->select_last_item();
- }
};
struct Mention {
@@ -4490,6 +4496,7 @@ namespace QuickMedia {
filter_updated = false;
filter.clear();
users_tab_body->filter_search_fuzzy("");
+ users_tab_body->select_first_item();
users_tab_body->clear_cache();
}
@@ -4505,9 +4512,9 @@ namespace QuickMedia {
}
} else if(event.type == sf::Event::KeyPressed) {
if(event.key.code == sf::Keyboard::Up || (event.key.control && event.key.code == sf::Keyboard::K)) {
- users_tab_body->select_previous_item();
+ users_tab_body->select_previous_item(true);
} else if(event.key.code == sf::Keyboard::Down || (event.key.control && event.key.code == sf::Keyboard::J)) {
- users_tab_body->select_next_item();
+ users_tab_body->select_next_item(true);
} else if(event.key.code == sf::Keyboard::Enter && event.key.shift) {
hide();
} else if(event.key.code == sf::Keyboard::Backspace) {
@@ -4531,6 +4538,7 @@ namespace QuickMedia {
// TODO: Use std::string instead of sf::String
auto u8 = filter.toUtf8();
users_tab_body->filter_search_fuzzy(*(std::string*)&u8);
+ users_tab_body->select_first_item();
}
}
};
@@ -4954,17 +4962,11 @@ namespace QuickMedia {
scroll_to_end = true;
}
- BodyItem *selected_item = tabs[MESSAGES_TAB_INDEX].body->get_selected();
auto new_body_items = messages_to_body_items(current_room, messages, current_room->get_user_display_name(me), me->user_id);
messages_load_cached_related_embedded_item(new_body_items, tabs[MESSAGES_TAB_INDEX].body->items, me, current_room);
tabs[MESSAGES_TAB_INDEX].body->insert_items_by_timestamps(std::move(new_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) {
+ if(scroll_to_end)
tabs[MESSAGES_TAB_INDEX].body->select_last_item();
- }
};
auto display_url_or_image = [this, matrix_chat_page, &ui_tabs, &redraw, &video_page, &launch_url, &chat_state, &url_selection_body, &avatar_applied, PINNED_TAB_INDEX, MESSAGES_TAB_INDEX](BodyItem *selected) {
@@ -5201,11 +5203,11 @@ namespace QuickMedia {
if(event.type == sf::Event::KeyPressed && event.key.control && event.key.alt && (chat_state == ChatState::NAVIGATING || chat_state == ChatState::URL_SELECTION)) {
if(event.key.code == sf::Keyboard::Up || (event.key.control && event.key.code == sf::Keyboard::K)) {
- matrix_chat_page->rooms_page->body->select_previous_item();
+ matrix_chat_page->rooms_page->body->select_previous_item(true);
move_room = true;
goto chat_page_end;
} else if(event.key.code == sf::Keyboard::Down || (event.key.control && event.key.code == sf::Keyboard::J)) {
- matrix_chat_page->rooms_page->body->select_next_item();
+ matrix_chat_page->rooms_page->body->select_next_item(true);
move_room = true;
goto chat_page_end;
} else if(event.key.code == sf::Keyboard::PageUp) {
@@ -5487,6 +5489,7 @@ namespace QuickMedia {
upload_file(selected_files[0]);
}
redraw = true;
+ avatar_applied = false;
break;
}
case PageType::CHAT_LOGIN: {
@@ -5808,7 +5811,7 @@ namespace QuickMedia {
}
if(selected_tab == MESSAGES_TAB_INDEX && current_room && current_room->body_item && !current_room->last_message_read && matrix->is_initial_sync_finished()) {
- if(last_visible_timeline_message && tabs[selected_tab].body->is_last_item_fully_visible() && is_window_focused && chat_state != ChatState::URL_SELECTION && !setting_read_marker && read_marker_timer.getElapsedTime().asMilliseconds() >= read_marker_timeout_ms) {
+ if(last_visible_timeline_message && !tabs[selected_tab].body->is_bottom_cut_off() && is_window_focused && chat_state != ChatState::URL_SELECTION && !setting_read_marker && read_marker_timer.getElapsedTime().asMilliseconds() >= read_marker_timeout_ms) {
std::string room_desc = current_room->body_item->get_description();
if(strncmp(room_desc.c_str(), "Unread: ", 8) == 0)
room_desc = room_desc.substr(8);
@@ -5847,7 +5850,7 @@ namespace QuickMedia {
}
});
}
- } else if(!tabs[selected_tab].body->is_last_item_fully_visible()) {
+ } else if(tabs[selected_tab].body->is_bottom_cut_off()) {
window.draw(more_messages_below_rect);
}
}
@@ -5926,8 +5929,7 @@ namespace QuickMedia {
process_reactions(all_messages_new);
if(current_room->initial_prev_messages_fetch) {
current_room->initial_prev_messages_fetch = false;
- if(selected_tab == MESSAGES_TAB_INDEX)
- tabs[MESSAGES_TAB_INDEX].body->select_last_item();
+ tabs[MESSAGES_TAB_INDEX].body->select_last_item();
}
std::vector<std::string> pinned_events;
@@ -6583,6 +6585,7 @@ namespace QuickMedia {
}
ui_tabs.set_text(tab_path_index, file_manager_page->get_current_directory().string());
+ idle_active_handler();
};
const float bottom_panel_padding = 10.0f;