From 0b788892898013cd430c48b98e21a3fd111c3c7f Mon Sep 17 00:00:00 2001 From: Novatux Date: Sat, 26 Oct 2013 09:56:38 +0200 Subject: [PATCH] Send a on_receive_fields event when formspec is closed, with fields.quit = "true" --- src/guiFormSpecMenu.cpp | 30 ++++++++++++++++++++---------- src/guiFormSpecMenu.h | 2 +- 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 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);