Skip to content

Commit 367c84c

Browse files
committed
don't fire context key change async
1 parent 024e1c3 commit 367c84c

2 files changed

Lines changed: 20 additions & 22 deletions

File tree

src/vs/platform/actions/common/menu.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,16 @@ export class Menu implements IMenu {
3131
debounceEvent(
3232
filterEvent(MenuRegistry.onDidChangeMenu, menuId => menuId === this._id),
3333
() => { },
34-
100
34+
50
3535
)(this._build, this, this._disposables);
3636

37-
// when context keys change we need to change if the menu also
37+
// when context keys change we need to check if the menu also
3838
// has changed
39-
this._contextKeyService.onDidChangeContext(event => {
40-
if (event.affectsSome(this._contextKeys)) {
41-
this._onDidChange.fire();
42-
}
43-
}, this, this._disposables);
39+
debounceEvent(
40+
this._contextKeyService.onDidChangeContext,
41+
(last, event) => last || event.affectsSome(this._contextKeys),
42+
50
43+
)(e => e && this._onDidChange.fire(), this, this._disposables);
4444
}
4545

4646
private _build(): void {

src/vs/platform/contextkey/browser/contextKeyService.ts

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
import { Emitter, Event, debounceEvent } from 'vs/base/common/event';
6+
import { Emitter, Event, mapEvent } from 'vs/base/common/event';
77
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
88
import { keys } from 'vs/base/common/map';
99
import { CommandsRegistry } from 'vs/platform/commands/common/commands';
@@ -193,14 +193,14 @@ class ContextKey<T> implements IContextKey<T> {
193193
}
194194
}
195195

196-
export class ContextKeyChangeEvent implements IContextKeyChangeEvent {
197-
198-
private _keys: string[] = [];
199-
200-
collect(oneOrManyKeys: string | string[]): void {
201-
this._keys = this._keys.concat(oneOrManyKeys);
196+
class SimpleContextKeyChangeEvent implements IContextKeyChangeEvent {
197+
constructor(private readonly _key: string) { }
198+
affectsSome(keys: IReadableSet<string>): boolean {
199+
return keys.has(this._key);
202200
}
203-
201+
}
202+
class ArrayContextKeyChangeEvent implements IContextKeyChangeEvent {
203+
constructor(private readonly _keys: string[]) { }
204204
affectsSome(keys: IReadableSet<string>): boolean {
205205
for (const key of this._keys) {
206206
if (keys.has(key)) {
@@ -236,13 +236,11 @@ export abstract class AbstractContextKeyService implements IContextKeyService {
236236

237237
public get onDidChangeContext(): Event<IContextKeyChangeEvent> {
238238
if (!this._onDidChangeContext) {
239-
this._onDidChangeContext = debounceEvent<string | string[], ContextKeyChangeEvent>(this._onDidChangeContextKey.event, (prev, cur) => {
240-
if (!prev) {
241-
prev = new ContextKeyChangeEvent();
242-
}
243-
prev.collect(cur);
244-
return prev;
245-
}, 25);
239+
this._onDidChangeContext = mapEvent(this._onDidChangeContextKey.event, ((changedKeyOrKeys): IContextKeyChangeEvent => {
240+
return typeof changedKeyOrKeys === 'string'
241+
? new SimpleContextKeyChangeEvent(changedKeyOrKeys)
242+
: new ArrayContextKeyChangeEvent(changedKeyOrKeys);
243+
}));
246244
}
247245
return this._onDidChangeContext;
248246
}

0 commit comments

Comments
 (0)