From fbf84bb7aa12f2034939bc6bfd8a5eb748136155 Mon Sep 17 00:00:00 2001 From: BhagwanSingh Date: Fri, 7 Nov 2025 19:17:18 +0530 Subject: [PATCH] Disable Close and Minimize Tracker IPC Handle --- src/electron/ipc/ipcHandler.ts | 27 ++++++++++++++---- src/electron/main.ts | 51 +++++++++++++++++++--------------- src/electron/preload.cts | 2 ++ src/ui/pages/Dashboard.tsx | 21 ++++++++++++++ types.d.ts | 2 ++ 5 files changed, 76 insertions(+), 27 deletions(-) diff --git a/src/electron/ipc/ipcHandler.ts b/src/electron/ipc/ipcHandler.ts index f3b8bbf..a2c6ae8 100644 --- a/src/electron/ipc/ipcHandler.ts +++ b/src/electron/ipc/ipcHandler.ts @@ -3,6 +3,7 @@ import { ipcMain } from 'electron'; import { getToken, saveToken, clearToken } from '../utils/tokenHelper.js'; import { getActiveApp, handleLogin, takeScreenshot } from '../utils/utilityFunctions.js'; import api from '../api/axiosClient.js'; +import { getMainWindow } from '../main.js'; ipcMain.handle('get-token', async (_, TOKEN_KEY: "ACCESS_TOKEN" | "REFRESH_TOKEN") => { return await getToken(TOKEN_KEY); @@ -33,15 +34,31 @@ ipcMain.handle('logout-request', async () => { console.log("Handle Logout listened") console.log("Token", await getToken("ACCESS_TOKEN")) const res = await api.get("/logout"); - if(res && ("success" in res) && res.success) { - return {success: true, message: "Logout Successfully"} + if (res && ("success" in res) && res.success) { + return { success: true, message: "Logout Successfully" } } - return {success: false, message: ""} - } catch(error) { - return {success: false, message: ""} + return { success: false, message: "" } + } catch (error) { + return { success: false, message: "" } } }); ipcMain.handle('get-active-app', () => { return getActiveApp(); +}); + +ipcMain.handle('toggle-close-btn', (event, shouldEnable: boolean) => { + const mainWindow = getMainWindow() + console.log("toggle-close-btn Called", mainWindow) + if (mainWindow && !mainWindow.isDestroyed()) { + mainWindow.setClosable(shouldEnable); + } +}); + +ipcMain.handle('resize-window', (event, width: number, height: number) => { + const mainWindow = getMainWindow() + console.log("toggle-close-btn Called", mainWindow) + if (mainWindow && !mainWindow.isDestroyed()) { + mainWindow.setSize(width, height); + } }); \ No newline at end of file diff --git a/src/electron/main.ts b/src/electron/main.ts index 54b2d6c..1af0289 100644 --- a/src/electron/main.ts +++ b/src/electron/main.ts @@ -1,20 +1,27 @@ -import { app, BrowserWindow, session } from 'electron'; +import { app, BrowserWindow, ipcMain, session } from 'electron'; import { ipcMainHandle, ipcMainOn, isDev } from './util.js'; import { getStaticData, pollResources } from './resourceManager.js'; import { getPreloadPath, getUIPath } from './pathResolver.js'; import "./ipc/ipcHandler.js"; +let mainWindow:any = null; + app.on('ready', async () => { console.log("ready"); - const mainWindow = new BrowserWindow({ - width: 550, // fixed width - height: 750, // fixed height + mainWindow = new BrowserWindow({ + width: 500, // fixed width + height: 600, // fixed height + resizable: false, // prevents resizing fullscreenable: false, // disables fullscreen toggle (F11 or double-click title bar) + minimizable: false, // disables minimize button maximizable: false, // prevents maximize + closable: true, + alwaysOnTop: true, autoHideMenuBar: true, + frame: process.platform === 'darwin' ? false : true, webPreferences: { preload: getPreloadPath(), @@ -33,30 +40,28 @@ app.on('ready', async () => { mainWindow.loadFile(getUIPath()); } - pollResources(mainWindow); + // pollResources(mainWindow); // IPC handlers - ipcMainHandle('getStaticData', () => getStaticData()); + // ipcMainHandle('getStaticData', () => getStaticData()); - ipcMainOn('sendFrameAction', (payload) => { - switch (payload) { - case 'CLOSE': - mainWindow.close(); - break; - case 'MAXIMIZE': - // prevent maximize - break; - case 'MINIMIZE': - mainWindow.minimize(); - break; - } - }); + // ipcMainOn('sendFrameAction', (payload) => { + // switch (payload) { + // case 'CLOSE': + // mainWindow.close(); + // break; + // case 'MAXIMIZE': + // // prevent maximize + // break; + // case 'MINIMIZE': + // mainWindow.minimize(); + // break; + // } + // }); handleCloseEvents(mainWindow); }); - - function handleCloseEvents(mainWindow: BrowserWindow) { let willClose = false; @@ -80,4 +85,6 @@ function handleCloseEvents(mainWindow: BrowserWindow) { }); } - +export function getMainWindow() { + return mainWindow; +} \ No newline at end of file diff --git a/src/electron/preload.cts b/src/electron/preload.cts index 232b28e..2ad094f 100644 --- a/src/electron/preload.cts +++ b/src/electron/preload.cts @@ -8,6 +8,8 @@ contextBridge.exposeInMainWorld('electron', { getToken: (TOKEN_KEY: "ACCESS_TOKEN" | "REFRESH_TOKEN") => ipcRenderer.invoke('get-token', TOKEN_KEY), uploadScreenshot: () => ipcRenderer.invoke('upload-screenshot'), getActiveAppDetails: () => ipcRenderer.invoke('get-active-app'), + toggleCloseBtn: (shouldEnable: boolean) => ipcRenderer.invoke('toggle-close-btn', shouldEnable), + resizeWindow: (width: number, height: number) => ipcRenderer.invoke('resize-window', width, height), } satisfies Window['electron']); // function ipcInvoke( diff --git a/src/ui/pages/Dashboard.tsx b/src/ui/pages/Dashboard.tsx index a28f51f..87cac09 100644 --- a/src/ui/pages/Dashboard.tsx +++ b/src/ui/pages/Dashboard.tsx @@ -104,6 +104,27 @@ const Dashboard: React.FC = () => { > Screenshot Test + + + {/* Widgets */} diff --git a/types.d.ts b/types.d.ts index 3b2ce1f..d1d01e2 100644 --- a/types.d.ts +++ b/types.d.ts @@ -30,6 +30,8 @@ interface Window { getToken: (tokenKey: "ACCESS_TOKEN" | "REFRESH_TOKEN") => Promise; uploadScreenshot: () => {}; getActiveAppDetails: () => {}; + toggleCloseBtn: (shouldEnable: boolean) => {}, + resizeWindow: (width: number, height: number) => {}, }; }