Fix T93331: Gizmo tool options reset when switching tools

Drag Action was constantly resetting itself to "move".

Solve this by storing the tool settings per tool and no longer clear
gizmo properties when activating a new tool.
This commit is contained in:
Campbell Barton 2022-02-23 16:13:21 +11:00
parent 2746238dde
commit 74611e3555
Notes: blender-bot 2023-04-14 09:18:04 +02:00
Referenced by commit d681d82d41, Fix T96035: Some tool settings do not work
Referenced by issue #96063, Every mesh filter is inflating the model
Referenced by issue #96035, Some tool settings do not work from the front UI
Referenced by issue #93331, Drag Action is constantly resetting itself to "move"
2 changed files with 15 additions and 16 deletions

View File

@ -1054,9 +1054,6 @@ def _activate_by_item(context, space_type, item, index, *, as_fallback=False):
if props is None:
print("Error:", gizmo_group, "could not access properties!")
else:
for key in props.bl_rna.properties.keys():
props.property_unset(key)
gizmo_properties = item.widget_properties
if gizmo_properties is not None:
if not isinstance(gizmo_properties, list):

View File

@ -818,13 +818,25 @@ void WM_toolsystem_do_msg_notify_tag_refresh(bContext *C,
WM_toolsystem_refresh_screen_area(workspace, view_layer, area);
}
static IDProperty *idprops_ensure_named_group(IDProperty *group, const char *idname)
{
IDProperty *prop = IDP_GetPropertyFromGroup(group, idname);
if ((prop == NULL) || (prop->type != IDP_GROUP)) {
IDPropertyTemplate val = {0};
prop = IDP_New(IDP_GROUP, &val, __func__);
STRNCPY(prop->name, idname);
IDP_ReplaceInGroup_ex(group, prop, NULL);
}
return prop;
}
IDProperty *WM_toolsystem_ref_properties_ensure_idprops(bToolRef *tref)
{
if (tref->properties == NULL) {
IDPropertyTemplate val = {0};
tref->properties = IDP_New(IDP_GROUP, &val, "wmOperatorProperties");
tref->properties = IDP_New(IDP_GROUP, &val, __func__);
}
return tref->properties;
return idprops_ensure_named_group(tref->properties, tref->idname);
}
bool WM_toolsystem_ref_properties_get_ex(bToolRef *tref,
@ -844,17 +856,7 @@ void WM_toolsystem_ref_properties_ensure_ex(bToolRef *tref,
PointerRNA *r_ptr)
{
IDProperty *group = WM_toolsystem_ref_properties_ensure_idprops(tref);
IDProperty *prop = IDP_GetPropertyFromGroup(group, idname);
if (prop == NULL) {
IDPropertyTemplate val = {0};
prop = IDP_New(IDP_GROUP, &val, "wmGenericProperties");
STRNCPY(prop->name, idname);
IDP_ReplaceInGroup_ex(group, prop, NULL);
}
else {
BLI_assert(prop->type == IDP_GROUP);
}
IDProperty *prop = idprops_ensure_named_group(group, idname);
RNA_pointer_create(NULL, type, prop, r_ptr);
}