Revert "WM: Repeat Last no longer reuses skip-save properties"
This reverts commit 1d908bffdd
.
Enough uses of repeat last expect skip-save properties to be set,
transform being the most obvious example T60777#605681.
I wanted to avoid operators having account for two kinds of 'skip-save'
but this may be unavoidable.
This commit is contained in:
parent
d4433b1bb3
commit
b5a2dc16fc
|
@ -3359,7 +3359,7 @@ static int repeat_last_exec(bContext *C, wmOperator *UNUSED(op))
|
|||
|
||||
if (lastop) {
|
||||
WM_operator_free_all_after(wm, lastop);
|
||||
WM_operator_repeat_interactive(C, lastop);
|
||||
WM_operator_repeat(C, lastop);
|
||||
}
|
||||
|
||||
return OPERATOR_CANCELLED;
|
||||
|
|
|
@ -321,8 +321,6 @@ bool WM_operator_poll_context(struct bContext *C, struct wmOperatorType *
|
|||
int WM_operator_call_ex(struct bContext *C, struct wmOperator *op, const bool store);
|
||||
int WM_operator_call (struct bContext *C, struct wmOperator *op);
|
||||
int WM_operator_call_notest(struct bContext *C, struct wmOperator *op);
|
||||
|
||||
int WM_operator_repeat_interactive(struct bContext *C, struct wmOperator *op);
|
||||
int WM_operator_repeat (struct bContext *C, struct wmOperator *op);
|
||||
bool WM_operator_repeat_check(const struct bContext *C, struct wmOperator *op);
|
||||
bool WM_operator_is_repeat(const struct bContext *C, const struct wmOperator *op);
|
||||
|
@ -347,7 +345,6 @@ void WM_operator_last_properties_ensure(struct wmOperatorType *ot, struct
|
|||
wmOperator *WM_operator_last_redo(const struct bContext *C);
|
||||
ID *WM_operator_drop_load_path(struct bContext *C, struct wmOperator *op, const short idcode);
|
||||
|
||||
bool WM_operator_last_properties_init_ex(struct wmOperator *op, struct IDProperty *last_properties);
|
||||
bool WM_operator_last_properties_init(struct wmOperator *op);
|
||||
bool WM_operator_last_properties_store(struct wmOperator *op);
|
||||
|
||||
|
|
|
@ -1040,42 +1040,6 @@ int WM_operator_repeat(bContext *C, wmOperator *op)
|
|||
{
|
||||
return wm_operator_exec(C, op, true, true);
|
||||
}
|
||||
/**
|
||||
* Execute this operator again interactively
|
||||
* without using #PROP_SKIP_SAVE properties, see: T60777.
|
||||
*/
|
||||
int WM_operator_repeat_interactive(bContext *C, wmOperator *op)
|
||||
{
|
||||
IDProperty *properties = op->properties ? IDP_New(IDP_GROUP, &(IDPropertyTemplate){0}, "wmOperatorProperties") : NULL;
|
||||
PointerRNA *ptr = MEM_dupallocN(op->ptr);
|
||||
|
||||
SWAP(IDProperty *, op->properties, properties);
|
||||
SWAP(PointerRNA *, op->ptr, ptr);
|
||||
if (op->ptr) {
|
||||
op->ptr->data = op->properties;
|
||||
}
|
||||
|
||||
/* Use functionality to initialize from previous execution to avoid re-using PROP_SKIP_SAVE. */
|
||||
if (properties) {
|
||||
WM_operator_last_properties_init_ex(op, properties);
|
||||
}
|
||||
|
||||
int retval = wm_operator_exec(C, op, true, true);
|
||||
|
||||
SWAP(IDProperty *, op->properties, properties);
|
||||
SWAP(PointerRNA *, op->ptr, ptr);
|
||||
|
||||
if (properties) {
|
||||
IDP_FreeProperty(properties);
|
||||
MEM_freeN(properties);
|
||||
}
|
||||
if (ptr) {
|
||||
MEM_freeN(ptr);
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
/**
|
||||
* \return true if #WM_operator_repeat can run
|
||||
* simple check for now but may become more involved.
|
||||
|
@ -1262,13 +1226,13 @@ static bool operator_last_properties_init_impl(wmOperator *op, IDProperty *last_
|
|||
return changed;
|
||||
}
|
||||
|
||||
bool WM_operator_last_properties_init_ex(wmOperator *op, IDProperty *last_properties)
|
||||
bool WM_operator_last_properties_init(wmOperator *op)
|
||||
{
|
||||
bool changed = false;
|
||||
if (last_properties) {
|
||||
changed |= operator_last_properties_init_impl(op, last_properties);
|
||||
if (op->type->last_properties) {
|
||||
changed |= operator_last_properties_init_impl(op, op->type->last_properties);
|
||||
for (wmOperator *opm = op->macro.first; opm; opm = opm->next) {
|
||||
IDProperty *idp_src = IDP_GetPropertyFromGroup(last_properties, opm->idname);
|
||||
IDProperty *idp_src = IDP_GetPropertyFromGroup(op->type->last_properties, opm->idname);
|
||||
if (idp_src) {
|
||||
changed |= operator_last_properties_init_impl(opm, idp_src);
|
||||
}
|
||||
|
@ -1277,11 +1241,6 @@ bool WM_operator_last_properties_init_ex(wmOperator *op, IDProperty *last_proper
|
|||
return changed;
|
||||
}
|
||||
|
||||
bool WM_operator_last_properties_init(wmOperator *op)
|
||||
{
|
||||
return WM_operator_last_properties_init_ex(op, op->type->last_properties);
|
||||
}
|
||||
|
||||
bool WM_operator_last_properties_store(wmOperator *op)
|
||||
{
|
||||
if (op->type->last_properties) {
|
||||
|
@ -1313,11 +1272,6 @@ bool WM_operator_last_properties_store(wmOperator *op)
|
|||
|
||||
#else
|
||||
|
||||
bool WM_operator_last_properties_init_ex(wmOperator *UNUSED(op), IDProperty *UNUSED(last_properties))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool WM_operator_last_properties_init(wmOperator *UNUSED(op))
|
||||
{
|
||||
return false;
|
||||
|
|
Loading…
Reference in New Issue