diff --git a/src/wl_init.c b/src/wl_init.c index a4be0e8ce..833829c87 100644 --- a/src/wl_init.c +++ b/src/wl_init.c @@ -653,6 +653,23 @@ void _glfwPlatformTerminate(void) wl_display_flush(_glfw.wl.display); if (_glfw.wl.display) wl_display_disconnect(_glfw.wl.display); + + if (_glfw.wl.monitors) + { + int i; + for (i = 0; i < _glfw.wl.monitorsCount; ++i) + { + if (_glfw.wl.monitors[i]) + { + if (_glfw.wl.monitors[i]->wl.modes) + free(_glfw.wl.monitors[i]->wl.modes); + free(_glfw.wl.monitors[i]); + } + } + free(_glfw.wl.monitors); + } + + xkb_context_unref(_glfw.wl.xkb.context); } const char* _glfwPlatformGetVersionString(void) diff --git a/src/wl_monitor.c b/src/wl_monitor.c index d6a5a3f46..de70eb2bf 100644 --- a/src/wl_monitor.c +++ b/src/wl_monitor.c @@ -185,10 +185,9 @@ _GLFWmonitor** _glfwPlatformGetMonitors(int* count) _GLFWmonitor* origMonitor = _glfw.wl.monitors[i]; monitor = calloc(1, sizeof(_GLFWmonitor)); - monitor->modes = - _glfwPlatformGetVideoModes(origMonitor, - &origMonitor->wl.modesCount); *monitor = *_glfw.wl.monitors[i]; + monitor->modes = _glfwPlatformGetVideoModes(origMonitor, &origMonitor->wl.modesCount); + monitor->modeCount = origMonitor->wl.modesCount; monitors[i] = monitor; }