fix: 预览选择复制、关闭超时、链接跳转、监听器泄漏
1. 预览区无法选择复制 — #preview 添加 user-select: text 2. IPC 监听器重复注册 — 注册前先 removeAllListeners 防止堆叠 3. 关闭确认取消后 5s 超时仍强制关闭 — 新增 cancelClose IPC 清除超时 4. 预览区链接点击离开应用 — 拦截点击,通过 shell.openExternal 打开 5. 预览区链接光标样式 — .markdown-body a 添加 cursor: pointer
This commit is contained in:
@@ -6,6 +6,7 @@ let mainWindow = null;
|
||||
let activeFilePath = null; // Currently active tab's file path
|
||||
let pendingFilePath = null;
|
||||
let fileWatcher = null;
|
||||
let closeTimeout = null;
|
||||
|
||||
function createWindow() {
|
||||
mainWindow = new BrowserWindow({
|
||||
@@ -48,7 +49,8 @@ function createWindow() {
|
||||
mainWindow.close();
|
||||
return;
|
||||
}
|
||||
setTimeout(() => {
|
||||
// 5s safety timeout in case renderer is unresponsive
|
||||
closeTimeout = setTimeout(() => {
|
||||
if (mainWindow && !mainWindow.isDestroyed()) {
|
||||
mainWindow.removeAllListeners('close');
|
||||
mainWindow.close();
|
||||
@@ -237,11 +239,22 @@ ipcMain.handle('tab:switched', (event, filePath) => {
|
||||
});
|
||||
|
||||
ipcMain.handle('window:forceClose', () => {
|
||||
if (closeTimeout) {
|
||||
clearTimeout(closeTimeout);
|
||||
closeTimeout = null;
|
||||
}
|
||||
stopWatching();
|
||||
mainWindow.removeAllListeners('close');
|
||||
mainWindow.close();
|
||||
});
|
||||
|
||||
ipcMain.handle('window:cancelClose', () => {
|
||||
if (closeTimeout) {
|
||||
clearTimeout(closeTimeout);
|
||||
closeTimeout = null;
|
||||
}
|
||||
});
|
||||
|
||||
// Command line file
|
||||
function getCommandLineFile() {
|
||||
const args = process.argv.slice(1);
|
||||
|
||||
Reference in New Issue
Block a user