Prevent ncurses input queue from breaking by cleaning KEY_RESIZE asap

This commit is contained in:
Andrzej Rybczak
2016-12-09 04:08:53 +01:00
parent 31b2c7f55f
commit 2e0de374a3
3 changed files with 7 additions and 27 deletions

View File

@@ -199,6 +199,8 @@ void resizeScreen(bool reload_main_window)
rl_resize_terminal();
endwin();
refresh();
// Remove KEY_RESIZE from input queue, I'm not sure how these make it in.
getch();
}
MainHeight = LINES-(Config.design == Design::Alternative ? 7 : 4);

View File

@@ -103,12 +103,8 @@ int main(int argc, char **argv)
cerr_buffer = std::cerr.rdbuf();
std::cerr.rdbuf(errorlog.rdbuf());
# ifndef WIN32
signal(SIGPIPE, sighandler);
sigignore(SIGPIPE);
signal(SIGWINCH, sighandler);
// ignore Ctrl-C
sigignore(SIGINT);
# endif // !WIN32
NC::initScreen(Config.colors_enabled, Config.mouse_support);

View File

@@ -33,21 +33,6 @@
namespace {
struct ScopedWindowTimeout
{
ScopedWindowTimeout(WINDOW *w, int init_timeout, int term_timeout)
: m_w(w), m_term_timeout(term_timeout) {
wtimeout(w, init_timeout);
}
~ScopedWindowTimeout() {
wtimeout(m_w, m_term_timeout);
}
private:
WINDOW *m_w;
int m_term_timeout;
};
namespace rl {
bool aborted;
@@ -359,6 +344,7 @@ void initScreen(bool enable_colors, bool enable_mouse)
raw();
nonl();
noecho();
timeout(0);
curs_set(0);
// setup mouse
@@ -387,6 +373,7 @@ void initScreen(bool enable_colors, bool enable_mouse)
rl_deprep_term_function = nullptr;
// do not catch signals
rl_catch_signals = 0;
rl_catch_sigwinch = 0;
// overwrite readline callbacks
rl_getc_function = rl::read_key;
rl_redisplay_function = rl::display_string;
@@ -586,7 +573,7 @@ void Window::recreate(size_t width, size_t height)
{
delwin(m_window);
m_window = newpad(height, width);
setTimeout(m_window_timeout);
wtimeout(m_window, 0);
setColor(m_color);
}
@@ -701,11 +688,7 @@ void Window::altCharset(bool altcharset_state) const
void Window::setTimeout(int timeout)
{
if (timeout != m_window_timeout)
{
m_window_timeout = timeout;
wtimeout(m_window, timeout);
}
m_window_timeout = timeout;
}
void Window::addFDCallback(int fd, void (*callback)())
@@ -800,7 +783,6 @@ Key::Type Window::getInputChar(int key)
result = result*10 + x - '0';
}
};
ScopedWindowTimeout swt(m_window, 0, m_window_timeout);
key = wgetch(m_window);
switch (key)
{