From 74611e3555684a22e9a07bd0992a444b571b8083 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 23 Feb 2022 16:13:21 +1100 Subject: 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. --- .../blender/windowmanager/intern/wm_toolsystem.c | 28 ++++++++++++---------- 1 file changed, 15 insertions(+), 13 deletions(-) (limited to 'source/blender/windowmanager') diff --git a/source/blender/windowmanager/intern/wm_toolsystem.c b/source/blender/windowmanager/intern/wm_toolsystem.c index 7b8feac45b4..fce11853030 100644 --- a/source/blender/windowmanager/intern/wm_toolsystem.c +++ b/source/blender/windowmanager/intern/wm_toolsystem.c @@ -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); } -- cgit v1.2.3