From 623b3f15fa72393d7b0dc6c5c6267bfbbfd6ccca Mon Sep 17 00:00:00 2001 From: fanlumaster <1730976608@qq.com> Date: Fri, 27 Mar 2026 00:18:18 +0800 Subject: [PATCH] first version of self-rendering title bar --- .../webview2/settings/ime-settings/index.html | 8 +-- .../settings/ime-settings/src/main.ts | 50 ++++++++++++++++++- 2 files changed, 53 insertions(+), 5 deletions(-) diff --git a/ui-html/webview2/settings/ime-settings/index.html b/ui-html/webview2/settings/ime-settings/index.html index 3c91be85..f7604d89 100644 --- a/ui-html/webview2/settings/ime-settings/index.html +++ b/ui-html/webview2/settings/ime-settings/index.html @@ -14,13 +14,13 @@ Settings
- - -
@@ -41,4 +41,4 @@ - \ No newline at end of file + diff --git a/ui-html/webview2/settings/ime-settings/src/main.ts b/ui-html/webview2/settings/ime-settings/src/main.ts index dcb0c9d7..4908369e 100644 --- a/ui-html/webview2/settings/ime-settings/src/main.ts +++ b/ui-html/webview2/settings/ime-settings/src/main.ts @@ -4,6 +4,9 @@ import { loadHTML, showOnlyCurrentModule } from './utils/common-utils'; import { loadContent, setupSidebar } from './modules/sidebar'; async function initializeApp() { + setupTitlebarButtons(); + setupTitlebarDrag(); + // 加载侧边栏 const sidebarHTML = await loadHTML('/src/partials/sidebar.html'); document.getElementById('sidebar-container')!.innerHTML = sidebarHTML; @@ -25,5 +28,50 @@ async function initializeApp() { container.style.visibility = 'visible'; } +function setupTitlebarButtons(): void { + const minimizeBtn = document.getElementById('btn-minimize'); + const maximizeBtn = document.getElementById('btn-maximize'); + const closeBtn = document.getElementById('btn-close'); -document.addEventListener('DOMContentLoaded', initializeApp); \ No newline at end of file + const postWindowMessage = (value: 'minimize' | 'maximize' | 'close') => { + if (window.chrome?.webview) { + window.chrome.webview.postMessage( + JSON.stringify({ + type: 'windowControl', + data: value + }) + ); + } else { + console.warn('[windowControl] webview2 not available:', value); + } + }; + + minimizeBtn?.addEventListener('click', () => postWindowMessage('minimize')); + maximizeBtn?.addEventListener('click', () => postWindowMessage('maximize')); + closeBtn?.addEventListener('click', () => postWindowMessage('close')); +} + +function setupTitlebarDrag(): void { + const titlebar = document.querySelector('.titlebar'); + if (!titlebar) { + console.warn('[windowControl] titlebar not found'); + return; + } + + titlebar.addEventListener('mousedown', (e: MouseEvent) => { + const target = e.target as HTMLElement | null; + if (target?.closest('.window-controls')) { + return; + } + + if (window.chrome?.webview) { + window.chrome.webview.postMessage( + JSON.stringify({ + type: 'dragStart' + }) + ); + } + }); +} + +document.addEventListener('DOMContentLoaded', initializeApp);