mirror of
https://github.com/profanity-im/profanity.git
synced 2024-11-03 19:37:16 -05:00
Added horizontal scroll for resized windows
Signed-off-by: James Booth <boothj5@gmail.com>
This commit is contained in:
parent
d668d15081
commit
5e841febd0
@ -2048,10 +2048,14 @@ _win_handle_page(const wint_t * const ch)
|
||||
{
|
||||
ProfWin *current = wins_get_current();
|
||||
int rows = getmaxy(stdscr);
|
||||
int cols = getmaxx(stdscr);
|
||||
int x = getmaxx(current->win);
|
||||
int y = getcury(current->win);
|
||||
|
||||
int page_space = rows - 4;
|
||||
int horiz_page_space = cols;
|
||||
int *page_start = &(current->y_pos);
|
||||
int *horiz_page_start = &(current->x_pos);
|
||||
|
||||
if (prefs_get_boolean(PREF_MOUSE)) {
|
||||
MEVENT mouse_event;
|
||||
@ -2090,8 +2094,34 @@ _win_handle_page(const wint_t * const ch)
|
||||
}
|
||||
}
|
||||
|
||||
// ctrl+P
|
||||
if (*ch == 16) {
|
||||
*horiz_page_start -= horiz_page_space;
|
||||
|
||||
// went past beginning, show first page
|
||||
if (*horiz_page_start < 0)
|
||||
*horiz_page_start = 0;
|
||||
|
||||
current->paged = 1;
|
||||
win_update_virtual(current);
|
||||
|
||||
// ctrl+N
|
||||
} else if (*ch == 14) {
|
||||
*horiz_page_start += horiz_page_space;
|
||||
|
||||
// only got half a screen, show full screen
|
||||
if ((x - (*horiz_page_start)) < horiz_page_space)
|
||||
*horiz_page_start = x - horiz_page_space;
|
||||
|
||||
// went past end, show full screen
|
||||
else if (*horiz_page_start >= x)
|
||||
*horiz_page_start = x - horiz_page_space;
|
||||
|
||||
current->paged = 1;
|
||||
win_update_virtual(current);
|
||||
|
||||
// page up
|
||||
if (*ch == KEY_PPAGE) {
|
||||
} else if (*ch == KEY_PPAGE) {
|
||||
*page_start -= page_space;
|
||||
|
||||
// went past beginning, show first page
|
||||
@ -2118,7 +2148,7 @@ _win_handle_page(const wint_t * const ch)
|
||||
}
|
||||
|
||||
// switch off page if last line visible
|
||||
if ((y-1) - *page_start == page_space) {
|
||||
if ((y-1) - *page_start == page_space && *horiz_page_start == 0) {
|
||||
current->paged = 0;
|
||||
}
|
||||
}
|
||||
|
@ -48,6 +48,7 @@ win_create(const char * const title, int cols, win_type_t type)
|
||||
new_win->win = newpad(PAD_SIZE, cols);
|
||||
wbkgd(new_win->win, COLOUR_TEXT);
|
||||
new_win->y_pos = 0;
|
||||
new_win->x_pos = 0;
|
||||
new_win->paged = 0;
|
||||
new_win->unread = 0;
|
||||
new_win->history_shown = 0;
|
||||
@ -118,7 +119,7 @@ win_update_virtual(ProfWin *window)
|
||||
{
|
||||
int rows, cols;
|
||||
getmaxyx(stdscr, rows, cols);
|
||||
pnoutrefresh(window->win, window->y_pos, 0, 1, 0, rows-3, cols-1);
|
||||
pnoutrefresh(window->win, window->y_pos, window->x_pos, 1, 0, rows-3, cols-1);
|
||||
}
|
||||
|
||||
void
|
||||
@ -131,6 +132,7 @@ win_move_to_end(ProfWin *window)
|
||||
int size = rows - 3;
|
||||
|
||||
window->y_pos = y - (size - 1);
|
||||
window->x_pos = 0;
|
||||
if (window->y_pos < 0) {
|
||||
window->y_pos = 0;
|
||||
}
|
||||
|
@ -51,6 +51,7 @@ typedef struct prof_win_t {
|
||||
win_type_t type;
|
||||
gboolean is_otr;
|
||||
gboolean is_trusted;
|
||||
int x_pos;
|
||||
int y_pos;
|
||||
int paged;
|
||||
int unread;
|
||||
|
Loading…
Reference in New Issue
Block a user