]> git.rm.cloudns.org Git - xonotic/darkplaces.git/commitdiff
Fix the show-keyboard logic for non-Steel Storm by factoring out the Steel Storm...
authordivverent <divverent@d7cf8633-e32d-0410-b094-e92efae38249>
Wed, 20 Jul 2016 13:13:30 +0000 (13:13 +0000)
committerdivverent <divverent@d7cf8633-e32d-0410-b094-e92efae38249>
Wed, 20 Jul 2016 13:13:30 +0000 (13:13 +0000)
git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@12267 d7cf8633-e32d-0410-b094-e92efae38249

vid_sdl.c

index 22fd13ebf975fa3a74145711e7b3a9095b415e41..21b3876b9c5e1fba765ec010f16827ce1a6897d5 100644 (file)
--- 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)