GNOME 3桌面上的GLFW键输入

时间:2016-12-09 11:05:41

标签: x11 ubuntu-16.04 glfw gnome-3 keyboard-input

我在GNOME 3桌面上遇到GLFW3问题。 我已经在几台Linux机器上测试了这一点,包括全新安装的Ubuntu 16.04 LTS机器(使用Unity)。

每个GLFW3应用程序都会出现问题。 如果我按住任意键,则会发出正常键GLFW_PRESS,同时发出GLFW_REPEAT事件。

但是如果我释放密钥,则会发出一个GLFW_RELEASE事件,然后是另一个GLFW_PRESS(有时是多个GLFW_REPEAT)事件。

这是一个最小的例子:

#include <GLFW/glfw3.h>
#include <cstdio>

void glfw_key_callback(GLFWwindow* w, int key, int scancode, int action, int mods) {
    printf("win %p: key %d, scancode %d, action %d, mods %d\n", w, key, scancode, action, mods);
}

int main() {
    if (!glfwInit()) {
        printf("Failed to init glfw!\n");
        return 1;
    }

    GLFWwindow* window = glfwCreateWindow(800, 600, "Key input test", 0, 0);
    glfwMakeContextCurrent(window);

    glfwSetKeyCallback(window, glfw_key_callback);

    while (!glfwWindowShouldClose(window)) {
        glfwWaitEvents();

        glfwSwapBuffers(window);
    }

    return 0;
}

当我按住Space并在几秒钟后释放它时的示例输出:

win 0x104fb20: key 32, scancode 65, action 1, mods 0
win 0x104fb20: key 32, scancode 65, action 2, mods 0
...
win 0x104fb20: key 32, scancode 65, action 2, mods 0
win 0x104fb20: key 32, scancode 65, action 0, mods 0
win 0x104fb20: key 32, scancode 65, action 1, mods 0
win 0x104fb20: key 32, scancode 65, action 2, mods 0
win 0x104fb20: key 32, scancode 65, action 0, mods 0

我也尝试使用当前的GLFW3开发版本(来自https://github.com/glfw/glfw.git)编译和运行此程序,但结果相同。

然后我搜索了这个事件来自的glfw3源代码。 我在glfw3源x11_window.c中找到了XPending()调用。 但看起来这个添加事件是从X11系统发出的, 所以我不确定这是否是GLFW或X11问题?

在其他桌面环境中,例如Mate Desktop,一切正常。

0 个答案:

没有答案