From 9faa694225b7f0e7d165443dc9130f374ee84ecb Mon Sep 17 00:00:00 2001 From: Pissofdvpe Date: Wed, 18 Feb 2026 11:40:08 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=F0=9F=90=9Efix(desktopLyrics/window):=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20macOS=20=E6=A1=8C=E9=9D=A2=E6=AD=8C?= =?UTF-8?q?=E8=AF=8D=E5=90=AF=E5=8A=A8=E6=AD=BB=E9=94=81;=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=A1=8C=E9=9D=A2=E6=AD=8C=E8=AF=8D=E7=84=A6=E7=82=B9?= =?UTF-8?q?=E5=A4=BA=E5=8F=96=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复 macOS 桌面歌词启动时卡在“歌词加载中”的问题: - 修正 LyricManager.ts 中残留的旧 IPC 频道名 update-desktop-lyric-data 为 desktop-lyric:update-data,确保歌词未变场景下的状态正确同步。 - 优化窗口焦点管理,解决启动时主窗口失去焦点导致本地快捷键失效的问题: - 修改 lyric-window.ts,在 ready-to-show 事件中改用 showInactive() 显示窗口,防止静默启动时抢占焦点。 - 优化 ipc-lyric.ts 的切换显示逻辑,统一使用 showInactive(),并补全了窗口创建时的初始锁定状态应用逻辑。 - 在 useInit.ts 初始化流程末尾增加延时聚焦主窗口的逻辑(win-show-main),确保程序启动后主窗口稳获最终焦点。 --- electron/main/ipc/ipc-lyric.ts | 6 +++++- electron/main/windows/lyric-window.ts | 2 +- src/composables/useInit.ts | 5 +++++ src/core/player/LyricManager.ts | 2 +- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/electron/main/ipc/ipc-lyric.ts b/electron/main/ipc/ipc-lyric.ts index f928fab81..2f53db0c5 100644 --- a/electron/main/ipc/ipc-lyric.ts +++ b/electron/main/ipc/ipc-lyric.ts @@ -113,8 +113,12 @@ const initLyricIpc = (): void => { } // 绑定主窗口事件监听 bindMainWinEvents(); + // 初始状态设置 + if (isLocked) { + lyricWin?.setIgnoreMouseEvents(true, { forward: true }); + } } else { - lyricWin.show(); + lyricWin.showInactive(); } if (isWinAlive(lyricWin)) { lyricWin.setAlwaysOnTop(true, "screen-saver"); diff --git a/electron/main/windows/lyric-window.ts b/electron/main/windows/lyric-window.ts index 4ec2b724b..340bdc281 100644 --- a/electron/main/windows/lyric-window.ts +++ b/electron/main/windows/lyric-window.ts @@ -15,7 +15,7 @@ class LyricWindow { if (!this.win) return; // 准备好显示 this.win.on("ready-to-show", () => { - this.win?.show(); + this.win?.showInactive(); }); // 页面加载完成后设置标题 // 这里的标题设置是为了 Linux 能够为桌面歌词单独设置窗口规则 diff --git a/src/composables/useInit.ts b/src/composables/useInit.ts index 53dc0b533..c28f25e21 100644 --- a/src/composables/useInit.ts +++ b/src/composables/useInit.ts @@ -79,6 +79,11 @@ export const useInit = () => { window.electron.ipcRenderer.send(TASKBAR_IPC_CHANNELS.REQUEST_DATA); } + // 确保主窗口在最后获得焦点 + setTimeout(() => { + window.electron.ipcRenderer.send("win-show-main"); + }, 500); + // 监听任务栏歌词设置 watch( () => [ diff --git a/src/core/player/LyricManager.ts b/src/core/player/LyricManager.ts index 9a9fefe61..268b6e216 100644 --- a/src/core/player/LyricManager.ts +++ b/src/core/player/LyricManager.ts @@ -834,7 +834,7 @@ class LyricManager { statusStore.lyricLoading = false; // 单曲循环时,歌词数据未变,需通知桌面歌词取消加载状态 if (isElectron) { - window.electron.ipcRenderer.send("update-desktop-lyric-data", { + window.electron.ipcRenderer.send("desktop-lyric:update-data", { lyricLoading: false, }); } From 2ed2f908969eef8e39b242ac6bacbc54df76235c Mon Sep 17 00:00:00 2001 From: Pissofdvpe Date: Wed, 18 Feb 2026 12:15:50 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=90=9Efix(desktopLyrics/window):=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=AE=A1=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 useInit.ts 初始化流程末尾增加基于 FINAL_FOCUS_DELAY_MS 常量的延时聚焦逻辑(win-show-main),并仅在桌面歌词开启时触发,确保程序启动后主窗口稳获最终焦点,同时提升代码可维护性。 --- src/composables/useInit.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/composables/useInit.ts b/src/composables/useInit.ts index c28f25e21..c58faaa62 100644 --- a/src/composables/useInit.ts +++ b/src/composables/useInit.ts @@ -11,6 +11,9 @@ import { useEventListener } from "@vueuse/core"; import { debounce } from "lodash-es"; import { onMounted, watch } from "vue"; +/** 最终聚焦主窗口的延迟时间(毫秒) */ +const FINAL_FOCUS_DELAY_MS = 500; + /** * 应用初始化时需要执行的操作 */ @@ -80,9 +83,11 @@ export const useInit = () => { } // 确保主窗口在最后获得焦点 - setTimeout(() => { - window.electron.ipcRenderer.send("win-show-main"); - }, 500); + if (statusStore.showDesktopLyric) { + setTimeout(() => { + window.electron.ipcRenderer.send("win-show-main"); + }, FINAL_FOCUS_DELAY_MS); + } // 监听任务栏歌词设置 watch(