diff options
Diffstat (limited to 'source/blender/windowmanager/intern/wm_event_system.c')
-rw-r--r-- | source/blender/windowmanager/intern/wm_event_system.c | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index ffd1054d954..0df0679f98b 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -652,6 +652,23 @@ static int wm_event_always_pass(wmEvent *event) return ELEM5(event->type, TIMER, TIMER0, TIMER1, TIMER2, TIMERJOBS); } +/* operator exists */ +static void wm_event_modalkeymap(wmOperator *op, wmEvent *event) +{ + if(op->type->modalkeymap) { + wmKeymapItem *kmi; + + for(kmi= op->type->modalkeymap->keymap.first; kmi; kmi= kmi->next) { + if(wm_eventmatch(event, kmi)) { + + event->type= EVT_MODAL_MAP; + event->val= kmi->propvalue; + printf("found modal event %s %d\n", kmi->idname, kmi->propvalue); + } + } + } +} + /* Warning: this function removes a modal handler, when finished */ static int wm_handler_operator_call(bContext *C, ListBase *handlers, wmEventHandler *handler, wmEvent *event, PointerRNA *properties) { @@ -668,8 +685,9 @@ static int wm_handler_operator_call(bContext *C, ListBase *handlers, wmEventHand ARegion *region= CTX_wm_region(C); wm_handler_op_context(C, handler); - wm_region_mouse_co(C, event); + wm_event_modalkeymap(op, event); + retval= ot->modal(C, op, event); /* putting back screen context, reval can pass trough after modal failures! */ @@ -1446,7 +1464,7 @@ void wm_event_add_ghostevent(wmWindow *win, int type, void *customdata) GHOST_TEventKeyData *kd= customdata; event.type= convert_key(kd->key); event.ascii= kd->ascii; - event.val= (type==GHOST_kEventKeyDown); /* XXX eventmatch uses defines, bad code... */ + event.val= (type==GHOST_kEventKeyDown)?KM_PRESS:KM_RELEASE; /* exclude arrow keys, esc, etc from text input */ if(type==GHOST_kEventKeyUp || (event.ascii<32 && event.ascii>14)) @@ -1474,10 +1492,10 @@ void wm_event_add_ghostevent(wmWindow *win, int type, void *customdata) event.oskey= evt->oskey = 3; // define? } - /* if test_break set, it catches this. Keep global for now? */ + /* if test_break set, it catches this. XXX Keep global for now? */ if(event.type==ESCKEY) G.afbreek= 1; - + wm_event_add(win, &event); break; |