Nav: Fixed explicit directional input not re-highlighting current nav item if there is a single item in the window and highlight has been previously disabled by the mouse. (#787)

This commit is contained in:
omar 2018-11-21 16:07:04 +01:00
parent b9ae9bb1e3
commit cc4b1f9e47
2 changed files with 16 additions and 3 deletions

View File

@ -47,6 +47,8 @@ Other Changes:
- Nav, Focus: Fixed ImGuiWindowFlags_NoBringToFrontOnFocus windows not being restoring focus - Nav, Focus: Fixed ImGuiWindowFlags_NoBringToFrontOnFocus windows not being restoring focus
properly after the main menu bar or last focused window is deactivated. properly after the main menu bar or last focused window is deactivated.
- Nav: Fixed an assert in certain circumstance (mostly when using popups) when mouse positions stop being valid. (#2168) - Nav: Fixed an assert in certain circumstance (mostly when using popups) when mouse positions stop being valid. (#2168)
- Nav: Fixed explicit directional input not re-highlighting current nav item if there is a single item in the window
and highlight has been previously disabled by the mouse. (#787)
- DragFloat: Fixed a situation where dragging with value rounding enabled or with a power curve - DragFloat: Fixed a situation where dragging with value rounding enabled or with a power curve
erroneously wrapped the value to one of the min/max edge. (#2024, #708, #320, #2075). erroneously wrapped the value to one of the min/max edge. (#2024, #708, #320, #2075).
- DragFloat: Disabled using power curve when one edge is FLT_MAX (broken in 1.61). (#2024) - DragFloat: Disabled using power curve when one edge is FLT_MAX (broken in 1.61). (#2024)

View File

@ -7242,7 +7242,7 @@ static void ImGui::NavUpdate()
g.NavJustMovedToId = 0; g.NavJustMovedToId = 0;
// Process navigation move request // Process navigation move request
if (g.NavMoveRequest && (g.NavMoveResultLocal.ID != 0 || g.NavMoveResultOther.ID != 0)) if (g.NavMoveRequest)
NavUpdateMoveResult(); NavUpdateMoveResult();
// When a forwarded move request failed, we restore the highlight that we disabled during the forward frame // When a forwarded move request failed, we restore the highlight that we disabled during the forward frame
@ -7457,10 +7457,22 @@ static void ImGui::NavUpdate()
#endif #endif
} }
// Apply result from previous frame navigation directional move request
static void ImGui::NavUpdateMoveResult() static void ImGui::NavUpdateMoveResult()
{ {
// Select which result to use
ImGuiContext& g = *GImGui; ImGuiContext& g = *GImGui;
if (g.NavMoveResultLocal.ID == 0 && g.NavMoveResultOther.ID == 0)
{
// In a situation when there is no results but NavId != 0, re-enable the Navigation highlight (because g.NavId is not considered as a possible result)
if (g.NavId != 0)
{
g.NavDisableHighlight = false;
g.NavDisableMouseHover = true;
}
return;
}
// Select which result to use
ImGuiNavMoveResult* result = (g.NavMoveResultLocal.ID != 0) ? &g.NavMoveResultLocal : &g.NavMoveResultOther; ImGuiNavMoveResult* result = (g.NavMoveResultLocal.ID != 0) ? &g.NavMoveResultLocal : &g.NavMoveResultOther;
// PageUp/PageDown behavior first jumps to the bottom/top mostly visible item, _otherwise_ use the result from the previous/next page. // PageUp/PageDown behavior first jumps to the bottom/top mostly visible item, _otherwise_ use the result from the previous/next page.
@ -7490,7 +7502,6 @@ static void ImGui::NavUpdateMoveResult()
NavScrollToBringItemIntoView(result->Window->ParentWindow, ImRect(rect_abs.Min + delta_scroll, rect_abs.Max + delta_scroll)); NavScrollToBringItemIntoView(result->Window->ParentWindow, ImRect(rect_abs.Min + delta_scroll, rect_abs.Max + delta_scroll));
} }
// Apply result from previous frame navigation directional move request
ClearActiveID(); ClearActiveID();
g.NavWindow = result->Window; g.NavWindow = result->Window;
SetNavIDWithRectRel(result->ID, g.NavLayer, result->RectRel); SetNavIDWithRectRel(result->ID, g.NavLayer, result->RectRel);