Xlib。 XGrabKeyを使用して1つを除くすべての修飾子を無視する方法は?

Xlib。 XGrabKeyを使用して1つを除くすべての修飾子を無視する方法は?

私は以下を持っています:

XGrabButton(display, XKeysymToKeycode(display, XK_C), Mod1Mask | KeyPressMask, window, false, GrabModeAsync, GrabModeAsync);

目的は、Alt + Shift + Cをキャプチャしてその組み合わせを使用してウィンドウを閉じることです。他の修飾子がアクティブでない場合は機能します。たとえば、CapsLock、NumLock、Ctrlなどがあります。

他のすべての修飾子を無視するようにどうすればわかりますか?

ベストアンサー1

私が見つけた最良のアプローチは、修飾子を完全に指定しないことです。代わりに、AnyModifier必要な修飾子がevent.stateXButtonEventで有効になっていることを確認してください。

XGrabKey(DISPLAY, XKeysymToKeycode(DISPLAY, XK_C), AnyModifier, frame, false, GrabModeAsync, GrabModeSync);

void WindowManager::OnKeyPress(const XKeyEvent& event)
{
    if(!(event.state & Mod1Mask))
    {
        return;
    }

    //Handle buttons...
}

おすすめ記事