6

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

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

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

这似乎不是最优雅的解决方案。有没有更好的办法?

4

1 回答 1

6

转发事件不会像你猜想的那样好用;它创造了很多竞争条件,一些应用程序XSendEvent无论如何都会忽略一些东西。

您可以做的是设置输入形状掩码。请参阅http://www.x.org/releases/current/doc/xextproto/shape.htmlXFixesSetWindowShapeRegion(),然后查看/usr/include/X11/extensions/Xfixes.h其中允许您指定形状“种类”(在这里您想要ShapeInput)。

就像是:

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

设置的能力ShapeInput“仅”是 5-6 岁,所以如果你关心真正糟糕的 X11 旧版本,你可能会被淹没。

于 2012-02-14T15:41:27.150 回答