From 69c7383da82bafc401e601123e6ea3e699f0b637 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Sp=C3=B6nemann?= Date: Wed, 26 Feb 2020 09:43:32 +0100 Subject: [PATCH] Update Electron main menu when a toggle button is switched --- .../browser/arduino-frontend-contribution.tsx | 10 ++++++++-- .../src/browser/editor-mode.ts | 3 +++ .../electron-arduino-menu-contribution.ts | 20 ++++++++++++++++++- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx b/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx index 445bf759..4878840f 100644 --- a/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx +++ b/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx @@ -301,7 +301,10 @@ export class ArduinoFrontendContribution implements FrontendApplicationContribut }); registry.registerCommand(ArduinoCommands.TOGGLE_COMPILE_FOR_DEBUG, { - execute: () => this.editorMode.toggleCompileForDebug(), + execute: () => { + this.editorMode.toggleCompileForDebug(); + this.editorMode.menuContentChanged.fire(); + }, isToggled: () => this.editorMode.compileForDebug }); @@ -416,7 +419,10 @@ export class ArduinoFrontendContribution implements FrontendApplicationContribut }); registry.registerCommand(ArduinoCommands.TOGGLE_ADVANCED_MODE, { - execute: () => this.editorMode.toggleProMode(), + execute: () => { + this.editorMode.toggleProMode(); + this.editorMode.menuContentChanged.fire(); + }, isVisible: widget => ArduinoToolbar.is(widget) && widget.side === 'right', isToggled: () => this.editorMode.proMode }); diff --git a/arduino-ide-extension/src/browser/editor-mode.ts b/arduino-ide-extension/src/browser/editor-mode.ts index 857ee75b..71125d50 100644 --- a/arduino-ide-extension/src/browser/editor-mode.ts +++ b/arduino-ide-extension/src/browser/editor-mode.ts @@ -1,4 +1,5 @@ import { injectable } from 'inversify'; +import { Emitter } from '@theia/core/lib/common/event'; import { ApplicationShell, FrontendApplicationContribution, FrontendApplication } from '@theia/core/lib/browser'; import { ArduinoShellLayoutRestorer } from './shell/arduino-shell-layout-restorer'; import { OutputWidget } from '@theia/output/lib/browser/output-widget'; @@ -7,6 +8,8 @@ import { EditorWidget } from '@theia/editor/lib/browser'; @injectable() export class EditorMode implements FrontendApplicationContribution { + readonly menuContentChanged = new Emitter(); + protected app: FrontendApplication; onStart(app: FrontendApplication): void { diff --git a/arduino-ide-extension/src/electron-browser/electron-arduino-menu-contribution.ts b/arduino-ide-extension/src/electron-browser/electron-arduino-menu-contribution.ts index 4fce50ef..4559c6d7 100644 --- a/arduino-ide-extension/src/electron-browser/electron-arduino-menu-contribution.ts +++ b/arduino-ide-extension/src/electron-browser/electron-arduino-menu-contribution.ts @@ -1,9 +1,27 @@ -import { injectable } from 'inversify'; +import * as electron from 'electron'; +import { injectable, inject, postConstruct } from 'inversify'; +import { isOSX } from '@theia/core/lib/common/os'; import { ElectronMenuContribution } from '@theia/core/lib/electron-browser/menu/electron-menu-contribution'; +import { EditorMode } from '../browser/editor-mode'; @injectable() export class ElectronArduinoMenuContribution extends ElectronMenuContribution { + @inject(EditorMode) + protected readonly editorMode: EditorMode; + + @postConstruct() + protected init(): void { + this.editorMode.menuContentChanged.event(() => { + const createdMenuBar = this.factory.createMenuBar(); + if (isOSX) { + electron.remote.Menu.setApplicationMenu(createdMenuBar); + } else { + electron.remote.getCurrentWindow().setMenu(createdMenuBar); + } + }); + } + protected hideTopPanel(): void { // NOOP // We reuse the `div` for the Arduino toolbar.