mirror of
https://github.com/profanity-im/profanity.git
synced 2024-12-04 14:46:46 -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();
|
ProfWin *current = wins_get_current();
|
||||||
int rows = getmaxy(stdscr);
|
int rows = getmaxy(stdscr);
|
||||||
|
int cols = getmaxx(stdscr);
|
||||||
|
int x = getmaxx(current->win);
|
||||||
int y = getcury(current->win);
|
int y = getcury(current->win);
|
||||||
|
|
||||||
int page_space = rows - 4;
|
int page_space = rows - 4;
|
||||||
|
int horiz_page_space = cols;
|
||||||
int *page_start = &(current->y_pos);
|
int *page_start = &(current->y_pos);
|
||||||
|
int *horiz_page_start = &(current->x_pos);
|
||||||
|
|
||||||
if (prefs_get_boolean(PREF_MOUSE)) {
|
if (prefs_get_boolean(PREF_MOUSE)) {
|
||||||
MEVENT mouse_event;
|
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
|
// page up
|
||||||
if (*ch == KEY_PPAGE) {
|
} else if (*ch == KEY_PPAGE) {
|
||||||
*page_start -= page_space;
|
*page_start -= page_space;
|
||||||
|
|
||||||
// went past beginning, show first page
|
// 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
|
// 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;
|
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);
|
new_win->win = newpad(PAD_SIZE, cols);
|
||||||
wbkgd(new_win->win, COLOUR_TEXT);
|
wbkgd(new_win->win, COLOUR_TEXT);
|
||||||
new_win->y_pos = 0;
|
new_win->y_pos = 0;
|
||||||
|
new_win->x_pos = 0;
|
||||||
new_win->paged = 0;
|
new_win->paged = 0;
|
||||||
new_win->unread = 0;
|
new_win->unread = 0;
|
||||||
new_win->history_shown = 0;
|
new_win->history_shown = 0;
|
||||||
@ -118,7 +119,7 @@ win_update_virtual(ProfWin *window)
|
|||||||
{
|
{
|
||||||
int rows, cols;
|
int rows, cols;
|
||||||
getmaxyx(stdscr, 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
|
void
|
||||||
@ -131,6 +132,7 @@ win_move_to_end(ProfWin *window)
|
|||||||
int size = rows - 3;
|
int size = rows - 3;
|
||||||
|
|
||||||
window->y_pos = y - (size - 1);
|
window->y_pos = y - (size - 1);
|
||||||
|
window->x_pos = 0;
|
||||||
if (window->y_pos < 0) {
|
if (window->y_pos < 0) {
|
||||||
window->y_pos = 0;
|
window->y_pos = 0;
|
||||||
}
|
}
|
||||||
|
@ -51,6 +51,7 @@ typedef struct prof_win_t {
|
|||||||
win_type_t type;
|
win_type_t type;
|
||||||
gboolean is_otr;
|
gboolean is_otr;
|
||||||
gboolean is_trusted;
|
gboolean is_trusted;
|
||||||
|
int x_pos;
|
||||||
int y_pos;
|
int y_pos;
|
||||||
int paged;
|
int paged;
|
||||||
int unread;
|
int unread;
|
||||||
|
Loading…
Reference in New Issue
Block a user