@@ -894,8 +894,8 @@ void GUIFormSpecMenu::parsePwdField(parserData* data,std::string element)
894
894
{
895
895
std::vector<std::string> parts = split (element,' ;' );
896
896
897
- if ((parts.size () == 4 ) ||
898
- ((parts.size () > 4 ) && (m_formspec_version > FORMSPEC_API_VERSION)))
897
+ if ((parts.size () == 4 ) || (parts. size () == 5 ) ||
898
+ ((parts.size () > 5 ) && (m_formspec_version > FORMSPEC_API_VERSION)))
899
899
{
900
900
std::vector<std::string> v_pos = split (parts[0 ],' ,' );
901
901
std::vector<std::string> v_geom = split (parts[1 ],' ,' );
@@ -952,6 +952,11 @@ void GUIFormSpecMenu::parsePwdField(parserData* data,std::string element)
952
952
evt.KeyInput .Shift = 0 ;
953
953
evt.KeyInput .PressedDown = true ;
954
954
e->OnEvent (evt);
955
+
956
+ if (parts.size () >= 5 && !is_yes (parts[4 ])) {
957
+ spec.close_on_enter = false ;
958
+ }
959
+
955
960
m_fields.push_back (spec);
956
961
return ;
957
962
}
@@ -1033,6 +1038,10 @@ void GUIFormSpecMenu::parseSimpleField(parserData* data,
1033
1038
}
1034
1039
}
1035
1040
1041
+ if (parts.size () >= 4 && !is_yes (parts[3 ])) {
1042
+ spec.close_on_enter = false ;
1043
+ }
1044
+
1036
1045
m_fields.push_back (spec);
1037
1046
}
1038
1047
@@ -1137,6 +1146,11 @@ void GUIFormSpecMenu::parseTextArea(parserData* data,
1137
1146
addStaticText (Environment, spec.flabel .c_str (), rect, false , true , this , 0 );
1138
1147
}
1139
1148
}
1149
+
1150
+ if (parts.size () >= 6 && !is_yes (parts[5 ])) {
1151
+ spec.close_on_enter = false ;
1152
+ }
1153
+
1140
1154
m_fields.push_back (spec);
1141
1155
}
1142
1156
@@ -1150,8 +1164,8 @@ void GUIFormSpecMenu::parseField(parserData* data,std::string element,
1150
1164
return ;
1151
1165
}
1152
1166
1153
- if ((parts.size () == 5 ) ||
1154
- ((parts.size () > 5 ) && (m_formspec_version > FORMSPEC_API_VERSION)))
1167
+ if ((parts.size () == 5 ) || (parts. size () == 6 ) ||
1168
+ ((parts.size () > 6 ) && (m_formspec_version > FORMSPEC_API_VERSION)))
1155
1169
{
1156
1170
parseTextArea (data,parts,type);
1157
1171
return ;
@@ -2698,6 +2712,7 @@ void GUIFormSpecMenu::acceptInput(FormspecQuitMode quitmode=quit_mode_no)
2698
2712
2699
2713
if (!current_field_enter_pending.empty ()) {
2700
2714
fields[" key_enter_field" ] = current_field_enter_pending;
2715
+ current_field_enter_pending = " " ;
2701
2716
}
2702
2717
2703
2718
if (current_keys_pending.key_escape ) {
@@ -3630,15 +3645,18 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event)
3630
3645
3631
3646
if (event.GUIEvent .EventType == gui::EGET_EDITBOX_ENTER) {
3632
3647
if (event.GUIEvent .Caller ->getID () > 257 ) {
3648
+ bool close_on_enter = true ;
3633
3649
for (u32 i = 0 ; i < m_fields.size (); i++) {
3634
3650
FieldSpec &s = m_fields[i];
3635
3651
if (s.ftype == f_Unknown &&
3636
3652
s.fid == event.GUIEvent .Caller ->getID ()) {
3637
3653
current_field_enter_pending = s.fname ;
3654
+ close_on_enter = s.close_on_enter ;
3655
+ break ;
3638
3656
}
3639
3657
}
3640
3658
3641
- if (m_allowclose) {
3659
+ if (m_allowclose && close_on_enter ) {
3642
3660
current_keys_pending.key_enter = true ;
3643
3661
acceptInput (quit_mode_accept);
3644
3662
quitMenu ();
0 commit comments