mirror of
https://github.com/algerkong/AlgerMusicPlayer.git
synced 2026-04-24 16:27:23 +08:00
fix(lyric-window): 锁定状态启动时同步穿透并禁用 resize
- 重启应用恢复锁定时, 主进程主动 setIgnoreMouseEvents(true), 修复鼠标无法穿透 - 锁定时 setResizable(false), 隐藏窗口边缘 resize 光标 - 由 set-lyric-lock-state IPC 统一驱动, 后续 polling 按位置精细纠正
This commit is contained in:
+7
-3
@@ -10,7 +10,7 @@ let isDragging = false;
|
||||
|
||||
// 添加窗口大小变化防护
|
||||
let originalSize = { width: 0, height: 0 };
|
||||
// 轮询只在 "锁定 + 窗口可见" 时启用:解锁状态下 DOM 事件足够,避免常驻 50ms 轮询
|
||||
// 鼠标位置轮询仅在"锁定 + 可见"时启用,解锁态下 DOM 事件已足够
|
||||
let mousePresenceTimer: ReturnType<typeof setInterval> | null = null;
|
||||
let lastMouseInside: boolean | null = null;
|
||||
let isLyricLocked = false;
|
||||
@@ -170,7 +170,6 @@ const createWin = () => {
|
||||
}
|
||||
});
|
||||
|
||||
// 窗口可见性变化时同步轮询状态,避免最小化/隐藏时空转
|
||||
lyricWindow.on('show', () => {
|
||||
isLyricWindowVisible = true;
|
||||
syncMousePresenceTracking();
|
||||
@@ -285,9 +284,14 @@ export const loadLyricWindow = (ipcMain: IpcMain, mainWin: BrowserWindow): void
|
||||
}
|
||||
});
|
||||
|
||||
// 渲染端同步锁定状态 → 决定主进程是否需要轮询鼠标位置
|
||||
ipcMain.on('set-lyric-lock-state', (_, isLocked: boolean) => {
|
||||
isLyricLocked = isLocked;
|
||||
if (lyricWindow && !lyricWindow.isDestroyed()) {
|
||||
// 锁定时禁用 resize,避免鼠标移到边缘仍显示调整光标
|
||||
lyricWindow.setResizable(!isLocked);
|
||||
// 设置初始穿透状态,后续 polling 会按实际位置纠正
|
||||
lyricWindow.setIgnoreMouseEvents(isLocked, { forward: true });
|
||||
}
|
||||
syncMousePresenceTracking();
|
||||
});
|
||||
|
||||
|
||||
@@ -401,7 +401,6 @@ watch(
|
||||
// 锁定时自动关闭主题色面板
|
||||
showThemeColorPanel.value = false;
|
||||
}
|
||||
// 通知主进程,按需启停鼠标位置轮询
|
||||
windowData.electron.ipcRenderer.send('set-lyric-lock-state', newLock);
|
||||
}
|
||||
);
|
||||
@@ -797,7 +796,6 @@ onMounted(() => {
|
||||
}
|
||||
);
|
||||
|
||||
// 同步初始锁定状态到主进程,使其按需启动鼠标位置轮询
|
||||
windowData.electron.ipcRenderer.send('set-lyric-lock-state', lyricSetting.value.isLock);
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user