Fix crash when Python creates modal keymaps without items.
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user