diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c index 767dd753766..99ac88f83a7 100644 --- a/source/blender/editors/space_node/node_edit.c +++ b/source/blender/editors/space_node/node_edit.c @@ -970,14 +970,13 @@ static void node_link_viewer(SpaceNode *snode, bNode *tonode) if(link==NULL) { nodeAddLink(snode->edittree, tonode, tonode->outputs.first, node, node->inputs.first); - ntreeSolveOrder(snode->edittree); - NodeTagChanged(snode->edittree, node); } - else if(link) { + else { link->fromnode= tonode; link->fromsock= tonode->outputs.first; - NodeTagChanged(snode->edittree, node); } + ntreeSolveOrder(snode->edittree); + NodeTagChanged(snode->edittree, node); } } diff --git a/source/blender/editors/space_outliner/outliner.c b/source/blender/editors/space_outliner/outliner.c index 291c67d22ff..349a158898d 100644 --- a/source/blender/editors/space_outliner/outliner.c +++ b/source/blender/editors/space_outliner/outliner.c @@ -1235,6 +1235,46 @@ void add_seq_dup(SpaceOops *soops, Sequence *seq, TreeElement *te, short index) } } +static int outliner_filter_has_name(TreeElement *te, char *name, int flags) +{ + int found= 0; + + /* determine if match */ + if(flags==OL_FIND) + found= BLI_strcasestr(te->name, name)!=NULL; + else if(flags==OL_FIND_CASE) + found= strstr(te->name, name)!=NULL; + else if(flags==OL_FIND_COMPLETE) + found= BLI_strcasecmp(te->name, name)==0; + else + found= strcmp(te->name, name)==0; + + return found; +} + +static void outliner_filter_tree(SpaceOops *soops, ListBase *lb) +{ + TreeElement *te, *ten; + + if(soops->search_string[0]==0) return; + + for (te= lb->first; te; te= ten) { + ten= te->next; + + if(0==outliner_filter_has_name(te, soops->search_string, OL_FIND)) { + + outliner_free_tree(&te->subtree); + BLI_remlink(lb, te); + + if(te->flag & TE_FREE_NAME) MEM_freeN(te->name); + MEM_freeN(te); + } + else + outliner_filter_tree(soops, &te->subtree); + } +} + + static void outliner_build_tree(Main *mainvar, Scene *scene, SpaceOops *soops) { Base *base; @@ -1416,6 +1456,7 @@ static void outliner_build_tree(Main *mainvar, Scene *scene, SpaceOops *soops) } outliner_sort(soops, &soops->tree); + outliner_filter_tree(soops, &soops->tree); } /* **************** INTERACTIVE ************* */