@ -8659,7 +8659,7 @@ static bool IsKeyChordPotentiallyCharInput(ImGuiKeyChord key_chord)
// - Routes and key ownership are attributed at the beginning of next frame based on best score and mod state.
// - Routes and key ownership are attributed at the beginning of next frame based on best score and mod state.
// (Conceptually this does a "Submit for next frame" + "Test for current frame".
// (Conceptually this does a "Submit for next frame" + "Test for current frame".
// As such, it could be called TrySetXXX or SubmitXXX, or the Submit and Test operations should be separate.)
// As such, it could be called TrySetXXX or SubmitXXX, or the Submit and Test operations should be separate.)
bool ImGui : : SetShortcutRouting ( ImGuiKeyChord key_chord , ImGuiInputFlags flags , ImGuiID owner_id , ImGuiID focus_scope_id )
bool ImGui : : SetShortcutRouting ( ImGuiKeyChord key_chord , ImGuiInputFlags flags , ImGuiID owner_id )
{
{
ImGuiContext & g = * GImGui ;
ImGuiContext & g = * GImGui ;
IM_ASSERT ( ImIsPowerOfTwo ( flags & ImGuiInputFlags_RouteTypeMask_ ) ) ; // Check that only 1 routing flag is used
IM_ASSERT ( ImIsPowerOfTwo ( flags & ImGuiInputFlags_RouteTypeMask_ ) ) ; // Check that only 1 routing flag is used
@ -8708,6 +8708,11 @@ bool ImGui::SetShortcutRouting(ImGuiKeyChord key_chord, ImGuiInputFlags flags, I
}
}
}
}
// Where do we evaluate route for?
ImGuiID focus_scope_id = g . CurrentFocusScopeId ;
if ( flags & ImGuiInputFlags_RouteFromRootWindow )
focus_scope_id = g . CurrentWindow - > RootWindow - > ID ; // See PushFocusScope() call in Begin()
const int score = CalcRoutingScore ( focus_scope_id , owner_id , flags ) ;
const int score = CalcRoutingScore ( focus_scope_id , owner_id , flags ) ;
IMGUI_DEBUG_LOG_INPUTROUTING ( " SetShortcutRouting(%s, flags=%04X, owner_id=0x%08X) -> score %d \n " , GetKeyChordName ( key_chord ) , flags , owner_id , score ) ;
IMGUI_DEBUG_LOG_INPUTROUTING ( " SetShortcutRouting(%s, flags=%04X, owner_id=0x%08X) -> score %d \n " , GetKeyChordName ( key_chord ) , flags , owner_id , score ) ;
if ( score = = 255 )
if ( score = = 255 )
@ -9715,7 +9720,7 @@ bool ImGui::Shortcut(ImGuiKeyChord key_chord, ImGuiInputFlags flags)
bool ImGui : : Shortcut ( ImGuiKeyChord key_chord , ImGuiInputFlags flags , ImGuiID owner_id )
bool ImGui : : Shortcut ( ImGuiKeyChord key_chord , ImGuiInputFlags flags , ImGuiID owner_id )
{
{
ImGuiContext & g = * GImGui ;
//ImGuiContext& g = *GImGui;
//IMGUI_DEBUG_LOG("Shortcut(%s, flags=%X, owner_id=0x%08X)\n", GetKeyChordName(key_chord, g.TempBuffer.Data, g.TempBuffer.Size), flags, owner_id);
//IMGUI_DEBUG_LOG("Shortcut(%s, flags=%X, owner_id=0x%08X)\n", GetKeyChordName(key_chord, g.TempBuffer.Data, g.TempBuffer.Size), flags, owner_id);
// When using (owner_id == 0/Any): SetShortcutRouting() will use CurrentFocusScopeId and filter with this, so IsKeyPressed() is fine with he 0/Any.
// When using (owner_id == 0/Any): SetShortcutRouting() will use CurrentFocusScopeId and filter with this, so IsKeyPressed() is fine with he 0/Any.
@ -9727,13 +9732,8 @@ bool ImGui::Shortcut(ImGuiKeyChord key_chord, ImGuiInputFlags flags, ImGuiID own
if ( owner_id = = ImGuiKeyOwner_Any | | owner_id = = ImGuiKeyOwner_NoOwner )
if ( owner_id = = ImGuiKeyOwner_Any | | owner_id = = ImGuiKeyOwner_NoOwner )
owner_id = GetRoutingIdFromOwnerId ( owner_id ) ;
owner_id = GetRoutingIdFromOwnerId ( owner_id ) ;
// Where do we evaluate route for?
ImGuiID focus_scope_id = g . CurrentFocusScopeId ;
if ( flags & ImGuiInputFlags_RouteFromRootWindow )
focus_scope_id = g . CurrentWindow - > RootWindow - > ID ; // See PushFocusScope() call in Begin()
// Submit route
// Submit route
if ( ! SetShortcutRouting ( key_chord , flags , owner_id , focus_scope_id ) )
if ( ! SetShortcutRouting ( key_chord , flags , owner_id ) )
return false ;
return false ;
// Default repeat behavior for Shortcut()
// Default repeat behavior for Shortcut()