Wire window controls to main window
All checks were successful
Build Windows App / build-windows (push) Successful in 19m56s

This commit is contained in:
MrSphay
2026-05-01 20:06:02 +02:00
parent 4bf2a1b422
commit dda118fbb3
4 changed files with 48 additions and 22 deletions

View File

@@ -5,6 +5,8 @@ import { fileURLToPath } from "node:url";
const __dirname = path.dirname(fileURLToPath(import.meta.url)); const __dirname = path.dirname(fileURLToPath(import.meta.url));
let mainWindow: BrowserWindow | null = null;
async function createWindow() { async function createWindow() {
const win = new BrowserWindow({ const win = new BrowserWindow({
width: 1220, width: 1220,
@@ -22,6 +24,13 @@ async function createWindow() {
} }
}); });
mainWindow = win;
win.on("closed", () => {
if (mainWindow === win) {
mainWindow = null;
}
});
Menu.setApplicationMenu(null); Menu.setApplicationMenu(null);
if (!app.isPackaged) { if (!app.isPackaged) {
@@ -48,27 +57,25 @@ ipcMain.handle("envhelper:open-file", async () => {
}; };
}); });
ipcMain.handle("envhelper:window-minimize", (event) => { ipcMain.on("envhelper:window-minimize", () => {
BrowserWindow.fromWebContents(event.sender)?.minimize(); mainWindow?.minimize();
}); });
ipcMain.handle("envhelper:window-toggle-maximize", (event) => { ipcMain.on("envhelper:window-toggle-maximize", () => {
const win = BrowserWindow.fromWebContents(event.sender); if (!mainWindow) {
if (!win) { return;
return false;
} }
if (win.isMaximized()) { if (mainWindow.isMaximized()) {
win.unmaximize(); mainWindow.unmaximize();
return false; return;
} }
win.maximize(); mainWindow.maximize();
return true;
}); });
ipcMain.handle("envhelper:window-close", (event) => { ipcMain.on("envhelper:window-close", () => {
BrowserWindow.fromWebContents(event.sender)?.close(); mainWindow?.close();
}); });
ipcMain.handle("envhelper:save-file", async (_event, content: string) => { ipcMain.handle("envhelper:save-file", async (_event, content: string) => {

View File

@@ -3,7 +3,7 @@ import { contextBridge, ipcRenderer } from "electron";
contextBridge.exposeInMainWorld("envHelper", { contextBridge.exposeInMainWorld("envHelper", {
openFile: () => ipcRenderer.invoke("envhelper:open-file"), openFile: () => ipcRenderer.invoke("envhelper:open-file"),
saveFile: (content: string) => ipcRenderer.invoke("envhelper:save-file", content), saveFile: (content: string) => ipcRenderer.invoke("envhelper:save-file", content),
minimizeWindow: () => ipcRenderer.invoke("envhelper:window-minimize"), minimizeWindow: () => ipcRenderer.send("envhelper:window-minimize"),
toggleMaximizeWindow: () => ipcRenderer.invoke("envhelper:window-toggle-maximize"), toggleMaximizeWindow: () => ipcRenderer.send("envhelper:window-toggle-maximize"),
closeWindow: () => ipcRenderer.invoke("envhelper:window-close") closeWindow: () => ipcRenderer.send("envhelper:window-close")
}); });

View File

@@ -338,16 +338,35 @@ export default function App() {
</div> </div>
</div> </div>
<div className="windowControls"> <div className="windowControls">
<button aria-label="Minimize" onClick={() => window.envHelper?.minimizeWindow()} title="Minimize" type="button"> <button
aria-label="Minimize"
onClick={(event) => {
event.stopPropagation();
window.envHelper?.minimizeWindow();
}}
title="Minimize"
type="button"
>
<Minus size={15} /> <Minus size={15} />
</button> </button>
<button aria-label="Maximize" onClick={() => window.envHelper?.toggleMaximizeWindow()} title="Maximize" type="button"> <button
aria-label="Maximize"
onClick={(event) => {
event.stopPropagation();
window.envHelper?.toggleMaximizeWindow();
}}
title="Maximize"
type="button"
>
<Maximize2 size={14} /> <Maximize2 size={14} />
</button> </button>
<button <button
aria-label="Close" aria-label="Close"
className="closeButton" className="closeButton"
onClick={() => window.envHelper?.closeWindow()} onClick={(event) => {
event.stopPropagation();
window.envHelper?.closeWindow();
}}
title="Close" title="Close"
type="button" type="button"
> >

6
src/vite-env.d.ts vendored
View File

@@ -9,8 +9,8 @@ interface Window {
envHelper?: { envHelper?: {
openFile: () => Promise<EnvHelperFileResult | null>; openFile: () => Promise<EnvHelperFileResult | null>;
saveFile: (content: string) => Promise<string | null>; saveFile: (content: string) => Promise<string | null>;
minimizeWindow: () => Promise<void>; minimizeWindow: () => void;
toggleMaximizeWindow: () => Promise<boolean>; toggleMaximizeWindow: () => void;
closeWindow: () => Promise<void>; closeWindow: () => void;
}; };
} }