|
|
@ -542,7 +542,8 @@ bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool |
|
|
|
|
|
|
|
// Mouse handling
|
|
|
|
const ImGuiID test_owner_id = (flags & ImGuiButtonFlags_NoTestKeyOwner) ? ImGuiKeyOwner_Any : id; |
|
|
|
if (hovered) |
|
|
|
const bool hovered_disabled = (g.HoveredId == id && g.HoveredIdIsDisabled); |
|
|
|
if (hovered || hovered_disabled) |
|
|
|
{ |
|
|
|
IM_ASSERT(id != 0); // Lazily check inside rare path.
|
|
|
|
|
|
|
@ -559,7 +560,8 @@ bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool |
|
|
|
} |
|
|
|
|
|
|
|
// Process initial action
|
|
|
|
if (!(flags & ImGuiButtonFlags_NoKeyModsAllowed) || (!g.IO.KeyCtrl && !g.IO.KeyShift && !g.IO.KeyAlt)) |
|
|
|
const bool mods_ok = !(flags & ImGuiButtonFlags_NoKeyModsAllowed) || (!g.IO.KeyCtrl && !g.IO.KeyShift && !g.IO.KeyAlt); |
|
|
|
if (mods_ok && !hovered_disabled) |
|
|
|
{ |
|
|
|
if (mouse_button_clicked != -1 && g.ActiveId != id) |
|
|
|
{ |
|
|
@ -606,7 +608,7 @@ bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool |
|
|
|
if (!has_repeated_at_least_once) |
|
|
|
pressed = true; |
|
|
|
if (!(flags & ImGuiButtonFlags_NoNavFocus)) |
|
|
|
SetFocusID(id, window); |
|
|
|
SetFocusID(id, window); // FIXME: Lack of FocusWindow() call here is inconsistent with other paths. Research why.
|
|
|
|
ClearActiveID(); |
|
|
|
} |
|
|
|
} |
|
|
@ -617,6 +619,17 @@ bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool |
|
|
|
if (g.IO.MouseDownDuration[g.ActiveIdMouseButton] > 0.0f && IsMouseClicked(g.ActiveIdMouseButton, ImGuiInputFlags_Repeat, test_owner_id)) |
|
|
|
pressed = true; |
|
|
|
} |
|
|
|
else if (mods_ok && hovered_disabled) |
|
|
|
{ |
|
|
|
if (mouse_button_clicked != -1 && g.ActiveId != id) |
|
|
|
{ |
|
|
|
// Disabled path still focus
|
|
|
|
// FIXME-NAV: Could somehow call SetNavID() with a null ID but mouse pos as NavRectRel so nav may be resumed?
|
|
|
|
// Will do it once we do it for regular click on window-void.
|
|
|
|
if (flags & (ImGuiButtonFlags_PressedOnClickRelease | ImGuiButtonFlags_PressedOnClickReleaseAnywhere | ImGuiButtonFlags_PressedOnClick | ImGuiButtonFlags_PressedOnDoubleClick)) |
|
|
|
FocusWindow(window, ImGuiFocusRequestFlags_RestoreFocusedChild); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (pressed) |
|
|
|
g.NavDisableHighlight = true; |
|
|
|