我有以下内容:
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...
}