mirror of
https://github.com/wavetermdev/xterm.js.git
synced 2026-08-05 13:43:48 -07:00
Merge pull request #287 from Tyriar/286_fix_scroll_in_app_mode
Sync scroll bar instead of disabling on enter app mode
This commit is contained in:
@@ -55,13 +55,6 @@ Viewport.prototype.refresh = function(charSize) {
|
||||
* Updates dimensions and synchronizes the scroll area if necessary.
|
||||
*/
|
||||
Viewport.prototype.syncScrollArea = function() {
|
||||
if (this.isApplicationMode) {
|
||||
// Fix scroll bar in application mode
|
||||
this.lastRecordedBufferLength = this.terminal.rows;
|
||||
this.refresh();
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.lastRecordedBufferLength !== this.terminal.lines.length) {
|
||||
// If buffer height changed
|
||||
this.lastRecordedBufferLength = this.terminal.lines.length;
|
||||
@@ -84,26 +77,12 @@ Viewport.prototype.syncScrollArea = function() {
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Sets the application mode of the viewport.
|
||||
* @param {boolean} isApplicationMode Sets whether the terminal is in application mode. true
|
||||
* for application mode (DECKPAM) and false for normal mode (DECKPNM).
|
||||
*/
|
||||
Viewport.prototype.setApplicationMode = function(isApplicationMode) {
|
||||
this.isApplicationMode = isApplicationMode;
|
||||
this.syncScrollArea();
|
||||
};
|
||||
|
||||
/**
|
||||
* Handles scroll events on the viewport, calculating the new viewport and requesting the
|
||||
* terminal to scroll to it.
|
||||
* @param {Event} ev The scroll event.
|
||||
*/
|
||||
Viewport.prototype.onScroll = function(ev) {
|
||||
if (this.isApplicationMode) {
|
||||
// Scrolling via the scroll bar is disabled during application mode
|
||||
return;
|
||||
}
|
||||
var newRow = Math.round(this.viewportElement.scrollTop / this.currentRowHeight);
|
||||
var diff = newRow - this.terminal.ydisp;
|
||||
this.terminal.scrollDisp(diff, true);
|
||||
|
||||
+5
-5
@@ -1692,7 +1692,7 @@ Terminal.prototype.write = function(data) {
|
||||
case '=':
|
||||
this.log('Serial port requested application keypad.');
|
||||
this.applicationKeypad = true;
|
||||
this.viewport.setApplicationMode(true);
|
||||
this.viewport.syncScrollArea();
|
||||
this.state = normal;
|
||||
break;
|
||||
|
||||
@@ -1700,7 +1700,7 @@ Terminal.prototype.write = function(data) {
|
||||
case '>':
|
||||
this.log('Switching back to normal keypad.');
|
||||
this.applicationKeypad = false;
|
||||
this.viewport.setApplicationMode(false);
|
||||
this.viewport.syncScrollArea();
|
||||
this.state = normal;
|
||||
break;
|
||||
|
||||
@@ -4065,7 +4065,7 @@ Terminal.prototype.setMode = function(params) {
|
||||
case 66:
|
||||
this.log('Serial port requested application keypad.');
|
||||
this.applicationKeypad = true;
|
||||
this.viewport.setApplicationMode(true);
|
||||
this.viewport.syncScrollArea();
|
||||
break;
|
||||
case 9: // X10 Mouse
|
||||
// no release, no motion, no wheel, no modifiers.
|
||||
@@ -4265,7 +4265,7 @@ Terminal.prototype.resetMode = function(params) {
|
||||
case 66:
|
||||
this.log('Switching back to normal keypad.');
|
||||
this.applicationKeypad = false;
|
||||
this.viewport.setApplicationMode(false);
|
||||
this.viewport.syncScrollArea();
|
||||
break;
|
||||
case 9: // X10 Mouse
|
||||
case 1000: // vt200 mouse
|
||||
@@ -4552,7 +4552,7 @@ Terminal.prototype.softReset = function(params) {
|
||||
this.originMode = false;
|
||||
this.wraparoundMode = false; // autowrap
|
||||
this.applicationKeypad = false; // ?
|
||||
this.viewport.setApplicationMode(false);
|
||||
this.viewport.syncScrollArea();
|
||||
this.applicationCursor = false;
|
||||
this.scrollTop = 0;
|
||||
this.scrollBottom = this.rows - 1;
|
||||
|
||||
@@ -46,23 +46,6 @@ describe('Viewport', function () {
|
||||
it('should define Viewport.prototype.onWheel', function () {
|
||||
assert.isDefined(Terminal.Viewport.prototype.onWheel);
|
||||
});
|
||||
it('should define Viewport.prototype.setApplicationMode', function () {
|
||||
assert.isDefined(Terminal.Viewport.prototype.setApplicationMode);
|
||||
});
|
||||
});
|
||||
|
||||
describe('setApplicationMode', function () {
|
||||
it('should restrict the scroll area to the viewport', function () {
|
||||
terminal.lines.push('');
|
||||
terminal.lines.push('');
|
||||
terminal.rows = 1;
|
||||
viewport.syncScrollArea();
|
||||
assert.equal(scrollAreaElement.style.height, 2 * CHARACTER_HEIGHT + 'px');
|
||||
viewport.setApplicationMode(true);
|
||||
assert.equal(scrollAreaElement.style.height, CHARACTER_HEIGHT + 'px');
|
||||
viewport.setApplicationMode(false);
|
||||
assert.equal(scrollAreaElement.style.height, 2 * CHARACTER_HEIGHT + 'px');
|
||||
});
|
||||
});
|
||||
|
||||
describe('refresh', function () {
|
||||
|
||||
Reference in New Issue
Block a user