Browse Source

Fixes up the handling of accelerator keybinds for SDL - specifically compound ones with several modifier keys, ie ctrl-alt-shift-up.

Areloch 8 years ago
parent
commit
a8f2fc567b

+ 1 - 1
Engine/source/platform/input/event.h

@@ -429,7 +429,7 @@ struct InputEventInfo
    U16 ascii;
    U16 ascii;
    
    
    /// Modifiers to action: SI_LSHIFT, SI_LCTRL, etc.
    /// Modifiers to action: SI_LSHIFT, SI_LCTRL, etc.
-   InputModifiers modifier;
+   U32 modifier;
 
 
    inline void postToSignal(InputEvent &ie)
    inline void postToSignal(InputEvent &ie)
    {
    {

+ 30 - 12
Engine/source/windowManager/sdl/sdlWindow.cpp

@@ -51,23 +51,41 @@ namespace
    {
    {
       U32 ret = 0;
       U32 ret = 0;
 
 
-      if(mod & KMOD_LSHIFT)
-         ret |= IM_LSHIFT;
+      if (mod & KMOD_LSHIFT)
+      {
+         ret |= SI_LSHIFT;
+         ret |= SI_SHIFT;
+      }
 
 
-      if(mod & KMOD_RSHIFT)
-         ret |= IM_RSHIFT;
+      if (mod & KMOD_RSHIFT)
+      {
+         ret |= SI_RSHIFT;
+         ret |= SI_SHIFT;
+      }
 
 
-      if(mod & KMOD_LCTRL)
-         ret |= IM_LCTRL;
+      if (mod & KMOD_LCTRL)
+      {
+         ret |= SI_LCTRL;
+         ret |= SI_CTRL;
+      }
 
 
-      if(mod & KMOD_RCTRL)
-         ret |= IM_RCTRL;
+      if (mod & KMOD_RCTRL)
+      {
+         ret |= SI_RCTRL;
+         ret |= SI_CTRL;
+      }
 
 
-      if(mod & KMOD_LALT)
-         ret |= IM_LALT;
+      if (mod & KMOD_LALT)
+      {
+         ret |= SI_LALT;
+         ret |= SI_ALT;
+      }
 
 
-      if(mod & KMOD_RALT)
-         ret |= IM_RALT;
+      if (mod & KMOD_RALT)
+      {
+         ret |= SI_RALT;
+         ret |= SI_ALT;
+      }
 
 
       return ret;
       return ret;
    }
    }

+ 6 - 6
Engine/source/windowManager/windowInputGenerator.cpp

@@ -95,7 +95,7 @@ void WindowInputGenerator::generateInputEvent( InputEventInfo &inputEvent )
       {
       {
          const AccKeyMap &acc = mAcceleratorMap[i];
          const AccKeyMap &acc = mAcceleratorMap[i];
          if (!mWindow->getKeyboardTranslation() &&
          if (!mWindow->getKeyboardTranslation() &&
-            (acc.modifier & inputEvent.modifier || (acc.modifier == 0 && inputEvent.modifier == 0))
+            ((acc.modifier == inputEvent.modifier && acc.modifier != 0) || (acc.modifier == 0 && inputEvent.modifier == 0))
             && acc.keyCode == inputEvent.objInst)
             && acc.keyCode == inputEvent.objInst)
          {
          {
             Con::evaluatef(acc.cmd);
             Con::evaluatef(acc.cmd);
@@ -145,7 +145,7 @@ void WindowInputGenerator::handleMouseMove( WindowId did, U32 modifier, S32 x, S
    event.deviceType = MouseDeviceType;
    event.deviceType = MouseDeviceType;
    event.deviceInst = 0;
    event.deviceInst = 0;
    event.objType    = SI_AXIS;
    event.objType    = SI_AXIS;
-   event.modifier   = convertModifierBits(modifier);
+   event.modifier   = modifier;
    event.ascii      = 0;
    event.ascii      = 0;
 
 
    // Generate delta movement along each axis
    // Generate delta movement along each axis
@@ -231,7 +231,7 @@ void WindowInputGenerator::handleMouseButton( WindowId did, U32 modifiers, U32 a
    event.deviceInst = 0;
    event.deviceInst = 0;
    event.objType    = SI_BUTTON;
    event.objType    = SI_BUTTON;
    event.objInst    = (InputObjectInstances)(KEY_BUTTON0 + button);
    event.objInst    = (InputObjectInstances)(KEY_BUTTON0 + button);
-   event.modifier   = convertModifierBits(modifiers);
+   event.modifier   = modifiers;
    event.ascii      = 0;
    event.ascii      = 0;
    event.action     = (action==IA_MAKE) ? SI_MAKE : SI_BREAK;
    event.action     = (action==IA_MAKE) ? SI_MAKE : SI_BREAK;
    event.fValue     = (action==IA_MAKE) ? 1.0 : 0.0;
    event.fValue     = (action==IA_MAKE) ? 1.0 : 0.0;
@@ -248,7 +248,7 @@ void WindowInputGenerator::handleMouseWheel( WindowId did, U32 modifiers, S32 wh
    event.deviceType = MouseDeviceType;
    event.deviceType = MouseDeviceType;
    event.deviceInst = 0;
    event.deviceInst = 0;
    event.objType    = SI_AXIS;
    event.objType    = SI_AXIS;
-   event.modifier   = convertModifierBits(modifiers);
+   event.modifier   = modifiers;
    event.ascii      = 0;
    event.ascii      = 0;
    event.action     = SI_MOVE;
    event.action     = SI_MOVE;
 
 
@@ -281,7 +281,7 @@ void WindowInputGenerator::handleCharInput( WindowId did, U32 modifier, U16 key
    event.deviceInst  = 0;
    event.deviceInst  = 0;
    event.objType     = SI_KEY;
    event.objType     = SI_KEY;
    event.objInst     = KEY_NULL;
    event.objInst     = KEY_NULL;
-   event.modifier    = convertModifierBits(modifier);
+   event.modifier    = modifier;
    event.ascii       = key;
    event.ascii       = key;
    event.action      = SI_MAKE;
    event.action      = SI_MAKE;
    event.fValue      = 1.0;
    event.fValue      = 1.0;
@@ -303,7 +303,7 @@ void WindowInputGenerator::handleKeyboard( WindowId did, U32 modifier, U32 actio
    event.deviceInst  = 0;
    event.deviceInst  = 0;
    event.objType     = SI_KEY;
    event.objType     = SI_KEY;
    event.objInst     = (InputObjectInstances)key;
    event.objInst     = (InputObjectInstances)key;
-   event.modifier    = convertModifierBits(modifier);
+   event.modifier    = modifier;
    event.ascii       = 0;
    event.ascii       = 0;
 
 
    switch(action)
    switch(action)