# HG changeset patch # User Sam Lantinga # Date 1100301287 0 # Node ID fb8b913657667904b4acdaed3a3d8d450029ea59 # Parent cfb9518670f4a43f2196efa269ea9f87b2dbc07c Date: Tue, 19 Oct 2004 23:04:58 -0700 From: "Trevor Scroggins" Subject: [SDL] [PATCH] DirectX and SDL_WINDOWID Hack Hello, all. The IDirectInputDevice2_SetCooperativeLevel call in SDL_dx5events.c expects to be passed a root-level HWND. More often than not, a child window is used with the SDL_WINDOWID hack, causing the IDirectInputDevice2_SetCooperativeLevel call to fail. This is a small patch to SDL_dx5events.c v1.21 that fixes the problem by retrieving a handle to the root-level ancestor of the current SDL_Window and passing that handle to IDirectInputDevice2_SetCooperativeLevel. diff -r cfb9518670f4 -r fb8b91365766 src/video/windx5/SDL_dx5events.c --- a/src/video/windx5/SDL_dx5events.c Fri Nov 12 22:09:17 2004 +0000 +++ b/src/video/windx5/SDL_dx5events.c Fri Nov 12 23:14:47 2004 +0000 @@ -141,6 +141,7 @@ LPDIRECTINPUTDEVICE device; HRESULT result; DIPROPDWORD dipdw; + HWND topwnd; /* Create the DirectInput object */ result = DInputCreate(SDL_Instance, DIRECTINPUT_VERSION, @@ -167,8 +168,9 @@ SetDIerror("DirectInputDevice::QueryInterface", result); return(-1); } + topwnd = GetAncestor(SDL_Window, GA_ROOT); result = IDirectInputDevice2_SetCooperativeLevel(SDL_DIdev[i], - SDL_Window, inputs[i].win_level); + topwnd, inputs[i].win_level); if ( result != DI_OK ) { SetDIerror("DirectInputDevice::SetCooperativeLevel", result); @@ -640,6 +642,7 @@ DWORD level; int i; HRESULT result; + HWND topwnd; for ( i=0; i