From cc6fff1722593a9ec52ad058475a26c63b6631f8 Mon Sep 17 00:00:00 2001 From: Spoike Date: Thu, 20 Dec 2018 00:57:15 +0000 Subject: [PATCH] Fix issue where keypresses were getting sent to QC/etc while the engine is still busy changing video modes. git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5369 fc73d0e0-1445-4013-8a0c-d673dee63da5 --- engine/client/in_generic.c | 11 +++++++++-- engine/gl/gl_vidnt.c | 9 +-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/engine/client/in_generic.c b/engine/client/in_generic.c index e3b99f328..b74696e44 100644 --- a/engine/client/in_generic.c +++ b/engine/client/in_generic.c @@ -414,8 +414,15 @@ void IN_Commands(void) switch(ev->type) { - case IEV_KEYDOWN: case IEV_KEYRELEASE: + if (ev->keyboard.scancode == -1) + { + int i; + for (i = 0; i < K_MAX; i++) + Key_Event(ev->devid, i, 0, false); + break; + } + case IEV_KEYDOWN: //Con_Printf("IEV_KEY%s %i: %i '%c'\n", (ev->type==IEV_KEYDOWN)?"DOWN":"RELEASE", ev->devid, ev->keyboard.scancode, ev->keyboard.unicode?ev->keyboard.unicode:' '); //on touchscreens, mouse1 is used as up/down state. we have to emulate actual mouse clicks based upon distance moved, so we can get movement events. if (ev->keyboard.scancode == K_MOUSE1 && ev->devid < MAXPOINTERS && (ptr[ev->devid].type == M_TOUCH)) @@ -1059,7 +1066,7 @@ void IN_JoystickAxisEvent(unsigned int devid, int axis, float value) void IN_KeyEvent(unsigned int devid, int down, int keycode, int unicode) { struct eventlist_s *ev = in_newevent(); - if (!ev) + if (!ev) return; ev->type = down?IEV_KEYDOWN:IEV_KEYRELEASE; ev->devid = devid; diff --git a/engine/gl/gl_vidnt.c b/engine/gl/gl_vidnt.c index f49ee7bc1..cdd0b926b 100644 --- a/engine/gl/gl_vidnt.c +++ b/engine/gl/gl_vidnt.c @@ -2652,14 +2652,7 @@ ClearAllStates */ static void ClearAllStates (void) { - int i; - -// send an up event for each key, to make sure the server clears them all - for (i=0 ; i<256 ; i++) - { - Key_Event (0, i, 0, false); - } - + IN_KeyEvent(0, false, -1, 0); //-1 means to clear all keys. Key_ClearStates (); INS_ClearStates (); }