From ef5beeff947562337f5b27f0f1d26244301d9fef Mon Sep 17 00:00:00 2001 From: Jamie Banks Date: Tue, 9 Jun 2026 15:31:39 +0100 Subject: [PATCH] fix: prevent context menu from overflowing the viewport boundaries --- frontend/src/main.js | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/frontend/src/main.js b/frontend/src/main.js index 19db73d..15a944e 100644 --- a/frontend/src/main.js +++ b/frontend/src/main.js @@ -482,8 +482,19 @@ document.addEventListener('contextmenu', (e) => { document.getElementById('ctx-divider').style.display = 'block'; menu.style.display = 'block'; - menu.style.left = `${e.pageX}px`; - menu.style.top = `${e.pageY}px`; + + let left = e.pageX; + let top = e.pageY; + + if (left + menu.offsetWidth > window.innerWidth) { + left = window.innerWidth - menu.offsetWidth; + } + if (top + menu.offsetHeight > window.innerHeight) { + top = window.innerHeight - menu.offsetHeight; + } + + menu.style.left = `${left}px`; + menu.style.top = `${top}px`; } else if (isBrowserPane && !e.target.closest('#transfer-dest-list')) { e.preventDefault(); @@ -494,8 +505,19 @@ document.addEventListener('contextmenu', (e) => { document.getElementById('ctx-divider').style.display = 'none'; menu.style.display = 'block'; - menu.style.left = `${e.pageX}px`; - menu.style.top = `${e.pageY}px`; + + let left = e.pageX; + let top = e.pageY; + + if (left + menu.offsetWidth > window.innerWidth) { + left = window.innerWidth - menu.offsetWidth; + } + if (top + menu.offsetHeight > window.innerHeight) { + top = window.innerHeight - menu.offsetHeight; + } + + menu.style.left = `${left}px`; + menu.style.top = `${top}px`; } });