2011-02-27 25 views
7

¿Cómo el siguiente código elimina los bordes de la ventana?Xlib ¿Cómo funciona esto (quitar la decoración de la ventana)?

//note the struct is declared elsewhere, is here just for clarity. 
//code is from [http://tonyobryan.com/index.php?article=9][1] 
typedef struct Hints 
{ 
    unsigned long flags; 
    unsigned long functions; 
    unsigned long decorations; 
    long   inputMode; 
    unsigned long status; 
} Hints; 

//code to remove decoration 
Hints hints; 
Atom property; 
hints.flags = 2; 
hints.decorations = 0; 
property = XInternAtom(display, "_MOTIF_WM_HINTS", true); 
XChangeProperty(display,window,property,property,32,PropModeReplace,(unsigned char *)&hints,5); 
XMapWindow(display, window); 

Hasta ahora se han reunido de que un átomo es una especie de identificador similar al de Windows y pantalla, pero no puedo averiguar donde la estructura de pistas o los "_MOTIF_WM_HINTS" vinieron. ¿Alguien puede explicar todo este código por mí? Gracias de antemano, ell.

+0

¿Cuál es su fuente o su destino? http://tonyobryan.com/index.php?article=9 – xanatos

+0

Este es un pequeño fragmento de mi fuente. La estructura Sugerencia se declara en otro lugar, pero se muestra aquí para mayor claridad. Y he leído ese artículo, no explica la estructura de sugerencias ("Creo que esta estructura proviene de Motif, pero no estoy seguro" ...) – Ell

+0

Sí, en realidad no es mi fuente, buen punto. – Ell

Respuesta

9

Es difícil de encontrar cualquier tipo de norma -looking "oficial" o tal, pero el _MOTIF_WM_HINTS propiedad no parecen provenir de la caja de herramientas ... Motif (bueno, que adivinado que :-)). Ver the MotifZone site.

Advertencia: lo que sigue es incompleto, pero debería arrojar algo de luz, espero.

Documentación para los XmNmwmDecorations, XmNmwmFunctions y XmNmwmInputMode funciones del kit de herramientas indica que esa propiedad es una máscara de bits de diferentes valores utilizados para controlar la apariencia, funciones (tamaño, movimiento, ...) y de entrada de modo que el el administrador de ventanas debe proporcionar/dar a la ventana. Ver man vendorshell, o Oreilly Motif reference books, Vol6a chapter 16.

Las propiedades son parte de todo el X11. Una ventana puede tener cualquier cantidad de propiedades definidas en ella. Las propiedades tienen un nombre, pero la configuración/obtención de propiedades se realiza a través de un "átomo" (identificador de géneros) para evitar el envío de toda la cadena en el cable por cada llamada a get/set. Ver Properties and Atoms

El gestor de ventanas actualmente (si lo hay) puede reaccionar a propiedad de la ventana cambios ajustando el filtro de eventos proceda, en PropertyNotify eventos, o simplemente la inspección de las propiedades de la ventana tiene cuando se asigna (o movido , o lo que sea). Si el administrador de ventanas conoce la propiedad _MOTIF_WM_HINT, interpretará los y (con suerte) hará lo que quiera. (Nota:.. No estoy entierly seguro si ese privilegio recae en el administrador de ventanas , o si otras ventanas pueden escuchar esos eventos "PropertyNotify" No seguro de que es realmente relevante a su pregunta)

Así el código que tiene funciona bien siempre y cuando su administrador de ventanas conozca sobre la propiedad _MOTIF_WM_HINTS.

Se empieza por conseguir el átomo (identificador/acceso directo) para ello con XInternAtom, y estableciendo su valor a través de XChangeProperty() delante de la ventana está dibujado a través de MapWindow() (no estoy seguro si eso trabajo si hazlo después de MapWindow(), que podría depender del administrador de tu ventana ).

[Editar:. Ajuste de la parte .decorations a cero borra todos los bits de decoración, por lo que este pide que el gestor de ventanas dejar sus fronteras demonios solo, esencialmente]

no puedo llegar a alguna parte " oficial "con la definición de esa estructura. Se define en lib/X11/MwmUtils.h de la distribución openmotif-2.3.3. No estoy seguro de cómo se utiliza la entrada .flags (no puedo encontrar el código durante mi vida: - /) pero sospecho que se utiliza para indicar cuál de las {subconsideraciones {decoration, function, inputMode} "eres actuando. (No tome mi palabra para eso.)

Como nota al margen, el uso de _MOTIF_WM_HINTS podría no ser su mejor opción ahora . ¿Has mirado el Extended Window Manager hints specification y otra información/estándares/borradores en freedesktop? Apuesto a que la mayoría de los gestores de ventanas/entornos de escritorio/fregaderos de cocina "modernos" tenderán a adherirse a eso en lugar de mantener la compatibilidad con Motif. Todo depende de lo que estás codificando, supongo.

Gracias por leer :-)

+0

¡Gracias por todos estos consejos, y revisaré todos los enlaces que me diste! – Ell

+1

+1 muy buena explicación! – Venemo

Cuestiones relacionadas