2012-06-05 16 views
5

Tengo un NSWindow que me gustaría tenerlo en frente de todo (todas las aplicaciones de la computadora, aplicaciones de pantalla completa, etc.). Incluso si hago clic en una aplicación de fondo, el NSWindow no puede pasar a segundo plano. Y el NSWindow debe seguir la pantalla del usuario si, por ejemplo, el usuario cambia el escritorio a escritorio2, y así sucesivamente ... ¿Cómo puedo hacer eso?
Gracias!¿Cómo forzar a NSWindow a estar frente a cada aplicación? Incluso las aplicaciones de pantalla completa

Respuesta

9

Si no necesita ser visible con las ventanas de pantalla completa de otras aplicaciones, no es demasiado difícil.

Primero, para permanecer al frente de todo lo demás, simplemente configureLevel: con NSFloatingWindowLevel o superior. Experimenta con los diferentes valores para ver lo que parece apropiado para tus necesidades.

A continuación, para mantenerse al frente incluso cuando el usuario cambie Espacios, incluyendo posiblemente Exposé/Mission Control, setCollectionBehavior: con el par de banderas apropiado, o use los espacios correspondientes y la configuración Exposé en el Inspector de Atributos si está creando la ventana en la punta. O bien, puede unirse a todos los espacios o moverse a Active Space se asegurará de que permanezca visible en cada espacio, de maneras ligeramente diferentes. Probablemente querrá Exposé configurado en estacionario, o posiblemente también transitorio. De nuevo, prueba las dos formas y mira.

Sin embargo, Lion ocultará ventanas de todos los espacios y de movimiento a espacio activo cuando el usuario cambie a un espacio de pantalla completa o al Panel o Launchpad. Y si observas, verás que lo hace de diferentes maneras para cada uno de los tres casos. Y ese Snow Leopard hace las cosas un poco diferente, y también lo hace Mountain Lion.

Si quiere resolver ese último problema, necesita un poco de hackers y diferentes formas de piratería para cada caso y para cada versión del sistema operativo. El truco básico es atrapar las notificaciones relacionadas con la piel y mostrarse en el momento apropiado.

+1

¡Muchas gracias! Establecí el nivel en NSFloatingWindowLevel, Spaces: se puede unir a todos los espacios y Exposé: Transient Behavior y funciona como yo quería. NSWindow me sigue a todos lados. ¡Gracias! –

+0

Una última reflexión: puede ser más apropiado utilizar un NSPanel en lugar de una NSWindow (y posiblemente utilizar setFloatingPanel: YES en lugar de setLevel: NSFloatingWindowLevel). – abarnert

4

Debe modificar su info.plist y establecer el indicador de Aplicación es agente en SÍ. La ventana de un agente se puede mostrar frente a las ventanas de pantalla completa.

Cuestiones relacionadas