From e10fee00011f6c1ef8ee5b884adb11013954a1c9 Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Sun, 7 Aug 2016 16:22:50 +0100 Subject: Allow fields to choose whether they close on enter press --- src/guiFormSpecMenu.cpp | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) (limited to 'src/guiFormSpecMenu.cpp') diff --git a/src/guiFormSpecMenu.cpp b/src/guiFormSpecMenu.cpp index dd96da5a9..2564671a3 100644 --- a/src/guiFormSpecMenu.cpp +++ b/src/guiFormSpecMenu.cpp @@ -894,8 +894,8 @@ void GUIFormSpecMenu::parsePwdField(parserData* data,std::string element) { std::vector parts = split(element,';'); - if ((parts.size() == 4) || - ((parts.size() > 4) && (m_formspec_version > FORMSPEC_API_VERSION))) + if ((parts.size() == 4) || (parts.size() == 5) || + ((parts.size() > 5) && (m_formspec_version > FORMSPEC_API_VERSION))) { std::vector v_pos = split(parts[0],','); std::vector v_geom = split(parts[1],','); @@ -952,6 +952,11 @@ void GUIFormSpecMenu::parsePwdField(parserData* data,std::string element) evt.KeyInput.Shift = 0; evt.KeyInput.PressedDown = true; e->OnEvent(evt); + + if (parts.size() >= 5 && !is_yes(parts[4])) { + spec.close_on_enter = false; + } + m_fields.push_back(spec); return; } @@ -1033,6 +1038,10 @@ void GUIFormSpecMenu::parseSimpleField(parserData* data, } } + if (parts.size() >= 4 && !is_yes(parts[3])) { + spec.close_on_enter = false; + } + m_fields.push_back(spec); } @@ -1137,6 +1146,11 @@ void GUIFormSpecMenu::parseTextArea(parserData* data, addStaticText(Environment, spec.flabel.c_str(), rect, false, true, this, 0); } } + + if (parts.size() >= 6 && !is_yes(parts[5])) { + spec.close_on_enter = false; + } + m_fields.push_back(spec); } @@ -1150,8 +1164,8 @@ void GUIFormSpecMenu::parseField(parserData* data,std::string element, return; } - if ((parts.size() == 5) || - ((parts.size() > 5) && (m_formspec_version > FORMSPEC_API_VERSION))) + if ((parts.size() == 5) || (parts.size() == 6) || + ((parts.size() > 6) && (m_formspec_version > FORMSPEC_API_VERSION))) { parseTextArea(data,parts,type); return; @@ -2698,6 +2712,7 @@ void GUIFormSpecMenu::acceptInput(FormspecQuitMode quitmode=quit_mode_no) if (!current_field_enter_pending.empty()) { fields["key_enter_field"] = current_field_enter_pending; + current_field_enter_pending = ""; } if (current_keys_pending.key_escape) { @@ -3630,15 +3645,18 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) if (event.GUIEvent.EventType == gui::EGET_EDITBOX_ENTER) { if (event.GUIEvent.Caller->getID() > 257) { + bool close_on_enter = true; for (u32 i = 0; i < m_fields.size(); i++) { FieldSpec &s = m_fields[i]; if (s.ftype == f_Unknown && s.fid == event.GUIEvent.Caller->getID()) { current_field_enter_pending = s.fname; + close_on_enter = s.close_on_enter; + break; } } - if (m_allowclose) { + if (m_allowclose && close_on_enter) { current_keys_pending.key_enter = true; acceptInput(quit_mode_accept); quitMenu(); -- cgit v1.2.3