1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-12-04 14:46:46 -05:00

Fix underscrolling issue for alternative scrolling

When user was scrolling down using alt + mouse wheel/arrows, he would be
stuck in most of the cases after the buffer finishes
due to the part of code that moves the "cursor" up to show full last page.

New algorithm considers close to border cursor as passing for
DB loading condition,
at the same time it calculates offset, allowing flexible scroll size.

The problem was introduced by  @H3rnand3zzz in the following commit:
23692fedff
This commit is contained in:
John Hernandez 2024-01-25 20:25:01 +01:00
parent 569e37f018
commit 4030b0936e
No known key found for this signature in database
GPG Key ID: 00B2D64859378A94

View File

@ -694,7 +694,7 @@ win_page_down(ProfWin* window, int scroll_size)
*page_start += scroll_size;
// Scrolled down after reaching the bottom of the page
if ((*page_start == total_rows || (*page_start == page_space && *page_start >= total_rows)) && window->type == WIN_CHAT) {
if ((*page_start > total_rows - page_space || (*page_start == page_space && *page_start >= total_rows)) && window->type == WIN_CHAT) {
int bf_size = buffer_size(window->layout->buffer);
if (bf_size > 0) {
ProfBuffEntry* last_entry = buffer_get_entry(window->layout->buffer, bf_size - 1);
@ -708,19 +708,19 @@ win_page_down(ProfWin* window, int scroll_size)
g_date_time_unref(now);
int offset = last_entry->y_end_pos - 1;
*page_start = offset;
*page_start = offset - page_space + scroll_size;
}
}
total_rows = getcury(window->layout->win);
// only got half a screen, show full screen
if ((total_rows - (*page_start)) < page_space)
// near the end, but will display only part of the page space, move a bit back to show full page
if ((total_rows - *page_start) < page_space) {
*page_start = total_rows - page_space;
// went past end, show full screen
else if (*page_start >= total_rows)
// went past end, show last page
} else if (*page_start >= total_rows) {
*page_start = total_rows - page_space - 1;
}
window->layout->paged = 1;
@ -730,7 +730,7 @@ win_page_down(ProfWin* window, int scroll_size)
}
// switch off page if last line and space line visible
if ((total_rows) - *page_start == page_space) {
if (total_rows - *page_start == page_space) {
window->layout->paged = 0;
}
}