forked from bartvdbraak/blender
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:
parent
9abd711304
commit
6cb761f10c
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user