X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fevents.c;h=3a303fa5e5fc20155b1e179401e3e79b9ed881e6;hb=3107a4558d89655d39413a1fa3da127d4e8b2c1e;hp=2678fa28b94c227855bd4f772ae5bcc57615f31c;hpb=888ee0497f046c51100416e0a033ec35d77fb45c;p=rocksndiamonds.git diff --git a/src/events.c b/src/events.c index 2678fa28..3a303fa5 100644 --- a/src/events.c +++ b/src/events.c @@ -4,7 +4,7 @@ // (c) 1995-2014 by Artsoft Entertainment // Holger Schemel // info@artsoft.org -// http://www.artsoft.org/ +// https://www.artsoft.org/ // ---------------------------------------------------------------------------- // events.c // ============================================================================ @@ -1382,7 +1382,16 @@ static void HandleButtonOrFinger(int mx, int my, int button) static boolean checkTextInputKey(Key key) { - return (textinput_status && KSYM_PRINTABLE(key)); + // when playing, only handle raw key events and ignore text input + if (game_status == GAME_MODE_PLAYING) + return FALSE; + + // ignore raw keys as text input when not in text input mode + if (KSYM_RAW(key) && !textinput_status) + return FALSE; + + // else handle all printable keys as text input + return KSYM_PRINTABLE(key); } void HandleTextEvent(TextEvent *event) @@ -1775,17 +1784,6 @@ void HandleButton(int mx, int my, int button, int button_nr) } } -static boolean is_string_suffix(char *string, char *suffix) -{ - int string_len = strlen(string); - int suffix_len = strlen(suffix); - - if (suffix_len > string_len) - return FALSE; - - return (strEqual(&string[string_len - suffix_len], suffix)); -} - #define MAX_CHEAT_INPUT_LEN 32 static void HandleKeysSpecial(Key key) @@ -1815,73 +1813,69 @@ static void HandleKeysSpecial(Key key) if (game_status == GAME_MODE_MAIN) { - if (is_string_suffix(cheat_input, ":insert-solution-tape") || - is_string_suffix(cheat_input, ":ist")) + if (strSuffix(cheat_input, ":insert-solution-tape") || + strSuffix(cheat_input, ":ist")) { InsertSolutionTape(); } - else if (is_string_suffix(cheat_input, ":play-solution-tape") || - is_string_suffix(cheat_input, ":pst")) + else if (strSuffix(cheat_input, ":play-solution-tape") || + strSuffix(cheat_input, ":pst")) { PlaySolutionTape(); } - else if (is_string_suffix(cheat_input, ":reload-graphics") || - is_string_suffix(cheat_input, ":rg")) + else if (strSuffix(cheat_input, ":reload-graphics") || + strSuffix(cheat_input, ":rg")) { ReloadCustomArtwork(1 << ARTWORK_TYPE_GRAPHICS); DrawMainMenu(); } - else if (is_string_suffix(cheat_input, ":reload-sounds") || - is_string_suffix(cheat_input, ":rs")) + else if (strSuffix(cheat_input, ":reload-sounds") || + strSuffix(cheat_input, ":rs")) { ReloadCustomArtwork(1 << ARTWORK_TYPE_SOUNDS); DrawMainMenu(); } - else if (is_string_suffix(cheat_input, ":reload-music") || - is_string_suffix(cheat_input, ":rm")) + else if (strSuffix(cheat_input, ":reload-music") || + strSuffix(cheat_input, ":rm")) { ReloadCustomArtwork(1 << ARTWORK_TYPE_MUSIC); DrawMainMenu(); } - else if (is_string_suffix(cheat_input, ":reload-artwork") || - is_string_suffix(cheat_input, ":ra")) + else if (strSuffix(cheat_input, ":reload-artwork") || + strSuffix(cheat_input, ":ra")) { ReloadCustomArtwork(1 << ARTWORK_TYPE_GRAPHICS | 1 << ARTWORK_TYPE_SOUNDS | 1 << ARTWORK_TYPE_MUSIC); DrawMainMenu(); } - else if (is_string_suffix(cheat_input, ":dump-level") || - is_string_suffix(cheat_input, ":dl")) + else if (strSuffix(cheat_input, ":dump-level") || + strSuffix(cheat_input, ":dl")) { DumpLevel(&level); } - else if (is_string_suffix(cheat_input, ":dump-tape") || - is_string_suffix(cheat_input, ":dt")) + else if (strSuffix(cheat_input, ":dump-tape") || + strSuffix(cheat_input, ":dt")) { DumpTape(&tape); } - else if (is_string_suffix(cheat_input, ":fix-tape") || - is_string_suffix(cheat_input, ":ft")) + else if (strSuffix(cheat_input, ":undo-tape") || + strSuffix(cheat_input, ":ut")) { - /* fix single-player tapes that contain player input for more than one - player (due to a bug in 3.3.1.2 and earlier versions), which results - in playing levels with more than one player in multi-player mode, - even though the tape was originally recorded in single-player mode */ - - // remove player input actions for all players but the first one - for (i = 1; i < MAX_PLAYERS; i++) - tape.player_participates[i] = FALSE; - - tape.changed = TRUE; + UndoTape(); + } + else if (strSuffix(cheat_input, ":fix-tape") || + strSuffix(cheat_input, ":ft")) + { + FixTape_ForceSinglePlayer(); } - else if (is_string_suffix(cheat_input, ":save-native-level") || - is_string_suffix(cheat_input, ":snl")) + else if (strSuffix(cheat_input, ":save-native-level") || + strSuffix(cheat_input, ":snl")) { SaveNativeLevel(&level); } - else if (is_string_suffix(cheat_input, ":frames-per-second") || - is_string_suffix(cheat_input, ":fps")) + else if (strSuffix(cheat_input, ":frames-per-second") || + strSuffix(cheat_input, ":fps")) { global.show_frames_per_second = !global.show_frames_per_second; } @@ -1889,18 +1883,18 @@ static void HandleKeysSpecial(Key key) else if (game_status == GAME_MODE_PLAYING) { #ifdef DEBUG - if (is_string_suffix(cheat_input, ".q")) + if (strSuffix(cheat_input, ".q")) DEBUG_SetMaximumDynamite(); #endif } else if (game_status == GAME_MODE_EDITOR) { - if (is_string_suffix(cheat_input, ":dump-brush") || - is_string_suffix(cheat_input, ":DB")) + if (strSuffix(cheat_input, ":dump-brush") || + strSuffix(cheat_input, ":DB")) { DumpBrush(); } - else if (is_string_suffix(cheat_input, ":DDB")) + else if (strSuffix(cheat_input, ":DDB")) { DumpBrush_Small(); } @@ -1930,9 +1924,9 @@ static void HandleKeysSpecial(Key key) } // special key shortcuts for all game modes - if (is_string_suffix(cheat_input, ":dump-event-actions") || - is_string_suffix(cheat_input, ":dea") || - is_string_suffix(cheat_input, ":DEA")) + if (strSuffix(cheat_input, ":dump-event-actions") || + strSuffix(cheat_input, ":dea") || + strSuffix(cheat_input, ":DEA")) { DumpGadgetIdentifiers(); DumpScreenIdentifiers(); @@ -2172,7 +2166,7 @@ void HandleKey(Key key, int key_status) { setup.fullscreen = !setup.fullscreen; - ToggleFullscreenOrChangeWindowScalingIfNeeded(); + ToggleFullscreenIfNeeded(); if (game_status == GAME_MODE_SETUP) RedrawSetupScreenAfterFullscreenToggle(); @@ -2205,7 +2199,7 @@ void HandleKey(Key key, int key_status) else if (setup.window_scaling_percent > MAX_WINDOW_SCALING_PERCENT) setup.window_scaling_percent = MAX_WINDOW_SCALING_PERCENT; - ToggleFullscreenOrChangeWindowScalingIfNeeded(); + ChangeWindowScalingIfNeeded(); if (game_status == GAME_MODE_SETUP) RedrawSetupScreenAfterFullscreenToggle();