diff options
author | arajp <arajp@nvidia.com> | 2015-05-28 11:20:17 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-05-28 18:20:43 +0000 |
commit | bc4f7fa505a2d59a434d8a164043210a960d9be9 (patch) | |
tree | 2f8d05efe3e9b83e3f3e3292e6d270d724f538fd | |
parent | 2f535b6a37179e0fe2b7c291ef987b2610fd35aa (diff) | |
download | chromium_src-bc4f7fa505a2d59a434d8a164043210a960d9be9.zip chromium_src-bc4f7fa505a2d59a434d8a164043210a960d9be9.tar.gz chromium_src-bc4f7fa505a2d59a434d8a164043210a960d9be9.tar.bz2 |
Handle gamepad length being incorrectly set to 0 even when gamepad is present
When Windows sends device changed event multiple times even when a single
gamepad is connected, EnumerateDevices incorrectly sets gamepad length to zero.
BUG=485507
R=scottmg, raymes
Review URL: https://codereview.chromium.org/1145063004
Cr-Commit-Position: refs/heads/master@{#331822}
-rw-r--r-- | content/browser/gamepad/gamepad_platform_data_fetcher_win.cc | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/content/browser/gamepad/gamepad_platform_data_fetcher_win.cc b/content/browser/gamepad/gamepad_platform_data_fetcher_win.cc index c563cff..aca00960 100644 --- a/content/browser/gamepad/gamepad_platform_data_fetcher_win.cc +++ b/content/browser/gamepad/gamepad_platform_data_fetcher_win.cc @@ -97,7 +97,6 @@ void GamepadPlatformDataFetcherWin::EnumerateDevices( WebGamepads* pads) { TRACE_EVENT0("GAMEPAD", "EnumerateDevices"); - pads->length = 0; // Mark all disconnected pads DISCONNECTED. for (size_t i = 0; i < WebGamepads::itemsLengthCap; ++i) { if (!pads->items[i].connected) @@ -115,7 +114,6 @@ void GamepadPlatformDataFetcherWin::EnumerateDevices( pad_state_[pad_index].status = XINPUT_CONNECTED; pad_state_[pad_index].xinput_index = i; pad_state_[pad_index].mapper = NULL; - pads->length++; } } @@ -151,7 +149,6 @@ void GamepadPlatformDataFetcherWin::EnumerateDevices( else pad.mapping[0] = 0; - pads->length++; } } } @@ -177,6 +174,7 @@ void GamepadPlatformDataFetcherWin::GetGamepadData(WebGamepads* pads, if (devices_changed_hint) EnumerateDevices(pads); + pads->length = 0; for (size_t i = 0; i < WebGamepads::itemsLengthCap; ++i) { // We rely on device_changed and GetCapabilities to tell us that // something's been connected, but we will mark as disconnected if @@ -188,6 +186,9 @@ void GamepadPlatformDataFetcherWin::GetGamepadData(WebGamepads* pads, GetXInputPadData(i, &pads->items[i]); else if (pad_state_[i].status == RAWINPUT_CONNECTED) GetRawInputPadData(i, &pads->items[i]); + + if (pads->items[i].connected) + pads->length++; } } |