From 1d9406b0b27160534fdd92574fd1d8788850cd18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Camilla=20L=C3=B6wy?= Date: Wed, 17 Jan 2018 18:22:49 +0100 Subject: [PATCH] Win32: Fixup --- src/win32_platform.h | 1 + src/win32_window.c | 21 ++++++++++++++++----- tests/native.c | 7 ------- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/win32_platform.h b/src/win32_platform.h index b3535d69..8261269c 100644 --- a/src/win32_platform.h +++ b/src/win32_platform.h @@ -273,6 +273,7 @@ typedef struct _GLFWwindowWin32 // Whether to enable framebuffer transparency on DWM GLFWbool transparent; GLFWbool external; + LONG_PTR externalWindowProc; // The last received cursor position, regardless of source int lastCursorPosX, lastCursorPosY; diff --git a/src/win32_window.c b/src/win32_window.c index e08c7752..25b8a2a4 100644 --- a/src/win32_window.c +++ b/src/win32_window.c @@ -1261,10 +1261,19 @@ void _glfwPlatformDestroyWindow(_GLFWwindow* window) if (_glfw.win32.disabledCursorWindow == window) _glfw.win32.disabledCursorWindow = NULL; - if (window->win32.handle && !window->win32.external) + if (window->win32.handle) { RemovePropW(window->win32.handle, L"GLFW"); - DestroyWindow(window->win32.handle); + + if (window->win32.external) + { + SetWindowLongPtrW(window->win32.handle, + GWLP_WNDPROC, + window->win32.externalWindowProc); + } + else + DestroyWindow(window->win32.handle); + window->win32.handle = NULL; } @@ -2039,10 +2048,12 @@ GLFWAPI GLFWwindow* glfwAttachWin32Window(HWND handle, GLFWwindow* share) window->numer = GLFW_DONT_CARE; window->denom = GLFW_DONT_CARE; - window->win32.handle = handle; - window->win32.external = GLFW_TRUE; - + window->win32.handle = handle; SetPropW(window->win32.handle, L"GLFW", window); + + window->win32.external = GLFW_TRUE; + window->win32.externalWindowProc = + GetWindowLongPtrW(window->win32.handle, GWLP_WNDPROC); SetWindowLongPtrW(window->win32.handle, GWLP_WNDPROC, (LONG_PTR) windowProc); { diff --git a/tests/native.c b/tests/native.c index f42c182f..f52fc5e6 100644 --- a/tests/native.c +++ b/tests/native.c @@ -38,11 +38,6 @@ static void error_callback(int error, const char* description) fprintf(stderr, "Error: %s\n", description); } -static void framebuffer_size_callback(GLFWwindow* window, int width, int height) -{ - glViewport(0, 0, width, height); -} - static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { // This will only be used until glfwAttachWin32Window @@ -100,8 +95,6 @@ int main(void) gladLoadGLLoader((GLADloadproc) glfwGetProcAddress); glfwSwapInterval(1); - glfwSetFramebufferSizeCallback(window, framebuffer_size_callback); - while (!glfwWindowShouldClose(window)) { glClear(GL_COLOR_BUFFER_BIT);