|
@@ -7656,17 +7656,20 @@ void ImGui::DestroyPlatformWindow(ImGuiViewportP* viewport)
|
|
|
g.PlatformIO.Renderer_DestroyWindow(viewport);
|
|
|
if (viewport->CreatedPlatformWindow && g.PlatformIO.Platform_DestroyWindow)
|
|
|
g.PlatformIO.Platform_DestroyWindow(viewport);
|
|
|
- viewport->CreatedPlatformWindow = false;
|
|
|
IM_ASSERT(viewport->RendererUserData == NULL);
|
|
|
- IM_ASSERT(viewport->PlatformUserData == NULL && viewport->PlatformHandle == NULL);
|
|
|
+ IM_ASSERT(viewport->PlatformUserData == NULL);
|
|
|
+ viewport->PlatformHandle = NULL;
|
|
|
+ viewport->RendererUserData = viewport->PlatformHandle = NULL;
|
|
|
+ viewport->CreatedPlatformWindow = false;
|
|
|
}
|
|
|
|
|
|
void ImGui::DestroyPlatformWindows()
|
|
|
{
|
|
|
// We call the destroy window on the main viewport (index 0) to give a chance to the back-end to clear any data
|
|
|
- // have stored in e.g. PlatformHandle.
|
|
|
- // It is expected that the back-end stored a flag to remember that it doesn't own the window created for the
|
|
|
- // main viewport, and won't destroy the underlying platform/renderer data.
|
|
|
+ // have stored in e.g. PlatformUserData, RendererUserData. It can be convenient for the platform back-end code to
|
|
|
+ // store something in the main viewport, in order for e.g. the mouse handling code to work in a more generic manner.
|
|
|
+ // It is expected that the back-end can handle calls to Renderer_DestroyWindow/Platform_DestroyWindow without
|
|
|
+ // crashing if it doesn't have data stored.
|
|
|
ImGuiContext& g = *GImGui;
|
|
|
for (int i = 0; i < g.Viewports.Size; i++)
|
|
|
if (g.Viewports[i]->CreatedPlatformWindow)
|