mirror of
https://github.com/Microsoft/vscode
synced 2024-08-28 05:19:39 +00:00
Properly dispose of ITerminalService.createOnInstanceEvent calls
Fixes #208892
This commit is contained in:
parent
90970f8c4a
commit
78426fb51c
|
@ -25,13 +25,13 @@ export class MainThreadTerminalShellIntegration extends Disposable implements Ma
|
|||
this._proxy = extHostContext.getProxy(ExtHostContext.ExtHostTerminalShellIntegration);
|
||||
|
||||
// onDidChangeTerminalShellIntegration
|
||||
const onDidAddCommandDetection = this._terminalService.createOnInstanceEvent(instance => {
|
||||
const onDidAddCommandDetection = this._store.add(this._terminalService.createOnInstanceEvent(instance => {
|
||||
return Event.map(
|
||||
Event.filter(instance.capabilities.onDidAddCapabilityType, e => {
|
||||
return e === TerminalCapability.CommandDetection;
|
||||
}), () => instance
|
||||
);
|
||||
});
|
||||
})).event;
|
||||
this._store.add(onDidAddCommandDetection(e => this._proxy.$shellIntegrationChange(e.instanceId)));
|
||||
|
||||
// onDidStartTerminalShellExecution
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
import { IDimension } from 'vs/base/browser/dom';
|
||||
import { Orientation } from 'vs/base/browser/ui/splitview/splitview';
|
||||
import { Color } from 'vs/base/common/color';
|
||||
import { Event, IDynamicListEventMultiplexer } from 'vs/base/common/event';
|
||||
import { Event, IDynamicListEventMultiplexer, type DynamicListEventMultiplexer } from 'vs/base/common/event';
|
||||
import { DisposableStore, IDisposable } from 'vs/base/common/lifecycle';
|
||||
import { OperatingSystem } from 'vs/base/common/platform';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
|
@ -342,7 +342,7 @@ export interface ITerminalService extends ITerminalInstanceHost {
|
|||
* instances and removing old instances as needed.
|
||||
* @param getEvent Maps the instance to the event.
|
||||
*/
|
||||
createOnInstanceEvent<T>(getEvent: (instance: ITerminalInstance) => Event<T>): Event<T>;
|
||||
createOnInstanceEvent<T>(getEvent: (instance: ITerminalInstance) => Event<T>): DynamicListEventMultiplexer<ITerminalInstance, T>;
|
||||
|
||||
/**
|
||||
* Creates a capability event listener that listens to capabilities on all instances,
|
||||
|
|
|
@ -155,14 +155,14 @@ export class TerminalService extends Disposable implements ITerminalService {
|
|||
|
||||
// Lazily initialized events that fire when the specified event fires on _any_ terminal
|
||||
// TODO: Batch events
|
||||
@memoize get onAnyInstanceData() { return this.createOnInstanceEvent(instance => Event.map(instance.onData, data => ({ instance, data }))); }
|
||||
@memoize get onAnyInstanceDataInput() { return this.createOnInstanceEvent(e => e.onDidInputData); }
|
||||
@memoize get onAnyInstanceIconChange() { return this.createOnInstanceEvent(e => e.onIconChanged); }
|
||||
@memoize get onAnyInstanceMaximumDimensionsChange() { return this.createOnInstanceEvent(e => Event.map(e.onMaximumDimensionsChanged, () => e, e.store)); }
|
||||
@memoize get onAnyInstancePrimaryStatusChange() { return this.createOnInstanceEvent(e => Event.map(e.statusList.onDidChangePrimaryStatus, () => e, e.store)); }
|
||||
@memoize get onAnyInstanceProcessIdReady() { return this.createOnInstanceEvent(e => e.onProcessIdReady); }
|
||||
@memoize get onAnyInstanceSelectionChange() { return this.createOnInstanceEvent(e => e.onDidChangeSelection); }
|
||||
@memoize get onAnyInstanceTitleChange() { return this.createOnInstanceEvent(e => e.onTitleChanged); }
|
||||
@memoize get onAnyInstanceData() { return this._register(this.createOnInstanceEvent(instance => Event.map(instance.onData, data => ({ instance, data })))).event; }
|
||||
@memoize get onAnyInstanceDataInput() { return this._register(this.createOnInstanceEvent(e => e.onDidInputData)).event; }
|
||||
@memoize get onAnyInstanceIconChange() { return this._register(this.createOnInstanceEvent(e => e.onIconChanged)).event; }
|
||||
@memoize get onAnyInstanceMaximumDimensionsChange() { return this._register(this.createOnInstanceEvent(e => Event.map(e.onMaximumDimensionsChanged, () => e, e.store))).event; }
|
||||
@memoize get onAnyInstancePrimaryStatusChange() { return this._register(this.createOnInstanceEvent(e => Event.map(e.statusList.onDidChangePrimaryStatus, () => e, e.store))).event; }
|
||||
@memoize get onAnyInstanceProcessIdReady() { return this._register(this.createOnInstanceEvent(e => e.onProcessIdReady)).event; }
|
||||
@memoize get onAnyInstanceSelectionChange() { return this._register(this.createOnInstanceEvent(e => e.onDidChangeSelection)).event; }
|
||||
@memoize get onAnyInstanceTitleChange() { return this._register(this.createOnInstanceEvent(e => e.onTitleChanged)).event; }
|
||||
|
||||
constructor(
|
||||
@IContextKeyService private _contextKeyService: IContextKeyService,
|
||||
|
@ -1188,8 +1188,8 @@ export class TerminalService extends Disposable implements ITerminalService {
|
|||
this._editingTerminal = instance;
|
||||
}
|
||||
|
||||
createOnInstanceEvent<T>(getEvent: (instance: ITerminalInstance) => Event<T>): Event<T> {
|
||||
return this._register(new DynamicListEventMultiplexer(this.instances, this.onDidCreateInstance, this.onDidDisposeInstance, getEvent)).event;
|
||||
createOnInstanceEvent<T>(getEvent: (instance: ITerminalInstance) => Event<T>): DynamicListEventMultiplexer<ITerminalInstance, T> {
|
||||
return new DynamicListEventMultiplexer(this.instances, this.onDidCreateInstance, this.onDidDisposeInstance, getEvent);
|
||||
}
|
||||
|
||||
createOnInstanceCapabilityEvent<T extends TerminalCapability, K>(capabilityId: T, getEvent: (capability: ITerminalCapabilityImplMap[T]) => Event<K>): IDynamicListEventMultiplexer<{ instance: ITerminalInstance; data: K }> {
|
||||
|
|
Loading…
Reference in a new issue