X11 - 无法XGrabKeyboard后移动窗口(x11 - Unable to move w

2019-08-08 11:52发布

打完电话后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;
}

以抢出声明事件处理程序不解决问题。 这里是一个说明该问题的示例项目: TestGrab.zip

Answer 1:

我曾尝试在KDE,FVWM和GNOME(只用Xlib的),只有GNOME窗口管理器有这个问题。

我想这可能是可能拿起ConfigureNotify事件修复它,但是当你尝试移动窗口就不会产生。



Answer 2:

我也有类似的问题,XFCE在Cygwin。 这里的问题是与传递给XSelectInput输入掩码不足。 添加FocusChangeMask到KeyPressMask | KeyReleaseMask解决了这个问题。

再次,它帮助我解决了关于Xfce / cygwin的类似的问题。



文章来源: x11 - Unable to move window after XGrabKeyboard