summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/misc_gui.cpp27
-rw-r--r--src/querystring_gui.h2
-rw-r--r--src/window.cpp43
-rw-r--r--src/window_gui.h2
4 files changed, 43 insertions, 31 deletions
diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp
index fbd3345e2..1391dbada 100644
--- a/src/misc_gui.cpp
+++ b/src/misc_gui.cpp
@@ -811,33 +811,6 @@ void QueryString::DrawEditBox(const Window *w, int wid) const
_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
index 9e9c23681..0eebd6206 100644
--- a/src/querystring_gui.h
+++ b/src/querystring_gui.h
@@ -77,8 +77,6 @@ struct QueryStringBaseWindow : public Window, public QueryString {
{
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
index 23db475f4..8aa932859 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -2234,6 +2234,46 @@ static bool MaybeBringWindowToFront(Window *w)
}
/**
+ * 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<QueryString*>(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<QueryStringBaseWindow*>(_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
index da8836993..ca93ee091 100644
--- 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;