diff options
author | Campbell Barton <ideasman42@gmail.com> | 2010-11-10 14:19:52 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2010-11-10 14:19:52 +0300 |
commit | fe18f517a106f6f31acb7ded67efe6e0f6140637 (patch) | |
tree | e95e100463d26bb3a0e22e1a3235504bf8956a07 /source/blender | |
parent | bb3cd048872cc1056f4b2bfeaa9ebd2c69c46285 (diff) |
bugfix [#24635] "Add Shortcut"
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/editors/interface/interface_handlers.c | 14 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_wm.c | 2 | ||||
-rw-r--r-- | source/blender/windowmanager/WM_api.h | 2 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_keymap.c | 7 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_operators.c | 1 |
5 files changed, 16 insertions, 10 deletions
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index d3f915cddce..95a80df3e00 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -4031,12 +4031,16 @@ static uiBlock *menu_add_shortcut(bContext *C, ARegion *ar, void *arg) km = WM_keymap_guess_opname(C, but->optype->idname); kmi = WM_keymap_add_item(km, but->optype->idname, AKEY, KM_PRESS, 0, 0); - MEM_freeN(kmi->properties); - if (prop) - kmi->properties= IDP_CopyProperty(prop); - + + if (prop) { + prop= IDP_CopyProperty(prop); + } + + /* prop can be NULL */ + WM_keymap_properties_reset(kmi, prop); + RNA_pointer_create(NULL, &RNA_KeyMapItem, kmi, &ptr); - + block= uiBeginBlock(C, ar, "_popup", UI_EMBOSS); uiBlockSetHandleFunc(block, but_shortcut_name_func, but); uiBlockSetFlag(block, UI_BLOCK_RET_1); diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c index f8c262dff43..539a46c8f84 100644 --- a/source/blender/makesrna/intern/rna_wm.c +++ b/source/blender/makesrna/intern/rna_wm.c @@ -588,7 +588,7 @@ static void rna_wmKeyMapItem_idname_set(PointerRNA *ptr, const char *value) if(strcmp(idname, kmi->idname) != 0) { BLI_strncpy(kmi->idname, idname, sizeof(kmi->idname)); - WM_keymap_properties_reset(kmi); + WM_keymap_properties_reset(kmi, NULL); } } diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 7d4690ac7e1..5d856036180 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -130,7 +130,7 @@ wmKeyMap *WM_keymap_guess_opname(const struct bContext *C, char *opname); 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); +void WM_keymap_properties_reset(struct wmKeyMapItem *kmi, struct IDProperty *properties); void WM_keymap_restore_item_to_default(struct bContext *C, struct wmKeyMap *keymap, struct wmKeyMapItem *kmi); wmKeyMapItem *WM_keymap_item_find_id(struct wmKeyMap *keymap, int id); diff --git a/source/blender/windowmanager/intern/wm_keymap.c b/source/blender/windowmanager/intern/wm_keymap.c index 436494be975..5da9bb46cfd 100644 --- a/source/blender/windowmanager/intern/wm_keymap.c +++ b/source/blender/windowmanager/intern/wm_keymap.c @@ -63,13 +63,14 @@ static void keymap_properties_set(wmKeyMapItem *kmi) WM_operator_properties_sanitize(kmi->ptr, 1); } -void WM_keymap_properties_reset(wmKeyMapItem *kmi) +/* properties can be NULL, otherwise the arg passed is used and ownership is given to the kmi */ +void WM_keymap_properties_reset(wmKeyMapItem *kmi, struct IDProperty *properties) { WM_operator_properties_free(kmi->ptr); MEM_freeN(kmi->ptr); kmi->ptr = NULL; - kmi->properties = NULL; + kmi->properties = properties; keymap_properties_set(kmi); } @@ -706,7 +707,7 @@ void WM_keymap_restore_item_to_default(bContext *C, wmKeyMap *keymap, wmKeyMapIt if(strcmp(orig->idname, kmi->idname) != 0) { BLI_strncpy(kmi->idname, orig->idname, sizeof(kmi->idname)); - WM_keymap_properties_reset(kmi); + WM_keymap_properties_reset(kmi, NULL); } if (orig->properties) { diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index 7fa58db54bb..42e64646351 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -617,6 +617,7 @@ void WM_operator_properties_free(PointerRNA *ptr) if(properties) { IDP_FreeProperty(properties); MEM_freeN(properties); + ptr->data= NULL; /* just incase */ } } |