summaryrefslogtreecommitdiff
path: root/src/guiFormSpecMenu.cpp
diff options
context:
space:
mode:
authorrubenwardy <rubenwardy@gmail.com>2016-10-03 00:30:33 +0100
committerNer'zhul <nerzhul@users.noreply.github.com>2016-10-08 18:58:28 +0200
commit067766eec213918b6cb5b2533d0c78eceb3949ec (patch)
tree3db9f36c4e6b2fa37624507e89141f361ee7a78f /src/guiFormSpecMenu.cpp
parent0baea8c25cb04bcbeca5ae532a00d877628f6b06 (diff)
downloadminetest-067766eec213918b6cb5b2533d0c78eceb3949ec.tar.gz
minetest-067766eec213918b6cb5b2533d0c78eceb3949ec.tar.bz2
minetest-067766eec213918b6cb5b2533d0c78eceb3949ec.zip
Fix backwards compatibility issue introduced by close_on_enter
Diffstat (limited to 'src/guiFormSpecMenu.cpp')
-rw-r--r--src/guiFormSpecMenu.cpp42
1 files changed, 35 insertions, 7 deletions
diff --git a/src/guiFormSpecMenu.cpp b/src/guiFormSpecMenu.cpp
index 714e71a5a..73388114b 100644
--- a/src/guiFormSpecMenu.cpp
+++ b/src/guiFormSpecMenu.cpp
@@ -914,6 +914,16 @@ void GUIFormSpecMenu::parseDropDown(parserData* data,std::string element)
<< element << "'" << std::endl;
}
+void GUIFormSpecMenu::parseFieldCloseOnEnter(parserData *data,
+ const std::string &element)
+{
+ std::vector<std::string> parts = split(element,';');
+ if (parts.size() == 2 ||
+ (parts.size() > 2 && m_formspec_version > FORMSPEC_API_VERSION)) {
+ field_close_on_enter[parts[0]] = is_yes(parts[1]);
+ }
+}
+
void GUIFormSpecMenu::parsePwdField(parserData* data,std::string element)
{
std::vector<std::string> parts = split(element,';');
@@ -977,8 +987,11 @@ void GUIFormSpecMenu::parsePwdField(parserData* data,std::string element)
evt.KeyInput.PressedDown = true;
e->OnEvent(evt);
- if (parts.size() >= 5 && !is_yes(parts[4])) {
- spec.close_on_enter = false;
+ if (parts.size() >= 5) {
+ // TODO: remove after 2016-11-03
+ warningstream << "pwdfield: use field_close_on_enter[name, enabled]" <<
+ " instead of the 5th param" << std::endl;
+ field_close_on_enter[name] = is_yes(parts[4]);
}
m_fields.push_back(spec);
@@ -1062,8 +1075,11 @@ void GUIFormSpecMenu::parseSimpleField(parserData* data,
}
}
- if (parts.size() >= 4 && !is_yes(parts[3])) {
- spec.close_on_enter = false;
+ if (parts.size() >= 4) {
+ // TODO: remove after 2016-11-03
+ warningstream << "field/simple: use field_close_on_enter[name, enabled]" <<
+ " instead of the 4th param" << std::endl;
+ field_close_on_enter[name] = is_yes(parts[3]);
}
m_fields.push_back(spec);
@@ -1171,8 +1187,11 @@ void GUIFormSpecMenu::parseTextArea(parserData* data,
}
}
- if (parts.size() >= 6 && !is_yes(parts[5])) {
- spec.close_on_enter = false;
+ if (parts.size() >= 6) {
+ // TODO: remove after 2016-11-03
+ warningstream << "field/textarea: use field_close_on_enter[name, enabled]" <<
+ " instead of the 6th param" << std::endl;
+ field_close_on_enter[name] = is_yes(parts[5]);
}
m_fields.push_back(spec);
@@ -1783,6 +1802,11 @@ void GUIFormSpecMenu::parseElement(parserData* data, std::string element)
return;
}
+ if (type == "field_close_on_enter") {
+ parseFieldCloseOnEnter(data, description);
+ return;
+ }
+
if (type == "pwdfield") {
parsePwdField(data,description);
return;
@@ -3689,7 +3713,11 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event)
if (s.ftype == f_Unknown &&
s.fid == event.GUIEvent.Caller->getID()) {
current_field_enter_pending = s.fname;
- close_on_enter = s.close_on_enter;
+ UNORDERED_MAP<std::string, bool>::const_iterator it =
+ field_close_on_enter.find(s.fname);
+ if (it != field_close_on_enter.end())
+ close_on_enter = (*it).second;
+
break;
}
}