]> git.rm.cloudns.org Git - xonotic/darkplaces.git/commitdiff
Manage resetting the key event state on video reinitialization centrally.
authorRudolf Polzer <divVerent@xonotic.org>
Thu, 2 Nov 2017 15:58:55 +0000 (16:58 +0100)
committerRudolf Polzer <divVerent@xonotic.org>
Thu, 2 Nov 2017 16:02:18 +0000 (17:02 +0100)
Fixes:
- No key state clear when SDL gets restarted.
- Key state clear was the wrong action - it allows all keys to get pressed
  again, but does not actually release anything in cl_input.c, so e.g. +jump
  binds stay pressed on vid_restart.

Only vid_wgl.c retains some vid-specific handling (reset of key state when
alt-tabbing out and back in) - there's a chance that we may need similar logic
in the other vid drivers; if so, it may be possible to do this in a shared
place too by watching for changes to vid_activewindow.

keys.c
keys.h
vid_agl.c
vid_glx.c
vid_shared.c
vid_wgl.c

diff --git a/keys.c b/keys.c
index d233471b1618fbcc929343cdd8f0d11070d47fce..2f91c06c453c59907d1a75266ea5ea8c9d3656c8 100644 (file)
--- a/keys.c
+++ b/keys.c
@@ -1989,14 +1989,3 @@ Key_ReleaseAll (void)
        // now all keys are guaranteed down (once the event queue is unblocked)
        // and only future events count
 }
-
-/*
-===================
-Key_ClearStates
-===================
-*/
-void
-Key_ClearStates (void)
-{
-       memset(keydown, 0, sizeof(keydown));
-}
diff --git a/keys.h b/keys.h
index a84eb4c6f7cced9246b4faaf430ffb851467ed28..7841e9d007df0354807ad4664fb96ca807907e8e 100644 (file)
--- a/keys.h
+++ b/keys.h
@@ -378,7 +378,6 @@ void Key_Shutdown(void);
 void Key_Init_Cvars(void);
 void Key_Event(int key, int ascii, qboolean down);
 void Key_ReleaseAll (void);
-void Key_ClearStates (void); // FIXME: should this function still exist? Or should Key_ReleaseAll be used instead when shutting down a vid driver?
 void Key_EventQueue_Block(void);
 void Key_EventQueue_Unblock(void);
 
index bacbb5ffd4d23a47fa49765cc489711257aa097c..7a524f4d84982ac6bcb1953cef2f9f6e009ec457 100644 (file)
--- a/vid_agl.c
+++ b/vid_agl.c
@@ -419,7 +419,6 @@ void VID_Shutdown(void)
        vid_isfullscreen = false;
 
        GL_CloseLibrary();
-       Key_ClearStates ();
 }
 
 // Since the event handler can be called at any time, we store the events for later processing
index 8327b2608e9a8e301af2d7d27d0101c0e6a816fd..4e70e069357fba4b1f2392afd71eb4c930abbe4a 100644 (file)
--- a/vid_glx.c
+++ b/vid_glx.c
@@ -887,7 +887,6 @@ void VID_Shutdown(void)
        ctx = NULL;
 
        GL_CloseLibrary();
-       Key_ClearStates ();
 }
 
 static void signal_handler(int sig)
index 843707b48f7b9ba2f9ea03cd7ca4b62fdad2d620..7503c12fc5a5a86bc6ddd2acd1c30d1b5a586dcc 100644 (file)
@@ -1941,6 +1941,7 @@ static int VID_Mode(int fullscreen, int width, int height, int bpp, float refres
 
 static void VID_OpenSystems(void)
 {
+       Key_ReleaseAll();
        R_Modules_Start();
        S_Startup();
 }
@@ -1949,6 +1950,7 @@ static void VID_CloseSystems(void)
 {
        S_Shutdown();
        R_Modules_Shutdown();
+       Key_ReleaseAll();
 }
 
 qboolean vid_commandlinecheck = true;
index 24bcdabc943ffabf7bf63e877ae3e96108f716b4..86feacbbe39d1a895d026fc9777c41feac610016 100644 (file)
--- a/vid_wgl.c
+++ b/vid_wgl.c
@@ -429,7 +429,7 @@ ClearAllStates
 */
 static void ClearAllStates (void)
 {
-       Key_ClearStates ();
+       Key_ReleaseAll();
        if (vid_usingmouse)
                mouse_oldbuttonstate = 0;
 }