Drag and Drop: Fixes an issue when elapsing payload would be based on last payload frame instead of last drag source frame.

This commit is contained in:
ocornut 2024-06-19 14:19:55 -07:00
parent 32a037c030
commit 8c517fee35
2 changed files with 5 additions and 2 deletions

View File

@ -62,6 +62,9 @@ Other changes:
Added corresponding ImGuiCol_TabSelectedOverline and ImGuiCol_TabDimmedSelectedOverline colors. Added corresponding ImGuiCol_TabSelectedOverline and ImGuiCol_TabDimmedSelectedOverline colors.
- Drag and Drop: BeginDragDropSource() with ImGuiDragDropFlags_SourceExtern sets - Drag and Drop: BeginDragDropSource() with ImGuiDragDropFlags_SourceExtern sets
active id so a multi-frame extern source doesn't interfere with hovered widgets. (#143) active id so a multi-frame extern source doesn't interfere with hovered widgets. (#143)
- Drag and Drop: Fixes an issue when elapsing payload would be based on last payload
frame instead of last drag source frame, which makes a difference if not resubmitting
payload every frame.
- Examples: GLFW+Vulkan, SDL+Vulkan: handle swap chain resize even without Vulkan - Examples: GLFW+Vulkan, SDL+Vulkan: handle swap chain resize even without Vulkan
returning VK_SUBOPTIMAL_KHR, which doesn't seem to happen on Wayland. (#7671) returning VK_SUBOPTIMAL_KHR, which doesn't seem to happen on Wayland. (#7671)
[@AndreiNego, @ocornut] [@AndreiNego, @ocornut]

View File

@ -5136,7 +5136,7 @@ void ImGui::EndFrame()
if (g.DragDropActive) if (g.DragDropActive)
{ {
bool is_delivered = g.DragDropPayload.Delivery; bool is_delivered = g.DragDropPayload.Delivery;
bool is_elapsed = (g.DragDropPayload.DataFrameCount + 1 < g.FrameCount) && ((g.DragDropSourceFlags & ImGuiDragDropFlags_SourceAutoExpirePayload) || !IsMouseDown(g.DragDropMouseButton)); bool is_elapsed = (g.DragDropSourceFrameCount + 1 < g.FrameCount) && ((g.DragDropSourceFlags & ImGuiDragDropFlags_SourceAutoExpirePayload) || !IsMouseDown(g.DragDropMouseButton));
if (is_delivered || is_elapsed) if (is_delivered || is_elapsed)
ClearDragDrop(); ClearDragDrop();
} }