![Xlib. XGrabKey를 사용하여 하나만 제외한 모든 수정자를 무시하는 방법은 무엇입니까?](https://linux55.com/image/210721/Xlib.%20XGrabKey%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%95%98%EB%82%98%EB%A7%8C%20%EC%A0%9C%EC%99%B8%ED%95%9C%20%EB%AA%A8%EB%93%A0%20%EC%88%98%EC%A0%95%EC%9E%90%EB%A5%BC%20%EB%AC%B4%EC%8B%9C%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
나는 다음을 가지고 있습니다 :
XGrabButton(display, XKeysymToKeycode(display, XK_C), Mod1Mask | KeyPressMask, window, false, GrabModeAsync, GrabModeAsync);
목표는 Alt+Shift+C를 캡처하여 해당 조합을 사용하여 창을 닫는 것입니다. 다른 수정자가 활성화되어 있지 않으면 작동합니다. 예를 들어 CapsLock, NumLock, Ctrl 등이 있습니다.
다른 모든 수정자를 무시하도록 어떻게 알 수 있습니까?
답변1
내가 찾은 가장 좋은 접근 방식은 수정자를 완전히 지정하지 않는 것입니다. 대신, AnyModifier
필요한 수정자가 event.state
XButtonEvent에서 활성화되어 있는지 확인합니다.
XGrabKey(DISPLAY, XKeysymToKeycode(DISPLAY, XK_C), AnyModifier, frame, false, GrabModeAsync, GrabModeSync);
void WindowManager::OnKeyPress(const XKeyEvent& event)
{
if(!(event.state & Mod1Mask))
{
return;
}
//Handle buttons...
}