@ -7109,19 +7109,22 @@ bool ImGui::BeginMenuEx(const char* label, const char* icon, bool enabled) 
			
		
	
		
		
			
				
					
					        bool  moving_toward_child_menu  =  false ;          bool  moving_toward_child_menu  =  false ;   
			
		
	
		
		
			
				
					
					        ImGuiPopupData *  child_popup  =  ( g . BeginPopupStack . Size  <  g . OpenPopupStack . Size )  ?  & g . OpenPopupStack [ g . BeginPopupStack . Size ]  :  NULL ;  // Popup candidate (testing below)
          ImGuiPopupData *  child_popup  =  ( g . BeginPopupStack . Size  <  g . OpenPopupStack . Size )  ?  & g . OpenPopupStack [ g . BeginPopupStack . Size ]  :  NULL ;  // Popup candidate (testing below)
   
			
		
	
		
		
			
				
					
					        ImGuiWindow *  child_menu_window  =  ( child_popup  & &  child_popup - > Window  & &  child_popup - > Window - > ParentWindow  = =  window )  ?  child_popup - > Window  :  NULL ;          ImGuiWindow *  child_menu_window  =  ( child_popup  & &  child_popup - > Window  & &  child_popup - > Window - > ParentWindow  = =  window )  ?  child_popup - > Window  :  NULL ;   
			
		
	
		
		
			
				
					
					        if  ( g . HoveredWindow  = =  window  & &  child_menu_window  ! =  NULL  & &  ! ( window - > Flags  &  ImGuiWindowFlags_MenuBar )  )          if  ( g . HoveredWindow  = =  window  & &  child_menu_window  ! =  NULL )   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					        {          {   
			
		
	
		
		
			
				
					
					            float  ref_unit  =  g . FontSize ;  // FIXME-DPI
              float  ref_unit  =  g . FontSize ;  // FIXME-DPI
   
			
		
	
		
		
			
				
					
					            float  child_dir  =  ( window - > Pos . x  <  child_menu_window - > Pos . x )  ?  1.0f  :  - 1.0f ;   
			
		
	
		
		
			
				
					
					            ImRect  next_window_rect  =  child_menu_window - > Rect ( ) ;              ImRect  next_window_rect  =  child_menu_window - > Rect ( ) ;   
			
		
	
		
		
			
				
					
					            ImVec2  ta  =  ( g . IO . MousePos  -  g . IO . MouseDelta ) ;              ImVec2  ta  =  ( g . IO . MousePos  -  g . IO . MouseDelta ) ;   
			
		
	
		
		
			
				
					
					            ImVec2  tb  =  ( window - > Pos . x  <  child_menu_window - > Pos . x )  ?  next_window_rect . GetTL ( )  :  next_window_rect . GetTR ( ) ;              ImVec2  tb  =  ( child_dir  >  0.0f )  ?  next_window_rect . GetTL ( )  :  next_window_rect . GetTR ( ) ;   
			
				
				
			
		
	
		
		
			
				
					
					            ImVec2  tc  =  ( window - > Pos . x  <  child_menu_window - > Pos . x )  ?  next_window_rect . GetBL ( )  :  next_window_rect . GetBR ( ) ;              ImVec2  tc  =  ( child_dir  >  0.0f )  ?  next_window_rect . GetBL ( )  :  next_window_rect . GetBR ( ) ;   
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					            float  extra  =  ImClamp ( ImFabs ( ta . x  -  tb . x )  *  0.30f ,  ref_unit  *  0.5f ,  ref_unit  *  2.5f ) ;    // add a bit of extra slack.
              float  extra  =  ImClamp ( ImFabs ( ta . x  -  tb . x )  *  0.30f ,  ref_unit  *  0.5f ,  ref_unit  *  2.5f ) ;    // add a bit of extra slack.
   
			
		
	
		
		
			
				
					
					            ta . x  + =  ( window - > Pos . x  <  child_menu_window - > Pos . x )  ?  - 0.5f  :  + 0.5f ;                      // to avoid numerical issues (FIXME: ??)
              ta . x  + =  child_dir  *  - 0.5f ;   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					            tb . x  + =  child_dir  *  ref_unit ;   
			
		
	
		
		
			
				
					
					            tc . x  + =  child_dir  *  ref_unit ;   
			
		
	
		
		
			
				
					
					            tb . y  =  ta . y  +  ImMax ( ( tb . y  -  extra )  -  ta . y ,  - ref_unit  *  8.0f ) ;                            // triangle has maximum height to limit the slope and the bias toward large sub-menus
              tb . y  =  ta . y  +  ImMax ( ( tb . y  -  extra )  -  ta . y ,  - ref_unit  *  8.0f ) ;                            // triangle has maximum height to limit the slope and the bias toward large sub-menus
   
			
		
	
		
		
			
				
					
					            tc . y  =  ta . y  +  ImMin ( ( tc . y  +  extra )  -  ta . y ,  + ref_unit  *  8.0f ) ;              tc . y  =  ta . y  +  ImMin ( ( tc . y  +  extra )  -  ta . y ,  + ref_unit  *  8.0f ) ;   
			
		
	
		
		
			
				
					
					            moving_toward_child_menu  =  ImTriangleContainsPoint ( ta ,  tb ,  tc ,  g . IO . MousePos ) ;              moving_toward_child_menu  =  ImTriangleContainsPoint ( ta ,  tb ,  tc ,  g . IO . MousePos ) ;   
			
		
	
		
		
			
				
					
					            //GetForegroundDrawList()->AddTriangleFilled(ta, tb, tc, moving_toward_other_ child_menu ? IM_COL32(0,128,0,128) : IM_COL32(128,0,0,128)); // [DEBUG]
              //GetForegroundDrawList()->AddTriangleFilled(ta, tb, tc, moving_toward_child_menu ? IM_COL32(0,128,0,128) : IM_COL32(128,0,0,128)); // [DEBUG]
   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					        }          }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        // The 'HovereWindow == window' check creates an inconsistency (e.g. moving away from menu slowly tends to hit same window, whereas moving away fast does not)
          // The 'HovereWindow == window' check creates an inconsistency (e.g. moving away from menu slowly tends to hit same window, whereas moving away fast does not)