mirror of
https://github.com/libretro/RetroArch.git
synced 2025-01-23 18:06:36 +00:00
only reinit when HID devices are attached
This commit is contained in:
parent
61b7b2e590
commit
c3e6ac96aa
5
.vscode/settings.json
vendored
5
.vscode/settings.json
vendored
@ -9,4 +9,9 @@
|
||||
"editor.tabSize": 3,
|
||||
"editor.renderWhitespace": "all",
|
||||
"editor.insertSpaces": true,
|
||||
"files.associations": {
|
||||
"frontend_driver.h": "c",
|
||||
"*.in": "c",
|
||||
"*.rh": "c"
|
||||
},
|
||||
}
|
@ -22,6 +22,7 @@
|
||||
|
||||
#include "win32_common.h"
|
||||
#include "gdi_common.h"
|
||||
#include "dbt.h"
|
||||
#include "../../frontend/frontend_driver.h"
|
||||
#include "../../configuration.h"
|
||||
#include "../../verbosity.h"
|
||||
@ -69,6 +70,9 @@
|
||||
#define DragQueryFileR DragQueryFileW
|
||||
#endif
|
||||
|
||||
const GUID GUID_DEVINTERFACE_HID = { 0x4d1e55b2, 0xf16f, 0x11Cf, { 0x88, 0xcb, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30 } };
|
||||
HDEVNOTIFY notification_handler;
|
||||
|
||||
extern LRESULT win32_menu_loop(HWND owner, WPARAM wparam);
|
||||
|
||||
#if defined(HAVE_D3D9) || defined(HAVE_D3D8)
|
||||
@ -759,6 +763,16 @@ bool win32_window_create(void *data, unsigned style,
|
||||
if (!main_window.hwnd)
|
||||
return false;
|
||||
|
||||
DEV_BROADCAST_DEVICEINTERFACE notification_filter;
|
||||
ZeroMemory( ¬ification_filter, sizeof(notification_filter) );
|
||||
notification_filter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
|
||||
notification_filter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
|
||||
notification_filter.dbcc_classguid = GUID_DEVINTERFACE_HID;
|
||||
notification_handler = RegisterDeviceNotification(main_window.hwnd, ¬ification_filter, DEVICE_NOTIFY_WINDOW_HANDLE);
|
||||
|
||||
if (notification_handler)
|
||||
RARCH_ERR("Error registering for notifications\n");
|
||||
|
||||
video_driver_display_type_set(RARCH_DISPLAY_WIN32);
|
||||
video_driver_display_set(0);
|
||||
video_driver_window_set((uintptr_t)main_window.hwnd);
|
||||
@ -1145,6 +1159,7 @@ void win32_destroy_window(void)
|
||||
#ifndef _XBOX
|
||||
UnregisterClass("RetroArch", GetModuleHandle(NULL));
|
||||
#endif
|
||||
UnregisterDeviceNotification(notification_handler);
|
||||
main_window.hwnd = NULL;
|
||||
}
|
||||
|
||||
|
@ -21,8 +21,6 @@
|
||||
#undef DIRECTINPUT_VERSION
|
||||
#define DIRECTINPUT_VERSION 0x0800
|
||||
|
||||
#define DBT_DEVNODES_CHANGED 0x0007
|
||||
|
||||
#ifndef WM_MOUSEHWHEEL
|
||||
#define WM_MOUSEHWHEEL 0x20e
|
||||
#endif
|
||||
@ -32,6 +30,7 @@
|
||||
#endif
|
||||
|
||||
#include <dinput.h>
|
||||
#include <dbt.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stddef.h>
|
||||
@ -804,11 +803,17 @@ bool dinput_handle_message(void *dinput, UINT message, WPARAM wParam, LPARAM lPa
|
||||
return true;
|
||||
}
|
||||
case WM_DEVICECHANGE:
|
||||
if (wParam == DBT_DEVNODES_CHANGED)
|
||||
if (wParam == DBT_DEVICEARRIVAL || wParam == DBT_DEVICEREMOVECOMPLETE)
|
||||
{
|
||||
if (di->joypad)
|
||||
di->joypad->destroy();
|
||||
di->joypad = input_joypad_init_driver(di->joypad_driver_name, di);
|
||||
PDEV_BROADCAST_HDR pHdr = (PDEV_BROADCAST_HDR)lParam;
|
||||
if( pHdr->dbch_devicetype == DBT_DEVTYP_DEVICEINTERFACE)
|
||||
{
|
||||
PDEV_BROADCAST_DEVICEINTERFACE pDevInf = (PDEV_BROADCAST_DEVICEINTERFACE)pHdr;
|
||||
/* To-Do: Don't destroy everything, lets just handle new devices gracefully */
|
||||
if (di->joypad)
|
||||
di->joypad->destroy();
|
||||
di->joypad = input_joypad_init_driver(di->joypad_driver_name, di);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case WM_MOUSEWHEEL:
|
||||
|
Loading…
x
Reference in New Issue
Block a user