下载非内核

This commit is contained in:
zhongluofeng
2026-07-22 18:26:26 +08:00
parent 1e31ee8da9
commit f7d3c13f35
24 changed files with 2609 additions and 2532 deletions
+42 -10
View File
@@ -1,5 +1,5 @@
<script setup lang="ts">
import { ref, computed } from 'vue'
import { ref, computed, onUnmounted } from 'vue'
import { Search, Minus, Square, X, Settings, ChevronRight } from '@lucide/vue'
import { Input } from '@/components/ui/input'
import { getCurrentWindow } from '@tauri-apps/api/window'
@@ -72,17 +72,46 @@ const maximize = async () => {
// 期间用 CSS 覆盖 :hover 样式,避免按钮残留高亮(webview 隐藏时 mouseleave 不触发)
const hoverSuppressed = ref(true)
// 恢复 hover 的定时器引用,便于在鼠标进入时提前恢复
let restoreHoverTimer: ReturnType<typeof setTimeout> | null = null
/** 窗口重新显示后恢复 hover 状态 */
const restoreHover = (delay = 200) => {
if (restoreHoverTimer) clearTimeout(restoreHoverTimer)
restoreHoverTimer = setTimeout(() => {
hoverSuppressed.value = false
}, delay)
}
/** 鼠标移动时恢复 hover(比定时器更可靠,webview 隐藏时 mouseleave 不触发,:hover 被冻结) */
const handleFirstMouseMove = () => {
if (hoverSuppressed.value) {
hoverSuppressed.value = false
if (restoreHoverTimer) {
clearTimeout(restoreHoverTimer)
restoreHoverTimer = null
}
}
window.removeEventListener('mousemove', handleFirstMouseMove)
}
/** 注册鼠标移动监听(窗口即将隐藏时调用,为下次显示做准备) */
const armMouseMoveRestore = () => {
window.removeEventListener('mousemove', handleFirstMouseMove)
window.addEventListener('mousemove', handleFirstMouseMove)
}
const close = async () => {
// 隐藏前立即抑制 hover,避免冻结的 :hover 状态残留到下次显示
hoverSuppressed.value = true
if (document.activeElement instanceof HTMLElement) {
document.activeElement.blur()
}
// 注册鼠标移动监听,窗口重新显示后第一次移动即恢复 hover
armMouseMoveRestore()
await tauriWindow?.hide()
}
// 窗口重新获得焦点时,先保持抑制(防止冻结的 hover 显示),
// 短暂延迟后恢复 hover(让真实鼠标位置重新接管)
if (tauriWindow) {
tauriWindow.onFocusChanged(({ payload: focused }) => {
if (focused) {
@@ -90,10 +119,10 @@ if (tauriWindow) {
if (document.activeElement instanceof HTMLElement) {
document.activeElement.blur()
}
// 100ms 后恢复 hover,足够让浏览器重置伪类状态
setTimeout(() => {
hoverSuppressed.value = false
}, 100)
// 200ms 后恢复 hover,足够让浏览器重置伪类状态
restoreHover(200)
// 同时注册鼠标移动监听作为后备(定时器可能不够,鼠标移动更可靠)
armMouseMoveRestore()
} else {
hoverSuppressed.value = true
}
@@ -101,9 +130,12 @@ if (tauriWindow) {
}
// 初始时窗口已显示,恢复 hover
setTimeout(() => {
hoverSuppressed.value = false
}, 200)
restoreHover(300)
onUnmounted(() => {
window.removeEventListener('mousemove', handleFirstMouseMove)
if (restoreHoverTimer) clearTimeout(restoreHoverTimer)
})
const handleBlur = () => {
setTimeout(() => {