mirror of
https://github.com/wavetermdev/xterm.js.git
synced 2026-08-05 13:43:48 -07:00
Fix key duplication on Android with physical keyboards
When typing rapidly on Android with physical keyboards, characters often duplicate on the terminal. This is because physical keyboard events always go through IME on Android, even for plain English characters, and rapid typing causes a race condition in the composition helper. This patch fixes the issue by making sure textarea changes are handled correctly.
This commit is contained in:
@@ -41,6 +41,11 @@ export class CompositionHelper {
|
||||
*/
|
||||
private _dataAlreadySent: string;
|
||||
|
||||
/**
|
||||
* The pending textarea change timer, if any.
|
||||
*/
|
||||
private _textareaChangeTimer?: number;
|
||||
|
||||
constructor(
|
||||
private readonly _textarea: HTMLTextAreaElement,
|
||||
private readonly _compositionView: HTMLElement,
|
||||
@@ -184,8 +189,12 @@ export class CompositionHelper {
|
||||
* IME is active.
|
||||
*/
|
||||
private _handleAnyTextareaChanges(): void {
|
||||
if (this._textareaChangeTimer) {
|
||||
return;
|
||||
}
|
||||
const oldValue = this._textarea.value;
|
||||
setTimeout(() => {
|
||||
this._textareaChangeTimer = window.setTimeout(() => {
|
||||
this._textareaChangeTimer = undefined;
|
||||
// Ignore if a composition has started since the timeout
|
||||
if (!this._isComposing) {
|
||||
const newValue = this._textarea.value;
|
||||
|
||||
Reference in New Issue
Block a user