Merge remote-tracking branch 'savar/dynamic_input_block'

This commit is contained in:
James Booth
2015-01-12 23:41:15 +00:00
12 changed files with 126 additions and 26 deletions

View File

@@ -1182,7 +1182,12 @@ cons_show_chat_prefs(void)
void
cons_inpblock_setting(void)
{
cons_show("Input block (/inpblock) : %d milliseconds", prefs_get_inpblock());
cons_show("Input timeout (/inpblock) : %d milliseconds", prefs_get_inpblock());
if (prefs_get_boolean(PREF_INPBLOCK_DYNAMIC)) {
cons_show("Dynamic timeout (/inpblock) : ON");
} else {
cons_show("Dynamic timeout (/inpblock) : OFF");
}
}
void

View File

@@ -180,7 +180,11 @@ ui_get_char(char *input, int *size, int *result)
wint_t ch = inp_get_char(input, size, result);
if (ch != ERR && *result != ERR) {
ui_reset_idle_time();
ui_input_nonblocking(TRUE);
} else {
ui_input_nonblocking(FALSE);
}
return ch;
}
@@ -197,9 +201,34 @@ ui_replace_input(char *input, const char * const new_input, int *size)
}
void
ui_input_nonblocking(void)
ui_input_nonblocking(gboolean reset)
{
inp_non_block();
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();
}
}
}
inp_non_block(timeout);
}
void
@@ -2218,7 +2247,7 @@ ui_ask_password(void)
status_bar_update_virtual();
inp_block();
inp_get_password(passwd);
inp_non_block();
inp_non_block(prefs_get_inpblock());
return passwd;
}

View File

@@ -120,9 +120,9 @@ inp_win_resize(void)
}
void
inp_non_block(void)
inp_non_block(gint timeout)
{
wtimeout(inp_win, prefs_get_inpblock());
wtimeout(inp_win, timeout);
}
void

View File

@@ -40,9 +40,9 @@ wint_t inp_get_char(char *input, int *size, int *result);
void inp_win_reset(void);
void inp_win_resize(void);
void inp_put_back(void);
void inp_non_block(void);
void inp_non_block(gint);
void inp_block(void);
void inp_get_password(char *passwd);
void inp_replace_input(char *input, const char * const new_input, int *size);
#endif
#endif

View File

@@ -232,7 +232,7 @@ void ui_statusbar_new(const int win);
wint_t ui_get_char(char *input, int *size, int *result);
void ui_input_clear(void);
void ui_input_nonblocking(void);
void ui_input_nonblocking(gboolean);
void ui_replace_input(char *input, const char * const new_input, int *size);
void ui_invalid_command_usage(const char * const usage, void (*setting_func)(void));

View File

@@ -740,6 +740,8 @@ win_save_print(ProfWin *window, const char show_char, GTimeVal *tstamp,
buffer_push(window->layout->buffer, show_char, time, flags, theme_item, from, message);
_win_print(window, show_char, time, flags, theme_item, from, message);
// TODO: cross-reference.. this should be replaced by a real event-based system
ui_input_nonblocking(TRUE);
}
void
@@ -952,4 +954,4 @@ win_printline_nowrap(WINDOW *win, char *msg)
waddnstr(win, msg, maxx);
wmove(win, cury+1, 0);
}
}