6

を呼び出した後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

4

2 に答える 2

2

KDE、FVWM、および GNOME (Xlib のみを使用) でこれを試しましたが、この問題が発生するのは GNOME ウィンドウ マネージャーだけです。

ConfigureNotify イベントを取得することで修正できるのではないかと考えましたが、ウィンドウを移動しようとしても生成されません。

于 2013-02-12T11:04:55.737 に答える