From 47644ab7c8266f9fa4e58f9caf6e1216a4db2ef6 Mon Sep 17 00:00:00 2001 From: Akos Kitta Date: Tue, 6 Dec 2022 17:24:57 +0100 Subject: [PATCH] fix: `Preferences` menu enablement defect Manually update the menus when executing the command. Also disabled the menu when the settings dialog is opened. closes #1735 Signed-off-by: Akos Kitta --- .../browser/arduino-ide-frontend-module.ts | 4 +-- .../{settings.ts => open-settings.ts} | 33 +++++++++++-------- 2 files changed, 21 insertions(+), 16 deletions(-) rename arduino-ide-extension/src/browser/contributions/{settings.ts => open-settings.ts} (71%) 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 22ea313f2..b8d797f22 100644 --- a/arduino-ide-extension/src/browser/arduino-ide-frontend-module.ts +++ b/arduino-ide-extension/src/browser/arduino-ide-frontend-module.ts @@ -127,7 +127,7 @@ import { PreferencesContribution as TheiaPreferencesContribution } from '@theia/ import { PreferencesContribution } from './theia/preferences/preferences-contribution'; import { QuitApp } from './contributions/quit-app'; import { SketchControl } from './contributions/sketch-control'; -import { Settings } from './contributions/settings'; +import { OpenSettings } from './contributions/open-settings'; import { WorkspaceCommandContribution } from './theia/workspace/workspace-commands'; import { WorkspaceDeleteHandler as TheiaWorkspaceDeleteHandler } from '@theia/workspace/lib/browser/workspace-delete-handler'; import { WorkspaceDeleteHandler } from './theia/workspace/workspace-delete-handler'; @@ -691,7 +691,7 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => { Contribution.configure(bind, EditContributions); Contribution.configure(bind, QuitApp); Contribution.configure(bind, SketchControl); - Contribution.configure(bind, Settings); + Contribution.configure(bind, OpenSettings); Contribution.configure(bind, BurnBootloader); Contribution.configure(bind, BuiltInExamples); Contribution.configure(bind, LibraryExamples); diff --git a/arduino-ide-extension/src/browser/contributions/settings.ts b/arduino-ide-extension/src/browser/contributions/open-settings.ts similarity index 71% rename from arduino-ide-extension/src/browser/contributions/settings.ts rename to arduino-ide-extension/src/browser/contributions/open-settings.ts index bb7c83f00..0cbab70c0 100644 --- a/arduino-ide-extension/src/browser/contributions/settings.ts +++ b/arduino-ide-extension/src/browser/contributions/open-settings.ts @@ -1,32 +1,37 @@ +import { nls } from '@theia/core/lib/common/nls'; import { inject, injectable } from '@theia/core/shared/inversify'; +import { MainMenuManager } from '../../common/main-menu-manager'; +import type { Settings } from '../dialogs/settings/settings'; +import { SettingsDialog } from '../dialogs/settings/settings-dialog'; +import { ArduinoMenus } from '../menu/arduino-menus'; import { Command, - MenuModelRegistry, CommandRegistry, - SketchContribution, KeybindingRegistry, + MenuModelRegistry, + SketchContribution, } from './contribution'; -import { ArduinoMenus } from '../menu/arduino-menus'; -import { Settings as Preferences } from '../dialogs/settings/settings'; -import { SettingsDialog } from '../dialogs/settings/settings-dialog'; -import { nls } from '@theia/core/lib/common'; @injectable() -export class Settings extends SketchContribution { +export class OpenSettings extends SketchContribution { @inject(SettingsDialog) - protected readonly settingsDialog: SettingsDialog; + private readonly settingsDialog: SettingsDialog; + @inject(MainMenuManager) + private readonly menuManager: MainMenuManager; - protected settingsOpened = false; + private settingsOpened = false; override registerCommands(registry: CommandRegistry): void { - registry.registerCommand(Settings.Commands.OPEN, { + registry.registerCommand(OpenSettings.Commands.OPEN, { execute: async () => { - let settings: Preferences | undefined = undefined; + let settings: Settings | undefined = undefined; try { this.settingsOpened = true; + this.menuManager.update(); settings = await this.settingsDialog.open(); } finally { this.settingsOpened = false; + this.menuManager.update(); } if (settings) { await this.settingsService.update(settings); @@ -41,7 +46,7 @@ export class Settings extends SketchContribution { override registerMenus(registry: MenuModelRegistry): void { registry.registerMenuAction(ArduinoMenus.FILE__PREFERENCES_GROUP, { - commandId: Settings.Commands.OPEN.id, + commandId: OpenSettings.Commands.OPEN.id, label: nls.localize( 'vscode/preferences.contribution/preferences', @@ -57,13 +62,13 @@ export class Settings extends SketchContribution { override registerKeybindings(registry: KeybindingRegistry): void { registry.registerKeybinding({ - command: Settings.Commands.OPEN.id, + command: OpenSettings.Commands.OPEN.id, keybinding: 'CtrlCmd+,', }); } } -export namespace Settings { +export namespace OpenSettings { export namespace Commands { export const OPEN: Command = { id: 'arduino-settings-open',