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