Untie focus reporting and mouse handling
This commit is contained in:
parent
3c265acd6c
commit
8f30e37507
|
@ -346,7 +346,7 @@ NCursesUI::NCursesUI()
|
||||||
start_color();
|
start_color();
|
||||||
use_default_colors();
|
use_default_colors();
|
||||||
|
|
||||||
set_raw_mode();
|
set_terminal_mode();
|
||||||
enable_mouse(true);
|
enable_mouse(true);
|
||||||
|
|
||||||
set_signal_handler(SIGWINCH, &signal_handler<&resize_pending>);
|
set_signal_handler(SIGWINCH, &signal_handler<&resize_pending>);
|
||||||
|
@ -361,9 +361,8 @@ NCursesUI::~NCursesUI()
|
||||||
{
|
{
|
||||||
enable_mouse(false);
|
enable_mouse(false);
|
||||||
m_palette.set_change_colors(false);
|
m_palette.set_change_colors(false);
|
||||||
fputs("\033>", stdout);
|
|
||||||
endwin();
|
endwin();
|
||||||
tcsetattr(STDIN_FILENO, TCSAFLUSH, &m_original_termios);
|
restore_terminal_mode();
|
||||||
set_signal_handler(SIGWINCH, SIG_DFL);
|
set_signal_handler(SIGWINCH, SIG_DFL);
|
||||||
set_signal_handler(SIGHUP, SIG_DFL);
|
set_signal_handler(SIGHUP, SIG_DFL);
|
||||||
set_signal_handler(SIGTSTP, SIG_DFL);
|
set_signal_handler(SIGTSTP, SIG_DFL);
|
||||||
|
@ -375,7 +374,6 @@ void NCursesUI::suspend()
|
||||||
enable_mouse(false);
|
enable_mouse(false);
|
||||||
bool change_color_enabled = m_palette.get_change_colors();
|
bool change_color_enabled = m_palette.get_change_colors();
|
||||||
m_palette.set_change_colors(false);
|
m_palette.set_change_colors(false);
|
||||||
fputs("\033>", stdout);
|
|
||||||
endwin();
|
endwin();
|
||||||
|
|
||||||
auto current = set_signal_handler(SIGTSTP, SIG_DFL);
|
auto current = set_signal_handler(SIGTSTP, SIG_DFL);
|
||||||
|
@ -383,7 +381,7 @@ void NCursesUI::suspend()
|
||||||
sigemptyset(&unblock_sigtstp);
|
sigemptyset(&unblock_sigtstp);
|
||||||
sigaddset(&unblock_sigtstp, SIGTSTP);
|
sigaddset(&unblock_sigtstp, SIGTSTP);
|
||||||
sigprocmask(SIG_UNBLOCK, &unblock_sigtstp, &old_mask);
|
sigprocmask(SIG_UNBLOCK, &unblock_sigtstp, &old_mask);
|
||||||
tcsetattr(STDIN_FILENO, TCSAFLUSH, &m_original_termios);
|
restore_terminal_mode();
|
||||||
|
|
||||||
raise(SIGTSTP); // suspend here
|
raise(SIGTSTP); // suspend here
|
||||||
|
|
||||||
|
@ -393,12 +391,12 @@ void NCursesUI::suspend()
|
||||||
|
|
||||||
doupdate();
|
doupdate();
|
||||||
check_resize(true);
|
check_resize(true);
|
||||||
set_raw_mode();
|
set_terminal_mode();
|
||||||
m_palette.set_change_colors(change_color_enabled);
|
m_palette.set_change_colors(change_color_enabled);
|
||||||
enable_mouse(mouse_enabled);
|
enable_mouse(mouse_enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NCursesUI::set_raw_mode() const
|
void NCursesUI::set_terminal_mode() const
|
||||||
{
|
{
|
||||||
termios attr = m_original_termios;
|
termios attr = m_original_termios;
|
||||||
attr.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IXON);
|
attr.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IXON);
|
||||||
|
@ -411,6 +409,17 @@ void NCursesUI::set_raw_mode() const
|
||||||
|
|
||||||
tcsetattr(STDIN_FILENO, TCSAFLUSH, &attr);
|
tcsetattr(STDIN_FILENO, TCSAFLUSH, &attr);
|
||||||
fputs("\033=", stdout);
|
fputs("\033=", stdout);
|
||||||
|
// force enable report focus events
|
||||||
|
fputs("\033[?1004h", stdout);
|
||||||
|
fflush(stdout);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NCursesUI::restore_terminal_mode() const
|
||||||
|
{
|
||||||
|
tcsetattr(STDIN_FILENO, TCSAFLUSH, &m_original_termios);
|
||||||
|
fputs("\033>", stdout);
|
||||||
|
fputs("\033[?1004l", stdout);
|
||||||
|
fflush(stdout);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NCursesUI::redraw(bool force)
|
void NCursesUI::redraw(bool force)
|
||||||
|
@ -1254,8 +1263,6 @@ void NCursesUI::enable_mouse(bool enabled)
|
||||||
{
|
{
|
||||||
// force SGR mode
|
// force SGR mode
|
||||||
fputs("\033[?1006h", stdout);
|
fputs("\033[?1006h", stdout);
|
||||||
// force enable report focus events
|
|
||||||
fputs("\033[?1004h", stdout);
|
|
||||||
// enable mouse
|
// enable mouse
|
||||||
fputs("\033[?1000h", stdout);
|
fputs("\033[?1000h", stdout);
|
||||||
// force enable report mouse position
|
// force enable report mouse position
|
||||||
|
@ -1265,7 +1272,6 @@ void NCursesUI::enable_mouse(bool enabled)
|
||||||
{
|
{
|
||||||
fputs("\033[?1002l", stdout);
|
fputs("\033[?1002l", stdout);
|
||||||
fputs("\033[?1000l", stdout);
|
fputs("\033[?1000l", stdout);
|
||||||
fputs("\033[?1004l", stdout);
|
|
||||||
fputs("\033[?1006l", stdout);
|
fputs("\033[?1006l", stdout);
|
||||||
}
|
}
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
|
|
@ -116,7 +116,8 @@ private:
|
||||||
DisplayCoord m_dimensions;
|
DisplayCoord m_dimensions;
|
||||||
termios m_original_termios{};
|
termios m_original_termios{};
|
||||||
|
|
||||||
void set_raw_mode() const;
|
void set_terminal_mode() const;
|
||||||
|
void restore_terminal_mode() const;
|
||||||
|
|
||||||
struct Menu : Window
|
struct Menu : Window
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue
Block a user