diff --git a/src/highscore_gui.cpp b/src/highscore_gui.cpp --- a/src/highscore_gui.cpp +++ b/src/highscore_gui.cpp @@ -22,6 +22,7 @@ #include "company_base.h" #include "strings_func.h" #include "openttd.h" +#include "hotkeys.h" enum HighscoreWidgets { HSW_BACKGROUND, @@ -66,6 +67,11 @@ struct EndGameHighScoreBaseWindow : Wind virtual EventState OnKeyPress(uint16 key, uint16 keycode) { + /* All keys are 'handled' by this window but we want to make + * sure that 'quit' still works correctly. Not handling the + * quit key is enough so the main toolbar can handle it. */ + if (IsQuitKey(keycode)) return ES_NOT_HANDLED; + switch (keycode) { /* Keys for telling we want to go on */ case WKC_RETURN: @@ -74,11 +80,6 @@ struct EndGameHighScoreBaseWindow : Wind delete this; return ES_HANDLED; - /* Allow CTRL-Q to work like ALT-F4 in all cases */ - case 'Q' | WKC_CTRL: - case 'Q' | WKC_META: - return ES_NOT_HANDLED; - default: /* We want to handle all keys; we don't want windows in * the background to open. Especially the ones that do diff --git a/src/hotkeys.h b/src/hotkeys.h --- a/src/hotkeys.h +++ b/src/hotkeys.h @@ -124,6 +124,8 @@ int CheckHotkeyMatch(Hotkey *list, ui return -1; } +bool IsQuitKey(uint16 keycode); + void LoadHotkeysFromConfig(); void SaveHotkeysToConfig(); diff --git a/src/main_gui.cpp b/src/main_gui.cpp --- a/src/main_gui.cpp +++ b/src/main_gui.cpp @@ -467,6 +467,17 @@ Hotkey MainWindow::global_ho }; Hotkey *_global_hotkeys = MainWindow::global_hotkeys; +/** + * Does the given keycode match one of the keycodes bound to 'quit game'? + * @param keycode The keycode that was pressed by the user. + * @return True iff the keycode matches one of the hotkeys for 'quit'. + */ +bool IsQuitKey(uint16 keycode) +{ + int num = CheckHotkeyMatch(_global_hotkeys, keycode, NULL); + return num == GHK_QUIT; +} + void ShowSelectGameWindow();