From ab294b07692db32bcbb23a89a0295ea521eecf6e Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Mon, 7 Nov 2016 10:11:55 +0100 Subject: [PATCH] fix developer related actions --- src/vs/workbench/electron-browser/actions.ts | 2 +- .../electron-browser/bootstrap/index.js | 21 +++++++++++++++---- .../workbench/electron-browser/integration.ts | 19 ++++++++++++++++- .../electron-browser/main.contribution.ts | 6 +----- 4 files changed, 37 insertions(+), 11 deletions(-) diff --git a/src/vs/workbench/electron-browser/actions.ts b/src/vs/workbench/electron-browser/actions.ts index 7f1819e811b..dc8b2ffea78 100644 --- a/src/vs/workbench/electron-browser/actions.ts +++ b/src/vs/workbench/electron-browser/actions.ts @@ -189,7 +189,7 @@ export class ToggleDevToolsAction extends Action { super(id, label); } - run(): TPromise { + public run(): TPromise { return this.windowsService.toggleDevTools(); } } diff --git a/src/vs/workbench/electron-browser/bootstrap/index.js b/src/vs/workbench/electron-browser/bootstrap/index.js index d61e362bb9d..f8b8a813334 100644 --- a/src/vs/workbench/electron-browser/bootstrap/index.js +++ b/src/vs/workbench/electron-browser/bootstrap/index.js @@ -62,6 +62,7 @@ function uriFromPath(_path) { function registerListeners(enableDeveloperTools) { // Devtools & reload support + var listener; if (enableDeveloperTools) { const extractKey = function (e) { return [ @@ -76,17 +77,25 @@ function registerListeners(enableDeveloperTools) { const TOGGLE_DEV_TOOLS_KB = (process.platform === 'darwin' ? 'meta-alt-73' : 'ctrl-shift-73'); // mac: Cmd-Alt-I, rest: Ctrl-Shift-I const RELOAD_KB = (process.platform === 'darwin' ? 'meta-82' : 'ctrl-82'); // mac: Cmd-R, rest: Ctrl-R - window.addEventListener('keydown', function (e) { + listener = function (e) { const key = extractKey(e); if (key === TOGGLE_DEV_TOOLS_KB) { remote.getCurrentWebContents().toggleDevTools(); } else if (key === RELOAD_KB) { remote.getCurrentWindow().reload(); } - }); + }; + window.addEventListener('keydown', listener); } process.on('uncaughtException', function (error) { onError(error, enableDeveloperTools) }); + + return function () { + if (listener) { + window.removeEventListener('keydown', listener); + listener = void 0; + } + } } function main() { @@ -117,7 +126,7 @@ function main() { window.document.documentElement.setAttribute('lang', locale); const enableDeveloperTools = process.env['VSCODE_DEV'] || !!configuration.extensionDevelopmentPath; - registerListeners(enableDeveloperTools); + const unbind = registerListeners(enableDeveloperTools); // disable pinch zoom & apply zoom level early to avoid glitches const zoomLevel = configuration.zoomLevel; @@ -169,7 +178,11 @@ function main() { require('vs/workbench/electron-browser/main') .startup(configuration) - .done(null, function (error) { onError(error, enableDeveloperTools); }); + .done(function () { + unbind(); // since the workbench is running, unbind our developer related listeners and let the workbench handle them + }, function (error) { + onError(error, enableDeveloperTools); + }); }); }); } diff --git a/src/vs/workbench/electron-browser/integration.ts b/src/vs/workbench/electron-browser/integration.ts index 763fa81bdb4..6ea1a5483ed 100644 --- a/src/vs/workbench/electron-browser/integration.ts +++ b/src/vs/workbench/electron-browser/integration.ts @@ -6,7 +6,10 @@ 'use strict'; import nls = require('vs/nls'); +import { Registry } from 'vs/platform/platform'; import { TPromise } from 'vs/base/common/winjs.base'; +import { IWorkbenchActionRegistry, Extensions } from 'vs/workbench/common/actionRegistry'; +import { SyncActionDescriptor } from 'vs/platform/actions/common/actions'; import errors = require('vs/base/common/errors'); import types = require('vs/base/common/types'); import arrays = require('vs/base/common/arrays'); @@ -35,6 +38,9 @@ import { IResourceInput } from 'vs/platform/editor/common/editor'; import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService'; import { IUntitledEditorService } from 'vs/workbench/services/untitled/common/untitledEditorService'; import URI from 'vs/base/common/uri'; +import { ReloadWindowAction, ToggleDevToolsAction, ShowStartupPerformance } from 'vs/workbench/electron-browser/actions'; +import { IEnvironmentService } from 'vs/platform/environment/common/environment'; +import { KeyMod, KeyCode } from 'vs/base/common/keyCodes'; import { ipcRenderer as ipc, webFrame, remote } from 'electron'; @@ -68,7 +74,8 @@ export class ElectronIntegration { @IMessageService private messageService: IMessageService, @IContextMenuService private contextMenuService: IContextMenuService, @IWorkbenchEditorService private editorService: IWorkbenchEditorService, - @IUntitledEditorService private untitledEditorService: IUntitledEditorService + @IUntitledEditorService private untitledEditorService: IUntitledEditorService, + @IEnvironmentService private environmentService: IEnvironmentService ) { } @@ -192,6 +199,16 @@ export class ElectronIntegration { } } }); + + // Developer related actions + const developerCategory = nls.localize('developer', "Developer"); + const workbenchActionsRegistry = Registry.as(Extensions.WorkbenchActions); + const isDeveloping = !this.environmentService.isBuilt || !!this.environmentService.extensionDevelopmentPath; + workbenchActionsRegistry.registerWorkbenchAction(new SyncActionDescriptor(ReloadWindowAction, ReloadWindowAction.ID, ReloadWindowAction.LABEL, isDeveloping ? { primary: KeyMod.CtrlCmd | KeyCode.KEY_R } : void 0), 'Reload Window'); + workbenchActionsRegistry.registerWorkbenchAction(new SyncActionDescriptor(ToggleDevToolsAction, ToggleDevToolsAction.ID, ToggleDevToolsAction.LABEL, isDeveloping ? { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_I, mac: { primary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.KEY_I } } : void 0), 'Developer: Toggle Developer Tools', developerCategory); + if (this.environmentService.performance) { + workbenchActionsRegistry.registerWorkbenchAction(new SyncActionDescriptor(ShowStartupPerformance, ShowStartupPerformance.ID, ShowStartupPerformance.LABEL), 'Developer: Startup Performance', developerCategory); + } } private resolveKeybindings(actionIds: string[]): TPromise<{ id: string; binding: number; }[]> { diff --git a/src/vs/workbench/electron-browser/main.contribution.ts b/src/vs/workbench/electron-browser/main.contribution.ts index 8e07014b83a..951b6219cb6 100644 --- a/src/vs/workbench/electron-browser/main.contribution.ts +++ b/src/vs/workbench/electron-browser/main.contribution.ts @@ -16,7 +16,7 @@ import platform = require('vs/base/common/platform'); import { IKeybindings } from 'vs/platform/keybinding/common/keybinding'; import { KeybindingsRegistry } from 'vs/platform/keybinding/common/keybindingsRegistry'; import { IWindowIPCService } from 'vs/workbench/services/window/electron-browser/windowService'; -import { CloseEditorAction, ReloadWindowAction, ShowStartupPerformance, ReportIssueAction, ZoomResetAction, ZoomOutAction, ZoomInAction, ToggleDevToolsAction, ToggleFullScreenAction, ToggleMenuBarAction, OpenRecentAction, CloseFolderAction, CloseWindowAction, SwitchWindow, NewWindowAction, CloseMessagesAction } from 'vs/workbench/electron-browser/actions'; +import { CloseEditorAction, ReportIssueAction, ZoomResetAction, ZoomOutAction, ZoomInAction, ToggleFullScreenAction, ToggleMenuBarAction, OpenRecentAction, CloseFolderAction, CloseWindowAction, SwitchWindow, NewWindowAction, CloseMessagesAction } from 'vs/workbench/electron-browser/actions'; import { MessagesVisibleContext, NoEditorsVisibleContext } from 'vs/workbench/electron-browser/workbench'; const closeEditorOrWindowKeybindings: IKeybindings = { primary: KeyMod.CtrlCmd | KeyCode.KEY_W, win: { primary: KeyMod.CtrlCmd | KeyCode.F4, secondary: [KeyMod.CtrlCmd | KeyCode.KEY_W] } }; @@ -24,7 +24,6 @@ const closeEditorOrWindowKeybindings: IKeybindings = { primary: KeyMod.CtrlCmd | // Contribute Global Actions const viewCategory = nls.localize('view', "View"); const helpCategory = nls.localize('help', "Help"); -const developerCategory = nls.localize('developer', "Developer"); const fileCategory = nls.localize('file', "File"); const workbenchActionsRegistry = Registry.as(Extensions.WorkbenchActions); workbenchActionsRegistry.registerWorkbenchAction(new SyncActionDescriptor(NewWindowAction, NewWindowAction.ID, NewWindowAction.LABEL, { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_N }), 'New Window'); @@ -32,7 +31,6 @@ workbenchActionsRegistry.registerWorkbenchAction(new SyncActionDescriptor(CloseW workbenchActionsRegistry.registerWorkbenchAction(new SyncActionDescriptor(SwitchWindow, SwitchWindow.ID, SwitchWindow.LABEL), 'Switch Window'); workbenchActionsRegistry.registerWorkbenchAction(new SyncActionDescriptor(CloseFolderAction, CloseFolderAction.ID, CloseFolderAction.LABEL, { primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyCode.KEY_F) }), 'File: Close Folder', fileCategory); workbenchActionsRegistry.registerWorkbenchAction(new SyncActionDescriptor(OpenRecentAction, OpenRecentAction.ID, OpenRecentAction.LABEL, { primary: KeyMod.CtrlCmd | KeyCode.KEY_R, mac: { primary: KeyMod.WinCtrl | KeyCode.KEY_R } }), 'File: Open Recent', fileCategory); -workbenchActionsRegistry.registerWorkbenchAction(new SyncActionDescriptor(ToggleDevToolsAction, ToggleDevToolsAction.ID, ToggleDevToolsAction.LABEL), 'Developer: Toggle Developer Tools', developerCategory); if (!!product.reportIssueUrl) { workbenchActionsRegistry.registerWorkbenchAction(new SyncActionDescriptor(ReportIssueAction, ReportIssueAction.ID, ReportIssueAction.LABEL), 'Help: Report Issues', helpCategory); } @@ -45,8 +43,6 @@ workbenchActionsRegistry.registerWorkbenchAction( }), 'View: Zoom Out', viewCategory ); workbenchActionsRegistry.registerWorkbenchAction(new SyncActionDescriptor(ZoomResetAction, ZoomResetAction.ID, ZoomResetAction.LABEL), 'View: Reset Zoom', viewCategory); -workbenchActionsRegistry.registerWorkbenchAction(new SyncActionDescriptor(ShowStartupPerformance, ShowStartupPerformance.ID, ShowStartupPerformance.LABEL), 'Developer: Startup Performance', developerCategory); -workbenchActionsRegistry.registerWorkbenchAction(new SyncActionDescriptor(ReloadWindowAction, ReloadWindowAction.ID, ReloadWindowAction.LABEL), 'Reload Window'); workbenchActionsRegistry.registerWorkbenchAction(new SyncActionDescriptor(CloseMessagesAction, CloseMessagesAction.ID, CloseMessagesAction.LABEL, { primary: KeyCode.Escape, secondary: [KeyMod.Shift | KeyCode.Escape] }, MessagesVisibleContext), 'Close Notification Messages'); workbenchActionsRegistry.registerWorkbenchAction(new SyncActionDescriptor(CloseEditorAction, CloseEditorAction.ID, CloseEditorAction.LABEL, closeEditorOrWindowKeybindings), 'View: Close Editor', viewCategory); workbenchActionsRegistry.registerWorkbenchAction(new SyncActionDescriptor(ToggleFullScreenAction, ToggleFullScreenAction.ID, ToggleFullScreenAction.LABEL, { primary: KeyCode.F11, mac: { primary: KeyMod.CtrlCmd | KeyMod.WinCtrl | KeyCode.KEY_F } }), 'View: Toggle Full Screen', viewCategory);