Xlib鼠标事件和ButtonPressMask

3

我编写了一个简单的程序,用于报告特定窗口的按键按下和释放事件。在我的情况下,主要是终端,因为我从终端调用该程序。我能够获取发生在终端窗口中的按键按下和释放事件(我已经在终端上使用了XSelectInput()和KeyPressMask以及KeyReleaseMask),但是对于ButtonPress和ButtonRelease等任何与鼠标相关的事件都没有被报告。你有什么想法,为什么会出现这种情况?

#include
#include
#include
#include
#include
#include

int main() {
Display *display = XOpenDisplay(NULL);
KeySym k;
int revert_to;
Window window;
XEvent event;

XGetInputFocus(display, &window, &revert_to);
XSelectInput(display, window, KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask);

while(1)
{
XNextEvent(display,&event);
  switch (event.type) {

  case KeyPress : printf("Key Pressed\n"); break;
  case KeyRelease : printf("Key Released\n"); break;
  case ButtonPress : printf("Button Pressed\n"); break;
  case ButtonRelease : printf("Button Released\n"); break;
  case EnterNotify : printf("Enter\n"); break;
  }
}
XCloseDisplay(display);
return 0;
}

还忘了提到,如果我使用Xlib创建自己的窗口,鼠标事件是可以被报告的。这是否意味着XSelectInput不能与我所创建的未映射窗口一起使用? - user219849
请问您正在构建的最终目的是什么? - kazanaki
1个回答

1
你遇到的问题是Xlib只向一个客户端发送ButtonPress/Release事件。我认为你正在处理的窗口已经有一个客户端在监听它的鼠标事件。因此,你的SelectInput调用实际上没有设置ButtonPress/Release掩码,并生成了一个错误,而你没有检查这个错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接