@ -7685,8 +7685,12 @@ bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool
bool pressed = false ;
bool hovered = ItemHoverable ( bb , id ) ;
// Drag source doesn't report as hovered
if ( hovered & & g . DragDropActive & & g . DragDropPayload . SourceId = = id )
hovered = false ;
// Special mode for Drag and Drop where holding button pressed for a long time while dragging another item triggers the button
if ( ( flags & ImGuiButtonFlags_PressedOnDragDropHold ) & & g . DragDropActive & & ! ( g . DragDropSourceFlags & ImGuiDragDropFlags_SourceNoHoldToOpenOthers ) )
if ( g . DragDropActive & & ( flags & ImGuiButtonFlags_PressedOnDragDropHold ) & & ! ( g . DragDropSourceFlags & ImGuiDragDropFlags_SourceNoHoldToOpenOthers ) )
if ( IsItemHovered ( ImGuiHoveredFlags_AllowWhenBlockedByActiveItem ) )
{
hovered = true ;
@ -11825,7 +11829,6 @@ bool ImGui::ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFl
SameLine ( ) ;
TextUnformatted ( " Color " ) ;
EndDragDropSource ( ) ;
hovered = false ;
}
// Tooltip
@ -13172,6 +13175,10 @@ bool ImGui::BeginDragDropSource(ImGuiDragDropFlags flags)
if ( g . ActiveId = = source_id ) // Allow the underlying widget to display/return hovered during the mouse release frame, else we would get a flicker.
g . ActiveIdAllowOverlap = is_hovered ;
}
else
{
g . ActiveIdAllowOverlap = false ;
}
if ( g . ActiveId ! = source_id )
return false ;
source_parent_id = window - > IDStack . back ( ) ;
@ -13655,8 +13662,8 @@ void ImGui::ShowMetricsWindow(bool* p_open)
const char * input_source_names [ ] = { " None " , " Mouse " , " Nav " , " NavKeyboard " , " NavGamepad " } ; IM_ASSERT ( IM_ARRAYSIZE ( input_source_names ) = = ImGuiInputSource_COUNT ) ;
ImGui : : Text ( " HoveredWindow: '%s' " , g . HoveredWindow ? g . HoveredWindow - > Name : " NULL " ) ;
ImGui : : Text ( " HoveredRootWindow: '%s' " , g . HoveredRootWindow ? g . HoveredRootWindow - > Name : " NULL " ) ;
ImGui : : Text ( " HoveredId: 0x%08X/0x%08X (%.2f sec) " , g . HoveredId , g . HoveredIdPreviousFrame , g . HoveredIdTimer ) ; // Data is "in-flight" so depending on when the Metrics window is called we may see current frame information or not
ImGui : : Text ( " ActiveId: 0x%08X/0x%08X (%.2f sec), A ctiveId Source: %s" , g . ActiveId , g . ActiveIdPreviousFrame , g . ActiveIdTimer , input_source_names [ g . ActiveIdSource ] ) ;
ImGui : : Text ( " HoveredId: 0x%08X/0x%08X (%.2f sec) , AllowOverlap: %d " , g . HoveredId , g . HoveredIdPreviousFrame , g . HoveredIdTimer , g . HoveredIdAllowOverlap ) ; // Data is "in-flight" so depending on when the Metrics window is called we may see current frame information or not
ImGui : : Text ( " ActiveId: 0x%08X/0x%08X (%.2f sec), A llowOverlap: %d, Source: %s" , g . ActiveId , g . ActiveIdPreviousFrame , g . ActiveIdTimer , g . ActiveIdAllowOverlap , input_source_names [ g . ActiveIdSource ] ) ;
ImGui : : Text ( " ActiveIdWindow: '%s' " , g . ActiveIdWindow ? g . ActiveIdWindow - > Name : " NULL " ) ;
ImGui : : Text ( " MovingWindow: '%s' " , g . MovingWindow ? g . MovingWindow - > Name : " NULL " ) ;
ImGui : : Text ( " NavWindow: '%s' " , g . NavWindow ? g . NavWindow - > Name : " NULL " ) ;