diff --git a/src/InputHandler.c b/src/InputHandler.c index 2deb89742..c8109ab4c 100644 --- a/src/InputHandler.c +++ b/src/InputHandler.c @@ -463,7 +463,7 @@ static void InputHandler_KeyDown(void* obj, int key, bool was) { Game_ScreenshotRequested = true; return; } else if (key == KEY_ESCAPE && active->Closable) { Gui_Close(active); - } else if (Elem_HandlesKeyDown(active, key, was)) { + } else if (Elem_HandlesKeyDown(active, key, was)) { return; } else if ((key == KEY_ESCAPE || key == KEY_PAUSE) && !active->HandlesAllInput) { Gui_FreeActive(); diff --git a/src/Menus.c b/src/Menus.c index cfcb7b14c..c57fc9267 100644 --- a/src/Menus.c +++ b/src/Menus.c @@ -565,10 +565,7 @@ struct ListScreen* ListScreen_MakeInstance(void) { /*########################################################################################################################* *--------------------------------------------------------MenuScreen-------------------------------------------------------* *#########################################################################################################################*/ -static bool MenuScreen_KeyDown(void* screen, Key key, bool was) { - if (key == KEY_ESCAPE) { Gui_Close(screen); } - return key < KEY_F1 || key > KEY_F35; -} +static bool MenuScreen_KeyDown(void* screen, Key key, bool was) { return key < KEY_F1 || key > KEY_F35; } static bool MenuScreen_MouseScroll(void* screen, float delta) { return true; } static void MenuScreen_Init(void* screen) { @@ -684,6 +681,7 @@ struct Screen* PauseScreen_MakeInstance(void) { struct PauseScreen* s = &PauseScreen_Instance; s->HandlesAllInput = true; + s->Closable = true; s->Widgets = widgets; s->WidgetsCount = Array_Elems(widgets); @@ -775,6 +773,7 @@ struct Screen* OptionsGroupScreen_MakeInstance(void) { struct OptionsGroupScreen* s = &OptionsGroupScreen_Instance; s->HandlesAllInput = true; + s->Closable = true; s->Widgets = widgets; s->WidgetsCount = Array_Elems(widgets); @@ -988,6 +987,7 @@ struct Screen* EditHotkeyScreen_MakeInstance(struct HotkeyData original) { struct EditHotkeyScreen* s = &EditHotkeyScreen_Instance; s->HandlesAllInput = true; + s->Closable = true; s->Widgets = widgets; s->WidgetsCount = Array_Elems(widgets); @@ -1027,9 +1027,7 @@ CC_NOINLINE static int GenLevelScreen_GetSeedInt(struct GenLevelScreen* s, int i static void GenLevelScreen_Begin(int width, int height, int length) { World_Reset(); - Event_RaiseVoid(&WorldEvents.NewMap); World_SetDimensions(width, height, length); - Gui_FreeActive(); Gui_SetActive(GeneratingScreen_MakeInstance()); } @@ -1157,6 +1155,7 @@ struct Screen* GenLevelScreen_MakeInstance(void) { struct GenLevelScreen* s = &GenLevelScreen_Instance; s->HandlesAllInput = true; + s->Closable = true; s->Widgets = widgets; s->WidgetsCount = Array_Elems(widgets); @@ -1207,6 +1206,7 @@ struct Screen* ClassicGenScreen_MakeInstance(void) { struct ClassicGenScreen* s = &ClassicGenScreen_Instance; s->HandlesAllInput = true; + s->Closable = true; s->Widgets = widgets; s->WidgetsCount = Array_Elems(widgets); @@ -1373,6 +1373,7 @@ struct Screen* SaveLevelScreen_MakeInstance(void) { struct SaveLevelScreen* s = &SaveLevelScreen_Instance; s->HandlesAllInput = true; + s->Closable = true; s->Widgets = widgets; s->WidgetsCount = Array_Elems(widgets); @@ -1622,7 +1623,8 @@ static void KeyBindingsScreen_OnBindingClick(void* screen, void* widget) { cur = (struct ButtonWidget*)s->Widgets[s->CurI]; ButtonWidget_Set(cur, &text, &s->TitleFont); } - s->CurI = Menu_Index(s, btn); + s->CurI = Menu_Index(s, btn); + s->Closable = false; text.length = 0; String_AppendConst(&text, "> "); @@ -1691,7 +1693,8 @@ static bool KeyBindingsScreen_KeyDown(void* screen, Key key, bool was) { cur = (struct ButtonWidget*)s->Widgets[s->CurI]; ButtonWidget_Set(cur, &text, &s->TitleFont); - s->CurI = -1; + s->CurI = -1; + s->Closable = true; return true; } @@ -1703,7 +1706,7 @@ static bool KeyBindingsScreen_MouseDown(void* screen, int x, int y, MouseButton i = Menu_DoMouseDown(s, x, y, btn); if (i == -1) return false; - /* Reset a key binding */ + /* Reset a key binding by right clicking */ if ((s->CurI == -1 || s->CurI == i) && i < s->BindsCount) { s->CurI = i; Elem_HandlesKeyDown(s, KeyBind_Defaults[s->Binds[i]], false); @@ -1720,6 +1723,7 @@ static struct ScreenVTABLE KeyBindingsScreen_VTABLE = { static struct KeyBindingsScreen* KeyBindingsScreen_Make(int bindsCount, uint8_t* binds, const char** descs, struct ButtonWidget* buttons, struct Widget** widgets, Event_Void_Callback contextRecreated) { struct KeyBindingsScreen* s = &KeyBindingsScreen_Instance; s->HandlesAllInput = true; + s->Closable = true; s->Widgets = widgets; s->WidgetsCount = bindsCount + 4; @@ -2154,6 +2158,7 @@ struct Screen* MenuOptionsScreen_MakeInstance(struct Widget** widgets, int count struct MenuInputValidator* validators, const char** defaultValues, const char** descriptions, int descsCount) { struct MenuOptionsScreen* s = &MenuOptionsScreen_Instance; s->HandlesAllInput = true; + s->Closable = true; s->Widgets = widgets; s->WidgetsCount = count; diff --git a/src/Screens.c b/src/Screens.c index b983cf6b9..02c54599b 100644 --- a/src/Screens.c +++ b/src/Screens.c @@ -631,6 +631,7 @@ struct Screen* LoadingScreen_UNSAFE_RawPointer = (struct Screen*)&LoadingScreen_ static void GeneratingScreen_Init(void* screen) { Gen_Done = false; LoadingScreen_Init(screen); + Event_RaiseVoid(&WorldEvents.NewMap); if (Gen_Vanilla) { Thread_Start(&NotchyGen_Generate, true);