diff --git a/src/ui/core.c b/src/ui/core.c index ed21b233..254dd554 100644 --- a/src/ui/core.c +++ b/src/ui/core.c @@ -41,6 +41,9 @@ #include #include #include +#include +#include + #ifdef HAVE_LIBXSS #include #endif @@ -91,7 +94,6 @@ ui_init(void) { log_info("Initialising UI"); initscr(); - raw(); keypad(stdscr, TRUE); if (prefs_get_boolean(PREF_MOUSE)) { mousemask(ALL_MOUSE_EVENTS, NULL); @@ -221,9 +223,13 @@ ui_input_nonblocking(gboolean reset) void ui_resize(void) { - log_info("Resizing UI"); + struct winsize w; + ioctl(STDOUT_FILENO, TIOCGWINSZ, &w); erase(); + resizeterm(w.ws_row, w.ws_col); refresh(); + + log_info("Resizing UI"); title_bar_resize(); wins_resize_all(); status_bar_resize(); diff --git a/src/ui/inputwin.c b/src/ui/inputwin.c index 372048a2..627f9da7 100644 --- a/src/ui/inputwin.c +++ b/src/ui/inputwin.c @@ -114,6 +114,12 @@ tab_handler(int count, int key) return 0; } +void +resize_signal_handler(int signal) +{ + ui_resize(); +} + void create_input_window(void) { @@ -127,10 +133,13 @@ create_input_window(void) rl_callback_handler_install(NULL, cb_linehandler); rl_bind_key('\t', tab_handler); + signal(SIGWINCH, resize_signal_handler); + inp_win = newpad(1, INP_WIN_MAX); wbkgd(inp_win, theme_attrs(THEME_INPUT_TEXT));; keypad(inp_win, TRUE); wmove(inp_win, 0, 0); + _inp_win_update_virtual(); } @@ -233,7 +242,7 @@ inp_readline(void) r = select(FD_SETSIZE, &fds, NULL, NULL, &p_rl_timeout); if (r < 0) { log_error("Readline failed."); - return false; + return TRUE; } if (FD_ISSET(fileno(rl_instream), &fds)) {