mirror of
https://github.com/node-red/node-red.git
synced 2023-10-10 13:36:53 +02:00
Merge pull request #4310 from node-red/4206-ctrl-click-behaviour
Better distinguish between ctrl and meta keys on mac
This commit is contained in:
commit
ce0feb2f42
@ -302,11 +302,21 @@ RED.view = (function() {
|
|||||||
return api
|
return api
|
||||||
})()
|
})()
|
||||||
|
|
||||||
|
const isMac = RED.utils.getBrowserInfo().os === 'mac'
|
||||||
|
// 'Control' is the main modifier key for mouse actions. On Windows,
|
||||||
|
// that is the standard Ctrl key. On Mac that is the Cmd key.
|
||||||
|
function isControlPressed (event) {
|
||||||
|
return (isMac && event.metaKey) || (!isMac && event.ctrlKey)
|
||||||
|
}
|
||||||
|
|
||||||
function init() {
|
function init() {
|
||||||
|
|
||||||
chart = $("#red-ui-workspace-chart");
|
chart = $("#red-ui-workspace-chart");
|
||||||
chart.on('contextmenu', function(evt) {
|
chart.on('contextmenu', function(evt) {
|
||||||
|
if (RED.view.DEBUG) {
|
||||||
|
console.warn("contextmenu", { mouse_mode, event: d3.event });
|
||||||
|
}
|
||||||
|
mouse_mode = RED.state.DEFAULT
|
||||||
evt.preventDefault()
|
evt.preventDefault()
|
||||||
evt.stopPropagation()
|
evt.stopPropagation()
|
||||||
RED.contextMenu.show({
|
RED.contextMenu.show({
|
||||||
@ -1190,7 +1200,7 @@ RED.view = (function() {
|
|||||||
lasso = null;
|
lasso = null;
|
||||||
}
|
}
|
||||||
if (d3.event.touches || d3.event.button === 0) {
|
if (d3.event.touches || d3.event.button === 0) {
|
||||||
if ((mouse_mode === 0 || mouse_mode === RED.state.QUICK_JOINING) && (d3.event.metaKey || d3.event.ctrlKey) && !(d3.event.altKey || d3.event.shiftKey)) {
|
if ((mouse_mode === 0 || mouse_mode === RED.state.QUICK_JOINING) && isControlPressed(d3.event) && !(d3.event.altKey || d3.event.shiftKey)) {
|
||||||
// Trigger quick add dialog
|
// Trigger quick add dialog
|
||||||
d3.event.stopPropagation();
|
d3.event.stopPropagation();
|
||||||
clearSelection();
|
clearSelection();
|
||||||
@ -1200,7 +1210,7 @@ RED.view = (function() {
|
|||||||
clickedGroup = clickedGroup || RED.nodes.group(drag_lines[0].node.g)
|
clickedGroup = clickedGroup || RED.nodes.group(drag_lines[0].node.g)
|
||||||
}
|
}
|
||||||
showQuickAddDialog({ position: point, group: clickedGroup });
|
showQuickAddDialog({ position: point, group: clickedGroup });
|
||||||
} else if (mouse_mode === 0 && !(d3.event.metaKey || d3.event.ctrlKey)) {
|
} else if (mouse_mode === 0 && !isControlPressed(d3.event)) {
|
||||||
// CTRL not being held
|
// CTRL not being held
|
||||||
if (!d3.event.altKey) {
|
if (!d3.event.altKey) {
|
||||||
// ALT not held (shift is allowed) Trigger lasso
|
// ALT not held (shift is allowed) Trigger lasso
|
||||||
@ -3540,7 +3550,7 @@ RED.view = (function() {
|
|||||||
d3.event.preventDefault()
|
d3.event.preventDefault()
|
||||||
document.getSelection().removeAllRanges()
|
document.getSelection().removeAllRanges()
|
||||||
if (d.type != "subflow") {
|
if (d.type != "subflow") {
|
||||||
if (/^subflow:/.test(d.type) && (d3.event.ctrlKey || d3.event.metaKey)) {
|
if (/^subflow:/.test(d.type) && isControlPressed(d3.event)) {
|
||||||
RED.workspaces.show(d.type.substring(8));
|
RED.workspaces.show(d.type.substring(8));
|
||||||
} else {
|
} else {
|
||||||
RED.editor.edit(d);
|
RED.editor.edit(d);
|
||||||
@ -3704,12 +3714,12 @@ RED.view = (function() {
|
|||||||
d.type !== 'junction'
|
d.type !== 'junction'
|
||||||
lastClickNode = mousedown_node;
|
lastClickNode = mousedown_node;
|
||||||
|
|
||||||
if (d.selected && (d3.event.ctrlKey||d3.event.metaKey)) {
|
if (d.selected && isControlPressed(d3.event)) {
|
||||||
mousedown_node.selected = false;
|
mousedown_node.selected = false;
|
||||||
movingSet.remove(mousedown_node);
|
movingSet.remove(mousedown_node);
|
||||||
} else {
|
} else {
|
||||||
if (d3.event.shiftKey) {
|
if (d3.event.shiftKey) {
|
||||||
if (!(d3.event.ctrlKey||d3.event.metaKey)) {
|
if (!isControlPressed(d3.event)) {
|
||||||
clearSelection();
|
clearSelection();
|
||||||
}
|
}
|
||||||
var clickPosition = (d3.event.offsetX/scaleFactor - mousedown_node.x)
|
var clickPosition = (d3.event.offsetX/scaleFactor - mousedown_node.x)
|
||||||
@ -3878,10 +3888,10 @@ RED.view = (function() {
|
|||||||
}
|
}
|
||||||
mousedown_link = d;
|
mousedown_link = d;
|
||||||
|
|
||||||
if (!(d3.event.metaKey || d3.event.ctrlKey)) {
|
if (!isControlPressed(d3.event)) {
|
||||||
clearSelection();
|
clearSelection();
|
||||||
}
|
}
|
||||||
if (d3.event.metaKey || d3.event.ctrlKey) {
|
if (isControlPressed(d3.event)) {
|
||||||
if (!selectedLinks.has(mousedown_link)) {
|
if (!selectedLinks.has(mousedown_link)) {
|
||||||
selectedLinks.add(mousedown_link);
|
selectedLinks.add(mousedown_link);
|
||||||
} else {
|
} else {
|
||||||
@ -3896,7 +3906,7 @@ RED.view = (function() {
|
|||||||
redraw();
|
redraw();
|
||||||
focusView();
|
focusView();
|
||||||
d3.event.stopPropagation();
|
d3.event.stopPropagation();
|
||||||
if (!mousedown_link.link && movingSet.length() === 0 && (d3.event.touches || d3.event.button === 0) && selectedLinks.length() === 1 && selectedLinks.has(mousedown_link) && (d3.event.metaKey || d3.event.ctrlKey)) {
|
if (!mousedown_link.link && movingSet.length() === 0 && (d3.event.touches || d3.event.button === 0) && selectedLinks.length() === 1 && selectedLinks.has(mousedown_link) && isControlPressed(d3.event)) {
|
||||||
d3.select(this).classed("red-ui-flow-link-splice",true);
|
d3.select(this).classed("red-ui-flow-link-splice",true);
|
||||||
var point = d3.mouse(this);
|
var point = d3.mouse(this);
|
||||||
var clickedGroup = getGroupAt(point[0],point[1]);
|
var clickedGroup = getGroupAt(point[0],point[1]);
|
||||||
@ -3977,7 +3987,7 @@ RED.view = (function() {
|
|||||||
);
|
);
|
||||||
lastClickNode = g;
|
lastClickNode = g;
|
||||||
|
|
||||||
if (g.selected && (d3.event.ctrlKey||d3.event.metaKey)) {
|
if (g.selected && isControlPressed(d3.event)) {
|
||||||
selectedGroups.remove(g);
|
selectedGroups.remove(g);
|
||||||
d3.event.stopPropagation();
|
d3.event.stopPropagation();
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user