python - 带有框的 pygtk 窗口忽略所有 X(鼠标)事件(通过它们)

标签 python pygtk x11 xlib wnck

我想执行以下操作:创建一个全屏,始终位于顶部的 pygtk 窗口,其中包含一个显示一些 html 的 webkit 小部件,但带有一个完全透明的框,以便下面的窗口可见。 (这似乎是可能的:Is it possible to render web content over a clear background using WebKit?)

我想要的是(有时)将透明框中发生的所有鼠标事件向下传递到应用程序窗口下方的窗口,以便我可以与它们正常交互。所以不仅在视觉上透明,而且对鼠标事件也是透明的。

理论上,我想我可以用 pygtk Eventbox 捕获我感兴趣的所有事件,用 wnck 找到我正下方的窗口,然后用 python-xlib 将这个事件传递给它。

这看起来并不是最优雅的解决方案;有没有更好的办法?

最佳答案

转发事件不会像你猜的那样正常工作;它会产生很多竞争条件,并且某些应用程序无论如何都会忽略来自 XSendEvent 的内容。

您可以做的是设置输入形状 mask 。参见 http://www.x.org/releases/current/doc/xextproto/shape.html然后查看 /usr/include/X11/extensions/Xfixes.h 中的 XFixesSetWindowShapeRegion(),它允许您指定形状“种类”(此处您需要 ShapeInput).

类似于:

XRectangle rect;
XserverRegion region = XFixesCreateRegion(display, &rect, 1);
XFixesSetWindowShapeRegion(display, window, ShapeInput, 0, 0, region);
XFixesDestroyRegion(display, region);

设置 ShapeInput 的功能“仅”存在 5-6 年,所以如果您关心非常糟糕的 X11 旧版本,您可能会被淘汰。

关于python - 带有框的 pygtk 窗口忽略所有 X(鼠标)事件(通过它们),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9046440/

相关文章:

python - 无法匹配的正则表达式(对于生成的表达式)

python - pygtk关于设置按钮敏感属性的奇怪问题

python - 在 Ubuntu 上用 Python 锁定 PC

c - 为纯 X11 应用程序向 Unity 的全局菜单栏添加项目

python - 有没有办法在其以前的版本中使用 Python 3.9 类型提示?

python - 使用 iterrows() 时的持久化问题

Python:为 csv.DictWriter 设置引号?

python - PyGTK如何单击按钮并在弹出窗口中打开文件

c++ - Tcl fileevent 在 64 位版本的 Tcl 上挂起

c - 为什么 XDrawString 不采用 "const char *"?