Changeset View
Changeset View
Standalone View
Standalone View
source/blender/windowmanager/intern/wm_keymap.c
| Show First 20 Lines • Show All 456 Lines • ▼ Show 20 Lines | if (BKE_workspace_owner_id_check(workspace, keymap->owner_id) == false) { | ||||
| return false; | return false; | ||||
| } | } | ||||
| } | } | ||||
| if (UNLIKELY(BLI_listbase_is_empty(&keymap->items))) { | if (UNLIKELY(BLI_listbase_is_empty(&keymap->items))) { | ||||
| /* Empty key-maps may be missing more there may be a typo in the name. | /* Empty key-maps may be missing more there may be a typo in the name. | ||||
| * Warn early to avoid losing time investigating each case. | * Warn early to avoid losing time investigating each case. | ||||
| * When developing a customized Blender though you may want empty keymaps. */ | * When developing a customized Blender though you may want empty keymaps. */ | ||||
| if (!U.app_template[0]) { | if (!U.app_template[0] && | ||||
| /* Fallback key-maps may be intentionally empty, don't flood the output. */ | |||||
| !BLI_str_endswith(keymap->idname, " (fallback)")) { | |||||
| CLOG_WARN(WM_LOG_KEYMAPS, "empty keymap '%s'", keymap->idname); | CLOG_WARN(WM_LOG_KEYMAPS, "empty keymap '%s'", keymap->idname); | ||||
| } | } | ||||
| } | } | ||||
| if (keymap->poll != NULL) { | if (keymap->poll != NULL) { | ||||
| return keymap->poll(C); | return keymap->poll(C); | ||||
| } | } | ||||
| return true; | return true; | ||||
| ▲ Show 20 Lines • Show All 923 Lines • ▼ Show 20 Lines | static wmKeyMapItem *wm_keymap_item_find_handlers(const bContext *C, | ||||
| wmKeyMap **r_keymap) | wmKeyMap **r_keymap) | ||||
| { | { | ||||
| wmWindowManager *wm = CTX_wm_manager(C); | wmWindowManager *wm = CTX_wm_manager(C); | ||||
| /* find keymap item in handlers */ | /* find keymap item in handlers */ | ||||
| LISTBASE_FOREACH (wmEventHandler *, handler_base, handlers) { | LISTBASE_FOREACH (wmEventHandler *, handler_base, handlers) { | ||||
| if (handler_base->type == WM_HANDLER_TYPE_KEYMAP) { | if (handler_base->type == WM_HANDLER_TYPE_KEYMAP) { | ||||
| wmEventHandler_Keymap *handler = (wmEventHandler_Keymap *)handler_base; | wmEventHandler_Keymap *handler = (wmEventHandler_Keymap *)handler_base; | ||||
| wmKeyMap *keymap = WM_event_get_keymap_from_handler(wm, handler); | wmEventHandler_KeymapResult km_result; | ||||
| if (keymap && WM_keymap_poll((bContext *)C, keymap)) { | WM_event_get_keymaps_from_handler(wm, handler, &km_result); | ||||
| for (int km_index = 0; km_index < km_result.keymaps_len; km_index++) { | |||||
| wmKeyMap *keymap = km_result.keymaps[km_index]; | |||||
| if (WM_keymap_poll((bContext *)C, keymap)) { | |||||
| wmKeyMapItem *kmi = wm_keymap_item_find_in_keymap( | wmKeyMapItem *kmi = wm_keymap_item_find_in_keymap( | ||||
| keymap, opname, properties, is_strict, params); | keymap, opname, properties, is_strict, params); | ||||
| if (kmi != NULL) { | if (kmi != NULL) { | ||||
| if (r_keymap) { | if (r_keymap) { | ||||
| *r_keymap = keymap; | *r_keymap = keymap; | ||||
| } | } | ||||
| return kmi; | return kmi; | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | |||||
| /* ensure un-initialized keymap is never used */ | /* ensure un-initialized keymap is never used */ | ||||
| if (r_keymap) { | if (r_keymap) { | ||||
| *r_keymap = NULL; | *r_keymap = NULL; | ||||
| } | } | ||||
| return NULL; | return NULL; | ||||
| } | } | ||||
| static wmKeyMapItem *wm_keymap_item_find_props(const bContext *C, | static wmKeyMapItem *wm_keymap_item_find_props(const bContext *C, | ||||
| ▲ Show 20 Lines • Show All 592 Lines • Show Last 20 Lines | |||||