mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-04 07:01:04 +01:00 
			
		
		
		
	Nav: space/enter poll check ownership. InputText: declare ownership of Enter key as it doesn't go through Shortcut
InputText: no need to call SetShortcutRouting() directly. Tangential to experiments for #7237
This commit is contained in:
		
							
								
								
									
										10
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								imgui.cpp
									
									
									
									
									
								
							@@ -8445,6 +8445,7 @@ bool ImGui::SetShortcutRouting(ImGuiKeyChord key_chord, ImGuiID owner_id, ImGuiI
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    // FIXME-SHORTCUT: A way to configure the location/focus-scope to test would render this more flexible.
 | 
			
		||||
    const int score = CalcRoutingScore(g.CurrentFocusScopeId, owner_id, flags);
 | 
			
		||||
    IMGUI_DEBUG_LOG_INPUTROUTING("SetShortcutRouting(%s, owner_id=0x%08X, flags=%04X) -> score %d\n", GetKeyChordName(key_chord), owner_id, flags, score);
 | 
			
		||||
    if (score == 255)
 | 
			
		||||
@@ -11825,10 +11826,10 @@ static void ImGui::NavUpdate()
 | 
			
		||||
    g.NavActivateFlags = ImGuiActivateFlags_None;
 | 
			
		||||
    if (g.NavId != 0 && !g.NavDisableHighlight && !g.NavWindowingTarget && g.NavWindow && !(g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs))
 | 
			
		||||
    {
 | 
			
		||||
        const bool activate_down = (nav_keyboard_active && IsKeyDown(ImGuiKey_Space)) || (nav_gamepad_active && IsKeyDown(ImGuiKey_NavGamepadActivate));
 | 
			
		||||
        const bool activate_pressed = activate_down && ((nav_keyboard_active && IsKeyPressed(ImGuiKey_Space, false)) || (nav_gamepad_active && IsKeyPressed(ImGuiKey_NavGamepadActivate, false)));
 | 
			
		||||
        const bool input_down = (nav_keyboard_active && (IsKeyDown(ImGuiKey_Enter) || IsKeyDown(ImGuiKey_KeypadEnter))) || (nav_gamepad_active && IsKeyDown(ImGuiKey_NavGamepadInput));
 | 
			
		||||
        const bool input_pressed = input_down && ((nav_keyboard_active && (IsKeyPressed(ImGuiKey_Enter, false) || IsKeyPressed(ImGuiKey_KeypadEnter, false))) || (nav_gamepad_active && IsKeyPressed(ImGuiKey_NavGamepadInput, false)));
 | 
			
		||||
        const bool activate_down = (nav_keyboard_active && IsKeyDown(ImGuiKey_Space, ImGuiKeyOwner_None)) || (nav_gamepad_active && IsKeyDown(ImGuiKey_NavGamepadActivate, ImGuiKeyOwner_None));
 | 
			
		||||
        const bool activate_pressed = activate_down && ((nav_keyboard_active && IsKeyPressed(ImGuiKey_Space, ImGuiKeyOwner_None)) || (nav_gamepad_active && IsKeyPressed(ImGuiKey_NavGamepadActivate, ImGuiKeyOwner_None)));
 | 
			
		||||
        const bool input_down = (nav_keyboard_active && (IsKeyDown(ImGuiKey_Enter, ImGuiKeyOwner_None) || IsKeyDown(ImGuiKey_KeypadEnter, ImGuiKeyOwner_None))) || (nav_gamepad_active && IsKeyDown(ImGuiKey_NavGamepadInput, ImGuiKeyOwner_None));
 | 
			
		||||
        const bool input_pressed = input_down && ((nav_keyboard_active && (IsKeyPressed(ImGuiKey_Enter, ImGuiKeyOwner_None) || IsKeyPressed(ImGuiKey_KeypadEnter, ImGuiKeyOwner_None))) || (nav_gamepad_active && IsKeyPressed(ImGuiKey_NavGamepadInput, ImGuiKeyOwner_None)));
 | 
			
		||||
        if (g.ActiveId == 0 && activate_pressed)
 | 
			
		||||
        {
 | 
			
		||||
            g.NavActivateId = g.NavId;
 | 
			
		||||
@@ -15304,6 +15305,7 @@ void ImGui::DebugLocateItem(ImGuiID target_id)
 | 
			
		||||
    g.DebugBreakInLocateId = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// FIXME: Doesn't work over through a modal window, because they clear HoveredWindow.
 | 
			
		||||
void ImGui::DebugLocateItemOnHover(ImGuiID target_id)
 | 
			
		||||
{
 | 
			
		||||
    if (target_id == 0 || !IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByActiveItem | ImGuiHoveredFlags_AllowWhenBlockedByPopup))
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								imgui.h
									
									
									
									
									
								
							@@ -24,7 +24,7 @@
 | 
			
		||||
// Library Version
 | 
			
		||||
// (Integer encoded as XYYZZ for use in #if preprocessor conditionals, e.g. '#if IMGUI_VERSION_NUM >= 12345')
 | 
			
		||||
#define IMGUI_VERSION       "1.90.2 WIP"
 | 
			
		||||
#define IMGUI_VERSION_NUM   19013
 | 
			
		||||
#define IMGUI_VERSION_NUM   19014
 | 
			
		||||
#define IMGUI_HAS_TABLE
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 
 | 
			
		||||
@@ -4251,6 +4251,8 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_
 | 
			
		||||
        g.ActiveIdUsingNavDirMask |= (1 << ImGuiDir_Left) | (1 << ImGuiDir_Right);
 | 
			
		||||
        if (is_multiline || (flags & ImGuiInputTextFlags_CallbackHistory))
 | 
			
		||||
            g.ActiveIdUsingNavDirMask |= (1 << ImGuiDir_Up) | (1 << ImGuiDir_Down);
 | 
			
		||||
        SetKeyOwner(ImGuiKey_Enter, id);
 | 
			
		||||
        SetKeyOwner(ImGuiKey_KeypadEnter, id);
 | 
			
		||||
        SetKeyOwner(ImGuiKey_Home, id);
 | 
			
		||||
        SetKeyOwner(ImGuiKey_End, id);
 | 
			
		||||
        if (is_multiline)
 | 
			
		||||
@@ -4260,8 +4262,6 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_
 | 
			
		||||
        }
 | 
			
		||||
        if (is_osx)
 | 
			
		||||
            SetKeyOwner(ImGuiMod_Alt, id);
 | 
			
		||||
        if (flags & (ImGuiInputTextFlags_CallbackCompletion | ImGuiInputTextFlags_AllowTabInput)) // Disable keyboard tabbing out as we will use the \t character.
 | 
			
		||||
            SetShortcutRouting(ImGuiKey_Tab, id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // We have an edge case if ActiveId was set through another widget (e.g. widget being swapped), clear id immediately (don't wait until the end of the function)
 | 
			
		||||
@@ -4390,11 +4390,20 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_
 | 
			
		||||
 | 
			
		||||
        // We expect backends to emit a Tab key but some also emit a Tab character which we ignore (#2467, #1336)
 | 
			
		||||
        // (For Tab and Enter: Win32/SFML/Allegro are sending both keys and chars, GLFW and SDL are only sending keys. For Space they all send all threes)
 | 
			
		||||
        if ((flags & ImGuiInputTextFlags_AllowTabInput) && Shortcut(ImGuiKey_Tab, id, ImGuiInputFlags_Repeat) && !is_readonly)
 | 
			
		||||
        if ((flags & ImGuiInputTextFlags_AllowTabInput) && !is_readonly)
 | 
			
		||||
        {
 | 
			
		||||
            unsigned int c = '\t'; // Insert TAB
 | 
			
		||||
            if (InputTextFilterCharacter(&g, &c, flags, callback, callback_user_data, ImGuiInputSource_Keyboard))
 | 
			
		||||
                state->OnKeyPressed((int)c);
 | 
			
		||||
            if (Shortcut(ImGuiKey_Tab, id, ImGuiInputFlags_Repeat))
 | 
			
		||||
            {
 | 
			
		||||
                unsigned int c = '\t'; // Insert TAB
 | 
			
		||||
                if (InputTextFilterCharacter(&g, &c, flags, callback, callback_user_data, ImGuiInputSource_Keyboard))
 | 
			
		||||
                    state->OnKeyPressed((int)c);
 | 
			
		||||
            }
 | 
			
		||||
            // FIXME: Implement Shift+Tab
 | 
			
		||||
            /*
 | 
			
		||||
            if (Shortcut(ImGuiKey_Tab | ImGuiMod_Shift, id, ImGuiInputFlags_Repeat))
 | 
			
		||||
            {
 | 
			
		||||
            }
 | 
			
		||||
            */
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Process regular text input (before we check for Return because using some IME will effectively send a Return?)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user