Dan*_*iel 5 c c++ x11 user-interface window
在调用之后XGrabKeyboard(),我的应用程序捕获并显示所有按键/释放按键,包括GUI和PrintScreen键.但是,用户无法再移动应用程序的窗口.到目前为止,这发生在Fedora 17和Ubuntu 12.04上.
如何让用户在受到影响的同时移动应用程序XGrabKeyboard()?
以下是我的Qt应用程序的示例代码:
bool KeyboardStatus::x11Event(XEvent *event) {
switch (event->type) {
case FocusIn:
XGrabKeyboard(x11Info().display(), winId(), false, GrabModeAsync, GrabModeAsync, CurrentTime);
break;
case FocusOut:
XUngrabKeyboard(x11Info().display(), CurrentTime);
break;
case KeyPress:
// Display which key was pressed to user
return true;
case KeyRelease:
// Display which key was released to user
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
将抓取语句从事件处理程序中取出并不能解决问题.这是一个示例项目,说明了问题:TestGrab.zip
我已经在 KDE、FVWM 和 GNOME(仅使用 Xlib)上尝试过了,只有 GNOME 窗口管理器有这个问题。
我认为可以通过拾取ConfigureNotify事件来修复它,但是当您尝试移动窗口时它不会生成。