diff --git a/src/main/main.ts b/src/main/main.ts
index 45550e1c9..4199bdd88 100644
--- a/src/main/main.ts
+++ b/src/main/main.ts
@@ -93,12 +93,15 @@ const installExtensions = async () => {
const forceDownload = !!process.env.UPGRADE_EXTENSIONS
const extensions = ['REACT_DEVELOPER_TOOLS']
- return installer
- .default(
+ try {
+ return await installer.default(
extensions.map((name) => installer[name as keyof typeof Installer]),
forceDownload,
)
- .catch((err: unknown) => logger.error(getErrorMessage(err)))
+ } catch (error) {
+ logger.warn(`Skipping development extension installation: ${getErrorMessage(error)}`)
+ return []
+ }
}
const createMainWindow = async () => {
diff --git a/src/main/menu.ts b/src/main/menu.ts
index 44efa68d9..57dbda239 100644
--- a/src/main/menu.ts
+++ b/src/main/menu.ts
@@ -19,6 +19,24 @@ interface DarwinMenuItemConstructorOptions extends MenuItemConstructorOptions {
export default class MenuBuilder {
private mainWindow: BrowserWindow
private projectService: ProjectService
+ private readonly handleDevelopmentContextMenu = (
+ _: Electron.Event,
+ props: Electron.ContextMenuParams,
+ ): void => {
+ if (!this.hasLiveWindow()) return
+
+ const { x, y } = props
+
+ Menu.buildFromTemplate([
+ {
+ label: 'Inspect element',
+ click: () => {
+ if (!this.hasLiveWindow()) return
+ this.mainWindow.webContents.inspectElement(x, y)
+ },
+ },
+ ]).popup({ window: this.mainWindow })
+ }
developOptions: MenuItemConstructorOptions[] = [
{ type: 'separator' },
@@ -32,7 +50,19 @@ export default class MenuBuilder {
this.projectService = new ProjectService(mainWindow)
}
+ private hasLiveWindow(): boolean {
+ return !this.mainWindow.isDestroyed()
+ }
+
+ private getFallbackMenu(): Menu {
+ return Menu.getApplicationMenu() ?? Menu.buildFromTemplate([])
+ }
+
async buildMenu(): Promise