mirror of
https://github.com/glfw/glfw.git
synced 2024-11-10 00:51:47 +00:00
Fix GLFW_RESIZABLE on X11 when exiting full screen
The WM normal hints were set with the wrong window dimensions. Fixes #737.
This commit is contained in:
parent
3f25610d2f
commit
6fcedb5396
@ -209,7 +209,7 @@ static void sendEventToWM(_GLFWwindow* window, Atom type,
|
|||||||
|
|
||||||
// Updates the normal hints according to the window settings
|
// Updates the normal hints according to the window settings
|
||||||
//
|
//
|
||||||
static void updateNormalHints(_GLFWwindow* window)
|
static void updateNormalHints(_GLFWwindow* window, int width, int height)
|
||||||
{
|
{
|
||||||
XSizeHints* hints = XAllocSizeHints();
|
XSizeHints* hints = XAllocSizeHints();
|
||||||
|
|
||||||
@ -239,9 +239,6 @@ static void updateNormalHints(_GLFWwindow* window)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int width, height;
|
|
||||||
_glfwPlatformGetWindowSize(window, &width, &height);
|
|
||||||
|
|
||||||
hints->flags |= (PMinSize | PMaxSize);
|
hints->flags |= (PMinSize | PMaxSize);
|
||||||
hints->min_width = hints->max_width = width;
|
hints->min_width = hints->max_width = width;
|
||||||
hints->min_height = hints->max_height = height;
|
hints->min_height = hints->max_height = height;
|
||||||
@ -256,8 +253,6 @@ static void updateNormalHints(_GLFWwindow* window)
|
|||||||
//
|
//
|
||||||
static void updateWindowMode(_GLFWwindow* window)
|
static void updateWindowMode(_GLFWwindow* window)
|
||||||
{
|
{
|
||||||
updateNormalHints(window);
|
|
||||||
|
|
||||||
if (window->monitor)
|
if (window->monitor)
|
||||||
{
|
{
|
||||||
if (_glfw.x11.xinerama.available &&
|
if (_glfw.x11.xinerama.available &&
|
||||||
@ -556,7 +551,7 @@ static GLFWbool createWindow(_GLFWwindow* window,
|
|||||||
XFree(hints);
|
XFree(hints);
|
||||||
}
|
}
|
||||||
|
|
||||||
updateNormalHints(window);
|
updateNormalHints(window, wndconfig->width, wndconfig->height);
|
||||||
|
|
||||||
// Set ICCCM WM_CLASS property
|
// Set ICCCM WM_CLASS property
|
||||||
// HACK: Until a mechanism for specifying the application name is added, the
|
// HACK: Until a mechanism for specifying the application name is added, the
|
||||||
@ -1729,7 +1724,7 @@ void _glfwPlatformSetWindowSize(_GLFWwindow* window, int width, int height)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!window->resizable)
|
if (!window->resizable)
|
||||||
updateNormalHints(window);
|
updateNormalHints(window, width, height);
|
||||||
|
|
||||||
XResizeWindow(_glfw.x11.display, window->x11.handle, width, height);
|
XResizeWindow(_glfw.x11.display, window->x11.handle, width, height);
|
||||||
}
|
}
|
||||||
@ -1741,13 +1736,17 @@ void _glfwPlatformSetWindowSizeLimits(_GLFWwindow* window,
|
|||||||
int minwidth, int minheight,
|
int minwidth, int minheight,
|
||||||
int maxwidth, int maxheight)
|
int maxwidth, int maxheight)
|
||||||
{
|
{
|
||||||
updateNormalHints(window);
|
int width, height;
|
||||||
|
_glfwPlatformGetWindowSize(window, &width, &height);
|
||||||
|
updateNormalHints(window, width, height);
|
||||||
XFlush(_glfw.x11.display);
|
XFlush(_glfw.x11.display);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _glfwPlatformSetWindowAspectRatio(_GLFWwindow* window, int numer, int denom)
|
void _glfwPlatformSetWindowAspectRatio(_GLFWwindow* window, int numer, int denom)
|
||||||
{
|
{
|
||||||
updateNormalHints(window);
|
int width, height;
|
||||||
|
_glfwPlatformGetWindowSize(window, &width, &height);
|
||||||
|
updateNormalHints(window, width, height);
|
||||||
XFlush(_glfw.x11.display);
|
XFlush(_glfw.x11.display);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1943,6 +1942,7 @@ void _glfwPlatformSetWindowMonitor(_GLFWwindow* window,
|
|||||||
releaseMonitor(window);
|
releaseMonitor(window);
|
||||||
|
|
||||||
_glfwInputWindowMonitorChange(window, monitor);
|
_glfwInputWindowMonitorChange(window, monitor);
|
||||||
|
updateNormalHints(window, width, height);
|
||||||
updateWindowMode(window);
|
updateWindowMode(window);
|
||||||
|
|
||||||
if (window->monitor)
|
if (window->monitor)
|
||||||
|
Loading…
Reference in New Issue
Block a user