bugfix [#24635] "Add Shortcut"
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -617,6 +617,7 @@ void WM_operator_properties_free(PointerRNA *ptr)
|
||||
if(properties) {
|
||||
IDP_FreeProperty(properties);
|
||||
MEM_freeN(properties);
|
||||
ptr->data= NULL; /* just incase */
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user