strdup instead of malloc/strcpy
[freeglut] / src / mswin / fg_main_mswin.c
index 1e14b2a..3cedeb3 100644 (file)
@@ -339,7 +339,7 @@ static LRESULT fghWindowProcKeyPress(SFG_Window *window, UINT uMsg, GLboolean ke
         return 1;
 }
 
-static SFG_Window* fghWindowUnderCursor(SFG_Window *window)
+SFG_Window* fghWindowUnderCursor(SFG_Window *window)
 {
     /* Check if the current window that the mouse is over is a child window
      * of the window the message was sent to. Some events only sent to main window,
@@ -349,7 +349,7 @@ static SFG_Window* fghWindowUnderCursor(SFG_Window *window)
      */
     if (window && window->Children.First)   /* This window has childs */
     {
-        SFG_WindowHandleType hwnd;
+        HWND hwnd;
         SFG_Window* child_window;
 
         /* Get mouse position at time of message */
@@ -506,8 +506,15 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPAR
 #endif /* defined(_WIN32_WCE) */
             
             if (width!=window->State.Width || height!=window->State.Height)
-                /* Something changed, need to resize */
-                window->State.NeedToResize = GL_TRUE;
+            {
+                SFG_Window* saved_window = fgStructure.CurrentWindow;
+                
+                /* size changed, call reshape callback */
+                INVOKE_WCB( *window, Reshape, ( width, height ) );
+                glutPostRedisplay( );
+                if( window->IsMenu )
+                    fgSetWindow( saved_window );
+            }
         }
 
         /* according to docs, should return 0 */
@@ -551,8 +558,7 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPAR
         break;
 
     case WM_SETFOCUS:
-/*        printf("WM_SETFOCUS: %p\n", window ); */
-
+        /*printf("WM_SETFOCUS: %p\n", window );*/
         lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );
 
         SetActiveWindow( window->Window.Handle );
@@ -561,13 +567,11 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPAR
         break;
 
     case WM_KILLFOCUS:
-        {
-/*            printf("WM_KILLFOCUS: %p\n", window ); */
-            lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );
+        /*printf("WM_KILLFOCUS: %p\n", window ); */
+        lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );
 
-            /* Check if there are any open menus that need to be closed */
-            fgPlatformCheckMenuDeactivate();
-        }
+        /* Check if there are any open menus that need to be closed */
+        fgPlatformCheckMenuDeactivate();
         break;
 
 #if 0