summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/network/network_content_gui.cpp1
-rw-r--r--src/newgrf_gui.cpp1
-rw-r--r--src/querystring_gui.h7
-rw-r--r--src/settings_gui.cpp1
-rw-r--r--src/signs_gui.cpp2
-rw-r--r--src/window.cpp21
6 files changed, 30 insertions, 3 deletions
diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp
index 21476c65f..9f8ee75c6 100644
--- a/src/network/network_content_gui.cpp
+++ b/src/network/network_content_gui.cpp
@@ -418,6 +418,7 @@ public:
this->GetWidget<NWidgetStacked>(WID_NCL_SEL_ALL_UPDATE)->SetDisplayedPlane(select_all);
this->querystrings[WID_NCL_FILTER] = &this->filter_editbox;
+ this->filter_editbox.cancel_button = QueryString::ACTION_CLEAR;
this->filter_editbox.afilter = CS_ALPHANUMERAL;
this->SetFocusedWidget(WID_NCL_FILTER);
diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp
index bf6487d10..c5abe1198 100644
--- a/src/newgrf_gui.cpp
+++ b/src/newgrf_gui.cpp
@@ -639,6 +639,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback {
this->FinishInitNested(desc, WN_GAME_OPTIONS_NEWGRF_STATE);
this->querystrings[WID_NS_FILTER] = &this->filter_editbox;
+ this->filter_editbox.cancel_button = QueryString::ACTION_CLEAR;
this->SetFocusedWidget(WID_NS_FILTER);
this->avails.SetListing(this->last_sorting);
diff --git a/src/querystring_gui.h b/src/querystring_gui.h
index 5c46ced84..a84e16746 100644
--- a/src/querystring_gui.h
+++ b/src/querystring_gui.h
@@ -31,6 +31,11 @@ enum HandleEditBoxResult
* Data stored about a string that can be modified in the GUI
*/
struct QueryString {
+ /* Special actions when hitting ENTER or ESC. (only keyboard, not OSK) */
+ static const int ACTION_NOTHING = -1; ///< Nothing.
+ static const int ACTION_DESELECT = -2; ///< Deselect editbox.
+ static const int ACTION_CLEAR = -3; ///< Clear editbox.
+
StringID caption;
int ok_button; ///< Widget button of parent window to simulate when pressing OK in OSK.
int cancel_button; ///< Widget button of parent window to simulate when pressing CANCEL in OSK.
@@ -44,7 +49,7 @@ struct QueryString {
* @param size Maximum size in bytes.
* @param chars Maximum size in chars.
*/
- QueryString(uint16 size, uint16 chars = UINT16_MAX) : ok_button(-1), cancel_button(-1), text(size, chars), orig(NULL)
+ QueryString(uint16 size, uint16 chars = UINT16_MAX) : ok_button(ACTION_NOTHING), cancel_button(ACTION_DESELECT), text(size, chars), orig(NULL)
{
}
diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp
index 8cef170d4..85a53f4bf 100644
--- a/src/settings_gui.cpp
+++ b/src/settings_gui.cpp
@@ -2004,6 +2004,7 @@ struct GameSettingsWindow : Window {
this->FinishInitNested(desc, WN_GAME_OPTIONS_GAME_SETTINGS);
this->querystrings[WID_GS_FILTER] = &this->filter_editbox;
+ this->filter_editbox.cancel_button = QueryString::ACTION_CLEAR;
this->SetFocusedWidget(WID_GS_FILTER);
this->InvalidateData();
diff --git a/src/signs_gui.cpp b/src/signs_gui.cpp
index c3b1d490e..d982fe5ec 100644
--- a/src/signs_gui.cpp
+++ b/src/signs_gui.cpp
@@ -159,7 +159,7 @@ struct SignListWindow : Window, SignList {
/* Initialize the text edit widget */
this->querystrings[WID_SIL_FILTER_TEXT] = &this->filter_editbox;
this->filter_editbox.ok_button = WID_SIL_FILTER_ENTER_BTN;
- this->filter_editbox.cancel_button = WID_SIL_FILTER_CLEAR_BTN;
+ this->filter_editbox.cancel_button = QueryString::ACTION_CLEAR;
this->filter_editbox.afilter = CS_ALPHANUMERAL;
/* Initialize the filtering variables */
diff --git a/src/window.cpp b/src/window.cpp
index 665fabcf8..088233fc0 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -2265,6 +2265,8 @@ EventState Window::HandleEditBoxKey(int wid, uint16 key, uint16 keycode)
QueryString *query = this->GetQueryString(wid);
if (query == NULL) return state;
+ int action = QueryString::ACTION_NOTHING;
+
switch (query->HandleEditBoxKey(this, wid, key, keycode, state)) {
case HEBR_EDITING:
this->OnEditboxChanged(wid);
@@ -2273,6 +2275,8 @@ EventState Window::HandleEditBoxKey(int wid, uint16 key, uint16 keycode)
case HEBR_CONFIRM:
if (query->ok_button >= 0) {
this->OnClick(Point(), query->ok_button, 1);
+ } else {
+ action = query->ok_button;
}
break;
@@ -2280,13 +2284,28 @@ EventState Window::HandleEditBoxKey(int wid, uint16 key, uint16 keycode)
if (query->cancel_button >= 0) {
this->OnClick(Point(), query->cancel_button, 1);
} else {
- this->UnfocusFocusedWidget();
+ action = query->cancel_button;
}
break;
default: break;
}
+ switch (action) {
+ case QueryString::ACTION_DESELECT:
+ this->UnfocusFocusedWidget();
+ break;
+
+ case QueryString::ACTION_CLEAR:
+ query->text.DeleteAll();
+ this->SetWidgetDirty(wid);
+ this->OnEditboxChanged(wid);
+ break;
+
+ default:
+ break;
+ }
+
return state;
}