@@ -377,8 +377,7 @@ static const FieldParse TheMetaMapFieldParseTable[] =
377377// PUBLIC FUNCTIONS ///////////////////////////////////////////////////////////////////////////////
378378
379379// -------------------------------------------------------------------------------------------------
380- MetaEventTranslator::MetaEventTranslator () :
381- m_lastModState(0 )
380+ MetaEventTranslator::MetaEventTranslator ()
382381{
383382 for (Int i = 0 ; i < NUM_MOUSE_BUTTONS; ++i) {
384383 m_nextUpShouldCreateDoubleClick[i] = FALSE ;
@@ -438,7 +437,10 @@ GameMessageDisposition MetaEventTranslator::translateGameMessage(const GameMessa
438437
439438 if (t == GameMessage::MSG_RAW_KEY_DOWN || t == GameMessage::MSG_RAW_KEY_UP)
440439 {
441- Int systemKey = msg->getArgument (0 )->integer ;
440+ const Int systemKey = msg->getArgument (0 )->integer ;
441+ const Int keyState = msg->getArgument (1 )->integer ;
442+
443+ MappableKeyType key = (MappableKeyType)systemKey;
442444 switch (systemKey)
443445 {
444446 case KEY_LCTRL:
@@ -447,10 +449,8 @@ GameMessageDisposition MetaEventTranslator::translateGameMessage(const GameMessa
447449 case KEY_RSHIFT:
448450 case KEY_LALT:
449451 case KEY_RALT:
450- systemKey = KEY_NONE ;
452+ key = MK_NONE ;
451453 }
452- const MappableKeyType key = (MappableKeyType)systemKey;
453- const Int keyState = msg->getArgument (1 )->integer ;
454454
455455 // for our purposes here, we don't care to distinguish between right and left keys,
456456 // so just fudge a little to simplify things.
@@ -471,7 +471,7 @@ GameMessageDisposition MetaEventTranslator::translateGameMessage(const GameMessa
471471 newModState |= ALT;
472472 }
473473
474- const Bool modStateRemoved = newModState < m_lastModState ;
474+ const Bool modStateRemoved = (key == MK_NONE) && (t == GameMessage::MSG_RAW_KEY_UP) ;
475475
476476 if (modStateRemoved)
477477 {
@@ -576,8 +576,6 @@ GameMessageDisposition MetaEventTranslator::translateGameMessage(const GameMessa
576576 }
577577 }
578578
579- }
580-
581579 if (t == GameMessage::MSG_RAW_KEY_DOWN)
582580 {
583581#ifdef DUMP_ALL_KEYS_TO_LOG
@@ -599,12 +597,14 @@ GameMessageDisposition MetaEventTranslator::translateGameMessage(const GameMessa
599597 {
600598 if (newModState != NONE)
601599 {
600+ DEBUG_ASSERTCRASH (key != MK_NONE, (" Key is expected to be not MK_NONE" ));
601+
602602 // Forget that this key and mod state are pressed.
603603 m_keyDownInfos[key].clearKeyModState ((MappableKeyModState)newModState);
604604 }
605605 }
606606
607- m_lastModState = newModState;
607+ }
608608 }
609609
610610
0 commit comments