From: John F. Fay Date: Sun, 13 Dec 2009 13:47:20 +0000 (+0000) Subject: Having the library poll joysticks only if there is an active joystick callback enable... X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=commitdiff_plain;h=18b1e0286e6a2a23b05a1955f5fe99f61ebfa2a8;p=freeglut Having the library poll joysticks only if there is an active joystick callback enabled per e-mail exchange titled "overjoyed" on December 10-13, 2009 git-svn-id: svn+ssh://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut@863 7f0cb862-5218-0410-a997-914c9d46530a --- diff --git a/src/freeglut_callbacks.c b/src/freeglut_callbacks.c index 4915e19..4f6ad86 100644 --- a/src/freeglut_callbacks.c +++ b/src/freeglut_callbacks.c @@ -179,6 +179,15 @@ void FGAPIENTRY glutJoystickFunc( void (* callback) FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutJoystickFunc" ); fgInitialiseJoysticks (); + if ( ( ( fgStructure.CurrentWindow->State.JoystickPollRate < 0 ) || + !FETCH_WCB(*fgStructure.CurrentWindow,Joystick) ) && /* Joystick callback was disabled */ + ( callback && ( pollInterval >= 0 ) ) ) /* but is now enabled */ + ++fgState.NumActiveJoysticks; + else if ( ( ( fgStructure.CurrentWindow->State.JoystickPollRate >= 0 ) && + FETCH_WCB(*fgStructure.CurrentWindow,Joystick) ) && /* Joystick callback was enabled */ + ( !callback || ( pollInterval < 0 ) ) ) /* but is now disabled */ + --fgState.NumActiveJoysticks; + SET_CALLBACK( Joystick ); fgStructure.CurrentWindow->State.JoystickPollRate = pollInterval; diff --git a/src/freeglut_init.c b/src/freeglut_init.c index 5161c03..8b9d34d 100644 --- a/src/freeglut_init.c +++ b/src/freeglut_init.c @@ -84,6 +84,7 @@ SFG_State fgState = { { -1, -1, GL_FALSE }, /* Position */ GLUT_EXEC_STATE_INIT, /* ExecState */ NULL, /* ProgramName */ GL_FALSE, /* JoysticksInitialised */ + 0, /* NumActiveJoysticks */ GL_FALSE, /* InputDevsInitialised */ 1, /* AuxiliaryBufferNumber */ 4, /* SampleNumber */ diff --git a/src/freeglut_internal.h b/src/freeglut_internal.h index d8ae89f..79cb404 100644 --- a/src/freeglut_internal.h +++ b/src/freeglut_internal.h @@ -57,7 +57,7 @@ #else # error "Unrecognized target host!" -*/ + #endif #endif @@ -320,6 +320,7 @@ struct tagSFG_State fgExecutionState ExecState; /* Used for GLUT termination */ char *ProgramName; /* Name of the invoking program */ GLboolean JoysticksInitialised; /* Only initialize if application calls for them */ + int NumActiveJoysticks; /* Number of active joysticks -- if zero, don't poll joysticks */ GLboolean InputDevsInitialised; /* Only initialize if application calls for them */ int AuxiliaryBufferNumber; /* Number of auxiliary buffers */