@ -8862,6 +8862,17 @@ void ImGui::SetKeyOwner(ImGuiKey key, ImGuiID owner_id, ImGuiInputFlags flags)
owner_data - > LockThisFrame = ( flags & ImGuiInputFlags_LockThisFrame ) ! = 0 | | ( owner_data - > LockUntilRelease ) ;
}
// Rarely used helper
void ImGui : : SetKeyOwnersForKeyChord ( ImGuiKeyChord key_chord , ImGuiID owner_id , ImGuiInputFlags flags )
{
if ( key_chord & ImGuiMod_Ctrl ) { SetKeyOwner ( ImGuiMod_Ctrl , owner_id , flags ) ; }
if ( key_chord & ImGuiMod_Shift ) { SetKeyOwner ( ImGuiMod_Shift , owner_id , flags ) ; }
if ( key_chord & ImGuiMod_Alt ) { SetKeyOwner ( ImGuiMod_Alt , owner_id , flags ) ; }
if ( key_chord & ImGuiMod_Super ) { SetKeyOwner ( ImGuiMod_Super , owner_id , flags ) ; }
if ( key_chord & ImGuiMod_Shortcut ) { SetKeyOwner ( ImGuiMod_Shortcut , owner_id , flags ) ; }
if ( key_chord & ~ ImGuiMod_Mask_ ) { SetKeyOwner ( ( ImGuiKey ) ( key_chord & ~ ImGuiMod_Mask_ ) , owner_id , flags ) ; }
}
// This is more or less equivalent to:
// if (IsItemHovered() || IsItemActive())
// SetKeyOwner(key, GetItemID());
@ -11782,10 +11793,11 @@ static void ImGui::NavUpdateWindowing()
}
// Start CTRL+Tab or Square+L/R window selection
const ImGuiID owner_id = ImHashStr ( " ###NavUpdateWindowing " ) ;
const bool nav_gamepad_active = ( io . ConfigFlags & ImGuiConfigFlags_NavEnableGamepad ) ! = 0 & & ( io . BackendFlags & ImGuiBackendFlags_HasGamepad ) ! = 0 ;
const bool nav_keyboard_active = ( io . ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard ) ! = 0 ;
const bool keyboard_next_window = allow_windowing & & g . ConfigNavWindowingKeyNext & & Shortcut ( g . ConfigNavWindowingKeyNext , ImGuiKeyOwner_None , ImGuiInputFlags_Repeat | ImGuiInputFlags_RouteAlways ) ;
const bool keyboard_prev_window = allow_windowing & & g . ConfigNavWindowingKeyPrev & & Shortcut ( g . ConfigNavWindowingKeyPrev , ImGuiKeyOwner_None , ImGuiInputFlags_Repeat | ImGuiInputFlags_RouteAlways ) ;
const bool keyboard_next_window = allow_windowing & & g . ConfigNavWindowingKeyNext & & Shortcut ( g . ConfigNavWindowingKeyNext , owner_id , ImGuiInputFlags_Repeat | ImGuiInputFlags_RouteAlways ) ;
const bool keyboard_prev_window = allow_windowing & & g . ConfigNavWindowingKeyPrev & & Shortcut ( g . ConfigNavWindowingKeyPrev , owner_id , ImGuiInputFlags_Repeat | ImGuiInputFlags_RouteAlways ) ;
const bool start_windowing_with_gamepad = allow_windowing & & nav_gamepad_active & & ! g . NavWindowingTarget & & IsKeyPressed ( ImGuiKey_NavGamepadMenu , 0 , ImGuiInputFlags_None ) ;
const bool start_windowing_with_keyboard = allow_windowing & & ! g . NavWindowingTarget & & ( keyboard_next_window | | keyboard_prev_window ) ; // Note: enabled even without NavEnableKeyboard!
if ( start_windowing_with_gamepad | | start_windowing_with_keyboard )
@ -11796,6 +11808,10 @@ static void ImGui::NavUpdateWindowing()
g . NavWindowingAccumDeltaPos = g . NavWindowingAccumDeltaSize = ImVec2 ( 0.0f , 0.0f ) ;
g . NavWindowingToggleLayer = start_windowing_with_gamepad ? true : false ; // Gamepad starts toggling layer
g . NavInputSource = start_windowing_with_keyboard ? ImGuiInputSource_Keyboard : ImGuiInputSource_Gamepad ;
// Register ownership of our mods. Using ImGuiInputFlags_RouteGlobalHigh in the Shortcut() calls instead would probably be correct but may have more side-effects.
if ( keyboard_next_window | | keyboard_prev_window )
SetKeyOwnersForKeyChord ( ( g . ConfigNavWindowingKeyNext | g . ConfigNavWindowingKeyPrev ) & ImGuiMod_Mask_ , owner_id ) ;
}
// Gamepad update