mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-03 22:51:06 +01:00 
			
		
		
		
	Nav: Fixed Tabbing initial activation from skipping the first item if it is tabbable through. (#787)
This commit is contained in:
		@@ -47,6 +47,7 @@ Other Changes:
 | 
				
			|||||||
- Nav: Fixed pressing Escape to leave menu layer while in a popup or child window. (#787)
 | 
					- Nav: Fixed pressing Escape to leave menu layer while in a popup or child window. (#787)
 | 
				
			||||||
- Nav, InputText: Fixed accidental menu toggling while typing non-ascii characters using AltGR. [@rokups] (#370)
 | 
					- Nav, InputText: Fixed accidental menu toggling while typing non-ascii characters using AltGR. [@rokups] (#370)
 | 
				
			||||||
- Nav: Fixed using SetItemDefaultFocus() on windows with _NavFlattened flag. (#787)
 | 
					- Nav: Fixed using SetItemDefaultFocus() on windows with _NavFlattened flag. (#787)
 | 
				
			||||||
 | 
					- Nav: Fixed Tabbing initial activation from skipping the first item if it is tabbable through. (#787)
 | 
				
			||||||
- Tables: Expose TableSetColumnEnabled() in public api. (#3935)
 | 
					- Tables: Expose TableSetColumnEnabled() in public api. (#3935)
 | 
				
			||||||
- Tables: Better preserve widths when columns count changes. (#4046)
 | 
					- Tables: Better preserve widths when columns count changes. (#4046)
 | 
				
			||||||
- TabBar: Fixed mouse reordering with very fast movements (e.g. crossing multiple tabs in a single
 | 
					- TabBar: Fixed mouse reordering with very fast movements (e.g. crossing multiple tabs in a single
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										13
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								imgui.cpp
									
									
									
									
									
								
							@@ -3257,7 +3257,11 @@ bool ImGui::FocusableItemRegister(ImGuiWindow* window, ImGuiID id)
 | 
				
			|||||||
    const bool is_tab_stop = (g.CurrentItemFlags & (ImGuiItemFlags_NoTabStop | ImGuiItemFlags_Disabled)) == 0;
 | 
					    const bool is_tab_stop = (g.CurrentItemFlags & (ImGuiItemFlags_NoTabStop | ImGuiItemFlags_Disabled)) == 0;
 | 
				
			||||||
    window->DC.FocusCounterRegular++;
 | 
					    window->DC.FocusCounterRegular++;
 | 
				
			||||||
    if (is_tab_stop)
 | 
					    if (is_tab_stop)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
        window->DC.FocusCounterTabStop++;
 | 
					        window->DC.FocusCounterTabStop++;
 | 
				
			||||||
 | 
					        if (g.NavId == id)
 | 
				
			||||||
 | 
					            g.NavIdTabCounter = window->DC.FocusCounterTabStop;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Process TAB/Shift-TAB to tab *OUT* of the currently focused item.
 | 
					    // Process TAB/Shift-TAB to tab *OUT* of the currently focused item.
 | 
				
			||||||
    // (Note that we can always TAB out of a widget that doesn't allow tabbing in)
 | 
					    // (Note that we can always TAB out of a widget that doesn't allow tabbing in)
 | 
				
			||||||
@@ -3787,12 +3791,14 @@ void ImGui::UpdateTabFocus()
 | 
				
			|||||||
    g.TabFocusPressed = (g.NavWindow && g.NavWindow->Active && !(g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs) && !g.IO.KeyCtrl && IsKeyPressedMap(ImGuiKey_Tab));
 | 
					    g.TabFocusPressed = (g.NavWindow && g.NavWindow->Active && !(g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs) && !g.IO.KeyCtrl && IsKeyPressedMap(ImGuiKey_Tab));
 | 
				
			||||||
    if (g.ActiveId == 0 && g.TabFocusPressed)
 | 
					    if (g.ActiveId == 0 && g.TabFocusPressed)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        // Note that SetKeyboardFocusHere() sets the Next fields mid-frame. To be consistent we also
 | 
					        // - This path is only taken when no widget are active/tabbed-into yet.
 | 
				
			||||||
        // manipulate the Next fields even, even though they will be turned into Curr fields by the code below.
 | 
					        //   Subsequent tabbing will be processed by FocusableItemRegister()
 | 
				
			||||||
 | 
					        // - Note that SetKeyboardFocusHere() sets the Next fields mid-frame. To be consistent we also
 | 
				
			||||||
 | 
					        //   manipulate the Next fields here even though they will be turned into Curr fields below.
 | 
				
			||||||
        g.TabFocusRequestNextWindow = g.NavWindow;
 | 
					        g.TabFocusRequestNextWindow = g.NavWindow;
 | 
				
			||||||
        g.TabFocusRequestNextCounterRegular = INT_MAX;
 | 
					        g.TabFocusRequestNextCounterRegular = INT_MAX;
 | 
				
			||||||
        if (g.NavId != 0 && g.NavIdTabCounter != INT_MAX)
 | 
					        if (g.NavId != 0 && g.NavIdTabCounter != INT_MAX)
 | 
				
			||||||
            g.TabFocusRequestNextCounterTabStop = g.NavIdTabCounter + 1 + (g.IO.KeyShift ? -1 : 1);
 | 
					            g.TabFocusRequestNextCounterTabStop = g.NavIdTabCounter + (g.IO.KeyShift ? -1 : 0);
 | 
				
			||||||
        else
 | 
					        else
 | 
				
			||||||
            g.TabFocusRequestNextCounterTabStop = g.IO.KeyShift ? -1 : 0;
 | 
					            g.TabFocusRequestNextCounterTabStop = g.IO.KeyShift ? -1 : 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -8828,7 +8834,6 @@ static void ImGui::NavProcessItem(ImGuiWindow* window, const ImRect& nav_bb, con
 | 
				
			|||||||
        g.NavLayer = window->DC.NavLayerCurrent;
 | 
					        g.NavLayer = window->DC.NavLayerCurrent;
 | 
				
			||||||
        g.NavFocusScopeId = window->DC.NavFocusScopeIdCurrent;
 | 
					        g.NavFocusScopeId = window->DC.NavFocusScopeIdCurrent;
 | 
				
			||||||
        g.NavIdIsAlive = true;
 | 
					        g.NavIdIsAlive = true;
 | 
				
			||||||
        g.NavIdTabCounter = window->DC.FocusCounterTabStop;
 | 
					 | 
				
			||||||
        window->NavRectRel[window->DC.NavLayerCurrent] = nav_bb_rel;    // Store item bounding box (relative to window position)
 | 
					        window->NavRectRel[window->DC.NavLayerCurrent] = nav_bb_rel;    // Store item bounding box (relative to window position)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								imgui.h
									
									
									
									
									
								
							@@ -61,7 +61,7 @@ Index of this file:
 | 
				
			|||||||
// Version
 | 
					// Version
 | 
				
			||||||
// (Integer encoded as XYYZZ for use in #if preprocessor conditionals. Work in progress versions typically starts at XYY99 then bounce up to XYY00, XYY01 etc. when release tagging happens)
 | 
					// (Integer encoded as XYYZZ for use in #if preprocessor conditionals. Work in progress versions typically starts at XYY99 then bounce up to XYY00, XYY01 etc. when release tagging happens)
 | 
				
			||||||
#define IMGUI_VERSION               "1.83 WIP"
 | 
					#define IMGUI_VERSION               "1.83 WIP"
 | 
				
			||||||
#define IMGUI_VERSION_NUM           18207
 | 
					#define IMGUI_VERSION_NUM           18208
 | 
				
			||||||
#define IMGUI_CHECKVERSION()        ImGui::DebugCheckVersionAndDataLayout(IMGUI_VERSION, sizeof(ImGuiIO), sizeof(ImGuiStyle), sizeof(ImVec2), sizeof(ImVec4), sizeof(ImDrawVert), sizeof(ImDrawIdx))
 | 
					#define IMGUI_CHECKVERSION()        ImGui::DebugCheckVersionAndDataLayout(IMGUI_VERSION, sizeof(ImGuiIO), sizeof(ImGuiStyle), sizeof(ImVec2), sizeof(ImVec4), sizeof(ImDrawVert), sizeof(ImDrawIdx))
 | 
				
			||||||
#define IMGUI_HAS_TABLE
 | 
					#define IMGUI_HAS_TABLE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5501,7 +5501,7 @@ static void ShowDemoWindowMisc()
 | 
				
			|||||||
            ImGui::InputText("3", buf, IM_ARRAYSIZE(buf));
 | 
					            ImGui::InputText("3", buf, IM_ARRAYSIZE(buf));
 | 
				
			||||||
            ImGui::PushAllowKeyboardFocus(false);
 | 
					            ImGui::PushAllowKeyboardFocus(false);
 | 
				
			||||||
            ImGui::InputText("4 (tab skip)", buf, IM_ARRAYSIZE(buf));
 | 
					            ImGui::InputText("4 (tab skip)", buf, IM_ARRAYSIZE(buf));
 | 
				
			||||||
            //ImGui::SameLine(); HelpMarker("Use ImGui::PushAllowKeyboardFocus(bool) to disable tabbing through certain widgets.");
 | 
					            ImGui::SameLine(); HelpMarker("Item won't be cycled through when using TAB or Shift+Tab.");
 | 
				
			||||||
            ImGui::PopAllowKeyboardFocus();
 | 
					            ImGui::PopAllowKeyboardFocus();
 | 
				
			||||||
            ImGui::InputText("5", buf, IM_ARRAYSIZE(buf));
 | 
					            ImGui::InputText("5", buf, IM_ARRAYSIZE(buf));
 | 
				
			||||||
            ImGui::TreePop();
 | 
					            ImGui::TreePop();
 | 
				
			||||||
@@ -5527,6 +5527,7 @@ static void ShowDemoWindowMisc()
 | 
				
			|||||||
            if (focus_3) ImGui::SetKeyboardFocusHere();
 | 
					            if (focus_3) ImGui::SetKeyboardFocusHere();
 | 
				
			||||||
            ImGui::InputText("3 (tab skip)", buf, IM_ARRAYSIZE(buf));
 | 
					            ImGui::InputText("3 (tab skip)", buf, IM_ARRAYSIZE(buf));
 | 
				
			||||||
            if (ImGui::IsItemActive()) has_focus = 3;
 | 
					            if (ImGui::IsItemActive()) has_focus = 3;
 | 
				
			||||||
 | 
					            ImGui::SameLine(); HelpMarker("Item won't be cycled through when using TAB or Shift+Tab.");
 | 
				
			||||||
            ImGui::PopAllowKeyboardFocus();
 | 
					            ImGui::PopAllowKeyboardFocus();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (has_focus)
 | 
					            if (has_focus)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user