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

View File

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

View File

@@ -338,16 +338,35 @@ export default function App() {
</div>
</div>
<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} />
</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} />
</button>
<button
aria-label="Close"
className="closeButton"
onClick={() => window.envHelper?.closeWindow()}
onClick={(event) => {
event.stopPropagation();
window.envHelper?.closeWindow();
}}
title="Close"
type="button"
>

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

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