diff --git a/src/client/clientlauncher.cpp b/src/client/clientlauncher.cpp index b7b58cff6540..72452f9c289f 100644 --- a/src/client/clientlauncher.cpp +++ b/src/client/clientlauncher.cpp @@ -42,6 +42,7 @@ with this program; if not, write to the Free Software Foundation, Inc., /* mainmenumanager.h */ gui::IGUIEnvironment *guienv = nullptr; +gui::IGUIStaticText *guiroot = nullptr; MainMenuManager g_menumgr; bool isMenuActive() @@ -217,6 +218,14 @@ bool ClientLauncher::run(GameStartData &start_data, const Settings &cmd_args) m_rendering_engine->get_gui_env()->clear(); + /* + We need some kind of a root node to be able to add + custom gui elements directly on the screen. + Otherwise they won't be automatically drawn. + */ + guiroot = m_rendering_engine->get_gui_env()->addStaticText(L"", + core::rect(0, 0, 10000, 10000)); + bool game_has_run = launch_game(error_message, reconnect_requested, start_data, cmd_args); @@ -547,8 +556,7 @@ void ClientLauncher::main_menu(MainMenuData *menudata) #endif /* show main menu */ - GUIEngine mymenu(&input->joystick, m_rendering_engine->get_gui_env()->getRootGUIElement(), - m_rendering_engine, &g_menumgr, menudata, *kill); + GUIEngine mymenu(&input->joystick, guiroot, m_rendering_engine, &g_menumgr, menudata, *kill); /* leave scene manager in a clean state */ m_rendering_engine->get_scene_manager()->clear(); diff --git a/src/client/game.cpp b/src/client/game.cpp index 7b62015134e3..928f67e82b33 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -1806,19 +1806,19 @@ inline bool Game::handleCallbacks() } if (g_gamecallback->changepassword_requested) { - (new GUIPasswordChange(guienv, guienv->getRootGUIElement(), -1, + (new GUIPasswordChange(guienv, guiroot, -1, &g_menumgr, client, texture_src))->drop(); g_gamecallback->changepassword_requested = false; } if (g_gamecallback->changevolume_requested) { - (new GUIVolumeChange(guienv, guienv->getRootGUIElement(), -1, + (new GUIVolumeChange(guienv, guiroot, -1, &g_menumgr, texture_src))->drop(); g_gamecallback->changevolume_requested = false; } if (g_gamecallback->keyconfig_requested) { - (new GUIKeyChangeMenu(guienv, guienv->getRootGUIElement(), -1, + (new GUIKeyChangeMenu(guienv, guiroot, -1, &g_menumgr, texture_src))->drop(); g_gamecallback->keyconfig_requested = false; } @@ -4150,7 +4150,7 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime, } if (isMenuActive()) - m_rendering_engine->get_gui_env()->getRootGUIElement()->bringToFront(formspec); + guiroot->bringToFront(formspec); } while (false); /* diff --git a/src/client/gameui.cpp b/src/client/gameui.cpp index 4cc68fa10ce6..d448eadd6147 100644 --- a/src/client/gameui.cpp +++ b/src/client/gameui.cpp @@ -53,8 +53,6 @@ GameUI::GameUI() } void GameUI::init() { - IGUIElement *guiroot = guienv->getRootGUIElement(); - // First line of debug text m_guitext = gui::StaticText::add(guienv, utf8_to_wide(PROJECT_NAME_C).c_str(), core::rect(0, 0, 0, 0), false, true, guiroot); diff --git a/src/gui/guiFormSpecMenu.cpp b/src/gui/guiFormSpecMenu.cpp index 5ab000d6baa8..0e662b2822a9 100644 --- a/src/gui/guiFormSpecMenu.cpp +++ b/src/gui/guiFormSpecMenu.cpp @@ -139,9 +139,9 @@ void GUIFormSpecMenu::create(GUIFormSpecMenu *&cur_formspec, Client *client, TextDest *txt_dest, const std::string &formspecPrepend, ISoundManager *sound_manager) { if (cur_formspec == nullptr) { - cur_formspec = new GUIFormSpecMenu(joystick, guienv->getRootGUIElement(), - -1, &g_menumgr, client, guienv, client->getTextureSource(), sound_manager, - fs_src, txt_dest, formspecPrepend); + cur_formspec = new GUIFormSpecMenu(joystick, guiroot, -1, &g_menumgr, + client, guienv, client->getTextureSource(), sound_manager, fs_src, + txt_dest, formspecPrepend); cur_formspec->doPause = false; /* diff --git a/src/gui/mainmenumanager.h b/src/gui/mainmenumanager.h index b86d1892ac26..76d3573405b0 100644 --- a/src/gui/mainmenumanager.h +++ b/src/gui/mainmenumanager.h @@ -38,8 +38,8 @@ class IGameCallback virtual void signalKeyConfigChange() = 0; }; -// FIXME: do we really need this global variable? extern gui::IGUIEnvironment *guienv; +extern gui::IGUIStaticText *guiroot; // Handler for the modal menus