SFG_Window* window;
PAINTSTRUCT ps;
LRESULT lRet = 1;
+ GLboolean gotChild = GL_FALSE;
FREEGLUT_INTERNAL_ERROR_EXIT_IF_NOT_INITIALISED ( "Event Handler" ) ;
ScreenToClient( window->Window.Handle, &mouse_pos );
hwnd = ChildWindowFromPoint(window->Window.Handle, mouse_pos);
if (hwnd) /* can be NULL if mouse outside parent by the time we get here */
+ {
window = fgWindowByHandle(hwnd);
+ if (window->Parent)
+ gotChild = GL_TRUE;
+ }
}
if ( window )
case WM_SETFOCUS:
/* printf("WM_SETFOCUS: %p\n", window ); */
+ if (gotChild)
+ /* If child should have focus instead, set it here. */
+ SetFocus(window->Window.Handle);
+
lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );
INVOKE_WCB( *window, Entry, ( GLUT_ENTERED ) );
- UpdateWindow ( hWnd );
+ UpdateWindow ( hWnd );
+ if (gotChild)
+ UpdateWindow ( window->Window.Handle );
break;
case WM_KILLFOCUS:
{
SFG_Menu* menu = NULL;
- printf("WM_KILLFOCUS: %p\n", window );
+/* printf("WM_KILLFOCUS: %p\n", window ); */
lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );
INVOKE_WCB( *window, Entry, ( GLUT_LEFT ) );
/* If we have an open menu, see if the open menu should be closed
- when focus was lost because user either switched
- application or FreeGLUT window (if one is running multiple
- windows). If so, close menu the active menu.
+ * when focus was lost because user either switched
+ * application or FreeGLUT window (if one is running multiple
+ * windows). If so, close menu the active menu.
*/
if ( fgStructure.Menus.First )
menu = fgGetActiveMenu();
-
+
if ( menu )
{
SFG_Window* wnd = NULL;
HWND hwnd = GetFocus(); /* Get window with current focus - NULL for non freeglut windows */
- printf(" hwnd: %p\n",hwnd);
if (hwnd)
/* See which of our windows it is */
wnd = fgWindowByHandle(hwnd);
- //printf(" got menu: %p\n",menu);
-
- printf(" wnd: %p, wnd->AM->PW: %p, menu->PW: %p\n",wnd,wnd&&wnd->ActiveMenu?wnd->ActiveMenu->ParentWindow:0,menu->ParentWindow);
- if (wnd)
- printf(" wnd menu: %i, wnd->ActiveMenu: %p, wnd->Parent: %p\n",wnd->IsMenu,wnd->ActiveMenu,wnd->Parent);
-
if (!hwnd || !wnd)
- {
/* User switched to another application*/
fgDeactivateMenu(menu->ParentWindow);
- printf(" -> kill1\n");
- }
- else if (!wnd->IsMenu && wnd!=menu->ParentWindow)
- {
+ else if (!wnd->IsMenu && wnd!=menu->ParentWindow) /* Make sure we don't kill the menu when trying to enter a submenu */
/* User switched to another FreeGLUT window */
fgDeactivateMenu(menu->ParentWindow);
- printf(" -> kill2\n");
-
- }
- else
- {
- printf(" -> survive\n");
- }
}
}
break;