From b9ea733ca8c4dff613210fbbb6b9a5899486b2ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Camilla=20L=C3=B6wy?= Date: Wed, 6 Apr 2022 21:13:48 +0200 Subject: [PATCH] Move last bits of window setup to platform code This avoids glfwCreateWindow emitting GLFW_PLATFORM_ERROR on Wayland because shared code was calling unimplemented or unavailable platform functions during final setup. It also makes it consistent with the final setup of full screen windows. This is adapted to 3.3-stable from 09653b8c5490ebb605933537e897587c9129f159. --- README.md | 1 + src/cocoa_window.m | 15 +++++++++++++++ src/null_window.c | 3 +++ src/win32_window.c | 15 +++++++++++++++ src/window.c | 24 ------------------------ src/wl_window.c | 3 +++ src/x11_window.c | 15 +++++++++++++++ 7 files changed, 52 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index bcd2d70de..7f7c49d02 100644 --- a/README.md +++ b/README.md @@ -144,6 +144,7 @@ information on what to include when reporting a bug. - [Wayland] Bugfix: Drag and drop data was misinterpreted as clipboard string - [Wayland] Bugfix: MIME type matching was not performed for clipboard string - [Wayland] Bugfix: The OSMesa library was not unloaded on termination + - [Wayland] Bugfix: `glfwCreateWindow` could emit `GLFW_PLATFORM_ERROR` ## Contact diff --git a/src/cocoa_window.m b/src/cocoa_window.m index 15f9c40e2..161989494 100644 --- a/src/cocoa_window.m +++ b/src/cocoa_window.m @@ -934,6 +934,9 @@ int _glfwPlatformCreateWindow(_GLFWwindow* window, if (!_glfwCreateContextOSMesa(window, ctxconfig, fbconfig)) return GLFW_FALSE; } + + if (!_glfwRefreshContextAttribs(window, ctxconfig)) + return GLFW_FALSE; } if (window->monitor) @@ -941,6 +944,18 @@ int _glfwPlatformCreateWindow(_GLFWwindow* window, _glfwPlatformShowWindow(window); _glfwPlatformFocusWindow(window); acquireMonitor(window); + + if (wndconfig->centerCursor) + _glfwCenterCursorInContentArea(window); + } + else + { + if (wndconfig->visible) + { + _glfwPlatformShowWindow(window); + if (wndconfig->focused) + _glfwPlatformFocusWindow(window); + } } return GLFW_TRUE; diff --git a/src/null_window.c b/src/null_window.c index 045c76a20..e61c2bdd3 100644 --- a/src/null_window.c +++ b/src/null_window.c @@ -67,6 +67,9 @@ int _glfwPlatformCreateWindow(_GLFWwindow* window, _glfwInputError(GLFW_API_UNAVAILABLE, "Null: EGL not available"); return GLFW_FALSE; } + + if (!_glfwRefreshContextAttribs(window, ctxconfig)) + return GLFW_FALSE; } return GLFW_TRUE; diff --git a/src/win32_window.c b/src/win32_window.c index b6defbaa3..ca0f355d7 100644 --- a/src/win32_window.c +++ b/src/win32_window.c @@ -1498,6 +1498,9 @@ int _glfwPlatformCreateWindow(_GLFWwindow* window, if (!_glfwCreateContextOSMesa(window, ctxconfig, fbconfig)) return GLFW_FALSE; } + + if (!_glfwRefreshContextAttribs(window, ctxconfig)) + return GLFW_FALSE; } if (window->monitor) @@ -1506,6 +1509,18 @@ int _glfwPlatformCreateWindow(_GLFWwindow* window, _glfwPlatformFocusWindow(window); acquireMonitor(window); fitToMonitor(window); + + if (wndconfig->centerCursor) + _glfwCenterCursorInContentArea(window); + } + else + { + if (wndconfig->visible) + { + _glfwPlatformShowWindow(window); + if (wndconfig->focused) + _glfwPlatformFocusWindow(window); + } } return GLFW_TRUE; diff --git a/src/window.c b/src/window.c index 1fd9c6a0d..5d80e4365 100644 --- a/src/window.c +++ b/src/window.c @@ -221,30 +221,6 @@ GLFWAPI GLFWwindow* glfwCreateWindow(int width, int height, return NULL; } - if (ctxconfig.client != GLFW_NO_API) - { - if (!_glfwRefreshContextAttribs(window, &ctxconfig)) - { - glfwDestroyWindow((GLFWwindow*) window); - return NULL; - } - } - - if (window->monitor) - { - if (wndconfig.centerCursor) - _glfwCenterCursorInContentArea(window); - } - else - { - if (wndconfig.visible) - { - _glfwPlatformShowWindow(window); - if (wndconfig.focused) - _glfwPlatformFocusWindow(window); - } - } - return (GLFWwindow*) window; } diff --git a/src/wl_window.c b/src/wl_window.c index b15fd16af..7f2d7e679 100644 --- a/src/wl_window.c +++ b/src/wl_window.c @@ -1925,6 +1925,9 @@ int _glfwPlatformCreateWindow(_GLFWwindow* window, if (!_glfwCreateContextOSMesa(window, ctxconfig, fbconfig)) return GLFW_FALSE; } + + if (!_glfwRefreshContextAttribs(window, ctxconfig)) + return GLFW_FALSE; } return GLFW_TRUE; diff --git a/src/x11_window.c b/src/x11_window.c index 331652ec3..ddda48d77 100644 --- a/src/x11_window.c +++ b/src/x11_window.c @@ -2013,6 +2013,9 @@ int _glfwPlatformCreateWindow(_GLFWwindow* window, if (!_glfwCreateContextOSMesa(window, ctxconfig, fbconfig)) return GLFW_FALSE; } + + if (!_glfwRefreshContextAttribs(window, ctxconfig)) + return GLFW_FALSE; } if (window->monitor) @@ -2020,6 +2023,18 @@ int _glfwPlatformCreateWindow(_GLFWwindow* window, _glfwPlatformShowWindow(window); updateWindowMode(window); acquireMonitor(window); + + if (wndconfig->centerCursor) + _glfwCenterCursorInContentArea(window); + } + else + { + if (wndconfig->visible) + { + _glfwPlatformShowWindow(window); + if (wndconfig->focused) + _glfwPlatformFocusWindow(window); + } } XFlush(_glfw.x11.display);