summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/misc_gui.cpp8
-rw-r--r--src/querystring_gui.h1
-rw-r--r--src/window.cpp14
3 files changed, 15 insertions, 8 deletions
diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp
index 48f3dc1fa..ba627ddee 100644
--- a/src/misc_gui.cpp
+++ b/src/misc_gui.cpp
@@ -811,6 +811,14 @@ void QueryString::DrawEditBox(const Window *w, int wid) const
_cur_dpi = old_dpi;
}
+void QueryString::ClickEditBox(Window *w, Point pt, int wid, int click_count, bool focus_changed)
+{
+ if (!focus_changed && w->window_class != WC_OSK) {
+ /* Open the OSK window if clicked on an edit box, while not changing focus */
+ ShowOnScreenKeyboard(w, wid);
+ }
+}
+
/** Class for the string query window. */
struct QueryStringWindow : public Window
{
diff --git a/src/querystring_gui.h b/src/querystring_gui.h
index a84e16746..8aea26d88 100644
--- a/src/querystring_gui.h
+++ b/src/querystring_gui.h
@@ -65,6 +65,7 @@ private:
bool HasEditBoxFocus(const Window *w, int wid) const;
public:
void DrawEditBox(const Window *w, int wid) const;
+ void ClickEditBox(Window *w, Point pt, int wid, int click_count, bool focus_changed);
void HandleEditBox(Window *w, int wid);
HandleEditBoxResult HandleEditBoxKey(Window *w, int wid, uint16 key, uint16 keycode, EventState &state);
};
diff --git a/src/window.cpp b/src/window.cpp
index 088233fc0..62109e82c 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -463,20 +463,19 @@ static void DispatchLeftClickEvent(Window *w, int x, int y, int click_count)
if ((widget_type & ~WWB_PUSHBUTTON) < WWT_LAST && (widget_type & WWB_PUSHBUTTON)) w->HandleButtonClick(widget_index);
+ Point pt = { x, y };
+
switch (widget_type) {
case NWID_VSCROLLBAR:
case NWID_HSCROLLBAR:
ScrollbarClickHandler(w, nw, x, y);
break;
- case WWT_EDITBOX:
- if (!focused_widget_changed) { // Only open the OSK window if clicking on an already focused edit box
- /* Open the OSK window if clicked on an edit box */
- if (w->querystrings.Contains(widget_index)) {
- ShowOnScreenKeyboard(w, widget_index);
- }
- }
+ case WWT_EDITBOX: {
+ QueryString *query = w->GetQueryString(widget_index);
+ if (query != NULL) query->ClickEditBox(w, pt, widget_index, click_count, focused_widget_changed);
break;
+ }
case WWT_CLOSEBOX: // 'X'
delete w;
@@ -520,7 +519,6 @@ static void DispatchLeftClickEvent(Window *w, int x, int y, int click_count)
Game::NewEvent(new ScriptEventWindowWidgetClick((ScriptWindow::WindowClass)w->window_class, w->window_number, widget_index));
}
- Point pt = { x, y };
w->OnClick(pt, widget_index, click_count);
}