diff --git a/src/console.cpp b/src/console.cpp --- a/src/console.cpp +++ b/src/console.cpp @@ -202,7 +202,7 @@ static const Widget _iconsole_window_wid static const WindowDesc _iconsole_window_desc = { 0, 0, 2, 2, 2, 2, WC_CONSOLE, WC_NONE, - WDF_STD_TOOLTIPS | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS, + WDF_STD_TOOLTIPS | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_TEXTENTRY, _iconsole_window_widgets, IConsoleWndProc, }; diff --git a/src/genworld_gui.cpp b/src/genworld_gui.cpp --- a/src/genworld_gui.cpp +++ b/src/genworld_gui.cpp @@ -512,7 +512,7 @@ static void GenerateLandscapeWndProc(Win static const WindowDesc _generate_landscape_desc = { WDP_CENTER, WDP_CENTER, 338, 268, 338, 268, WC_GENERATE_LANDSCAPE, WC_NONE, - WDF_STD_TOOLTIPS | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS, + WDF_STD_TOOLTIPS | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_TEXTENTRY, _generate_landscape_widgets, GenerateLandscapeWndProc, }; @@ -520,7 +520,7 @@ static const WindowDesc _generate_landsc static const WindowDesc _heightmap_load_desc = { WDP_CENTER, WDP_CENTER, 338, 236, 338, 236, WC_GENERATE_LANDSCAPE, WC_NONE, - WDF_STD_TOOLTIPS | WDF_DEF_WIDGET | WDF_STD_BTN | WDF_UNCLICK_BUTTONS, + WDF_STD_TOOLTIPS | WDF_DEF_WIDGET | WDF_STD_BTN | WDF_UNCLICK_BUTTONS | WDF_TEXTENTRY, _heightmap_load_widgets, GenerateLandscapeWndProc, }; @@ -745,7 +745,7 @@ static const Widget _create_scenario_wid static const WindowDesc _create_scenario_desc = { WDP_CENTER, WDP_CENTER, 338, 170, 338, 170, WC_GENERATE_LANDSCAPE, WC_NONE, - WDF_STD_TOOLTIPS | WDF_DEF_WIDGET | WDF_STD_BTN | WDF_UNCLICK_BUTTONS, + WDF_STD_TOOLTIPS | WDF_DEF_WIDGET | WDF_STD_BTN | WDF_UNCLICK_BUTTONS | WDF_TEXTENTRY, _create_scenario_widgets, CreateScenarioWndProc, }; diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -1180,7 +1180,7 @@ static const Widget _query_string_widget static const WindowDesc _query_string_desc = { 190, 219, 260, 42, 260, 42, WC_QUERY_STRING, WC_NONE, - WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET, + WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_TEXTENTRY, _query_string_widgets, QueryStringWndProc }; @@ -1648,7 +1648,7 @@ static void SaveLoadDlgWndProc(Window *w static const WindowDesc _load_dialog_desc = { WDP_CENTER, WDP_CENTER, 257, 154, 257, 294, WC_SAVELOAD, WC_NONE, - WDF_STD_TOOLTIPS | WDF_DEF_WIDGET | WDF_STD_BTN | WDF_UNCLICK_BUTTONS | WDF_RESIZABLE, + WDF_STD_TOOLTIPS | WDF_DEF_WIDGET | WDF_STD_BTN | WDF_UNCLICK_BUTTONS | WDF_RESIZABLE | WDF_TEXTENTRY, _load_dialog_widgets, SaveLoadDlgWndProc, }; @@ -1656,7 +1656,7 @@ static const WindowDesc _load_dialog_des static const WindowDesc _save_dialog_desc = { WDP_CENTER, WDP_CENTER, 257, 180, 257, 320, WC_SAVELOAD, WC_NONE, - WDF_STD_TOOLTIPS | WDF_DEF_WIDGET | WDF_STD_BTN | WDF_UNCLICK_BUTTONS | WDF_RESIZABLE, + WDF_STD_TOOLTIPS | WDF_DEF_WIDGET | WDF_STD_BTN | WDF_UNCLICK_BUTTONS | WDF_RESIZABLE | WDF_TEXTENTRY, _save_dialog_widgets, SaveLoadDlgWndProc, }; diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -1852,7 +1852,7 @@ static const Widget _chat_window_widgets static const WindowDesc _chat_window_desc = { WDP_CENTER, -26, 320, 14, 640, 14, // x, y, width, height WC_SEND_NETWORK_MSG, WC_NONE, - WDF_STD_TOOLTIPS | WDF_DEF_WIDGET, + WDF_STD_TOOLTIPS | WDF_DEF_WIDGET | WDF_TEXTENTRY, _chat_window_widgets, ChatWindowWndProc }; @@ -1951,7 +1951,7 @@ static const Widget _ncp_window_widgets[ static const WindowDesc _ncp_window_desc = { WDP_AUTO, WDP_AUTO, 300, 63, 300, 63, WC_COMPANY_PASSWORD_WINDOW, WC_NONE, - WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON, + WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_TEXTENTRY, _ncp_window_widgets, NetworkCompanyPasswordWindowWndProc }; diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -235,7 +235,7 @@ static const Widget _newgrf_add_dlg_widg static const WindowDesc _newgrf_add_dlg_desc = { WDP_CENTER, WDP_CENTER, 307, 237, 307, 337, WC_SAVELOAD, WC_NONE, - WDF_STD_TOOLTIPS | WDF_DEF_WIDGET | WDF_STD_BTN | WDF_UNCLICK_BUTTONS | WDF_RESIZABLE, + WDF_STD_TOOLTIPS | WDF_DEF_WIDGET | WDF_STD_BTN | WDF_UNCLICK_BUTTONS | WDF_RESIZABLE | WDF_TEXTENTRY, _newgrf_add_dlg_widgets, NewGRFAddDlgWndProc, }; diff --git a/src/signs_gui.cpp b/src/signs_gui.cpp --- a/src/signs_gui.cpp +++ b/src/signs_gui.cpp @@ -298,7 +298,7 @@ static const Widget _query_sign_edit_wid static const WindowDesc _query_sign_edit_desc = { 190, 170, 260, 42, 260, 42, WC_QUERY_STRING, WC_NONE, - WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET, + WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_TEXTENTRY, _query_sign_edit_widgets, QuerySignEditWndProc }; diff --git a/src/window.cpp b/src/window.cpp --- a/src/window.cpp +++ b/src/window.cpp @@ -1676,10 +1676,6 @@ void HandleKeypress(uint32 key) { Window* const *wz; WindowEvent e; - /* Stores if a window with a textfield for typing is open - * If this is the case, keypress events are only passed to windows with text fields and - * to thein this main toolbar. */ - bool query_open = false; /* * During the generation of the world, there might be @@ -1698,28 +1694,12 @@ void HandleKeypress(uint32 key) e.we.keypress.keycode = GB(key, 16, 16); e.we.keypress.cont = true; - /* check if we have a query string window open before allowing hotkeys */ - if (FindWindowById(WC_QUERY_STRING, 0) != NULL || - FindWindowById(WC_SEND_NETWORK_MSG, 0) != NULL || - FindWindowById(WC_GENERATE_LANDSCAPE, 0) != NULL || - FindWindowById(WC_CONSOLE, 0) != NULL || - FindWindowById(WC_SAVELOAD, 0) != NULL || - FindWindowById(WC_COMPANY_PASSWORD_WINDOW, 0) != NULL) { - query_open = true; - } - /* Call the event, start with the uppermost window. */ for (wz = _last_z_window; wz != _z_windows;) { Window *w = *--wz; - /* if a query window is open, only call the event for certain window types */ - if (query_open && - w->window_class != WC_QUERY_STRING && - w->window_class != WC_SEND_NETWORK_MSG && - w->window_class != WC_GENERATE_LANDSCAPE && - w->window_class != WC_CONSOLE && - w->window_class != WC_SAVELOAD && - w->window_class != WC_COMPANY_PASSWORD_WINDOW) { + /* Only call the event for the windows declared as been text entry enabled */ + if (!(w->desc_flags & WDF_TEXTENTRY)) { continue; } w->wndproc(w, &e); diff --git a/src/window.h b/src/window.h --- a/src/window.h +++ b/src/window.h @@ -208,7 +208,7 @@ enum WindowDefaultFlag { WDF_STD_TOOLTIPS = 1 << 0, ///< use standard routine when displaying tooltips WDF_DEF_WIDGET = 1 << 1, ///< default widget control for some widgets in the on click event WDF_STD_BTN = 1 << 2, ///< default handling for close and drag widgets (widget no 0 and 1) - + WDF_TEXTENTRY = 1 << 3, ///< This window is authorized to receive keyboard events WDF_UNCLICK_BUTTONS = 1 << 4, ///< Unclick buttons when the window event times out */ WDF_STICKY_BUTTON = 1 << 5, ///< Set window to sticky mode; they are not closed unless closed with 'X' (widget 2) WDF_RESIZABLE = 1 << 6, ///< A window can be resized