@ -5017,12 +5017,14 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
else
else
flags = window - > Flags ;
flags = window - > Flags ;
// Parent window is latched only on the first call to Begin() of the frame, so further append-calls can be done from a different window stack
ImGuiWindow * parent_window = first_begin_of_the_frame ? ( ! g . CurrentWindowStack . empty ( ) ? g . CurrentWindowStack . back ( ) : NULL ) : window - > ParentWindow ;
IM_ASSERT ( parent_window ! = NULL | | ! ( flags & ImGuiWindowFlags_ChildWindow ) ) ;
// Add to stack
// Add to stack
ImGuiWindow * parent_window = ! g . CurrentWindowStack . empty ( ) ? g . CurrentWindowStack . back ( ) : NULL ;
g . CurrentWindowStack . push_back ( window ) ;
g . CurrentWindowStack . push_back ( window ) ;
SetCurrentWindow ( window ) ;
SetCurrentWindow ( window ) ;
CheckStacksSize ( window , true ) ;
CheckStacksSize ( window , true ) ;
IM_ASSERT ( parent_window ! = NULL | | ! ( flags & ImGuiWindowFlags_ChildWindow ) ) ;
bool window_just_activated_by_user = ( window - > LastFrameActive < current_frame - 1 ) ; // Not using !WasActive because the implicit "Debug" window would always toggle off->on
bool window_just_activated_by_user = ( window - > LastFrameActive < current_frame - 1 ) ; // Not using !WasActive because the implicit "Debug" window would always toggle off->on
if ( flags & ImGuiWindowFlags_Popup )
if ( flags & ImGuiWindowFlags_Popup )
@ -6831,6 +6833,10 @@ bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool
if ( ( flags & ImGuiButtonFlags_FlattenChilds ) & & g . HoveredRootWindow = = window )
if ( ( flags & ImGuiButtonFlags_FlattenChilds ) & & g . HoveredRootWindow = = window )
g . HoveredWindow = backup_hovered_window ;
g . HoveredWindow = backup_hovered_window ;
// AllowOverlap mode (rarely used) requires previous frame HoveredId to be null or to match. This allows using patterns where a later submitted widget overlaps a previous one.
if ( hovered & & ( flags & ImGuiButtonFlags_AllowOverlapMode ) & & ( g . HoveredIdPreviousFrame ! = id & & g . HoveredIdPreviousFrame ! = 0 ) )
hovered = false ;
if ( hovered )
if ( hovered )
{
{
if ( ! ( flags & ImGuiButtonFlags_NoKeyModifiers ) | | ( ! g . IO . KeyCtrl & & ! g . IO . KeyShift & & ! g . IO . KeyAlt ) )
if ( ! ( flags & ImGuiButtonFlags_NoKeyModifiers ) | | ( ! g . IO . KeyCtrl & & ! g . IO . KeyShift & & ! g . IO . KeyAlt ) )
@ -6928,10 +6934,6 @@ bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool
}
}
}
}
// AllowOverlap mode (rarely used) requires previous frame HoveredId to be null or to match. This allows using patterns where a later submitted widget overlaps a previous one.
if ( hovered & & ( flags & ImGuiButtonFlags_AllowOverlapMode ) & & ( g . HoveredIdPreviousFrame ! = id & & g . HoveredIdPreviousFrame ! = 0 ) )
hovered = pressed = held = false ;
if ( out_hovered ) * out_hovered = hovered ;
if ( out_hovered ) * out_hovered = hovered ;
if ( out_held ) * out_held = held ;
if ( out_held ) * out_held = held ;