Skip to content

Commit 798047c

Browse files
author
Benjamin Pasero
committed
web - contribute a "Go Home" menu action if we have a home indicator
1 parent a006879 commit 798047c

2 files changed

Lines changed: 43 additions & 8 deletions

File tree

src/vs/code/browser/workbench/workbench.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { request } from 'vs/base/parts/request/browser/request';
1212
import { isFolderToOpen, isWorkspaceToOpen } from 'vs/platform/windows/common/windows';
1313
import { isEqual } from 'vs/base/common/resources';
1414
import { isStandalone } from 'vs/base/browser/browser';
15+
import { localize } from 'vs/nls';
1516

1617
interface ICredential {
1718
service: string;
@@ -345,6 +346,11 @@ class WorkspaceProvider implements IWorkspaceProvider {
345346
// Finally create workbench
346347
create(document.body, {
347348
...config,
349+
homeIndicator: {
350+
href: 'https://github.com/Microsoft/vscode',
351+
icon: 'code',
352+
title: localize('home', "Home")
353+
},
348354
workspaceProvider: new WorkspaceProvider(workspace, payload),
349355
urlCallbackProvider: new PollingURLCallbackProvider(),
350356
credentialsProvider: new LocalStorageCredentialsProvider()

src/vs/workbench/browser/actions/navigationActions.ts

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,13 @@ import { IWorkbenchLayoutService, Parts } from 'vs/workbench/services/layout/bro
1212
import { IViewletService } from 'vs/workbench/services/viewlet/browser/viewlet';
1313
import { IViewlet } from 'vs/workbench/common/viewlet';
1414
import { IPanel } from 'vs/workbench/common/panel';
15-
import { SyncActionDescriptor } from 'vs/platform/actions/common/actions';
15+
import { Action2, MenuId, registerAction2, SyncActionDescriptor } from 'vs/platform/actions/common/actions';
1616
import { IWorkbenchActionRegistry, Extensions } from 'vs/workbench/common/actions';
1717
import { Direction } from 'vs/base/browser/ui/grid/grid';
1818
import { KeyCode, KeyMod } from 'vs/base/common/keyCodes';
19+
import { IWorkbenchContribution, IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions } from 'vs/workbench/common/contributions';
20+
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
21+
import { LifecyclePhase } from 'vs/platform/lifecycle/common/lifecycle';
1922

2023
abstract class BaseNavigationAction extends Action {
2124

@@ -257,12 +260,38 @@ export class FocusPreviousPart extends Action {
257260
}
258261
}
259262

260-
const registry = Registry.as<IWorkbenchActionRegistry>(Extensions.WorkbenchActions);
263+
class GoHomeContributor implements IWorkbenchContribution {
264+
265+
constructor(
266+
@IWorkbenchEnvironmentService environmentService: IWorkbenchEnvironmentService
267+
) {
268+
const homeIndicator = environmentService.options?.homeIndicator;
269+
if (homeIndicator) {
270+
registerAction2(class extends Action2 {
271+
constructor() {
272+
super({
273+
id: `workbench.actions.goHome`,
274+
title: nls.localize('goHome', "Go Home"),
275+
menu: { id: MenuId.MenubarWebNavigationMenu }
276+
});
277+
}
278+
async run(): Promise<void> {
279+
window.location.href = homeIndicator.href;
280+
}
281+
});
282+
}
283+
}
284+
}
285+
286+
const actionsRegistry = Registry.as<IWorkbenchActionRegistry>(Extensions.WorkbenchActions);
261287
const viewCategory = nls.localize('view', "View");
262288

263-
registry.registerWorkbenchAction(SyncActionDescriptor.from(NavigateUpAction, undefined), 'View: Navigate to the View Above', viewCategory);
264-
registry.registerWorkbenchAction(SyncActionDescriptor.from(NavigateDownAction, undefined), 'View: Navigate to the View Below', viewCategory);
265-
registry.registerWorkbenchAction(SyncActionDescriptor.from(NavigateLeftAction, undefined), 'View: Navigate to the View on the Left', viewCategory);
266-
registry.registerWorkbenchAction(SyncActionDescriptor.from(NavigateRightAction, undefined), 'View: Navigate to the View on the Right', viewCategory);
267-
registry.registerWorkbenchAction(SyncActionDescriptor.from(FocusNextPart, { primary: KeyCode.F6 }), 'View: Focus Next Part', viewCategory);
268-
registry.registerWorkbenchAction(SyncActionDescriptor.from(FocusPreviousPart, { primary: KeyMod.Shift | KeyCode.F6 }), 'View: Focus Previous Part', viewCategory);
289+
actionsRegistry.registerWorkbenchAction(SyncActionDescriptor.from(NavigateUpAction, undefined), 'View: Navigate to the View Above', viewCategory);
290+
actionsRegistry.registerWorkbenchAction(SyncActionDescriptor.from(NavigateDownAction, undefined), 'View: Navigate to the View Below', viewCategory);
291+
actionsRegistry.registerWorkbenchAction(SyncActionDescriptor.from(NavigateLeftAction, undefined), 'View: Navigate to the View on the Left', viewCategory);
292+
actionsRegistry.registerWorkbenchAction(SyncActionDescriptor.from(NavigateRightAction, undefined), 'View: Navigate to the View on the Right', viewCategory);
293+
actionsRegistry.registerWorkbenchAction(SyncActionDescriptor.from(FocusNextPart, { primary: KeyCode.F6 }), 'View: Focus Next Part', viewCategory);
294+
actionsRegistry.registerWorkbenchAction(SyncActionDescriptor.from(FocusPreviousPart, { primary: KeyMod.Shift | KeyCode.F6 }), 'View: Focus Previous Part', viewCategory);
295+
296+
const workbenchRegistry = Registry.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench);
297+
workbenchRegistry.registerWorkbenchContribution(GoHomeContributor, LifecyclePhase.Ready);

0 commit comments

Comments
 (0)