ControllerInterface/Win32: Prevent devcies from losing their "id" on a hotplug event.

This commit is contained in:
Jordan Woyak
2019-03-09 09:57:37 -06:00
parent d26c1ce24d
commit eadbdd6bc3
10 changed files with 121 additions and 39 deletions

View File

@ -3,9 +3,11 @@
// Refer to the license.txt file included.
#include "InputCommon/ControllerInterface/DInput/DInput.h"
#include "Common/StringUtil.h"
#include "InputCommon/ControllerInterface/ControllerInterface.h"
#include "Common/Logging/Log.h"
#include "Common/StringUtil.h"
#include "InputCommon/ControllerInterface/ControllerInterface.h"
#include "InputCommon/ControllerInterface/DInput/DInputJoystick.h"
#include "InputCommon/ControllerInterface/DInput/DInputKeyboardMouse.h"
@ -40,25 +42,32 @@ std::string GetDeviceName(const LPDIRECTINPUTDEVICE8 device)
{
result = StripSpaces(UTF16ToUTF8(str.wsz));
}
else
{
ERROR_LOG(PAD, "GetProperty(DIPROP_PRODUCTNAME) failed.");
}
return result;
}
void PopulateDevices(HWND hwnd)
{
g_controller_interface.RemoveDevice([](const auto* dev) { return dev->GetSource() == "DInput"; });
// Remove unplugged devices.
g_controller_interface.RemoveDevice(
[](const auto* dev) { return dev->GetSource() == DINPUT_SOURCE_NAME && !dev->IsValid(); });
IDirectInput8* idi8;
if (FAILED(DirectInput8Create(GetModuleHandle(nullptr), DIRECTINPUT_VERSION, IID_IDirectInput8,
(LPVOID*)&idi8, nullptr)))
{
ERROR_LOG(PAD, "DirectInput8Create failed.");
return;
}
InitKeyboardMouse(idi8, hwnd);
InitKeyboardMouse(idi8);
InitJoystick(idi8, hwnd);
idi8->Release();
}
}
}
} // namespace DInput
} // namespace ciface