Wire window controls to main window
All checks were successful
Build Windows App / build-windows (push) Successful in 19m56s
All checks were successful
Build Windows App / build-windows (push) Successful in 19m56s
This commit is contained in:
@@ -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) => {
|
||||||
|
|||||||
@@ -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")
|
||||||
});
|
});
|
||||||
|
|||||||
25
src/App.tsx
25
src/App.tsx
@@ -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
6
src/vite-env.d.ts
vendored
@@ -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;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user