コード例 #1
0
ファイル: wm_keymap.c プロジェクト: OldBrunet/BGERTPS
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);
}
コード例 #2
0
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;
}