Xlib. XGrabKey를 사용하여 하나만 제외한 모든 수정자를 무시하는 방법은 무엇입니까?

Xlib. XGrabKey를 사용하여 하나만 제외한 모든 수정자를 무시하는 방법은 무엇입니까?

나는 다음을 가지고 있습니다 :

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

관련 정보