X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=keys.c;h=8bdc4e1de06e8b2a3c910d63a9136ff74aea1215;hb=f39fed9f802790e3031eb9aa3e25d37b803116c1;hp=b311d1ed56a35e0c7264a378ba4f1f4a1e6e3a65;hpb=ad8ec18c8a2884d92134fe13db3399ce5c039c78;p=xonotic%2Fdarkplaces.git diff --git a/keys.c b/keys.c index b311d1ed..8bdc4e1d 100644 --- a/keys.c +++ b/keys.c @@ -283,7 +283,7 @@ Key_Console (int key, char ascii) strcat(key_lines[edit_line], cbd); key_linepos += i; } - free(cbd); + Z_Free(cbd); } return; } @@ -811,13 +811,13 @@ Key_Init (void) // // register our functions // - Cmd_AddCommand ("in_bind", Key_In_Bind_f); - Cmd_AddCommand ("in_unbind", Key_In_Unbind_f); - Cmd_AddCommand ("in_bindmap", Key_In_Bindmap_f); + Cmd_AddCommand ("in_bind", Key_In_Bind_f, "binds a command to the specified key in the selected bindmap"); + Cmd_AddCommand ("in_unbind", Key_In_Unbind_f, "removes command on the specified key in the selected bindmap"); + Cmd_AddCommand ("in_bindmap", Key_In_Bindmap_f, "selects active foreground and background (used only if a key is not bound in the foreground) bindmaps for typing"); - Cmd_AddCommand ("bind", Key_Bind_f); - Cmd_AddCommand ("unbind", Key_Unbind_f); - Cmd_AddCommand ("unbindall", Key_Unbindall_f); + Cmd_AddCommand ("bind", Key_Bind_f, "binds a command to the specified key in bindmap 0"); + Cmd_AddCommand ("unbind", Key_Unbind_f, "removes a command on the specified key in bindmap 0"); + Cmd_AddCommand ("unbindall", Key_Unbindall_f, "removes all commands from all keys in all bindmaps (leaving only shift-escape and escape)"); } const char *Key_GetBind (int key) @@ -861,7 +861,13 @@ Key_Event (int key, char ascii, qboolean down) } } - if (!down) + if (down) + { + // increment key repeat count each time a down is received so that things + // which want to ignore key repeat can ignore it + keydown[key] = min(keydown[key] + 1, 2); + } + else { // clear repeat count now that the key is released keydown[key] = 0; @@ -872,15 +878,8 @@ Key_Event (int key, char ascii, qboolean down) // downs can be matched with ups if (bind && bind[0] == '+') Cbuf_AddText(va("-%s %i\n", bind + 1, key)); - return; } - // from here on we know this is a down event - - // increment key repeat count each time a down is received so that things - // which want to ignore key repeat can ignore it - keydown[key] = min(keydown[key] + 1, 2); - // key_consoleactive is a flag not a key_dest because the console is a // high priority overlay ontop of the normal screen (designed as a safety // feature so that developers and users can rescue themselves from a bad @@ -903,7 +902,7 @@ Key_Event (int key, char ascii, qboolean down) // key_menu - go to parent menu (or key_game) // key_game - open menu // in all modes shift-escape toggles console - if ((key_consoleactive & KEY_CONSOLEACTIVE_USER) || keydown[K_SHIFT]) + if (((key_consoleactive & KEY_CONSOLEACTIVE_USER) || keydown[K_SHIFT]) && down) { Con_ToggleConsole_f (); return; @@ -911,25 +910,24 @@ Key_Event (int key, char ascii, qboolean down) switch (key_dest) { case key_message: - Key_Message (key, ascii); + if (down) + Key_Message (key, ascii); break; case key_menu: - MR_Keydown (key, ascii); + MR_KeyEvent (key, ascii, down); break; case key_game: - MR_ToggleMenu_f (); + if (down) + MR_ToggleMenu_f (); break; default: - if(UI_Callback_IsSlotUsed(key_dest - 3)) - UI_Callback_KeyDown (key, ascii); - else - Con_Printf ("Key_Event: Bad key_dest\n"); + Con_Printf ("Key_Event: Bad key_dest\n"); } return; } // send function keydowns to interpreter no matter what mode is - if (key >= K_F1 && key <= K_F12) + if (key >= K_F1 && key <= K_F12 && down) { // ignore key repeats on F1-F12 binds if (keydown[key] > 1) @@ -950,11 +948,11 @@ Key_Event (int key, char ascii, qboolean down) #if 1 // ignore binds (other than the above escape/F1-F12 keys) while in console - if (key_consoleactive) + if (key_consoleactive && down) #else // respond to toggleconsole binds while in console unless the pressed key // happens to be the color prefix character (such as on German keyboards) - if (key_consoleactive && (strncmp(bind, "toggleconsole", strlen("toggleconsole")) || ascii == STRING_COLOR_TAG)) + if (key_consoleactive && down && (strncmp(bind, "toggleconsole", strlen("toggleconsole")) || ascii == STRING_COLOR_TAG)) #endif { Key_Console (key, ascii); @@ -965,14 +963,15 @@ Key_Event (int key, char ascii, qboolean down) switch (key_dest) { case key_message: - Key_Message (key, ascii); + if (down) + Key_Message (key, ascii); break; case key_menu: - MR_Keydown (key, ascii); + MR_KeyEvent (key, ascii, down); break; case key_game: // ignore key repeats on binds - if (bind && keydown[key] == 1) + if (bind && keydown[key] == 1 && down) { // button commands add keynum as a parm if (bind[0] == '+') @@ -985,10 +984,7 @@ Key_Event (int key, char ascii, qboolean down) } break; default: - if(UI_Callback_IsSlotUsed(key_dest - 3)) - UI_Callback_KeyDown (key, ascii); - else - Con_Printf ("Key_Event: Bad key_dest\n"); + Con_Printf ("Key_Event: Bad key_dest\n"); } }