Fix new window from menu bar (#91)

Fixes the New Window menu item so that it shows the new window after it
loads and captures any errors that occur. Also adds a keyboard shortcut
for new window and uses the native shortcut for close window.
This commit is contained in:
Evan Simkowitz 2024-06-28 16:24:40 -07:00 committed by GitHub
parent 4c45bca56b
commit 50a4074c39
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 18 additions and 5 deletions

View File

@ -11,6 +11,7 @@ import { debounce } from "throttle-debounce";
import { getBackendHostPort } from "../frontend/app/store/global"; import { getBackendHostPort } from "../frontend/app/store/global";
import * as services from "../frontend/app/store/services"; import * as services from "../frontend/app/store/services";
import * as keyutil from "../frontend/util/keyutil"; import * as keyutil from "../frontend/util/keyutil";
import { fireAndForget } from "../frontend/util/util";
const electronApp = electron.app; const electronApp = electron.app;
const isDev = process.env.WAVETERM_DEV; const isDev = process.env.WAVETERM_DEV;
@ -460,10 +461,11 @@ electron.ipcMain.on("getCursorPoint", (event) => {
async function createNewWaveWindow() { async function createNewWaveWindow() {
let clientData = await services.ClientService.GetClientData(); let clientData = await services.ClientService.GetClientData();
const newWindow = await services.ClientService.MakeWindow(); const newWindow = await services.ClientService.MakeWindow();
createBrowserWindow(clientData.oid, newWindow); const newBrowserWindow = createBrowserWindow(clientData.oid, newWindow);
newBrowserWindow.show();
} }
electron.ipcMain.on("openNewWindow", createNewWaveWindow); electron.ipcMain.on("openNewWindow", () => fireAndForget(createNewWaveWindow));
electron.ipcMain.on("contextmenu-show", (event, menuDefArr: ElectronContextMenuItem[], { x, y }) => { electron.ipcMain.on("contextmenu-show", (event, menuDefArr: ElectronContextMenuItem[], { x, y }) => {
if (menuDefArr == null || menuDefArr.length == 0) { if (menuDefArr == null || menuDefArr.length == 0) {
@ -498,10 +500,11 @@ function makeAppMenu() {
let fileMenu: Electron.MenuItemConstructorOptions[] = []; let fileMenu: Electron.MenuItemConstructorOptions[] = [];
fileMenu.push({ fileMenu.push({
label: "New Window", label: "New Window",
click: createNewWaveWindow, accelerator: "CommandOrControl+N",
click: () => fireAndForget(createNewWaveWindow),
}); });
fileMenu.push({ fileMenu.push({
label: "Close Window", role: "close",
click: () => { click: () => {
electron.BrowserWindow.getFocusedWindow()?.close(); electron.BrowserWindow.getFocusedWindow()?.close();
}, },

View File

@ -89,4 +89,14 @@ function makeIconClass(icon: string, fw: boolean): string {
return null; return null;
} }
export { base64ToArray, base64ToString, isBlank, jsonDeepEqual, makeIconClass, stringToBase64 }; /**
* A wrapper function for running a promise and catching any errors
* @param f The promise to run
*/
function fireAndForget(f: () => Promise<any>) {
f().catch((e) => {
console.log("fireAndForget error", e);
});
}
export { base64ToArray, base64ToString, fireAndForget, isBlank, jsonDeepEqual, makeIconClass, stringToBase64 };