diff options
author | James Booth <boothj5@gmail.com> | 2015-01-31 18:02:42 +0000 |
---|---|---|
committer | James Booth <boothj5@gmail.com> | 2015-01-31 18:02:42 +0000 |
commit | e6f27de55221f0f41362b81ca927d5d55682d14f (patch) | |
tree | 11b5ea0545790e62d61126f056e00932a96f53e3 /src | |
parent | fe10f2b2e38818cdc77b226ee498d0956d3bba40 (diff) | |
download | profani-tty-e6f27de55221f0f41362b81ca927d5d55682d14f.tar.gz |
Added SIGWINCH handler
Diffstat (limited to 'src')
-rw-r--r-- | src/ui/core.c | 10 | ||||
-rw-r--r-- | src/ui/inputwin.c | 11 |
2 files changed, 18 insertions, 3 deletions
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 <stdlib.h> #include <string.h> #include <assert.h> +#include <sys/ioctl.h> +#include <unistd.h> + #ifdef HAVE_LIBXSS #include <X11/extensions/scrnsaver.h> #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 @@ -115,6 +115,12 @@ tab_handler(int count, int key) } void +resize_signal_handler(int signal) +{ + ui_resize(); +} + +void create_input_window(void) { #ifdef NCURSES_REENTRANT @@ -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)) { |