Fix crash when Python creates modal keymaps without items.

This commit is contained in:
2018-11-13 15:16:03 +01:00
parent 81caa7fd6d
commit fe4df40f30
2 changed files with 19 additions and 16 deletions

View File

@@ -4589,7 +4589,7 @@ bool WM_window_modal_keymap_status_draw(
}
}
}
if (keymap == NULL) {
if (keymap == NULL || keymap->modal_items == NULL) {
return false;
}
const EnumPropertyItem *items = keymap->modal_items;

View File

@@ -802,21 +802,22 @@ wmKeyMap *WM_modalkeymap_add(wmKeyConfig *keyconf, const char *idname, const Enu
{
wmKeyMap *km = WM_keymap_ensure(keyconf, idname, 0, 0);
km->flag |= KEYMAP_MODAL;
km->modal_items = items;
if (!items) {
/* init modal items from default config */
wmWindowManager *wm = G_MAIN->wm.first;
if (wm->defaultconf) {
wmKeyMap *defaultkm = WM_keymap_list_find(&wm->defaultconf->keymaps, km->idname, 0, 0);
/* init modal items from default config */
wmWindowManager *wm = G_MAIN->wm.first;
if (wm->defaultconf && wm->defaultconf != keyconf) {
wmKeyMap *defaultkm = WM_keymap_list_find(&wm->defaultconf->keymaps, km->idname, 0, 0);
if (defaultkm) {
km->modal_items = defaultkm->modal_items;
km->poll = defaultkm->poll;
}
if (defaultkm) {
km->modal_items = defaultkm->modal_items;
km->poll = defaultkm->poll;
}
}
if (items) {
km->modal_items = items;
}
return km;
}
@@ -920,11 +921,13 @@ static void wm_user_modal_keymap_set_items(wmWindowManager *wm, wmKeyMap *km)
km->modal_items = defaultkm->modal_items;
km->poll = defaultkm->poll;
for (kmi = km->items.first; kmi; kmi = kmi->next) {
if (kmi->propvalue_str[0]) {
if (RNA_enum_value_from_id(km->modal_items, kmi->propvalue_str, &propvalue))
kmi->propvalue = propvalue;
kmi->propvalue_str[0] = '\0';
if (km->modal_items) {
for (kmi = km->items.first; kmi; kmi = kmi->next) {
if (kmi->propvalue_str[0]) {
if (RNA_enum_value_from_id(km->modal_items, kmi->propvalue_str, &propvalue))
kmi->propvalue = propvalue;
kmi->propvalue_str[0] = '\0';
}
}
}
}