mirror of
https://github.com/wavetermdev/xterm.js.git
synced 2026-08-05 13:43:48 -07:00
Merge pull request #4234 from Tyriar/slow_isFocused
Cache ICoreBrowserService.isFocused per task
This commit is contained in:
@@ -8,10 +8,15 @@ import { ICoreBrowserService } from './Services';
|
||||
export class CoreBrowserService implements ICoreBrowserService {
|
||||
public serviceBrand: undefined;
|
||||
|
||||
private _isFocused = false;
|
||||
private _cachedIsFocused: boolean | undefined = undefined;
|
||||
|
||||
constructor(
|
||||
private _textarea: HTMLTextAreaElement,
|
||||
public readonly window: Window & typeof globalThis
|
||||
) {
|
||||
this._textarea.addEventListener('focus', () => this._isFocused = true);
|
||||
this._textarea.addEventListener('blur', () => this._isFocused = false);
|
||||
}
|
||||
|
||||
public get dpr(): number {
|
||||
@@ -19,7 +24,10 @@ export class CoreBrowserService implements ICoreBrowserService {
|
||||
}
|
||||
|
||||
public get isFocused(): boolean {
|
||||
const docOrShadowRoot = this._textarea.getRootNode ? this._textarea.getRootNode() as Document | ShadowRoot : this._textarea.ownerDocument;
|
||||
return docOrShadowRoot.activeElement === this._textarea && this._textarea.ownerDocument.hasFocus();
|
||||
if (this._cachedIsFocused === undefined) {
|
||||
this._cachedIsFocused = this._isFocused && this._textarea.ownerDocument.hasFocus();
|
||||
queueMicrotask(() => this._cachedIsFocused = undefined);
|
||||
}
|
||||
return this._cachedIsFocused;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user