diff --git a/wadsrc/static/zscript/menu/loadsavemenu.txt b/wadsrc/static/zscript/menu/loadsavemenu.txt index 34d56f374..05638d393 100644 --- a/wadsrc/static/zscript/menu/loadsavemenu.txt +++ b/wadsrc/static/zscript/menu/loadsavemenu.txt @@ -426,6 +426,8 @@ class LoadSaveMenu : ListMenu class SaveMenu : LoadSaveMenu { + String mSaveName; + //============================================================================= // // @@ -464,7 +466,6 @@ class SaveMenu : LoadSaveMenu override bool MenuEvent (int mkey, bool fromcontroller) { - if (Super.MenuEvent(mkey, fromcontroller)) { return true; @@ -483,8 +484,9 @@ class SaveMenu : LoadSaveMenu } else if (mkey == MKEY_Input) { + // Do not start the save here, it would cause some serious execution ordering problems. mEntering = false; - manager.DoSave(Selected, mInput.GetText()); + mSaveName = mInput.GetText(); mInput = null; } else if (mkey == MKEY_Abort) @@ -525,6 +527,14 @@ class SaveMenu : LoadSaveMenu } + override void Ticker() + { + if (mSaveName.Length() > 0) + { + manager.DoSave(Selected, mSaveName); + mSaveName = ""; + } + } } diff --git a/wadsrc/static/zscript/menu/menu.txt b/wadsrc/static/zscript/menu/menu.txt index 84478ba81..9f59b3239 100644 --- a/wadsrc/static/zscript/menu/menu.txt +++ b/wadsrc/static/zscript/menu/menu.txt @@ -266,7 +266,7 @@ class Menu : Object native virtual bool CheckFocus(MenuItemBase fc) { return false; } virtual void ReleaseFocus() {} virtual void ResetColor() {} - virtual bool MouseEvent(int type, int mx, int my) { return false; } + virtual bool MouseEvent(int type, int mx, int my) { return true; } virtual void Ticker() {} //============================================================================= diff --git a/wadsrc/static/zscript/menu/textentermenu.txt b/wadsrc/static/zscript/menu/textentermenu.txt index 356eba1e6..b92932aaf 100644 --- a/wadsrc/static/zscript/menu/textentermenu.txt +++ b/wadsrc/static/zscript/menu/textentermenu.txt @@ -171,31 +171,28 @@ class TextEnterMenu : Menu override bool MouseEvent(int type, int x, int y) { - if (mMouseCapture || m_use_mouse == 1) - { - int cell_width = 18 * CleanXfac; - int cell_height = 12 * CleanYfac; - int screen_y = screen.GetHeight() - INPUTGRID_HEIGHT * cell_height; - int screen_x = (screen.GetWidth() - INPUTGRID_WIDTH * cell_width) / 2; + int cell_width = 18 * CleanXfac; + int cell_height = 12 * CleanYfac; + int screen_y = screen.GetHeight() - INPUTGRID_HEIGHT * cell_height; + int screen_x = (screen.GetWidth() - INPUTGRID_WIDTH * cell_width) / 2; - if (x >= screen_x && x < screen_x + INPUTGRID_WIDTH * cell_width && y >= screen_y) + if (x >= screen_x && x < screen_x + INPUTGRID_WIDTH * cell_width && y >= screen_y) + { + InputGridX = (x - screen_x) / cell_width; + InputGridY = (y - screen_y) / cell_height; + if (type == MOUSE_Release) { - InputGridX = (x - screen_x) / cell_width; - InputGridY = (y - screen_y) / cell_height; - if (type == MOUSE_Release) + if (MenuEvent(MKEY_Enter, true)) { - if (MenuEvent(MKEY_Enter, true)) - { - MenuSound("menu/choose"); - if (m_use_mouse == 2) InputGridX = InputGridY = -1; - return true; - } + MenuSound("menu/choose"); + if (m_use_mouse == 2) InputGridX = InputGridY = -1; } } - else - { - InputGridX = InputGridY = -1; - } + return true; + } + else + { + InputGridX = InputGridY = -1; } return Super.MouseEvent(type, x, y); } @@ -262,8 +259,8 @@ class TextEnterMenu : Menu if (mEnterString.Length() > 0) { Menu parent = mParentMenu; - Close(); parent.MenuEvent(MKEY_Input, false); + Close(); return true; } }