diff options
6 files changed, 33 insertions, 3 deletions
diff --git a/release/scripts/startup/bl_operators/node.py b/release/scripts/startup/bl_operators/node.py index 16349c27e39..6627e814499 100644 --- a/release/scripts/startup/bl_operators/node.py +++ b/release/scripts/startup/bl_operators/node.py @@ -123,7 +123,8 @@ class NodeAddOperator(): result = self.execute(context) if self.use_transform and ('FINISHED' in result): - bpy.ops.transform.translate('INVOKE_DEFAULT') + # removes the node again if transform is cancelled + bpy.ops.transform.translate('INVOKE_DEFAULT', remove_on_cancel = True) return result diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 7dedfef7b6b..87ef3d6742a 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -1854,7 +1854,7 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *even options |= CTX_TEXTURE; } } - + t->options = options; t->mode = mode; diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h index a0550c99988..a4828317604 100644 --- a/source/blender/editors/transform/transform.h +++ b/source/blender/editors/transform/transform.h @@ -341,7 +341,9 @@ typedef struct TransInfo { float auto_values[4]; float axis[3]; float axis_orig[3]; /* TransCon can change 'axis', store the original value here */ - + + short remove_on_cancel; /* remove elements if operator is cancelled */ + void *view; struct bContext *context; /* Only valid (non null) during an operator called function. */ struct ScrArea *sa; diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 22700f30561..adfbbc26df2 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -5323,6 +5323,25 @@ static void special_aftertrans_update__mask(bContext *C, TransInfo *t) } } +static void special_aftertrans_update__node(bContext *UNUSED(C), TransInfo *t) +{ + int canceled = (t->state == TRANS_CANCEL); + + if (canceled && t->remove_on_cancel) { + /* remove selected nodes on cancel */ + SpaceNode *snode = (SpaceNode *)t->sa->spacedata.first; + bNodeTree *ntree = snode->edittree; + if (ntree) { + bNode *node, *node_next; + for (node = ntree->nodes.first; node; node = node_next) { + node_next = node->next; + if (node->flag & NODE_SELECT) + nodeFreeNode(ntree, node); + } + } + } +} + static void special_aftertrans_update__mesh(bContext *UNUSED(C), TransInfo *t) { /* so automerge supports mirror */ @@ -5434,6 +5453,7 @@ void special_aftertrans_update(bContext *C, TransInfo *t) } else if (t->spacetype == SPACE_NODE) { SpaceNode *snode = (SpaceNode *)t->sa->spacedata.first; + special_aftertrans_update__node(C, t); if (canceled == 0) { ED_node_post_apply_transform(C, snode->edittree); diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index 5c8e3f9e58f..ad572188f4c 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -1105,6 +1105,12 @@ int initTransInfo(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *even t->options |= CTX_EDGE; } + t->remove_on_cancel = false; + if ((prop = RNA_struct_find_property(op->ptr, "remove_on_cancel")) && RNA_property_is_set(op->ptr, prop)) { + if (RNA_property_boolean_get(op->ptr, prop)) { + t->remove_on_cancel = true; + } + } /* Assign the space type, some exceptions for running in different mode */ if (sa == NULL) { diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c index eb204be3220..53b43b6c969 100644 --- a/source/blender/editors/transform/transform_ops.c +++ b/source/blender/editors/transform/transform_ops.c @@ -537,6 +537,7 @@ void Transform_Properties(struct wmOperatorType *ot, int flags) if (flags & P_OPTIONS) { RNA_def_boolean(ot->srna, "texture_space", 0, "Edit Texture Space", "Edit Object data texture space"); + RNA_def_boolean(ot->srna, "remove_on_cancel", 0, "Remove on Cancel", "Remove elements on cancel"); } if (flags & P_CORRECT_UV) { |