XCrossingEvent和x_root,y_root

时间:2014-09-28 19:28:11

标签: x11 xlib

我正在追逐一个我怀疑是我自己对X的误解的错误:

TL; DR - 有时XEnterNotify事件会使全局鼠标坐标与输入的窗口不对应。

我正在修改平铺窗口管理器(ratpoison)。屏幕被分成帧,每个帧可以包含映射窗口。如果一个框架没有窗口,我想要聚焦框架。所以我在根窗口上询问EnterNotify事件,将XEvent转换为XCrossingEvent,然后查看x_root和y_root以确定鼠标在屏幕上的位置。我希望获得全局屏幕坐标。问题是,有时当我将鼠标移到空框架上时,我在根窗口上得到一个EnterNotify事件,但事件的(x_root,y_root)成员在我来自的框架中给出一个点(即,不在根窗口的暴露部分。)

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我认为答案如下:

不保证鼠标坐标与特定的任何东西同步。唯一真正得到保证的是鼠标在这些坐标处的某一点,以及稍后的事件将具有稍后的鼠标位置。为了知道真正的鼠标位置,我要么需要在根窗口上听动作事件(这样我最终会得到我想要的信息),或者调用(可能)XQueryPointer()。

请注意,我并非100%肯定这个答案。