diff --git a/app/src/components/contextMenu.ts b/app/src/components/contextMenu.ts index c264204..e831155 100644 --- a/app/src/components/contextMenu.ts +++ b/app/src/components/contextMenu.ts @@ -1,9 +1,13 @@ -import { BrowserWindow, ContextMenuParams } from 'electron'; +import { + BrowserWindow, + ContextMenuParams, + NewWindowWebContentsEvent, +} from 'electron'; import contextMenu from 'electron-context-menu'; import log from 'loglevel'; import { nativeTabsSupported, openExternal } from '../helpers/helpers'; import { setupNativefierWindow } from '../helpers/windowEvents'; -import { createNewTab, createNewWindow } from '../helpers/windowHelpers'; +import { createNewWindow } from '../helpers/windowHelpers'; import { OutputOptions, outputOptionsToWindowOptions, @@ -43,12 +47,25 @@ export function initContextMenu( items.push({ label: 'Open Link in New Tab', click: () => - createNewTab( - outputOptionsToWindowOptions(options), - setupNativefierWindow, + // Fire a new window event for a foreground tab + // Previously we called createNewTab directly, but it had incosistent and buggy behavior + // as it was mostly designed for running off of events. So this will create a new event + // for a foreground-tab for the event handler to grab and take care of instead. + (window as BrowserWindow).webContents.emit( + // event name + 'new-window', + // event object + { + // Leave to the default for a NewWindowWebContentsEvent + newGuest: undefined, + ...new Event('new-window'), + } as NewWindowWebContentsEvent, + // url params.linkURL, - true, - window, + // frameName + window?.webContents.mainFrame.name ?? '', + // disposition + 'foreground-tab', ), }); } diff --git a/app/src/helpers/windowEvents.ts b/app/src/helpers/windowEvents.ts index 49e3e0d..f8c9576 100644 --- a/app/src/helpers/windowEvents.ts +++ b/app/src/helpers/windowEvents.ts @@ -42,7 +42,9 @@ export function onNewWindow( }); const preventDefault = (newGuest?: BrowserWindow): void => { log.debug('onNewWindow.preventDefault', { newGuest, event }); - event.preventDefault(); + if (event.preventDefault) { + event.preventDefault(); + } if (newGuest) { event.newGuest = newGuest; }