diff options
Diffstat (limited to 'source/blender/editors/space_node')
-rw-r--r-- | source/blender/editors/space_node/node_relationships.c | 10 | ||||
-rw-r--r-- | source/blender/editors/space_node/node_select.c | 38 | ||||
-rw-r--r-- | source/blender/editors/space_node/space_node.c | 2 |
3 files changed, 31 insertions, 19 deletions
diff --git a/source/blender/editors/space_node/node_relationships.c b/source/blender/editors/space_node/node_relationships.c index 97a2383c03f..973ce56857c 100644 --- a/source/blender/editors/space_node/node_relationships.c +++ b/source/blender/editors/space_node/node_relationships.c @@ -67,12 +67,12 @@ typedef struct bNodeListItem { struct bNode *node; } bNodeListItem; -static int sort_nodes_locx(void *a, void *b) +static int sort_nodes_locx(const void *a, const void *b) { - bNodeListItem *nli1 = (bNodeListItem *)a; - bNodeListItem *nli2 = (bNodeListItem *)b; - bNode *node1 = nli1->node; - bNode *node2 = nli2->node; + const bNodeListItem *nli1 = a; + const bNodeListItem *nli2 = b; + const bNode *node1 = nli1->node; + const bNode *node2 = nli2->node; if (node1->locx > node2->locx) return 1; diff --git a/source/blender/editors/space_node/node_select.c b/source/blender/editors/space_node/node_select.c index 5a78ea6ebd8..de580f612a0 100644 --- a/source/blender/editors/space_node/node_select.c +++ b/source/blender/editors/space_node/node_select.c @@ -248,22 +248,34 @@ static bool node_select_grouped_name(SpaceNode *snode, bNode *node_act, const bo bNode *node; bool changed = false; const unsigned int delims[] = {'.', '-', '_', '\0'}; - size_t index_act, index_curr; + size_t pref_len_act, pref_len_curr; char *sep, *suf_act, *suf_curr; - index_act = BLI_str_partition_ex_utf8(node_act->name, delims, &sep, &suf_act, from_right); + pref_len_act = BLI_str_partition_ex_utf8(node_act->name, delims, &sep, &suf_act, from_right); - if (index_act > 0) { - for (node = snode->edittree->nodes.first; node; node = node->next) { - if ((node->flag & SELECT) == 0) { - index_curr = BLI_str_partition_ex_utf8(node->name, delims, &sep, &suf_curr, from_right); - if ((from_right && STREQ(suf_act, suf_curr)) || - (!from_right && (index_act == index_curr) && STREQLEN(node_act->name, node->name, index_act))) - { - nodeSetSelected(node, true); - changed = true; - } - } + /* Note: in case we are searching for suffix, and found none, use whole name as suffix. */ + if (from_right && !(sep && suf_act)) { + pref_len_act = 0; + suf_act = node_act->name; + } + + for (node = snode->edittree->nodes.first; node; node = node->next) { + if (node->flag & SELECT) { + continue; + } + pref_len_curr = BLI_str_partition_ex_utf8(node->name, delims, &sep, &suf_curr, from_right); + + /* Same as with active node name! */ + if (from_right && !(sep && suf_curr)) { + pref_len_curr = 0; + suf_curr = node->name; + } + + if ((from_right && STREQ(suf_act, suf_curr)) || + (!from_right && (pref_len_act == pref_len_curr) && STREQLEN(node_act->name, node->name, pref_len_act))) + { + nodeSetSelected(node, true); + changed = true; } } diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c index 875639da113..ccaeae34927 100644 --- a/source/blender/editors/space_node/space_node.c +++ b/source/blender/editors/space_node/space_node.c @@ -511,7 +511,7 @@ static void node_area_listener(bScreen *sc, ScrArea *sa, wmNotifier *wmn) } break; case NC_WM: - if(wmn->data == ND_UNDO) { + if (wmn->data == ND_UNDO) { ED_area_tag_refresh(sa); } break; |