Fix xterm mouse support.
This commit is contained in:
@@ -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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user