x11 - 无法在XGrabKeyboard后移动窗口 [英] x11 - Unable to move window after XGrabKeyboard

查看:631
本文介绍了x11 - 无法在XGrabKeyboard后移动窗口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

致电 XGrabKeyboard() ,我的应用程序捕获并显示所有按键/释放,包括GUI和PrintScreen键。 但是,用户无法再移动应用程序的窗口。到目前为止,这发生在Fedora 17和Ubuntu 12.04上。



如何我允许用户在受到

下面是我的Qt应用程序的示例代码: p>

  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:
//显示按下哪个键
return true;

case KeyRelease:
//显示哪个键被释放给用户
return true;
}

return false;
}

将grab语句移出事件处理程序并不能解决问题。以下是示例问题的示例项目: TestGrab.zip

解决方案

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

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


After calling XGrabKeyboard(), my application captures and displays all key presses / releases, including those for the GUI and PrintScreen keys. However, the user is no longer able to move the application's window. So far, this occurs on Fedora 17 and Ubuntu 12.04.

How can I allow the user to move the application while being under the effect of XGrabKeyboard()?

Below is sample code for my Qt application:

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

Taking the grab statement out of the event handler does not solve the issue. Here is a sample project which illustrates the problem: TestGrab.zip

解决方案

I have tried this on KDE, FVWM and GNOME (just using Xlib), and only the GNOME window manager has this problem.

I thought it might be possible to fix it by picking up the ConfigureNotify event, but it is not generated when you try to move the window.

这篇关于x11 - 无法在XGrabKeyboard后移动窗口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆