if user opens menu in parent window and then clicked child window, the menu wasn't closed. Fixed (and some cleanup)
git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@1551 7f0cb862-5218-0410-a997-914c9d46530a
This commit is contained in:
parent
5e97fed06a
commit
9fa8bcf4db
@ -339,7 +339,7 @@ static LRESULT fghWindowProcKeyPress(SFG_Window *window, UINT uMsg, GLboolean ke
|
|||||||
return 1;
|
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
|
/* 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,
|
* of the window the message was sent to. Some events only sent to main window,
|
||||||
@ -551,8 +551,7 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPAR
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_SETFOCUS:
|
case WM_SETFOCUS:
|
||||||
/* printf("WM_SETFOCUS: %p\n", window ); */
|
/*printf("WM_SETFOCUS: %p\n", window );*/
|
||||||
|
|
||||||
lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );
|
lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );
|
||||||
|
|
||||||
SetActiveWindow( window->Window.Handle );
|
SetActiveWindow( window->Window.Handle );
|
||||||
@ -561,13 +560,11 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPAR
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_KILLFOCUS:
|
case WM_KILLFOCUS:
|
||||||
{
|
/*printf("WM_KILLFOCUS: %p\n", window ); */
|
||||||
/* printf("WM_KILLFOCUS: %p\n", window ); */
|
|
||||||
lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );
|
lRet = DefWindowProc( hWnd, uMsg, wParam, lParam );
|
||||||
|
|
||||||
/* Check if there are any open menus that need to be closed */
|
/* Check if there are any open menus that need to be closed */
|
||||||
fgPlatformCheckMenuDeactivate();
|
fgPlatformCheckMenuDeactivate();
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
#include "../fg_internal.h"
|
#include "../fg_internal.h"
|
||||||
|
|
||||||
extern void fghGetClientArea( RECT *clientRect, const SFG_Window *window );
|
extern void fghGetClientArea( RECT *clientRect, const SFG_Window *window );
|
||||||
|
extern SFG_Window* fghWindowUnderCursor(SFG_Window *window);
|
||||||
|
|
||||||
|
|
||||||
GLvoid fgPlatformGetGameModeVMaxExtent( SFG_Window* window, int* x, int* y )
|
GLvoid fgPlatformGetGameModeVMaxExtent( SFG_Window* window, int* x, int* y )
|
||||||
@ -63,6 +64,8 @@ void fgPlatformCheckMenuDeactivate()
|
|||||||
fgDeactivateMenu(menu->ParentWindow);
|
fgDeactivateMenu(menu->ParentWindow);
|
||||||
else if (!wnd->IsMenu) /* Make sure we don't kill the menu when trying to enter a submenu */
|
else if (!wnd->IsMenu) /* Make sure we don't kill the menu when trying to enter a submenu */
|
||||||
{
|
{
|
||||||
|
/* we need to know if user clicked a child window, any displayable area clicked that is not the menu's parent window should close the menu */
|
||||||
|
wnd = fghWindowUnderCursor(wnd);
|
||||||
if (wnd!=menu->ParentWindow)
|
if (wnd!=menu->ParentWindow)
|
||||||
/* User switched to another FreeGLUT window */
|
/* User switched to another FreeGLUT window */
|
||||||
fgDeactivateMenu(menu->ParentWindow);
|
fgDeactivateMenu(menu->ParentWindow);
|
||||||
|
Reference in New Issue
Block a user