diff --git a/src/game.cpp b/src/game.cpp index 12bc695a6..774d8f03e 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -30,6 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "server.h" #include "guiPasswordChange.h" #include "guiVolumeChange.h" +#include "guiKeyChangeMenu.h" #include "guiFormSpecMenu.h" #include "tool.h" #include "guiChatConsole.h" @@ -151,6 +152,11 @@ struct LocalFormspecHandler : public TextDest return; } + if (fields.find("btn_key_config") != fields.end()) { + g_gamecallback->keyConfig(); + return; + } + if (fields.find("btn_exit_menu") != fields.end()) { g_gamecallback->disconnect(); return; @@ -1044,6 +1050,8 @@ static void show_pause_menu(GUIFormSpecMenu** cur_formspec, os << "button_exit[4," << (ypos++) << ";3,0.5;btn_sound;" << wide_to_narrow(wstrgettext("Sound Volume")) << "]"; + os << "button_exit[4," << (ypos++) << ";3,0.5;btn_key_config;" + << wide_to_narrow(wstrgettext("Change Keys")) << "]"; os << "button_exit[4," << (ypos++) << ";3,0.5;btn_exit_menu;" << wide_to_narrow(wstrgettext("Exit to Menu")) << "]"; os << "button_exit[4," << (ypos++) << ";3,0.5;btn_exit_os;" @@ -1877,6 +1885,14 @@ void the_game(bool &kill, bool random_input, InputHandler *input, g_gamecallback->changevolume_requested = false; } + if(g_gamecallback->keyconfig_requested) + { + (new GUIKeyChangeMenu(guienv, guiroot, -1, + &g_menumgr))->drop(); + g_gamecallback->keyconfig_requested = false; + } + + /* Process TextureSource's queue */ tsrc->processQueue(); diff --git a/src/mainmenumanager.h b/src/mainmenumanager.h index 28fe1ac11..56ba40129 100644 --- a/src/mainmenumanager.h +++ b/src/mainmenumanager.h @@ -31,6 +31,7 @@ class IGameCallback { public: virtual void exitToOS() = 0; + virtual void keyConfig() = 0; virtual void disconnect() = 0; virtual void changePassword() = 0; virtual void changeVolume() = 0; @@ -124,6 +125,7 @@ public: disconnect_requested(false), changepassword_requested(false), changevolume_requested(false), + keyconfig_requested(false), shutdown_requested(false), device(a_device) { @@ -151,10 +153,17 @@ public: { changevolume_requested = true; } + + virtual void keyConfig() + { + keyconfig_requested = true; + } + bool disconnect_requested; bool changepassword_requested; bool changevolume_requested; + bool keyconfig_requested; bool shutdown_requested; IrrlichtDevice *device; };