import React, { useState, useEffect } from 'react'; import logo from '../../assets/icon.png'; export default function TitleBar() { const[isMaximized, setIsMaximized] = useState(false); useEffect(() => { let cleanupIpc = null; // Reliable IPC listener for Electron (.exe build) if (typeof window !== 'undefined' && window.require) { try { const { ipcRenderer } = window.require('electron'); const handleWindowState = (e, isMax) => setIsMaximized(isMax); ipcRenderer.on('window-state-changed', handleWindowState); cleanupIpc = () => ipcRenderer.removeListener('window-state-changed', handleWindowState); } catch (e) {} } // Multi-monitor resilient heuristic const handleResize = () => { const isMax = (window.outerHeight >= window.screen.availHeight * 0.85) || (window.outerWidth >= window.screen.availWidth * 0.85); setIsMaximized(isMax); }; window.addEventListener('resize', handleResize); handleResize(); return () => { window.removeEventListener('resize', handleResize); if (cleanupIpc) cleanupIpc(); }; },[]); const performAction = async (action) => { try { if (typeof window !== 'undefined' && window.require) { const { ipcRenderer } = window.require('electron'); ipcRenderer.send('window-action', action); } } catch (e) { console.error("Failed to perform window action:", e); } }; const handleMinimize = () => performAction('minimize'); const handleMaximize = async () => { if (isMaximized) { await performAction('restore'); setIsMaximized(false); } else { await performAction('maximize'); setIsMaximized(true); } }; const handleClose = () => performAction('close'); return (
Logo Peercord {window.APP_VERSION && (
v{window.APP_VERSION}
)}
); }