X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Ffreeglut_main.c;h=cc2aca015100bb02e11ab800545117936fee00a8;hb=7f224f1db5d7de7d2bce31c763d5eb8731fda6e7;hp=8fddc90768808a5c8918bead47bdcca648d39d81;hpb=45881dfa9c7c9eaa9c2e88e0a357be3b6e6c2e87;p=freeglut diff --git a/src/freeglut_main.c b/src/freeglut_main.c index 8fddc90..cc2aca0 100644 --- a/src/freeglut_main.c +++ b/src/freeglut_main.c @@ -752,17 +752,23 @@ void FGAPIENTRY glutMainLoopEvent( void ) */ if( window->ActiveMenu != NULL ) { + if ( window == window->ActiveMenu->ParentWindow ) + { + window->ActiveMenu->Window->State.MouseX = event.xmotion.x_root - window->ActiveMenu->X ; + window->ActiveMenu->Window->State.MouseY = event.xmotion.y_root - window->ActiveMenu->Y ; + } + /* * Let's make the window redraw as a result of the mouse motion. */ - window->State.Redisplay = TRUE ; + window->ActiveMenu->Window->State.Redisplay = TRUE ; /* * Since the window is a menu, make the parent window current */ fgSetWindow ( window->ActiveMenu->ParentWindow ) ; - break; + break; /* I think this should stay in -- an active menu should absorb the mouse motion */ } /* @@ -847,13 +853,19 @@ void FGAPIENTRY glutMainLoopEvent( void ) */ if ( window->ActiveMenu != NULL ) /* Window has an active menu, it absorbs any mouse click */ { - if ( fgCheckActiveMenu ( window, window->ActiveMenu ) == TRUE ) /* Inside the menu, invoke the callback and deactivate the menu*/ + if ( window == window->ActiveMenu->ParentWindow ) + { + window->ActiveMenu->Window->State.MouseX = event.xbutton.x_root - window->ActiveMenu->X ; + window->ActiveMenu->Window->State.MouseY = event.xbutton.y_root - window->ActiveMenu->Y ; + } + + if ( fgCheckActiveMenu ( window->ActiveMenu->Window, window->ActiveMenu ) == TRUE ) /* Inside the menu, invoke the callback and deactivate the menu*/ { /* Save the current window and menu and set the current window to the window whose menu this is */ SFG_Window *save_window = fgStructure.Window ; SFG_Menu *save_menu = fgStructure.Menu ; SFG_Window *parent_window = window->ActiveMenu->ParentWindow ; - fgSetWindow ( window ) ; + fgSetWindow ( parent_window ) ; fgStructure.Menu = window->ActiveMenu ; /* Execute the menu callback */ @@ -1631,7 +1643,7 @@ LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPara SFG_Window *save_window = fgStructure.Window ; SFG_Menu *save_menu = fgStructure.Menu ; SFG_Window *parent_window = window->ActiveMenu->ParentWindow ; - fgSetWindow ( window ) ; + fgSetWindow ( parent_window ) ; fgStructure.Menu = window->ActiveMenu ; /* Execute the menu callback */