Mercurial > sdl-ios-xcode
changeset 970:fb8b91365766
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.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Fri, 12 Nov 2004 23:14:47 +0000 |
parents | cfb9518670f4 |
children | 96671ebc50a4 |
files | src/video/windx5/SDL_dx5events.c |
diffstat | 1 files changed, 6 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- 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<MAX_INPUTS; ++i ) { if ( SDL_DIdev[i] != NULL ) { @@ -649,8 +652,9 @@ level = inputs[i].win_level; } IDirectInputDevice2_Unacquire(SDL_DIdev[i]); + topwnd = GetAncestor(SDL_Window, GA_ROOT); result = IDirectInputDevice2_SetCooperativeLevel( - SDL_DIdev[i], SDL_Window, level); + SDL_DIdev[i], topwnd, level); IDirectInputDevice2_Acquire(SDL_DIdev[i]); if ( result != DI_OK ) { SetDIerror(