BUGFIX: Issue #2137, moving (real) fullscreen windows between monitors. Using glfwGetMonitorFromWindow we can set the moving fullscreen window to the right values by setting the window monitor before invoking the callback. This should be platform indepent.

This commit is contained in:
Carsten Tewes 2022-11-20 20:35:14 +01:00
parent 47d2e58e48
commit a58d1bf3ef

View File

@ -76,10 +76,35 @@ void _glfwInputWindowFocus(_GLFWwindow* window, GLFWbool focused)
//
void _glfwInputWindowPos(_GLFWwindow* window, int x, int y)
{
assert(window != NULL);
GLFWmonitor* windowMon;
GLFWmonitor* detectedMon;
const GLFWvidmode* vidmode;
assert(window != NULL);
if (window->callbacks.pos)
window->callbacks.pos((GLFWwindow*) window, x, y);
windowMon = glfwGetWindowMonitor((GLFWwindow *) window);
if (windowMon != NULL)
{
// When windowMon != NULL, this is a fullscreen window.
// We then check if windowMon is really the monitor where
// the window is located and if not we set the monitor for
// that window to the other monitor including width, height
// and refreshrate. At last we simply set the position vars
// to 0, because the relative position of a fullscreen window
// content area moving from one monitor to another is always 0, 0
detectedMon = glfwGetMonitorFromWindow((GLFWwindow*) window);
if (detectedMon != NULL && windowMon != detectedMon)
{
vidmode = glfwGetVideoMode(detectedMon);
if (vidmode != NULL)
{
glfwSetWindowMonitor((GLFWwindow*) window, detectedMon, x = 0, y = 0, vidmode->width, vidmode->height, vidmode->refreshRate);
}
}
}
if (window->callbacks.pos)
window->callbacks.pos((GLFWwindow*) window, x, y);
}
// Notifies shared code that a window has been resized