Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Toenne <lukas.toenne@googlemail.com>2012-03-14 21:52:50 +0400
committerLukas Toenne <lukas.toenne@googlemail.com>2012-03-14 21:52:50 +0400
commit6624090a23fbb67fe45bab2dcbfe4e211c729a14 (patch)
treebb0ce00679028ecd9f3cbe2fa9071646167bf909 /source/blender/editors/space_node/node_select.c
parent930f43bd96b6ec48e202bfb7b4d62731e9d10bfc (diff)
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.
Diffstat (limited to 'source/blender/editors/space_node/node_select.c')
-rw-r--r--source/blender/editors/space_node/node_select.c67
1 files changed, 33 insertions, 34 deletions
diff --git a/source/blender/editors/space_node/node_select.c b/source/blender/editors/space_node/node_select.c
index e2f3e7b51f2..3a92f90675f 100644
--- a/source/blender/editors/space_node/node_select.c
+++ b/source/blender/editors/space_node/node_select.c
@@ -419,6 +419,7 @@ static int node_mouse_select(Main *bmain, SpaceNode *snode, ARegion *ar, const i
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 @@ static int node_mouse_select(Main *bmain, SpaceNode *snode, ARegion *ar, const i
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)