diff --git a/gcs/electron/main.ts b/gcs/electron/main.ts index 6a3d8bb83..54d69995f 100644 --- a/gcs/electron/main.ts +++ b/gcs/electron/main.ts @@ -304,13 +304,6 @@ function setMainMenu() { { label: "View", submenu: [ - { - label: "Connection Stats", - click: () => { - openLinkStatsWindow() - }, - }, - { type: "separator" }, { role: "reload" }, { role: "forceReload" }, { role: "toggleDevTools" }, @@ -322,6 +315,23 @@ function setMainMenu() { { role: "togglefullscreen" }, ], }, + { + label: "Advanced", + submenu: [ + { + label: "Connection Stats", + click: () => { + openLinkStatsWindow() + }, + }, + { + label: "MAVLink Forwarding", + click: () => { + win?.webContents.send("mavlink-forwarding:open") + }, + }, + ], + }, ] const menu = Menu.buildFromTemplate(template) Menu.setApplicationMenu(menu) diff --git a/gcs/electron/preload.js b/gcs/electron/preload.js index cfc3dc345..1aa9cdf1e 100644 --- a/gcs/electron/preload.js +++ b/gcs/electron/preload.js @@ -58,6 +58,7 @@ const ALLOWED_ON_CHANNELS = [ "app:send-ekf-status", "app:send-vibe-status", "settings:open", + "mavlink-forwarding:open", ] contextBridge.exposeInMainWorld("ipcRenderer", { diff --git a/gcs/src/components/navbar.jsx b/gcs/src/components/navbar.jsx index 6f16f4b04..9891f0e9e 100644 --- a/gcs/src/components/navbar.jsx +++ b/gcs/src/components/navbar.jsx @@ -162,6 +162,13 @@ export default function Navbar() { } }, [comPorts, selectedComPort]) + useEffect(() => { + const handler = () => dispatch(setForwardingAddressModalOpened(true)) + window.ipcRenderer.on("mavlink-forwarding:open", handler) + return () => + window.ipcRenderer.removeAllListeners("mavlink-forwarding:open") + }, [dispatch]) + const linkClassName = "text-md px-2 rounded-sm outline-none focus:text-falconred-400 hover:text-falconred-400 transition-colors delay-50" diff --git a/gcs/src/helpers/settingsProvider.jsx b/gcs/src/helpers/settingsProvider.jsx index 854fc9416..c0bf3b35a 100644 --- a/gcs/src/helpers/settingsProvider.jsx +++ b/gcs/src/helpers/settingsProvider.jsx @@ -39,7 +39,7 @@ export const SettingsProvider = ({ children }) => { useEffect(() => { const handler = () => open() window.ipcRenderer.on("settings:open", handler) - return () => window.ipcRenderer.removeListener("settings:open", handler) + return () => window.ipcRenderer.removeAllListeners("settings:open") }, [open]) const setSetting = (setting, value) => {