From b5d6694afa4bc0c9c04fd8c5296e54f494c8e8c0 Mon Sep 17 00:00:00 2001 From: mirivlad Date: Sat, 20 Jun 2026 19:47:09 +0800 Subject: [PATCH] plugins(files): fix document event listener leak in context menu cleanup --- plugins/files/frontend/src/index.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/plugins/files/frontend/src/index.js b/plugins/files/frontend/src/index.js index 7ec7c63..c76dc8e 100644 --- a/plugins/files/frontend/src/index.js +++ b/plugins/files/frontend/src/index.js @@ -605,12 +605,14 @@ window.__filesClipboard = { action: 'copy', path: entry.relativePath, name: entry.name }; } - document.addEventListener('click', function (e) { + var onDocClick = function (e) { if (!ctxMenu.contains(e.target)) hideCtxMenu(); - }); - document.addEventListener('keydown', function (e) { + }; + var onDocKeydown = function (e) { if (e.key === 'Escape') hideCtxMenu(); - }); + }; + document.addEventListener('click', onDocClick); + document.addEventListener('keydown', onDocKeydown); listContainer.addEventListener('contextmenu', function (e) { e.preventDefault(); @@ -634,6 +636,8 @@ containerEl.__filesCleanup = function () { disposed = true; + document.removeEventListener('click', onDocClick); + document.removeEventListener('keydown', onDocKeydown); if (ctxMenu && ctxMenu.parentNode) ctxMenu.parentNode.removeChild(ctxMenu); }; },