From 88f77629218c71b21cd8ce5cb74bc0a1b38ce1e6 Mon Sep 17 00:00:00 2001 From: Rafael Bordoni <49042948+eldskald@users.noreply.github.com> Date: Fri, 19 Apr 2024 10:17:22 -0300 Subject: [PATCH] Fix window not initializing on primary monitor on GLFW backend (#3923) The way the current code worked was by calling `GetCurrentMonitor()`, which would always return the monitor at position (0,0). This isn't the primary monitor on all platforms, on Linux in particular it isn't the case. This isn't the case on the SDL backend, after calling `InitWindow()` the window would always show up on the primary monitor. Even on the GLFW backend, if the full screen flag was set it would attempt to put it on the primary monitor as it would call `glfwGetPrimaryMonitor()` to do it, so for consistency's sake we should do it on windowed mode too. --- src/platforms/rcore_desktop.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/platforms/rcore_desktop.c b/src/platforms/rcore_desktop.c index 64e79c6dc..211a6cbb3 100644 --- a/src/platforms/rcore_desktop.c +++ b/src/platforms/rcore_desktop.c @@ -1518,10 +1518,16 @@ int InitPlatform(void) else { // Try to center window on screen but avoiding window-bar outside of screen - int posX = GetMonitorWidth(GetCurrentMonitor())/2 - CORE.Window.screen.width/2; - int posY = GetMonitorHeight(GetCurrentMonitor())/2 - CORE.Window.screen.height/2; - if (posX < 0) posX = 0; - if (posY < 0) posY = 0; + int monitorX = 0; + int monitorY = 0; + int monitorWidth = 0; + int monitorHeight = 0; + glfwGetMonitorWorkarea(monitor, &monitorX, &monitorY, &monitorWidth, &monitorHeight); + + int posX = monitorX + (monitorWidth - CORE.Window.screen.width)/2; + int posY = monitorY + (monitorHeight - CORE.Window.screen.height)/2; + if (posX < monitorX) posX = monitorX; + if (posY < monitorY) posY = monitorY; SetWindowPosition(posX, posY); }