diff --git a/src/linux_joystick.c b/src/linux_joystick.c index 360e7a28..156e425c 100644 --- a/src/linux_joystick.c +++ b/src/linux_joystick.c @@ -399,12 +399,24 @@ int _glfwPlatformPollJoystick(int jid, int mode) break; } + if (e.type == EV_SYN) + { + if (e.code == SYN_DROPPED) + _glfw.linjs.dropped = GLFW_TRUE; + else if (e.code == SYN_REPORT) + { + _glfw.linjs.dropped = GLFW_FALSE; + pollAbsState(js); + } + } + + if (_glfw.linjs.dropped) + continue; + if (e.type == EV_KEY) handleKeyEvent(js, e.code, e.value); else if (e.type == EV_ABS) handleAbsEvent(js, e.code, e.value); - else if (e.type == EV_SYN && e.code == SYN_DROPPED) - pollAbsState(js); } return js->present; diff --git a/src/linux_joystick.h b/src/linux_joystick.h index c364cf76..227a6ed9 100644 --- a/src/linux_joystick.h +++ b/src/linux_joystick.h @@ -50,6 +50,7 @@ typedef struct _GLFWlibraryLinux int inotify; int watch; regex_t regex; + GLFWbool dropped; } _GLFWlibraryLinux;