Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <campbell@blender.org>2022-05-10 15:57:00 +0300
committerCampbell Barton <campbell@blender.org>2022-05-10 16:01:56 +0300
commit4c3e91e5f565b81dd79b5d42f55be5b93662d410 (patch)
tree740913f03ba609a854058e50b7abc54f08e6c5b6 /release/scripts/presets/keyconfig/keymap_data/blender_default.py
parent4ffeb2d449296fbc03d9f5af3288b8e0ff07c602 (diff)
Fix T96520 Node editor: Tweak fails with unselected nodes
Use the same method for node selection and dragging that is used in the 3D viewport and UV editor. Instead of relying on a modal operator - use the keymap to handle click/drag events. Details: Failure to transform unselected nodes was caused by [0] & [1] however detecting drag relied on specific behavior which I don't think we should be depending on. This error happened when selection was defined both in the key-map for the tool and for the node-editor. - The left mouse button would activate selection in both the tool and "Node Editor" keymap. - The first selection would return `FINISHED | PASS_THROUGH` when selecting a previously unselected node. - The same PRESS would trigger a second selection would return `RUNNING_MODAL | PASS_THROUGH`, (starting a NODE_OT_select as a modal operator). - In 3.1 (with tweak events) the modal operator would then exit and fall-back to the tweak event which would transform the selected nodes. - In 3.2 (as of [0]) the PRESS that starts the modal operator is considered "handled" and prevents drag event from being detected. The correct behavior in this case isn't obvious: If a modal operator starts on pressing a button, using that same the release to generate drag/click events is disputable. Even in the case or 3.1 it was inconsistent as tweak events were generated but click events weren't. Note: after investigating this bug it turns out a similar issue already existed in 2.91 and all releases afterwards. While the bug is more obscure, it's also caused by the tweak event being interrupted as described here, this commit resolves T81824 as well. [0]: 4d0f846b936c9101ecb76a6db962aac2d74a460a [1]: 4986f718482b061082936f1f6aa13929741093a2 Reviewed By: Severin Ref D14499
Diffstat (limited to 'release/scripts/presets/keyconfig/keymap_data/blender_default.py')
-rw-r--r--release/scripts/presets/keyconfig/keymap_data/blender_default.py68
1 files changed, 40 insertions, 28 deletions
diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
index 78620c41d1e..64e0917da65 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -2019,37 +2019,20 @@ def km_node_editor(params):
{"items": items},
)
- def node_select_ops(select_mouse):
- return [
- ("node.select", {"type": select_mouse, "value": 'PRESS'},
- {"properties": [("deselect_all", True)]}),
- ("node.select", {"type": select_mouse, "value": 'PRESS', "ctrl": True}, None),
- ("node.select", {"type": select_mouse, "value": 'PRESS', "alt": True}, None),
- ("node.select", {"type": select_mouse, "value": 'PRESS', "ctrl": True, "alt": True}, None),
- ("node.select", {"type": select_mouse, "value": 'PRESS', "shift": True},
- {"properties": [("extend", True)]}),
- ("node.select", {"type": select_mouse, "value": 'PRESS', "shift": True, "ctrl": True},
- {"properties": [("extend", True)]}),
- ("node.select", {"type": select_mouse, "value": 'PRESS', "shift": True, "alt": True},
- {"properties": [("extend", True)]}),
- ("node.select", {"type": select_mouse, "value": 'PRESS', "shift": True, "ctrl": True, "alt": True},
- {"properties": [("extend", True)]}),
- ]
-
- # Allow node selection with both for RMB select
if not params.legacy:
+ items.extend(_template_node_select(type=params.select_mouse,
+ value=params.select_mouse_value, select_passthrough=True))
+ # Allow node selection with both for RMB select.
if params.select_mouse == 'RIGHTMOUSE':
- items.extend(node_select_ops('LEFTMOUSE'))
- items.extend(node_select_ops('RIGHTMOUSE'))
- else:
- items.extend(node_select_ops('LEFTMOUSE'))
+ items.extend(_template_node_select(type='LEFTMOUSE', value='PRESS', select_passthrough=True))
else:
- items.extend(node_select_ops('RIGHTMOUSE'))
+ items.extend(_template_node_select(
+ type='RIGHTMOUSE', value=params.select_mouse_value, select_passthrough=False))
items.extend([
("node.select", {"type": 'LEFTMOUSE', "value": 'PRESS'},
{"properties": [("deselect_all", False)]}),
("node.select", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True},
- {"properties": [("extend", True)]}),
+ {"properties": [("toggle", True)]}),
])
items.extend([
@@ -4782,6 +4765,35 @@ def _template_view3d_gpencil_select(*, type, value, legacy, use_select_mouse=Tru
]
+def _template_node_select(*, type, value, select_passthrough):
+ items = [
+ ("node.select", {"type": type, "value": value},
+ {"properties": [("deselect_all", True), ("select_passthrough", True)]}),
+ ("node.select", {"type": type, "value": value, "ctrl": True}, None),
+ ("node.select", {"type": type, "value": value, "alt": True}, None),
+ ("node.select", {"type": type, "value": value, "ctrl": True, "alt": True}, None),
+ ("node.select", {"type": type, "value": value, "shift": True},
+ {"properties": [("toggle", True)]}),
+ ("node.select", {"type": type, "value": value, "shift": True, "ctrl": True},
+ {"properties": [("toggle", True)]}),
+ ("node.select", {"type": type, "value": value, "shift": True, "alt": True},
+ {"properties": [("toggle", True)]}),
+ ("node.select", {"type": type, "value": value, "shift": True, "ctrl": True, "alt": True},
+ {"properties": [("toggle", True)]}),
+ ]
+
+ if select_passthrough and (value == 'PRESS'):
+ # Add an additional click item to de-select all other items,
+ # needed so pass-through is able to de-select other items.
+ items.append((
+ "node.select",
+ {"type": type, "value": 'CLICK'},
+ {"properties": [("deselect_all", True)]},
+ ))
+
+ return items
+
+
def _template_uv_select(*, type, value, select_passthrough, legacy):
# See: `use_tweak_select_passthrough` doc-string.
@@ -6543,10 +6555,8 @@ def km_node_editor_tool_select(params, *, fallback):
_fallback_id("Node Tool: Tweak", fallback),
{"space_type": 'NODE_EDITOR', "region_type": 'WINDOW'},
{"items": [
- *([] if (fallback and (params.select_mouse == 'RIGHTMOUSE')) else [
- ("node.select", {"type": params.select_mouse, "value": 'PRESS'},
- {"properties": [("deselect_all", not params.legacy)]}),
- ]),
+ *([] if (fallback and (params.select_mouse == 'RIGHTMOUSE')) else
+ _template_node_select(type=params.select_mouse, value='PRESS', select_passthrough=True)),
]},
)
@@ -6563,6 +6573,8 @@ def km_node_editor_tool_select_box(params, *, fallback):
params.tool_tweak_event),
properties=[("tweak", True)],
)),
+ *([] if (params.select_mouse == 'RIGHTMOUSE') else
+ _template_node_select(type='LEFTMOUSE', value='PRESS', select_passthrough=True)),
]},
)