diff options
Diffstat (limited to 'source/blender/windowmanager')
-rw-r--r-- | source/blender/windowmanager/WM_types.h | 3 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_event_system.c | 17 |
2 files changed, 17 insertions, 3 deletions
diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h index d67a31f9e42..4dc62985f53 100644 --- a/source/blender/windowmanager/WM_types.h +++ b/source/blender/windowmanager/WM_types.h @@ -66,7 +66,8 @@ typedef struct wmEvent { short type; /* event code itself (short, is also in keymap) */ short val; /* press, release, scrollvalue */ - short x, y; /* mouse pointer position */ + short x, y; /* mouse pointer position, screen coord */ + short mval[2]; /* region mouse position, name convention pre 2.5 :) */ short prevx, prevy; /* previous mouse pointer position */ short unicode; /* future, ghost? */ char ascii; /* from ghost */ diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 9fe97f307c5..6eb71d3d314 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -322,6 +322,16 @@ static void wm_operator_print(wmOperator *op) MEM_freeN(buf); } +static void wm_region_mouse_co(bContext *C, wmEvent *event) +{ + ARegion *ar= CTX_wm_region(C); + if(ar) { + /* compatibility convention */ + event->mval[0]= event->x - ar->winrct.xmin; + event->mval[1]= event->y - ar->winrct.ymin; + } +} + static int wm_operator_invoke(bContext *C, wmOperatorType *ot, wmEvent *event, PointerRNA *properties) { wmWindowManager *wm= CTX_wm_manager(C); @@ -333,8 +343,10 @@ static int wm_operator_invoke(bContext *C, wmOperatorType *ot, wmEvent *event, P if((G.f & G_DEBUG) && event && event->type!=MOUSEMOVE) printf("handle evt %d win %d op %s\n", event?event->type:0, CTX_wm_screen(C)->subwinactive, ot->idname); - if(op->type->invoke && event) - retval= (*op->type->invoke)(C, op, event); + if(op->type->invoke && event) { + wm_region_mouse_co(C, event); + retval= op->type->invoke(C, op, event); + } else if(op->type->exec) retval= op->type->exec(C, op); else @@ -636,6 +648,7 @@ static int wm_handler_operator_call(bContext *C, ListBase *handlers, wmEventHand wm_handler_op_context(C, handler); + wm_region_mouse_co(C, event); retval= ot->modal(C, op, event); /* putting back screen context, reval can pass trough after modal failures! */ |