Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/platform/menubar/electron-main/menubarMainService.ts
3296 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { createDecorator, IInstantiationService } from '../../instantiation/common/instantiation.js';
7
import { ILifecycleMainService, LifecycleMainPhase } from '../../lifecycle/electron-main/lifecycleMainService.js';
8
import { ILogService } from '../../log/common/log.js';
9
import { ICommonMenubarService, IMenubarData } from '../common/menubar.js';
10
import { Menubar } from './menubar.js';
11
import { Disposable } from '../../../base/common/lifecycle.js';
12
13
export const IMenubarMainService = createDecorator<IMenubarMainService>('menubarMainService');
14
15
export interface IMenubarMainService extends ICommonMenubarService {
16
readonly _serviceBrand: undefined;
17
}
18
19
export class MenubarMainService extends Disposable implements IMenubarMainService {
20
21
declare readonly _serviceBrand: undefined;
22
23
private readonly menubar: Promise<Menubar>;
24
25
constructor(
26
@IInstantiationService private readonly instantiationService: IInstantiationService,
27
@ILifecycleMainService private readonly lifecycleMainService: ILifecycleMainService,
28
@ILogService private readonly logService: ILogService
29
) {
30
super();
31
32
this.menubar = this.installMenuBarAfterWindowOpen();
33
}
34
35
private async installMenuBarAfterWindowOpen(): Promise<Menubar> {
36
await this.lifecycleMainService.when(LifecycleMainPhase.AfterWindowOpen);
37
38
return this._register(this.instantiationService.createInstance(Menubar));
39
}
40
41
async updateMenubar(windowId: number, menus: IMenubarData): Promise<void> {
42
this.logService.trace('menubarService#updateMenubar', windowId);
43
44
const menubar = await this.menubar;
45
menubar.updateMenu(menus, windowId);
46
}
47
}
48
49