bugfix [#24635] "Add Shortcut"

This commit is contained in:
2010-11-10 11:19:52 +00:00
parent bb3cd04887
commit fe18f517a1
5 changed files with 16 additions and 10 deletions

View File

@@ -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);

View File

@@ -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);
}
}

View File

@@ -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);

View File

@@ -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) {

View File

@@ -617,6 +617,7 @@ void WM_operator_properties_free(PointerRNA *ptr)
if(properties) {
IDP_FreeProperty(properties);
MEM_freeN(properties);
ptr->data= NULL; /* just incase */
}
}