From 8f89970ce68d737ab2922c542dd5ee44438da817 Mon Sep 17 00:00:00 2001 From: divverent Date: Wed, 20 Jul 2016 13:13:30 +0000 Subject: [PATCH] Fix the show-keyboard logic for non-Steel Storm by factoring out the Steel Storm specific code into generic code. git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@12267 d7cf8633-e32d-0410-b094-e92efae38249 ::stable-branch::merge=9351ad2d457c1d653c2ca08233680ac9cbb4c70a --- vid_sdl.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/vid_sdl.c b/vid_sdl.c index 22fd13eb..21b3876b 100644 --- a/vid_sdl.c +++ b/vid_sdl.c @@ -787,7 +787,6 @@ static void IN_Move_TouchScreen_SteelStorm(void) float move[3], aim[3]; static qboolean oldbuttons[128]; static qboolean buttons[128]; - static keydest_t oldkeydest; keydest_t keydest = (key_consoleactive & KEY_CONSOLEACTIVE_USER) ? key_console : key_dest; memcpy(oldbuttons, buttons, sizeof(oldbuttons)); memset(multitouchs, 0, sizeof(multitouchs)); @@ -810,17 +809,6 @@ static void IN_Move_TouchScreen_SteelStorm(void) multitouch[MAXFINGERS-1][0] = 0; }*/ - if (oldkeydest != keydest) - { - switch(keydest) - { - case key_game: VID_ShowKeyboard(false);break; - case key_console: VID_ShowKeyboard(true);break; - case key_message: VID_ShowKeyboard(true);break; - default: break; /* qc extensions control the other cases */ - } - } - oldkeydest = keydest; // TODO: make touchscreen areas controlled by a config file or the VMs. THIS IS A MESS! // TODO: can't just clear buttons[] when entering a new keydest, some keys would remain pressed // SS:BR menuqc has many peculiarities, including that it can't accept more than one command per frame and pressing and releasing on the same frame @@ -979,11 +967,27 @@ void IN_Move( void ) { static int old_x = 0, old_y = 0; static int stuck = 0; + static keydest_t oldkeydest; + static qboolean oldshowkeyboard; int x, y; vid_joystate_t joystate; + keydest_t keydest = (key_consoleactive & KEY_CONSOLEACTIVE_USER) ? key_console : key_dest; scr_numtouchscreenareas = 0; + // Only apply the new keyboard state if the input changes. + if (keydest != oldkeydest || !!vid_touchscreen_showkeyboard.integer != oldshowkeyboard) + { + switch(keydest) + { + case key_console: VID_ShowKeyboard(true);break; + case key_message: VID_ShowKeyboard(true);break; + default: VID_ShowKeyboard(!!vid_touchscreen_showkeyboard.integer); break; + } + } + oldkeydest = keydest; + oldshowkeyboard = !!vid_touchscreen_showkeyboard.integer; + if (vid_touchscreen.integer) { switch(gamemode) -- 2.39.2