Corrected updating inside edited groups, fix for #27018. This was caused by edit updates being restricted to the actual node. Edit functions now should use the generic snode_tag_changed, which also updates all instances of the currently edited group.

This commit is contained in:
Lukas Toenne 2011-04-19 15:15:50 +00:00
parent 9abd711304
commit 6cb761f10c
2 changed files with 21 additions and 17 deletions

@ -56,7 +56,6 @@
#include "BKE_fcurve.h" #include "BKE_fcurve.h"
#include "BKE_node.h" #include "BKE_node.h"
#include "BKE_utildefines.h" #include "BKE_utildefines.h"
#include "BKE_node.h"
#include "PIL_time.h" #include "PIL_time.h"

@ -460,6 +460,19 @@ void snode_set_context(SpaceNode *snode, Scene *scene)
node_tree_from_ID(snode->id, &snode->nodetree, &snode->edittree, NULL); node_tree_from_ID(snode->id, &snode->nodetree, &snode->edittree, NULL);
} }
static void snode_tag_changed(SpaceNode *snode, bNode *node)
{
bNode *gnode;
if (node)
NodeTagChanged(snode->edittree, node);
/* if inside group, tag entire group */
gnode= node_tree_get_editgroup(snode->nodetree);
if(gnode)
NodeTagIDChanged(snode->nodetree, gnode->id);
}
void node_set_active(SpaceNode *snode, bNode *node) void node_set_active(SpaceNode *snode, bNode *node)
{ {
nodeSetActive(snode->edittree, node); nodeSetActive(snode->edittree, node);
@ -508,14 +521,7 @@ void node_set_active(SpaceNode *snode, bNode *node)
node->flag |= NODE_DO_OUTPUT; node->flag |= NODE_DO_OUTPUT;
if(was_output==0) { if(was_output==0) {
bNode *gnode; snode_tag_changed(snode, node);
NodeTagChanged(snode->edittree, node);
/* if inside group, tag entire group */
gnode= node_tree_get_editgroup(snode->nodetree);
if(gnode)
NodeTagIDChanged(snode->nodetree, gnode->id);
ED_node_changed_update(snode->id, node); ED_node_changed_update(snode->id, node);
} }
@ -1553,7 +1559,7 @@ static void node_link_viewer(SpaceNode *snode, bNode *tonode)
link->fromsock= sock; link->fromsock= sock;
} }
ntreeSolveOrder(snode->edittree); ntreeSolveOrder(snode->edittree);
NodeTagChanged(snode->edittree, node); snode_tag_changed(snode, node);
} }
} }
} }
@ -1896,7 +1902,7 @@ void snode_autoconnect(SpaceNode *snode, int allow_multiple, int replace)
if (replace) if (replace)
nodeRemSocketLinks(snode->edittree, sock_to); nodeRemSocketLinks(snode->edittree, sock_to);
nodeAddLink(snode->edittree, node_fr, sock_fr, node_to, sock_to); nodeAddLink(snode->edittree, node_fr, sock_fr, node_to, sock_to);
NodeTagChanged(snode->edittree, node_to); snode_tag_changed(snode, node_to);
++numlinks; ++numlinks;
break; break;
} }
@ -1960,7 +1966,7 @@ bNode *node_add_node(SpaceNode *snode, Scene *scene, int type, float locx, float
if(node->id) if(node->id)
id_us_plus(node->id); id_us_plus(node->id);
NodeTagChanged(snode->edittree, node); snode_tag_changed(snode, node);
} }
if(snode->nodetree->type==NTREE_TEXTURE) { if(snode->nodetree->type==NTREE_TEXTURE) {
@ -2135,8 +2141,7 @@ static int node_link_modal(bContext *C, wmOperator *op, wmEvent *event)
case MIDDLEMOUSE: case MIDDLEMOUSE:
if(link->tosock && link->fromsock) { if(link->tosock && link->fromsock) {
/* send changed events for original tonode and new */ /* send changed events for original tonode and new */
if(link->tonode) snode_tag_changed(snode, link->tonode);
NodeTagChanged(snode->edittree, link->tonode);
/* we might need to remove a link */ /* we might need to remove a link */
if(in_out==SOCK_OUT) if(in_out==SOCK_OUT)
@ -2209,7 +2214,7 @@ static int node_link_init(SpaceNode *snode, bNodeLinkDrag *nldrag)
if(link) { if(link) {
/* send changed event to original tonode */ /* send changed event to original tonode */
if(link->tonode) if(link->tonode)
NodeTagChanged(snode->edittree, link->tonode); snode_tag_changed(snode, link->tonode);
nldrag->node= link->fromnode; nldrag->node= link->fromnode;
nldrag->sock= link->fromsock; nldrag->sock= link->fromsock;
@ -2363,7 +2368,7 @@ static int cut_links_exec(bContext *C, wmOperator *op)
next= link->next; next= link->next;
if(cut_links_intersect(link, mcoords, i)) { if(cut_links_intersect(link, mcoords, i)) {
NodeTagChanged(snode->edittree, link->tonode); snode_tag_changed(snode, link->tonode);
nodeRemLink(snode->edittree, link); nodeRemLink(snode->edittree, link);
} }
} }
@ -2746,7 +2751,7 @@ static int node_mute_exec(bContext *C, wmOperator *UNUSED(op))
if(node->flag & SELECT) { if(node->flag & SELECT) {
if(node->inputs.first && node->outputs.first) { if(node->inputs.first && node->outputs.first) {
node->flag ^= NODE_MUTED; node->flag ^= NODE_MUTED;
NodeTagChanged(snode->edittree, node); snode_tag_changed(snode, node);
} }
} }
} }