From 3ff35b6fceffb5a9f6a0cb34b382eb1a927f4d0f Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Fri, 12 Nov 2004 23:14:47 +0000 Subject: [PATCH] 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. --- src/video/windx5/SDL_dx5events.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/video/windx5/SDL_dx5events.c b/src/video/windx5/SDL_dx5events.c index c7acc8e9e..bf96b9437 100644 --- a/src/video/windx5/SDL_dx5events.c +++ b/src/video/windx5/SDL_dx5events.c @@ -141,6 +141,7 @@ static int DX5_DInputInit(_THIS) LPDIRECTINPUTDEVICE device; HRESULT result; DIPROPDWORD dipdw; + HWND topwnd; /* Create the DirectInput object */ result = DInputCreate(SDL_Instance, DIRECTINPUT_VERSION, @@ -167,8 +168,9 @@ static int DX5_DInputInit(_THIS) 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 @@ void DX5_DInputReset(_THIS, int fullscreen) DWORD level; int i; HRESULT result; + HWND topwnd; for ( i=0; i