about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2015-01-31 18:02:42 +0000
committerJames Booth <boothj5@gmail.com>2015-01-31 18:02:42 +0000
commite6f27de55221f0f41362b81ca927d5d55682d14f (patch)
tree11b5ea0545790e62d61126f056e00932a96f53e3 /src
parentfe10f2b2e38818cdc77b226ee498d0956d3bba40 (diff)
downloadprofani-tty-e6f27de55221f0f41362b81ca927d5d55682d14f.tar.gz
Added SIGWINCH handler
Diffstat (limited to 'src')
-rw-r--r--src/ui/core.c10
-rw-r--r--src/ui/inputwin.c11
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)) {