Adding a multitouch patch from Eero Pajarre per e-mail dated 6/8/2011 1:14 AM
[freeglut] / src / freeglut_window.c
index 4f5c9bc..f3c509a 100644 (file)
@@ -141,6 +141,10 @@ typedef HGLRC (WINAPI * PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC hDC, HGLRC hShar
 
 #endif  /* TARGET_HOST_MS_WINDOWS */
 
+#ifdef WM_TOUCH
+       typedef BOOL (WINAPI *pRegisterTouchWindow)(HWND,ULONG);
+   static pRegisterTouchWindow fghRegisterTouchWindow = (pRegisterTouchWindow)0xDEADBEEF;
+#endif
 
 /* pushing attribute/value pairs into an array */
 #define ATTRIB(a) attributes[where++]=(a)
@@ -1286,14 +1290,17 @@ void fgOpenWindow( SFG_Window* window, const char* title,
     else if ( fgState.DisplayMode & GLUT_BORDERLESS )
     {
         SetWindowLong ( window->Window.Handle, GWL_STYLE,
-                        WindowStyle & ~(WS_BORDER | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX));
+                        WindowStyle & ~(WS_BORDER | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_DLGFRAME | WS_SIZEBOX));
     }
 /*  SetWindowPos(window->Window.Handle, NULL, 0, 0, 0, 0,
      SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED); */
 
     /* Enable multitouch: additional flag TWF_FINETOUCH, TWF_WANTPALM */
     #ifdef WM_TOUCH
-       RegisterTouchWindow( window->Window.Handle, TWF_FINETOUCH | TWF_WANTPALM );
+        if (fghRegisterTouchWindow == (pRegisterTouchWindow)0xDEADBEEF) 
+                       fghRegisterTouchWindow = (pRegisterTouchWindow)GetProcAddress(GetModuleHandle("user32"),"RegisterTouchWindow");
+               if (fghRegisterTouchWindow)
+             fghRegisterTouchWindow( window->Window.Handle, TWF_FINETOUCH | TWF_WANTPALM );
     #endif
 
 #if defined(_WIN32_WCE)
@@ -1325,10 +1332,11 @@ void fgOpenWindow( SFG_Window* window, const char* title,
  */
 void fgCloseWindow( SFG_Window* window )
 {
-    /* if we're in gamemode, call glutLeaveGameMode first to make sure the
-     * gamemode is properly closed before closing the window
+    /* if we're in gamemode and we're closing the gamemode window,
+     * call glutLeaveGameMode first to make sure the gamemode is
+     * properly closed before closing the window
      */
-    if (fgStructure.GameModeWindow != NULL)
+    if (fgStructure.GameModeWindow != NULL && fgStructure.GameModeWindow->ID==window->ID)
         glutLeaveGameMode();
 
 #if TARGET_HOST_POSIX_X11