2010-12-23 5 views

Respuesta

4

Puede usar XQueryPointer() para obtener la posición del mouse. Luego, obtenga una lista de ventanas usando XQueryTree(). XQueryTree() devuelve la lista de ventanas en el orden z correcto para que pueda recorrer todas las ventanas hasta que encuentre una cuyo cuadro delimitador esté debajo del puntero, XGetWindowAttributes() le dará todo lo que necesita para descubrir el cuadro delimitador. Aunque no estoy seguro de qué harías con las ventanas en forma.

No he trabajado con X11 durante algunos años, así que esto podría ser un enfoque bastante torpe pero debería funcionar. Tampoco tengo mis libros O'Reilly X11, querrá poner sus manos en el libro una de esas series si va a trabajar con material de bajo nivel X11; Creo que toda la serie está disponible de forma gratuita en línea en estos días.

+0

por ejemplo aquí: http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51B_ACRO_SUP/XWINSYS.PDF –

+0

Estaba pensando en los libros de Adrian Nye (Manual de programación XLib, XLib Reference Manual) publicados por O'Reilly, esa serie fue mi biblia en mis días X11/Motif. –

3

No he programado X11 por más de una década, así que perdónenme si me equivoco.

Creo que puede registrarse para los eventos de movimiento del mouse en sus ventanas. Si maneja dicho evento almacenando el identificador de ventana en alguna variable u otra, y luego manejando el evento para que no se filtre por el árbol, entonces en el momento que quiera identificar la ventana puede simplemente consultar la variable.

Sin embargo, esto solo funcionará cuando el mouse esté sobre una ventana para la que haya registrado un controlador de eventos adecuado, por lo que no sabrá qué ventanas pertenecen a otras aplicaciones, a menos que haya una forma de registrarse para eventos de otras personas ventanas que pueden ser posibles.

La ventaja sobre la otra respuesta es que no tiene que atravesar todo el árbol. La desventaja es que debe manejar un gran número de eventos de movimiento del mouse, y puede que no funcione para encontrar las ventanas de otras personas.

Creo que también puede haber eventos de mouse mouse y mouse leave que reducirían la cantidad de procesamiento requerido.

Cuestiones relacionadas