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)

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to