リモート デスクトップ タイプのクライアントのすべてのキーボード イベントを取得しようとしています。ALT-Tab のようなものが Gnome3/KDE/Openbox/etc... デスクトップに引っかからないようにしたいので、アプリケーションでこれらすべてのイベントを取得し、他のアプリケーションでイベントを取得しないようにします。
私は現在このようなことをしています:
grabKeyboard() // qt function
Display *display = XOpenDisplay(NULL);
XGrabKeyboard(display, winId(), True, GrabModeAsync, GrabModeAsync, CurrentTime);
これは実際には ALT-Tab で問題なく動作するように見えますが、Openbox には、「デスクトップの表示」(ALT-CTRL-END) および「X のリセット」(CTRL-ALT-R) に定義された多数のキーボード ショートカットがあり、それらが引っかかります。オープンボックスによる。FreeRDP が次のようなことをしていることに気付きました。
int input_mask =
KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask |
VisibilityChangeMask | FocusChangeMask | StructureNotifyMask |
PointerMotionMask | ExposureMask | PropertyChangeMask;
XSelectInput(display, winId(), input_mask);
上記のコードに加えてそれを試しましたが、うまくいきません。
また、Remmina が gdk_device_grab を使用していることにも気付きましたが、私のアプリは GTK アプリケーションではないため、それを呼び出すことはできません。誰でも助けることができますか?