From 1b5614b3f58c6547a309237c34e0ecb014895860 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Fri, 16 Jun 2017 10:50:29 -0700 Subject: [PATCH] Clean up parent window when destroying a window --- src/video/windows/SDL_windowswindow.c | 13 ++++++++++--- src/video/windows/SDL_windowswindow.h | 1 + 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/video/windows/SDL_windowswindow.c b/src/video/windows/SDL_windowswindow.c index f0f04e9ce..5cf25b0be 100644 --- a/src/video/windows/SDL_windowswindow.c +++ b/src/video/windows/SDL_windowswindow.c @@ -114,7 +114,7 @@ WIN_SetWindowPositionInternal(_THIS, SDL_Window * window, UINT flags) } static int -SetupWindowData(_THIS, SDL_Window * window, HWND hwnd, SDL_bool created) +SetupWindowData(_THIS, SDL_Window * window, HWND hwnd, HWND parent, SDL_bool created) { SDL_VideoData *videodata = (SDL_VideoData *) _this->driverdata; SDL_WindowData *data; @@ -126,6 +126,7 @@ SetupWindowData(_THIS, SDL_Window * window, HWND hwnd, SDL_bool created) } data->window = window; data->hwnd = hwnd; + data->parent = parent; data->hdc = GetDC(hwnd); data->hinstance = (HINSTANCE) GetWindowLongPtr(hwnd, GWLP_HINSTANCE); data->created = created; @@ -300,8 +301,11 @@ WIN_CreateWindow(_THIS, SDL_Window * window) WIN_PumpEvents(_this); - if (SetupWindowData(_this, window, hwnd, SDL_TRUE) < 0) { + if (SetupWindowData(_this, window, hwnd, parent, SDL_TRUE) < 0) { DestroyWindow(hwnd); + if (parent) { + DestroyWindow(parent); + } return -1; } @@ -362,7 +366,7 @@ WIN_CreateWindowFrom(_THIS, SDL_Window * window, const void *data) SDL_stack_free(title); } - if (SetupWindowData(_this, window, hwnd, SDL_FALSE) < 0) { + if (SetupWindowData(_this, window, hwnd, NULL, SDL_FALSE) < 0) { return -1; } @@ -680,6 +684,9 @@ WIN_DestroyWindow(_THIS, SDL_Window * window) RemoveProp(data->hwnd, TEXT("SDL_WindowData")); if (data->created) { DestroyWindow(data->hwnd); + if (data->parent) { + DestroyWindow(data->parent); + } } else { /* Restore any original event handler... */ if (data->wndproc != NULL) { diff --git a/src/video/windows/SDL_windowswindow.h b/src/video/windows/SDL_windowswindow.h index 180cb8ac5..d923c26c4 100644 --- a/src/video/windows/SDL_windowswindow.h +++ b/src/video/windows/SDL_windowswindow.h @@ -31,6 +31,7 @@ typedef struct { SDL_Window *window; HWND hwnd; + HWND parent; HDC hdc; HDC mdc; HINSTANCE hinstance;