diff --git a/arduino-ide-extension/src/browser/arduino-ide-frontend-module.ts b/arduino-ide-extension/src/browser/arduino-ide-frontend-module.ts index 326eb9d3..00b21f99 100644 --- a/arduino-ide-extension/src/browser/arduino-ide-frontend-module.ts +++ b/arduino-ide-extension/src/browser/arduino-ide-frontend-module.ts @@ -100,6 +100,7 @@ import { EditContributions } from './contributions/edit-contributions'; import { OpenSketchExternal } from './contributions/open-sketch-external'; import { PreferencesContribution as TheiaPreferencesContribution } from '@theia/preferences/lib/browser/preference-contribution'; import { PreferencesContribution } from './theia/preferences/preference-contribution'; +import { QuitApp } from './contributions/quit-app'; const ElementQueries = require('css-element-queries/src/ElementQueries'); @@ -327,4 +328,5 @@ export default new ContainerModule((bind: interfaces.Bind, unbind: interfaces.Un Contribution.configure(bind, UploadSketch); Contribution.configure(bind, OpenSketchExternal); Contribution.configure(bind, EditContributions); + Contribution.configure(bind, QuitApp); }); diff --git a/arduino-ide-extension/src/browser/contributions/quit-app.ts b/arduino-ide-extension/src/browser/contributions/quit-app.ts new file mode 100644 index 00000000..809c9adb --- /dev/null +++ b/arduino-ide-extension/src/browser/contributions/quit-app.ts @@ -0,0 +1,39 @@ +import { injectable } from 'inversify'; +import { remote } from 'electron'; +import { isOSX, isWindows } from '@theia/core/lib/common/os'; +import { Contribution, Command, MenuModelRegistry, KeybindingRegistry, CommandRegistry } from './contribution'; +import { ArduinoMenus } from '../menu/arduino-menus'; + +@injectable() +export class QuitApp extends Contribution { + + registerCommands(registry: CommandRegistry): void { + registry.registerCommand(QuitApp.Commands.QUIT_APP, { + execute: () => remote.app.quit() + }); + } + + registerMenus(registry: MenuModelRegistry): void { + registry.registerMenuAction(ArduinoMenus.FILE__QUIT_GROUP, { + commandId: QuitApp.Commands.QUIT_APP.id, + label: 'Quit', + order: '0' + }); + } + + registerKeybindings(registry: KeybindingRegistry): void { + registry.registerKeybinding({ + command: QuitApp.Commands.QUIT_APP.id, + keybinding: isOSX ? 'CtrlCmd+Q' : isWindows ? 'Alt+F4' : 'Ctrl+Q' + }); + } + +} + +export namespace QuitApp { + export namespace Commands { + export const QUIT_APP: Command = { + id: 'arduino-quit-app' + }; + } +} diff --git a/arduino-ide-extension/src/browser/menu/arduino-menus.ts b/arduino-ide-extension/src/browser/menu/arduino-menus.ts index 200eb05a..0685de28 100644 --- a/arduino-ide-extension/src/browser/menu/arduino-menus.ts +++ b/arduino-ide-extension/src/browser/menu/arduino-menus.ts @@ -7,6 +7,8 @@ export namespace ArduinoMenus { // File export const FILE__SKETCH_GROUP = [...CommonMenus.FILE, '0_sketch']; export const FILE__PRINT_GROUP = [...CommonMenus.FILE, '1_print']; + export const FILE__SETTINGS_GROUP = [...CommonMenus.FILE, '2_settings']; + export const FILE__QUIT_GROUP = [...CommonMenus.FILE, '3_quit']; // Edit export const EDIT__TEXT_CONTROL_GROUP = [...CommonMenus.EDIT, '2_text_control']; // `Copy`, `Copy to Forum`, `Paste`, etc. Note: `1_undo` is the first group from Theia