]> git.lizzy.rs Git - minetest.git/blobdiff - src/guiKeyChangeMenu.cpp
Fix segfaults caused by the Environment not being initialized yet
[minetest.git] / src / guiKeyChangeMenu.cpp
index 9b5a31d267368dd2ca7e16ac41664ca7cdd11eb0..261592394e2409f57f4bb67f2c0a64d8f1d848b5 100644 (file)
@@ -22,7 +22,6 @@
 #include "guiKeyChangeMenu.h"
 #include "debug.h"
 #include "serialization.h"
-#include "main.h"
 #include <string>
 #include <IGUICheckBox.h>
 #include <IGUIEditBox.h>
@@ -270,8 +269,7 @@ bool GUIKeyChangeMenu::resetMenu()
 bool GUIKeyChangeMenu::OnEvent(const SEvent& event)
 {
        if (event.EventType == EET_KEY_INPUT_EVENT && activeKey >= 0
-               && event.KeyInput.PressedDown)
-       {
+                       && event.KeyInput.PressedDown) {
                
                bool prefer_character = shift_down;
                KeyPress kp(event.KeyInput, prefer_character);
@@ -303,7 +301,7 @@ bool GUIKeyChangeMenu::OnEvent(const SEvent& event)
 
                // But go on
                {
-                       key_setting *k=NULL;
+                       key_setting *k = NULL;
                        for(size_t i = 0; i < key_settings.size(); i++)
                        {
                                if(key_settings.at(i)->id == activeKey)
@@ -312,7 +310,7 @@ bool GUIKeyChangeMenu::OnEvent(const SEvent& event)
                                        break;
                                }
                        }
-                       assert(k);
+                       FATAL_ERROR_IF(k == NULL, "Key setting not found");
                        k->key = kp;
                        const wchar_t *text = wgettext(k->key.name());
                        k->button->setText(text);
@@ -329,9 +327,12 @@ bool GUIKeyChangeMenu::OnEvent(const SEvent& event)
                                return true;
                        }
                }
-       }
-       if (event.EventType == EET_GUI_EVENT)
-       {
+       } else if (event.EventType == EET_KEY_INPUT_EVENT && activeKey < 0
+                       && event.KeyInput.PressedDown
+                       && event.KeyInput.Key == irr::KEY_ESCAPE) {
+               quitMenu();
+               return true;
+       } else if (event.EventType == EET_GUI_EVENT) {
                if (event.GUIEvent.EventType == gui::EGET_ELEMENT_FOCUS_LOST
                        && isVisible())
                {
@@ -364,7 +365,7 @@ bool GUIKeyChangeMenu::OnEvent(const SEvent& event)
                                                        break;
                                                }
                                        }
-                                       assert(k);
+                                       FATAL_ERROR_IF(k == NULL, "Key setting not found");
 
                                        resetMenu();
                                        shift_down = false;