Index: source/blender/python/BPY_extern.h =================================================================== --- source/blender/python/BPY_extern.h (revision 14019) +++ source/blender/python/BPY_extern.h (working copy) @@ -110,7 +110,7 @@ int BPY_add_spacehandler(struct Text *txt, struct ScrArea *sa,char spacetype); int BPY_has_spacehandler(struct Text *text, struct ScrArea *sa); void BPY_screen_free_spacehandlers(struct bScreen *sc); - int BPY_do_spacehandlers(struct ScrArea *sa, unsigned short event, + int BPY_do_spacehandlers(struct ScrArea *sa, unsigned short event, short val, unsigned short space_event); void BPY_pydriver_update(void); Index: source/blender/python/BPY_interface.c =================================================================== --- source/blender/python/BPY_interface.c (revision 14019) +++ source/blender/python/BPY_interface.c (working copy) @@ -2438,7 +2438,7 @@ return 0; } -int BPY_do_spacehandlers( ScrArea *sa, unsigned short event, +int BPY_do_spacehandlers( ScrArea *sa, unsigned short event, short val, unsigned short space_event ) { ScriptLink *scriptlink; @@ -2481,6 +2481,8 @@ EXPP_dict_set_item_str(g_blenderdict, "link", PyInt_FromLong(space_event)); /* note: DRAW space_events set event to 0 */ EXPP_dict_set_item_str(g_blenderdict, "event", PyInt_FromLong(event)); + /* key/mouse down or up? */ + PyDict_SetItemString(g_blenderdict, "value", val==0 ? Py_False : Py_True); /* now run all assigned space handlers for this space and space_event */ for( index = 0; index < scriptlink->totscript; index++ ) { @@ -2538,6 +2540,7 @@ PyDict_SetItemString(g_blenderdict, "bylink", Py_False); PyDict_SetItemString(g_blenderdict, "link", Py_None ); EXPP_dict_set_item_str(g_blenderdict, "event", PyString_FromString("")); + PyDict_SetItemString(g_blenderdict, "value", Py_False); PyGILState_Release(gilstate); } Index: source/blender/src/drawview.c =================================================================== --- source/blender/src/drawview.c (revision 14019) +++ source/blender/src/drawview.c (working copy) @@ -3153,7 +3153,7 @@ /* run any view3d draw handler script links */ if (sa->scriptlink.totscript) - BPY_do_spacehandlers(sa, 0, SPACEHANDLER_VIEW3D_DRAW); + BPY_do_spacehandlers(sa, 0, 0, SPACEHANDLER_VIEW3D_DRAW); /* run scene redraw script links */ if((G.f & G_DOSCRIPTLINKS) && G.scene->scriptlink.totscript && Index: source/blender/src/space.c =================================================================== --- source/blender/src/space.c (revision 14019) +++ source/blender/src/space.c (working copy) @@ -1187,8 +1187,12 @@ if(curarea->win==0) return; /* when it comes from sa->headqread() */ + /* run any view3d event handler script links */ + if (event && sa->scriptlink.totscript) + if (BPY_do_spacehandlers(sa, event, val, SPACEHANDLER_VIEW3D_EVENT)) + return; /* return if event was processed (swallowed) by handler(s) */ + if(val) { - if( uiDoBlocks(&curarea->uiblocks, event, 1)!=UI_NOTHING ) event= 0; if(event==UI_BUT_EVENT) do_butspace(val); /* temporal, view3d deserves own queue? */ @@ -1244,11 +1248,6 @@ } } - /* run any view3d event handler script links */ - if (event && sa->scriptlink.totscript) - if (BPY_do_spacehandlers(sa, event, SPACEHANDLER_VIEW3D_EVENT)) - return; /* return if event was processed (swallowed) by handler(s) */ - /* TEXTEDITING?? */ if((G.obedit) && G.obedit->type==OB_FONT) { switch(event) {