about summary refs log tree commit diff stats
path: root/src/ui
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2015-01-31 01:11:41 +0000
committerJames Booth <boothj5@gmail.com>2015-01-31 01:11:41 +0000
commitb3448eb265c7b656c07d3a72ea498dc6b5c5b888 (patch)
tree7fd621e707a24956cc53d6309962be2a406f5de2 /src/ui
parente161337b7f41be415f9e66ae8596268593f5c319 (diff)
downloadprofani-tty-b3448eb265c7b656c07d3a72ea498dc6b5c5b888.tar.gz
Moved input blocking code to inputwin.c
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/core.c31
-rw-r--r--src/ui/inputwin.c35
-rw-r--r--src/ui/inputwin.h1
3 files changed, 34 insertions, 33 deletions
diff --git a/src/ui/core.c b/src/ui/core.c
index e7477e57..ed21b233 100644
--- a/src/ui/core.c
+++ b/src/ui/core.c
@@ -215,33 +215,7 @@ ui_input_clear(void)
 void
 ui_input_nonblocking(gboolean reset)
 {
-    static gint timeout = 0;
-    static gint no_input_count = 0;
-
-    if (! prefs_get_boolean(PREF_INPBLOCK_DYNAMIC)) {
-        inp_non_block(prefs_get_inpblock());
-        return;
-    }
-
-    if (reset) {
-        timeout = 0;
-        no_input_count = 0;
-    }
-
-    if (timeout < prefs_get_inpblock()) {
-        no_input_count++;
-
-        if (no_input_count % 10 == 0) {
-            timeout += no_input_count;
-
-            if (timeout > prefs_get_inpblock()) {
-                timeout = prefs_get_inpblock();
-            }
-        }
-    }
-
-    log_info("TIMEOUT: %d", timeout);
-    inp_non_block(timeout);
+    inp_nonblocking(reset);
 }
 
 void
@@ -2250,7 +2224,8 @@ ui_ask_password(void)
   status_bar_update_virtual();
   inp_block();
   inp_get_password(passwd);
-  inp_non_block(prefs_get_inpblock());
+//  inp_non_block(prefs_get_inpblock());
+  inp_nonblocking(TRUE);
 
   return passwd;
 }
diff --git a/src/ui/inputwin.c b/src/ui/inputwin.c
index 929f85fb..fe75bc61 100644
--- a/src/ui/inputwin.c
+++ b/src/ui/inputwin.c
@@ -66,7 +66,9 @@
 static WINDOW *inp_win;
 
 static struct timeval p_rl_timeout;
-static int timeout_millis = 0;
+static gint inp_timeout = 0;
+static gint no_input_count = 0;
+
 static fd_set fds;
 static int r;
 static gboolean cmd_result = TRUE;
@@ -95,7 +97,7 @@ create_input_window(void)
     ESCDELAY = 25;
 #endif
 	p_rl_timeout.tv_sec = 0;
-    p_rl_timeout.tv_usec = timeout_millis * 1000;
+    p_rl_timeout.tv_usec = inp_timeout * 1000;
     rl_callback_handler_install(NULL, cb_linehandler);
 
     inp_win = newpad(1, INP_WIN_MAX);
@@ -144,9 +146,29 @@ offset_to_col(char *str, int offset)
 }
 
 void
-inp_non_block(gint block_timeout)
+inp_nonblocking(gboolean reset)
 {
-    timeout_millis = block_timeout;
+    if (! prefs_get_boolean(PREF_INPBLOCK_DYNAMIC)) {
+        inp_timeout = prefs_get_inpblock();
+        return;
+    }
+
+    if (reset) {
+        inp_timeout = 0;
+        no_input_count = 0;
+    }
+
+    if (inp_timeout < prefs_get_inpblock()) {
+        no_input_count++;
+
+        if (no_input_count % 10 == 0) {
+            inp_timeout += no_input_count;
+
+            if (inp_timeout > prefs_get_inpblock()) {
+                inp_timeout = prefs_get_inpblock();
+            }
+        }
+    }
 }
 
 void
@@ -181,13 +203,16 @@ inp_readline(void)
         if (rl_line_buffer && rl_line_buffer[0] != '/') {
             prof_handle_activity();
         }
+        ui_reset_idle_time();
+        inp_nonblocking(TRUE);
         inp_write(rl_line_buffer, rl_point);
     } else {
+        inp_nonblocking(FALSE);
         prof_handle_idle();
     }
 
     p_rl_timeout.tv_sec = 0;
-    p_rl_timeout.tv_usec = timeout_millis * 1000;
+    p_rl_timeout.tv_usec = inp_timeout * 1000;
 
     return cmd_result;
 }
diff --git a/src/ui/inputwin.h b/src/ui/inputwin.h
index 7193e049..081fc56b 100644
--- a/src/ui/inputwin.h
+++ b/src/ui/inputwin.h
@@ -41,6 +41,7 @@
 
 void create_input_window(void);
 gboolean inp_readline(void);
+void inp_nonblocking(gboolean reset);
 void inp_close(void);
 char* inp_read(int *key_type, wint_t *ch);
 void inp_win_clear(void);