From 0693d7cb307c8c613c4eef6e19c78acf14b80b72 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Wed, 6 Jan 2016 16:09:04 +0100 Subject: [PATCH] adopt menu and menuitem --- build/gulpfile.vscode.js | 2 +- src/typings/electron.d.ts | 2 +- src/vs/workbench/electron-main/menus.ts | 60 +++++++++---------- .../electron-browser/contextmenuService.ts | 15 ++--- 4 files changed, 37 insertions(+), 42 deletions(-) diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js index 1c164522287..d16c69433bb 100644 --- a/build/gulpfile.vscode.js +++ b/build/gulpfile.vscode.js @@ -32,7 +32,7 @@ var baseModules = [ 'applicationinsights', 'assert', 'child_process', 'chokidar', 'crypto', 'emmet', 'events', 'fs', 'getmac', 'glob', 'graceful-fs', 'http', 'http-proxy-agent', - 'https', 'https-proxy-agent', 'iconv-lite', 'electron', 'menu', 'menu-item', 'net', + 'https', 'https-proxy-agent', 'iconv-lite', 'electron', 'net', 'os', 'path', 'readline', 'remote', 'sax', 'semver', 'stream', 'string_decoder', 'url', 'vscode-textmate', 'winreg', 'yauzl', 'native-keymap' diff --git a/src/typings/electron.d.ts b/src/typings/electron.d.ts index 216a1c6e1f6..dd5c387d3d3 100644 --- a/src/typings/electron.d.ts +++ b/src/typings/electron.d.ts @@ -890,7 +890,7 @@ declare module Electron { * Should be specified for submenu type menu item, when it's specified the * type: 'submenu' can be omitted for the menu item */ - submenu?: MenuItemOptions[]; + submenu?: Menu; /** * Unique within a single menu. If defined then it can be used as a reference * to this item by the position attribute. diff --git a/src/vs/workbench/electron-main/menus.ts b/src/vs/workbench/electron-main/menus.ts index aa362d55421..588362e42c5 100644 --- a/src/vs/workbench/electron-main/menus.ts +++ b/src/vs/workbench/electron-main/menus.ts @@ -6,9 +6,7 @@ 'use strict'; -import Menu = require('menu'); -import MenuItem = require('menu-item'); -import {ipcMain as ipc, app, shell, dialog} from 'electron'; +import {ipcMain as ipc, app, shell, dialog, Menu, MenuItem} from 'electron'; import nls = require('vs/nls'); import platform = require('vs/base/common/platform'); @@ -151,7 +149,7 @@ export class VSCodeMenu { let menubar = new Menu(); // Mac: Application - let macApplicationMenuItem: MenuItem; + let macApplicationMenuItem: Electron.MenuItem; if (platform.isMacintosh) { let applicationMenu = new Menu(); macApplicationMenuItem = new MenuItem({ label: env.product.nameShort, submenu: applicationMenu }); @@ -179,7 +177,7 @@ export class VSCodeMenu { this.setGotoMenu(gotoMenu); // Mac: Window - let macWindowMenuItem: MenuItem; + let macWindowMenuItem: Electron.MenuItem; if (platform.isMacintosh) { let windowMenu = new Menu(); macWindowMenuItem = new MenuItem({ label: mnemonicLabel(nls.localize('mWindow', "Window")), submenu: windowMenu, role: 'window' }); @@ -273,7 +271,7 @@ export class VSCodeMenu { return mru; } - private setMacApplicationMenu(macApplicationMenu: Menu): void { + private setMacApplicationMenu(macApplicationMenu: Electron.Menu): void { let about = new MenuItem({ label: nls.localize('mAbout', "About {0}", env.product.nameLong), role: 'about' }); let checkForUpdates = this.getUpdateMenuItems(); let preferences = this.getPreferencesMenu(); @@ -298,10 +296,10 @@ export class VSCodeMenu { actions.forEach(i => macApplicationMenu.append(i)); } - private setFileMenu(fileMenu: Menu): void { + private setFileMenu(fileMenu: Electron.Menu): void { let hasNoWindows = (windows.manager.getWindowCount() === 0); - let newFile:MenuItem; + let newFile: Electron.MenuItem; if (hasNoWindows) { newFile = new MenuItem({ label: mnemonicLabel(nls.localize('miNewFile', "&&New File")), accelerator: this.getAccelerator('workbench.action.files.newUntitledFile'), click: () => windows.manager.openNewWindow() }); } else { @@ -355,7 +353,7 @@ export class VSCodeMenu { ]).forEach((item) => fileMenu.append(item)); } - private getPreferencesMenu(): MenuItem { + private getPreferencesMenu(): Electron.MenuItem { let userSettings = this.createMenuItem(nls.localize('miOpenSettings', "&&User Settings"), 'workbench.action.openGlobalSettings'); let workspaceSettings = this.createMenuItem(nls.localize('miOpenWorkspaceSettings', "&&Workspace Settings"), 'workbench.action.openWorkspaceSettings'); let kebindingSettings = this.createMenuItem(nls.localize('miOpenKeymap', "&&Keyboard Shortcuts"), 'workbench.action.openGlobalKeybindings'); @@ -393,7 +391,7 @@ export class VSCodeMenu { } } - private setOpenRecentMenu(openRecentMenu: Menu): void { + private setOpenRecentMenu(openRecentMenu: Electron.Menu): void { let recentList = this.getOpenedPathsList(); // Folders @@ -422,7 +420,7 @@ export class VSCodeMenu { } } - private createOpenRecentMenuItem(path:string): MenuItem { + private createOpenRecentMenuItem(path:string): Electron.MenuItem { return new MenuItem({ label: path, click: () => { let success = windows.manager.open({ cli: env.cliArgs, pathsToOpen: [path] }); if (!success) { @@ -432,8 +430,8 @@ export class VSCodeMenu { }}); } - private createRoleMenuItem(label:string, actionId:string, role:string): MenuItem { - let options:IMenuItemConfig = { + private createRoleMenuItem(label:string, actionId:string, role:string): Electron.MenuItem { + let options:Electron.MenuItemOptions = { label: mnemonicLabel(label), accelerator: this.getAccelerator(actionId), role: role, @@ -443,13 +441,13 @@ export class VSCodeMenu { return new MenuItem(options); } - private setEditMenu(winLinuxEditMenu: Menu): void { - let undo:MenuItem; - let redo:MenuItem; - let cut:MenuItem; - let copy:MenuItem; - let paste:MenuItem; - let selectAll:MenuItem; + private setEditMenu(winLinuxEditMenu: Electron.Menu): void { + let undo: Electron.MenuItem; + let redo: Electron.MenuItem; + let cut: Electron.MenuItem; + let copy: Electron.MenuItem; + let paste: Electron.MenuItem; + let selectAll: Electron.MenuItem; if (platform.isMacintosh) { undo = this.createDevToolsAwareMenuItem(nls.localize('miUndo', "&&Undo"), 'undo', (devTools) => devTools.undo()); @@ -487,7 +485,7 @@ export class VSCodeMenu { ].forEach((item) => winLinuxEditMenu.append(item)); } - private setViewMenu(viewMenu: Menu): void { + private setViewMenu(viewMenu: Electron.Menu): void { let commands = this.createMenuItem(nls.localize('miCommandPalette', "&&Command Palette..."), 'workbench.action.showCommands'); let markers = this.createMenuItem(nls.localize('miMarker', "&&Errors and Warnings..."), 'workbench.action.showErrorsWarnings'); let output = this.createMenuItem(nls.localize('miToggleOutput', "Toggle &&Output"), 'workbench.action.output.toggleOutput'); @@ -517,7 +515,7 @@ export class VSCodeMenu { ]).forEach((item) => viewMenu.append(item)); } - private setGotoMenu(gotoMenu: Menu): void { + private setGotoMenu(gotoMenu: Electron.Menu): void { let back = this.createMenuItem(nls.localize('miBack', "&&Back"), 'workbench.action.navigateBack'); let forward = this.createMenuItem(nls.localize('miForward', "&&Forward"), 'workbench.action.navigateForward'); let navigateHistory = this.createMenuItem(nls.localize('miNavigateHistory', "&&Navigate History"), 'workbench.action.openPreviousEditor'); @@ -539,7 +537,7 @@ export class VSCodeMenu { ].forEach((item) => gotoMenu.append(item)); } - private setMacWindowMenu(macWindowMenu: Menu): void { + private setMacWindowMenu(macWindowMenu: Electron.Menu): void { let minimize = new MenuItem({ label: nls.localize('mMinimize', "Minimize"), role: 'minimize', accelerator: 'Command+M', enabled: windows.manager.getWindowCount() > 0 }); let close = new MenuItem({ label: nls.localize('mClose', "Close"), role: 'close', accelerator: 'Command+W', enabled: windows.manager.getWindowCount() > 0 }); let bringAllToFront = new MenuItem({ label: nls.localize('mBringToFront', "Bring All to Front"), role: 'front', enabled: windows.manager.getWindowCount() > 0 }); @@ -552,7 +550,7 @@ export class VSCodeMenu { ].forEach((item) => macWindowMenu.append(item)); } - private setHelpMenu(helpMenu: Menu): void { + private setHelpMenu(helpMenu: Electron.Menu): void { let toggleDevToolsItem = new MenuItem({ label: mnemonicLabel(nls.localize('miToggleDevTools', "&&Toggle Developer Tools")), accelerator: this.getAccelerator('workbench.action.toggleDevTools'), @@ -587,7 +585,7 @@ export class VSCodeMenu { } } - private getUpdateMenuItems(): MenuItem[]{ + private getUpdateMenuItems(): Electron.MenuItem[]{ switch (UpdateManager.state) { case um.State.Uninitialized: return []; @@ -623,9 +621,9 @@ export class VSCodeMenu { } } - private createMenuItem(label:string, actionId: string, enabled?:boolean): MenuItem; - private createMenuItem(label:string, click:() => void, enabled?:boolean): MenuItem; - private createMenuItem(arg1:string, arg2:any, arg3?:boolean): MenuItem { + private createMenuItem(label:string, actionId: string, enabled?:boolean): Electron.MenuItem; + private createMenuItem(label:string, click:() => void, enabled?:boolean): Electron.MenuItem; + private createMenuItem(arg1:string, arg2:any, arg3?:boolean): Electron.MenuItem { let label = mnemonicLabel(arg1); let click:() => void = (typeof arg2 === 'function') ? arg2 : () => windows.manager.sendToFocused('vscode:runAction', arg2); let enabled = typeof arg3 === 'boolean' ? arg3 : windows.manager.getWindowCount() > 0; @@ -635,7 +633,7 @@ export class VSCodeMenu { actionId = arg2; } - let options:IMenuItemConfig = { + let options:Electron.MenuItemOptions = { label: label, accelerator: this.getAccelerator(actionId), click: click, @@ -645,7 +643,7 @@ export class VSCodeMenu { return new MenuItem(options); } - private createDevToolsAwareMenuItem(label:string, actionId: string, devToolsFocusedFn: (contents: WebContents) => void): MenuItem { + private createDevToolsAwareMenuItem(label:string, actionId: string, devToolsFocusedFn: (contents: WebContents) => void): Electron.MenuItem { return new MenuItem({ label: mnemonicLabel(label), accelerator: this.getAccelerator(actionId), @@ -724,7 +722,7 @@ function reportMenuActionTelemetry(id: string): void { windows.manager.sendToFocused('vscode:telemetry', { eventName: 'workbenchActionExecuted', data: { id, from: 'menu' } }); } -function __separator__(): MenuItem { +function __separator__(): Electron.MenuItem { return new MenuItem({ type: 'separator' }); } diff --git a/src/vs/workbench/services/contextview/electron-browser/contextmenuService.ts b/src/vs/workbench/services/contextview/electron-browser/contextmenuService.ts index 60f8e504ed1..8cb857b5b03 100644 --- a/src/vs/workbench/services/contextview/electron-browser/contextmenuService.ts +++ b/src/vs/workbench/services/contextview/electron-browser/contextmenuService.ts @@ -5,7 +5,7 @@ 'use strict'; -import { TPromise } from 'vs/base/common/winjs.base'; +import {TPromise} from 'vs/base/common/winjs.base'; import severity from 'vs/base/common/severity'; import actions = require('vs/base/common/actions'); import {Separator} from 'vs/base/browser/ui/actionbar/actionbar'; @@ -16,10 +16,7 @@ import {ITelemetryService} from 'vs/platform/telemetry/common/telemetry'; import {IMessageService} from 'vs/platform/message/common/message'; import {IKeybindingService} from 'vs/platform/keybinding/common/keybindingService'; -import remote = require('remote'); - -const Menu = remote.require('menu'); -const MenuItem = remote.require('menu-item'); +import {remote} from 'electron'; export class ContextMenuService implements IContextMenuService { public serviceId = IContextMenuService; @@ -39,26 +36,26 @@ export class ContextMenuService implements IContextMenuService { return TPromise.as(null); } - let menu = new Menu(); + let menu = new remote.Menu(); let actionToRun: actions.IAction = null; actions.forEach(a => { if (a instanceof Separator) { - menu.append(new MenuItem({ type: 'separator' })); + menu.append(new remote.MenuItem({ type: 'separator' })); } else { const keybinding = !!delegate.getKeyBinding ? delegate.getKeyBinding(a) : undefined; const accelerator = keybinding && this.keybindingService.getElectronAcceleratorFor(keybinding); - const item = new MenuItem({ + const item = new remote.MenuItem({ label: a.label, checked: a.checked, accelerator, + enabled: a.enabled, click: () => { actionToRun = a; } }); - item.enabled = a.enabled; menu.append(item); } });