From 415e25b5d524b0d3c391403f129468e57bbb918e Mon Sep 17 00:00:00 2001 From: Alex Grozav Date: Fri, 21 Feb 2025 15:01:06 +0200 Subject: [PATCH] fix(editor): Switch back to selection mode on window blur (#13341) --- .../src/components/canvas/Canvas.vue | 34 +++++++++++++------ 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/packages/editor-ui/src/components/canvas/Canvas.vue b/packages/editor-ui/src/components/canvas/Canvas.vue index 03161b42b2..bc4eab4407 100644 --- a/packages/editor-ui/src/components/canvas/Canvas.vue +++ b/packages/editor-ui/src/components/canvas/Canvas.vue @@ -155,22 +155,22 @@ const panningKeyCode = ref(isMobileDevice ? true : [' ', contro const panningMouseButton = ref(isMobileDevice ? true : [1]); const selectionKeyCode = ref(isMobileDevice ? 'Shift' : true); -onKeyDown( - panningKeyCode.value, - () => { - selectionKeyCode.value = null; - panningMouseButton.value = [0, 1]; - }, - { - dedupe: true, - }, -); +function switchToPanningMode() { + selectionKeyCode.value = null; + panningMouseButton.value = [0, 1]; +} -onKeyUp(panningKeyCode.value, () => { +function switchToSelectionMode() { selectionKeyCode.value = true; panningMouseButton.value = [1]; +} + +onKeyDown(panningKeyCode.value, switchToPanningMode, { + dedupe: true, }); +onKeyUp(panningKeyCode.value, switchToSelectionMode); + /** * Rename node key bindings * We differentiate between short and long press because the space key is also used for activating panning @@ -672,6 +672,14 @@ function onMinimapMouseLeave() { hideMinimap(); } +/** + * Window Events + */ + +function onWindowBlur() { + switchToSelectionMode(); +} + /** * Lifecycle */ @@ -681,11 +689,15 @@ const initialized = ref(false); onMounted(() => { props.eventBus.on('fitView', onFitView); props.eventBus.on('nodes:select', onSelectNodes); + + window.addEventListener('blur', onWindowBlur); }); onUnmounted(() => { props.eventBus.off('fitView', onFitView); props.eventBus.off('nodes:select', onSelectNodes); + + window.removeEventListener('blur', onWindowBlur); }); onPaneReady(async () => {