diff --git a/src/d_main.cpp b/src/d_main.cpp index 272697461..95e54cbb6 100644 --- a/src/d_main.cpp +++ b/src/d_main.cpp @@ -227,11 +227,9 @@ static void HandleGamepadDeviceRemoved(event_t *ev) int i = 0; I_Assert(ev != NULL); I_Assert(ev->type == ev_gamepad_device_removed); - - G_UnregisterAvailableGamepad(ev->device); CONS_Alert(CONS_NOTICE, "Gamepad device %d disconnected\n", ev->device); - // Downstream responders need to update player gamepad assignments, pause, etc + boolean playerinterrupted = false; for (i = 0; i < MAXSPLITSCREENPLAYERS; i++) { @@ -239,8 +237,17 @@ static void HandleGamepadDeviceRemoved(event_t *ev) if (device == ev->device) { G_SetDeviceForPlayer(i, -1); + playerinterrupted = true; } } + + // Downstream responders need to update player gamepad assignments, pause, etc + G_UnregisterAvailableGamepad(ev->device); + + if (playerinterrupted && Playing() && !netgame && !demo.playback) + { + M_StartControlPanel(); + } } /// Respond to added/removed device events, for bookkeeping available gamepads.