x11 - XGrabKeyboard后无法移动窗口

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

par*_*ydr 1

我已经在 KDE、FVWM 和 GNOME(仅使用 Xlib)上尝试过了,只有 GNOME 窗口管理器有这个问题。

我认为可以通过拾取ConfigureNotify事件来修复它,但是当您尝试移动窗口时它不会生成。