Skip to content

Commit d6a0112

Browse files
committed
Fix clearKeyModState and remove m_lastModState to simplify modstatechanged recognition
1 parent a7312b0 commit d6a0112

2 files changed

Lines changed: 10 additions & 12 deletions

File tree

GeneralsMD/Code/GameEngine/Include/GameClient/MetaEvent.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -431,8 +431,6 @@ class MetaEventTranslator : public GameMessageTranslator
431431
UnsignedByte m_modStateBits; ///< Fits all combinations of CTRL+ALT+SHIFT, storing 1 bit for each
432432
};
433433

434-
Int m_lastModState; // really a MappableKeyModState
435-
436434
KeyDownInfo m_keyDownInfos[KEY_COUNT];
437435

438436
enum { NUM_MOUSE_BUTTONS = 3 };

GeneralsMD/Code/GameEngine/Source/GameClient/MessageStream/MetaEvent.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)