diff --git a/src/highscore_gui.cpp b/src/highscore_gui.cpp index 94486a4f26..004648b56e 100644 --- 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 : Window { 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 : Window { 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 index 240894b8d3..79740f3d46 100644 --- a/src/hotkeys.h +++ b/src/hotkeys.h @@ -124,6 +124,8 @@ int CheckHotkeyMatch(Hotkey *list, uint16 keycode, T *w, bool global_only = f return -1; } +bool IsQuitKey(uint16 keycode); + void LoadHotkeysFromConfig(); void SaveHotkeysToConfig(); diff --git a/src/main_gui.cpp b/src/main_gui.cpp index b5c7705301..80ea150f8a 100644 --- a/src/main_gui.cpp +++ b/src/main_gui.cpp @@ -467,6 +467,17 @@ Hotkey MainWindow::global_hotkeys[] = { }; 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();