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>2019-01-17 08:39:38 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-01-17 08:39:38 +0300
commitc8e75c2b00cfb7e87bcb800c9acc8f126949749d (patch)
tree30dd08449c059cdc72d37b10359350b20c328860 /source/blender/editors/interface/interface_eyedropper_datablock.c
parent4a3aac478ce0dd16faea52d224d9a8024cd9ee57 (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.c16
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 */
}