static int wm_keymap_item_equals_result(wmKeyMapItem *a, wmKeyMapItem *b) { if(strcmp(a->idname, b->idname) != 0) return 0; if(!((a->ptr==NULL && b->ptr==NULL) || (a->ptr && b->ptr && IDP_EqualsProperties(a->ptr->data, b->ptr->data)))) return 0; if((a->flag & KMI_INACTIVE) != (b->flag & KMI_INACTIVE)) return 0; return (a->propvalue == b->propvalue); }
static wmKeyMapItem *wm_keymap_item_find_handlers( const bContext *C, ListBase *handlers, const char *opname, int UNUSED(opcontext), IDProperty *properties, int compare_props, int hotkey, wmKeyMap **keymap_r) { wmWindowManager *wm = CTX_wm_manager(C); wmEventHandler *handler; wmKeyMap *keymap; wmKeyMapItem *kmi; /* find keymap item in handlers */ for (handler = handlers->first; handler; handler = handler->next) { keymap = WM_keymap_active(wm, handler->keymap); if (keymap && (!keymap->poll || keymap->poll((bContext *)C))) { for (kmi = keymap->items.first; kmi; kmi = kmi->next) { if (strcmp(kmi->idname, opname) == 0 && WM_key_event_string(kmi->type)[0]) { if (hotkey) if (!ISHOTKEY(kmi->type)) continue; if (compare_props) { if (kmi->ptr && IDP_EqualsProperties(properties, kmi->ptr->data)) { if (keymap_r) *keymap_r = keymap; return kmi; } } else { if (keymap_r) *keymap_r = keymap; return kmi; } } } } } /* ensure un-initialized keymap is never used */ if (keymap_r) *keymap_r = NULL; return NULL; }