diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -811,33 +811,6 @@ void QueryString::DrawEditBox(const Wind _cur_dpi = old_dpi; } -EventState QueryStringBaseWindow::HandleEditBoxKey(int wid, uint16 key, uint16 keycode) -{ - EventState state = ES_NOT_HANDLED; - switch (this->QueryString::HandleEditBoxKey(this, wid, key, keycode, state)) { - case HEBR_EDITING: - this->OnEditboxChanged(wid); - break; - - case HEBR_CONFIRM: - if (this->ok_button >= 0) { - this->OnClick(Point(), this->ok_button, 1); - } - break; - - case HEBR_CANCEL: - if (this->cancel_button >= 0) { - this->OnClick(Point(), this->cancel_button, 1); - } else { - this->UnfocusFocusedWidget(); - } - break; - - default: break; - } - return state; -} - /** Class for the string query window. */ struct QueryStringWindow : public QueryStringBaseWindow { diff --git a/src/querystring_gui.h b/src/querystring_gui.h --- a/src/querystring_gui.h +++ b/src/querystring_gui.h @@ -77,8 +77,6 @@ struct QueryStringBaseWindow : public Wi { free(this->edit_str_buf); } - - EventState HandleEditBoxKey(int wid, uint16 key, uint16 keycode); }; void ShowOnScreenKeyboard(QueryStringBaseWindow *parent, int button); diff --git a/src/window.cpp b/src/window.cpp --- a/src/window.cpp +++ b/src/window.cpp @@ -2234,6 +2234,46 @@ static bool MaybeBringWindowToFront(Wind } /** + * Process keypress for editbox widget. + * @param wid Editbox widget. + * @param key the Unicode value of the key. + * @param keycode the untranslated key code including shift state. + * @return #ES_HANDLED if the key press has been handled and no other + * window should receive the event. + */ +EventState Window::HandleEditBoxKey(int wid, uint16 key, uint16 keycode) +{ + EventState state = ES_NOT_HANDLED; + + QueryString *query = dynamic_cast(this); + if (query == NULL) return state; + + switch (query->HandleEditBoxKey(this, wid, key, keycode, state)) { + case HEBR_EDITING: + this->OnEditboxChanged(wid); + break; + + case HEBR_CONFIRM: + if (query->ok_button >= 0) { + this->OnClick(Point(), query->ok_button, 1); + } + break; + + case HEBR_CANCEL: + if (query->cancel_button >= 0) { + this->OnClick(Point(), query->cancel_button, 1); + } else { + this->UnfocusFocusedWidget(); + } + break; + + default: break; + } + + return state; +} + +/** * Handle keyboard input. * @param raw_key Lower 8 bits contain the ASCII character, the higher 16 bits the keycode */ @@ -2267,8 +2307,7 @@ void HandleKeypress(uint32 raw_key) if (_focused_window->window_class == WC_CONSOLE) { if (_focused_window->OnKeyPress(key, keycode) == ES_HANDLED) return; } else { - QueryStringBaseWindow *query = dynamic_cast(_focused_window); - if (query != NULL && query->HandleEditBoxKey(_focused_window->nested_focus->index, key, keycode) == ES_HANDLED) return; + if (_focused_window->HandleEditBoxKey(_focused_window->nested_focus->index, key, keycode) == ES_HANDLED) return; } } diff --git a/src/window_gui.h b/src/window_gui.h --- a/src/window_gui.h +++ b/src/window_gui.h @@ -458,6 +458,8 @@ public: void UnfocusFocusedWidget(); bool SetFocusedWidget(byte widget_index); + EventState HandleEditBoxKey(int wid, uint16 key, uint16 keycode); + void HandleButtonClick(byte widget); int GetRowFromWidget(int clickpos, int widget, int padding, int line_height = -1) const;