我想执行以下操作:创建一个全屏,始终位于顶部的 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/