【问题标题】:How to disable the automatic middle-click mouse events in X (Xlib)?如何禁用 X (Xlib) 中的自动鼠标中键事件?
【发布时间】:2011-07-29 01:09:41
【问题描述】:

我目前正在使用 C 在 X11 中实现一个程序。我让该程序处理右键和左键单击事件,但是中键单击会产生问题。似乎我的窗口管理器(Ubuntu 9.10 上的 Gnome)认为最好不要单击中键,而是应该进行一系列其他单击。我认为这与用于复制粘贴的中键单击有关。不过,我真的不想要这个,因为我正在使用 OpenGL 制作一个全屏应用程序,而这样的事情是不合适的。有没有办法让鼠标中键像其他按钮一样工作?

我当前的代码是这样的:

switch(currentXEvent.type) {
    case ButtonPress:
        switch(currentXEvent.xbutton.button) {
            case 1:
                leftMouseButton(currentXEvent.xbutton.x, currentXEvent.xbutton.y);
                break;
            case 2:
                middleMouseButton(currentXEvent.xbutton.x, currentXEvent.xbutton.y);
                break;
        }
}

我的困难在于它的行为就像 leftMouseButton() 已被按下。有什么想法吗?

【问题讨论】:

    标签: linux mouseevent x11


    【解决方案1】:

    为此,您必须从服务器获取控件。然后窗口管理器被排除在处理链之外。最舒服的方式是使用libSDL。它为全屏 OpenGL 应用程序创建适当的上下文,并且比 Xlib+GLX 更易于处理。

    【讨论】:

    • 感谢您的回复。考虑到大多数使用 X 的代码已经编写完毕,我不希望添加另一个库。我想知道如何获取控件。我以前做过这样的调用: XGrabKeyboard(display, window, true, GrabModeAsync, GrabModeAsync, CurrentTime); XGrabPointer(display, window, true, mask, GrabModeAsync, GrabModeAsync, window, None, CurrentTime);还有什么我需要补充的吗?
    • 看起来不错。我没有看到任何其他需要,只需确保您的 event_mask 设置正确。如有疑问,您可能会通过查看 libSDL 代码找到更多提示。我没有自己动手,所以这是我能提供的所有帮助。 p.s.:如果你喜欢我的回答,你应该给它一个upvote。您是 stackoverflow 的新手,这就是我告诉您的原因 - 投票是使 stackoverflow 工作的重要因素。
    • 它不会让我投票(我太新了),但感谢您的回复。你是对的,它几乎按照我的方式工作,如果我需要,libSDL 代码将拥有其余部分。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多