[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [44880] trunk/blender/source/blender/ editors/space_node/node_select.c: Make extension mode (shiftkey) mandatory for socket selection.

Lukas Toenne lukas.toenne at googlemail.com
Wed Mar 14 18:52:51 CET 2012


Revision: 44880
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44880
Author:   lukastoenne
Date:     2012-03-14 17:52:50 +0000 (Wed, 14 Mar 2012)
Log Message:
-----------
Make extension mode (shiftkey) mandatory for socket selection. Otherwise the user can end up with unexpectedly selected nodes, since socket selection allows selecting inputs and outputs from different nodes, which in turn also mean the parent nodes are selected. This fits the workflow better, you already needed to press shiftkey before to use the auto-connect operator. It will also solve some problems with the upcoming reroute nodes, where the node is basically a single socket.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_node/node_select.c

Modified: trunk/blender/source/blender/editors/space_node/node_select.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_select.c	2012-03-14 14:09:56 UTC (rev 44879)
+++ trunk/blender/source/blender/editors/space_node/node_select.c	2012-03-14 17:52:50 UTC (rev 44880)
@@ -419,6 +419,7 @@
 	bNode *node, *tnode;
 	bNodeSocket *sock, *tsock;
 	float mx, my;
+	int selected = 0;
 	
 	/* get mouse coordinates in view2d space */
 	UI_view2d_region_to_view(&ar->v2d, mval[0], mval[1], &mx, &my);
@@ -426,63 +427,61 @@
 	snode->mx = mx;
 	snode->my = my;
 	
-	/* first do socket selection, these generally overlap with nodes */
-	if (node_find_indicated_socket(snode, &node, &sock, SOCK_IN)) {
-		if (extend) {
+	if (extend) {
+		/* first do socket selection, these generally overlap with nodes.
+		 * socket selection only in extend mode.
+		 */
+		if (node_find_indicated_socket(snode, &node, &sock, SOCK_IN)) {
 			node_socket_toggle(node, sock, 1);
+			selected = 1;
 		}
-		else {
-			node_deselect_all_input_sockets(snode, 1);
-			node_socket_select(node, sock);
-		}
-		
-		return 1;
-	}
-	else if (node_find_indicated_socket(snode, &node, &sock, SOCK_OUT)) {
-		if (extend) {
+		else if (node_find_indicated_socket(snode, &node, &sock, SOCK_OUT)) {
 			if (sock->flag & SELECT) {
 				node_socket_deselect(node, sock, 1);
 			}
 			else {
-				/* still only allow one selected output per node when extending, for sensible linking.
-				 * extend allows selecting outputs from different nodes though.
-				 */
+				/* only allow one selected output per node, for sensible linking.
+				* allows selecting outputs from different nodes though.
+				*/
 				if (node) {
 					for (tsock=node->outputs.first; tsock; tsock=tsock->next)
 						node_socket_deselect(node, tsock, 1);
 				}
 				node_socket_select(node, sock);
 			}
+			selected = 1;
 		}
 		else {
-			node_deselect_all_output_sockets(snode, 1);
-			node_socket_select(node, sock);
+			/* find the closest visible node */
+			node = node_under_mouse(snode->edittree, mx, my);
+			
+			if (node) {
+				node_toggle(node);
+				
+				ED_node_set_active(bmain, snode->edittree, node);
+				selected = 1;
+			}
 		}
-		
-		return 1;
 	}
-	else {
+	else {	/* extend==0 */
+		
 		/* find the closest visible node */
 		node = node_under_mouse(snode->edittree, mx, my);
 		
 		if (node) {
-			if (extend == 0) {
-				for (tnode=snode->edittree->nodes.first; tnode; tnode=tnode->next)
-					if (tnode!=node)
-						node_deselect(tnode);
-				node_select(node);
-			}
-			else {
-				node_toggle(node);
-			}
-			
+			for (tnode=snode->edittree->nodes.first; tnode; tnode=tnode->next)
+				node_deselect(tnode);
+			node_select(node);
 			ED_node_set_active(bmain, snode->edittree, node);
-			node_sort(snode->edittree);
-			return 1;
+			selected = 1;
 		}
-		
-		return 0;
 	}
+	
+	/* update node order */
+	if (selected)
+		node_sort(snode->edittree);
+	
+	return selected;
 }
 
 static int node_select_exec(bContext *C, wmOperator *op)




More information about the Bf-blender-cvs mailing list