Revision: 23403 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23403 Author: blendix Date: 2009-09-21 18:39:07 +0200 (Mon, 21 Sep 2009)
Log Message: ----------- Fix #19361: BGE keyboard sensor allowed to set mouse events too, should only be keyboard events. Modified Paths: -------------- trunk/blender/source/blender/editors/include/UI_interface.h trunk/blender/source/blender/editors/interface/interface.c trunk/blender/source/blender/editors/interface/interface_handlers.c trunk/blender/source/blender/editors/space_logic/logic_window.c trunk/blender/source/blender/windowmanager/intern/wm_event_system.c trunk/blender/source/blender/windowmanager/wm_event_types.h Modified: trunk/blender/source/blender/editors/include/UI_interface.h =================================================================== --- trunk/blender/source/blender/editors/include/UI_interface.h 2009-09-21 16:21:54 UTC (rev 23402) +++ trunk/blender/source/blender/editors/include/UI_interface.h 2009-09-21 16:39:07 UTC (rev 23403) @@ -431,7 +431,7 @@ uiBut *uiDefIconBlockBut(uiBlock *block, uiBlockCreateFunc func, void *arg, int retval, int icon, short x1, short y1, short x2, short y2, char *tip); uiBut *uiDefIconTextBlockBut(uiBlock *block, uiBlockCreateFunc func, void *arg, int icon, char *str, short x1, short y1, short x2, short y2, char *tip); -void uiDefKeyevtButS(uiBlock *block, int retval, char *str, short x1, short y1, short x2, short y2, short *spoin, char *tip); +uiBut *uiDefKeyevtButS(uiBlock *block, int retval, char *str, short x1, short y1, short x2, short y2, short *spoin, char *tip); uiBut *uiDefHotKeyevtButS(uiBlock *block, int retval, char *str, short x1, short y1, short x2, short y2, short *keypoin, short *modkeypoin, char *tip); uiBut *uiDefSearchBut(uiBlock *block, void *arg, int retval, int icon, int maxlen, short x1, short y1, short x2, short y2, char *tip); Modified: trunk/blender/source/blender/editors/interface/interface.c =================================================================== --- trunk/blender/source/blender/editors/interface/interface.c 2009-09-21 16:21:54 UTC (rev 23402) +++ trunk/blender/source/blender/editors/interface/interface.c 2009-09-21 16:39:07 UTC (rev 23403) @@ -3098,10 +3098,11 @@ return but; } -void uiDefKeyevtButS(uiBlock *block, int retval, char *str, short x1, short y1, short x2, short y2, short *spoin, char *tip) +uiBut *uiDefKeyevtButS(uiBlock *block, int retval, char *str, short x1, short y1, short x2, short y2, short *spoin, char *tip) { uiBut *but= ui_def_but(block, KEYEVT|SHO, retval, str, x1, y1, x2, y2, spoin, 0.0, 0.0, 0.0, 0.0, tip); ui_check_but(but); + return but; } /* short pointers hardcoded */ Modified: trunk/blender/source/blender/editors/interface/interface_handlers.c =================================================================== --- trunk/blender/source/blender/editors/interface/interface_handlers.c 2009-09-21 16:21:54 UTC (rev 23402) +++ trunk/blender/source/blender/editors/interface/interface_handlers.c 2009-09-21 16:39:07 UTC (rev 23403) @@ -855,6 +855,7 @@ ui_apply_but_CHARTAB(C, but, data); break; #endif + case KEYEVT: case HOTKEYEVT: ui_apply_but_BUT(C, but, data); break; Modified: trunk/blender/source/blender/editors/space_logic/logic_window.c =================================================================== --- trunk/blender/source/blender/editors/space_logic/logic_window.c 2009-09-21 16:21:54 UTC (rev 23402) +++ trunk/blender/source/blender/editors/space_logic/logic_window.c 2009-09-21 16:39:07 UTC (rev 23403) @@ -1067,6 +1067,19 @@ *idpp= NULL; } + +static void test_keyboard_event(struct bContext *C, void *arg_ks, void *arg_unused) +{ + bKeyboardSensor *ks= (bKeyboardSensor*)arg_ks; + + if(!ISKEYBOARD(ks->key)) + ks->key= 0; + if(!ISKEYBOARD(ks->qual)) + ks->qual= 0; + if(!ISKEYBOARD(ks->qual2)) + ks->qual2= 0; +} + /** * Draws a toggle for pulse mode, a frequency field and a toggle to invert * the value of this sensor. Operates on the shared data block of sensors. @@ -1131,6 +1144,7 @@ bJoystickSensor *joy = NULL; bActuatorSensor *as = NULL; bDelaySensor *ds = NULL; + uiBut *but; short ysize; char *str; @@ -1279,12 +1293,15 @@ if ((ks->type&1)==0) { /* is All Keys option off? */ /* line 2: hotkey and allkeys toggle */ - uiDefKeyevtButS(block, 0, "", xco+40, yco-44, (width)/2, 19, &ks->key, "Key code"); + but= uiDefKeyevtButS(block, 0, "", xco+40, yco-44, (width)/2, 19, &ks->key, "Key code"); + uiButSetFunc(but, test_keyboard_event, ks, NULL); /* line 3: two key modifyers (qual1, qual2) */ uiDefBut(block, LABEL, 0, "Hold", xco, yco-68, 40, 19, NULL, 0, 0, 0, 0, ""); - uiDefKeyevtButS(block, 0, "", xco+40, yco-68, (width-50)/2, 19, &ks->qual, "Modifier key code"); - uiDefKeyevtButS(block, 0, "", xco+40+(width-50)/2, yco-68, (width-50)/2, 19, &ks->qual2, "Second Modifier key code"); + but= uiDefKeyevtButS(block, 0, "", xco+40, yco-68, (width-50)/2, 19, &ks->qual, "Modifier key code"); + uiButSetFunc(but, test_keyboard_event, ks, NULL); + but= uiDefKeyevtButS(block, 0, "", xco+40+(width-50)/2, yco-68, (width-50)/2, 19, &ks->qual2, "Second Modifier key code"); + uiButSetFunc(but, test_keyboard_event, ks, NULL); } /* line 4: toggle property for string logging mode */ Modified: trunk/blender/source/blender/windowmanager/intern/wm_event_system.c =================================================================== --- trunk/blender/source/blender/windowmanager/intern/wm_event_system.c 2009-09-21 16:21:54 UTC (rev 23402) +++ trunk/blender/source/blender/windowmanager/intern/wm_event_system.c 2009-09-21 16:39:07 UTC (rev 23403) @@ -718,7 +718,7 @@ /* the matching rules */ if(kmitype==KM_TEXTINPUT) - if(ISKEYBOARD(winevent->type) && winevent->ascii) return 1; + if(ISTEXTINPUT(winevent->type) && winevent->ascii) return 1; if(kmitype!=KM_ANY) if(winevent->type!=kmitype) return 0; @@ -741,7 +741,7 @@ /* key modifiers always check when event has it */ /* otherwise regular keypresses with keymodifier still work */ if(winevent->keymodifier) - if(ISKEYBOARD(winevent->type)) + if(ISTEXTINPUT(winevent->type)) if(winevent->keymodifier!=kmi->keymodifier) return 0; return 1; Modified: trunk/blender/source/blender/windowmanager/wm_event_types.h =================================================================== --- trunk/blender/source/blender/windowmanager/wm_event_types.h 2009-09-21 16:21:54 UTC (rev 23402) +++ trunk/blender/source/blender/windowmanager/wm_event_types.h 2009-09-21 16:39:07 UTC (rev 23403) @@ -194,10 +194,13 @@ /* for event checks */ /* only used for KM_TEXTINPUT, so assume that we want all user-inputtable ascii codes included */ -#define ISKEYBOARD(event) (event >=' ' && event <=255) +#define ISTEXTINPUT(event) (event >=' ' && event <=255) + /* test wether the event is a key on the keyboard */ +#define ISKEYBOARD(event) (event >=' ' && event <=320) + /* test whether event type is acceptable as hotkey, excluding modifiers */ -#define ISHOTKEY(event) (event >=' ' && event <=320 && !(event>=LEFTCTRLKEY && event<=ESCKEY) && !(event>=UNKNOWNKEY && event<=GRLESSKEY)) +#define ISHOTKEY(event) (ISKEYBOARD(event) && !(event>=LEFTCTRLKEY && event<=ESCKEY) && !(event>=UNKNOWNKEY && event<=GRLESSKEY)) /* **************** BLENDER GESTURE EVENTS ********************* */ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs