changeset 4237:0adda8ff43ef SDL-1.2

Potentially fixed bug #774 There's a mismatch between ndev and MAX_INPUTS
author Sam Lantinga <slouken@libsdl.org>
date Wed, 23 Sep 2009 06:57:12 +0000
parents 1fc8c8a5ff00
children cbe5222d051a
files src/video/windx5/SDL_dx5events.c
diffstat 1 files changed, 13 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/src/video/windx5/SDL_dx5events.c	Wed Sep 23 06:56:28 2009 +0000
+++ b/src/video/windx5/SDL_dx5events.c	Wed Sep 23 06:57:12 2009 +0000
@@ -43,7 +43,7 @@
 #endif
 
 /* The keyboard and mouse device input */
-#define MAX_INPUTS	16		/* Maximum of 16-1 input devices */
+#define MAX_INPUTS	2
 #define INPUT_QSIZE	512		/* Buffer up to 512 input messages */
 
 static LPDIRECTINPUT dinput = NULL;
@@ -264,6 +264,8 @@
 				SDL_DIdev[i] = NULL;
 			}
 		}
+		SDL_DIndev = 0;
+
 		/* Release DirectInput */
 		IDirectInput_Release(dinput);
 		dinput = NULL;
@@ -664,15 +666,17 @@
 
 	/* Pump the DirectInput flow */
 	if ( SDL_GetAppState() & SDL_APPINPUTFOCUS ) {
-		for ( i=0; i<SDL_DIndev; ++i ) {
-			result = IDirectInputDevice2_Poll(SDL_DIdev[i]);
-			if ( (result == DIERR_INPUTLOST) ||
-					(result == DIERR_NOTACQUIRED) ) {
-				if ( SDL_strcmp(inputs[i].name, "mouse") == 0 ) {
-					mouse_lost = 1;
+		for ( i=0; i<MAX_INPUTS; ++i ) {
+			if ( SDL_DIdev[i] != NULL ) {
+				result = IDirectInputDevice2_Poll(SDL_DIdev[i]);
+				if ( (result == DIERR_INPUTLOST) ||
+						(result == DIERR_NOTACQUIRED) ) {
+					if ( SDL_strcmp(inputs[i].name, "mouse") == 0 ) {
+						mouse_lost = 1;
+					}
+					IDirectInputDevice2_Acquire(SDL_DIdev[i]);
+					IDirectInputDevice2_Poll(SDL_DIdev[i]);
 				}
-				IDirectInputDevice2_Acquire(SDL_DIdev[i]);
-				IDirectInputDevice2_Poll(SDL_DIdev[i]);
 			}
 		}
 	}