2012-01-28 9 views
5

Me gustaría hacer lo siguiente: Crear una pantalla completa, siempre en la ventana superior de pygtk con un widget webkit mostrando algunos html, pero con un recuadro eso es completamente transparente, por lo que las ventanas a continuación son visibles. (Esto parece posible: Is it possible to render web content over a clear background using WebKit?)ventana pygtk con recuadro que ignora todos los eventos X (mouse) (los pasa)

Lo que me gustaría es (a veces) pasar todos los eventos del mouse que aparecen en el cuadro transparente a las ventanas debajo de la ventana de mi aplicación, para que pueda interactuar con ellos normalmente . Así que no solo es visualmente transparente, sino que también es transparente para los eventos del mouse.

Teóricamente, supongo que podría ver todos los eventos que me interesan con un Eventbox pygtk, encontrar la ventana directamente debajo de la mía con wnck, y pasarle este evento con python-xlib.

Esto no parece exactamente la solución más elegante; hay una mejor manera?

Respuesta

5

El reenvío de los eventos no funcionará bien, como habrás adivinado; crea muchas condiciones de carrera, y algunas aplicaciones ignorarán cosas de XSendEvent de todos modos.

Lo que puede hacer es establecer la máscara de forma de entrada. Vea http://www.x.org/releases/current/doc/xextproto/shape.html y luego mire XFixesSetWindowShapeRegion() en /usr/include/X11/extensions/Xfixes.h que le permite especificar una forma "amable" (aquí quiere ShapeInput).

Algo así como:

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

La capacidad de establecer ShapeInput es "sólo" 5-6 años, así que si se preocupan por las versiones antiguas realmente horrible de X11, es posible que sea regado.

+0

¡Ah, gracias Havoc! – Rumex

+0

Además, al buscar en Google los términos correctos, me encontré con algo similar: http://stackoverflow.com/questions/4326534/x11-xlib-create-glasspane-window – Rumex

Cuestiones relacionadas