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 * as services from "../frontend/app/store/services";
import * as keyutil from "../frontend/util/keyutil";
import { fireAndForget } from "../frontend/util/util";
const electronApp = electron.app;
const isDev = process.env.WAVETERM_DEV;
@ -460,10 +461,11 @@ electron.ipcMain.on("getCursorPoint", (event) => {
async function createNewWaveWindow() {
let clientData = await services.ClientService.GetClientData();
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 }) => {
if (menuDefArr == null || menuDefArr.length == 0) {
@ -498,10 +500,11 @@ function makeAppMenu() {
let fileMenu: Electron.MenuItemConstructorOptions[] = [];
fileMenu.push({
label: "New Window",
click: createNewWaveWindow,
accelerator: "CommandOrControl+N",
click: () => fireAndForget(createNewWaveWindow),
});
fileMenu.push({
label: "Close Window",
role: "close",
click: () => {
electron.BrowserWindow.getFocusedWindow()?.close();
},

View File

@ -89,4 +89,14 @@ function makeIconClass(icon: string, fw: boolean): string {
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 };