From 1500df71c97fe8bb6a90b10b6afc9b7d6312c192 Mon Sep 17 00:00:00 2001 From: Akos Kitta Date: Mon, 21 Aug 2023 13:03:33 +0200 Subject: [PATCH] fix: falsy context menu `handlerId` The very first context menu item with ID `0` has not had a click handler Ref: eclipse-theia/theia#12500 Signed-off-by: Akos Kitta --- .../arduino-electron-main-module.ts | 6 +++ .../src/electron-main/theia/theia-api-main.ts | 40 +++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 arduino-ide-extension/src/electron-main/theia/theia-api-main.ts diff --git a/arduino-ide-extension/src/electron-main/arduino-electron-main-module.ts b/arduino-ide-extension/src/electron-main/arduino-electron-main-module.ts index b1a1bfd10..e02635423 100644 --- a/arduino-ide-extension/src/electron-main/arduino-electron-main-module.ts +++ b/arduino-ide-extension/src/electron-main/arduino-electron-main-module.ts @@ -1,6 +1,7 @@ import { JsonRpcConnectionHandler } from '@theia/core/lib/common/messaging/proxy-factory'; import { ElectronMainWindowService } from '@theia/core/lib/electron-common/electron-main-window-service'; import { ElectronConnectionHandler } from '@theia/core/lib/electron-common/messaging/electron-connection-handler'; +import { TheiaMainApi } from '@theia/core/lib/electron-main/electron-api-main'; import { ElectronMainApplication as TheiaElectronMainApplication, ElectronMainApplicationContribution, @@ -17,6 +18,7 @@ import { ElectronArduino } from './electron-arduino'; import { IDEUpdaterImpl } from './ide-updater/ide-updater-impl'; import { ElectronMainApplication } from './theia/electron-main-application'; import { ElectronMainWindowServiceImpl } from './theia/electron-main-window-service'; +import { TheiaMainApiFixFalsyHandlerId } from './theia/theia-api-main'; import { TheiaElectronWindow } from './theia/theia-electron-window'; export default new ContainerModule((bind, unbind, isBound, rebind) => { @@ -52,4 +54,8 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => { bind(ElectronArduino).toSelf().inSingletonScope(); bind(ElectronMainApplicationContribution).toService(ElectronArduino); + + // eclipse-theia/theia#12500 + bind(TheiaMainApiFixFalsyHandlerId).toSelf().inSingletonScope(); + rebind(TheiaMainApi).toService(TheiaMainApiFixFalsyHandlerId); }); diff --git a/arduino-ide-extension/src/electron-main/theia/theia-api-main.ts b/arduino-ide-extension/src/electron-main/theia/theia-api-main.ts new file mode 100644 index 000000000..90dac13d3 --- /dev/null +++ b/arduino-ide-extension/src/electron-main/theia/theia-api-main.ts @@ -0,0 +1,40 @@ +import { + CHANNEL_INVOKE_MENU, + InternalMenuDto, +} from '@theia/core/lib/electron-common/electron-api'; +import { TheiaMainApi } from '@theia/core/lib/electron-main/electron-api-main'; +import { injectable } from '@theia/core/shared/inversify'; +import { MenuItemConstructorOptions } from '@theia/electron/shared/electron'; + +@injectable() +export class TheiaMainApiFixFalsyHandlerId extends TheiaMainApi { + override fromMenuDto( + sender: Electron.WebContents, + menuId: number, + menuDto: InternalMenuDto[] + ): Electron.MenuItemConstructorOptions[] { + return menuDto.map((dto) => { + const result: MenuItemConstructorOptions = { + id: dto.id, + label: dto.label, + type: dto.type, + checked: dto.checked, + enabled: dto.enabled, + visible: dto.visible, + role: dto.role, + accelerator: dto.accelerator, + }; + if (dto.submenu) { + result.submenu = this.fromMenuDto(sender, menuId, dto.submenu); + } + // Fix for handlerId === 0 + // https://github.com/eclipse-theia/theia/pull/12500#issuecomment-1686074836 + if (typeof dto.handlerId === 'number') { + result.click = () => { + sender.send(CHANNEL_INVOKE_MENU, menuId, dto.handlerId); + }; + } + return result; + }); + } +} pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy