[Bf-blender-cvs] [d7053ba030f] blender-v3.2-release: Fix T98191: Alt-LMB for node detach fails with RMB select

Campbell Barton noreply at git.blender.org
Wed May 18 06:42:50 CEST 2022


Commit: d7053ba030f62c8eb597f6aa24525a96b3c42a17
Author: Campbell Barton
Date:   Wed May 18 14:25:05 2022 +1000
Branches: blender-v3.2-release
https://developer.blender.org/rBd7053ba030f62c8eb597f6aa24525a96b3c42a17

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

===================================================================

M	source/blender/editors/space_node/node_intern.hh
M	source/blender/editors/space_node/node_select.cc
M	source/blender/editors/space_node/node_view.cc

===================================================================

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;
   }



More information about the Bf-blender-cvs mailing list