Escape Menu doens't revert changes made to GuiService on close

I’ve had a problem where my gamepad UI code was getting skipping options and doing other odd things. After way more debugging than I’d like to admit, I found the bug, and shes a sneaky one.

It’s a simple test, the new open close events on GuiService make it super easy to observe. Stick whats below in a LocalScript, and stick that LocalScript in StarterPlayerScripts and give it a test. Opening and closing the menu should result in a different set of prints.

local guiService = game:GetService("GuiService")

----

guiService.AutoSelectGuiEnabled = false
guiService.GuiNavigationEnabled = false

----

local function check()
	print(guiService.AutoSelectGuiEnabled)
	print(guiService.GuiNavigationEnabled)
end

----

guiService.MenuOpened:connect(check)
guiService.MenuClosed:connect(check)

It should print false false both times, but GuiNavEnabled gets set to true and does not get reset back to false on close, resulting in a false true print. Ideally both properties should be reverted to what they were set to before the menu was opened, that way people relying on having a specific combo don’t have to reset the values every time the menu opens and closes.

NOTE!!! This bug ONLY seems to occur when the escape menu is opened with a gamepad, it prints as it should when opened via keyboard or hamburger button.

It’s an easy enough bug to work around, but none the less it is a bug and deserves to be squished (or scooped up in a cup and put outside, your choice).

3 Likes

Thanks for the report, I’ve made a pull request to the CoreScripts repo to fix this.

2 Likes