From d7053ba030f62c8eb597f6aa24525a96b3c42a17 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 18 May 2022 14:25:05 +1000 Subject: Fix T98191: Alt-LMB for node detach fails with RMB select Regression caused by [0] which changed node selection to use PRESS for selection and CLICK_DRAG to transform the selection. This conflicted with Alt-LMB which would select the node then pass-though to node.background_sample, preventing the drag event from being activated. Resolve by only activating background-sample when the cursor isn't over a node or socket. [0]: 4c3e91e5f565b81dd79b5d42f55be5b93662d410 --- source/blender/editors/space_node/node_intern.hh | 5 +++-- source/blender/editors/space_node/node_select.cc | 7 +++++++ source/blender/editors/space_node/node_view.cc | 6 ++++++ 3 files changed, 16 insertions(+), 2 deletions(-) (limited to 'source/blender/editors') diff --git a/source/blender/editors/space_node/node_intern.hh b/source/blender/editors/space_node/node_intern.hh index 4157176cd68..6d7348bfffc 100644 --- a/source/blender/editors/space_node/node_intern.hh +++ b/source/blender/editors/space_node/node_intern.hh @@ -123,8 +123,6 @@ ENUM_OPERATORS(NodeResizeDirection, NODE_RESIZE_LEFT); */ float2 space_node_group_offset(const SpaceNode &snode); -rctf node_frame_rect_inside(const bNode &node); - int node_get_resize_cursor(NodeResizeDirection directions); /** * Usual convention here would be #node_socket_get_color(), @@ -161,6 +159,9 @@ void node_keymap(wmKeyConfig *keyconf); /* node_select.cc */ +rctf node_frame_rect_inside(const bNode &node); +bool node_or_socket_isect_event(bContext *C, const wmEvent *event); + void node_deselect_all(SpaceNode &snode); void node_socket_select(bNode *node, bNodeSocket &sock); void node_socket_deselect(bNode *node, bNodeSocket &sock, bool deselect_node); diff --git a/source/blender/editors/space_node/node_select.cc b/source/blender/editors/space_node/node_select.cc index db523651534..005dbc1eb10 100644 --- a/source/blender/editors/space_node/node_select.cc +++ b/source/blender/editors/space_node/node_select.cc @@ -48,6 +48,8 @@ namespace blender::ed::space_node { +static bool is_event_over_node_or_socket(bContext *C, const wmEvent *event); + /** * Function to detect if there is a visible view3d that uses workbench in texture mode. * This function is for fixing T76970 for Blender 2.83. The actual fix should add a mechanism in @@ -98,6 +100,11 @@ rctf node_frame_rect_inside(const bNode &node) return frame_inside; } +bool node_or_socket_isect_event(bContext *C, const wmEvent *event) +{ + return is_event_over_node_or_socket(C, event); +} + static bool node_frame_select_isect_mouse(bNode *node, const float2 &mouse) { /* Frame nodes are selectable by their borders (including their whole rect - as for other nodes - diff --git a/source/blender/editors/space_node/node_view.cc b/source/blender/editors/space_node/node_view.cc index 91a21527ac9..6f30632244b 100644 --- a/source/blender/editors/space_node/node_view.cc +++ b/source/blender/editors/space_node/node_view.cc @@ -643,6 +643,12 @@ static int sample_invoke(bContext *C, wmOperator *op, const wmEvent *event) ARegion *region = CTX_wm_region(C); ImageSampleInfo *info; + /* Don't handle events intended for nodes (which rely on click/drag distinction). + * which this operator would use since sampling is normally activated on press, see: T98191. */ + if (node_or_socket_isect_event(C, event)) { + return OPERATOR_PASS_THROUGH; + } + if (!ED_node_is_compositor(snode) || !(snode->flag & SNODE_BACKDRAW)) { return OPERATOR_CANCELLED; } -- cgit v1.2.3