From 84d560edb4cd5011e2e2c9e3066a09b013a26b78 Mon Sep 17 00:00:00 2001 From: Michael Hutchison Date: Sat, 23 Feb 2019 11:00:30 +1100 Subject: [PATCH] #11 Context menu closes on the next mouse interaction, instead of when the mouse leaves the context menu. --- media/main.css | 2 +- web/main.ts | 18 ++++++++++++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/media/main.css b/media/main.css index 208e0417..ea233c83 100644 --- a/media/main.css +++ b/media/main.css @@ -326,7 +326,7 @@ svg.openFolderIcon, svg.closedFolderIcon, svg.fileIcon{ display:none; position:absolute; background-color:var(--vscode-menu-background); - box-shadow:0 1px 3px 1px var(--vscode-widget-shadow); + box-shadow:0 1px 4px 1px var(--vscode-widget-shadow); color:var(--vscode-menu-foreground); list-style-type:none; margin:0; diff --git a/web/main.ts b/web/main.ts index 7811194d..549882aa 100644 --- a/web/main.ts +++ b/web/main.ts @@ -544,7 +544,6 @@ ], sourceElem); }); addListenerToClass('commit', 'click', (e: Event) => { - e.stopPropagation(); let sourceElem = (e.target).closest('.commit')!; if (this.expandedCommit !== null && this.expandedCommit.hash === sourceElem.dataset.hash!) { this.hideCommitDetails(); @@ -871,6 +870,7 @@ html += '
  • ' + items[i].title + '
  • '; } + hideContextMenuListener(); contextMenu.style.opacity = '0'; contextMenu.className = 'active'; contextMenu.innerHTML = html; @@ -880,10 +880,10 @@ contextMenu.style.opacity = '1'; addListenerToClass('contextMenuItem', 'click', (e) => { + e.stopPropagation(); hideContextMenu(); items[parseInt(((e.target)).dataset.index!)].onClick(); }); - contextMenu.addEventListener('mouseleave', hideContextMenu); contextMenuSource = sourceElem; contextMenuSource.classList.add('contextMenuActive'); @@ -893,7 +893,6 @@ contextMenu.innerHTML = ''; contextMenu.style.left = '0px'; contextMenu.style.top = '0px'; - contextMenu.removeEventListener('mouseleave', hideContextMenu); if (contextMenuSource !== null) { contextMenuSource.classList.remove('contextMenuActive'); contextMenuSource = null; @@ -973,7 +972,18 @@ dialogMenuSource = null; } } + + /* Global Listeners */ document.addEventListener('keyup', (e) => { - if (e.key === 'Escape' && dialog.classList.contains('active')) hideDialog(); + if (e.key === 'Escape') { + if (dialog.classList.contains('active')) hideDialog(); + hideContextMenuListener(); + } }); + document.addEventListener('click', hideContextMenuListener); + document.addEventListener('contextmenu', hideContextMenuListener); + document.addEventListener('mouseleave', hideContextMenuListener); + function hideContextMenuListener() { + if (contextMenu.classList.contains('active')) hideContextMenu(); + } }()); \ No newline at end of file