Gamepad virtual cursor interfering with UIPageLayout

I recently noticed that the gamepad virtual cursor has some weird behavior with UIPageLayouts.

It seems like hovering over buttons that are affected by a UIPageLayout blocks you from changing the page. However, when not hovering over them, it works like normal.

I already have GamepadInputEnabled set to false on the page layout. I would also like to point out that if VirtualCursorMode is set to Disabled, pressing the button to enable gui selection also changes the page with gamepad input disabled. (I dont know if thats intended behavior)

Here is a repro file:
GamepadRepro.rbxm (7.6 KB)

Video of the bug:

Step 1: Enable the virtual cursor
Step 2: Hover over the green area
Step 3: Press the X button a bunch of times (as you can see, the page changes each time from green to blue and back to green, this is expected behavior)
Step 4: Hover over any of the red buttons
Step 5: Press the X button again (as you can see now, the page is always stuck on green, no matter how many times you try to change the page)

This happens in both studio and client.

It seems like the Active property being set to true on the buttons is the culprit.
As far as I know, the only workaround is to disable the Active property.

I am using an Xbox controller (PowerA Spectra Enhanced) to reproduce this bug.

5 Likes

We’ve filled a ticket into our internal database for this issue, and we will update you when we have further information.

Thanks for the report!

2 Likes

Still having this issue. There is no reason for a bug like this to take 2 years to fix.

2 Likes

Running into this issue myself. Hopefully this can be fixed sooner rather than later.

Still running into this 2 years later

1 Like

Any update on this? I ran into this issue today and it makes my menus unusable for controller users

Edit: I was able to find a workaround by using this function before any PageLayout movement

local function doTempControllerVirtualCursorToggleToFixPageLayoutBug(t : number, startElement : GuiObject?)
	if gps.GamepadCursorEnabled then
		gps:DisableGamepadCursor()
		task.delay(t, function()
			gps:EnableGamepadCursor(startElement)
		end)
	end
end

This bug is still happening, I really thought I would have to throw UIPageLayout entirely out of the window because of this bug but I didn’t have to thanks to Pseudosuper’s workaround.

1 Like