2011-03-22 10 views
6

FvwmButtons (un módulo del administrador de ventanas fvwm) tiene la función Swallow, que integra la ventana de una aplicación en un panel.Incrustar una aplicación en una ventana

Tengo que hacer algo como esto con Motif y Xlib. Quiero incrustar un Xclock en mi aplicación. Supongo que tengo que cambiar la identificación de la ventana de la aplicación integrada.

¿Cómo puedo hacer eso?

Respuesta

5

el único mecanismo compatible y confiable es XEmbed, pero requiere la aplicación integrada para cooperar. Sin una aplicación colaboradora, estás en un mundo de hacks de miedo.

Lo básico que necesita hacer es XReparentWindow() pero el problema es que está peleando contra el administrador de ventanas que también querrá reparar la ventana. También puede confundir la aplicación, que espera el comportamiento de ICCCM y EWMH, y espera que la ventana principal sea un marco de WM.

Las versiones realmente viejas de GNOME 1.x del panel gnome tenían una característica de tragar que podría tratar de robar.

Sin un conocimiento extenso de X esto será doloroso, e incluso con no es necesariamente posible hacer 100% confiable.

+0

¡Interesante! ¡Gracias! 'XReparentWindow()' es lo que quiero. Ahora necesito obtener la ventana correcta. Estoy intentando con 'XQueryTree()', pero no sé cómo obtener una ventana específica. – mghis

+1

para obtener una ventana específica, es probable que desee ver la sugerencia de clase (XGetClassHint). Puede ubicar las ventanas de niveles superiores (a diferencia de los marcos de administrador de ventanas) porque tienen la propiedad WM_STATE. –

2

Parece que está buscando el protocolo XEmbed, documentado here.

+0

Gracias, parece lo que necesito. Creo que puedo entender la especificación que vinculaste, pero me gustaría si puedes publicar algún código de ejemplo ... – mghis

Cuestiones relacionadas