forked from bartvdbraak/blender
WM: initialize last used macro properties
This commit is contained in:
parent
d5c1c0b10d
commit
73a7885ab3
@ -1022,48 +1022,60 @@ static void wm_region_mouse_co(bContext *C, wmEvent *event)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if 1 /* may want to disable operator remembering previous state for testing */
|
#if 1 /* may want to disable operator remembering previous state for testing */
|
||||||
bool WM_operator_last_properties_init(wmOperator *op)
|
|
||||||
|
static bool operator_last_properties_init_impl(wmOperator *op, IDProperty *last_properties)
|
||||||
{
|
{
|
||||||
bool changed = false;
|
bool changed = false;
|
||||||
|
IDPropertyTemplate val = {0};
|
||||||
|
IDProperty *replaceprops = IDP_New(IDP_GROUP, &val, "wmOperatorProperties");
|
||||||
|
PropertyRNA *iterprop;
|
||||||
|
|
||||||
if (op->type->last_properties) {
|
CLOG_INFO(WM_LOG_OPERATORS, 1, "loading previous properties for '%s'", op->type->idname);
|
||||||
IDPropertyTemplate val = {0};
|
|
||||||
IDProperty *replaceprops = IDP_New(IDP_GROUP, &val, "wmOperatorProperties");
|
|
||||||
PropertyRNA *iterprop;
|
|
||||||
|
|
||||||
CLOG_INFO(WM_LOG_OPERATORS, 1, "loading previous properties for '%s'", op->type->idname);
|
iterprop = RNA_struct_iterator_property(op->type->srna);
|
||||||
|
|
||||||
iterprop = RNA_struct_iterator_property(op->type->srna);
|
RNA_PROP_BEGIN (op->ptr, itemptr, iterprop)
|
||||||
|
{
|
||||||
|
PropertyRNA *prop = itemptr.data;
|
||||||
|
if ((RNA_property_flag(prop) & PROP_SKIP_SAVE) == 0) {
|
||||||
|
if (!RNA_property_is_set(op->ptr, prop)) { /* don't override a setting already set */
|
||||||
|
const char *identifier = RNA_property_identifier(prop);
|
||||||
|
IDProperty *idp_src = IDP_GetPropertyFromGroup(last_properties, identifier);
|
||||||
|
if (idp_src) {
|
||||||
|
IDProperty *idp_dst = IDP_CopyProperty(idp_src);
|
||||||
|
|
||||||
RNA_PROP_BEGIN (op->ptr, itemptr, iterprop)
|
/* note - in the future this may need to be done recursively,
|
||||||
{
|
* but for now RNA doesn't access nested operators */
|
||||||
PropertyRNA *prop = itemptr.data;
|
idp_dst->flag |= IDP_FLAG_GHOST;
|
||||||
if ((RNA_property_flag(prop) & PROP_SKIP_SAVE) == 0) {
|
|
||||||
if (!RNA_property_is_set(op->ptr, prop)) { /* don't override a setting already set */
|
|
||||||
const char *identifier = RNA_property_identifier(prop);
|
|
||||||
IDProperty *idp_src = IDP_GetPropertyFromGroup(op->type->last_properties, identifier);
|
|
||||||
if (idp_src) {
|
|
||||||
IDProperty *idp_dst = IDP_CopyProperty(idp_src);
|
|
||||||
|
|
||||||
/* note - in the future this may need to be done recursively,
|
/* add to temporary group instead of immediate replace,
|
||||||
* but for now RNA doesn't access nested operators */
|
* because we are iterating over this group */
|
||||||
idp_dst->flag |= IDP_FLAG_GHOST;
|
IDP_AddToGroup(replaceprops, idp_dst);
|
||||||
|
changed = true;
|
||||||
/* add to temporary group instead of immediate replace,
|
|
||||||
* because we are iterating over this group */
|
|
||||||
IDP_AddToGroup(replaceprops, idp_dst);
|
|
||||||
changed = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
RNA_PROP_END;
|
|
||||||
|
|
||||||
IDP_MergeGroup(op->properties, replaceprops, true);
|
|
||||||
IDP_FreeProperty(replaceprops);
|
|
||||||
MEM_freeN(replaceprops);
|
|
||||||
}
|
}
|
||||||
|
RNA_PROP_END;
|
||||||
|
|
||||||
|
IDP_MergeGroup(op->properties, replaceprops, true);
|
||||||
|
IDP_FreeProperty(replaceprops);
|
||||||
|
MEM_freeN(replaceprops);
|
||||||
|
return changed;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool WM_operator_last_properties_init(wmOperator *op)
|
||||||
|
{
|
||||||
|
bool changed = false;
|
||||||
|
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(op->type->last_properties, opm->idname);
|
||||||
|
if (idp_src) {
|
||||||
|
changed |= operator_last_properties_init_impl(opm, idp_src);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return changed;
|
return changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user