Skip to content

Commit c42323e

Browse files
authored
Merge pull request microsoft#197328 from microsoft/sandy081/obnoxious-crab
fix microsoft#197169 (microsoft#197275)
2 parents ecad95c + 4c6504d commit c42323e

File tree

3 files changed

+17
-12
lines changed

3 files changed

+17
-12
lines changed

src/vs/workbench/browser/parts/paneCompositeBar.ts

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@ import { IExtensionService } from 'vs/workbench/services/extensions/common/exten
1717
import { URI, UriComponents } from 'vs/base/common/uri';
1818
import { ToggleCompositePinnedAction, ICompositeBarColors, IActivityHoverOptions, ToggleCompositeBadgeAction, CompositeBarAction, ICompositeBar, ICompositeBarActionItem } from 'vs/workbench/browser/parts/compositeBarActions';
1919
import { IViewDescriptorService, ViewContainer, IViewContainerModel, ViewContainerLocation } from 'vs/workbench/common/views';
20-
import { getEnabledViewContainerContextKey } from 'vs/workbench/common/contextkeys';
21-
import { IContextKeyService, ContextKeyExpr, IContextKey } from 'vs/platform/contextkey/common/contextkey';
20+
import { IContextKeyService, ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';
2221
import { isString } from 'vs/base/common/types';
2322
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
2423
import { isNative } from 'vs/base/common/platform';
@@ -88,7 +87,6 @@ export class PaneCompositeBar extends Disposable {
8887

8988
private readonly viewContainerDisposables = this._register(new DisposableMap<string, IDisposable>());
9089
private readonly location: ViewContainerLocation;
91-
private readonly enabledViewContainersContextKeys: Map<string, IContextKey<boolean>> = new Map<string, IContextKey<boolean>>();
9290

9391
private readonly compositeBar: CompositeBar;
9492
readonly dndHandler: ICompositeDragAndDrop;
@@ -378,16 +376,9 @@ export class PaneCompositeBar extends Disposable {
378376
}
379377

380378
private showOrHideViewContainer(viewContainer: ViewContainer): void {
381-
let contextKey = this.enabledViewContainersContextKeys.get(viewContainer.id);
382-
if (!contextKey) {
383-
contextKey = this.contextKeyService.createKey(getEnabledViewContainerContextKey(viewContainer.id), false);
384-
this.enabledViewContainersContextKeys.set(viewContainer.id, contextKey);
385-
}
386379
if (this.shouldBeHidden(viewContainer)) {
387-
contextKey.set(false);
388380
this.hideComposite(viewContainer.id);
389381
} else {
390-
contextKey.set(true);
391382
this.addComposite(viewContainer);
392383
}
393384
}

src/vs/workbench/browser/parts/views/viewsService.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import { Disposable, IDisposable, toDisposable, DisposableStore } from 'vs/base/common/lifecycle';
77
import { IViewDescriptorService, ViewContainer, IViewDescriptor, IView, ViewContainerLocation, IViewsService, IViewPaneContainer } from 'vs/workbench/common/views';
8-
import { FocusedViewContext, getVisbileViewContextKey, getEnabledViewContainerContextKey } from 'vs/workbench/common/contextkeys';
8+
import { FocusedViewContext, getVisbileViewContextKey } from 'vs/workbench/common/contextkeys';
99
import { Registry } from 'vs/platform/registry/common/platform';
1010
import { IStorageService } from 'vs/platform/storage/common/storage';
1111
import { ContextKeyExpr, IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey';
@@ -50,6 +50,7 @@ export class ViewsService extends Disposable implements IViewsService {
5050
private readonly _onDidChangeFocusedView = this._register(new Emitter<void>());
5151
readonly onDidChangeFocusedView = this._onDidChangeFocusedView.event;
5252

53+
private readonly enabledViewContainersContextKeys: Map<string, IContextKey<boolean>>;
5354
private readonly visibleViewContextKeys: Map<string, IContextKey<boolean>>;
5455
private readonly focusedViewContextKey: IContextKey<string>;
5556

@@ -63,6 +64,7 @@ export class ViewsService extends Disposable implements IViewsService {
6364
super();
6465

6566
this.viewDisposable = new Map<IViewDescriptor, IDisposable>();
67+
this.enabledViewContainersContextKeys = new Map<string, IContextKey<boolean>>();
6668
this.visibleViewContextKeys = new Map<string, IContextKey<boolean>>();
6769
this.viewPaneContainers = new Map<string, ViewPaneContainer>();
6870

@@ -126,6 +128,8 @@ export class ViewsService extends Disposable implements IViewsService {
126128
this.onViewDescriptorsAdded(added, viewContainer);
127129
this.onViewDescriptorsRemoved(removed);
128130
}));
131+
this.updateViewContainerEnablementContextKey(viewContainer);
132+
this._register(viewContainerModel.onDidChangeActiveViewDescriptors(() => this.updateViewContainerEnablementContextKey(viewContainer)));
129133
this._register(this.registerOpenViewContainerAction(viewContainer));
130134
}
131135

@@ -159,6 +163,15 @@ export class ViewsService extends Disposable implements IViewsService {
159163
}
160164
}
161165

166+
private updateViewContainerEnablementContextKey(viewContainer: ViewContainer): void {
167+
let contextKey = this.enabledViewContainersContextKeys.get(viewContainer.id);
168+
if (!contextKey) {
169+
contextKey = this.contextKeyService.createKey(getEnabledViewContainerContextKey(viewContainer.id), false);
170+
this.enabledViewContainersContextKeys.set(viewContainer.id, contextKey);
171+
}
172+
contextKey.set(!(viewContainer.hideIfEmpty && this.viewDescriptorService.getViewContainerModel(viewContainer).activeViewDescriptors.length === 0));
173+
}
174+
162175
private async openComposite(compositeId: string, location: ViewContainerLocation, focus?: boolean): Promise<IPaneComposite | undefined> {
163176
return this.paneCompositeService.openPaneComposite(compositeId, location, focus);
164177
}
@@ -643,6 +656,8 @@ export class ViewsService extends Disposable implements IViewsService {
643656
}
644657
}
645658

659+
function getEnabledViewContainerContextKey(viewContainerId: string): string { return `viewContainer.${viewContainerId}.enabled`; }
660+
646661
function getPaneCompositeExtension(viewContainerLocation: ViewContainerLocation): string {
647662
switch (viewContainerLocation) {
648663
case ViewContainerLocation.AuxiliaryBar:

src/vs/workbench/common/contextkeys.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,6 @@ export const PanelMaximizedContext = new RawContextKey<boolean>('panelMaximized'
148148

149149
export const FocusedViewContext = new RawContextKey<string>('focusedView', '', localize('focusedView', "The identifier of the view that has keyboard focus"));
150150
export function getVisbileViewContextKey(viewId: string): string { return `view.${viewId}.visible`; }
151-
export function getEnabledViewContainerContextKey(viewContainerId: string): string { return `viewContainer.${viewContainerId}.enabled`; }
152151

153152
//#endregion
154153

0 commit comments

Comments
 (0)