c - 在 XGrabKeyboard 之后无法移动窗口



调用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;
}

从事件处理程序中删除 grab 语句并不能解决问题。下面是一个说明问题的示例项目:TestGrab.zip

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

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

我在Cygwin上使用XFCE时遇到了类似的问题。这里的问题是传递给XSelectInput的输入掩码不足。将焦点更改掩码添加到按键掩码 |KeyReleaseMask解决了这个问题。

再一次,它帮助我解决了xfce/cygwin上的类似问题。

相关内容

  • 没有找到相关文章

最新更新