mirror of
https://github.com/libretro/RetroArch.git
synced 2025-03-03 15:37:30 +00:00
(WINRAW) Trigger joypad driver reinit on DEVICECHANGE
This commit is contained in:
parent
15d28fe2eb
commit
2962707d5f
@ -117,6 +117,11 @@ extern bool dinput_handle_message(void *dinput, UINT message,
|
||||
WPARAM wParam, LPARAM lParam);
|
||||
#endif
|
||||
|
||||
#if !defined(_XBOX)
|
||||
extern bool winraw_handle_message(UINT message,
|
||||
WPARAM wParam, LPARAM lParam);
|
||||
#endif
|
||||
|
||||
typedef struct DISPLAYCONFIG_RATIONAL_CUSTOM
|
||||
{
|
||||
UINT32 Numerator;
|
||||
@ -1033,7 +1038,6 @@ static LRESULT CALLBACK wnd_proc_common_internal(HWND hwnd,
|
||||
case WM_POINTERDOWN:
|
||||
case WM_POINTERUP:
|
||||
case WM_POINTERUPDATE:
|
||||
case WM_DEVICECHANGE:
|
||||
case WM_MOUSEWHEEL:
|
||||
case WM_MOUSEHWHEEL:
|
||||
case WM_NCLBUTTONDBLCLK:
|
||||
@ -1072,6 +1076,12 @@ static LRESULT CALLBACK wnd_proc_common_internal(HWND hwnd,
|
||||
case WM_DISPLAYCHANGE: /* fix size after display mode switch when using SR */
|
||||
win32_resize_after_display_change(hwnd);
|
||||
break;
|
||||
case WM_DEVICECHANGE:
|
||||
#if !defined(_XBOX)
|
||||
if (winraw_handle_message(message, wparam, lparam))
|
||||
return 0;
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
|
||||
return DefWindowProc(hwnd, message, wparam, lparam);
|
||||
|
@ -21,6 +21,10 @@ extern "C" {
|
||||
|
||||
#include <hidsdi.h>
|
||||
|
||||
#if defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x0500 /* 2K */
|
||||
#include <dbt.h>
|
||||
#endif
|
||||
|
||||
#ifdef CXX_BUILD
|
||||
}
|
||||
#endif
|
||||
@ -931,6 +935,31 @@ static int16_t winraw_input_state(
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if !defined(_XBOX)
|
||||
bool winraw_handle_message(UINT message,
|
||||
WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
winraw_input_t *wr = (winraw_input_t*)(LONG_PTR)
|
||||
GetWindowLongPtr(main_window.hwnd, GWLP_USERDATA);
|
||||
|
||||
switch (message)
|
||||
{
|
||||
case WM_DEVICECHANGE:
|
||||
#if defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x0500 /* 2K */
|
||||
if (wParam == DBT_DEVICEARRIVAL ||
|
||||
wParam == DBT_DEVICEREMOVECOMPLETE)
|
||||
{
|
||||
PDEV_BROADCAST_HDR pHdr = (PDEV_BROADCAST_HDR)lParam;
|
||||
if (pHdr->dbch_devicetype == DBT_DEVTYP_DEVICEINTERFACE)
|
||||
joypad_driver_reinit(wr, NULL);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
static void winraw_free(void *data)
|
||||
{
|
||||
winraw_input_t *wr = (winraw_input_t*)data;
|
||||
|
Loading…
x
Reference in New Issue
Block a user