|
|
|
|
@@ -103,6 +103,7 @@ _win_create_simple_layout(void)
|
|
|
|
|
layout->base.buffer = buffer_create();
|
|
|
|
|
layout->base.y_pos = 0;
|
|
|
|
|
layout->base.paged = 0;
|
|
|
|
|
layout->base.unread_msg = 0;
|
|
|
|
|
scrollok(layout->base.win, TRUE);
|
|
|
|
|
|
|
|
|
|
return &layout->base;
|
|
|
|
|
@@ -120,6 +121,7 @@ _win_create_split_layout(void)
|
|
|
|
|
layout->base.buffer = buffer_create();
|
|
|
|
|
layout->base.y_pos = 0;
|
|
|
|
|
layout->base.paged = 0;
|
|
|
|
|
layout->base.unread_msg = 0;
|
|
|
|
|
scrollok(layout->base.win, TRUE);
|
|
|
|
|
layout->subwin = NULL;
|
|
|
|
|
layout->sub_y_pos = 0;
|
|
|
|
|
@@ -197,6 +199,7 @@ win_create_muc(const char* const roomjid)
|
|
|
|
|
layout->base.buffer = buffer_create();
|
|
|
|
|
layout->base.y_pos = 0;
|
|
|
|
|
layout->base.paged = 0;
|
|
|
|
|
layout->base.unread_msg = 0;
|
|
|
|
|
scrollok(layout->base.win, TRUE);
|
|
|
|
|
new_win->window.layout = (ProfLayout*)layout;
|
|
|
|
|
|
|
|
|
|
@@ -709,7 +712,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_space || (*page_start == page_space && *page_start >= total_rows)) && window->type == WIN_CHAT) {
|
|
|
|
|
if (((*page_start > total_rows + window->layout->unread_msg - page_space) || ((*page_start == page_space + window->layout->unread_msg) && *page_start >= (total_rows + window->layout->unread_msg))) && window->type == WIN_CHAT) {
|
|
|
|
|
int bf_size = buffer_size(window->layout->buffer);
|
|
|
|
|
if (bf_size > 0 && *scroll_state != WIN_SCROLL_REACHED_BOTTOM) {
|
|
|
|
|
// How many lines are left until end of the screen
|
|
|
|
|
@@ -743,13 +746,14 @@ win_page_down(ProfWin* window, int scroll_size)
|
|
|
|
|
window->layout->paged = 1;
|
|
|
|
|
|
|
|
|
|
// update only if position has changed
|
|
|
|
|
if (page_start_initial != *page_start) {
|
|
|
|
|
if ((page_start_initial != *page_start) || (window->layout->unread_msg)) {
|
|
|
|
|
win_update_virtual(window);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// switch off page if last line and space line visible
|
|
|
|
|
if (total_rows - *page_start == page_space) {
|
|
|
|
|
// switch off page if no messages left to read
|
|
|
|
|
if (*scroll_state == WIN_SCROLL_REACHED_BOTTOM) {
|
|
|
|
|
window->layout->paged = 0;
|
|
|
|
|
window->layout->unread_msg = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -810,6 +814,7 @@ win_clear(ProfWin* window)
|
|
|
|
|
int* page_start = &(window->layout->y_pos);
|
|
|
|
|
*page_start = y;
|
|
|
|
|
window->layout->paged = 1;
|
|
|
|
|
window->layout->unread_msg = 0;
|
|
|
|
|
win_update_virtual(window);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -914,6 +919,7 @@ void
|
|
|
|
|
win_move_to_end(ProfWin* window)
|
|
|
|
|
{
|
|
|
|
|
window->layout->paged = 0;
|
|
|
|
|
window->layout->unread_msg = 0;
|
|
|
|
|
|
|
|
|
|
int rows = getmaxy(stdscr);
|
|
|
|
|
int y = getcury(window->layout->win);
|
|
|
|
|
@@ -1698,17 +1704,18 @@ _win_printf(ProfWin* window, const char* show_char, int pad_indent, GDateTime* t
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
/* Test code start
|
|
|
|
|
Description: this code prevents printing and buffer update when user is viewing message history [SCROLLING]
|
|
|
|
|
TODO:
|
|
|
|
|
- TOLERABLE check window->layout->paged handling for reliability (if buffer size is less than window size [SCROLLING] not set)
|
|
|
|
|
- make a propper condition check for differernt cases
|
|
|
|
|
- DONE add a user notification in header when new messages arrive while scrolling history
|
|
|
|
|
- DONE handle SCROLLED state properly in case of incominf messages (currently it is cleared before new message is printed)
|
|
|
|
|
|
|
|
|
|
TODO:
|
|
|
|
|
- check window->layout->paged handling for reliability (if buffer size is less than window size [SCROLLING] not set)
|
|
|
|
|
- make a propper condition check for differernt cases
|
|
|
|
|
- add a user notification in header when new messages arrive while scrolling history
|
|
|
|
|
- handle SCROLLED state properly in case of incominf messages (currently it is cleared before new message is printed)
|
|
|
|
|
Description: this code prevents printing and buffer when user is viewing message history [SCROLLING]
|
|
|
|
|
|
|
|
|
|
#warning "TEST CODE: temporary/test code present in window.c:1709 - remove before release"*/
|
|
|
|
|
|
|
|
|
|
if ((window->layout->paged) && wins_is_current(window)) {
|
|
|
|
|
window->layout->unread_msg++;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
/* Test code end */
|
|
|
|
|
|