From 2df97e309b328e9f123802d3c34900aa86e75efb Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 24 Apr 2019 06:25:00 +0530 Subject: [PATCH] X11 backend: Dispatch X11 events after XFlush --- glfw/x11_window.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/glfw/x11_window.c b/glfw/x11_window.c index 957c97df1..bcde9842f 100644 --- a/glfw/x11_window.c +++ b/glfw/x11_window.c @@ -2497,6 +2497,19 @@ void _glfwPlatformSetWindowOpacity(_GLFWwindow* window, float opacity) PropModeReplace, (unsigned char*) &value, 1); } +static inline GLFWbool +dispatch_x11_queued_events(void) { + GLFWbool dispatched = GLFW_FALSE; + while (XQLength(_glfw.x11.display) > 0) + { + XEvent event; + XNextEvent(_glfw.x11.display, &event); + processEvent(&event); + dispatched = GLFW_TRUE; + } + return dispatched; +} + GLFWbool _glfwDispatchX11Events(void) { _GLFWwindow* window; @@ -2506,14 +2519,7 @@ _glfwDispatchX11Events(void) { _glfwDetectJoystickConnectionLinux(); #endif XPending(_glfw.x11.display); - - while (XQLength(_glfw.x11.display)) - { - XEvent event; - XNextEvent(_glfw.x11.display, &event); - processEvent(&event); - dispatched = GLFW_TRUE; - } + if (dispatch_x11_queued_events()) dispatched = GLFW_TRUE; window = _glfw.x11.disabledCursorWindow; if (window) @@ -2531,6 +2537,8 @@ _glfwDispatchX11Events(void) { } XFlush(_glfw.x11.display); + // XFlush can cause events to be queued + if (dispatch_x11_queued_events()) dispatched = GLFW_TRUE; return dispatched; }