Avoid redundant redraws on resize
Use a global flag to record whether the terminal was resized instead of redrawing everything each time a KEY_RESIZE is read. Add some additional checks to help_write_pad() as invalid actions may be passed now due to using signals instead of virtual key presses. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
This commit is contained in:
parent
6636232bc7
commit
fec37db06b
@ -179,9 +179,7 @@ main (int argc, char **argv)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_GENERIC_REDRAW:
|
case KEY_GENERIC_REDRAW:
|
||||||
case KEY_RESIZE:
|
resize = 1;
|
||||||
do_update = 0;
|
|
||||||
wins_reset ();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_GENERIC_CHANGE_VIEW:
|
case KEY_GENERIC_CHANGE_VIEW:
|
||||||
@ -567,6 +565,14 @@ main (int argc, char **argv)
|
|||||||
apoint_hilt_set (1);
|
apoint_hilt_set (1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (resize)
|
||||||
|
{
|
||||||
|
resize = 0;
|
||||||
|
do_update = 0;
|
||||||
|
wins_reset ();
|
||||||
|
}
|
||||||
|
|
||||||
if (do_update)
|
if (do_update)
|
||||||
wins_update ();
|
wins_update ();
|
||||||
}
|
}
|
||||||
|
@ -864,6 +864,7 @@ void psleep (unsigned);
|
|||||||
|
|
||||||
/* vars.c */
|
/* vars.c */
|
||||||
extern int col, row;
|
extern int col, row;
|
||||||
|
extern int resize;
|
||||||
extern unsigned colorize;
|
extern unsigned colorize;
|
||||||
extern enum ui_mode ui_mode;
|
extern enum ui_mode ui_mode;
|
||||||
extern int days[12];
|
extern int days[12];
|
||||||
|
72
src/custom.c
72
src/custom.c
@ -549,12 +549,6 @@ custom_layout_config (void)
|
|||||||
need_reset = 0;
|
need_reset = 0;
|
||||||
switch (ch)
|
switch (ch)
|
||||||
{
|
{
|
||||||
case KEY_RESIZE:
|
|
||||||
endwin ();
|
|
||||||
wins_refresh ();
|
|
||||||
curs_set (0);
|
|
||||||
need_reset = 1;
|
|
||||||
break;
|
|
||||||
case KEY_GENERIC_HELP:
|
case KEY_GENERIC_HELP:
|
||||||
help_wins_init (&hwin, 0, 0,
|
help_wins_init (&hwin, 0, 0,
|
||||||
(notify_bar ()) ? row - 3 : row - 2, col);
|
(notify_bar ()) ? row - 3 : row - 2, col);
|
||||||
@ -588,6 +582,16 @@ custom_layout_config (void)
|
|||||||
need_reset = 1;
|
need_reset = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (resize)
|
||||||
|
{
|
||||||
|
resize = 0;
|
||||||
|
endwin ();
|
||||||
|
wins_refresh ();
|
||||||
|
curs_set (0);
|
||||||
|
need_reset = 1;
|
||||||
|
}
|
||||||
|
|
||||||
display_layout_config (&conf_win, mark, cursor, need_reset);
|
display_layout_config (&conf_win, mark, cursor, need_reset);
|
||||||
}
|
}
|
||||||
wins_set_layout (mark + 1);
|
wins_set_layout (mark + 1);
|
||||||
@ -863,13 +867,6 @@ custom_color_config (void)
|
|||||||
|
|
||||||
switch (ch)
|
switch (ch)
|
||||||
{
|
{
|
||||||
case KEY_RESIZE:
|
|
||||||
endwin ();
|
|
||||||
wins_refresh ();
|
|
||||||
curs_set (0);
|
|
||||||
need_reset = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case KEY_GENERIC_SELECT:
|
case KEY_GENERIC_SELECT:
|
||||||
colorize = 1;
|
colorize = 1;
|
||||||
need_reset = 1;
|
need_reset = 1;
|
||||||
@ -905,6 +902,16 @@ custom_color_config (void)
|
|||||||
need_reset = 1;
|
need_reset = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (resize)
|
||||||
|
{
|
||||||
|
resize = 0;
|
||||||
|
endwin ();
|
||||||
|
wins_refresh ();
|
||||||
|
curs_set (0);
|
||||||
|
need_reset = 1;
|
||||||
|
}
|
||||||
|
|
||||||
display_color_config (&conf_win, &mark_fore, &mark_back, cursor,
|
display_color_config (&conf_win, &mark_fore, &mark_back, cursor,
|
||||||
need_reset, theme_changed);
|
need_reset, theme_changed);
|
||||||
}
|
}
|
||||||
@ -1114,24 +1121,6 @@ custom_general_config (struct conf *conf)
|
|||||||
|
|
||||||
switch (ch)
|
switch (ch)
|
||||||
{
|
{
|
||||||
case KEY_RESIZE:
|
|
||||||
wins_get_config ();
|
|
||||||
wins_reset ();
|
|
||||||
wins_scrollwin_delete (&cwin);
|
|
||||||
wins_scrollwin_init (&cwin);
|
|
||||||
custom_set_swsiz (&cwin);
|
|
||||||
wins_show (cwin.win.p, cwin.label);
|
|
||||||
cwin.first_visible_line = 0;
|
|
||||||
delwin (win[STA].p);
|
|
||||||
win[STA].p = newwin (win[STA].h, win[STA].w, win[STA].y,
|
|
||||||
win[STA].x);
|
|
||||||
keypad (win[STA].p, TRUE);
|
|
||||||
if (notify_bar ())
|
|
||||||
{
|
|
||||||
notify_reinit_bar ();
|
|
||||||
notify_update_bar ();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case CTRL ('N'):
|
case CTRL ('N'):
|
||||||
wins_scrollwin_down (&cwin, 1);
|
wins_scrollwin_down (&cwin, 1);
|
||||||
break;
|
break;
|
||||||
@ -1191,6 +1180,27 @@ custom_general_config (struct conf *conf)
|
|||||||
status_mesg (number_str, keys);
|
status_mesg (number_str, keys);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (resize)
|
||||||
|
{
|
||||||
|
resize = 0;
|
||||||
|
wins_reset ();
|
||||||
|
wins_scrollwin_delete (&cwin);
|
||||||
|
wins_scrollwin_init (&cwin);
|
||||||
|
custom_set_swsiz (&cwin);
|
||||||
|
wins_show (cwin.win.p, cwin.label);
|
||||||
|
cwin.first_visible_line = 0;
|
||||||
|
delwin (win[STA].p);
|
||||||
|
win[STA].p = newwin (win[STA].h, win[STA].w, win[STA].y,
|
||||||
|
win[STA].x);
|
||||||
|
keypad (win[STA].p, TRUE);
|
||||||
|
if (notify_bar ())
|
||||||
|
{
|
||||||
|
notify_reinit_bar ();
|
||||||
|
notify_update_bar ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
status_mesg (number_str, keys);
|
status_mesg (number_str, keys);
|
||||||
cwin.total_lines = print_general_options (cwin.pad.p, conf);
|
cwin.total_lines = print_general_options (cwin.pad.p, conf);
|
||||||
wins_scrollwin_display (&cwin);
|
wins_scrollwin_display (&cwin);
|
||||||
|
61
src/help.c
61
src/help.c
@ -107,7 +107,7 @@ help_write_pad (struct window *win, char *title, char *text, enum key action)
|
|||||||
erase_window_part (win->p, rownum, colnum, BUFSIZ, win->w);
|
erase_window_part (win->p, rownum, colnum, BUFSIZ, win->w);
|
||||||
custom_apply_attr (win->p, ATTR_HIGHEST);
|
custom_apply_attr (win->p, ATTR_HIGHEST);
|
||||||
mvwprintw (win->p, rownum, colnum, "%s", title);
|
mvwprintw (win->p, rownum, colnum, "%s", title);
|
||||||
if ((int) action != KEY_RESIZE) {
|
if ((int) action != KEY_RESIZE && action < NBKEYS) {
|
||||||
switch (action)
|
switch (action)
|
||||||
{
|
{
|
||||||
case KEY_END_OF_WEEK:
|
case KEY_END_OF_WEEK:
|
||||||
@ -131,8 +131,12 @@ help_write_pad (struct window *win, char *title, char *text, enum key action)
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
bindings = keys_action_allkeys (action);
|
bindings = keys_action_allkeys (action);
|
||||||
colnum = win->w - strlen (bindings_title) - strlen (bindings);
|
|
||||||
mvwprintw (win->p, rownum, colnum, bindings_title, bindings);
|
if (bindings)
|
||||||
|
{
|
||||||
|
colnum = win->w - strlen (bindings_title) - strlen (bindings);
|
||||||
|
mvwprintw (win->p, rownum, colnum, bindings_title, bindings);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
colnum = 0;
|
colnum = 0;
|
||||||
@ -744,34 +748,35 @@ help_screen (void)
|
|||||||
erase_window_part (hwin.win.p, 1, hwin.pad.y, col - 2,
|
erase_window_part (hwin.win.p, 1, hwin.pad.y, col - 2,
|
||||||
hwin.win.h - 2);
|
hwin.win.h - 2);
|
||||||
|
|
||||||
if ((int) ch == KEY_RESIZE) {
|
switch (ch) {
|
||||||
wins_get_config ();
|
case KEY_GENERIC_SCROLL_DOWN:
|
||||||
help_wins_reset (&hwin);
|
wins_scrollwin_down (&hwin, 1);
|
||||||
hwin.first_visible_line = 0;
|
break;
|
||||||
hwin.total_lines = help_write_pad (&hwin.pad, hscr[oldpage].title,
|
|
||||||
hscr[oldpage].text, ch);
|
case KEY_GENERIC_SCROLL_UP:
|
||||||
need_resize = 1;
|
wins_scrollwin_up (&hwin, 1);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
page = wanted_page (ch);
|
||||||
|
if (page != NOPAGE) {
|
||||||
|
hwin.first_visible_line = 0;
|
||||||
|
hwin.total_lines = help_write_pad (&hwin.pad, hscr[page].title,
|
||||||
|
hscr[page].text, ch);
|
||||||
|
oldpage = page;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
switch (ch) {
|
|
||||||
case KEY_GENERIC_SCROLL_DOWN:
|
|
||||||
wins_scrollwin_down (&hwin, 1);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case KEY_GENERIC_SCROLL_UP:
|
if (resize)
|
||||||
wins_scrollwin_up (&hwin, 1);
|
{
|
||||||
break;
|
resize = 0;
|
||||||
|
wins_get_config ();
|
||||||
default:
|
help_wins_reset (&hwin);
|
||||||
page = wanted_page (ch);
|
hwin.first_visible_line = 0;
|
||||||
if (page != NOPAGE) {
|
hwin.total_lines = help_write_pad (&hwin.pad, hscr[oldpage].title,
|
||||||
hwin.first_visible_line = 0;
|
hscr[oldpage].text, ch);
|
||||||
hwin.total_lines = help_write_pad (&hwin.pad, hscr[page].title,
|
need_resize = 1;
|
||||||
hscr[page].text, ch);
|
|
||||||
oldpage = page;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
wins_scrollwin_display (&hwin);
|
wins_scrollwin_display (&hwin);
|
||||||
ch = keys_getch (win[STA].p);
|
ch = keys_getch (win[STA].p);
|
||||||
|
33
src/notify.c
33
src/notify.c
@ -728,20 +728,6 @@ notify_config_bar (void)
|
|||||||
|
|
||||||
switch (ch)
|
switch (ch)
|
||||||
{
|
{
|
||||||
case KEY_RESIZE:
|
|
||||||
wins_get_config ();
|
|
||||||
wins_reset ();
|
|
||||||
reinit_conf_win (&cwin);
|
|
||||||
delwin (win[STA].p);
|
|
||||||
win[STA].p = newwin (win[STA].h, win[STA].w, win[STA].y,
|
|
||||||
win[STA].x);
|
|
||||||
keypad (win[STA].p, TRUE);
|
|
||||||
if (notify_bar ())
|
|
||||||
{
|
|
||||||
notify_reinit_bar ();
|
|
||||||
notify_update_bar ();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case CTRL ('N'):
|
case CTRL ('N'):
|
||||||
wins_scrollwin_down (&cwin, 1);
|
wins_scrollwin_down (&cwin, 1);
|
||||||
break;
|
break;
|
||||||
@ -815,6 +801,25 @@ notify_config_bar (void)
|
|||||||
dmon.log = !dmon.log;
|
dmon.log = !dmon.log;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (resize)
|
||||||
|
{
|
||||||
|
resize = 0;
|
||||||
|
wins_get_config ();
|
||||||
|
wins_reset ();
|
||||||
|
reinit_conf_win (&cwin);
|
||||||
|
delwin (win[STA].p);
|
||||||
|
win[STA].p = newwin (win[STA].h, win[STA].w, win[STA].y,
|
||||||
|
win[STA].x);
|
||||||
|
keypad (win[STA].p, TRUE);
|
||||||
|
if (notify_bar ())
|
||||||
|
{
|
||||||
|
notify_reinit_bar ();
|
||||||
|
notify_update_bar ();
|
||||||
|
}
|
||||||
|
clearok (curscr, TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
status_mesg (number_str, keys);
|
status_mesg (number_str, keys);
|
||||||
cwin.total_lines = print_config_options (cwin.pad.p);
|
cwin.total_lines = print_config_options (cwin.pad.p);
|
||||||
wins_scrollwin_display (&cwin);
|
wins_scrollwin_display (&cwin);
|
||||||
|
@ -59,6 +59,7 @@ generic_hdlr (int sig)
|
|||||||
;
|
;
|
||||||
break;
|
break;
|
||||||
case SIGWINCH:
|
case SIGWINCH:
|
||||||
|
resize = 1;
|
||||||
clearok (curscr, TRUE);
|
clearok (curscr, TRUE);
|
||||||
(void)ungetch (KEY_RESIZE);
|
(void)ungetch (KEY_RESIZE);
|
||||||
break;
|
break;
|
||||||
|
@ -43,6 +43,7 @@
|
|||||||
* variables to store window size
|
* variables to store window size
|
||||||
*/
|
*/
|
||||||
int col = 0, row = 0;
|
int col = 0, row = 0;
|
||||||
|
int resize = 0;
|
||||||
|
|
||||||
/* variable to tell if the terminal supports color */
|
/* variable to tell if the terminal supports color */
|
||||||
unsigned colorize = 0;
|
unsigned colorize = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user