Bugfix: Update formname on showing new formspec while already one shown
authorsapier <Sapier at GMX dot net>
Sun, 7 Apr 2013 14:34:35 +0000 (16:34 +0200)
committerKahrl <kahrl@gmx.net>
Sat, 25 May 2013 23:45:46 +0000 (01:45 +0200)
src/game.cpp

index 4f0d1b6630710fdd24e17872230cc7ca71df5851..ffc69d7398b9a608e2d35ee897d304664b6b5bbe 100644 (file)
@@ -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);