From 4e1d0157f17949a9966f155ac1679ac408584530 Mon Sep 17 00:00:00 2001 From: MrSphay Date: Fri, 1 May 2026 21:14:41 +0200 Subject: [PATCH] Use native Windows title bar --- electron/main.ts | 32 +--------------- electron/preload.ts | 5 +-- src/App.tsx | 46 +--------------------- src/styles.css | 93 +-------------------------------------------- src/vite-env.d.ts | 3 -- 5 files changed, 4 insertions(+), 175 deletions(-) diff --git a/electron/main.ts b/electron/main.ts index 04281ab..c613017 100644 --- a/electron/main.ts +++ b/electron/main.ts @@ -5,8 +5,6 @@ import { fileURLToPath } from "node:url"; const __dirname = path.dirname(fileURLToPath(import.meta.url)); -let mainWindow: BrowserWindow | null = null; - async function createWindow() { const win = new BrowserWindow({ width: 1220, @@ -14,7 +12,7 @@ async function createWindow() { minWidth: 980, minHeight: 680, title: "EnvHelper", - frame: false, + frame: true, autoHideMenuBar: true, backgroundColor: "#f6f7f4", webPreferences: { @@ -24,13 +22,6 @@ async function createWindow() { } }); - mainWindow = win; - win.on("closed", () => { - if (mainWindow === win) { - mainWindow = null; - } - }); - Menu.setApplicationMenu(null); if (!app.isPackaged) { @@ -57,27 +48,6 @@ ipcMain.handle("envhelper:open-file", async () => { }; }); -ipcMain.on("envhelper:window-minimize", () => { - mainWindow?.minimize(); -}); - -ipcMain.on("envhelper:window-toggle-maximize", () => { - if (!mainWindow) { - return; - } - - if (mainWindow.isMaximized()) { - mainWindow.unmaximize(); - return; - } - - mainWindow.maximize(); -}); - -ipcMain.on("envhelper:window-close", () => { - mainWindow?.close(); -}); - ipcMain.handle("envhelper:save-file", async (_event, content: string) => { const result = await dialog.showSaveDialog({ defaultPath: ".env", diff --git a/electron/preload.ts b/electron/preload.ts index b0d71e3..cf5fa72 100644 --- a/electron/preload.ts +++ b/electron/preload.ts @@ -2,8 +2,5 @@ import { contextBridge, ipcRenderer } from "electron"; contextBridge.exposeInMainWorld("envHelper", { openFile: () => ipcRenderer.invoke("envhelper:open-file"), - saveFile: (content: string) => ipcRenderer.invoke("envhelper:save-file", content), - minimizeWindow: () => ipcRenderer.send("envhelper:window-minimize"), - toggleMaximizeWindow: () => ipcRenderer.send("envhelper:window-toggle-maximize"), - closeWindow: () => ipcRenderer.send("envhelper:window-close") + saveFile: (content: string) => ipcRenderer.invoke("envhelper:save-file", content) }); diff --git a/src/App.tsx b/src/App.tsx index c23a67a..9cb61a7 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -4,8 +4,6 @@ import { FileDown, FileInput, Languages, - Maximize2, - Minus, Plus, RefreshCcw, Settings, @@ -15,7 +13,7 @@ import { X } from "lucide-react"; import { useEffect, useMemo, useState } from "react"; -import type { PointerEvent, ReactNode } from "react"; +import type { ReactNode } from "react"; import packageInfo from "../package.json"; import { transformEnv } from "./env"; import type { EnvDefault } from "./env"; @@ -328,50 +326,8 @@ export default function App() { setDefaults((current) => current.filter((_, entryIndex) => entryIndex !== index)); } - function runWindowControl(event: PointerEvent, action?: () => void) { - event.preventDefault(); - event.stopPropagation(); - action?.(); - } - return (
-
-
-
-
EH
- EnvHelper -
-
-
- - - -
-
-
EH
diff --git a/src/styles.css b/src/styles.css index 9cdf821..1a4978c 100644 --- a/src/styles.css +++ b/src/styles.css @@ -140,100 +140,9 @@ textarea:focus { .appShell { display: grid; gap: 12px; - grid-template-rows: 34px auto auto minmax(260px, 1fr) minmax(160px, 0.52fr); + grid-template-rows: auto auto minmax(260px, 1fr) minmax(160px, 0.52fr); height: 100%; padding: 14px; - padding-top: 8px; -} - -.titlebar { - align-items: center; - background: color-mix(in srgb, var(--surface) 92%, var(--bg)); - border: 1px solid var(--border); - border-radius: 8px; - display: flex; - justify-content: space-between; - overflow: hidden; -} - -.titlebarDrag { - -webkit-app-region: drag; - align-items: center; - display: flex; - flex: 1; - height: 100%; - min-width: 0; -} - -.titlebarBrand { - align-items: center; - color: var(--muted); - display: flex; - font-size: 0.82rem; - font-weight: 800; - gap: 8px; - padding-left: 10px; -} - -.titlebarMark { - align-items: center; - background: var(--accent-soft); - border: 1px solid color-mix(in srgb, var(--accent) 35%, var(--border)); - border-radius: 6px; - color: var(--accent-strong); - display: flex; - font-size: 0.66rem; - height: 20px; - justify-content: center; - width: 24px; -} - -.windowControls { - -webkit-app-region: no-drag; - align-items: stretch; - display: flex; - height: 100%; - padding: 3px; - position: relative; - z-index: 2; -} - -.windowControls, -.windowControls * { - -webkit-app-region: no-drag; -} - -.windowControls button { - -webkit-app-region: no-drag; - background: transparent; - border: 1px solid transparent; - border-radius: 6px; - color: var(--muted); - min-height: 0; - min-width: 38px; - padding: 0; -} - -.windowControls svg { - pointer-events: none; -} - -.windowControls button:hover { - background: var(--surface-subtle); - border-color: var(--border); - color: var(--text); - transform: none; -} - -.windowControls button:active { - background: var(--accent-soft); - color: var(--accent-strong); -} - -.windowControls .closeButton:hover { - background: var(--danger); - border-color: var(--danger); - color: #fff; } .toolbar { diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts index fc22baa..d1c7072 100644 --- a/src/vite-env.d.ts +++ b/src/vite-env.d.ts @@ -9,8 +9,5 @@ interface Window { envHelper?: { openFile: () => Promise; saveFile: (content: string) => Promise; - minimizeWindow: () => void; - toggleMaximizeWindow: () => void; - closeWindow: () => void; }; }