Skip to content

Commit 3134110

Browse files
authored
Extend IContextKeyChangeEvent as a better solution for microsoft#152775 (microsoft#153402)
1 parent edc585e commit 3134110

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

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

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,9 @@ class SimpleContextKeyChangeEvent implements IContextKeyChangeEvent {
225225
affectsSome(keys: IReadableSet<string>): boolean {
226226
return keys.has(this.key);
227227
}
228+
allKeysContainedIn(keys: IReadableSet<string>): boolean {
229+
return this.affectsSome(keys);
230+
}
228231
}
229232

230233
class ArrayContextKeyChangeEvent implements IContextKeyChangeEvent {
@@ -237,6 +240,9 @@ class ArrayContextKeyChangeEvent implements IContextKeyChangeEvent {
237240
}
238241
return false;
239242
}
243+
allKeysContainedIn(keys: IReadableSet<string>): boolean {
244+
return this.keys.every(key => keys.has(key));
245+
}
240246
}
241247

242248
class CompositeContextKeyChangeEvent implements IContextKeyChangeEvent {
@@ -249,12 +255,13 @@ class CompositeContextKeyChangeEvent implements IContextKeyChangeEvent {
249255
}
250256
return false;
251257
}
258+
allKeysContainedIn(keys: IReadableSet<string>): boolean {
259+
return this.events.every(evt => evt.allKeysContainedIn(keys));
260+
}
252261
}
253262

254263
function allEventKeysInContext(event: IContextKeyChangeEvent, context: Record<string, any>): boolean {
255-
return (event instanceof ArrayContextKeyChangeEvent && event.keys.every(key => key in context)) ||
256-
(event instanceof SimpleContextKeyChangeEvent && event.key in context) ||
257-
(event instanceof CompositeContextKeyChangeEvent && event.events.every(e => allEventKeysInContext(e, context)));
264+
return event.allKeysContainedIn(new Set(Object.keys(context)));
258265
}
259266

260267
export abstract class AbstractContextKeyService implements IContextKeyService {

src/vs/platform/contextkey/common/contextkey.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1597,6 +1597,7 @@ export interface IReadableSet<T> {
15971597

15981598
export interface IContextKeyChangeEvent {
15991599
affectsSome(keys: IReadableSet<string>): boolean;
1600+
allKeysContainedIn(keys: IReadableSet<string>): boolean;
16001601
}
16011602

16021603
export interface IContextKeyService {

0 commit comments

Comments
 (0)