diff --git a/src/frontend/menu.cpp b/src/frontend/menu.cpp index 1e279ae4..12283bea 100644 --- a/src/frontend/menu.cpp +++ b/src/frontend/menu.cpp @@ -86,25 +86,25 @@ bool menus::call(Engine& engine, runnable func) { engine.setScreen(std::make_shared(engine)); // could not to find or read pack guiutil::alert( - gui->getMenu(), langs::get(L"error.pack-not-found")+L": "+ + engine, langs::get(L"error.pack-not-found")+L": "+ util::str2wstr_utf8(error.getPackId()) ); return false; } catch (const assetload::error& error) { engine.setScreen(std::make_shared(engine)); guiutil::alert( - gui->getMenu(), langs::get(L"Assets Load Error", L"menu")+L":\n"+ + engine, langs::get(L"Assets Load Error", L"menu")+L":\n"+ util::str2wstr_utf8(error.what()) ); return false; } catch (const parsing_error& error) { engine.setScreen(std::make_shared(engine)); - guiutil::alert(gui->getMenu(), util::str2wstr_utf8(error.errorLog())); + guiutil::alert(engine, util::str2wstr_utf8(error.errorLog())); return false; } catch (const std::runtime_error& error) { engine.setScreen(std::make_shared(engine)); guiutil::alert( - gui->getMenu(), langs::get(L"Content Error", L"menu")+L":\n"+ + engine, langs::get(L"Content Error", L"menu")+L":\n"+ util::str2wstr_utf8(error.what()) ); return false; diff --git a/src/graphics/ui/gui_util.cpp b/src/graphics/ui/gui_util.cpp index 84c5934a..a94c3a94 100644 --- a/src/graphics/ui/gui_util.cpp +++ b/src/graphics/ui/gui_util.cpp @@ -27,12 +27,22 @@ std::shared_ptr guiutil::create(const std::string& source, scripten } void guiutil::alert( - const std::shared_ptr& menu, + Engine& engine, const std::wstring& text, const runnable& on_hidden ) { auto panel = std::make_shared(glm::vec2(500, 300), glm::vec4(8.0f), 8.0f); panel->setColor(glm::vec4(0.0f, 0.0f, 0.0f, 0.5f)); + + auto menu = engine.getGUI()->getMenu(); + runnable on_hidden_final = [on_hidden, menu, &engine]() { + if (on_hidden) { + on_hidden(); + } else { + menu->back(); + } + menu->removePage(""); + }; auto label = std::make_shared