Fix scroll/paging state and buffer handling #45

Manually merged
jabber.developer merged 6 commits from playground/fix/scroll-stuck into master 2026-01-07 10:56:04 +00:00
3 changed files with 31 additions and 5 deletions
Showing only changes of commit 522db05090 - Show all commits

View File

@@ -701,11 +701,11 @@ void
win_page_down(ProfWin* window, int scroll_size)
{
int total_rows = getcury(window->layout->win);
int total_rows_with_unreaded = total_rows + window->layout->unread_msg;
int total_rows_with_unread = total_rows + window->layout->unread_msg;
int* page_start = &(window->layout->y_pos);
int page_space = getmaxy(stdscr) - 4;
int page_start_initial = *page_start;
if (scroll_size == 0)
scroll_size = page_space;
win_scroll_state_t* scroll_state = &window->scroll_state;
@@ -714,8 +714,8 @@ win_page_down(ProfWin* window, int scroll_size)
*page_start += scroll_size;
jabber.developer marked this conversation as resolved Outdated

At this point, it's really hard to track what this condition is doing. I suggest that we split it into variables with descriptive names so we can understand what's going on in the future

At this point, it's really hard to track what this condition is doing. I suggest that we split it into variables with descriptive names so we can understand what's going on in the future
// Scrolled down after reaching the bottom of the page
gboolean past_bottom = *page_start > total_rows_with_unreaded - page_space;
gboolean at_page_space_and_past_unread = (*page_start == page_space && *page_start >= total_rows_with_unreaded);
gboolean past_bottom = *page_start > total_rows_with_unread - page_space;
gboolean at_page_space_and_past_unread = (*page_start == page_space && *page_start >= total_rows_with_unread);
gboolean is_chat = window->type == WIN_CHAT;
if ((past_bottom || at_page_space_and_past_unread) && is_chat) {