Fix xterm mouse support.

This commit is contained in:
Louis Kruger
2014-12-28 22:09:12 -08:00
committed by John Hood
parent b58e750daf
commit c4236c6762
4 changed files with 74 additions and 43 deletions
+18 -20
View File
@@ -268,14 +268,10 @@ static bool *get_DEC_mode( int param, Framebuffer *fb ) {
return &(fb->ds.auto_wrap_mode);
case 25:
return &(fb->ds.cursor_visible);
case 1000: /* xterm mouse 1 (normal) */
return &(fb->ds.vt100_mouse);
case 1002: /* xterm mouse 2 (inc. button drags) */
return &(fb->ds.xterm_mouse);
case 1005: /* xterm UTF8 mouse */
return &(fb->ds.xterm_utf8_mouse);
case 1006: /* xterm extended mouse */
return &(fb->ds.xterm_extended_mouse);
case 1004: /* xterm mouse focus event */
return &(fb->ds.mouse_focus_event);
case 1007: /* xterm mouse alternate scroll */
return &(fb->ds.mouse_alternate_scroll);
case 2004: /* bracketed paste */
return &(fb->ds.bracketed_paste);
}
@@ -293,18 +289,13 @@ void CSI_DECSM( Framebuffer *fb, Dispatcher *dispatch )
{
for ( int i = 0; i < dispatch->param_count(); i++ ) {
int param = dispatch->getparam( i, 0 );
if ( (param == 1000) || (param == 1002) ) {
/* we believe all mouse modes should be set to false
when either of these two modes are enabled */
/* XXX can we cite something for this? -KJW 15Dec2014 */
set_if_available( get_DEC_mode( 1000, fb ), false );
set_if_available( get_DEC_mode( 1002, fb ), false );
set_if_available( get_DEC_mode( 1005, fb ), false );
set_if_available( get_DEC_mode( 1006, fb ), false );
if (param == 9 || (param >= 1000 && param <= 1003)) {
fb->ds.mouse_reporting_mode = (Terminal::DrawState::MouseReportingMode) param;
} else if (param == 1005 || param == 1006 || param == 1015) {
fb->ds.mouse_encoding_mode = (Terminal::DrawState::MouseEncodingMode) param;
} else {
set_if_available( get_DEC_mode( param, fb ), true );
}
set_if_available( get_DEC_mode( param, fb ), true );
}
}
@@ -312,7 +303,14 @@ void CSI_DECSM( Framebuffer *fb, Dispatcher *dispatch )
void CSI_DECRM( Framebuffer *fb, Dispatcher *dispatch )
{
for ( int i = 0; i < dispatch->param_count(); i++ ) {
set_if_available( get_DEC_mode( dispatch->getparam( i, 0 ), fb ), false );
int param = dispatch->getparam( i, 0 );
if (param == 9 || (param >= 1000 && param <= 1003)) {
fb->ds.mouse_reporting_mode = Terminal::DrawState::MOUSE_REPORTING_NONE;
} else if (param == 1005 || param == 1006 || param == 1015) {
fb->ds.mouse_encoding_mode = Terminal::DrawState::MOUSE_ENCODING_DEFAULT;
} else {
set_if_available( get_DEC_mode( param, fb ), false );
}
}
}