Fix XInput hotplug

This commit is contained in:
erorcun 2021-02-12 19:50:26 +03:00
parent 80e4b3db55
commit 0ec16a5b0e
2 changed files with 10 additions and 5 deletions

View File

@ -351,11 +351,8 @@ wchar* DetectJoystickDraw(bool* disabled, bool userHovering) {
} }
} }
if (found != -1 && CPad::XInputJoy1 != found) { if (found != -1 && CPad::XInputJoy1 != found) {
if (CPad::XInputJoy1 != -1 && CPad::XInputJoy1 != found) // We should never leave pads -1, so we can process them when they're connected and kinda support hotplug.
CPad::XInputJoy2 = CPad::XInputJoy1; CPad::XInputJoy2 = (CPad::XInputJoy1 == -1 ? (found + 1) % 4 : CPad::XInputJoy1);
else
CPad::XInputJoy2 = -1;
CPad::XInputJoy1 = found; CPad::XInputJoy1 = found;
cachedButtonNum = 0; // fake too, because xinput bypass CControllerConfig cachedButtonNum = 0; // fake too, because xinput bypass CControllerConfig
} }

View File

@ -279,6 +279,14 @@ void LoadINIControllerSettings()
CPad::XInputJoy2 = i; CPad::XInputJoy2 = i;
} }
} }
// There is no plug event on XInput, so let's leave XInputJoy1/2 as 0/1 respectively, and hotplug will be possible.
if (CPad::XInputJoy1 == -1) {
CPad::XInputJoy1 = 0;
CPad::XInputJoy2 = 1;
} else if (CPad::XInputJoy2 == -1) {
CPad::XInputJoy2 = (CPad::XInputJoy1 + 1) % 4;
}
} }
#else #else
ReadIniIfExists("Controller", "JoystickName", gSelectedJoystickName, 128); ReadIniIfExists("Controller", "JoystickName", gSelectedJoystickName, 128);