Leave game mode on "deinitialization" if we entered it, per e-mail from John Tsiombik...
[freeglut] / src / freeglut_spaceball.c
index a2e70ed..89655f4 100644 (file)
@@ -10,6 +10,8 @@
 #include <GL/freeglut.h>\r
 #include "freeglut_internal.h"\r
 \r
+/* -- PRIVATE FUNCTIONS --------------------------------------------------- */\r
+\r
 #if TARGET_HOST_POSIX_X11\r
 #include <X11/Xlib.h>\r
 \r
@@ -50,12 +52,17 @@ static int spnav_remove_events(int type);
 static SFG_Window *spnav_win;\r
 #endif\r
 \r
-static int sball_initialized;\r
+/* Flag telling whether we have a spaceball:\r
+ *   0 - haven't tried initializing\r
+ *   1 - have successfully initialized\r
+ *  -1 - have tried to initialize but not succeeded\r
+ */\r
+static int sball_initialized = 0;\r
 \r
 \r
 void fgInitialiseSpaceball(void)\r
 {\r
-    if(sball_initialized) {\r
+    if(sball_initialized != 0) {\r
         return;\r
     }\r
 \r
@@ -64,10 +71,15 @@ void fgInitialiseSpaceball(void)
         Window w;\r
 \r
         if(!fgStructure.CurrentWindow)\r
+               {\r
+                       sball_initialized = -1;\r
             return;\r
+               }\r
 \r
         w = fgStructure.CurrentWindow->Window.Handle;\r
-        if(spnav_x11_open(fgDisplay.Display, w) == -1) {\r
+        if(spnav_x11_open(fgDisplay.Display, w) == -1)\r
+               {\r
+                       sball_initialized = -1;\r
             return;\r
         }\r
     }\r
@@ -85,9 +97,9 @@ void fgSpaceballClose(void)
 \r
 int fgHasSpaceball(void)\r
 {\r
-    if(!sball_initialized) {\r
+    if(sball_initialized == 0) {\r
         fgInitialiseSpaceball();\r
-        if(!sball_initialized) {\r
+        if(sball_initialized != 1) {\r
             fgWarning("fgInitialiseSpaceball failed\n");\r
             return 0;\r
         }\r
@@ -105,9 +117,9 @@ int fgHasSpaceball(void)
 \r
 int fgSpaceballNumButtons(void)\r
 {\r
-    if(!sball_initialized) {\r
+    if(sball_initialized == 0) {\r
         fgInitialiseSpaceball();\r
-        if(!sball_initialized) {\r
+        if(sball_initialized != 1) {\r
             fgWarning("fgInitialiseSpaceball failed\n");\r
             return 0;\r
         }\r
@@ -122,9 +134,9 @@ int fgSpaceballNumButtons(void)
 \r
 void fgSpaceballSetWindow(SFG_Window *window)\r
 {\r
-    if(!sball_initialized) {\r
+    if(sball_initialized == 0) {\r
         fgInitialiseSpaceball();\r
-        if(!sball_initialized) {\r
+        if(sball_initialized != 1) {\r
             return;\r
         }\r
     }\r
@@ -148,7 +160,7 @@ int fgIsSpaceballXEvent(const XEvent *xev)
         fgSpaceballSetWindow(fgStructure.CurrentWindow);\r
     }\r
 \r
-    if(!sball_initialized) {\r
+    if(sball_initialized != 1) {\r
         return 0;\r
     }\r
 \r
@@ -159,9 +171,9 @@ void fgSpaceballHandleXEvent(const XEvent *xev)
 {\r
     spnav_event sev;\r
 \r
-    if(!sball_initialized) {\r
+    if(sball_initialized == 0) {\r
         fgInitialiseSpaceball();\r
-        if(!sball_initialized) {\r
+        if(sball_initialized != 1) {\r
             return;\r
         }\r
     }\r
@@ -218,7 +230,7 @@ OF SUCH DAMAGE.
 #include <stdlib.h>\r
 #include <string.h>\r
 \r
-#if HAVE_ERRNO_H\r
+#ifdef HAVE_ERRNO_H\r
 #include <errno.h>\r
 #endif\r
 \r