X11: Fix function returning before cleanup

The _glfwPlatformSetWindowFloating function would return without freeing
the state array if the window was already in the requested state.
This commit is contained in:
Camilla Löwy 2021-08-15 14:55:13 +02:00
parent 71829a0f0d
commit 071d7c0f46
2 changed files with 17 additions and 16 deletions

View File

@ -230,6 +230,7 @@ information on what to include when reporting a bug.
reported (#1112,#1415,#1472,#1616) reported (#1112,#1415,#1472,#1616)
- [X11] Bugfix: Some window attributes were not applied on leaving fullscreen - [X11] Bugfix: Some window attributes were not applied on leaving fullscreen
(#1863) (#1863)
- [X11] Bugfix: Changing `GLFW_FLOATING` could leak memory
- [Wayland] Added dynamic loading of all Wayland libraries - [Wayland] Added dynamic loading of all Wayland libraries
- [Wayland] Removed support for `wl_shell` (#1443) - [Wayland] Removed support for `wl_shell` (#1443)
- [Wayland] Bugfix: The `GLFW_HAND_CURSOR` shape used the wrong image (#1432) - [Wayland] Bugfix: The `GLFW_HAND_CURSOR` shape used the wrong image (#1432)

View File

@ -2671,15 +2671,15 @@ void _glfwPlatformSetWindowFloating(_GLFWwindow* window, GLFWbool enabled)
break; break;
} }
if (i < count) if (i == count)
return; {
XChangeProperty(_glfw.x11.display, window->x11.handle, XChangeProperty(_glfw.x11.display, window->x11.handle,
_glfw.x11.NET_WM_STATE, XA_ATOM, 32, _glfw.x11.NET_WM_STATE, XA_ATOM, 32,
PropModeAppend, PropModeAppend,
(unsigned char*) &_glfw.x11.NET_WM_STATE_ABOVE, (unsigned char*) &_glfw.x11.NET_WM_STATE_ABOVE,
1); 1);
} }
}
else if (states) else if (states)
{ {
for (i = 0; i < count; i++) for (i = 0; i < count; i++)
@ -2688,9 +2688,8 @@ void _glfwPlatformSetWindowFloating(_GLFWwindow* window, GLFWbool enabled)
break; break;
} }
if (i == count) if (i < count)
return; {
states[i] = states[count - 1]; states[i] = states[count - 1];
count--; count--;
@ -2698,6 +2697,7 @@ void _glfwPlatformSetWindowFloating(_GLFWwindow* window, GLFWbool enabled)
_glfw.x11.NET_WM_STATE, XA_ATOM, 32, _glfw.x11.NET_WM_STATE, XA_ATOM, 32,
PropModeReplace, (unsigned char*) states, count); PropModeReplace, (unsigned char*) states, count);
} }
}
if (states) if (states)
XFree(states); XFree(states);