Fix white screen on in-app back from game, add controller diagram

Guard game exit to prevent double-pop and pause core before navigating.
Replace flat button chip grid with visual gamepad layout in test screen.
This commit is contained in:
2026-04-12 16:34:49 -04:00
parent 4bb80d6501
commit 2bec2881eb

View File

@@ -90,6 +90,15 @@ fun GameScreen(
var displayMode by remember { mutableStateOf(preferencesManager.displayMode) } var displayMode by remember { mutableStateOf(preferencesManager.displayMode) }
var loadError by remember { mutableStateOf<String?>(null) } var loadError by remember { mutableStateOf<String?>(null) }
var surfaceViewRef by remember { mutableStateOf<SurfaceView?>(null) } var surfaceViewRef by remember { mutableStateOf<SurfaceView?>(null) }
var isExiting by remember { mutableStateOf(false) }
val safeBack: () -> Unit = {
if (!isExiting) {
isExiting = true
core?.pause()
onBack()
}
}
// Launch menu: shown before emulation starts if saves exist // Launch menu: shown before emulation starts if saves exist
var showLaunchMenu by remember { mutableStateOf(true) } var showLaunchMenu by remember { mutableStateOf(true) }
@@ -172,7 +181,7 @@ fun GameScreen(
pendingLoadSlot = -1 pendingLoadSlot = -1
showLaunchMenu = false showLaunchMenu = false
}, },
onBack = onBack onBack = safeBack
) )
} else { } else {
// Emulation surface // Emulation surface
@@ -240,7 +249,7 @@ fun GameScreen(
// HUD controls (hidden when game menu is open) // HUD controls (hidden when game menu is open)
if (!showGameMenu) { if (!showGameMenu) {
IconButton( IconButton(
onClick = onBack, onClick = safeBack,
modifier = Modifier modifier = Modifier
.align(Alignment.TopStart) .align(Alignment.TopStart)
.padding(8.dp) .padding(8.dp)