diff options
author | Campbell Barton <ideasman42@gmail.com> | 2019-01-17 08:39:38 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2019-01-17 08:39:38 +0300 |
commit | c8e75c2b00cfb7e87bcb800c9acc8f126949749d (patch) | |
tree | 30dd08449c059cdc72d37b10359350b20c328860 /source/blender/editors/interface/interface_eyedropper_datablock.c | |
parent | 4a3aac478ce0dd16faea52d224d9a8024cd9ee57 (diff) |
Fix T60554: Missing undo push changing color
Operators don't have a good way to skip undo,
for now check the button undo flag & return cancelled.
Diffstat (limited to 'source/blender/editors/interface/interface_eyedropper_datablock.c')
-rw-r--r-- | source/blender/editors/interface/interface_eyedropper_datablock.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/source/blender/editors/interface/interface_eyedropper_datablock.c b/source/blender/editors/interface/interface_eyedropper_datablock.c index f39c8bdf889..594488ff148 100644 --- a/source/blender/editors/interface/interface_eyedropper_datablock.c +++ b/source/blender/editors/interface/interface_eyedropper_datablock.c @@ -68,6 +68,7 @@ typedef struct DataDropper { PropertyRNA *prop; short idcode; const char *idcode_name; + bool is_undo; ID *init_id; /* for resetting on cancel */ @@ -97,7 +98,7 @@ static int datadropper_init(bContext *C, wmOperator *op) DataDropper *ddr = MEM_callocN(sizeof(DataDropper), __func__); - UI_context_active_but_prop_get(C, &ddr->ptr, &ddr->prop, &index_dummy); + uiBut *but = UI_context_active_but_prop_get(C, &ddr->ptr, &ddr->prop, &index_dummy); if ((ddr->ptr.data == NULL) || (ddr->prop == NULL) || @@ -109,6 +110,8 @@ static int datadropper_init(bContext *C, wmOperator *op) } op->customdata = ddr; + ddr->is_undo = UI_but_flag_is_set(but, UI_BUT_UNDO); + ddr->art = art; ddr->draw_handle_pixel = ED_region_draw_cb_activate(art, datadropper_draw_cb, ddr, REGION_DRAW_POST_PIXEL); @@ -254,13 +257,12 @@ static int datadropper_modal(bContext *C, wmOperator *op, const wmEvent *event) return OPERATOR_CANCELLED; case EYE_MODAL_SAMPLE_CONFIRM: { - bool success; - - success = datadropper_id_sample(C, ddr, event->x, event->y); + const bool is_undo = ddr->is_undo; + const bool success = datadropper_id_sample(C, ddr, event->x, event->y); datadropper_exit(C, op); - if (success) { - return OPERATOR_FINISHED; + /* Could support finished & undo-skip. */ + return is_undo ? OPERATOR_FINISHED : OPERATOR_CANCELLED; } else { BKE_report(op->reports, RPT_WARNING, "Failed to set value"); @@ -349,7 +351,7 @@ void UI_OT_eyedropper_id(wmOperatorType *ot) ot->poll = datadropper_poll; /* flags */ - ot->flag = OPTYPE_BLOCKING | OPTYPE_INTERNAL; + ot->flag = OPTYPE_UNDO | OPTYPE_BLOCKING | OPTYPE_INTERNAL; /* properties */ } |