diff --git a/src/util/dinput_source.cpp b/src/util/dinput_source.cpp index 72af7075a..7a89c5372 100644 --- a/src/util/dinput_source.cpp +++ b/src/util/dinput_source.cpp @@ -228,7 +228,8 @@ bool DInputSource::AddDevice(ControllerData& cd, const std::string& name) cd.axis_offsets.push_back(offset); } - cd.num_hats = caps.dwPOVs; + cd.num_buttons = std::min(static_cast(caps.dwButtons), static_cast(std::size(cd.last_state.rgbButtons))); + cd.num_hats = std::min(static_cast(caps.dwPOVs), static_cast(std::size(cd.last_state.rgdwPOV))); hr = cd.device->Poll(); if (hr == DI_NOEFFECT)