@ -8370,17 +8370,9 @@ bool ImGui::TestKeyOwner(ImGuiKey key, ImGuiID owner_id)
if ( owner_id = = ImGuiKeyOwner_Any )
return ( owner_data - > LockThisFrame = = false ) ;
// FIXME: For consistency with routing may be good to disable that, OR we could differentiate preemptive routing from setting owner on click.
// For now it is better to disable so we can actually get report of case where this may matter.
// -> Better to move in the SetKeyOwner() call, aka have a flag to set ->OwnerCurr in SetKeyOwner() ?
// May simply be inconsistent and unneeded to offer that feature:
// - for typical keyboard/gamepad routing with multiple claims and ServeLast, we don't want to affect owner testing during the frame.
// - for typical mouse routing overlap + hovered window generally prevents making it useful to alter owner testing during the frame.
// - but effectively Locked flag can alter same-frame behavior.
//// We want OwnerNext to be handled immediately so SetKeyOwner(key, id1), TestKeyOwner(key, id2) == false
//if (owner_data->OwnerNext != ImGuiKeyOwner_None && owner_data->OwnerNext != owner)
// return false;
// Note: SetKeyOwner() sets OwnerCurr. It is not strictly required for most mouse routing overlap (because of ActiveId/HoveredId
// are acting as filter before this has a chance to filter), but sane as soon as user tries to look into things.
// Setting OwnerCurr in SetKeyOwner() is more consistent than testing OwnerNext here: would be inconsistent with getter and other functions.
if ( owner_data - > OwnerCurr ! = owner_id )
{
if ( owner_data - > LockThisFrame )
@ -8392,6 +8384,7 @@ bool ImGui::TestKeyOwner(ImGuiKey key, ImGuiID owner_id)
return true ;
}
// _LockXXX flags are useful to lock keys away from code which is not input-owner aware.
// When using _LockXXX flags, you can use ImGuiKeyOwner_Any to lock keys from everyone.
// - SetKeyOwner(..., None) : clears owner
// - SetKeyOwner(..., Any, !Lock) : illegal (assert)
@ -8401,14 +8394,12 @@ void ImGui::SetKeyOwner(ImGuiKey key, ImGuiID owner_id, ImGuiInputFlags flags)
IM_ASSERT ( IsNamedKeyOrModKey ( key ) & & ( owner_id ! = ImGuiKeyOwner_Any | | ( flags & ( ImGuiInputFlags_LockThisFrame | ImGuiInputFlags_LockUntilRelease ) ) ) ) ; // Can only use _Any with _LockXXX flags (to eat a key away without an ID to retrieve it)
ImGuiKeyOwnerData * owner_data = GetKeyOwnerData ( key ) ;
owner_data - > OwnerNext = owner_id ;
owner_data - > OwnerCurr = owner_data - > Owner Next = owner_id ;
// We cannot lock by default as it would likely break lots of legacy code.
// In the case of using LockUntilRelease while key is not down we still lock during the frame (no key_data->Down test)
owner_data - > LockUntilRelease = ( flags & ImGuiInputFlags_LockUntilRelease ) ! = 0 ;
owner_data - > LockThisFrame = ( flags & ImGuiInputFlags_LockThisFrame ) ! = 0 | | ( owner_data - > LockUntilRelease ) ;
if ( owner_data - > LockThisFrame )
owner_data - > OwnerCurr = owner_id ;
}
// This is more or less equivalent to: