From 840b1736411a9fabb86e77a958024064d5ec3c9f Mon Sep 17 00:00:00 2001 From: svdijk Date: Mon, 15 Oct 2012 19:53:07 +0000 Subject: [PATCH] Another approach to fixing mouse grab/key_dest git-svn-id: svn+ssh://svn.code.sf.net/p/quakespasm/code/trunk@770 af15c1b1-3010-417e-b628-4374ebc0bcbd --- quakespasm/Quake/host.c | 3 +++ quakespasm/Quake/keys.c | 41 ++++++++++++++++++++++++++++++++++++++++- quakespasm/Quake/keys.h | 1 + 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/quakespasm/Quake/host.c b/quakespasm/Quake/host.c index 293b877c..cfec14eb 100644 --- a/quakespasm/Quake/host.c +++ b/quakespasm/Quake/host.c @@ -686,6 +686,9 @@ void _Host_Frame (float time) if (!Host_FilterTime (time)) return; // don't run too fast, or packets will flood out +// Force key_dest + Key_ForceDest (); + // get new key events Sys_SendKeyEvents (); diff --git a/quakespasm/Quake/keys.c b/quakespasm/Quake/keys.c index 761840a7..8037d692 100644 --- a/quakespasm/Quake/keys.c +++ b/quakespasm/Quake/keys.c @@ -1014,7 +1014,6 @@ void Key_Event (int key, qboolean down) } } - /* =================== Key_ClearStates @@ -1031,3 +1030,43 @@ void Key_ClearStates (void) } } +/* +=================== +Key_ForceDest +=================== +*/ +void Key_ForceDest (void) +{ + static qboolean forced = false; + + if (cls.state == ca_dedicated) + return; + + switch (key_dest) + { + case key_console: + if (forced && cls.state == ca_connected) + { + forced = false; + IN_Activate(); + key_dest = key_game; + } + return; + case key_game: + case key_message: + if (cls.state != ca_connected) + { + forced = true; + if (key_dest == key_message) + Key_Message(K_ESCAPE); + IN_Deactivate(vid.type == MODE_WINDOWED); + key_dest = key_console; + return; + } + /* fallthrough */ + default: + forced = false; + break; + } +} + diff --git a/quakespasm/Quake/keys.h b/quakespasm/Quake/keys.h index 7ca3cbf0..61b2fe19 100644 --- a/quakespasm/Quake/keys.h +++ b/quakespasm/Quake/keys.h @@ -157,6 +157,7 @@ void Key_Init (void); void Key_WriteBindings (FILE *f); void Key_SetBinding (int keynum, const char *binding); void Key_ClearStates (void); +void Key_ForceDest (void); void History_Init (void); void History_Shutdown (void);