Having the library poll joysticks only if there is an active joystick callback enable...
authorJohn F. Fay <johnffay@nettally.com>
Sun, 13 Dec 2009 13:47:20 +0000 (13:47 +0000)
committerJohn F. Fay <johnffay@nettally.com>
Sun, 13 Dec 2009 13:47:20 +0000 (13:47 +0000)
git-svn-id: svn+ssh://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut@863 7f0cb862-5218-0410-a997-914c9d46530a

src/freeglut_callbacks.c
src/freeglut_init.c
src/freeglut_internal.h

index 4915e19..4f6ad86 100644 (file)
@@ -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;
 
index 5161c03..8b9d34d 100644 (file)
@@ -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 */
index d8ae89f..79cb404 100644 (file)
@@ -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 */