mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 05:01:05 +01:00 
			
		
		
		
	Fix PushFocusScopeID() + using shared stack. Renamed GetFocusScopeID() to GetFocusedFocusScope() - the two existing functions name are very error prone.
This commit is contained in:
		
							
								
								
									
										21
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -5962,7 +5962,6 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) | ||||
|         window->DC.NavLayerCurrent = ImGuiNavLayer_Main; | ||||
|         window->DC.NavLayerActiveMask = window->DC.NavLayerActiveMaskNext; | ||||
|         window->DC.NavLayerActiveMaskNext = 0x00; | ||||
|         window->DC.NavFocusScopeIdCurrent = (flags & ImGuiWindowFlags_ChildWindow) ? parent_window->DC.NavFocusScopeIdCurrent : 0; // -V595 | ||||
|         window->DC.NavHideHighlightOneFrame = false; | ||||
|         window->DC.NavHasScroll = (window->ScrollMax.y > 0.0f); | ||||
|  | ||||
| @@ -6030,12 +6029,12 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) | ||||
|         SetCurrentWindow(window); | ||||
|     } | ||||
|  | ||||
|     window->DC.NavFocusScopeIdCurrent = (flags & ImGuiWindowFlags_ChildWindow) ? parent_window->DC.NavFocusScopeIdCurrent : 0; // -V595 | ||||
|  | ||||
|     PushClipRect(window->InnerClipRect.Min, window->InnerClipRect.Max, true); | ||||
|  | ||||
|     // Clear 'accessed' flag last thing (After PushClipRect which will set the flag. We want the flag to stay false when the default "Debug" window is unused) | ||||
|     if (first_begin_of_the_frame) | ||||
|         window->WriteAccessed = false; | ||||
|  | ||||
|     window->WriteAccessed = false; | ||||
|     window->BeginCount++; | ||||
|     g.NextWindowData.ClearFlags(); | ||||
|  | ||||
| @@ -6651,14 +6650,11 @@ void ImGui::ActivateItem(ImGuiID id) | ||||
|     g.NavNextActivateId = id; | ||||
| } | ||||
|  | ||||
| // FIXME: this is storing in same stack as IDStack, so Push/Pop mismatch will be reported there. Maybe play nice and a separate in-context stack. | ||||
| void ImGui::PushFocusScope(ImGuiID id) | ||||
| { | ||||
|     ImGuiContext& g = *GImGui; | ||||
|     ImGuiWindow* window = g.CurrentWindow; | ||||
|     ImGuiID top_most_id = window->IDStack.back(); | ||||
|     window->IDStack.push_back(window->DC.NavFocusScopeIdCurrent); | ||||
|     window->IDStack.push_back(top_most_id); | ||||
|     g.FocusScopeStack.push_back(window->DC.NavFocusScopeIdCurrent); | ||||
|     window->DC.NavFocusScopeIdCurrent = id; | ||||
| } | ||||
|  | ||||
| @@ -6666,10 +6662,9 @@ void ImGui::PopFocusScope() | ||||
| { | ||||
|     ImGuiContext& g = *GImGui; | ||||
|     ImGuiWindow* window = g.CurrentWindow; | ||||
|     window->DC.NavFocusScopeIdCurrent = window->IDStack.back(); | ||||
|     window->IDStack.pop_back(); | ||||
|     IM_ASSERT(window->IDStack.Size > 1); // Too many PopID or PopFocusScope (or could be popping in a wrong/different window?) | ||||
|     window->IDStack.pop_back(); | ||||
|     IM_ASSERT(g.FocusScopeStack.Size > 0); // Too many PopFocusScope() ? | ||||
|     window->DC.NavFocusScopeIdCurrent = g.FocusScopeStack.back(); | ||||
|     g.FocusScopeStack.pop_back(); | ||||
| } | ||||
|  | ||||
| void ImGui::SetKeyboardFocusHere(int offset) | ||||
| @@ -6768,7 +6763,7 @@ ImGuiID ImGui::GetIDWithSeed(const char* str, const char* str_end, ImGuiID seed) | ||||
| void ImGui::PopID() | ||||
| { | ||||
|     ImGuiWindow* window = GImGui->CurrentWindow; | ||||
|     IM_ASSERT(window->IDStack.Size > 1); // Too many PopID or PopFocusScope (or could be popping in a wrong/different window?) | ||||
|     IM_ASSERT(window->IDStack.Size > 1); // Too many PopID(), or could be popping in a wrong/different window? | ||||
|     window->IDStack.pop_back(); | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user