GDevelop icon indicating copy to clipboard operation
GDevelop copied to clipboard

Fullscreen Detection broken

Open netAction opened this issue 1 year ago • 11 comments

Is there an existing issue for this?

Describe the bug

Affects: HTML5 export.

Both fullscreen detection and fullscreen switch methods are broken when the user leaves fullscreen on Chrome/Windows via Esc key or on Chrome/Android via < button or on Safari/IOs via swipe down.

After executing the Activate fullscreen action, GDevelop thinks it is in fullscreen. Even if it is not, because fullscreen has been left manually. Then running Activate fullscreen again might crash. And worse, the condition The game is in fullscreen says true but it is not.

The Javascript code if (document.fullscreenElement != null) returns the correct value on all three browsers, no matter if the fullscreen has been closed via Activate fullscreen action or via the intended browser way.

Minimal project for reproduction: Screenshot 2024-03-21 223432

Steps to reproduce

  1. Create a button and bind Activate fullscreen on click.
  2. Leave Fullscreen in the way your browser suggests.
  3. Check The game is in fullscreen or use the Activate fullscreen action again. Both don't work correctly.
  4. Check if (document.fullscreenElement != null). It does work.

GDevelop platform

Desktop

GDevelop version

5.3.195

Platform info

IDE: GDevelop via Microsoft Store on Windows 11

Browser: Chrome/Windows, Chrome/Android, Safari/IOs

Additional context

No response

netAction avatar Mar 21 '24 21:03 netAction

Hi @netAction does this happen when you publish on gd.games too? If so, can you share a link so we can see the problem in action? Thanks

ClementPasteau avatar Mar 28 '24 07:03 ClementPasteau

Yes the bug is reproducable in gd.games. https://gd.games/netaction/fullscreen-bug

Screenshot 2024-03-28 100308

Screenshot 2024-03-28 100334

netAction avatar Mar 28 '24 09:03 netAction

Thanks, that's very helpful and detailed, we're probably missing an event not being listened properly or using a wrong logic

ClementPasteau avatar Mar 28 '24 12:03 ClementPasteau

This is the function being used in the runtime to set the full screen (it's quite old), saving the variable in the state. https://github.com/4ian/GDevelop/blob/5c66623631083caf5aaf2f2d5629329a6c314ba2/GDJS/Runtime/pixi-renderers/runtimegame-pixi-renderer.ts#L390-L446

There are indeed no listeners on wether the full screen has been left. We could try adding a listener on https://developer.mozilla.org/en-US/docs/Web/API/Element/fullscreenchange_event in this method to see if it catches it or not

ClementPasteau avatar Mar 28 '24 12:03 ClementPasteau