From 63484974d326904a13c7b03f47042ddce70a0bc5 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 10 Jul 2025 10:26:03 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=A0=B9=E6=8D=AE=20Tauri=20v2=20?= =?UTF-8?q?=E5=AE=98=E6=96=B9=E6=96=87=E6=A1=A3=E4=BF=AE=E5=A4=8D=E7=AA=97?= =?UTF-8?q?=E5=8F=A3=E6=8E=A7=E5=88=B6=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🔧 核心修复: - 按照 Tauri v2 官方文档重新实现窗口控制 - 添加正确的权限配置到 capabilities/default.json - 使用官方推荐的 toggleMaximize() API - 实现手动拖拽处理替代 data-tauri-drag-region 🛠️ 技术改进: - 权限配置:添加 core:window:* 权限 - API 更新:使用 window.toggleMaximize() 替代手动状态管理 - 拖拽功能:实现 startDragging() + 双击最大化 - 错误处理:完善异步操作的错误捕获 ✨ 功能特性: - ✅ 窗口拖拽:点击标题栏拖拽移动窗口 - ✅ 双击最大化:双击标题栏切换最大化状态 - ✅ 最小化按钮:正确调用 window.minimize() - ✅ 最大化按钮:使用 window.toggleMaximize() - ✅ 关闭按钮:安全关闭应用程序 📋 测试说明: - 在有 GUI 环境中运行 'pnpm tauri dev' 测试 - 验证所有窗口控制功能正常工作 - 确认拖拽和双击功能响应正确 参考:https://v2.tauri.app/learn/window-customization/ --- src-tauri/capabilities/default.json | 8 ++++++- src-tauri/tauri.conf.json | 1 - src/components/TitleBar.tsx | 35 +++++++++++++++++++++-------- 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/src-tauri/capabilities/default.json b/src-tauri/capabilities/default.json index c135d7f..24e4ec0 100644 --- a/src-tauri/capabilities/default.json +++ b/src-tauri/capabilities/default.json @@ -6,6 +6,12 @@ "main" ], "permissions": [ - "core:default" + "core:default", + "core:window:default", + "core:window:allow-close", + "core:window:allow-minimize", + "core:window:allow-start-dragging", + "core:window:allow-toggle-maximize", + "core:window:allow-internal-toggle-maximize" ] } diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 1925874..14ddca7 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -20,7 +20,6 @@ "resizable": true, "fullscreen": false, "decorations": false, - "titleBarStyle": "Overlay", "transparent": false, "center": true } diff --git a/src/components/TitleBar.tsx b/src/components/TitleBar.tsx index a88c557..c7f11ef 100644 --- a/src/components/TitleBar.tsx +++ b/src/components/TitleBar.tsx @@ -55,13 +55,10 @@ const TitleBar: React.FC = () => { const handleMaximize = async () => { try { const window = getCurrentWindow() - if (isMaximized) { - await window.unmaximize() - setIsMaximized(false) - } else { - await window.maximize() - setIsMaximized(true) - } + await window.toggleMaximize() + // Update state after toggle + const maximized = await window.isMaximized() + setIsMaximized(maximized) } catch (error) { console.error('Failed to toggle maximize window:', error) } @@ -76,10 +73,30 @@ const TitleBar: React.FC = () => { } } + // Handle titlebar drag and double-click + const handleTitlebarMouseDown = async (e: React.MouseEvent) => { + if (e.buttons === 1) { // Primary (left) button + try { + const window = getCurrentWindow() + if (e.detail === 2) { + // Double click - toggle maximize + await window.toggleMaximize() + const maximized = await window.isMaximized() + setIsMaximized(maximized) + } else { + // Single click - start dragging + await window.startDragging() + } + } catch (error) { + console.error('Failed to handle titlebar interaction:', error) + } + } + } + return ( -