Patches to make SDL compatible with Win95 again.
authorRyan C. Gordon <icculus@icculus.org>
Thu, 11 Aug 2005 01:02:01 +0000
changeset 1114 242a35a85852
parent 1113 39408f59a0f7
child 1115 040aa1bea9fc
Patches to make SDL compatible with Win95 again.
src/video/windx5/SDL_dx5events.c
--- a/src/video/windx5/SDL_dx5events.c	Thu Aug 11 00:56:16 2005 +0000
+++ b/src/video/windx5/SDL_dx5events.c	Thu Aug 11 01:02:01 2005 +0000
@@ -68,6 +68,19 @@
    and give him a chance to handle some messages. */
 static WNDPROC userWindowProc = NULL;
 
+static HWND GetTopLevelParent(HWND hWnd)
+{
+    HWND hParentWnd;
+    while (1)
+    {
+        hParentWnd = GetParent(hWnd);
+        if (hParentWnd == NULL)
+            break;
+        hWnd = hParentWnd;
+    }
+    return hWnd;
+}
+
 /* Convert a DirectInput return code to a text message */
 static void SetDIerror(char *function, int code)
 {
@@ -168,7 +181,7 @@
 			SetDIerror("DirectInputDevice::QueryInterface", result);
 			return(-1);
 		}
-		topwnd =  GetAncestor(SDL_Window, GA_ROOT);
+		topwnd =  GetTopLevelParent(SDL_Window, GA_ROOT);
 		result = IDirectInputDevice2_SetCooperativeLevel(SDL_DIdev[i],
 					topwnd, inputs[i].win_level);
 		if ( result != DI_OK ) {
@@ -652,7 +665,7 @@
 				level = inputs[i].win_level;
 			}
 			IDirectInputDevice2_Unacquire(SDL_DIdev[i]);
-			topwnd = GetAncestor(SDL_Window, GA_ROOT);
+			topwnd = GetTopLevelParent(SDL_Window, GA_ROOT);
 			result = IDirectInputDevice2_SetCooperativeLevel(
 					SDL_DIdev[i], topwnd, level);
 			IDirectInputDevice2_Acquire(SDL_DIdev[i]);