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

相关内容