diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/view.js b/packages/node_modules/@node-red/editor-client/src/js/ui/view.js index 81a5eed10..faa7ea810 100755 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/view.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/view.js @@ -2928,15 +2928,26 @@ RED.view = (function() { var nodeGroup = RED.nodes.group(d.g); if (nodeGroup !== activeGroup && (d3.event.ctrlKey || d3.event.metaKey)) { - // Clicked on a node in a non-active group with ctrl pressed - // - exit active group - // - toggle the select state of the group - exitActiveGroup(); - groupNodeSelectPrimed = true; - if (nodeGroup.selected) { - deselectGroup(nodeGroup); + if (activeGroup && nodeGroup.g === activeGroup.id) { + // Clicked on a node in a non-active group, inside the activeGroup, with ctrl pressed + // - add/remove the group from the current selection + groupNodeSelectPrimed = true; + if (nodeGroup.selected) { + deselectGroup(nodeGroup); + } else { + selectGroup(nodeGroup,true); + } } else { - selectGroup(nodeGroup,true); + // Clicked on a node in a non-active group with ctrl pressed + // - exit active group + // - toggle the select state of the group + exitActiveGroup(); + groupNodeSelectPrimed = true; + if (nodeGroup.selected) { + deselectGroup(nodeGroup); + } else { + selectGroup(nodeGroup,true); + } } } else if (nodeGroup === activeGroup ) { if (d3.event.shiftKey) { @@ -2958,9 +2969,14 @@ RED.view = (function() { // Clicked on a node in the active group if (!d3.event.ctrlKey && !d3.event.metaKey) { // Ctrl not pressed so clear selection + var ag = activeGroup; clearSelection(); deselectGroup(nodeGroup); selectGroup(nodeGroup,false,false); + if (ag) { + enterActiveGroup(ag); + activeGroup.selected = true; + } } // Select this node @@ -2984,18 +3000,18 @@ RED.view = (function() { clearSelection(); } if (ag) { - if (ag !== nodeGroup) { + if (ag !== nodeGroup && ag.id !== nodeGroup.g) { ag.active = false; ag.dirty = true; } else { - activeGroup = nodeGroup; + activeGroup = ag; activeGroup.active = true; } } else { dblClickPrimed = false; } - selectGroup(nodeGroup, !activeGroup, !!groupNodeSelectPrimed); - if (activeGroup) { + selectGroup(nodeGroup, !(activeGroup && activeGroup === nodeGroup), !!groupNodeSelectPrimed); + if (activeGroup && activeGroup === nodeGroup) { mousedown_node.selected = true; movingSet.add(mousedown_node); } @@ -3260,7 +3276,12 @@ RED.view = (function() { } else { if (!g.selected) { if (!d3.event.ctrlKey && !d3.event.metaKey) { + var ag = activeGroup; clearSelection(); + if (ag && g.g === ag.id) { + enterActiveGroup(ag); + activeGroup.selected = true; + } } if (activeGroup) { if (!RED.group.contains(activeGroup,g)) { @@ -3270,7 +3291,7 @@ RED.view = (function() { } } selectGroup(g,true);//!wasSelected); - } else { + } else if (activeGroup && g.g !== activeGroup.id){ exitActiveGroup(); }