Changeset View
Changeset View
Standalone View
Standalone View
source/blender/windowmanager/intern/wm_keymap.c
| Show First 20 Lines • Show All 272 Lines • ▼ Show 20 Lines | |||||
| wmKeyConfig *WM_keyconfig_new(wmWindowManager *wm, const char *idname, bool user_defined) | wmKeyConfig *WM_keyconfig_new(wmWindowManager *wm, const char *idname, bool user_defined) | ||||
| { | { | ||||
| wmKeyConfig *keyconf = BLI_findstring(&wm->keyconfigs, idname, offsetof(wmKeyConfig, idname)); | wmKeyConfig *keyconf = BLI_findstring(&wm->keyconfigs, idname, offsetof(wmKeyConfig, idname)); | ||||
| if (keyconf) { | if (keyconf) { | ||||
| if (keyconf == wm->defaultconf) { | if (keyconf == wm->defaultconf) { | ||||
| /* For default configuration, we need to keep keymap | /* For default configuration, we need to keep keymap | ||||
| * modal items and poll functions intact. */ | * modal items and poll functions intact. */ | ||||
| for (wmKeyMap *km = keyconf->keymaps.first; km; km = km->next) { | LISTBASE_FOREACH (wmKeyMap *, km, &keyconf->keymaps) { | ||||
| WM_keymap_clear(km); | WM_keymap_clear(km); | ||||
| } | } | ||||
| } | } | ||||
| else { | else { | ||||
| /* For user defined key configuration, clear all keymaps. */ | /* For user defined key configuration, clear all keymaps. */ | ||||
| WM_keyconfig_clear(keyconf); | WM_keyconfig_clear(keyconf); | ||||
| } | } | ||||
| Show All 33 Lines | bool WM_keyconfig_remove(wmWindowManager *wm, wmKeyConfig *keyconf) | ||||
| } | } | ||||
| else { | else { | ||||
| return false; | return false; | ||||
| } | } | ||||
| } | } | ||||
| void WM_keyconfig_clear(wmKeyConfig *keyconf) | void WM_keyconfig_clear(wmKeyConfig *keyconf) | ||||
| { | { | ||||
| for (wmKeyMap *km = keyconf->keymaps.first; km; km = km->next) { | LISTBASE_FOREACH (wmKeyMap *, km, &keyconf->keymaps) { | ||||
| WM_keymap_clear(km); | WM_keymap_clear(km); | ||||
| } | } | ||||
| BLI_freelistN(&keyconf->keymaps); | BLI_freelistN(&keyconf->keymaps); | ||||
| } | } | ||||
| void WM_keyconfig_free(wmKeyConfig *keyconf) | void WM_keyconfig_free(wmKeyConfig *keyconf) | ||||
| { | { | ||||
| ▲ Show 20 Lines • Show All 984 Lines • ▼ Show 20 Lines | |||||
| /** \} */ | /** \} */ | ||||
| static wmKeyMapItem *wm_keymap_item_find_in_keymap(wmKeyMap *keymap, | static wmKeyMapItem *wm_keymap_item_find_in_keymap(wmKeyMap *keymap, | ||||
| const char *opname, | const char *opname, | ||||
| IDProperty *properties, | IDProperty *properties, | ||||
| const bool is_strict, | const bool is_strict, | ||||
| const struct wmKeyMapItemFind_Params *params) | const struct wmKeyMapItemFind_Params *params) | ||||
| { | { | ||||
| for (wmKeyMapItem *kmi = keymap->items.first; kmi; kmi = kmi->next) { | LISTBASE_FOREACH (wmKeyMapItem *, kmi, &keymap->items) { | ||||
| /* skip disabled keymap items [T38447] */ | /* skip disabled keymap items [T38447] */ | ||||
| if (kmi->flag & KMI_INACTIVE) { | if (kmi->flag & KMI_INACTIVE) { | ||||
| continue; | continue; | ||||
| } | } | ||||
| bool kmi_match = false; | bool kmi_match = false; | ||||
| if (STREQ(kmi->idname, opname)) { | if (STREQ(kmi->idname, opname)) { | ||||
| ▲ Show 20 Lines • Show All 719 Lines • Show Last 20 Lines | |||||