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

Reply via email to