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