diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c index de872b41335..10e27814236 100644 --- a/source/blender/makesrna/intern/rna_wm.c +++ b/source/blender/makesrna/intern/rna_wm.c @@ -255,6 +255,8 @@ EnumPropertyItem keymap_modifiers_items[] = { #include "BKE_idprop.h" +#include "MEM_guardedalloc.h" + static wmOperator *rna_OperatorProperties_find_operator(PointerRNA *ptr) { wmWindowManager *wm= ptr->id.data; @@ -558,6 +560,8 @@ static void rna_wmKeyMapItem_idname_set(PointerRNA *ptr, const char *value) WM_operator_bl_idname(idname, value); BLI_strncpy(kmi->idname, idname, sizeof(kmi->idname)); + + WM_keymap_properties_reset(kmi); } #else diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 22820d578a5..a270b75eea1 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -112,6 +112,7 @@ wmKeyMap *WM_keymap_active(struct wmWindowManager *wm, struct wmKeyMap *keymap); int WM_keymap_user_init(struct wmWindowManager *wm, struct wmKeyMap *keymap); wmKeyMap *WM_keymap_copy_to_user(struct wmKeyMap *keymap); void WM_keymap_restore_to_default(struct wmKeyMap *keymap); +void WM_keymap_properties_reset(struct wmKeyMapItem *kmi); wmKeyMap *WM_modalkeymap_add(struct wmKeyConfig *keyconf, char *idname, struct EnumPropertyItem *items); wmKeyMap *WM_modalkeymap_get(struct wmKeyConfig *keyconf, char *idname); diff --git a/source/blender/windowmanager/intern/wm_keymap.c b/source/blender/windowmanager/intern/wm_keymap.c index b3269a23277..b22f01b7d7a 100644 --- a/source/blender/windowmanager/intern/wm_keymap.c +++ b/source/blender/windowmanager/intern/wm_keymap.c @@ -55,6 +55,17 @@ /* ********************* key config ***********************/ +void WM_keymap_properties_reset(wmKeyMapItem *kmi) +{ + WM_operator_properties_free(kmi->ptr); + MEM_freeN(kmi->ptr); + + kmi->ptr = NULL; + kmi->properties = NULL; + + WM_operator_properties_alloc(&(kmi->ptr), &(kmi->properties), kmi->idname); +} + static void keymap_properties_set(wmKeyMapItem *kmi) { WM_operator_properties_alloc(&(kmi->ptr), &(kmi->properties), kmi->idname);