mirror of
https://github.com/Ryujinx/Opentk.git
synced 2025-01-11 00:05:37 +00:00
Destroy SDL window when finalized
SDL_DestroyWindow must be called on the main thread. If the window is finalized, the finalizer will push a CLOSE event to the event loop (thread-safe) and the window will be destroyed on the main thread.
This commit is contained in:
parent
75d4f3d07c
commit
08701d318c
|
@ -50,6 +50,7 @@ namespace OpenTK.Platform.SDL2
|
|||
bool is_focused;
|
||||
bool is_cursor_visible = true;
|
||||
bool exists;
|
||||
bool must_destroy;
|
||||
bool disposed;
|
||||
WindowState window_state = WindowState.Normal;
|
||||
WindowState previous_window_state = WindowState.Normal;
|
||||
|
@ -238,7 +239,7 @@ namespace OpenTK.Platform.SDL2
|
|||
if (!close_args.Cancel)
|
||||
{
|
||||
window.Closed(window, EventArgs.Empty);
|
||||
//window.DestroyWindow();
|
||||
window.must_destroy = true;
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -395,9 +396,9 @@ namespace OpenTK.Platform.SDL2
|
|||
{
|
||||
lock (sync)
|
||||
{
|
||||
if (Exists)
|
||||
if (Exists && !must_destroy)
|
||||
{
|
||||
Debug.Print("SDL2 destroying window {0}", window.Handle);
|
||||
Debug.Print("SDL2 closing window {0}", window.Handle);
|
||||
|
||||
Event e = new Event();
|
||||
e.Type = EventType.WINDOWEVENT;
|
||||
|
@ -418,6 +419,10 @@ namespace OpenTK.Platform.SDL2
|
|||
if (Exists)
|
||||
{
|
||||
SDL.PumpEvents();
|
||||
if (must_destroy)
|
||||
{
|
||||
DestroyWindow();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -899,6 +904,15 @@ namespace OpenTK.Platform.SDL2
|
|||
else
|
||||
{
|
||||
Debug.WriteLine("Sdl2NativeWindow leaked, did you forget to call Dispose()?");
|
||||
if (Exists)
|
||||
{
|
||||
// If the main loop is still running, send a close message.
|
||||
// This will raise the Closing/Closed events and then destroy
|
||||
// the window.
|
||||
// Todo: it is probably not safe to raise events once the
|
||||
// finalizer has run. Review this.
|
||||
Close();
|
||||
}
|
||||
}
|
||||
disposed = true;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue