Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/windowmanager/intern/wm_event_system.c')
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c26
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;