diff --git a/src/window.cpp b/src/window.cpp index fbdc67d2..c97217d8 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -129,28 +129,6 @@ void mouseButtonCallback(GLFWwindow *window, int button, int action, int mods) { } } -struct MouseButtonArguments { - GLFWwindow *window; - int button; - int action; - int mods; -}; - -static std::queue mouseButtonQueue; -void mouseButtonStickyPop() { - if (!mouseButtonQueue.empty()) { - MouseButtonArguments args = mouseButtonQueue.front(); - mouseButtonQueue.pop(); - mouseButtonCallback(args.window, args.button, args.action, args.mods); - } -} - -void mouseButtonStickyCallback(GLFWwindow *window, int button, int action, int mods) { - // Defer multiple clicks per frame to future frames - MouseButtonArguments args = {window, button, action, mods}; - mouseButtonQueue.push(args); -} - void cursorPosCallback(GLFWwindow* window, double xpos, double ypos) { Vec mousePos = Vec(xpos, ypos).div(gPixelRatio / gWindowRatio).round(); Vec mouseRel = mousePos.minus(gMousePos); @@ -280,11 +258,13 @@ void keyCallback(GLFWwindow *window, int key, int scancode, int action, int mods } // Keyboard MIDI driver - if (action == GLFW_PRESS) { - keyboardPress(key); - } - else if (action == GLFW_RELEASE) { - keyboardRelease(key); + if (!(mods & (GLFW_MOD_SHIFT | GLFW_MOD_CONTROL | GLFW_MOD_ALT | GLFW_MOD_SUPER))) { + if (action == GLFW_PRESS) { + keyboardPress(key); + } + else if (action == GLFW_RELEASE) { + keyboardRelease(key); + } } } @@ -353,10 +333,12 @@ void windowInit() { glfwSwapInterval(1); + glfwSetInputMode(gWindow, GLFW_STICKY_MOUSE_BUTTONS, 1); + glfwSetInputMode(gWindow, GLFW_STICKY_KEYS, 1); glfwSetInputMode(gWindow, GLFW_LOCK_KEY_MODS, 1); glfwSetWindowSizeCallback(gWindow, windowSizeCallback); - glfwSetMouseButtonCallback(gWindow, mouseButtonStickyCallback); + glfwSetMouseButtonCallback(gWindow, mouseButtonCallback); // Call this ourselves, but on every frame instead of only when the mouse moves // glfwSetCursorPosCallback(gWindow, cursorPosCallback); glfwSetCursorEnterCallback(gWindow, cursorEnterCallback); @@ -442,7 +424,6 @@ void windowRun() { glfwGetCursorPos(gWindow, &xpos, &ypos); cursorPosCallback(gWindow, xpos, ypos); } - mouseButtonStickyPop(); gamepadStep(); // Set window title