xevent.xkey.keycode 不适合我 (X11)

xevent.xkey.keycode not working for me (X11)

所以我有这段代码运行良好

while(1) {
    XNextEvent(dpy,&e);
    paint(cs,g);
    if(e.xbutton.button == 1) {
        evolue(g,gc,cycleG);
        paint(cs,g);
        printf("test");
    }else if(e.xbutton.button==3) break ;
}

这里xbutton.button == 1是左键

我想更改代码,以便通过将其更改为

来通过键盘按下来执行该功能
while(1) {
    XNextEvent(dpy,&e);
    paint(cs,g);
    if(e.xkey.keycode == 54) {
        evolue(g,gc,cycleG);
        paint(cs,g);
        printf("test");
    }else if(e.xbutton.button==3) break ;
}

我在终端运行ning xev 得到了键码 54

所以从逻辑上讲,第二段代码应该可以工作,但 运行 if 语句中的代码与鼠标输入时不同。那么..什么给了?以及如何修复它接受键盘输入?

编辑: 为了进一步测试,我写了这段代码

while(1) {
    XNextEvent(dpy,&e);
    
    if(e.type == KeyPress){
        paint(cs,g);
        evolue(g,gc,cycleG);
    }
    
    if(e.type == ButtonPress){
        paint(cs,g);
        evolue(g,gc,cycleG);
    }
}

因此无论按下什么鼠标按钮,无论按下什么键盘键,它都会执行程序,但同样,只有鼠标按钮执行程序,而键盘键不执行程序。

问题出在上面选择输入类型的函数中,它是这样的

XSelectInput(dpy, win, ExposureMask|ButtonPressMask);

我改成了这个

XSelectInput(dpy, win, ExposureMask|ButtonPressMask|KeyPressMask);

这修复了它。