aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNovatux <nathanael.courant@laposte.net>2013-10-26 09:56:38 +0200
committerNovatux <nathanael.courant@laposte.net>2013-11-03 11:53:59 +0100
commit0b788892898013cd430c48b98e21a3fd111c3c7f (patch)
tree8fd707d8fb91bfdc377f81e7679d0aadddd79434
parent06a5eceb81f8f5006814e567790166a0d7693972 (diff)
downloadminetest-0b788892898013cd430c48b98e21a3fd111c3c7f.tar.gz
minetest-0b788892898013cd430c48b98e21a3fd111c3c7f.tar.bz2
minetest-0b788892898013cd430c48b98e21a3fd111c3c7f.zip
Send a on_receive_fields event when formspec is closed, with fields.quit = "true"
-rw-r--r--src/guiFormSpecMenu.cpp30
-rw-r--r--src/guiFormSpecMenu.h2
2 files changed, 21 insertions, 11 deletions
diff --git a/src/guiFormSpecMenu.cpp b/src/guiFormSpecMenu.cpp
index 25adf8ea7..f3d4568ef 100644
--- a/src/guiFormSpecMenu.cpp
+++ b/src/guiFormSpecMenu.cpp
@@ -2041,12 +2041,16 @@ ItemStack GUIFormSpecMenu::verifySelectedItem()
return ItemStack();
}
-void GUIFormSpecMenu::acceptInput()
+void GUIFormSpecMenu::acceptInput(bool quit=false)
{
if(m_text_dst)
{
std::map<std::string, std::string> fields;
+ if (quit) {
+ fields["quit"] = "true";
+ }
+
if (current_keys_pending.key_down) {
fields["key_down"] = "true";
current_keys_pending.key_down = false;
@@ -2188,10 +2192,12 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event)
if (event.KeyInput.PressedDown && (kp == EscapeKey ||
kp == getKeySetting("keymap_inventory")))
{
- if (m_allowclose)
+ if (m_allowclose) {
+ acceptInput(true);
quitMenu();
- else
+ } else {
m_text_dst->gotText(narrow_to_wide("MenuQuit"));
+ }
return true;
}
if (event.KeyInput.PressedDown &&
@@ -2204,7 +2210,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event)
switch (event.KeyInput.Key) {
case KEY_RETURN:
if (m_allowclose) {
- acceptInput();
+ acceptInput(true);
quitMenu();
}
else
@@ -2551,11 +2557,13 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event)
unsigned int btn_id = event.GUIEvent.Caller->getID();
if (btn_id == 257) {
- acceptInput();
- if (m_allowclose)
+ if (m_allowclose) {
+ acceptInput(true);
quitMenu();
- else
+ } else {
+ acceptInput();
m_text_dst->gotText(narrow_to_wide("ExitButton"));
+ }
// quitMenu deallocates menu
return true;
}
@@ -2572,10 +2580,12 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event)
s.send = true;
acceptInput();
if(s.is_exit){
- if (m_allowclose)
+ if (m_allowclose) {
+ acceptInput(true);
quitMenu();
- else
+ } else {
m_text_dst->gotText(narrow_to_wide("ExitButton"));
+ }
return true;
}else{
s.send = false;
@@ -2590,7 +2600,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event)
{
if (m_allowclose) {
- acceptInput();
+ acceptInput(true);
quitMenu();
}
else {
diff --git a/src/guiFormSpecMenu.h b/src/guiFormSpecMenu.h
index c244e458f..20ab52e8b 100644
--- a/src/guiFormSpecMenu.h
+++ b/src/guiFormSpecMenu.h
@@ -227,7 +227,7 @@ public:
void updateSelectedItem();
ItemStack verifySelectedItem();
- void acceptInput();
+ void acceptInput(bool quit);
bool preprocessEvent(const SEvent& event);
bool OnEvent(const SEvent& event);