Custom window controls (#46)

This commit is contained in:
Will Chen
2025-04-29 11:41:40 -07:00
committed by GitHub
parent 672bd790fa
commit a33e6c6ae3
6 changed files with 200 additions and 1 deletions

View File

@@ -0,0 +1,53 @@
import { BrowserWindow, ipcMain } from "electron";
import log from "electron-log";
import { platform } from "os";
const logger = log.scope("window-handlers");
// Handler for minimizing the window
const handleMinimize = (event: Electron.IpcMainInvokeEvent) => {
const window = BrowserWindow.fromWebContents(event.sender);
if (!window) {
logger.error("Failed to get BrowserWindow instance for minimize command");
return;
}
window.minimize();
};
// Handler for maximizing/restoring the window
const handleMaximize = (event: Electron.IpcMainInvokeEvent) => {
const window = BrowserWindow.fromWebContents(event.sender);
if (!window) {
logger.error("Failed to get BrowserWindow instance for maximize command");
return;
}
if (window.isMaximized()) {
window.restore();
} else {
window.maximize();
}
};
// Handler for closing the window
const handleClose = (event: Electron.IpcMainInvokeEvent) => {
const window = BrowserWindow.fromWebContents(event.sender);
if (!window) {
logger.error("Failed to get BrowserWindow instance for close command");
return;
}
window.close();
};
// Handler to get the current system platform
const handleGetSystemPlatform = () => {
return platform();
};
export function registerWindowHandlers() {
logger.debug("Registering window control handlers");
ipcMain.handle("window:minimize", handleMinimize);
ipcMain.handle("window:maximize", handleMaximize);
ipcMain.handle("window:close", handleClose);
ipcMain.handle("window:get-platform", handleGetSystemPlatform);
}

View File

@@ -776,4 +776,45 @@ export class IpcClient {
throw error;
}
}
// Window control methods
public async minimizeWindow(): Promise<void> {
try {
await this.ipcRenderer.invoke("window:minimize");
} catch (error) {
showError(error);
throw error;
}
}
public async maximizeWindow(): Promise<void> {
try {
await this.ipcRenderer.invoke("window:maximize");
} catch (error) {
showError(error);
throw error;
}
}
public async closeWindow(): Promise<void> {
try {
await this.ipcRenderer.invoke("window:close");
} catch (error) {
showError(error);
throw error;
}
}
// Get system platform (win32, darwin, linux)
public async getSystemPlatform(): Promise<string> {
try {
const platform = await this.ipcRenderer.invoke("window:get-platform");
return platform;
} catch (error) {
showError(error);
throw error;
}
}
// --- End window control methods ---
}

View File

@@ -11,6 +11,7 @@ import { registerDebugHandlers } from "./handlers/debug_handlers";
import { registerSupabaseHandlers } from "./handlers/supabase_handlers";
import { registerLocalModelHandlers } from "./handlers/local_model_handlers";
import { registerTokenCountHandlers } from "./handlers/token_count_handlers";
import { registerWindowHandlers } from "./handlers/window_handlers";
export function registerIpcHandlers() {
// Register all IPC handlers by category
@@ -27,4 +28,5 @@ export function registerIpcHandlers() {
registerSupabaseHandlers();
registerLocalModelHandlers();
registerTokenCountHandlers();
registerWindowHandlers();
}