diff options
author | Campbell Barton <ideasman42@gmail.com> | 2010-09-13 10:08:26 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2010-09-13 10:08:26 +0400 |
commit | bd5a62cfcb7ddf4a6c111eede3d4a496902138ee (patch) | |
tree | d6c98f9c7f580a4d09aecb417147a76b6930e3c8 /source/blender/blenkernel | |
parent | 18702a9eef23e2c9ba8436194aa5536cf424bd9f (diff) |
bugfix [#23068] Image editor: Update Automatically not updating the compositor.
[#23637] Replacing an image used in the compositor crashes
[#23343] changes in images doesn't update compositor image nodes
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_node.h | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/image.c | 12 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/node.c | 15 |
3 files changed, 24 insertions, 5 deletions
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h index 4bd4cc3792f..7b4925b7a46 100644 --- a/source/blender/blenkernel/BKE_node.h +++ b/source/blender/blenkernel/BKE_node.h @@ -192,7 +192,7 @@ int nodeSetActiveID(struct bNodeTree *ntree, short idtype, struct ID *id); void nodeClearActiveID(struct bNodeTree *ntree, short idtype); void NodeTagChanged(struct bNodeTree *ntree, struct bNode *node); -void NodeTagIDChanged(struct bNodeTree *ntree, struct ID *id); +int NodeTagIDChanged(struct bNodeTree *ntree, struct ID *id); /* ************** Groups ****************** */ diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c index 0e282aa6449..e77183d785f 100644 --- a/source/blender/blenkernel/intern/image.c +++ b/source/blender/blenkernel/intern/image.c @@ -69,6 +69,7 @@ #include "BKE_main.h" #include "BKE_packedFile.h" #include "BKE_scene.h" +#include "BKE_node.h" //XXX #include "BIF_editseq.h" @@ -1447,6 +1448,17 @@ void BKE_image_signal(Image *ima, ImageUser *iuser, int signal) } break; } + + /* dont use notifiers because they are not 100% sure to succseed + * this also makes sure all scenes are accounted for. */ + { + Scene *scene; + for(scene= G.main->scene.first; scene; scene= scene->id.next) { + if(scene->nodetree) { + NodeTagIDChanged(scene->nodetree, &ima->id); + } + } + } } /* if layer or pass changes, we need an index for the imbufs list */ diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c index 5af2c64da18..135ddbab2b7 100644 --- a/source/blender/blenkernel/intern/node.c +++ b/source/blender/blenkernel/intern/node.c @@ -1787,18 +1787,25 @@ void NodeTagChanged(bNodeTree *ntree, bNode *node) } } -void NodeTagIDChanged(bNodeTree *ntree, ID *id) +int NodeTagIDChanged(bNodeTree *ntree, ID *id) { + int change = FALSE; + if(id==NULL) - return; + return change; if(ntree->type==NTREE_COMPOSIT) { bNode *node; - for(node= ntree->nodes.first; node; node= node->next) - if(node->id==id) + for(node= ntree->nodes.first; node; node= node->next) { + if(node->id==id) { + change= TRUE; NodeTagChanged(ntree, node); + } + } } + + return change; } |