Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2020-05-13 16:04:47 +0300
committerCampbell Barton <ideasman42@gmail.com>2020-05-13 16:14:01 +0300
commit5159b8e1eadb3803064a97874f7ebc059ce2be32 (patch)
tree101bf4a553a7da3a2f0979db9416635d132f706e /source/blender
parent54ea3562406c633dc69f59697cca3cd1cded3bcd (diff)
Fix extra undo step when switching object modes
Changing between modes would always add a user visible undo step that set object mode. Avoid storing this extra undo step on object mode switching.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/editors/object/object_edit.c32
-rw-r--r--source/blender/editors/sculpt_paint/paint_vertex.c10
2 files changed, 22 insertions, 20 deletions
diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c
index 6929930c26c..ab82f3c3f04 100644
--- a/source/blender/editors/object/object_edit.c
+++ b/source/blender/editors/object/object_edit.c
@@ -1408,28 +1408,34 @@ static int object_mode_set_exec(bContext *C, wmOperator *op)
return OPERATOR_PASS_THROUGH;
}
- if (ob->mode != mode) {
- /* we should be able to remove this call, each operator calls */
- ED_object_mode_compat_set(C, ob, mode, op->reports);
- }
-
- /* Exit current mode if it's not the mode we're setting */
- if (mode != OB_MODE_OBJECT && (ob->mode != mode || toggle)) {
- /* Enter new mode */
- ED_object_mode_toggle(C, mode);
+ if (toggle == false) {
+ if (ob->mode != mode) {
+ if (mode != OB_MODE_OBJECT) {
+ /* Enter new mode. */
+ ED_object_mode_toggle(C, mode);
+ }
+ else {
+ ED_object_mode_compat_set(C, ob, mode, op->reports);
+ }
+ }
}
+ else {
+ /* Exit current mode if it's not the mode we're setting */
+ if (mode != OB_MODE_OBJECT) {
+ /* Enter new mode. */
+ ED_object_mode_toggle(C, mode);
+ }
- if (toggle) {
/* Special case for Object mode! */
- if (mode == OB_MODE_OBJECT && restore_mode == OB_MODE_OBJECT &&
- ob->restore_mode != OB_MODE_OBJECT) {
+ if ((mode == OB_MODE_OBJECT) && (restore_mode == OB_MODE_OBJECT) &&
+ (ob->restore_mode != OB_MODE_OBJECT)) {
ED_object_mode_toggle(C, ob->restore_mode);
}
else if (ob->mode == mode) {
/* For toggling, store old mode so we know what to go back to */
ob->restore_mode = restore_mode;
}
- else if (ob->restore_mode != OB_MODE_OBJECT && ob->restore_mode != mode) {
+ else if ((ob->restore_mode != OB_MODE_OBJECT) && (ob->restore_mode != mode)) {
ED_object_mode_toggle(C, ob->restore_mode);
}
}
diff --git a/source/blender/editors/sculpt_paint/paint_vertex.c b/source/blender/editors/sculpt_paint/paint_vertex.c
index d050a39ce68..296b2bae510 100644
--- a/source/blender/editors/sculpt_paint/paint_vertex.c
+++ b/source/blender/editors/sculpt_paint/paint_vertex.c
@@ -1450,8 +1450,7 @@ static int wpaint_mode_toggle_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-/* for switching to/from mode */
-static bool paint_poll_test(bContext *C)
+static bool paint_mode_toggle_poll_test(bContext *C)
{
Object *ob = CTX_data_active_object(C);
if (ob == NULL || ob->type != OB_MESH) {
@@ -1460,9 +1459,6 @@ static bool paint_poll_test(bContext *C)
if (!ob->data || ID_IS_LINKED(ob->data)) {
return 0;
}
- if (CTX_data_edit_object(C)) {
- return 0;
- }
return 1;
}
@@ -1476,7 +1472,7 @@ void PAINT_OT_weight_paint_toggle(wmOperatorType *ot)
/* api callbacks */
ot->exec = wpaint_mode_toggle_exec;
- ot->poll = paint_poll_test;
+ ot->poll = paint_mode_toggle_poll_test;
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
@@ -2683,7 +2679,7 @@ void PAINT_OT_vertex_paint_toggle(wmOperatorType *ot)
/* api callbacks */
ot->exec = vpaint_mode_toggle_exec;
- ot->poll = paint_poll_test;
+ ot->poll = paint_mode_toggle_poll_test;
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;