Custom window controls (#46)
This commit is contained in:
53
src/ipc/handlers/window_handlers.ts
Normal file
53
src/ipc/handlers/window_handlers.ts
Normal 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);
|
||||
}
|
||||
@@ -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 ---
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user