Fix T89560: Keymap editor no longer shows keying set dropdown

Include built-in keying sets when ANIM_keying_sets_enum_itemf is called
without a context to allow binding keys to built-in keying sets.
This commit is contained in:
Campbell Barton 2022-03-09 13:01:05 +11:00
parent 2146256563
commit e55f4657f7
Notes: blender-bot 2023-02-14 05:59:31 +01:00
Referenced by commit 56dba4df3c, Revert "Fix T89560: Keymap editor no longer shows keying set dropdown"
Referenced by issue #89560, Insert key dropdown on keymap doesn't show keying sets anymore
1 changed files with 35 additions and 36 deletions

View File

@ -715,55 +715,54 @@ const EnumPropertyItem *ANIM_keying_sets_enum_itemf(bContext *C,
PropertyRNA *UNUSED(prop),
bool *r_free)
{
Scene *scene = CTX_data_scene(C);
KeyingSet *ks;
EnumPropertyItem *item = NULL, item_tmp = {0};
int totitem = 0;
int i = 0;
if (C == NULL) {
return DummyRNA_DEFAULT_items;
}
if (C != NULL) {
Scene *scene = CTX_data_scene(C);
/* active Keying Set
* - only include entry if it exists
*/
if (scene->active_keyingset) {
/* active Keying Set */
item_tmp.identifier = "__ACTIVE__";
item_tmp.name = "Active Keying Set";
item_tmp.value = i;
RNA_enum_item_add(&item, &totitem, &item_tmp);
/* active Keying Set
* - only include entry if it exists
*/
if (scene->active_keyingset) {
/* active Keying Set */
item_tmp.identifier = "__ACTIVE__";
item_tmp.name = "Active Keying Set";
item_tmp.value = i;
RNA_enum_item_add(&item, &totitem, &item_tmp);
/* separator */
RNA_enum_item_add_separator(&item, &totitem);
}
i++;
/* user-defined Keying Sets
* - these are listed in the order in which they were defined for the active scene
*/
if (scene->keyingsets.first) {
for (ks = scene->keyingsets.first; ks; ks = ks->next, i++) {
if (ANIM_keyingset_context_ok_poll(C, ks)) {
item_tmp.identifier = ks->idname;
item_tmp.name = ks->name;
item_tmp.description = ks->description;
item_tmp.value = i;
RNA_enum_item_add(&item, &totitem, &item_tmp);
}
/* separator */
RNA_enum_item_add_separator(&item, &totitem);
}
/* separator */
RNA_enum_item_add_separator(&item, &totitem);
i++;
/* user-defined Keying Sets
* - these are listed in the order in which they were defined for the active scene
*/
if (scene->keyingsets.first) {
for (ks = scene->keyingsets.first; ks; ks = ks->next, i++) {
if (ANIM_keyingset_context_ok_poll(C, ks)) {
item_tmp.identifier = ks->idname;
item_tmp.name = ks->name;
item_tmp.description = ks->description;
item_tmp.value = i;
RNA_enum_item_add(&item, &totitem, &item_tmp);
}
}
/* separator */
RNA_enum_item_add_separator(&item, &totitem);
}
}
/* builtin Keying Sets */
i = -1;
for (ks = builtin_keyingsets.first; ks; ks = ks->next, i--) {
/* only show KeyingSet if context is suitable */
if (ANIM_keyingset_context_ok_poll(C, ks)) {
/* Only show #KeyingSet if context is suitable or if there is no context which is needed
* to support key-bindings to be assigned since key bindings are not context aware. */
if ((C == NULL) || ANIM_keyingset_context_ok_poll(C, ks)) {
item_tmp.identifier = ks->idname;
item_tmp.name = ks->name;
item_tmp.description = ks->description;