mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 05:01:05 +01:00 
			
		
		
		
	Internals: Update ->RootWindow and other links before applying the SetNextWindowXXX stuff. This is so FocusWindow() can always assume that ->RootWindow != NULL.
This commit is contained in:
		
							
								
								
									
										15
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -5402,6 +5402,10 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) | ||||
|     if (window_just_appearing_after_hidden_for_resize && !(flags & ImGuiWindowFlags_ChildWindow)) | ||||
|         window->NavLastIds[0] = 0; | ||||
|  | ||||
|     // Update ->RootWindow and others pointers (before any possible call to FocusWindow) | ||||
|     if (first_begin_of_the_frame) | ||||
|         UpdateWindowParentAndRootLinks(window, flags, parent_window); | ||||
|  | ||||
|     // Process SetNextWindow***() calls | ||||
|     bool window_pos_set_by_api = false; | ||||
|     bool window_size_x_set_by_api = false, window_size_y_set_by_api = false; | ||||
| @@ -5443,8 +5447,6 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) | ||||
|     { | ||||
|         // Initialize | ||||
|         const bool window_is_child_tooltip = (flags & ImGuiWindowFlags_ChildWindow) && (flags & ImGuiWindowFlags_Tooltip); // FIXME-WIP: Undocumented behavior of Child+Tooltip for pinned tooltip (#1345) | ||||
|         UpdateWindowParentAndRootLinks(window, flags, parent_window); | ||||
|  | ||||
|         window->Active = true; | ||||
|         window->HasCloseButton = (p_open != NULL); | ||||
|         window->ClipRect = ImVec4(-FLT_MAX,-FLT_MAX,+FLT_MAX,+FLT_MAX); | ||||
| @@ -6037,8 +6039,8 @@ void ImGui::FocusWindow(ImGuiWindow* window) | ||||
|         return; | ||||
|  | ||||
|     // Move the root window to the top of the pile | ||||
|     if (window->RootWindow) | ||||
|         window = window->RootWindow; | ||||
|     IM_ASSERT(window->RootWindow != NULL); | ||||
|     window = window->RootWindow; | ||||
|  | ||||
|     // Steal focus on active widgets | ||||
|     if (window->Flags & ImGuiWindowFlags_Popup) // FIXME: This statement should be unnecessary. Need further testing before removing it.. | ||||
| @@ -7823,7 +7825,7 @@ ImVec2 ImGui::FindBestWindowPosForPopup(ImGuiWindow* window) | ||||
| // [SECTION] KEYBOARD/GAMEPAD NAVIGATION | ||||
| //----------------------------------------------------------------------------- | ||||
|  | ||||
| // FIXME-NAV: The existance of SetNavID vs SetNavIDWithRectRel vs SetFocusID is incredibly messy and confusing, | ||||
| // FIXME-NAV: The existence of SetNavID vs SetNavIDWithRectRel vs SetFocusID is incredibly messy and confusing, | ||||
| // and needs some explanation or serious refactoring. | ||||
| void ImGui::SetNavID(ImGuiID id, int nav_layer, ImGuiID focus_scope_id) | ||||
| { | ||||
| @@ -8295,7 +8297,8 @@ static void ImGui::NavUpdate() | ||||
|     if (g.NavScoringCount > 0) IMGUI_DEBUG_LOG("NavScoringCount %d for '%s' layer %d (Init:%d, Move:%d)\n", g.FrameCount, g.NavScoringCount, g.NavWindow ? g.NavWindow->Name : "NULL", g.NavLayer, g.NavInitRequest || g.NavInitResultId != 0, g.NavMoveRequest); | ||||
| #endif | ||||
|  | ||||
|     // Set input source as Gamepad when buttons are pressed before we map Keyboard (some features differs when used with Gamepad vs Keyboard) | ||||
|     // Set input source as Gamepad when buttons are pressed (as some features differs when used with Gamepad vs Keyboard) | ||||
|     // (do it before we map Keyboard input!) | ||||
|     bool nav_keyboard_active = (g.IO.ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard) != 0; | ||||
|     bool nav_gamepad_active = (g.IO.ConfigFlags & ImGuiConfigFlags_NavEnableGamepad) != 0 && (g.IO.BackendFlags & ImGuiBackendFlags_HasGamepad) != 0; | ||||
|     if (nav_gamepad_active) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user