1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-06-09 21:30:42 +00:00

Compare commits

..

3 Commits

Author SHA1 Message Date
John Hernandez
0eaf0b8ade
Merge 0f361e6b52 into c6cf27e4e1 2024-03-05 00:08:04 +11:00
Michael Vetter
c6cf27e4e1
Merge pull request #1952 from H3rnand3zzz/fix/alt-underscroll
Fix underscrolling issue for alternative scrolling
2024-03-01 13:02:34 +01:00
John Hernandez
4030b0936e
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
2024-01-25 20:25:01 +01:00

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;
}
}