From efc75db76458dc473043043ca72c18701436dec8 Mon Sep 17 00:00:00 2001
From: sapier <Sapier at GMX dot net>
Date: Sun, 7 Apr 2013 16:34:35 +0200
Subject: [PATCH] Bugfix: Update formname on showing new formspec while already
 one shown

---
 src/game.cpp | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/game.cpp b/src/game.cpp
index 4f0d1b663..ffc69d739 100644
--- a/src/game.cpp
+++ b/src/game.cpp
@@ -134,6 +134,10 @@ struct TextDestPlayerInventory : public TextDest
 		m_client->sendInventoryFields(m_formname, fields);
 	}
 
+	void setFormName(std::string formname) {
+		m_formname = formname;
+	}
+
 	Client *m_client;
 	std::string m_formname;
 };
@@ -920,6 +924,7 @@ void the_game(
 )
 {
 	FormspecFormSource* current_formspec = 0;
+	TextDestPlayerInventory* current_textdest = 0;
 	video::IVideoDriver* driver = device->getVideoDriver();
 	scene::ISceneManager* smgr = device->getSceneManager();
 	
@@ -2236,19 +2241,23 @@ void the_game(
 					if (current_formspec == 0)
 					{
 						/* Create menu */
+						/* Note: FormspecFormSource and TextDestPlayerInventory
+						 * are deleted by guiFormSpecMenu                     */
 						current_formspec = new FormspecFormSource(*(event.show_formspec.formspec),&current_formspec);
-
+						current_textdest = new TextDestPlayerInventory(&client,*(event.show_formspec.formname));
 						GUIFormSpecMenu *menu =
 								new GUIFormSpecMenu(device, guiroot, -1,
 										&g_menumgr,
 										&client, gamedef);
 						menu->setFormSource(current_formspec);
-						menu->setTextDest(new TextDestPlayerInventory(&client,*(event.show_formspec.formname)));
+						menu->setTextDest(current_textdest);
 						menu->drop();
 					}
 					else
 					{
+						assert(current_textdest != 0);
 						/* update menu */
+						current_textdest->setFormName(*(event.show_formspec.formname));
 						current_formspec->setForm(*(event.show_formspec.formspec));
 					}
 					delete(event.show_formspec.formspec);
-- 
GitLab