Skip to content

Commit

Permalink
fix: falsy context menu handlerId
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
Akos Kitta authored and kittaakos committed Aug 22, 2023
1 parent 10b3882 commit 5fd02b9
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -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,
Expand All @@ -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) => {
Expand Down Expand Up @@ -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);
});
40 changes: 40 additions & 0 deletions arduino-ide-extension/src/electron-main/theia/theia-api-main.ts
Original file line number Diff line number Diff line change
@@ -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;
});
}
}

0 comments on commit 5fd02b9

Please sign in to comment.